diff --git a/CHANGELOG.md b/CHANGELOG.md index 56c7cc7..5ff3a15 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,13 @@ All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines. +### [6.0.6](https://github.com/mailjet/mailjet-apiv3-nodejs/compare/v6.0.5...v6.0.6) (2024-09-02) + + +### Bug Fixes + +* upgrade axios version to fix CVE-2023-26159 ([6342638](https://github.com/mailjet/mailjet-apiv3-nodejs/commits/6342638c9dd6fcd8e62a071b60fe8aefc7d7ca5c)) + ### [6.0.5](https://github.com/mailjet/mailjet-apiv3-nodejs/compare/v6.0.4...v6.0.5) (2023-11-27) diff --git a/README.md b/README.md index 6cb2de5..d85db17 100644 --- a/README.md +++ b/README.md @@ -10,7 +10,7 @@ # Mailjet JS [![Build Status](https://travis-ci.org/mailjet/mailjet-apiv3-nodejs.svg?branch=master)](https://travis-ci.org/mailjet/mailjet-apiv3-nodejs) -![Current Version](https://img.shields.io/badge/version-6.0.5-green.svg) +![Current Version](https://img.shields.io/badge/version-6.0.6-green.svg) ## Overview diff --git a/dist/CHANGELOG.md b/dist/CHANGELOG.md index 56c7cc7..5ff3a15 100644 --- a/dist/CHANGELOG.md +++ b/dist/CHANGELOG.md @@ -2,6 +2,13 @@ All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines. +### [6.0.6](https://github.com/mailjet/mailjet-apiv3-nodejs/compare/v6.0.5...v6.0.6) (2024-09-02) + + +### Bug Fixes + +* upgrade axios version to fix CVE-2023-26159 ([6342638](https://github.com/mailjet/mailjet-apiv3-nodejs/commits/6342638c9dd6fcd8e62a071b60fe8aefc7d7ca5c)) + ### [6.0.5](https://github.com/mailjet/mailjet-apiv3-nodejs/compare/v6.0.4...v6.0.5) (2023-11-27) diff --git a/dist/README.md b/dist/README.md index 6cb2de5..d85db17 100644 --- a/dist/README.md +++ b/dist/README.md @@ -10,7 +10,7 @@ # Mailjet JS [![Build Status](https://travis-ci.org/mailjet/mailjet-apiv3-nodejs.svg?branch=master)](https://travis-ci.org/mailjet/mailjet-apiv3-nodejs) -![Current Version](https://img.shields.io/badge/version-6.0.5-green.svg) +![Current Version](https://img.shields.io/badge/version-6.0.6-green.svg) ## Overview diff --git a/dist/VERSION.md b/dist/VERSION.md index 81f0c27..e873808 100644 --- a/dist/VERSION.md +++ b/dist/VERSION.md @@ -1 +1 @@ -6.0.5 \ No newline at end of file +6.0.6 \ No newline at end of file diff --git a/dist/mailjet.node.js b/dist/mailjet.node.js index 89f2710..849d503 100644 --- a/dist/mailjet.node.js +++ b/dist/mailjet.node.js @@ -1,3 +1,3 @@ /*! For license information please see mailjet.node.js.LICENSE.txt */ -!function(e,a){"object"==typeof exports&&"object"==typeof module?module.exports=a():"function"==typeof define&&define.amd?define([],a):"object"==typeof exports?exports.mailjet=a():e.mailjet=a()}(this,(()=>{return e={9118:(e,a,n)=>{e.exports={parallel:n(9162),serial:n(1357),serialOrdered:n(9087)}},7651:e=>{function a(e){"function"==typeof this.jobs[e]&&this.jobs[e]()}e.exports=function(e){Object.keys(e.jobs).forEach(a.bind(e)),e.jobs={}}},5912:(e,a,n)=>{var i=n(9265);e.exports=function(e){var a=!1;return i((function(){a=!0})),function(n,o){a?e(n,o):i((function(){e(n,o)}))}}},9265:e=>{e.exports=function(e){var a="function"==typeof setImmediate?setImmediate:"object"==typeof process&&"function"==typeof process.nextTick?process.nextTick:null;a?a(e):setTimeout(e,0)}},7594:(e,a,n)=>{var i=n(5912),o=n(7651);e.exports=function(e,a,n,t){var s=n.keyedList?n.keyedList[n.index]:n.index;n.jobs[s]=function(e,a,n,o){return 2==e.length?e(n,i(o)):e(n,a,i(o))}(a,s,e[s],(function(e,a){s in n.jobs&&(delete n.jobs[s],e?o(n):n.results[s]=a,t(e,n.results))}))}},4528:e=>{e.exports=function(e,a){var n=!Array.isArray(e),i={index:0,keyedList:n||a?Object.keys(e):null,jobs:{},results:n?{}:[],size:n?Object.keys(e).length:e.length};return a&&i.keyedList.sort(n?a:function(n,i){return a(e[n],e[i])}),i}},5353:(e,a,n)=>{var i=n(7651),o=n(5912);e.exports=function(e){Object.keys(this.jobs).length&&(this.index=this.size,i(this),o(e)(null,this.results))}},9162:(e,a,n)=>{var i=n(7594),o=n(4528),t=n(5353);e.exports=function(e,a,n){for(var s=o(e);s.index<(s.keyedList||e).length;)i(e,a,s,(function(e,a){e?n(e,a):0!==Object.keys(s.jobs).length||n(null,s.results)})),s.index++;return t.bind(s,n)}},1357:(e,a,n)=>{var i=n(9087);e.exports=function(e,a,n){return i(e,a,null,n)}},9087:(e,a,n)=>{var i=n(7594),o=n(4528),t=n(5353);function s(e,a){return ea?1:0}e.exports=function(e,a,n,s){var r=o(e,n);return i(e,a,r,(function n(o,t){o?s(o,t):(r.index++,r.index<(r.keyedList||e).length?i(e,a,r,n):s(null,r.results))})),t.bind(r,s)},e.exports.ascending=s,e.exports.descending=function(e,a){return-1*s(e,a)}},1076:function(e,a,n){"use strict";function i(e){return i="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},i(e)}var o=this&&this.__assign||function(){return o=Object.assign||function(e){for(var a,n=1,i=arguments.length;n{"use strict";var n;Object.defineProperty(a,"__esModule",{value:!0}),function(e){e.Get="get",e.Post="post",e.Put="put",e.Delete="delete"}(n||(n={})),a.default=n},4771:function(e,a,n){"use strict";function i(e){return i="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},i(e)}var o=this&&this.__assign||function(){return o=Object.assign||function(e){for(var a,n=1,i=arguments.length;n0&&o[o.length-1])||6!==t[0]&&2!==t[0])){s=0;continue}if(3===t[0]&&(!o||t[1]>o[0]&&t[1]-1?"text/plain":"application/json"},e.prototype.getRequestBody=function(e){return[x.default.Put,x.default.Post,x.default.Delete].includes(this.method)?e:void 0},e.prototype.buildFullUrl=function(){var a,n,i=this.client.getConfig(),o=null!==(a=this.config.host)&&void 0!==a?a:i.host,t=null!==(n=this.config.version)&&void 0!==n?n:i.version;return(0,u.default)(e.protocol,o,t,this.subPath,this.url)},e.prototype.buildSubPath=function(){if(this.actionPath){var e="contactslist"===this.resource&&"csvdata/text:plain"===this.actionPath,a="batchjob"===this.resource&&"csverror/text:csv"===this.actionPath;return e||a?"DATA":this.subPath}var n="send"===this.resource,i=this.resource.indexOf("sms")>-1;return n||i?"":"REST"},e.prototype.makeRequest=function(a,n,i){var t,s={url:a,params:i,data:this.getRequestBody(n),method:this.method,responseType:"json",headers:{"User-Agent":this.getUserAgent(),"Content-Type":this.getContentType(a)},transformResponse:function(a){var n="string"==typeof a,i="json"===this.responseType;return a&&n&&i?e.parseToJSONb(a):a}};e.isBrowser()&&(s.headers["X-User-Agent"]=s.headers["User-Agent"]);var r=this.getCredentials();r.apiToken?s.headers.Authorization="Bearer ".concat(r.apiToken):s.auth={username:r.apiKey,password:r.apiSecret};var c=this.client.getConfig(),p=this.client.getOptions();p.timeout&&(s.timeout=p.timeout),p.proxy&&(s.proxy=p.proxy),p.headers&&Object.keys(p.headers).length>0&&(s.headers=o(o({},s.headers),p.headers));var l=null!==(t=this.config.output)&&void 0!==t?t:c.output;return l&&(s.responseType=l),p.maxBodyLength&&(s.maxBodyLength=p.maxBodyLength),p.maxContentLength&&(s.maxContentLength=p.maxContentLength),(0,m.default)(s)},e.prototype.setBaseURL=function(e){return this.url=e.toLowerCase(),this},e.prototype.id=function(e){if(!["string","number"].includes(i(e)))throw new Error('Argument "value" must be string or number');return this.url=(0,u.default)(this.url,e.toString()),this},e.prototype.action=function(e){if("string"!=typeof e)throw new Error('Argument "name" must be string');switch(this.actionPath=e.toLowerCase(),this.actionPath){case"csvdata":this.actionPath="csvdata/text:plain";break;case"csverror":this.actionPath="csverror/text:csv"}return this.url=(0,u.default)(this.url,this.actionPath),this.subPath=this.buildSubPath(),this},e.prototype.request=function(e,a,n){var i,o,t,s,r;return void 0===e&&(e={}),void 0===a&&(a={}),void 0===n&&(n=!0),c(this,void 0,void 0,(function(){var c,l,u,d,x,v,h,b,g,y;return p(this,(function(p){switch(p.label){case 0:if(c=this.buildFullUrl(),this.setBaseURL(this.resource),!n)return[2,{body:b=this.getRequestBody(e),params:a,url:c}];p.label=1;case 1:return p.trys.push([1,3,,4]),[4,this.makeRequest(c,e,a)];case 2:return[2,{response:l=p.sent(),body:l.data}];case 3:if((u=p.sent())instanceof m.AxiosError)throw(d=new Error).code=u.code,d.config=u.config,u.response?(x=u.response,v=x.status,h=x.statusText,b=x.data,d.response=u.response,d.statusCode=v,d.statusText=h,g=null!==(i=null==b?void 0:b.ErrorMessage)&&void 0!==i?i:u.message,d.originalMessage=g,d.message='Unsuccessful: Status Code: "'.concat(d.statusCode,'" Message: "').concat(g,'"'),b&&("string"==typeof(y=null===(r=null===(s=null===(t=null===(o=b.Messages)||void 0===o?void 0:o[0])||void 0===t?void 0:t.Errors)||void 0===s?void 0:s[0])||void 0===r?void 0:r.ErrorMessage)&&(d.message+=";\n".concat(y)),(0,f.setValueIfNotNil)(d,"ErrorMessage",b.ErrorMessage),(0,f.setValueIfNotNil)(d,"ErrorCode",b.ErrorCode),(0,f.setValueIfNotNil)(d,"ErrorIdentifier",b.ErrorIdentifier),(0,f.setValueIfNotNil)(d,"ErrorRelatedTo",b.ErrorRelatedTo))):(d.response=null,d.statusCode=null,d.statusText=null,d.originalMessage=u.message,d.message='Unsuccessful: Error Code: "'.concat(d.code,'" Message: "').concat(u.message,'"')),d;throw u;case 4:return[2]}}))}))},e.parseToJSONb=function(e){if("string"!=typeof e)throw new Error('Argument "text" must be string');var a;try{a=h.parse(e)}catch(e){a={}}return a},e.isBrowser=function(){return"object"===("undefined"==typeof window?"undefined":i(window))},e.protocol="https://",e}();a.default=b},5917:(e,a)=>{"use strict";Object.defineProperty(a,"__esModule",{value:!0}),a.SentCampaign=a.DraftCampaign=void 0,function(e){!function(e){e.Tool2="tool2",e.HTML2="html2",e.MJML="mjml"}(e.EditMode||(e.EditMode={})),function(e){e[e.AXCanceled=-3]="AXCanceled",e[e.Deleted=-2]="Deleted",e[e.Archived=-1]="Archived",e[e.Draft=0]="Draft",e[e.Programmed=1]="Programmed",e[e.Sent=2]="Sent",e[e.AXTested=3]="AXTested",e[e.AXSelected=4]="AXSelected"}(e.CampaignDraftStatus||(e.CampaignDraftStatus={})),function(e){e.AXCancelled="AXCancelled",e.Deleted="Deleted",e.Archived="Archived",e.Draft="Draft",e.Programmed="Programmed",e.Sent="Sent",e.AXTested="AXTested",e.AXSelected="AXSelected"}(e.CampaignDraftSendingStatus||(e.CampaignDraftSendingStatus={}))}(a.DraftCampaign||(a.DraftCampaign={})),function(e){!function(e){e[e.Transactional=1]="Transactional",e[e.Marketing=2]="Marketing",e[e.Unknown=3]="Unknown"}(e.CampaignType||(e.CampaignType={}))}(a.SentCampaign||(a.SentCampaign={}))},7566:(e,a)=>{"use strict";Object.defineProperty(a,"__esModule",{value:!0}),a.Common=void 0,function(e){!function(e){e.Day="Day",e.Week="Week",e.Month="Month",e.Year="Year"}(e.Period||(e.Period={}))}(a.Common||(a.Common={}))},235:(e,a)=>{"use strict";Object.defineProperty(a,"__esModule",{value:!0}),a.ContactProperties=a.BulkContactManagement=void 0,function(e){!function(e){e.AddForce="addforce",e.AddNoForce="addnoforce",e.Remove="remove",e.UnSub="unsub"}(e.ManageContactsAction||(e.ManageContactsAction={})),function(e){e.AddForce="addforce",e.AddNoForce="addnoforce",e.UnSub="unsub",e.DuplicateOverride="duplicate-override",e.DuplicateNoOverride="duplicate-no-override"}(e.ImportListAction||(e.ImportListAction={})),function(e){e.AddForce="addforce",e.AddNoForce="addnoforce",e.Remove="remove",e.UnSub="unsub",e.ExcludeMarketing="excludemarketing",e.IncludeMarketing="includemarketing"}(e.ImportCSVMethod||(e.ImportCSVMethod={})),function(e){e.Upload="Upload",e.Completed="Completed",e.Abort="Abort"}(e.CSVImportStatus||(e.CSVImportStatus={})),function(e){e.Completed="Completed",e.InProgress="In Progress",e.Error="Error"}(e.JobStatus||(e.JobStatus={}))}(a.BulkContactManagement||(a.BulkContactManagement={})),function(e){!function(e){e.Str="str",e.Int="int",e.Float="float",e.Bool="bool",e.DateTime="datetime"}(e.DataType||(e.DataType={})),function(e){e.Static="static",e.Historic="historic"}(e.NameSpace||(e.NameSpace={}))}(a.ContactProperties||(a.ContactProperties={}))},8354:(e,a)=>{"use strict";Object.defineProperty(a,"__esModule",{value:!0}),a.Message=void 0,function(e){!function(e){e[e.UserUnknown=1]="UserUnknown",e[e.MailboxInactive=2]="MailboxInactive",e[e.QuotaExceeded=3]="QuotaExceeded",e[e.InvalidDomain=4]="InvalidDomain",e[e.NoMailHost=5]="NoMailHost",e[e.RelayOrAccessDenied=6]="RelayOrAccessDenied",e[e.SenderBlocked=7]="SenderBlocked",e[e.ContentBlocked=8]="ContentBlocked",e[e.PolicyIssue=9]="PolicyIssue",e[e.SystemIssue=10]="SystemIssue",e[e.ProtocolIssue=11]="ProtocolIssue",e[e.ConnectionIssue=12]="ConnectionIssue",e[e.GreyListed=13]="GreyListed",e[e.PreBlocked=14]="PreBlocked",e[e.DuplicateInCampaign=15]="DuplicateInCampaign",e[e.SpamPreBlocked=16]="SpamPreBlocked",e[e.BadOrEmptyTemplate=17]="BadOrEmptyTemplate",e[e.ErrorInTemplateLanguage=18]="ErrorInTemplateLanguage",e[e.TypoFix=19]="TypoFix",e[e.BlackListed=20]="BlackListed",e[e.SpamReporter=21]="SpamReporter"}(e.MessageState||(e.MessageState={})),function(e){e[e.Transactional=1]="Transactional",e[e.Marketing=2]="Marketing",e[e.Unknown=3]="Unknown"}(e.FromType||(e.FromType={})),function(e){e[e.Processed=0]="Processed",e[e.Queued=1]="Queued",e[e.Sent=2]="Sent",e[e.Opened=3]="Opened",e[e.Clicked=4]="Clicked",e[e.Bounce=5]="Bounce",e[e.Spam=6]="Spam",e[e.Unsub=7]="Unsub",e[e.Blocked=8]="Blocked",e[e.SoftBounce=9]="SoftBounce",e[e.HardBounce=10]="HardBounce",e[e.Deferred=11]="Deferred"}(e.MessageStatus||(e.MessageStatus={})),function(e){e.Unknown="unknown",e.Queued="queued",e.Sent="sent",e.Opened="opened",e.Clicked="clicked",e.Bounce="bounce",e.Spam="spam",e.Unsub="unsub",e.Blocked="blocked",e.HardBounced="hardbounced",e.SoftBounced="softbounced",e.Deferred="deferred"}(e.CurrentMessageStatus||(e.CurrentMessageStatus={})),function(e){e.Sent="sent",e.Opened="opened",e.Clicked="clicked",e.Bounced="bounced",e.Blocked="blocked",e.Unsub="unsub",e.Spam="spam"}(e.EventType||(e.EventType={}))}(a.Message||(a.Message={}))},3635:(e,a)=>{"use strict";Object.defineProperty(a,"__esModule",{value:!0}),a.Segmentation=void 0,function(e){!function(e){e.Used="used",e.UnUsed="unused",e.Deleted="deleted"}(e.SegmentStatus||(e.SegmentStatus={}))}(a.Segmentation||(a.Segmentation={}))},7410:(e,a)=>{"use strict";Object.defineProperty(a,"__esModule",{value:!0}),a.SendEmailV3_1=void 0,function(e){!function(e){e.AccountDefault="account_default",e.Disabled="disabled",e.Enabled="enabled"}(e.TrackOpens||(e.TrackOpens={})),function(e){e.AccountDefault="account_default",e.Disabled="disabled",e.Enabled="enabled"}(e.TrackClicks||(e.TrackClicks={})),function(e){e.Success="success",e.Error="error"}(e.ResponseStatus||(e.ResponseStatus={}))}(a.SendEmailV3_1||(a.SendEmailV3_1={}))},2256:(e,a)=>{"use strict";Object.defineProperty(a,"__esModule",{value:!0}),a.DNS=a.Sender=void 0,function(e){!function(e){e.Transactional="transactional",e.Bulk="bulk",e.Unknown="unknown"}(e.EmailType||(e.EmailType={})),function(e){e.Inactive="Inactive",e.Active="Active",e.Deleted="Deleted"}(e.SenderStatus||(e.SenderStatus={}))}(a.Sender||(a.Sender={})),function(e){!function(e){e.OK="OK",e.Error="Error",e.NotChecked="Not checked"}(e.DKIMConfigurationCheckStatus||(e.DKIMConfigurationCheckStatus={})),function(e){e.OK="OK",e.Error="Error"}(e.DKIMConfigurationStatus||(e.DKIMConfigurationStatus={})),function(e){e.OK="OK",e.Error="Error",e.NotChecked="Not checked",e.NotFound="Not found"}(e.SPFConfigurationCheckStatus||(e.SPFConfigurationCheckStatus={})),function(e){e.OK="OK",e.Error="Error"}(e.SPFConfigurationStatus||(e.SPFConfigurationStatus={}))}(a.DNS||(a.DNS={}))},5295:(e,a)=>{"use strict";Object.defineProperty(a,"__esModule",{value:!0}),a.APIKeyConfiguration=void 0,function(e){!function(e){e.Normal="Normal",e.SoftLock="Softlock",e.HardLock="Hardlock"}(e.RunLevel||(e.RunLevel={}))}(a.APIKeyConfiguration||(a.APIKeyConfiguration={}))},6083:(e,a)=>{"use strict";Object.defineProperty(a,"__esModule",{value:!0}),a.Statistic=void 0,function(e){!function(e){e.SentCampaign="Campaign",e.ABTesting="AX",e.Draft="NL"}(e.CampaignOverviewIDType||(e.CampaignOverviewIDType={})),function(e){e.Tool="tool",e.HTML="html",e.Tool2="tool2",e.HTML2="html2",e.MJML="mjml"}(e.CampaignOverviewEditMode||(e.CampaignOverviewEditMode={})),function(e){e.Full="full",e.Unknown="unknown"}(e.CampaignOverviewEditType||(e.CampaignOverviewEditType={})),function(e){e.Campaign="Campaign",e.APIKey="APIKey",e.List="List",e.Sender="Sender"}(e.CounterSource||(e.CounterSource={})),function(e){e.Highest="Highest",e.Hour="Hour",e.Day="Day",e.Lifetime="Lifetime"}(e.CounterResolution||(e.CounterResolution={})),function(e){e.Message="Message",e.Event="Event"}(e.CounterTiming||(e.CounterTiming={})),function(e){e.Open="open",e.Click="click"}(e.EmailEvent||(e.EmailEvent={}))}(a.Statistic||(a.Statistic={}))},4098:(e,a)=>{"use strict";Object.defineProperty(a,"__esModule",{value:!0}),a.Template=void 0,function(e){!function(e){e.Full="full",e.Basic="basic",e.NewsLetter="newsletter",e.ECommerce="e-commerce",e.Events="events",e.Travel="travel",e.Sports="sports",e.Welcome="welcome",e.ContactPropertyUpdate="contact-property-update",e.Support="support",e.Invoice="invoice",e.Anniversary="anniversary",e.Account="account",e.Activation="activation"}(e.Categories||(e.Categories={})),function(e){e.ContainsAny="containsany",e.ContainsAll="containsall",e.IsSubSet="issubset"}(e.CategoriesSelectionMethod||(e.CategoriesSelectionMethod={})),function(e){e[e.DragAndDropBuilder=1]="DragAndDropBuilder",e[e.HTMLBuilder=2]="HTMLBuilder",e[e.SavedSectionBuilder=3]="SavedSectionBuilder",e[e.MJMLBuilder=4]="MJMLBuilder"}(e.EditMode||(e.EditMode={})),function(e){e.ApiKey="apikey",e.User="user",e.Global="global"}(e.OwnerType||(e.OwnerType={})),function(e){e.Marketing="marketing",e.Transactional="transactional",e.Automation="automation"}(e.Purposes||(e.Purposes={})),function(e){e.ContainsAny="containsany",e.ContainsAll="containsall",e.IsSubSet="issubset"}(e.PurposesSelectionMethod||(e.PurposesSelectionMethod={}))}(a.Template||(a.Template={}))},1174:(e,a)=>{"use strict";Object.defineProperty(a,"__esModule",{value:!0}),a.Webhook=void 0,function(e){!function(e){e.Open="open",e.Click="click",e.Bounce="bounce",e.Spam="spam",e.Blocked="blocked",e.UnSub="unsub",e.Sent="sent"}(e.EventType||(e.EventType={})),function(e){e[e.Click=1]="Click",e[e.Bounce=2]="Bounce",e[e.Spam=3]="Spam",e[e.Blocked=4]="Blocked",e[e.Unsubscribe=5]="Unsubscribe",e[e.Open=6]="Open",e[e.Sent=7]="Sent"}(e.EventTypeValue||(e.EventTypeValue={})),function(e){e.Dead="dead",e.Alive="alive"}(e.Status||(e.Status={}))}(a.Webhook||(a.Webhook={}))},4310:(e,a,n)=>{"use strict";Object.defineProperty(a,"__esModule",{value:!0}),a.APIKeyConfiguration=a.DNS=a.Sender=a.Webhook=a.Statistic=a.Template=a.Segmentation=a.SentCampaign=a.DraftCampaign=a.ContactProperties=a.BulkContactManagement=a.Message=a.SendEmailV3_1=a.Common=void 0;var i=n(7566);Object.defineProperty(a,"Common",{enumerable:!0,get:function(){return i.Common}});var o=n(7410);Object.defineProperty(a,"SendEmailV3_1",{enumerable:!0,get:function(){return o.SendEmailV3_1}});var t=n(8354);Object.defineProperty(a,"Message",{enumerable:!0,get:function(){return t.Message}});var s=n(235);Object.defineProperty(a,"BulkContactManagement",{enumerable:!0,get:function(){return s.BulkContactManagement}}),Object.defineProperty(a,"ContactProperties",{enumerable:!0,get:function(){return s.ContactProperties}});var r=n(5917);Object.defineProperty(a,"DraftCampaign",{enumerable:!0,get:function(){return r.DraftCampaign}}),Object.defineProperty(a,"SentCampaign",{enumerable:!0,get:function(){return r.SentCampaign}});var c=n(3635);Object.defineProperty(a,"Segmentation",{enumerable:!0,get:function(){return c.Segmentation}});var p=n(4098);Object.defineProperty(a,"Template",{enumerable:!0,get:function(){return p.Template}});var l=n(6083);Object.defineProperty(a,"Statistic",{enumerable:!0,get:function(){return l.Statistic}});var u=n(1174);Object.defineProperty(a,"Webhook",{enumerable:!0,get:function(){return u.Webhook}});var d=n(2256);Object.defineProperty(a,"Sender",{enumerable:!0,get:function(){return d.Sender}}),Object.defineProperty(a,"DNS",{enumerable:!0,get:function(){return d.DNS}});var m=n(5295);Object.defineProperty(a,"APIKeyConfiguration",{enumerable:!0,get:function(){return m.APIKeyConfiguration}})},9006:function(e,a,n){"use strict";var i=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(a,"__esModule",{value:!0}),a.setValueIfNotNil=a.isPureObject=a.isUndefined=a.isNull=a.isNil=void 0;var o=i(n(1808));a.isNil=o.default;var t=i(n(7376));a.isNull=t.default;var s=i(n(5034));a.isUndefined=s.default;var r=i(n(1818));a.isPureObject=r.default;var c=i(n(1190));a.setValueIfNotNil=c.default},1808:function(e,a,n){"use strict";var i=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(a,"__esModule",{value:!0});var o=i(n(7376)),t=i(n(5034));a.default=function(e){return(0,t.default)(e)||(0,o.default)(e)}},7376:(e,a)=>{"use strict";Object.defineProperty(a,"__esModule",{value:!0}),a.default=function(e){return null===e}},1818:(e,a)=>{"use strict";function n(e){return n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},n(e)}Object.defineProperty(a,"__esModule",{value:!0}),a.default=function(e){return"object"===n(e)&&null!==e&&(Object.getPrototypeOf(e)===Object.prototype||null===Object.getPrototypeOf(e))}},5034:(e,a)=>{"use strict";Object.defineProperty(a,"__esModule",{value:!0}),a.default=function(e){return void 0===e}},1190:function(e,a,n){"use strict";function i(e){return i="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},i(e)}var o=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(a,"__esModule",{value:!0});var t=o(n(1808)),s=o(n(7376));a.default=function(e,a,n){if("object"!==i(e)||(0,s.default)(e))throw Error('Argument "targetObject" is not object');if(!a)throw Error('Argument "path" is required');(0,t.default)(n)||(e[a]=n)}},4431:function(e,a,n){var i;!function(o){"use strict";var t,s=/^-?(?:\d+(?:\.\d*)?|\.\d+)(?:e[+-]?\d+)?$/i,r=Math.ceil,c=Math.floor,p="[BigNumber Error] ",l=p+"Number primitive has more than 15 significant digits: ",u=1e14,d=14,m=9007199254740991,f=[1,10,100,1e3,1e4,1e5,1e6,1e7,1e8,1e9,1e10,1e11,1e12,1e13],x=1e7,v=1e9;function h(e){var a=0|e;return e>0||e===a?a:a-1}function b(e){for(var a,n,i=1,o=e.length,t=e[0]+"";ip^n?1:-1;for(r=(c=o.length)<(p=t.length)?c:p,s=0;st[s]^n?1:-1;return c==p?0:c>p^n?1:-1}function y(e,a,n,i){if(en||e!==c(e))throw Error(p+(i||"Argument")+("number"==typeof e?en?" out of range: ":" not an integer: ":" not a primitive number: ")+String(e))}function w(e){var a=e.c.length-1;return h(e.e/d)==a&&e.c[a]%2!=0}function k(e,a){return(e.length>1?e.charAt(0)+"."+e.slice(1):e)+(a<0?"e":"e+")+a}function j(e,a,n){var i,o;if(a<0){for(o=n+".";++a;o+=n);e=o+e}else if(++a>(i=e.length)){for(o=n,a-=i;--a;o+=n);e+=o}else az?h.c=h.e=null:e.e=10;u/=10,p++);return void(p>z?h.c=h.e=null:(h.e=p,h.c=[e]))}v=String(e)}else{if(!s.test(v=String(e)))return o(h,v,f);h.s=45==v.charCodeAt(0)?(v=v.slice(1),-1):1}(p=v.indexOf("."))>-1&&(v=v.replace(".","")),(u=v.search(/e/i))>0?(p<0&&(p=u),p+=+v.slice(u+1),v=v.substring(0,u)):p<0&&(p=v.length)}else{if(y(a,2,I.length,"Base"),10==a)return G(h=new H(e),P+h.e+1,B);if(v=String(e),f="number"==typeof e){if(0*e!=0)return o(h,v,f,a);if(h.s=1/e<0?(v=v.slice(1),-1):1,H.DEBUG&&v.replace(/^0\.0*|\./,"").length>15)throw Error(l+e)}else h.s=45===v.charCodeAt(0)?(v=v.slice(1),-1):1;for(n=I.slice(0,a),p=u=0,x=v.length;up){p=x;continue}}else if(!r&&(v==v.toUpperCase()&&(v=v.toLowerCase())||v==v.toLowerCase()&&(v=v.toUpperCase()))){r=!0,u=-1,p=0;continue}return o(h,String(e),f,a)}f=!1,(p=(v=i(v,a,10,h.s)).indexOf("."))>-1?v=v.replace(".",""):p=v.length}for(u=0;48===v.charCodeAt(u);u++);for(x=v.length;48===v.charCodeAt(--x););if(v=v.slice(u,++x)){if(x-=u,f&&H.DEBUG&&x>15&&(e>m||e!==c(e)))throw Error(l+h.s*e);if((p=p-u-1)>z)h.c=h.e=null;else if(p=F)?k(c,s):j(c,s,"0");else if(t=(e=G(new H(e),a,n)).e,r=(c=b(e.c)).length,1==i||2==i&&(a<=t||t<=N)){for(;rr){if(--a>0)for(c+=".";a--;c+="0");}else if((a+=t-r)>0)for(t+1==r&&(c+=".");a--;c+="0");return e.s<0&&o?"-"+c:c}function V(e,a){for(var n,i=1,o=new H(e[0]);i=10;o/=10,i++);return(n=i+n*d-1)>z?e.c=e.e=null:n=10;p/=10,o++);if((t=a-o)<0)t+=d,s=a,x=(l=v[m=0])/h[o-s-1]%10|0;else if((m=r((t+1)/d))>=v.length){if(!i)break e;for(;v.length<=m;v.push(0));l=x=0,o=1,s=(t%=d)-d+1}else{for(l=p=v[m],o=1;p>=10;p/=10,o++);x=(s=(t%=d)-d+o)<0?0:l/h[o-s-1]%10|0}if(i=i||a<0||null!=v[m+1]||(s<0?l:l%h[o-s-1]),i=n<4?(x||i)&&(0==n||n==(e.s<0?3:2)):x>5||5==x&&(4==n||i||6==n&&(t>0?s>0?l/h[o-s]:0:v[m-1])%10&1||n==(e.s<0?8:7)),a<1||!v[0])return v.length=0,i?(a-=e.e+1,v[0]=h[(d-a%d)%d],e.e=-a||0):v[0]=e.e=0,e;if(0==t?(v.length=m,p=1,m--):(v.length=m+1,p=h[d-t],v[m]=s>0?c(l/h[o-s]%h[s])*p:0),i)for(;;){if(0==m){for(t=1,s=v[0];s>=10;s/=10,t++);for(s=v[0]+=p,p=1;s>=10;s/=10,p++);t!=p&&(e.e++,v[0]==u&&(v[0]=1));break}if(v[m]+=p,v[m]!=u)break;v[m--]=0,p=1}for(t=v.length;0===v[--t];v.pop());}e.e>z?e.c=e.e=null:e.e=F?k(a,n):j(a,n,"0"),e.s<0?"-"+a:a)}return H.clone=e,H.ROUND_UP=0,H.ROUND_DOWN=1,H.ROUND_CEIL=2,H.ROUND_FLOOR=3,H.ROUND_HALF_UP=4,H.ROUND_HALF_DOWN=5,H.ROUND_HALF_EVEN=6,H.ROUND_HALF_CEIL=7,H.ROUND_HALF_FLOOR=8,H.EUCLID=9,H.config=H.set=function(e){var a,n;if(null!=e){if("object"!=typeof e)throw Error(p+"Object expected: "+e);if(e.hasOwnProperty(a="DECIMAL_PLACES")&&(y(n=e[a],0,v,a),P=n),e.hasOwnProperty(a="ROUNDING_MODE")&&(y(n=e[a],0,8,a),B=n),e.hasOwnProperty(a="EXPONENTIAL_AT")&&((n=e[a])&&n.pop?(y(n[0],-v,0,a),y(n[1],0,v,a),N=n[0],F=n[1]):(y(n,-v,v,a),N=-(F=n<0?-n:n))),e.hasOwnProperty(a="RANGE"))if((n=e[a])&&n.pop)y(n[0],-v,-1,a),y(n[1],1,v,a),L=n[0],z=n[1];else{if(y(n,-v,v,a),!n)throw Error(p+a+" cannot be zero: "+n);L=-(z=n<0?-n:n)}if(e.hasOwnProperty(a="CRYPTO")){if((n=e[a])!==!!n)throw Error(p+a+" not true or false: "+n);if(n){if("undefined"==typeof crypto||!crypto||!crypto.getRandomValues&&!crypto.randomBytes)throw D=!n,Error(p+"crypto unavailable");D=n}else D=n}if(e.hasOwnProperty(a="MODULO_MODE")&&(y(n=e[a],0,9,a),U=n),e.hasOwnProperty(a="POW_PRECISION")&&(y(n=e[a],0,v,a),M=n),e.hasOwnProperty(a="FORMAT")){if("object"!=typeof(n=e[a]))throw Error(p+a+" not an object: "+n);q=n}if(e.hasOwnProperty(a="ALPHABET")){if("string"!=typeof(n=e[a])||/^.?$|[+\-.\s]|(.).*\1/.test(n))throw Error(p+a+" invalid: "+n);I=n}}return{DECIMAL_PLACES:P,ROUNDING_MODE:B,EXPONENTIAL_AT:[N,F],RANGE:[L,z],CRYPTO:D,MODULO_MODE:U,POW_PRECISION:M,FORMAT:q,ALPHABET:I}},H.isBigNumber=function(e){if(!e||!0!==e._isBigNumber)return!1;if(!H.DEBUG)return!0;var a,n,i=e.c,o=e.e,t=e.s;e:if("[object Array]"=={}.toString.call(i)){if((1===t||-1===t)&&o>=-v&&o<=v&&o===c(o)){if(0===i[0]){if(0===o&&1===i.length)return!0;break e}if((a=(o+1)%d)<1&&(a+=d),String(i[0]).length==a){for(a=0;a=u||n!==c(n))break e;if(0!==n)return!0}}}else if(null===i&&null===o&&(null===t||1===t||-1===t))return!0;throw Error(p+"Invalid BigNumber: "+e)},H.maximum=H.max=function(){return V(arguments,T.lt)},H.minimum=H.min=function(){return V(arguments,T.gt)},H.random=(t=9007199254740992,_=Math.random()*t&2097151?function(){return c(Math.random()*t)}:function(){return 8388608*(1073741824*Math.random()|0)+(8388608*Math.random()|0)},function(e){var a,n,i,o,t,s=0,l=[],u=new H(R);if(null==e?e=P:y(e,0,v),o=r(e/d),D)if(crypto.getRandomValues){for(a=crypto.getRandomValues(new Uint32Array(o*=2));s>>11))>=9e15?(n=crypto.getRandomValues(new Uint32Array(2)),a[s]=n[0],a[s+1]=n[1]):(l.push(t%1e14),s+=2);s=o/2}else{if(!crypto.randomBytes)throw D=!1,Error(p+"crypto unavailable");for(a=crypto.randomBytes(o*=7);s=9e15?crypto.randomBytes(7).copy(a,s):(l.push(t%1e14),s+=7);s=o/7}if(!D)for(;s=10;t/=10,s++);sn-1&&(null==s[o+1]&&(s[o+1]=0),s[o+1]+=s[o]/n|0,s[o]%=n)}return s.reverse()}return function(i,o,t,s,r){var c,p,l,u,d,m,f,x,v=i.indexOf("."),h=P,g=B;for(v>=0&&(u=M,M=0,i=i.replace(".",""),m=(x=new H(o)).pow(i.length-v),M=u,x.c=a(j(b(m.c),m.e,"0"),10,t,e),x.e=x.c.length),l=u=(f=a(i,o,t,r?(c=I,e):(c=e,I))).length;0==f[--u];f.pop());if(!f[0])return c.charAt(0);if(v<0?--l:(m.c=f,m.e=l,m.s=s,f=(m=n(m,x,h,g,t)).c,d=m.r,l=m.e),v=f[p=l+h+1],u=t/2,d=d||p<0||null!=f[p+1],d=g<4?(null!=v||d)&&(0==g||g==(m.s<0?3:2)):v>u||v==u&&(4==g||d||6==g&&1&f[p-1]||g==(m.s<0?8:7)),p<1||!f[0])i=d?j(c.charAt(1),-h,c.charAt(0)):c.charAt(0);else{if(f.length=p,d)for(--t;++f[--p]>t;)f[p]=0,p||(++l,f=[1].concat(f));for(u=f.length;!f[--u];);for(v=0,i="";v<=u;i+=c.charAt(f[v++]));i=j(i,l,c.charAt(0))}return i}}(),n=function(){function e(e,a,n){var i,o,t,s,r=0,c=e.length,p=a%x,l=a/x|0;for(e=e.slice();c--;)r=((o=p*(t=e[c]%x)+(i=l*t+(s=e[c]/x|0)*p)%x*x+r)/n|0)+(i/x|0)+l*s,e[c]=o%n;return r&&(e=[r].concat(e)),e}function a(e,a,n,i){var o,t;if(n!=i)t=n>i?1:-1;else for(o=t=0;oa[o]?1:-1;break}return t}function n(e,a,n,i){for(var o=0;n--;)e[n]-=o,o=e[n]1;e.splice(0,1));}return function(i,o,t,s,r){var p,l,m,f,x,v,b,g,y,w,k,j,_,S,C,E,O,A=i.s==o.s?1:-1,T=i.c,R=o.c;if(!(T&&T[0]&&R&&R[0]))return new H(i.s&&o.s&&(T?!R||T[0]!=R[0]:R)?T&&0==T[0]||!R?0*A:A/0:NaN);for(y=(g=new H(A)).c=[],A=t+(l=i.e-o.e)+1,r||(r=u,l=h(i.e/d)-h(o.e/d),A=A/d|0),m=0;R[m]==(T[m]||0);m++);if(R[m]>(T[m]||0)&&l--,A<0)y.push(1),f=!0;else{for(S=T.length,E=R.length,m=0,A+=2,(x=c(r/(R[0]+1)))>1&&(R=e(R,x,r),T=e(T,x,r),E=R.length,S=T.length),_=E,k=(w=T.slice(0,E)).length;k=r/2&&C++;do{if(x=0,(p=a(R,w,E,k))<0){if(j=w[0],E!=k&&(j=j*r+(w[1]||0)),(x=c(j/C))>1)for(x>=r&&(x=r-1),b=(v=e(R,x,r)).length,k=w.length;1==a(v,w,b,k);)x--,n(v,E=10;A/=10,m++);G(g,t+(g.e=m+l*d-1)+1,s,f)}else g.e=l,g.r=+f;return g}}(),S=/^(-?)0([xbo])(?=\w[\w.]*$)/i,C=/^([^.]+)\.$/,E=/^\.([^.]+)$/,O=/^-?(Infinity|NaN)$/,A=/^\s*\+(?=[\w.])|^\s+|\s+$/g,o=function(e,a,n,i){var o,t=n?a:a.replace(A,"");if(O.test(t))e.s=isNaN(t)?null:t<0?-1:1;else{if(!n&&(t=t.replace(S,(function(e,a,n){return o="x"==(n=n.toLowerCase())?16:"b"==n?2:8,i&&i!=o?e:a})),i&&(o=i,t=t.replace(C,"$1").replace(E,"0.$1")),a!=t))return new H(t,o);if(H.DEBUG)throw Error(p+"Not a"+(i?" base "+i:"")+" number: "+a);e.s=null}e.c=e.e=null},T.absoluteValue=T.abs=function(){var e=new H(this);return e.s<0&&(e.s=1),e},T.comparedTo=function(e,a){return g(this,new H(e,a))},T.decimalPlaces=T.dp=function(e,a){var n,i,o,t=this;if(null!=e)return y(e,0,v),null==a?a=B:y(a,0,8),G(new H(t),e+t.e+1,a);if(!(n=t.c))return null;if(i=((o=n.length-1)-h(this.e/d))*d,o=n[o])for(;o%10==0;o/=10,i--);return i<0&&(i=0),i},T.dividedBy=T.div=function(e,a){return n(this,new H(e,a),P,B)},T.dividedToIntegerBy=T.idiv=function(e,a){return n(this,new H(e,a),0,1)},T.exponentiatedBy=T.pow=function(e,a){var n,i,o,t,s,l,u,m,f=this;if((e=new H(e)).c&&!e.isInteger())throw Error(p+"Exponent not an integer: "+W(e));if(null!=a&&(a=new H(a)),s=e.e>14,!f.c||!f.c[0]||1==f.c[0]&&!f.e&&1==f.c.length||!e.c||!e.c[0])return m=new H(Math.pow(+W(f),s?2-w(e):+W(e))),a?m.mod(a):m;if(l=e.s<0,a){if(a.c?!a.c[0]:!a.s)return new H(NaN);(i=!l&&f.isInteger()&&a.isInteger())&&(f=f.mod(a))}else{if(e.e>9&&(f.e>0||f.e<-1||(0==f.e?f.c[0]>1||s&&f.c[1]>=24e7:f.c[0]<8e13||s&&f.c[0]<=9999975e7)))return t=f.s<0&&w(e)?-0:0,f.e>-1&&(t=1/t),new H(l?1/t:t);M&&(t=r(M/d+2))}for(s?(n=new H(.5),l&&(e.s=1),u=w(e)):u=(o=Math.abs(+W(e)))%2,m=new H(R);;){if(u){if(!(m=m.times(f)).c)break;t?m.c.length>t&&(m.c.length=t):i&&(m=m.mod(a))}if(o){if(0===(o=c(o/2)))break;u=o%2}else if(G(e=e.times(n),e.e+1,1),e.e>14)u=w(e);else{if(0==(o=+W(e)))break;u=o%2}f=f.times(f),t?f.c&&f.c.length>t&&(f.c.length=t):i&&(f=f.mod(a))}return i?m:(l&&(m=R.div(m)),a?m.mod(a):t?G(m,M,B,void 0):m)},T.integerValue=function(e){var a=new H(this);return null==e?e=B:y(e,0,8),G(a,a.e+1,e)},T.isEqualTo=T.eq=function(e,a){return 0===g(this,new H(e,a))},T.isFinite=function(){return!!this.c},T.isGreaterThan=T.gt=function(e,a){return g(this,new H(e,a))>0},T.isGreaterThanOrEqualTo=T.gte=function(e,a){return 1===(a=g(this,new H(e,a)))||0===a},T.isInteger=function(){return!!this.c&&h(this.e/d)>this.c.length-2},T.isLessThan=T.lt=function(e,a){return g(this,new H(e,a))<0},T.isLessThanOrEqualTo=T.lte=function(e,a){return-1===(a=g(this,new H(e,a)))||0===a},T.isNaN=function(){return!this.s},T.isNegative=function(){return this.s<0},T.isPositive=function(){return this.s>0},T.isZero=function(){return!!this.c&&0==this.c[0]},T.minus=function(e,a){var n,i,o,t,s=this,r=s.s;if(a=(e=new H(e,a)).s,!r||!a)return new H(NaN);if(r!=a)return e.s=-a,s.plus(e);var c=s.e/d,p=e.e/d,l=s.c,m=e.c;if(!c||!p){if(!l||!m)return l?(e.s=-a,e):new H(m?s:NaN);if(!l[0]||!m[0])return m[0]?(e.s=-a,e):new H(l[0]?s:3==B?-0:0)}if(c=h(c),p=h(p),l=l.slice(),r=c-p){for((t=r<0)?(r=-r,o=l):(p=c,o=m),o.reverse(),a=r;a--;o.push(0));o.reverse()}else for(i=(t=(r=l.length)<(a=m.length))?r:a,r=a=0;a0)for(;a--;l[n++]=0);for(a=u-1;i>r;){if(l[--i]=0;){for(n=0,f=j[o]%y,v=j[o]/y|0,t=o+(s=c);t>o;)n=((p=f*(p=k[--s]%y)+(r=v*p+(l=k[s]/y|0)*f)%y*y+b[t]+n)/g|0)+(r/y|0)+v*l,b[t--]=p%g;b[t]=n}return n?++i:b.splice(0,1),$(e,b,i)},T.negated=function(){var e=new H(this);return e.s=-e.s||null,e},T.plus=function(e,a){var n,i=this,o=i.s;if(a=(e=new H(e,a)).s,!o||!a)return new H(NaN);if(o!=a)return e.s=-a,i.minus(e);var t=i.e/d,s=e.e/d,r=i.c,c=e.c;if(!t||!s){if(!r||!c)return new H(o/0);if(!r[0]||!c[0])return c[0]?e:new H(r[0]?i:0*o)}if(t=h(t),s=h(s),r=r.slice(),o=t-s){for(o>0?(s=t,n=c):(o=-o,n=r),n.reverse();o--;n.push(0));n.reverse()}for((o=r.length)-(a=c.length)<0&&(n=c,c=r,r=n,a=o),o=0;a;)o=(r[--a]=r[a]+c[a]+o)/u|0,r[a]=u===r[a]?0:r[a]%u;return o&&(r=[o].concat(r),++s),$(e,r,s)},T.precision=T.sd=function(e,a){var n,i,o,t=this;if(null!=e&&e!==!!e)return y(e,1,v),null==a?a=B:y(a,0,8),G(new H(t),e,a);if(!(n=t.c))return null;if(i=(o=n.length-1)*d+1,o=n[o]){for(;o%10==0;o/=10,i--);for(o=n[0];o>=10;o/=10,i++);}return e&&t.e+1>i&&(i=t.e+1),i},T.shiftedBy=function(e){return y(e,-9007199254740991,m),this.times("1e"+e)},T.squareRoot=T.sqrt=function(){var e,a,i,o,t,s=this,r=s.c,c=s.s,p=s.e,l=P+4,u=new H("0.5");if(1!==c||!r||!r[0])return new H(!c||c<0&&(!r||r[0])?NaN:r?s:1/0);if(0==(c=Math.sqrt(+W(s)))||c==1/0?(((a=b(r)).length+p)%2==0&&(a+="0"),c=Math.sqrt(+a),p=h((p+1)/2)-(p<0||p%2),i=new H(a=c==1/0?"5e"+p:(a=c.toExponential()).slice(0,a.indexOf("e")+1)+p)):i=new H(c+""),i.c[0])for((c=(p=i.e)+l)<3&&(c=0);;)if(t=i,i=u.times(t.plus(n(s,t,l,1))),b(t.c).slice(0,c)===(a=b(i.c)).slice(0,c)){if(i.e0&&x>0){for(t=x%r||r,u=f.substr(0,t);t0&&(u+=l+f.slice(t)),m&&(u="-"+u)}i=d?u+(n.decimalSeparator||"")+((c=+n.fractionGroupSize)?d.replace(new RegExp("\\d{"+c+"}\\B","g"),"$&"+(n.fractionGroupSeparator||"")):d):u}return(n.prefix||"")+i+(n.suffix||"")},T.toFraction=function(e){var a,i,o,t,s,r,c,l,u,m,x,v,h=this,g=h.c;if(null!=e&&(!(c=new H(e)).isInteger()&&(c.c||1!==c.s)||c.lt(R)))throw Error(p+"Argument "+(c.isInteger()?"out of range: ":"not an integer: ")+W(c));if(!g)return new H(h);for(a=new H(R),u=i=new H(R),o=l=new H(R),v=b(g),s=a.e=v.length-h.e-1,a.c[0]=f[(r=s%d)<0?d+r:r],e=!e||c.comparedTo(a)>0?s>0?a:u:c,r=z,z=1/0,c=new H(v),l.c[0]=0;m=n(c,a,0,1),1!=(t=i.plus(m.times(o))).comparedTo(e);)i=o,o=t,u=l.plus(m.times(t=u)),l=t,a=c.minus(m.times(t=a)),c=t;return t=n(e.minus(i),o,0,1),l=l.plus(t.times(u)),i=i.plus(t.times(o)),l.s=u.s=h.s,x=n(u,o,s*=2,B).minus(h).abs().comparedTo(n(l,i,s,B).minus(h).abs())<1?[u,o]:[l,i],z=r,x},T.toNumber=function(){return+W(this)},T.toPrecision=function(e,a){return null!=e&&y(e,1,v),K(this,e,a,2)},T.toString=function(e){var a,n=this,o=n.s,t=n.e;return null===t?o?(a="Infinity",o<0&&(a="-"+a)):a="NaN":(null==e?a=t<=N||t>=F?k(b(n.c),t):j(b(n.c),t,"0"):10===e?a=j(b((n=G(new H(n),P+t+1,B)).c),n.e,"0"):(y(e,2,I.length,"Base"),a=i(j(b(n.c),t,"0"),10,e,o,!0)),o<0&&n.c[0]&&(a="-"+a)),a},T.valueOf=T.toJSON=function(){return W(this)},T._isBigNumber=!0,null!=a&&H.set(a),H}(),t.default=t.BigNumber=t,void 0===(i=function(){return t}.call(a,n,a,e))||(e.exports=i)}()},9779:(e,a,n)=>{var i=n(3837),o=n(2781).Stream,t=n(3463);function s(){this.writable=!1,this.readable=!0,this.dataSize=0,this.maxDataSize=2097152,this.pauseStreams=!0,this._released=!1,this._streams=[],this._currentStream=null,this._insideLoop=!1,this._pendingNext=!1}e.exports=s,i.inherits(s,o),s.create=function(e){var a=new this;for(var n in e=e||{})a[n]=e[n];return a},s.isStreamLike=function(e){return"function"!=typeof e&&"string"!=typeof e&&"boolean"!=typeof e&&"number"!=typeof e&&!Buffer.isBuffer(e)},s.prototype.append=function(e){if(s.isStreamLike(e)){if(!(e instanceof t)){var a=t.create(e,{maxDataSize:1/0,pauseStream:this.pauseStreams});e.on("data",this._checkDataSize.bind(this)),e=a}this._handleErrors(e),this.pauseStreams&&e.pause()}return this._streams.push(e),this},s.prototype.pipe=function(e,a){return o.prototype.pipe.call(this,e,a),this.resume(),e},s.prototype._getNext=function(){if(this._currentStream=null,this._insideLoop)this._pendingNext=!0;else{this._insideLoop=!0;try{do{this._pendingNext=!1,this._realGetNext()}while(this._pendingNext)}finally{this._insideLoop=!1}}},s.prototype._realGetNext=function(){var e=this._streams.shift();void 0!==e?"function"==typeof e?e(function(e){s.isStreamLike(e)&&(e.on("data",this._checkDataSize.bind(this)),this._handleErrors(e)),this._pipeNext(e)}.bind(this)):this._pipeNext(e):this.end()},s.prototype._pipeNext=function(e){if(this._currentStream=e,s.isStreamLike(e))return e.on("end",this._getNext.bind(this)),void e.pipe(this,{end:!1});var a=e;this.write(a),this._getNext()},s.prototype._handleErrors=function(e){var a=this;e.on("error",(function(e){a._emitError(e)}))},s.prototype.write=function(e){this.emit("data",e)},s.prototype.pause=function(){this.pauseStreams&&(this.pauseStreams&&this._currentStream&&"function"==typeof this._currentStream.pause&&this._currentStream.pause(),this.emit("pause"))},s.prototype.resume=function(){this._released||(this._released=!0,this.writable=!0,this._getNext()),this.pauseStreams&&this._currentStream&&"function"==typeof this._currentStream.resume&&this._currentStream.resume(),this.emit("resume")},s.prototype.end=function(){this._reset(),this.emit("end")},s.prototype.destroy=function(){this._reset(),this.emit("close")},s.prototype._reset=function(){this.writable=!1,this._streams=[],this._currentStream=null},s.prototype._checkDataSize=function(){if(this._updateDataSize(),!(this.dataSize<=this.maxDataSize)){var e="DelayedStream#maxDataSize of "+this.maxDataSize+" bytes exceeded.";this._emitError(new Error(e))}},s.prototype._updateDataSize=function(){this.dataSize=0;var e=this;this._streams.forEach((function(a){a.dataSize&&(e.dataSize+=a.dataSize)})),this._currentStream&&this._currentStream.dataSize&&(this.dataSize+=this._currentStream.dataSize)},s.prototype._emitError=function(e){this._reset(),this.emit("error",e)}},9435:e=>{var a=1e3,n=60*a,i=60*n,o=24*i,t=7*o,s=365.25*o;function r(e,a,n,i){var o=a>=1.5*n;return Math.round(e/n)+" "+i+(o?"s":"")}e.exports=function(e,c){c=c||{};var p,l,u=typeof e;if("string"===u&&e.length>0)return function(e){if(!((e=String(e)).length>100)){var r=/^(-?(?:\d+)?\.?\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec(e);if(r){var c=parseFloat(r[1]);switch((r[2]||"ms").toLowerCase()){case"years":case"year":case"yrs":case"yr":case"y":return c*s;case"weeks":case"week":case"w":return c*t;case"days":case"day":case"d":return c*o;case"hours":case"hour":case"hrs":case"hr":case"h":return c*i;case"minutes":case"minute":case"mins":case"min":case"m":return c*n;case"seconds":case"second":case"secs":case"sec":case"s":return c*a;case"milliseconds":case"millisecond":case"msecs":case"msec":case"ms":return c;default:return}}}}(e);if("number"===u&&isFinite(e))return c.long?(p=e,(l=Math.abs(p))>=o?r(p,l,o,"day"):l>=i?r(p,l,i,"hour"):l>=n?r(p,l,n,"minute"):l>=a?r(p,l,a,"second"):p+" ms"):function(e){var t=Math.abs(e);return t>=o?Math.round(e/o)+"d":t>=i?Math.round(e/i)+"h":t>=n?Math.round(e/n)+"m":t>=a?Math.round(e/a)+"s":e+"ms"}(e);throw new Error("val is not a non-empty string or a valid number. val="+JSON.stringify(e))}},1227:(e,a,n)=>{a.formatArgs=function(a){if(a[0]=(this.useColors?"%c":"")+this.namespace+(this.useColors?" %c":" ")+a[0]+(this.useColors?"%c ":" ")+"+"+e.exports.humanize(this.diff),!this.useColors)return;const n="color: "+this.color;a.splice(1,0,n,"color: inherit");let i=0,o=0;a[0].replace(/%[a-zA-Z%]/g,(e=>{"%%"!==e&&(i++,"%c"===e&&(o=i))})),a.splice(o,0,n)},a.save=function(e){try{e?a.storage.setItem("debug",e):a.storage.removeItem("debug")}catch(e){}},a.load=function(){let e;try{e=a.storage.getItem("debug")}catch(e){}return!e&&"undefined"!=typeof process&&"env"in process&&(e=process.env.DEBUG),e},a.useColors=function(){return!("undefined"==typeof window||!window.process||"renderer"!==window.process.type&&!window.process.__nwjs)||("undefined"==typeof navigator||!navigator.userAgent||!navigator.userAgent.toLowerCase().match(/(edge|trident)\/(\d+)/))&&("undefined"!=typeof document&&document.documentElement&&document.documentElement.style&&document.documentElement.style.WebkitAppearance||"undefined"!=typeof window&&window.console&&(window.console.firebug||window.console.exception&&window.console.table)||"undefined"!=typeof navigator&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/firefox\/(\d+)/)&&parseInt(RegExp.$1,10)>=31||"undefined"!=typeof navigator&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/applewebkit\/(\d+)/))},a.storage=function(){try{return localStorage}catch(e){}}(),a.destroy=(()=>{let e=!1;return()=>{e||(e=!0,console.warn("Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`."))}})(),a.colors=["#0000CC","#0000FF","#0033CC","#0033FF","#0066CC","#0066FF","#0099CC","#0099FF","#00CC00","#00CC33","#00CC66","#00CC99","#00CCCC","#00CCFF","#3300CC","#3300FF","#3333CC","#3333FF","#3366CC","#3366FF","#3399CC","#3399FF","#33CC00","#33CC33","#33CC66","#33CC99","#33CCCC","#33CCFF","#6600CC","#6600FF","#6633CC","#6633FF","#66CC00","#66CC33","#9900CC","#9900FF","#9933CC","#9933FF","#99CC00","#99CC33","#CC0000","#CC0033","#CC0066","#CC0099","#CC00CC","#CC00FF","#CC3300","#CC3333","#CC3366","#CC3399","#CC33CC","#CC33FF","#CC6600","#CC6633","#CC9900","#CC9933","#CCCC00","#CCCC33","#FF0000","#FF0033","#FF0066","#FF0099","#FF00CC","#FF00FF","#FF3300","#FF3333","#FF3366","#FF3399","#FF33CC","#FF33FF","#FF6600","#FF6633","#FF9900","#FF9933","#FFCC00","#FFCC33"],a.log=console.debug||console.log||(()=>{}),e.exports=n(2447)(a);const{formatters:i}=e.exports;i.j=function(e){try{return JSON.stringify(e)}catch(e){return"[UnexpectedJSONParseError]: "+e.message}}},2447:(e,a,n)=>{e.exports=function(e){function a(e){let n,o,t,s=null;function r(...e){if(!r.enabled)return;const i=r,o=Number(new Date),t=o-(n||o);i.diff=t,i.prev=n,i.curr=o,n=o,e[0]=a.coerce(e[0]),"string"!=typeof e[0]&&e.unshift("%O");let s=0;e[0]=e[0].replace(/%([a-zA-Z%])/g,((n,o)=>{if("%%"===n)return"%";s++;const t=a.formatters[o];if("function"==typeof t){const a=e[s];n=t.call(i,a),e.splice(s,1),s--}return n})),a.formatArgs.call(i,e),(i.log||a.log).apply(i,e)}return r.namespace=e,r.useColors=a.useColors(),r.color=a.selectColor(e),r.extend=i,r.destroy=a.destroy,Object.defineProperty(r,"enabled",{enumerable:!0,configurable:!1,get:()=>null!==s?s:(o!==a.namespaces&&(o=a.namespaces,t=a.enabled(e)),t),set:e=>{s=e}}),"function"==typeof a.init&&a.init(r),r}function i(e,n){const i=a(this.namespace+(void 0===n?":":n)+e);return i.log=this.log,i}function o(e){return e.toString().substring(2,e.toString().length-2).replace(/\.\*\?$/,"*")}return a.debug=a,a.default=a,a.coerce=function(e){return e instanceof Error?e.stack||e.message:e},a.disable=function(){const e=[...a.names.map(o),...a.skips.map(o).map((e=>"-"+e))].join(",");return a.enable(""),e},a.enable=function(e){let n;a.save(e),a.namespaces=e,a.names=[],a.skips=[];const i=("string"==typeof e?e:"").split(/[\s,]+/),o=i.length;for(n=0;n{a[n]=e[n]})),a.names=[],a.skips=[],a.formatters={},a.selectColor=function(e){let n=0;for(let a=0;a{"undefined"==typeof process||"renderer"===process.type||!0===process.browser||process.__nwjs?e.exports=n(1227):e.exports=n(39)},39:(e,a,n)=>{const i=n(6224),o=n(3837);a.init=function(e){e.inspectOpts={};const n=Object.keys(a.inspectOpts);for(let i=0;i{}),"Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`."),a.colors=[6,2,3,4,5,1];try{const e=n(2130);e&&(e.stderr||e).level>=2&&(a.colors=[20,21,26,27,32,33,38,39,40,41,42,43,44,45,56,57,62,63,68,69,74,75,76,77,78,79,80,81,92,93,98,99,112,113,128,129,134,135,148,149,160,161,162,163,164,165,166,167,168,169,170,171,172,173,178,179,184,185,196,197,198,199,200,201,202,203,204,205,206,207,208,209,214,215,220,221])}catch(e){}a.inspectOpts=Object.keys(process.env).filter((e=>/^debug_/i.test(e))).reduce(((e,a)=>{const n=a.substring(6).toLowerCase().replace(/_([a-z])/g,((e,a)=>a.toUpperCase()));let i=process.env[a];return i=!!/^(yes|on|true|enabled)$/i.test(i)||!/^(no|off|false|disabled)$/i.test(i)&&("null"===i?null:Number(i)),e[n]=i,e}),{}),e.exports=n(2447)(a);const{formatters:t}=e.exports;t.o=function(e){return this.inspectOpts.colors=this.useColors,o.inspect(e,this.inspectOpts).split("\n").map((e=>e.trim())).join(" ")},t.O=function(e){return this.inspectOpts.colors=this.useColors,o.inspect(e,this.inspectOpts)}},3463:(e,a,n)=>{var i=n(2781).Stream,o=n(3837);function t(){this.source=null,this.dataSize=0,this.maxDataSize=1048576,this.pauseStream=!0,this._maxDataSizeExceeded=!1,this._released=!1,this._bufferedEvents=[]}e.exports=t,o.inherits(t,i),t.create=function(e,a){var n=new this;for(var i in a=a||{})n[i]=a[i];n.source=e;var o=e.emit;return e.emit=function(){return n._handleEmit(arguments),o.apply(e,arguments)},e.on("error",(function(){})),n.pauseStream&&e.pause(),n},Object.defineProperty(t.prototype,"readable",{configurable:!0,enumerable:!0,get:function(){return this.source.readable}}),t.prototype.setEncoding=function(){return this.source.setEncoding.apply(this.source,arguments)},t.prototype.resume=function(){this._released||this.release(),this.source.resume()},t.prototype.pause=function(){this.source.pause()},t.prototype.release=function(){this._released=!0,this._bufferedEvents.forEach(function(e){this.emit.apply(this,e)}.bind(this)),this._bufferedEvents=[]},t.prototype.pipe=function(){var e=i.prototype.pipe.apply(this,arguments);return this.resume(),e},t.prototype._handleEmit=function(e){this._released?this.emit.apply(this,e):("data"===e[0]&&(this.dataSize+=e[1].length,this._checkIfMaxDataSizeExceeded()),this._bufferedEvents.push(e))},t.prototype._checkIfMaxDataSizeExceeded=function(){if(!(this._maxDataSizeExceeded||this.dataSize<=this.maxDataSize)){this._maxDataSizeExceeded=!0;var e="DelayedStream#maxDataSize of "+this.maxDataSize+" bytes exceeded.";this.emit("error",new Error(e))}}},2261:(e,a,n)=>{var i;e.exports=function(){if(!i){try{i=n(5158)("follow-redirects")}catch(e){}"function"!=typeof i&&(i=function(){})}i.apply(null,arguments)}},938:(e,a,n)=>{var i=n(7310),o=i.URL,t=n(3685),s=n(5687),r=n(2781).Writable,c=n(9491),p=n(2261),l=["abort","aborted","connect","error","socket","timeout"],u=Object.create(null);l.forEach((function(e){u[e]=function(a,n,i){this._redirectable.emit(e,a,n,i)}}));var d=w("ERR_FR_REDIRECTION_FAILURE","Redirected request failed"),m=w("ERR_FR_TOO_MANY_REDIRECTS","Maximum number of redirects exceeded"),f=w("ERR_FR_MAX_BODY_LENGTH_EXCEEDED","Request body larger than maxBodyLength limit"),x=w("ERR_STREAM_WRITE_AFTER_END","write after end");function v(e,a){r.call(this),this._sanitizeOptions(e),this._options=e,this._ended=!1,this._ending=!1,this._redirectCount=0,this._redirects=[],this._requestBodyLength=0,this._requestBodyBuffers=[],a&&this.on("response",a);var n=this;this._onNativeResponse=function(e){n._processResponse(e)},this._performRequest()}function h(e){var a={maxRedirects:21,maxBodyLength:10485760},n={};return Object.keys(e).forEach((function(t){var s=t+":",r=n[s]=e[t],l=a[t]=Object.create(r);Object.defineProperties(l,{request:{value:function(e,t,r){if("string"==typeof e){var l=e;try{e=g(new o(l))}catch(a){e=i.parse(l)}}else o&&e instanceof o?e=g(e):(r=t,t=e,e={protocol:s});return"function"==typeof t&&(r=t,t=null),(t=Object.assign({maxRedirects:a.maxRedirects,maxBodyLength:a.maxBodyLength},e,t)).nativeProtocols=n,c.equal(t.protocol,s,"protocol mismatch"),p("options",t),new v(t,r)},configurable:!0,enumerable:!0,writable:!0},get:{value:function(e,a,n){var i=l.request(e,a,n);return i.end(),i},configurable:!0,enumerable:!0,writable:!0}})})),a}function b(){}function g(e){var a={protocol:e.protocol,hostname:e.hostname.startsWith("[")?e.hostname.slice(1,-1):e.hostname,hash:e.hash,search:e.search,pathname:e.pathname,path:e.pathname+e.search,href:e.href};return""!==e.port&&(a.port=Number(e.port)),a}function y(e,a){var n;for(var i in a)e.test(i)&&(n=a[i],delete a[i]);return null==n?void 0:String(n).trim()}function w(e,a){function n(e){Error.captureStackTrace(this,this.constructor),e?(this.message=a+": "+e.message,this.cause=e):this.message=a}return n.prototype=new Error,n.prototype.constructor=n,n.prototype.name="Error ["+e+"]",n.prototype.code=e,n}function k(e){for(var a of l)e.removeListener(a,u[a]);e.on("error",b),e.abort()}v.prototype=Object.create(r.prototype),v.prototype.abort=function(){k(this._currentRequest),this.emit("abort")},v.prototype.write=function(e,a,n){if(this._ending)throw new x;if(!("string"==typeof e||"object"==typeof e&&"length"in e))throw new TypeError("data should be a string, Buffer or Uint8Array");"function"==typeof a&&(n=a,a=null),0!==e.length?this._requestBodyLength+e.length<=this._options.maxBodyLength?(this._requestBodyLength+=e.length,this._requestBodyBuffers.push({data:e,encoding:a}),this._currentRequest.write(e,a,n)):(this.emit("error",new f),this.abort()):n&&n()},v.prototype.end=function(e,a,n){if("function"==typeof e?(n=e,e=a=null):"function"==typeof a&&(n=a,a=null),e){var i=this,o=this._currentRequest;this.write(e,a,(function(){i._ended=!0,o.end(null,null,n)})),this._ending=!0}else this._ended=this._ending=!0,this._currentRequest.end(null,null,n)},v.prototype.setHeader=function(e,a){this._options.headers[e]=a,this._currentRequest.setHeader(e,a)},v.prototype.removeHeader=function(e){delete this._options.headers[e],this._currentRequest.removeHeader(e)},v.prototype.setTimeout=function(e,a){var n=this;function i(a){a.setTimeout(e),a.removeListener("timeout",a.destroy),a.addListener("timeout",a.destroy)}function o(a){n._timeout&&clearTimeout(n._timeout),n._timeout=setTimeout((function(){n.emit("timeout"),t()}),e),i(a)}function t(){n._timeout&&(clearTimeout(n._timeout),n._timeout=null),n.removeListener("abort",t),n.removeListener("error",t),n.removeListener("response",t),a&&n.removeListener("timeout",a),n.socket||n._currentRequest.removeListener("socket",o)}return a&&this.on("timeout",a),this.socket?o(this.socket):this._currentRequest.once("socket",o),this.on("socket",i),this.on("abort",t),this.on("error",t),this.on("response",t),this},["flushHeaders","getHeader","setNoDelay","setSocketKeepAlive"].forEach((function(e){v.prototype[e]=function(a,n){return this._currentRequest[e](a,n)}})),["aborted","connection","socket"].forEach((function(e){Object.defineProperty(v.prototype,e,{get:function(){return this._currentRequest[e]}})})),v.prototype._sanitizeOptions=function(e){if(e.headers||(e.headers={}),e.host&&(e.hostname||(e.hostname=e.host),delete e.host),!e.pathname&&e.path){var a=e.path.indexOf("?");a<0?e.pathname=e.path:(e.pathname=e.path.substring(0,a),e.search=e.path.substring(a))}},v.prototype._performRequest=function(){var e=this._options.protocol,a=this._options.nativeProtocols[e];if(a){if(this._options.agents){var n=e.slice(0,-1);this._options.agent=this._options.agents[n]}var o=this._currentRequest=a.request(this._options,this._onNativeResponse);for(var t of(o._redirectable=this,l))o.on(t,u[t]);if(this._currentUrl=/^\//.test(this._options.path)?i.format(this._options):this._currentUrl=this._options.path,this._isRedirect){var s=0,r=this,c=this._requestBodyBuffers;!function e(a){if(o===r._currentRequest)if(a)r.emit("error",a);else if(s=400)return e.responseUrl=this._currentUrl,e.redirects=this._redirects,this.emit("response",e),void(this._requestBodyBuffers=[]);if(k(this._currentRequest),e.destroy(),++this._redirectCount>this._options.maxRedirects)this.emit("error",new m);else{var o,t=this._options.beforeRedirect;t&&(o=Object.assign({Host:e.req.getHeader("host")},this._options.headers));var s=this._options.method;((301===a||302===a)&&"POST"===this._options.method||303===a&&!/^(?:GET|HEAD)$/.test(this._options.method))&&(this._options.method="GET",this._requestBodyBuffers=[],y(/^content-/i,this._options.headers));var r,c=y(/^host$/i,this._options.headers),l=i.parse(this._currentUrl),u=c||l.host,f=/^\w+:/.test(n)?this._currentUrl:i.format(Object.assign(l,{host:u}));try{r=i.resolve(f,n)}catch(e){return void this.emit("error",new d(e))}p("redirecting to",r),this._isRedirect=!0;var x=i.parse(r);if(Object.assign(this._options,x),(x.protocol!==l.protocol&&"https:"!==x.protocol||x.host!==u&&!function(e,a){const n=e.length-a.length-1;return n>0&&"."===e[n]&&e.endsWith(a)}(x.host,u))&&y(/^(?:authorization|cookie)$/i,this._options.headers),"function"==typeof t){var v={headers:e.headers,statusCode:a},h={url:f,method:s,headers:o};try{t(this._options,v,h)}catch(e){return void this.emit("error",e)}this._sanitizeOptions(this._options)}try{this._performRequest()}catch(e){this.emit("error",new d(e))}}},e.exports=h({http:t,https:s}),e.exports.wrap=h},6882:(e,a,n)=>{var i=n(9779),o=n(3837),t=n(1017),s=n(3685),r=n(5687),c=n(7310).parse,p=n(7147),l=n(2781).Stream,u=n(983),d=n(9118),m=n(2275);function f(e){if(!(this instanceof f))return new f(e);for(var a in this._overheadLength=0,this._valueLength=0,this._valuesToMeasure=[],i.call(this),e=e||{})this[a]=e[a]}e.exports=f,o.inherits(f,i),f.LINE_BREAK="\r\n",f.DEFAULT_CONTENT_TYPE="application/octet-stream",f.prototype.append=function(e,a,n){"string"==typeof(n=n||{})&&(n={filename:n});var t=i.prototype.append.bind(this);if("number"==typeof a&&(a=""+a),o.isArray(a))this._error(new Error("Arrays are not supported."));else{var s=this._multiPartHeader(e,a,n),r=this._multiPartFooter();t(s),t(a),t(r),this._trackLength(s,a,n)}},f.prototype._trackLength=function(e,a,n){var i=0;null!=n.knownLength?i+=+n.knownLength:Buffer.isBuffer(a)?i=a.length:"string"==typeof a&&(i=Buffer.byteLength(a)),this._valueLength+=i,this._overheadLength+=Buffer.byteLength(e)+f.LINE_BREAK.length,a&&(a.path||a.readable&&a.hasOwnProperty("httpVersion")||a instanceof l)&&(n.knownLength||this._valuesToMeasure.push(a))},f.prototype._lengthRetriever=function(e,a){e.hasOwnProperty("fd")?null!=e.end&&e.end!=1/0&&null!=e.start?a(null,e.end+1-(e.start?e.start:0)):p.stat(e.path,(function(n,i){var o;n?a(n):(o=i.size-(e.start?e.start:0),a(null,o))})):e.hasOwnProperty("httpVersion")?a(null,+e.headers["content-length"]):e.hasOwnProperty("httpModule")?(e.on("response",(function(n){e.pause(),a(null,+n.headers["content-length"])})),e.resume()):a("Unknown stream")},f.prototype._multiPartHeader=function(e,a,n){if("string"==typeof n.header)return n.header;var i,o=this._getContentDisposition(a,n),t=this._getContentType(a,n),s="",r={"Content-Disposition":["form-data",'name="'+e+'"'].concat(o||[]),"Content-Type":[].concat(t||[])};for(var c in"object"==typeof n.header&&m(r,n.header),r)r.hasOwnProperty(c)&&null!=(i=r[c])&&(Array.isArray(i)||(i=[i]),i.length&&(s+=c+": "+i.join("; ")+f.LINE_BREAK));return"--"+this.getBoundary()+f.LINE_BREAK+s+f.LINE_BREAK},f.prototype._getContentDisposition=function(e,a){var n,i;return"string"==typeof a.filepath?n=t.normalize(a.filepath).replace(/\\/g,"/"):a.filename||e.name||e.path?n=t.basename(a.filename||e.name||e.path):e.readable&&e.hasOwnProperty("httpVersion")&&(n=t.basename(e.client._httpMessage.path||"")),n&&(i='filename="'+n+'"'),i},f.prototype._getContentType=function(e,a){var n=a.contentType;return!n&&e.name&&(n=u.lookup(e.name)),!n&&e.path&&(n=u.lookup(e.path)),!n&&e.readable&&e.hasOwnProperty("httpVersion")&&(n=e.headers["content-type"]),n||!a.filepath&&!a.filename||(n=u.lookup(a.filepath||a.filename)),n||"object"!=typeof e||(n=f.DEFAULT_CONTENT_TYPE),n},f.prototype._multiPartFooter=function(){return function(e){var a=f.LINE_BREAK;0===this._streams.length&&(a+=this._lastBoundary()),e(a)}.bind(this)},f.prototype._lastBoundary=function(){return"--"+this.getBoundary()+"--"+f.LINE_BREAK},f.prototype.getHeaders=function(e){var a,n={"content-type":"multipart/form-data; boundary="+this.getBoundary()};for(a in e)e.hasOwnProperty(a)&&(n[a.toLowerCase()]=e[a]);return n},f.prototype.setBoundary=function(e){this._boundary=e},f.prototype.getBoundary=function(){return this._boundary||this._generateBoundary(),this._boundary},f.prototype.getBuffer=function(){for(var e=new Buffer.alloc(0),a=this.getBoundary(),n=0,i=this._streams.length;n{e.exports=function(e,a){return Object.keys(a).forEach((function(n){e[n]=e[n]||a[n]})),e}},6560:e=>{"use strict";e.exports=(e,a)=>{a=a||process.argv;const n=e.startsWith("-")?"":1===e.length?"-":"--",i=a.indexOf(n+e),o=a.indexOf("--");return-1!==i&&(-1===o||i{var i=n(4123).stringify,o=n(6813);e.exports=function(e){return{parse:o(e),stringify:i}},e.exports.parse=o(),e.exports.stringify=i},6813:(e,a,n)=>{var i=null;const o=/(?:_|\\u005[Ff])(?:_|\\u005[Ff])(?:p|\\u0070)(?:r|\\u0072)(?:o|\\u006[Ff])(?:t|\\u0074)(?:o|\\u006[Ff])(?:_|\\u005[Ff])(?:_|\\u005[Ff])/,t=/(?:c|\\u0063)(?:o|\\u006[Ff])(?:n|\\u006[Ee])(?:s|\\u0073)(?:t|\\u0074)(?:r|\\u0072)(?:u|\\u0075)(?:c|\\u0063)(?:t|\\u0074)(?:o|\\u006[Ff])(?:r|\\u0072)/;e.exports=function(e){"use strict";var a={strict:!1,storeAsString:!1,alwaysParseAsBig:!1,useNativeBigInt:!1,protoAction:"error",constructorAction:"error"};if(null!=e){if(!0===e.strict&&(a.strict=!0),!0===e.storeAsString&&(a.storeAsString=!0),a.alwaysParseAsBig=!0===e.alwaysParseAsBig&&e.alwaysParseAsBig,a.useNativeBigInt=!0===e.useNativeBigInt&&e.useNativeBigInt,void 0!==e.constructorAction){if("error"!==e.constructorAction&&"ignore"!==e.constructorAction&&"preserve"!==e.constructorAction)throw new Error(`Incorrect value for constructorAction option, must be "error", "ignore" or undefined but passed ${e.constructorAction}`);a.constructorAction=e.constructorAction}if(void 0!==e.protoAction){if("error"!==e.protoAction&&"ignore"!==e.protoAction&&"preserve"!==e.protoAction)throw new Error(`Incorrect value for protoAction option, must be "error", "ignore" or undefined but passed ${e.protoAction}`);a.protoAction=e.protoAction}}var s,r,c,p,l={'"':'"',"\\":"\\","/":"/",b:"\b",f:"\f",n:"\n",r:"\r",t:"\t"},u=function(e){throw{name:"SyntaxError",message:e,at:s,text:c}},d=function(e){return e&&e!==r&&u("Expected '"+e+"' instead of '"+r+"'"),r=c.charAt(s),s+=1,r},m=function(){var e,o="";for("-"===r&&(o="-",d("-"));r>="0"&&r<="9";)o+=r,d();if("."===r)for(o+=".";d()&&r>="0"&&r<="9";)o+=r;if("e"===r||"E"===r)for(o+=r,d(),"-"!==r&&"+"!==r||(o+=r,d());r>="0"&&r<="9";)o+=r,d();if(e=+o,isFinite(e))return null==i&&(i=n(4431)),o.length>15?a.storeAsString?o:a.useNativeBigInt?BigInt(o):new i(o):a.alwaysParseAsBig?a.useNativeBigInt?BigInt(e):new i(e):e;u("Bad number")},f=function(){var e,a,n,i="";if('"'===r)for(var o=s;d();){if('"'===r)return s-1>o&&(i+=c.substring(o,s-1)),d(),i;if("\\"===r){if(s-1>o&&(i+=c.substring(o,s-1)),d(),"u"===r){for(n=0,a=0;a<4&&(e=parseInt(d(),16),isFinite(e));a+=1)n=16*n+e;i+=String.fromCharCode(n)}else{if("string"!=typeof l[r])break;i+=l[r]}o=s}}u("Bad string")},x=function(){for(;r&&r<=" ";)d()};return p=function(){switch(x(),r){case"{":return function(){var e,n=Object.create(null);if("{"===r){if(d("{"),x(),"}"===r)return d("}"),n;for(;r;){if(e=f(),x(),d(":"),!0===a.strict&&Object.hasOwnProperty.call(n,e)&&u('Duplicate key "'+e+'"'),!0===o.test(e)?"error"===a.protoAction?u("Object contains forbidden prototype property"):"ignore"===a.protoAction?p():n[e]=p():!0===t.test(e)?"error"===a.constructorAction?u("Object contains forbidden constructor property"):"ignore"===a.constructorAction?p():n[e]=p():n[e]=p(),x(),"}"===r)return d("}"),n;d(","),x()}}u("Bad object")}();case"[":return function(){var e=[];if("["===r){if(d("["),x(),"]"===r)return d("]"),e;for(;r;){if(e.push(p()),x(),"]"===r)return d("]"),e;d(","),x()}}u("Bad array")}();case'"':return f();case"-":return m();default:return r>="0"&&r<="9"?m():function(){switch(r){case"t":return d("t"),d("r"),d("u"),d("e"),!0;case"f":return d("f"),d("a"),d("l"),d("s"),d("e"),!1;case"n":return d("n"),d("u"),d("l"),d("l"),null}u("Unexpected '"+r+"'")}()}},function(e,a){var n;return c=e+"",s=0,r=" ",n=p(),x(),r&&u("Syntax error"),"function"==typeof a?function e(n,i){var o,t=n[i];return t&&"object"==typeof t&&Object.keys(t).forEach((function(a){void 0!==(o=e(t,a))?t[a]=o:delete t[a]})),a.call(n,i,t)}({"":n},""):n}}},4123:(e,a,n)=>{var i=n(4431),o=e.exports;!function(){"use strict";var e,a,n,t=/[\\\"\x00-\x1f\x7f-\x9f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,s={"\b":"\\b","\t":"\\t","\n":"\\n","\f":"\\f","\r":"\\r",'"':'\\"',"\\":"\\\\"};function r(e){return t.lastIndex=0,t.test(e)?'"'+e.replace(t,(function(e){var a=s[e];return"string"==typeof a?a:"\\u"+("0000"+e.charCodeAt(0).toString(16)).slice(-4)}))+'"':'"'+e+'"'}function c(o,t){var s,p,l,u,d,m=e,f=t[o],x=null!=f&&(f instanceof i||i.isBigNumber(f));switch(f&&"object"==typeof f&&"function"==typeof f.toJSON&&(f=f.toJSON(o)),"function"==typeof n&&(f=n.call(t,o,f)),typeof f){case"string":return x?f:r(f);case"number":return isFinite(f)?String(f):"null";case"boolean":case"null":case"bigint":return String(f);case"object":if(!f)return"null";if(e+=a,d=[],"[object Array]"===Object.prototype.toString.apply(f)){for(u=f.length,s=0;s{e.exports=n(3765)},983:(e,a,n)=>{"use strict";var i,o,t,s=n(5234),r=n(1017).extname,c=/^\s*([^;\s]*)(?:;|\s|$)/,p=/^text\//i;function l(e){if(!e||"string"!=typeof e)return!1;var a=c.exec(e),n=a&&s[a[1].toLowerCase()];return n&&n.charset?n.charset:!(!a||!p.test(a[1]))&&"UTF-8"}a.charset=l,a.charsets={lookup:l},a.contentType=function(e){if(!e||"string"!=typeof e)return!1;var n=-1===e.indexOf("/")?a.lookup(e):e;if(!n)return!1;if(-1===n.indexOf("charset")){var i=a.charset(n);i&&(n+="; charset="+i.toLowerCase())}return n},a.extension=function(e){if(!e||"string"!=typeof e)return!1;var n=c.exec(e),i=n&&a.extensions[n[1].toLowerCase()];return!(!i||!i.length)&&i[0]},a.extensions=Object.create(null),a.lookup=function(e){if(!e||"string"!=typeof e)return!1;var n=r("x."+e).toLowerCase().substr(1);return n&&a.types[n]||!1},a.types=Object.create(null),i=a.extensions,o=a.types,t=["nginx","apache",void 0,"iana"],Object.keys(s).forEach((function(e){var a=s[e],n=a.extensions;if(n&&n.length){i[e]=n;for(var r=0;rl||p===l&&"application/"===o[c].substr(0,12)))continue}o[c]=e}}}))},1394:(e,a,n)=>{"use strict";var i=n(7310).parse,o={ftp:21,gopher:70,http:80,https:443,ws:80,wss:443},t=String.prototype.endsWith||function(e){return e.length<=this.length&&-1!==this.indexOf(e,this.length-e.length)};function s(e){return process.env[e.toLowerCase()]||process.env[e.toUpperCase()]||""}a.getProxyForUrl=function(e){var a="string"==typeof e?i(e):e||{},n=a.protocol,r=a.host,c=a.port;if("string"!=typeof r||!r||"string"!=typeof n)return"";if(n=n.split(":",1)[0],!function(e,a){var n=(s("npm_config_no_proxy")||s("no_proxy")).toLowerCase();return!n||"*"!==n&&n.split(/[,\s]/).every((function(n){if(!n)return!0;var i=n.match(/^(.+):(\d+)$/),o=i?i[1]:n,s=i?parseInt(i[2]):0;return!(!s||s===a)||(/^[.*]/.test(o)?("*"===o.charAt(0)&&(o=o.slice(1)),!t.call(e,o)):e!==o)}))}(r=r.replace(/:\d*$/,""),c=parseInt(c)||o[n]||0))return"";var p=s("npm_config_"+n+"_proxy")||s(n+"_proxy")||s("npm_config_proxy")||s("all_proxy");return p&&-1===p.indexOf("://")&&(p=n+"://"+p),p}},2130:(e,a,n)=>{"use strict";const i=n(2037),o=n(6560),t=process.env;let s;function r(e){const a=function(e){if(!1===s)return 0;if(o("color=16m")||o("color=full")||o("color=truecolor"))return 3;if(o("color=256"))return 2;if(e&&!e.isTTY&&!0!==s)return 0;const a=s?1:0;if("win32"===process.platform){const e=i.release().split(".");return Number(process.versions.node.split(".")[0])>=8&&Number(e[0])>=10&&Number(e[2])>=10586?Number(e[2])>=14931?3:2:1}if("CI"in t)return["TRAVIS","CIRCLECI","APPVEYOR","GITLAB_CI"].some((e=>e in t))||"codeship"===t.CI_NAME?1:a;if("TEAMCITY_VERSION"in t)return/^(9\.(0*[1-9]\d*)\.|\d{2,}\.)/.test(t.TEAMCITY_VERSION)?1:0;if("truecolor"===t.COLORTERM)return 3;if("TERM_PROGRAM"in t){const e=parseInt((t.TERM_PROGRAM_VERSION||"").split(".")[0],10);switch(t.TERM_PROGRAM){case"iTerm.app":return e>=3?3:2;case"Apple_Terminal":return 2}}return/-256(color)?$/i.test(t.TERM)?2:/^screen|^xterm|^vt100|^vt220|^rxvt|color|ansi|cygwin|linux/i.test(t.TERM)||"COLORTERM"in t?1:(t.TERM,a)}(e);return function(e){return 0!==e&&{level:e,hasBasic:!0,has256:e>=2,has16m:e>=3}}(a)}o("no-color")||o("no-colors")||o("color=false")?s=!1:(o("color")||o("colors")||o("color=true")||o("color=always"))&&(s=!0),"FORCE_COLOR"in t&&(s=0===t.FORCE_COLOR.length||0!==parseInt(t.FORCE_COLOR,10)),e.exports={supportsColor:r,stdout:r(process.stdout),stderr:r(process.stderr)}},4078:function(e,a,n){var i,o,t;t=function(){function e(e){var a=[];if(0===e.length)return"";if("string"!=typeof e[0])throw new TypeError("Url must be a string. Received "+e[0]);if(e[0].match(/^[^/:]+:\/*$/)&&e.length>1){var n=e.shift();e[0]=n+e[0]}e[0].match(/^file:\/\/\//)?e[0]=e[0].replace(/^([^/:]+):\/*/,"$1:///"):e[0]=e[0].replace(/^([^/:]+):\/*/,"$1://");for(var i=0;i0&&(o=o.replace(/^[\/]+/,"")),o=i0?"?":"")+s.join("&")}return function(){return e("object"==typeof arguments[0]?arguments[0]:[].slice.call(arguments))}},e.exports?e.exports=t():void 0===(o="function"==typeof(i=t)?i.call(a,n,a,e):i)||(e.exports=o)},9491:e=>{"use strict";e.exports=require("assert")},2361:e=>{"use strict";e.exports=require("events")},7147:e=>{"use strict";e.exports=require("fs")},3685:e=>{"use strict";e.exports=require("http")},5687:e=>{"use strict";e.exports=require("https")},2037:e=>{"use strict";e.exports=require("os")},1017:e=>{"use strict";e.exports=require("path")},2781:e=>{"use strict";e.exports=require("stream")},6224:e=>{"use strict";e.exports=require("tty")},7310:e=>{"use strict";e.exports=require("url")},3837:e=>{"use strict";e.exports=require("util")},9796:e=>{"use strict";e.exports=require("zlib")},3306:(e,a,n)=>{"use strict";const i=n(6882),o=n(7310),t=n(1394),s=n(3685),r=n(5687),c=n(3837),p=n(938),l=n(9796),u=n(2781),d=n(2361);function m(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}const f=m(i),x=m(o),v=m(s),h=m(r),b=m(c),g=m(p),y=m(l),w=m(u),k=m(d);function j(e,a){return function(){return e.apply(a,arguments)}}const{toString:_}=Object.prototype,{getPrototypeOf:S}=Object,C=(E=Object.create(null),e=>{const a=_.call(e);return E[a]||(E[a]=a.slice(8,-1).toLowerCase())});var E;const O=e=>(e=e.toLowerCase(),a=>C(a)===e),A=e=>a=>typeof a===e,{isArray:T}=Array,R=A("undefined"),P=O("ArrayBuffer"),B=A("string"),N=A("function"),F=A("number"),L=e=>null!==e&&"object"==typeof e,z=e=>{if("object"!==C(e))return!1;const a=S(e);return!(null!==a&&a!==Object.prototype&&null!==Object.getPrototypeOf(a)||Symbol.toStringTag in e||Symbol.iterator in e)},D=O("Date"),U=O("File"),M=O("Blob"),q=O("FileList"),I=O("URLSearchParams");function H(e,a,{allOwnKeys:n=!1}={}){if(null==e)return;let i,o;if("object"!=typeof e&&(e=[e]),T(e))for(i=0,o=e.length;i0;)if(i=n[o],a===i.toLowerCase())return i;return null}const V="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:"undefined"!=typeof window?window:global,$=e=>!R(e)&&e!==V,G=(W="undefined"!=typeof Uint8Array&&S(Uint8Array),e=>W&&e instanceof W);var W;const J=O("HTMLFormElement"),X=(({hasOwnProperty:e})=>(a,n)=>e.call(a,n))(Object.prototype),Y=O("RegExp"),Q=(e,a)=>{const n=Object.getOwnPropertyDescriptors(e),i={};H(n,((n,o)=>{let t;!1!==(t=a(n,o,e))&&(i[o]=t||n)})),Object.defineProperties(e,i)},Z="abcdefghijklmnopqrstuvwxyz",ee="0123456789",ae={DIGIT:ee,ALPHA:Z,ALPHA_DIGIT:Z+Z.toUpperCase()+ee},ne=O("AsyncFunction"),ie={isArray:T,isArrayBuffer:P,isBuffer:function(e){return null!==e&&!R(e)&&null!==e.constructor&&!R(e.constructor)&&N(e.constructor.isBuffer)&&e.constructor.isBuffer(e)},isFormData:e=>{let a;return e&&("function"==typeof FormData&&e instanceof FormData||N(e.append)&&("formdata"===(a=C(e))||"object"===a&&N(e.toString)&&"[object FormData]"===e.toString()))},isArrayBufferView:function(e){let a;return a="undefined"!=typeof ArrayBuffer&&ArrayBuffer.isView?ArrayBuffer.isView(e):e&&e.buffer&&P(e.buffer),a},isString:B,isNumber:F,isBoolean:e=>!0===e||!1===e,isObject:L,isPlainObject:z,isUndefined:R,isDate:D,isFile:U,isBlob:M,isRegExp:Y,isFunction:N,isStream:e=>L(e)&&N(e.pipe),isURLSearchParams:I,isTypedArray:G,isFileList:q,forEach:H,merge:function e(){const{caseless:a}=$(this)&&this||{},n={},i=(i,o)=>{const t=a&&K(n,o)||o;z(n[t])&&z(i)?n[t]=e(n[t],i):z(i)?n[t]=e({},i):T(i)?n[t]=i.slice():n[t]=i};for(let e=0,a=arguments.length;e(H(a,((a,i)=>{n&&N(a)?e[i]=j(a,n):e[i]=a}),{allOwnKeys:i}),e),trim:e=>e.trim?e.trim():e.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,""),stripBOM:e=>(65279===e.charCodeAt(0)&&(e=e.slice(1)),e),inherits:(e,a,n,i)=>{e.prototype=Object.create(a.prototype,i),e.prototype.constructor=e,Object.defineProperty(e,"super",{value:a.prototype}),n&&Object.assign(e.prototype,n)},toFlatObject:(e,a,n,i)=>{let o,t,s;const r={};if(a=a||{},null==e)return a;do{for(o=Object.getOwnPropertyNames(e),t=o.length;t-- >0;)s=o[t],i&&!i(s,e,a)||r[s]||(a[s]=e[s],r[s]=!0);e=!1!==n&&S(e)}while(e&&(!n||n(e,a))&&e!==Object.prototype);return a},kindOf:C,kindOfTest:O,endsWith:(e,a,n)=>{e=String(e),(void 0===n||n>e.length)&&(n=e.length),n-=a.length;const i=e.indexOf(a,n);return-1!==i&&i===n},toArray:e=>{if(!e)return null;if(T(e))return e;let a=e.length;if(!F(a))return null;const n=new Array(a);for(;a-- >0;)n[a]=e[a];return n},forEachEntry:(e,a)=>{const n=(e&&e[Symbol.iterator]).call(e);let i;for(;(i=n.next())&&!i.done;){const n=i.value;a.call(e,n[0],n[1])}},matchAll:(e,a)=>{let n;const i=[];for(;null!==(n=e.exec(a));)i.push(n);return i},isHTMLForm:J,hasOwnProperty:X,hasOwnProp:X,reduceDescriptors:Q,freezeMethods:e=>{Q(e,((a,n)=>{if(N(e)&&-1!==["arguments","caller","callee"].indexOf(n))return!1;const i=e[n];N(i)&&(a.enumerable=!1,"writable"in a?a.writable=!1:a.set||(a.set=()=>{throw Error("Can not rewrite read-only method '"+n+"'")}))}))},toObjectSet:(e,a)=>{const n={},i=e=>{e.forEach((e=>{n[e]=!0}))};return T(e)?i(e):i(String(e).split(a)),n},toCamelCase:e=>e.toLowerCase().replace(/[-_\s]([a-z\d])(\w*)/g,(function(e,a,n){return a.toUpperCase()+n})),noop:()=>{},toFiniteNumber:(e,a)=>(e=+e,Number.isFinite(e)?e:a),findKey:K,global:V,isContextDefined:$,ALPHABET:ae,generateString:(e=16,a=ae.ALPHA_DIGIT)=>{let n="";const{length:i}=a;for(;e--;)n+=a[Math.random()*i|0];return n},isSpecCompliantForm:function(e){return!!(e&&N(e.append)&&"FormData"===e[Symbol.toStringTag]&&e[Symbol.iterator])},toJSONObject:e=>{const a=new Array(10),n=(e,i)=>{if(L(e)){if(a.indexOf(e)>=0)return;if(!("toJSON"in e)){a[i]=e;const o=T(e)?[]:{};return H(e,((e,a)=>{const t=n(e,i+1);!R(t)&&(o[a]=t)})),a[i]=void 0,o}}return e};return n(e,0)},isAsyncFn:ne,isThenable:e=>e&&(L(e)||N(e))&&N(e.then)&&N(e.catch)};function oe(e,a,n,i,o){Error.call(this),Error.captureStackTrace?Error.captureStackTrace(this,this.constructor):this.stack=(new Error).stack,this.message=e,this.name="AxiosError",a&&(this.code=a),n&&(this.config=n),i&&(this.request=i),o&&(this.response=o)}ie.inherits(oe,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:ie.toJSONObject(this.config),code:this.code,status:this.response&&this.response.status?this.response.status:null}}});const te=oe.prototype,se={};function re(e){return ie.isPlainObject(e)||ie.isArray(e)}function ce(e){return ie.endsWith(e,"[]")?e.slice(0,-2):e}function pe(e,a,n){return e?e.concat(a).map((function(e,a){return e=ce(e),!n&&a?"["+e+"]":e})).join(n?".":""):a}["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((e=>{se[e]={value:e}})),Object.defineProperties(oe,se),Object.defineProperty(te,"isAxiosError",{value:!0}),oe.from=(e,a,n,i,o,t)=>{const s=Object.create(te);return ie.toFlatObject(e,s,(function(e){return e!==Error.prototype}),(e=>"isAxiosError"!==e)),oe.call(s,e.message,a,n,i,o),s.cause=e,s.name=e.name,t&&Object.assign(s,t),s};const le=ie.toFlatObject(ie,{},null,(function(e){return/^is[A-Z]/.test(e)}));function ue(e,a,n){if(!ie.isObject(e))throw new TypeError("target must be an object");a=a||new(f.default||FormData);const i=(n=ie.toFlatObject(n,{metaTokens:!0,dots:!1,indexes:!1},!1,(function(e,a){return!ie.isUndefined(a[e])}))).metaTokens,o=n.visitor||p,t=n.dots,s=n.indexes,r=(n.Blob||"undefined"!=typeof Blob&&Blob)&&ie.isSpecCompliantForm(a);if(!ie.isFunction(o))throw new TypeError("visitor must be a function");function c(e){if(null===e)return"";if(ie.isDate(e))return e.toISOString();if(!r&&ie.isBlob(e))throw new oe("Blob is not supported. Use a Buffer instead.");return ie.isArrayBuffer(e)||ie.isTypedArray(e)?r&&"function"==typeof Blob?new Blob([e]):Buffer.from(e):e}function p(e,n,o){let r=e;if(e&&!o&&"object"==typeof e)if(ie.endsWith(n,"{}"))n=i?n:n.slice(0,-2),e=JSON.stringify(e);else if(ie.isArray(e)&&function(e){return ie.isArray(e)&&!e.some(re)}(e)||(ie.isFileList(e)||ie.endsWith(n,"[]"))&&(r=ie.toArray(e)))return n=ce(n),r.forEach((function(e,i){!ie.isUndefined(e)&&null!==e&&a.append(!0===s?pe([n],i,t):null===s?n:n+"[]",c(e))})),!1;return!!re(e)||(a.append(pe(o,n,t),c(e)),!1)}const l=[],u=Object.assign(le,{defaultVisitor:p,convertValue:c,isVisitable:re});if(!ie.isObject(e))throw new TypeError("data must be an object");return function e(n,i){if(!ie.isUndefined(n)){if(-1!==l.indexOf(n))throw Error("Circular reference detected in "+i.join("."));l.push(n),ie.forEach(n,(function(n,t){!0===(!(ie.isUndefined(n)||null===n)&&o.call(a,n,ie.isString(t)?t.trim():t,i,u))&&e(n,i?i.concat(t):[t])})),l.pop()}}(e),a}function de(e){const a={"!":"%21","'":"%27","(":"%28",")":"%29","~":"%7E","%20":"+","%00":"\0"};return encodeURIComponent(e).replace(/[!'()~]|%20|%00/g,(function(e){return a[e]}))}function me(e,a){this._pairs=[],e&&ue(e,this,a)}const fe=me.prototype;function xe(e){return encodeURIComponent(e).replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%20/g,"+").replace(/%5B/gi,"[").replace(/%5D/gi,"]")}function ve(e,a,n){if(!a)return e;const i=n&&n.encode||xe,o=n&&n.serialize;let t;if(t=o?o(a,n):ie.isURLSearchParams(a)?a.toString():new me(a,n).toString(i),t){const a=e.indexOf("#");-1!==a&&(e=e.slice(0,a)),e+=(-1===e.indexOf("?")?"?":"&")+t}return e}fe.append=function(e,a){this._pairs.push([e,a])},fe.toString=function(e){const a=e?function(a){return e.call(this,a,de)}:de;return this._pairs.map((function(e){return a(e[0])+"="+a(e[1])}),"").join("&")};const he=class InterceptorManager{constructor(){this.handlers=[]}use(e,a,n){return this.handlers.push({fulfilled:e,rejected:a,synchronous:!!n&&n.synchronous,runWhen:n?n.runWhen:null}),this.handlers.length-1}eject(e){this.handlers[e]&&(this.handlers[e]=null)}clear(){this.handlers&&(this.handlers=[])}forEach(e){ie.forEach(this.handlers,(function(a){null!==a&&e(a)}))}},be={silentJSONParsing:!0,forcedJSONParsing:!0,clarifyTimeoutError:!1},ge={isNode:!0,classes:{URLSearchParams:x.default.URLSearchParams,FormData:f.default,Blob:"undefined"!=typeof Blob&&Blob||null},protocols:["http","https","file","data"]},ye="undefined"!=typeof window&&"undefined"!=typeof document,we=(ke="undefined"!=typeof navigator&&navigator.product,ye&&["ReactNative","NativeScript","NS"].indexOf(ke)<0);var ke;const je="undefined"!=typeof WorkerGlobalScope&&self instanceof WorkerGlobalScope&&"function"==typeof self.importScripts,_e={...Object.freeze({__proto__:null,hasBrowserEnv:ye,hasStandardBrowserWebWorkerEnv:je,hasStandardBrowserEnv:we}),...ge};function Se(e){function a(e,n,i,o){let t=e[o++];const s=Number.isFinite(+t),r=o>=e.length;return t=!t&&ie.isArray(i)?i.length:t,r?(ie.hasOwnProp(i,t)?i[t]=[i[t],n]:i[t]=n,!s):(i[t]&&ie.isObject(i[t])||(i[t]=[]),a(e,n,i[t],o)&&ie.isArray(i[t])&&(i[t]=function(e){const a={},n=Object.keys(e);let i;const o=n.length;let t;for(i=0;i{a(function(e){return ie.matchAll(/\w+|\[(\w*)]/g,e).map((e=>"[]"===e[0]?"":e[1]||e[0]))}(e),i,n,0)})),n}return null}const Ce={transitional:be,adapter:["xhr","http"],transformRequest:[function(e,a){const n=a.getContentType()||"",i=n.indexOf("application/json")>-1,o=ie.isObject(e);if(o&&ie.isHTMLForm(e)&&(e=new FormData(e)),ie.isFormData(e))return i&&i?JSON.stringify(Se(e)):e;if(ie.isArrayBuffer(e)||ie.isBuffer(e)||ie.isStream(e)||ie.isFile(e)||ie.isBlob(e))return e;if(ie.isArrayBufferView(e))return e.buffer;if(ie.isURLSearchParams(e))return a.setContentType("application/x-www-form-urlencoded;charset=utf-8",!1),e.toString();let t;if(o){if(n.indexOf("application/x-www-form-urlencoded")>-1)return function(e,a){return ue(e,new _e.classes.URLSearchParams,Object.assign({visitor:function(e,a,n,i){return _e.isNode&&ie.isBuffer(e)?(this.append(a,e.toString("base64")),!1):i.defaultVisitor.apply(this,arguments)}},a))}(e,this.formSerializer).toString();if((t=ie.isFileList(e))||n.indexOf("multipart/form-data")>-1){const a=this.env&&this.env.FormData;return ue(t?{"files[]":e}:e,a&&new a,this.formSerializer)}}return o||i?(a.setContentType("application/json",!1),function(e,a,n){if(ie.isString(e))try{return(a||JSON.parse)(e),ie.trim(e)}catch(e){if("SyntaxError"!==e.name)throw e}return(n||JSON.stringify)(e)}(e)):e}],transformResponse:[function(e){const a=this.transitional||Ce.transitional,n=a&&a.forcedJSONParsing,i="json"===this.responseType;if(e&&ie.isString(e)&&(n&&!this.responseType||i)){const n=!(a&&a.silentJSONParsing)&&i;try{return JSON.parse(e)}catch(e){if(n){if("SyntaxError"===e.name)throw oe.from(e,oe.ERR_BAD_RESPONSE,this,null,this.response);throw e}}}return e}],timeout:0,xsrfCookieName:"XSRF-TOKEN",xsrfHeaderName:"X-XSRF-TOKEN",maxContentLength:-1,maxBodyLength:-1,env:{FormData:_e.classes.FormData,Blob:_e.classes.Blob},validateStatus:function(e){return e>=200&&e<300},headers:{common:{Accept:"application/json, text/plain, */*","Content-Type":void 0}}};ie.forEach(["delete","get","head","post","put","patch"],(e=>{Ce.headers[e]={}}));const Ee=Ce,Oe=ie.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"]),Ae=Symbol("internals");function Te(e){return e&&String(e).trim().toLowerCase()}function Re(e){return!1===e||null==e?e:ie.isArray(e)?e.map(Re):String(e)}function Pe(e,a,n,i,o){return ie.isFunction(i)?i.call(this,a,n):(o&&(a=n),ie.isString(a)?ie.isString(i)?-1!==a.indexOf(i):ie.isRegExp(i)?i.test(a):void 0:void 0)}class AxiosHeaders{constructor(e){e&&this.set(e)}set(e,a,n){const i=this;function o(e,a,n){const o=Te(a);if(!o)throw new Error("header name must be a non-empty string");const t=ie.findKey(i,o);(!t||void 0===i[t]||!0===n||void 0===n&&!1!==i[t])&&(i[t||a]=Re(e))}const t=(e,a)=>ie.forEach(e,((e,n)=>o(e,n,a)));return ie.isPlainObject(e)||e instanceof this.constructor?t(e,a):ie.isString(e)&&(e=e.trim())&&!/^[-_a-zA-Z0-9^`|~,!#$%&'*+.]+$/.test(e.trim())?t((e=>{const a={};let n,i,o;return e&&e.split("\n").forEach((function(e){o=e.indexOf(":"),n=e.substring(0,o).trim().toLowerCase(),i=e.substring(o+1).trim(),!n||a[n]&&Oe[n]||("set-cookie"===n?a[n]?a[n].push(i):a[n]=[i]:a[n]=a[n]?a[n]+", "+i:i)})),a})(e),a):null!=e&&o(a,e,n),this}get(e,a){if(e=Te(e)){const n=ie.findKey(this,e);if(n){const e=this[n];if(!a)return e;if(!0===a)return function(e){const a=Object.create(null),n=/([^\s,;=]+)\s*(?:=\s*([^,;]+))?/g;let i;for(;i=n.exec(e);)a[i[1]]=i[2];return a}(e);if(ie.isFunction(a))return a.call(this,e,n);if(ie.isRegExp(a))return a.exec(e);throw new TypeError("parser must be boolean|regexp|function")}}}has(e,a){if(e=Te(e)){const n=ie.findKey(this,e);return!(!n||void 0===this[n]||a&&!Pe(0,this[n],n,a))}return!1}delete(e,a){const n=this;let i=!1;function o(e){if(e=Te(e)){const o=ie.findKey(n,e);!o||a&&!Pe(0,n[o],o,a)||(delete n[o],i=!0)}}return ie.isArray(e)?e.forEach(o):o(e),i}clear(e){const a=Object.keys(this);let n=a.length,i=!1;for(;n--;){const o=a[n];e&&!Pe(0,this[o],o,e,!0)||(delete this[o],i=!0)}return i}normalize(e){const a=this,n={};return ie.forEach(this,((i,o)=>{const t=ie.findKey(n,o);if(t)return a[t]=Re(i),void delete a[o];const s=e?function(e){return e.trim().toLowerCase().replace(/([a-z\d])(\w*)/g,((e,a,n)=>a.toUpperCase()+n))}(o):String(o).trim();s!==o&&delete a[o],a[s]=Re(i),n[s]=!0})),this}concat(...e){return this.constructor.concat(this,...e)}toJSON(e){const a=Object.create(null);return ie.forEach(this,((n,i)=>{null!=n&&!1!==n&&(a[i]=e&&ie.isArray(n)?n.join(", "):n)})),a}[Symbol.iterator](){return Object.entries(this.toJSON())[Symbol.iterator]()}toString(){return Object.entries(this.toJSON()).map((([e,a])=>e+": "+a)).join("\n")}get[Symbol.toStringTag](){return"AxiosHeaders"}static from(e){return e instanceof this?e:new this(e)}static concat(e,...a){const n=new this(e);return a.forEach((e=>n.set(e))),n}static accessor(e){const a=(this[Ae]=this[Ae]={accessors:{}}).accessors,n=this.prototype;function i(e){const i=Te(e);a[i]||(function(e,a){const n=ie.toCamelCase(" "+a);["get","set","has"].forEach((i=>{Object.defineProperty(e,i+n,{value:function(e,n,o){return this[i].call(this,a,e,n,o)},configurable:!0})}))}(n,e),a[i]=!0)}return ie.isArray(e)?e.forEach(i):i(e),this}}AxiosHeaders.accessor(["Content-Type","Content-Length","Accept","Accept-Encoding","User-Agent","Authorization"]),ie.reduceDescriptors(AxiosHeaders.prototype,(({value:e},a)=>{let n=a[0].toUpperCase()+a.slice(1);return{get:()=>e,set(e){this[n]=e}}})),ie.freezeMethods(AxiosHeaders);const Be=AxiosHeaders;function Ne(e,a){const n=this||Ee,i=a||n,o=Be.from(i.headers);let t=i.data;return ie.forEach(e,(function(e){t=e.call(n,t,o.normalize(),a?a.status:void 0)})),o.normalize(),t}function Fe(e){return!(!e||!e.__CANCEL__)}function Le(e,a,n){oe.call(this,null==e?"canceled":e,oe.ERR_CANCELED,a,n),this.name="CanceledError"}function ze(e,a,n){const i=n.config.validateStatus;n.status&&i&&!i(n.status)?a(new oe("Request failed with status code "+n.status,[oe.ERR_BAD_REQUEST,oe.ERR_BAD_RESPONSE][Math.floor(n.status/100)-4],n.config,n.request,n)):e(n)}function De(e,a){return e&&!function(e){return/^([a-z][a-z\d+\-.]*:)?\/\//i.test(e)}(a)?function(e,a){return a?e.replace(/\/+$/,"")+"/"+a.replace(/^\/+/,""):e}(e,a):a}ie.inherits(Le,oe,{__CANCEL__:!0});const Ue="1.6.2";function Me(e){const a=/^([-+\w]{1,25})(:?\/\/|:)/.exec(e);return a&&a[1]||""}const qe=/^(?:([^;]+);)?(?:[^;]+;)?(base64|),([\s\S]*)$/;function Ie(e,a){e=e||10;const n=new Array(e),i=new Array(e);let o,t=0,s=0;return a=void 0!==a?a:1e3,function(r){const c=Date.now(),p=i[s];o||(o=c),n[t]=r,i[t]=c;let l=s,u=0;for(;l!==t;)u+=n[l++],l%=e;if(t=(t+1)%e,t===s&&(s=(s+1)%e),c-o!ie.isUndefined(a[e])))).chunkSize});const a=this,n=this[He]={length:e.length,timeWindow:e.timeWindow,ticksRate:e.ticksRate,chunkSize:e.chunkSize,maxRate:e.maxRate,minChunkSize:e.minChunkSize,bytesSeen:0,isCaptured:!1,notifiedBytesLoaded:0,ts:Date.now(),bytes:0,onReadCallback:null},i=Ie(n.ticksRate*e.samplesCount,n.timeWindow);this.on("newListener",(e=>{"progress"===e&&(n.isCaptured||(n.isCaptured=!0))}));let o=0;n.updateProgress=function(e,a){let n=0;const i=1e3/a;let o=null;return function(a,t){const s=Date.now();if(a||s-n>i)return o&&(clearTimeout(o),o=null),n=s,e.apply(null,t);o||(o=setTimeout((()=>(o=null,n=Date.now(),e.apply(null,t))),i-(s-n)))}}((function(){const e=n.length,t=n.bytesSeen,s=t-o;if(!s||a.destroyed)return;const r=i(s);o=t,process.nextTick((()=>{a.emit("progress",{loaded:t,total:e,progress:e?t/e:void 0,bytes:s,rate:r||void 0,estimated:r&&e&&t<=e?(e-t)/r:void 0})}))}),n.ticksRate);const t=()=>{n.updateProgress(!0)};this.once("end",t),this.once("error",t)}_read(e){const a=this[He];return a.onReadCallback&&a.onReadCallback(),super._read(e)}_transform(e,a,n){const i=this,o=this[He],t=o.maxRate,s=this.readableHighWaterMark,r=o.timeWindow,c=t/(1e3/r),p=!1!==o.minChunkSize?Math.max(o.minChunkSize,.01*c):0,l=(e,a)=>{const n=Buffer.byteLength(e);let l,u=null,d=s,m=0;if(t){const e=Date.now();(!o.ts||(m=e-o.ts)>=r)&&(o.ts=e,l=c-o.bytes,o.bytes=l<0?-l:0,m=0),l=c-o.bytes}if(t){if(l<=0)return setTimeout((()=>{a(null,e)}),r-m);ld&&n-d>p&&(u=e.subarray(d),e=e.subarray(0,d)),function(e,a){const n=Buffer.byteLength(e);o.bytesSeen+=n,o.bytes+=n,o.isCaptured&&o.updateProgress(),i.push(e)?process.nextTick(a):o.onReadCallback=()=>{o.onReadCallback=null,process.nextTick(a)}}(e,u?()=>{process.nextTick(a,null,u)}:a)};l(e,(function e(a,i){if(a)return n(a);i?l(i,e):n(null)}))}setLength(e){return this[He].length=+e,this}}const Ke=AxiosTransformStream,{asyncIterator:Ve}=Symbol,$e=async function*(e){e.stream?yield*e.stream():e.arrayBuffer?yield await e.arrayBuffer():e[Ve]?yield*e[Ve]():yield e},Ge=ie.ALPHABET.ALPHA_DIGIT+"-_",We=new c.TextEncoder,Je="\r\n",Xe=We.encode(Je);class FormDataPart{constructor(e,a){const{escapeName:n}=this.constructor,i=ie.isString(a);let o=`Content-Disposition: form-data; name="${n(e)}"${!i&&a.name?`; filename="${n(a.name)}"`:""}\r\n`;i?a=We.encode(String(a).replace(/\r?\n|\r\n?/g,Je)):o+=`Content-Type: ${a.type||"application/octet-stream"}\r\n`,this.headers=We.encode(o+Je),this.contentLength=i?a.byteLength:a.size,this.size=this.headers.byteLength+this.contentLength+2,this.name=e,this.value=a}async*encode(){yield this.headers;const{value:e}=this;ie.isTypedArray(e)?yield e:yield*$e(e),yield Xe}static escapeName(e){return String(e).replace(/[\r\n"]/g,(e=>({"\r":"%0D","\n":"%0A",'"':"%22"}[e])))}}const Ye=(e,a,n)=>{const{tag:i="form-data-boundary",size:o=25,boundary:t=i+"-"+ie.generateString(o,Ge)}=n||{};if(!ie.isFormData(e))throw TypeError("FormData instance required");if(t.length<1||t.length>70)throw Error("boundary must be 10-70 characters long");const s=We.encode("--"+t+Je),r=We.encode("--"+t+"--"+Je+Je);let c=r.byteLength;const p=Array.from(e.entries()).map((([e,a])=>{const n=new FormDataPart(e,a);return c+=n.size,n}));c+=s.byteLength*p.length,c=ie.toFiniteNumber(c);const l={"Content-Type":`multipart/form-data; boundary=${t}`};return Number.isFinite(c)&&(l["Content-Length"]=c),a&&a(l),u.Readable.from(async function*(){for(const e of p)yield s,yield*e.encode();yield r}())};class ZlibHeaderTransformStream extends w.default.Transform{__transform(e,a,n){this.push(e),n()}_transform(e,a,n){if(0!==e.length&&(this._transform=this.__transform,120!==e[0])){const e=Buffer.alloc(2);e[0]=120,e[1]=156,this.push(e,a)}this.__transform(e,a,n)}}const Qe=ZlibHeaderTransformStream,Ze=(e,a)=>ie.isAsyncFn(e)?function(...n){const i=n.pop();e.apply(this,n).then((e=>{try{a?i(null,...a(e)):i(null,e)}catch(e){i(e)}}),i)}:e,ea={flush:y.default.constants.Z_SYNC_FLUSH,finishFlush:y.default.constants.Z_SYNC_FLUSH},aa={flush:y.default.constants.BROTLI_OPERATION_FLUSH,finishFlush:y.default.constants.BROTLI_OPERATION_FLUSH},na=ie.isFunction(y.default.createBrotliDecompress),{http:ia,https:oa}=g.default,ta=/https:?/,sa=_e.protocols.map((e=>e+":"));function ra(e){e.beforeRedirects.proxy&&e.beforeRedirects.proxy(e),e.beforeRedirects.config&&e.beforeRedirects.config(e)}function ca(e,a,n){let i=a;if(!i&&!1!==i){const e=t.getProxyForUrl(n);e&&(i=new URL(e))}if(i){if(i.username&&(i.auth=(i.username||"")+":"+(i.password||"")),i.auth){(i.auth.username||i.auth.password)&&(i.auth=(i.auth.username||"")+":"+(i.auth.password||""));const a=Buffer.from(i.auth,"utf8").toString("base64");e.headers["Proxy-Authorization"]="Basic "+a}e.headers.host=e.hostname+(e.port?":"+e.port:"");const a=i.hostname||i.host;e.hostname=a,e.host=a,e.port=i.port,e.path=n,i.protocol&&(e.protocol=i.protocol.includes(":")?i.protocol:`${i.protocol}:`)}e.beforeRedirects.proxy=function(e){ca(e,a,e.href)}}const pa="undefined"!=typeof process&&"process"===ie.kindOf(process),la=(e,a)=>(({address:e,family:a})=>{if(!ie.isString(e))throw TypeError("address must be a string");return{address:e,family:a||(e.indexOf(".")<0?6:4)}})(ie.isObject(e)?e:{address:e,family:a}),ua=pa&&function(e){return a=async function(a,n,i){let{data:o,lookup:t,family:s}=e;const{responseType:r,responseEncoding:c}=e,p=e.method.toUpperCase();let l,u,d=!1;if(t){const e=Ze(t,(e=>ie.isArray(e)?e:[e]));t=(a,n,i)=>{e(a,n,((e,a,o)=>{const t=ie.isArray(a)?a.map((e=>la(e))):[la(a,o)];n.all?i(e,t):i(e,t[0].address,t[0].family)}))}}const m=new k.default,f=()=>{e.cancelToken&&e.cancelToken.unsubscribe(x),e.signal&&e.signal.removeEventListener("abort",x),m.removeAllListeners()};function x(a){m.emit("abort",!a||a.type?new Le(null,e,u):a)}i(((e,a)=>{l=!0,a&&(d=!0,f())})),m.once("abort",n),(e.cancelToken||e.signal)&&(e.cancelToken&&e.cancelToken.subscribe(x),e.signal&&(e.signal.aborted?x():e.signal.addEventListener("abort",x)));const g=De(e.baseURL,e.url),j=new URL(g,"http://localhost"),_=j.protocol||sa[0];if("data:"===_){let i;if("GET"!==p)return ze(a,n,{status:405,statusText:"method not allowed",headers:{},config:e});try{i=function(e,a,n){const i=n&&n.Blob||_e.classes.Blob,o=Me(e);if(void 0===a&&i&&(a=!0),"data"===o){e=o.length?e.slice(o.length+1):e;const n=qe.exec(e);if(!n)throw new oe("Invalid URL",oe.ERR_INVALID_URL);const t=n[1],s=n[2],r=n[3],c=Buffer.from(decodeURIComponent(r),s?"base64":"utf8");if(a){if(!i)throw new oe("Blob is not supported",oe.ERR_NOT_SUPPORT);return new i([c],{type:t})}return c}throw new oe("Unsupported protocol "+o,oe.ERR_NOT_SUPPORT)}(e.url,"blob"===r,{Blob:e.env&&e.env.Blob})}catch(a){throw oe.from(a,oe.ERR_BAD_REQUEST,e)}return"text"===r?(i=i.toString(c),c&&"utf8"!==c||(i=ie.stripBOM(i))):"stream"===r&&(i=w.default.Readable.from(i)),ze(a,n,{data:i,status:200,statusText:"OK",headers:new Be,config:e})}if(-1===sa.indexOf(_))return n(new oe("Unsupported protocol "+_,oe.ERR_BAD_REQUEST,e));const S=Be.from(e.headers).normalize();S.set("User-Agent","axios/1.6.2",!1);const C=e.onDownloadProgress,E=e.onUploadProgress,O=e.maxRate;let A,T;if(ie.isSpecCompliantForm(o)){const e=S.getContentType(/boundary=([-_\w\d]{10,70})/i);o=Ye(o,(e=>{S.set(e)}),{tag:"axios-1.6.2-boundary",boundary:e&&e[1]||void 0})}else if(ie.isFormData(o)&&ie.isFunction(o.getHeaders)){if(S.set(o.getHeaders()),!S.hasContentLength())try{const e=await b.default.promisify(o.getLength).call(o);Number.isFinite(e)&&e>=0&&S.setContentLength(e)}catch(e){}}else if(ie.isBlob(o))o.size&&S.setContentType(o.type||"application/octet-stream"),S.setContentLength(o.size||0),o=w.default.Readable.from($e(o));else if(o&&!ie.isStream(o)){if(Buffer.isBuffer(o));else if(ie.isArrayBuffer(o))o=Buffer.from(new Uint8Array(o));else{if(!ie.isString(o))return n(new oe("Data after transformation must be a string, an ArrayBuffer, a Buffer, or a Stream",oe.ERR_BAD_REQUEST,e));o=Buffer.from(o,"utf-8")}if(S.setContentLength(o.length,!1),e.maxBodyLength>-1&&o.length>e.maxBodyLength)return n(new oe("Request body larger than maxBodyLength limit",oe.ERR_BAD_REQUEST,e))}const R=ie.toFiniteNumber(S.getContentLength());let P,B;ie.isArray(O)?(A=O[0],T=O[1]):A=T=O,o&&(E||A)&&(ie.isStream(o)||(o=w.default.Readable.from(o,{objectMode:!1})),o=w.default.pipeline([o,new Ke({length:R,maxRate:ie.toFiniteNumber(A)})],ie.noop),E&&o.on("progress",(e=>{E(Object.assign(e,{upload:!0}))}))),e.auth&&(P=(e.auth.username||"")+":"+(e.auth.password||"")),!P&&j.username&&(P=j.username+":"+j.password),P&&S.delete("authorization");try{B=ve(j.pathname+j.search,e.params,e.paramsSerializer).replace(/^\?/,"")}catch(a){const i=new Error(a.message);return i.config=e,i.url=e.url,i.exists=!0,n(i)}S.set("Accept-Encoding","gzip, compress, deflate"+(na?", br":""),!1);const N={path:B,method:p,headers:S.toJSON(),agents:{http:e.httpAgent,https:e.httpsAgent},auth:P,protocol:_,family:s,beforeRedirect:ra,beforeRedirects:{}};let F;!ie.isUndefined(t)&&(N.lookup=t),e.socketPath?N.socketPath=e.socketPath:(N.hostname=j.hostname,N.port=j.port,ca(N,e.proxy,_+"//"+j.hostname+(j.port?":"+j.port:"")+N.path));const L=ta.test(N.protocol);if(N.agent=L?e.httpsAgent:e.httpAgent,e.transport?F=e.transport:0===e.maxRedirects?F=L?h.default:v.default:(e.maxRedirects&&(N.maxRedirects=e.maxRedirects),e.beforeRedirect&&(N.beforeRedirects.config=e.beforeRedirect),F=L?oa:ia),e.maxBodyLength>-1?N.maxBodyLength=e.maxBodyLength:N.maxBodyLength=1/0,e.insecureHTTPParser&&(N.insecureHTTPParser=e.insecureHTTPParser),u=F.request(N,(function(i){if(u.destroyed)return;const o=[i],t=+i.headers["content-length"];if(C){const e=new Ke({length:ie.toFiniteNumber(t),maxRate:ie.toFiniteNumber(T)});C&&e.on("progress",(e=>{C(Object.assign(e,{download:!0}))})),o.push(e)}let s=i;const l=i.req||u;if(!1!==e.decompress&&i.headers["content-encoding"])switch("HEAD"!==p&&204!==i.statusCode||delete i.headers["content-encoding"],(i.headers["content-encoding"]||"").toLowerCase()){case"gzip":case"x-gzip":case"compress":case"x-compress":o.push(y.default.createUnzip(ea)),delete i.headers["content-encoding"];break;case"deflate":o.push(new Qe),o.push(y.default.createUnzip(ea)),delete i.headers["content-encoding"];break;case"br":na&&(o.push(y.default.createBrotliDecompress(aa)),delete i.headers["content-encoding"])}s=o.length>1?w.default.pipeline(o,ie.noop):o[0];const x=w.default.finished(s,(()=>{x(),f()})),v={status:i.statusCode,statusText:i.statusMessage,headers:new Be(i.headers),config:e,request:l};if("stream"===r)v.data=s,ze(a,n,v);else{const i=[];let o=0;s.on("data",(function(a){i.push(a),o+=a.length,e.maxContentLength>-1&&o>e.maxContentLength&&(d=!0,s.destroy(),n(new oe("maxContentLength size of "+e.maxContentLength+" exceeded",oe.ERR_BAD_RESPONSE,e,l)))})),s.on("aborted",(function(){if(d)return;const a=new oe("maxContentLength size of "+e.maxContentLength+" exceeded",oe.ERR_BAD_RESPONSE,e,l);s.destroy(a),n(a)})),s.on("error",(function(a){u.destroyed||n(oe.from(a,null,e,l))})),s.on("end",(function(){try{let e=1===i.length?i[0]:Buffer.concat(i);"arraybuffer"!==r&&(e=e.toString(c),c&&"utf8"!==c||(e=ie.stripBOM(e))),v.data=e}catch(a){return n(oe.from(a,null,e,v.request,v))}ze(a,n,v)}))}m.once("abort",(e=>{s.destroyed||(s.emit("error",e),s.destroy())}))})),m.once("abort",(e=>{n(e),u.destroy(e)})),u.on("error",(function(a){n(oe.from(a,null,e,u))})),u.on("socket",(function(e){e.setKeepAlive(!0,6e4)})),e.timeout){const a=parseInt(e.timeout,10);if(Number.isNaN(a))return void n(new oe("error trying to parse `config.timeout` to int",oe.ERR_BAD_OPTION_VALUE,e,u));u.setTimeout(a,(function(){if(l)return;let a=e.timeout?"timeout of "+e.timeout+"ms exceeded":"timeout exceeded";const i=e.transitional||be;e.timeoutErrorMessage&&(a=e.timeoutErrorMessage),n(new oe(a,i.clarifyTimeoutError?oe.ETIMEDOUT:oe.ECONNABORTED,e,u)),x()}))}if(ie.isStream(o)){let a=!1,n=!1;o.on("end",(()=>{a=!0})),o.once("error",(e=>{n=!0,u.destroy(e)})),o.on("close",(()=>{a||n||x(new Le("Request stream has been aborted",e,u))})),o.pipe(u)}else u.end(o)},new Promise(((e,n)=>{let i,o;const t=(e,a)=>{o||(o=!0,i&&i(e,a))},s=e=>{t(e,!0),n(e)};a((a=>{t(a),e(a)}),s,(e=>i=e)).catch(s)}));var a},da=_e.hasStandardBrowserEnv?{write(e,a,n,i,o,t){const s=[e+"="+encodeURIComponent(a)];ie.isNumber(n)&&s.push("expires="+new Date(n).toGMTString()),ie.isString(i)&&s.push("path="+i),ie.isString(o)&&s.push("domain="+o),!0===t&&s.push("secure"),document.cookie=s.join("; ")},read(e){const a=document.cookie.match(new RegExp("(^|;\\s*)("+e+")=([^;]*)"));return a?decodeURIComponent(a[3]):null},remove(e){this.write(e,"",Date.now()-864e5)}}:{write(){},read:()=>null,remove(){}},ma=_e.hasStandardBrowserEnv?function(){const e=/(msie|trident)/i.test(navigator.userAgent),a=document.createElement("a");let n;function i(n){let i=n;return e&&(a.setAttribute("href",i),i=a.href),a.setAttribute("href",i),{href:a.href,protocol:a.protocol?a.protocol.replace(/:$/,""):"",host:a.host,search:a.search?a.search.replace(/^\?/,""):"",hash:a.hash?a.hash.replace(/^#/,""):"",hostname:a.hostname,port:a.port,pathname:"/"===a.pathname.charAt(0)?a.pathname:"/"+a.pathname}}return n=i(window.location.href),function(e){const a=ie.isString(e)?i(e):e;return a.protocol===n.protocol&&a.host===n.host}}():function(){return!0};function fa(e,a){let n=0;const i=Ie(50,250);return o=>{const t=o.loaded,s=o.lengthComputable?o.total:void 0,r=t-n,c=i(r);n=t;const p={loaded:t,total:s,progress:s?t/s:void 0,bytes:r,rate:c||void 0,estimated:c&&s&&t<=s?(s-t)/c:void 0,event:o};p[a?"download":"upload"]=!0,e(p)}}const xa={http:ua,xhr:"undefined"!=typeof XMLHttpRequest&&function(e){return new Promise((function(a,n){let i=e.data;const o=Be.from(e.headers).normalize();let t,s,{responseType:r,withXSRFToken:c}=e;function p(){e.cancelToken&&e.cancelToken.unsubscribe(t),e.signal&&e.signal.removeEventListener("abort",t)}if(ie.isFormData(i))if(_e.hasStandardBrowserEnv||_e.hasStandardBrowserWebWorkerEnv)o.setContentType(!1);else if(!1!==(s=o.getContentType())){const[e,...a]=s?s.split(";").map((e=>e.trim())).filter(Boolean):[];o.setContentType([e||"multipart/form-data",...a].join("; "))}let l=new XMLHttpRequest;if(e.auth){const a=e.auth.username||"",n=e.auth.password?unescape(encodeURIComponent(e.auth.password)):"";o.set("Authorization","Basic "+btoa(a+":"+n))}const u=De(e.baseURL,e.url);function d(){if(!l)return;const i=Be.from("getAllResponseHeaders"in l&&l.getAllResponseHeaders());ze((function(e){a(e),p()}),(function(e){n(e),p()}),{data:r&&"text"!==r&&"json"!==r?l.response:l.responseText,status:l.status,statusText:l.statusText,headers:i,config:e,request:l}),l=null}if(l.open(e.method.toUpperCase(),ve(u,e.params,e.paramsSerializer),!0),l.timeout=e.timeout,"onloadend"in l?l.onloadend=d:l.onreadystatechange=function(){l&&4===l.readyState&&(0!==l.status||l.responseURL&&0===l.responseURL.indexOf("file:"))&&setTimeout(d)},l.onabort=function(){l&&(n(new oe("Request aborted",oe.ECONNABORTED,e,l)),l=null)},l.onerror=function(){n(new oe("Network Error",oe.ERR_NETWORK,e,l)),l=null},l.ontimeout=function(){let a=e.timeout?"timeout of "+e.timeout+"ms exceeded":"timeout exceeded";const i=e.transitional||be;e.timeoutErrorMessage&&(a=e.timeoutErrorMessage),n(new oe(a,i.clarifyTimeoutError?oe.ETIMEDOUT:oe.ECONNABORTED,e,l)),l=null},_e.hasStandardBrowserEnv&&(c&&ie.isFunction(c)&&(c=c(e)),c||!1!==c&&ma(u))){const a=e.xsrfHeaderName&&e.xsrfCookieName&&da.read(e.xsrfCookieName);a&&o.set(e.xsrfHeaderName,a)}void 0===i&&o.setContentType(null),"setRequestHeader"in l&&ie.forEach(o.toJSON(),(function(e,a){l.setRequestHeader(a,e)})),ie.isUndefined(e.withCredentials)||(l.withCredentials=!!e.withCredentials),r&&"json"!==r&&(l.responseType=e.responseType),"function"==typeof e.onDownloadProgress&&l.addEventListener("progress",fa(e.onDownloadProgress,!0)),"function"==typeof e.onUploadProgress&&l.upload&&l.upload.addEventListener("progress",fa(e.onUploadProgress)),(e.cancelToken||e.signal)&&(t=a=>{l&&(n(!a||a.type?new Le(null,e,l):a),l.abort(),l=null)},e.cancelToken&&e.cancelToken.subscribe(t),e.signal&&(e.signal.aborted?t():e.signal.addEventListener("abort",t)));const m=Me(u);m&&-1===_e.protocols.indexOf(m)?n(new oe("Unsupported protocol "+m+":",oe.ERR_BAD_REQUEST,e)):l.send(i||null)}))}};ie.forEach(xa,((e,a)=>{if(e){try{Object.defineProperty(e,"name",{value:a})}catch(e){}Object.defineProperty(e,"adapterName",{value:a})}}));const va=e=>`- ${e}`,ha=e=>ie.isFunction(e)||null===e||!1===e,ba=e=>{e=ie.isArray(e)?e:[e];const{length:a}=e;let n,i;const o={};for(let t=0;t`adapter ${e} `+(!1===a?"is not supported by the environment":"is not available in the build")));throw new oe("There is no suitable adapter to dispatch the request "+(a?e.length>1?"since :\n"+e.map(va).join("\n"):" "+va(e[0]):"as no adapter specified"),"ERR_NOT_SUPPORT")}return i};function ga(e){if(e.cancelToken&&e.cancelToken.throwIfRequested(),e.signal&&e.signal.aborted)throw new Le(null,e)}function ya(e){return ga(e),e.headers=Be.from(e.headers),e.data=Ne.call(e,e.transformRequest),-1!==["post","put","patch"].indexOf(e.method)&&e.headers.setContentType("application/x-www-form-urlencoded",!1),ba(e.adapter||Ee.adapter)(e).then((function(a){return ga(e),a.data=Ne.call(e,e.transformResponse,a),a.headers=Be.from(a.headers),a}),(function(a){return Fe(a)||(ga(e),a&&a.response&&(a.response.data=Ne.call(e,e.transformResponse,a.response),a.response.headers=Be.from(a.response.headers))),Promise.reject(a)}))}const wa=e=>e instanceof Be?e.toJSON():e;function ka(e,a){a=a||{};const n={};function i(e,a,n){return ie.isPlainObject(e)&&ie.isPlainObject(a)?ie.merge.call({caseless:n},e,a):ie.isPlainObject(a)?ie.merge({},a):ie.isArray(a)?a.slice():a}function o(e,a,n){return ie.isUndefined(a)?ie.isUndefined(e)?void 0:i(void 0,e,n):i(e,a,n)}function t(e,a){if(!ie.isUndefined(a))return i(void 0,a)}function s(e,a){return ie.isUndefined(a)?ie.isUndefined(e)?void 0:i(void 0,e):i(void 0,a)}function r(n,o,t){return t in a?i(n,o):t in e?i(void 0,n):void 0}const c={url:t,method:t,data:t,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:r,headers:(e,a)=>o(wa(e),wa(a),!0)};return ie.forEach(Object.keys(Object.assign({},e,a)),(function(i){const t=c[i]||o,s=t(e[i],a[i],i);ie.isUndefined(s)&&t!==r||(n[i]=s)})),n}const ja={};["object","boolean","number","function","string","symbol"].forEach(((e,a)=>{ja[e]=function(n){return typeof n===e||"a"+(a<1?"n ":" ")+e}}));const _a={};ja.transitional=function(e,a,n){function i(e,a){return"[Axios v1.6.2] Transitional option '"+e+"'"+a+(n?". "+n:"")}return(n,o,t)=>{if(!1===e)throw new oe(i(o," has been removed"+(a?" in "+a:"")),oe.ERR_DEPRECATED);return a&&!_a[o]&&(_a[o]=!0,console.warn(i(o," has been deprecated since v"+a+" and will be removed in the near future"))),!e||e(n,o,t)}};const Sa={assertOptions:function(e,a,n){if("object"!=typeof e)throw new oe("options must be an object",oe.ERR_BAD_OPTION_VALUE);const i=Object.keys(e);let o=i.length;for(;o-- >0;){const t=i[o],s=a[t];if(s){const a=e[t],n=void 0===a||s(a,t,e);if(!0!==n)throw new oe("option "+t+" must be "+n,oe.ERR_BAD_OPTION_VALUE)}else if(!0!==n)throw new oe("Unknown option "+t,oe.ERR_BAD_OPTION)}},validators:ja},Ca=Sa.validators;class Axios{constructor(e){this.defaults=e,this.interceptors={request:new he,response:new he}}request(e,a){"string"==typeof e?(a=a||{}).url=e:a=e||{},a=ka(this.defaults,a);const{transitional:n,paramsSerializer:i,headers:o}=a;void 0!==n&&Sa.assertOptions(n,{silentJSONParsing:Ca.transitional(Ca.boolean),forcedJSONParsing:Ca.transitional(Ca.boolean),clarifyTimeoutError:Ca.transitional(Ca.boolean)},!1),null!=i&&(ie.isFunction(i)?a.paramsSerializer={serialize:i}:Sa.assertOptions(i,{encode:Ca.function,serialize:Ca.function},!0)),a.method=(a.method||this.defaults.method||"get").toLowerCase();let t=o&&ie.merge(o.common,o[a.method]);o&&ie.forEach(["delete","get","head","post","put","patch","common"],(e=>{delete o[e]})),a.headers=Be.concat(t,o);const s=[];let r=!0;this.interceptors.request.forEach((function(e){"function"==typeof e.runWhen&&!1===e.runWhen(a)||(r=r&&e.synchronous,s.unshift(e.fulfilled,e.rejected))}));const c=[];let p;this.interceptors.response.forEach((function(e){c.push(e.fulfilled,e.rejected)}));let l,u=0;if(!r){const e=[ya.bind(this),void 0];for(e.unshift.apply(e,s),e.push.apply(e,c),l=e.length,p=Promise.resolve(a);u{if(!n._listeners)return;let a=n._listeners.length;for(;a-- >0;)n._listeners[a](e);n._listeners=null})),this.promise.then=e=>{let a;const i=new Promise((e=>{n.subscribe(e),a=e})).then(e);return i.cancel=function(){n.unsubscribe(a)},i},e((function(e,i,o){n.reason||(n.reason=new Le(e,i,o),a(n.reason))}))}throwIfRequested(){if(this.reason)throw this.reason}subscribe(e){this.reason?e(this.reason):this._listeners?this._listeners.push(e):this._listeners=[e]}unsubscribe(e){if(!this._listeners)return;const a=this._listeners.indexOf(e);-1!==a&&this._listeners.splice(a,1)}static source(){let e;return{token:new CancelToken((function(a){e=a})),cancel:e}}}const Oa=CancelToken,Aa={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(Aa).forEach((([e,a])=>{Aa[a]=e}));const Ta=Aa,Ra=function e(a){const n=new Ea(a),i=j(Ea.prototype.request,n);return ie.extend(i,Ea.prototype,n,{allOwnKeys:!0}),ie.extend(i,n,null,{allOwnKeys:!0}),i.create=function(n){return e(ka(a,n))},i}(Ee);Ra.Axios=Ea,Ra.CanceledError=Le,Ra.CancelToken=Oa,Ra.isCancel=Fe,Ra.VERSION=Ue,Ra.toFormData=ue,Ra.AxiosError=oe,Ra.Cancel=Ra.CanceledError,Ra.all=function(e){return Promise.all(e)},Ra.spread=function(e){return function(a){return e.apply(null,a)}},Ra.isAxiosError=function(e){return ie.isObject(e)&&!0===e.isAxiosError},Ra.mergeConfig=ka,Ra.AxiosHeaders=Be,Ra.formToJSON=e=>Se(ie.isHTMLForm(e)?new FormData(e):e),Ra.getAdapter=ba,Ra.HttpStatusCode=Ta,Ra.default=Ra,e.exports=Ra},3765:e=>{"use strict";e.exports=JSON.parse('{"application/1d-interleaved-parityfec":{"source":"iana"},"application/3gpdash-qoe-report+xml":{"source":"iana","charset":"UTF-8","compressible":true},"application/3gpp-ims+xml":{"source":"iana","compressible":true},"application/3gpphal+json":{"source":"iana","compressible":true},"application/3gpphalforms+json":{"source":"iana","compressible":true},"application/a2l":{"source":"iana"},"application/ace+cbor":{"source":"iana"},"application/activemessage":{"source":"iana"},"application/activity+json":{"source":"iana","compressible":true},"application/alto-costmap+json":{"source":"iana","compressible":true},"application/alto-costmapfilter+json":{"source":"iana","compressible":true},"application/alto-directory+json":{"source":"iana","compressible":true},"application/alto-endpointcost+json":{"source":"iana","compressible":true},"application/alto-endpointcostparams+json":{"source":"iana","compressible":true},"application/alto-endpointprop+json":{"source":"iana","compressible":true},"application/alto-endpointpropparams+json":{"source":"iana","compressible":true},"application/alto-error+json":{"source":"iana","compressible":true},"application/alto-networkmap+json":{"source":"iana","compressible":true},"application/alto-networkmapfilter+json":{"source":"iana","compressible":true},"application/alto-updatestreamcontrol+json":{"source":"iana","compressible":true},"application/alto-updatestreamparams+json":{"source":"iana","compressible":true},"application/aml":{"source":"iana"},"application/andrew-inset":{"source":"iana","extensions":["ez"]},"application/applefile":{"source":"iana"},"application/applixware":{"source":"apache","extensions":["aw"]},"application/at+jwt":{"source":"iana"},"application/atf":{"source":"iana"},"application/atfx":{"source":"iana"},"application/atom+xml":{"source":"iana","compressible":true,"extensions":["atom"]},"application/atomcat+xml":{"source":"iana","compressible":true,"extensions":["atomcat"]},"application/atomdeleted+xml":{"source":"iana","compressible":true,"extensions":["atomdeleted"]},"application/atomicmail":{"source":"iana"},"application/atomsvc+xml":{"source":"iana","compressible":true,"extensions":["atomsvc"]},"application/atsc-dwd+xml":{"source":"iana","compressible":true,"extensions":["dwd"]},"application/atsc-dynamic-event-message":{"source":"iana"},"application/atsc-held+xml":{"source":"iana","compressible":true,"extensions":["held"]},"application/atsc-rdt+json":{"source":"iana","compressible":true},"application/atsc-rsat+xml":{"source":"iana","compressible":true,"extensions":["rsat"]},"application/atxml":{"source":"iana"},"application/auth-policy+xml":{"source":"iana","compressible":true},"application/bacnet-xdd+zip":{"source":"iana","compressible":false},"application/batch-smtp":{"source":"iana"},"application/bdoc":{"compressible":false,"extensions":["bdoc"]},"application/beep+xml":{"source":"iana","charset":"UTF-8","compressible":true},"application/calendar+json":{"source":"iana","compressible":true},"application/calendar+xml":{"source":"iana","compressible":true,"extensions":["xcs"]},"application/call-completion":{"source":"iana"},"application/cals-1840":{"source":"iana"},"application/captive+json":{"source":"iana","compressible":true},"application/cbor":{"source":"iana"},"application/cbor-seq":{"source":"iana"},"application/cccex":{"source":"iana"},"application/ccmp+xml":{"source":"iana","compressible":true},"application/ccxml+xml":{"source":"iana","compressible":true,"extensions":["ccxml"]},"application/cdfx+xml":{"source":"iana","compressible":true,"extensions":["cdfx"]},"application/cdmi-capability":{"source":"iana","extensions":["cdmia"]},"application/cdmi-container":{"source":"iana","extensions":["cdmic"]},"application/cdmi-domain":{"source":"iana","extensions":["cdmid"]},"application/cdmi-object":{"source":"iana","extensions":["cdmio"]},"application/cdmi-queue":{"source":"iana","extensions":["cdmiq"]},"application/cdni":{"source":"iana"},"application/cea":{"source":"iana"},"application/cea-2018+xml":{"source":"iana","compressible":true},"application/cellml+xml":{"source":"iana","compressible":true},"application/cfw":{"source":"iana"},"application/city+json":{"source":"iana","compressible":true},"application/clr":{"source":"iana"},"application/clue+xml":{"source":"iana","compressible":true},"application/clue_info+xml":{"source":"iana","compressible":true},"application/cms":{"source":"iana"},"application/cnrp+xml":{"source":"iana","compressible":true},"application/coap-group+json":{"source":"iana","compressible":true},"application/coap-payload":{"source":"iana"},"application/commonground":{"source":"iana"},"application/conference-info+xml":{"source":"iana","compressible":true},"application/cose":{"source":"iana"},"application/cose-key":{"source":"iana"},"application/cose-key-set":{"source":"iana"},"application/cpl+xml":{"source":"iana","compressible":true,"extensions":["cpl"]},"application/csrattrs":{"source":"iana"},"application/csta+xml":{"source":"iana","compressible":true},"application/cstadata+xml":{"source":"iana","compressible":true},"application/csvm+json":{"source":"iana","compressible":true},"application/cu-seeme":{"source":"apache","extensions":["cu"]},"application/cwt":{"source":"iana"},"application/cybercash":{"source":"iana"},"application/dart":{"compressible":true},"application/dash+xml":{"source":"iana","compressible":true,"extensions":["mpd"]},"application/dash-patch+xml":{"source":"iana","compressible":true,"extensions":["mpp"]},"application/dashdelta":{"source":"iana"},"application/davmount+xml":{"source":"iana","compressible":true,"extensions":["davmount"]},"application/dca-rft":{"source":"iana"},"application/dcd":{"source":"iana"},"application/dec-dx":{"source":"iana"},"application/dialog-info+xml":{"source":"iana","compressible":true},"application/dicom":{"source":"iana"},"application/dicom+json":{"source":"iana","compressible":true},"application/dicom+xml":{"source":"iana","compressible":true},"application/dii":{"source":"iana"},"application/dit":{"source":"iana"},"application/dns":{"source":"iana"},"application/dns+json":{"source":"iana","compressible":true},"application/dns-message":{"source":"iana"},"application/docbook+xml":{"source":"apache","compressible":true,"extensions":["dbk"]},"application/dots+cbor":{"source":"iana"},"application/dskpp+xml":{"source":"iana","compressible":true},"application/dssc+der":{"source":"iana","extensions":["dssc"]},"application/dssc+xml":{"source":"iana","compressible":true,"extensions":["xdssc"]},"application/dvcs":{"source":"iana"},"application/ecmascript":{"source":"iana","compressible":true,"extensions":["es","ecma"]},"application/edi-consent":{"source":"iana"},"application/edi-x12":{"source":"iana","compressible":false},"application/edifact":{"source":"iana","compressible":false},"application/efi":{"source":"iana"},"application/elm+json":{"source":"iana","charset":"UTF-8","compressible":true},"application/elm+xml":{"source":"iana","compressible":true},"application/emergencycalldata.cap+xml":{"source":"iana","charset":"UTF-8","compressible":true},"application/emergencycalldata.comment+xml":{"source":"iana","compressible":true},"application/emergencycalldata.control+xml":{"source":"iana","compressible":true},"application/emergencycalldata.deviceinfo+xml":{"source":"iana","compressible":true},"application/emergencycalldata.ecall.msd":{"source":"iana"},"application/emergencycalldata.providerinfo+xml":{"source":"iana","compressible":true},"application/emergencycalldata.serviceinfo+xml":{"source":"iana","compressible":true},"application/emergencycalldata.subscriberinfo+xml":{"source":"iana","compressible":true},"application/emergencycalldata.veds+xml":{"source":"iana","compressible":true},"application/emma+xml":{"source":"iana","compressible":true,"extensions":["emma"]},"application/emotionml+xml":{"source":"iana","compressible":true,"extensions":["emotionml"]},"application/encaprtp":{"source":"iana"},"application/epp+xml":{"source":"iana","compressible":true},"application/epub+zip":{"source":"iana","compressible":false,"extensions":["epub"]},"application/eshop":{"source":"iana"},"application/exi":{"source":"iana","extensions":["exi"]},"application/expect-ct-report+json":{"source":"iana","compressible":true},"application/express":{"source":"iana","extensions":["exp"]},"application/fastinfoset":{"source":"iana"},"application/fastsoap":{"source":"iana"},"application/fdt+xml":{"source":"iana","compressible":true,"extensions":["fdt"]},"application/fhir+json":{"source":"iana","charset":"UTF-8","compressible":true},"application/fhir+xml":{"source":"iana","charset":"UTF-8","compressible":true},"application/fido.trusted-apps+json":{"compressible":true},"application/fits":{"source":"iana"},"application/flexfec":{"source":"iana"},"application/font-sfnt":{"source":"iana"},"application/font-tdpfr":{"source":"iana","extensions":["pfr"]},"application/font-woff":{"source":"iana","compressible":false},"application/framework-attributes+xml":{"source":"iana","compressible":true},"application/geo+json":{"source":"iana","compressible":true,"extensions":["geojson"]},"application/geo+json-seq":{"source":"iana"},"application/geopackage+sqlite3":{"source":"iana"},"application/geoxacml+xml":{"source":"iana","compressible":true},"application/gltf-buffer":{"source":"iana"},"application/gml+xml":{"source":"iana","compressible":true,"extensions":["gml"]},"application/gpx+xml":{"source":"apache","compressible":true,"extensions":["gpx"]},"application/gxf":{"source":"apache","extensions":["gxf"]},"application/gzip":{"source":"iana","compressible":false,"extensions":["gz"]},"application/h224":{"source":"iana"},"application/held+xml":{"source":"iana","compressible":true},"application/hjson":{"extensions":["hjson"]},"application/http":{"source":"iana"},"application/hyperstudio":{"source":"iana","extensions":["stk"]},"application/ibe-key-request+xml":{"source":"iana","compressible":true},"application/ibe-pkg-reply+xml":{"source":"iana","compressible":true},"application/ibe-pp-data":{"source":"iana"},"application/iges":{"source":"iana"},"application/im-iscomposing+xml":{"source":"iana","charset":"UTF-8","compressible":true},"application/index":{"source":"iana"},"application/index.cmd":{"source":"iana"},"application/index.obj":{"source":"iana"},"application/index.response":{"source":"iana"},"application/index.vnd":{"source":"iana"},"application/inkml+xml":{"source":"iana","compressible":true,"extensions":["ink","inkml"]},"application/iotp":{"source":"iana"},"application/ipfix":{"source":"iana","extensions":["ipfix"]},"application/ipp":{"source":"iana"},"application/isup":{"source":"iana"},"application/its+xml":{"source":"iana","compressible":true,"extensions":["its"]},"application/java-archive":{"source":"apache","compressible":false,"extensions":["jar","war","ear"]},"application/java-serialized-object":{"source":"apache","compressible":false,"extensions":["ser"]},"application/java-vm":{"source":"apache","compressible":false,"extensions":["class"]},"application/javascript":{"source":"iana","charset":"UTF-8","compressible":true,"extensions":["js","mjs"]},"application/jf2feed+json":{"source":"iana","compressible":true},"application/jose":{"source":"iana"},"application/jose+json":{"source":"iana","compressible":true},"application/jrd+json":{"source":"iana","compressible":true},"application/jscalendar+json":{"source":"iana","compressible":true},"application/json":{"source":"iana","charset":"UTF-8","compressible":true,"extensions":["json","map"]},"application/json-patch+json":{"source":"iana","compressible":true},"application/json-seq":{"source":"iana"},"application/json5":{"extensions":["json5"]},"application/jsonml+json":{"source":"apache","compressible":true,"extensions":["jsonml"]},"application/jwk+json":{"source":"iana","compressible":true},"application/jwk-set+json":{"source":"iana","compressible":true},"application/jwt":{"source":"iana"},"application/kpml-request+xml":{"source":"iana","compressible":true},"application/kpml-response+xml":{"source":"iana","compressible":true},"application/ld+json":{"source":"iana","compressible":true,"extensions":["jsonld"]},"application/lgr+xml":{"source":"iana","compressible":true,"extensions":["lgr"]},"application/link-format":{"source":"iana"},"application/load-control+xml":{"source":"iana","compressible":true},"application/lost+xml":{"source":"iana","compressible":true,"extensions":["lostxml"]},"application/lostsync+xml":{"source":"iana","compressible":true},"application/lpf+zip":{"source":"iana","compressible":false},"application/lxf":{"source":"iana"},"application/mac-binhex40":{"source":"iana","extensions":["hqx"]},"application/mac-compactpro":{"source":"apache","extensions":["cpt"]},"application/macwriteii":{"source":"iana"},"application/mads+xml":{"source":"iana","compressible":true,"extensions":["mads"]},"application/manifest+json":{"source":"iana","charset":"UTF-8","compressible":true,"extensions":["webmanifest"]},"application/marc":{"source":"iana","extensions":["mrc"]},"application/marcxml+xml":{"source":"iana","compressible":true,"extensions":["mrcx"]},"application/mathematica":{"source":"iana","extensions":["ma","nb","mb"]},"application/mathml+xml":{"source":"iana","compressible":true,"extensions":["mathml"]},"application/mathml-content+xml":{"source":"iana","compressible":true},"application/mathml-presentation+xml":{"source":"iana","compressible":true},"application/mbms-associated-procedure-description+xml":{"source":"iana","compressible":true},"application/mbms-deregister+xml":{"source":"iana","compressible":true},"application/mbms-envelope+xml":{"source":"iana","compressible":true},"application/mbms-msk+xml":{"source":"iana","compressible":true},"application/mbms-msk-response+xml":{"source":"iana","compressible":true},"application/mbms-protection-description+xml":{"source":"iana","compressible":true},"application/mbms-reception-report+xml":{"source":"iana","compressible":true},"application/mbms-register+xml":{"source":"iana","compressible":true},"application/mbms-register-response+xml":{"source":"iana","compressible":true},"application/mbms-schedule+xml":{"source":"iana","compressible":true},"application/mbms-user-service-description+xml":{"source":"iana","compressible":true},"application/mbox":{"source":"iana","extensions":["mbox"]},"application/media-policy-dataset+xml":{"source":"iana","compressible":true,"extensions":["mpf"]},"application/media_control+xml":{"source":"iana","compressible":true},"application/mediaservercontrol+xml":{"source":"iana","compressible":true,"extensions":["mscml"]},"application/merge-patch+json":{"source":"iana","compressible":true},"application/metalink+xml":{"source":"apache","compressible":true,"extensions":["metalink"]},"application/metalink4+xml":{"source":"iana","compressible":true,"extensions":["meta4"]},"application/mets+xml":{"source":"iana","compressible":true,"extensions":["mets"]},"application/mf4":{"source":"iana"},"application/mikey":{"source":"iana"},"application/mipc":{"source":"iana"},"application/missing-blocks+cbor-seq":{"source":"iana"},"application/mmt-aei+xml":{"source":"iana","compressible":true,"extensions":["maei"]},"application/mmt-usd+xml":{"source":"iana","compressible":true,"extensions":["musd"]},"application/mods+xml":{"source":"iana","compressible":true,"extensions":["mods"]},"application/moss-keys":{"source":"iana"},"application/moss-signature":{"source":"iana"},"application/mosskey-data":{"source":"iana"},"application/mosskey-request":{"source":"iana"},"application/mp21":{"source":"iana","extensions":["m21","mp21"]},"application/mp4":{"source":"iana","extensions":["mp4s","m4p"]},"application/mpeg4-generic":{"source":"iana"},"application/mpeg4-iod":{"source":"iana"},"application/mpeg4-iod-xmt":{"source":"iana"},"application/mrb-consumer+xml":{"source":"iana","compressible":true},"application/mrb-publish+xml":{"source":"iana","compressible":true},"application/msc-ivr+xml":{"source":"iana","charset":"UTF-8","compressible":true},"application/msc-mixer+xml":{"source":"iana","charset":"UTF-8","compressible":true},"application/msword":{"source":"iana","compressible":false,"extensions":["doc","dot"]},"application/mud+json":{"source":"iana","compressible":true},"application/multipart-core":{"source":"iana"},"application/mxf":{"source":"iana","extensions":["mxf"]},"application/n-quads":{"source":"iana","extensions":["nq"]},"application/n-triples":{"source":"iana","extensions":["nt"]},"application/nasdata":{"source":"iana"},"application/news-checkgroups":{"source":"iana","charset":"US-ASCII"},"application/news-groupinfo":{"source":"iana","charset":"US-ASCII"},"application/news-transmission":{"source":"iana"},"application/nlsml+xml":{"source":"iana","compressible":true},"application/node":{"source":"iana","extensions":["cjs"]},"application/nss":{"source":"iana"},"application/oauth-authz-req+jwt":{"source":"iana"},"application/oblivious-dns-message":{"source":"iana"},"application/ocsp-request":{"source":"iana"},"application/ocsp-response":{"source":"iana"},"application/octet-stream":{"source":"iana","compressible":false,"extensions":["bin","dms","lrf","mar","so","dist","distz","pkg","bpk","dump","elc","deploy","exe","dll","deb","dmg","iso","img","msi","msp","msm","buffer"]},"application/oda":{"source":"iana","extensions":["oda"]},"application/odm+xml":{"source":"iana","compressible":true},"application/odx":{"source":"iana"},"application/oebps-package+xml":{"source":"iana","compressible":true,"extensions":["opf"]},"application/ogg":{"source":"iana","compressible":false,"extensions":["ogx"]},"application/omdoc+xml":{"source":"apache","compressible":true,"extensions":["omdoc"]},"application/onenote":{"source":"apache","extensions":["onetoc","onetoc2","onetmp","onepkg"]},"application/opc-nodeset+xml":{"source":"iana","compressible":true},"application/oscore":{"source":"iana"},"application/oxps":{"source":"iana","extensions":["oxps"]},"application/p21":{"source":"iana"},"application/p21+zip":{"source":"iana","compressible":false},"application/p2p-overlay+xml":{"source":"iana","compressible":true,"extensions":["relo"]},"application/parityfec":{"source":"iana"},"application/passport":{"source":"iana"},"application/patch-ops-error+xml":{"source":"iana","compressible":true,"extensions":["xer"]},"application/pdf":{"source":"iana","compressible":false,"extensions":["pdf"]},"application/pdx":{"source":"iana"},"application/pem-certificate-chain":{"source":"iana"},"application/pgp-encrypted":{"source":"iana","compressible":false,"extensions":["pgp"]},"application/pgp-keys":{"source":"iana","extensions":["asc"]},"application/pgp-signature":{"source":"iana","extensions":["asc","sig"]},"application/pics-rules":{"source":"apache","extensions":["prf"]},"application/pidf+xml":{"source":"iana","charset":"UTF-8","compressible":true},"application/pidf-diff+xml":{"source":"iana","charset":"UTF-8","compressible":true},"application/pkcs10":{"source":"iana","extensions":["p10"]},"application/pkcs12":{"source":"iana"},"application/pkcs7-mime":{"source":"iana","extensions":["p7m","p7c"]},"application/pkcs7-signature":{"source":"iana","extensions":["p7s"]},"application/pkcs8":{"source":"iana","extensions":["p8"]},"application/pkcs8-encrypted":{"source":"iana"},"application/pkix-attr-cert":{"source":"iana","extensions":["ac"]},"application/pkix-cert":{"source":"iana","extensions":["cer"]},"application/pkix-crl":{"source":"iana","extensions":["crl"]},"application/pkix-pkipath":{"source":"iana","extensions":["pkipath"]},"application/pkixcmp":{"source":"iana","extensions":["pki"]},"application/pls+xml":{"source":"iana","compressible":true,"extensions":["pls"]},"application/poc-settings+xml":{"source":"iana","charset":"UTF-8","compressible":true},"application/postscript":{"source":"iana","compressible":true,"extensions":["ai","eps","ps"]},"application/ppsp-tracker+json":{"source":"iana","compressible":true},"application/problem+json":{"source":"iana","compressible":true},"application/problem+xml":{"source":"iana","compressible":true},"application/provenance+xml":{"source":"iana","compressible":true,"extensions":["provx"]},"application/prs.alvestrand.titrax-sheet":{"source":"iana"},"application/prs.cww":{"source":"iana","extensions":["cww"]},"application/prs.cyn":{"source":"iana","charset":"7-BIT"},"application/prs.hpub+zip":{"source":"iana","compressible":false},"application/prs.nprend":{"source":"iana"},"application/prs.plucker":{"source":"iana"},"application/prs.rdf-xml-crypt":{"source":"iana"},"application/prs.xsf+xml":{"source":"iana","compressible":true},"application/pskc+xml":{"source":"iana","compressible":true,"extensions":["pskcxml"]},"application/pvd+json":{"source":"iana","compressible":true},"application/qsig":{"source":"iana"},"application/raml+yaml":{"compressible":true,"extensions":["raml"]},"application/raptorfec":{"source":"iana"},"application/rdap+json":{"source":"iana","compressible":true},"application/rdf+xml":{"source":"iana","compressible":true,"extensions":["rdf","owl"]},"application/reginfo+xml":{"source":"iana","compressible":true,"extensions":["rif"]},"application/relax-ng-compact-syntax":{"source":"iana","extensions":["rnc"]},"application/remote-printing":{"source":"iana"},"application/reputon+json":{"source":"iana","compressible":true},"application/resource-lists+xml":{"source":"iana","compressible":true,"extensions":["rl"]},"application/resource-lists-diff+xml":{"source":"iana","compressible":true,"extensions":["rld"]},"application/rfc+xml":{"source":"iana","compressible":true},"application/riscos":{"source":"iana"},"application/rlmi+xml":{"source":"iana","compressible":true},"application/rls-services+xml":{"source":"iana","compressible":true,"extensions":["rs"]},"application/route-apd+xml":{"source":"iana","compressible":true,"extensions":["rapd"]},"application/route-s-tsid+xml":{"source":"iana","compressible":true,"extensions":["sls"]},"application/route-usd+xml":{"source":"iana","compressible":true,"extensions":["rusd"]},"application/rpki-ghostbusters":{"source":"iana","extensions":["gbr"]},"application/rpki-manifest":{"source":"iana","extensions":["mft"]},"application/rpki-publication":{"source":"iana"},"application/rpki-roa":{"source":"iana","extensions":["roa"]},"application/rpki-updown":{"source":"iana"},"application/rsd+xml":{"source":"apache","compressible":true,"extensions":["rsd"]},"application/rss+xml":{"source":"apache","compressible":true,"extensions":["rss"]},"application/rtf":{"source":"iana","compressible":true,"extensions":["rtf"]},"application/rtploopback":{"source":"iana"},"application/rtx":{"source":"iana"},"application/samlassertion+xml":{"source":"iana","compressible":true},"application/samlmetadata+xml":{"source":"iana","compressible":true},"application/sarif+json":{"source":"iana","compressible":true},"application/sarif-external-properties+json":{"source":"iana","compressible":true},"application/sbe":{"source":"iana"},"application/sbml+xml":{"source":"iana","compressible":true,"extensions":["sbml"]},"application/scaip+xml":{"source":"iana","compressible":true},"application/scim+json":{"source":"iana","compressible":true},"application/scvp-cv-request":{"source":"iana","extensions":["scq"]},"application/scvp-cv-response":{"source":"iana","extensions":["scs"]},"application/scvp-vp-request":{"source":"iana","extensions":["spq"]},"application/scvp-vp-response":{"source":"iana","extensions":["spp"]},"application/sdp":{"source":"iana","extensions":["sdp"]},"application/secevent+jwt":{"source":"iana"},"application/senml+cbor":{"source":"iana"},"application/senml+json":{"source":"iana","compressible":true},"application/senml+xml":{"source":"iana","compressible":true,"extensions":["senmlx"]},"application/senml-etch+cbor":{"source":"iana"},"application/senml-etch+json":{"source":"iana","compressible":true},"application/senml-exi":{"source":"iana"},"application/sensml+cbor":{"source":"iana"},"application/sensml+json":{"source":"iana","compressible":true},"application/sensml+xml":{"source":"iana","compressible":true,"extensions":["sensmlx"]},"application/sensml-exi":{"source":"iana"},"application/sep+xml":{"source":"iana","compressible":true},"application/sep-exi":{"source":"iana"},"application/session-info":{"source":"iana"},"application/set-payment":{"source":"iana"},"application/set-payment-initiation":{"source":"iana","extensions":["setpay"]},"application/set-registration":{"source":"iana"},"application/set-registration-initiation":{"source":"iana","extensions":["setreg"]},"application/sgml":{"source":"iana"},"application/sgml-open-catalog":{"source":"iana"},"application/shf+xml":{"source":"iana","compressible":true,"extensions":["shf"]},"application/sieve":{"source":"iana","extensions":["siv","sieve"]},"application/simple-filter+xml":{"source":"iana","compressible":true},"application/simple-message-summary":{"source":"iana"},"application/simplesymbolcontainer":{"source":"iana"},"application/sipc":{"source":"iana"},"application/slate":{"source":"iana"},"application/smil":{"source":"iana"},"application/smil+xml":{"source":"iana","compressible":true,"extensions":["smi","smil"]},"application/smpte336m":{"source":"iana"},"application/soap+fastinfoset":{"source":"iana"},"application/soap+xml":{"source":"iana","compressible":true},"application/sparql-query":{"source":"iana","extensions":["rq"]},"application/sparql-results+xml":{"source":"iana","compressible":true,"extensions":["srx"]},"application/spdx+json":{"source":"iana","compressible":true},"application/spirits-event+xml":{"source":"iana","compressible":true},"application/sql":{"source":"iana"},"application/srgs":{"source":"iana","extensions":["gram"]},"application/srgs+xml":{"source":"iana","compressible":true,"extensions":["grxml"]},"application/sru+xml":{"source":"iana","compressible":true,"extensions":["sru"]},"application/ssdl+xml":{"source":"apache","compressible":true,"extensions":["ssdl"]},"application/ssml+xml":{"source":"iana","compressible":true,"extensions":["ssml"]},"application/stix+json":{"source":"iana","compressible":true},"application/swid+xml":{"source":"iana","compressible":true,"extensions":["swidtag"]},"application/tamp-apex-update":{"source":"iana"},"application/tamp-apex-update-confirm":{"source":"iana"},"application/tamp-community-update":{"source":"iana"},"application/tamp-community-update-confirm":{"source":"iana"},"application/tamp-error":{"source":"iana"},"application/tamp-sequence-adjust":{"source":"iana"},"application/tamp-sequence-adjust-confirm":{"source":"iana"},"application/tamp-status-query":{"source":"iana"},"application/tamp-status-response":{"source":"iana"},"application/tamp-update":{"source":"iana"},"application/tamp-update-confirm":{"source":"iana"},"application/tar":{"compressible":true},"application/taxii+json":{"source":"iana","compressible":true},"application/td+json":{"source":"iana","compressible":true},"application/tei+xml":{"source":"iana","compressible":true,"extensions":["tei","teicorpus"]},"application/tetra_isi":{"source":"iana"},"application/thraud+xml":{"source":"iana","compressible":true,"extensions":["tfi"]},"application/timestamp-query":{"source":"iana"},"application/timestamp-reply":{"source":"iana"},"application/timestamped-data":{"source":"iana","extensions":["tsd"]},"application/tlsrpt+gzip":{"source":"iana"},"application/tlsrpt+json":{"source":"iana","compressible":true},"application/tnauthlist":{"source":"iana"},"application/token-introspection+jwt":{"source":"iana"},"application/toml":{"compressible":true,"extensions":["toml"]},"application/trickle-ice-sdpfrag":{"source":"iana"},"application/trig":{"source":"iana","extensions":["trig"]},"application/ttml+xml":{"source":"iana","compressible":true,"extensions":["ttml"]},"application/tve-trigger":{"source":"iana"},"application/tzif":{"source":"iana"},"application/tzif-leap":{"source":"iana"},"application/ubjson":{"compressible":false,"extensions":["ubj"]},"application/ulpfec":{"source":"iana"},"application/urc-grpsheet+xml":{"source":"iana","compressible":true},"application/urc-ressheet+xml":{"source":"iana","compressible":true,"extensions":["rsheet"]},"application/urc-targetdesc+xml":{"source":"iana","compressible":true,"extensions":["td"]},"application/urc-uisocketdesc+xml":{"source":"iana","compressible":true},"application/vcard+json":{"source":"iana","compressible":true},"application/vcard+xml":{"source":"iana","compressible":true},"application/vemmi":{"source":"iana"},"application/vividence.scriptfile":{"source":"apache"},"application/vnd.1000minds.decision-model+xml":{"source":"iana","compressible":true,"extensions":["1km"]},"application/vnd.3gpp-prose+xml":{"source":"iana","compressible":true},"application/vnd.3gpp-prose-pc3ch+xml":{"source":"iana","compressible":true},"application/vnd.3gpp-v2x-local-service-information":{"source":"iana"},"application/vnd.3gpp.5gnas":{"source":"iana"},"application/vnd.3gpp.access-transfer-events+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.bsf+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.gmop+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.gtpc":{"source":"iana"},"application/vnd.3gpp.interworking-data":{"source":"iana"},"application/vnd.3gpp.lpp":{"source":"iana"},"application/vnd.3gpp.mc-signalling-ear":{"source":"iana"},"application/vnd.3gpp.mcdata-affiliation-command+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcdata-info+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcdata-payload":{"source":"iana"},"application/vnd.3gpp.mcdata-service-config+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcdata-signalling":{"source":"iana"},"application/vnd.3gpp.mcdata-ue-config+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcdata-user-profile+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcptt-affiliation-command+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcptt-floor-request+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcptt-info+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcptt-location-info+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcptt-mbms-usage-info+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcptt-service-config+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcptt-signed+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcptt-ue-config+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcptt-ue-init-config+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcptt-user-profile+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcvideo-affiliation-command+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcvideo-affiliation-info+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcvideo-info+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcvideo-location-info+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcvideo-mbms-usage-info+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcvideo-service-config+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcvideo-transmission-request+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcvideo-ue-config+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcvideo-user-profile+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mid-call+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.ngap":{"source":"iana"},"application/vnd.3gpp.pfcp":{"source":"iana"},"application/vnd.3gpp.pic-bw-large":{"source":"iana","extensions":["plb"]},"application/vnd.3gpp.pic-bw-small":{"source":"iana","extensions":["psb"]},"application/vnd.3gpp.pic-bw-var":{"source":"iana","extensions":["pvb"]},"application/vnd.3gpp.s1ap":{"source":"iana"},"application/vnd.3gpp.sms":{"source":"iana"},"application/vnd.3gpp.sms+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.srvcc-ext+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.srvcc-info+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.state-and-event-info+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.ussd+xml":{"source":"iana","compressible":true},"application/vnd.3gpp2.bcmcsinfo+xml":{"source":"iana","compressible":true},"application/vnd.3gpp2.sms":{"source":"iana"},"application/vnd.3gpp2.tcap":{"source":"iana","extensions":["tcap"]},"application/vnd.3lightssoftware.imagescal":{"source":"iana"},"application/vnd.3m.post-it-notes":{"source":"iana","extensions":["pwn"]},"application/vnd.accpac.simply.aso":{"source":"iana","extensions":["aso"]},"application/vnd.accpac.simply.imp":{"source":"iana","extensions":["imp"]},"application/vnd.acucobol":{"source":"iana","extensions":["acu"]},"application/vnd.acucorp":{"source":"iana","extensions":["atc","acutc"]},"application/vnd.adobe.air-application-installer-package+zip":{"source":"apache","compressible":false,"extensions":["air"]},"application/vnd.adobe.flash.movie":{"source":"iana"},"application/vnd.adobe.formscentral.fcdt":{"source":"iana","extensions":["fcdt"]},"application/vnd.adobe.fxp":{"source":"iana","extensions":["fxp","fxpl"]},"application/vnd.adobe.partial-upload":{"source":"iana"},"application/vnd.adobe.xdp+xml":{"source":"iana","compressible":true,"extensions":["xdp"]},"application/vnd.adobe.xfdf":{"source":"iana","extensions":["xfdf"]},"application/vnd.aether.imp":{"source":"iana"},"application/vnd.afpc.afplinedata":{"source":"iana"},"application/vnd.afpc.afplinedata-pagedef":{"source":"iana"},"application/vnd.afpc.cmoca-cmresource":{"source":"iana"},"application/vnd.afpc.foca-charset":{"source":"iana"},"application/vnd.afpc.foca-codedfont":{"source":"iana"},"application/vnd.afpc.foca-codepage":{"source":"iana"},"application/vnd.afpc.modca":{"source":"iana"},"application/vnd.afpc.modca-cmtable":{"source":"iana"},"application/vnd.afpc.modca-formdef":{"source":"iana"},"application/vnd.afpc.modca-mediummap":{"source":"iana"},"application/vnd.afpc.modca-objectcontainer":{"source":"iana"},"application/vnd.afpc.modca-overlay":{"source":"iana"},"application/vnd.afpc.modca-pagesegment":{"source":"iana"},"application/vnd.age":{"source":"iana","extensions":["age"]},"application/vnd.ah-barcode":{"source":"iana"},"application/vnd.ahead.space":{"source":"iana","extensions":["ahead"]},"application/vnd.airzip.filesecure.azf":{"source":"iana","extensions":["azf"]},"application/vnd.airzip.filesecure.azs":{"source":"iana","extensions":["azs"]},"application/vnd.amadeus+json":{"source":"iana","compressible":true},"application/vnd.amazon.ebook":{"source":"apache","extensions":["azw"]},"application/vnd.amazon.mobi8-ebook":{"source":"iana"},"application/vnd.americandynamics.acc":{"source":"iana","extensions":["acc"]},"application/vnd.amiga.ami":{"source":"iana","extensions":["ami"]},"application/vnd.amundsen.maze+xml":{"source":"iana","compressible":true},"application/vnd.android.ota":{"source":"iana"},"application/vnd.android.package-archive":{"source":"apache","compressible":false,"extensions":["apk"]},"application/vnd.anki":{"source":"iana"},"application/vnd.anser-web-certificate-issue-initiation":{"source":"iana","extensions":["cii"]},"application/vnd.anser-web-funds-transfer-initiation":{"source":"apache","extensions":["fti"]},"application/vnd.antix.game-component":{"source":"iana","extensions":["atx"]},"application/vnd.apache.arrow.file":{"source":"iana"},"application/vnd.apache.arrow.stream":{"source":"iana"},"application/vnd.apache.thrift.binary":{"source":"iana"},"application/vnd.apache.thrift.compact":{"source":"iana"},"application/vnd.apache.thrift.json":{"source":"iana"},"application/vnd.api+json":{"source":"iana","compressible":true},"application/vnd.aplextor.warrp+json":{"source":"iana","compressible":true},"application/vnd.apothekende.reservation+json":{"source":"iana","compressible":true},"application/vnd.apple.installer+xml":{"source":"iana","compressible":true,"extensions":["mpkg"]},"application/vnd.apple.keynote":{"source":"iana","extensions":["key"]},"application/vnd.apple.mpegurl":{"source":"iana","extensions":["m3u8"]},"application/vnd.apple.numbers":{"source":"iana","extensions":["numbers"]},"application/vnd.apple.pages":{"source":"iana","extensions":["pages"]},"application/vnd.apple.pkpass":{"compressible":false,"extensions":["pkpass"]},"application/vnd.arastra.swi":{"source":"iana"},"application/vnd.aristanetworks.swi":{"source":"iana","extensions":["swi"]},"application/vnd.artisan+json":{"source":"iana","compressible":true},"application/vnd.artsquare":{"source":"iana"},"application/vnd.astraea-software.iota":{"source":"iana","extensions":["iota"]},"application/vnd.audiograph":{"source":"iana","extensions":["aep"]},"application/vnd.autopackage":{"source":"iana"},"application/vnd.avalon+json":{"source":"iana","compressible":true},"application/vnd.avistar+xml":{"source":"iana","compressible":true},"application/vnd.balsamiq.bmml+xml":{"source":"iana","compressible":true,"extensions":["bmml"]},"application/vnd.balsamiq.bmpr":{"source":"iana"},"application/vnd.banana-accounting":{"source":"iana"},"application/vnd.bbf.usp.error":{"source":"iana"},"application/vnd.bbf.usp.msg":{"source":"iana"},"application/vnd.bbf.usp.msg+json":{"source":"iana","compressible":true},"application/vnd.bekitzur-stech+json":{"source":"iana","compressible":true},"application/vnd.bint.med-content":{"source":"iana"},"application/vnd.biopax.rdf+xml":{"source":"iana","compressible":true},"application/vnd.blink-idb-value-wrapper":{"source":"iana"},"application/vnd.blueice.multipass":{"source":"iana","extensions":["mpm"]},"application/vnd.bluetooth.ep.oob":{"source":"iana"},"application/vnd.bluetooth.le.oob":{"source":"iana"},"application/vnd.bmi":{"source":"iana","extensions":["bmi"]},"application/vnd.bpf":{"source":"iana"},"application/vnd.bpf3":{"source":"iana"},"application/vnd.businessobjects":{"source":"iana","extensions":["rep"]},"application/vnd.byu.uapi+json":{"source":"iana","compressible":true},"application/vnd.cab-jscript":{"source":"iana"},"application/vnd.canon-cpdl":{"source":"iana"},"application/vnd.canon-lips":{"source":"iana"},"application/vnd.capasystems-pg+json":{"source":"iana","compressible":true},"application/vnd.cendio.thinlinc.clientconf":{"source":"iana"},"application/vnd.century-systems.tcp_stream":{"source":"iana"},"application/vnd.chemdraw+xml":{"source":"iana","compressible":true,"extensions":["cdxml"]},"application/vnd.chess-pgn":{"source":"iana"},"application/vnd.chipnuts.karaoke-mmd":{"source":"iana","extensions":["mmd"]},"application/vnd.ciedi":{"source":"iana"},"application/vnd.cinderella":{"source":"iana","extensions":["cdy"]},"application/vnd.cirpack.isdn-ext":{"source":"iana"},"application/vnd.citationstyles.style+xml":{"source":"iana","compressible":true,"extensions":["csl"]},"application/vnd.claymore":{"source":"iana","extensions":["cla"]},"application/vnd.cloanto.rp9":{"source":"iana","extensions":["rp9"]},"application/vnd.clonk.c4group":{"source":"iana","extensions":["c4g","c4d","c4f","c4p","c4u"]},"application/vnd.cluetrust.cartomobile-config":{"source":"iana","extensions":["c11amc"]},"application/vnd.cluetrust.cartomobile-config-pkg":{"source":"iana","extensions":["c11amz"]},"application/vnd.coffeescript":{"source":"iana"},"application/vnd.collabio.xodocuments.document":{"source":"iana"},"application/vnd.collabio.xodocuments.document-template":{"source":"iana"},"application/vnd.collabio.xodocuments.presentation":{"source":"iana"},"application/vnd.collabio.xodocuments.presentation-template":{"source":"iana"},"application/vnd.collabio.xodocuments.spreadsheet":{"source":"iana"},"application/vnd.collabio.xodocuments.spreadsheet-template":{"source":"iana"},"application/vnd.collection+json":{"source":"iana","compressible":true},"application/vnd.collection.doc+json":{"source":"iana","compressible":true},"application/vnd.collection.next+json":{"source":"iana","compressible":true},"application/vnd.comicbook+zip":{"source":"iana","compressible":false},"application/vnd.comicbook-rar":{"source":"iana"},"application/vnd.commerce-battelle":{"source":"iana"},"application/vnd.commonspace":{"source":"iana","extensions":["csp"]},"application/vnd.contact.cmsg":{"source":"iana","extensions":["cdbcmsg"]},"application/vnd.coreos.ignition+json":{"source":"iana","compressible":true},"application/vnd.cosmocaller":{"source":"iana","extensions":["cmc"]},"application/vnd.crick.clicker":{"source":"iana","extensions":["clkx"]},"application/vnd.crick.clicker.keyboard":{"source":"iana","extensions":["clkk"]},"application/vnd.crick.clicker.palette":{"source":"iana","extensions":["clkp"]},"application/vnd.crick.clicker.template":{"source":"iana","extensions":["clkt"]},"application/vnd.crick.clicker.wordbank":{"source":"iana","extensions":["clkw"]},"application/vnd.criticaltools.wbs+xml":{"source":"iana","compressible":true,"extensions":["wbs"]},"application/vnd.cryptii.pipe+json":{"source":"iana","compressible":true},"application/vnd.crypto-shade-file":{"source":"iana"},"application/vnd.cryptomator.encrypted":{"source":"iana"},"application/vnd.cryptomator.vault":{"source":"iana"},"application/vnd.ctc-posml":{"source":"iana","extensions":["pml"]},"application/vnd.ctct.ws+xml":{"source":"iana","compressible":true},"application/vnd.cups-pdf":{"source":"iana"},"application/vnd.cups-postscript":{"source":"iana"},"application/vnd.cups-ppd":{"source":"iana","extensions":["ppd"]},"application/vnd.cups-raster":{"source":"iana"},"application/vnd.cups-raw":{"source":"iana"},"application/vnd.curl":{"source":"iana"},"application/vnd.curl.car":{"source":"apache","extensions":["car"]},"application/vnd.curl.pcurl":{"source":"apache","extensions":["pcurl"]},"application/vnd.cyan.dean.root+xml":{"source":"iana","compressible":true},"application/vnd.cybank":{"source":"iana"},"application/vnd.cyclonedx+json":{"source":"iana","compressible":true},"application/vnd.cyclonedx+xml":{"source":"iana","compressible":true},"application/vnd.d2l.coursepackage1p0+zip":{"source":"iana","compressible":false},"application/vnd.d3m-dataset":{"source":"iana"},"application/vnd.d3m-problem":{"source":"iana"},"application/vnd.dart":{"source":"iana","compressible":true,"extensions":["dart"]},"application/vnd.data-vision.rdz":{"source":"iana","extensions":["rdz"]},"application/vnd.datapackage+json":{"source":"iana","compressible":true},"application/vnd.dataresource+json":{"source":"iana","compressible":true},"application/vnd.dbf":{"source":"iana","extensions":["dbf"]},"application/vnd.debian.binary-package":{"source":"iana"},"application/vnd.dece.data":{"source":"iana","extensions":["uvf","uvvf","uvd","uvvd"]},"application/vnd.dece.ttml+xml":{"source":"iana","compressible":true,"extensions":["uvt","uvvt"]},"application/vnd.dece.unspecified":{"source":"iana","extensions":["uvx","uvvx"]},"application/vnd.dece.zip":{"source":"iana","extensions":["uvz","uvvz"]},"application/vnd.denovo.fcselayout-link":{"source":"iana","extensions":["fe_launch"]},"application/vnd.desmume.movie":{"source":"iana"},"application/vnd.dir-bi.plate-dl-nosuffix":{"source":"iana"},"application/vnd.dm.delegation+xml":{"source":"iana","compressible":true},"application/vnd.dna":{"source":"iana","extensions":["dna"]},"application/vnd.document+json":{"source":"iana","compressible":true},"application/vnd.dolby.mlp":{"source":"apache","extensions":["mlp"]},"application/vnd.dolby.mobile.1":{"source":"iana"},"application/vnd.dolby.mobile.2":{"source":"iana"},"application/vnd.doremir.scorecloud-binary-document":{"source":"iana"},"application/vnd.dpgraph":{"source":"iana","extensions":["dpg"]},"application/vnd.dreamfactory":{"source":"iana","extensions":["dfac"]},"application/vnd.drive+json":{"source":"iana","compressible":true},"application/vnd.ds-keypoint":{"source":"apache","extensions":["kpxx"]},"application/vnd.dtg.local":{"source":"iana"},"application/vnd.dtg.local.flash":{"source":"iana"},"application/vnd.dtg.local.html":{"source":"iana"},"application/vnd.dvb.ait":{"source":"iana","extensions":["ait"]},"application/vnd.dvb.dvbisl+xml":{"source":"iana","compressible":true},"application/vnd.dvb.dvbj":{"source":"iana"},"application/vnd.dvb.esgcontainer":{"source":"iana"},"application/vnd.dvb.ipdcdftnotifaccess":{"source":"iana"},"application/vnd.dvb.ipdcesgaccess":{"source":"iana"},"application/vnd.dvb.ipdcesgaccess2":{"source":"iana"},"application/vnd.dvb.ipdcesgpdd":{"source":"iana"},"application/vnd.dvb.ipdcroaming":{"source":"iana"},"application/vnd.dvb.iptv.alfec-base":{"source":"iana"},"application/vnd.dvb.iptv.alfec-enhancement":{"source":"iana"},"application/vnd.dvb.notif-aggregate-root+xml":{"source":"iana","compressible":true},"application/vnd.dvb.notif-container+xml":{"source":"iana","compressible":true},"application/vnd.dvb.notif-generic+xml":{"source":"iana","compressible":true},"application/vnd.dvb.notif-ia-msglist+xml":{"source":"iana","compressible":true},"application/vnd.dvb.notif-ia-registration-request+xml":{"source":"iana","compressible":true},"application/vnd.dvb.notif-ia-registration-response+xml":{"source":"iana","compressible":true},"application/vnd.dvb.notif-init+xml":{"source":"iana","compressible":true},"application/vnd.dvb.pfr":{"source":"iana"},"application/vnd.dvb.service":{"source":"iana","extensions":["svc"]},"application/vnd.dxr":{"source":"iana"},"application/vnd.dynageo":{"source":"iana","extensions":["geo"]},"application/vnd.dzr":{"source":"iana"},"application/vnd.easykaraoke.cdgdownload":{"source":"iana"},"application/vnd.ecdis-update":{"source":"iana"},"application/vnd.ecip.rlp":{"source":"iana"},"application/vnd.eclipse.ditto+json":{"source":"iana","compressible":true},"application/vnd.ecowin.chart":{"source":"iana","extensions":["mag"]},"application/vnd.ecowin.filerequest":{"source":"iana"},"application/vnd.ecowin.fileupdate":{"source":"iana"},"application/vnd.ecowin.series":{"source":"iana"},"application/vnd.ecowin.seriesrequest":{"source":"iana"},"application/vnd.ecowin.seriesupdate":{"source":"iana"},"application/vnd.efi.img":{"source":"iana"},"application/vnd.efi.iso":{"source":"iana"},"application/vnd.emclient.accessrequest+xml":{"source":"iana","compressible":true},"application/vnd.enliven":{"source":"iana","extensions":["nml"]},"application/vnd.enphase.envoy":{"source":"iana"},"application/vnd.eprints.data+xml":{"source":"iana","compressible":true},"application/vnd.epson.esf":{"source":"iana","extensions":["esf"]},"application/vnd.epson.msf":{"source":"iana","extensions":["msf"]},"application/vnd.epson.quickanime":{"source":"iana","extensions":["qam"]},"application/vnd.epson.salt":{"source":"iana","extensions":["slt"]},"application/vnd.epson.ssf":{"source":"iana","extensions":["ssf"]},"application/vnd.ericsson.quickcall":{"source":"iana"},"application/vnd.espass-espass+zip":{"source":"iana","compressible":false},"application/vnd.eszigno3+xml":{"source":"iana","compressible":true,"extensions":["es3","et3"]},"application/vnd.etsi.aoc+xml":{"source":"iana","compressible":true},"application/vnd.etsi.asic-e+zip":{"source":"iana","compressible":false},"application/vnd.etsi.asic-s+zip":{"source":"iana","compressible":false},"application/vnd.etsi.cug+xml":{"source":"iana","compressible":true},"application/vnd.etsi.iptvcommand+xml":{"source":"iana","compressible":true},"application/vnd.etsi.iptvdiscovery+xml":{"source":"iana","compressible":true},"application/vnd.etsi.iptvprofile+xml":{"source":"iana","compressible":true},"application/vnd.etsi.iptvsad-bc+xml":{"source":"iana","compressible":true},"application/vnd.etsi.iptvsad-cod+xml":{"source":"iana","compressible":true},"application/vnd.etsi.iptvsad-npvr+xml":{"source":"iana","compressible":true},"application/vnd.etsi.iptvservice+xml":{"source":"iana","compressible":true},"application/vnd.etsi.iptvsync+xml":{"source":"iana","compressible":true},"application/vnd.etsi.iptvueprofile+xml":{"source":"iana","compressible":true},"application/vnd.etsi.mcid+xml":{"source":"iana","compressible":true},"application/vnd.etsi.mheg5":{"source":"iana"},"application/vnd.etsi.overload-control-policy-dataset+xml":{"source":"iana","compressible":true},"application/vnd.etsi.pstn+xml":{"source":"iana","compressible":true},"application/vnd.etsi.sci+xml":{"source":"iana","compressible":true},"application/vnd.etsi.simservs+xml":{"source":"iana","compressible":true},"application/vnd.etsi.timestamp-token":{"source":"iana"},"application/vnd.etsi.tsl+xml":{"source":"iana","compressible":true},"application/vnd.etsi.tsl.der":{"source":"iana"},"application/vnd.eu.kasparian.car+json":{"source":"iana","compressible":true},"application/vnd.eudora.data":{"source":"iana"},"application/vnd.evolv.ecig.profile":{"source":"iana"},"application/vnd.evolv.ecig.settings":{"source":"iana"},"application/vnd.evolv.ecig.theme":{"source":"iana"},"application/vnd.exstream-empower+zip":{"source":"iana","compressible":false},"application/vnd.exstream-package":{"source":"iana"},"application/vnd.ezpix-album":{"source":"iana","extensions":["ez2"]},"application/vnd.ezpix-package":{"source":"iana","extensions":["ez3"]},"application/vnd.f-secure.mobile":{"source":"iana"},"application/vnd.familysearch.gedcom+zip":{"source":"iana","compressible":false},"application/vnd.fastcopy-disk-image":{"source":"iana"},"application/vnd.fdf":{"source":"iana","extensions":["fdf"]},"application/vnd.fdsn.mseed":{"source":"iana","extensions":["mseed"]},"application/vnd.fdsn.seed":{"source":"iana","extensions":["seed","dataless"]},"application/vnd.ffsns":{"source":"iana"},"application/vnd.ficlab.flb+zip":{"source":"iana","compressible":false},"application/vnd.filmit.zfc":{"source":"iana"},"application/vnd.fints":{"source":"iana"},"application/vnd.firemonkeys.cloudcell":{"source":"iana"},"application/vnd.flographit":{"source":"iana","extensions":["gph"]},"application/vnd.fluxtime.clip":{"source":"iana","extensions":["ftc"]},"application/vnd.font-fontforge-sfd":{"source":"iana"},"application/vnd.framemaker":{"source":"iana","extensions":["fm","frame","maker","book"]},"application/vnd.frogans.fnc":{"source":"iana","extensions":["fnc"]},"application/vnd.frogans.ltf":{"source":"iana","extensions":["ltf"]},"application/vnd.fsc.weblaunch":{"source":"iana","extensions":["fsc"]},"application/vnd.fujifilm.fb.docuworks":{"source":"iana"},"application/vnd.fujifilm.fb.docuworks.binder":{"source":"iana"},"application/vnd.fujifilm.fb.docuworks.container":{"source":"iana"},"application/vnd.fujifilm.fb.jfi+xml":{"source":"iana","compressible":true},"application/vnd.fujitsu.oasys":{"source":"iana","extensions":["oas"]},"application/vnd.fujitsu.oasys2":{"source":"iana","extensions":["oa2"]},"application/vnd.fujitsu.oasys3":{"source":"iana","extensions":["oa3"]},"application/vnd.fujitsu.oasysgp":{"source":"iana","extensions":["fg5"]},"application/vnd.fujitsu.oasysprs":{"source":"iana","extensions":["bh2"]},"application/vnd.fujixerox.art-ex":{"source":"iana"},"application/vnd.fujixerox.art4":{"source":"iana"},"application/vnd.fujixerox.ddd":{"source":"iana","extensions":["ddd"]},"application/vnd.fujixerox.docuworks":{"source":"iana","extensions":["xdw"]},"application/vnd.fujixerox.docuworks.binder":{"source":"iana","extensions":["xbd"]},"application/vnd.fujixerox.docuworks.container":{"source":"iana"},"application/vnd.fujixerox.hbpl":{"source":"iana"},"application/vnd.fut-misnet":{"source":"iana"},"application/vnd.futoin+cbor":{"source":"iana"},"application/vnd.futoin+json":{"source":"iana","compressible":true},"application/vnd.fuzzysheet":{"source":"iana","extensions":["fzs"]},"application/vnd.genomatix.tuxedo":{"source":"iana","extensions":["txd"]},"application/vnd.gentics.grd+json":{"source":"iana","compressible":true},"application/vnd.geo+json":{"source":"iana","compressible":true},"application/vnd.geocube+xml":{"source":"iana","compressible":true},"application/vnd.geogebra.file":{"source":"iana","extensions":["ggb"]},"application/vnd.geogebra.slides":{"source":"iana"},"application/vnd.geogebra.tool":{"source":"iana","extensions":["ggt"]},"application/vnd.geometry-explorer":{"source":"iana","extensions":["gex","gre"]},"application/vnd.geonext":{"source":"iana","extensions":["gxt"]},"application/vnd.geoplan":{"source":"iana","extensions":["g2w"]},"application/vnd.geospace":{"source":"iana","extensions":["g3w"]},"application/vnd.gerber":{"source":"iana"},"application/vnd.globalplatform.card-content-mgt":{"source":"iana"},"application/vnd.globalplatform.card-content-mgt-response":{"source":"iana"},"application/vnd.gmx":{"source":"iana","extensions":["gmx"]},"application/vnd.google-apps.document":{"compressible":false,"extensions":["gdoc"]},"application/vnd.google-apps.presentation":{"compressible":false,"extensions":["gslides"]},"application/vnd.google-apps.spreadsheet":{"compressible":false,"extensions":["gsheet"]},"application/vnd.google-earth.kml+xml":{"source":"iana","compressible":true,"extensions":["kml"]},"application/vnd.google-earth.kmz":{"source":"iana","compressible":false,"extensions":["kmz"]},"application/vnd.gov.sk.e-form+xml":{"source":"iana","compressible":true},"application/vnd.gov.sk.e-form+zip":{"source":"iana","compressible":false},"application/vnd.gov.sk.xmldatacontainer+xml":{"source":"iana","compressible":true},"application/vnd.grafeq":{"source":"iana","extensions":["gqf","gqs"]},"application/vnd.gridmp":{"source":"iana"},"application/vnd.groove-account":{"source":"iana","extensions":["gac"]},"application/vnd.groove-help":{"source":"iana","extensions":["ghf"]},"application/vnd.groove-identity-message":{"source":"iana","extensions":["gim"]},"application/vnd.groove-injector":{"source":"iana","extensions":["grv"]},"application/vnd.groove-tool-message":{"source":"iana","extensions":["gtm"]},"application/vnd.groove-tool-template":{"source":"iana","extensions":["tpl"]},"application/vnd.groove-vcard":{"source":"iana","extensions":["vcg"]},"application/vnd.hal+json":{"source":"iana","compressible":true},"application/vnd.hal+xml":{"source":"iana","compressible":true,"extensions":["hal"]},"application/vnd.handheld-entertainment+xml":{"source":"iana","compressible":true,"extensions":["zmm"]},"application/vnd.hbci":{"source":"iana","extensions":["hbci"]},"application/vnd.hc+json":{"source":"iana","compressible":true},"application/vnd.hcl-bireports":{"source":"iana"},"application/vnd.hdt":{"source":"iana"},"application/vnd.heroku+json":{"source":"iana","compressible":true},"application/vnd.hhe.lesson-player":{"source":"iana","extensions":["les"]},"application/vnd.hl7cda+xml":{"source":"iana","charset":"UTF-8","compressible":true},"application/vnd.hl7v2+xml":{"source":"iana","charset":"UTF-8","compressible":true},"application/vnd.hp-hpgl":{"source":"iana","extensions":["hpgl"]},"application/vnd.hp-hpid":{"source":"iana","extensions":["hpid"]},"application/vnd.hp-hps":{"source":"iana","extensions":["hps"]},"application/vnd.hp-jlyt":{"source":"iana","extensions":["jlt"]},"application/vnd.hp-pcl":{"source":"iana","extensions":["pcl"]},"application/vnd.hp-pclxl":{"source":"iana","extensions":["pclxl"]},"application/vnd.httphone":{"source":"iana"},"application/vnd.hydrostatix.sof-data":{"source":"iana","extensions":["sfd-hdstx"]},"application/vnd.hyper+json":{"source":"iana","compressible":true},"application/vnd.hyper-item+json":{"source":"iana","compressible":true},"application/vnd.hyperdrive+json":{"source":"iana","compressible":true},"application/vnd.hzn-3d-crossword":{"source":"iana"},"application/vnd.ibm.afplinedata":{"source":"iana"},"application/vnd.ibm.electronic-media":{"source":"iana"},"application/vnd.ibm.minipay":{"source":"iana","extensions":["mpy"]},"application/vnd.ibm.modcap":{"source":"iana","extensions":["afp","listafp","list3820"]},"application/vnd.ibm.rights-management":{"source":"iana","extensions":["irm"]},"application/vnd.ibm.secure-container":{"source":"iana","extensions":["sc"]},"application/vnd.iccprofile":{"source":"iana","extensions":["icc","icm"]},"application/vnd.ieee.1905":{"source":"iana"},"application/vnd.igloader":{"source":"iana","extensions":["igl"]},"application/vnd.imagemeter.folder+zip":{"source":"iana","compressible":false},"application/vnd.imagemeter.image+zip":{"source":"iana","compressible":false},"application/vnd.immervision-ivp":{"source":"iana","extensions":["ivp"]},"application/vnd.immervision-ivu":{"source":"iana","extensions":["ivu"]},"application/vnd.ims.imsccv1p1":{"source":"iana"},"application/vnd.ims.imsccv1p2":{"source":"iana"},"application/vnd.ims.imsccv1p3":{"source":"iana"},"application/vnd.ims.lis.v2.result+json":{"source":"iana","compressible":true},"application/vnd.ims.lti.v2.toolconsumerprofile+json":{"source":"iana","compressible":true},"application/vnd.ims.lti.v2.toolproxy+json":{"source":"iana","compressible":true},"application/vnd.ims.lti.v2.toolproxy.id+json":{"source":"iana","compressible":true},"application/vnd.ims.lti.v2.toolsettings+json":{"source":"iana","compressible":true},"application/vnd.ims.lti.v2.toolsettings.simple+json":{"source":"iana","compressible":true},"application/vnd.informedcontrol.rms+xml":{"source":"iana","compressible":true},"application/vnd.informix-visionary":{"source":"iana"},"application/vnd.infotech.project":{"source":"iana"},"application/vnd.infotech.project+xml":{"source":"iana","compressible":true},"application/vnd.innopath.wamp.notification":{"source":"iana"},"application/vnd.insors.igm":{"source":"iana","extensions":["igm"]},"application/vnd.intercon.formnet":{"source":"iana","extensions":["xpw","xpx"]},"application/vnd.intergeo":{"source":"iana","extensions":["i2g"]},"application/vnd.intertrust.digibox":{"source":"iana"},"application/vnd.intertrust.nncp":{"source":"iana"},"application/vnd.intu.qbo":{"source":"iana","extensions":["qbo"]},"application/vnd.intu.qfx":{"source":"iana","extensions":["qfx"]},"application/vnd.iptc.g2.catalogitem+xml":{"source":"iana","compressible":true},"application/vnd.iptc.g2.conceptitem+xml":{"source":"iana","compressible":true},"application/vnd.iptc.g2.knowledgeitem+xml":{"source":"iana","compressible":true},"application/vnd.iptc.g2.newsitem+xml":{"source":"iana","compressible":true},"application/vnd.iptc.g2.newsmessage+xml":{"source":"iana","compressible":true},"application/vnd.iptc.g2.packageitem+xml":{"source":"iana","compressible":true},"application/vnd.iptc.g2.planningitem+xml":{"source":"iana","compressible":true},"application/vnd.ipunplugged.rcprofile":{"source":"iana","extensions":["rcprofile"]},"application/vnd.irepository.package+xml":{"source":"iana","compressible":true,"extensions":["irp"]},"application/vnd.is-xpr":{"source":"iana","extensions":["xpr"]},"application/vnd.isac.fcs":{"source":"iana","extensions":["fcs"]},"application/vnd.iso11783-10+zip":{"source":"iana","compressible":false},"application/vnd.jam":{"source":"iana","extensions":["jam"]},"application/vnd.japannet-directory-service":{"source":"iana"},"application/vnd.japannet-jpnstore-wakeup":{"source":"iana"},"application/vnd.japannet-payment-wakeup":{"source":"iana"},"application/vnd.japannet-registration":{"source":"iana"},"application/vnd.japannet-registration-wakeup":{"source":"iana"},"application/vnd.japannet-setstore-wakeup":{"source":"iana"},"application/vnd.japannet-verification":{"source":"iana"},"application/vnd.japannet-verification-wakeup":{"source":"iana"},"application/vnd.jcp.javame.midlet-rms":{"source":"iana","extensions":["rms"]},"application/vnd.jisp":{"source":"iana","extensions":["jisp"]},"application/vnd.joost.joda-archive":{"source":"iana","extensions":["joda"]},"application/vnd.jsk.isdn-ngn":{"source":"iana"},"application/vnd.kahootz":{"source":"iana","extensions":["ktz","ktr"]},"application/vnd.kde.karbon":{"source":"iana","extensions":["karbon"]},"application/vnd.kde.kchart":{"source":"iana","extensions":["chrt"]},"application/vnd.kde.kformula":{"source":"iana","extensions":["kfo"]},"application/vnd.kde.kivio":{"source":"iana","extensions":["flw"]},"application/vnd.kde.kontour":{"source":"iana","extensions":["kon"]},"application/vnd.kde.kpresenter":{"source":"iana","extensions":["kpr","kpt"]},"application/vnd.kde.kspread":{"source":"iana","extensions":["ksp"]},"application/vnd.kde.kword":{"source":"iana","extensions":["kwd","kwt"]},"application/vnd.kenameaapp":{"source":"iana","extensions":["htke"]},"application/vnd.kidspiration":{"source":"iana","extensions":["kia"]},"application/vnd.kinar":{"source":"iana","extensions":["kne","knp"]},"application/vnd.koan":{"source":"iana","extensions":["skp","skd","skt","skm"]},"application/vnd.kodak-descriptor":{"source":"iana","extensions":["sse"]},"application/vnd.las":{"source":"iana"},"application/vnd.las.las+json":{"source":"iana","compressible":true},"application/vnd.las.las+xml":{"source":"iana","compressible":true,"extensions":["lasxml"]},"application/vnd.laszip":{"source":"iana"},"application/vnd.leap+json":{"source":"iana","compressible":true},"application/vnd.liberty-request+xml":{"source":"iana","compressible":true},"application/vnd.llamagraphics.life-balance.desktop":{"source":"iana","extensions":["lbd"]},"application/vnd.llamagraphics.life-balance.exchange+xml":{"source":"iana","compressible":true,"extensions":["lbe"]},"application/vnd.logipipe.circuit+zip":{"source":"iana","compressible":false},"application/vnd.loom":{"source":"iana"},"application/vnd.lotus-1-2-3":{"source":"iana","extensions":["123"]},"application/vnd.lotus-approach":{"source":"iana","extensions":["apr"]},"application/vnd.lotus-freelance":{"source":"iana","extensions":["pre"]},"application/vnd.lotus-notes":{"source":"iana","extensions":["nsf"]},"application/vnd.lotus-organizer":{"source":"iana","extensions":["org"]},"application/vnd.lotus-screencam":{"source":"iana","extensions":["scm"]},"application/vnd.lotus-wordpro":{"source":"iana","extensions":["lwp"]},"application/vnd.macports.portpkg":{"source":"iana","extensions":["portpkg"]},"application/vnd.mapbox-vector-tile":{"source":"iana","extensions":["mvt"]},"application/vnd.marlin.drm.actiontoken+xml":{"source":"iana","compressible":true},"application/vnd.marlin.drm.conftoken+xml":{"source":"iana","compressible":true},"application/vnd.marlin.drm.license+xml":{"source":"iana","compressible":true},"application/vnd.marlin.drm.mdcf":{"source":"iana"},"application/vnd.mason+json":{"source":"iana","compressible":true},"application/vnd.maxar.archive.3tz+zip":{"source":"iana","compressible":false},"application/vnd.maxmind.maxmind-db":{"source":"iana"},"application/vnd.mcd":{"source":"iana","extensions":["mcd"]},"application/vnd.medcalcdata":{"source":"iana","extensions":["mc1"]},"application/vnd.mediastation.cdkey":{"source":"iana","extensions":["cdkey"]},"application/vnd.meridian-slingshot":{"source":"iana"},"application/vnd.mfer":{"source":"iana","extensions":["mwf"]},"application/vnd.mfmp":{"source":"iana","extensions":["mfm"]},"application/vnd.micro+json":{"source":"iana","compressible":true},"application/vnd.micrografx.flo":{"source":"iana","extensions":["flo"]},"application/vnd.micrografx.igx":{"source":"iana","extensions":["igx"]},"application/vnd.microsoft.portable-executable":{"source":"iana"},"application/vnd.microsoft.windows.thumbnail-cache":{"source":"iana"},"application/vnd.miele+json":{"source":"iana","compressible":true},"application/vnd.mif":{"source":"iana","extensions":["mif"]},"application/vnd.minisoft-hp3000-save":{"source":"iana"},"application/vnd.mitsubishi.misty-guard.trustweb":{"source":"iana"},"application/vnd.mobius.daf":{"source":"iana","extensions":["daf"]},"application/vnd.mobius.dis":{"source":"iana","extensions":["dis"]},"application/vnd.mobius.mbk":{"source":"iana","extensions":["mbk"]},"application/vnd.mobius.mqy":{"source":"iana","extensions":["mqy"]},"application/vnd.mobius.msl":{"source":"iana","extensions":["msl"]},"application/vnd.mobius.plc":{"source":"iana","extensions":["plc"]},"application/vnd.mobius.txf":{"source":"iana","extensions":["txf"]},"application/vnd.mophun.application":{"source":"iana","extensions":["mpn"]},"application/vnd.mophun.certificate":{"source":"iana","extensions":["mpc"]},"application/vnd.motorola.flexsuite":{"source":"iana"},"application/vnd.motorola.flexsuite.adsi":{"source":"iana"},"application/vnd.motorola.flexsuite.fis":{"source":"iana"},"application/vnd.motorola.flexsuite.gotap":{"source":"iana"},"application/vnd.motorola.flexsuite.kmr":{"source":"iana"},"application/vnd.motorola.flexsuite.ttc":{"source":"iana"},"application/vnd.motorola.flexsuite.wem":{"source":"iana"},"application/vnd.motorola.iprm":{"source":"iana"},"application/vnd.mozilla.xul+xml":{"source":"iana","compressible":true,"extensions":["xul"]},"application/vnd.ms-3mfdocument":{"source":"iana"},"application/vnd.ms-artgalry":{"source":"iana","extensions":["cil"]},"application/vnd.ms-asf":{"source":"iana"},"application/vnd.ms-cab-compressed":{"source":"iana","extensions":["cab"]},"application/vnd.ms-color.iccprofile":{"source":"apache"},"application/vnd.ms-excel":{"source":"iana","compressible":false,"extensions":["xls","xlm","xla","xlc","xlt","xlw"]},"application/vnd.ms-excel.addin.macroenabled.12":{"source":"iana","extensions":["xlam"]},"application/vnd.ms-excel.sheet.binary.macroenabled.12":{"source":"iana","extensions":["xlsb"]},"application/vnd.ms-excel.sheet.macroenabled.12":{"source":"iana","extensions":["xlsm"]},"application/vnd.ms-excel.template.macroenabled.12":{"source":"iana","extensions":["xltm"]},"application/vnd.ms-fontobject":{"source":"iana","compressible":true,"extensions":["eot"]},"application/vnd.ms-htmlhelp":{"source":"iana","extensions":["chm"]},"application/vnd.ms-ims":{"source":"iana","extensions":["ims"]},"application/vnd.ms-lrm":{"source":"iana","extensions":["lrm"]},"application/vnd.ms-office.activex+xml":{"source":"iana","compressible":true},"application/vnd.ms-officetheme":{"source":"iana","extensions":["thmx"]},"application/vnd.ms-opentype":{"source":"apache","compressible":true},"application/vnd.ms-outlook":{"compressible":false,"extensions":["msg"]},"application/vnd.ms-package.obfuscated-opentype":{"source":"apache"},"application/vnd.ms-pki.seccat":{"source":"apache","extensions":["cat"]},"application/vnd.ms-pki.stl":{"source":"apache","extensions":["stl"]},"application/vnd.ms-playready.initiator+xml":{"source":"iana","compressible":true},"application/vnd.ms-powerpoint":{"source":"iana","compressible":false,"extensions":["ppt","pps","pot"]},"application/vnd.ms-powerpoint.addin.macroenabled.12":{"source":"iana","extensions":["ppam"]},"application/vnd.ms-powerpoint.presentation.macroenabled.12":{"source":"iana","extensions":["pptm"]},"application/vnd.ms-powerpoint.slide.macroenabled.12":{"source":"iana","extensions":["sldm"]},"application/vnd.ms-powerpoint.slideshow.macroenabled.12":{"source":"iana","extensions":["ppsm"]},"application/vnd.ms-powerpoint.template.macroenabled.12":{"source":"iana","extensions":["potm"]},"application/vnd.ms-printdevicecapabilities+xml":{"source":"iana","compressible":true},"application/vnd.ms-printing.printticket+xml":{"source":"apache","compressible":true},"application/vnd.ms-printschematicket+xml":{"source":"iana","compressible":true},"application/vnd.ms-project":{"source":"iana","extensions":["mpp","mpt"]},"application/vnd.ms-tnef":{"source":"iana"},"application/vnd.ms-windows.devicepairing":{"source":"iana"},"application/vnd.ms-windows.nwprinting.oob":{"source":"iana"},"application/vnd.ms-windows.printerpairing":{"source":"iana"},"application/vnd.ms-windows.wsd.oob":{"source":"iana"},"application/vnd.ms-wmdrm.lic-chlg-req":{"source":"iana"},"application/vnd.ms-wmdrm.lic-resp":{"source":"iana"},"application/vnd.ms-wmdrm.meter-chlg-req":{"source":"iana"},"application/vnd.ms-wmdrm.meter-resp":{"source":"iana"},"application/vnd.ms-word.document.macroenabled.12":{"source":"iana","extensions":["docm"]},"application/vnd.ms-word.template.macroenabled.12":{"source":"iana","extensions":["dotm"]},"application/vnd.ms-works":{"source":"iana","extensions":["wps","wks","wcm","wdb"]},"application/vnd.ms-wpl":{"source":"iana","extensions":["wpl"]},"application/vnd.ms-xpsdocument":{"source":"iana","compressible":false,"extensions":["xps"]},"application/vnd.msa-disk-image":{"source":"iana"},"application/vnd.mseq":{"source":"iana","extensions":["mseq"]},"application/vnd.msign":{"source":"iana"},"application/vnd.multiad.creator":{"source":"iana"},"application/vnd.multiad.creator.cif":{"source":"iana"},"application/vnd.music-niff":{"source":"iana"},"application/vnd.musician":{"source":"iana","extensions":["mus"]},"application/vnd.muvee.style":{"source":"iana","extensions":["msty"]},"application/vnd.mynfc":{"source":"iana","extensions":["taglet"]},"application/vnd.nacamar.ybrid+json":{"source":"iana","compressible":true},"application/vnd.ncd.control":{"source":"iana"},"application/vnd.ncd.reference":{"source":"iana"},"application/vnd.nearst.inv+json":{"source":"iana","compressible":true},"application/vnd.nebumind.line":{"source":"iana"},"application/vnd.nervana":{"source":"iana"},"application/vnd.netfpx":{"source":"iana"},"application/vnd.neurolanguage.nlu":{"source":"iana","extensions":["nlu"]},"application/vnd.nimn":{"source":"iana"},"application/vnd.nintendo.nitro.rom":{"source":"iana"},"application/vnd.nintendo.snes.rom":{"source":"iana"},"application/vnd.nitf":{"source":"iana","extensions":["ntf","nitf"]},"application/vnd.noblenet-directory":{"source":"iana","extensions":["nnd"]},"application/vnd.noblenet-sealer":{"source":"iana","extensions":["nns"]},"application/vnd.noblenet-web":{"source":"iana","extensions":["nnw"]},"application/vnd.nokia.catalogs":{"source":"iana"},"application/vnd.nokia.conml+wbxml":{"source":"iana"},"application/vnd.nokia.conml+xml":{"source":"iana","compressible":true},"application/vnd.nokia.iptv.config+xml":{"source":"iana","compressible":true},"application/vnd.nokia.isds-radio-presets":{"source":"iana"},"application/vnd.nokia.landmark+wbxml":{"source":"iana"},"application/vnd.nokia.landmark+xml":{"source":"iana","compressible":true},"application/vnd.nokia.landmarkcollection+xml":{"source":"iana","compressible":true},"application/vnd.nokia.n-gage.ac+xml":{"source":"iana","compressible":true,"extensions":["ac"]},"application/vnd.nokia.n-gage.data":{"source":"iana","extensions":["ngdat"]},"application/vnd.nokia.n-gage.symbian.install":{"source":"iana","extensions":["n-gage"]},"application/vnd.nokia.ncd":{"source":"iana"},"application/vnd.nokia.pcd+wbxml":{"source":"iana"},"application/vnd.nokia.pcd+xml":{"source":"iana","compressible":true},"application/vnd.nokia.radio-preset":{"source":"iana","extensions":["rpst"]},"application/vnd.nokia.radio-presets":{"source":"iana","extensions":["rpss"]},"application/vnd.novadigm.edm":{"source":"iana","extensions":["edm"]},"application/vnd.novadigm.edx":{"source":"iana","extensions":["edx"]},"application/vnd.novadigm.ext":{"source":"iana","extensions":["ext"]},"application/vnd.ntt-local.content-share":{"source":"iana"},"application/vnd.ntt-local.file-transfer":{"source":"iana"},"application/vnd.ntt-local.ogw_remote-access":{"source":"iana"},"application/vnd.ntt-local.sip-ta_remote":{"source":"iana"},"application/vnd.ntt-local.sip-ta_tcp_stream":{"source":"iana"},"application/vnd.oasis.opendocument.chart":{"source":"iana","extensions":["odc"]},"application/vnd.oasis.opendocument.chart-template":{"source":"iana","extensions":["otc"]},"application/vnd.oasis.opendocument.database":{"source":"iana","extensions":["odb"]},"application/vnd.oasis.opendocument.formula":{"source":"iana","extensions":["odf"]},"application/vnd.oasis.opendocument.formula-template":{"source":"iana","extensions":["odft"]},"application/vnd.oasis.opendocument.graphics":{"source":"iana","compressible":false,"extensions":["odg"]},"application/vnd.oasis.opendocument.graphics-template":{"source":"iana","extensions":["otg"]},"application/vnd.oasis.opendocument.image":{"source":"iana","extensions":["odi"]},"application/vnd.oasis.opendocument.image-template":{"source":"iana","extensions":["oti"]},"application/vnd.oasis.opendocument.presentation":{"source":"iana","compressible":false,"extensions":["odp"]},"application/vnd.oasis.opendocument.presentation-template":{"source":"iana","extensions":["otp"]},"application/vnd.oasis.opendocument.spreadsheet":{"source":"iana","compressible":false,"extensions":["ods"]},"application/vnd.oasis.opendocument.spreadsheet-template":{"source":"iana","extensions":["ots"]},"application/vnd.oasis.opendocument.text":{"source":"iana","compressible":false,"extensions":["odt"]},"application/vnd.oasis.opendocument.text-master":{"source":"iana","extensions":["odm"]},"application/vnd.oasis.opendocument.text-template":{"source":"iana","extensions":["ott"]},"application/vnd.oasis.opendocument.text-web":{"source":"iana","extensions":["oth"]},"application/vnd.obn":{"source":"iana"},"application/vnd.ocf+cbor":{"source":"iana"},"application/vnd.oci.image.manifest.v1+json":{"source":"iana","compressible":true},"application/vnd.oftn.l10n+json":{"source":"iana","compressible":true},"application/vnd.oipf.contentaccessdownload+xml":{"source":"iana","compressible":true},"application/vnd.oipf.contentaccessstreaming+xml":{"source":"iana","compressible":true},"application/vnd.oipf.cspg-hexbinary":{"source":"iana"},"application/vnd.oipf.dae.svg+xml":{"source":"iana","compressible":true},"application/vnd.oipf.dae.xhtml+xml":{"source":"iana","compressible":true},"application/vnd.oipf.mippvcontrolmessage+xml":{"source":"iana","compressible":true},"application/vnd.oipf.pae.gem":{"source":"iana"},"application/vnd.oipf.spdiscovery+xml":{"source":"iana","compressible":true},"application/vnd.oipf.spdlist+xml":{"source":"iana","compressible":true},"application/vnd.oipf.ueprofile+xml":{"source":"iana","compressible":true},"application/vnd.oipf.userprofile+xml":{"source":"iana","compressible":true},"application/vnd.olpc-sugar":{"source":"iana","extensions":["xo"]},"application/vnd.oma-scws-config":{"source":"iana"},"application/vnd.oma-scws-http-request":{"source":"iana"},"application/vnd.oma-scws-http-response":{"source":"iana"},"application/vnd.oma.bcast.associated-procedure-parameter+xml":{"source":"iana","compressible":true},"application/vnd.oma.bcast.drm-trigger+xml":{"source":"iana","compressible":true},"application/vnd.oma.bcast.imd+xml":{"source":"iana","compressible":true},"application/vnd.oma.bcast.ltkm":{"source":"iana"},"application/vnd.oma.bcast.notification+xml":{"source":"iana","compressible":true},"application/vnd.oma.bcast.provisioningtrigger":{"source":"iana"},"application/vnd.oma.bcast.sgboot":{"source":"iana"},"application/vnd.oma.bcast.sgdd+xml":{"source":"iana","compressible":true},"application/vnd.oma.bcast.sgdu":{"source":"iana"},"application/vnd.oma.bcast.simple-symbol-container":{"source":"iana"},"application/vnd.oma.bcast.smartcard-trigger+xml":{"source":"iana","compressible":true},"application/vnd.oma.bcast.sprov+xml":{"source":"iana","compressible":true},"application/vnd.oma.bcast.stkm":{"source":"iana"},"application/vnd.oma.cab-address-book+xml":{"source":"iana","compressible":true},"application/vnd.oma.cab-feature-handler+xml":{"source":"iana","compressible":true},"application/vnd.oma.cab-pcc+xml":{"source":"iana","compressible":true},"application/vnd.oma.cab-subs-invite+xml":{"source":"iana","compressible":true},"application/vnd.oma.cab-user-prefs+xml":{"source":"iana","compressible":true},"application/vnd.oma.dcd":{"source":"iana"},"application/vnd.oma.dcdc":{"source":"iana"},"application/vnd.oma.dd2+xml":{"source":"iana","compressible":true,"extensions":["dd2"]},"application/vnd.oma.drm.risd+xml":{"source":"iana","compressible":true},"application/vnd.oma.group-usage-list+xml":{"source":"iana","compressible":true},"application/vnd.oma.lwm2m+cbor":{"source":"iana"},"application/vnd.oma.lwm2m+json":{"source":"iana","compressible":true},"application/vnd.oma.lwm2m+tlv":{"source":"iana"},"application/vnd.oma.pal+xml":{"source":"iana","compressible":true},"application/vnd.oma.poc.detailed-progress-report+xml":{"source":"iana","compressible":true},"application/vnd.oma.poc.final-report+xml":{"source":"iana","compressible":true},"application/vnd.oma.poc.groups+xml":{"source":"iana","compressible":true},"application/vnd.oma.poc.invocation-descriptor+xml":{"source":"iana","compressible":true},"application/vnd.oma.poc.optimized-progress-report+xml":{"source":"iana","compressible":true},"application/vnd.oma.push":{"source":"iana"},"application/vnd.oma.scidm.messages+xml":{"source":"iana","compressible":true},"application/vnd.oma.xcap-directory+xml":{"source":"iana","compressible":true},"application/vnd.omads-email+xml":{"source":"iana","charset":"UTF-8","compressible":true},"application/vnd.omads-file+xml":{"source":"iana","charset":"UTF-8","compressible":true},"application/vnd.omads-folder+xml":{"source":"iana","charset":"UTF-8","compressible":true},"application/vnd.omaloc-supl-init":{"source":"iana"},"application/vnd.onepager":{"source":"iana"},"application/vnd.onepagertamp":{"source":"iana"},"application/vnd.onepagertamx":{"source":"iana"},"application/vnd.onepagertat":{"source":"iana"},"application/vnd.onepagertatp":{"source":"iana"},"application/vnd.onepagertatx":{"source":"iana"},"application/vnd.openblox.game+xml":{"source":"iana","compressible":true,"extensions":["obgx"]},"application/vnd.openblox.game-binary":{"source":"iana"},"application/vnd.openeye.oeb":{"source":"iana"},"application/vnd.openofficeorg.extension":{"source":"apache","extensions":["oxt"]},"application/vnd.openstreetmap.data+xml":{"source":"iana","compressible":true,"extensions":["osm"]},"application/vnd.opentimestamps.ots":{"source":"iana"},"application/vnd.openxmlformats-officedocument.custom-properties+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.customxmlproperties+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.drawing+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.drawingml.chart+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.drawingml.chartshapes+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.drawingml.diagramcolors+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.drawingml.diagramdata+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.drawingml.diagramlayout+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.drawingml.diagramstyle+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.extended-properties+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.presentationml.commentauthors+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.presentationml.comments+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.presentationml.handoutmaster+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.presentationml.notesmaster+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.presentationml.notesslide+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.presentationml.presentation":{"source":"iana","compressible":false,"extensions":["pptx"]},"application/vnd.openxmlformats-officedocument.presentationml.presentation.main+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.presentationml.presprops+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.presentationml.slide":{"source":"iana","extensions":["sldx"]},"application/vnd.openxmlformats-officedocument.presentationml.slide+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.presentationml.slidelayout+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.presentationml.slidemaster+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.presentationml.slideshow":{"source":"iana","extensions":["ppsx"]},"application/vnd.openxmlformats-officedocument.presentationml.slideshow.main+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.presentationml.slideupdateinfo+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.presentationml.tablestyles+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.presentationml.tags+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.presentationml.template":{"source":"iana","extensions":["potx"]},"application/vnd.openxmlformats-officedocument.presentationml.template.main+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.presentationml.viewprops+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.calcchain+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.chartsheet+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.comments+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.connections+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.dialogsheet+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.externallink+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.pivotcachedefinition+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.pivotcacherecords+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.pivottable+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.querytable+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.revisionheaders+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.revisionlog+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.sharedstrings+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet":{"source":"iana","compressible":false,"extensions":["xlsx"]},"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.sheetmetadata+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.styles+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.table+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.tablesinglecells+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.template":{"source":"iana","extensions":["xltx"]},"application/vnd.openxmlformats-officedocument.spreadsheetml.template.main+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.usernames+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.volatiledependencies+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.theme+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.themeoverride+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.vmldrawing":{"source":"iana"},"application/vnd.openxmlformats-officedocument.wordprocessingml.comments+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.wordprocessingml.document":{"source":"iana","compressible":false,"extensions":["docx"]},"application/vnd.openxmlformats-officedocument.wordprocessingml.document.glossary+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.wordprocessingml.document.main+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.wordprocessingml.endnotes+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.wordprocessingml.fonttable+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.wordprocessingml.footer+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.wordprocessingml.footnotes+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.wordprocessingml.numbering+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.wordprocessingml.settings+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.wordprocessingml.styles+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.wordprocessingml.template":{"source":"iana","extensions":["dotx"]},"application/vnd.openxmlformats-officedocument.wordprocessingml.template.main+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.wordprocessingml.websettings+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-package.core-properties+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-package.digital-signature-xmlsignature+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-package.relationships+xml":{"source":"iana","compressible":true},"application/vnd.oracle.resource+json":{"source":"iana","compressible":true},"application/vnd.orange.indata":{"source":"iana"},"application/vnd.osa.netdeploy":{"source":"iana"},"application/vnd.osgeo.mapguide.package":{"source":"iana","extensions":["mgp"]},"application/vnd.osgi.bundle":{"source":"iana"},"application/vnd.osgi.dp":{"source":"iana","extensions":["dp"]},"application/vnd.osgi.subsystem":{"source":"iana","extensions":["esa"]},"application/vnd.otps.ct-kip+xml":{"source":"iana","compressible":true},"application/vnd.oxli.countgraph":{"source":"iana"},"application/vnd.pagerduty+json":{"source":"iana","compressible":true},"application/vnd.palm":{"source":"iana","extensions":["pdb","pqa","oprc"]},"application/vnd.panoply":{"source":"iana"},"application/vnd.paos.xml":{"source":"iana"},"application/vnd.patentdive":{"source":"iana"},"application/vnd.patientecommsdoc":{"source":"iana"},"application/vnd.pawaafile":{"source":"iana","extensions":["paw"]},"application/vnd.pcos":{"source":"iana"},"application/vnd.pg.format":{"source":"iana","extensions":["str"]},"application/vnd.pg.osasli":{"source":"iana","extensions":["ei6"]},"application/vnd.piaccess.application-licence":{"source":"iana"},"application/vnd.picsel":{"source":"iana","extensions":["efif"]},"application/vnd.pmi.widget":{"source":"iana","extensions":["wg"]},"application/vnd.poc.group-advertisement+xml":{"source":"iana","compressible":true},"application/vnd.pocketlearn":{"source":"iana","extensions":["plf"]},"application/vnd.powerbuilder6":{"source":"iana","extensions":["pbd"]},"application/vnd.powerbuilder6-s":{"source":"iana"},"application/vnd.powerbuilder7":{"source":"iana"},"application/vnd.powerbuilder7-s":{"source":"iana"},"application/vnd.powerbuilder75":{"source":"iana"},"application/vnd.powerbuilder75-s":{"source":"iana"},"application/vnd.preminet":{"source":"iana"},"application/vnd.previewsystems.box":{"source":"iana","extensions":["box"]},"application/vnd.proteus.magazine":{"source":"iana","extensions":["mgz"]},"application/vnd.psfs":{"source":"iana"},"application/vnd.publishare-delta-tree":{"source":"iana","extensions":["qps"]},"application/vnd.pvi.ptid1":{"source":"iana","extensions":["ptid"]},"application/vnd.pwg-multiplexed":{"source":"iana"},"application/vnd.pwg-xhtml-print+xml":{"source":"iana","compressible":true},"application/vnd.qualcomm.brew-app-res":{"source":"iana"},"application/vnd.quarantainenet":{"source":"iana"},"application/vnd.quark.quarkxpress":{"source":"iana","extensions":["qxd","qxt","qwd","qwt","qxl","qxb"]},"application/vnd.quobject-quoxdocument":{"source":"iana"},"application/vnd.radisys.moml+xml":{"source":"iana","compressible":true},"application/vnd.radisys.msml+xml":{"source":"iana","compressible":true},"application/vnd.radisys.msml-audit+xml":{"source":"iana","compressible":true},"application/vnd.radisys.msml-audit-conf+xml":{"source":"iana","compressible":true},"application/vnd.radisys.msml-audit-conn+xml":{"source":"iana","compressible":true},"application/vnd.radisys.msml-audit-dialog+xml":{"source":"iana","compressible":true},"application/vnd.radisys.msml-audit-stream+xml":{"source":"iana","compressible":true},"application/vnd.radisys.msml-conf+xml":{"source":"iana","compressible":true},"application/vnd.radisys.msml-dialog+xml":{"source":"iana","compressible":true},"application/vnd.radisys.msml-dialog-base+xml":{"source":"iana","compressible":true},"application/vnd.radisys.msml-dialog-fax-detect+xml":{"source":"iana","compressible":true},"application/vnd.radisys.msml-dialog-fax-sendrecv+xml":{"source":"iana","compressible":true},"application/vnd.radisys.msml-dialog-group+xml":{"source":"iana","compressible":true},"application/vnd.radisys.msml-dialog-speech+xml":{"source":"iana","compressible":true},"application/vnd.radisys.msml-dialog-transform+xml":{"source":"iana","compressible":true},"application/vnd.rainstor.data":{"source":"iana"},"application/vnd.rapid":{"source":"iana"},"application/vnd.rar":{"source":"iana","extensions":["rar"]},"application/vnd.realvnc.bed":{"source":"iana","extensions":["bed"]},"application/vnd.recordare.musicxml":{"source":"iana","extensions":["mxl"]},"application/vnd.recordare.musicxml+xml":{"source":"iana","compressible":true,"extensions":["musicxml"]},"application/vnd.renlearn.rlprint":{"source":"iana"},"application/vnd.resilient.logic":{"source":"iana"},"application/vnd.restful+json":{"source":"iana","compressible":true},"application/vnd.rig.cryptonote":{"source":"iana","extensions":["cryptonote"]},"application/vnd.rim.cod":{"source":"apache","extensions":["cod"]},"application/vnd.rn-realmedia":{"source":"apache","extensions":["rm"]},"application/vnd.rn-realmedia-vbr":{"source":"apache","extensions":["rmvb"]},"application/vnd.route66.link66+xml":{"source":"iana","compressible":true,"extensions":["link66"]},"application/vnd.rs-274x":{"source":"iana"},"application/vnd.ruckus.download":{"source":"iana"},"application/vnd.s3sms":{"source":"iana"},"application/vnd.sailingtracker.track":{"source":"iana","extensions":["st"]},"application/vnd.sar":{"source":"iana"},"application/vnd.sbm.cid":{"source":"iana"},"application/vnd.sbm.mid2":{"source":"iana"},"application/vnd.scribus":{"source":"iana"},"application/vnd.sealed.3df":{"source":"iana"},"application/vnd.sealed.csf":{"source":"iana"},"application/vnd.sealed.doc":{"source":"iana"},"application/vnd.sealed.eml":{"source":"iana"},"application/vnd.sealed.mht":{"source":"iana"},"application/vnd.sealed.net":{"source":"iana"},"application/vnd.sealed.ppt":{"source":"iana"},"application/vnd.sealed.tiff":{"source":"iana"},"application/vnd.sealed.xls":{"source":"iana"},"application/vnd.sealedmedia.softseal.html":{"source":"iana"},"application/vnd.sealedmedia.softseal.pdf":{"source":"iana"},"application/vnd.seemail":{"source":"iana","extensions":["see"]},"application/vnd.seis+json":{"source":"iana","compressible":true},"application/vnd.sema":{"source":"iana","extensions":["sema"]},"application/vnd.semd":{"source":"iana","extensions":["semd"]},"application/vnd.semf":{"source":"iana","extensions":["semf"]},"application/vnd.shade-save-file":{"source":"iana"},"application/vnd.shana.informed.formdata":{"source":"iana","extensions":["ifm"]},"application/vnd.shana.informed.formtemplate":{"source":"iana","extensions":["itp"]},"application/vnd.shana.informed.interchange":{"source":"iana","extensions":["iif"]},"application/vnd.shana.informed.package":{"source":"iana","extensions":["ipk"]},"application/vnd.shootproof+json":{"source":"iana","compressible":true},"application/vnd.shopkick+json":{"source":"iana","compressible":true},"application/vnd.shp":{"source":"iana"},"application/vnd.shx":{"source":"iana"},"application/vnd.sigrok.session":{"source":"iana"},"application/vnd.simtech-mindmapper":{"source":"iana","extensions":["twd","twds"]},"application/vnd.siren+json":{"source":"iana","compressible":true},"application/vnd.smaf":{"source":"iana","extensions":["mmf"]},"application/vnd.smart.notebook":{"source":"iana"},"application/vnd.smart.teacher":{"source":"iana","extensions":["teacher"]},"application/vnd.snesdev-page-table":{"source":"iana"},"application/vnd.software602.filler.form+xml":{"source":"iana","compressible":true,"extensions":["fo"]},"application/vnd.software602.filler.form-xml-zip":{"source":"iana"},"application/vnd.solent.sdkm+xml":{"source":"iana","compressible":true,"extensions":["sdkm","sdkd"]},"application/vnd.spotfire.dxp":{"source":"iana","extensions":["dxp"]},"application/vnd.spotfire.sfs":{"source":"iana","extensions":["sfs"]},"application/vnd.sqlite3":{"source":"iana"},"application/vnd.sss-cod":{"source":"iana"},"application/vnd.sss-dtf":{"source":"iana"},"application/vnd.sss-ntf":{"source":"iana"},"application/vnd.stardivision.calc":{"source":"apache","extensions":["sdc"]},"application/vnd.stardivision.draw":{"source":"apache","extensions":["sda"]},"application/vnd.stardivision.impress":{"source":"apache","extensions":["sdd"]},"application/vnd.stardivision.math":{"source":"apache","extensions":["smf"]},"application/vnd.stardivision.writer":{"source":"apache","extensions":["sdw","vor"]},"application/vnd.stardivision.writer-global":{"source":"apache","extensions":["sgl"]},"application/vnd.stepmania.package":{"source":"iana","extensions":["smzip"]},"application/vnd.stepmania.stepchart":{"source":"iana","extensions":["sm"]},"application/vnd.street-stream":{"source":"iana"},"application/vnd.sun.wadl+xml":{"source":"iana","compressible":true,"extensions":["wadl"]},"application/vnd.sun.xml.calc":{"source":"apache","extensions":["sxc"]},"application/vnd.sun.xml.calc.template":{"source":"apache","extensions":["stc"]},"application/vnd.sun.xml.draw":{"source":"apache","extensions":["sxd"]},"application/vnd.sun.xml.draw.template":{"source":"apache","extensions":["std"]},"application/vnd.sun.xml.impress":{"source":"apache","extensions":["sxi"]},"application/vnd.sun.xml.impress.template":{"source":"apache","extensions":["sti"]},"application/vnd.sun.xml.math":{"source":"apache","extensions":["sxm"]},"application/vnd.sun.xml.writer":{"source":"apache","extensions":["sxw"]},"application/vnd.sun.xml.writer.global":{"source":"apache","extensions":["sxg"]},"application/vnd.sun.xml.writer.template":{"source":"apache","extensions":["stw"]},"application/vnd.sus-calendar":{"source":"iana","extensions":["sus","susp"]},"application/vnd.svd":{"source":"iana","extensions":["svd"]},"application/vnd.swiftview-ics":{"source":"iana"},"application/vnd.sycle+xml":{"source":"iana","compressible":true},"application/vnd.syft+json":{"source":"iana","compressible":true},"application/vnd.symbian.install":{"source":"apache","extensions":["sis","sisx"]},"application/vnd.syncml+xml":{"source":"iana","charset":"UTF-8","compressible":true,"extensions":["xsm"]},"application/vnd.syncml.dm+wbxml":{"source":"iana","charset":"UTF-8","extensions":["bdm"]},"application/vnd.syncml.dm+xml":{"source":"iana","charset":"UTF-8","compressible":true,"extensions":["xdm"]},"application/vnd.syncml.dm.notification":{"source":"iana"},"application/vnd.syncml.dmddf+wbxml":{"source":"iana"},"application/vnd.syncml.dmddf+xml":{"source":"iana","charset":"UTF-8","compressible":true,"extensions":["ddf"]},"application/vnd.syncml.dmtnds+wbxml":{"source":"iana"},"application/vnd.syncml.dmtnds+xml":{"source":"iana","charset":"UTF-8","compressible":true},"application/vnd.syncml.ds.notification":{"source":"iana"},"application/vnd.tableschema+json":{"source":"iana","compressible":true},"application/vnd.tao.intent-module-archive":{"source":"iana","extensions":["tao"]},"application/vnd.tcpdump.pcap":{"source":"iana","extensions":["pcap","cap","dmp"]},"application/vnd.think-cell.ppttc+json":{"source":"iana","compressible":true},"application/vnd.tmd.mediaflex.api+xml":{"source":"iana","compressible":true},"application/vnd.tml":{"source":"iana"},"application/vnd.tmobile-livetv":{"source":"iana","extensions":["tmo"]},"application/vnd.tri.onesource":{"source":"iana"},"application/vnd.trid.tpt":{"source":"iana","extensions":["tpt"]},"application/vnd.triscape.mxs":{"source":"iana","extensions":["mxs"]},"application/vnd.trueapp":{"source":"iana","extensions":["tra"]},"application/vnd.truedoc":{"source":"iana"},"application/vnd.ubisoft.webplayer":{"source":"iana"},"application/vnd.ufdl":{"source":"iana","extensions":["ufd","ufdl"]},"application/vnd.uiq.theme":{"source":"iana","extensions":["utz"]},"application/vnd.umajin":{"source":"iana","extensions":["umj"]},"application/vnd.unity":{"source":"iana","extensions":["unityweb"]},"application/vnd.uoml+xml":{"source":"iana","compressible":true,"extensions":["uoml"]},"application/vnd.uplanet.alert":{"source":"iana"},"application/vnd.uplanet.alert-wbxml":{"source":"iana"},"application/vnd.uplanet.bearer-choice":{"source":"iana"},"application/vnd.uplanet.bearer-choice-wbxml":{"source":"iana"},"application/vnd.uplanet.cacheop":{"source":"iana"},"application/vnd.uplanet.cacheop-wbxml":{"source":"iana"},"application/vnd.uplanet.channel":{"source":"iana"},"application/vnd.uplanet.channel-wbxml":{"source":"iana"},"application/vnd.uplanet.list":{"source":"iana"},"application/vnd.uplanet.list-wbxml":{"source":"iana"},"application/vnd.uplanet.listcmd":{"source":"iana"},"application/vnd.uplanet.listcmd-wbxml":{"source":"iana"},"application/vnd.uplanet.signal":{"source":"iana"},"application/vnd.uri-map":{"source":"iana"},"application/vnd.valve.source.material":{"source":"iana"},"application/vnd.vcx":{"source":"iana","extensions":["vcx"]},"application/vnd.vd-study":{"source":"iana"},"application/vnd.vectorworks":{"source":"iana"},"application/vnd.vel+json":{"source":"iana","compressible":true},"application/vnd.verimatrix.vcas":{"source":"iana"},"application/vnd.veritone.aion+json":{"source":"iana","compressible":true},"application/vnd.veryant.thin":{"source":"iana"},"application/vnd.ves.encrypted":{"source":"iana"},"application/vnd.vidsoft.vidconference":{"source":"iana"},"application/vnd.visio":{"source":"iana","extensions":["vsd","vst","vss","vsw"]},"application/vnd.visionary":{"source":"iana","extensions":["vis"]},"application/vnd.vividence.scriptfile":{"source":"iana"},"application/vnd.vsf":{"source":"iana","extensions":["vsf"]},"application/vnd.wap.sic":{"source":"iana"},"application/vnd.wap.slc":{"source":"iana"},"application/vnd.wap.wbxml":{"source":"iana","charset":"UTF-8","extensions":["wbxml"]},"application/vnd.wap.wmlc":{"source":"iana","extensions":["wmlc"]},"application/vnd.wap.wmlscriptc":{"source":"iana","extensions":["wmlsc"]},"application/vnd.webturbo":{"source":"iana","extensions":["wtb"]},"application/vnd.wfa.dpp":{"source":"iana"},"application/vnd.wfa.p2p":{"source":"iana"},"application/vnd.wfa.wsc":{"source":"iana"},"application/vnd.windows.devicepairing":{"source":"iana"},"application/vnd.wmc":{"source":"iana"},"application/vnd.wmf.bootstrap":{"source":"iana"},"application/vnd.wolfram.mathematica":{"source":"iana"},"application/vnd.wolfram.mathematica.package":{"source":"iana"},"application/vnd.wolfram.player":{"source":"iana","extensions":["nbp"]},"application/vnd.wordperfect":{"source":"iana","extensions":["wpd"]},"application/vnd.wqd":{"source":"iana","extensions":["wqd"]},"application/vnd.wrq-hp3000-labelled":{"source":"iana"},"application/vnd.wt.stf":{"source":"iana","extensions":["stf"]},"application/vnd.wv.csp+wbxml":{"source":"iana"},"application/vnd.wv.csp+xml":{"source":"iana","compressible":true},"application/vnd.wv.ssp+xml":{"source":"iana","compressible":true},"application/vnd.xacml+json":{"source":"iana","compressible":true},"application/vnd.xara":{"source":"iana","extensions":["xar"]},"application/vnd.xfdl":{"source":"iana","extensions":["xfdl"]},"application/vnd.xfdl.webform":{"source":"iana"},"application/vnd.xmi+xml":{"source":"iana","compressible":true},"application/vnd.xmpie.cpkg":{"source":"iana"},"application/vnd.xmpie.dpkg":{"source":"iana"},"application/vnd.xmpie.plan":{"source":"iana"},"application/vnd.xmpie.ppkg":{"source":"iana"},"application/vnd.xmpie.xlim":{"source":"iana"},"application/vnd.yamaha.hv-dic":{"source":"iana","extensions":["hvd"]},"application/vnd.yamaha.hv-script":{"source":"iana","extensions":["hvs"]},"application/vnd.yamaha.hv-voice":{"source":"iana","extensions":["hvp"]},"application/vnd.yamaha.openscoreformat":{"source":"iana","extensions":["osf"]},"application/vnd.yamaha.openscoreformat.osfpvg+xml":{"source":"iana","compressible":true,"extensions":["osfpvg"]},"application/vnd.yamaha.remote-setup":{"source":"iana"},"application/vnd.yamaha.smaf-audio":{"source":"iana","extensions":["saf"]},"application/vnd.yamaha.smaf-phrase":{"source":"iana","extensions":["spf"]},"application/vnd.yamaha.through-ngn":{"source":"iana"},"application/vnd.yamaha.tunnel-udpencap":{"source":"iana"},"application/vnd.yaoweme":{"source":"iana"},"application/vnd.yellowriver-custom-menu":{"source":"iana","extensions":["cmp"]},"application/vnd.youtube.yt":{"source":"iana"},"application/vnd.zul":{"source":"iana","extensions":["zir","zirz"]},"application/vnd.zzazz.deck+xml":{"source":"iana","compressible":true,"extensions":["zaz"]},"application/voicexml+xml":{"source":"iana","compressible":true,"extensions":["vxml"]},"application/voucher-cms+json":{"source":"iana","compressible":true},"application/vq-rtcpxr":{"source":"iana"},"application/wasm":{"source":"iana","compressible":true,"extensions":["wasm"]},"application/watcherinfo+xml":{"source":"iana","compressible":true,"extensions":["wif"]},"application/webpush-options+json":{"source":"iana","compressible":true},"application/whoispp-query":{"source":"iana"},"application/whoispp-response":{"source":"iana"},"application/widget":{"source":"iana","extensions":["wgt"]},"application/winhlp":{"source":"apache","extensions":["hlp"]},"application/wita":{"source":"iana"},"application/wordperfect5.1":{"source":"iana"},"application/wsdl+xml":{"source":"iana","compressible":true,"extensions":["wsdl"]},"application/wspolicy+xml":{"source":"iana","compressible":true,"extensions":["wspolicy"]},"application/x-7z-compressed":{"source":"apache","compressible":false,"extensions":["7z"]},"application/x-abiword":{"source":"apache","extensions":["abw"]},"application/x-ace-compressed":{"source":"apache","extensions":["ace"]},"application/x-amf":{"source":"apache"},"application/x-apple-diskimage":{"source":"apache","extensions":["dmg"]},"application/x-arj":{"compressible":false,"extensions":["arj"]},"application/x-authorware-bin":{"source":"apache","extensions":["aab","x32","u32","vox"]},"application/x-authorware-map":{"source":"apache","extensions":["aam"]},"application/x-authorware-seg":{"source":"apache","extensions":["aas"]},"application/x-bcpio":{"source":"apache","extensions":["bcpio"]},"application/x-bdoc":{"compressible":false,"extensions":["bdoc"]},"application/x-bittorrent":{"source":"apache","extensions":["torrent"]},"application/x-blorb":{"source":"apache","extensions":["blb","blorb"]},"application/x-bzip":{"source":"apache","compressible":false,"extensions":["bz"]},"application/x-bzip2":{"source":"apache","compressible":false,"extensions":["bz2","boz"]},"application/x-cbr":{"source":"apache","extensions":["cbr","cba","cbt","cbz","cb7"]},"application/x-cdlink":{"source":"apache","extensions":["vcd"]},"application/x-cfs-compressed":{"source":"apache","extensions":["cfs"]},"application/x-chat":{"source":"apache","extensions":["chat"]},"application/x-chess-pgn":{"source":"apache","extensions":["pgn"]},"application/x-chrome-extension":{"extensions":["crx"]},"application/x-cocoa":{"source":"nginx","extensions":["cco"]},"application/x-compress":{"source":"apache"},"application/x-conference":{"source":"apache","extensions":["nsc"]},"application/x-cpio":{"source":"apache","extensions":["cpio"]},"application/x-csh":{"source":"apache","extensions":["csh"]},"application/x-deb":{"compressible":false},"application/x-debian-package":{"source":"apache","extensions":["deb","udeb"]},"application/x-dgc-compressed":{"source":"apache","extensions":["dgc"]},"application/x-director":{"source":"apache","extensions":["dir","dcr","dxr","cst","cct","cxt","w3d","fgd","swa"]},"application/x-doom":{"source":"apache","extensions":["wad"]},"application/x-dtbncx+xml":{"source":"apache","compressible":true,"extensions":["ncx"]},"application/x-dtbook+xml":{"source":"apache","compressible":true,"extensions":["dtb"]},"application/x-dtbresource+xml":{"source":"apache","compressible":true,"extensions":["res"]},"application/x-dvi":{"source":"apache","compressible":false,"extensions":["dvi"]},"application/x-envoy":{"source":"apache","extensions":["evy"]},"application/x-eva":{"source":"apache","extensions":["eva"]},"application/x-font-bdf":{"source":"apache","extensions":["bdf"]},"application/x-font-dos":{"source":"apache"},"application/x-font-framemaker":{"source":"apache"},"application/x-font-ghostscript":{"source":"apache","extensions":["gsf"]},"application/x-font-libgrx":{"source":"apache"},"application/x-font-linux-psf":{"source":"apache","extensions":["psf"]},"application/x-font-pcf":{"source":"apache","extensions":["pcf"]},"application/x-font-snf":{"source":"apache","extensions":["snf"]},"application/x-font-speedo":{"source":"apache"},"application/x-font-sunos-news":{"source":"apache"},"application/x-font-type1":{"source":"apache","extensions":["pfa","pfb","pfm","afm"]},"application/x-font-vfont":{"source":"apache"},"application/x-freearc":{"source":"apache","extensions":["arc"]},"application/x-futuresplash":{"source":"apache","extensions":["spl"]},"application/x-gca-compressed":{"source":"apache","extensions":["gca"]},"application/x-glulx":{"source":"apache","extensions":["ulx"]},"application/x-gnumeric":{"source":"apache","extensions":["gnumeric"]},"application/x-gramps-xml":{"source":"apache","extensions":["gramps"]},"application/x-gtar":{"source":"apache","extensions":["gtar"]},"application/x-gzip":{"source":"apache"},"application/x-hdf":{"source":"apache","extensions":["hdf"]},"application/x-httpd-php":{"compressible":true,"extensions":["php"]},"application/x-install-instructions":{"source":"apache","extensions":["install"]},"application/x-iso9660-image":{"source":"apache","extensions":["iso"]},"application/x-iwork-keynote-sffkey":{"extensions":["key"]},"application/x-iwork-numbers-sffnumbers":{"extensions":["numbers"]},"application/x-iwork-pages-sffpages":{"extensions":["pages"]},"application/x-java-archive-diff":{"source":"nginx","extensions":["jardiff"]},"application/x-java-jnlp-file":{"source":"apache","compressible":false,"extensions":["jnlp"]},"application/x-javascript":{"compressible":true},"application/x-keepass2":{"extensions":["kdbx"]},"application/x-latex":{"source":"apache","compressible":false,"extensions":["latex"]},"application/x-lua-bytecode":{"extensions":["luac"]},"application/x-lzh-compressed":{"source":"apache","extensions":["lzh","lha"]},"application/x-makeself":{"source":"nginx","extensions":["run"]},"application/x-mie":{"source":"apache","extensions":["mie"]},"application/x-mobipocket-ebook":{"source":"apache","extensions":["prc","mobi"]},"application/x-mpegurl":{"compressible":false},"application/x-ms-application":{"source":"apache","extensions":["application"]},"application/x-ms-shortcut":{"source":"apache","extensions":["lnk"]},"application/x-ms-wmd":{"source":"apache","extensions":["wmd"]},"application/x-ms-wmz":{"source":"apache","extensions":["wmz"]},"application/x-ms-xbap":{"source":"apache","extensions":["xbap"]},"application/x-msaccess":{"source":"apache","extensions":["mdb"]},"application/x-msbinder":{"source":"apache","extensions":["obd"]},"application/x-mscardfile":{"source":"apache","extensions":["crd"]},"application/x-msclip":{"source":"apache","extensions":["clp"]},"application/x-msdos-program":{"extensions":["exe"]},"application/x-msdownload":{"source":"apache","extensions":["exe","dll","com","bat","msi"]},"application/x-msmediaview":{"source":"apache","extensions":["mvb","m13","m14"]},"application/x-msmetafile":{"source":"apache","extensions":["wmf","wmz","emf","emz"]},"application/x-msmoney":{"source":"apache","extensions":["mny"]},"application/x-mspublisher":{"source":"apache","extensions":["pub"]},"application/x-msschedule":{"source":"apache","extensions":["scd"]},"application/x-msterminal":{"source":"apache","extensions":["trm"]},"application/x-mswrite":{"source":"apache","extensions":["wri"]},"application/x-netcdf":{"source":"apache","extensions":["nc","cdf"]},"application/x-ns-proxy-autoconfig":{"compressible":true,"extensions":["pac"]},"application/x-nzb":{"source":"apache","extensions":["nzb"]},"application/x-perl":{"source":"nginx","extensions":["pl","pm"]},"application/x-pilot":{"source":"nginx","extensions":["prc","pdb"]},"application/x-pkcs12":{"source":"apache","compressible":false,"extensions":["p12","pfx"]},"application/x-pkcs7-certificates":{"source":"apache","extensions":["p7b","spc"]},"application/x-pkcs7-certreqresp":{"source":"apache","extensions":["p7r"]},"application/x-pki-message":{"source":"iana"},"application/x-rar-compressed":{"source":"apache","compressible":false,"extensions":["rar"]},"application/x-redhat-package-manager":{"source":"nginx","extensions":["rpm"]},"application/x-research-info-systems":{"source":"apache","extensions":["ris"]},"application/x-sea":{"source":"nginx","extensions":["sea"]},"application/x-sh":{"source":"apache","compressible":true,"extensions":["sh"]},"application/x-shar":{"source":"apache","extensions":["shar"]},"application/x-shockwave-flash":{"source":"apache","compressible":false,"extensions":["swf"]},"application/x-silverlight-app":{"source":"apache","extensions":["xap"]},"application/x-sql":{"source":"apache","extensions":["sql"]},"application/x-stuffit":{"source":"apache","compressible":false,"extensions":["sit"]},"application/x-stuffitx":{"source":"apache","extensions":["sitx"]},"application/x-subrip":{"source":"apache","extensions":["srt"]},"application/x-sv4cpio":{"source":"apache","extensions":["sv4cpio"]},"application/x-sv4crc":{"source":"apache","extensions":["sv4crc"]},"application/x-t3vm-image":{"source":"apache","extensions":["t3"]},"application/x-tads":{"source":"apache","extensions":["gam"]},"application/x-tar":{"source":"apache","compressible":true,"extensions":["tar"]},"application/x-tcl":{"source":"apache","extensions":["tcl","tk"]},"application/x-tex":{"source":"apache","extensions":["tex"]},"application/x-tex-tfm":{"source":"apache","extensions":["tfm"]},"application/x-texinfo":{"source":"apache","extensions":["texinfo","texi"]},"application/x-tgif":{"source":"apache","extensions":["obj"]},"application/x-ustar":{"source":"apache","extensions":["ustar"]},"application/x-virtualbox-hdd":{"compressible":true,"extensions":["hdd"]},"application/x-virtualbox-ova":{"compressible":true,"extensions":["ova"]},"application/x-virtualbox-ovf":{"compressible":true,"extensions":["ovf"]},"application/x-virtualbox-vbox":{"compressible":true,"extensions":["vbox"]},"application/x-virtualbox-vbox-extpack":{"compressible":false,"extensions":["vbox-extpack"]},"application/x-virtualbox-vdi":{"compressible":true,"extensions":["vdi"]},"application/x-virtualbox-vhd":{"compressible":true,"extensions":["vhd"]},"application/x-virtualbox-vmdk":{"compressible":true,"extensions":["vmdk"]},"application/x-wais-source":{"source":"apache","extensions":["src"]},"application/x-web-app-manifest+json":{"compressible":true,"extensions":["webapp"]},"application/x-www-form-urlencoded":{"source":"iana","compressible":true},"application/x-x509-ca-cert":{"source":"iana","extensions":["der","crt","pem"]},"application/x-x509-ca-ra-cert":{"source":"iana"},"application/x-x509-next-ca-cert":{"source":"iana"},"application/x-xfig":{"source":"apache","extensions":["fig"]},"application/x-xliff+xml":{"source":"apache","compressible":true,"extensions":["xlf"]},"application/x-xpinstall":{"source":"apache","compressible":false,"extensions":["xpi"]},"application/x-xz":{"source":"apache","extensions":["xz"]},"application/x-zmachine":{"source":"apache","extensions":["z1","z2","z3","z4","z5","z6","z7","z8"]},"application/x400-bp":{"source":"iana"},"application/xacml+xml":{"source":"iana","compressible":true},"application/xaml+xml":{"source":"apache","compressible":true,"extensions":["xaml"]},"application/xcap-att+xml":{"source":"iana","compressible":true,"extensions":["xav"]},"application/xcap-caps+xml":{"source":"iana","compressible":true,"extensions":["xca"]},"application/xcap-diff+xml":{"source":"iana","compressible":true,"extensions":["xdf"]},"application/xcap-el+xml":{"source":"iana","compressible":true,"extensions":["xel"]},"application/xcap-error+xml":{"source":"iana","compressible":true},"application/xcap-ns+xml":{"source":"iana","compressible":true,"extensions":["xns"]},"application/xcon-conference-info+xml":{"source":"iana","compressible":true},"application/xcon-conference-info-diff+xml":{"source":"iana","compressible":true},"application/xenc+xml":{"source":"iana","compressible":true,"extensions":["xenc"]},"application/xhtml+xml":{"source":"iana","compressible":true,"extensions":["xhtml","xht"]},"application/xhtml-voice+xml":{"source":"apache","compressible":true},"application/xliff+xml":{"source":"iana","compressible":true,"extensions":["xlf"]},"application/xml":{"source":"iana","compressible":true,"extensions":["xml","xsl","xsd","rng"]},"application/xml-dtd":{"source":"iana","compressible":true,"extensions":["dtd"]},"application/xml-external-parsed-entity":{"source":"iana"},"application/xml-patch+xml":{"source":"iana","compressible":true},"application/xmpp+xml":{"source":"iana","compressible":true},"application/xop+xml":{"source":"iana","compressible":true,"extensions":["xop"]},"application/xproc+xml":{"source":"apache","compressible":true,"extensions":["xpl"]},"application/xslt+xml":{"source":"iana","compressible":true,"extensions":["xsl","xslt"]},"application/xspf+xml":{"source":"apache","compressible":true,"extensions":["xspf"]},"application/xv+xml":{"source":"iana","compressible":true,"extensions":["mxml","xhvml","xvml","xvm"]},"application/yang":{"source":"iana","extensions":["yang"]},"application/yang-data+json":{"source":"iana","compressible":true},"application/yang-data+xml":{"source":"iana","compressible":true},"application/yang-patch+json":{"source":"iana","compressible":true},"application/yang-patch+xml":{"source":"iana","compressible":true},"application/yin+xml":{"source":"iana","compressible":true,"extensions":["yin"]},"application/zip":{"source":"iana","compressible":false,"extensions":["zip"]},"application/zlib":{"source":"iana"},"application/zstd":{"source":"iana"},"audio/1d-interleaved-parityfec":{"source":"iana"},"audio/32kadpcm":{"source":"iana"},"audio/3gpp":{"source":"iana","compressible":false,"extensions":["3gpp"]},"audio/3gpp2":{"source":"iana"},"audio/aac":{"source":"iana"},"audio/ac3":{"source":"iana"},"audio/adpcm":{"source":"apache","extensions":["adp"]},"audio/amr":{"source":"iana","extensions":["amr"]},"audio/amr-wb":{"source":"iana"},"audio/amr-wb+":{"source":"iana"},"audio/aptx":{"source":"iana"},"audio/asc":{"source":"iana"},"audio/atrac-advanced-lossless":{"source":"iana"},"audio/atrac-x":{"source":"iana"},"audio/atrac3":{"source":"iana"},"audio/basic":{"source":"iana","compressible":false,"extensions":["au","snd"]},"audio/bv16":{"source":"iana"},"audio/bv32":{"source":"iana"},"audio/clearmode":{"source":"iana"},"audio/cn":{"source":"iana"},"audio/dat12":{"source":"iana"},"audio/dls":{"source":"iana"},"audio/dsr-es201108":{"source":"iana"},"audio/dsr-es202050":{"source":"iana"},"audio/dsr-es202211":{"source":"iana"},"audio/dsr-es202212":{"source":"iana"},"audio/dv":{"source":"iana"},"audio/dvi4":{"source":"iana"},"audio/eac3":{"source":"iana"},"audio/encaprtp":{"source":"iana"},"audio/evrc":{"source":"iana"},"audio/evrc-qcp":{"source":"iana"},"audio/evrc0":{"source":"iana"},"audio/evrc1":{"source":"iana"},"audio/evrcb":{"source":"iana"},"audio/evrcb0":{"source":"iana"},"audio/evrcb1":{"source":"iana"},"audio/evrcnw":{"source":"iana"},"audio/evrcnw0":{"source":"iana"},"audio/evrcnw1":{"source":"iana"},"audio/evrcwb":{"source":"iana"},"audio/evrcwb0":{"source":"iana"},"audio/evrcwb1":{"source":"iana"},"audio/evs":{"source":"iana"},"audio/flexfec":{"source":"iana"},"audio/fwdred":{"source":"iana"},"audio/g711-0":{"source":"iana"},"audio/g719":{"source":"iana"},"audio/g722":{"source":"iana"},"audio/g7221":{"source":"iana"},"audio/g723":{"source":"iana"},"audio/g726-16":{"source":"iana"},"audio/g726-24":{"source":"iana"},"audio/g726-32":{"source":"iana"},"audio/g726-40":{"source":"iana"},"audio/g728":{"source":"iana"},"audio/g729":{"source":"iana"},"audio/g7291":{"source":"iana"},"audio/g729d":{"source":"iana"},"audio/g729e":{"source":"iana"},"audio/gsm":{"source":"iana"},"audio/gsm-efr":{"source":"iana"},"audio/gsm-hr-08":{"source":"iana"},"audio/ilbc":{"source":"iana"},"audio/ip-mr_v2.5":{"source":"iana"},"audio/isac":{"source":"apache"},"audio/l16":{"source":"iana"},"audio/l20":{"source":"iana"},"audio/l24":{"source":"iana","compressible":false},"audio/l8":{"source":"iana"},"audio/lpc":{"source":"iana"},"audio/melp":{"source":"iana"},"audio/melp1200":{"source":"iana"},"audio/melp2400":{"source":"iana"},"audio/melp600":{"source":"iana"},"audio/mhas":{"source":"iana"},"audio/midi":{"source":"apache","extensions":["mid","midi","kar","rmi"]},"audio/mobile-xmf":{"source":"iana","extensions":["mxmf"]},"audio/mp3":{"compressible":false,"extensions":["mp3"]},"audio/mp4":{"source":"iana","compressible":false,"extensions":["m4a","mp4a"]},"audio/mp4a-latm":{"source":"iana"},"audio/mpa":{"source":"iana"},"audio/mpa-robust":{"source":"iana"},"audio/mpeg":{"source":"iana","compressible":false,"extensions":["mpga","mp2","mp2a","mp3","m2a","m3a"]},"audio/mpeg4-generic":{"source":"iana"},"audio/musepack":{"source":"apache"},"audio/ogg":{"source":"iana","compressible":false,"extensions":["oga","ogg","spx","opus"]},"audio/opus":{"source":"iana"},"audio/parityfec":{"source":"iana"},"audio/pcma":{"source":"iana"},"audio/pcma-wb":{"source":"iana"},"audio/pcmu":{"source":"iana"},"audio/pcmu-wb":{"source":"iana"},"audio/prs.sid":{"source":"iana"},"audio/qcelp":{"source":"iana"},"audio/raptorfec":{"source":"iana"},"audio/red":{"source":"iana"},"audio/rtp-enc-aescm128":{"source":"iana"},"audio/rtp-midi":{"source":"iana"},"audio/rtploopback":{"source":"iana"},"audio/rtx":{"source":"iana"},"audio/s3m":{"source":"apache","extensions":["s3m"]},"audio/scip":{"source":"iana"},"audio/silk":{"source":"apache","extensions":["sil"]},"audio/smv":{"source":"iana"},"audio/smv-qcp":{"source":"iana"},"audio/smv0":{"source":"iana"},"audio/sofa":{"source":"iana"},"audio/sp-midi":{"source":"iana"},"audio/speex":{"source":"iana"},"audio/t140c":{"source":"iana"},"audio/t38":{"source":"iana"},"audio/telephone-event":{"source":"iana"},"audio/tetra_acelp":{"source":"iana"},"audio/tetra_acelp_bb":{"source":"iana"},"audio/tone":{"source":"iana"},"audio/tsvcis":{"source":"iana"},"audio/uemclip":{"source":"iana"},"audio/ulpfec":{"source":"iana"},"audio/usac":{"source":"iana"},"audio/vdvi":{"source":"iana"},"audio/vmr-wb":{"source":"iana"},"audio/vnd.3gpp.iufp":{"source":"iana"},"audio/vnd.4sb":{"source":"iana"},"audio/vnd.audiokoz":{"source":"iana"},"audio/vnd.celp":{"source":"iana"},"audio/vnd.cisco.nse":{"source":"iana"},"audio/vnd.cmles.radio-events":{"source":"iana"},"audio/vnd.cns.anp1":{"source":"iana"},"audio/vnd.cns.inf1":{"source":"iana"},"audio/vnd.dece.audio":{"source":"iana","extensions":["uva","uvva"]},"audio/vnd.digital-winds":{"source":"iana","extensions":["eol"]},"audio/vnd.dlna.adts":{"source":"iana"},"audio/vnd.dolby.heaac.1":{"source":"iana"},"audio/vnd.dolby.heaac.2":{"source":"iana"},"audio/vnd.dolby.mlp":{"source":"iana"},"audio/vnd.dolby.mps":{"source":"iana"},"audio/vnd.dolby.pl2":{"source":"iana"},"audio/vnd.dolby.pl2x":{"source":"iana"},"audio/vnd.dolby.pl2z":{"source":"iana"},"audio/vnd.dolby.pulse.1":{"source":"iana"},"audio/vnd.dra":{"source":"iana","extensions":["dra"]},"audio/vnd.dts":{"source":"iana","extensions":["dts"]},"audio/vnd.dts.hd":{"source":"iana","extensions":["dtshd"]},"audio/vnd.dts.uhd":{"source":"iana"},"audio/vnd.dvb.file":{"source":"iana"},"audio/vnd.everad.plj":{"source":"iana"},"audio/vnd.hns.audio":{"source":"iana"},"audio/vnd.lucent.voice":{"source":"iana","extensions":["lvp"]},"audio/vnd.ms-playready.media.pya":{"source":"iana","extensions":["pya"]},"audio/vnd.nokia.mobile-xmf":{"source":"iana"},"audio/vnd.nortel.vbk":{"source":"iana"},"audio/vnd.nuera.ecelp4800":{"source":"iana","extensions":["ecelp4800"]},"audio/vnd.nuera.ecelp7470":{"source":"iana","extensions":["ecelp7470"]},"audio/vnd.nuera.ecelp9600":{"source":"iana","extensions":["ecelp9600"]},"audio/vnd.octel.sbc":{"source":"iana"},"audio/vnd.presonus.multitrack":{"source":"iana"},"audio/vnd.qcelp":{"source":"iana"},"audio/vnd.rhetorex.32kadpcm":{"source":"iana"},"audio/vnd.rip":{"source":"iana","extensions":["rip"]},"audio/vnd.rn-realaudio":{"compressible":false},"audio/vnd.sealedmedia.softseal.mpeg":{"source":"iana"},"audio/vnd.vmx.cvsd":{"source":"iana"},"audio/vnd.wave":{"compressible":false},"audio/vorbis":{"source":"iana","compressible":false},"audio/vorbis-config":{"source":"iana"},"audio/wav":{"compressible":false,"extensions":["wav"]},"audio/wave":{"compressible":false,"extensions":["wav"]},"audio/webm":{"source":"apache","compressible":false,"extensions":["weba"]},"audio/x-aac":{"source":"apache","compressible":false,"extensions":["aac"]},"audio/x-aiff":{"source":"apache","extensions":["aif","aiff","aifc"]},"audio/x-caf":{"source":"apache","compressible":false,"extensions":["caf"]},"audio/x-flac":{"source":"apache","extensions":["flac"]},"audio/x-m4a":{"source":"nginx","extensions":["m4a"]},"audio/x-matroska":{"source":"apache","extensions":["mka"]},"audio/x-mpegurl":{"source":"apache","extensions":["m3u"]},"audio/x-ms-wax":{"source":"apache","extensions":["wax"]},"audio/x-ms-wma":{"source":"apache","extensions":["wma"]},"audio/x-pn-realaudio":{"source":"apache","extensions":["ram","ra"]},"audio/x-pn-realaudio-plugin":{"source":"apache","extensions":["rmp"]},"audio/x-realaudio":{"source":"nginx","extensions":["ra"]},"audio/x-tta":{"source":"apache"},"audio/x-wav":{"source":"apache","extensions":["wav"]},"audio/xm":{"source":"apache","extensions":["xm"]},"chemical/x-cdx":{"source":"apache","extensions":["cdx"]},"chemical/x-cif":{"source":"apache","extensions":["cif"]},"chemical/x-cmdf":{"source":"apache","extensions":["cmdf"]},"chemical/x-cml":{"source":"apache","extensions":["cml"]},"chemical/x-csml":{"source":"apache","extensions":["csml"]},"chemical/x-pdb":{"source":"apache"},"chemical/x-xyz":{"source":"apache","extensions":["xyz"]},"font/collection":{"source":"iana","extensions":["ttc"]},"font/otf":{"source":"iana","compressible":true,"extensions":["otf"]},"font/sfnt":{"source":"iana"},"font/ttf":{"source":"iana","compressible":true,"extensions":["ttf"]},"font/woff":{"source":"iana","extensions":["woff"]},"font/woff2":{"source":"iana","extensions":["woff2"]},"image/aces":{"source":"iana","extensions":["exr"]},"image/apng":{"compressible":false,"extensions":["apng"]},"image/avci":{"source":"iana","extensions":["avci"]},"image/avcs":{"source":"iana","extensions":["avcs"]},"image/avif":{"source":"iana","compressible":false,"extensions":["avif"]},"image/bmp":{"source":"iana","compressible":true,"extensions":["bmp"]},"image/cgm":{"source":"iana","extensions":["cgm"]},"image/dicom-rle":{"source":"iana","extensions":["drle"]},"image/emf":{"source":"iana","extensions":["emf"]},"image/fits":{"source":"iana","extensions":["fits"]},"image/g3fax":{"source":"iana","extensions":["g3"]},"image/gif":{"source":"iana","compressible":false,"extensions":["gif"]},"image/heic":{"source":"iana","extensions":["heic"]},"image/heic-sequence":{"source":"iana","extensions":["heics"]},"image/heif":{"source":"iana","extensions":["heif"]},"image/heif-sequence":{"source":"iana","extensions":["heifs"]},"image/hej2k":{"source":"iana","extensions":["hej2"]},"image/hsj2":{"source":"iana","extensions":["hsj2"]},"image/ief":{"source":"iana","extensions":["ief"]},"image/jls":{"source":"iana","extensions":["jls"]},"image/jp2":{"source":"iana","compressible":false,"extensions":["jp2","jpg2"]},"image/jpeg":{"source":"iana","compressible":false,"extensions":["jpeg","jpg","jpe"]},"image/jph":{"source":"iana","extensions":["jph"]},"image/jphc":{"source":"iana","extensions":["jhc"]},"image/jpm":{"source":"iana","compressible":false,"extensions":["jpm"]},"image/jpx":{"source":"iana","compressible":false,"extensions":["jpx","jpf"]},"image/jxr":{"source":"iana","extensions":["jxr"]},"image/jxra":{"source":"iana","extensions":["jxra"]},"image/jxrs":{"source":"iana","extensions":["jxrs"]},"image/jxs":{"source":"iana","extensions":["jxs"]},"image/jxsc":{"source":"iana","extensions":["jxsc"]},"image/jxsi":{"source":"iana","extensions":["jxsi"]},"image/jxss":{"source":"iana","extensions":["jxss"]},"image/ktx":{"source":"iana","extensions":["ktx"]},"image/ktx2":{"source":"iana","extensions":["ktx2"]},"image/naplps":{"source":"iana"},"image/pjpeg":{"compressible":false},"image/png":{"source":"iana","compressible":false,"extensions":["png"]},"image/prs.btif":{"source":"iana","extensions":["btif"]},"image/prs.pti":{"source":"iana","extensions":["pti"]},"image/pwg-raster":{"source":"iana"},"image/sgi":{"source":"apache","extensions":["sgi"]},"image/svg+xml":{"source":"iana","compressible":true,"extensions":["svg","svgz"]},"image/t38":{"source":"iana","extensions":["t38"]},"image/tiff":{"source":"iana","compressible":false,"extensions":["tif","tiff"]},"image/tiff-fx":{"source":"iana","extensions":["tfx"]},"image/vnd.adobe.photoshop":{"source":"iana","compressible":true,"extensions":["psd"]},"image/vnd.airzip.accelerator.azv":{"source":"iana","extensions":["azv"]},"image/vnd.cns.inf2":{"source":"iana"},"image/vnd.dece.graphic":{"source":"iana","extensions":["uvi","uvvi","uvg","uvvg"]},"image/vnd.djvu":{"source":"iana","extensions":["djvu","djv"]},"image/vnd.dvb.subtitle":{"source":"iana","extensions":["sub"]},"image/vnd.dwg":{"source":"iana","extensions":["dwg"]},"image/vnd.dxf":{"source":"iana","extensions":["dxf"]},"image/vnd.fastbidsheet":{"source":"iana","extensions":["fbs"]},"image/vnd.fpx":{"source":"iana","extensions":["fpx"]},"image/vnd.fst":{"source":"iana","extensions":["fst"]},"image/vnd.fujixerox.edmics-mmr":{"source":"iana","extensions":["mmr"]},"image/vnd.fujixerox.edmics-rlc":{"source":"iana","extensions":["rlc"]},"image/vnd.globalgraphics.pgb":{"source":"iana"},"image/vnd.microsoft.icon":{"source":"iana","compressible":true,"extensions":["ico"]},"image/vnd.mix":{"source":"iana"},"image/vnd.mozilla.apng":{"source":"iana"},"image/vnd.ms-dds":{"compressible":true,"extensions":["dds"]},"image/vnd.ms-modi":{"source":"iana","extensions":["mdi"]},"image/vnd.ms-photo":{"source":"apache","extensions":["wdp"]},"image/vnd.net-fpx":{"source":"iana","extensions":["npx"]},"image/vnd.pco.b16":{"source":"iana","extensions":["b16"]},"image/vnd.radiance":{"source":"iana"},"image/vnd.sealed.png":{"source":"iana"},"image/vnd.sealedmedia.softseal.gif":{"source":"iana"},"image/vnd.sealedmedia.softseal.jpg":{"source":"iana"},"image/vnd.svf":{"source":"iana"},"image/vnd.tencent.tap":{"source":"iana","extensions":["tap"]},"image/vnd.valve.source.texture":{"source":"iana","extensions":["vtf"]},"image/vnd.wap.wbmp":{"source":"iana","extensions":["wbmp"]},"image/vnd.xiff":{"source":"iana","extensions":["xif"]},"image/vnd.zbrush.pcx":{"source":"iana","extensions":["pcx"]},"image/webp":{"source":"apache","extensions":["webp"]},"image/wmf":{"source":"iana","extensions":["wmf"]},"image/x-3ds":{"source":"apache","extensions":["3ds"]},"image/x-cmu-raster":{"source":"apache","extensions":["ras"]},"image/x-cmx":{"source":"apache","extensions":["cmx"]},"image/x-freehand":{"source":"apache","extensions":["fh","fhc","fh4","fh5","fh7"]},"image/x-icon":{"source":"apache","compressible":true,"extensions":["ico"]},"image/x-jng":{"source":"nginx","extensions":["jng"]},"image/x-mrsid-image":{"source":"apache","extensions":["sid"]},"image/x-ms-bmp":{"source":"nginx","compressible":true,"extensions":["bmp"]},"image/x-pcx":{"source":"apache","extensions":["pcx"]},"image/x-pict":{"source":"apache","extensions":["pic","pct"]},"image/x-portable-anymap":{"source":"apache","extensions":["pnm"]},"image/x-portable-bitmap":{"source":"apache","extensions":["pbm"]},"image/x-portable-graymap":{"source":"apache","extensions":["pgm"]},"image/x-portable-pixmap":{"source":"apache","extensions":["ppm"]},"image/x-rgb":{"source":"apache","extensions":["rgb"]},"image/x-tga":{"source":"apache","extensions":["tga"]},"image/x-xbitmap":{"source":"apache","extensions":["xbm"]},"image/x-xcf":{"compressible":false},"image/x-xpixmap":{"source":"apache","extensions":["xpm"]},"image/x-xwindowdump":{"source":"apache","extensions":["xwd"]},"message/cpim":{"source":"iana"},"message/delivery-status":{"source":"iana"},"message/disposition-notification":{"source":"iana","extensions":["disposition-notification"]},"message/external-body":{"source":"iana"},"message/feedback-report":{"source":"iana"},"message/global":{"source":"iana","extensions":["u8msg"]},"message/global-delivery-status":{"source":"iana","extensions":["u8dsn"]},"message/global-disposition-notification":{"source":"iana","extensions":["u8mdn"]},"message/global-headers":{"source":"iana","extensions":["u8hdr"]},"message/http":{"source":"iana","compressible":false},"message/imdn+xml":{"source":"iana","compressible":true},"message/news":{"source":"iana"},"message/partial":{"source":"iana","compressible":false},"message/rfc822":{"source":"iana","compressible":true,"extensions":["eml","mime"]},"message/s-http":{"source":"iana"},"message/sip":{"source":"iana"},"message/sipfrag":{"source":"iana"},"message/tracking-status":{"source":"iana"},"message/vnd.si.simp":{"source":"iana"},"message/vnd.wfa.wsc":{"source":"iana","extensions":["wsc"]},"model/3mf":{"source":"iana","extensions":["3mf"]},"model/e57":{"source":"iana"},"model/gltf+json":{"source":"iana","compressible":true,"extensions":["gltf"]},"model/gltf-binary":{"source":"iana","compressible":true,"extensions":["glb"]},"model/iges":{"source":"iana","compressible":false,"extensions":["igs","iges"]},"model/mesh":{"source":"iana","compressible":false,"extensions":["msh","mesh","silo"]},"model/mtl":{"source":"iana","extensions":["mtl"]},"model/obj":{"source":"iana","extensions":["obj"]},"model/step":{"source":"iana"},"model/step+xml":{"source":"iana","compressible":true,"extensions":["stpx"]},"model/step+zip":{"source":"iana","compressible":false,"extensions":["stpz"]},"model/step-xml+zip":{"source":"iana","compressible":false,"extensions":["stpxz"]},"model/stl":{"source":"iana","extensions":["stl"]},"model/vnd.collada+xml":{"source":"iana","compressible":true,"extensions":["dae"]},"model/vnd.dwf":{"source":"iana","extensions":["dwf"]},"model/vnd.flatland.3dml":{"source":"iana"},"model/vnd.gdl":{"source":"iana","extensions":["gdl"]},"model/vnd.gs-gdl":{"source":"apache"},"model/vnd.gs.gdl":{"source":"iana"},"model/vnd.gtw":{"source":"iana","extensions":["gtw"]},"model/vnd.moml+xml":{"source":"iana","compressible":true},"model/vnd.mts":{"source":"iana","extensions":["mts"]},"model/vnd.opengex":{"source":"iana","extensions":["ogex"]},"model/vnd.parasolid.transmit.binary":{"source":"iana","extensions":["x_b"]},"model/vnd.parasolid.transmit.text":{"source":"iana","extensions":["x_t"]},"model/vnd.pytha.pyox":{"source":"iana"},"model/vnd.rosette.annotated-data-model":{"source":"iana"},"model/vnd.sap.vds":{"source":"iana","extensions":["vds"]},"model/vnd.usdz+zip":{"source":"iana","compressible":false,"extensions":["usdz"]},"model/vnd.valve.source.compiled-map":{"source":"iana","extensions":["bsp"]},"model/vnd.vtu":{"source":"iana","extensions":["vtu"]},"model/vrml":{"source":"iana","compressible":false,"extensions":["wrl","vrml"]},"model/x3d+binary":{"source":"apache","compressible":false,"extensions":["x3db","x3dbz"]},"model/x3d+fastinfoset":{"source":"iana","extensions":["x3db"]},"model/x3d+vrml":{"source":"apache","compressible":false,"extensions":["x3dv","x3dvz"]},"model/x3d+xml":{"source":"iana","compressible":true,"extensions":["x3d","x3dz"]},"model/x3d-vrml":{"source":"iana","extensions":["x3dv"]},"multipart/alternative":{"source":"iana","compressible":false},"multipart/appledouble":{"source":"iana"},"multipart/byteranges":{"source":"iana"},"multipart/digest":{"source":"iana"},"multipart/encrypted":{"source":"iana","compressible":false},"multipart/form-data":{"source":"iana","compressible":false},"multipart/header-set":{"source":"iana"},"multipart/mixed":{"source":"iana"},"multipart/multilingual":{"source":"iana"},"multipart/parallel":{"source":"iana"},"multipart/related":{"source":"iana","compressible":false},"multipart/report":{"source":"iana"},"multipart/signed":{"source":"iana","compressible":false},"multipart/vnd.bint.med-plus":{"source":"iana"},"multipart/voice-message":{"source":"iana"},"multipart/x-mixed-replace":{"source":"iana"},"text/1d-interleaved-parityfec":{"source":"iana"},"text/cache-manifest":{"source":"iana","compressible":true,"extensions":["appcache","manifest"]},"text/calendar":{"source":"iana","extensions":["ics","ifb"]},"text/calender":{"compressible":true},"text/cmd":{"compressible":true},"text/coffeescript":{"extensions":["coffee","litcoffee"]},"text/cql":{"source":"iana"},"text/cql-expression":{"source":"iana"},"text/cql-identifier":{"source":"iana"},"text/css":{"source":"iana","charset":"UTF-8","compressible":true,"extensions":["css"]},"text/csv":{"source":"iana","compressible":true,"extensions":["csv"]},"text/csv-schema":{"source":"iana"},"text/directory":{"source":"iana"},"text/dns":{"source":"iana"},"text/ecmascript":{"source":"iana"},"text/encaprtp":{"source":"iana"},"text/enriched":{"source":"iana"},"text/fhirpath":{"source":"iana"},"text/flexfec":{"source":"iana"},"text/fwdred":{"source":"iana"},"text/gff3":{"source":"iana"},"text/grammar-ref-list":{"source":"iana"},"text/html":{"source":"iana","compressible":true,"extensions":["html","htm","shtml"]},"text/jade":{"extensions":["jade"]},"text/javascript":{"source":"iana","compressible":true},"text/jcr-cnd":{"source":"iana"},"text/jsx":{"compressible":true,"extensions":["jsx"]},"text/less":{"compressible":true,"extensions":["less"]},"text/markdown":{"source":"iana","compressible":true,"extensions":["markdown","md"]},"text/mathml":{"source":"nginx","extensions":["mml"]},"text/mdx":{"compressible":true,"extensions":["mdx"]},"text/mizar":{"source":"iana"},"text/n3":{"source":"iana","charset":"UTF-8","compressible":true,"extensions":["n3"]},"text/parameters":{"source":"iana","charset":"UTF-8"},"text/parityfec":{"source":"iana"},"text/plain":{"source":"iana","compressible":true,"extensions":["txt","text","conf","def","list","log","in","ini"]},"text/provenance-notation":{"source":"iana","charset":"UTF-8"},"text/prs.fallenstein.rst":{"source":"iana"},"text/prs.lines.tag":{"source":"iana","extensions":["dsc"]},"text/prs.prop.logic":{"source":"iana"},"text/raptorfec":{"source":"iana"},"text/red":{"source":"iana"},"text/rfc822-headers":{"source":"iana"},"text/richtext":{"source":"iana","compressible":true,"extensions":["rtx"]},"text/rtf":{"source":"iana","compressible":true,"extensions":["rtf"]},"text/rtp-enc-aescm128":{"source":"iana"},"text/rtploopback":{"source":"iana"},"text/rtx":{"source":"iana"},"text/sgml":{"source":"iana","extensions":["sgml","sgm"]},"text/shaclc":{"source":"iana"},"text/shex":{"source":"iana","extensions":["shex"]},"text/slim":{"extensions":["slim","slm"]},"text/spdx":{"source":"iana","extensions":["spdx"]},"text/strings":{"source":"iana"},"text/stylus":{"extensions":["stylus","styl"]},"text/t140":{"source":"iana"},"text/tab-separated-values":{"source":"iana","compressible":true,"extensions":["tsv"]},"text/troff":{"source":"iana","extensions":["t","tr","roff","man","me","ms"]},"text/turtle":{"source":"iana","charset":"UTF-8","extensions":["ttl"]},"text/ulpfec":{"source":"iana"},"text/uri-list":{"source":"iana","compressible":true,"extensions":["uri","uris","urls"]},"text/vcard":{"source":"iana","compressible":true,"extensions":["vcard"]},"text/vnd.a":{"source":"iana"},"text/vnd.abc":{"source":"iana"},"text/vnd.ascii-art":{"source":"iana"},"text/vnd.curl":{"source":"iana","extensions":["curl"]},"text/vnd.curl.dcurl":{"source":"apache","extensions":["dcurl"]},"text/vnd.curl.mcurl":{"source":"apache","extensions":["mcurl"]},"text/vnd.curl.scurl":{"source":"apache","extensions":["scurl"]},"text/vnd.debian.copyright":{"source":"iana","charset":"UTF-8"},"text/vnd.dmclientscript":{"source":"iana"},"text/vnd.dvb.subtitle":{"source":"iana","extensions":["sub"]},"text/vnd.esmertec.theme-descriptor":{"source":"iana","charset":"UTF-8"},"text/vnd.familysearch.gedcom":{"source":"iana","extensions":["ged"]},"text/vnd.ficlab.flt":{"source":"iana"},"text/vnd.fly":{"source":"iana","extensions":["fly"]},"text/vnd.fmi.flexstor":{"source":"iana","extensions":["flx"]},"text/vnd.gml":{"source":"iana"},"text/vnd.graphviz":{"source":"iana","extensions":["gv"]},"text/vnd.hans":{"source":"iana"},"text/vnd.hgl":{"source":"iana"},"text/vnd.in3d.3dml":{"source":"iana","extensions":["3dml"]},"text/vnd.in3d.spot":{"source":"iana","extensions":["spot"]},"text/vnd.iptc.newsml":{"source":"iana"},"text/vnd.iptc.nitf":{"source":"iana"},"text/vnd.latex-z":{"source":"iana"},"text/vnd.motorola.reflex":{"source":"iana"},"text/vnd.ms-mediapackage":{"source":"iana"},"text/vnd.net2phone.commcenter.command":{"source":"iana"},"text/vnd.radisys.msml-basic-layout":{"source":"iana"},"text/vnd.senx.warpscript":{"source":"iana"},"text/vnd.si.uricatalogue":{"source":"iana"},"text/vnd.sosi":{"source":"iana"},"text/vnd.sun.j2me.app-descriptor":{"source":"iana","charset":"UTF-8","extensions":["jad"]},"text/vnd.trolltech.linguist":{"source":"iana","charset":"UTF-8"},"text/vnd.wap.si":{"source":"iana"},"text/vnd.wap.sl":{"source":"iana"},"text/vnd.wap.wml":{"source":"iana","extensions":["wml"]},"text/vnd.wap.wmlscript":{"source":"iana","extensions":["wmls"]},"text/vtt":{"source":"iana","charset":"UTF-8","compressible":true,"extensions":["vtt"]},"text/x-asm":{"source":"apache","extensions":["s","asm"]},"text/x-c":{"source":"apache","extensions":["c","cc","cxx","cpp","h","hh","dic"]},"text/x-component":{"source":"nginx","extensions":["htc"]},"text/x-fortran":{"source":"apache","extensions":["f","for","f77","f90"]},"text/x-gwt-rpc":{"compressible":true},"text/x-handlebars-template":{"extensions":["hbs"]},"text/x-java-source":{"source":"apache","extensions":["java"]},"text/x-jquery-tmpl":{"compressible":true},"text/x-lua":{"extensions":["lua"]},"text/x-markdown":{"compressible":true,"extensions":["mkd"]},"text/x-nfo":{"source":"apache","extensions":["nfo"]},"text/x-opml":{"source":"apache","extensions":["opml"]},"text/x-org":{"compressible":true,"extensions":["org"]},"text/x-pascal":{"source":"apache","extensions":["p","pas"]},"text/x-processing":{"compressible":true,"extensions":["pde"]},"text/x-sass":{"extensions":["sass"]},"text/x-scss":{"extensions":["scss"]},"text/x-setext":{"source":"apache","extensions":["etx"]},"text/x-sfv":{"source":"apache","extensions":["sfv"]},"text/x-suse-ymp":{"compressible":true,"extensions":["ymp"]},"text/x-uuencode":{"source":"apache","extensions":["uu"]},"text/x-vcalendar":{"source":"apache","extensions":["vcs"]},"text/x-vcard":{"source":"apache","extensions":["vcf"]},"text/xml":{"source":"iana","compressible":true,"extensions":["xml"]},"text/xml-external-parsed-entity":{"source":"iana"},"text/yaml":{"compressible":true,"extensions":["yaml","yml"]},"video/1d-interleaved-parityfec":{"source":"iana"},"video/3gpp":{"source":"iana","extensions":["3gp","3gpp"]},"video/3gpp-tt":{"source":"iana"},"video/3gpp2":{"source":"iana","extensions":["3g2"]},"video/av1":{"source":"iana"},"video/bmpeg":{"source":"iana"},"video/bt656":{"source":"iana"},"video/celb":{"source":"iana"},"video/dv":{"source":"iana"},"video/encaprtp":{"source":"iana"},"video/ffv1":{"source":"iana"},"video/flexfec":{"source":"iana"},"video/h261":{"source":"iana","extensions":["h261"]},"video/h263":{"source":"iana","extensions":["h263"]},"video/h263-1998":{"source":"iana"},"video/h263-2000":{"source":"iana"},"video/h264":{"source":"iana","extensions":["h264"]},"video/h264-rcdo":{"source":"iana"},"video/h264-svc":{"source":"iana"},"video/h265":{"source":"iana"},"video/iso.segment":{"source":"iana","extensions":["m4s"]},"video/jpeg":{"source":"iana","extensions":["jpgv"]},"video/jpeg2000":{"source":"iana"},"video/jpm":{"source":"apache","extensions":["jpm","jpgm"]},"video/jxsv":{"source":"iana"},"video/mj2":{"source":"iana","extensions":["mj2","mjp2"]},"video/mp1s":{"source":"iana"},"video/mp2p":{"source":"iana"},"video/mp2t":{"source":"iana","extensions":["ts"]},"video/mp4":{"source":"iana","compressible":false,"extensions":["mp4","mp4v","mpg4"]},"video/mp4v-es":{"source":"iana"},"video/mpeg":{"source":"iana","compressible":false,"extensions":["mpeg","mpg","mpe","m1v","m2v"]},"video/mpeg4-generic":{"source":"iana"},"video/mpv":{"source":"iana"},"video/nv":{"source":"iana"},"video/ogg":{"source":"iana","compressible":false,"extensions":["ogv"]},"video/parityfec":{"source":"iana"},"video/pointer":{"source":"iana"},"video/quicktime":{"source":"iana","compressible":false,"extensions":["qt","mov"]},"video/raptorfec":{"source":"iana"},"video/raw":{"source":"iana"},"video/rtp-enc-aescm128":{"source":"iana"},"video/rtploopback":{"source":"iana"},"video/rtx":{"source":"iana"},"video/scip":{"source":"iana"},"video/smpte291":{"source":"iana"},"video/smpte292m":{"source":"iana"},"video/ulpfec":{"source":"iana"},"video/vc1":{"source":"iana"},"video/vc2":{"source":"iana"},"video/vnd.cctv":{"source":"iana"},"video/vnd.dece.hd":{"source":"iana","extensions":["uvh","uvvh"]},"video/vnd.dece.mobile":{"source":"iana","extensions":["uvm","uvvm"]},"video/vnd.dece.mp4":{"source":"iana"},"video/vnd.dece.pd":{"source":"iana","extensions":["uvp","uvvp"]},"video/vnd.dece.sd":{"source":"iana","extensions":["uvs","uvvs"]},"video/vnd.dece.video":{"source":"iana","extensions":["uvv","uvvv"]},"video/vnd.directv.mpeg":{"source":"iana"},"video/vnd.directv.mpeg-tts":{"source":"iana"},"video/vnd.dlna.mpeg-tts":{"source":"iana"},"video/vnd.dvb.file":{"source":"iana","extensions":["dvb"]},"video/vnd.fvt":{"source":"iana","extensions":["fvt"]},"video/vnd.hns.video":{"source":"iana"},"video/vnd.iptvforum.1dparityfec-1010":{"source":"iana"},"video/vnd.iptvforum.1dparityfec-2005":{"source":"iana"},"video/vnd.iptvforum.2dparityfec-1010":{"source":"iana"},"video/vnd.iptvforum.2dparityfec-2005":{"source":"iana"},"video/vnd.iptvforum.ttsavc":{"source":"iana"},"video/vnd.iptvforum.ttsmpeg2":{"source":"iana"},"video/vnd.motorola.video":{"source":"iana"},"video/vnd.motorola.videop":{"source":"iana"},"video/vnd.mpegurl":{"source":"iana","extensions":["mxu","m4u"]},"video/vnd.ms-playready.media.pyv":{"source":"iana","extensions":["pyv"]},"video/vnd.nokia.interleaved-multimedia":{"source":"iana"},"video/vnd.nokia.mp4vr":{"source":"iana"},"video/vnd.nokia.videovoip":{"source":"iana"},"video/vnd.objectvideo":{"source":"iana"},"video/vnd.radgamettools.bink":{"source":"iana"},"video/vnd.radgamettools.smacker":{"source":"iana"},"video/vnd.sealed.mpeg1":{"source":"iana"},"video/vnd.sealed.mpeg4":{"source":"iana"},"video/vnd.sealed.swf":{"source":"iana"},"video/vnd.sealedmedia.softseal.mov":{"source":"iana"},"video/vnd.uvvu.mp4":{"source":"iana","extensions":["uvu","uvvu"]},"video/vnd.vivo":{"source":"iana","extensions":["viv"]},"video/vnd.youtube.yt":{"source":"iana"},"video/vp8":{"source":"iana"},"video/vp9":{"source":"iana"},"video/webm":{"source":"apache","compressible":false,"extensions":["webm"]},"video/x-f4v":{"source":"apache","extensions":["f4v"]},"video/x-fli":{"source":"apache","extensions":["fli"]},"video/x-flv":{"source":"apache","compressible":false,"extensions":["flv"]},"video/x-m4v":{"source":"apache","extensions":["m4v"]},"video/x-matroska":{"source":"apache","compressible":false,"extensions":["mkv","mk3d","mks"]},"video/x-mng":{"source":"apache","extensions":["mng"]},"video/x-ms-asf":{"source":"apache","extensions":["asf","asx"]},"video/x-ms-vob":{"source":"apache","extensions":["vob"]},"video/x-ms-wm":{"source":"apache","extensions":["wm"]},"video/x-ms-wmv":{"source":"apache","compressible":false,"extensions":["wmv"]},"video/x-ms-wmx":{"source":"apache","extensions":["wmx"]},"video/x-ms-wvx":{"source":"apache","extensions":["wvx"]},"video/x-msvideo":{"source":"apache","extensions":["avi"]},"video/x-sgi-movie":{"source":"apache","extensions":["movie"]},"video/x-smv":{"source":"apache","extensions":["smv"]},"x-conference/x-cooltalk":{"source":"apache","extensions":["ice"]},"x-shader/x-fragment":{"compressible":true},"x-shader/x-vertex":{"compressible":true}}')},4147:e=>{"use strict";e.exports=JSON.parse('{"name":"node-mailjet","version":"6.0.5","main":"./dist/mailjet.node.js","browser":"./dist/mailjet.web.js","types":"./dist/declarations/index.d.ts","description":"Mailjet API client","author":"Mailjet","license":"MIT","private":true,"keywords":["email","sms","node","mail","mailjet"],"engines":{"node":">= 12.0.0","npm":">= 6.9.0"},"files":["lib/**","dist/**"],"directories":{"lib":"./lib","docs":"./docs"},"typescript":{"definition":"./dist/declarations/index.d.ts"},"scripts":{"test":"npm run ts:mocha test/","test:int":"npm run ts:mocha test/integration/","test:unit":"npm run ts:mocha test/unit/","test:watch":"mocha --extension ts -r tsconfig-paths/register -r ts-node/register --watch","cover":"npm run cover:expandable npm run test","cover:int":"npm run cover:expandable npm run test:int","cover:unit":"npm run cover:expandable npm run test:unit","cover:expandable":"nyc --reporter=text-summary --reporter=lcov --report-dir=.coverage --temp-dir=./.coverage/.nyc_output","build":"npm run build:release && npm run build:prepublish","build:dev":"webpack --config ./webpack/webpack.dev.config.js --progress --color","build:release":"webpack --config ./webpack/webpack.release.config.js --progress --color","build:prepublish":"node ./scripts/PreparePackage.js","build:watch":"webpack --watch --config ./webpack/webpack.dev.config.js --progress --color","lint":"eslint .","lint:fix":"eslint --fix .","lint:errors":"eslint --quiet .","ts:run":"ts-node --transpileOnly --project ./tsconfig.json -r tsconfig-paths/register","ts:watch":"ts-node-dev --respawn --transpile-only --project ./tsconfig.json -r tsconfig-paths/register","ts:mocha":"mocha --extension ts --recursive -r tsconfig-paths/register -r ts-node/register","ts:patch":"ts-patch install -s","init":"npm install && npm run ts:patch && npm run pkg:prepare","pkg:link":"cd ./dist && npm link && echo \'\\n=== link name: node-mailjet ===\'","pkg:prepare":"husky install","pkg:precommit":"npm audit && npm run lint:errors && npm run test","release":"standard-version -a","release:dry":"standard-version --dry-run","release:quiet":"standard-version --no-verify -a","release:minor":"standard-version -a --release-as minor","release:patch":"standard-version -a --release-as patch","release:major":"standard-version -a --release-as major","docs":"typedoc --tsconfig ./tsconfig.json"},"dependencies":{"axios":"1.6.2","json-bigint":"^1.0.0","url-join":"^4.0.0"},"devDependencies":{"@babel/core":"^7.18.0","@babel/preset-env":"^7.18.0","@commitlint/cli":"^17.0.2","@commitlint/config-conventional":"^17.0.2","@types/chai":"^4.3.1","@types/json-bigint":"^1.0.1","@types/mocha":"^9.1.1","@types/node":"^17.0.34","@types/qs":"^6.9.7","@types/superagent":"^4.1.15","@types/url-join":"^4.0.1","@typescript-eslint/eslint-plugin":"^5.24.0","@typescript-eslint/parser":"^5.24.0","babel-loader":"^8.2.5","chai":"^4.1.0","eslint":"^8.15.0","eslint-config-airbnb-base":"^15.0.0","eslint-import-resolver-typescript":"^2.7.1","eslint-plugin-import":"^2.26.0","eslint-plugin-tsdoc":"^0.2.16","husky":"^8.0.1","mocha":"^9.0.0","nock":"^13.2.4","nyc":"^15.1.0","qs":"^6.5.0","standard-version":"^9.5.0","terser-webpack-plugin":"^5.3.1","ts-loader":"^9.3.0","ts-node":"^10.7.0","ts-node-dev":"^1.1.8","ts-patch":"^2.0.1","tsconfig-paths":"^4.0.0","tsconfig-paths-webpack-plugin":"^3.5.2","typedoc":"^0.22.15","typescript":"^4.6.4","typescript-transform-paths":"^3.3.1","webpack":"^5.76.0","webpack-cli":"^4.9.2","webpack-merge":"^5.8.0"},"homepage":"https://github.com/mailjet/mailjet-apiv3-nodejs#readme","repository":{"type":"git","url":"git+https://github.com/mailjet/mailjet-apiv3-nodejs.git"},"bugs":{"url":"https://github.com/mailjet/mailjet-apiv3-nodejs/issues"},"contributors":["Arnaud Breton (https://github.com/arnaudbreton)","Nicholas Smith (https://github.com/safani)","Jérémie Parker (https://github.com/p-j)"]}')}},a={},n=function n(i){var o=a[i];if(void 0!==o)return o.exports;var t=a[i]={exports:{}};return e[i].call(t.exports,t,t.exports,n),t.exports}(8321),n=n.default;var e,a,n})); -//# sourceMappingURL=data:application/json;charset=utf-8;base64,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QUFBLHNCQUNBQSxFQUFBQSxFQUFBQSxjQUFBQSxHQUFBQSxnQkFDQUEsRUFBQUEsRUFBQUEsZUFBQUEsR0FBQUEsaUJBQ0FBLEVBQUFBLEVBQUFBLFlBQUFBLEdBQUFBLGNBQ0FBLEVBQUFBLEVBQUFBLFlBQUFBLElBQUFBLGNBQ0FBLEVBQUFBLEVBQUFBLGNBQUFBLElBQUFBLGdCQUNBQSxFQUFBQSxFQUFBQSxnQkFBQUEsSUFBQUEsa0JBQ0FBLEVBQUFBLEVBQUFBLFdBQUFBLElBQUFBLGFBQ0FBLEVBQUFBLEVBQUFBLFdBQUFBLElBQUFBLGFBQ0FBLEVBQUFBLEVBQUFBLG9CQUFBQSxJQUFBQSxzQkFDQUEsRUFBQUEsRUFBQUEsZUFBQUEsSUFBQUEsaUJBQ0FBLEVBQUFBLEVBQUFBLG1CQUFBQSxJQUFBQSxxQkFDQUEsRUFBQUEsRUFBQUEsd0JBQUFBLElBQUFBLDBCQUNBQSxFQUFBQSxFQUFBQSxRQUFBQSxJQUFBQSxVQUNBQSxFQUFBQSxFQUFBQSxZQUFBQSxJQUFBQSxjQUNBQSxFQUFBQSxFQUFBQSxhQUFBQSxJQUFBQSxjQXJCRixFQUFZRCxFQUFBQSxlQUFBQSxFQUFBQSxhQUFZLEtBd0J4QixTQUFZRSxHQUNWQSxFQUFBQSxFQUFBQSxjQUFBQSxHQUFBQSxnQkFDQUEsRUFBQUEsRUFBQUEsVUFBQUEsR0FBQUEsWUFDQUEsRUFBQUEsRUFBQUEsUUFBQUEsR0FBQUEsU0FIRixFQUFZRixFQUFBQSxXQUFBQSxFQUFBQSxTQUFRLEtBTXBCLFNBQVlHLEdBQ1ZBLEVBQUFBLEVBQUFBLFVBQUFBLEdBQUFBLFlBQ0FBLEVBQUFBLEVBQUFBLE9BQUFBLEdBQUFBLFNBQ0FBLEVBQUFBLEVBQUFBLEtBQUFBLEdBQUFBLE9BQ0FBLEVBQUFBLEVBQUFBLE9BQUFBLEdBQUFBLFNBQ0FBLEVBQUFBLEVBQUFBLFFBQUFBLEdBQUFBLFVBQ0FBLEVBQUFBLEVBQUFBLE9BQUFBLEdBQUFBLFNBQ0FBLEVBQUFBLEVBQUFBLEtBQUFBLEdBQUFBLE9BQ0FBLEVBQUFBLEVBQUFBLE1BQUFBLEdBQUFBLFFBQ0FBLEVB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akIsR0FBUWxDLFNBQVMwbEIsS0FBc0MsSUFBekJBLEVBQVFELFlBQy9DLEVBaUlBUCxHQUFNbkgsWUFBY0EsR0FFcEJtSCxHQUFNOVosYUFBZW1DLEdBRXJCMlgsR0FBTVMsV0FBYW5tQixHQUFTMEosR0FBZWhILEdBQVFiLFdBQVc3QixHQUFTLElBQUl6SyxTQUFTeUssR0FBU0EsR0FFN0YwbEIsR0FBTVUsV0FBYXJJLEdBRW5CMkgsR0FBTWpFLGVBQWlCZ0UsR0FFdkJDLEdBQU05NUIsUUFBVTg1QixHQUVoQnBnRCxFQUFPRCxRQUFVcWdELHVybEpDcHVJYlcsRUFBMkIsQ0FBQyxFQ0U1QkMsRURDSixTQUFTQyxFQUFvQkMsR0FFNUIsSUFBSUMsRUFBZUosRUFBeUJHLEdBQzVDLFFBQXFCcDZDLElBQWpCcTZDLEVBQ0gsT0FBT0EsRUFBYXBoRCxRQUdyQixJQUFJQyxFQUFTK2dELEVBQXlCRyxHQUFZLENBR2pEbmhELFFBQVMsQ0FBQyxHQU9YLE9BSEFxaEQsRUFBb0JGLEdBQVV6ckMsS0FBS3pWLEVBQU9ELFFBQVNDLEVBQVFBLEVBQU9ELFFBQVNraEQsR0FHcEVqaEQsRUFBT0QsT0FDZixDQ25CMEJraEQsQ0FBb0Isa0JwRU85QyxNbUVUSUYsRUNFQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9tYWlsamV0L3dlYnBhY2svdW5pdmVyc2FsTW9kdWxlRGVmaW5pdGlvbiIsIndlYnBhY2s6Ly9tYWlsamV0Ly4vbm9kZV9tb2R1bGVzL2FzeW5ja2l0L2luZGV4LmpzIiwid2VicGFjazovL21haWxqZXQvLi9ub2RlX21vZHVsZXMvYXN5bmNraXQvbGliL2Fib3J0LmpzIiwid2VicGFjazovL21haWxqZXQvLi9ub2RlX21vZHVsZXMvYXN5bmNraXQvbGliL2FzeW5jLmpzIiwid2VicGFjazovL21haWxqZXQvLi9ub2RlX21vZHVsZXMvYXN5bmNraXQvbGliL2RlZmVyLmpzIiwid2VicGFjazovL21haWxqZXQvLi9ub2RlX21vZHVsZXMvYXN5bmNraXQvbGliL2l0ZXJhdGUuanMiLCJ3ZWJwYWNrOi8vbWFpbGpldC8uL25vZGVfbW9kdWxlcy9hc3luY2tpdC9saWIvc3RhdGUuanMiLCJ3ZWJwYWNrOi8vbWFpbGpldC8uL25vZGVfbW9kdWxlcy9hc3luY2tpdC9saWIvdGVybWluYXRvci5qcyIsIndlYnBhY2s6Ly9tYWlsamV0Ly4vbm9kZV9tb2R1bGVzL2FzeW5ja2l0L3BhcmFsbGVsLmpzIiwid2VicGFjazovL21haWxqZXQvLi9ub2RlX21vZHVsZXMvYXN5bmNraXQvc2VyaWFsLmpzIiwid2VicGFjazovL21haWxqZXQvLi9ub2RlX21vZHVsZXMvYXN5bmNraXQvc2VyaWFsT3JkZXJlZC5qcyIsIndlYnBhY2s6Ly9tYWlsamV0Ly4vbGliL2NsaWVudC9pbmRleC50cyIsIndlYnBhY2s6Ly9tYWlsamV0Ly4vbGliL2luZGV4LnRzIiwid2VicGFjazovL21haWxqZXQvLi9saWIvcmVxdWVzdC9IdHRwTWV0aG9kcy50cyIsIndlYnBhY2s6Ly9tYWlsamV0Ly4vbGliL3JlcXVlc3QvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vbWFpbGpldC8uL2xpYi90eXBlcy9hcGkvQ2FtcGFpZ24udHMiLCJ3ZWJwYWNrOi8vbWFpbGpldC8uL2xpYi90eXBlcy9hcGkvQ29tbW9uLnRzIiwid2VicGFjazovL21haWxqZXQvLi9saWIvdHlwZXMvYXBpL0NvbnRhY3QudHMiLCJ3ZWJwYWNrOi8vbWFpbGpldC8uL2xpYi90eXBlcy9hcGkvTWVzc2FnZS50cyIsIndlYnBhY2s6Ly9tYWlsamV0Ly4vbGliL3R5cGVzL2FwaS9TZWdtZW50YXRpb24udHMiLCJ3ZWJwYWNrOi8vbWFpbGpldC8uL2xpYi90eXBlcy9hcGkvU2VuZEVtYWlsLnRzIiwid2VicGFjazovL21haWxqZXQvLi9saWIvdHlwZXMvYXBpL1NlbmRlckFkZHJlc3NBbmREb21haW4udHMiLCJ3ZWJwYWNrOi8vbWFpbGpldC8uL2xpYi90eXBlcy9hcGkvU2V0dGluZy50cyIsIndlYnBhY2s6Ly9tYWlsamV0Ly4vbGliL3R5cGVzL2FwaS9TdGF0aXN0aWMudHMiLCJ3ZWJwYWNrOi8vbWFpbGpldC8uL2xpYi90eXBlcy9hcGkvVGVtcGxhdGUudHMiLCJ3ZWJwYWNrOi8vbWFpbGpldC8uL2xpYi90eXBlcy9hcGkvV2ViaG9vay50cyIsIndlYnBhY2s6Ly9tYWlsamV0Ly4vbGliL3R5cGVzL2FwaS9pbmRleC50cyIsIndlYnBhY2s6Ly9tYWlsamV0Ly4vbGliL3V0aWxzL2luZGV4LnRzIiwid2VicGFjazovL21haWxqZXQvLi9saWIvdXRpbHMvaXNOaWwudHMiLCJ3ZWJwYWNrOi8vbWFpbGpldC8uL2xpYi91dGlscy9pc051bGwudHMiLCJ3ZWJwYWNrOi8vbWFpbGpldC8uL2xpYi91dGlscy9pc1B1cmVPYmplY3QudHMiLCJ3ZWJwYWNrOi8vbWFpbGpldC8uL2xpYi91dGlscy9pc1VuZGVmaW5lZC50cyIsIndlYnBhY2s6Ly9tYWlsamV0Ly4vbGliL3V0aWxzL3NldFZhbHVlSWZOb3ROaWwudHMiLCJ3ZWJwYWNrOi8vbWFpbGpldC8uL25vZGVfbW9kdWxlcy9iaWdudW1iZXIuanMvYmlnbnVtYmVyLmpzIiwid2VicGFjazovL21haWxqZXQvLi9ub2RlX21vZHVsZXMvY29tYmluZWQtc3RyZWFtL2xpYi9jb21iaW5lZF9zdHJlYW0uanMiLCJ3ZWJwYWNrOi8vbWFpbGpldC8uL25vZGVfbW9kdWxlcy9kZWJ1Zy9ub2RlX21vZHVsZXMvbXMvaW5kZXguanMiLCJ3ZWJwYWNrOi8vbWFpbGpldC8uL25vZGVfbW9kdWxlcy9kZWJ1Zy9zcmMvYnJvd3Nlci5qcyIsIndlYnBhY2s6Ly9tYWlsamV0Ly4vbm9kZV9tb2R1bGVzL2RlYnVnL3NyYy9jb21tb24uanMiLCJ3ZWJwYWNrOi8vbWFpbGpldC8uL25vZGVfbW9kdWxlcy9kZWJ1Zy9zcmMvaW5kZXguanMiLCJ3ZWJwYWNrOi8vbWFpbGpldC8uL25vZGVfbW9kdWxlcy9kZWJ1Zy9zcmMvbm9kZS5qcyIsIndlYnBhY2s6Ly9tYWlsamV0Ly4vbm9kZV9tb2R1bGVzL2RlbGF5ZWQtc3RyZWFtL2xpYi9kZWxheWVkX3N0cmVhbS5qcyIsIndlYnBhY2s6Ly9tYWlsamV0Ly4vbm9kZV9tb2R1bGVzL2ZvbGxvdy1yZWRpcmVjdHMvZGVidWcuanMiLCJ3ZWJwYWNrOi8vbWFpbGpldC8uL25vZGVfbW9kdWxlcy9mb2xsb3ctcmVkaXJlY3RzL2luZGV4LmpzIiwid2VicGFjazovL21haWxqZXQvLi9ub2RlX21vZHVsZXMvZm9ybS1kYXRhL2xpYi9mb3JtX2RhdGEuanMiLCJ3ZWJwYWNrOi8vbWFpbGpldC8uL25vZGVfbW9kdWxlcy9mb3JtLWRhdGEvbGliL3BvcHVsYXRlLmpzIiwid2VicGFjazovL21haWxqZXQvLi9ub2RlX21vZHVsZXMvaGFzLWZsYWcvaW5kZXguanMiLCJ3ZWJwYWNrOi8vbWFpbGpldC8uL25vZGVfbW9kdWxlcy9qc29uLWJpZ2ludC9pbmRleC5qcyIsIndlYnBhY2s6Ly9tYWlsamV0Ly4vbm9kZV9tb2R1bGVzL2pzb24tYmlnaW50L2xpYi9wYXJzZS5qcyIsIndlYnBhY2s6Ly9tYWlsamV0Ly4vbm9kZV9tb2R1bGVzL2pzb24tYmlnaW50L2xpYi9zdHJpbmdpZnkuanMiLCJ3ZWJwYWNrOi8vbWFpbGpldC8uL25vZGVfbW9kdWxlcy9taW1lLWRiL2luZGV4LmpzIiwid2VicGFjazovL21haWxqZXQvLi9ub2RlX21vZHVsZXMvbWltZS10eXBlcy9pbmRleC5qcyIsIndlYnBhY2s6Ly9tYWlsamV0Ly4vbm9kZV9tb2R1bGVzL3Byb3h5LWZyb20tZW52L2luZGV4LmpzIiwid2VicGFjazovL21haWxqZXQvLi9ub2RlX21vZHVsZXMvc3VwcG9ydHMtY29sb3IvaW5kZXguanMiLCJ3ZWJwYWNrOi8vbWFpbGpldC8uL25vZGVfbW9kdWxlcy91cmwtam9pbi9saWIvdXJsLWpvaW4uanMiLCJ3ZWJwYWNrOi8vbWFpbGpldC9leHRlcm5hbCBub2RlLWNvbW1vbmpzIFwiYXNzZXJ0XCIiLCJ3ZWJwYWNrOi8vbWFpbGpldC9leHRlcm5hbCBub2RlLWNvbW1vbmpzIFwiZXZlbnRzXCIiLCJ3ZWJwYWNrOi8vbWFpbGpldC9leHRlcm5hbCBub2RlLWNvbW1vbmpzIFwiZnNcIiIsIndlYnBhY2s6Ly9tYWlsamV0L2V4dGVybmFsIG5vZGUtY29tbW9uanMgXCJodHRwXCIiLCJ3ZWJwYWNrOi8vbWFpbGpldC9leHRlcm5hbCBub2RlLWNvbW1vbmpzIFwiaHR0cHNcIiIsIndlYnBhY2s6Ly9tYWlsamV0L2V4dGVybmFsIG5vZGUtY29tbW9uanMgXCJvc1wiIiwid2VicGFjazovL21haWxqZXQvZXh0ZXJuYWwgbm9kZS1jb21tb25qcyBcInBhdGhcIiIsIndlYnBhY2s6Ly9tYWlsamV0L2V4dGVybmFsIG5vZGUtY29tbW9uanMgXCJzdHJlYW1cIiIsIndlYnBhY2s6Ly9tYWlsamV0L2V4dGVybmFsIG5vZGUtY29tbW9uanMgXCJ0dHlcIiIsIndlYnBhY2s6Ly9tYWlsamV0L2V4dGVybmFsIG5vZGUtY29tbW9uanMgXCJ1cmxcIiIsIndlYnBhY2s6Ly9tYWlsamV0L2V4dGVybmFsIG5vZGUtY29tbW9uanMgXCJ1dGlsXCIiLCJ3ZWJwYWNrOi8vbWFpbGpldC9leHRlcm5hbCBub2RlLWNvbW1vbmpzIFwiemxpYlwiIiwid2VicGFjazovL21haWxqZXQvLi9ub2RlX21vZHVsZXMvYXhpb3MvZGlzdC9ub2RlL2F4aW9zLmNqcyIsIndlYnBhY2s6Ly9tYWlsamV0L3dlYnBhY2svYm9vdHN0cmFwIiwid2VicGFjazovL21haWxqZXQvd2VicGFjay9zdGFydHVwIl0sInNvdXJjZXNDb250ZW50IjpbIihmdW5jdGlvbiB3ZWJwYWNrVW5pdmVyc2FsTW9kdWxlRGVmaW5pdGlvbihyb290LCBmYWN0b3J5KSB7XG5cdGlmKHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlID09PSAnb2JqZWN0Jylcblx0XHRtb2R1bGUuZXhwb3J0cyA9IGZhY3RvcnkoKTtcblx0ZWxzZSBpZih0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQpXG5cdFx0ZGVmaW5lKFtdLCBmYWN0b3J5KTtcblx0ZWxzZSBpZih0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcpXG5cdFx0ZXhwb3J0c1tcIm1haWxqZXRcIl0gPSBmYWN0b3J5KCk7XG5cdGVsc2Vcblx0XHRyb290W1wibWFpbGpldFwiXSA9IGZhY3RvcnkoKTtcbn0pKHRoaXMsICgpID0+IHtcbnJldHVybiAiLCJtb2R1bGUuZXhwb3J0cyA9XG57XG4gIHBhcmFsbGVsICAgICAgOiByZXF1aXJlKCcuL3BhcmFsbGVsLmpzJyksXG4gIHNlcmlhbCAgICAgICAgOiByZXF1aXJlKCcuL3NlcmlhbC5qcycpLFxuICBzZXJpYWxPcmRlcmVkIDogcmVxdWlyZSgnLi9zZXJpYWxPcmRlcmVkLmpzJylcbn07XG4iLCIvLyBBUElcbm1vZHVsZS5leHBvcnRzID0gYWJvcnQ7XG5cbi8qKlxuICogQWJvcnRzIGxlZnRvdmVyIGFjdGl2ZSBqb2JzXG4gKlxuICogQHBhcmFtIHtvYmplY3R9IHN0YXRlIC0gY3VycmVudCBzdGF0ZSBvYmplY3RcbiAqL1xuZnVuY3Rpb24gYWJvcnQoc3RhdGUpXG57XG4gIE9iamVjdC5rZXlzKHN0YXRlLmpvYnMpLmZvckVhY2goY2xlYW4uYmluZChzdGF0ZSkpO1xuXG4gIC8vIHJlc2V0IGxlZnRvdmVyIGpvYnNcbiAgc3RhdGUuam9icyA9IHt9O1xufVxuXG4vKipcbiAqIENsZWFucyB1cCBsZWZ0b3ZlciBqb2IgYnkgaW52b2tpbmcgYWJvcnQgZnVuY3Rpb24gZm9yIHRoZSBwcm92aWRlZCBqb2IgaWRcbiAqXG4gKiBAdGhpcyAgc3RhdGVcbiAqIEBwYXJhbSB7c3RyaW5nfG51bWJlcn0ga2V5IC0gam9iIGlkIHRvIGFib3J0XG4gKi9cbmZ1bmN0aW9uIGNsZWFuKGtleSlcbntcbiAgaWYgKHR5cGVvZiB0aGlzLmpvYnNba2V5XSA9PSAnZnVuY3Rpb24nKVxuICB7XG4gICAgdGhpcy5qb2JzW2tleV0oKTtcbiAgfVxufVxuIiwidmFyIGRlZmVyID0gcmVxdWlyZSgnLi9kZWZlci5qcycpO1xuXG4vLyBBUElcbm1vZHVsZS5leHBvcnRzID0gYXN5bmM7XG5cbi8qKlxuICogUnVucyBwcm92aWRlZCBjYWxsYmFjayBhc3luY2hyb25vdXNseVxuICogZXZlbiBpZiBjYWxsYmFjayBpdHNlbGYgaXMgbm90XG4gKlxuICogQHBhcmFtICAge2Z1bmN0aW9ufSBjYWxsYmFjayAtIGNhbGxiYWNrIHRvIGludm9rZVxuICogQHJldHVybnMge2Z1bmN0aW9ufSAtIGF1Z21lbnRlZCBjYWxsYmFja1xuICovXG5mdW5jdGlvbiBhc3luYyhjYWxsYmFjaylcbntcbiAgdmFyIGlzQXN5bmMgPSBmYWxzZTtcblxuICAvLyBjaGVjayBpZiBhc3luYyBoYXBwZW5lZFxuICBkZWZlcihmdW5jdGlvbigpIHsgaXNBc3luYyA9IHRydWU7IH0pO1xuXG4gIHJldHVybiBmdW5jdGlvbiBhc3luY19jYWxsYmFjayhlcnIsIHJlc3VsdClcbiAge1xuICAgIGlmIChpc0FzeW5jKVxuICAgIHtcbiAgICAgIGNhbGxiYWNrKGVyciwgcmVzdWx0KTtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgIGRlZmVyKGZ1bmN0aW9uIG5leHRUaWNrX2NhbGxiYWNrKClcbiAgICAgIHtcbiAgICAgICAgY2FsbGJhY2soZXJyLCByZXN1bHQpO1xuICAgICAgfSk7XG4gICAgfVxuICB9O1xufVxuIiwibW9kdWxlLmV4cG9ydHMgPSBkZWZlcjtcblxuLyoqXG4gKiBSdW5zIHByb3ZpZGVkIGZ1bmN0aW9uIG9uIG5leHQgaXRlcmF0aW9uIG9mIHRoZSBldmVudCBsb29wXG4gKlxuICogQHBhcmFtIHtmdW5jdGlvbn0gZm4gLSBmdW5jdGlvbiB0byBydW5cbiAqL1xuZnVuY3Rpb24gZGVmZXIoZm4pXG57XG4gIHZhciBuZXh0VGljayA9IHR5cGVvZiBzZXRJbW1lZGlhdGUgPT0gJ2Z1bmN0aW9uJ1xuICAgID8gc2V0SW1tZWRpYXRlXG4gICAgOiAoXG4gICAgICB0eXBlb2YgcHJvY2VzcyA9PSAnb2JqZWN0JyAmJiB0eXBlb2YgcHJvY2Vzcy5uZXh0VGljayA9PSAnZnVuY3Rpb24nXG4gICAgICA/IHByb2Nlc3MubmV4dFRpY2tcbiAgICAgIDogbnVsbFxuICAgICk7XG5cbiAgaWYgKG5leHRUaWNrKVxuICB7XG4gICAgbmV4dFRpY2soZm4pO1xuICB9XG4gIGVsc2VcbiAge1xuICAgIHNldFRpbWVvdXQoZm4sIDApO1xuICB9XG59XG4iLCJ2YXIgYXN5bmMgPSByZXF1aXJlKCcuL2FzeW5jLmpzJylcbiAgLCBhYm9ydCA9IHJlcXVpcmUoJy4vYWJvcnQuanMnKVxuICA7XG5cbi8vIEFQSVxubW9kdWxlLmV4cG9ydHMgPSBpdGVyYXRlO1xuXG4vKipcbiAqIEl0ZXJhdGVzIG92ZXIgZWFjaCBqb2Igb2JqZWN0XG4gKlxuICogQHBhcmFtIHthcnJheXxvYmplY3R9IGxpc3QgLSBhcnJheSBvciBvYmplY3QgKG5hbWVkIGxpc3QpIHRvIGl0ZXJhdGUgb3ZlclxuICogQHBhcmFtIHtmdW5jdGlvbn0gaXRlcmF0b3IgLSBpdGVyYXRvciB0byBydW5cbiAqIEBwYXJhbSB7b2JqZWN0fSBzdGF0ZSAtIGN1cnJlbnQgam9iIHN0YXR1c1xuICogQHBhcmFtIHtmdW5jdGlvbn0gY2FsbGJhY2sgLSBpbnZva2VkIHdoZW4gYWxsIGVsZW1lbnRzIHByb2Nlc3NlZFxuICovXG5mdW5jdGlvbiBpdGVyYXRlKGxpc3QsIGl0ZXJhdG9yLCBzdGF0ZSwgY2FsbGJhY2spXG57XG4gIC8vIHN0b3JlIGN1cnJlbnQgaW5kZXhcbiAgdmFyIGtleSA9IHN0YXRlWydrZXllZExpc3QnXSA/IHN0YXRlWydrZXllZExpc3QnXVtzdGF0ZS5pbmRleF0gOiBzdGF0ZS5pbmRleDtcblxuICBzdGF0ZS5qb2JzW2tleV0gPSBydW5Kb2IoaXRlcmF0b3IsIGtleSwgbGlzdFtrZXldLCBmdW5jdGlvbihlcnJvciwgb3V0cHV0KVxuICB7XG4gICAgLy8gZG9uJ3QgcmVwZWF0IHlvdXJzZWxmXG4gICAgLy8gc2tpcCBzZWNvbmRhcnkgY2FsbGJhY2tzXG4gICAgaWYgKCEoa2V5IGluIHN0YXRlLmpvYnMpKVxuICAgIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBjbGVhbiB1cCBqb2JzXG4gICAgZGVsZXRlIHN0YXRlLmpvYnNba2V5XTtcblxuICAgIGlmIChlcnJvcilcbiAgICB7XG4gICAgICAvLyBkb24ndCBwcm9jZXNzIHJlc3Qgb2YgdGhlIHJlc3VsdHNcbiAgICAgIC8vIHN0b3Agc3RpbGwgYWN0aXZlIGpvYnNcbiAgICAgIC8vIGFuZCByZXNldCB0aGUgbGlzdFxuICAgICAgYWJvcnQoc3RhdGUpO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgc3RhdGUucmVzdWx0c1trZXldID0gb3V0cHV0O1xuICAgIH1cblxuICAgIC8vIHJldHVybiBzYWx2YWdlZCByZXN1bHRzXG4gICAgY2FsbGJhY2soZXJyb3IsIHN0YXRlLnJlc3VsdHMpO1xuICB9KTtcbn1cblxuLyoqXG4gKiBSdW5zIGl0ZXJhdG9yIG92ZXIgcHJvdmlkZWQgam9iIGVsZW1lbnRcbiAqXG4gKiBAcGFyYW0gICB7ZnVuY3Rpb259IGl0ZXJhdG9yIC0gaXRlcmF0b3IgdG8gaW52b2tlXG4gKiBAcGFyYW0gICB7c3RyaW5nfG51bWJlcn0ga2V5IC0ga2V5L2luZGV4IG9mIHRoZSBlbGVtZW50IGluIHRoZSBsaXN0IG9mIGpvYnNcbiAqIEBwYXJhbSAgIHttaXhlZH0gaXRlbSAtIGpvYiBkZXNjcmlwdGlvblxuICogQHBhcmFtICAge2Z1bmN0aW9ufSBjYWxsYmFjayAtIGludm9rZWQgYWZ0ZXIgaXRlcmF0b3IgaXMgZG9uZSB3aXRoIHRoZSBqb2JcbiAqIEByZXR1cm5zIHtmdW5jdGlvbnxtaXhlZH0gLSBqb2IgYWJvcnQgZnVuY3Rpb24gb3Igc29tZXRoaW5nIGVsc2VcbiAqL1xuZnVuY3Rpb24gcnVuSm9iKGl0ZXJhdG9yLCBrZXksIGl0ZW0sIGNhbGxiYWNrKVxue1xuICB2YXIgYWJvcnRlcjtcblxuICAvLyBhbGxvdyBzaG9ydGN1dCBpZiBpdGVyYXRvciBleHBlY3RzIG9ubHkgdHdvIGFyZ3VtZW50c1xuICBpZiAoaXRlcmF0b3IubGVuZ3RoID09IDIpXG4gIHtcbiAgICBhYm9ydGVyID0gaXRlcmF0b3IoaXRlbSwgYXN5bmMoY2FsbGJhY2spKTtcbiAgfVxuICAvLyBvdGhlcndpc2UgZ28gd2l0aCBmdWxsIHRocmVlIGFyZ3VtZW50c1xuICBlbHNlXG4gIHtcbiAgICBhYm9ydGVyID0gaXRlcmF0b3IoaXRlbSwga2V5LCBhc3luYyhjYWxsYmFjaykpO1xuICB9XG5cbiAgcmV0dXJuIGFib3J0ZXI7XG59XG4iLCIvLyBBUElcbm1vZHVsZS5leHBvcnRzID0gc3RhdGU7XG5cbi8qKlxuICogQ3JlYXRlcyBpbml0aWFsIHN0YXRlIG9iamVjdFxuICogZm9yIGl0ZXJhdGlvbiBvdmVyIGxpc3RcbiAqXG4gKiBAcGFyYW0gICB7YXJyYXl8b2JqZWN0fSBsaXN0IC0gbGlzdCB0byBpdGVyYXRlIG92ZXJcbiAqIEBwYXJhbSAgIHtmdW5jdGlvbnxudWxsfSBzb3J0TWV0aG9kIC0gZnVuY3Rpb24gdG8gdXNlIGZvciBrZXlzIHNvcnQsXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvciBgbnVsbGAgdG8ga2VlcCB0aGVtIGFzIGlzXG4gKiBAcmV0dXJucyB7b2JqZWN0fSAtIGluaXRpYWwgc3RhdGUgb2JqZWN0XG4gKi9cbmZ1bmN0aW9uIHN0YXRlKGxpc3QsIHNvcnRNZXRob2QpXG57XG4gIHZhciBpc05hbWVkTGlzdCA9ICFBcnJheS5pc0FycmF5KGxpc3QpXG4gICAgLCBpbml0U3RhdGUgPVxuICAgIHtcbiAgICAgIGluZGV4ICAgIDogMCxcbiAgICAgIGtleWVkTGlzdDogaXNOYW1lZExpc3QgfHwgc29ydE1ldGhvZCA/IE9iamVjdC5rZXlzKGxpc3QpIDogbnVsbCxcbiAgICAgIGpvYnMgICAgIDoge30sXG4gICAgICByZXN1bHRzICA6IGlzTmFtZWRMaXN0ID8ge30gOiBbXSxcbiAgICAgIHNpemUgICAgIDogaXNOYW1lZExpc3QgPyBPYmplY3Qua2V5cyhsaXN0KS5sZW5ndGggOiBsaXN0Lmxlbmd0aFxuICAgIH1cbiAgICA7XG5cbiAgaWYgKHNvcnRNZXRob2QpXG4gIHtcbiAgICAvLyBzb3J0IGFycmF5IGtleXMgYmFzZWQgb24gaXQncyB2YWx1ZXNcbiAgICAvLyBzb3J0IG9iamVjdCdzIGtleXMganVzdCBvbiBvd24gbWVyaXRcbiAgICBpbml0U3RhdGUua2V5ZWRMaXN0LnNvcnQoaXNOYW1lZExpc3QgPyBzb3J0TWV0aG9kIDogZnVuY3Rpb24oYSwgYilcbiAgICB7XG4gICAgICByZXR1cm4gc29ydE1ldGhvZChsaXN0W2FdLCBsaXN0W2JdKTtcbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiBpbml0U3RhdGU7XG59XG4iLCJ2YXIgYWJvcnQgPSByZXF1aXJlKCcuL2Fib3J0LmpzJylcbiAgLCBhc3luYyA9IHJlcXVpcmUoJy4vYXN5bmMuanMnKVxuICA7XG5cbi8vIEFQSVxubW9kdWxlLmV4cG9ydHMgPSB0ZXJtaW5hdG9yO1xuXG4vKipcbiAqIFRlcm1pbmF0ZXMgam9icyBpbiB0aGUgYXR0YWNoZWQgc3RhdGUgY29udGV4dFxuICpcbiAqIEB0aGlzICBBc3luY0tpdFN0YXRlI1xuICogQHBhcmFtIHtmdW5jdGlvbn0gY2FsbGJhY2sgLSBmaW5hbCBjYWxsYmFjayB0byBpbnZva2UgYWZ0ZXIgdGVybWluYXRpb25cbiAqL1xuZnVuY3Rpb24gdGVybWluYXRvcihjYWxsYmFjaylcbntcbiAgaWYgKCFPYmplY3Qua2V5cyh0aGlzLmpvYnMpLmxlbmd0aClcbiAge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8vIGZhc3QgZm9yd2FyZCBpdGVyYXRpb24gaW5kZXhcbiAgdGhpcy5pbmRleCA9IHRoaXMuc2l6ZTtcblxuICAvLyBhYm9ydCBqb2JzXG4gIGFib3J0KHRoaXMpO1xuXG4gIC8vIHNlbmQgYmFjayByZXN1bHRzIHdlIGhhdmUgc28gZmFyXG4gIGFzeW5jKGNhbGxiYWNrKShudWxsLCB0aGlzLnJlc3VsdHMpO1xufVxuIiwidmFyIGl0ZXJhdGUgICAgPSByZXF1aXJlKCcuL2xpYi9pdGVyYXRlLmpzJylcbiAgLCBpbml0U3RhdGUgID0gcmVxdWlyZSgnLi9saWIvc3RhdGUuanMnKVxuICAsIHRlcm1pbmF0b3IgPSByZXF1aXJlKCcuL2xpYi90ZXJtaW5hdG9yLmpzJylcbiAgO1xuXG4vLyBQdWJsaWMgQVBJXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmFsbGVsO1xuXG4vKipcbiAqIFJ1bnMgaXRlcmF0b3Igb3ZlciBwcm92aWRlZCBhcnJheSBlbGVtZW50cyBpbiBwYXJhbGxlbFxuICpcbiAqIEBwYXJhbSAgIHthcnJheXxvYmplY3R9IGxpc3QgLSBhcnJheSBvciBvYmplY3QgKG5hbWVkIGxpc3QpIHRvIGl0ZXJhdGUgb3ZlclxuICogQHBhcmFtICAge2Z1bmN0aW9ufSBpdGVyYXRvciAtIGl0ZXJhdG9yIHRvIHJ1blxuICogQHBhcmFtICAge2Z1bmN0aW9ufSBjYWxsYmFjayAtIGludm9rZWQgd2hlbiBhbGwgZWxlbWVudHMgcHJvY2Vzc2VkXG4gKiBAcmV0dXJucyB7ZnVuY3Rpb259IC0gam9icyB0ZXJtaW5hdG9yXG4gKi9cbmZ1bmN0aW9uIHBhcmFsbGVsKGxpc3QsIGl0ZXJhdG9yLCBjYWxsYmFjaylcbntcbiAgdmFyIHN0YXRlID0gaW5pdFN0YXRlKGxpc3QpO1xuXG4gIHdoaWxlIChzdGF0ZS5pbmRleCA8IChzdGF0ZVsna2V5ZWRMaXN0J10gfHwgbGlzdCkubGVuZ3RoKVxuICB7XG4gICAgaXRlcmF0ZShsaXN0LCBpdGVyYXRvciwgc3RhdGUsIGZ1bmN0aW9uKGVycm9yLCByZXN1bHQpXG4gICAge1xuICAgICAgaWYgKGVycm9yKVxuICAgICAge1xuICAgICAgICBjYWxsYmFjayhlcnJvciwgcmVzdWx0KTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICAvLyBsb29rcyBsaWtlIGl0J3MgdGhlIGxhc3Qgb25lXG4gICAgICBpZiAoT2JqZWN0LmtleXMoc3RhdGUuam9icykubGVuZ3RoID09PSAwKVxuICAgICAge1xuICAgICAgICBjYWxsYmFjayhudWxsLCBzdGF0ZS5yZXN1bHRzKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgc3RhdGUuaW5kZXgrKztcbiAgfVxuXG4gIHJldHVybiB0ZXJtaW5hdG9yLmJpbmQoc3RhdGUsIGNhbGxiYWNrKTtcbn1cbiIsInZhciBzZXJpYWxPcmRlcmVkID0gcmVxdWlyZSgnLi9zZXJpYWxPcmRlcmVkLmpzJyk7XG5cbi8vIFB1YmxpYyBBUElcbm1vZHVsZS5leHBvcnRzID0gc2VyaWFsO1xuXG4vKipcbiAqIFJ1bnMgaXRlcmF0b3Igb3ZlciBwcm92aWRlZCBhcnJheSBlbGVtZW50cyBpbiBzZXJpZXNcbiAqXG4gKiBAcGFyYW0gICB7YXJyYXl8b2JqZWN0fSBsaXN0IC0gYXJyYXkgb3Igb2JqZWN0IChuYW1lZCBsaXN0KSB0byBpdGVyYXRlIG92ZXJcbiAqIEBwYXJhbSAgIHtmdW5jdGlvbn0gaXRlcmF0b3IgLSBpdGVyYXRvciB0byBydW5cbiAqIEBwYXJhbSAgIHtmdW5jdGlvbn0gY2FsbGJhY2sgLSBpbnZva2VkIHdoZW4gYWxsIGVsZW1lbnRzIHByb2Nlc3NlZFxuICogQHJldHVybnMge2Z1bmN0aW9ufSAtIGpvYnMgdGVybWluYXRvclxuICovXG5mdW5jdGlvbiBzZXJpYWwobGlzdCwgaXRlcmF0b3IsIGNhbGxiYWNrKVxue1xuICByZXR1cm4gc2VyaWFsT3JkZXJlZChsaXN0LCBpdGVyYXRvciwgbnVsbCwgY2FsbGJhY2spO1xufVxuIiwidmFyIGl0ZXJhdGUgICAgPSByZXF1aXJlKCcuL2xpYi9pdGVyYXRlLmpzJylcbiAgLCBpbml0U3RhdGUgID0gcmVxdWlyZSgnLi9saWIvc3RhdGUuanMnKVxuICAsIHRlcm1pbmF0b3IgPSByZXF1aXJlKCcuL2xpYi90ZXJtaW5hdG9yLmpzJylcbiAgO1xuXG4vLyBQdWJsaWMgQVBJXG5tb2R1bGUuZXhwb3J0cyA9IHNlcmlhbE9yZGVyZWQ7XG4vLyBzb3J0aW5nIGhlbHBlcnNcbm1vZHVsZS5leHBvcnRzLmFzY2VuZGluZyAgPSBhc2NlbmRpbmc7XG5tb2R1bGUuZXhwb3J0cy5kZXNjZW5kaW5nID0gZGVzY2VuZGluZztcblxuLyoqXG4gKiBSdW5zIGl0ZXJhdG9yIG92ZXIgcHJvdmlkZWQgc29ydGVkIGFycmF5IGVsZW1lbnRzIGluIHNlcmllc1xuICpcbiAqIEBwYXJhbSAgIHthcnJheXxvYmplY3R9IGxpc3QgLSBhcnJheSBvciBvYmplY3QgKG5hbWVkIGxpc3QpIHRvIGl0ZXJhdGUgb3ZlclxuICogQHBhcmFtICAge2Z1bmN0aW9ufSBpdGVyYXRvciAtIGl0ZXJhdG9yIHRvIHJ1blxuICogQHBhcmFtICAge2Z1bmN0aW9ufSBzb3J0TWV0aG9kIC0gY3VzdG9tIHNvcnQgZnVuY3Rpb25cbiAqIEBwYXJhbSAgIHtmdW5jdGlvbn0gY2FsbGJhY2sgLSBpbnZva2VkIHdoZW4gYWxsIGVsZW1lbnRzIHByb2Nlc3NlZFxuICogQHJldHVybnMge2Z1bmN0aW9ufSAtIGpvYnMgdGVybWluYXRvclxuICovXG5mdW5jdGlvbiBzZXJpYWxPcmRlcmVkKGxpc3QsIGl0ZXJhdG9yLCBzb3J0TWV0aG9kLCBjYWxsYmFjaylcbntcbiAgdmFyIHN0YXRlID0gaW5pdFN0YXRlKGxpc3QsIHNvcnRNZXRob2QpO1xuXG4gIGl0ZXJhdGUobGlzdCwgaXRlcmF0b3IsIHN0YXRlLCBmdW5jdGlvbiBpdGVyYXRvckhhbmRsZXIoZXJyb3IsIHJlc3VsdClcbiAge1xuICAgIGlmIChlcnJvcilcbiAgICB7XG4gICAgICBjYWxsYmFjayhlcnJvciwgcmVzdWx0KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBzdGF0ZS5pbmRleCsrO1xuXG4gICAgLy8gYXJlIHdlIHRoZXJlIHlldD9cbiAgICBpZiAoc3RhdGUuaW5kZXggPCAoc3RhdGVbJ2tleWVkTGlzdCddIHx8IGxpc3QpLmxlbmd0aClcbiAgICB7XG4gICAgICBpdGVyYXRlKGxpc3QsIGl0ZXJhdG9yLCBzdGF0ZSwgaXRlcmF0b3JIYW5kbGVyKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBkb25lIGhlcmVcbiAgICBjYWxsYmFjayhudWxsLCBzdGF0ZS5yZXN1bHRzKTtcbiAgfSk7XG5cbiAgcmV0dXJuIHRlcm1pbmF0b3IuYmluZChzdGF0ZSwgY2FsbGJhY2spO1xufVxuXG4vKlxuICogLS0gU29ydCBtZXRob2RzXG4gKi9cblxuLyoqXG4gKiBzb3J0IGhlbHBlciB0byBzb3J0IGFycmF5IGVsZW1lbnRzIGluIGFzY2VuZGluZyBvcmRlclxuICpcbiAqIEBwYXJhbSAgIHttaXhlZH0gYSAtIGFuIGl0ZW0gdG8gY29tcGFyZVxuICogQHBhcmFtICAge21peGVkfSBiIC0gYW4gaXRlbSB0byBjb21wYXJlXG4gKiBAcmV0dXJucyB7bnVtYmVyfSAtIGNvbXBhcmlzb24gcmVzdWx0XG4gKi9cbmZ1bmN0aW9uIGFzY2VuZGluZyhhLCBiKVxue1xuICByZXR1cm4gYSA8IGIgPyAtMSA6IGEgPiBiID8gMSA6IDA7XG59XG5cbi8qKlxuICogc29ydCBoZWxwZXIgdG8gc29ydCBhcnJheSBlbGVtZW50cyBpbiBkZXNjZW5kaW5nIG9yZGVyXG4gKlxuICogQHBhcmFtICAge21peGVkfSBhIC0gYW4gaXRlbSB0byBjb21wYXJlXG4gKiBAcGFyYW0gICB7bWl4ZWR9IGIgLSBhbiBpdGVtIHRvIGNvbXBhcmVcbiAqIEByZXR1cm5zIHtudW1iZXJ9IC0gY29tcGFyaXNvbiByZXN1bHRcbiAqL1xuZnVuY3Rpb24gZGVzY2VuZGluZyhhLCBiKVxue1xuICByZXR1cm4gLTEgKiBhc2NlbmRpbmcoYSwgYik7XG59XG4iLCIvKmV4dGVybmFsIG1vZHVsZXMqL1xuLyp1dGlscyovXG5pbXBvcnQge1xuICBpc1B1cmVPYmplY3QsXG4gIHNldFZhbHVlSWZOb3ROaWwsXG59IGZyb20gJy4uL3V0aWxzJztcbi8qdHlwZXMqL1xuaW1wb3J0IEh0dHBNZXRob2RzIGZyb20gJy4uL3JlcXVlc3QvSHR0cE1ldGhvZHMnO1xuaW1wb3J0IHsgQ2xpZW50UGFyYW1zIH0gZnJvbSAnLi9DbGllbnQnO1xuaW1wb3J0IHsgUmVxdWVzdENvbmZpZywgUmVxdWVzdE9wdGlvbnMsIFJlcXVlc3RDb25zdHJ1Y3RvckNvbmZpZyB9IGZyb20gJy4uL3JlcXVlc3QvUmVxdWVzdCc7XG4vKmxpYiovXG5pbXBvcnQgUmVxdWVzdCBmcm9tICcuLi9yZXF1ZXN0JztcbmltcG9ydCBwYWNrYWdlSlNPTiBmcm9tICcuLi8uLi9wYWNrYWdlLmpzb24nO1xuLypvdGhlciovXG5cbmV4cG9ydCB0eXBlIENsaWVudENvbm5lY3RQYXJhbXMgPSBQaWNrPENsaWVudFBhcmFtcywgJ2NvbmZpZycgfCAnb3B0aW9ucyc+O1xuXG5jbGFzcyBDbGllbnQge1xuICBwcml2YXRlIHZlcnNpb24hOiBzdHJpbmc7XG5cbiAgcHJpdmF0ZSBjb25maWchOiBSZXF1ZXN0Q29uZmlnO1xuICBwcml2YXRlIG9wdGlvbnMhOiBSZXF1ZXN0T3B0aW9ucztcblxuICBwcml2YXRlIGFwaUtleT86IHN0cmluZztcbiAgcHJpdmF0ZSBhcGlTZWNyZXQ/OiBzdHJpbmc7XG4gIHByaXZhdGUgYXBpVG9rZW4/OiBzdHJpbmc7XG5cbiAgY29uc3RydWN0b3IocGFyYW1zOiBDbGllbnRQYXJhbXMpIHtcbiAgICBpZiAoIWlzUHVyZU9iamVjdChwYXJhbXMpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0FyZ3VtZW50IFwicGFyYW1zXCIgbXVzdCBiZSBvYmplY3QnKTtcbiAgICB9XG5cbiAgICB0aGlzLmluaXQodGhpcy5jbG9uZVBhcmFtcyhwYXJhbXMpKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRQYWNrYWdlVmVyc2lvbigpIHtcbiAgICByZXR1cm4gdGhpcy52ZXJzaW9uO1xuICB9XG5cbiAgcHVibGljIGdldEFQSUtleSgpIHtcbiAgICByZXR1cm4gdGhpcy5hcGlLZXk7XG4gIH1cblxuICBwdWJsaWMgZ2V0QVBJU2VjcmV0KCkge1xuICAgIHJldHVybiB0aGlzLmFwaVNlY3JldDtcbiAgfVxuXG4gIHB1YmxpYyBnZXRBUElUb2tlbigpIHtcbiAgICByZXR1cm4gdGhpcy5hcGlUb2tlbjtcbiAgfVxuXG4gIHB1YmxpYyBnZXRDb25maWcoKSB7XG4gICAgcmV0dXJuIHsgLi4udGhpcy5jb25maWcgfTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRPcHRpb25zKCk6IFJlcXVlc3RPcHRpb25zIHtcbiAgICByZXR1cm4geyAuLi50aGlzLm9wdGlvbnMgfTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQocmVzb3VyY2U6IHN0cmluZywgY29uZmlnPzogUmVxdWVzdENvbnN0cnVjdG9yQ29uZmlnKSB7XG4gICAgcmV0dXJuIG5ldyBSZXF1ZXN0KHRoaXMsIEh0dHBNZXRob2RzLkdldCwgcmVzb3VyY2UsIGNvbmZpZyk7XG4gIH1cblxuICBwdWJsaWMgcG9zdChyZXNvdXJjZTogc3RyaW5nLCBjb25maWc/OiBSZXF1ZXN0Q29uc3RydWN0b3JDb25maWcpIHtcbiAgICByZXR1cm4gbmV3IFJlcXVlc3QodGhpcywgSHR0cE1ldGhvZHMuUG9zdCwgcmVzb3VyY2UsIGNvbmZpZyk7XG4gIH1cblxuICBwdWJsaWMgcHV0KHJlc291cmNlOiBzdHJpbmcsIGNvbmZpZz86IFJlcXVlc3RDb25zdHJ1Y3RvckNvbmZpZykge1xuICAgIHJldHVybiBuZXcgUmVxdWVzdCh0aGlzLCBIdHRwTWV0aG9kcy5QdXQsIHJlc291cmNlLCBjb25maWcpO1xuICB9XG5cbiAgcHVibGljIGRlbGV0ZShyZXNvdXJjZTogc3RyaW5nLCBjb25maWc/OiBSZXF1ZXN0Q29uc3RydWN0b3JDb25maWcpIHtcbiAgICByZXR1cm4gbmV3IFJlcXVlc3QodGhpcywgSHR0cE1ldGhvZHMuRGVsZXRlLCByZXNvdXJjZSwgY29uZmlnKTtcbiAgfVxuXG4gIHByaXZhdGUgaW5pdChwYXJhbXM6IENsaWVudFBhcmFtcykge1xuICAgIGlmICghaXNQdXJlT2JqZWN0KHBhcmFtcykpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQXJndW1lbnQgXCJwYXJhbXNcIiBtdXN0IGJlIG9iamVjdCcpO1xuICAgIH1cblxuICAgIGNvbnN0IHtcbiAgICAgIGFwaVRva2VuLFxuICAgICAgYXBpS2V5LFxuICAgICAgYXBpU2VjcmV0LFxuICAgICAgb3B0aW9ucyxcbiAgICAgIGNvbmZpZyxcbiAgICB9ID0gcGFyYW1zO1xuXG4gICAgdGhpcy52ZXJzaW9uID0gQ2xpZW50LnBhY2thZ2VKU09OLnZlcnNpb247XG5cbiAgICB0aGlzLnNldENvbmZpZyhjb25maWcgPz8gbnVsbCk7XG4gICAgdGhpcy5zZXRPcHRpb25zKG9wdGlvbnMgPz8gbnVsbCk7XG5cbiAgICByZXR1cm4gJ2FwaVRva2VuJyBpbiBwYXJhbXNcbiAgICAgID8gdGhpcy50b2tlbkNvbm5lY3RTdHJhdGVneShhcGlUb2tlbilcbiAgICAgIDogdGhpcy5iYXNpY0Nvbm5lY3RTdHJhdGVneShhcGlLZXksIGFwaVNlY3JldCk7XG4gIH1cblxuICBwcml2YXRlIGNsb25lUGFyYW1zKHBhcmFtczogQ2xpZW50UGFyYW1zKSB7XG4gICAgaWYgKCFpc1B1cmVPYmplY3QocGFyYW1zKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdBcmd1bWVudCBcInBhcmFtc1wiIG11c3QgYmUgb2JqZWN0Jyk7XG4gICAgfVxuXG4gICAgY29uc3QgY2xvbmVkUGFyYW1zID0geyAuLi5wYXJhbXMgfTtcblxuICAgIGlmIChwYXJhbXMuY29uZmlnKSB7XG4gICAgICBjbG9uZWRQYXJhbXMuY29uZmlnID0ge1xuICAgICAgICAuLi5wYXJhbXMuY29uZmlnLFxuICAgICAgfTtcbiAgICB9XG5cbiAgICBpZiAocGFyYW1zLm9wdGlvbnMpIHtcbiAgICAgIGNsb25lZFBhcmFtcy5vcHRpb25zID0ge1xuICAgICAgICAuLi5wYXJhbXMub3B0aW9ucyxcbiAgICAgIH07XG5cbiAgICAgIGlmIChjbG9uZWRQYXJhbXMub3B0aW9ucy5wcm94eSkge1xuICAgICAgICBjbG9uZWRQYXJhbXMub3B0aW9ucy5wcm94eSA9IHtcbiAgICAgICAgICAuLi5jbG9uZWRQYXJhbXMub3B0aW9ucy5wcm94eSxcbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgaWYgKGNsb25lZFBhcmFtcy5vcHRpb25zLmhlYWRlcnMpIHtcbiAgICAgICAgY2xvbmVkUGFyYW1zLm9wdGlvbnMuaGVhZGVycyA9IHtcbiAgICAgICAgICAuLi5jbG9uZWRQYXJhbXMub3B0aW9ucy5oZWFkZXJzLFxuICAgICAgICB9O1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBjbG9uZWRQYXJhbXM7XG4gIH1cblxuICBwcml2YXRlIHNldENvbmZpZyhjdXN0b21Db25maWc6IFBhcnRpYWw8UmVxdWVzdENvbmZpZz4gfCBudWxsKSB7XG4gICAgaWYgKHR5cGVvZiBjdXN0b21Db25maWcgIT09ICdvYmplY3QnKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0FyZ3VtZW50IFwiY3VzdG9tQ29uZmlnXCIgbXVzdCBiZSBvYmplY3Qgb3IgbnVsbCcpO1xuICAgIH1cblxuICAgIGNvbnN0IGNvbmZpZyA9IHsgLi4uQ2xpZW50LmNvbmZpZyB9O1xuXG4gICAgaWYgKGN1c3RvbUNvbmZpZyAhPT0gbnVsbCkge1xuICAgICAgc2V0VmFsdWVJZk5vdE5pbChjb25maWcsICdob3N0JywgY3VzdG9tQ29uZmlnLmhvc3QpO1xuICAgICAgc2V0VmFsdWVJZk5vdE5pbChjb25maWcsICdvdXRwdXQnLCBjdXN0b21Db25maWcub3V0cHV0KTtcbiAgICAgIHNldFZhbHVlSWZOb3ROaWwoY29uZmlnLCAndmVyc2lvbicsIGN1c3RvbUNvbmZpZy52ZXJzaW9uKTtcbiAgICB9XG5cbiAgICB0aGlzLmNvbmZpZyA9IGNvbmZpZztcblxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRPcHRpb25zKG9wdGlvbnM6IFJlcXVlc3RPcHRpb25zIHwgbnVsbCkge1xuICAgIGlmICh0eXBlb2Ygb3B0aW9ucyAhPT0gJ29iamVjdCcpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQXJndW1lbnQgXCJvcHRpb25zXCIgbXVzdCBiZSBvYmplY3Qgb3IgbnVsbCcpO1xuICAgIH1cblxuICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnMgPz8ge307XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIHByaXZhdGUgdG9rZW5Db25uZWN0U3RyYXRlZ3koYXBpVG9rZW46IHN0cmluZyB8IHVuZGVmaW5lZCkge1xuICAgIGlmICghYXBpVG9rZW4pIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignTWFpbGpldCBBUElfVE9LRU4gaXMgcmVxdWlyZWQnKTtcbiAgICB9XG5cbiAgICB0aGlzLmFwaVRva2VuID0gYXBpVG9rZW47XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIHByaXZhdGUgYmFzaWNDb25uZWN0U3RyYXRlZ3koYXBpS2V5OiBzdHJpbmcgfCB1bmRlZmluZWQsIGFwaVNlY3JldDogc3RyaW5nIHwgdW5kZWZpbmVkKSB7XG4gICAgaWYgKCFhcGlLZXkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignTWFpbGpldCBBUElfS0VZIGlzIHJlcXVpcmVkJyk7XG4gICAgfVxuICAgIGlmICghYXBpU2VjcmV0KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ01haWxqZXQgQVBJX1NFQ1JFVCBpcyByZXF1aXJlZCcpO1xuICAgIH1cblxuICAgIHRoaXMuYXBpS2V5ID0gYXBpS2V5O1xuICAgIHRoaXMuYXBpU2VjcmV0ID0gYXBpU2VjcmV0O1xuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBwdWJsaWMgc3RhdGljIGFwaUNvbm5lY3QoYXBpS2V5OiBzdHJpbmcsIGFwaVNlY3JldDogc3RyaW5nLCBwYXJhbXM/OiBDbGllbnRDb25uZWN0UGFyYW1zKSB7XG4gICAgcmV0dXJuIG5ldyBDbGllbnQoeyBhcGlLZXksIGFwaVNlY3JldCwgLi4ucGFyYW1zIH0pO1xuICB9XG5cbiAgcHVibGljIHN0YXRpYyBzbXNDb25uZWN0KGFwaVRva2VuOiBzdHJpbmcsIHBhcmFtcz86IENsaWVudENvbm5lY3RQYXJhbXMpIHtcbiAgICByZXR1cm4gbmV3IENsaWVudCh7IGFwaVRva2VuLCAuLi5wYXJhbXMgfSk7XG4gIH1cblxuICBwdWJsaWMgc3RhdGljIGNvbmZpZzogUmVhZG9ubHk8UmVxdWVzdENvbmZpZz4gPSBPYmplY3QuZnJlZXplKHtcbiAgICBob3N0OiAnYXBpLm1haWxqZXQuY29tJyxcbiAgICB2ZXJzaW9uOiAndjMnLFxuICAgIG91dHB1dDogJ2pzb24nLFxuICB9IGFzIGNvbnN0KTtcblxuICBwdWJsaWMgc3RhdGljIHBhY2thZ2VKU09OID0gT2JqZWN0LmZyZWV6ZSh7XG4gICAgLi4ucGFja2FnZUpTT04sXG4gIH0gYXMgY29uc3QpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBDbGllbnQ7XG4iLCIvKmV4dGVybmFsIG1vZHVsZXMqL1xuLyp1dGlscyovXG4vKnR5cGVzKi9cbmltcG9ydCBIdHRwTWV0aG9kcyBmcm9tICcuL3JlcXVlc3QvSHR0cE1ldGhvZHMnO1xuLypsaWIqL1xuaW1wb3J0IFJlcXVlc3QgZnJvbSAnLi9yZXF1ZXN0L2luZGV4JztcbmltcG9ydCBDbGllbnQgZnJvbSAnLi9jbGllbnQvaW5kZXgnO1xuLypvdGhlciovXG5cbmNsYXNzIE1haWxqZXQgZXh0ZW5kcyBDbGllbnQge1xuICBzdGF0aWMgUmVxdWVzdCA9IFJlcXVlc3Q7XG4gIHN0YXRpYyBIdHRwTWV0aG9kcyA9IEh0dHBNZXRob2RzO1xuICBzdGF0aWMgQ2xpZW50ID0gQ2xpZW50O1xufVxuXG5leHBvcnQgKiBmcm9tICcuL3R5cGVzL2FwaSc7XG5leHBvcnQgeyBDbGllbnQsIFJlcXVlc3QsIEh0dHBNZXRob2RzIH07XG5leHBvcnQgZGVmYXVsdCBNYWlsamV0O1xuIiwiLypleHRlcm5hbCBtb2R1bGVzKi9cbi8qdHlwZXMqL1xuLyp1dGlscyovXG4vKmxpYiovXG4vKm90aGVyKi9cblxuZW51bSBIdHRwTWV0aG9kcyB7XG4gIEdldCA9ICdnZXQnLFxuICBQb3N0ID0gJ3Bvc3QnLFxuICBQdXQgPSAncHV0JyxcbiAgRGVsZXRlID0gJ2RlbGV0ZSdcbn1cblxuZXhwb3J0IGRlZmF1bHQgSHR0cE1ldGhvZHM7XG4iLCIvKmV4dGVybmFsIG1vZHVsZXMqL1xuaW1wb3J0IHVybEpvaW4gZnJvbSAndXJsLWpvaW4nO1xuaW1wb3J0IEpTT05CaWdJbnQgZnJvbSAnanNvbi1iaWdpbnQnO1xuaW1wb3J0IGF4aW9zLCB7IEF4aW9zRXJyb3IgfSBmcm9tICdheGlvcyc7XG4vKnV0aWxzKi9cbmltcG9ydCB7IHNldFZhbHVlSWZOb3ROaWwgfSBmcm9tICcuLi91dGlscy9pbmRleCc7XG4vKnR5cGVzKi9cbmltcG9ydCB7IFRPYmplY3QgfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQgeyBMaWJyYXJ5UmVzcG9uc2UsIExpYnJhcnlMb2NhbFJlc3BvbnNlIH0gZnJvbSAnLi4vdHlwZXMvYXBpJztcbmltcG9ydCBIdHRwTWV0aG9kcyBmcm9tICcuL0h0dHBNZXRob2RzJztcbmltcG9ydCB7XG4gIFJlcXVlc3RDb25maWcsXG4gIFJlcXVlc3REYXRhLFxuICBSZXF1ZXN0UGFyYW1zLFxuICBSZXF1ZXN0Q29uc3RydWN0b3JDb25maWcsXG4gIFJlcXVlc3RBeGlvc0NvbmZpZyxcbiAgU3ViUGF0aCxcbn0gZnJvbSAnLi9SZXF1ZXN0Jztcbi8qbGliKi9cbmltcG9ydCBDbGllbnQgZnJvbSAnLi4vY2xpZW50Jztcbi8qb3RoZXIqL1xuXG50eXBlIFVua25vd25SZWMgPSBUT2JqZWN0LlVua25vd25SZWNcblxuY29uc3QgSlNPTmIgPSBKU09OQmlnSW50KHsgc3RvcmVBc1N0cmluZzogdHJ1ZSB9KTtcblxuY2xhc3MgUmVxdWVzdCB7XG4gIHByaXZhdGUgcmVhZG9ubHkgY2xpZW50OiBDbGllbnQ7XG4gIHByaXZhdGUgcmVhZG9ubHkgbWV0aG9kOiBIdHRwTWV0aG9kcztcbiAgcHJpdmF0ZSByZWFkb25seSBjb25maWc6IFBhcnRpYWw8UmVxdWVzdENvbmZpZz47XG4gIHByaXZhdGUgcmVhZG9ubHkgcmVzb3VyY2U6IHN0cmluZztcblxuICBwcml2YXRlIHVybDogc3RyaW5nO1xuICBwcml2YXRlIHN1YlBhdGg6IFN1YlBhdGg7XG4gIHByaXZhdGUgYWN0aW9uUGF0aDogc3RyaW5nIHwgbnVsbDtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBjbGllbnQ6IENsaWVudCxcbiAgICBtZXRob2Q6IEh0dHBNZXRob2RzLFxuICAgIHJlc291cmNlOiBzdHJpbmcsXG4gICAgY29uZmlnPzogUmVxdWVzdENvbnN0cnVjdG9yQ29uZmlnLFxuICApIHtcbiAgICBpZiAoIShjbGllbnQgaW5zdGFuY2VvZiBDbGllbnQpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0FyZ3VtZW50IFwiY2xpZW50XCIgbXVzdCBiZSBpbnN0YW5jZSBvZiBDbGllbnQnKTtcbiAgICB9XG5cbiAgICBpZiAoIU9iamVjdC52YWx1ZXMoSHR0cE1ldGhvZHMpLmluY2x1ZGVzKG1ldGhvZCkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQXJndW1lbnQgXCJtZXRob2RcIiBtdXN0IGJlIG9uZSBvZiBzdXBwb3J0ZWQgbWV0aG9kczogZ2V0LCBwb3N0LCBwdXQsIGRlbGV0ZScpO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgcmVzb3VyY2UgIT09ICdzdHJpbmcnKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0FyZ3VtZW50IFwicmVzb3VyY2VcIiBtdXN0IGJlIHN0cmluZycpO1xuICAgIH1cblxuICAgIHRoaXMuY2xpZW50ID0gY2xpZW50O1xuXG4gICAgdGhpcy5tZXRob2QgPSBtZXRob2Q7XG4gICAgdGhpcy51cmwgPSByZXNvdXJjZS50b0xvd2VyQ2FzZSgpO1xuICAgIHRoaXMucmVzb3VyY2UgPSByZXNvdXJjZS50b0xvd2VyQ2FzZSgpO1xuICAgIHRoaXMuc3ViUGF0aCA9IHRoaXMuYnVpbGRTdWJQYXRoKCk7XG4gICAgdGhpcy5hY3Rpb25QYXRoID0gbnVsbDtcblxuICAgIHRoaXMuY29uZmlnID0geyAuLi5jb25maWcgfTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRVc2VyQWdlbnQoKSB7XG4gICAgcmV0dXJuIGBtYWlsamV0LWFwaS12My1ub2RlanMvJHt0aGlzLmNsaWVudC5nZXRQYWNrYWdlVmVyc2lvbigpfWA7XG4gIH1cblxuICBwdWJsaWMgZ2V0Q3JlZGVudGlhbHMoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGFwaVRva2VuOiB0aGlzLmNsaWVudC5nZXRBUElUb2tlbigpLFxuICAgICAgYXBpS2V5OiB0aGlzLmNsaWVudC5nZXRBUElLZXkoKSxcbiAgICAgIGFwaVNlY3JldDogdGhpcy5jbGllbnQuZ2V0QVBJU2VjcmV0KCksXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0Q29udGVudFR5cGUodXJsOiBzdHJpbmcpIHtcbiAgICBpZiAodHlwZW9mIHVybCAhPT0gJ3N0cmluZycpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQXJndW1lbnQgXCJ1cmxcIiBtdXN0IGJlIHN0cmluZycpO1xuICAgIH1cblxuICAgIHJldHVybiB1cmwuaW5kZXhPZigndGV4dDpwbGFpbicpID4gLTFcbiAgICAgID8gJ3RleHQvcGxhaW4nXG4gICAgICA6ICdhcHBsaWNhdGlvbi9qc29uJztcbiAgfVxuXG4gIHByaXZhdGUgZ2V0UmVxdWVzdEJvZHkoZGF0YTogUmVxdWVzdERhdGEpIHtcbiAgICByZXR1cm4gW1xuICAgICAgSHR0cE1ldGhvZHMuUHV0LFxuICAgICAgSHR0cE1ldGhvZHMuUG9zdCxcbiAgICAgIEh0dHBNZXRob2RzLkRlbGV0ZSxcbiAgICBdLmluY2x1ZGVzKHRoaXMubWV0aG9kKSA/IGRhdGEgOiB1bmRlZmluZWQ7XG4gIH1cblxuICBwcml2YXRlIGJ1aWxkRnVsbFVybCgpIHtcbiAgICBjb25zdCBjbGllbnRDb25maWcgPSB0aGlzLmNsaWVudC5nZXRDb25maWcoKTtcblxuICAgIGNvbnN0IGhvc3QgPSB0aGlzLmNvbmZpZy5ob3N0ID8/IGNsaWVudENvbmZpZy5ob3N0O1xuICAgIGNvbnN0IHZlcnNpb24gPSB0aGlzLmNvbmZpZy52ZXJzaW9uID8/IGNsaWVudENvbmZpZy52ZXJzaW9uO1xuXG4gICAgcmV0dXJuIHVybEpvaW4oUmVxdWVzdC5wcm90b2NvbCwgaG9zdCwgdmVyc2lvbiwgdGhpcy5zdWJQYXRoLCB0aGlzLnVybCk7XG4gIH1cblxuICBwcml2YXRlIGJ1aWxkU3ViUGF0aCgpIHtcbiAgICBpZiAodGhpcy5hY3Rpb25QYXRoKSB7XG4gICAgICBjb25zdCBpc0NvbnRhY3RMaXN0V2l0aENTViA9IHRoaXMucmVzb3VyY2UgPT09ICdjb250YWN0c2xpc3QnICYmIHRoaXMuYWN0aW9uUGF0aCA9PT0gJ2NzdmRhdGEvdGV4dDpwbGFpbic7XG4gICAgICBjb25zdCBpc0JhdGNoSm9iV2l0aENTViA9IHRoaXMucmVzb3VyY2UgPT09ICdiYXRjaGpvYicgJiYgdGhpcy5hY3Rpb25QYXRoID09PSAnY3N2ZXJyb3IvdGV4dDpjc3YnO1xuXG4gICAgICByZXR1cm4gKGlzQ29udGFjdExpc3RXaXRoQ1NWIHx8IGlzQmF0Y2hKb2JXaXRoQ1NWKSA/ICdEQVRBJyA6IHRoaXMuc3ViUGF0aDtcbiAgICB9XG4gICAgY29uc3QgaXNTZW5kUmVzb3VyY2UgPSB0aGlzLnJlc291cmNlID09PSAnc2VuZCc7XG4gICAgY29uc3QgcmVzb3VyY2VDb250YWluU01TID0gdGhpcy5yZXNvdXJjZS5pbmRleE9mKCdzbXMnKSA+IC0xO1xuXG4gICAgcmV0dXJuICghaXNTZW5kUmVzb3VyY2UgJiYgIXJlc291cmNlQ29udGFpblNNUykgPyAnUkVTVCcgOiAnJztcbiAgfVxuXG4gIHByaXZhdGUgbWFrZVJlcXVlc3QodXJsOiBzdHJpbmcsIGRhdGE6IFJlcXVlc3REYXRhLCBwYXJhbXM6IFJlcXVlc3RQYXJhbXMpIHtcbiAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vYXhpb3MvYXhpb3MjcmVxdWVzdC1jb25maWdcbiAgICBjb25zdCByZXF1ZXN0Q29uZmlnOiBSZXF1ZXN0QXhpb3NDb25maWcgPSB7XG4gICAgICB1cmwsXG4gICAgICBwYXJhbXMsXG4gICAgICBkYXRhOiB0aGlzLmdldFJlcXVlc3RCb2R5KGRhdGEpLFxuICAgICAgbWV0aG9kOiB0aGlzLm1ldGhvZCxcbiAgICAgIHJlc3BvbnNlVHlwZTogJ2pzb24nLFxuICAgICAgaGVhZGVyczoge1xuICAgICAgICAnVXNlci1BZ2VudCc6IHRoaXMuZ2V0VXNlckFnZW50KCksXG4gICAgICAgICdDb250ZW50LVR5cGUnOiB0aGlzLmdldENvbnRlbnRUeXBlKHVybCksXG4gICAgICB9LFxuICAgICAgdHJhbnNmb3JtUmVzcG9uc2UocmVzcG9uc2VEYXRhOiB1bmtub3duKSB7XG4gICAgICAgIGNvbnN0IGRhdGFJc1N0cmluZyA9IHR5cGVvZiByZXNwb25zZURhdGEgPT09ICdzdHJpbmcnO1xuICAgICAgICBjb25zdCBpc0pTT05SZXF1ZXN0ZWQgPSB0aGlzLnJlc3BvbnNlVHlwZSA9PT0gJ2pzb24nO1xuXG4gICAgICAgIGlmIChyZXNwb25zZURhdGEgJiYgZGF0YUlzU3RyaW5nICYmIGlzSlNPTlJlcXVlc3RlZCkge1xuICAgICAgICAgIHJldHVybiBSZXF1ZXN0LnBhcnNlVG9KU09OYihyZXNwb25zZURhdGEpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHJlc3BvbnNlRGF0YTtcbiAgICAgIH0sXG4gICAgfTtcblxuICAgIC8vIEJST1dTRVIgU0lERVxuICAgIGlmIChSZXF1ZXN0LmlzQnJvd3NlcigpKSB7XG4gICAgICByZXF1ZXN0Q29uZmlnLmhlYWRlcnNbJ1gtVXNlci1BZ2VudCddID0gcmVxdWVzdENvbmZpZy5oZWFkZXJzWydVc2VyLUFnZW50J107XG4gICAgfVxuXG4gICAgLy8gQVVUSFxuICAgIGNvbnN0IGNyZWRlbnRpYWxzID0gdGhpcy5nZXRDcmVkZW50aWFscygpO1xuXG4gICAgaWYgKGNyZWRlbnRpYWxzLmFwaVRva2VuKSB7XG4gICAgICByZXF1ZXN0Q29uZmlnLmhlYWRlcnNbJ0F1dGhvcml6YXRpb24nXSA9IGBCZWFyZXIgJHtjcmVkZW50aWFscy5hcGlUb2tlbn1gO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXF1ZXN0Q29uZmlnLmF1dGggPSB7XG4gICAgICAgIHVzZXJuYW1lOiBjcmVkZW50aWFscy5hcGlLZXkgYXMgc3RyaW5nLFxuICAgICAgICBwYXNzd29yZDogY3JlZGVudGlhbHMuYXBpU2VjcmV0IGFzIHN0cmluZyxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgLy8gT1BUSU9OU1xuICAgIGNvbnN0IGNsaWVudENvbmZpZyA9IHRoaXMuY2xpZW50LmdldENvbmZpZygpO1xuICAgIGNvbnN0IGNsaWVudE9wdGlvbnMgPSB0aGlzLmNsaWVudC5nZXRPcHRpb25zKCk7XG5cbiAgICAvLyAxLiBUaW1lb3V0XG4gICAgaWYgKGNsaWVudE9wdGlvbnMudGltZW91dCkge1xuICAgICAgcmVxdWVzdENvbmZpZy50aW1lb3V0ID0gY2xpZW50T3B0aW9ucy50aW1lb3V0O1xuICAgIH1cblxuICAgIC8vIDIuIFByb3h5XG4gICAgaWYgKGNsaWVudE9wdGlvbnMucHJveHkpIHtcbiAgICAgIHJlcXVlc3RDb25maWcucHJveHkgPSBjbGllbnRPcHRpb25zLnByb3h5O1xuICAgIH1cblxuICAgIC8vIDMuIEhlYWRlcnNcbiAgICBpZiAoY2xpZW50T3B0aW9ucy5oZWFkZXJzICYmIE9iamVjdC5rZXlzKGNsaWVudE9wdGlvbnMuaGVhZGVycykubGVuZ3RoID4gMCkge1xuICAgICAgcmVxdWVzdENvbmZpZy5oZWFkZXJzID0ge1xuICAgICAgICAuLi5yZXF1ZXN0Q29uZmlnLmhlYWRlcnMsXG4gICAgICAgIC4uLmNsaWVudE9wdGlvbnMuaGVhZGVycyxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgLy8gNC4gT3V0cHV0XG4gICAgY29uc3Qgb3V0cHV0ID0gdGhpcy5jb25maWcub3V0cHV0ID8/IGNsaWVudENvbmZpZy5vdXRwdXQ7XG4gICAgaWYgKG91dHB1dCkge1xuICAgICAgcmVxdWVzdENvbmZpZy5yZXNwb25zZVR5cGUgPSBvdXRwdXQ7XG4gICAgfVxuXG4gICAgLy8gTk9ERSBTSURFXG4gICAgLy8gNS4gTWF4IHJlcXVlc3QgY29udGVudCBzaXplXG4gICAgaWYgKGNsaWVudE9wdGlvbnMubWF4Qm9keUxlbmd0aCkge1xuICAgICAgcmVxdWVzdENvbmZpZy5tYXhCb2R5TGVuZ3RoID0gY2xpZW50T3B0aW9ucy5tYXhCb2R5TGVuZ3RoO1xuICAgIH1cblxuICAgIC8vIE5PREUgU0lERVxuICAgIC8vIDYuIE1heCByZXNwb25zZSBjb250ZW50IHNpemVcbiAgICBpZiAoY2xpZW50T3B0aW9ucy5tYXhDb250ZW50TGVuZ3RoKSB7XG4gICAgICByZXF1ZXN0Q29uZmlnLm1heENvbnRlbnRMZW5ndGggPSBjbGllbnRPcHRpb25zLm1heENvbnRlbnRMZW5ndGg7XG4gICAgfVxuXG4gICAgcmV0dXJuIGF4aW9zKHJlcXVlc3RDb25maWcpO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRCYXNlVVJMKGJhc2VVcmw6IHN0cmluZykge1xuICAgIHRoaXMudXJsID0gYmFzZVVybC50b0xvd2VyQ2FzZSgpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgcHVibGljIGlkKHZhbHVlOiBzdHJpbmcgfCBudW1iZXIpIHtcbiAgICBpZiAoIVsnc3RyaW5nJywgJ251bWJlciddLmluY2x1ZGVzKHR5cGVvZiB2YWx1ZSkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQXJndW1lbnQgXCJ2YWx1ZVwiIG11c3QgYmUgc3RyaW5nIG9yIG51bWJlcicpO1xuICAgIH1cblxuICAgIHRoaXMudXJsID0gdXJsSm9pbih0aGlzLnVybCwgdmFsdWUudG9TdHJpbmcoKSk7XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIHB1YmxpYyBhY3Rpb24obmFtZTogc3RyaW5nKSB7XG4gICAgaWYgKHR5cGVvZiBuYW1lICE9PSAnc3RyaW5nJykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdBcmd1bWVudCBcIm5hbWVcIiBtdXN0IGJlIHN0cmluZycpO1xuICAgIH1cblxuICAgIHRoaXMuYWN0aW9uUGF0aCA9IG5hbWUudG9Mb3dlckNhc2UoKTtcblxuICAgIHN3aXRjaCAodGhpcy5hY3Rpb25QYXRoKSB7XG4gICAgICBjYXNlICdjc3ZkYXRhJzoge1xuICAgICAgICB0aGlzLmFjdGlvblBhdGggPSAnY3N2ZGF0YS90ZXh0OnBsYWluJztcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBjYXNlICdjc3ZlcnJvcic6IHtcbiAgICAgICAgdGhpcy5hY3Rpb25QYXRoID0gJ2NzdmVycm9yL3RleHQ6Y3N2JztcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBkZWZhdWx0OiB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMudXJsID0gdXJsSm9pbih0aGlzLnVybCwgdGhpcy5hY3Rpb25QYXRoKTtcbiAgICB0aGlzLnN1YlBhdGggPSB0aGlzLmJ1aWxkU3ViUGF0aCgpO1xuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgcmVxdWVzdDxCb2R5IGV4dGVuZHMgUmVxdWVzdERhdGE+KFxuICAgIGRhdGE/OiBSZXF1ZXN0RGF0YSxcbiAgICBwYXJhbXM/OiBSZXF1ZXN0UGFyYW1zLFxuICAgIHBlcmZvcm1BUElDYWxsPzogdHJ1ZSxcbiAgKTogUHJvbWlzZTxMaWJyYXJ5UmVzcG9uc2U8Qm9keT4+XG5cbiAgcHVibGljIGFzeW5jIHJlcXVlc3Q8Qm9keSBleHRlbmRzIFJlcXVlc3REYXRhLCBQYXJhbXMgZXh0ZW5kcyBVbmtub3duUmVjPihcbiAgICBkYXRhPzogQm9keSxcbiAgICBwYXJhbXM/OiBQYXJhbXMsXG4gICAgcGVyZm9ybUFQSUNhbGw/OiBmYWxzZSxcbiAgKTogUHJvbWlzZTxMaWJyYXJ5TG9jYWxSZXNwb25zZTxCb2R5LCBQYXJhbXM+PlxuXG4gIHB1YmxpYyBhc3luYyByZXF1ZXN0PEJvZHkgZXh0ZW5kcyBSZXF1ZXN0RGF0YSwgUGFyYW1zIGV4dGVuZHMgVW5rbm93blJlYz4oXG4gICAgZGF0YTogUmVxdWVzdERhdGEgfCBCb2R5ID0ge30sXG4gICAgcGFyYW1zOiBSZXF1ZXN0UGFyYW1zIHwgUGFyYW1zID0ge30sXG4gICAgcGVyZm9ybUFQSUNhbGwgPSB0cnVlLFxuICApOiBQcm9taXNlPExpYnJhcnlSZXNwb25zZTxCb2R5PiB8IExpYnJhcnlMb2NhbFJlc3BvbnNlPEJvZHksIFBhcmFtcz4+IHtcbiAgICBjb25zdCB1cmwgPSB0aGlzLmJ1aWxkRnVsbFVybCgpO1xuICAgIHRoaXMuc2V0QmFzZVVSTCh0aGlzLnJlc291cmNlKTtcblxuICAgIGlmICghcGVyZm9ybUFQSUNhbGwpIHtcbiAgICAgIGNvbnN0IGJvZHkgPSB0aGlzLmdldFJlcXVlc3RCb2R5KGRhdGEpO1xuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBib2R5LFxuICAgICAgICBwYXJhbXMsXG4gICAgICAgIHVybCxcbiAgICAgIH0gYXMgTGlicmFyeUxvY2FsUmVzcG9uc2U8Qm9keSwgUGFyYW1zPjtcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLm1ha2VSZXF1ZXN0KHVybCwgZGF0YSwgcGFyYW1zKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHJlc3BvbnNlLFxuICAgICAgICBib2R5OiByZXNwb25zZS5kYXRhLFxuICAgICAgfTtcbiAgICB9IGNhdGNoIChlcnI6IHVua25vd24pIHtcbiAgICAgIGlmIChlcnIgaW5zdGFuY2VvZiBBeGlvc0Vycm9yKSB7XG4gICAgICAgIGNvbnN0IGVycm9yOiBhbnkgPSBuZXcgRXJyb3IoKTtcblxuICAgICAgICBlcnJvci5jb2RlID0gZXJyLmNvZGU7XG4gICAgICAgIGVycm9yLmNvbmZpZyA9IGVyci5jb25maWc7XG5cbiAgICAgICAgaWYgKGVyci5yZXNwb25zZSkge1xuICAgICAgICAgIGNvbnN0IHtcbiAgICAgICAgICAgIHN0YXR1cyxcbiAgICAgICAgICAgIHN0YXR1c1RleHQsXG4gICAgICAgICAgICBkYXRhOiBib2R5LFxuICAgICAgICAgIH0gPSBlcnIucmVzcG9uc2U7XG5cbiAgICAgICAgICBlcnJvci5yZXNwb25zZSA9IGVyci5yZXNwb25zZTtcblxuICAgICAgICAgIGVycm9yLnN0YXR1c0NvZGUgPSBzdGF0dXM7XG4gICAgICAgICAgZXJyb3Iuc3RhdHVzVGV4dCA9IHN0YXR1c1RleHQ7XG5cbiAgICAgICAgICBjb25zdCBlcnJvck1lc3NhZ2UgPSBib2R5Py5FcnJvck1lc3NhZ2UgPz8gZXJyLm1lc3NhZ2U7XG4gICAgICAgICAgZXJyb3Iub3JpZ2luYWxNZXNzYWdlID0gZXJyb3JNZXNzYWdlO1xuICAgICAgICAgIGVycm9yLm1lc3NhZ2UgPSBgVW5zdWNjZXNzZnVsOiBTdGF0dXMgQ29kZTogXCIke2Vycm9yLnN0YXR1c0NvZGV9XCIgTWVzc2FnZTogXCIke2Vycm9yTWVzc2FnZX1cImA7XG5cbiAgICAgICAgICBpZiAoYm9keSkge1xuICAgICAgICAgICAgLy8gaHR0cHM6Ly9kZXYubWFpbGpldC5jb20vZW1haWwvZ3VpZGVzL3NlbmQtYXBpLXYzMS8jc2VuZC1pbi1idWxrXG4gICAgICAgICAgICBjb25zdCBmdWxsTWVzc2FnZSA9IGJvZHkuTWVzc2FnZXM/LlswXT8uRXJyb3JzPy5bMF0/LkVycm9yTWVzc2FnZTtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgZnVsbE1lc3NhZ2UgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgIGVycm9yLm1lc3NhZ2UgKz0gYDtcXG4ke2Z1bGxNZXNzYWdlfWA7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIHYzLjEgY2FzZVxuICAgICAgICAgICAgLy8gaHR0cHM6Ly9kZXYubWFpbGpldC5jb20vZW1haWwvZ3VpZGVzL3NlbmQtYXBpLXYzMS8jc2FuZGJveC1tb2RlXG4gICAgICAgICAgICBzZXRWYWx1ZUlmTm90TmlsKGVycm9yLCAnRXJyb3JNZXNzYWdlJywgYm9keS5FcnJvck1lc3NhZ2UpO1xuICAgICAgICAgICAgc2V0VmFsdWVJZk5vdE5pbChlcnJvciwgJ0Vycm9yQ29kZScsIGJvZHkuRXJyb3JDb2RlKTtcbiAgICAgICAgICAgIHNldFZhbHVlSWZOb3ROaWwoZXJyb3IsICdFcnJvcklkZW50aWZpZXInLCBib2R5LkVycm9ySWRlbnRpZmllcik7XG4gICAgICAgICAgICBzZXRWYWx1ZUlmTm90TmlsKGVycm9yLCAnRXJyb3JSZWxhdGVkVG8nLCBib2R5LkVycm9yUmVsYXRlZFRvKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZXJyb3IucmVzcG9uc2UgPSBudWxsO1xuXG4gICAgICAgICAgZXJyb3Iuc3RhdHVzQ29kZSA9IG51bGw7XG4gICAgICAgICAgZXJyb3Iuc3RhdHVzVGV4dCA9IG51bGw7XG5cbiAgICAgICAgICBlcnJvci5vcmlnaW5hbE1lc3NhZ2UgPSBlcnIubWVzc2FnZTtcbiAgICAgICAgICBlcnJvci5tZXNzYWdlID0gYFVuc3VjY2Vzc2Z1bDogRXJyb3IgQ29kZTogXCIke2Vycm9yLmNvZGV9XCIgTWVzc2FnZTogXCIke2Vyci5tZXNzYWdlfVwiYDtcbiAgICAgICAgfVxuXG4gICAgICAgIHRocm93IGVycm9yO1xuICAgICAgfVxuXG4gICAgICB0aHJvdyBlcnI7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIHN0YXRpYyBwcm90b2NvbCA9ICdodHRwczovLycgYXMgY29uc3Q7XG5cbiAgcHVibGljIHN0YXRpYyBwYXJzZVRvSlNPTmIodGV4dDogc3RyaW5nKSB7XG4gICAgaWYgKHR5cGVvZiB0ZXh0ICE9PSAnc3RyaW5nJykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdBcmd1bWVudCBcInRleHRcIiBtdXN0IGJlIHN0cmluZycpO1xuICAgIH1cblxuICAgIGxldCBib2R5O1xuICAgIHRyeSB7XG4gICAgICBib2R5ID0gSlNPTmIucGFyc2UodGV4dCk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgYm9keSA9IHt9O1xuICAgIH1cblxuICAgIHJldHVybiBib2R5O1xuICB9XG5cbiAgcHVibGljIHN0YXRpYyBpc0Jyb3dzZXIoKSB7XG4gICAgcmV0dXJuIHR5cGVvZiB3aW5kb3cgPT09ICdvYmplY3QnO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IFJlcXVlc3Q7XG4iLCJpbXBvcnQgeyBDb21tb24gfSBmcm9tICcuL0NvbW1vbic7XG5cbmV4cG9ydCBuYW1lc3BhY2UgRHJhZnRDYW1wYWlnbiB7XG4gIGV4cG9ydCBlbnVtIEVkaXRNb2RlIHtcbiAgICBUb29sMiA9ICd0b29sMicsXG4gICAgSFRNTDIgPSAnaHRtbDInLFxuICAgIE1KTUwgPSAnbWptbCdcbiAgfVxuXG4gIGV4cG9ydCBlbnVtIENhbXBhaWduRHJhZnRTdGF0dXMge1xuICAgIEFYQ2FuY2VsZWQgPSAtMyxcbiAgICBEZWxldGVkID0gLTIsXG4gICAgQXJjaGl2ZWQgPSAtMSxcbiAgICBEcmFmdCA9IDAsXG4gICAgUHJvZ3JhbW1lZCA9IDEsXG4gICAgU2VudCA9IDIsXG4gICAgQVhUZXN0ZWQgPSAzLFxuICAgIEFYU2VsZWN0ZWQgPSA0XG4gIH1cblxuICBleHBvcnQgZW51bSBDYW1wYWlnbkRyYWZ0U2VuZGluZ1N0YXR1cyB7XG4gICAgQVhDYW5jZWxsZWQgPSAnQVhDYW5jZWxsZWQnLFxuICAgIERlbGV0ZWQgPSAnRGVsZXRlZCcsXG4gICAgQXJjaGl2ZWQgPSAnQXJjaGl2ZWQnLFxuICAgIERyYWZ0ID0gJ0RyYWZ0JyxcbiAgICBQcm9ncmFtbWVkID0gJ1Byb2dyYW1tZWQnLFxuICAgIFNlbnQgPSAnU2VudCcsXG4gICAgQVhUZXN0ZWQgPSAnQVhUZXN0ZWQnLFxuICAgIEFYU2VsZWN0ZWQgPSAnQVhTZWxlY3RlZCdcbiAgfVxuXG4gIGV4cG9ydCBpbnRlcmZhY2UgUmVjaXBpZW50IHtcbiAgICBFbWFpbDogc3RyaW5nO1xuICAgIE5hbWU/OiBzdHJpbmdcbiAgfVxuXG4gIGV4cG9ydCBpbnRlcmZhY2UgQ2FtcGFpZ25EcmFmdDxBWFRlc3RpbmcgPSBDb21tb24uVW5rbm93blJlYz4ge1xuICAgIElEOiBudW1iZXI7XG4gICAgQVhGcmFjdGlvbjogbnVtYmVyO1xuICAgIEFYRnJhY3Rpb25OYW1lOiBzdHJpbmc7XG4gICAgQVhUZXN0aW5nOiBBWFRlc3Rpbmc7XG4gICAgQ3VycmVudDogbnVtYmVyO1xuICAgIEVkaXRNb2RlOiBFZGl0TW9kZTtcbiAgICBJc1N0YXJyZWQ6IGJvb2xlYW47XG4gICAgSXNUZXh0UGFydEluY2x1ZGVkOiBib29sZWFuO1xuICAgIFJlcGx5RW1haWw6IHN0cmluZztcbiAgICBTZW5kZXJOYW1lOiBzdHJpbmc7XG4gICAgVGVtcGxhdGVJRDogbnVtYmVyO1xuICAgIFRpdGxlOiBzdHJpbmc7XG4gICAgQ2FtcGFpZ25JRDogbnVtYmVyO1xuICAgIENvbnRhY3RzTGlzdElEOiBudW1iZXI7XG4gICAgQ3JlYXRlZEF0OiBzdHJpbmc7XG4gICAgRGVsaXZlcmVkQXQ6IHN0cmluZztcbiAgICBMb2NhbGU6IHN0cmluZztcbiAgICBNb2RpZmllZEF0OiBzdHJpbmc7XG4gICAgUHJlc2V0OiBzdHJpbmc7XG4gICAgU2VnbWVudGF0aW9uSUQ6IG51bWJlcjtcbiAgICBTZW5kZXI6IHN0cmluZztcbiAgICBTZW5kZXJFbWFpbDogc3RyaW5nO1xuICAgIFN0YXR1czogQ2FtcGFpZ25EcmFmdFN0YXR1cztcbiAgICBTdWJqZWN0OiBzdHJpbmc7XG4gICAgVXJsOiBzdHJpbmc7XG4gICAgVXNlZDogYm9vbGVhbjtcbiAgfVxuXG4gIGV4cG9ydCBpbnRlcmZhY2UgQ2FtcGFpZ25EcmFmdERldGFpbENvbnRlbnQ8SGVhZGVycyA9IENvbW1vbi5Vbmtub3duUmVjPiB7XG4gICAgSGVhZGVyczogSGVhZGVycztcbiAgICAnSHRtbC1wYXJ0Jzogc3RyaW5nO1xuICAgICdUZXh0LXBhcnQnOiBzdHJpbmc7XG4gICAgTUpNTENvbnRlbnQ6IHN0cmluZztcbiAgfVxuXG4gIGV4cG9ydCBpbnRlcmZhY2UgQ2FtcGFpZ25EcmFmdFNjaGVkdWxlIHtcbiAgICBEYXRlOiBzdHJpbmc7XG4gICAgU3RhdHVzOiBzdHJpbmc7XG4gIH1cblxuICAvLyBSRVFVRVNUIFBBUlRcbiAgZXhwb3J0IHR5cGUgUG9zdENhbXBhaWduRHJhZnRCb2R5PEFYVGVzdGluZyA9IENvbW1vbi5Vbmtub3duUmVjPiA9IHtcbiAgICBMb2NhbGU6IHN0cmluZztcbiAgICBTdWJqZWN0OiBzdHJpbmc7XG5cbiAgICBBWEZyYWN0aW9uPzogbnVtYmVyO1xuICAgIEFYRnJhY3Rpb25OYW1lPzogc3RyaW5nO1xuICAgIEFYVGVzdGluZz86IEFYVGVzdGluZztcbiAgICBDdXJyZW50PzogbnVtYmVyO1xuICAgIEVkaXRNb2RlPzogRWRpdE1vZGU7XG4gICAgSXNTdGFycmVkPzogYm9vbGVhbjtcbiAgICBJc1RleHRQYXJ0SW5jbHVkZWQ/OiBib29sZWFuO1xuICAgIFJlcGx5RW1haWw/OiBzdHJpbmc7XG4gICAgU2VuZGVyTmFtZT86IHN0cmluZztcbiAgICBUZW1wbGF0ZUlEPzogbnVtYmVyO1xuICAgIFRpdGxlPzogc3RyaW5nO1xuICAgIENvbnRhY3RzTGlzdElEPzogbnVtYmVyO1xuICAgIENvbnRhY3RzTGlzdEFsdD86IHN0cmluZztcbiAgICBTZWdtZW50YXRpb25JRD86IG51bWJlcjtcbiAgICBTZWdtZW50YXRpb25BbHQ/OiBzdHJpbmc7XG4gICAgU2VuZGVyPzogc3RyaW5nO1xuICAgIFNlbmRlckVtYWlsPzogc3RyaW5nO1xuICB9XG5cbiAgZXhwb3J0IHR5cGUgUHV0Q2FtcGFpZ25EcmFmdEJvZHk8QVhUZXN0aW5nID0gQ29tbW9uLlVua25vd25SZWM+ID1cbiAgICBPbWl0PFBhcnRpYWw8UG9zdENhbXBhaWduRHJhZnRCb2R5PEFYVGVzdGluZz4+LCAnQ29udGFjdHNMaXN0QWx0Jz4gJlxuICB7XG4gICAgU3RhdHVzPzogQ2FtcGFpZ25EcmFmdFN0YXR1c1xuICB9XG5cbiAgZXhwb3J0IHR5cGUgR2V0Q2FtcGFpZ25EcmFmdFF1ZXJ5UGFyYW1zID0gUGFydGlhbDxDb21tb24uUGFnaW5hdGlvbj4gJiB7XG4gICAgQVhUZXN0aW5nPzogbnVtYmVyO1xuICAgIENhbXBhaWduPzogbnVtYmVyO1xuICAgIENvbnRhY3RzTGlzdD86IG51bWJlcjtcbiAgICBEZWxpdmVyZWRBdD86IHN0cmluZztcbiAgICBFZGl0TW9kZT86IEVkaXRNb2RlO1xuICAgIElzQXJjaGl2ZWQ/OiBib29sZWFuO1xuICAgIElzQ2FtcGFpZ24/OiBib29sZWFuO1xuICAgIElzRGVsZXRlZD86IGJvb2xlYW47XG4gICAgSXNIYW5kbGVkPzogYm9vbGVhbjtcbiAgICBJc1N0YXJyZWQ/OiBib29sZWFuO1xuICAgIE1vZGlmaWVkPzogYm9vbGVhbjtcbiAgICBOZXdzTGV0dGVyVGVtcGxhdGU/OiBudW1iZXI7XG4gICAgU3RhdHVzPzogQ2FtcGFpZ25EcmFmdFN0YXR1cztcbiAgICBTdWJqZWN0Pzogc3RyaW5nO1xuICAgIFRlbXBsYXRlPzogbnVtYmVyO1xuICB9XG5cbiAgZXhwb3J0IHR5cGUgUG9zdENhbXBhaWduRHJhZnREZXRhaWxDb250ZW50Qm9keTxIZWFkZXJzID0gQ29tbW9uLlVua25vd25SZWM+ID1cbiAgICBQYXJ0aWFsPENhbXBhaWduRHJhZnREZXRhaWxDb250ZW50PEhlYWRlcnM+PlxuXG4gIGV4cG9ydCB0eXBlIFBvc3RDYW1wYWlnbkRyYWZ0U2NoZWR1bGVCb2R5ID0ge1xuICAgIERhdGU6IHN0cmluZztcbiAgfVxuXG4gIGV4cG9ydCB0eXBlIFB1dENhbXBhaWduRHJhZnRTY2hlZHVsZUJvZHkgPSBQYXJ0aWFsPFBvc3RDYW1wYWlnbkRyYWZ0U2NoZWR1bGVCb2R5PlxuXG4gIGV4cG9ydCB0eXBlIFBvc3RDYW1wYWlnbkRyYWZ0VGVzdEJvZHkgPSB7XG4gICAgUmVjaXBpZW50czogUmVjaXBpZW50W11cbiAgfVxuXG4gIC8vIFJFU1BPTlNFIFBBUlRcbiAgdHlwZSBDYW1wYWlnbkRyYWZ0UmVzcG9uc2UgPSBDb21tb24uUmVzcG9uc2U8Q2FtcGFpZ25EcmFmdFtdPjtcbiAgdHlwZSBDYW1wYWlnbkRyYWZ0U2NoZWR1bGVSZXNwb25zZSA9IENvbW1vbi5SZXNwb25zZTxDYW1wYWlnbkRyYWZ0U2NoZWR1bGVbXT47XG4gIHR5cGUgQ2FtcGFpZ25EcmFmdERldGFpbENvbnRlbnRSZXNwb25zZTxIZWFkZXJzID0gQ29tbW9uLlVua25vd25SZWM+ID1cbiAgICBDb21tb24uUmVzcG9uc2U8QXJyYXk8Q2FtcGFpZ25EcmFmdERldGFpbENvbnRlbnQ8SGVhZGVycz4+PjtcbiAgdHlwZSBDYW1wYWlnbkRyYWZ0U3RhdHVzUmVzcG9uc2UgPVxuICAgIENvbW1vbi5SZXNwb25zZTxBcnJheTx7IFN0YXR1czogQ2FtcGFpZ25EcmFmdFNlbmRpbmdTdGF0dXMgfT4+O1xuXG4gIGV4cG9ydCB0eXBlIFBvc3RDYW1wYWlnbkRyYWZ0UmVzcG9uc2UgPSBDYW1wYWlnbkRyYWZ0UmVzcG9uc2VcbiAgZXhwb3J0IHR5cGUgUHV0Q2FtcGFpZ25EcmFmdFJlc3BvbnNlID0gQ2FtcGFpZ25EcmFmdFJlc3BvbnNlXG4gIGV4cG9ydCB0eXBlIEdldENhbXBhaWduRHJhZnRSZXNwb25zZSA9IENhbXBhaWduRHJhZnRSZXNwb25zZVxuXG4gIGV4cG9ydCB0eXBlIFBvc3RDYW1wYWlnbkRyYWZ0U2NoZWR1bGVSZXNwb25zZSA9IENhbXBhaWduRHJhZnRTY2hlZHVsZVJlc3BvbnNlXG4gIGV4cG9ydCB0eXBlIFB1dENhbXBhaWduRHJhZnRTY2hlZHVsZVJlc3BvbnNlID0gQ2FtcGFpZ25EcmFmdFNjaGVkdWxlUmVzcG9uc2VcbiAgZXhwb3J0IHR5cGUgR2V0Q2FtcGFpZ25EcmFmdFNjaGVkdWxlUmVzcG9uc2UgPSBDYW1wYWlnbkRyYWZ0U2NoZWR1bGVSZXNwb25zZVxuXG4gIGV4cG9ydCB0eXBlIFBvc3RDYW1wYWlnbkRyYWZ0RGV0YWlsQ29udGVudFJlc3BvbnNlPEhlYWRlcnMgPSBDb21tb24uVW5rbm93blJlYz4gPVxuICAgIENhbXBhaWduRHJhZnREZXRhaWxDb250ZW50UmVzcG9uc2U8SGVhZGVycz5cbiAgZXhwb3J0IHR5cGUgR2V0Q2FtcGFpZ25EcmFmdERldGFpbENvbnRlbnRSZXNwb25zZTxIZWFkZXJzID0gQ29tbW9uLlVua25vd25SZWM+ID1cbiAgICBDYW1wYWlnbkRyYWZ0RGV0YWlsQ29udGVudFJlc3BvbnNlPEhlYWRlcnM+XG5cbiAgZXhwb3J0IHR5cGUgUG9zdENhbXBhaWduRHJhZnRTZW5kID0gQ2FtcGFpZ25EcmFmdFN0YXR1c1Jlc3BvbnNlXG4gIGV4cG9ydCB0eXBlIFBvc3RDYW1wYWlnbkRyYWZ0VGVzdCA9IENhbXBhaWduRHJhZnRTdGF0dXNSZXNwb25zZVxuICBleHBvcnQgdHlwZSBHZXRDYW1wYWlnbkRyYWZ0U3RhdHVzID0gQ2FtcGFpZ25EcmFmdFN0YXR1c1Jlc3BvbnNlXG59XG5cbmV4cG9ydCBuYW1lc3BhY2UgU2VudENhbXBhaWduIHtcbiAgZXhwb3J0IGVudW0gQ2FtcGFpZ25UeXBlIHtcbiAgICBUcmFuc2FjdGlvbmFsID0gMSxcbiAgICBNYXJrZXRpbmcgPSAyLFxuICAgIFVua25vd24gPSAzLFxuICB9XG5cbiAgZXhwb3J0IGludGVyZmFjZSBDYW1wYWlnbiB7XG4gICAgSUQ6IG51bWJlcjtcbiAgICBJc0RlbGV0ZWQ6IGJvb2xlYW47XG4gICAgSXNTdGFycmVkOiBib29sZWFuO1xuICAgIENhbXBhaWduVHlwZTogQ2FtcGFpZ25UeXBlO1xuICAgIENyZWF0ZWRBdDogc3RyaW5nO1xuICAgIEN1c3RvbVZhbHVlOiBzdHJpbmc7XG4gICAgRmlyc3RNZXNzYWdlSUQ6IG51bWJlcjtcbiAgICBGcm9tRW1haWw6IHN0cmluZztcbiAgICBGcm9tSUQ6IG51bWJlcjtcbiAgICBGcm9tTmFtZTogc3RyaW5nO1xuICAgIEhhc0h0bWxDb3VudDogbnVtYmVyO1xuICAgIEhhc1R4dENvdW50OiBudW1iZXI7XG4gICAgTGlzdElEOiBudW1iZXI7XG4gICAgTmV3c0xldHRlcklEOiBudW1iZXI7XG4gICAgU2VnbWVudGF0aW9uSUQ6IG51bWJlcjtcbiAgICBTZW5kRW5kQXQ6IHN0cmluZztcbiAgICBTZW5kU3RhcnRBdDogc3RyaW5nO1xuICAgIFNwYW1hc3NTY29yZTogbnVtYmVyO1xuICAgIFN1YmplY3Q6IHN0cmluZztcbiAgICBXb3JrZmxvd0lEOiBudW1iZXI7XG4gIH1cblxuICAvLyBSRVFVRVNUIFBBUlRcbiAgZXhwb3J0IHR5cGUgUHV0Q2FtcGFpZ25Cb2R5ID0ge1xuICAgIElzRGVsZXRlZD86IGJvb2xlYW47XG4gICAgSXNTdGFycmVkPzogYm9vbGVhbjtcbiAgfVxuXG4gIGV4cG9ydCB0eXBlIEdldENhbXBhaWduUXVlcnlQYXJhbXMgPSBQYXJ0aWFsPENvbW1vbi5UaW1lc3RhbXBQZXJpb2Q+ICZcbiAgICBQYXJ0aWFsPENvbW1vbi5QYWdpbmF0aW9uPiAmXG4gIHtcbiAgICBDYW1wYWlnbklEPzogbnVtYmVyO1xuICAgIENvbnRhY3RzTGlzdElEPzogbnVtYmVyO1xuICAgIEN1c3RvbUNhbXBhaWduPzogc3RyaW5nO1xuICAgIEZyb20/OiBzdHJpbmc7XG4gICAgRnJvbURvbWFpbj86IHN0cmluZztcbiAgICBGcm9tSUQ/OiBudW1iZXI7XG4gICAgRnJvbVR5cGU/OiBDYW1wYWlnblR5cGU7XG4gICAgSXNEZWxldGVkPzogYm9vbGVhbjtcbiAgICBJc05ld3NsZXR0ZXJUb29sPzogYm9vbGVhbjtcbiAgICBJc1N0YXJyZWQ/OiBib29sZWFuO1xuICAgIFBlcmlvZD86IENvbW1vbi5QZXJpb2Q7XG4gICAgV29ya2Zsb3dJRD86IG51bWJlcjtcbiAgfVxuXG4gIC8vIFJFU1BPTlNFIFBBUlRcbiAgdHlwZSBDYW1wYWlnblJlc3BvbnNlID0gQ29tbW9uLlJlc3BvbnNlPENhbXBhaWduW10+O1xuXG4gIGV4cG9ydCB0eXBlIFB1dENhbXBhaWduUmVzcG9uc2UgPSBDYW1wYWlnblJlc3BvbnNlXG4gIGV4cG9ydCB0eXBlIEdldENhbXBhaWduUmVzcG9uc2UgPSBDYW1wYWlnblJlc3BvbnNlXG59XG4iLCJleHBvcnQgbmFtZXNwYWNlIENvbW1vbiB7XG4gIGV4cG9ydCB0eXBlIFVua25vd25SZWMgPSBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPlxuXG4gIGV4cG9ydCBpbnRlcmZhY2UgUGFnaW5hdGlvbiB7XG4gICAgY291bnRPbmx5OiBib29sZWFuO1xuXG4gICAgTGltaXQ6IG51bWJlcjtcbiAgICBPZmZzZXQ6IG51bWJlcjtcbiAgICBTb3J0OiBzdHJpbmc7XG4gIH1cblxuICBleHBvcnQgaW50ZXJmYWNlIFRpbWVzdGFtcFBlcmlvZCB7XG4gICAgRnJvbVRTOiBzdHJpbmcgfCBudW1iZXI7XG4gICAgVG9UUzogc3RyaW5nIHwgbnVtYmVyO1xuICB9XG5cbiAgZXhwb3J0IHR5cGUgUmVzcG9uc2U8RW50aXR5PiA9IHtcbiAgICBDb3VudDogbnVtYmVyO1xuICAgIFRvdGFsOiBudW1iZXI7XG4gICAgRGF0YTogRW50aXR5O1xuICB9XG5cbiAgZXhwb3J0IGVudW0gUGVyaW9kIHtcbiAgICBEYXkgPSAnRGF5JyxcbiAgICBXZWVrID0gJ1dlZWsnLFxuICAgIE1vbnRoID0gJ01vbnRoJyxcbiAgICBZZWFyID0gJ1llYXInLFxuICB9XG59XG4iLCJpbXBvcnQgeyBDb21tb24gfSBmcm9tICcuL0NvbW1vbic7XG5cbmV4cG9ydCBuYW1lc3BhY2UgQ29udGFjdCB7XG4gIGV4cG9ydCBpbnRlcmZhY2UgQ29udGFjdCB7XG4gICAgSUQ6IG51bWJlcjtcbiAgICBJc0V4Y2x1ZGVkRnJvbUNhbXBhaWduczogYm9vbGVhbjtcbiAgICBOYW1lOiBzdHJpbmc7XG4gICAgQ3JlYXRlZEF0OiBzdHJpbmc7XG4gICAgRGVsaXZlcmVkQ291bnQ6IG51bWJlcjtcbiAgICBFbWFpbDogc3RyaW5nO1xuICAgIEV4Y2x1c2lvbkZyb21DYW1wYWlnbnNVcGRhdGVkQXQ6IHN0cmluZztcbiAgICBJc09wdEluUGVuZGluZzogYm9vbGVhbjtcbiAgICBJc1NwYW1Db21wbGFpbmluZzogYm9vbGVhbjtcbiAgICBMYXN0QWN0aXZpdHlBdDogc3RyaW5nO1xuICAgIExhc3RVcGRhdGVBdDogc3RyaW5nO1xuICB9XG5cbiAgLy8gUkVRVUVTVCBQQVJUXG4gIGV4cG9ydCB0eXBlIFBvc3RDb250YWN0Qm9keSA9IHtcbiAgICBFbWFpbDogc3RyaW5nO1xuICAgIElzRXhjbHVkZWRGcm9tQ2FtcGFpZ25zPzogYm9vbGVhbjtcbiAgICBOYW1lPzogc3RyaW5nO1xuICB9XG5cbiAgZXhwb3J0IHR5cGUgUHV0Q29udGFjdEJvZHkgPSBPbWl0PFBvc3RDb250YWN0Qm9keSwgJ0VtYWlsJz5cblxuICBleHBvcnQgdHlwZSBHZXRDb250YWN0UXVlcnlQYXJhbXMgPSBQYXJ0aWFsPENvbW1vbi5QYWdpbmF0aW9uPiAmIHtcbiAgICBDYW1wYWlnbj86IG51bWJlcjtcbiAgICBDb250YWN0c0xpc3Q/OiBudW1iZXI7XG4gICAgSXNFeGNsdWRlZEZyb21DYW1wYWlnbnM/OiBib29sZWFuO1xuICB9XG5cbiAgLy8gUkVTUE9OU0UgUEFSVFxuICB0eXBlIENvbnRhY3RSZXNwb25zZSA9IHtcbiAgICBDb3VudDogbnVtYmVyO1xuICAgIFRvdGFsOiBudW1iZXI7XG4gICAgRGF0YTogQ29udGFjdFtdO1xuICB9O1xuXG4gIGV4cG9ydCB0eXBlIFBvc3RDb250YWN0UmVzcG9uc2UgPSBDb250YWN0UmVzcG9uc2VcbiAgZXhwb3J0IHR5cGUgUHV0Q29udGFjdFJlc3BvbnNlID0gQ29udGFjdFJlc3BvbnNlXG4gIGV4cG9ydCB0eXBlIEdldENvbnRhY3RSZXNwb25zZSA9IENvbnRhY3RSZXNwb25zZVxufVxuXG5leHBvcnQgbmFtZXNwYWNlIENvbnRhY3RMaXN0IHtcbiAgZXhwb3J0IGludGVyZmFjZSBDb250YWN0TGlzdCB7XG4gICAgSUQ6IG51bWJlcjtcbiAgICBJc0RlbGV0ZWQ6IGJvb2xlYW47XG4gICAgTmFtZTogc3RyaW5nO1xuICAgIEFkZHJlc3M6IHN0cmluZztcbiAgICBDcmVhdGVkQXQ6IHN0cmluZztcbiAgICBTdWJzY3JpYmVyQ291bnQ6IG51bWJlcjtcbiAgfVxuXG4gIC8vIFJFUVVFU1QgUEFSVFxuICBleHBvcnQgdHlwZSBQb3N0Q29udGFjdExpc3RCb2R5ID0ge1xuICAgIE5hbWU6IHN0cmluZztcbiAgICBJc0RlbGV0ZWQ/OiBib29sZWFuO1xuICB9XG5cbiAgZXhwb3J0IHR5cGUgUHV0Q29udGFjdExpc3RCb2R5ID0gUGFydGlhbDxQb3N0Q29udGFjdExpc3RCb2R5PlxuXG4gIGV4cG9ydCB0eXBlIEdldENvbnRhY3RMaXN0UXVlcnlQYXJhbXMgPSBQYXJ0aWFsPENvbW1vbi5QYWdpbmF0aW9uPiAmIHtcbiAgICBBZGRyZXNzPzogc3RyaW5nO1xuICAgIEV4Y2x1ZGVJRD86IG51bWJlcjtcbiAgICBJc0RlbGV0ZWQ/OiBib29sZWFuO1xuICAgIE5hbWU/OiBzdHJpbmc7XG4gIH1cblxuICAvLyBSRVNQT05TRSBQQVJUXG4gIHR5cGUgQ29udGFjdExpc3RSZXNwb25zZSA9IENvbW1vbi5SZXNwb25zZTxDb250YWN0TGlzdFtdPjtcblxuICBleHBvcnQgdHlwZSBQb3N0Q29udGFjdExpc3RSZXNwb25zZSA9IENvbnRhY3RMaXN0UmVzcG9uc2VcbiAgZXhwb3J0IHR5cGUgUHV0Q29udGFjdExpc3RSZXNwb25zZSA9IENvbnRhY3RMaXN0UmVzcG9uc2VcbiAgZXhwb3J0IHR5cGUgR2V0Q29udGFjdExpc3RSZXNwb25zZSA9IENvbnRhY3RMaXN0UmVzcG9uc2Vcbn1cblxuZXhwb3J0IG5hbWVzcGFjZSBCdWxrQ29udGFjdE1hbmFnZW1lbnQge1xuICBleHBvcnQgZW51bSBNYW5hZ2VDb250YWN0c0FjdGlvbiB7XG4gICAgQWRkRm9yY2UgPSAnYWRkZm9yY2UnLFxuICAgIEFkZE5vRm9yY2UgPSAnYWRkbm9mb3JjZScsXG4gICAgUmVtb3ZlID0gJ3JlbW92ZScsXG4gICAgVW5TdWIgPSAndW5zdWInXG4gIH1cblxuICBleHBvcnQgZW51bSBJbXBvcnRMaXN0QWN0aW9uIHtcbiAgICBBZGRGb3JjZSA9ICdhZGRmb3JjZScsXG4gICAgQWRkTm9Gb3JjZSA9ICdhZGRub2ZvcmNlJyxcbiAgICBVblN1YiA9ICd1bnN1YicsXG4gICAgRHVwbGljYXRlT3ZlcnJpZGUgPSAnZHVwbGljYXRlLW92ZXJyaWRlJyxcbiAgICBEdXBsaWNhdGVOb092ZXJyaWRlID0gJ2R1cGxpY2F0ZS1uby1vdmVycmlkZSdcbiAgfVxuXG4gIGV4cG9ydCBlbnVtIEltcG9ydENTVk1ldGhvZCB7XG4gICAgQWRkRm9yY2UgPSAnYWRkZm9yY2UnLFxuICAgIEFkZE5vRm9yY2UgPSAnYWRkbm9mb3JjZScsXG4gICAgUmVtb3ZlID0gJ3JlbW92ZScsXG4gICAgVW5TdWIgPSAndW5zdWInLFxuICAgIEV4Y2x1ZGVNYXJrZXRpbmcgPSAnZXhjbHVkZW1hcmtldGluZycsXG4gICAgSW5jbHVkZU1hcmtldGluZyA9ICdpbmNsdWRlbWFya2V0aW5nJ1xuICB9XG5cbiAgZXhwb3J0IGVudW0gQ1NWSW1wb3J0U3RhdHVzIHtcbiAgICBVcGxvYWQgPSAnVXBsb2FkJyxcbiAgICBDb21wbGV0ZWQgPSAnQ29tcGxldGVkJyxcbiAgICBBYm9ydCA9ICdBYm9ydCcsXG4gIH1cblxuICBleHBvcnQgZW51bSBKb2JTdGF0dXMge1xuICAgIENvbXBsZXRlZCA9ICdDb21wbGV0ZWQnLFxuICAgIEluUHJvZ3Jlc3MgPSAnSW4gUHJvZ3Jlc3MnLFxuICAgIEVycm9yID0gJ0Vycm9yJ1xuICB9XG5cbiAgZXhwb3J0IGludGVyZmFjZSBKb2Ige1xuICAgIEpvYklEOiBudW1iZXI7XG4gIH1cblxuICBleHBvcnQgaW50ZXJmYWNlIENTVkltcG9ydCB7XG4gICAgSUQ6IG51bWJlcjtcbiAgICBFcnJUcmVzaG9sZDogbnVtYmVyO1xuICAgIEltcG9ydE9wdGlvbnM6IHN0cmluZztcbiAgICBNZXRob2Q6IEltcG9ydENTVk1ldGhvZDtcbiAgICBBbGl2ZUF0OiBzdHJpbmc7XG4gICAgQ29udGFjdHNMaXN0SUQ6IG51bWJlcjtcbiAgICBDb3VudDogbnVtYmVyO1xuICAgIEN1cnJlbnQ6IG51bWJlcjtcbiAgICBEYXRhSUQ6IG51bWJlcjtcbiAgICBFcnJjb3VudDogbnVtYmVyO1xuICAgIEpvYkVuZDogc3RyaW5nO1xuICAgIEpvYlN0YXJ0OiBzdHJpbmc7XG4gICAgUmVxdWVzdEF0OiBzdHJpbmc7XG4gICAgU3RhdHVzOiBDU1ZJbXBvcnRTdGF0dXM7XG4gIH1cblxuICBleHBvcnQgaW50ZXJmYWNlIENvbnRhY3RMaXN0IHtcbiAgICBMaXN0SUQ6IG51bWJlcjtcbiAgICBBY3Rpb246IE1hbmFnZUNvbnRhY3RzQWN0aW9uO1xuICB9XG5cbiAgZXhwb3J0IGludGVyZmFjZSBDb250YWN0TWFuYWdlTWFueUNvbnRhY3RzIHtcbiAgICBDb250YWN0c0xpc3RzOiBDb250YWN0TGlzdFtdO1xuICAgIENvdW50OiBudW1iZXI7XG4gICAgRXJyb3I6IHN0cmluZztcbiAgICBFcnJvckZpbGU6IHN0cmluZztcbiAgICBKb2JFbmQ6IHN0cmluZztcbiAgICBKb2JTdGFydDogc3RyaW5nO1xuICAgIFN0YXR1czogSm9iU3RhdHVzO1xuICB9XG5cbiAgZXhwb3J0IGludGVyZmFjZSBDb250YWN0c0xpc3RJbXBvcnRMaXN0IHtcbiAgICBKb2JJRDogbnVtYmVyO1xuICAgIEFjdGlvbjogSW1wb3J0TGlzdEFjdGlvbjtcbiAgICBMaXN0SUQ6IG51bWJlcjtcbiAgfVxuXG4gIC8vIFJFUVVFU1QgUEFSVFxuICBleHBvcnQgdHlwZSBDb250YWN0Qm9keTxQcm9wZXJ0aWVzID0gQ29tbW9uLlVua25vd25SZWM+ID0ge1xuICAgIEVtYWlsOiBzdHJpbmc7XG4gICAgTmFtZT86IHN0cmluZztcbiAgICBJc0V4Y2x1ZGVkRnJvbUNhbXBhaWducz86IGJvb2xlYW47XG4gICAgUHJvcGVydGllcz86IFByb3BlcnRpZXM7XG4gIH1cblxuICBleHBvcnQgdHlwZSBQb3N0Q29udGFjdE1hbmFnZU1hbnlDb250YWN0c0JvZHk8UHJvcGVydGllcyA9IENvbW1vbi5Vbmtub3duUmVjPiA9IHtcbiAgICBDb250YWN0czogQXJyYXk8Q29udGFjdEJvZHk8UHJvcGVydGllcz4+O1xuICAgIENvbnRhY3RzTGlzdHM/OiBDb250YWN0TGlzdFtdO1xuICB9XG5cbiAgZXhwb3J0IHR5cGUgUG9zdENvbnRhY3RzTGlzdEltcG9ydExpc3RCb2R5ID0ge1xuICAgIEFjdGlvbjogSW1wb3J0TGlzdEFjdGlvbjtcbiAgICBMaXN0SUQ6IG51bWJlcjtcbiAgfVxuXG4gIGV4cG9ydCB0eXBlIFBvc3RDb250YWN0c0xpc3RNYW5hZ2VNYW55Q29udGFjdHNCb2R5PFByb3BlcnRpZXMgPSBDb21tb24uVW5rbm93blJlYz4gPSB7XG4gICAgQWN0aW9uOiBNYW5hZ2VDb250YWN0c0FjdGlvbjtcbiAgICBDb250YWN0czogQXJyYXk8Q29udGFjdEJvZHk8UHJvcGVydGllcz4+O1xuICB9XG5cbiAgZXhwb3J0IHR5cGUgUG9zdENTVkltcG9ydEJvZHkgPSB7XG4gICAgQ29udGFjdHNMaXN0SUQ6IG51bWJlcjtcbiAgICBEYXRhSUQ6IG51bWJlcjtcbiAgICBFcnJUcmVzaG9sZD86IG51bWJlcjtcbiAgICBJbXBvcnRPcHRpb25zPzogc3RyaW5nO1xuICAgIE1ldGhvZD86IEltcG9ydENTVk1ldGhvZDtcbiAgfVxuXG4gIGV4cG9ydCB0eXBlIFB1dENTVkltcG9ydEJvZHkgPSBQYXJ0aWFsPFBvc3RDU1ZJbXBvcnRCb2R5PiAmIHtcbiAgICBTdGF0dXM/OiBDU1ZJbXBvcnRTdGF0dXM7XG4gIH1cblxuICBleHBvcnQgdHlwZSBHZXRDU1ZJbXBvcnRRdWVyeVBhcmFtcyA9IFBhcnRpYWw8Q29tbW9uLlBhZ2luYXRpb24+XG5cbiAgLy8gUkVTUE9OU0UgUEFSVFxuICB0eXBlIEpvYlJlc3BvbnNlID0gQ29tbW9uLlJlc3BvbnNlPEpvYltdPjtcbiAgdHlwZSBDU1ZJbXBvcnRSZXNwb25zZSA9IENvbW1vbi5SZXNwb25zZTxDU1ZJbXBvcnRbXT47XG4gIHR5cGUgQ29udGFjdE1hbmFnZU1hbnlDb250YWN0c1Jlc3BvbnNlID0gQ29tbW9uLlJlc3BvbnNlPENvbnRhY3RNYW5hZ2VNYW55Q29udGFjdHNbXT47XG5cbiAgZXhwb3J0IHR5cGUgUG9zdENvbnRhY3RNYW5hZ2VNYW55Q29udGFjdHNSZXNwb25zZSA9IEpvYlJlc3BvbnNlXG4gIGV4cG9ydCB0eXBlIEdldENvbnRhY3RNYW5hZ2VNYW55Q29udGFjdHNSZXNwb25zZSA9IENvbnRhY3RNYW5hZ2VNYW55Q29udGFjdHNSZXNwb25zZVxuXG4gIGV4cG9ydCB0eXBlIFBvc3RDb250YWN0c0xpc3RJbXBvcnRMaXN0UmVzcG9uc2UgPSBKb2JSZXNwb25zZVxuICBleHBvcnQgdHlwZSBHZXRDb250YWN0c0xpc3RJbXBvcnRMaXN0UmVzcG9uc2UgPSBDb21tb24uUmVzcG9uc2U8Q29udGFjdHNMaXN0SW1wb3J0TGlzdFtdPjtcblxuICBleHBvcnQgdHlwZSBQb3N0Q29udGFjdHNMaXN0TWFuYWdlTWFueUNvbnRhY3RzUmVzcG9uc2UgPSBKb2JSZXNwb25zZVxuICBleHBvcnQgdHlwZSBHZXRDb250YWN0c0xpc3RNYW5hZ2VNYW55Q29udGFjdHNSZXNwb25zZSA9IENvbnRhY3RNYW5hZ2VNYW55Q29udGFjdHNSZXNwb25zZTtcblxuICBleHBvcnQgdHlwZSBQb3N0Q1NWSW1wb3J0UmVzcG9uc2UgPSBDU1ZJbXBvcnRSZXNwb25zZVxuICBleHBvcnQgdHlwZSBQdXRDU1ZJbXBvcnRSZXNwb25zZSA9IENTVkltcG9ydFJlc3BvbnNlXG4gIGV4cG9ydCB0eXBlIEdldENTVkltcG9ydFJlc3BvbnNlID0gQ1NWSW1wb3J0UmVzcG9uc2Vcbn1cblxuZXhwb3J0IG5hbWVzcGFjZSBDb250YWN0UHJvcGVydGllcyB7XG4gIGV4cG9ydCBlbnVtIERhdGFUeXBlIHtcbiAgICBTdHIgPSAnc3RyJyxcbiAgICBJbnQgPSAnaW50JyxcbiAgICBGbG9hdCA9ICdmbG9hdCcsXG4gICAgQm9vbCA9ICdib29sJyxcbiAgICBEYXRlVGltZSA9ICdkYXRldGltZSdcbiAgfVxuXG4gIGV4cG9ydCBlbnVtIE5hbWVTcGFjZSB7XG4gICAgU3RhdGljID0gJ3N0YXRpYycsXG4gICAgSGlzdG9yaWMgPSAnaGlzdG9yaWMnXG4gIH1cblxuICBleHBvcnQgaW50ZXJmYWNlIENvbnRhY3RQcm9wZXJ0eSB7XG4gICAgTmFtZTogc3RyaW5nO1xuICAgIFZhbHVlOiBzdHJpbmc7XG4gIH1cblxuICBleHBvcnQgaW50ZXJmYWNlIENvbnRhY3REYXRhIHtcbiAgICBJRDogbnVtYmVyO1xuICAgIENvbnRhY3RJRDogbnVtYmVyO1xuICAgIERhdGE6IENvbnRhY3RQcm9wZXJ0eVtdO1xuICB9XG5cbiAgZXhwb3J0IGludGVyZmFjZSBDb250YWN0TWV0YURhdGEge1xuICAgIElEOiBudW1iZXI7XG4gICAgRGF0YXR5cGU6IERhdGFUeXBlO1xuICAgIE5hbWU6IHN0cmluZztcbiAgICBOYW1lU3BhY2U6IE5hbWVTcGFjZTtcbiAgfVxuXG4gIC8vIFJFUVVFU1QgUEFSVFxuICBleHBvcnQgdHlwZSBQb3N0Q29udGFjdE1ldGFEYXRhQm9keSA9IHtcbiAgICBOYW1lOiBzdHJpbmc7XG4gICAgRGF0YXR5cGU/OiBEYXRhVHlwZTtcbiAgICBOYW1lU3BhY2U/OiBOYW1lU3BhY2U7XG4gIH1cblxuICBleHBvcnQgdHlwZSBQdXRDb250YWN0TWV0YURhdGFCb2R5ID0ge1xuICAgIE5hbWU/OiBzdHJpbmc7XG4gICAgRGF0YXR5cGU/OiBEYXRhVHlwZTtcbiAgfVxuXG4gIGV4cG9ydCB0eXBlIEdldENvbnRhY3RNZXRhRGF0YVF1ZXJ5UGFyYW1zID0gUGFydGlhbDxDb21tb24uUGFnaW5hdGlvbj4gJiB7XG4gICAgRGF0YVR5cGU/OiBEYXRhVHlwZVxuICAgIE5hbWVzcGFjZT86IE5hbWVTcGFjZTtcbiAgfVxuXG4gIGV4cG9ydCB0eXBlIFB1dENvbnRhY3REYXRhQm9keSA9IHtcbiAgICBEYXRhOiBDb250YWN0UHJvcGVydHlbXTtcbiAgfVxuXG4gIGV4cG9ydCB0eXBlIEdldENvbnRhY3REYXRhUXVlcnlQYXJhbXMgPSBQYXJ0aWFsPENvbW1vbi5QYWdpbmF0aW9uPiAmIHtcbiAgICBDYW1wYWlnbj86IG51bWJlcjtcbiAgICBDb250YWN0RW1haWw/OiBzdHJpbmc7XG4gICAgQ29udGFjdHNMaXN0PzogbnVtYmVyO1xuICAgIEZpZWxkcz86IHN0cmluZztcbiAgICBMYXN0QWN0aXZpdHlBdD86IHN0cmluZztcbiAgfVxuXG4gIC8vIFJFU1BPTlNFIFBBUlRcbiAgdHlwZSBDb250YWN0RGF0YVJlc3BvbnNlID0gQ29tbW9uLlJlc3BvbnNlPENvbnRhY3REYXRhW10+O1xuICB0eXBlIENvbnRhY3RNZXRhRGF0YVJlc3BvbnNlID0gQ29tbW9uLlJlc3BvbnNlPENvbnRhY3RNZXRhRGF0YVtdPjtcblxuICBleHBvcnQgdHlwZSBQb3N0Q29udGFjdE1ldGFEYXRhUmVzcG9uc2UgPSBDb250YWN0TWV0YURhdGFSZXNwb25zZTtcbiAgZXhwb3J0IHR5cGUgUHV0Q29udGFjdE1ldGFEYXRhUmVzcG9uc2UgPSBDb250YWN0TWV0YURhdGFSZXNwb25zZTtcbiAgZXhwb3J0IHR5cGUgR2V0Q29udGFjdE1ldGFEYXRhUmVzcG9uc2UgPSBDb250YWN0TWV0YURhdGFSZXNwb25zZTtcblxuICBleHBvcnQgdHlwZSBQdXRDb250YWN0RGF0YVJlc3BvbnNlID0gQ29udGFjdERhdGFSZXNwb25zZTtcbiAgZXhwb3J0IHR5cGUgR2V0Q29udGFjdERhdGFSZXNwb25zZSA9IENvbnRhY3REYXRhUmVzcG9uc2U7XG59XG5cbmV4cG9ydCBuYW1lc3BhY2UgQ29udGFjdFN1YnNjcmlwdGlvbiB7XG4gIGV4cG9ydCBpbnRlcmZhY2UgTWFuYWdlQ29udGFjdHM8UHJvcGVydGllcyA9IENvbW1vbi5Vbmtub3duUmVjPiB7XG4gICAgRW1haWw6IHN0cmluZztcbiAgICBBY3Rpb246IEJ1bGtDb250YWN0TWFuYWdlbWVudC5NYW5hZ2VDb250YWN0c0FjdGlvbjtcbiAgICBOYW1lOiBzdHJpbmc7XG4gICAgUHJvcGVydGllczogUHJvcGVydGllcztcbiAgfVxuXG4gIGV4cG9ydCBpbnRlcmZhY2UgTGlzdFJlY2lwaWVudCB7XG4gICAgSUQ6IG51bWJlcjtcbiAgICBJc1Vuc3Vic2NyaWJlZDogYm9vbGVhbjtcbiAgICBDb250YWN0SUQ6IG51bWJlcjtcbiAgICBMaXN0SUQ6IG51bWJlcjtcbiAgICBMaXN0TmFtZTogc3RyaW5nO1xuICAgIFN1YnNjcmliZWRBdDogc3RyaW5nO1xuICAgIFVuc3Vic2NyaWJlZEF0OiBzdHJpbmc7XG4gIH1cblxuICBleHBvcnQgaW50ZXJmYWNlIENvbnRhY3RzTGlzdCB7XG4gICAgTGlzdElEOiBudW1iZXI7XG4gICAgSXNVbnN1YjogYm9vbGVhbjtcbiAgICBTdWJzY3JpYmVkQXQ6IHN0cmluZztcbiAgfVxuXG4gIGV4cG9ydCBpbnRlcmZhY2UgQ29udGFjdHNMaXN0U2lnbnVwIHtcbiAgICBJRDogbnVtYmVyO1xuICAgIENvbmZpcm1BdDogbnVtYmVyO1xuICAgIENvbmZpcm1JcDogc3RyaW5nO1xuICAgIENvbnRhY3RJRDogbnVtYmVyO1xuICAgIEVtYWlsOiBzdHJpbmc7XG4gICAgTGlzdElEOiBudW1iZXI7XG4gICAgU2lnbnVwQXQ6IG51bWJlcjtcbiAgICBTaWdudXBJcDogc3RyaW5nO1xuICAgIFNpZ251cEtleTogc3RyaW5nO1xuICAgIFNvdXJjZUlkOiBudW1iZXI7XG4gICAgU291cmNlOiBzdHJpbmc7XG4gIH1cblxuICAvLyBSRVFVRVNUIFBBUlRcbiAgZXhwb3J0IHR5cGUgUG9zdENvbnRhY3RNYW5hZ2VDb250YWN0c0xpc3RzQm9keSA9IHtcbiAgICBDb250YWN0c0xpc3RzOiBCdWxrQ29udGFjdE1hbmFnZW1lbnQuQ29udGFjdExpc3RbXTtcbiAgfVxuXG4gIGV4cG9ydCB0eXBlIFBvc3RDb250YWN0c0xpc3RNYW5hZ2VDb250YWN0Qm9keTxQcm9wZXJ0aWVzID0gQ29tbW9uLlVua25vd25SZWM+ID0ge1xuICAgIEVtYWlsOiBzdHJpbmc7XG4gICAgQWN0aW9uOiBCdWxrQ29udGFjdE1hbmFnZW1lbnQuTWFuYWdlQ29udGFjdHNBY3Rpb247XG4gICAgTmFtZT86IHN0cmluZztcbiAgICBQcm9wZXJ0aWVzPzogUHJvcGVydGllcztcbiAgfVxuXG4gIGV4cG9ydCB0eXBlIFBvc3RMaXN0UmVjaXBpZW50Qm9keSA9IHtcbiAgICBJc1Vuc3Vic2NyaWJlZD86IGJvb2xlYW47XG4gICAgQ29udGFjdElEOiBudW1iZXI7XG4gICAgQ29udGFjdEFsdD86IHN0cmluZztcbiAgICBMaXN0SUQ6IG51bWJlcjtcbiAgICBMaXN0QWx0Pzogc3RyaW5nO1xuICB9XG5cbiAgZXhwb3J0IHR5cGUgUHV0TGlzdFJlY2lwaWVudEJvZHkgPSB7XG4gICAgSXNVbnN1YnNjcmliZWQ/OiBib29sZWFuO1xuICB9XG5cbiAgZXhwb3J0IHR5cGUgR2V0TGlzdFJlY2lwaWVudFF1ZXJ5UGFyYW1zID0gUGFydGlhbDxDb21tb24uUGFnaW5hdGlvbj4gJiB7XG4gICAgQmxvY2tlZD86IGJvb2xlYW47XG4gICAgQ29udGFjdD86IG51bWJlcjtcbiAgICBDb250YWN0RW1haWw/OiBzdHJpbmc7XG4gICAgQ29udGFjdHNMaXN0PzogbnVtYmVyO1xuICAgIElnbm9yZURlbGV0ZWQ/OiBib29sZWFuO1xuICAgIElzRXhjbHVkZWRGcm9tQ2FtcGFpZ25zPzogYm9vbGVhbjtcbiAgICBMYXN0QWN0aXZpdHlBdD86IHN0cmluZztcbiAgICBMaXN0TmFtZT86IHN0cmluZztcbiAgICBPcGVuZWQ/OiBib29sZWFuO1xuICAgIFVuc3ViPzogYm9vbGVhbjtcbiAgfVxuXG4gIGV4cG9ydCB0eXBlIEdldENvbnRhY3RzTGlzdFNpZ251cFF1ZXJ5UGFyYW1zID0gUGFydGlhbDxDb21tb24uUGFnaW5hdGlvbj4gJiB7XG4gICAgQ29udGFjdD86IG51bWJlcjtcbiAgICBDb250YWN0c0xpc3Q/OiBudW1iZXI7XG4gICAgRG9tYWluPzogc3RyaW5nO1xuICAgIEVtYWlsPzogc3RyaW5nO1xuICAgIExvY2FsUGFydD86IHN0cmluZztcbiAgICBNYXhDb25maXJtQXQ/OiBudW1iZXI7XG4gICAgTWluQ29uZmlybUF0PzogbnVtYmVyO1xuICAgIE1heFNpZ251cEF0PzogbnVtYmVyO1xuICAgIE1pblNpZ251cEF0PzogbnVtYmVyO1xuICAgIFNpZ251cElwPzogc3RyaW5nO1xuICAgIFNvdXJjZT86IHN0cmluZztcbiAgICBTb3VyY2VJRD86IG51bWJlcjtcbiAgfVxuXG4gIC8vIFJFU1BPTlNFIFBBUlRcbiAgdHlwZSBMaXN0UmVjaXBpZW50UmVzcG9uc2UgPSBDb21tb24uUmVzcG9uc2U8TGlzdFJlY2lwaWVudFtdPjtcblxuICBleHBvcnQgdHlwZSBQb3N0Q29udGFjdE1hbmFnZUNvbnRhY3RzTGlzdHNSZXNwb25zZSA9IENvbW1vbi5SZXNwb25zZTxcbiAgICBBcnJheTx7IENvbnRhY3RzTGlzdHM6IEJ1bGtDb250YWN0TWFuYWdlbWVudC5Db250YWN0TGlzdFtdIH0+XG4gICAgPjtcblxuICBleHBvcnQgdHlwZSBQb3N0Q29udGFjdHNMaXN0TWFuYWdlQ29udGFjdFJlc3BvbnNlPFByb3BlcnRpZXMgPSBDb21tb24uVW5rbm93blJlYz4gPVxuICAgICAgQ29tbW9uLlJlc3BvbnNlPEFycmF5PE1hbmFnZUNvbnRhY3RzPFByb3BlcnRpZXM+Pj47XG5cbiAgZXhwb3J0IHR5cGUgUG9zdExpc3RSZWNpcGllbnRSZXNwb25zZSA9IExpc3RSZWNpcGllbnRSZXNwb25zZVxuICBleHBvcnQgdHlwZSBQdXRMaXN0UmVjaXBpZW50UmVzcG9uc2UgPSBMaXN0UmVjaXBpZW50UmVzcG9uc2VcbiAgZXhwb3J0IHR5cGUgR2V0TGlzdFJlY2lwaWVudFJlc3BvbnNlID0gTGlzdFJlY2lwaWVudFJlc3BvbnNlXG5cbiAgZXhwb3J0IHR5cGUgR2V0Q29udGFjdEdldENvbnRhY3RzTGlzdHNSZXNwb25zZSA9IENvbW1vbi5SZXNwb25zZTxDb250YWN0c0xpc3RbXT5cblxuICBleHBvcnQgdHlwZSBHZXRDb250YWN0c0xpc3RTaWdudXBSZXNwb25zZSA9IENvbW1vbi5SZXNwb25zZTxDb250YWN0c0xpc3RTaWdudXBbXT5cbn1cblxuZXhwb3J0IG5hbWVzcGFjZSBDb250YWN0VmVyaWZpY2F0aW9uIHtcbiAgZXhwb3J0IGludGVyZmFjZSBWZXJpZmljYXRpb25TdW1tYXJ5PFJlc3VsdCA9IENvbW1vbi5Vbmtub3duUmVjLCBSaXNrID0gQ29tbW9uLlVua25vd25SZWM+IHtcbiAgICByZXN1bHQ6IFJlc3VsdDtcbiAgICByaXNrOiBSaXNrO1xuICB9XG5cbiAgZXhwb3J0IGludGVyZmFjZSBDb250YWN0c0xpc3RWZXJpZmljYXRpb248UmVzdWx0ID0gQ29tbW9uLlVua25vd25SZWMsIFJpc2sgPSBDb21tb24uVW5rbm93blJlYz4ge1xuICAgIEFraWQ6IG51bWJlcjtcbiAgICBDb250YWN0TGlzdElEOiBudW1iZXI7XG4gICAgQ291bnQ6IG51bWJlcjtcbiAgICBFcnJvcjogc3RyaW5nO1xuICAgIElEOiBudW1iZXI7XG4gICAgSm9iRW5kOiBzdHJpbmc7XG4gICAgSm9iU3RhcnQ6IHN0cmluZztcbiAgICBNZXRob2Q6IHN0cmluZztcbiAgICBSZXNwb25zZVVSTDogc3RyaW5nO1xuICAgIFN0YXR1czogc3RyaW5nO1xuICAgIFN1bW1hcnk6IFZlcmlmaWNhdGlvblN1bW1hcnk8UmVzdWx0LCBSaXNrPlxuICB9XG5cbiAgLy8gUkVRVUVTVCBQQVJUXG5cbiAgLy8gUkVTUE9OU0UgUEFSVFxuICBleHBvcnQgdHlwZSBHZXRDb250YWN0c0xpc3RWZXJpZnlSZXNwb25zZTxSZXN1bHQgPSBDb21tb24uVW5rbm93blJlYywgUmlzayA9IENvbW1vbi5Vbmtub3duUmVjPiA9XG4gICAgQ29tbW9uLlJlc3BvbnNlPEFycmF5PENvbnRhY3RzTGlzdFZlcmlmaWNhdGlvbjxSZXN1bHQsIFJpc2s+Pj47XG59XG4iLCJpbXBvcnQgeyBDb21tb24gfSBmcm9tICcuL0NvbW1vbic7XG5cbmV4cG9ydCBuYW1lc3BhY2UgTWVzc2FnZSB7XG4gIGV4cG9ydCBlbnVtIE1lc3NhZ2VTdGF0ZSB7XG4gICAgVXNlclVua25vd24gPSAxLFxuICAgIE1haWxib3hJbmFjdGl2ZSA9IDIsXG4gICAgUXVvdGFFeGNlZWRlZCA9IDMsXG4gICAgSW52YWxpZERvbWFpbiA9IDQsXG4gICAgTm9NYWlsSG9zdCA9IDUsXG4gICAgUmVsYXlPckFjY2Vzc0RlbmllZCA9IDYsXG4gICAgU2VuZGVyQmxvY2tlZCA9IDcsXG4gICAgQ29udGVudEJsb2NrZWQgPSA4LFxuICAgIFBvbGljeUlzc3VlID0gOSxcbiAgICBTeXN0ZW1Jc3N1ZSA9IDEwLFxuICAgIFByb3RvY29sSXNzdWUgPSAxMSxcbiAgICBDb25uZWN0aW9uSXNzdWUgPSAxMixcbiAgICBHcmV5TGlzdGVkID0gMTMsXG4gICAgUHJlQmxvY2tlZCA9IDE0LFxuICAgIER1cGxpY2F0ZUluQ2FtcGFpZ24gPSAxNSxcbiAgICBTcGFtUHJlQmxvY2tlZCA9IDE2LFxuICAgIEJhZE9yRW1wdHlUZW1wbGF0ZSA9IDE3LFxuICAgIEVycm9ySW5UZW1wbGF0ZUxhbmd1YWdlID0gMTgsXG4gICAgVHlwb0ZpeCA9IDE5LFxuICAgIEJsYWNrTGlzdGVkID0gMjAsXG4gICAgU3BhbVJlcG9ydGVyID0gMjFcbiAgfVxuXG4gIGV4cG9ydCBlbnVtIEZyb21UeXBlIHtcbiAgICBUcmFuc2FjdGlvbmFsID0gMSxcbiAgICBNYXJrZXRpbmcgPSAyLFxuICAgIFVua25vd24gPSAzLFxuICB9XG5cbiAgZXhwb3J0IGVudW0gTWVzc2FnZVN0YXR1cyB7XG4gICAgUHJvY2Vzc2VkID0gMCxcbiAgICBRdWV1ZWQgPSAxLFxuICAgIFNlbnQgPSAyLFxuICAgIE9wZW5lZCA9IDMsXG4gICAgQ2xpY2tlZCA9IDQsXG4gICAgQm91bmNlID0gNSxcbiAgICBTcGFtID0gNixcbiAgICBVbnN1YiA9IDcsXG4gICAgQmxvY2tlZCA9IDgsXG4gICAgU29mdEJvdW5jZSA9IDksXG4gICAgSGFyZEJvdW5jZSA9IDEwLFxuICAgIERlZmVycmVkID0gMTEsXG4gIH1cblxuICBleHBvcnQgZW51bSBDdXJyZW50TWVzc2FnZVN0YXR1cyB7XG4gICAgVW5rbm93biA9ICd1bmtub3duJyxcbiAgICBRdWV1ZWQgPSAncXVldWVkJyxcbiAgICBTZW50ID0gJ3NlbnQnLFxuICAgIE9wZW5lZCA9ICdvcGVuZWQnLFxuICAgIENsaWNrZWQgPSAnY2xpY2tlZCcsXG4gICAgQm91bmNlID0gJ2JvdW5jZScsXG4gICAgU3BhbSA9ICdzcGFtJyxcbiAgICBVbnN1YiA9ICd1bnN1YicsXG4gICAgQmxvY2tlZCA9ICdibG9ja2VkJyxcbiAgICBIYXJkQm91bmNlZCA9ICdoYXJkYm91bmNlZCcsXG4gICAgU29mdEJvdW5jZWQgPSAnc29mdGJvdW5jZWQnLFxuICAgIERlZmVycmVkID0gJ2RlZmVycmVkJyxcbiAgfVxuXG4gIGV4cG9ydCBlbnVtIEV2ZW50VHlwZSB7XG4gICAgU2VudCA9ICdzZW50JyxcbiAgICBPcGVuZWQgPSAnb3BlbmVkJyxcbiAgICBDbGlja2VkID0gJ2NsaWNrZWQnLFxuICAgIEJvdW5jZWQgPSAnYm91bmNlZCcsXG4gICAgQmxvY2tlZCA9ICdibG9ja2VkJyxcbiAgICBVbnN1YiA9ICd1bnN1YicsXG4gICAgU3BhbSA9ICdzcGFtJ1xuICB9XG5cbiAgZXhwb3J0IGludGVyZmFjZSBNZXNzYWdlVHJhY2tlZCB7XG4gICAgSXNDbGlja1RyYWNrZWQ6IGJvb2xlYW47XG4gICAgSXNIVE1MUGFydEluY2x1ZGVkOiBib29sZWFuO1xuICAgIElzT3BlblRyYWNrZWQ6IGJvb2xlYW47XG4gICAgSXNUZXh0UGFydEluY2x1ZGVkOiBib29sZWFuO1xuICAgIElzVW5zdWJUcmFja2VkOiBib29sZWFuO1xuICB9XG5cbiAgZXhwb3J0IGludGVyZmFjZSBNZXNzYWdlIGV4dGVuZHMgTWVzc2FnZVRyYWNrZWQge1xuICAgIElEOiBudW1iZXI7XG4gICAgQXJyaXZlZEF0OiBzdHJpbmc7XG4gICAgQXR0YWNobWVudENvdW50OiBudW1iZXI7XG4gICAgQXR0ZW1wdENvdW50OiBudW1iZXI7XG4gICAgQ2FtcGFpZ25JRDogbnVtYmVyO1xuICAgIENvbnRhY3RBbHQ6IHN0cmluZztcbiAgICBDb250YWN0SUQ6IG51bWJlcjtcbiAgICBEZWxheTogbnVtYmVyO1xuICAgIERlc3RpbmF0aW9uSUQ6IG51bWJlcjtcbiAgICBGaWx0ZXJUaW1lOiBudW1iZXI7XG4gICAgTWVzc2FnZVNpemU6IG51bWJlcjtcbiAgICBTZW5kZXJJRDogbnVtYmVyO1xuICAgIFNwYW1hc3Nhc3NpblNjb3JlOiBudW1iZXI7XG4gICAgU3BhbWFzc1J1bGVzOiBzdHJpbmc7XG4gICAgU3RhdGVJRDogTWVzc2FnZVN0YXRlO1xuICAgIFN0YXRlUGVybWFuZW50OiBib29sZWFuO1xuICAgIFN0YXR1czogQ3VycmVudE1lc3NhZ2VTdGF0dXM7XG4gICAgU3ViamVjdDogc3RyaW5nO1xuICAgIFVVSUQ6IHN0cmluZztcbiAgfVxuXG4gIGV4cG9ydCBpbnRlcmZhY2UgTWVzc2FnZUhpc3Rvcnkge1xuICAgIENvbW1lbnQ6IHN0cmluZztcbiAgICBFdmVudEF0OiBudW1iZXI7XG4gICAgRXZlbnRUeXBlOiBFdmVudFR5cGU7XG4gICAgU3RhdGU6IHN0cmluZztcbiAgICBVc2VyYWdlbnQ6IHN0cmluZztcbiAgICBVc2VyYWdlbnRJRDogbnVtYmVyO1xuICB9XG5cbiAgZXhwb3J0IGludGVyZmFjZSBNZXNzYWdlSW5mb3JtYXRpb248UnVsZXMgPSBDb21tb24uVW5rbm93blJlYz4ge1xuICAgIElEOiBudW1iZXI7XG4gICAgQ2FtcGFpZ25JRDogbnVtYmVyO1xuICAgIENsaWNrVHJhY2tlZENvdW50OiBudW1iZXI7XG4gICAgQ29udGFjdElEOiBudW1iZXI7XG4gICAgQ3JlYXRlZEF0OiBzdHJpbmc7XG4gICAgTWVzc2FnZVNpemU6IG51bWJlcjtcbiAgICBPcGVuVHJhY2tlZENvdW50OiBudW1iZXI7XG4gICAgUXVldWVkQ291bnQ6IG51bWJlcjtcbiAgICBTZW5kRW5kQXQ6IHN0cmluZztcbiAgICBTZW50Q291bnQ6IG51bWJlcjtcbiAgICBTcGFtQXNzYXNzaW5SdWxlczogUnVsZXM7XG4gICAgU3BhbUFzc2Fzc2luU2NvcmU6IG51bWJlcjtcbiAgfVxuXG4gIC8vIFJFUVVFU1QgUEFSVFxuICBleHBvcnQgdHlwZSBHZXRNZXNzYWdlUXVlcnlQYXJhbXMgPSBQYXJ0aWFsPENvbW1vbi5UaW1lc3RhbXBQZXJpb2Q+ICZcbiAgICBQYXJ0aWFsPENvbW1vbi5QYWdpbmF0aW9uPiAmXG4gIHtcbiAgICBDYW1wYWlnbj86IG51bWJlcjtcbiAgICBDb250YWN0PzogbnVtYmVyO1xuICAgIEN1c3RvbUlEPzogc3RyaW5nO1xuICAgIERlc3RpbmF0aW9uPzogbnVtYmVyO1xuICAgIEZyb21UeXBlPzogRnJvbVR5cGU7XG4gICAgTWVzc2FnZVN0YXRlPzogTWVzc2FnZVN0YXRlO1xuICAgIE1lc3NhZ2VTdGF0dXM/OiBNZXNzYWdlU3RhdHVzO1xuICAgIFBsYW5TdWJzY3JpcHRpb24/OiBudW1iZXI7XG4gICAgU2VuZGVySUQ/OiBudW1iZXI7XG4gICAgU2hvd0NvbnRhY3RBbHQ/OiBib29sZWFuO1xuICAgIFNob3dDdXN0b21JRD86IGJvb2xlYW47XG4gICAgU2hvd1N1YmplY3Q/OiBib29sZWFuO1xuICB9XG5cbiAgZXhwb3J0IHR5cGUgR2V0TWVzc2FnZUluZm9ybWF0aW9uUXVlcnlQYXJhbXMgPSBQYXJ0aWFsPENvbW1vbi5UaW1lc3RhbXBQZXJpb2Q+ICZcbiAgICBQYXJ0aWFsPENvbW1vbi5QYWdpbmF0aW9uPiAmXG4gIHtcbiAgICBDYW1wYWlnbklEPzogbnVtYmVyO1xuICAgIENvbnRhY3RzTGlzdD86IG51bWJlcjtcbiAgICBDdXN0b21DYW1wYWlnbj86IHN0cmluZztcbiAgICBGcm9tPzogc3RyaW5nO1xuICAgIEZyb21Eb21haW4/OiBzdHJpbmc7XG4gICAgRnJvbUlEPzogbnVtYmVyO1xuICAgIEZyb21UeXBlPzogRnJvbVR5cGU7XG4gICAgSXNEZWxldGVkPzogYm9vbGVhbjtcbiAgICBJc05ld3NsZXR0ZXJUb29sPzogYm9vbGVhbjtcbiAgICBJc1N0YXJyZWQ/OiBib29sZWFuO1xuICAgIE1lc3NhZ2VTdGF0dXM/OiBNZXNzYWdlU3RhdHVzO1xuICAgIFBlcmlvZD86IENvbW1vbi5QZXJpb2Q7XG4gIH1cblxuICAvLyBSRVNQT05TRSBQQVJUXG4gIGV4cG9ydCB0eXBlIEdldE1lc3NhZ2VzUmVzcG9uc2UgPSBDb21tb24uUmVzcG9uc2U8TWVzc2FnZVtdPlxuICBleHBvcnQgdHlwZSBHZXRNZXNzYWdlSGlzdG9yeVJlc3BvbnNlID0gQ29tbW9uLlJlc3BvbnNlPE1lc3NhZ2VIaXN0b3J5W10+XG4gIGV4cG9ydCB0eXBlIEdldE1lc3NhZ2VJbmZvcm1hdGlvblJlc3BvbnNlPFJ1bGVzID0gQ29tbW9uLlVua25vd25SZWM+ID1cbiAgICAgIENvbW1vbi5SZXNwb25zZTxBcnJheTxNZXNzYWdlSW5mb3JtYXRpb248UnVsZXM+Pj5cbn1cbiIsImltcG9ydCB7IENvbW1vbiB9IGZyb20gJy4vQ29tbW9uJztcblxuZXhwb3J0IG5hbWVzcGFjZSBTZWdtZW50YXRpb24ge1xuICBleHBvcnQgZW51bSBTZWdtZW50U3RhdHVzIHtcbiAgICBVc2VkID0gJ3VzZWQnLFxuICAgIFVuVXNlZCA9ICd1bnVzZWQnLFxuICAgIERlbGV0ZWQgPSAnZGVsZXRlZCdcbiAgfVxuXG4gIGV4cG9ydCBpbnRlcmZhY2UgQ29udGFjdEZpbHRlciB7XG4gICAgSUQ6IG51bWJlcjtcbiAgICBEZXNjcmlwdGlvbjogc3RyaW5nO1xuICAgIEV4cHJlc3Npb246IHN0cmluZztcbiAgICBOYW1lOiBzdHJpbmc7XG4gICAgU3RhdHVzOiBTZWdtZW50U3RhdHVzO1xuICB9XG5cbiAgLy8gUkVRVUVTVCBQQVJUXG4gIGV4cG9ydCB0eXBlIFBvc3RDb250YWN0RmlsdGVyQm9keSA9IHtcbiAgICBOYW1lOiBzdHJpbmc7XG4gICAgRXhwcmVzc2lvbjogc3RyaW5nO1xuICAgIERlc2NyaXB0aW9uPzogc3RyaW5nO1xuICB9XG5cbiAgZXhwb3J0IHR5cGUgUHV0Q29udGFjdEZpbHRlckJvZHkgPSBQYXJ0aWFsPFBvc3RDb250YWN0RmlsdGVyQm9keT4gJiB7XG4gICAgU3RhdHVzPzogU2VnbWVudFN0YXR1cztcbiAgfVxuXG4gIGV4cG9ydCB0eXBlIEdldENvbnRhY3RGaWx0ZXJRdWVyeVBhcmFtcyA9IFBhcnRpYWw8Q29tbW9uLlBhZ2luYXRpb24+ICYge1xuICAgIFNob3dEZWxldGVkPzogYm9vbGVhbjtcbiAgICBTdGF0dXM/OiBTZWdtZW50U3RhdHVzO1xuICB9XG5cbiAgLy8gUkVTUE9OU0UgUEFSVFxuICB0eXBlIENvbnRhY3RGaWx0ZXJSZXNwb25zZSA9IENvbW1vbi5SZXNwb25zZTxDb250YWN0RmlsdGVyW10+O1xuXG4gIGV4cG9ydCB0eXBlIFBvc3RDb250YWN0RmlsdGVyUmVzcG9uc2UgPSBDb250YWN0RmlsdGVyUmVzcG9uc2U7XG4gIGV4cG9ydCB0eXBlIFB1dENvbnRhY3RGaWx0ZXJSZXNwb25zZSA9IENvbnRhY3RGaWx0ZXJSZXNwb25zZTtcbiAgZXhwb3J0IHR5cGUgR2V0Q29udGFjdEZpbHRlclJlc3BvbnNlID0gQ29udGFjdEZpbHRlclJlc3BvbnNlO1xufVxuIiwiaW1wb3J0IHsgQ29tbW9uIH0gZnJvbSAnLi9Db21tb24nO1xuXG5leHBvcnQgbmFtZXNwYWNlIFNlbmRFbWFpbFYzIHtcbiAgZXhwb3J0IHR5cGUgTWpUZW1wbGF0ZUVycm9yRGVsaXZlciA9ICcwJyB8ICdkZWxpdmVyJ1xuICBleHBvcnQgdHlwZSBNakRlZHVwbGljYXRlQ2FtcGFpZ24gPSAwIHwgMTtcbiAgZXhwb3J0IHR5cGUgTWpUcmFja09wZW4gPSAwIHwgMSB8IDI7XG5cbiAgZXhwb3J0IGludGVyZmFjZSBSZWNpcGllbnQge1xuICAgIEVtYWlsOiBzdHJpbmc7XG4gICAgTmFtZT86IHN0cmluZ1xuICAgIFZhcnM/OiBzdHJpbmc7XG4gIH1cblxuICBleHBvcnQgaW50ZXJmYWNlIEF0dGFjaG1lbnQge1xuICAgIEZpbGVuYW1lOiBzdHJpbmc7XG4gICAgQ29udGVudDogc3RyaW5nO1xuICAgICdDb250ZW50LXR5cGUnOiBzdHJpbmc7XG4gIH1cblxuICBleHBvcnQgdHlwZSBCb2R5TWogPSB7XG4gICAgJ01qLVRlbXBsYXRlSUQnPzogbnVtYmVyO1xuICAgICdNai1UZW1wbGF0ZUxhbmd1YWdlJz86IGJvb2xlYW47XG4gICAgJ01qLVRlbXBsYXRlRXJyb3JSZXBvcnRpbmcnPzogc3RyaW5nO1xuICAgICdNai1UZW1wbGF0ZUVycm9yRGVsaXZlcic/OiBNalRlbXBsYXRlRXJyb3JEZWxpdmVyO1xuICAgICdNai1wcmlvJz86IG51bWJlcjtcbiAgICAnTWotY2FtcGFpZ24nPzogc3RyaW5nO1xuICAgICdNai1kZWR1cGxpY2F0ZWNhbXBhaWduJz86IE1qRGVkdXBsaWNhdGVDYW1wYWlnbjtcbiAgICAnTWotdHJhY2tvcGVuJz86IE1qVHJhY2tPcGVuO1xuICAgICdNai1DdXN0b21JRCc/OiBzdHJpbmc7XG4gICAgJ01qLUV2ZW50UGF5bG9hZCc/OiBzdHJpbmc7XG4gIH1cblxuICAvLyBSRVFVRVNUIFBBUlRcbiAgZXhwb3J0IHR5cGUgQm9keTxcbiAgICBIZWFkZXJzID0gQ29tbW9uLlVua25vd25SZWMsXG4gICAgVmFycyA9IENvbW1vbi5Vbmtub3duUmVjXG4gICAgPiA9IEJvZHlNaiAmIHtcbiAgICBGcm9tRW1haWw/OiBzdHJpbmc7XG4gICAgRnJvbU5hbWU/OiBzdHJpbmc7XG4gICAgUmVjaXBpZW50cz86IFJlY2lwaWVudFtdO1xuICAgIFNlbmRlcj86IGJvb2xlYW47XG4gICAgU3ViamVjdD86IHN0cmluZztcbiAgICAnVGV4dC1wYXJ0Jz86IHN0cmluZztcbiAgICAnSHRtbC1wYXJ0Jz86IHN0cmluZztcbiAgICBUbz86IHN0cmluZztcbiAgICBDYz86IHN0cmluZztcbiAgICBCY2M/OiBzdHJpbmc7XG4gICAgQXR0YWNobWVudHM/OiBBdHRhY2htZW50W107XG4gICAgSW5saW5lX2F0dGFjaG1lbnRzPzogQXR0YWNobWVudFtdO1xuICAgIEhlYWRlcnM/OiBIZWFkZXJzO1xuICAgIFZhcnM/OiBWYXJzO1xuICB9XG5cbiAgLy8gUkVTUE9OU0UgUEFSVFxuICBleHBvcnQgaW50ZXJmYWNlIFJlc3BvbnNlU2VudCB7XG4gICAgRW1haWw6IHN0cmluZztcbiAgICBNZXNzYWdlSUQ6IG51bWJlcjtcbiAgICBNZXNzYWdlVVVJRDogc3RyaW5nO1xuICB9XG5cbiAgZXhwb3J0IHR5cGUgUmVzcG9uc2UgPSB7XG4gICAgU2VudDogUmVzcG9uc2VTZW50W107XG4gIH1cbn1cblxuZXhwb3J0IG5hbWVzcGFjZSBTZW5kRW1haWxWM18xIHtcbiAgZXhwb3J0IGVudW0gVHJhY2tPcGVucyB7XG4gICAgQWNjb3VudERlZmF1bHQgPSAnYWNjb3VudF9kZWZhdWx0JyxcbiAgICBEaXNhYmxlZCA9ICdkaXNhYmxlZCcsXG4gICAgRW5hYmxlZCA9ICdlbmFibGVkJyxcbiAgfVxuXG4gIGV4cG9ydCBlbnVtIFRyYWNrQ2xpY2tzIHtcbiAgICBBY2NvdW50RGVmYXVsdCA9ICdhY2NvdW50X2RlZmF1bHQnLFxuICAgIERpc2FibGVkID0gJ2Rpc2FibGVkJyxcbiAgICBFbmFibGVkID0gJ2VuYWJsZWQnLFxuICB9XG5cbiAgZXhwb3J0IGludGVyZmFjZSBFbWFpbEFkZHJlc3NUbyB7XG4gICAgRW1haWw6IHN0cmluZztcbiAgICBOYW1lPzogc3RyaW5nO1xuICB9XG5cbiAgZXhwb3J0IGludGVyZmFjZSBBdHRhY2htZW50IHtcbiAgICBGaWxlbmFtZTogc3RyaW5nO1xuICAgIENvbnRlbnRUeXBlOiBzdHJpbmc7XG4gICAgQmFzZTY0Q29udGVudDogc3RyaW5nO1xuICB9XG5cbiAgZXhwb3J0IGludGVyZmFjZSBJbmxpbmVkQXR0YWNobWVudCBleHRlbmRzIEF0dGFjaG1lbnQge1xuICAgIENvbnRlbnRJRD86IHN0cmluZztcbiAgfVxuXG4gIGV4cG9ydCBpbnRlcmZhY2UgTWVzc2FnZTxIZWFkZXJzID0gQ29tbW9uLlVua25vd25SZWMsIFZhcmlhYmxlcyA9IENvbW1vbi5Vbmtub3duUmVjPiB7XG4gICAgRnJvbTogRW1haWxBZGRyZXNzVG87XG4gICAgU2VuZGVyPzogRW1haWxBZGRyZXNzVG87XG4gICAgVG86IEVtYWlsQWRkcmVzc1RvW107XG4gICAgQ2M/OiBFbWFpbEFkZHJlc3NUb1tdO1xuICAgIEJjYz86IEVtYWlsQWRkcmVzc1RvW107XG4gICAgUmVwbHlUbz86IEVtYWlsQWRkcmVzc1RvO1xuICAgIFN1YmplY3Q/OiBzdHJpbmc7XG4gICAgVGV4dFBhcnQ/OiBzdHJpbmc7XG4gICAgSFRNTFBhcnQ/OiBzdHJpbmc7XG4gICAgVGVtcGxhdGVJRD86IG51bWJlcjtcbiAgICBUZW1wbGF0ZUxhbmd1YWdlPzogYm9vbGVhbjtcbiAgICBUZW1wbGF0ZUVycm9yUmVwb3J0aW5nPzogRW1haWxBZGRyZXNzVG87XG4gICAgVGVtcGxhdGVFcnJvckRlbGl2ZXI/OiBib29sZWFuO1xuICAgIEF0dGFjaG1lbnRzPzogQXR0YWNobWVudFtdO1xuICAgIElubGluZWRBdHRhY2htZW50cz86IElubGluZWRBdHRhY2htZW50W107XG4gICAgUHJpb3JpdHk/OiBudW1iZXI7XG4gICAgQ3VzdG9tQ2FtcGFpZ24/OiBzdHJpbmc7XG4gICAgRGVkdXBsaWNhdGVDYW1wYWlnbj86IGJvb2xlYW47XG4gICAgVHJhY2tPcGVucz86IFRyYWNrT3BlbnM7XG4gICAgVHJhY2tDbGlja3M/OiBUcmFja0NsaWNrcztcbiAgICBDdXN0b21JRD86IHN0cmluZztcbiAgICBFdmVudFBheWxvYWQ/OiBzdHJpbmc7XG4gICAgVVJMVGFncz86IHN0cmluZztcbiAgICBIZWFkZXJzPzogSGVhZGVycztcbiAgICBWYXJpYWJsZXM/OiBWYXJpYWJsZXM7XG4gIH1cblxuICBleHBvcnQgZW51bSBSZXNwb25zZVN0YXR1cyB7XG4gICAgU3VjY2VzcyA9ICdzdWNjZXNzJyxcbiAgICBFcnJvciA9ICdlcnJvcicsXG4gIH1cblxuICBleHBvcnQgaW50ZXJmYWNlIFJlc3BvbnNlRXJyb3Ige1xuICAgIEVycm9ySWRlbnRpZmllcjogc3RyaW5nO1xuICAgIEVycm9yQ29kZTogc3RyaW5nO1xuICAgIFN0YXR1c0NvZGU6IG51bWJlcjtcbiAgICBFcnJvck1lc3NhZ2U6IHN0cmluZztcbiAgICBFcnJvclJlbGF0ZWRUbzogQXJyYXk8c3RyaW5nPjtcbiAgfVxuXG4gIGV4cG9ydCBpbnRlcmZhY2UgUmVzcG9uc2VFbWFpbEFkZHJlc3NUbyB7XG4gICAgRW1haWw6IHN0cmluZztcbiAgICBNZXNzYWdlVVVJRDogc3RyaW5nO1xuICAgIE1lc3NhZ2VJRDogbnVtYmVyO1xuICAgIE1lc3NhZ2VIcmVmOiBzdHJpbmc7XG4gIH1cblxuICAvLyBSRVFVRVNUIFBBUlRcbiAgZXhwb3J0IHR5cGUgQm9keTxcbiAgICBIZWFkZXJzID0gQ29tbW9uLlVua25vd25SZWMsXG4gICAgVmFyaWFibGVzID0gQ29tbW9uLlVua25vd25SZWMsXG4gICAgR2xvYmFscyA9IENvbW1vbi5Vbmtub3duUmVjLFxuICAgID4gPSB7XG4gICAgTWVzc2FnZXM6IEFycmF5PE1lc3NhZ2U8SGVhZGVycywgVmFyaWFibGVzPj47XG4gICAgU2FuZGJveE1vZGU/OiBib29sZWFuO1xuICAgIEFkdmFuY2VFcnJvckhhbmRsaW5nPzogYm9vbGVhbjtcbiAgICBHbG9iYWxzPzogR2xvYmFscztcbiAgfSB8IHtcbiAgICBNZXNzYWdlczogQXJyYXk8T21pdDxNZXNzYWdlPEhlYWRlcnMsIFZhcmlhYmxlcz4sICdGcm9tJz4gJiB7IEZyb20/OiBzdHJpbmcgfT47XG4gICAgU2FuZGJveE1vZGU/OiBib29sZWFuO1xuICAgIEFkdmFuY2VFcnJvckhhbmRsaW5nPzogYm9vbGVhbjtcbiAgICBHbG9iYWxzOiB7XG4gICAgICBGcm9tOiBFbWFpbEFkZHJlc3NUbztcbiAgICAgIFtrZXk6IHN0cmluZ106IHVua25vd247XG4gICAgfTtcbiAgfVxuXG4gIC8vIFJFU1BPTlNFIFBBUlRcbiAgZXhwb3J0IGludGVyZmFjZSBSZXNwb25zZU1lc3NhZ2Uge1xuICAgIFN0YXR1czogUmVzcG9uc2VTdGF0dXM7XG4gICAgRXJyb3JzOiBSZXNwb25zZUVycm9yW107XG4gICAgQ3VzdG9tSUQ6IHN0cmluZztcbiAgICBUbzogUmVzcG9uc2VFbWFpbEFkZHJlc3NUb1tdO1xuICAgIENjOiBSZXNwb25zZUVtYWlsQWRkcmVzc1RvW107XG4gICAgQmNjOiBSZXNwb25zZUVtYWlsQWRkcmVzc1RvW107XG4gIH1cblxuICBleHBvcnQgdHlwZSBSZXNwb25zZSA9IHtcbiAgICBNZXNzYWdlczogUmVzcG9uc2VNZXNzYWdlW107XG4gIH1cbn1cbiIsImltcG9ydCB7IENvbW1vbiB9IGZyb20gJy4vQ29tbW9uJztcblxuZXhwb3J0IG5hbWVzcGFjZSBTZW5kZXIge1xuICBleHBvcnQgZW51bSBFbWFpbFR5cGUge1xuICAgIFRyYW5zYWN0aW9uYWwgPSAndHJhbnNhY3Rpb25hbCcsXG4gICAgQnVsayA9ICdidWxrJyxcbiAgICBVbmtub3duID0gJ3Vua25vd24nXG4gIH1cblxuICBleHBvcnQgZW51bSBTZW5kZXJTdGF0dXMge1xuICAgIEluYWN0aXZlID0gJ0luYWN0aXZlJyxcbiAgICBBY3RpdmUgPSAnQWN0aXZlJyxcbiAgICBEZWxldGVkID0gJ0RlbGV0ZWQnLFxuICB9XG5cbiAgZXhwb3J0IGludGVyZmFjZSBTZW5kZXIge1xuICAgIElEOiBudW1iZXI7XG4gICAgRW1haWxUeXBlOiBFbWFpbFR5cGU7XG4gICAgSXNEZWZhdWx0U2VuZGVyOiBib29sZWFuO1xuICAgIE5hbWU6IHN0cmluZztcbiAgICBDcmVhdGVkQXQ6IHN0cmluZztcbiAgICBETlNJRDogbnVtYmVyO1xuICAgIEVtYWlsOiBzdHJpbmc7XG4gICAgRmlsZW5hbWU6IHN0cmluZztcbiAgICBTdGF0dXM6IFNlbmRlclN0YXR1cztcbiAgfVxuXG4gIGV4cG9ydCBpbnRlcmZhY2UgU2VuZGVyVmFsaWRhdGUge1xuICAgIFZhbGlkYXRpb25NZXRob2Q6IHN0cmluZztcbiAgICBFcnJvcnM6IHN0cmluZztcbiAgICBHbG9iYWxFcnJvcjogc3RyaW5nO1xuICB9XG5cbiAgLy8gUkVRVUVTVCBQQVJUXG4gIGV4cG9ydCB0eXBlIFBvc3RTZW5kZXJCb2R5ID0ge1xuICAgIEVtYWlsOiBzdHJpbmc7XG4gICAgRW1haWxUeXBlPzogRW1haWxUeXBlO1xuICAgIElzRGVmYXVsdFNlbmRlcj86IGJvb2xlYW47XG4gICAgTmFtZT86IHN0cmluZztcbiAgfVxuXG4gIGV4cG9ydCB0eXBlIFB1dFNlbmRlckJvZHkgPSBPbWl0PFBvc3RTZW5kZXJCb2R5LCAnRW1haWwnPlxuXG4gIGV4cG9ydCB0eXBlIEdldFNlbmRlclF1ZXJ5UGFyYW1zID0gUGFydGlhbDxDb21tb24uUGFnaW5hdGlvbj4gJiB7XG4gICAgRG5zSUQ/OiBudW1iZXI7XG4gICAgRG9tYWluPzogc3RyaW5nO1xuICAgIEVtYWlsPzogc3RyaW5nO1xuICAgIElzRG9tYWluU2VuZGVyPzogYm9vbGVhbjtcbiAgICBMb2NhbFBhcnQ/OiBzdHJpbmc7XG4gICAgU2hvd0RlbGV0ZWQ/OiBib29sZWFuO1xuICAgIFN0YXR1cz86IFNlbmRlclN0YXR1cztcbiAgfVxuXG4gIC8vIFJFU1BPTlNFIFBBUlRcbiAgdHlwZSBTZW5kZXJSZXNwb25zZSA9IENvbW1vbi5SZXNwb25zZTxTZW5kZXJbXT47XG5cbiAgZXhwb3J0IHR5cGUgUG9zdFNlbmRlclJlc3BvbnNlID0gU2VuZGVyUmVzcG9uc2VcbiAgZXhwb3J0IHR5cGUgUHV0U2VuZGVyUmVzcG9uc2UgPSBTZW5kZXJSZXNwb25zZVxuICBleHBvcnQgdHlwZSBHZXRTZW5kZXJSZXNwb25zZSA9IFNlbmRlclJlc3BvbnNlXG5cbiAgZXhwb3J0IHR5cGUgUG9zdFNlbmRlclZhbGlkYXRlUmVzcG9uc2UgPSBDb21tb24uUmVzcG9uc2U8U2VuZGVyVmFsaWRhdGVbXT47XG59XG5cbmV4cG9ydCBuYW1lc3BhY2UgTWV0YXNlbmRlciB7XG4gIGV4cG9ydCBpbnRlcmZhY2UgTWV0YVNlbmRlciB7XG4gICAgSUQ6IG51bWJlcjtcbiAgICBEZXNjcmlwdGlvbjogc3RyaW5nO1xuICAgIENyZWF0ZWRBdDogc3RyaW5nO1xuICAgIEVtYWlsOiBzdHJpbmc7XG4gICAgRmlsZW5hbWU6IHN0cmluZztcbiAgICBJc0VuYWJsZWQ6IGJvb2xlYW47XG4gIH1cblxuICAvLyBSRVFVRVNUIFBBUlRcbiAgZXhwb3J0IHR5cGUgUG9zdE1ldGFTZW5kZXJCb2R5ID0ge1xuICAgIEVtYWlsOiBzdHJpbmc7XG4gICAgRGVzY3JpcHRpb24/OiBzdHJpbmc7XG4gIH1cblxuICBleHBvcnQgdHlwZSBQdXRNZXRhU2VuZGVyQm9keSA9IE9taXQ8UG9zdE1ldGFTZW5kZXJCb2R5LCAnRW1haWwnPlxuXG4gIGV4cG9ydCB0eXBlIEdldE1ldGFTZW5kZXJRdWVyeVBhcmFtcyA9IFBhcnRpYWw8Q29tbW9uLlBhZ2luYXRpb24+ICYge1xuICAgIEROUz86IG51bWJlcjtcbiAgfVxuXG4gIC8vIFJFU1BPTlNFIFBBUlRcbiAgdHlwZSBNZXRhU2VuZGVyUmVzcG9uc2UgPSBDb21tb24uUmVzcG9uc2U8TWV0YVNlbmRlcltdPjtcblxuICBleHBvcnQgdHlwZSBQb3N0TWV0YVNlbmRlclJlc3BvbnNlID0gTWV0YVNlbmRlclJlc3BvbnNlXG4gIGV4cG9ydCB0eXBlIFB1dE1ldGFTZW5kZXJSZXNwb25zZSA9IE1ldGFTZW5kZXJSZXNwb25zZVxuICBleHBvcnQgdHlwZSBHZXRNZXRhU2VuZGVyUmVzcG9uc2UgPSBNZXRhU2VuZGVyUmVzcG9uc2Vcbn1cblxuZXhwb3J0IG5hbWVzcGFjZSBETlMge1xuICBleHBvcnQgZW51bSBES0lNQ29uZmlndXJhdGlvbkNoZWNrU3RhdHVzIHtcbiAgICBPSyA9ICdPSycsXG4gICAgRXJyb3IgPSAnRXJyb3InLFxuICAgIE5vdENoZWNrZWQgPSAnTm90IGNoZWNrZWQnXG4gIH1cblxuICBleHBvcnQgZW51bSBES0lNQ29uZmlndXJhdGlvblN0YXR1cyB7XG4gICAgT0sgPSAnT0snLFxuICAgIEVycm9yID0gJ0Vycm9yJ1xuICB9XG5cbiAgZXhwb3J0IGVudW0gU1BGQ29uZmlndXJhdGlvbkNoZWNrU3RhdHVzIHtcbiAgICBPSyA9ICdPSycsXG4gICAgRXJyb3IgPSAnRXJyb3InLFxuICAgIE5vdENoZWNrZWQgPSAnTm90IGNoZWNrZWQnLFxuICAgIE5vdEZvdW5kID0gJ05vdCBmb3VuZCcsXG4gIH1cblxuICBleHBvcnQgZW51bSBTUEZDb25maWd1cmF0aW9uU3RhdHVzIHtcbiAgICBPSyA9ICdPSycsXG4gICAgRXJyb3IgPSAnRXJyb3InXG4gIH1cblxuICBleHBvcnQgaW50ZXJmYWNlIEROUyB7XG4gICAgSUQ6IG51bWJlcjtcbiAgICBES0lNUmVjb3JkTmFtZTogc3RyaW5nO1xuICAgIERLSU1SZWNvcmRWYWx1ZTogc3RyaW5nO1xuICAgIERLSU1TdGF0dXM6IERLSU1Db25maWd1cmF0aW9uQ2hlY2tTdGF0dXM7XG4gICAgRG9tYWluOiBzdHJpbmc7XG4gICAgSXNDaGVja0luUHJvZ3Jlc3M6IGJvb2xlYW47XG4gICAgTGFzdENoZWNrQXQ6IHN0cmluZztcbiAgICBPd25lclNoaXBUb2tlbjogc3RyaW5nO1xuICAgIE93bmVyU2hpcFRva2VuUmVjb3JkTmFtZTogc3RyaW5nO1xuICAgIFNQRlJlY29yZFZhbHVlOiBzdHJpbmc7XG4gICAgU1BGU3RhdHVzOiBTUEZDb25maWd1cmF0aW9uQ2hlY2tTdGF0dXM7XG4gIH1cblxuICBleHBvcnQgaW50ZXJmYWNlIEROU0NoZWNrIHtcbiAgICBES0lNRXJyb3JzOiBzdHJpbmc7XG4gICAgREtJTVJlY29yZEN1cnJlbnRWYWx1ZTogc3RyaW5nO1xuICAgIERLSU1TdGF0dXM6IERLSU1Db25maWd1cmF0aW9uU3RhdHVzO1xuICAgIFNQRkVycm9yczogc3RyaW5nO1xuICAgIFNQRlJlY29yZEN1cnJlbnRWYWx1ZTogc3RyaW5nO1xuICAgIFNQRlN0YXR1czogU1BGQ29uZmlndXJhdGlvblN0YXR1cztcbiAgfVxuXG4gIC8vIFJFUVVFU1QgUEFSVFxuICBleHBvcnQgdHlwZSBHZXRETlNRdWVyeVBhcmFtcyA9IFBhcnRpYWw8Q29tbW9uLlBhZ2luYXRpb24+ICYge1xuICAgIElzQ2hlY2tJblByb2dyZXNzPzogYm9vbGVhbjtcbiAgICBJc1NlbmRlcklkZW50aWZpZWQ/OiBib29sZWFuO1xuICAgIElzWWFob29GQkw/OiBib29sZWFuO1xuICAgIE1heExhc3RDaGVja0F0Pzogc3RyaW5nO1xuICAgIE1pbkxhc3RDaGVja0F0Pzogc3RyaW5nO1xuICAgIFNQRlN0YXR1cz86IFNQRkNvbmZpZ3VyYXRpb25DaGVja1N0YXR1cztcbiAgfVxuXG4gIC8vIFJFU1BPTlNFIFBBUlRcbiAgZXhwb3J0IHR5cGUgR2V0RE5TUmVzcG9uc2UgPSBDb21tb24uUmVzcG9uc2U8RE5TW10+O1xuICBleHBvcnQgdHlwZSBQb3N0RE5TQ2hlY2tSZXNwb25zZSA9IENvbW1vbi5SZXNwb25zZTxETlNDaGVja1tdPjtcbn1cbiIsImltcG9ydCB7IENvbW1vbiB9IGZyb20gJy4vQ29tbW9uJztcblxuZXhwb3J0IG5hbWVzcGFjZSBBUElLZXlDb25maWd1cmF0aW9uIHtcbiAgZXhwb3J0IGVudW0gUnVuTGV2ZWwge1xuICAgIE5vcm1hbCA9ICdOb3JtYWwnLFxuICAgIFNvZnRMb2NrID0gJ1NvZnRsb2NrJyxcbiAgICBIYXJkTG9jayA9ICdIYXJkbG9jaydcbiAgfVxuXG4gIGV4cG9ydCBpbnRlcmZhY2UgQXBpS2V5IHtcbiAgICBJRDogbnVtYmVyO1xuICAgIEFDTDogc3RyaW5nO1xuICAgIElzQWN0aXZlOiBib29sZWFuO1xuICAgIEFQSUtleTogc3RyaW5nO1xuICAgIENyZWF0ZWRBdDogc3RyaW5nO1xuICAgIElzTWFzdGVyOiBib29sZWFuO1xuICAgIE5hbWU6IHN0cmluZztcbiAgICBRdWFyYW50aW5lVmFsdWU6IG51bWJlcjtcbiAgICBSdW5sZXZlbDogUnVuTGV2ZWw7XG4gICAgU2VjcmV0S2V5OiBzdHJpbmc7XG4gICAgVHJhY2tIb3N0OiBzdHJpbmc7XG4gICAgVXNlcklEOiBudW1iZXI7XG4gIH1cblxuICAvLyBSRVFVRVNUIFBBUlRcbiAgZXhwb3J0IHR5cGUgUG9zdEFwaUtleUJvZHkgPSB7XG4gICAgTmFtZTogc3RyaW5nO1xuICAgIEFDTD86IHN0cmluZztcbiAgICBJc0FjdGl2ZT86IGJvb2xlYW47XG4gIH1cblxuICBleHBvcnQgdHlwZSBQdXRBcGlLZXlCb2R5ID0gUGFydGlhbDxQb3N0QXBpS2V5Qm9keT5cblxuICBleHBvcnQgdHlwZSBHZXRBcGlLZXlRdWVyeVBhcmFtcyA9IFBhcnRpYWw8Q29tbW9uLlBhZ2luYXRpb24+ICYge1xuICAgIEFQSUtleT86IHN0cmluZztcbiAgICBJc0FjdGl2ZT86IGJvb2xlYW47XG4gICAgSXNNYXN0ZXI/OiBib29sZWFuO1xuICAgIE5hbWU/OiBzdHJpbmc7XG4gIH1cblxuICAvLyBSRVNQT05TRSBQQVJUXG4gIHR5cGUgQXBpS2V5UmVzcG9uc2UgPSBDb21tb24uUmVzcG9uc2U8QXBpS2V5W10+O1xuXG4gIGV4cG9ydCB0eXBlIFBvc3RBcGlLZXlSZXNwb25zZSA9IEFwaUtleVJlc3BvbnNlXG4gIGV4cG9ydCB0eXBlIFB1dEFwaUtleVJlc3BvbnNlID0gQXBpS2V5UmVzcG9uc2VcbiAgZXhwb3J0IHR5cGUgR2V0QXBpS2V5UmVzcG9uc2UgPUFwaUtleVJlc3BvbnNlXG59XG5cbmV4cG9ydCBuYW1lc3BhY2UgQWNjb3VudFNldHRpbmcge1xuICBleHBvcnQgaW50ZXJmYWNlIE15UHJvZmlsZSB7XG4gICAgSUQ6IG51bWJlcjtcbiAgICBBZGRyZXNzQ2l0eTogc3RyaW5nO1xuICAgIEFkZHJlc3NDb3VudHJ5OiBzdHJpbmc7XG4gICAgQWRkcmVzc1Bvc3RhbENvZGU6IHN0cmluZztcbiAgICBBZGRyZXNzU3RhdGU6IHN0cmluZztcbiAgICBBZGRyZXNzU3RyZWV0OiBzdHJpbmc7XG4gICAgQmlsbGluZ0VtYWlsOiBzdHJpbmc7XG4gICAgQmlydGhkYXlBdDogc3RyaW5nO1xuICAgIENvbXBhbnlOYW1lOiBzdHJpbmc7XG4gICAgQ29tcGFueU51bU9mRW1wbG95ZWVzOiBzdHJpbmc7XG4gICAgQ29udGFjdFBob25lOiBzdHJpbmc7XG4gICAgRXN0aW1hdGVkVm9sdW1lOiBudW1iZXI7XG4gICAgRmVhdHVyZXM6IHN0cmluZztcbiAgICBGaXJzdG5hbWU6IHN0cmluZztcbiAgICBJbmR1c3RyeTogbnVtYmVyO1xuICAgIEpvYlRpdGxlOiBzdHJpbmc7XG4gICAgTGFzdG5hbWU6IHN0cmluZztcbiAgICBWQVROdW1iZXI6IHN0cmluZztcbiAgICBXZWJzaXRlOiBzdHJpbmc7XG4gICAgVkFUOiBudW1iZXI7XG4gICAgVXNlcklEOiBudW1iZXI7XG4gIH1cblxuICBleHBvcnQgaW50ZXJmYWNlIFVzZXIge1xuICAgIElEOiBudW1iZXI7XG4gICAgQUNMOiBzdHJpbmc7XG4gICAgRW1haWw6IHN0cmluZztcbiAgICBMYXN0TG9naW5BdDogc3RyaW5nO1xuICAgIExvY2FsZTogc3RyaW5nO1xuICAgIFRpbWV6b25lOiBzdHJpbmc7XG4gICAgQ3JlYXRlZEF0OiBzdHJpbmc7XG4gICAgRmlyc3RJcDogc3RyaW5nO1xuICAgIExhc3RJcDogc3RyaW5nO1xuICAgIE1heEFsbG93ZWRBUElLZXlzOiBudW1iZXI7XG4gICAgVXNlcm5hbWU6IHN0cmluZztcbiAgICBXYXJuZWRSYXRlbGltaXRBdDogc3RyaW5nO1xuICB9XG5cbiAgLy8gUkVRVUVTVCBQQVJUXG4gIGV4cG9ydCB0eXBlIFB1dE15UHJvZmlsZUJvZHkgPSBQYXJ0aWFsPE9taXQ8TXlQcm9maWxlLCAnSUQnIHwgJ1ZBVCcgfCAnVXNlcklEJz4+XG5cbiAgZXhwb3J0IHR5cGUgUHV0VXNlckJvZHkgPVxuICAgIFBhcnRpYWw8T21pdDxVc2VyLCAnSUQnIHwgJ0NyZWF0ZWRBdCcgfCAnRmlyc3RJcCcgfCAnTWF4QWxsb3dlZEFQSUtleXMnIHwgJ1dhcm5lZFJhdGVsaW1pdEF0Jz4+XG5cbiAgLy8gUkVTUE9OU0UgUEFSVFxuICB0eXBlIE15UHJvZmlsZVJlc3BvbnNlID0gQ29tbW9uLlJlc3BvbnNlPE15UHJvZmlsZVtdPjtcbiAgdHlwZSBVc2VyUmVzcG9uc2UgPSBDb21tb24uUmVzcG9uc2U8VXNlcltdPjtcblxuICBleHBvcnQgdHlwZSBQdXRNeVByb2ZpbGVSZXNwb25zZSA9IE15UHJvZmlsZVJlc3BvbnNlXG4gIGV4cG9ydCB0eXBlIEdldE15UHJvZmlsZVJlc3BvbnNlID0gTXlQcm9maWxlUmVzcG9uc2VcblxuICBleHBvcnQgdHlwZSBQdXRVc2VyUmVzcG9uc2UgPSBVc2VyUmVzcG9uc2VcbiAgZXhwb3J0IHR5cGUgR2V0VXNlclJlc3BvbnNlID0gVXNlclJlc3BvbnNlXG59XG4iLCJpbXBvcnQgeyBDb21tb24gfSBmcm9tICcuL0NvbW1vbic7XG5pbXBvcnQgeyBNZXNzYWdlIH0gZnJvbSAnLi9NZXNzYWdlJztcblxuZXhwb3J0IG5hbWVzcGFjZSBTdGF0aXN0aWMge1xuICBleHBvcnQgZW51bSBDYW1wYWlnbk92ZXJ2aWV3SURUeXBlIHtcbiAgICBTZW50Q2FtcGFpZ24gPSAnQ2FtcGFpZ24nLFxuICAgIEFCVGVzdGluZyA9ICdBWCcsXG4gICAgRHJhZnQgPSAnTkwnXG4gIH1cblxuICBleHBvcnQgZW51bSBDYW1wYWlnbk92ZXJ2aWV3RWRpdE1vZGUge1xuICAgIFRvb2wgPSAndG9vbCcsXG4gICAgSFRNTCA9ICdodG1sJyxcbiAgICBUb29sMiA9ICd0b29sMicsXG4gICAgSFRNTDIgPSAnaHRtbDInLFxuICAgIE1KTUwgPSAnbWptbCcsXG4gIH1cblxuICBleHBvcnQgZW51bSBDYW1wYWlnbk92ZXJ2aWV3RWRpdFR5cGUge1xuICAgIEZ1bGwgPSAnZnVsbCcsXG4gICAgVW5rbm93biA9ICd1bmtub3duJ1xuICB9XG5cbiAgZXhwb3J0IGVudW0gQ291bnRlclNvdXJjZSB7XG4gICAgQ2FtcGFpZ24gPSAnQ2FtcGFpZ24nLFxuICAgIEFQSUtleSA9ICdBUElLZXknLFxuICAgIExpc3QgPSAnTGlzdCcsXG4gICAgU2VuZGVyID0gJ1NlbmRlcidcbiAgfVxuXG4gIGV4cG9ydCBlbnVtIENvdW50ZXJSZXNvbHV0aW9uIHtcbiAgICBIaWdoZXN0ID0gJ0hpZ2hlc3QnLFxuICAgIEhvdXIgPSAnSG91cicsXG4gICAgRGF5ID0gJ0RheScsXG4gICAgTGlmZXRpbWUgPSAnTGlmZXRpbWUnXG4gIH1cblxuICBleHBvcnQgZW51bSBDb3VudGVyVGltaW5nIHtcbiAgICBNZXNzYWdlID0gJ01lc3NhZ2UnLFxuICAgIEV2ZW50ID0gJ0V2ZW50J1xuICB9XG5cbiAgZXhwb3J0IGVudW0gRW1haWxFdmVudCB7XG4gICAgT3BlbiA9ICdvcGVuJyxcbiAgICBDbGljayA9ICdjbGljaydcbiAgfVxuXG4gIGV4cG9ydCBpbnRlcmZhY2UgQ2FtcGFpZ25PdmVydmlldyB7XG4gICAgQ2xpY2tlZENvdW50OiBudW1iZXI7XG4gICAgRGVsaXZlcmVkQ291bnQ6IG51bWJlcjtcbiAgICBFZGl0TW9kZTogQ2FtcGFpZ25PdmVydmlld0VkaXRNb2RlO1xuICAgIEVkaXRUeXBlOiBDYW1wYWlnbk92ZXJ2aWV3RWRpdFR5cGU7XG4gICAgSUQ6IG51bWJlcjtcbiAgICBJRFR5cGU6IENhbXBhaWduT3ZlcnZpZXdJRFR5cGU7XG4gICAgT3BlbmVkQ291bnQ6IG51bWJlcjtcbiAgICBQcm9jZXNzZWRDb3VudDogbnVtYmVyO1xuICAgIFNlbmRUaW1lU3RhcnQ6IG51bWJlcjtcbiAgICBTdGFycmVkOiBib29sZWFuO1xuICAgIFN1YmplY3Q6IHN0cmluZztcbiAgICBUaXRsZTogc3RyaW5nO1xuICB9XG5cbiAgZXhwb3J0IGludGVyZmFjZSBDb250YWN0U3RhdGlzdGljIHtcbiAgICBCbG9ja2VkQ291bnQ6IG51bWJlcjtcbiAgICBCb3VuY2VkQ291bnQ6IG51bWJlcjtcbiAgICBDbGlja2VkQ291bnQ6IG51bWJlcjtcbiAgICBDb250YWN0SUQ6IG51bWJlcjtcbiAgICBEZWZlcnJlZENvdW50OiBudW1iZXI7XG4gICAgRGVsaXZlcmVkQ291bnQ6IG51bWJlcjtcbiAgICBIYXJkYm91bmNlZENvdW50OiBudW1iZXI7XG4gICAgTGFzdEFjdGl2aXR5QXQ6IHN0cmluZztcbiAgICBNYXJrZXRpbmdDb250YWN0czogbnVtYmVyO1xuICAgIE9wZW5lZENvdW50OiBudW1iZXI7XG4gICAgUHJvY2Vzc2VkQ291bnQ6IG51bWJlcjtcbiAgICBRdWV1ZWRDb3VudDogbnVtYmVyO1xuICAgIFNvZnRib3VuY2VkQ291bnQ6IG51bWJlcjtcbiAgICBTcGFtQ29tcGxhaW50Q291bnQ6IG51bWJlcjtcbiAgICBVbnN1YnNjcmliZWRDb3VudDogbnVtYmVyO1xuICAgIFVzZXJNYXJrZXRpbmdDb250YWN0czogbnVtYmVyO1xuICAgIFdvcmtGbG93RXhpdGVkQ291bnQ6IG51bWJlcjtcbiAgfVxuXG4gIGV4cG9ydCBpbnRlcmZhY2UgR0VPU3RhdGlzdGljIHtcbiAgICBDbGlja2VkQ291bnQ6IG51bWJlcjtcbiAgICBPcGVuZWRDb3VudDogbnVtYmVyO1xuICAgIENvdW50cnk6IHN0cmluZztcbiAgfVxuXG4gIGV4cG9ydCBpbnRlcmZhY2UgTGlzdFJlY2lwaWVudFN0YXRpc3RpYzxEYXRhID0gQXJyYXk8dW5rbm93bj4+IHtcbiAgICBCbG9ja2VkQ291bnQ6IG51bWJlcjtcbiAgICBCb3VuY2VkQ291bnQ6IG51bWJlcjtcbiAgICBDbGlja2VkQ291bnQ6IG51bWJlcjtcbiAgICBEYXRhOiBEYXRhO1xuICAgIERlZmVycmVkQ291bnQ6IG51bWJlcjtcbiAgICBEZWxpdmVyZWRDb3VudDogbnVtYmVyO1xuICAgIEhhcmRib3VuY2VkQ291bnQ6IG51bWJlcjtcbiAgICBMYXN0QWN0aXZpdHlBdDogc3RyaW5nO1xuICAgIExpc3RSZWNpcGllbnRJRDogbnVtYmVyO1xuICAgIE9wZW5lZENvdW50OiBudW1iZXI7XG4gICAgUHJlUXVldWVkQ291bnQ6IG51bWJlcjtcbiAgICBQcm9jZXNzZWRDb3VudDogbnVtYmVyO1xuICAgIFF1ZXVlZENvdW50OiBudW1iZXI7XG4gICAgU29mdGJvdW5jZWRDb3VudDogbnVtYmVyO1xuICAgIFNwYW1Db21wbGFpbnRDb3VudDogbnVtYmVyO1xuICAgIFVuc3Vic2NyaWJlZENvdW50OiBudW1iZXI7XG4gICAgV29ya0Zsb3dFeGl0ZWRDb3VudDogbnVtYmVyO1xuICB9XG5cbiAgZXhwb3J0IGludGVyZmFjZSBTdGF0Q291bnRlciB7XG4gICAgQVBJS2V5SUQ6IG51bWJlcjtcbiAgICBFdmVudENsaWNrRGVsYXk6IG51bWJlcjtcbiAgICBFdmVudENsaWNrZWRDb3VudDogbnVtYmVyO1xuICAgIEV2ZW50T3BlbkRlbGF5OiBudW1iZXI7XG4gICAgRXZlbnRPcGVuZWRDb3VudDogbnVtYmVyO1xuICAgIEV2ZW50U3BhbUNvdW50OiBudW1iZXI7XG4gICAgRXZlbnRVbnN1YnNjcmliZWRDb3VudDogbnVtYmVyO1xuICAgIEV2ZW50V29ya2Zsb3dFeGl0ZWRDb3VudDogbnVtYmVyO1xuICAgIE1lc3NhZ2VCbG9ja2VkQ291bnQ6IG51bWJlcjtcbiAgICBNZXNzYWdlQ2xpY2tlZENvdW50OiBudW1iZXI7XG4gICAgTWVzc2FnZURlZmVycmVkQ291bnQ6IG51bWJlcjtcbiAgICBNZXNzYWdlSGFyZEJvdW5jZWRDb3VudDogbnVtYmVyO1xuICAgIE1lc3NhZ2VPcGVuZWRDb3VudDogbnVtYmVyO1xuICAgIE1lc3NhZ2VRdWV1ZWRDb3VudDogbnVtYmVyO1xuICAgIE1lc3NhZ2VTZW50Q291bnQ6IG51bWJlcjtcbiAgICBNZXNzYWdlU29mdEJvdW5jZWRDb3VudDogbnVtYmVyO1xuICAgIE1lc3NhZ2VTcGFtQ291bnQ6IG51bWJlcjtcbiAgICBNZXNzYWdlVW5zdWJzY3JpYmVkQ291bnQ6IG51bWJlcjtcbiAgICBNZXNzYWdlV29ya0Zsb3dFeGl0ZWRDb3VudDogbnVtYmVyO1xuICAgIFNvdXJjZUlEOiBudW1iZXI7XG4gICAgVGltZXNsaWNlOiBzdHJpbmc7XG4gICAgVG90YWw6IG51bWJlcjtcbiAgfVxuXG4gIGV4cG9ydCBpbnRlcmZhY2UgTGlua0NsaWNrU3RhdGlzdGljIHtcbiAgICBDbGlja2VkRXZlbnRzQ291bnQ6IG51bWJlcjtcbiAgICBDbGlja2VkTWVzc2FnZXNDb3VudDogbnVtYmVyO1xuICAgIFBvc2l0aW9uSW5kZXg6IG51bWJlcjtcbiAgICBVUkw6IHN0cmluZztcbiAgfVxuXG4gIGV4cG9ydCBpbnRlcmZhY2UgUmVjaXBpZW50RVNQU3RhdGlzdGljIHtcbiAgICBBdHRlbXB0ZWRNZXNzYWdlc0NvdW50PzogbnVtYmVyO1xuICAgIENsaWNrZWRNZXNzYWdlc0NvdW50PzogbnVtYmVyO1xuICAgIERlZmVycmVkTWVzc2FnZXNDb3VudD86IG51bWJlcjtcbiAgICBEZWxpdmVyZWRNZXNzYWdlc0NvdW50PzogbnVtYmVyO1xuICAgIEhhcmRCb3VuY2VkTWVzc2FnZXNDb3VudD86IG51bWJlcjtcbiAgICBFU1BOYW1lPzogc3RyaW5nO1xuICAgIE9wZW5lZE1lc3NhZ2VzQ291bnQ/OiBudW1iZXI7XG4gICAgU29mdEJvdW5jZWRNZXNzYWdlc0NvdW50PzogbnVtYmVyO1xuICAgIFNwYW1SZXBvcnRzQ291bnQ/OiBudW1iZXI7XG4gICAgVW5zdWJzY3JpYmVkTWVzc2FnZXNDb3VudD86IG51bWJlcjtcbiAgICBPcGVuUmF0ZT86IG51bWJlcjtcbiAgICBDbGlja1Rocm91Z2hSYXRlPzogbnVtYmVyO1xuICAgIFNvZnRCb3VuY2VkUmF0ZT86IG51bWJlcjtcbiAgICBIYXJkQm91bmNlZFJhdGU/OiBudW1iZXI7XG4gICAgVW5zdWJzY3JpYmVkUmF0ZT86IG51bWJlcjtcbiAgICBTcGFtUmVwb3J0c1JhdGU/OiBudW1iZXI7XG4gICAgRGVmZXJyZWRSYXRlPzogbnVtYmVyO1xuICB9XG5cbiAgZXhwb3J0IGludGVyZmFjZSBUb3BMaW5rQ2xpY2tlZCB7XG4gICAgQ2xpY2tlZENvdW50OiBudW1iZXI7XG4gICAgTGlua0lkOiBudW1iZXI7XG4gICAgVXJsOiBzdHJpbmc7XG4gIH1cblxuICBleHBvcnQgaW50ZXJmYWNlIFVzZXJBZ2VudFN0YXRpc3RpYyB7XG4gICAgQ291bnQ6IG51bWJlcjtcbiAgICBEaXN0aW5jdENvdW50OiBudW1iZXI7XG4gICAgUGxhdGZvcm06IHN0cmluZztcbiAgICBVc2VyQWdlbnQ6IHN0cmluZztcbiAgfVxuXG4gIC8vIFJFUVVFU1QgUEFSVFxuICBleHBvcnQgdHlwZSBHZXRDYW1wYWlnbk92ZXJ2aWV3UXVlcnlQYXJhbXMgPSBQYXJ0aWFsPENvbW1vbi5QYWdpbmF0aW9uPiAmIHtcbiAgICBBbGw/OiBib29sZWFuO1xuICAgIEFyY2hpdmVkPzogYm9vbGVhbjtcbiAgICBEcmFmdHM/OiBib29sZWFuO1xuICAgIElEPzogbnVtYmVyO1xuICAgIElEVHlwZT86IENhbXBhaWduT3ZlcnZpZXdJRFR5cGU7XG4gICAgUHJvZ3JhbW1lZD86IGJvb2xlYW47XG4gICAgU2VudD86IGJvb2xlYW47XG4gICAgU3RhcnJlZD86IGJvb2xlYW47XG4gICAgU3ViamVjdD86IHN0cmluZztcbiAgfVxuXG4gIGV4cG9ydCB0eXBlIEdldENvbnRhY3RTdGF0aXN0aWNzUXVlcnlQYXJhbXMgPSBQYXJ0aWFsPENvbW1vbi5QYWdpbmF0aW9uPiAmIHtcbiAgICBCbG9ja2VkPzogYm9vbGVhbjtcbiAgICBCb3VuY2VkPzogYm9vbGVhbjtcbiAgICBDbGljaz86IGJvb2xlYW47XG4gICAgRGVmZXJyZWQ/OiBib29sZWFuO1xuICAgIEhhcmRib3VuY2VkPzogYm9vbGVhbjtcbiAgICBMYXN0QWN0aXZpdHlBdD86IHN0cmluZztcbiAgICBNYXhMYXN0QWN0aXZpdHlBdD86IHN0cmluZztcbiAgICBNaW5MYXN0QWN0aXZpdHlBdD86IHN0cmluZztcbiAgICBPcGVuPzogYm9vbGVhbjtcbiAgICBRdWV1ZWQ/OiBib29sZWFuO1xuICAgIFNlbnQ/OiBib29sZWFuO1xuICAgIFNwYW0/OiBib29sZWFuO1xuICAgIFNvZnRib3VuY2VkPzogYm9vbGVhbjtcbiAgICBVbnN1YnNjcmliZWQ/OiBib29sZWFuO1xuICB9XG5cbiAgZXhwb3J0IHR5cGUgR2V0R0VPU3RhdGlzdGljc1F1ZXJ5UGFyYW1zID0gUGFydGlhbDxDb21tb24uVGltZXN0YW1wUGVyaW9kPiAmXG4gICAgUGFydGlhbDxDb21tb24uUGFnaW5hdGlvbj4gJlxuICB7XG4gICAgQ2FtcGFpZ25JRD86IG51bWJlcjtcbiAgICBDb250YWN0c0xpc3Q/OiBudW1iZXI7XG4gICAgQ3VzdG9tQ2FtcGFpZ24/OiBzdHJpbmc7XG4gICAgRnJvbT86IHN0cmluZztcbiAgICBGcm9tRG9tYWluPzogc3RyaW5nO1xuICAgIEZyb21JRD86IG51bWJlcjtcbiAgICBGcm9tVHlwZT86IE1lc3NhZ2UuRnJvbVR5cGU7XG4gICAgSXNEZWxldGVkPzogYm9vbGVhbjtcbiAgICBJc05ld3NsZXR0ZXJUb29sPzogYm9vbGVhbjtcbiAgICBJc1N0YXJyZWQ/OiBib29sZWFuO1xuICAgIE1lc3NhZ2VTdGF0dXM/OiBNZXNzYWdlLk1lc3NhZ2VTdGF0dXM7XG4gICAgUGVyaW9kPzogQ29tbW9uLlBlcmlvZDtcbiAgfVxuXG4gIGV4cG9ydCB0eXBlIEdldExpc3RSZWNpcGllbnRTdGF0aXN0aWNzUXVlcnlQYXJhbXMgPSBQYXJ0aWFsPENvbW1vbi5QYWdpbmF0aW9uPiAmIHtcbiAgICBCbG9ja2VkPzogYm9vbGVhbjtcbiAgICBCb3VuY2VkPzogYm9vbGVhbjtcbiAgICBDbGljaz86IGJvb2xlYW47XG4gICAgQ29udGFjdD86IG51bWJlcjtcbiAgICBDb250YWN0c0xpc3Q/OiBudW1iZXI7XG4gICAgSXNFeGNsdWRlZEZyb21DYW1wYWlnbnM/OiBib29sZWFuO1xuICAgIElzVW5zdWJzY3JpYmVkPzogYm9vbGVhbjtcbiAgICBMYXN0QWN0aXZpdHlBdD86IHN0cmluZztcbiAgICBNYXhMYXN0QWN0aXZpdHlBdD86IHN0cmluZztcbiAgICBNaW5MYXN0QWN0aXZpdHlBdD86IHN0cmluZztcbiAgICBNYXhVbnN1YnNjcmliZWRBdD86IHN0cmluZztcbiAgICBNaW5VbnN1YnNjcmliZWRBdD86IHN0cmluZztcbiAgICBPcGVuPzogYm9vbGVhbjtcbiAgICBRdWV1ZWQ/OiBib29sZWFuO1xuICAgIFNlbnQ/OiBib29sZWFuO1xuICAgIFNob3dFeHRyYURhdGE/OiBib29sZWFuO1xuICAgIFNwYW0/OiBib29sZWFuO1xuICAgIFRpbWVab25lPzogc3RyaW5nO1xuICAgIFVuc3Vic2NyaWJlZD86IGJvb2xlYW47XG4gIH1cblxuICBleHBvcnQgdHlwZSBHZXRTdGF0Q291bnRlcnNRdWVyeVBhcmFtcyA9IFBhcnRpYWw8Q29tbW9uLlRpbWVzdGFtcFBlcmlvZD4gJlxuICAgIFBhcnRpYWw8Q29tbW9uLlBhZ2luYXRpb24+ICZcbiAge1xuICAgIENvdW50ZXJTb3VyY2U6IENvdW50ZXJTb3VyY2U7XG4gICAgQ291bnRlclJlc29sdXRpb246IENvdW50ZXJSZXNvbHV0aW9uO1xuICAgIENvdW50ZXJUaW1pbmc6IENvdW50ZXJUaW1pbmc7XG4gICAgU291cmNlSUQ/OiBudW1iZXI7XG4gIH1cblxuICBleHBvcnQgdHlwZSBHZXRMaW5rQ2xpY2tTdGF0aXN0aWNzUXVlcnlQYXJhbXMgPSBQYXJ0aWFsPENvbW1vbi5QYWdpbmF0aW9uPiAmIHtcbiAgICBDYW1wYWlnbklEOiBudW1iZXI7XG4gIH1cblxuICBleHBvcnQgdHlwZSBHZXRSZWNpcGllbnRFU1BTdGF0aXN0aWNzUXVlcnlQYXJhbXMgPSBHZXRMaW5rQ2xpY2tTdGF0aXN0aWNzUXVlcnlQYXJhbXMgJlxuICB7XG4gICAgRVNQX05hbWU/OiBudW1iZXI7XG4gIH1cblxuICBleHBvcnQgdHlwZSBHZXRUb3BMaW5rQ2xpY2tlZFF1ZXJ5UGFyYW1zID0gUGFydGlhbDxDb21tb24uVGltZXN0YW1wUGVyaW9kPiAmXG4gICAgUGFydGlhbDxDb21tb24uUGFnaW5hdGlvbj4gJlxuICB7XG4gICAgQWN0dWFsQ2xpY2tzPzogYm9vbGVhbjtcbiAgICBDYW1wYWlnbklEPzogbnVtYmVyO1xuICAgIENvbnRhY3Q/OiBudW1iZXI7XG4gICAgQ29udGFjdHNMaXN0PzogbnVtYmVyO1xuICAgIEN1c3RvbUNhbXBhaWduPzogc3RyaW5nO1xuICAgIEZyb20/OiBzdHJpbmc7XG4gICAgRnJvbURvbWFpbj86IHN0cmluZztcbiAgICBGcm9tSUQ/OiBudW1iZXI7XG4gICAgRnJvbVR5cGU/OiBNZXNzYWdlLkZyb21UeXBlO1xuICAgIElzRGVsZXRlZD86IGJvb2xlYW47XG4gICAgSXNOZXdzbGV0dGVyVG9vbD86IGJvb2xlYW47XG4gICAgSXNTdGFycmVkPzogYm9vbGVhbjtcbiAgICBNZXNzYWdlPzogbnVtYmVyO1xuICAgIFBlcmlvZD86IENvbW1vbi5QZXJpb2Q7XG4gIH1cblxuICBleHBvcnQgdHlwZSBHZXRVc2VyQWdlbnRTdGF0aXN0aWNzUXVlcnlQYXJhbXMgPSBQYXJ0aWFsPENvbW1vbi5UaW1lc3RhbXBQZXJpb2Q+ICZcbiAgICBQYXJ0aWFsPENvbW1vbi5QYWdpbmF0aW9uPiAmXG4gIHtcbiAgICBDYW1wYWlnbklEPzogbnVtYmVyO1xuICAgIENvbnRhY3RzTGlzdD86IG51bWJlcjtcbiAgICBDdXN0b21DYW1wYWlnbj86IHN0cmluZztcbiAgICBFdmVudD86IEVtYWlsRXZlbnQ7XG4gICAgRXhjbHVkZVBsYXRmb3JtPzogc3RyaW5nO1xuICAgIEZyb20/OiBzdHJpbmc7XG4gICAgRnJvbURvbWFpbj86IHN0cmluZztcbiAgICBGcm9tSUQ/OiBudW1iZXI7XG4gICAgRnJvbVR5cGU/OiBNZXNzYWdlLkZyb21UeXBlO1xuICAgIElzRGVsZXRlZD86IGJvb2xlYW47XG4gICAgSXNOZXdzbGV0dGVyVG9vbD86IGJvb2xlYW47XG4gICAgSXNTdGFycmVkPzogYm9vbGVhbjtcbiAgICBQZXJpb2Q/OiBDb21tb24uUGVyaW9kO1xuICAgIFBsYXRmb3JtPzogc3RyaW5nO1xuICB9XG5cbiAgLy8gUkVTUE9OU0UgUEFSVFxuICBleHBvcnQgdHlwZSBHZXRDYW1wYWlnbk92ZXJ2aWV3UmVzcG9uc2UgPSBDb21tb24uUmVzcG9uc2U8Q2FtcGFpZ25PdmVydmlld1tdPjtcblxuICBleHBvcnQgdHlwZSBHZXRDb250YWN0U3RhdGlzdGljc1Jlc3BvbnNlID0gQ29tbW9uLlJlc3BvbnNlPENvbnRhY3RTdGF0aXN0aWNbXT47XG5cbiAgZXhwb3J0IHR5cGUgR2V0R0VPU3RhdGlzdGljc1Jlc3BvbnNlID0gQ29tbW9uLlJlc3BvbnNlPEdFT1N0YXRpc3RpY1tdPjtcblxuICBleHBvcnQgdHlwZSBHZXRMaXN0UmVjaXBpZW50U3RhdGlzdGljc1Jlc3BvbnNlPERhdGEgPSBBcnJheTx1bmtub3duPj4gPVxuICAgIENvbW1vbi5SZXNwb25zZTxBcnJheTxMaXN0UmVjaXBpZW50U3RhdGlzdGljPERhdGE+Pj47XG5cbiAgZXhwb3J0IHR5cGUgR2V0U3RhdENvdW50ZXJzUmVzcG9uc2UgPSBDb21tb24uUmVzcG9uc2U8U3RhdENvdW50ZXJbXT47XG5cbiAgZXhwb3J0IHR5cGUgR2V0TGlua0NsaWNrU3RhdGlzdGljc1Jlc3BvbnNlID0gQ29tbW9uLlJlc3BvbnNlPExpbmtDbGlja1N0YXRpc3RpY1tdPjtcblxuICBleHBvcnQgdHlwZSBHZXRSZWNpcGllbnRFU1BTdGF0aXN0aWNzUmVzcG9uc2UgPSBDb21tb24uUmVzcG9uc2U8UmVjaXBpZW50RVNQU3RhdGlzdGljW10+O1xuXG4gIGV4cG9ydCB0eXBlIEdldFRvcExpbmtDbGlja2VkUmVzcG9uc2UgPSBDb21tb24uUmVzcG9uc2U8VG9wTGlua0NsaWNrZWRbXT47XG5cbiAgZXhwb3J0IHR5cGUgR2V0VXNlckFnZW50U3RhdGlzdGljc1Jlc3BvbnNlID0gQ29tbW9uLlJlc3BvbnNlPFVzZXJBZ2VudFN0YXRpc3RpY1tdPjtcbn1cbiIsImltcG9ydCB7IENvbW1vbiB9IGZyb20gJy4vQ29tbW9uJztcblxuZXhwb3J0IG5hbWVzcGFjZSBUZW1wbGF0ZSB7XG4gIGV4cG9ydCBlbnVtIENhdGVnb3JpZXMge1xuICAgIEZ1bGwgPSAnZnVsbCcsXG4gICAgQmFzaWMgPSAnYmFzaWMnLFxuICAgIE5ld3NMZXR0ZXIgPSAnbmV3c2xldHRlcicsXG4gICAgRUNvbW1lcmNlID0gJ2UtY29tbWVyY2UnLFxuICAgIEV2ZW50cyA9ICdldmVudHMnLFxuICAgIFRyYXZlbCA9ICd0cmF2ZWwnLFxuICAgIFNwb3J0cyA9ICdzcG9ydHMnLFxuICAgIFdlbGNvbWUgPSAnd2VsY29tZScsXG4gICAgQ29udGFjdFByb3BlcnR5VXBkYXRlID0gJ2NvbnRhY3QtcHJvcGVydHktdXBkYXRlJyxcbiAgICBTdXBwb3J0ID0gJ3N1cHBvcnQnLFxuICAgIEludm9pY2UgPSAnaW52b2ljZScsXG4gICAgQW5uaXZlcnNhcnkgPSAnYW5uaXZlcnNhcnknLFxuICAgIEFjY291bnQgPSAnYWNjb3VudCcsXG4gICAgQWN0aXZhdGlvbiA9ICdhY3RpdmF0aW9uJ1xuICB9XG5cbiAgZXhwb3J0IGVudW0gQ2F0ZWdvcmllc1NlbGVjdGlvbk1ldGhvZCB7XG4gICAgQ29udGFpbnNBbnkgPSAnY29udGFpbnNhbnknLFxuICAgIENvbnRhaW5zQWxsID0gJ2NvbnRhaW5zYWxsJyxcbiAgICBJc1N1YlNldCA9ICdpc3N1YnNldCdcbiAgfVxuXG4gIGV4cG9ydCBlbnVtIEVkaXRNb2RlIHtcbiAgICBEcmFnQW5kRHJvcEJ1aWxkZXIgPSAxLFxuICAgIEhUTUxCdWlsZGVyID0gMixcbiAgICBTYXZlZFNlY3Rpb25CdWlsZGVyID0gMyxcbiAgICBNSk1MQnVpbGRlciA9IDRcbiAgfVxuXG4gIGV4cG9ydCBlbnVtIE93bmVyVHlwZSB7XG4gICAgQXBpS2V5ID0gJ2FwaWtleScsXG4gICAgVXNlciA9ICd1c2VyJyxcbiAgICBHbG9iYWwgPSAnZ2xvYmFsJ1xuICB9XG5cbiAgZXhwb3J0IGVudW0gUHVycG9zZXMge1xuICAgIE1hcmtldGluZyA9ICdtYXJrZXRpbmcnLFxuICAgIFRyYW5zYWN0aW9uYWwgPSAndHJhbnNhY3Rpb25hbCcsXG4gICAgQXV0b21hdGlvbiA9ICdhdXRvbWF0aW9uJ1xuICB9XG5cbiAgZXhwb3J0IGVudW0gUHVycG9zZXNTZWxlY3Rpb25NZXRob2Qge1xuICAgIENvbnRhaW5zQW55ID0gJ2NvbnRhaW5zYW55JyxcbiAgICBDb250YWluc0FsbCA9ICdjb250YWluc2FsbCcsXG4gICAgSXNTdWJTZXQgPSAnaXNzdWJzZXQnXG4gIH1cblxuICBleHBvcnQgaW50ZXJmYWNlIEhlYWRlcnMge1xuICAgIEZyb206IHN0cmluZztcbiAgICBTdWJqZWN0OiBzdHJpbmc7XG4gICAgJ1JlcGx5LXRvJzogc3RyaW5nO1xuICB9XG5cbiAgZXhwb3J0IGludGVyZmFjZSBUZW1wbGF0ZSB7XG4gICAgQXV0aG9yOiBzdHJpbmc7XG4gICAgQ2F0ZWdvcmllczogQ2F0ZWdvcmllcztcbiAgICBDb3B5cmlnaHQ6IHN0cmluZztcbiAgICBEZXNjcmlwdGlvbjogc3RyaW5nO1xuICAgIEVkaXRNb2RlOiBFZGl0TW9kZTtcbiAgICBJc1N0YXJyZWQ6IGJvb2xlYW47XG4gICAgSXNUZXh0UGFydEdlbmVyYXRpb25FbmFibGVkOiBib29sZWFuO1xuICAgIExvY2FsZTogc3RyaW5nO1xuICAgIE5hbWU6IHN0cmluZztcbiAgICBPd25lclR5cGU6IE93bmVyVHlwZTtcbiAgICBQcmVzZXRzOiBzdHJpbmc7XG4gICAgUHVycG9zZXM6IFB1cnBvc2VzO1xuICAgIElEOiBudW1iZXI7XG4gICAgT3duZXJJZDogbnVtYmVyO1xuICAgIFByZXZpZXdzOiBzdHJpbmc7XG4gICAgQ3JlYXRlZEF0OiBzdHJpbmc7XG4gICAgTGFzdFVwZGF0ZWRBdDogc3RyaW5nO1xuICB9XG5cbiAgZXhwb3J0IHR5cGUgVGVtcGxhdGVEZXRhaWxDb250ZW50ID0ge1xuICAgIEhlYWRlcnM6IEhlYWRlcnM7XG4gICAgJ0h0bWwtcGFydCc6IHN0cmluZztcbiAgICAnVGV4dC1wYXJ0Jzogc3RyaW5nO1xuICAgIE1KTUxDb250ZW50OiBzdHJpbmc7XG4gIH1cblxuICAvLyBSRVFVRVNUIFBBUlRcbiAgZXhwb3J0IHR5cGUgUG9zdFRlbXBsYXRlQm9keSA9XG4gICAgUGFydGlhbDxPbWl0PFRlbXBsYXRlLCAnTmFtZScgfCAnSUQnIHwgJ093bmVySWQnIHwgJ1ByZXZpZXdzJyB8ICdDcmVhdGVkQXQnIHwgJ0xhc3RVcGRhdGVkQXQnPj4gJlxuICB7XG4gICAgTmFtZTogc3RyaW5nO1xuICB9XG5cbiAgZXhwb3J0IHR5cGUgUHV0VGVtcGxhdGVCb2R5ID0gUGFydGlhbDxQb3N0VGVtcGxhdGVCb2R5PlxuXG4gIGV4cG9ydCB0eXBlIEdldFRlbXBsYXRlUXVlcnlQYXJhbXMgPSBQYXJ0aWFsPENvbW1vbi5QYWdpbmF0aW9uPiAmIHtcbiAgICBDYXRlZ29yaWVzPzogc3RyaW5nO1xuICAgIENhdGVnb3JpZXNTZWxlY3Rpb25NZXRob2Q/OiBDYXRlZ29yaWVzU2VsZWN0aW9uTWV0aG9kO1xuICAgIEVkaXRNb2RlPzogRWRpdE1vZGU7XG4gICAgTmFtZT86IHN0cmluZztcbiAgICBPd25lclR5cGU/OiBPd25lclR5cGU7XG4gICAgUHVycG9zZXM/OiBQdXJwb3NlcztcbiAgICBQdXJwb3Nlc1NlbGVjdGlvbk1ldGhvZD86IFB1cnBvc2VzU2VsZWN0aW9uTWV0aG9kO1xuICB9XG5cbiAgZXhwb3J0IHR5cGUgUG9zdFRlbXBsYXRlRGV0YWlsQ29udGVudEJvZHkgPVxuICAgIFBhcnRpYWw8T21pdDxUZW1wbGF0ZURldGFpbENvbnRlbnQsICdIZWFkZXJzJz4+ICZcbiAge1xuICAgIEhlYWRlcnM/OiBQYXJ0aWFsPEhlYWRlcnM+O1xuICB9XG5cbiAgZXhwb3J0IHR5cGUgUHV0VGVtcGxhdGVEZXRhaWxDb250ZW50Qm9keSA9IFBvc3RUZW1wbGF0ZURldGFpbENvbnRlbnRCb2R5XG5cbiAgLy8gUkVTUE9OU0UgUEFSVFxuICB0eXBlIFRlbXBsYXRlUmVzcG9uc2UgPSBDb21tb24uUmVzcG9uc2U8VGVtcGxhdGVbXT47XG4gIHR5cGUgVGVtcGxhdGVEZXRhaWxDb250ZW50UmVzcG9uc2UgPSBDb21tb24uUmVzcG9uc2U8VGVtcGxhdGVEZXRhaWxDb250ZW50W10+O1xuXG4gIGV4cG9ydCB0eXBlIFBvc3RUZW1wbGF0ZVJlc3BvbnNlID0gVGVtcGxhdGVSZXNwb25zZVxuICBleHBvcnQgdHlwZSBQdXRUZW1wbGF0ZVJlc3BvbnNlID0gVGVtcGxhdGVSZXNwb25zZVxuICBleHBvcnQgdHlwZSBHZXRUZW1wbGF0ZVJlc3BvbnNlID0gVGVtcGxhdGVSZXNwb25zZVxuXG4gIGV4cG9ydCB0eXBlIFBvc3RUZW1wbGF0ZURldGFpbENvbnRlbnRSZXNwb25zZSA9IFRlbXBsYXRlRGV0YWlsQ29udGVudFJlc3BvbnNlXG4gIGV4cG9ydCB0eXBlIFB1dFRlbXBsYXRlRGV0YWlsQ29udGVudFJlc3BvbnNlID0gVGVtcGxhdGVEZXRhaWxDb250ZW50UmVzcG9uc2VcbiAgZXhwb3J0IHR5cGUgR2V0VGVtcGxhdGVEZXRhaWxDb250ZW50UmVzcG9uc2UgPSBUZW1wbGF0ZURldGFpbENvbnRlbnRSZXNwb25zZVxufVxuIiwiaW1wb3J0IHsgQ29tbW9uIH0gZnJvbSAnLi9Db21tb24nO1xuXG5leHBvcnQgbmFtZXNwYWNlIFdlYmhvb2sge1xuICBleHBvcnQgZW51bSBFdmVudFR5cGUge1xuICAgIE9wZW4gPSAnb3BlbicsXG4gICAgQ2xpY2sgPSAnY2xpY2snLFxuICAgIEJvdW5jZSA9ICdib3VuY2UnLFxuICAgIFNwYW0gPSAnc3BhbScsXG4gICAgQmxvY2tlZCA9ICdibG9ja2VkJyxcbiAgICBVblN1YiA9ICd1bnN1YicsXG4gICAgU2VudCA9ICdzZW50JyxcbiAgfVxuXG4gIGV4cG9ydCBlbnVtIEV2ZW50VHlwZVZhbHVlIHtcbiAgICBDbGljayA9IDEsXG4gICAgQm91bmNlID0gMixcbiAgICBTcGFtID0gMyxcbiAgICBCbG9ja2VkID0gNCxcbiAgICBVbnN1YnNjcmliZSA9IDUsXG4gICAgT3BlbiA9IDYsXG4gICAgU2VudCA9IDcsXG4gIH1cblxuICBleHBvcnQgZW51bSBTdGF0dXMge1xuICAgIERlYWQgPSAnZGVhZCcsXG4gICAgQWxpdmUgPSAnYWxpdmUnXG4gIH1cblxuICBleHBvcnQgdHlwZSBWZXJzaW9uID0gMSB8IDI7XG5cbiAgZXhwb3J0IGludGVyZmFjZSBFdmVudENhbGxiYWNrVXJsIHtcbiAgICBJRDogbnVtYmVyO1xuICAgIEV2ZW50VHlwZTogRXZlbnRUeXBlO1xuICAgIElzQmFja3VwOiBib29sZWFuO1xuICAgIFN0YXR1czogU3RhdHVzO1xuICAgIEFQSUtleUlEOiBudW1iZXI7XG4gICAgVmVyc2lvbjogVmVyc2lvbjtcbiAgICBVcmw6IHN0cmluZztcbiAgfVxuXG4gIC8vIFJFUVVFU1QgUEFSVFxuICBleHBvcnQgdHlwZSBQb3N0RXZlbnRDYWxsYmFja1VybEJvZHkgPSB7XG4gICAgVXJsOiBzdHJpbmc7XG4gICAgRXZlbnRUeXBlPzogRXZlbnRUeXBlO1xuICAgIElzQmFja3VwPzogYm9vbGVhbjtcbiAgICBTdGF0dXM/OiBTdGF0dXM7XG4gIH1cblxuICBleHBvcnQgdHlwZSBQdXRFdmVudENhbGxiYWNrVXJsQm9keSA9IFBhcnRpYWw8UG9zdEV2ZW50Q2FsbGJhY2tVcmxCb2R5PlxuXG4gIGV4cG9ydCB0eXBlIEdldEV2ZW50Q2FsbGJhY2tVcmxRdWVyeVBhcmFtcyA9IFBhcnRpYWw8Q29tbW9uLlBhZ2luYXRpb24+ICYge1xuICAgIEJhY2t1cD86IGJvb2xlYW47XG4gICAgRXZlbnRUeXBlPzogRXZlbnRUeXBlVmFsdWU7XG4gICAgU3RhdHVzPzogc3RyaW5nO1xuICAgIFZlcnNpb24/OiBWZXJzaW9uO1xuICB9XG5cbiAgLy8gUkVTUE9OU0UgUEFSVFxuICB0eXBlIEV2ZW50Q2FsbGJhY2tVcmxSZXNwb25zZSA9IHtcbiAgICBDb3VudDogbnVtYmVyO1xuICAgIFRvdGFsOiBudW1iZXI7XG4gICAgRGF0YTogRXZlbnRDYWxsYmFja1VybFtdO1xuICB9O1xuXG4gIGV4cG9ydCB0eXBlIFBvc3RFdmVudENhbGxiYWNrVXJsUmVzcG9uc2UgPSBFdmVudENhbGxiYWNrVXJsUmVzcG9uc2VcbiAgZXhwb3J0IHR5cGUgUHV0RXZlbnRDYWxsYmFja1VybFJlc3BvbnNlID0gRXZlbnRDYWxsYmFja1VybFJlc3BvbnNlXG4gIGV4cG9ydCB0eXBlIEdldEV2ZW50Q2FsbGJhY2tVcmxSZXNwb25zZSA9IEV2ZW50Q2FsbGJhY2tVcmxSZXNwb25zZVxufVxuIiwiLy8gQ09NTU9OXG5leHBvcnQgeyBMaWJyYXJ5UmVzcG9uc2UsIExpYnJhcnlMb2NhbFJlc3BvbnNlIH0gZnJvbSAnLi9MaWJyYXJ5UmVzcG9uc2UnO1xuZXhwb3J0IHsgQ29tbW9uIH0gZnJvbSAnLi9Db21tb24nO1xuXG4vLyBTRU5EXG5leHBvcnQge1xuICBTZW5kRW1haWxWMyxcbiAgU2VuZEVtYWlsVjNfMSxcbn0gZnJvbSAnLi9TZW5kRW1haWwnO1xuXG4vLyBBUElcbmV4cG9ydCB7IE1lc3NhZ2UgfSBmcm9tICcuL01lc3NhZ2UnO1xuZXhwb3J0IHtcbiAgQ29udGFjdCxcbiAgQ29udGFjdExpc3QsXG4gIEJ1bGtDb250YWN0TWFuYWdlbWVudCxcbiAgQ29udGFjdFByb3BlcnRpZXMsXG4gIENvbnRhY3RTdWJzY3JpcHRpb24sXG4gIENvbnRhY3RWZXJpZmljYXRpb24sXG59IGZyb20gJy4vQ29udGFjdCc7XG5leHBvcnQge1xuICBEcmFmdENhbXBhaWduLFxuICBTZW50Q2FtcGFpZ24sXG59IGZyb20gJy4vQ2FtcGFpZ24nO1xuZXhwb3J0IHsgU2VnbWVudGF0aW9uIH0gZnJvbSAnLi9TZWdtZW50YXRpb24nO1xuZXhwb3J0IHsgVGVtcGxhdGUgfSBmcm9tICcuL1RlbXBsYXRlJztcbmV4cG9ydCB7IFN0YXRpc3RpYyB9IGZyb20gJy4vU3RhdGlzdGljJztcbmV4cG9ydCB7IE1lc3NhZ2VFdmVudCB9IGZyb20gJy4vTWVzc2FnZUV2ZW50JztcbmV4cG9ydCB7IFdlYmhvb2sgfSBmcm9tICcuL1dlYmhvb2snO1xuZXhwb3J0IHsgUGFyc2UgfSBmcm9tICcuL1BhcnNlJztcbmV4cG9ydCB7XG4gIFNlbmRlcixcbiAgTWV0YXNlbmRlcixcbiAgRE5TLFxufSBmcm9tICcuL1NlbmRlckFkZHJlc3NBbmREb21haW4nO1xuZXhwb3J0IHtcbiAgQVBJS2V5Q29uZmlndXJhdGlvbixcbiAgQWNjb3VudFNldHRpbmcsXG59IGZyb20gJy4vU2V0dGluZyc7XG5cbi8vIFNNU1xuZXhwb3J0IHsgU2VuZE1lc3NhZ2UgfSBmcm9tICcuL1NlbmRNZXNzYWdlJztcbmV4cG9ydCB7IFNNU01lc3NhZ2UgfSBmcm9tICcuL1NNU01lc3NhZ2UnO1xuIiwiaW1wb3J0IGlzTmlsIGZyb20gJy4vaXNOaWwnO1xuaW1wb3J0IGlzTnVsbCBmcm9tICcuL2lzTnVsbCc7XG5pbXBvcnQgaXNVbmRlZmluZWQgZnJvbSAnLi9pc1VuZGVmaW5lZCc7XG5pbXBvcnQgaXNQdXJlT2JqZWN0IGZyb20gJy4vaXNQdXJlT2JqZWN0JztcbmltcG9ydCBzZXRWYWx1ZUlmTm90TmlsIGZyb20gJy4vc2V0VmFsdWVJZk5vdE5pbCc7XG5cbmV4cG9ydCB7XG4gIGlzTmlsLFxuICBpc051bGwsXG4gIGlzVW5kZWZpbmVkLFxuICBpc1B1cmVPYmplY3QsXG4gIHNldFZhbHVlSWZOb3ROaWwsXG59O1xuIiwiLypleHRlcm5hbCBtb2R1bGVzKi9cbi8qdHlwZXMqL1xuLyp1dGlscyovXG5pbXBvcnQgaXNOdWxsIGZyb20gJy4vaXNOdWxsJztcbmltcG9ydCBpc1VuZGVmaW5lZCBmcm9tICcuL2lzVW5kZWZpbmVkJztcbi8qbGliKi9cbi8qb3RoZXIqL1xuXG5mdW5jdGlvbiBpc05pbCh2YWx1ZTogdW5rbm93bik6IGJvb2xlYW4ge1xuICByZXR1cm4gaXNVbmRlZmluZWQodmFsdWUpIHx8IGlzTnVsbCh2YWx1ZSk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGlzTmlsO1xuIiwiLypleHRlcm5hbCBtb2R1bGVzKi9cbi8qdHlwZXMqL1xuLyp1dGlscyovXG4vKmxpYiovXG4vKm90aGVyKi9cblxuZnVuY3Rpb24gaXNOdWxsKHZhbHVlOiB1bmtub3duKTogdmFsdWUgaXMgbnVsbCB7XG4gIHJldHVybiB2YWx1ZSA9PT0gbnVsbDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgaXNOdWxsO1xuIiwiLypleHRlcm5hbCBtb2R1bGVzKi9cbi8qdHlwZXMqL1xuLyp1dGlscyovXG4vKmxpYiovXG4vKm90aGVyKi9cblxuZnVuY3Rpb24gaXNQdXJlT2JqZWN0KHZhbHVlOiB1bmtub3duKTogYm9vbGVhbiB7XG4gIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnXG4gICAgJiYgdmFsdWUgIT09IG51bGxcbiAgICAmJiAoT2JqZWN0LmdldFByb3RvdHlwZU9mKHZhbHVlKSA9PT0gT2JqZWN0LnByb3RvdHlwZSB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2YodmFsdWUpID09PSBudWxsKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgaXNQdXJlT2JqZWN0O1xuIiwiLypleHRlcm5hbCBtb2R1bGVzKi9cbi8qdHlwZXMqL1xuLyp1dGlscyovXG4vKmxpYiovXG4vKm90aGVyKi9cblxuZnVuY3Rpb24gaXNVbmRlZmluZWQodmFsdWU6IHVua25vd24pOiB2YWx1ZSBpcyB1bmRlZmluZWQge1xuICByZXR1cm4gdmFsdWUgPT09IHVuZGVmaW5lZDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgaXNVbmRlZmluZWQ7XG4iLCIvKmV4dGVybmFsIG1vZHVsZXMqL1xuLyp0eXBlcyovXG5pbXBvcnQgeyBUT2JqZWN0IH0gZnJvbSAnLi4vdHlwZXMnO1xuLyp1dGlscyovXG5pbXBvcnQgaXNOaWwgZnJvbSAnLi9pc05pbCc7XG5pbXBvcnQgaXNOdWxsIGZyb20gJy4vaXNOdWxsJztcbi8qbGliKi9cbi8qb3RoZXIqL1xuXG5mdW5jdGlvbiBzZXRWYWx1ZUlmTm90TmlsKFxuICB0YXJnZXRPYmplY3Q6IFRPYmplY3QuVW5rbm93blJlYyxcbiAgcGF0aDogc3RyaW5nLFxuICB2YWx1ZTogdW5rbm93bixcbik6IHZvaWQge1xuICBpZiAodHlwZW9mIHRhcmdldE9iamVjdCAhPT0gJ29iamVjdCcgfHwgaXNOdWxsKHRhcmdldE9iamVjdCkpIHtcbiAgICB0aHJvdyBFcnJvcignQXJndW1lbnQgXCJ0YXJnZXRPYmplY3RcIiBpcyBub3Qgb2JqZWN0Jyk7XG4gIH1cblxuICBpZiAoIXBhdGgpIHtcbiAgICB0aHJvdyBFcnJvcignQXJndW1lbnQgXCJwYXRoXCIgaXMgcmVxdWlyZWQnKTtcbiAgfVxuXG4gIGlmICghaXNOaWwodmFsdWUpKSB7XG4gICAgdGFyZ2V0T2JqZWN0W3BhdGhdID0gdmFsdWU7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgc2V0VmFsdWVJZk5vdE5pbDtcbiIsIjsoZnVuY3Rpb24gKGdsb2JhbE9iamVjdCkge1xyXG4gICd1c2Ugc3RyaWN0JztcclxuXHJcbi8qXHJcbiAqICAgICAgYmlnbnVtYmVyLmpzIHY5LjAuMVxyXG4gKiAgICAgIEEgSmF2YVNjcmlwdCBsaWJyYXJ5IGZvciBhcmJpdHJhcnktcHJlY2lzaW9uIGFyaXRobWV0aWMuXHJcbiAqICAgICAgaHR0cHM6Ly9naXRodWIuY29tL01pa2VNY2wvYmlnbnVtYmVyLmpzXHJcbiAqICAgICAgQ29weXJpZ2h0IChjKSAyMDIwIE1pY2hhZWwgTWNsYXVnaGxpbiA8TThjaDg4bEBnbWFpbC5jb20+XHJcbiAqICAgICAgTUlUIExpY2Vuc2VkLlxyXG4gKlxyXG4gKiAgICAgIEJpZ051bWJlci5wcm90b3R5cGUgbWV0aG9kcyAgICAgfCAgQmlnTnVtYmVyIG1ldGhvZHNcclxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcclxuICogICAgICBhYnNvbHV0ZVZhbHVlICAgICAgICAgICAgYWJzICAgIHwgIGNsb25lXHJcbiAqICAgICAgY29tcGFyZWRUbyAgICAgICAgICAgICAgICAgICAgICB8ICBjb25maWcgICAgICAgICAgICAgICBzZXRcclxuICogICAgICBkZWNpbWFsUGxhY2VzICAgICAgICAgICAgZHAgICAgIHwgICAgICBERUNJTUFMX1BMQUNFU1xyXG4gKiAgICAgIGRpdmlkZWRCeSAgICAgICAgICAgICAgICBkaXYgICAgfCAgICAgIFJPVU5ESU5HX01PREVcclxuICogICAgICBkaXZpZGVkVG9JbnRlZ2VyQnkgICAgICAgaWRpdiAgIHwgICAgICBFWFBPTkVOVElBTF9BVFxyXG4gKiAgICAgIGV4cG9uZW50aWF0ZWRCeSAgICAgICAgICBwb3cgICAgfCAgICAgIFJBTkdFXHJcbiAqICAgICAgaW50ZWdlclZhbHVlICAgICAgICAgICAgICAgICAgICB8ICAgICAgQ1JZUFRPXHJcbiAqICAgICAgaXNFcXVhbFRvICAgICAgICAgICAgICAgIGVxICAgICB8ICAgICAgTU9EVUxPX01PREVcclxuICogICAgICBpc0Zpbml0ZSAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICBQT1dfUFJFQ0lTSU9OXHJcbiAqICAgICAgaXNHcmVhdGVyVGhhbiAgICAgICAgICAgIGd0ICAgICB8ICAgICAgRk9STUFUXHJcbiAqICAgICAgaXNHcmVhdGVyVGhhbk9yRXF1YWxUbyAgIGd0ZSAgICB8ICAgICAgQUxQSEFCRVRcclxuICogICAgICBpc0ludGVnZXIgICAgICAgICAgICAgICAgICAgICAgIHwgIGlzQmlnTnVtYmVyXHJcbiAqICAgICAgaXNMZXNzVGhhbiAgICAgICAgICAgICAgIGx0ICAgICB8ICBtYXhpbXVtICAgICAgICAgICAgICBtYXhcclxuICogICAgICBpc0xlc3NUaGFuT3JFcXVhbFRvICAgICAgbHRlICAgIHwgIG1pbmltdW0gICAgICAgICAgICAgIG1pblxyXG4gKiAgICAgIGlzTmFOICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgcmFuZG9tXHJcbiAqICAgICAgaXNOZWdhdGl2ZSAgICAgICAgICAgICAgICAgICAgICB8ICBzdW1cclxuICogICAgICBpc1Bvc2l0aXZlICAgICAgICAgICAgICAgICAgICAgIHxcclxuICogICAgICBpc1plcm8gICAgICAgICAgICAgICAgICAgICAgICAgIHxcclxuICogICAgICBtaW51cyAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcclxuICogICAgICBtb2R1bG8gICAgICAgICAgICAgICAgICAgbW9kICAgIHxcclxuICogICAgICBtdWx0aXBsaWVkQnkgICAgICAgICAgICAgdGltZXMgIHxcclxuICogICAgICBuZWdhdGVkICAgICAgICAgICAgICAgICAgICAgICAgIHxcclxuICogICAgICBwbHVzICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcclxuICogICAgICBwcmVjaXNpb24gICAgICAgICAgICAgICAgc2QgICAgIHxcclxuICogICAgICBzaGlmdGVkQnkgICAgICAgICAgICAgICAgICAgICAgIHxcclxuICogICAgICBzcXVhcmVSb290ICAgICAgICAgICAgICAgc3FydCAgIHxcclxuICogICAgICB0b0V4cG9uZW50aWFsICAgICAgICAgICAgICAgICAgIHxcclxuICogICAgICB0b0ZpeGVkICAgICAgICAgICAgICAgICAgICAgICAgIHxcclxuICogICAgICB0b0Zvcm1hdCAgICAgICAgICAgICAgICAgICAgICAgIHxcclxuICogICAgICB0b0ZyYWN0aW9uICAgICAgICAgICAgICAgICAgICAgIHxcclxuICogICAgICB0b0pTT04gICAgICAgICAgICAgICAgICAgICAgICAgIHxcclxuICogICAgICB0b051bWJlciAgICAgICAgICAgICAgICAgICAgICAgIHxcclxuICogICAgICB0b1ByZWNpc2lvbiAgICAgICAgICAgICAgICAgICAgIHxcclxuICogICAgICB0b1N0cmluZyAgICAgICAgICAgICAgICAgICAgICAgIHxcclxuICogICAgICB2YWx1ZU9mICAgICAgICAgICAgICAgICAgICAgICAgIHxcclxuICpcclxuICovXHJcblxyXG5cclxuICB2YXIgQmlnTnVtYmVyLFxyXG4gICAgaXNOdW1lcmljID0gL14tPyg/OlxcZCsoPzpcXC5cXGQqKT98XFwuXFxkKykoPzplWystXT9cXGQrKT8kL2ksXHJcbiAgICBtYXRoY2VpbCA9IE1hdGguY2VpbCxcclxuICAgIG1hdGhmbG9vciA9IE1hdGguZmxvb3IsXHJcblxyXG4gICAgYmlnbnVtYmVyRXJyb3IgPSAnW0JpZ051bWJlciBFcnJvcl0gJyxcclxuICAgIHRvb01hbnlEaWdpdHMgPSBiaWdudW1iZXJFcnJvciArICdOdW1iZXIgcHJpbWl0aXZlIGhhcyBtb3JlIHRoYW4gMTUgc2lnbmlmaWNhbnQgZGlnaXRzOiAnLFxyXG5cclxuICAgIEJBU0UgPSAxZTE0LFxyXG4gICAgTE9HX0JBU0UgPSAxNCxcclxuICAgIE1BWF9TQUZFX0lOVEVHRVIgPSAweDFmZmZmZmZmZmZmZmZmLCAgICAgICAgIC8vIDJeNTMgLSAxXHJcbiAgICAvLyBNQVhfSU5UMzIgPSAweDdmZmZmZmZmLCAgICAgICAgICAgICAgICAgICAvLyAyXjMxIC0gMVxyXG4gICAgUE9XU19URU4gPSBbMSwgMTAsIDEwMCwgMWUzLCAxZTQsIDFlNSwgMWU2LCAxZTcsIDFlOCwgMWU5LCAxZTEwLCAxZTExLCAxZTEyLCAxZTEzXSxcclxuICAgIFNRUlRfQkFTRSA9IDFlNyxcclxuXHJcbiAgICAvLyBFRElUQUJMRVxyXG4gICAgLy8gVGhlIGxpbWl0IG9uIHRoZSB2YWx1ZSBvZiBERUNJTUFMX1BMQUNFUywgVE9fRVhQX05FRywgVE9fRVhQX1BPUywgTUlOX0VYUCwgTUFYX0VYUCwgYW5kXHJcbiAgICAvLyB0aGUgYXJndW1lbnRzIHRvIHRvRXhwb25lbnRpYWwsIHRvRml4ZWQsIHRvRm9ybWF0LCBhbmQgdG9QcmVjaXNpb24uXHJcbiAgICBNQVggPSAxRTk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAwIHRvIE1BWF9JTlQzMlxyXG5cclxuXHJcbiAgLypcclxuICAgKiBDcmVhdGUgYW5kIHJldHVybiBhIEJpZ051bWJlciBjb25zdHJ1Y3Rvci5cclxuICAgKi9cclxuICBmdW5jdGlvbiBjbG9uZShjb25maWdPYmplY3QpIHtcclxuICAgIHZhciBkaXYsIGNvbnZlcnRCYXNlLCBwYXJzZU51bWVyaWMsXHJcbiAgICAgIFAgPSBCaWdOdW1iZXIucHJvdG90eXBlID0geyBjb25zdHJ1Y3RvcjogQmlnTnVtYmVyLCB0b1N0cmluZzogbnVsbCwgdmFsdWVPZjogbnVsbCB9LFxyXG4gICAgICBPTkUgPSBuZXcgQmlnTnVtYmVyKDEpLFxyXG5cclxuXHJcbiAgICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gRURJVEFCTEUgQ09ORklHIERFRkFVTFRTIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcblxyXG4gICAgICAvLyBUaGUgZGVmYXVsdCB2YWx1ZXMgYmVsb3cgbXVzdCBiZSBpbnRlZ2VycyB3aXRoaW4gdGhlIGluY2x1c2l2ZSByYW5nZXMgc3RhdGVkLlxyXG4gICAgICAvLyBUaGUgdmFsdWVzIGNhbiBhbHNvIGJlIGNoYW5nZWQgYXQgcnVuLXRpbWUgdXNpbmcgQmlnTnVtYmVyLnNldC5cclxuXHJcbiAgICAgIC8vIFRoZSBtYXhpbXVtIG51bWJlciBvZiBkZWNpbWFsIHBsYWNlcyBmb3Igb3BlcmF0aW9ucyBpbnZvbHZpbmcgZGl2aXNpb24uXHJcbiAgICAgIERFQ0lNQUxfUExBQ0VTID0gMjAsICAgICAgICAgICAgICAgICAgICAgLy8gMCB0byBNQVhcclxuXHJcbiAgICAgIC8vIFRoZSByb3VuZGluZyBtb2RlIHVzZWQgd2hlbiByb3VuZGluZyB0byB0aGUgYWJvdmUgZGVjaW1hbCBwbGFjZXMsIGFuZCB3aGVuIHVzaW5nXHJcbiAgICAgIC8vIHRvRXhwb25lbnRpYWwsIHRvRml4ZWQsIHRvRm9ybWF0IGFuZCB0b1ByZWNpc2lvbiwgYW5kIHJvdW5kIChkZWZhdWx0IHZhbHVlKS5cclxuICAgICAgLy8gVVAgICAgICAgICAwIEF3YXkgZnJvbSB6ZXJvLlxyXG4gICAgICAvLyBET1dOICAgICAgIDEgVG93YXJkcyB6ZXJvLlxyXG4gICAgICAvLyBDRUlMICAgICAgIDIgVG93YXJkcyArSW5maW5pdHkuXHJcbiAgICAgIC8vIEZMT09SICAgICAgMyBUb3dhcmRzIC1JbmZpbml0eS5cclxuICAgICAgLy8gSEFMRl9VUCAgICA0IFRvd2FyZHMgbmVhcmVzdCBuZWlnaGJvdXIuIElmIGVxdWlkaXN0YW50LCB1cC5cclxuICAgICAgLy8gSEFMRl9ET1dOICA1IFRvd2FyZHMgbmVhcmVzdCBuZWlnaGJvdXIuIElmIGVxdWlkaXN0YW50LCBkb3duLlxyXG4gICAgICAvLyBIQUxGX0VWRU4gIDYgVG93YXJkcyBuZWFyZXN0IG5laWdoYm91ci4gSWYgZXF1aWRpc3RhbnQsIHRvd2FyZHMgZXZlbiBuZWlnaGJvdXIuXHJcbiAgICAgIC8vIEhBTEZfQ0VJTCAgNyBUb3dhcmRzIG5lYXJlc3QgbmVpZ2hib3VyLiBJZiBlcXVpZGlzdGFudCwgdG93YXJkcyArSW5maW5pdHkuXHJcbiAgICAgIC8vIEhBTEZfRkxPT1IgOCBUb3dhcmRzIG5lYXJlc3QgbmVpZ2hib3VyLiBJZiBlcXVpZGlzdGFudCwgdG93YXJkcyAtSW5maW5pdHkuXHJcbiAgICAgIFJPVU5ESU5HX01PREUgPSA0LCAgICAgICAgICAgICAgICAgICAgICAgLy8gMCB0byA4XHJcblxyXG4gICAgICAvLyBFWFBPTkVOVElBTF9BVCA6IFtUT19FWFBfTkVHICwgVE9fRVhQX1BPU11cclxuXHJcbiAgICAgIC8vIFRoZSBleHBvbmVudCB2YWx1ZSBhdCBhbmQgYmVuZWF0aCB3aGljaCB0b1N0cmluZyByZXR1cm5zIGV4cG9uZW50aWFsIG5vdGF0aW9uLlxyXG4gICAgICAvLyBOdW1iZXIgdHlwZTogLTdcclxuICAgICAgVE9fRVhQX05FRyA9IC03LCAgICAgICAgICAgICAgICAgICAgICAgICAvLyAwIHRvIC1NQVhcclxuXHJcbiAgICAgIC8vIFRoZSBleHBvbmVudCB2YWx1ZSBhdCBhbmQgYWJvdmUgd2hpY2ggdG9TdHJpbmcgcmV0dXJucyBleHBvbmVudGlhbCBub3RhdGlvbi5cclxuICAgICAgLy8gTnVtYmVyIHR5cGU6IDIxXHJcbiAgICAgIFRPX0VYUF9QT1MgPSAyMSwgICAgICAgICAgICAgICAgICAgICAgICAgLy8gMCB0byBNQVhcclxuXHJcbiAgICAgIC8vIFJBTkdFIDogW01JTl9FWFAsIE1BWF9FWFBdXHJcblxyXG4gICAgICAvLyBUaGUgbWluaW11bSBleHBvbmVudCB2YWx1ZSwgYmVuZWF0aCB3aGljaCB1bmRlcmZsb3cgdG8gemVybyBvY2N1cnMuXHJcbiAgICAgIC8vIE51bWJlciB0eXBlOiAtMzI0ICAoNWUtMzI0KVxyXG4gICAgICBNSU5fRVhQID0gLTFlNywgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIC0xIHRvIC1NQVhcclxuXHJcbiAgICAgIC8vIFRoZSBtYXhpbXVtIGV4cG9uZW50IHZhbHVlLCBhYm92ZSB3aGljaCBvdmVyZmxvdyB0byBJbmZpbml0eSBvY2N1cnMuXHJcbiAgICAgIC8vIE51bWJlciB0eXBlOiAgMzA4ICAoMS43OTc2OTMxMzQ4NjIzMTU3ZSszMDgpXHJcbiAgICAgIC8vIEZvciBNQVhfRVhQID4gMWU3LCBlLmcuIG5ldyBCaWdOdW1iZXIoJzFlMTAwMDAwMDAwJykucGx1cygxKSBtYXkgYmUgc2xvdy5cclxuICAgICAgTUFYX0VYUCA9IDFlNywgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAxIHRvIE1BWFxyXG5cclxuICAgICAgLy8gV2hldGhlciB0byB1c2UgY3J5cHRvZ3JhcGhpY2FsbHktc2VjdXJlIHJhbmRvbSBudW1iZXIgZ2VuZXJhdGlvbiwgaWYgYXZhaWxhYmxlLlxyXG4gICAgICBDUllQVE8gPSBmYWxzZSwgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRydWUgb3IgZmFsc2VcclxuXHJcbiAgICAgIC8vIFRoZSBtb2R1bG8gbW9kZSB1c2VkIHdoZW4gY2FsY3VsYXRpbmcgdGhlIG1vZHVsdXM6IGEgbW9kIG4uXHJcbiAgICAgIC8vIFRoZSBxdW90aWVudCAocSA9IGEgLyBuKSBpcyBjYWxjdWxhdGVkIGFjY29yZGluZyB0byB0aGUgY29ycmVzcG9uZGluZyByb3VuZGluZyBtb2RlLlxyXG4gICAgICAvLyBUaGUgcmVtYWluZGVyIChyKSBpcyBjYWxjdWxhdGVkIGFzOiByID0gYSAtIG4gKiBxLlxyXG4gICAgICAvL1xyXG4gICAgICAvLyBVUCAgICAgICAgMCBUaGUgcmVtYWluZGVyIGlzIHBvc2l0aXZlIGlmIHRoZSBkaXZpZGVuZCBpcyBuZWdhdGl2ZSwgZWxzZSBpcyBuZWdhdGl2ZS5cclxuICAgICAgLy8gRE9XTiAgICAgIDEgVGhlIHJlbWFpbmRlciBoYXMgdGhlIHNhbWUgc2lnbiBhcyB0aGUgZGl2aWRlbmQuXHJcbiAgICAgIC8vICAgICAgICAgICAgIFRoaXMgbW9kdWxvIG1vZGUgaXMgY29tbW9ubHkga25vd24gYXMgJ3RydW5jYXRlZCBkaXZpc2lvbicgYW5kIGlzXHJcbiAgICAgIC8vICAgICAgICAgICAgIGVxdWl2YWxlbnQgdG8gKGEgJSBuKSBpbiBKYXZhU2NyaXB0LlxyXG4gICAgICAvLyBGTE9PUiAgICAgMyBUaGUgcmVtYWluZGVyIGhhcyB0aGUgc2FtZSBzaWduIGFzIHRoZSBkaXZpc29yIChQeXRob24gJSkuXHJcbiAgICAgIC8vIEhBTEZfRVZFTiA2IFRoaXMgbW9kdWxvIG1vZGUgaW1wbGVtZW50cyB0aGUgSUVFRSA3NTQgcmVtYWluZGVyIGZ1bmN0aW9uLlxyXG4gICAgICAvLyBFVUNMSUQgICAgOSBFdWNsaWRpYW4gZGl2aXNpb24uIHEgPSBzaWduKG4pICogZmxvb3IoYSAvIGFicyhuKSkuXHJcbiAgICAgIC8vICAgICAgICAgICAgIFRoZSByZW1haW5kZXIgaXMgYWx3YXlzIHBvc2l0aXZlLlxyXG4gICAgICAvL1xyXG4gICAgICAvLyBUaGUgdHJ1bmNhdGVkIGRpdmlzaW9uLCBmbG9vcmVkIGRpdmlzaW9uLCBFdWNsaWRpYW4gZGl2aXNpb24gYW5kIElFRUUgNzU0IHJlbWFpbmRlclxyXG4gICAgICAvLyBtb2RlcyBhcmUgY29tbW9ubHkgdXNlZCBmb3IgdGhlIG1vZHVsdXMgb3BlcmF0aW9uLlxyXG4gICAgICAvLyBBbHRob3VnaCB0aGUgb3RoZXIgcm91bmRpbmcgbW9kZXMgY2FuIGFsc28gYmUgdXNlZCwgdGhleSBtYXkgbm90IGdpdmUgdXNlZnVsIHJlc3VsdHMuXHJcbiAgICAgIE1PRFVMT19NT0RFID0gMSwgICAgICAgICAgICAgICAgICAgICAgICAgLy8gMCB0byA5XHJcblxyXG4gICAgICAvLyBUaGUgbWF4aW11bSBudW1iZXIgb2Ygc2lnbmlmaWNhbnQgZGlnaXRzIG9mIHRoZSByZXN1bHQgb2YgdGhlIGV4cG9uZW50aWF0ZWRCeSBvcGVyYXRpb24uXHJcbiAgICAgIC8vIElmIFBPV19QUkVDSVNJT04gaXMgMCwgdGhlcmUgd2lsbCBiZSB1bmxpbWl0ZWQgc2lnbmlmaWNhbnQgZGlnaXRzLlxyXG4gICAgICBQT1dfUFJFQ0lTSU9OID0gMCwgICAgICAgICAgICAgICAgICAgIC8vIDAgdG8gTUFYXHJcblxyXG4gICAgICAvLyBUaGUgZm9ybWF0IHNwZWNpZmljYXRpb24gdXNlZCBieSB0aGUgQmlnTnVtYmVyLnByb3RvdHlwZS50b0Zvcm1hdCBtZXRob2QuXHJcbiAgICAgIEZPUk1BVCA9IHtcclxuICAgICAgICBwcmVmaXg6ICcnLFxyXG4gICAgICAgIGdyb3VwU2l6ZTogMyxcclxuICAgICAgICBzZWNvbmRhcnlHcm91cFNpemU6IDAsXHJcbiAgICAgICAgZ3JvdXBTZXBhcmF0b3I6ICcsJyxcclxuICAgICAgICBkZWNpbWFsU2VwYXJhdG9yOiAnLicsXHJcbiAgICAgICAgZnJhY3Rpb25Hcm91cFNpemU6IDAsXHJcbiAgICAgICAgZnJhY3Rpb25Hcm91cFNlcGFyYXRvcjogJ1xceEEwJywgICAgICAvLyBub24tYnJlYWtpbmcgc3BhY2VcclxuICAgICAgICBzdWZmaXg6ICcnXHJcbiAgICAgIH0sXHJcblxyXG4gICAgICAvLyBUaGUgYWxwaGFiZXQgdXNlZCBmb3IgYmFzZSBjb252ZXJzaW9uLiBJdCBtdXN0IGJlIGF0IGxlYXN0IDIgY2hhcmFjdGVycyBsb25nLCB3aXRoIG5vICcrJyxcclxuICAgICAgLy8gJy0nLCAnLicsIHdoaXRlc3BhY2UsIG9yIHJlcGVhdGVkIGNoYXJhY3Rlci5cclxuICAgICAgLy8gJzAxMjM0NTY3ODlhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ekFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaJF8nXHJcbiAgICAgIEFMUEhBQkVUID0gJzAxMjM0NTY3ODlhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5eic7XHJcblxyXG5cclxuICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG5cclxuICAgIC8vIENPTlNUUlVDVE9SXHJcblxyXG5cclxuICAgIC8qXHJcbiAgICAgKiBUaGUgQmlnTnVtYmVyIGNvbnN0cnVjdG9yIGFuZCBleHBvcnRlZCBmdW5jdGlvbi5cclxuICAgICAqIENyZWF0ZSBhbmQgcmV0dXJuIGEgbmV3IGluc3RhbmNlIG9mIGEgQmlnTnVtYmVyIG9iamVjdC5cclxuICAgICAqXHJcbiAgICAgKiB2IHtudW1iZXJ8c3RyaW5nfEJpZ051bWJlcn0gQSBudW1lcmljIHZhbHVlLlxyXG4gICAgICogW2JdIHtudW1iZXJ9IFRoZSBiYXNlIG9mIHYuIEludGVnZXIsIDIgdG8gQUxQSEFCRVQubGVuZ3RoIGluY2x1c2l2ZS5cclxuICAgICAqL1xyXG4gICAgZnVuY3Rpb24gQmlnTnVtYmVyKHYsIGIpIHtcclxuICAgICAgdmFyIGFscGhhYmV0LCBjLCBjYXNlQ2hhbmdlZCwgZSwgaSwgaXNOdW0sIGxlbiwgc3RyLFxyXG4gICAgICAgIHggPSB0aGlzO1xyXG5cclxuICAgICAgLy8gRW5hYmxlIGNvbnN0cnVjdG9yIGNhbGwgd2l0aG91dCBgbmV3YC5cclxuICAgICAgaWYgKCEoeCBpbnN0YW5jZW9mIEJpZ051bWJlcikpIHJldHVybiBuZXcgQmlnTnVtYmVyKHYsIGIpO1xyXG5cclxuICAgICAgaWYgKGIgPT0gbnVsbCkge1xyXG5cclxuICAgICAgICBpZiAodiAmJiB2Ll9pc0JpZ051bWJlciA9PT0gdHJ1ZSkge1xyXG4gICAgICAgICAgeC5zID0gdi5zO1xyXG5cclxuICAgICAgICAgIGlmICghdi5jIHx8IHYuZSA+IE1BWF9FWFApIHtcclxuICAgICAgICAgICAgeC5jID0geC5lID0gbnVsbDtcclxuICAgICAgICAgIH0gZWxzZSBpZiAodi5lIDwgTUlOX0VYUCkge1xyXG4gICAgICAgICAgICB4LmMgPSBbeC5lID0gMF07XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB4LmUgPSB2LmU7XHJcbiAgICAgICAgICAgIHguYyA9IHYuYy5zbGljZSgpO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICgoaXNOdW0gPSB0eXBlb2YgdiA9PSAnbnVtYmVyJykgJiYgdiAqIDAgPT0gMCkge1xyXG5cclxuICAgICAgICAgIC8vIFVzZSBgMSAvIG5gIHRvIGhhbmRsZSBtaW51cyB6ZXJvIGFsc28uXHJcbiAgICAgICAgICB4LnMgPSAxIC8gdiA8IDAgPyAodiA9IC12LCAtMSkgOiAxO1xyXG5cclxuICAgICAgICAgIC8vIEZhc3QgcGF0aCBmb3IgaW50ZWdlcnMsIHdoZXJlIG4gPCAyMTQ3NDgzNjQ4ICgyKiozMSkuXHJcbiAgICAgICAgICBpZiAodiA9PT0gfn52KSB7XHJcbiAgICAgICAgICAgIGZvciAoZSA9IDAsIGkgPSB2OyBpID49IDEwOyBpIC89IDEwLCBlKyspO1xyXG5cclxuICAgICAgICAgICAgaWYgKGUgPiBNQVhfRVhQKSB7XHJcbiAgICAgICAgICAgICAgeC5jID0geC5lID0gbnVsbDtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICB4LmUgPSBlO1xyXG4gICAgICAgICAgICAgIHguYyA9IFt2XTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIHN0ciA9IFN0cmluZyh2KTtcclxuICAgICAgICB9IGVsc2Uge1xyXG5cclxuICAgICAgICAgIGlmICghaXNOdW1lcmljLnRlc3Qoc3RyID0gU3RyaW5nKHYpKSkgcmV0dXJuIHBhcnNlTnVtZXJpYyh4LCBzdHIsIGlzTnVtKTtcclxuXHJcbiAgICAgICAgICB4LnMgPSBzdHIuY2hhckNvZGVBdCgwKSA9PSA0NSA/IChzdHIgPSBzdHIuc2xpY2UoMSksIC0xKSA6IDE7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBEZWNpbWFsIHBvaW50P1xyXG4gICAgICAgIGlmICgoZSA9IHN0ci5pbmRleE9mKCcuJykpID4gLTEpIHN0ciA9IHN0ci5yZXBsYWNlKCcuJywgJycpO1xyXG5cclxuICAgICAgICAvLyBFeHBvbmVudGlhbCBmb3JtP1xyXG4gICAgICAgIGlmICgoaSA9IHN0ci5zZWFyY2goL2UvaSkpID4gMCkge1xyXG5cclxuICAgICAgICAgIC8vIERldGVybWluZSBleHBvbmVudC5cclxuICAgICAgICAgIGlmIChlIDwgMCkgZSA9IGk7XHJcbiAgICAgICAgICBlICs9ICtzdHIuc2xpY2UoaSArIDEpO1xyXG4gICAgICAgICAgc3RyID0gc3RyLnN1YnN0cmluZygwLCBpKTtcclxuICAgICAgICB9IGVsc2UgaWYgKGUgPCAwKSB7XHJcblxyXG4gICAgICAgICAgLy8gSW50ZWdlci5cclxuICAgICAgICAgIGUgPSBzdHIubGVuZ3RoO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgIH0gZWxzZSB7XHJcblxyXG4gICAgICAgIC8vICdbQmlnTnVtYmVyIEVycm9yXSBCYXNlIHtub3QgYSBwcmltaXRpdmUgbnVtYmVyfG5vdCBhbiBpbnRlZ2VyfG91dCBvZiByYW5nZX06IHtifSdcclxuICAgICAgICBpbnRDaGVjayhiLCAyLCBBTFBIQUJFVC5sZW5ndGgsICdCYXNlJyk7XHJcblxyXG4gICAgICAgIC8vIEFsbG93IGV4cG9uZW50aWFsIG5vdGF0aW9uIHRvIGJlIHVzZWQgd2l0aCBiYXNlIDEwIGFyZ3VtZW50LCB3aGlsZVxyXG4gICAgICAgIC8vIGFsc28gcm91bmRpbmcgdG8gREVDSU1BTF9QTEFDRVMgYXMgd2l0aCBvdGhlciBiYXNlcy5cclxuICAgICAgICBpZiAoYiA9PSAxMCkge1xyXG4gICAgICAgICAgeCA9IG5ldyBCaWdOdW1iZXIodik7XHJcbiAgICAgICAgICByZXR1cm4gcm91bmQoeCwgREVDSU1BTF9QTEFDRVMgKyB4LmUgKyAxLCBST1VORElOR19NT0RFKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHN0ciA9IFN0cmluZyh2KTtcclxuXHJcbiAgICAgICAgaWYgKGlzTnVtID0gdHlwZW9mIHYgPT0gJ251bWJlcicpIHtcclxuXHJcbiAgICAgICAgICAvLyBBdm9pZCBwb3RlbnRpYWwgaW50ZXJwcmV0YXRpb24gb2YgSW5maW5pdHkgYW5kIE5hTiBhcyBiYXNlIDQ0KyB2YWx1ZXMuXHJcbiAgICAgICAgICBpZiAodiAqIDAgIT0gMCkgcmV0dXJuIHBhcnNlTnVtZXJpYyh4LCBzdHIsIGlzTnVtLCBiKTtcclxuXHJcbiAgICAgICAgICB4LnMgPSAxIC8gdiA8IDAgPyAoc3RyID0gc3RyLnNsaWNlKDEpLCAtMSkgOiAxO1xyXG5cclxuICAgICAgICAgIC8vICdbQmlnTnVtYmVyIEVycm9yXSBOdW1iZXIgcHJpbWl0aXZlIGhhcyBtb3JlIHRoYW4gMTUgc2lnbmlmaWNhbnQgZGlnaXRzOiB7bn0nXHJcbiAgICAgICAgICBpZiAoQmlnTnVtYmVyLkRFQlVHICYmIHN0ci5yZXBsYWNlKC9eMFxcLjAqfFxcLi8sICcnKS5sZW5ndGggPiAxNSkge1xyXG4gICAgICAgICAgICB0aHJvdyBFcnJvclxyXG4gICAgICAgICAgICAgKHRvb01hbnlEaWdpdHMgKyB2KTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgeC5zID0gc3RyLmNoYXJDb2RlQXQoMCkgPT09IDQ1ID8gKHN0ciA9IHN0ci5zbGljZSgxKSwgLTEpIDogMTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGFscGhhYmV0ID0gQUxQSEFCRVQuc2xpY2UoMCwgYik7XHJcbiAgICAgICAgZSA9IGkgPSAwO1xyXG5cclxuICAgICAgICAvLyBDaGVjayB0aGF0IHN0ciBpcyBhIHZhbGlkIGJhc2UgYiBudW1iZXIuXHJcbiAgICAgICAgLy8gRG9uJ3QgdXNlIFJlZ0V4cCwgc28gYWxwaGFiZXQgY2FuIGNvbnRhaW4gc3BlY2lhbCBjaGFyYWN0ZXJzLlxyXG4gICAgICAgIGZvciAobGVuID0gc3RyLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XHJcbiAgICAgICAgICBpZiAoYWxwaGFiZXQuaW5kZXhPZihjID0gc3RyLmNoYXJBdChpKSkgPCAwKSB7XHJcbiAgICAgICAgICAgIGlmIChjID09ICcuJykge1xyXG5cclxuICAgICAgICAgICAgICAvLyBJZiAnLicgaXMgbm90IHRoZSBmaXJzdCBjaGFyYWN0ZXIgYW5kIGl0IGhhcyBub3QgYmUgZm91bmQgYmVmb3JlLlxyXG4gICAgICAgICAgICAgIGlmIChpID4gZSkge1xyXG4gICAgICAgICAgICAgICAgZSA9IGxlbjtcclxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBlbHNlIGlmICghY2FzZUNoYW5nZWQpIHtcclxuXHJcbiAgICAgICAgICAgICAgLy8gQWxsb3cgZS5nLiBoZXhhZGVjaW1hbCAnRkYnIGFzIHdlbGwgYXMgJ2ZmJy5cclxuICAgICAgICAgICAgICBpZiAoc3RyID09IHN0ci50b1VwcGVyQ2FzZSgpICYmIChzdHIgPSBzdHIudG9Mb3dlckNhc2UoKSkgfHxcclxuICAgICAgICAgICAgICAgICAgc3RyID09IHN0ci50b0xvd2VyQ2FzZSgpICYmIChzdHIgPSBzdHIudG9VcHBlckNhc2UoKSkpIHtcclxuICAgICAgICAgICAgICAgIGNhc2VDaGFuZ2VkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIGkgPSAtMTtcclxuICAgICAgICAgICAgICAgIGUgPSAwO1xyXG4gICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gcGFyc2VOdW1lcmljKHgsIFN0cmluZyh2KSwgaXNOdW0sIGIpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gUHJldmVudCBsYXRlciBjaGVjayBmb3IgbGVuZ3RoIG9uIGNvbnZlcnRlZCBudW1iZXIuXHJcbiAgICAgICAgaXNOdW0gPSBmYWxzZTtcclxuICAgICAgICBzdHIgPSBjb252ZXJ0QmFzZShzdHIsIGIsIDEwLCB4LnMpO1xyXG5cclxuICAgICAgICAvLyBEZWNpbWFsIHBvaW50P1xyXG4gICAgICAgIGlmICgoZSA9IHN0ci5pbmRleE9mKCcuJykpID4gLTEpIHN0ciA9IHN0ci5yZXBsYWNlKCcuJywgJycpO1xyXG4gICAgICAgIGVsc2UgZSA9IHN0ci5sZW5ndGg7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vIERldGVybWluZSBsZWFkaW5nIHplcm9zLlxyXG4gICAgICBmb3IgKGkgPSAwOyBzdHIuY2hhckNvZGVBdChpKSA9PT0gNDg7IGkrKyk7XHJcblxyXG4gICAgICAvLyBEZXRlcm1pbmUgdHJhaWxpbmcgemVyb3MuXHJcbiAgICAgIGZvciAobGVuID0gc3RyLmxlbmd0aDsgc3RyLmNoYXJDb2RlQXQoLS1sZW4pID09PSA0ODspO1xyXG5cclxuICAgICAgaWYgKHN0ciA9IHN0ci5zbGljZShpLCArK2xlbikpIHtcclxuICAgICAgICBsZW4gLT0gaTtcclxuXHJcbiAgICAgICAgLy8gJ1tCaWdOdW1iZXIgRXJyb3JdIE51bWJlciBwcmltaXRpdmUgaGFzIG1vcmUgdGhhbiAxNSBzaWduaWZpY2FudCBkaWdpdHM6IHtufSdcclxuICAgICAgICBpZiAoaXNOdW0gJiYgQmlnTnVtYmVyLkRFQlVHICYmXHJcbiAgICAgICAgICBsZW4gPiAxNSAmJiAodiA+IE1BWF9TQUZFX0lOVEVHRVIgfHwgdiAhPT0gbWF0aGZsb29yKHYpKSkge1xyXG4gICAgICAgICAgICB0aHJvdyBFcnJvclxyXG4gICAgICAgICAgICAgKHRvb01hbnlEaWdpdHMgKyAoeC5zICogdikpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgIC8vIE92ZXJmbG93P1xyXG4gICAgICAgIGlmICgoZSA9IGUgLSBpIC0gMSkgPiBNQVhfRVhQKSB7XHJcblxyXG4gICAgICAgICAgLy8gSW5maW5pdHkuXHJcbiAgICAgICAgICB4LmMgPSB4LmUgPSBudWxsO1xyXG5cclxuICAgICAgICAvLyBVbmRlcmZsb3c/XHJcbiAgICAgICAgfSBlbHNlIGlmIChlIDwgTUlOX0VYUCkge1xyXG5cclxuICAgICAgICAgIC8vIFplcm8uXHJcbiAgICAgICAgICB4LmMgPSBbeC5lID0gMF07XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHguZSA9IGU7XHJcbiAgICAgICAgICB4LmMgPSBbXTtcclxuXHJcbiAgICAgICAgICAvLyBUcmFuc2Zvcm0gYmFzZVxyXG5cclxuICAgICAgICAgIC8vIGUgaXMgdGhlIGJhc2UgMTAgZXhwb25lbnQuXHJcbiAgICAgICAgICAvLyBpIGlzIHdoZXJlIHRvIHNsaWNlIHN0ciB0byBnZXQgdGhlIGZpcnN0IGVsZW1lbnQgb2YgdGhlIGNvZWZmaWNpZW50IGFycmF5LlxyXG4gICAgICAgICAgaSA9IChlICsgMSkgJSBMT0dfQkFTRTtcclxuICAgICAgICAgIGlmIChlIDwgMCkgaSArPSBMT0dfQkFTRTsgIC8vIGkgPCAxXHJcblxyXG4gICAgICAgICAgaWYgKGkgPCBsZW4pIHtcclxuICAgICAgICAgICAgaWYgKGkpIHguYy5wdXNoKCtzdHIuc2xpY2UoMCwgaSkpO1xyXG5cclxuICAgICAgICAgICAgZm9yIChsZW4gLT0gTE9HX0JBU0U7IGkgPCBsZW47KSB7XHJcbiAgICAgICAgICAgICAgeC5jLnB1c2goK3N0ci5zbGljZShpLCBpICs9IExPR19CQVNFKSk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGkgPSBMT0dfQkFTRSAtIChzdHIgPSBzdHIuc2xpY2UoaSkpLmxlbmd0aDtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGkgLT0gbGVuO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIGZvciAoOyBpLS07IHN0ciArPSAnMCcpO1xyXG4gICAgICAgICAgeC5jLnB1c2goK3N0cik7XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2Uge1xyXG5cclxuICAgICAgICAvLyBaZXJvLlxyXG4gICAgICAgIHguYyA9IFt4LmUgPSAwXTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvLyBDT05TVFJVQ1RPUiBQUk9QRVJUSUVTXHJcblxyXG5cclxuICAgIEJpZ051bWJlci5jbG9uZSA9IGNsb25lO1xyXG5cclxuICAgIEJpZ051bWJlci5ST1VORF9VUCA9IDA7XHJcbiAgICBCaWdOdW1iZXIuUk9VTkRfRE9XTiA9IDE7XHJcbiAgICBCaWdOdW1iZXIuUk9VTkRfQ0VJTCA9IDI7XHJcbiAgICBCaWdOdW1iZXIuUk9VTkRfRkxPT1IgPSAzO1xyXG4gICAgQmlnTnVtYmVyLlJPVU5EX0hBTEZfVVAgPSA0O1xyXG4gICAgQmlnTnVtYmVyLlJPVU5EX0hBTEZfRE9XTiA9IDU7XHJcbiAgICBCaWdOdW1iZXIuUk9VTkRfSEFMRl9FVkVOID0gNjtcclxuICAgIEJpZ051bWJlci5ST1VORF9IQUxGX0NFSUwgPSA3O1xyXG4gICAgQmlnTnVtYmVyLlJPVU5EX0hBTEZfRkxPT1IgPSA4O1xyXG4gICAgQmlnTnVtYmVyLkVVQ0xJRCA9IDk7XHJcblxyXG5cclxuICAgIC8qXHJcbiAgICAgKiBDb25maWd1cmUgaW5mcmVxdWVudGx5LWNoYW5naW5nIGxpYnJhcnktd2lkZSBzZXR0aW5ncy5cclxuICAgICAqXHJcbiAgICAgKiBBY2NlcHQgYW4gb2JqZWN0IHdpdGggdGhlIGZvbGxvd2luZyBvcHRpb25hbCBwcm9wZXJ0aWVzIChpZiB0aGUgdmFsdWUgb2YgYSBwcm9wZXJ0eSBpc1xyXG4gICAgICogYSBudW1iZXIsIGl0IG11c3QgYmUgYW4gaW50ZWdlciB3aXRoaW4gdGhlIGluY2x1c2l2ZSByYW5nZSBzdGF0ZWQpOlxyXG4gICAgICpcclxuICAgICAqICAgREVDSU1BTF9QTEFDRVMgICB7bnVtYmVyfSAgICAgICAgICAgMCB0byBNQVhcclxuICAgICAqICAgUk9VTkRJTkdfTU9ERSAgICB7bnVtYmVyfSAgICAgICAgICAgMCB0byA4XHJcbiAgICAgKiAgIEVYUE9ORU5USUFMX0FUICAge251bWJlcnxudW1iZXJbXX0gIC1NQVggdG8gTUFYICBvciAgWy1NQVggdG8gMCwgMCB0byBNQVhdXHJcbiAgICAgKiAgIFJBTkdFICAgICAgICAgICAge251bWJlcnxudW1iZXJbXX0gIC1NQVggdG8gTUFYIChub3QgemVybykgIG9yICBbLU1BWCB0byAtMSwgMSB0byBNQVhdXHJcbiAgICAgKiAgIENSWVBUTyAgICAgICAgICAge2Jvb2xlYW59ICAgICAgICAgIHRydWUgb3IgZmFsc2VcclxuICAgICAqICAgTU9EVUxPX01PREUgICAgICB7bnVtYmVyfSAgICAgICAgICAgMCB0byA5XHJcbiAgICAgKiAgIFBPV19QUkVDSVNJT04gICAgICAge251bWJlcn0gICAgICAgICAgIDAgdG8gTUFYXHJcbiAgICAgKiAgIEFMUEhBQkVUICAgICAgICAge3N0cmluZ30gICAgICAgICAgIEEgc3RyaW5nIG9mIHR3byBvciBtb3JlIHVuaXF1ZSBjaGFyYWN0ZXJzIHdoaWNoIGRvZXNcclxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm90IGNvbnRhaW4gJy4nLlxyXG4gICAgICogICBGT1JNQVQgICAgICAgICAgIHtvYmplY3R9ICAgICAgICAgICBBbiBvYmplY3Qgd2l0aCBzb21lIG9mIHRoZSBmb2xsb3dpbmcgcHJvcGVydGllczpcclxuICAgICAqICAgICBwcmVmaXggICAgICAgICAgICAgICAgIHtzdHJpbmd9XHJcbiAgICAgKiAgICAgZ3JvdXBTaXplICAgICAgICAgICAgICB7bnVtYmVyfVxyXG4gICAgICogICAgIHNlY29uZGFyeUdyb3VwU2l6ZSAgICAge251bWJlcn1cclxuICAgICAqICAgICBncm91cFNlcGFyYXRvciAgICAgICAgIHtzdHJpbmd9XHJcbiAgICAgKiAgICAgZGVjaW1hbFNlcGFyYXRvciAgICAgICB7c3RyaW5nfVxyXG4gICAgICogICAgIGZyYWN0aW9uR3JvdXBTaXplICAgICAge251bWJlcn1cclxuICAgICAqICAgICBmcmFjdGlvbkdyb3VwU2VwYXJhdG9yIHtzdHJpbmd9XHJcbiAgICAgKiAgICAgc3VmZml4ICAgICAgICAgICAgICAgICB7c3RyaW5nfVxyXG4gICAgICpcclxuICAgICAqIChUaGUgdmFsdWVzIGFzc2lnbmVkIHRvIHRoZSBhYm92ZSBGT1JNQVQgb2JqZWN0IHByb3BlcnRpZXMgYXJlIG5vdCBjaGVja2VkIGZvciB2YWxpZGl0eS4pXHJcbiAgICAgKlxyXG4gICAgICogRS5nLlxyXG4gICAgICogQmlnTnVtYmVyLmNvbmZpZyh7IERFQ0lNQUxfUExBQ0VTIDogMjAsIFJPVU5ESU5HX01PREUgOiA0IH0pXHJcbiAgICAgKlxyXG4gICAgICogSWdub3JlIHByb3BlcnRpZXMvcGFyYW1ldGVycyBzZXQgdG8gbnVsbCBvciB1bmRlZmluZWQsIGV4Y2VwdCBmb3IgQUxQSEFCRVQuXHJcbiAgICAgKlxyXG4gICAgICogUmV0dXJuIGFuIG9iamVjdCB3aXRoIHRoZSBwcm9wZXJ0aWVzIGN1cnJlbnQgdmFsdWVzLlxyXG4gICAgICovXHJcbiAgICBCaWdOdW1iZXIuY29uZmlnID0gQmlnTnVtYmVyLnNldCA9IGZ1bmN0aW9uIChvYmopIHtcclxuICAgICAgdmFyIHAsIHY7XHJcblxyXG4gICAgICBpZiAob2JqICE9IG51bGwpIHtcclxuXHJcbiAgICAgICAgaWYgKHR5cGVvZiBvYmogPT0gJ29iamVjdCcpIHtcclxuXHJcbiAgICAgICAgICAvLyBERUNJTUFMX1BMQUNFUyB7bnVtYmVyfSBJbnRlZ2VyLCAwIHRvIE1BWCBpbmNsdXNpdmUuXHJcbiAgICAgICAgICAvLyAnW0JpZ051bWJlciBFcnJvcl0gREVDSU1BTF9QTEFDRVMge25vdCBhIHByaW1pdGl2ZSBudW1iZXJ8bm90IGFuIGludGVnZXJ8b3V0IG9mIHJhbmdlfToge3Z9J1xyXG4gICAgICAgICAgaWYgKG9iai5oYXNPd25Qcm9wZXJ0eShwID0gJ0RFQ0lNQUxfUExBQ0VTJykpIHtcclxuICAgICAgICAgICAgdiA9IG9ialtwXTtcclxuICAgICAgICAgICAgaW50Q2hlY2sodiwgMCwgTUFYLCBwKTtcclxuICAgICAgICAgICAgREVDSU1BTF9QTEFDRVMgPSB2O1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIC8vIFJPVU5ESU5HX01PREUge251bWJlcn0gSW50ZWdlciwgMCB0byA4IGluY2x1c2l2ZS5cclxuICAgICAgICAgIC8vICdbQmlnTnVtYmVyIEVycm9yXSBST1VORElOR19NT0RFIHtub3QgYSBwcmltaXRpdmUgbnVtYmVyfG5vdCBhbiBpbnRlZ2VyfG91dCBvZiByYW5nZX06IHt2fSdcclxuICAgICAgICAgIGlmIChvYmouaGFzT3duUHJvcGVydHkocCA9ICdST1VORElOR19NT0RFJykpIHtcclxuICAgICAgICAgICAgdiA9IG9ialtwXTtcclxuICAgICAgICAgICAgaW50Q2hlY2sodiwgMCwgOCwgcCk7XHJcbiAgICAgICAgICAgIFJPVU5ESU5HX01PREUgPSB2O1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIC8vIEVYUE9ORU5USUFMX0FUIHtudW1iZXJ8bnVtYmVyW119XHJcbiAgICAgICAgICAvLyBJbnRlZ2VyLCAtTUFYIHRvIE1BWCBpbmNsdXNpdmUgb3JcclxuICAgICAgICAgIC8vIFtpbnRlZ2VyIC1NQVggdG8gMCBpbmNsdXNpdmUsIDAgdG8gTUFYIGluY2x1c2l2ZV0uXHJcbiAgICAgICAgICAvLyAnW0JpZ051bWJlciBFcnJvcl0gRVhQT05FTlRJQUxfQVQge25vdCBhIHByaW1pdGl2ZSBudW1iZXJ8bm90IGFuIGludGVnZXJ8b3V0IG9mIHJhbmdlfToge3Z9J1xyXG4gICAgICAgICAgaWYgKG9iai5oYXNPd25Qcm9wZXJ0eShwID0gJ0VYUE9ORU5USUFMX0FUJykpIHtcclxuICAgICAgICAgICAgdiA9IG9ialtwXTtcclxuICAgICAgICAgICAgaWYgKHYgJiYgdi5wb3ApIHtcclxuICAgICAgICAgICAgICBpbnRDaGVjayh2WzBdLCAtTUFYLCAwLCBwKTtcclxuICAgICAgICAgICAgICBpbnRDaGVjayh2WzFdLCAwLCBNQVgsIHApO1xyXG4gICAgICAgICAgICAgIFRPX0VYUF9ORUcgPSB2WzBdO1xyXG4gICAgICAgICAgICAgIFRPX0VYUF9QT1MgPSB2WzFdO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIGludENoZWNrKHYsIC1NQVgsIE1BWCwgcCk7XHJcbiAgICAgICAgICAgICAgVE9fRVhQX05FRyA9IC0oVE9fRVhQX1BPUyA9IHYgPCAwID8gLXYgOiB2KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIC8vIFJBTkdFIHtudW1iZXJ8bnVtYmVyW119IE5vbi16ZXJvIGludGVnZXIsIC1NQVggdG8gTUFYIGluY2x1c2l2ZSBvclxyXG4gICAgICAgICAgLy8gW2ludGVnZXIgLU1BWCB0byAtMSBpbmNsdXNpdmUsIGludGVnZXIgMSB0byBNQVggaW5jbHVzaXZlXS5cclxuICAgICAgICAgIC8vICdbQmlnTnVtYmVyIEVycm9yXSBSQU5HRSB7bm90IGEgcHJpbWl0aXZlIG51bWJlcnxub3QgYW4gaW50ZWdlcnxvdXQgb2YgcmFuZ2V8Y2Fubm90IGJlIHplcm99OiB7dn0nXHJcbiAgICAgICAgICBpZiAob2JqLmhhc093blByb3BlcnR5KHAgPSAnUkFOR0UnKSkge1xyXG4gICAgICAgICAgICB2ID0gb2JqW3BdO1xyXG4gICAgICAgICAgICBpZiAodiAmJiB2LnBvcCkge1xyXG4gICAgICAgICAgICAgIGludENoZWNrKHZbMF0sIC1NQVgsIC0xLCBwKTtcclxuICAgICAgICAgICAgICBpbnRDaGVjayh2WzFdLCAxLCBNQVgsIHApO1xyXG4gICAgICAgICAgICAgIE1JTl9FWFAgPSB2WzBdO1xyXG4gICAgICAgICAgICAgIE1BWF9FWFAgPSB2WzFdO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIGludENoZWNrKHYsIC1NQVgsIE1BWCwgcCk7XHJcbiAgICAgICAgICAgICAgaWYgKHYpIHtcclxuICAgICAgICAgICAgICAgIE1JTl9FWFAgPSAtKE1BWF9FWFAgPSB2IDwgMCA/IC12IDogdik7XHJcbiAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRocm93IEVycm9yXHJcbiAgICAgICAgICAgICAgICAgKGJpZ251bWJlckVycm9yICsgcCArICcgY2Fubm90IGJlIHplcm86ICcgKyB2KTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAvLyBDUllQVE8ge2Jvb2xlYW59IHRydWUgb3IgZmFsc2UuXHJcbiAgICAgICAgICAvLyAnW0JpZ051bWJlciBFcnJvcl0gQ1JZUFRPIG5vdCB0cnVlIG9yIGZhbHNlOiB7dn0nXHJcbiAgICAgICAgICAvLyAnW0JpZ051bWJlciBFcnJvcl0gY3J5cHRvIHVuYXZhaWxhYmxlJ1xyXG4gICAgICAgICAgaWYgKG9iai5oYXNPd25Qcm9wZXJ0eShwID0gJ0NSWVBUTycpKSB7XHJcbiAgICAgICAgICAgIHYgPSBvYmpbcF07XHJcbiAgICAgICAgICAgIGlmICh2ID09PSAhIXYpIHtcclxuICAgICAgICAgICAgICBpZiAodikge1xyXG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBjcnlwdG8gIT0gJ3VuZGVmaW5lZCcgJiYgY3J5cHRvICYmXHJcbiAgICAgICAgICAgICAgICAgKGNyeXB0by5nZXRSYW5kb21WYWx1ZXMgfHwgY3J5cHRvLnJhbmRvbUJ5dGVzKSkge1xyXG4gICAgICAgICAgICAgICAgICBDUllQVE8gPSB2O1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgQ1JZUFRPID0gIXY7XHJcbiAgICAgICAgICAgICAgICAgIHRocm93IEVycm9yXHJcbiAgICAgICAgICAgICAgICAgICAoYmlnbnVtYmVyRXJyb3IgKyAnY3J5cHRvIHVuYXZhaWxhYmxlJyk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIENSWVBUTyA9IHY7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIHRocm93IEVycm9yXHJcbiAgICAgICAgICAgICAgIChiaWdudW1iZXJFcnJvciArIHAgKyAnIG5vdCB0cnVlIG9yIGZhbHNlOiAnICsgdik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAvLyBNT0RVTE9fTU9ERSB7bnVtYmVyfSBJbnRlZ2VyLCAwIHRvIDkgaW5jbHVzaXZlLlxyXG4gICAgICAgICAgLy8gJ1tCaWdOdW1iZXIgRXJyb3JdIE1PRFVMT19NT0RFIHtub3QgYSBwcmltaXRpdmUgbnVtYmVyfG5vdCBhbiBpbnRlZ2VyfG91dCBvZiByYW5nZX06IHt2fSdcclxuICAgICAgICAgIGlmIChvYmouaGFzT3duUHJvcGVydHkocCA9ICdNT0RVTE9fTU9ERScpKSB7XHJcbiAgICAgICAgICAgIHYgPSBvYmpbcF07XHJcbiAgICAgICAgICAgIGludENoZWNrKHYsIDAsIDksIHApO1xyXG4gICAgICAgICAgICBNT0RVTE9fTU9ERSA9IHY7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgLy8gUE9XX1BSRUNJU0lPTiB7bnVtYmVyfSBJbnRlZ2VyLCAwIHRvIE1BWCBpbmNsdXNpdmUuXHJcbiAgICAgICAgICAvLyAnW0JpZ051bWJlciBFcnJvcl0gUE9XX1BSRUNJU0lPTiB7bm90IGEgcHJpbWl0aXZlIG51bWJlcnxub3QgYW4gaW50ZWdlcnxvdXQgb2YgcmFuZ2V9OiB7dn0nXHJcbiAgICAgICAgICBpZiAob2JqLmhhc093blByb3BlcnR5KHAgPSAnUE9XX1BSRUNJU0lPTicpKSB7XHJcbiAgICAgICAgICAgIHYgPSBvYmpbcF07XHJcbiAgICAgICAgICAgIGludENoZWNrKHYsIDAsIE1BWCwgcCk7XHJcbiAgICAgICAgICAgIFBPV19QUkVDSVNJT04gPSB2O1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIC8vIEZPUk1BVCB7b2JqZWN0fVxyXG4gICAgICAgICAgLy8gJ1tCaWdOdW1iZXIgRXJyb3JdIEZPUk1BVCBub3QgYW4gb2JqZWN0OiB7dn0nXHJcbiAgICAgICAgICBpZiAob2JqLmhhc093blByb3BlcnR5KHAgPSAnRk9STUFUJykpIHtcclxuICAgICAgICAgICAgdiA9IG9ialtwXTtcclxuICAgICAgICAgICAgaWYgKHR5cGVvZiB2ID09ICdvYmplY3QnKSBGT1JNQVQgPSB2O1xyXG4gICAgICAgICAgICBlbHNlIHRocm93IEVycm9yXHJcbiAgICAgICAgICAgICAoYmlnbnVtYmVyRXJyb3IgKyBwICsgJyBub3QgYW4gb2JqZWN0OiAnICsgdik7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgLy8gQUxQSEFCRVQge3N0cmluZ31cclxuICAgICAgICAgIC8vICdbQmlnTnVtYmVyIEVycm9yXSBBTFBIQUJFVCBpbnZhbGlkOiB7dn0nXHJcbiAgICAgICAgICBpZiAob2JqLmhhc093blByb3BlcnR5KHAgPSAnQUxQSEFCRVQnKSkge1xyXG4gICAgICAgICAgICB2ID0gb2JqW3BdO1xyXG5cclxuICAgICAgICAgICAgLy8gRGlzYWxsb3cgaWYgbGVzcyB0aGFuIHR3byBjaGFyYWN0ZXJzLFxyXG4gICAgICAgICAgICAvLyBvciBpZiBpdCBjb250YWlucyAnKycsICctJywgJy4nLCB3aGl0ZXNwYWNlLCBvciBhIHJlcGVhdGVkIGNoYXJhY3Rlci5cclxuICAgICAgICAgICAgaWYgKHR5cGVvZiB2ID09ICdzdHJpbmcnICYmICEvXi4/JHxbK1xcLS5cXHNdfCguKS4qXFwxLy50ZXN0KHYpKSB7XHJcbiAgICAgICAgICAgICAgQUxQSEFCRVQgPSB2O1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIHRocm93IEVycm9yXHJcbiAgICAgICAgICAgICAgIChiaWdudW1iZXJFcnJvciArIHAgKyAnIGludmFsaWQ6ICcgKyB2KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICB9IGVsc2Uge1xyXG5cclxuICAgICAgICAgIC8vICdbQmlnTnVtYmVyIEVycm9yXSBPYmplY3QgZXhwZWN0ZWQ6IHt2fSdcclxuICAgICAgICAgIHRocm93IEVycm9yXHJcbiAgICAgICAgICAgKGJpZ251bWJlckVycm9yICsgJ09iamVjdCBleHBlY3RlZDogJyArIG9iaik7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICByZXR1cm4ge1xyXG4gICAgICAgIERFQ0lNQUxfUExBQ0VTOiBERUNJTUFMX1BMQUNFUyxcclxuICAgICAgICBST1VORElOR19NT0RFOiBST1VORElOR19NT0RFLFxyXG4gICAgICAgIEVYUE9ORU5USUFMX0FUOiBbVE9fRVhQX05FRywgVE9fRVhQX1BPU10sXHJcbiAgICAgICAgUkFOR0U6IFtNSU5fRVhQLCBNQVhfRVhQXSxcclxuICAgICAgICBDUllQVE86IENSWVBUTyxcclxuICAgICAgICBNT0RVTE9fTU9ERTogTU9EVUxPX01PREUsXHJcbiAgICAgICAgUE9XX1BSRUNJU0lPTjogUE9XX1BSRUNJU0lPTixcclxuICAgICAgICBGT1JNQVQ6IEZPUk1BVCxcclxuICAgICAgICBBTFBIQUJFVDogQUxQSEFCRVRcclxuICAgICAgfTtcclxuICAgIH07XHJcblxyXG5cclxuICAgIC8qXHJcbiAgICAgKiBSZXR1cm4gdHJ1ZSBpZiB2IGlzIGEgQmlnTnVtYmVyIGluc3RhbmNlLCBvdGhlcndpc2UgcmV0dXJuIGZhbHNlLlxyXG4gICAgICpcclxuICAgICAqIElmIEJpZ051bWJlci5ERUJVRyBpcyB0cnVlLCB0aHJvdyBpZiBhIEJpZ051bWJlciBpbnN0YW5jZSBpcyBub3Qgd2VsbC1mb3JtZWQuXHJcbiAgICAgKlxyXG4gICAgICogdiB7YW55fVxyXG4gICAgICpcclxuICAgICAqICdbQmlnTnVtYmVyIEVycm9yXSBJbnZhbGlkIEJpZ051bWJlcjoge3Z9J1xyXG4gICAgICovXHJcbiAgICBCaWdOdW1iZXIuaXNCaWdOdW1iZXIgPSBmdW5jdGlvbiAodikge1xyXG4gICAgICBpZiAoIXYgfHwgdi5faXNCaWdOdW1iZXIgIT09IHRydWUpIHJldHVybiBmYWxzZTtcclxuICAgICAgaWYgKCFCaWdOdW1iZXIuREVCVUcpIHJldHVybiB0cnVlO1xyXG5cclxuICAgICAgdmFyIGksIG4sXHJcbiAgICAgICAgYyA9IHYuYyxcclxuICAgICAgICBlID0gdi5lLFxyXG4gICAgICAgIHMgPSB2LnM7XHJcblxyXG4gICAgICBvdXQ6IGlmICh7fS50b1N0cmluZy5jYWxsKGMpID09ICdbb2JqZWN0IEFycmF5XScpIHtcclxuXHJcbiAgICAgICAgaWYgKChzID09PSAxIHx8IHMgPT09IC0xKSAmJiBlID49IC1NQVggJiYgZSA8PSBNQVggJiYgZSA9PT0gbWF0aGZsb29yKGUpKSB7XHJcblxyXG4gICAgICAgICAgLy8gSWYgdGhlIGZpcnN0IGVsZW1lbnQgaXMgemVybywgdGhlIEJpZ051bWJlciB2YWx1ZSBtdXN0IGJlIHplcm8uXHJcbiAgICAgICAgICBpZiAoY1swXSA9PT0gMCkge1xyXG4gICAgICAgICAgICBpZiAoZSA9PT0gMCAmJiBjLmxlbmd0aCA9PT0gMSkgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgICAgIGJyZWFrIG91dDtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAvLyBDYWxjdWxhdGUgbnVtYmVyIG9mIGRpZ2l0cyB0aGF0IGNbMF0gc2hvdWxkIGhhdmUsIGJhc2VkIG9uIHRoZSBleHBvbmVudC5cclxuICAgICAgICAgIGkgPSAoZSArIDEpICUgTE9HX0JBU0U7XHJcbiAgICAgICAgICBpZiAoaSA8IDEpIGkgKz0gTE9HX0JBU0U7XHJcblxyXG4gICAgICAgICAgLy8gQ2FsY3VsYXRlIG51bWJlciBvZiBkaWdpdHMgb2YgY1swXS5cclxuICAgICAgICAgIC8vaWYgKE1hdGguY2VpbChNYXRoLmxvZyhjWzBdICsgMSkgLyBNYXRoLkxOMTApID09IGkpIHtcclxuICAgICAgICAgIGlmIChTdHJpbmcoY1swXSkubGVuZ3RoID09IGkpIHtcclxuXHJcbiAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBjLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgbiA9IGNbaV07XHJcbiAgICAgICAgICAgICAgaWYgKG4gPCAwIHx8IG4gPj0gQkFTRSB8fCBuICE9PSBtYXRoZmxvb3IobikpIGJyZWFrIG91dDtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgLy8gTGFzdCBlbGVtZW50IGNhbm5vdCBiZSB6ZXJvLCB1bmxlc3MgaXQgaXMgdGhlIG9ubHkgZWxlbWVudC5cclxuICAgICAgICAgICAgaWYgKG4gIT09IDApIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgIC8vIEluZmluaXR5L05hTlxyXG4gICAgICB9IGVsc2UgaWYgKGMgPT09IG51bGwgJiYgZSA9PT0gbnVsbCAmJiAocyA9PT0gbnVsbCB8fCBzID09PSAxIHx8IHMgPT09IC0xKSkge1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICB9XHJcblxyXG4gICAgICB0aHJvdyBFcnJvclxyXG4gICAgICAgIChiaWdudW1iZXJFcnJvciArICdJbnZhbGlkIEJpZ051bWJlcjogJyArIHYpO1xyXG4gICAgfTtcclxuXHJcblxyXG4gICAgLypcclxuICAgICAqIFJldHVybiBhIG5ldyBCaWdOdW1iZXIgd2hvc2UgdmFsdWUgaXMgdGhlIG1heGltdW0gb2YgdGhlIGFyZ3VtZW50cy5cclxuICAgICAqXHJcbiAgICAgKiBhcmd1bWVudHMge251bWJlcnxzdHJpbmd8QmlnTnVtYmVyfVxyXG4gICAgICovXHJcbiAgICBCaWdOdW1iZXIubWF4aW11bSA9IEJpZ051bWJlci5tYXggPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgIHJldHVybiBtYXhPck1pbihhcmd1bWVudHMsIFAubHQpO1xyXG4gICAgfTtcclxuXHJcblxyXG4gICAgLypcclxuICAgICAqIFJldHVybiBhIG5ldyBCaWdOdW1iZXIgd2hvc2UgdmFsdWUgaXMgdGhlIG1pbmltdW0gb2YgdGhlIGFyZ3VtZW50cy5cclxuICAgICAqXHJcbiAgICAgKiBhcmd1bWVudHMge251bWJlcnxzdHJpbmd8QmlnTnVtYmVyfVxyXG4gICAgICovXHJcbiAgICBCaWdOdW1iZXIubWluaW11bSA9IEJpZ051bWJlci5taW4gPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgIHJldHVybiBtYXhPck1pbihhcmd1bWVudHMsIFAuZ3QpO1xyXG4gICAgfTtcclxuXHJcblxyXG4gICAgLypcclxuICAgICAqIFJldHVybiBhIG5ldyBCaWdOdW1iZXIgd2l0aCBhIHJhbmRvbSB2YWx1ZSBlcXVhbCB0byBvciBncmVhdGVyIHRoYW4gMCBhbmQgbGVzcyB0aGFuIDEsXHJcbiAgICAgKiBhbmQgd2l0aCBkcCwgb3IgREVDSU1BTF9QTEFDRVMgaWYgZHAgaXMgb21pdHRlZCwgZGVjaW1hbCBwbGFjZXMgKG9yIGxlc3MgaWYgdHJhaWxpbmdcclxuICAgICAqIHplcm9zIGFyZSBwcm9kdWNlZCkuXHJcbiAgICAgKlxyXG4gICAgICogW2RwXSB7bnVtYmVyfSBEZWNpbWFsIHBsYWNlcy4gSW50ZWdlciwgMCB0byBNQVggaW5jbHVzaXZlLlxyXG4gICAgICpcclxuICAgICAqICdbQmlnTnVtYmVyIEVycm9yXSBBcmd1bWVudCB7bm90IGEgcHJpbWl0aXZlIG51bWJlcnxub3QgYW4gaW50ZWdlcnxvdXQgb2YgcmFuZ2V9OiB7ZHB9J1xyXG4gICAgICogJ1tCaWdOdW1iZXIgRXJyb3JdIGNyeXB0byB1bmF2YWlsYWJsZSdcclxuICAgICAqL1xyXG4gICAgQmlnTnVtYmVyLnJhbmRvbSA9IChmdW5jdGlvbiAoKSB7XHJcbiAgICAgIHZhciBwb3cyXzUzID0gMHgyMDAwMDAwMDAwMDAwMDtcclxuXHJcbiAgICAgIC8vIFJldHVybiBhIDUzIGJpdCBpbnRlZ2VyIG4sIHdoZXJlIDAgPD0gbiA8IDkwMDcxOTkyNTQ3NDA5OTIuXHJcbiAgICAgIC8vIENoZWNrIGlmIE1hdGgucmFuZG9tKCkgcHJvZHVjZXMgbW9yZSB0aGFuIDMyIGJpdHMgb2YgcmFuZG9tbmVzcy5cclxuICAgICAgLy8gSWYgaXQgZG9lcywgYXNzdW1lIGF0IGxlYXN0IDUzIGJpdHMgYXJlIHByb2R1Y2VkLCBvdGhlcndpc2UgYXNzdW1lIGF0IGxlYXN0IDMwIGJpdHMuXHJcbiAgICAgIC8vIDB4NDAwMDAwMDAgaXMgMl4zMCwgMHg4MDAwMDAgaXMgMl4yMywgMHgxZmZmZmYgaXMgMl4yMSAtIDEuXHJcbiAgICAgIHZhciByYW5kb201M2JpdEludCA9IChNYXRoLnJhbmRvbSgpICogcG93Ml81MykgJiAweDFmZmZmZlxyXG4gICAgICAgPyBmdW5jdGlvbiAoKSB7IHJldHVybiBtYXRoZmxvb3IoTWF0aC5yYW5kb20oKSAqIHBvdzJfNTMpOyB9XHJcbiAgICAgICA6IGZ1bmN0aW9uICgpIHsgcmV0dXJuICgoTWF0aC5yYW5kb20oKSAqIDB4NDAwMDAwMDAgfCAwKSAqIDB4ODAwMDAwKSArXHJcbiAgICAgICAgIChNYXRoLnJhbmRvbSgpICogMHg4MDAwMDAgfCAwKTsgfTtcclxuXHJcbiAgICAgIHJldHVybiBmdW5jdGlvbiAoZHApIHtcclxuICAgICAgICB2YXIgYSwgYiwgZSwgaywgdixcclxuICAgICAgICAgIGkgPSAwLFxyXG4gICAgICAgICAgYyA9IFtdLFxyXG4gICAgICAgICAgcmFuZCA9IG5ldyBCaWdOdW1iZXIoT05FKTtcclxuXHJcbiAgICAgICAgaWYgKGRwID09IG51bGwpIGRwID0gREVDSU1BTF9QTEFDRVM7XHJcbiAgICAgICAgZWxzZSBpbnRDaGVjayhkcCwgMCwgTUFYKTtcclxuXHJcbiAgICAgICAgayA9IG1hdGhjZWlsKGRwIC8gTE9HX0JBU0UpO1xyXG5cclxuICAgICAgICBpZiAoQ1JZUFRPKSB7XHJcblxyXG4gICAgICAgICAgLy8gQnJvd3NlcnMgc3VwcG9ydGluZyBjcnlwdG8uZ2V0UmFuZG9tVmFsdWVzLlxyXG4gICAgICAgICAgaWYgKGNyeXB0by5nZXRSYW5kb21WYWx1ZXMpIHtcclxuXHJcbiAgICAgICAgICAgIGEgPSBjcnlwdG8uZ2V0UmFuZG9tVmFsdWVzKG5ldyBVaW50MzJBcnJheShrICo9IDIpKTtcclxuXHJcbiAgICAgICAgICAgIGZvciAoOyBpIDwgazspIHtcclxuXHJcbiAgICAgICAgICAgICAgLy8gNTMgYml0czpcclxuICAgICAgICAgICAgICAvLyAoKE1hdGgucG93KDIsIDMyKSAtIDEpICogTWF0aC5wb3coMiwgMjEpKS50b1N0cmluZygyKVxyXG4gICAgICAgICAgICAgIC8vIDExMTExIDExMTExMTExIDExMTExMTExIDExMTExMTExIDExMTAwMDAwIDAwMDAwMDAwIDAwMDAwMDAwXHJcbiAgICAgICAgICAgICAgLy8gKChNYXRoLnBvdygyLCAzMikgLSAxKSA+Pj4gMTEpLnRvU3RyaW5nKDIpXHJcbiAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTExMTEgMTExMTExMTEgMTExMTExMTFcclxuICAgICAgICAgICAgICAvLyAweDIwMDAwIGlzIDJeMjEuXHJcbiAgICAgICAgICAgICAgdiA9IGFbaV0gKiAweDIwMDAwICsgKGFbaSArIDFdID4+PiAxMSk7XHJcblxyXG4gICAgICAgICAgICAgIC8vIFJlamVjdGlvbiBzYW1wbGluZzpcclxuICAgICAgICAgICAgICAvLyAwIDw9IHYgPCA5MDA3MTk5MjU0NzQwOTkyXHJcbiAgICAgICAgICAgICAgLy8gUHJvYmFiaWxpdHkgdGhhdCB2ID49IDllMTUsIGlzXHJcbiAgICAgICAgICAgICAgLy8gNzE5OTI1NDc0MDk5MiAvIDkwMDcxOTkyNTQ3NDA5OTIgfj0gMC4wMDA4LCBpLmUuIDEgaW4gMTI1MVxyXG4gICAgICAgICAgICAgIGlmICh2ID49IDllMTUpIHtcclxuICAgICAgICAgICAgICAgIGIgPSBjcnlwdG8uZ2V0UmFuZG9tVmFsdWVzKG5ldyBVaW50MzJBcnJheSgyKSk7XHJcbiAgICAgICAgICAgICAgICBhW2ldID0gYlswXTtcclxuICAgICAgICAgICAgICAgIGFbaSArIDFdID0gYlsxXTtcclxuICAgICAgICAgICAgICB9IGVsc2Uge1xyXG5cclxuICAgICAgICAgICAgICAgIC8vIDAgPD0gdiA8PSA4OTk5OTk5OTk5OTk5OTk5XHJcbiAgICAgICAgICAgICAgICAvLyAwIDw9ICh2ICUgMWUxNCkgPD0gOTk5OTk5OTk5OTk5OTlcclxuICAgICAgICAgICAgICAgIGMucHVzaCh2ICUgMWUxNCk7XHJcbiAgICAgICAgICAgICAgICBpICs9IDI7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGkgPSBrIC8gMjtcclxuXHJcbiAgICAgICAgICAvLyBOb2RlLmpzIHN1cHBvcnRpbmcgY3J5cHRvLnJhbmRvbUJ5dGVzLlxyXG4gICAgICAgICAgfSBlbHNlIGlmIChjcnlwdG8ucmFuZG9tQnl0ZXMpIHtcclxuXHJcbiAgICAgICAgICAgIC8vIGJ1ZmZlclxyXG4gICAgICAgICAgICBhID0gY3J5cHRvLnJhbmRvbUJ5dGVzKGsgKj0gNyk7XHJcblxyXG4gICAgICAgICAgICBmb3IgKDsgaSA8IGs7KSB7XHJcblxyXG4gICAgICAgICAgICAgIC8vIDB4MTAwMDAwMDAwMDAwMCBpcyAyXjQ4LCAweDEwMDAwMDAwMDAwIGlzIDJeNDBcclxuICAgICAgICAgICAgICAvLyAweDEwMDAwMDAwMCBpcyAyXjMyLCAweDEwMDAwMDAgaXMgMl4yNFxyXG4gICAgICAgICAgICAgIC8vIDExMTExIDExMTExMTExIDExMTExMTExIDExMTExMTExIDExMTExMTExIDExMTExMTExIDExMTExMTExXHJcbiAgICAgICAgICAgICAgLy8gMCA8PSB2IDwgOTAwNzE5OTI1NDc0MDk5MlxyXG4gICAgICAgICAgICAgIHYgPSAoKGFbaV0gJiAzMSkgKiAweDEwMDAwMDAwMDAwMDApICsgKGFbaSArIDFdICogMHgxMDAwMDAwMDAwMCkgK1xyXG4gICAgICAgICAgICAgICAgIChhW2kgKyAyXSAqIDB4MTAwMDAwMDAwKSArIChhW2kgKyAzXSAqIDB4MTAwMDAwMCkgK1xyXG4gICAgICAgICAgICAgICAgIChhW2kgKyA0XSA8PCAxNikgKyAoYVtpICsgNV0gPDwgOCkgKyBhW2kgKyA2XTtcclxuXHJcbiAgICAgICAgICAgICAgaWYgKHYgPj0gOWUxNSkge1xyXG4gICAgICAgICAgICAgICAgY3J5cHRvLnJhbmRvbUJ5dGVzKDcpLmNvcHkoYSwgaSk7XHJcbiAgICAgICAgICAgICAgfSBlbHNlIHtcclxuXHJcbiAgICAgICAgICAgICAgICAvLyAwIDw9ICh2ICUgMWUxNCkgPD0gOTk5OTk5OTk5OTk5OTlcclxuICAgICAgICAgICAgICAgIGMucHVzaCh2ICUgMWUxNCk7XHJcbiAgICAgICAgICAgICAgICBpICs9IDc7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGkgPSBrIC8gNztcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIENSWVBUTyA9IGZhbHNlO1xyXG4gICAgICAgICAgICB0aHJvdyBFcnJvclxyXG4gICAgICAgICAgICAgKGJpZ251bWJlckVycm9yICsgJ2NyeXB0byB1bmF2YWlsYWJsZScpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gVXNlIE1hdGgucmFuZG9tLlxyXG4gICAgICAgIGlmICghQ1JZUFRPKSB7XHJcblxyXG4gICAgICAgICAgZm9yICg7IGkgPCBrOykge1xyXG4gICAgICAgICAgICB2ID0gcmFuZG9tNTNiaXRJbnQoKTtcclxuICAgICAgICAgICAgaWYgKHYgPCA5ZTE1KSBjW2krK10gPSB2ICUgMWUxNDtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGsgPSBjWy0taV07XHJcbiAgICAgICAgZHAgJT0gTE9HX0JBU0U7XHJcblxyXG4gICAgICAgIC8vIENvbnZlcnQgdHJhaWxpbmcgZGlnaXRzIHRvIHplcm9zIGFjY29yZGluZyB0byBkcC5cclxuICAgICAgICBpZiAoayAmJiBkcCkge1xyXG4gICAgICAgICAgdiA9IFBPV1NfVEVOW0xPR19CQVNFIC0gZHBdO1xyXG4gICAgICAgICAgY1tpXSA9IG1hdGhmbG9vcihrIC8gdikgKiB2O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gUmVtb3ZlIHRyYWlsaW5nIGVsZW1lbnRzIHdoaWNoIGFyZSB6ZXJvLlxyXG4gICAgICAgIGZvciAoOyBjW2ldID09PSAwOyBjLnBvcCgpLCBpLS0pO1xyXG5cclxuICAgICAgICAvLyBaZXJvP1xyXG4gICAgICAgIGlmIChpIDwgMCkge1xyXG4gICAgICAgICAgYyA9IFtlID0gMF07XHJcbiAgICAgICAgfSBlbHNlIHtcclxuXHJcbiAgICAgICAgICAvLyBSZW1vdmUgbGVhZGluZyBlbGVtZW50cyB3aGljaCBhcmUgemVybyBhbmQgYWRqdXN0IGV4cG9uZW50IGFjY29yZGluZ2x5LlxyXG4gICAgICAgICAgZm9yIChlID0gLTEgOyBjWzBdID09PSAwOyBjLnNwbGljZSgwLCAxKSwgZSAtPSBMT0dfQkFTRSk7XHJcblxyXG4gICAgICAgICAgLy8gQ291bnQgdGhlIGRpZ2l0cyBvZiB0aGUgZmlyc3QgZWxlbWVudCBvZiBjIHRvIGRldGVybWluZSBsZWFkaW5nIHplcm9zLCBhbmQuLi5cclxuICAgICAgICAgIGZvciAoaSA9IDEsIHYgPSBjWzBdOyB2ID49IDEwOyB2IC89IDEwLCBpKyspO1xyXG5cclxuICAgICAgICAgIC8vIGFkanVzdCB0aGUgZXhwb25lbnQgYWNjb3JkaW5nbHkuXHJcbiAgICAgICAgICBpZiAoaSA8IExPR19CQVNFKSBlIC09IExPR19CQVNFIC0gaTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJhbmQuZSA9IGU7XHJcbiAgICAgICAgcmFuZC5jID0gYztcclxuICAgICAgICByZXR1cm4gcmFuZDtcclxuICAgICAgfTtcclxuICAgIH0pKCk7XHJcblxyXG5cclxuICAgIC8qXHJcbiAgICAgKiBSZXR1cm4gYSBCaWdOdW1iZXIgd2hvc2UgdmFsdWUgaXMgdGhlIHN1bSBvZiB0aGUgYXJndW1lbnRzLlxyXG4gICAgICpcclxuICAgICAqIGFyZ3VtZW50cyB7bnVtYmVyfHN0cmluZ3xCaWdOdW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIEJpZ051bWJlci5zdW0gPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgIHZhciBpID0gMSxcclxuICAgICAgICBhcmdzID0gYXJndW1lbnRzLFxyXG4gICAgICAgIHN1bSA9IG5ldyBCaWdOdW1iZXIoYXJnc1swXSk7XHJcbiAgICAgIGZvciAoOyBpIDwgYXJncy5sZW5ndGg7KSBzdW0gPSBzdW0ucGx1cyhhcmdzW2krK10pO1xyXG4gICAgICByZXR1cm4gc3VtO1xyXG4gICAgfTtcclxuXHJcblxyXG4gICAgLy8gUFJJVkFURSBGVU5DVElPTlNcclxuXHJcblxyXG4gICAgLy8gQ2FsbGVkIGJ5IEJpZ051bWJlciBhbmQgQmlnTnVtYmVyLnByb3RvdHlwZS50b1N0cmluZy5cclxuICAgIGNvbnZlcnRCYXNlID0gKGZ1bmN0aW9uICgpIHtcclxuICAgICAgdmFyIGRlY2ltYWwgPSAnMDEyMzQ1Njc4OSc7XHJcblxyXG4gICAgICAvKlxyXG4gICAgICAgKiBDb252ZXJ0IHN0cmluZyBvZiBiYXNlSW4gdG8gYW4gYXJyYXkgb2YgbnVtYmVycyBvZiBiYXNlT3V0LlxyXG4gICAgICAgKiBFZy4gdG9CYXNlT3V0KCcyNTUnLCAxMCwgMTYpIHJldHVybnMgWzE1LCAxNV0uXHJcbiAgICAgICAqIEVnLiB0b0Jhc2VPdXQoJ2ZmJywgMTYsIDEwKSByZXR1cm5zIFsyLCA1LCA1XS5cclxuICAgICAgICovXHJcbiAgICAgIGZ1bmN0aW9uIHRvQmFzZU91dChzdHIsIGJhc2VJbiwgYmFzZU91dCwgYWxwaGFiZXQpIHtcclxuICAgICAgICB2YXIgaixcclxuICAgICAgICAgIGFyciA9IFswXSxcclxuICAgICAgICAgIGFyckwsXHJcbiAgICAgICAgICBpID0gMCxcclxuICAgICAgICAgIGxlbiA9IHN0ci5sZW5ndGg7XHJcblxyXG4gICAgICAgIGZvciAoOyBpIDwgbGVuOykge1xyXG4gICAgICAgICAgZm9yIChhcnJMID0gYXJyLmxlbmd0aDsgYXJyTC0tOyBhcnJbYXJyTF0gKj0gYmFzZUluKTtcclxuXHJcbiAgICAgICAgICBhcnJbMF0gKz0gYWxwaGFiZXQuaW5kZXhPZihzdHIuY2hhckF0KGkrKykpO1xyXG5cclxuICAgICAgICAgIGZvciAoaiA9IDA7IGogPCBhcnIubGVuZ3RoOyBqKyspIHtcclxuXHJcbiAgICAgICAgICAgIGlmIChhcnJbal0gPiBiYXNlT3V0IC0gMSkge1xyXG4gICAgICAgICAgICAgIGlmIChhcnJbaiArIDFdID09IG51bGwpIGFycltqICsgMV0gPSAwO1xyXG4gICAgICAgICAgICAgIGFycltqICsgMV0gKz0gYXJyW2pdIC8gYmFzZU91dCB8IDA7XHJcbiAgICAgICAgICAgICAgYXJyW2pdICU9IGJhc2VPdXQ7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBhcnIucmV2ZXJzZSgpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyBDb252ZXJ0IGEgbnVtZXJpYyBzdHJpbmcgb2YgYmFzZUluIHRvIGEgbnVtZXJpYyBzdHJpbmcgb2YgYmFzZU91dC5cclxuICAgICAgLy8gSWYgdGhlIGNhbGxlciBpcyB0b1N0cmluZywgd2UgYXJlIGNvbnZlcnRpbmcgZnJvbSBiYXNlIDEwIHRvIGJhc2VPdXQuXHJcbiAgICAgIC8vIElmIHRoZSBjYWxsZXIgaXMgQmlnTnVtYmVyLCB3ZSBhcmUgY29udmVydGluZyBmcm9tIGJhc2VJbiB0byBiYXNlIDEwLlxyXG4gICAgICByZXR1cm4gZnVuY3Rpb24gKHN0ciwgYmFzZUluLCBiYXNlT3V0LCBzaWduLCBjYWxsZXJJc1RvU3RyaW5nKSB7XHJcbiAgICAgICAgdmFyIGFscGhhYmV0LCBkLCBlLCBrLCByLCB4LCB4YywgeSxcclxuICAgICAgICAgIGkgPSBzdHIuaW5kZXhPZignLicpLFxyXG4gICAgICAgICAgZHAgPSBERUNJTUFMX1BMQUNFUyxcclxuICAgICAgICAgIHJtID0gUk9VTkRJTkdfTU9ERTtcclxuXHJcbiAgICAgICAgLy8gTm9uLWludGVnZXIuXHJcbiAgICAgICAgaWYgKGkgPj0gMCkge1xyXG4gICAgICAgICAgayA9IFBPV19QUkVDSVNJT047XHJcblxyXG4gICAgICAgICAgLy8gVW5saW1pdGVkIHByZWNpc2lvbi5cclxuICAgICAgICAgIFBPV19QUkVDSVNJT04gPSAwO1xyXG4gICAgICAgICAgc3RyID0gc3RyLnJlcGxhY2UoJy4nLCAnJyk7XHJcbiAgICAgICAgICB5ID0gbmV3IEJpZ051bWJlcihiYXNlSW4pO1xyXG4gICAgICAgICAgeCA9IHkucG93KHN0ci5sZW5ndGggLSBpKTtcclxuICAgICAgICAgIFBPV19QUkVDSVNJT04gPSBrO1xyXG5cclxuICAgICAgICAgIC8vIENvbnZlcnQgc3RyIGFzIGlmIGFuIGludGVnZXIsIHRoZW4gcmVzdG9yZSB0aGUgZnJhY3Rpb24gcGFydCBieSBkaXZpZGluZyB0aGVcclxuICAgICAgICAgIC8vIHJlc3VsdCBieSBpdHMgYmFzZSByYWlzZWQgdG8gYSBwb3dlci5cclxuXHJcbiAgICAgICAgICB5LmMgPSB0b0Jhc2VPdXQodG9GaXhlZFBvaW50KGNvZWZmVG9TdHJpbmcoeC5jKSwgeC5lLCAnMCcpLFxyXG4gICAgICAgICAgIDEwLCBiYXNlT3V0LCBkZWNpbWFsKTtcclxuICAgICAgICAgIHkuZSA9IHkuYy5sZW5ndGg7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBDb252ZXJ0IHRoZSBudW1iZXIgYXMgaW50ZWdlci5cclxuXHJcbiAgICAgICAgeGMgPSB0b0Jhc2VPdXQoc3RyLCBiYXNlSW4sIGJhc2VPdXQsIGNhbGxlcklzVG9TdHJpbmdcclxuICAgICAgICAgPyAoYWxwaGFiZXQgPSBBTFBIQUJFVCwgZGVjaW1hbClcclxuICAgICAgICAgOiAoYWxwaGFiZXQgPSBkZWNpbWFsLCBBTFBIQUJFVCkpO1xyXG5cclxuICAgICAgICAvLyB4YyBub3cgcmVwcmVzZW50cyBzdHIgYXMgYW4gaW50ZWdlciBhbmQgY29udmVydGVkIHRvIGJhc2VPdXQuIGUgaXMgdGhlIGV4cG9uZW50LlxyXG4gICAgICAgIGUgPSBrID0geGMubGVuZ3RoO1xyXG5cclxuICAgICAgICAvLyBSZW1vdmUgdHJhaWxpbmcgemVyb3MuXHJcbiAgICAgICAgZm9yICg7IHhjWy0ta10gPT0gMDsgeGMucG9wKCkpO1xyXG5cclxuICAgICAgICAvLyBaZXJvP1xyXG4gICAgICAgIGlmICgheGNbMF0pIHJldHVybiBhbHBoYWJldC5jaGFyQXQoMCk7XHJcblxyXG4gICAgICAgIC8vIERvZXMgc3RyIHJlcHJlc2VudCBhbiBpbnRlZ2VyPyBJZiBzbywgbm8gbmVlZCBmb3IgdGhlIGRpdmlzaW9uLlxyXG4gICAgICAgIGlmIChpIDwgMCkge1xyXG4gICAgICAgICAgLS1lO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB4LmMgPSB4YztcclxuICAgICAgICAgIHguZSA9IGU7XHJcblxyXG4gICAgICAgICAgLy8gVGhlIHNpZ24gaXMgbmVlZGVkIGZvciBjb3JyZWN0IHJvdW5kaW5nLlxyXG4gICAgICAgICAgeC5zID0gc2lnbjtcclxuICAgICAgICAgIHggPSBkaXYoeCwgeSwgZHAsIHJtLCBiYXNlT3V0KTtcclxuICAgICAgICAgIHhjID0geC5jO1xyXG4gICAgICAgICAgciA9IHgucjtcclxuICAgICAgICAgIGUgPSB4LmU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyB4YyBub3cgcmVwcmVzZW50cyBzdHIgY29udmVydGVkIHRvIGJhc2VPdXQuXHJcblxyXG4gICAgICAgIC8vIFRIZSBpbmRleCBvZiB0aGUgcm91bmRpbmcgZGlnaXQuXHJcbiAgICAgICAgZCA9IGUgKyBkcCArIDE7XHJcblxyXG4gICAgICAgIC8vIFRoZSByb3VuZGluZyBkaWdpdDogdGhlIGRpZ2l0IHRvIHRoZSByaWdodCBvZiB0aGUgZGlnaXQgdGhhdCBtYXkgYmUgcm91bmRlZCB1cC5cclxuICAgICAgICBpID0geGNbZF07XHJcblxyXG4gICAgICAgIC8vIExvb2sgYXQgdGhlIHJvdW5kaW5nIGRpZ2l0cyBhbmQgbW9kZSB0byBkZXRlcm1pbmUgd2hldGhlciB0byByb3VuZCB1cC5cclxuXHJcbiAgICAgICAgayA9IGJhc2VPdXQgLyAyO1xyXG4gICAgICAgIHIgPSByIHx8IGQgPCAwIHx8IHhjW2QgKyAxXSAhPSBudWxsO1xyXG5cclxuICAgICAgICByID0gcm0gPCA0ID8gKGkgIT0gbnVsbCB8fCByKSAmJiAocm0gPT0gMCB8fCBybSA9PSAoeC5zIDwgMCA/IDMgOiAyKSlcclxuICAgICAgICAgICAgICA6IGkgPiBrIHx8IGkgPT0gayAmJihybSA9PSA0IHx8IHIgfHwgcm0gPT0gNiAmJiB4Y1tkIC0gMV0gJiAxIHx8XHJcbiAgICAgICAgICAgICAgIHJtID09ICh4LnMgPCAwID8gOCA6IDcpKTtcclxuXHJcbiAgICAgICAgLy8gSWYgdGhlIGluZGV4IG9mIHRoZSByb3VuZGluZyBkaWdpdCBpcyBub3QgZ3JlYXRlciB0aGFuIHplcm8sIG9yIHhjIHJlcHJlc2VudHNcclxuICAgICAgICAvLyB6ZXJvLCB0aGVuIHRoZSByZXN1bHQgb2YgdGhlIGJhc2UgY29udmVyc2lvbiBpcyB6ZXJvIG9yLCBpZiByb3VuZGluZyB1cCwgYSB2YWx1ZVxyXG4gICAgICAgIC8vIHN1Y2ggYXMgMC4wMDAwMS5cclxuICAgICAgICBpZiAoZCA8IDEgfHwgIXhjWzBdKSB7XHJcblxyXG4gICAgICAgICAgLy8gMV4tZHAgb3IgMFxyXG4gICAgICAgICAgc3RyID0gciA/IHRvRml4ZWRQb2ludChhbHBoYWJldC5jaGFyQXQoMSksIC1kcCwgYWxwaGFiZXQuY2hhckF0KDApKSA6IGFscGhhYmV0LmNoYXJBdCgwKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG5cclxuICAgICAgICAgIC8vIFRydW5jYXRlIHhjIHRvIHRoZSByZXF1aXJlZCBudW1iZXIgb2YgZGVjaW1hbCBwbGFjZXMuXHJcbiAgICAgICAgICB4Yy5sZW5ndGggPSBkO1xyXG5cclxuICAgICAgICAgIC8vIFJvdW5kIHVwP1xyXG4gICAgICAgICAgaWYgKHIpIHtcclxuXHJcbiAgICAgICAgICAgIC8vIFJvdW5kaW5nIHVwIG1heSBtZWFuIHRoZSBwcmV2aW91cyBkaWdpdCBoYXMgdG8gYmUgcm91bmRlZCB1cCBhbmQgc28gb24uXHJcbiAgICAgICAgICAgIGZvciAoLS1iYXNlT3V0OyArK3hjWy0tZF0gPiBiYXNlT3V0Oykge1xyXG4gICAgICAgICAgICAgIHhjW2RdID0gMDtcclxuXHJcbiAgICAgICAgICAgICAgaWYgKCFkKSB7XHJcbiAgICAgICAgICAgICAgICArK2U7XHJcbiAgICAgICAgICAgICAgICB4YyA9IFsxXS5jb25jYXQoeGMpO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIC8vIERldGVybWluZSB0cmFpbGluZyB6ZXJvcy5cclxuICAgICAgICAgIGZvciAoayA9IHhjLmxlbmd0aDsgIXhjWy0ta107KTtcclxuXHJcbiAgICAgICAgICAvLyBFLmcuIFs0LCAxMSwgMTVdIGJlY29tZXMgNGJmLlxyXG4gICAgICAgICAgZm9yIChpID0gMCwgc3RyID0gJyc7IGkgPD0gazsgc3RyICs9IGFscGhhYmV0LmNoYXJBdCh4Y1tpKytdKSk7XHJcblxyXG4gICAgICAgICAgLy8gQWRkIGxlYWRpbmcgemVyb3MsIGRlY2ltYWwgcG9pbnQgYW5kIHRyYWlsaW5nIHplcm9zIGFzIHJlcXVpcmVkLlxyXG4gICAgICAgICAgc3RyID0gdG9GaXhlZFBvaW50KHN0ciwgZSwgYWxwaGFiZXQuY2hhckF0KDApKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIFRoZSBjYWxsZXIgd2lsbCBhZGQgdGhlIHNpZ24uXHJcbiAgICAgICAgcmV0dXJuIHN0cjtcclxuICAgICAgfTtcclxuICAgIH0pKCk7XHJcblxyXG5cclxuICAgIC8vIFBlcmZvcm0gZGl2aXNpb24gaW4gdGhlIHNwZWNpZmllZCBiYXNlLiBDYWxsZWQgYnkgZGl2IGFuZCBjb252ZXJ0QmFzZS5cclxuICAgIGRpdiA9IChmdW5jdGlvbiAoKSB7XHJcblxyXG4gICAgICAvLyBBc3N1bWUgbm9uLXplcm8geCBhbmQgay5cclxuICAgICAgZnVuY3Rpb24gbXVsdGlwbHkoeCwgaywgYmFzZSkge1xyXG4gICAgICAgIHZhciBtLCB0ZW1wLCB4bG8sIHhoaSxcclxuICAgICAgICAgIGNhcnJ5ID0gMCxcclxuICAgICAgICAgIGkgPSB4Lmxlbmd0aCxcclxuICAgICAgICAgIGtsbyA9IGsgJSBTUVJUX0JBU0UsXHJcbiAgICAgICAgICBraGkgPSBrIC8gU1FSVF9CQVNFIHwgMDtcclxuXHJcbiAgICAgICAgZm9yICh4ID0geC5zbGljZSgpOyBpLS07KSB7XHJcbiAgICAgICAgICB4bG8gPSB4W2ldICUgU1FSVF9CQVNFO1xyXG4gICAgICAgICAgeGhpID0geFtpXSAvIFNRUlRfQkFTRSB8IDA7XHJcbiAgICAgICAgICBtID0ga2hpICogeGxvICsgeGhpICoga2xvO1xyXG4gICAgICAgICAgdGVtcCA9IGtsbyAqIHhsbyArICgobSAlIFNRUlRfQkFTRSkgKiBTUVJUX0JBU0UpICsgY2Fycnk7XHJcbiAgICAgICAgICBjYXJyeSA9ICh0ZW1wIC8gYmFzZSB8IDApICsgKG0gLyBTUVJUX0JBU0UgfCAwKSArIGtoaSAqIHhoaTtcclxuICAgICAgICAgIHhbaV0gPSB0ZW1wICUgYmFzZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChjYXJyeSkgeCA9IFtjYXJyeV0uY29uY2F0KHgpO1xyXG5cclxuICAgICAgICByZXR1cm4geDtcclxuICAgICAgfVxyXG5cclxuICAgICAgZnVuY3Rpb24gY29tcGFyZShhLCBiLCBhTCwgYkwpIHtcclxuICAgICAgICB2YXIgaSwgY21wO1xyXG5cclxuICAgICAgICBpZiAoYUwgIT0gYkwpIHtcclxuICAgICAgICAgIGNtcCA9IGFMID4gYkwgPyAxIDogLTE7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuXHJcbiAgICAgICAgICBmb3IgKGkgPSBjbXAgPSAwOyBpIDwgYUw7IGkrKykge1xyXG5cclxuICAgICAgICAgICAgaWYgKGFbaV0gIT0gYltpXSkge1xyXG4gICAgICAgICAgICAgIGNtcCA9IGFbaV0gPiBiW2ldID8gMSA6IC0xO1xyXG4gICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gY21wO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBmdW5jdGlvbiBzdWJ0cmFjdChhLCBiLCBhTCwgYmFzZSkge1xyXG4gICAgICAgIHZhciBpID0gMDtcclxuXHJcbiAgICAgICAgLy8gU3VidHJhY3QgYiBmcm9tIGEuXHJcbiAgICAgICAgZm9yICg7IGFMLS07KSB7XHJcbiAgICAgICAgICBhW2FMXSAtPSBpO1xyXG4gICAgICAgICAgaSA9IGFbYUxdIDwgYlthTF0gPyAxIDogMDtcclxuICAgICAgICAgIGFbYUxdID0gaSAqIGJhc2UgKyBhW2FMXSAtIGJbYUxdO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gUmVtb3ZlIGxlYWRpbmcgemVyb3MuXHJcbiAgICAgICAgZm9yICg7ICFhWzBdICYmIGEubGVuZ3RoID4gMTsgYS5zcGxpY2UoMCwgMSkpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyB4OiBkaXZpZGVuZCwgeTogZGl2aXNvci5cclxuICAgICAgcmV0dXJuIGZ1bmN0aW9uICh4LCB5LCBkcCwgcm0sIGJhc2UpIHtcclxuICAgICAgICB2YXIgY21wLCBlLCBpLCBtb3JlLCBuLCBwcm9kLCBwcm9kTCwgcSwgcWMsIHJlbSwgcmVtTCwgcmVtMCwgeGksIHhMLCB5YzAsXHJcbiAgICAgICAgICB5TCwgeXosXHJcbiAgICAgICAgICBzID0geC5zID09IHkucyA/IDEgOiAtMSxcclxuICAgICAgICAgIHhjID0geC5jLFxyXG4gICAgICAgICAgeWMgPSB5LmM7XHJcblxyXG4gICAgICAgIC8vIEVpdGhlciBOYU4sIEluZmluaXR5IG9yIDA/XHJcbiAgICAgICAgaWYgKCF4YyB8fCAheGNbMF0gfHwgIXljIHx8ICF5Y1swXSkge1xyXG5cclxuICAgICAgICAgIHJldHVybiBuZXcgQmlnTnVtYmVyKFxyXG5cclxuICAgICAgICAgICAvLyBSZXR1cm4gTmFOIGlmIGVpdGhlciBOYU4sIG9yIGJvdGggSW5maW5pdHkgb3IgMC5cclxuICAgICAgICAgICAheC5zIHx8ICF5LnMgfHwgKHhjID8geWMgJiYgeGNbMF0gPT0geWNbMF0gOiAheWMpID8gTmFOIDpcclxuXHJcbiAgICAgICAgICAgIC8vIFJldHVybiDCsTAgaWYgeCBpcyDCsTAgb3IgeSBpcyDCsUluZmluaXR5LCBvciByZXR1cm4gwrFJbmZpbml0eSBhcyB5IGlzIMKxMC5cclxuICAgICAgICAgICAgeGMgJiYgeGNbMF0gPT0gMCB8fCAheWMgPyBzICogMCA6IHMgLyAwXHJcbiAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBxID0gbmV3IEJpZ051bWJlcihzKTtcclxuICAgICAgICBxYyA9IHEuYyA9IFtdO1xyXG4gICAgICAgIGUgPSB4LmUgLSB5LmU7XHJcbiAgICAgICAgcyA9IGRwICsgZSArIDE7XHJcblxyXG4gICAgICAgIGlmICghYmFzZSkge1xyXG4gICAgICAgICAgYmFzZSA9IEJBU0U7XHJcbiAgICAgICAgICBlID0gYml0Rmxvb3IoeC5lIC8gTE9HX0JBU0UpIC0gYml0Rmxvb3IoeS5lIC8gTE9HX0JBU0UpO1xyXG4gICAgICAgICAgcyA9IHMgLyBMT0dfQkFTRSB8IDA7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBSZXN1bHQgZXhwb25lbnQgbWF5IGJlIG9uZSBsZXNzIHRoZW4gdGhlIGN1cnJlbnQgdmFsdWUgb2YgZS5cclxuICAgICAgICAvLyBUaGUgY29lZmZpY2llbnRzIG9mIHRoZSBCaWdOdW1iZXJzIGZyb20gY29udmVydEJhc2UgbWF5IGhhdmUgdHJhaWxpbmcgemVyb3MuXHJcbiAgICAgICAgZm9yIChpID0gMDsgeWNbaV0gPT0gKHhjW2ldIHx8IDApOyBpKyspO1xyXG5cclxuICAgICAgICBpZiAoeWNbaV0gPiAoeGNbaV0gfHwgMCkpIGUtLTtcclxuXHJcbiAgICAgICAgaWYgKHMgPCAwKSB7XHJcbiAgICAgICAgICBxYy5wdXNoKDEpO1xyXG4gICAgICAgICAgbW9yZSA9IHRydWU7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHhMID0geGMubGVuZ3RoO1xyXG4gICAgICAgICAgeUwgPSB5Yy5sZW5ndGg7XHJcbiAgICAgICAgICBpID0gMDtcclxuICAgICAgICAgIHMgKz0gMjtcclxuXHJcbiAgICAgICAgICAvLyBOb3JtYWxpc2UgeGMgYW5kIHljIHNvIGhpZ2hlc3Qgb3JkZXIgZGlnaXQgb2YgeWMgaXMgPj0gYmFzZSAvIDIuXHJcblxyXG4gICAgICAgICAgbiA9IG1hdGhmbG9vcihiYXNlIC8gKHljWzBdICsgMSkpO1xyXG5cclxuICAgICAgICAgIC8vIE5vdCBuZWNlc3NhcnksIGJ1dCB0byBoYW5kbGUgb2RkIGJhc2VzIHdoZXJlIHljWzBdID09IChiYXNlIC8gMikgLSAxLlxyXG4gICAgICAgICAgLy8gaWYgKG4gPiAxIHx8IG4rKyA9PSAxICYmIHljWzBdIDwgYmFzZSAvIDIpIHtcclxuICAgICAgICAgIGlmIChuID4gMSkge1xyXG4gICAgICAgICAgICB5YyA9IG11bHRpcGx5KHljLCBuLCBiYXNlKTtcclxuICAgICAgICAgICAgeGMgPSBtdWx0aXBseSh4YywgbiwgYmFzZSk7XHJcbiAgICAgICAgICAgIHlMID0geWMubGVuZ3RoO1xyXG4gICAgICAgICAgICB4TCA9IHhjLmxlbmd0aDtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICB4aSA9IHlMO1xyXG4gICAgICAgICAgcmVtID0geGMuc2xpY2UoMCwgeUwpO1xyXG4gICAgICAgICAgcmVtTCA9IHJlbS5sZW5ndGg7XHJcblxyXG4gICAgICAgICAgLy8gQWRkIHplcm9zIHRvIG1ha2UgcmVtYWluZGVyIGFzIGxvbmcgYXMgZGl2aXNvci5cclxuICAgICAgICAgIGZvciAoOyByZW1MIDwgeUw7IHJlbVtyZW1MKytdID0gMCk7XHJcbiAgICAgICAgICB5eiA9IHljLnNsaWNlKCk7XHJcbiAgICAgICAgICB5eiA9IFswXS5jb25jYXQoeXopO1xyXG4gICAgICAgICAgeWMwID0geWNbMF07XHJcbiAgICAgICAgICBpZiAoeWNbMV0gPj0gYmFzZSAvIDIpIHljMCsrO1xyXG4gICAgICAgICAgLy8gTm90IG5lY2Vzc2FyeSwgYnV0IHRvIHByZXZlbnQgdHJpYWwgZGlnaXQgbiA+IGJhc2UsIHdoZW4gdXNpbmcgYmFzZSAzLlxyXG4gICAgICAgICAgLy8gZWxzZSBpZiAoYmFzZSA9PSAzICYmIHljMCA9PSAxKSB5YzAgPSAxICsgMWUtMTU7XHJcblxyXG4gICAgICAgICAgZG8ge1xyXG4gICAgICAgICAgICBuID0gMDtcclxuXHJcbiAgICAgICAgICAgIC8vIENvbXBhcmUgZGl2aXNvciBhbmQgcmVtYWluZGVyLlxyXG4gICAgICAgICAgICBjbXAgPSBjb21wYXJlKHljLCByZW0sIHlMLCByZW1MKTtcclxuXHJcbiAgICAgICAgICAgIC8vIElmIGRpdmlzb3IgPCByZW1haW5kZXIuXHJcbiAgICAgICAgICAgIGlmIChjbXAgPCAwKSB7XHJcblxyXG4gICAgICAgICAgICAgIC8vIENhbGN1bGF0ZSB0cmlhbCBkaWdpdCwgbi5cclxuXHJcbiAgICAgICAgICAgICAgcmVtMCA9IHJlbVswXTtcclxuICAgICAgICAgICAgICBpZiAoeUwgIT0gcmVtTCkgcmVtMCA9IHJlbTAgKiBiYXNlICsgKHJlbVsxXSB8fCAwKTtcclxuXHJcbiAgICAgICAgICAgICAgLy8gbiBpcyBob3cgbWFueSB0aW1lcyB0aGUgZGl2aXNvciBnb2VzIGludG8gdGhlIGN1cnJlbnQgcmVtYWluZGVyLlxyXG4gICAgICAgICAgICAgIG4gPSBtYXRoZmxvb3IocmVtMCAvIHljMCk7XHJcblxyXG4gICAgICAgICAgICAgIC8vICBBbGdvcml0aG06XHJcbiAgICAgICAgICAgICAgLy8gIHByb2R1Y3QgPSBkaXZpc29yIG11bHRpcGxpZWQgYnkgdHJpYWwgZGlnaXQgKG4pLlxyXG4gICAgICAgICAgICAgIC8vICBDb21wYXJlIHByb2R1Y3QgYW5kIHJlbWFpbmRlci5cclxuICAgICAgICAgICAgICAvLyAgSWYgcHJvZHVjdCBpcyBncmVhdGVyIHRoYW4gcmVtYWluZGVyOlxyXG4gICAgICAgICAgICAgIC8vICAgIFN1YnRyYWN0IGRpdmlzb3IgZnJvbSBwcm9kdWN0LCBkZWNyZW1lbnQgdHJpYWwgZGlnaXQuXHJcbiAgICAgICAgICAgICAgLy8gIFN1YnRyYWN0IHByb2R1Y3QgZnJvbSByZW1haW5kZXIuXHJcbiAgICAgICAgICAgICAgLy8gIElmIHByb2R1Y3Qgd2FzIGxlc3MgdGhhbiByZW1haW5kZXIgYXQgdGhlIGxhc3QgY29tcGFyZTpcclxuICAgICAgICAgICAgICAvLyAgICBDb21wYXJlIG5ldyByZW1haW5kZXIgYW5kIGRpdmlzb3IuXHJcbiAgICAgICAgICAgICAgLy8gICAgSWYgcmVtYWluZGVyIGlzIGdyZWF0ZXIgdGhhbiBkaXZpc29yOlxyXG4gICAgICAgICAgICAgIC8vICAgICAgU3VidHJhY3QgZGl2aXNvciBmcm9tIHJlbWFpbmRlciwgaW5jcmVtZW50IHRyaWFsIGRpZ2l0LlxyXG5cclxuICAgICAgICAgICAgICBpZiAobiA+IDEpIHtcclxuXHJcbiAgICAgICAgICAgICAgICAvLyBuIG1heSBiZSA+IGJhc2Ugb25seSB3aGVuIGJhc2UgaXMgMy5cclxuICAgICAgICAgICAgICAgIGlmIChuID49IGJhc2UpIG4gPSBiYXNlIC0gMTtcclxuXHJcbiAgICAgICAgICAgICAgICAvLyBwcm9kdWN0ID0gZGl2aXNvciAqIHRyaWFsIGRpZ2l0LlxyXG4gICAgICAgICAgICAgICAgcHJvZCA9IG11bHRpcGx5KHljLCBuLCBiYXNlKTtcclxuICAgICAgICAgICAgICAgIHByb2RMID0gcHJvZC5sZW5ndGg7XHJcbiAgICAgICAgICAgICAgICByZW1MID0gcmVtLmxlbmd0aDtcclxuXHJcbiAgICAgICAgICAgICAgICAvLyBDb21wYXJlIHByb2R1Y3QgYW5kIHJlbWFpbmRlci5cclxuICAgICAgICAgICAgICAgIC8vIElmIHByb2R1Y3QgPiByZW1haW5kZXIgdGhlbiB0cmlhbCBkaWdpdCBuIHRvbyBoaWdoLlxyXG4gICAgICAgICAgICAgICAgLy8gbiBpcyAxIHRvbyBoaWdoIGFib3V0IDUlIG9mIHRoZSB0aW1lLCBhbmQgaXMgbm90IGtub3duIHRvIGhhdmVcclxuICAgICAgICAgICAgICAgIC8vIGV2ZXIgYmVlbiBtb3JlIHRoYW4gMSB0b28gaGlnaC5cclxuICAgICAgICAgICAgICAgIHdoaWxlIChjb21wYXJlKHByb2QsIHJlbSwgcHJvZEwsIHJlbUwpID09IDEpIHtcclxuICAgICAgICAgICAgICAgICAgbi0tO1xyXG5cclxuICAgICAgICAgICAgICAgICAgLy8gU3VidHJhY3QgZGl2aXNvciBmcm9tIHByb2R1Y3QuXHJcbiAgICAgICAgICAgICAgICAgIHN1YnRyYWN0KHByb2QsIHlMIDwgcHJvZEwgPyB5eiA6IHljLCBwcm9kTCwgYmFzZSk7XHJcbiAgICAgICAgICAgICAgICAgIHByb2RMID0gcHJvZC5sZW5ndGg7XHJcbiAgICAgICAgICAgICAgICAgIGNtcCA9IDE7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfSBlbHNlIHtcclxuXHJcbiAgICAgICAgICAgICAgICAvLyBuIGlzIDAgb3IgMSwgY21wIGlzIC0xLlxyXG4gICAgICAgICAgICAgICAgLy8gSWYgbiBpcyAwLCB0aGVyZSBpcyBubyBuZWVkIHRvIGNvbXBhcmUgeWMgYW5kIHJlbSBhZ2FpbiBiZWxvdyxcclxuICAgICAgICAgICAgICAgIC8vIHNvIGNoYW5nZSBjbXAgdG8gMSB0byBhdm9pZCBpdC5cclxuICAgICAgICAgICAgICAgIC8vIElmIG4gaXMgMSwgbGVhdmUgY21wIGFzIC0xLCBzbyB5YyBhbmQgcmVtIGFyZSBjb21wYXJlZCBhZ2Fpbi5cclxuICAgICAgICAgICAgICAgIGlmIChuID09IDApIHtcclxuXHJcbiAgICAgICAgICAgICAgICAgIC8vIGRpdmlzb3IgPCByZW1haW5kZXIsIHNvIG4gbXVzdCBiZSBhdCBsZWFzdCAxLlxyXG4gICAgICAgICAgICAgICAgICBjbXAgPSBuID0gMTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAvLyBwcm9kdWN0ID0gZGl2aXNvclxyXG4gICAgICAgICAgICAgICAgcHJvZCA9IHljLnNsaWNlKCk7XHJcbiAgICAgICAgICAgICAgICBwcm9kTCA9IHByb2QubGVuZ3RoO1xyXG4gICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgaWYgKHByb2RMIDwgcmVtTCkgcHJvZCA9IFswXS5jb25jYXQocHJvZCk7XHJcblxyXG4gICAgICAgICAgICAgIC8vIFN1YnRyYWN0IHByb2R1Y3QgZnJvbSByZW1haW5kZXIuXHJcbiAgICAgICAgICAgICAgc3VidHJhY3QocmVtLCBwcm9kLCByZW1MLCBiYXNlKTtcclxuICAgICAgICAgICAgICByZW1MID0gcmVtLmxlbmd0aDtcclxuXHJcbiAgICAgICAgICAgICAgIC8vIElmIHByb2R1Y3Qgd2FzIDwgcmVtYWluZGVyLlxyXG4gICAgICAgICAgICAgIGlmIChjbXAgPT0gLTEpIHtcclxuXHJcbiAgICAgICAgICAgICAgICAvLyBDb21wYXJlIGRpdmlzb3IgYW5kIG5ldyByZW1haW5kZXIuXHJcbiAgICAgICAgICAgICAgICAvLyBJZiBkaXZpc29yIDwgbmV3IHJlbWFpbmRlciwgc3VidHJhY3QgZGl2aXNvciBmcm9tIHJlbWFpbmRlci5cclxuICAgICAgICAgICAgICAgIC8vIFRyaWFsIGRpZ2l0IG4gdG9vIGxvdy5cclxuICAgICAgICAgICAgICAgIC8vIG4gaXMgMSB0b28gbG93IGFib3V0IDUlIG9mIHRoZSB0aW1lLCBhbmQgdmVyeSByYXJlbHkgMiB0b28gbG93LlxyXG4gICAgICAgICAgICAgICAgd2hpbGUgKGNvbXBhcmUoeWMsIHJlbSwgeUwsIHJlbUwpIDwgMSkge1xyXG4gICAgICAgICAgICAgICAgICBuKys7XHJcblxyXG4gICAgICAgICAgICAgICAgICAvLyBTdWJ0cmFjdCBkaXZpc29yIGZyb20gcmVtYWluZGVyLlxyXG4gICAgICAgICAgICAgICAgICBzdWJ0cmFjdChyZW0sIHlMIDwgcmVtTCA/IHl6IDogeWMsIHJlbUwsIGJhc2UpO1xyXG4gICAgICAgICAgICAgICAgICByZW1MID0gcmVtLmxlbmd0aDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoY21wID09PSAwKSB7XHJcbiAgICAgICAgICAgICAgbisrO1xyXG4gICAgICAgICAgICAgIHJlbSA9IFswXTtcclxuICAgICAgICAgICAgfSAvLyBlbHNlIGNtcCA9PT0gMSBhbmQgbiB3aWxsIGJlIDBcclxuXHJcbiAgICAgICAgICAgIC8vIEFkZCB0aGUgbmV4dCBkaWdpdCwgbiwgdG8gdGhlIHJlc3VsdCBhcnJheS5cclxuICAgICAgICAgICAgcWNbaSsrXSA9IG47XHJcblxyXG4gICAgICAgICAgICAvLyBVcGRhdGUgdGhlIHJlbWFpbmRlci5cclxuICAgICAgICAgICAgaWYgKHJlbVswXSkge1xyXG4gICAgICAgICAgICAgIHJlbVtyZW1MKytdID0geGNbeGldIHx8IDA7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgcmVtID0gW3hjW3hpXV07XHJcbiAgICAgICAgICAgICAgcmVtTCA9IDE7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0gd2hpbGUgKCh4aSsrIDwgeEwgfHwgcmVtWzBdICE9IG51bGwpICYmIHMtLSk7XHJcblxyXG4gICAgICAgICAgbW9yZSA9IHJlbVswXSAhPSBudWxsO1xyXG5cclxuICAgICAgICAgIC8vIExlYWRpbmcgemVybz9cclxuICAgICAgICAgIGlmICghcWNbMF0pIHFjLnNwbGljZSgwLCAxKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChiYXNlID09IEJBU0UpIHtcclxuXHJcbiAgICAgICAgICAvLyBUbyBjYWxjdWxhdGUgcS5lLCBmaXJzdCBnZXQgdGhlIG51bWJlciBvZiBkaWdpdHMgb2YgcWNbMF0uXHJcbiAgICAgICAgICBmb3IgKGkgPSAxLCBzID0gcWNbMF07IHMgPj0gMTA7IHMgLz0gMTAsIGkrKyk7XHJcblxyXG4gICAgICAgICAgcm91bmQocSwgZHAgKyAocS5lID0gaSArIGUgKiBMT0dfQkFTRSAtIDEpICsgMSwgcm0sIG1vcmUpO1xyXG5cclxuICAgICAgICAvLyBDYWxsZXIgaXMgY29udmVydEJhc2UuXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHEuZSA9IGU7XHJcbiAgICAgICAgICBxLnIgPSArbW9yZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBxO1xyXG4gICAgICB9O1xyXG4gICAgfSkoKTtcclxuXHJcblxyXG4gICAgLypcclxuICAgICAqIFJldHVybiBhIHN0cmluZyByZXByZXNlbnRpbmcgdGhlIHZhbHVlIG9mIEJpZ051bWJlciBuIGluIGZpeGVkLXBvaW50IG9yIGV4cG9uZW50aWFsXHJcbiAgICAgKiBub3RhdGlvbiByb3VuZGVkIHRvIHRoZSBzcGVjaWZpZWQgZGVjaW1hbCBwbGFjZXMgb3Igc2lnbmlmaWNhbnQgZGlnaXRzLlxyXG4gICAgICpcclxuICAgICAqIG46IGEgQmlnTnVtYmVyLlxyXG4gICAgICogaTogdGhlIGluZGV4IG9mIHRoZSBsYXN0IGRpZ2l0IHJlcXVpcmVkIChpLmUuIHRoZSBkaWdpdCB0aGF0IG1heSBiZSByb3VuZGVkIHVwKS5cclxuICAgICAqIHJtOiB0aGUgcm91bmRpbmcgbW9kZS5cclxuICAgICAqIGlkOiAxICh0b0V4cG9uZW50aWFsKSBvciAyICh0b1ByZWNpc2lvbikuXHJcbiAgICAgKi9cclxuICAgIGZ1bmN0aW9uIGZvcm1hdChuLCBpLCBybSwgaWQpIHtcclxuICAgICAgdmFyIGMwLCBlLCBuZSwgbGVuLCBzdHI7XHJcblxyXG4gICAgICBpZiAocm0gPT0gbnVsbCkgcm0gPSBST1VORElOR19NT0RFO1xyXG4gICAgICBlbHNlIGludENoZWNrKHJtLCAwLCA4KTtcclxuXHJcbiAgICAgIGlmICghbi5jKSByZXR1cm4gbi50b1N0cmluZygpO1xyXG5cclxuICAgICAgYzAgPSBuLmNbMF07XHJcbiAgICAgIG5lID0gbi5lO1xyXG5cclxuICAgICAgaWYgKGkgPT0gbnVsbCkge1xyXG4gICAgICAgIHN0ciA9IGNvZWZmVG9TdHJpbmcobi5jKTtcclxuICAgICAgICBzdHIgPSBpZCA9PSAxIHx8IGlkID09IDIgJiYgKG5lIDw9IFRPX0VYUF9ORUcgfHwgbmUgPj0gVE9fRVhQX1BPUylcclxuICAgICAgICAgPyB0b0V4cG9uZW50aWFsKHN0ciwgbmUpXHJcbiAgICAgICAgIDogdG9GaXhlZFBvaW50KHN0ciwgbmUsICcwJyk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgbiA9IHJvdW5kKG5ldyBCaWdOdW1iZXIobiksIGksIHJtKTtcclxuXHJcbiAgICAgICAgLy8gbi5lIG1heSBoYXZlIGNoYW5nZWQgaWYgdGhlIHZhbHVlIHdhcyByb3VuZGVkIHVwLlxyXG4gICAgICAgIGUgPSBuLmU7XHJcblxyXG4gICAgICAgIHN0ciA9IGNvZWZmVG9TdHJpbmcobi5jKTtcclxuICAgICAgICBsZW4gPSBzdHIubGVuZ3RoO1xyXG5cclxuICAgICAgICAvLyB0b1ByZWNpc2lvbiByZXR1cm5zIGV4cG9uZW50aWFsIG5vdGF0aW9uIGlmIHRoZSBudW1iZXIgb2Ygc2lnbmlmaWNhbnQgZGlnaXRzXHJcbiAgICAgICAgLy8gc3BlY2lmaWVkIGlzIGxlc3MgdGhhbiB0aGUgbnVtYmVyIG9mIGRpZ2l0cyBuZWNlc3NhcnkgdG8gcmVwcmVzZW50IHRoZSBpbnRlZ2VyXHJcbiAgICAgICAgLy8gcGFydCBvZiB0aGUgdmFsdWUgaW4gZml4ZWQtcG9pbnQgbm90YXRpb24uXHJcblxyXG4gICAgICAgIC8vIEV4cG9uZW50aWFsIG5vdGF0aW9uLlxyXG4gICAgICAgIGlmIChpZCA9PSAxIHx8IGlkID09IDIgJiYgKGkgPD0gZSB8fCBlIDw9IFRPX0VYUF9ORUcpKSB7XHJcblxyXG4gICAgICAgICAgLy8gQXBwZW5kIHplcm9zP1xyXG4gICAgICAgICAgZm9yICg7IGxlbiA8IGk7IHN0ciArPSAnMCcsIGxlbisrKTtcclxuICAgICAgICAgIHN0ciA9IHRvRXhwb25lbnRpYWwoc3RyLCBlKTtcclxuXHJcbiAgICAgICAgLy8gRml4ZWQtcG9pbnQgbm90YXRpb24uXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGkgLT0gbmU7XHJcbiAgICAgICAgICBzdHIgPSB0b0ZpeGVkUG9pbnQoc3RyLCBlLCAnMCcpO1xyXG5cclxuICAgICAgICAgIC8vIEFwcGVuZCB6ZXJvcz9cclxuICAgICAgICAgIGlmIChlICsgMSA+IGxlbikge1xyXG4gICAgICAgICAgICBpZiAoLS1pID4gMCkgZm9yIChzdHIgKz0gJy4nOyBpLS07IHN0ciArPSAnMCcpO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgaSArPSBlIC0gbGVuO1xyXG4gICAgICAgICAgICBpZiAoaSA+IDApIHtcclxuICAgICAgICAgICAgICBpZiAoZSArIDEgPT0gbGVuKSBzdHIgKz0gJy4nO1xyXG4gICAgICAgICAgICAgIGZvciAoOyBpLS07IHN0ciArPSAnMCcpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICByZXR1cm4gbi5zIDwgMCAmJiBjMCA/ICctJyArIHN0ciA6IHN0cjtcclxuICAgIH1cclxuXHJcblxyXG4gICAgLy8gSGFuZGxlIEJpZ051bWJlci5tYXggYW5kIEJpZ051bWJlci5taW4uXHJcbiAgICBmdW5jdGlvbiBtYXhPck1pbihhcmdzLCBtZXRob2QpIHtcclxuICAgICAgdmFyIG4sXHJcbiAgICAgICAgaSA9IDEsXHJcbiAgICAgICAgbSA9IG5ldyBCaWdOdW1iZXIoYXJnc1swXSk7XHJcblxyXG4gICAgICBmb3IgKDsgaSA8IGFyZ3MubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICBuID0gbmV3IEJpZ051bWJlcihhcmdzW2ldKTtcclxuXHJcbiAgICAgICAgLy8gSWYgYW55IG51bWJlciBpcyBOYU4sIHJldHVybiBOYU4uXHJcbiAgICAgICAgaWYgKCFuLnMpIHtcclxuICAgICAgICAgIG0gPSBuO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfSBlbHNlIGlmIChtZXRob2QuY2FsbChtLCBuKSkge1xyXG4gICAgICAgICAgbSA9IG47XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICByZXR1cm4gbTtcclxuICAgIH1cclxuXHJcblxyXG4gICAgLypcclxuICAgICAqIFN0cmlwIHRyYWlsaW5nIHplcm9zLCBjYWxjdWxhdGUgYmFzZSAxMCBleHBvbmVudCBhbmQgY2hlY2sgYWdhaW5zdCBNSU5fRVhQIGFuZCBNQVhfRVhQLlxyXG4gICAgICogQ2FsbGVkIGJ5IG1pbnVzLCBwbHVzIGFuZCB0aW1lcy5cclxuICAgICAqL1xyXG4gICAgZnVuY3Rpb24gbm9ybWFsaXNlKG4sIGMsIGUpIHtcclxuICAgICAgdmFyIGkgPSAxLFxyXG4gICAgICAgIGogPSBjLmxlbmd0aDtcclxuXHJcbiAgICAgICAvLyBSZW1vdmUgdHJhaWxpbmcgemVyb3MuXHJcbiAgICAgIGZvciAoOyAhY1stLWpdOyBjLnBvcCgpKTtcclxuXHJcbiAgICAgIC8vIENhbGN1bGF0ZSB0aGUgYmFzZSAxMCBleHBvbmVudC4gRmlyc3QgZ2V0IHRoZSBudW1iZXIgb2YgZGlnaXRzIG9mIGNbMF0uXHJcbiAgICAgIGZvciAoaiA9IGNbMF07IGogPj0gMTA7IGogLz0gMTAsIGkrKyk7XHJcblxyXG4gICAgICAvLyBPdmVyZmxvdz9cclxuICAgICAgaWYgKChlID0gaSArIGUgKiBMT0dfQkFTRSAtIDEpID4gTUFYX0VYUCkge1xyXG5cclxuICAgICAgICAvLyBJbmZpbml0eS5cclxuICAgICAgICBuLmMgPSBuLmUgPSBudWxsO1xyXG5cclxuICAgICAgLy8gVW5kZXJmbG93P1xyXG4gICAgICB9IGVsc2UgaWYgKGUgPCBNSU5fRVhQKSB7XHJcblxyXG4gICAgICAgIC8vIFplcm8uXHJcbiAgICAgICAgbi5jID0gW24uZSA9IDBdO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIG4uZSA9IGU7XHJcbiAgICAgICAgbi5jID0gYztcclxuICAgICAgfVxyXG5cclxuICAgICAgcmV0dXJuIG47XHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8vIEhhbmRsZSB2YWx1ZXMgdGhhdCBmYWlsIHRoZSB2YWxpZGl0eSB0ZXN0IGluIEJpZ051bWJlci5cclxuICAgIHBhcnNlTnVtZXJpYyA9IChmdW5jdGlvbiAoKSB7XHJcbiAgICAgIHZhciBiYXNlUHJlZml4ID0gL14oLT8pMChbeGJvXSkoPz1cXHdbXFx3Ll0qJCkvaSxcclxuICAgICAgICBkb3RBZnRlciA9IC9eKFteLl0rKVxcLiQvLFxyXG4gICAgICAgIGRvdEJlZm9yZSA9IC9eXFwuKFteLl0rKSQvLFxyXG4gICAgICAgIGlzSW5maW5pdHlPck5hTiA9IC9eLT8oSW5maW5pdHl8TmFOKSQvLFxyXG4gICAgICAgIHdoaXRlc3BhY2VPclBsdXMgPSAvXlxccypcXCsoPz1bXFx3Ll0pfF5cXHMrfFxccyskL2c7XHJcblxyXG4gICAgICByZXR1cm4gZnVuY3Rpb24gKHgsIHN0ciwgaXNOdW0sIGIpIHtcclxuICAgICAgICB2YXIgYmFzZSxcclxuICAgICAgICAgIHMgPSBpc051bSA/IHN0ciA6IHN0ci5yZXBsYWNlKHdoaXRlc3BhY2VPclBsdXMsICcnKTtcclxuXHJcbiAgICAgICAgLy8gTm8gZXhjZXB0aW9uIG9uIMKxSW5maW5pdHkgb3IgTmFOLlxyXG4gICAgICAgIGlmIChpc0luZmluaXR5T3JOYU4udGVzdChzKSkge1xyXG4gICAgICAgICAgeC5zID0gaXNOYU4ocykgPyBudWxsIDogcyA8IDAgPyAtMSA6IDE7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGlmICghaXNOdW0pIHtcclxuXHJcbiAgICAgICAgICAgIC8vIGJhc2VQcmVmaXggPSAvXigtPykwKFt4Ym9dKSg/PVxcd1tcXHcuXSokKS9pXHJcbiAgICAgICAgICAgIHMgPSBzLnJlcGxhY2UoYmFzZVByZWZpeCwgZnVuY3Rpb24gKG0sIHAxLCBwMikge1xyXG4gICAgICAgICAgICAgIGJhc2UgPSAocDIgPSBwMi50b0xvd2VyQ2FzZSgpKSA9PSAneCcgPyAxNiA6IHAyID09ICdiJyA/IDIgOiA4O1xyXG4gICAgICAgICAgICAgIHJldHVybiAhYiB8fCBiID09IGJhc2UgPyBwMSA6IG07XHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgaWYgKGIpIHtcclxuICAgICAgICAgICAgICBiYXNlID0gYjtcclxuXHJcbiAgICAgICAgICAgICAgLy8gRS5nLiAnMS4nIHRvICcxJywgJy4xJyB0byAnMC4xJ1xyXG4gICAgICAgICAgICAgIHMgPSBzLnJlcGxhY2UoZG90QWZ0ZXIsICckMScpLnJlcGxhY2UoZG90QmVmb3JlLCAnMC4kMScpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAoc3RyICE9IHMpIHJldHVybiBuZXcgQmlnTnVtYmVyKHMsIGJhc2UpO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIC8vICdbQmlnTnVtYmVyIEVycm9yXSBOb3QgYSBudW1iZXI6IHtufSdcclxuICAgICAgICAgIC8vICdbQmlnTnVtYmVyIEVycm9yXSBOb3QgYSBiYXNlIHtifSBudW1iZXI6IHtufSdcclxuICAgICAgICAgIGlmIChCaWdOdW1iZXIuREVCVUcpIHtcclxuICAgICAgICAgICAgdGhyb3cgRXJyb3JcclxuICAgICAgICAgICAgICAoYmlnbnVtYmVyRXJyb3IgKyAnTm90IGEnICsgKGIgPyAnIGJhc2UgJyArIGIgOiAnJykgKyAnIG51bWJlcjogJyArIHN0cik7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgLy8gTmFOXHJcbiAgICAgICAgICB4LnMgPSBudWxsO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgeC5jID0geC5lID0gbnVsbDtcclxuICAgICAgfVxyXG4gICAgfSkoKTtcclxuXHJcblxyXG4gICAgLypcclxuICAgICAqIFJvdW5kIHggdG8gc2Qgc2lnbmlmaWNhbnQgZGlnaXRzIHVzaW5nIHJvdW5kaW5nIG1vZGUgcm0uIENoZWNrIGZvciBvdmVyL3VuZGVyLWZsb3cuXHJcbiAgICAgKiBJZiByIGlzIHRydXRoeSwgaXQgaXMga25vd24gdGhhdCB0aGVyZSBhcmUgbW9yZSBkaWdpdHMgYWZ0ZXIgdGhlIHJvdW5kaW5nIGRpZ2l0LlxyXG4gICAgICovXHJcbiAgICBmdW5jdGlvbiByb3VuZCh4LCBzZCwgcm0sIHIpIHtcclxuICAgICAgdmFyIGQsIGksIGosIGssIG4sIG5pLCByZCxcclxuICAgICAgICB4YyA9IHguYyxcclxuICAgICAgICBwb3dzMTAgPSBQT1dTX1RFTjtcclxuXHJcbiAgICAgIC8vIGlmIHggaXMgbm90IEluZmluaXR5IG9yIE5hTi4uLlxyXG4gICAgICBpZiAoeGMpIHtcclxuXHJcbiAgICAgICAgLy8gcmQgaXMgdGhlIHJvdW5kaW5nIGRpZ2l0LCBpLmUuIHRoZSBkaWdpdCBhZnRlciB0aGUgZGlnaXQgdGhhdCBtYXkgYmUgcm91bmRlZCB1cC5cclxuICAgICAgICAvLyBuIGlzIGEgYmFzZSAxZTE0IG51bWJlciwgdGhlIHZhbHVlIG9mIHRoZSBlbGVtZW50IG9mIGFycmF5IHguYyBjb250YWluaW5nIHJkLlxyXG4gICAgICAgIC8vIG5pIGlzIHRoZSBpbmRleCBvZiBuIHdpdGhpbiB4LmMuXHJcbiAgICAgICAgLy8gZCBpcyB0aGUgbnVtYmVyIG9mIGRpZ2l0cyBvZiBuLlxyXG4gICAgICAgIC8vIGkgaXMgdGhlIGluZGV4IG9mIHJkIHdpdGhpbiBuIGluY2x1ZGluZyBsZWFkaW5nIHplcm9zLlxyXG4gICAgICAgIC8vIGogaXMgdGhlIGFjdHVhbCBpbmRleCBvZiByZCB3aXRoaW4gbiAoaWYgPCAwLCByZCBpcyBhIGxlYWRpbmcgemVybykuXHJcbiAgICAgICAgb3V0OiB7XHJcblxyXG4gICAgICAgICAgLy8gR2V0IHRoZSBudW1iZXIgb2YgZGlnaXRzIG9mIHRoZSBmaXJzdCBlbGVtZW50IG9mIHhjLlxyXG4gICAgICAgICAgZm9yIChkID0gMSwgayA9IHhjWzBdOyBrID49IDEwOyBrIC89IDEwLCBkKyspO1xyXG4gICAgICAgICAgaSA9IHNkIC0gZDtcclxuXHJcbiAgICAgICAgICAvLyBJZiB0aGUgcm91bmRpbmcgZGlnaXQgaXMgaW4gdGhlIGZpcnN0IGVsZW1lbnQgb2YgeGMuLi5cclxuICAgICAgICAgIGlmIChpIDwgMCkge1xyXG4gICAgICAgICAgICBpICs9IExPR19CQVNFO1xyXG4gICAgICAgICAgICBqID0gc2Q7XHJcbiAgICAgICAgICAgIG4gPSB4Y1tuaSA9IDBdO1xyXG5cclxuICAgICAgICAgICAgLy8gR2V0IHRoZSByb3VuZGluZyBkaWdpdCBhdCBpbmRleCBqIG9mIG4uXHJcbiAgICAgICAgICAgIHJkID0gbiAvIHBvd3MxMFtkIC0gaiAtIDFdICUgMTAgfCAwO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgbmkgPSBtYXRoY2VpbCgoaSArIDEpIC8gTE9HX0JBU0UpO1xyXG5cclxuICAgICAgICAgICAgaWYgKG5pID49IHhjLmxlbmd0aCkge1xyXG5cclxuICAgICAgICAgICAgICBpZiAocikge1xyXG5cclxuICAgICAgICAgICAgICAgIC8vIE5lZWRlZCBieSBzcXJ0LlxyXG4gICAgICAgICAgICAgICAgZm9yICg7IHhjLmxlbmd0aCA8PSBuaTsgeGMucHVzaCgwKSk7XHJcbiAgICAgICAgICAgICAgICBuID0gcmQgPSAwO1xyXG4gICAgICAgICAgICAgICAgZCA9IDE7XHJcbiAgICAgICAgICAgICAgICBpICU9IExPR19CQVNFO1xyXG4gICAgICAgICAgICAgICAgaiA9IGkgLSBMT0dfQkFTRSArIDE7XHJcbiAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGJyZWFrIG91dDtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgbiA9IGsgPSB4Y1tuaV07XHJcblxyXG4gICAgICAgICAgICAgIC8vIEdldCB0aGUgbnVtYmVyIG9mIGRpZ2l0cyBvZiBuLlxyXG4gICAgICAgICAgICAgIGZvciAoZCA9IDE7IGsgPj0gMTA7IGsgLz0gMTAsIGQrKyk7XHJcblxyXG4gICAgICAgICAgICAgIC8vIEdldCB0aGUgaW5kZXggb2YgcmQgd2l0aGluIG4uXHJcbiAgICAgICAgICAgICAgaSAlPSBMT0dfQkFTRTtcclxuXHJcbiAgICAgICAgICAgICAgLy8gR2V0IHRoZSBpbmRleCBvZiByZCB3aXRoaW4gbiwgYWRqdXN0ZWQgZm9yIGxlYWRpbmcgemVyb3MuXHJcbiAgICAgICAgICAgICAgLy8gVGhlIG51bWJlciBvZiBsZWFkaW5nIHplcm9zIG9mIG4gaXMgZ2l2ZW4gYnkgTE9HX0JBU0UgLSBkLlxyXG4gICAgICAgICAgICAgIGogPSBpIC0gTE9HX0JBU0UgKyBkO1xyXG5cclxuICAgICAgICAgICAgICAvLyBHZXQgdGhlIHJvdW5kaW5nIGRpZ2l0IGF0IGluZGV4IGogb2Ygbi5cclxuICAgICAgICAgICAgICByZCA9IGogPCAwID8gMCA6IG4gLyBwb3dzMTBbZCAtIGogLSAxXSAlIDEwIHwgMDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIHIgPSByIHx8IHNkIDwgMCB8fFxyXG5cclxuICAgICAgICAgIC8vIEFyZSB0aGVyZSBhbnkgbm9uLXplcm8gZGlnaXRzIGFmdGVyIHRoZSByb3VuZGluZyBkaWdpdD9cclxuICAgICAgICAgIC8vIFRoZSBleHByZXNzaW9uICBuICUgcG93czEwW2QgLSBqIC0gMV0gIHJldHVybnMgYWxsIGRpZ2l0cyBvZiBuIHRvIHRoZSByaWdodFxyXG4gICAgICAgICAgLy8gb2YgdGhlIGRpZ2l0IGF0IGosIGUuZy4gaWYgbiBpcyA5MDg3MTQgYW5kIGogaXMgMiwgdGhlIGV4cHJlc3Npb24gZ2l2ZXMgNzE0LlxyXG4gICAgICAgICAgIHhjW25pICsgMV0gIT0gbnVsbCB8fCAoaiA8IDAgPyBuIDogbiAlIHBvd3MxMFtkIC0gaiAtIDFdKTtcclxuXHJcbiAgICAgICAgICByID0gcm0gPCA0XHJcbiAgICAgICAgICAgPyAocmQgfHwgcikgJiYgKHJtID09IDAgfHwgcm0gPT0gKHgucyA8IDAgPyAzIDogMikpXHJcbiAgICAgICAgICAgOiByZCA+IDUgfHwgcmQgPT0gNSAmJiAocm0gPT0gNCB8fCByIHx8IHJtID09IDYgJiZcclxuXHJcbiAgICAgICAgICAgIC8vIENoZWNrIHdoZXRoZXIgdGhlIGRpZ2l0IHRvIHRoZSBsZWZ0IG9mIHRoZSByb3VuZGluZyBkaWdpdCBpcyBvZGQuXHJcbiAgICAgICAgICAgICgoaSA+IDAgPyBqID4gMCA/IG4gLyBwb3dzMTBbZCAtIGpdIDogMCA6IHhjW25pIC0gMV0pICUgMTApICYgMSB8fFxyXG4gICAgICAgICAgICAgcm0gPT0gKHgucyA8IDAgPyA4IDogNykpO1xyXG5cclxuICAgICAgICAgIGlmIChzZCA8IDEgfHwgIXhjWzBdKSB7XHJcbiAgICAgICAgICAgIHhjLmxlbmd0aCA9IDA7XHJcblxyXG4gICAgICAgICAgICBpZiAocikge1xyXG5cclxuICAgICAgICAgICAgICAvLyBDb252ZXJ0IHNkIHRvIGRlY2ltYWwgcGxhY2VzLlxyXG4gICAgICAgICAgICAgIHNkIC09IHguZSArIDE7XHJcblxyXG4gICAgICAgICAgICAgIC8vIDEsIDAuMSwgMC4wMSwgMC4wMDEsIDAuMDAwMSBldGMuXHJcbiAgICAgICAgICAgICAgeGNbMF0gPSBwb3dzMTBbKExPR19CQVNFIC0gc2QgJSBMT0dfQkFTRSkgJSBMT0dfQkFTRV07XHJcbiAgICAgICAgICAgICAgeC5lID0gLXNkIHx8IDA7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcblxyXG4gICAgICAgICAgICAgIC8vIFplcm8uXHJcbiAgICAgICAgICAgICAgeGNbMF0gPSB4LmUgPSAwO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICByZXR1cm4geDtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAvLyBSZW1vdmUgZXhjZXNzIGRpZ2l0cy5cclxuICAgICAgICAgIGlmIChpID09IDApIHtcclxuICAgICAgICAgICAgeGMubGVuZ3RoID0gbmk7XHJcbiAgICAgICAgICAgIGsgPSAxO1xyXG4gICAgICAgICAgICBuaS0tO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgeGMubGVuZ3RoID0gbmkgKyAxO1xyXG4gICAgICAgICAgICBrID0gcG93czEwW0xPR19CQVNFIC0gaV07XHJcblxyXG4gICAgICAgICAgICAvLyBFLmcuIDU2NzAwIGJlY29tZXMgNTYwMDAgaWYgNyBpcyB0aGUgcm91bmRpbmcgZGlnaXQuXHJcbiAgICAgICAgICAgIC8vIGogPiAwIG1lYW5zIGkgPiBudW1iZXIgb2YgbGVhZGluZyB6ZXJvcyBvZiBuLlxyXG4gICAgICAgICAgICB4Y1tuaV0gPSBqID4gMCA/IG1hdGhmbG9vcihuIC8gcG93czEwW2QgLSBqXSAlIHBvd3MxMFtqXSkgKiBrIDogMDtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAvLyBSb3VuZCB1cD9cclxuICAgICAgICAgIGlmIChyKSB7XHJcblxyXG4gICAgICAgICAgICBmb3IgKDsgOykge1xyXG5cclxuICAgICAgICAgICAgICAvLyBJZiB0aGUgZGlnaXQgdG8gYmUgcm91bmRlZCB1cCBpcyBpbiB0aGUgZmlyc3QgZWxlbWVudCBvZiB4Yy4uLlxyXG4gICAgICAgICAgICAgIGlmIChuaSA9PSAwKSB7XHJcblxyXG4gICAgICAgICAgICAgICAgLy8gaSB3aWxsIGJlIHRoZSBsZW5ndGggb2YgeGNbMF0gYmVmb3JlIGsgaXMgYWRkZWQuXHJcbiAgICAgICAgICAgICAgICBmb3IgKGkgPSAxLCBqID0geGNbMF07IGogPj0gMTA7IGogLz0gMTAsIGkrKyk7XHJcbiAgICAgICAgICAgICAgICBqID0geGNbMF0gKz0gaztcclxuICAgICAgICAgICAgICAgIGZvciAoayA9IDE7IGogPj0gMTA7IGogLz0gMTAsIGsrKyk7XHJcblxyXG4gICAgICAgICAgICAgICAgLy8gaWYgaSAhPSBrIHRoZSBsZW5ndGggaGFzIGluY3JlYXNlZC5cclxuICAgICAgICAgICAgICAgIGlmIChpICE9IGspIHtcclxuICAgICAgICAgICAgICAgICAgeC5lKys7XHJcbiAgICAgICAgICAgICAgICAgIGlmICh4Y1swXSA9PSBCQVNFKSB4Y1swXSA9IDE7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHhjW25pXSArPSBrO1xyXG4gICAgICAgICAgICAgICAgaWYgKHhjW25pXSAhPSBCQVNFKSBicmVhaztcclxuICAgICAgICAgICAgICAgIHhjW25pLS1dID0gMDtcclxuICAgICAgICAgICAgICAgIGsgPSAxO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIC8vIFJlbW92ZSB0cmFpbGluZyB6ZXJvcy5cclxuICAgICAgICAgIGZvciAoaSA9IHhjLmxlbmd0aDsgeGNbLS1pXSA9PT0gMDsgeGMucG9wKCkpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gT3ZlcmZsb3c/IEluZmluaXR5LlxyXG4gICAgICAgIGlmICh4LmUgPiBNQVhfRVhQKSB7XHJcbiAgICAgICAgICB4LmMgPSB4LmUgPSBudWxsO1xyXG5cclxuICAgICAgICAvLyBVbmRlcmZsb3c/IFplcm8uXHJcbiAgICAgICAgfSBlbHNlIGlmICh4LmUgPCBNSU5fRVhQKSB7XHJcbiAgICAgICAgICB4LmMgPSBbeC5lID0gMF07XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICByZXR1cm4geDtcclxuICAgIH1cclxuXHJcblxyXG4gICAgZnVuY3Rpb24gdmFsdWVPZihuKSB7XHJcbiAgICAgIHZhciBzdHIsXHJcbiAgICAgICAgZSA9IG4uZTtcclxuXHJcbiAgICAgIGlmIChlID09PSBudWxsKSByZXR1cm4gbi50b1N0cmluZygpO1xyXG5cclxuICAgICAgc3RyID0gY29lZmZUb1N0cmluZyhuLmMpO1xyXG5cclxuICAgICAgc3RyID0gZSA8PSBUT19FWFBfTkVHIHx8IGUgPj0gVE9fRVhQX1BPU1xyXG4gICAgICAgID8gdG9FeHBvbmVudGlhbChzdHIsIGUpXHJcbiAgICAgICAgOiB0b0ZpeGVkUG9pbnQoc3RyLCBlLCAnMCcpO1xyXG5cclxuICAgICAgcmV0dXJuIG4ucyA8IDAgPyAnLScgKyBzdHIgOiBzdHI7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8vIFBST1RPVFlQRS9JTlNUQU5DRSBNRVRIT0RTXHJcblxyXG5cclxuICAgIC8qXHJcbiAgICAgKiBSZXR1cm4gYSBuZXcgQmlnTnVtYmVyIHdob3NlIHZhbHVlIGlzIHRoZSBhYnNvbHV0ZSB2YWx1ZSBvZiB0aGlzIEJpZ051bWJlci5cclxuICAgICAqL1xyXG4gICAgUC5hYnNvbHV0ZVZhbHVlID0gUC5hYnMgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgIHZhciB4ID0gbmV3IEJpZ051bWJlcih0aGlzKTtcclxuICAgICAgaWYgKHgucyA8IDApIHgucyA9IDE7XHJcbiAgICAgIHJldHVybiB4O1xyXG4gICAgfTtcclxuXHJcblxyXG4gICAgLypcclxuICAgICAqIFJldHVyblxyXG4gICAgICogICAxIGlmIHRoZSB2YWx1ZSBvZiB0aGlzIEJpZ051bWJlciBpcyBncmVhdGVyIHRoYW4gdGhlIHZhbHVlIG9mIEJpZ051bWJlcih5LCBiKSxcclxuICAgICAqICAgLTEgaWYgdGhlIHZhbHVlIG9mIHRoaXMgQmlnTnVtYmVyIGlzIGxlc3MgdGhhbiB0aGUgdmFsdWUgb2YgQmlnTnVtYmVyKHksIGIpLFxyXG4gICAgICogICAwIGlmIHRoZXkgaGF2ZSB0aGUgc2FtZSB2YWx1ZSxcclxuICAgICAqICAgb3IgbnVsbCBpZiB0aGUgdmFsdWUgb2YgZWl0aGVyIGlzIE5hTi5cclxuICAgICAqL1xyXG4gICAgUC5jb21wYXJlZFRvID0gZnVuY3Rpb24gKHksIGIpIHtcclxuICAgICAgcmV0dXJuIGNvbXBhcmUodGhpcywgbmV3IEJpZ051bWJlcih5LCBiKSk7XHJcbiAgICB9O1xyXG5cclxuXHJcbiAgICAvKlxyXG4gICAgICogSWYgZHAgaXMgdW5kZWZpbmVkIG9yIG51bGwgb3IgdHJ1ZSBvciBmYWxzZSwgcmV0dXJuIHRoZSBudW1iZXIgb2YgZGVjaW1hbCBwbGFjZXMgb2YgdGhlXHJcbiAgICAgKiB2YWx1ZSBvZiB0aGlzIEJpZ051bWJlciwgb3IgbnVsbCBpZiB0aGUgdmFsdWUgb2YgdGhpcyBCaWdOdW1iZXIgaXMgwrFJbmZpbml0eSBvciBOYU4uXHJcbiAgICAgKlxyXG4gICAgICogT3RoZXJ3aXNlLCBpZiBkcCBpcyBhIG51bWJlciwgcmV0dXJuIGEgbmV3IEJpZ051bWJlciB3aG9zZSB2YWx1ZSBpcyB0aGUgdmFsdWUgb2YgdGhpc1xyXG4gICAgICogQmlnTnVtYmVyIHJvdW5kZWQgdG8gYSBtYXhpbXVtIG9mIGRwIGRlY2ltYWwgcGxhY2VzIHVzaW5nIHJvdW5kaW5nIG1vZGUgcm0sIG9yXHJcbiAgICAgKiBST1VORElOR19NT0RFIGlmIHJtIGlzIG9taXR0ZWQuXHJcbiAgICAgKlxyXG4gICAgICogW2RwXSB7bnVtYmVyfSBEZWNpbWFsIHBsYWNlczogaW50ZWdlciwgMCB0byBNQVggaW5jbHVzaXZlLlxyXG4gICAgICogW3JtXSB7bnVtYmVyfSBSb3VuZGluZyBtb2RlLiBJbnRlZ2VyLCAwIHRvIDggaW5jbHVzaXZlLlxyXG4gICAgICpcclxuICAgICAqICdbQmlnTnVtYmVyIEVycm9yXSBBcmd1bWVudCB7bm90IGEgcHJpbWl0aXZlIG51bWJlcnxub3QgYW4gaW50ZWdlcnxvdXQgb2YgcmFuZ2V9OiB7ZHB8cm19J1xyXG4gICAgICovXHJcbiAgICBQLmRlY2ltYWxQbGFjZXMgPSBQLmRwID0gZnVuY3Rpb24gKGRwLCBybSkge1xyXG4gICAgICB2YXIgYywgbiwgdixcclxuICAgICAgICB4ID0gdGhpcztcclxuXHJcbiAgICAgIGlmIChkcCAhPSBudWxsKSB7XHJcbiAgICAgICAgaW50Q2hlY2soZHAsIDAsIE1BWCk7XHJcbiAgICAgICAgaWYgKHJtID09IG51bGwpIHJtID0gUk9VTkRJTkdfTU9ERTtcclxuICAgICAgICBlbHNlIGludENoZWNrKHJtLCAwLCA4KTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHJvdW5kKG5ldyBCaWdOdW1iZXIoeCksIGRwICsgeC5lICsgMSwgcm0pO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoIShjID0geC5jKSkgcmV0dXJuIG51bGw7XHJcbiAgICAgIG4gPSAoKHYgPSBjLmxlbmd0aCAtIDEpIC0gYml0Rmxvb3IodGhpcy5lIC8gTE9HX0JBU0UpKSAqIExPR19CQVNFO1xyXG5cclxuICAgICAgLy8gU3VidHJhY3QgdGhlIG51bWJlciBvZiB0cmFpbGluZyB6ZXJvcyBvZiB0aGUgbGFzdCBudW1iZXIuXHJcbiAgICAgIGlmICh2ID0gY1t2XSkgZm9yICg7IHYgJSAxMCA9PSAwOyB2IC89IDEwLCBuLS0pO1xyXG4gICAgICBpZiAobiA8IDApIG4gPSAwO1xyXG5cclxuICAgICAgcmV0dXJuIG47XHJcbiAgICB9O1xyXG5cclxuXHJcbiAgICAvKlxyXG4gICAgICogIG4gLyAwID0gSVxyXG4gICAgICogIG4gLyBOID0gTlxyXG4gICAgICogIG4gLyBJID0gMFxyXG4gICAgICogIDAgLyBuID0gMFxyXG4gICAgICogIDAgLyAwID0gTlxyXG4gICAgICogIDAgLyBOID0gTlxyXG4gICAgICogIDAgLyBJID0gMFxyXG4gICAgICogIE4gLyBuID0gTlxyXG4gICAgICogIE4gLyAwID0gTlxyXG4gICAgICogIE4gLyBOID0gTlxyXG4gICAgICogIE4gLyBJID0gTlxyXG4gICAgICogIEkgLyBuID0gSVxyXG4gICAgICogIEkgLyAwID0gSVxyXG4gICAgICogIEkgLyBOID0gTlxyXG4gICAgICogIEkgLyBJID0gTlxyXG4gICAgICpcclxuICAgICAqIFJldHVybiBhIG5ldyBCaWdOdW1iZXIgd2hvc2UgdmFsdWUgaXMgdGhlIHZhbHVlIG9mIHRoaXMgQmlnTnVtYmVyIGRpdmlkZWQgYnkgdGhlIHZhbHVlIG9mXHJcbiAgICAgKiBCaWdOdW1iZXIoeSwgYiksIHJvdW5kZWQgYWNjb3JkaW5nIHRvIERFQ0lNQUxfUExBQ0VTIGFuZCBST1VORElOR19NT0RFLlxyXG4gICAgICovXHJcbiAgICBQLmRpdmlkZWRCeSA9IFAuZGl2ID0gZnVuY3Rpb24gKHksIGIpIHtcclxuICAgICAgcmV0dXJuIGRpdih0aGlzLCBuZXcgQmlnTnVtYmVyKHksIGIpLCBERUNJTUFMX1BMQUNFUywgUk9VTkRJTkdfTU9ERSk7XHJcbiAgICB9O1xyXG5cclxuXHJcbiAgICAvKlxyXG4gICAgICogUmV0dXJuIGEgbmV3IEJpZ051bWJlciB3aG9zZSB2YWx1ZSBpcyB0aGUgaW50ZWdlciBwYXJ0IG9mIGRpdmlkaW5nIHRoZSB2YWx1ZSBvZiB0aGlzXHJcbiAgICAgKiBCaWdOdW1iZXIgYnkgdGhlIHZhbHVlIG9mIEJpZ051bWJlcih5LCBiKS5cclxuICAgICAqL1xyXG4gICAgUC5kaXZpZGVkVG9JbnRlZ2VyQnkgPSBQLmlkaXYgPSBmdW5jdGlvbiAoeSwgYikge1xyXG4gICAgICByZXR1cm4gZGl2KHRoaXMsIG5ldyBCaWdOdW1iZXIoeSwgYiksIDAsIDEpO1xyXG4gICAgfTtcclxuXHJcblxyXG4gICAgLypcclxuICAgICAqIFJldHVybiBhIEJpZ051bWJlciB3aG9zZSB2YWx1ZSBpcyB0aGUgdmFsdWUgb2YgdGhpcyBCaWdOdW1iZXIgZXhwb25lbnRpYXRlZCBieSBuLlxyXG4gICAgICpcclxuICAgICAqIElmIG0gaXMgcHJlc2VudCwgcmV0dXJuIHRoZSByZXN1bHQgbW9kdWxvIG0uXHJcbiAgICAgKiBJZiBuIGlzIG5lZ2F0aXZlIHJvdW5kIGFjY29yZGluZyB0byBERUNJTUFMX1BMQUNFUyBhbmQgUk9VTkRJTkdfTU9ERS5cclxuICAgICAqIElmIFBPV19QUkVDSVNJT04gaXMgbm9uLXplcm8gYW5kIG0gaXMgbm90IHByZXNlbnQsIHJvdW5kIHRvIFBPV19QUkVDSVNJT04gdXNpbmcgUk9VTkRJTkdfTU9ERS5cclxuICAgICAqXHJcbiAgICAgKiBUaGUgbW9kdWxhciBwb3dlciBvcGVyYXRpb24gd29ya3MgZWZmaWNpZW50bHkgd2hlbiB4LCBuLCBhbmQgbSBhcmUgaW50ZWdlcnMsIG90aGVyd2lzZSBpdFxyXG4gICAgICogaXMgZXF1aXZhbGVudCB0byBjYWxjdWxhdGluZyB4LmV4cG9uZW50aWF0ZWRCeShuKS5tb2R1bG8obSkgd2l0aCBhIFBPV19QUkVDSVNJT04gb2YgMC5cclxuICAgICAqXHJcbiAgICAgKiBuIHtudW1iZXJ8c3RyaW5nfEJpZ051bWJlcn0gVGhlIGV4cG9uZW50LiBBbiBpbnRlZ2VyLlxyXG4gICAgICogW21dIHtudW1iZXJ8c3RyaW5nfEJpZ051bWJlcn0gVGhlIG1vZHVsdXMuXHJcbiAgICAgKlxyXG4gICAgICogJ1tCaWdOdW1iZXIgRXJyb3JdIEV4cG9uZW50IG5vdCBhbiBpbnRlZ2VyOiB7bn0nXHJcbiAgICAgKi9cclxuICAgIFAuZXhwb25lbnRpYXRlZEJ5ID0gUC5wb3cgPSBmdW5jdGlvbiAobiwgbSkge1xyXG4gICAgICB2YXIgaGFsZiwgaXNNb2RFeHAsIGksIGssIG1vcmUsIG5Jc0JpZywgbklzTmVnLCBuSXNPZGQsIHksXHJcbiAgICAgICAgeCA9IHRoaXM7XHJcblxyXG4gICAgICBuID0gbmV3IEJpZ051bWJlcihuKTtcclxuXHJcbiAgICAgIC8vIEFsbG93IE5hTiBhbmQgwrFJbmZpbml0eSwgYnV0IG5vdCBvdGhlciBub24taW50ZWdlcnMuXHJcbiAgICAgIGlmIChuLmMgJiYgIW4uaXNJbnRlZ2VyKCkpIHtcclxuICAgICAgICB0aHJvdyBFcnJvclxyXG4gICAgICAgICAgKGJpZ251bWJlckVycm9yICsgJ0V4cG9uZW50IG5vdCBhbiBpbnRlZ2VyOiAnICsgdmFsdWVPZihuKSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmIChtICE9IG51bGwpIG0gPSBuZXcgQmlnTnVtYmVyKG0pO1xyXG5cclxuICAgICAgLy8gRXhwb25lbnQgb2YgTUFYX1NBRkVfSU5URUdFUiBpcyAxNS5cclxuICAgICAgbklzQmlnID0gbi5lID4gMTQ7XHJcblxyXG4gICAgICAvLyBJZiB4IGlzIE5hTiwgwrFJbmZpbml0eSwgwrEwIG9yIMKxMSwgb3IgbiBpcyDCsUluZmluaXR5LCBOYU4gb3IgwrEwLlxyXG4gICAgICBpZiAoIXguYyB8fCAheC5jWzBdIHx8IHguY1swXSA9PSAxICYmICF4LmUgJiYgeC5jLmxlbmd0aCA9PSAxIHx8ICFuLmMgfHwgIW4uY1swXSkge1xyXG5cclxuICAgICAgICAvLyBUaGUgc2lnbiBvZiB0aGUgcmVzdWx0IG9mIHBvdyB3aGVuIHggaXMgbmVnYXRpdmUgZGVwZW5kcyBvbiB0aGUgZXZlbm5lc3Mgb2Ygbi5cclxuICAgICAgICAvLyBJZiArbiBvdmVyZmxvd3MgdG8gwrFJbmZpbml0eSwgdGhlIGV2ZW5uZXNzIG9mIG4gd291bGQgYmUgbm90IGJlIGtub3duLlxyXG4gICAgICAgIHkgPSBuZXcgQmlnTnVtYmVyKE1hdGgucG93KCt2YWx1ZU9mKHgpLCBuSXNCaWcgPyAyIC0gaXNPZGQobikgOiArdmFsdWVPZihuKSkpO1xyXG4gICAgICAgIHJldHVybiBtID8geS5tb2QobSkgOiB5O1xyXG4gICAgICB9XHJcblxyXG4gICAgICBuSXNOZWcgPSBuLnMgPCAwO1xyXG5cclxuICAgICAgaWYgKG0pIHtcclxuXHJcbiAgICAgICAgLy8geCAlIG0gcmV0dXJucyBOYU4gaWYgYWJzKG0pIGlzIHplcm8sIG9yIG0gaXMgTmFOLlxyXG4gICAgICAgIGlmIChtLmMgPyAhbS5jWzBdIDogIW0ucykgcmV0dXJuIG5ldyBCaWdOdW1iZXIoTmFOKTtcclxuXHJcbiAgICAgICAgaXNNb2RFeHAgPSAhbklzTmVnICYmIHguaXNJbnRlZ2VyKCkgJiYgbS5pc0ludGVnZXIoKTtcclxuXHJcbiAgICAgICAgaWYgKGlzTW9kRXhwKSB4ID0geC5tb2QobSk7XHJcblxyXG4gICAgICAvLyBPdmVyZmxvdyB0byDCsUluZmluaXR5OiA+PTIqKjFlMTAgb3IgPj0xLjAwMDAwMjQqKjFlMTUuXHJcbiAgICAgIC8vIFVuZGVyZmxvdyB0byDCsTA6IDw9MC43OSoqMWUxMCBvciA8PTAuOTk5OTk3NSoqMWUxNS5cclxuICAgICAgfSBlbHNlIGlmIChuLmUgPiA5ICYmICh4LmUgPiAwIHx8IHguZSA8IC0xIHx8ICh4LmUgPT0gMFxyXG4gICAgICAgIC8vIFsxLCAyNDAwMDAwMDBdXHJcbiAgICAgICAgPyB4LmNbMF0gPiAxIHx8IG5Jc0JpZyAmJiB4LmNbMV0gPj0gMjRlN1xyXG4gICAgICAgIC8vIFs4MDAwMDAwMDAwMDAwMF0gIFs5OTk5OTc1MDAwMDAwMF1cclxuICAgICAgICA6IHguY1swXSA8IDhlMTMgfHwgbklzQmlnICYmIHguY1swXSA8PSA5OTk5OTc1ZTcpKSkge1xyXG5cclxuICAgICAgICAvLyBJZiB4IGlzIG5lZ2F0aXZlIGFuZCBuIGlzIG9kZCwgayA9IC0wLCBlbHNlIGsgPSAwLlxyXG4gICAgICAgIGsgPSB4LnMgPCAwICYmIGlzT2RkKG4pID8gLTAgOiAwO1xyXG5cclxuICAgICAgICAvLyBJZiB4ID49IDEsIGsgPSDCsUluZmluaXR5LlxyXG4gICAgICAgIGlmICh4LmUgPiAtMSkgayA9IDEgLyBrO1xyXG5cclxuICAgICAgICAvLyBJZiBuIGlzIG5lZ2F0aXZlIHJldHVybiDCsTAsIGVsc2UgcmV0dXJuIMKxSW5maW5pdHkuXHJcbiAgICAgICAgcmV0dXJuIG5ldyBCaWdOdW1iZXIobklzTmVnID8gMSAvIGsgOiBrKTtcclxuXHJcbiAgICAgIH0gZWxzZSBpZiAoUE9XX1BSRUNJU0lPTikge1xyXG5cclxuICAgICAgICAvLyBUcnVuY2F0aW5nIGVhY2ggY29lZmZpY2llbnQgYXJyYXkgdG8gYSBsZW5ndGggb2YgayBhZnRlciBlYWNoIG11bHRpcGxpY2F0aW9uXHJcbiAgICAgICAgLy8gZXF1YXRlcyB0byB0cnVuY2F0aW5nIHNpZ25pZmljYW50IGRpZ2l0cyB0byBQT1dfUFJFQ0lTSU9OICsgWzI4LCA0MV0sXHJcbiAgICAgICAgLy8gaS5lLiB0aGVyZSB3aWxsIGJlIGEgbWluaW11bSBvZiAyOCBndWFyZCBkaWdpdHMgcmV0YWluZWQuXHJcbiAgICAgICAgayA9IG1hdGhjZWlsKFBPV19QUkVDSVNJT04gLyBMT0dfQkFTRSArIDIpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAobklzQmlnKSB7XHJcbiAgICAgICAgaGFsZiA9IG5ldyBCaWdOdW1iZXIoMC41KTtcclxuICAgICAgICBpZiAobklzTmVnKSBuLnMgPSAxO1xyXG4gICAgICAgIG5Jc09kZCA9IGlzT2RkKG4pO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGkgPSBNYXRoLmFicygrdmFsdWVPZihuKSk7XHJcbiAgICAgICAgbklzT2RkID0gaSAlIDI7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHkgPSBuZXcgQmlnTnVtYmVyKE9ORSk7XHJcblxyXG4gICAgICAvLyBQZXJmb3JtcyA1NCBsb29wIGl0ZXJhdGlvbnMgZm9yIG4gb2YgOTAwNzE5OTI1NDc0MDk5MS5cclxuICAgICAgZm9yICg7IDspIHtcclxuXHJcbiAgICAgICAgaWYgKG5Jc09kZCkge1xyXG4gICAgICAgICAgeSA9IHkudGltZXMoeCk7XHJcbiAgICAgICAgICBpZiAoIXkuYykgYnJlYWs7XHJcblxyXG4gICAgICAgICAgaWYgKGspIHtcclxuICAgICAgICAgICAgaWYgKHkuYy5sZW5ndGggPiBrKSB5LmMubGVuZ3RoID0gaztcclxuICAgICAgICAgIH0gZWxzZSBpZiAoaXNNb2RFeHApIHtcclxuICAgICAgICAgICAgeSA9IHkubW9kKG0pOyAgICAvL3kgPSB5Lm1pbnVzKGRpdih5LCBtLCAwLCBNT0RVTE9fTU9ERSkudGltZXMobSkpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGkpIHtcclxuICAgICAgICAgIGkgPSBtYXRoZmxvb3IoaSAvIDIpO1xyXG4gICAgICAgICAgaWYgKGkgPT09IDApIGJyZWFrO1xyXG4gICAgICAgICAgbklzT2RkID0gaSAlIDI7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIG4gPSBuLnRpbWVzKGhhbGYpO1xyXG4gICAgICAgICAgcm91bmQobiwgbi5lICsgMSwgMSk7XHJcblxyXG4gICAgICAgICAgaWYgKG4uZSA+IDE0KSB7XHJcbiAgICAgICAgICAgIG5Jc09kZCA9IGlzT2RkKG4pO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgaSA9ICt2YWx1ZU9mKG4pO1xyXG4gICAgICAgICAgICBpZiAoaSA9PT0gMCkgYnJlYWs7XHJcbiAgICAgICAgICAgIG5Jc09kZCA9IGkgJSAyO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgeCA9IHgudGltZXMoeCk7XHJcblxyXG4gICAgICAgIGlmIChrKSB7XHJcbiAgICAgICAgICBpZiAoeC5jICYmIHguYy5sZW5ndGggPiBrKSB4LmMubGVuZ3RoID0gaztcclxuICAgICAgICB9IGVsc2UgaWYgKGlzTW9kRXhwKSB7XHJcbiAgICAgICAgICB4ID0geC5tb2QobSk7ICAgIC8veCA9IHgubWludXMoZGl2KHgsIG0sIDAsIE1PRFVMT19NT0RFKS50aW1lcyhtKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoaXNNb2RFeHApIHJldHVybiB5O1xyXG4gICAgICBpZiAobklzTmVnKSB5ID0gT05FLmRpdih5KTtcclxuXHJcbiAgICAgIHJldHVybiBtID8geS5tb2QobSkgOiBrID8gcm91bmQoeSwgUE9XX1BSRUNJU0lPTiwgUk9VTkRJTkdfTU9ERSwgbW9yZSkgOiB5O1xyXG4gICAgfTtcclxuXHJcblxyXG4gICAgLypcclxuICAgICAqIFJldHVybiBhIG5ldyBCaWdOdW1iZXIgd2hvc2UgdmFsdWUgaXMgdGhlIHZhbHVlIG9mIHRoaXMgQmlnTnVtYmVyIHJvdW5kZWQgdG8gYW4gaW50ZWdlclxyXG4gICAgICogdXNpbmcgcm91bmRpbmcgbW9kZSBybSwgb3IgUk9VTkRJTkdfTU9ERSBpZiBybSBpcyBvbWl0dGVkLlxyXG4gICAgICpcclxuICAgICAqIFtybV0ge251bWJlcn0gUm91bmRpbmcgbW9kZS4gSW50ZWdlciwgMCB0byA4IGluY2x1c2l2ZS5cclxuICAgICAqXHJcbiAgICAgKiAnW0JpZ051bWJlciBFcnJvcl0gQXJndW1lbnQge25vdCBhIHByaW1pdGl2ZSBudW1iZXJ8bm90IGFuIGludGVnZXJ8b3V0IG9mIHJhbmdlfToge3JtfSdcclxuICAgICAqL1xyXG4gICAgUC5pbnRlZ2VyVmFsdWUgPSBmdW5jdGlvbiAocm0pIHtcclxuICAgICAgdmFyIG4gPSBuZXcgQmlnTnVtYmVyKHRoaXMpO1xyXG4gICAgICBpZiAocm0gPT0gbnVsbCkgcm0gPSBST1VORElOR19NT0RFO1xyXG4gICAgICBlbHNlIGludENoZWNrKHJtLCAwLCA4KTtcclxuICAgICAgcmV0dXJuIHJvdW5kKG4sIG4uZSArIDEsIHJtKTtcclxuICAgIH07XHJcblxyXG5cclxuICAgIC8qXHJcbiAgICAgKiBSZXR1cm4gdHJ1ZSBpZiB0aGUgdmFsdWUgb2YgdGhpcyBCaWdOdW1iZXIgaXMgZXF1YWwgdG8gdGhlIHZhbHVlIG9mIEJpZ051bWJlcih5LCBiKSxcclxuICAgICAqIG90aGVyd2lzZSByZXR1cm4gZmFsc2UuXHJcbiAgICAgKi9cclxuICAgIFAuaXNFcXVhbFRvID0gUC5lcSA9IGZ1bmN0aW9uICh5LCBiKSB7XHJcbiAgICAgIHJldHVybiBjb21wYXJlKHRoaXMsIG5ldyBCaWdOdW1iZXIoeSwgYikpID09PSAwO1xyXG4gICAgfTtcclxuXHJcblxyXG4gICAgLypcclxuICAgICAqIFJldHVybiB0cnVlIGlmIHRoZSB2YWx1ZSBvZiB0aGlzIEJpZ051bWJlciBpcyBhIGZpbml0ZSBudW1iZXIsIG90aGVyd2lzZSByZXR1cm4gZmFsc2UuXHJcbiAgICAgKi9cclxuICAgIFAuaXNGaW5pdGUgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgIHJldHVybiAhIXRoaXMuYztcclxuICAgIH07XHJcblxyXG5cclxuICAgIC8qXHJcbiAgICAgKiBSZXR1cm4gdHJ1ZSBpZiB0aGUgdmFsdWUgb2YgdGhpcyBCaWdOdW1iZXIgaXMgZ3JlYXRlciB0aGFuIHRoZSB2YWx1ZSBvZiBCaWdOdW1iZXIoeSwgYiksXHJcbiAgICAgKiBvdGhlcndpc2UgcmV0dXJuIGZhbHNlLlxyXG4gICAgICovXHJcbiAgICBQLmlzR3JlYXRlclRoYW4gPSBQLmd0ID0gZnVuY3Rpb24gKHksIGIpIHtcclxuICAgICAgcmV0dXJuIGNvbXBhcmUodGhpcywgbmV3IEJpZ051bWJlcih5LCBiKSkgPiAwO1xyXG4gICAgfTtcclxuXHJcblxyXG4gICAgLypcclxuICAgICAqIFJldHVybiB0cnVlIGlmIHRoZSB2YWx1ZSBvZiB0aGlzIEJpZ051bWJlciBpcyBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gdGhlIHZhbHVlIG9mXHJcbiAgICAgKiBCaWdOdW1iZXIoeSwgYiksIG90aGVyd2lzZSByZXR1cm4gZmFsc2UuXHJcbiAgICAgKi9cclxuICAgIFAuaXNHcmVhdGVyVGhhbk9yRXF1YWxUbyA9IFAuZ3RlID0gZnVuY3Rpb24gKHksIGIpIHtcclxuICAgICAgcmV0dXJuIChiID0gY29tcGFyZSh0aGlzLCBuZXcgQmlnTnVtYmVyKHksIGIpKSkgPT09IDEgfHwgYiA9PT0gMDtcclxuXHJcbiAgICB9O1xyXG5cclxuXHJcbiAgICAvKlxyXG4gICAgICogUmV0dXJuIHRydWUgaWYgdGhlIHZhbHVlIG9mIHRoaXMgQmlnTnVtYmVyIGlzIGFuIGludGVnZXIsIG90aGVyd2lzZSByZXR1cm4gZmFsc2UuXHJcbiAgICAgKi9cclxuICAgIFAuaXNJbnRlZ2VyID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICByZXR1cm4gISF0aGlzLmMgJiYgYml0Rmxvb3IodGhpcy5lIC8gTE9HX0JBU0UpID4gdGhpcy5jLmxlbmd0aCAtIDI7XHJcbiAgICB9O1xyXG5cclxuXHJcbiAgICAvKlxyXG4gICAgICogUmV0dXJuIHRydWUgaWYgdGhlIHZhbHVlIG9mIHRoaXMgQmlnTnVtYmVyIGlzIGxlc3MgdGhhbiB0aGUgdmFsdWUgb2YgQmlnTnVtYmVyKHksIGIpLFxyXG4gICAgICogb3RoZXJ3aXNlIHJldHVybiBmYWxzZS5cclxuICAgICAqL1xyXG4gICAgUC5pc0xlc3NUaGFuID0gUC5sdCA9IGZ1bmN0aW9uICh5LCBiKSB7XHJcbiAgICAgIHJldHVybiBjb21wYXJlKHRoaXMsIG5ldyBCaWdOdW1iZXIoeSwgYikpIDwgMDtcclxuICAgIH07XHJcblxyXG5cclxuICAgIC8qXHJcbiAgICAgKiBSZXR1cm4gdHJ1ZSBpZiB0aGUgdmFsdWUgb2YgdGhpcyBCaWdOdW1iZXIgaXMgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIHRoZSB2YWx1ZSBvZlxyXG4gICAgICogQmlnTnVtYmVyKHksIGIpLCBvdGhlcndpc2UgcmV0dXJuIGZhbHNlLlxyXG4gICAgICovXHJcbiAgICBQLmlzTGVzc1RoYW5PckVxdWFsVG8gPSBQLmx0ZSA9IGZ1bmN0aW9uICh5LCBiKSB7XHJcbiAgICAgIHJldHVybiAoYiA9IGNvbXBhcmUodGhpcywgbmV3IEJpZ051bWJlcih5LCBiKSkpID09PSAtMSB8fCBiID09PSAwO1xyXG4gICAgfTtcclxuXHJcblxyXG4gICAgLypcclxuICAgICAqIFJldHVybiB0cnVlIGlmIHRoZSB2YWx1ZSBvZiB0aGlzIEJpZ051bWJlciBpcyBOYU4sIG90aGVyd2lzZSByZXR1cm4gZmFsc2UuXHJcbiAgICAgKi9cclxuICAgIFAuaXNOYU4gPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgIHJldHVybiAhdGhpcy5zO1xyXG4gICAgfTtcclxuXHJcblxyXG4gICAgLypcclxuICAgICAqIFJldHVybiB0cnVlIGlmIHRoZSB2YWx1ZSBvZiB0aGlzIEJpZ051bWJlciBpcyBuZWdhdGl2ZSwgb3RoZXJ3aXNlIHJldHVybiBmYWxzZS5cclxuICAgICAqL1xyXG4gICAgUC5pc05lZ2F0aXZlID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICByZXR1cm4gdGhpcy5zIDwgMDtcclxuICAgIH07XHJcblxyXG5cclxuICAgIC8qXHJcbiAgICAgKiBSZXR1cm4gdHJ1ZSBpZiB0aGUgdmFsdWUgb2YgdGhpcyBCaWdOdW1iZXIgaXMgcG9zaXRpdmUsIG90aGVyd2lzZSByZXR1cm4gZmFsc2UuXHJcbiAgICAgKi9cclxuICAgIFAuaXNQb3NpdGl2ZSA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgcmV0dXJuIHRoaXMucyA+IDA7XHJcbiAgICB9O1xyXG5cclxuXHJcbiAgICAvKlxyXG4gICAgICogUmV0dXJuIHRydWUgaWYgdGhlIHZhbHVlIG9mIHRoaXMgQmlnTnVtYmVyIGlzIDAgb3IgLTAsIG90aGVyd2lzZSByZXR1cm4gZmFsc2UuXHJcbiAgICAgKi9cclxuICAgIFAuaXNaZXJvID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICByZXR1cm4gISF0aGlzLmMgJiYgdGhpcy5jWzBdID09IDA7XHJcbiAgICB9O1xyXG5cclxuXHJcbiAgICAvKlxyXG4gICAgICogIG4gLSAwID0gblxyXG4gICAgICogIG4gLSBOID0gTlxyXG4gICAgICogIG4gLSBJID0gLUlcclxuICAgICAqICAwIC0gbiA9IC1uXHJcbiAgICAgKiAgMCAtIDAgPSAwXHJcbiAgICAgKiAgMCAtIE4gPSBOXHJcbiAgICAgKiAgMCAtIEkgPSAtSVxyXG4gICAgICogIE4gLSBuID0gTlxyXG4gICAgICogIE4gLSAwID0gTlxyXG4gICAgICogIE4gLSBOID0gTlxyXG4gICAgICogIE4gLSBJID0gTlxyXG4gICAgICogIEkgLSBuID0gSVxyXG4gICAgICogIEkgLSAwID0gSVxyXG4gICAgICogIEkgLSBOID0gTlxyXG4gICAgICogIEkgLSBJID0gTlxyXG4gICAgICpcclxuICAgICAqIFJldHVybiBhIG5ldyBCaWdOdW1iZXIgd2hvc2UgdmFsdWUgaXMgdGhlIHZhbHVlIG9mIHRoaXMgQmlnTnVtYmVyIG1pbnVzIHRoZSB2YWx1ZSBvZlxyXG4gICAgICogQmlnTnVtYmVyKHksIGIpLlxyXG4gICAgICovXHJcbiAgICBQLm1pbnVzID0gZnVuY3Rpb24gKHksIGIpIHtcclxuICAgICAgdmFyIGksIGosIHQsIHhMVHksXHJcbiAgICAgICAgeCA9IHRoaXMsXHJcbiAgICAgICAgYSA9IHgucztcclxuXHJcbiAgICAgIHkgPSBuZXcgQmlnTnVtYmVyKHksIGIpO1xyXG4gICAgICBiID0geS5zO1xyXG5cclxuICAgICAgLy8gRWl0aGVyIE5hTj9cclxuICAgICAgaWYgKCFhIHx8ICFiKSByZXR1cm4gbmV3IEJpZ051bWJlcihOYU4pO1xyXG5cclxuICAgICAgLy8gU2lnbnMgZGlmZmVyP1xyXG4gICAgICBpZiAoYSAhPSBiKSB7XHJcbiAgICAgICAgeS5zID0gLWI7XHJcbiAgICAgICAgcmV0dXJuIHgucGx1cyh5KTtcclxuICAgICAgfVxyXG5cclxuICAgICAgdmFyIHhlID0geC5lIC8gTE9HX0JBU0UsXHJcbiAgICAgICAgeWUgPSB5LmUgLyBMT0dfQkFTRSxcclxuICAgICAgICB4YyA9IHguYyxcclxuICAgICAgICB5YyA9IHkuYztcclxuXHJcbiAgICAgIGlmICgheGUgfHwgIXllKSB7XHJcblxyXG4gICAgICAgIC8vIEVpdGhlciBJbmZpbml0eT9cclxuICAgICAgICBpZiAoIXhjIHx8ICF5YykgcmV0dXJuIHhjID8gKHkucyA9IC1iLCB5KSA6IG5ldyBCaWdOdW1iZXIoeWMgPyB4IDogTmFOKTtcclxuXHJcbiAgICAgICAgLy8gRWl0aGVyIHplcm8/XHJcbiAgICAgICAgaWYgKCF4Y1swXSB8fCAheWNbMF0pIHtcclxuXHJcbiAgICAgICAgICAvLyBSZXR1cm4geSBpZiB5IGlzIG5vbi16ZXJvLCB4IGlmIHggaXMgbm9uLXplcm8sIG9yIHplcm8gaWYgYm90aCBhcmUgemVyby5cclxuICAgICAgICAgIHJldHVybiB5Y1swXSA/ICh5LnMgPSAtYiwgeSkgOiBuZXcgQmlnTnVtYmVyKHhjWzBdID8geCA6XHJcblxyXG4gICAgICAgICAgIC8vIElFRUUgNzU0ICgyMDA4KSA2LjM6IG4gLSBuID0gLTAgd2hlbiByb3VuZGluZyB0byAtSW5maW5pdHlcclxuICAgICAgICAgICBST1VORElOR19NT0RFID09IDMgPyAtMCA6IDApO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgeGUgPSBiaXRGbG9vcih4ZSk7XHJcbiAgICAgIHllID0gYml0Rmxvb3IoeWUpO1xyXG4gICAgICB4YyA9IHhjLnNsaWNlKCk7XHJcblxyXG4gICAgICAvLyBEZXRlcm1pbmUgd2hpY2ggaXMgdGhlIGJpZ2dlciBudW1iZXIuXHJcbiAgICAgIGlmIChhID0geGUgLSB5ZSkge1xyXG5cclxuICAgICAgICBpZiAoeExUeSA9IGEgPCAwKSB7XHJcbiAgICAgICAgICBhID0gLWE7XHJcbiAgICAgICAgICB0ID0geGM7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHllID0geGU7XHJcbiAgICAgICAgICB0ID0geWM7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0LnJldmVyc2UoKTtcclxuXHJcbiAgICAgICAgLy8gUHJlcGVuZCB6ZXJvcyB0byBlcXVhbGlzZSBleHBvbmVudHMuXHJcbiAgICAgICAgZm9yIChiID0gYTsgYi0tOyB0LnB1c2goMCkpO1xyXG4gICAgICAgIHQucmV2ZXJzZSgpO1xyXG4gICAgICB9IGVsc2Uge1xyXG5cclxuICAgICAgICAvLyBFeHBvbmVudHMgZXF1YWwuIENoZWNrIGRpZ2l0IGJ5IGRpZ2l0LlxyXG4gICAgICAgIGogPSAoeExUeSA9IChhID0geGMubGVuZ3RoKSA8IChiID0geWMubGVuZ3RoKSkgPyBhIDogYjtcclxuXHJcbiAgICAgICAgZm9yIChhID0gYiA9IDA7IGIgPCBqOyBiKyspIHtcclxuXHJcbiAgICAgICAgICBpZiAoeGNbYl0gIT0geWNbYl0pIHtcclxuICAgICAgICAgICAgeExUeSA9IHhjW2JdIDwgeWNbYl07XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgLy8geCA8IHk/IFBvaW50IHhjIHRvIHRoZSBhcnJheSBvZiB0aGUgYmlnZ2VyIG51bWJlci5cclxuICAgICAgaWYgKHhMVHkpIHQgPSB4YywgeGMgPSB5YywgeWMgPSB0LCB5LnMgPSAteS5zO1xyXG5cclxuICAgICAgYiA9IChqID0geWMubGVuZ3RoKSAtIChpID0geGMubGVuZ3RoKTtcclxuXHJcbiAgICAgIC8vIEFwcGVuZCB6ZXJvcyB0byB4YyBpZiBzaG9ydGVyLlxyXG4gICAgICAvLyBObyBuZWVkIHRvIGFkZCB6ZXJvcyB0byB5YyBpZiBzaG9ydGVyIGFzIHN1YnRyYWN0IG9ubHkgbmVlZHMgdG8gc3RhcnQgYXQgeWMubGVuZ3RoLlxyXG4gICAgICBpZiAoYiA+IDApIGZvciAoOyBiLS07IHhjW2krK10gPSAwKTtcclxuICAgICAgYiA9IEJBU0UgLSAxO1xyXG5cclxuICAgICAgLy8gU3VidHJhY3QgeWMgZnJvbSB4Yy5cclxuICAgICAgZm9yICg7IGogPiBhOykge1xyXG5cclxuICAgICAgICBpZiAoeGNbLS1qXSA8IHljW2pdKSB7XHJcbiAgICAgICAgICBmb3IgKGkgPSBqOyBpICYmICF4Y1stLWldOyB4Y1tpXSA9IGIpO1xyXG4gICAgICAgICAgLS14Y1tpXTtcclxuICAgICAgICAgIHhjW2pdICs9IEJBU0U7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB4Y1tqXSAtPSB5Y1tqXTtcclxuICAgICAgfVxyXG5cclxuICAgICAgLy8gUmVtb3ZlIGxlYWRpbmcgemVyb3MgYW5kIGFkanVzdCBleHBvbmVudCBhY2NvcmRpbmdseS5cclxuICAgICAgZm9yICg7IHhjWzBdID09IDA7IHhjLnNwbGljZSgwLCAxKSwgLS15ZSk7XHJcblxyXG4gICAgICAvLyBaZXJvP1xyXG4gICAgICBpZiAoIXhjWzBdKSB7XHJcblxyXG4gICAgICAgIC8vIEZvbGxvd2luZyBJRUVFIDc1NCAoMjAwOCkgNi4zLFxyXG4gICAgICAgIC8vIG4gLSBuID0gKzAgIGJ1dCAgbiAtIG4gPSAtMCAgd2hlbiByb3VuZGluZyB0b3dhcmRzIC1JbmZpbml0eS5cclxuICAgICAgICB5LnMgPSBST1VORElOR19NT0RFID09IDMgPyAtMSA6IDE7XHJcbiAgICAgICAgeS5jID0gW3kuZSA9IDBdO1xyXG4gICAgICAgIHJldHVybiB5O1xyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyBObyBuZWVkIHRvIGNoZWNrIGZvciBJbmZpbml0eSBhcyAreCAtICt5ICE9IEluZmluaXR5ICYmIC14IC0gLXkgIT0gSW5maW5pdHlcclxuICAgICAgLy8gZm9yIGZpbml0ZSB4IGFuZCB5LlxyXG4gICAgICByZXR1cm4gbm9ybWFsaXNlKHksIHhjLCB5ZSk7XHJcbiAgICB9O1xyXG5cclxuXHJcbiAgICAvKlxyXG4gICAgICogICBuICUgMCA9ICBOXHJcbiAgICAgKiAgIG4gJSBOID0gIE5cclxuICAgICAqICAgbiAlIEkgPSAgblxyXG4gICAgICogICAwICUgbiA9ICAwXHJcbiAgICAgKiAgLTAgJSBuID0gLTBcclxuICAgICAqICAgMCAlIDAgPSAgTlxyXG4gICAgICogICAwICUgTiA9ICBOXHJcbiAgICAgKiAgIDAgJSBJID0gIDBcclxuICAgICAqICAgTiAlIG4gPSAgTlxyXG4gICAgICogICBOICUgMCA9ICBOXHJcbiAgICAgKiAgIE4gJSBOID0gIE5cclxuICAgICAqICAgTiAlIEkgPSAgTlxyXG4gICAgICogICBJICUgbiA9ICBOXHJcbiAgICAgKiAgIEkgJSAwID0gIE5cclxuICAgICAqICAgSSAlIE4gPSAgTlxyXG4gICAgICogICBJICUgSSA9ICBOXHJcbiAgICAgKlxyXG4gICAgICogUmV0dXJuIGEgbmV3IEJpZ051bWJlciB3aG9zZSB2YWx1ZSBpcyB0aGUgdmFsdWUgb2YgdGhpcyBCaWdOdW1iZXIgbW9kdWxvIHRoZSB2YWx1ZSBvZlxyXG4gICAgICogQmlnTnVtYmVyKHksIGIpLiBUaGUgcmVzdWx0IGRlcGVuZHMgb24gdGhlIHZhbHVlIG9mIE1PRFVMT19NT0RFLlxyXG4gICAgICovXHJcbiAgICBQLm1vZHVsbyA9IFAubW9kID0gZnVuY3Rpb24gKHksIGIpIHtcclxuICAgICAgdmFyIHEsIHMsXHJcbiAgICAgICAgeCA9IHRoaXM7XHJcblxyXG4gICAgICB5ID0gbmV3IEJpZ051bWJlcih5LCBiKTtcclxuXHJcbiAgICAgIC8vIFJldHVybiBOYU4gaWYgeCBpcyBJbmZpbml0eSBvciBOYU4sIG9yIHkgaXMgTmFOIG9yIHplcm8uXHJcbiAgICAgIGlmICgheC5jIHx8ICF5LnMgfHwgeS5jICYmICF5LmNbMF0pIHtcclxuICAgICAgICByZXR1cm4gbmV3IEJpZ051bWJlcihOYU4pO1xyXG5cclxuICAgICAgLy8gUmV0dXJuIHggaWYgeSBpcyBJbmZpbml0eSBvciB4IGlzIHplcm8uXHJcbiAgICAgIH0gZWxzZSBpZiAoIXkuYyB8fCB4LmMgJiYgIXguY1swXSkge1xyXG4gICAgICAgIHJldHVybiBuZXcgQmlnTnVtYmVyKHgpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoTU9EVUxPX01PREUgPT0gOSkge1xyXG5cclxuICAgICAgICAvLyBFdWNsaWRpYW4gZGl2aXNpb246IHEgPSBzaWduKHkpICogZmxvb3IoeCAvIGFicyh5KSlcclxuICAgICAgICAvLyByID0geCAtIHF5ICAgIHdoZXJlICAwIDw9IHIgPCBhYnMoeSlcclxuICAgICAgICBzID0geS5zO1xyXG4gICAgICAgIHkucyA9IDE7XHJcbiAgICAgICAgcSA9IGRpdih4LCB5LCAwLCAzKTtcclxuICAgICAgICB5LnMgPSBzO1xyXG4gICAgICAgIHEucyAqPSBzO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHEgPSBkaXYoeCwgeSwgMCwgTU9EVUxPX01PREUpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICB5ID0geC5taW51cyhxLnRpbWVzKHkpKTtcclxuXHJcbiAgICAgIC8vIFRvIG1hdGNoIEphdmFTY3JpcHQgJSwgZW5zdXJlIHNpZ24gb2YgemVybyBpcyBzaWduIG9mIGRpdmlkZW5kLlxyXG4gICAgICBpZiAoIXkuY1swXSAmJiBNT0RVTE9fTU9ERSA9PSAxKSB5LnMgPSB4LnM7XHJcblxyXG4gICAgICByZXR1cm4geTtcclxuICAgIH07XHJcblxyXG5cclxuICAgIC8qXHJcbiAgICAgKiAgbiAqIDAgPSAwXHJcbiAgICAgKiAgbiAqIE4gPSBOXHJcbiAgICAgKiAgbiAqIEkgPSBJXHJcbiAgICAgKiAgMCAqIG4gPSAwXHJcbiAgICAgKiAgMCAqIDAgPSAwXHJcbiAgICAgKiAgMCAqIE4gPSBOXHJcbiAgICAgKiAgMCAqIEkgPSBOXHJcbiAgICAgKiAgTiAqIG4gPSBOXHJcbiAgICAgKiAgTiAqIDAgPSBOXHJcbiAgICAgKiAgTiAqIE4gPSBOXHJcbiAgICAgKiAgTiAqIEkgPSBOXHJcbiAgICAgKiAgSSAqIG4gPSBJXHJcbiAgICAgKiAgSSAqIDAgPSBOXHJcbiAgICAgKiAgSSAqIE4gPSBOXHJcbiAgICAgKiAgSSAqIEkgPSBJXHJcbiAgICAgKlxyXG4gICAgICogUmV0dXJuIGEgbmV3IEJpZ051bWJlciB3aG9zZSB2YWx1ZSBpcyB0aGUgdmFsdWUgb2YgdGhpcyBCaWdOdW1iZXIgbXVsdGlwbGllZCBieSB0aGUgdmFsdWVcclxuICAgICAqIG9mIEJpZ051bWJlcih5LCBiKS5cclxuICAgICAqL1xyXG4gICAgUC5tdWx0aXBsaWVkQnkgPSBQLnRpbWVzID0gZnVuY3Rpb24gKHksIGIpIHtcclxuICAgICAgdmFyIGMsIGUsIGksIGosIGssIG0sIHhjTCwgeGxvLCB4aGksIHljTCwgeWxvLCB5aGksIHpjLFxyXG4gICAgICAgIGJhc2UsIHNxcnRCYXNlLFxyXG4gICAgICAgIHggPSB0aGlzLFxyXG4gICAgICAgIHhjID0geC5jLFxyXG4gICAgICAgIHljID0gKHkgPSBuZXcgQmlnTnVtYmVyKHksIGIpKS5jO1xyXG5cclxuICAgICAgLy8gRWl0aGVyIE5hTiwgwrFJbmZpbml0eSBvciDCsTA/XHJcbiAgICAgIGlmICgheGMgfHwgIXljIHx8ICF4Y1swXSB8fCAheWNbMF0pIHtcclxuXHJcbiAgICAgICAgLy8gUmV0dXJuIE5hTiBpZiBlaXRoZXIgaXMgTmFOLCBvciBvbmUgaXMgMCBhbmQgdGhlIG90aGVyIGlzIEluZmluaXR5LlxyXG4gICAgICAgIGlmICgheC5zIHx8ICF5LnMgfHwgeGMgJiYgIXhjWzBdICYmICF5YyB8fCB5YyAmJiAheWNbMF0gJiYgIXhjKSB7XHJcbiAgICAgICAgICB5LmMgPSB5LmUgPSB5LnMgPSBudWxsO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB5LnMgKj0geC5zO1xyXG5cclxuICAgICAgICAgIC8vIFJldHVybiDCsUluZmluaXR5IGlmIGVpdGhlciBpcyDCsUluZmluaXR5LlxyXG4gICAgICAgICAgaWYgKCF4YyB8fCAheWMpIHtcclxuICAgICAgICAgICAgeS5jID0geS5lID0gbnVsbDtcclxuXHJcbiAgICAgICAgICAvLyBSZXR1cm4gwrEwIGlmIGVpdGhlciBpcyDCsTAuXHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB5LmMgPSBbMF07XHJcbiAgICAgICAgICAgIHkuZSA9IDA7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4geTtcclxuICAgICAgfVxyXG5cclxuICAgICAgZSA9IGJpdEZsb29yKHguZSAvIExPR19CQVNFKSArIGJpdEZsb29yKHkuZSAvIExPR19CQVNFKTtcclxuICAgICAgeS5zICo9IHgucztcclxuICAgICAgeGNMID0geGMubGVuZ3RoO1xyXG4gICAgICB5Y0wgPSB5Yy5sZW5ndGg7XHJcblxyXG4gICAgICAvLyBFbnN1cmUgeGMgcG9pbnRzIHRvIGxvbmdlciBhcnJheSBhbmQgeGNMIHRvIGl0cyBsZW5ndGguXHJcbiAgICAgIGlmICh4Y0wgPCB5Y0wpIHpjID0geGMsIHhjID0geWMsIHljID0gemMsIGkgPSB4Y0wsIHhjTCA9IHljTCwgeWNMID0gaTtcclxuXHJcbiAgICAgIC8vIEluaXRpYWxpc2UgdGhlIHJlc3VsdCBhcnJheSB3aXRoIHplcm9zLlxyXG4gICAgICBmb3IgKGkgPSB4Y0wgKyB5Y0wsIHpjID0gW107IGktLTsgemMucHVzaCgwKSk7XHJcblxyXG4gICAgICBiYXNlID0gQkFTRTtcclxuICAgICAgc3FydEJhc2UgPSBTUVJUX0JBU0U7XHJcblxyXG4gICAgICBmb3IgKGkgPSB5Y0w7IC0taSA+PSAwOykge1xyXG4gICAgICAgIGMgPSAwO1xyXG4gICAgICAgIHlsbyA9IHljW2ldICUgc3FydEJhc2U7XHJcbiAgICAgICAgeWhpID0geWNbaV0gLyBzcXJ0QmFzZSB8IDA7XHJcblxyXG4gICAgICAgIGZvciAoayA9IHhjTCwgaiA9IGkgKyBrOyBqID4gaTspIHtcclxuICAgICAgICAgIHhsbyA9IHhjWy0ta10gJSBzcXJ0QmFzZTtcclxuICAgICAgICAgIHhoaSA9IHhjW2tdIC8gc3FydEJhc2UgfCAwO1xyXG4gICAgICAgICAgbSA9IHloaSAqIHhsbyArIHhoaSAqIHlsbztcclxuICAgICAgICAgIHhsbyA9IHlsbyAqIHhsbyArICgobSAlIHNxcnRCYXNlKSAqIHNxcnRCYXNlKSArIHpjW2pdICsgYztcclxuICAgICAgICAgIGMgPSAoeGxvIC8gYmFzZSB8IDApICsgKG0gLyBzcXJ0QmFzZSB8IDApICsgeWhpICogeGhpO1xyXG4gICAgICAgICAgemNbai0tXSA9IHhsbyAlIGJhc2U7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB6Y1tqXSA9IGM7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmIChjKSB7XHJcbiAgICAgICAgKytlO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHpjLnNwbGljZSgwLCAxKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgcmV0dXJuIG5vcm1hbGlzZSh5LCB6YywgZSk7XHJcbiAgICB9O1xyXG5cclxuXHJcbiAgICAvKlxyXG4gICAgICogUmV0dXJuIGEgbmV3IEJpZ051bWJlciB3aG9zZSB2YWx1ZSBpcyB0aGUgdmFsdWUgb2YgdGhpcyBCaWdOdW1iZXIgbmVnYXRlZCxcclxuICAgICAqIGkuZS4gbXVsdGlwbGllZCBieSAtMS5cclxuICAgICAqL1xyXG4gICAgUC5uZWdhdGVkID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICB2YXIgeCA9IG5ldyBCaWdOdW1iZXIodGhpcyk7XHJcbiAgICAgIHgucyA9IC14LnMgfHwgbnVsbDtcclxuICAgICAgcmV0dXJuIHg7XHJcbiAgICB9O1xyXG5cclxuXHJcbiAgICAvKlxyXG4gICAgICogIG4gKyAwID0gblxyXG4gICAgICogIG4gKyBOID0gTlxyXG4gICAgICogIG4gKyBJID0gSVxyXG4gICAgICogIDAgKyBuID0gblxyXG4gICAgICogIDAgKyAwID0gMFxyXG4gICAgICogIDAgKyBOID0gTlxyXG4gICAgICogIDAgKyBJID0gSVxyXG4gICAgICogIE4gKyBuID0gTlxyXG4gICAgICogIE4gKyAwID0gTlxyXG4gICAgICogIE4gKyBOID0gTlxyXG4gICAgICogIE4gKyBJID0gTlxyXG4gICAgICogIEkgKyBuID0gSVxyXG4gICAgICogIEkgKyAwID0gSVxyXG4gICAgICogIEkgKyBOID0gTlxyXG4gICAgICogIEkgKyBJID0gSVxyXG4gICAgICpcclxuICAgICAqIFJldHVybiBhIG5ldyBCaWdOdW1iZXIgd2hvc2UgdmFsdWUgaXMgdGhlIHZhbHVlIG9mIHRoaXMgQmlnTnVtYmVyIHBsdXMgdGhlIHZhbHVlIG9mXHJcbiAgICAgKiBCaWdOdW1iZXIoeSwgYikuXHJcbiAgICAgKi9cclxuICAgIFAucGx1cyA9IGZ1bmN0aW9uICh5LCBiKSB7XHJcbiAgICAgIHZhciB0LFxyXG4gICAgICAgIHggPSB0aGlzLFxyXG4gICAgICAgIGEgPSB4LnM7XHJcblxyXG4gICAgICB5ID0gbmV3IEJpZ051bWJlcih5LCBiKTtcclxuICAgICAgYiA9IHkucztcclxuXHJcbiAgICAgIC8vIEVpdGhlciBOYU4/XHJcbiAgICAgIGlmICghYSB8fCAhYikgcmV0dXJuIG5ldyBCaWdOdW1iZXIoTmFOKTtcclxuXHJcbiAgICAgIC8vIFNpZ25zIGRpZmZlcj9cclxuICAgICAgIGlmIChhICE9IGIpIHtcclxuICAgICAgICB5LnMgPSAtYjtcclxuICAgICAgICByZXR1cm4geC5taW51cyh5KTtcclxuICAgICAgfVxyXG5cclxuICAgICAgdmFyIHhlID0geC5lIC8gTE9HX0JBU0UsXHJcbiAgICAgICAgeWUgPSB5LmUgLyBMT0dfQkFTRSxcclxuICAgICAgICB4YyA9IHguYyxcclxuICAgICAgICB5YyA9IHkuYztcclxuXHJcbiAgICAgIGlmICgheGUgfHwgIXllKSB7XHJcblxyXG4gICAgICAgIC8vIFJldHVybiDCsUluZmluaXR5IGlmIGVpdGhlciDCsUluZmluaXR5LlxyXG4gICAgICAgIGlmICgheGMgfHwgIXljKSByZXR1cm4gbmV3IEJpZ051bWJlcihhIC8gMCk7XHJcblxyXG4gICAgICAgIC8vIEVpdGhlciB6ZXJvP1xyXG4gICAgICAgIC8vIFJldHVybiB5IGlmIHkgaXMgbm9uLXplcm8sIHggaWYgeCBpcyBub24temVybywgb3IgemVybyBpZiBib3RoIGFyZSB6ZXJvLlxyXG4gICAgICAgIGlmICgheGNbMF0gfHwgIXljWzBdKSByZXR1cm4geWNbMF0gPyB5IDogbmV3IEJpZ051bWJlcih4Y1swXSA/IHggOiBhICogMCk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHhlID0gYml0Rmxvb3IoeGUpO1xyXG4gICAgICB5ZSA9IGJpdEZsb29yKHllKTtcclxuICAgICAgeGMgPSB4Yy5zbGljZSgpO1xyXG5cclxuICAgICAgLy8gUHJlcGVuZCB6ZXJvcyB0byBlcXVhbGlzZSBleHBvbmVudHMuIEZhc3RlciB0byB1c2UgcmV2ZXJzZSB0aGVuIGRvIHVuc2hpZnRzLlxyXG4gICAgICBpZiAoYSA9IHhlIC0geWUpIHtcclxuICAgICAgICBpZiAoYSA+IDApIHtcclxuICAgICAgICAgIHllID0geGU7XHJcbiAgICAgICAgICB0ID0geWM7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGEgPSAtYTtcclxuICAgICAgICAgIHQgPSB4YztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHQucmV2ZXJzZSgpO1xyXG4gICAgICAgIGZvciAoOyBhLS07IHQucHVzaCgwKSk7XHJcbiAgICAgICAgdC5yZXZlcnNlKCk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGEgPSB4Yy5sZW5ndGg7XHJcbiAgICAgIGIgPSB5Yy5sZW5ndGg7XHJcblxyXG4gICAgICAvLyBQb2ludCB4YyB0byB0aGUgbG9uZ2VyIGFycmF5LCBhbmQgYiB0byB0aGUgc2hvcnRlciBsZW5ndGguXHJcbiAgICAgIGlmIChhIC0gYiA8IDApIHQgPSB5YywgeWMgPSB4YywgeGMgPSB0LCBiID0gYTtcclxuXHJcbiAgICAgIC8vIE9ubHkgc3RhcnQgYWRkaW5nIGF0IHljLmxlbmd0aCAtIDEgYXMgdGhlIGZ1cnRoZXIgZGlnaXRzIG9mIHhjIGNhbiBiZSBpZ25vcmVkLlxyXG4gICAgICBmb3IgKGEgPSAwOyBiOykge1xyXG4gICAgICAgIGEgPSAoeGNbLS1iXSA9IHhjW2JdICsgeWNbYl0gKyBhKSAvIEJBU0UgfCAwO1xyXG4gICAgICAgIHhjW2JdID0gQkFTRSA9PT0geGNbYl0gPyAwIDogeGNbYl0gJSBCQVNFO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoYSkge1xyXG4gICAgICAgIHhjID0gW2FdLmNvbmNhdCh4Yyk7XHJcbiAgICAgICAgKyt5ZTtcclxuICAgICAgfVxyXG5cclxuICAgICAgLy8gTm8gbmVlZCB0byBjaGVjayBmb3IgemVybywgYXMgK3ggKyAreSAhPSAwICYmIC14ICsgLXkgIT0gMFxyXG4gICAgICAvLyB5ZSA9IE1BWF9FWFAgKyAxIHBvc3NpYmxlXHJcbiAgICAgIHJldHVybiBub3JtYWxpc2UoeSwgeGMsIHllKTtcclxuICAgIH07XHJcblxyXG5cclxuICAgIC8qXHJcbiAgICAgKiBJZiBzZCBpcyB1bmRlZmluZWQgb3IgbnVsbCBvciB0cnVlIG9yIGZhbHNlLCByZXR1cm4gdGhlIG51bWJlciBvZiBzaWduaWZpY2FudCBkaWdpdHMgb2ZcclxuICAgICAqIHRoZSB2YWx1ZSBvZiB0aGlzIEJpZ051bWJlciwgb3IgbnVsbCBpZiB0aGUgdmFsdWUgb2YgdGhpcyBCaWdOdW1iZXIgaXMgwrFJbmZpbml0eSBvciBOYU4uXHJcbiAgICAgKiBJZiBzZCBpcyB0cnVlIGluY2x1ZGUgaW50ZWdlci1wYXJ0IHRyYWlsaW5nIHplcm9zIGluIHRoZSBjb3VudC5cclxuICAgICAqXHJcbiAgICAgKiBPdGhlcndpc2UsIGlmIHNkIGlzIGEgbnVtYmVyLCByZXR1cm4gYSBuZXcgQmlnTnVtYmVyIHdob3NlIHZhbHVlIGlzIHRoZSB2YWx1ZSBvZiB0aGlzXHJcbiAgICAgKiBCaWdOdW1iZXIgcm91bmRlZCB0byBhIG1heGltdW0gb2Ygc2Qgc2lnbmlmaWNhbnQgZGlnaXRzIHVzaW5nIHJvdW5kaW5nIG1vZGUgcm0sIG9yXHJcbiAgICAgKiBST1VORElOR19NT0RFIGlmIHJtIGlzIG9taXR0ZWQuXHJcbiAgICAgKlxyXG4gICAgICogc2Qge251bWJlcnxib29sZWFufSBudW1iZXI6IHNpZ25pZmljYW50IGRpZ2l0czogaW50ZWdlciwgMSB0byBNQVggaW5jbHVzaXZlLlxyXG4gICAgICogICAgICAgICAgICAgICAgICAgICBib29sZWFuOiB3aGV0aGVyIHRvIGNvdW50IGludGVnZXItcGFydCB0cmFpbGluZyB6ZXJvczogdHJ1ZSBvciBmYWxzZS5cclxuICAgICAqIFtybV0ge251bWJlcn0gUm91bmRpbmcgbW9kZS4gSW50ZWdlciwgMCB0byA4IGluY2x1c2l2ZS5cclxuICAgICAqXHJcbiAgICAgKiAnW0JpZ051bWJlciBFcnJvcl0gQXJndW1lbnQge25vdCBhIHByaW1pdGl2ZSBudW1iZXJ8bm90IGFuIGludGVnZXJ8b3V0IG9mIHJhbmdlfToge3NkfHJtfSdcclxuICAgICAqL1xyXG4gICAgUC5wcmVjaXNpb24gPSBQLnNkID0gZnVuY3Rpb24gKHNkLCBybSkge1xyXG4gICAgICB2YXIgYywgbiwgdixcclxuICAgICAgICB4ID0gdGhpcztcclxuXHJcbiAgICAgIGlmIChzZCAhPSBudWxsICYmIHNkICE9PSAhIXNkKSB7XHJcbiAgICAgICAgaW50Q2hlY2soc2QsIDEsIE1BWCk7XHJcbiAgICAgICAgaWYgKHJtID09IG51bGwpIHJtID0gUk9VTkRJTkdfTU9ERTtcclxuICAgICAgICBlbHNlIGludENoZWNrKHJtLCAwLCA4KTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHJvdW5kKG5ldyBCaWdOdW1iZXIoeCksIHNkLCBybSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmICghKGMgPSB4LmMpKSByZXR1cm4gbnVsbDtcclxuICAgICAgdiA9IGMubGVuZ3RoIC0gMTtcclxuICAgICAgbiA9IHYgKiBMT0dfQkFTRSArIDE7XHJcblxyXG4gICAgICBpZiAodiA9IGNbdl0pIHtcclxuXHJcbiAgICAgICAgLy8gU3VidHJhY3QgdGhlIG51bWJlciBvZiB0cmFpbGluZyB6ZXJvcyBvZiB0aGUgbGFzdCBlbGVtZW50LlxyXG4gICAgICAgIGZvciAoOyB2ICUgMTAgPT0gMDsgdiAvPSAxMCwgbi0tKTtcclxuXHJcbiAgICAgICAgLy8gQWRkIHRoZSBudW1iZXIgb2YgZGlnaXRzIG9mIHRoZSBmaXJzdCBlbGVtZW50LlxyXG4gICAgICAgIGZvciAodiA9IGNbMF07IHYgPj0gMTA7IHYgLz0gMTAsIG4rKyk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmIChzZCAmJiB4LmUgKyAxID4gbikgbiA9IHguZSArIDE7XHJcblxyXG4gICAgICByZXR1cm4gbjtcclxuICAgIH07XHJcblxyXG5cclxuICAgIC8qXHJcbiAgICAgKiBSZXR1cm4gYSBuZXcgQmlnTnVtYmVyIHdob3NlIHZhbHVlIGlzIHRoZSB2YWx1ZSBvZiB0aGlzIEJpZ051bWJlciBzaGlmdGVkIGJ5IGsgcGxhY2VzXHJcbiAgICAgKiAocG93ZXJzIG9mIDEwKS4gU2hpZnQgdG8gdGhlIHJpZ2h0IGlmIG4gPiAwLCBhbmQgdG8gdGhlIGxlZnQgaWYgbiA8IDAuXHJcbiAgICAgKlxyXG4gICAgICogayB7bnVtYmVyfSBJbnRlZ2VyLCAtTUFYX1NBRkVfSU5URUdFUiB0byBNQVhfU0FGRV9JTlRFR0VSIGluY2x1c2l2ZS5cclxuICAgICAqXHJcbiAgICAgKiAnW0JpZ051bWJlciBFcnJvcl0gQXJndW1lbnQge25vdCBhIHByaW1pdGl2ZSBudW1iZXJ8bm90IGFuIGludGVnZXJ8b3V0IG9mIHJhbmdlfToge2t9J1xyXG4gICAgICovXHJcbiAgICBQLnNoaWZ0ZWRCeSA9IGZ1bmN0aW9uIChrKSB7XHJcbiAgICAgIGludENoZWNrKGssIC1NQVhfU0FGRV9JTlRFR0VSLCBNQVhfU0FGRV9JTlRFR0VSKTtcclxuICAgICAgcmV0dXJuIHRoaXMudGltZXMoJzFlJyArIGspO1xyXG4gICAgfTtcclxuXHJcblxyXG4gICAgLypcclxuICAgICAqICBzcXJ0KC1uKSA9ICBOXHJcbiAgICAgKiAgc3FydChOKSA9ICBOXHJcbiAgICAgKiAgc3FydCgtSSkgPSAgTlxyXG4gICAgICogIHNxcnQoSSkgPSAgSVxyXG4gICAgICogIHNxcnQoMCkgPSAgMFxyXG4gICAgICogIHNxcnQoLTApID0gLTBcclxuICAgICAqXHJcbiAgICAgKiBSZXR1cm4gYSBuZXcgQmlnTnVtYmVyIHdob3NlIHZhbHVlIGlzIHRoZSBzcXVhcmUgcm9vdCBvZiB0aGUgdmFsdWUgb2YgdGhpcyBCaWdOdW1iZXIsXHJcbiAgICAgKiByb3VuZGVkIGFjY29yZGluZyB0byBERUNJTUFMX1BMQUNFUyBhbmQgUk9VTkRJTkdfTU9ERS5cclxuICAgICAqL1xyXG4gICAgUC5zcXVhcmVSb290ID0gUC5zcXJ0ID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICB2YXIgbSwgbiwgciwgcmVwLCB0LFxyXG4gICAgICAgIHggPSB0aGlzLFxyXG4gICAgICAgIGMgPSB4LmMsXHJcbiAgICAgICAgcyA9IHgucyxcclxuICAgICAgICBlID0geC5lLFxyXG4gICAgICAgIGRwID0gREVDSU1BTF9QTEFDRVMgKyA0LFxyXG4gICAgICAgIGhhbGYgPSBuZXcgQmlnTnVtYmVyKCcwLjUnKTtcclxuXHJcbiAgICAgIC8vIE5lZ2F0aXZlL05hTi9JbmZpbml0eS96ZXJvP1xyXG4gICAgICBpZiAocyAhPT0gMSB8fCAhYyB8fCAhY1swXSkge1xyXG4gICAgICAgIHJldHVybiBuZXcgQmlnTnVtYmVyKCFzIHx8IHMgPCAwICYmICghYyB8fCBjWzBdKSA/IE5hTiA6IGMgPyB4IDogMSAvIDApO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyBJbml0aWFsIGVzdGltYXRlLlxyXG4gICAgICBzID0gTWF0aC5zcXJ0KCt2YWx1ZU9mKHgpKTtcclxuXHJcbiAgICAgIC8vIE1hdGguc3FydCB1bmRlcmZsb3cvb3ZlcmZsb3c/XHJcbiAgICAgIC8vIFBhc3MgeCB0byBNYXRoLnNxcnQgYXMgaW50ZWdlciwgdGhlbiBhZGp1c3QgdGhlIGV4cG9uZW50IG9mIHRoZSByZXN1bHQuXHJcbiAgICAgIGlmIChzID09IDAgfHwgcyA9PSAxIC8gMCkge1xyXG4gICAgICAgIG4gPSBjb2VmZlRvU3RyaW5nKGMpO1xyXG4gICAgICAgIGlmICgobi5sZW5ndGggKyBlKSAlIDIgPT0gMCkgbiArPSAnMCc7XHJcbiAgICAgICAgcyA9IE1hdGguc3FydCgrbik7XHJcbiAgICAgICAgZSA9IGJpdEZsb29yKChlICsgMSkgLyAyKSAtIChlIDwgMCB8fCBlICUgMik7XHJcblxyXG4gICAgICAgIGlmIChzID09IDEgLyAwKSB7XHJcbiAgICAgICAgICBuID0gJzVlJyArIGU7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIG4gPSBzLnRvRXhwb25lbnRpYWwoKTtcclxuICAgICAgICAgIG4gPSBuLnNsaWNlKDAsIG4uaW5kZXhPZignZScpICsgMSkgKyBlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgciA9IG5ldyBCaWdOdW1iZXIobik7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgciA9IG5ldyBCaWdOdW1iZXIocyArICcnKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgLy8gQ2hlY2sgZm9yIHplcm8uXHJcbiAgICAgIC8vIHIgY291bGQgYmUgemVybyBpZiBNSU5fRVhQIGlzIGNoYW5nZWQgYWZ0ZXIgdGhlIHRoaXMgdmFsdWUgd2FzIGNyZWF0ZWQuXHJcbiAgICAgIC8vIFRoaXMgd291bGQgY2F1c2UgYSBkaXZpc2lvbiBieSB6ZXJvICh4L3QpIGFuZCBoZW5jZSBJbmZpbml0eSBiZWxvdywgd2hpY2ggd291bGQgY2F1c2VcclxuICAgICAgLy8gY29lZmZUb1N0cmluZyB0byB0aHJvdy5cclxuICAgICAgaWYgKHIuY1swXSkge1xyXG4gICAgICAgIGUgPSByLmU7XHJcbiAgICAgICAgcyA9IGUgKyBkcDtcclxuICAgICAgICBpZiAocyA8IDMpIHMgPSAwO1xyXG5cclxuICAgICAgICAvLyBOZXd0b24tUmFwaHNvbiBpdGVyYXRpb24uXHJcbiAgICAgICAgZm9yICg7IDspIHtcclxuICAgICAgICAgIHQgPSByO1xyXG4gICAgICAgICAgciA9IGhhbGYudGltZXModC5wbHVzKGRpdih4LCB0LCBkcCwgMSkpKTtcclxuXHJcbiAgICAgICAgICBpZiAoY29lZmZUb1N0cmluZyh0LmMpLnNsaWNlKDAsIHMpID09PSAobiA9IGNvZWZmVG9TdHJpbmcoci5jKSkuc2xpY2UoMCwgcykpIHtcclxuXHJcbiAgICAgICAgICAgIC8vIFRoZSBleHBvbmVudCBvZiByIG1heSBoZXJlIGJlIG9uZSBsZXNzIHRoYW4gdGhlIGZpbmFsIHJlc3VsdCBleHBvbmVudCxcclxuICAgICAgICAgICAgLy8gZS5nIDAuMDAwOTk5OSAoZS00KSAtLT4gMC4wMDEgKGUtMyksIHNvIGFkanVzdCBzIHNvIHRoZSByb3VuZGluZyBkaWdpdHNcclxuICAgICAgICAgICAgLy8gYXJlIGluZGV4ZWQgY29ycmVjdGx5LlxyXG4gICAgICAgICAgICBpZiAoci5lIDwgZSkgLS1zO1xyXG4gICAgICAgICAgICBuID0gbi5zbGljZShzIC0gMywgcyArIDEpO1xyXG5cclxuICAgICAgICAgICAgLy8gVGhlIDR0aCByb3VuZGluZyBkaWdpdCBtYXkgYmUgaW4gZXJyb3IgYnkgLTEgc28gaWYgdGhlIDQgcm91bmRpbmcgZGlnaXRzXHJcbiAgICAgICAgICAgIC8vIGFyZSA5OTk5IG9yIDQ5OTkgKGkuZS4gYXBwcm9hY2hpbmcgYSByb3VuZGluZyBib3VuZGFyeSkgY29udGludWUgdGhlXHJcbiAgICAgICAgICAgIC8vIGl0ZXJhdGlvbi5cclxuICAgICAgICAgICAgaWYgKG4gPT0gJzk5OTknIHx8ICFyZXAgJiYgbiA9PSAnNDk5OScpIHtcclxuXHJcbiAgICAgICAgICAgICAgLy8gT24gdGhlIGZpcnN0IGl0ZXJhdGlvbiBvbmx5LCBjaGVjayB0byBzZWUgaWYgcm91bmRpbmcgdXAgZ2l2ZXMgdGhlXHJcbiAgICAgICAgICAgICAgLy8gZXhhY3QgcmVzdWx0IGFzIHRoZSBuaW5lcyBtYXkgaW5maW5pdGVseSByZXBlYXQuXHJcbiAgICAgICAgICAgICAgaWYgKCFyZXApIHtcclxuICAgICAgICAgICAgICAgIHJvdW5kKHQsIHQuZSArIERFQ0lNQUxfUExBQ0VTICsgMiwgMCk7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKHQudGltZXModCkuZXEoeCkpIHtcclxuICAgICAgICAgICAgICAgICAgciA9IHQ7XHJcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgZHAgKz0gNDtcclxuICAgICAgICAgICAgICBzICs9IDQ7XHJcbiAgICAgICAgICAgICAgcmVwID0gMTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuXHJcbiAgICAgICAgICAgICAgLy8gSWYgcm91bmRpbmcgZGlnaXRzIGFyZSBudWxsLCAwezAsNH0gb3IgNTB7MCwzfSwgY2hlY2sgZm9yIGV4YWN0XHJcbiAgICAgICAgICAgICAgLy8gcmVzdWx0LiBJZiBub3QsIHRoZW4gdGhlcmUgYXJlIGZ1cnRoZXIgZGlnaXRzIGFuZCBtIHdpbGwgYmUgdHJ1dGh5LlxyXG4gICAgICAgICAgICAgIGlmICghK24gfHwgIStuLnNsaWNlKDEpICYmIG4uY2hhckF0KDApID09ICc1Jykge1xyXG5cclxuICAgICAgICAgICAgICAgIC8vIFRydW5jYXRlIHRvIHRoZSBmaXJzdCByb3VuZGluZyBkaWdpdC5cclxuICAgICAgICAgICAgICAgIHJvdW5kKHIsIHIuZSArIERFQ0lNQUxfUExBQ0VTICsgMiwgMSk7XHJcbiAgICAgICAgICAgICAgICBtID0gIXIudGltZXMocikuZXEoeCk7XHJcbiAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgcmV0dXJuIHJvdW5kKHIsIHIuZSArIERFQ0lNQUxfUExBQ0VTICsgMSwgUk9VTkRJTkdfTU9ERSwgbSk7XHJcbiAgICB9O1xyXG5cclxuXHJcbiAgICAvKlxyXG4gICAgICogUmV0dXJuIGEgc3RyaW5nIHJlcHJlc2VudGluZyB0aGUgdmFsdWUgb2YgdGhpcyBCaWdOdW1iZXIgaW4gZXhwb25lbnRpYWwgbm90YXRpb24gYW5kXHJcbiAgICAgKiByb3VuZGVkIHVzaW5nIFJPVU5ESU5HX01PREUgdG8gZHAgZml4ZWQgZGVjaW1hbCBwbGFjZXMuXHJcbiAgICAgKlxyXG4gICAgICogW2RwXSB7bnVtYmVyfSBEZWNpbWFsIHBsYWNlcy4gSW50ZWdlciwgMCB0byBNQVggaW5jbHVzaXZlLlxyXG4gICAgICogW3JtXSB7bnVtYmVyfSBSb3VuZGluZyBtb2RlLiBJbnRlZ2VyLCAwIHRvIDggaW5jbHVzaXZlLlxyXG4gICAgICpcclxuICAgICAqICdbQmlnTnVtYmVyIEVycm9yXSBBcmd1bWVudCB7bm90IGEgcHJpbWl0aXZlIG51bWJlcnxub3QgYW4gaW50ZWdlcnxvdXQgb2YgcmFuZ2V9OiB7ZHB8cm19J1xyXG4gICAgICovXHJcbiAgICBQLnRvRXhwb25lbnRpYWwgPSBmdW5jdGlvbiAoZHAsIHJtKSB7XHJcbiAgICAgIGlmIChkcCAhPSBudWxsKSB7XHJcbiAgICAgICAgaW50Q2hlY2soZHAsIDAsIE1BWCk7XHJcbiAgICAgICAgZHArKztcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gZm9ybWF0KHRoaXMsIGRwLCBybSwgMSk7XHJcbiAgICB9O1xyXG5cclxuXHJcbiAgICAvKlxyXG4gICAgICogUmV0dXJuIGEgc3RyaW5nIHJlcHJlc2VudGluZyB0aGUgdmFsdWUgb2YgdGhpcyBCaWdOdW1iZXIgaW4gZml4ZWQtcG9pbnQgbm90YXRpb24gcm91bmRpbmdcclxuICAgICAqIHRvIGRwIGZpeGVkIGRlY2ltYWwgcGxhY2VzIHVzaW5nIHJvdW5kaW5nIG1vZGUgcm0sIG9yIFJPVU5ESU5HX01PREUgaWYgcm0gaXMgb21pdHRlZC5cclxuICAgICAqXHJcbiAgICAgKiBOb3RlOiBhcyB3aXRoIEphdmFTY3JpcHQncyBudW1iZXIgdHlwZSwgKC0wKS50b0ZpeGVkKDApIGlzICcwJyxcclxuICAgICAqIGJ1dCBlLmcuICgtMC4wMDAwMSkudG9GaXhlZCgwKSBpcyAnLTAnLlxyXG4gICAgICpcclxuICAgICAqIFtkcF0ge251bWJlcn0gRGVjaW1hbCBwbGFjZXMuIEludGVnZXIsIDAgdG8gTUFYIGluY2x1c2l2ZS5cclxuICAgICAqIFtybV0ge251bWJlcn0gUm91bmRpbmcgbW9kZS4gSW50ZWdlciwgMCB0byA4IGluY2x1c2l2ZS5cclxuICAgICAqXHJcbiAgICAgKiAnW0JpZ051bWJlciBFcnJvcl0gQXJndW1lbnQge25vdCBhIHByaW1pdGl2ZSBudW1iZXJ8bm90IGFuIGludGVnZXJ8b3V0IG9mIHJhbmdlfToge2RwfHJtfSdcclxuICAgICAqL1xyXG4gICAgUC50b0ZpeGVkID0gZnVuY3Rpb24gKGRwLCBybSkge1xyXG4gICAgICBpZiAoZHAgIT0gbnVsbCkge1xyXG4gICAgICAgIGludENoZWNrKGRwLCAwLCBNQVgpO1xyXG4gICAgICAgIGRwID0gZHAgKyB0aGlzLmUgKyAxO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiBmb3JtYXQodGhpcywgZHAsIHJtKTtcclxuICAgIH07XHJcblxyXG5cclxuICAgIC8qXHJcbiAgICAgKiBSZXR1cm4gYSBzdHJpbmcgcmVwcmVzZW50aW5nIHRoZSB2YWx1ZSBvZiB0aGlzIEJpZ051bWJlciBpbiBmaXhlZC1wb2ludCBub3RhdGlvbiByb3VuZGVkXHJcbiAgICAgKiB1c2luZyBybSBvciBST1VORElOR19NT0RFIHRvIGRwIGRlY2ltYWwgcGxhY2VzLCBhbmQgZm9ybWF0dGVkIGFjY29yZGluZyB0byB0aGUgcHJvcGVydGllc1xyXG4gICAgICogb2YgdGhlIGZvcm1hdCBvciBGT1JNQVQgb2JqZWN0IChzZWUgQmlnTnVtYmVyLnNldCkuXHJcbiAgICAgKlxyXG4gICAgICogVGhlIGZvcm1hdHRpbmcgb2JqZWN0IG1heSBjb250YWluIHNvbWUgb3IgYWxsIG9mIHRoZSBwcm9wZXJ0aWVzIHNob3duIGJlbG93LlxyXG4gICAgICpcclxuICAgICAqIEZPUk1BVCA9IHtcclxuICAgICAqICAgcHJlZml4OiAnJyxcclxuICAgICAqICAgZ3JvdXBTaXplOiAzLFxyXG4gICAgICogICBzZWNvbmRhcnlHcm91cFNpemU6IDAsXHJcbiAgICAgKiAgIGdyb3VwU2VwYXJhdG9yOiAnLCcsXHJcbiAgICAgKiAgIGRlY2ltYWxTZXBhcmF0b3I6ICcuJyxcclxuICAgICAqICAgZnJhY3Rpb25Hcm91cFNpemU6IDAsXHJcbiAgICAgKiAgIGZyYWN0aW9uR3JvdXBTZXBhcmF0b3I6ICdcXHhBMCcsICAgICAgLy8gbm9uLWJyZWFraW5nIHNwYWNlXHJcbiAgICAgKiAgIHN1ZmZpeDogJydcclxuICAgICAqIH07XHJcbiAgICAgKlxyXG4gICAgICogW2RwXSB7bnVtYmVyfSBEZWNpbWFsIHBsYWNlcy4gSW50ZWdlciwgMCB0byBNQVggaW5jbHVzaXZlLlxyXG4gICAgICogW3JtXSB7bnVtYmVyfSBSb3VuZGluZyBtb2RlLiBJbnRlZ2VyLCAwIHRvIDggaW5jbHVzaXZlLlxyXG4gICAgICogW2Zvcm1hdF0ge29iamVjdH0gRm9ybWF0dGluZyBvcHRpb25zLiBTZWUgRk9STUFUIHBiamVjdCBhYm92ZS5cclxuICAgICAqXHJcbiAgICAgKiAnW0JpZ051bWJlciBFcnJvcl0gQXJndW1lbnQge25vdCBhIHByaW1pdGl2ZSBudW1iZXJ8bm90IGFuIGludGVnZXJ8b3V0IG9mIHJhbmdlfToge2RwfHJtfSdcclxuICAgICAqICdbQmlnTnVtYmVyIEVycm9yXSBBcmd1bWVudCBub3QgYW4gb2JqZWN0OiB7Zm9ybWF0fSdcclxuICAgICAqL1xyXG4gICAgUC50b0Zvcm1hdCA9IGZ1bmN0aW9uIChkcCwgcm0sIGZvcm1hdCkge1xyXG4gICAgICB2YXIgc3RyLFxyXG4gICAgICAgIHggPSB0aGlzO1xyXG5cclxuICAgICAgaWYgKGZvcm1hdCA9PSBudWxsKSB7XHJcbiAgICAgICAgaWYgKGRwICE9IG51bGwgJiYgcm0gJiYgdHlwZW9mIHJtID09ICdvYmplY3QnKSB7XHJcbiAgICAgICAgICBmb3JtYXQgPSBybTtcclxuICAgICAgICAgIHJtID0gbnVsbDtcclxuICAgICAgICB9IGVsc2UgaWYgKGRwICYmIHR5cGVvZiBkcCA9PSAnb2JqZWN0Jykge1xyXG4gICAgICAgICAgZm9ybWF0ID0gZHA7XHJcbiAgICAgICAgICBkcCA9IHJtID0gbnVsbDtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgZm9ybWF0ID0gRk9STUFUO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIGlmICh0eXBlb2YgZm9ybWF0ICE9ICdvYmplY3QnKSB7XHJcbiAgICAgICAgdGhyb3cgRXJyb3JcclxuICAgICAgICAgIChiaWdudW1iZXJFcnJvciArICdBcmd1bWVudCBub3QgYW4gb2JqZWN0OiAnICsgZm9ybWF0KTtcclxuICAgICAgfVxyXG5cclxuICAgICAgc3RyID0geC50b0ZpeGVkKGRwLCBybSk7XHJcblxyXG4gICAgICBpZiAoeC5jKSB7XHJcbiAgICAgICAgdmFyIGksXHJcbiAgICAgICAgICBhcnIgPSBzdHIuc3BsaXQoJy4nKSxcclxuICAgICAgICAgIGcxID0gK2Zvcm1hdC5ncm91cFNpemUsXHJcbiAgICAgICAgICBnMiA9ICtmb3JtYXQuc2Vjb25kYXJ5R3JvdXBTaXplLFxyXG4gICAgICAgICAgZ3JvdXBTZXBhcmF0b3IgPSBmb3JtYXQuZ3JvdXBTZXBhcmF0b3IgfHwgJycsXHJcbiAgICAgICAgICBpbnRQYXJ0ID0gYXJyWzBdLFxyXG4gICAgICAgICAgZnJhY3Rpb25QYXJ0ID0gYXJyWzFdLFxyXG4gICAgICAgICAgaXNOZWcgPSB4LnMgPCAwLFxyXG4gICAgICAgICAgaW50RGlnaXRzID0gaXNOZWcgPyBpbnRQYXJ0LnNsaWNlKDEpIDogaW50UGFydCxcclxuICAgICAgICAgIGxlbiA9IGludERpZ2l0cy5sZW5ndGg7XHJcblxyXG4gICAgICAgIGlmIChnMikgaSA9IGcxLCBnMSA9IGcyLCBnMiA9IGksIGxlbiAtPSBpO1xyXG5cclxuICAgICAgICBpZiAoZzEgPiAwICYmIGxlbiA+IDApIHtcclxuICAgICAgICAgIGkgPSBsZW4gJSBnMSB8fCBnMTtcclxuICAgICAgICAgIGludFBhcnQgPSBpbnREaWdpdHMuc3Vic3RyKDAsIGkpO1xyXG4gICAgICAgICAgZm9yICg7IGkgPCBsZW47IGkgKz0gZzEpIGludFBhcnQgKz0gZ3JvdXBTZXBhcmF0b3IgKyBpbnREaWdpdHMuc3Vic3RyKGksIGcxKTtcclxuICAgICAgICAgIGlmIChnMiA+IDApIGludFBhcnQgKz0gZ3JvdXBTZXBhcmF0b3IgKyBpbnREaWdpdHMuc2xpY2UoaSk7XHJcbiAgICAgICAgICBpZiAoaXNOZWcpIGludFBhcnQgPSAnLScgKyBpbnRQYXJ0O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgc3RyID0gZnJhY3Rpb25QYXJ0XHJcbiAgICAgICAgID8gaW50UGFydCArIChmb3JtYXQuZGVjaW1hbFNlcGFyYXRvciB8fCAnJykgKyAoKGcyID0gK2Zvcm1hdC5mcmFjdGlvbkdyb3VwU2l6ZSlcclxuICAgICAgICAgID8gZnJhY3Rpb25QYXJ0LnJlcGxhY2UobmV3IFJlZ0V4cCgnXFxcXGR7JyArIGcyICsgJ31cXFxcQicsICdnJyksXHJcbiAgICAgICAgICAgJyQmJyArIChmb3JtYXQuZnJhY3Rpb25Hcm91cFNlcGFyYXRvciB8fCAnJykpXHJcbiAgICAgICAgICA6IGZyYWN0aW9uUGFydClcclxuICAgICAgICAgOiBpbnRQYXJ0O1xyXG4gICAgICB9XHJcblxyXG4gICAgICByZXR1cm4gKGZvcm1hdC5wcmVmaXggfHwgJycpICsgc3RyICsgKGZvcm1hdC5zdWZmaXggfHwgJycpO1xyXG4gICAgfTtcclxuXHJcblxyXG4gICAgLypcclxuICAgICAqIFJldHVybiBhbiBhcnJheSBvZiB0d28gQmlnTnVtYmVycyByZXByZXNlbnRpbmcgdGhlIHZhbHVlIG9mIHRoaXMgQmlnTnVtYmVyIGFzIGEgc2ltcGxlXHJcbiAgICAgKiBmcmFjdGlvbiB3aXRoIGFuIGludGVnZXIgbnVtZXJhdG9yIGFuZCBhbiBpbnRlZ2VyIGRlbm9taW5hdG9yLlxyXG4gICAgICogVGhlIGRlbm9taW5hdG9yIHdpbGwgYmUgYSBwb3NpdGl2ZSBub24temVybyB2YWx1ZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gdGhlIHNwZWNpZmllZFxyXG4gICAgICogbWF4aW11bSBkZW5vbWluYXRvci4gSWYgYSBtYXhpbXVtIGRlbm9taW5hdG9yIGlzIG5vdCBzcGVjaWZpZWQsIHRoZSBkZW5vbWluYXRvciB3aWxsIGJlXHJcbiAgICAgKiB0aGUgbG93ZXN0IHZhbHVlIG5lY2Vzc2FyeSB0byByZXByZXNlbnQgdGhlIG51bWJlciBleGFjdGx5LlxyXG4gICAgICpcclxuICAgICAqIFttZF0ge251bWJlcnxzdHJpbmd8QmlnTnVtYmVyfSBJbnRlZ2VyID49IDEsIG9yIEluZmluaXR5LiBUaGUgbWF4aW11bSBkZW5vbWluYXRvci5cclxuICAgICAqXHJcbiAgICAgKiAnW0JpZ051bWJlciBFcnJvcl0gQXJndW1lbnQge25vdCBhbiBpbnRlZ2VyfG91dCBvZiByYW5nZX0gOiB7bWR9J1xyXG4gICAgICovXHJcbiAgICBQLnRvRnJhY3Rpb24gPSBmdW5jdGlvbiAobWQpIHtcclxuICAgICAgdmFyIGQsIGQwLCBkMSwgZDIsIGUsIGV4cCwgbiwgbjAsIG4xLCBxLCByLCBzLFxyXG4gICAgICAgIHggPSB0aGlzLFxyXG4gICAgICAgIHhjID0geC5jO1xyXG5cclxuICAgICAgaWYgKG1kICE9IG51bGwpIHtcclxuICAgICAgICBuID0gbmV3IEJpZ051bWJlcihtZCk7XHJcblxyXG4gICAgICAgIC8vIFRocm93IGlmIG1kIGlzIGxlc3MgdGhhbiBvbmUgb3IgaXMgbm90IGFuIGludGVnZXIsIHVubGVzcyBpdCBpcyBJbmZpbml0eS5cclxuICAgICAgICBpZiAoIW4uaXNJbnRlZ2VyKCkgJiYgKG4uYyB8fCBuLnMgIT09IDEpIHx8IG4ubHQoT05FKSkge1xyXG4gICAgICAgICAgdGhyb3cgRXJyb3JcclxuICAgICAgICAgICAgKGJpZ251bWJlckVycm9yICsgJ0FyZ3VtZW50ICcgK1xyXG4gICAgICAgICAgICAgIChuLmlzSW50ZWdlcigpID8gJ291dCBvZiByYW5nZTogJyA6ICdub3QgYW4gaW50ZWdlcjogJykgKyB2YWx1ZU9mKG4pKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmICgheGMpIHJldHVybiBuZXcgQmlnTnVtYmVyKHgpO1xyXG5cclxuICAgICAgZCA9IG5ldyBCaWdOdW1iZXIoT05FKTtcclxuICAgICAgbjEgPSBkMCA9IG5ldyBCaWdOdW1iZXIoT05FKTtcclxuICAgICAgZDEgPSBuMCA9IG5ldyBCaWdOdW1iZXIoT05FKTtcclxuICAgICAgcyA9IGNvZWZmVG9TdHJpbmcoeGMpO1xyXG5cclxuICAgICAgLy8gRGV0ZXJtaW5lIGluaXRpYWwgZGVub21pbmF0b3IuXHJcbiAgICAgIC8vIGQgaXMgYSBwb3dlciBvZiAxMCBhbmQgdGhlIG1pbmltdW0gbWF4IGRlbm9taW5hdG9yIHRoYXQgc3BlY2lmaWVzIHRoZSB2YWx1ZSBleGFjdGx5LlxyXG4gICAgICBlID0gZC5lID0gcy5sZW5ndGggLSB4LmUgLSAxO1xyXG4gICAgICBkLmNbMF0gPSBQT1dTX1RFTlsoZXhwID0gZSAlIExPR19CQVNFKSA8IDAgPyBMT0dfQkFTRSArIGV4cCA6IGV4cF07XHJcbiAgICAgIG1kID0gIW1kIHx8IG4uY29tcGFyZWRUbyhkKSA+IDAgPyAoZSA+IDAgPyBkIDogbjEpIDogbjtcclxuXHJcbiAgICAgIGV4cCA9IE1BWF9FWFA7XHJcbiAgICAgIE1BWF9FWFAgPSAxIC8gMDtcclxuICAgICAgbiA9IG5ldyBCaWdOdW1iZXIocyk7XHJcblxyXG4gICAgICAvLyBuMCA9IGQxID0gMFxyXG4gICAgICBuMC5jWzBdID0gMDtcclxuXHJcbiAgICAgIGZvciAoOyA7KSAge1xyXG4gICAgICAgIHEgPSBkaXYobiwgZCwgMCwgMSk7XHJcbiAgICAgICAgZDIgPSBkMC5wbHVzKHEudGltZXMoZDEpKTtcclxuICAgICAgICBpZiAoZDIuY29tcGFyZWRUbyhtZCkgPT0gMSkgYnJlYWs7XHJcbiAgICAgICAgZDAgPSBkMTtcclxuICAgICAgICBkMSA9IGQyO1xyXG4gICAgICAgIG4xID0gbjAucGx1cyhxLnRpbWVzKGQyID0gbjEpKTtcclxuICAgICAgICBuMCA9IGQyO1xyXG4gICAgICAgIGQgPSBuLm1pbnVzKHEudGltZXMoZDIgPSBkKSk7XHJcbiAgICAgICAgbiA9IGQyO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBkMiA9IGRpdihtZC5taW51cyhkMCksIGQxLCAwLCAxKTtcclxuICAgICAgbjAgPSBuMC5wbHVzKGQyLnRpbWVzKG4xKSk7XHJcbiAgICAgIGQwID0gZDAucGx1cyhkMi50aW1lcyhkMSkpO1xyXG4gICAgICBuMC5zID0gbjEucyA9IHgucztcclxuICAgICAgZSA9IGUgKiAyO1xyXG5cclxuICAgICAgLy8gRGV0ZXJtaW5lIHdoaWNoIGZyYWN0aW9uIGlzIGNsb3NlciB0byB4LCBuMC9kMCBvciBuMS9kMVxyXG4gICAgICByID0gZGl2KG4xLCBkMSwgZSwgUk9VTkRJTkdfTU9ERSkubWludXMoeCkuYWJzKCkuY29tcGFyZWRUbyhcclxuICAgICAgICAgIGRpdihuMCwgZDAsIGUsIFJPVU5ESU5HX01PREUpLm1pbnVzKHgpLmFicygpKSA8IDEgPyBbbjEsIGQxXSA6IFtuMCwgZDBdO1xyXG5cclxuICAgICAgTUFYX0VYUCA9IGV4cDtcclxuXHJcbiAgICAgIHJldHVybiByO1xyXG4gICAgfTtcclxuXHJcblxyXG4gICAgLypcclxuICAgICAqIFJldHVybiB0aGUgdmFsdWUgb2YgdGhpcyBCaWdOdW1iZXIgY29udmVydGVkIHRvIGEgbnVtYmVyIHByaW1pdGl2ZS5cclxuICAgICAqL1xyXG4gICAgUC50b051bWJlciA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgcmV0dXJuICt2YWx1ZU9mKHRoaXMpO1xyXG4gICAgfTtcclxuXHJcblxyXG4gICAgLypcclxuICAgICAqIFJldHVybiBhIHN0cmluZyByZXByZXNlbnRpbmcgdGhlIHZhbHVlIG9mIHRoaXMgQmlnTnVtYmVyIHJvdW5kZWQgdG8gc2Qgc2lnbmlmaWNhbnQgZGlnaXRzXHJcbiAgICAgKiB1c2luZyByb3VuZGluZyBtb2RlIHJtIG9yIFJPVU5ESU5HX01PREUuIElmIHNkIGlzIGxlc3MgdGhhbiB0aGUgbnVtYmVyIG9mIGRpZ2l0c1xyXG4gICAgICogbmVjZXNzYXJ5IHRvIHJlcHJlc2VudCB0aGUgaW50ZWdlciBwYXJ0IG9mIHRoZSB2YWx1ZSBpbiBmaXhlZC1wb2ludCBub3RhdGlvbiwgdGhlbiB1c2VcclxuICAgICAqIGV4cG9uZW50aWFsIG5vdGF0aW9uLlxyXG4gICAgICpcclxuICAgICAqIFtzZF0ge251bWJlcn0gU2lnbmlmaWNhbnQgZGlnaXRzLiBJbnRlZ2VyLCAxIHRvIE1BWCBpbmNsdXNpdmUuXHJcbiAgICAgKiBbcm1dIHtudW1iZXJ9IFJvdW5kaW5nIG1vZGUuIEludGVnZXIsIDAgdG8gOCBpbmNsdXNpdmUuXHJcbiAgICAgKlxyXG4gICAgICogJ1tCaWdOdW1iZXIgRXJyb3JdIEFyZ3VtZW50IHtub3QgYSBwcmltaXRpdmUgbnVtYmVyfG5vdCBhbiBpbnRlZ2VyfG91dCBvZiByYW5nZX06IHtzZHxybX0nXHJcbiAgICAgKi9cclxuICAgIFAudG9QcmVjaXNpb24gPSBmdW5jdGlvbiAoc2QsIHJtKSB7XHJcbiAgICAgIGlmIChzZCAhPSBudWxsKSBpbnRDaGVjayhzZCwgMSwgTUFYKTtcclxuICAgICAgcmV0dXJuIGZvcm1hdCh0aGlzLCBzZCwgcm0sIDIpO1xyXG4gICAgfTtcclxuXHJcblxyXG4gICAgLypcclxuICAgICAqIFJldHVybiBhIHN0cmluZyByZXByZXNlbnRpbmcgdGhlIHZhbHVlIG9mIHRoaXMgQmlnTnVtYmVyIGluIGJhc2UgYiwgb3IgYmFzZSAxMCBpZiBiIGlzXHJcbiAgICAgKiBvbWl0dGVkLiBJZiBhIGJhc2UgaXMgc3BlY2lmaWVkLCBpbmNsdWRpbmcgYmFzZSAxMCwgcm91bmQgYWNjb3JkaW5nIHRvIERFQ0lNQUxfUExBQ0VTIGFuZFxyXG4gICAgICogUk9VTkRJTkdfTU9ERS4gSWYgYSBiYXNlIGlzIG5vdCBzcGVjaWZpZWQsIGFuZCB0aGlzIEJpZ051bWJlciBoYXMgYSBwb3NpdGl2ZSBleHBvbmVudFxyXG4gICAgICogdGhhdCBpcyBlcXVhbCB0byBvciBncmVhdGVyIHRoYW4gVE9fRVhQX1BPUywgb3IgYSBuZWdhdGl2ZSBleHBvbmVudCBlcXVhbCB0byBvciBsZXNzIHRoYW5cclxuICAgICAqIFRPX0VYUF9ORUcsIHJldHVybiBleHBvbmVudGlhbCBub3RhdGlvbi5cclxuICAgICAqXHJcbiAgICAgKiBbYl0ge251bWJlcn0gSW50ZWdlciwgMiB0byBBTFBIQUJFVC5sZW5ndGggaW5jbHVzaXZlLlxyXG4gICAgICpcclxuICAgICAqICdbQmlnTnVtYmVyIEVycm9yXSBCYXNlIHtub3QgYSBwcmltaXRpdmUgbnVtYmVyfG5vdCBhbiBpbnRlZ2VyfG91dCBvZiByYW5nZX06IHtifSdcclxuICAgICAqL1xyXG4gICAgUC50b1N0cmluZyA9IGZ1bmN0aW9uIChiKSB7XHJcbiAgICAgIHZhciBzdHIsXHJcbiAgICAgICAgbiA9IHRoaXMsXHJcbiAgICAgICAgcyA9IG4ucyxcclxuICAgICAgICBlID0gbi5lO1xyXG5cclxuICAgICAgLy8gSW5maW5pdHkgb3IgTmFOP1xyXG4gICAgICBpZiAoZSA9PT0gbnVsbCkge1xyXG4gICAgICAgIGlmIChzKSB7XHJcbiAgICAgICAgICBzdHIgPSAnSW5maW5pdHknO1xyXG4gICAgICAgICAgaWYgKHMgPCAwKSBzdHIgPSAnLScgKyBzdHI7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHN0ciA9ICdOYU4nO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBpZiAoYiA9PSBudWxsKSB7XHJcbiAgICAgICAgICBzdHIgPSBlIDw9IFRPX0VYUF9ORUcgfHwgZSA+PSBUT19FWFBfUE9TXHJcbiAgICAgICAgICAgPyB0b0V4cG9uZW50aWFsKGNvZWZmVG9TdHJpbmcobi5jKSwgZSlcclxuICAgICAgICAgICA6IHRvRml4ZWRQb2ludChjb2VmZlRvU3RyaW5nKG4uYyksIGUsICcwJyk7XHJcbiAgICAgICAgfSBlbHNlIGlmIChiID09PSAxMCkge1xyXG4gICAgICAgICAgbiA9IHJvdW5kKG5ldyBCaWdOdW1iZXIobiksIERFQ0lNQUxfUExBQ0VTICsgZSArIDEsIFJPVU5ESU5HX01PREUpO1xyXG4gICAgICAgICAgc3RyID0gdG9GaXhlZFBvaW50KGNvZWZmVG9TdHJpbmcobi5jKSwgbi5lLCAnMCcpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBpbnRDaGVjayhiLCAyLCBBTFBIQUJFVC5sZW5ndGgsICdCYXNlJyk7XHJcbiAgICAgICAgICBzdHIgPSBjb252ZXJ0QmFzZSh0b0ZpeGVkUG9pbnQoY29lZmZUb1N0cmluZyhuLmMpLCBlLCAnMCcpLCAxMCwgYiwgcywgdHJ1ZSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAocyA8IDAgJiYgbi5jWzBdKSBzdHIgPSAnLScgKyBzdHI7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJldHVybiBzdHI7XHJcbiAgICB9O1xyXG5cclxuXHJcbiAgICAvKlxyXG4gICAgICogUmV0dXJuIGFzIHRvU3RyaW5nLCBidXQgZG8gbm90IGFjY2VwdCBhIGJhc2UgYXJndW1lbnQsIGFuZCBpbmNsdWRlIHRoZSBtaW51cyBzaWduIGZvclxyXG4gICAgICogbmVnYXRpdmUgemVyby5cclxuICAgICAqL1xyXG4gICAgUC52YWx1ZU9mID0gUC50b0pTT04gPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgIHJldHVybiB2YWx1ZU9mKHRoaXMpO1xyXG4gICAgfTtcclxuXHJcblxyXG4gICAgUC5faXNCaWdOdW1iZXIgPSB0cnVlO1xyXG5cclxuICAgIGlmIChjb25maWdPYmplY3QgIT0gbnVsbCkgQmlnTnVtYmVyLnNldChjb25maWdPYmplY3QpO1xyXG5cclxuICAgIHJldHVybiBCaWdOdW1iZXI7XHJcbiAgfVxyXG5cclxuXHJcbiAgLy8gUFJJVkFURSBIRUxQRVIgRlVOQ1RJT05TXHJcblxyXG4gIC8vIFRoZXNlIGZ1bmN0aW9ucyBkb24ndCBuZWVkIGFjY2VzcyB0byB2YXJpYWJsZXMsXHJcbiAgLy8gZS5nLiBERUNJTUFMX1BMQUNFUywgaW4gdGhlIHNjb3BlIG9mIHRoZSBgY2xvbmVgIGZ1bmN0aW9uIGFib3ZlLlxyXG5cclxuXHJcbiAgZnVuY3Rpb24gYml0Rmxvb3Iobikge1xyXG4gICAgdmFyIGkgPSBuIHwgMDtcclxuICAgIHJldHVybiBuID4gMCB8fCBuID09PSBpID8gaSA6IGkgLSAxO1xyXG4gIH1cclxuXHJcblxyXG4gIC8vIFJldHVybiBhIGNvZWZmaWNpZW50IGFycmF5IGFzIGEgc3RyaW5nIG9mIGJhc2UgMTAgZGlnaXRzLlxyXG4gIGZ1bmN0aW9uIGNvZWZmVG9TdHJpbmcoYSkge1xyXG4gICAgdmFyIHMsIHosXHJcbiAgICAgIGkgPSAxLFxyXG4gICAgICBqID0gYS5sZW5ndGgsXHJcbiAgICAgIHIgPSBhWzBdICsgJyc7XHJcblxyXG4gICAgZm9yICg7IGkgPCBqOykge1xyXG4gICAgICBzID0gYVtpKytdICsgJyc7XHJcbiAgICAgIHogPSBMT0dfQkFTRSAtIHMubGVuZ3RoO1xyXG4gICAgICBmb3IgKDsgei0tOyBzID0gJzAnICsgcyk7XHJcbiAgICAgIHIgKz0gcztcclxuICAgIH1cclxuXHJcbiAgICAvLyBEZXRlcm1pbmUgdHJhaWxpbmcgemVyb3MuXHJcbiAgICBmb3IgKGogPSByLmxlbmd0aDsgci5jaGFyQ29kZUF0KC0taikgPT09IDQ4Oyk7XHJcblxyXG4gICAgcmV0dXJuIHIuc2xpY2UoMCwgaiArIDEgfHwgMSk7XHJcbiAgfVxyXG5cclxuXHJcbiAgLy8gQ29tcGFyZSB0aGUgdmFsdWUgb2YgQmlnTnVtYmVycyB4IGFuZCB5LlxyXG4gIGZ1bmN0aW9uIGNvbXBhcmUoeCwgeSkge1xyXG4gICAgdmFyIGEsIGIsXHJcbiAgICAgIHhjID0geC5jLFxyXG4gICAgICB5YyA9IHkuYyxcclxuICAgICAgaSA9IHgucyxcclxuICAgICAgaiA9IHkucyxcclxuICAgICAgayA9IHguZSxcclxuICAgICAgbCA9IHkuZTtcclxuXHJcbiAgICAvLyBFaXRoZXIgTmFOP1xyXG4gICAgaWYgKCFpIHx8ICFqKSByZXR1cm4gbnVsbDtcclxuXHJcbiAgICBhID0geGMgJiYgIXhjWzBdO1xyXG4gICAgYiA9IHljICYmICF5Y1swXTtcclxuXHJcbiAgICAvLyBFaXRoZXIgemVybz9cclxuICAgIGlmIChhIHx8IGIpIHJldHVybiBhID8gYiA/IDAgOiAtaiA6IGk7XHJcblxyXG4gICAgLy8gU2lnbnMgZGlmZmVyP1xyXG4gICAgaWYgKGkgIT0gaikgcmV0dXJuIGk7XHJcblxyXG4gICAgYSA9IGkgPCAwO1xyXG4gICAgYiA9IGsgPT0gbDtcclxuXHJcbiAgICAvLyBFaXRoZXIgSW5maW5pdHk/XHJcbiAgICBpZiAoIXhjIHx8ICF5YykgcmV0dXJuIGIgPyAwIDogIXhjIF4gYSA/IDEgOiAtMTtcclxuXHJcbiAgICAvLyBDb21wYXJlIGV4cG9uZW50cy5cclxuICAgIGlmICghYikgcmV0dXJuIGsgPiBsIF4gYSA/IDEgOiAtMTtcclxuXHJcbiAgICBqID0gKGsgPSB4Yy5sZW5ndGgpIDwgKGwgPSB5Yy5sZW5ndGgpID8gayA6IGw7XHJcblxyXG4gICAgLy8gQ29tcGFyZSBkaWdpdCBieSBkaWdpdC5cclxuICAgIGZvciAoaSA9IDA7IGkgPCBqOyBpKyspIGlmICh4Y1tpXSAhPSB5Y1tpXSkgcmV0dXJuIHhjW2ldID4geWNbaV0gXiBhID8gMSA6IC0xO1xyXG5cclxuICAgIC8vIENvbXBhcmUgbGVuZ3Rocy5cclxuICAgIHJldHVybiBrID09IGwgPyAwIDogayA+IGwgXiBhID8gMSA6IC0xO1xyXG4gIH1cclxuXHJcblxyXG4gIC8qXHJcbiAgICogQ2hlY2sgdGhhdCBuIGlzIGEgcHJpbWl0aXZlIG51bWJlciwgYW4gaW50ZWdlciwgYW5kIGluIHJhbmdlLCBvdGhlcndpc2UgdGhyb3cuXHJcbiAgICovXHJcbiAgZnVuY3Rpb24gaW50Q2hlY2sobiwgbWluLCBtYXgsIG5hbWUpIHtcclxuICAgIGlmIChuIDwgbWluIHx8IG4gPiBtYXggfHwgbiAhPT0gbWF0aGZsb29yKG4pKSB7XHJcbiAgICAgIHRocm93IEVycm9yXHJcbiAgICAgICAoYmlnbnVtYmVyRXJyb3IgKyAobmFtZSB8fCAnQXJndW1lbnQnKSArICh0eXBlb2YgbiA9PSAnbnVtYmVyJ1xyXG4gICAgICAgICA/IG4gPCBtaW4gfHwgbiA+IG1heCA/ICcgb3V0IG9mIHJhbmdlOiAnIDogJyBub3QgYW4gaW50ZWdlcjogJ1xyXG4gICAgICAgICA6ICcgbm90IGEgcHJpbWl0aXZlIG51bWJlcjogJykgKyBTdHJpbmcobikpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcblxyXG4gIC8vIEFzc3VtZXMgZmluaXRlIG4uXHJcbiAgZnVuY3Rpb24gaXNPZGQobikge1xyXG4gICAgdmFyIGsgPSBuLmMubGVuZ3RoIC0gMTtcclxuICAgIHJldHVybiBiaXRGbG9vcihuLmUgLyBMT0dfQkFTRSkgPT0gayAmJiBuLmNba10gJSAyICE9IDA7XHJcbiAgfVxyXG5cclxuXHJcbiAgZnVuY3Rpb24gdG9FeHBvbmVudGlhbChzdHIsIGUpIHtcclxuICAgIHJldHVybiAoc3RyLmxlbmd0aCA+IDEgPyBzdHIuY2hhckF0KDApICsgJy4nICsgc3RyLnNsaWNlKDEpIDogc3RyKSArXHJcbiAgICAgKGUgPCAwID8gJ2UnIDogJ2UrJykgKyBlO1xyXG4gIH1cclxuXHJcblxyXG4gIGZ1bmN0aW9uIHRvRml4ZWRQb2ludChzdHIsIGUsIHopIHtcclxuICAgIHZhciBsZW4sIHpzO1xyXG5cclxuICAgIC8vIE5lZ2F0aXZlIGV4cG9uZW50P1xyXG4gICAgaWYgKGUgPCAwKSB7XHJcblxyXG4gICAgICAvLyBQcmVwZW5kIHplcm9zLlxyXG4gICAgICBmb3IgKHpzID0geiArICcuJzsgKytlOyB6cyArPSB6KTtcclxuICAgICAgc3RyID0genMgKyBzdHI7XHJcblxyXG4gICAgLy8gUG9zaXRpdmUgZXhwb25lbnRcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGxlbiA9IHN0ci5sZW5ndGg7XHJcblxyXG4gICAgICAvLyBBcHBlbmQgemVyb3MuXHJcbiAgICAgIGlmICgrK2UgPiBsZW4pIHtcclxuICAgICAgICBmb3IgKHpzID0geiwgZSAtPSBsZW47IC0tZTsgenMgKz0geik7XHJcbiAgICAgICAgc3RyICs9IHpzO1xyXG4gICAgICB9IGVsc2UgaWYgKGUgPCBsZW4pIHtcclxuICAgICAgICBzdHIgPSBzdHIuc2xpY2UoMCwgZSkgKyAnLicgKyBzdHIuc2xpY2UoZSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gc3RyO1xyXG4gIH1cclxuXHJcblxyXG4gIC8vIEVYUE9SVFxyXG5cclxuXHJcbiAgQmlnTnVtYmVyID0gY2xvbmUoKTtcclxuICBCaWdOdW1iZXJbJ2RlZmF1bHQnXSA9IEJpZ051bWJlci5CaWdOdW1iZXIgPSBCaWdOdW1iZXI7XHJcblxyXG4gIC8vIEFNRC5cclxuICBpZiAodHlwZW9mIGRlZmluZSA9PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQpIHtcclxuICAgIGRlZmluZShmdW5jdGlvbiAoKSB7IHJldHVybiBCaWdOdW1iZXI7IH0pO1xyXG5cclxuICAvLyBOb2RlLmpzIGFuZCBvdGhlciBlbnZpcm9ubWVudHMgdGhhdCBzdXBwb3J0IG1vZHVsZS5leHBvcnRzLlxyXG4gIH0gZWxzZSBpZiAodHlwZW9mIG1vZHVsZSAhPSAndW5kZWZpbmVkJyAmJiBtb2R1bGUuZXhwb3J0cykge1xyXG4gICAgbW9kdWxlLmV4cG9ydHMgPSBCaWdOdW1iZXI7XHJcblxyXG4gIC8vIEJyb3dzZXIuXHJcbiAgfSBlbHNlIHtcclxuICAgIGlmICghZ2xvYmFsT2JqZWN0KSB7XHJcbiAgICAgIGdsb2JhbE9iamVjdCA9IHR5cGVvZiBzZWxmICE9ICd1bmRlZmluZWQnICYmIHNlbGYgPyBzZWxmIDogd2luZG93O1xyXG4gICAgfVxyXG5cclxuICAgIGdsb2JhbE9iamVjdC5CaWdOdW1iZXIgPSBCaWdOdW1iZXI7XHJcbiAgfVxyXG59KSh0aGlzKTtcclxuIiwidmFyIHV0aWwgPSByZXF1aXJlKCd1dGlsJyk7XG52YXIgU3RyZWFtID0gcmVxdWlyZSgnc3RyZWFtJykuU3RyZWFtO1xudmFyIERlbGF5ZWRTdHJlYW0gPSByZXF1aXJlKCdkZWxheWVkLXN0cmVhbScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IENvbWJpbmVkU3RyZWFtO1xuZnVuY3Rpb24gQ29tYmluZWRTdHJlYW0oKSB7XG4gIHRoaXMud3JpdGFibGUgPSBmYWxzZTtcbiAgdGhpcy5yZWFkYWJsZSA9IHRydWU7XG4gIHRoaXMuZGF0YVNpemUgPSAwO1xuICB0aGlzLm1heERhdGFTaXplID0gMiAqIDEwMjQgKiAxMDI0O1xuICB0aGlzLnBhdXNlU3RyZWFtcyA9IHRydWU7XG5cbiAgdGhpcy5fcmVsZWFzZWQgPSBmYWxzZTtcbiAgdGhpcy5fc3RyZWFtcyA9IFtdO1xuICB0aGlzLl9jdXJyZW50U3RyZWFtID0gbnVsbDtcbiAgdGhpcy5faW5zaWRlTG9vcCA9IGZhbHNlO1xuICB0aGlzLl9wZW5kaW5nTmV4dCA9IGZhbHNlO1xufVxudXRpbC5pbmhlcml0cyhDb21iaW5lZFN0cmVhbSwgU3RyZWFtKTtcblxuQ29tYmluZWRTdHJlYW0uY3JlYXRlID0gZnVuY3Rpb24ob3B0aW9ucykge1xuICB2YXIgY29tYmluZWRTdHJlYW0gPSBuZXcgdGhpcygpO1xuXG4gIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuICBmb3IgKHZhciBvcHRpb24gaW4gb3B0aW9ucykge1xuICAgIGNvbWJpbmVkU3RyZWFtW29wdGlvbl0gPSBvcHRpb25zW29wdGlvbl07XG4gIH1cblxuICByZXR1cm4gY29tYmluZWRTdHJlYW07XG59O1xuXG5Db21iaW5lZFN0cmVhbS5pc1N0cmVhbUxpa2UgPSBmdW5jdGlvbihzdHJlYW0pIHtcbiAgcmV0dXJuICh0eXBlb2Ygc3RyZWFtICE9PSAnZnVuY3Rpb24nKVxuICAgICYmICh0eXBlb2Ygc3RyZWFtICE9PSAnc3RyaW5nJylcbiAgICAmJiAodHlwZW9mIHN0cmVhbSAhPT0gJ2Jvb2xlYW4nKVxuICAgICYmICh0eXBlb2Ygc3RyZWFtICE9PSAnbnVtYmVyJylcbiAgICAmJiAoIUJ1ZmZlci5pc0J1ZmZlcihzdHJlYW0pKTtcbn07XG5cbkNvbWJpbmVkU3RyZWFtLnByb3RvdHlwZS5hcHBlbmQgPSBmdW5jdGlvbihzdHJlYW0pIHtcbiAgdmFyIGlzU3RyZWFtTGlrZSA9IENvbWJpbmVkU3RyZWFtLmlzU3RyZWFtTGlrZShzdHJlYW0pO1xuXG4gIGlmIChpc1N0cmVhbUxpa2UpIHtcbiAgICBpZiAoIShzdHJlYW0gaW5zdGFuY2VvZiBEZWxheWVkU3RyZWFtKSkge1xuICAgICAgdmFyIG5ld1N0cmVhbSA9IERlbGF5ZWRTdHJlYW0uY3JlYXRlKHN0cmVhbSwge1xuICAgICAgICBtYXhEYXRhU2l6ZTogSW5maW5pdHksXG4gICAgICAgIHBhdXNlU3RyZWFtOiB0aGlzLnBhdXNlU3RyZWFtcyxcbiAgICAgIH0pO1xuICAgICAgc3RyZWFtLm9uKCdkYXRhJywgdGhpcy5fY2hlY2tEYXRhU2l6ZS5iaW5kKHRoaXMpKTtcbiAgICAgIHN0cmVhbSA9IG5ld1N0cmVhbTtcbiAgICB9XG5cbiAgICB0aGlzLl9oYW5kbGVFcnJvcnMoc3RyZWFtKTtcblxuICAgIGlmICh0aGlzLnBhdXNlU3RyZWFtcykge1xuICAgICAgc3RyZWFtLnBhdXNlKCk7XG4gICAgfVxuICB9XG5cbiAgdGhpcy5fc3RyZWFtcy5wdXNoKHN0cmVhbSk7XG4gIHJldHVybiB0aGlzO1xufTtcblxuQ29tYmluZWRTdHJlYW0ucHJvdG90eXBlLnBpcGUgPSBmdW5jdGlvbihkZXN0LCBvcHRpb25zKSB7XG4gIFN0cmVhbS5wcm90b3R5cGUucGlwZS5jYWxsKHRoaXMsIGRlc3QsIG9wdGlvbnMpO1xuICB0aGlzLnJlc3VtZSgpO1xuICByZXR1cm4gZGVzdDtcbn07XG5cbkNvbWJpbmVkU3RyZWFtLnByb3RvdHlwZS5fZ2V0TmV4dCA9IGZ1bmN0aW9uKCkge1xuICB0aGlzLl9jdXJyZW50U3RyZWFtID0gbnVsbDtcblxuICBpZiAodGhpcy5faW5zaWRlTG9vcCkge1xuICAgIHRoaXMuX3BlbmRpbmdOZXh0ID0gdHJ1ZTtcbiAgICByZXR1cm47IC8vIGRlZmVyIGNhbGxcbiAgfVxuXG4gIHRoaXMuX2luc2lkZUxvb3AgPSB0cnVlO1xuICB0cnkge1xuICAgIGRvIHtcbiAgICAgIHRoaXMuX3BlbmRpbmdOZXh0ID0gZmFsc2U7XG4gICAgICB0aGlzLl9yZWFsR2V0TmV4dCgpO1xuICAgIH0gd2hpbGUgKHRoaXMuX3BlbmRpbmdOZXh0KTtcbiAgfSBmaW5hbGx5IHtcbiAgICB0aGlzLl9pbnNpZGVMb29wID0gZmFsc2U7XG4gIH1cbn07XG5cbkNvbWJpbmVkU3RyZWFtLnByb3RvdHlwZS5fcmVhbEdldE5leHQgPSBmdW5jdGlvbigpIHtcbiAgdmFyIHN0cmVhbSA9IHRoaXMuX3N0cmVhbXMuc2hpZnQoKTtcblxuXG4gIGlmICh0eXBlb2Ygc3RyZWFtID09ICd1bmRlZmluZWQnKSB7XG4gICAgdGhpcy5lbmQoKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAodHlwZW9mIHN0cmVhbSAhPT0gJ2Z1bmN0aW9uJykge1xuICAgIHRoaXMuX3BpcGVOZXh0KHN0cmVhbSk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdmFyIGdldFN0cmVhbSA9IHN0cmVhbTtcbiAgZ2V0U3RyZWFtKGZ1bmN0aW9uKHN0cmVhbSkge1xuICAgIHZhciBpc1N0cmVhbUxpa2UgPSBDb21iaW5lZFN0cmVhbS5pc1N0cmVhbUxpa2Uoc3RyZWFtKTtcbiAgICBpZiAoaXNTdHJlYW1MaWtlKSB7XG4gICAgICBzdHJlYW0ub24oJ2RhdGEnLCB0aGlzLl9jaGVja0RhdGFTaXplLmJpbmQodGhpcykpO1xuICAgICAgdGhpcy5faGFuZGxlRXJyb3JzKHN0cmVhbSk7XG4gICAgfVxuXG4gICAgdGhpcy5fcGlwZU5leHQoc3RyZWFtKTtcbiAgfS5iaW5kKHRoaXMpKTtcbn07XG5cbkNvbWJpbmVkU3RyZWFtLnByb3RvdHlwZS5fcGlwZU5leHQgPSBmdW5jdGlvbihzdHJlYW0pIHtcbiAgdGhpcy5fY3VycmVudFN0cmVhbSA9IHN0cmVhbTtcblxuICB2YXIgaXNTdHJlYW1MaWtlID0gQ29tYmluZWRTdHJlYW0uaXNTdHJlYW1MaWtlKHN0cmVhbSk7XG4gIGlmIChpc1N0cmVhbUxpa2UpIHtcbiAgICBzdHJlYW0ub24oJ2VuZCcsIHRoaXMuX2dldE5leHQuYmluZCh0aGlzKSk7XG4gICAgc3RyZWFtLnBpcGUodGhpcywge2VuZDogZmFsc2V9KTtcbiAgICByZXR1cm47XG4gIH1cblxuICB2YXIgdmFsdWUgPSBzdHJlYW07XG4gIHRoaXMud3JpdGUodmFsdWUpO1xuICB0aGlzLl9nZXROZXh0KCk7XG59O1xuXG5Db21iaW5lZFN0cmVhbS5wcm90b3R5cGUuX2hhbmRsZUVycm9ycyA9IGZ1bmN0aW9uKHN0cmVhbSkge1xuICB2YXIgc2VsZiA9IHRoaXM7XG4gIHN0cmVhbS5vbignZXJyb3InLCBmdW5jdGlvbihlcnIpIHtcbiAgICBzZWxmLl9lbWl0RXJyb3IoZXJyKTtcbiAgfSk7XG59O1xuXG5Db21iaW5lZFN0cmVhbS5wcm90b3R5cGUud3JpdGUgPSBmdW5jdGlvbihkYXRhKSB7XG4gIHRoaXMuZW1pdCgnZGF0YScsIGRhdGEpO1xufTtcblxuQ29tYmluZWRTdHJlYW0ucHJvdG90eXBlLnBhdXNlID0gZnVuY3Rpb24oKSB7XG4gIGlmICghdGhpcy5wYXVzZVN0cmVhbXMpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBpZih0aGlzLnBhdXNlU3RyZWFtcyAmJiB0aGlzLl9jdXJyZW50U3RyZWFtICYmIHR5cGVvZih0aGlzLl9jdXJyZW50U3RyZWFtLnBhdXNlKSA9PSAnZnVuY3Rpb24nKSB0aGlzLl9jdXJyZW50U3RyZWFtLnBhdXNlKCk7XG4gIHRoaXMuZW1pdCgncGF1c2UnKTtcbn07XG5cbkNvbWJpbmVkU3RyZWFtLnByb3RvdHlwZS5yZXN1bWUgPSBmdW5jdGlvbigpIHtcbiAgaWYgKCF0aGlzLl9yZWxlYXNlZCkge1xuICAgIHRoaXMuX3JlbGVhc2VkID0gdHJ1ZTtcbiAgICB0aGlzLndyaXRhYmxlID0gdHJ1ZTtcbiAgICB0aGlzLl9nZXROZXh0KCk7XG4gIH1cblxuICBpZih0aGlzLnBhdXNlU3RyZWFtcyAmJiB0aGlzLl9jdXJyZW50U3RyZWFtICYmIHR5cGVvZih0aGlzLl9jdXJyZW50U3RyZWFtLnJlc3VtZSkgPT0gJ2Z1bmN0aW9uJykgdGhpcy5fY3VycmVudFN0cmVhbS5yZXN1bWUoKTtcbiAgdGhpcy5lbWl0KCdyZXN1bWUnKTtcbn07XG5cbkNvbWJpbmVkU3RyZWFtLnByb3RvdHlwZS5lbmQgPSBmdW5jdGlvbigpIHtcbiAgdGhpcy5fcmVzZXQoKTtcbiAgdGhpcy5lbWl0KCdlbmQnKTtcbn07XG5cbkNvbWJpbmVkU3RyZWFtLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24oKSB7XG4gIHRoaXMuX3Jlc2V0KCk7XG4gIHRoaXMuZW1pdCgnY2xvc2UnKTtcbn07XG5cbkNvbWJpbmVkU3RyZWFtLnByb3RvdHlwZS5fcmVzZXQgPSBmdW5jdGlvbigpIHtcbiAgdGhpcy53cml0YWJsZSA9IGZhbHNlO1xuICB0aGlzLl9zdHJlYW1zID0gW107XG4gIHRoaXMuX2N1cnJlbnRTdHJlYW0gPSBudWxsO1xufTtcblxuQ29tYmluZWRTdHJlYW0ucHJvdG90eXBlLl9jaGVja0RhdGFTaXplID0gZnVuY3Rpb24oKSB7XG4gIHRoaXMuX3VwZGF0ZURhdGFTaXplKCk7XG4gIGlmICh0aGlzLmRhdGFTaXplIDw9IHRoaXMubWF4RGF0YVNpemUpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICB2YXIgbWVzc2FnZSA9XG4gICAgJ0RlbGF5ZWRTdHJlYW0jbWF4RGF0YVNpemUgb2YgJyArIHRoaXMubWF4RGF0YVNpemUgKyAnIGJ5dGVzIGV4Y2VlZGVkLic7XG4gIHRoaXMuX2VtaXRFcnJvcihuZXcgRXJyb3IobWVzc2FnZSkpO1xufTtcblxuQ29tYmluZWRTdHJlYW0ucHJvdG90eXBlLl91cGRhdGVEYXRhU2l6ZSA9IGZ1bmN0aW9uKCkge1xuICB0aGlzLmRhdGFTaXplID0gMDtcblxuICB2YXIgc2VsZiA9IHRoaXM7XG4gIHRoaXMuX3N0cmVhbXMuZm9yRWFjaChmdW5jdGlvbihzdHJlYW0pIHtcbiAgICBpZiAoIXN0cmVhbS5kYXRhU2l6ZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHNlbGYuZGF0YVNpemUgKz0gc3RyZWFtLmRhdGFTaXplO1xuICB9KTtcblxuICBpZiAodGhpcy5fY3VycmVudFN0cmVhbSAmJiB0aGlzLl9jdXJyZW50U3RyZWFtLmRhdGFTaXplKSB7XG4gICAgdGhpcy5kYXRhU2l6ZSArPSB0aGlzLl9jdXJyZW50U3RyZWFtLmRhdGFTaXplO1xuICB9XG59O1xuXG5Db21iaW5lZFN0cmVhbS5wcm90b3R5cGUuX2VtaXRFcnJvciA9IGZ1bmN0aW9uKGVycikge1xuICB0aGlzLl9yZXNldCgpO1xuICB0aGlzLmVtaXQoJ2Vycm9yJywgZXJyKTtcbn07XG4iLCIvKipcbiAqIEhlbHBlcnMuXG4gKi9cblxudmFyIHMgPSAxMDAwO1xudmFyIG0gPSBzICogNjA7XG52YXIgaCA9IG0gKiA2MDtcbnZhciBkID0gaCAqIDI0O1xudmFyIHcgPSBkICogNztcbnZhciB5ID0gZCAqIDM2NS4yNTtcblxuLyoqXG4gKiBQYXJzZSBvciBmb3JtYXQgdGhlIGdpdmVuIGB2YWxgLlxuICpcbiAqIE9wdGlvbnM6XG4gKlxuICogIC0gYGxvbmdgIHZlcmJvc2UgZm9ybWF0dGluZyBbZmFsc2VdXG4gKlxuICogQHBhcmFtIHtTdHJpbmd8TnVtYmVyfSB2YWxcbiAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9uc11cbiAqIEB0aHJvd3Mge0Vycm9yfSB0aHJvdyBhbiBlcnJvciBpZiB2YWwgaXMgbm90IGEgbm9uLWVtcHR5IHN0cmluZyBvciBhIG51bWJlclxuICogQHJldHVybiB7U3RyaW5nfE51bWJlcn1cbiAqIEBhcGkgcHVibGljXG4gKi9cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbih2YWwsIG9wdGlvbnMpIHtcbiAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG4gIHZhciB0eXBlID0gdHlwZW9mIHZhbDtcbiAgaWYgKHR5cGUgPT09ICdzdHJpbmcnICYmIHZhbC5sZW5ndGggPiAwKSB7XG4gICAgcmV0dXJuIHBhcnNlKHZhbCk7XG4gIH0gZWxzZSBpZiAodHlwZSA9PT0gJ251bWJlcicgJiYgaXNGaW5pdGUodmFsKSkge1xuICAgIHJldHVybiBvcHRpb25zLmxvbmcgPyBmbXRMb25nKHZhbCkgOiBmbXRTaG9ydCh2YWwpO1xuICB9XG4gIHRocm93IG5ldyBFcnJvcihcbiAgICAndmFsIGlzIG5vdCBhIG5vbi1lbXB0eSBzdHJpbmcgb3IgYSB2YWxpZCBudW1iZXIuIHZhbD0nICtcbiAgICAgIEpTT04uc3RyaW5naWZ5KHZhbClcbiAgKTtcbn07XG5cbi8qKlxuICogUGFyc2UgdGhlIGdpdmVuIGBzdHJgIGFuZCByZXR1cm4gbWlsbGlzZWNvbmRzLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBzdHJcbiAqIEByZXR1cm4ge051bWJlcn1cbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5cbmZ1bmN0aW9uIHBhcnNlKHN0cikge1xuICBzdHIgPSBTdHJpbmcoc3RyKTtcbiAgaWYgKHN0ci5sZW5ndGggPiAxMDApIHtcbiAgICByZXR1cm47XG4gIH1cbiAgdmFyIG1hdGNoID0gL14oLT8oPzpcXGQrKT9cXC4/XFxkKykgKihtaWxsaXNlY29uZHM/fG1zZWNzP3xtc3xzZWNvbmRzP3xzZWNzP3xzfG1pbnV0ZXM/fG1pbnM/fG18aG91cnM/fGhycz98aHxkYXlzP3xkfHdlZWtzP3x3fHllYXJzP3x5cnM/fHkpPyQvaS5leGVjKFxuICAgIHN0clxuICApO1xuICBpZiAoIW1hdGNoKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIHZhciBuID0gcGFyc2VGbG9hdChtYXRjaFsxXSk7XG4gIHZhciB0eXBlID0gKG1hdGNoWzJdIHx8ICdtcycpLnRvTG93ZXJDYXNlKCk7XG4gIHN3aXRjaCAodHlwZSkge1xuICAgIGNhc2UgJ3llYXJzJzpcbiAgICBjYXNlICd5ZWFyJzpcbiAgICBjYXNlICd5cnMnOlxuICAgIGNhc2UgJ3lyJzpcbiAgICBjYXNlICd5JzpcbiAgICAgIHJldHVybiBuICogeTtcbiAgICBjYXNlICd3ZWVrcyc6XG4gICAgY2FzZSAnd2Vlayc6XG4gICAgY2FzZSAndyc6XG4gICAgICByZXR1cm4gbiAqIHc7XG4gICAgY2FzZSAnZGF5cyc6XG4gICAgY2FzZSAnZGF5JzpcbiAgICBjYXNlICdkJzpcbiAgICAgIHJldHVybiBuICogZDtcbiAgICBjYXNlICdob3Vycyc6XG4gICAgY2FzZSAnaG91cic6XG4gICAgY2FzZSAnaHJzJzpcbiAgICBjYXNlICdocic6XG4gICAgY2FzZSAnaCc6XG4gICAgICByZXR1cm4gbiAqIGg7XG4gICAgY2FzZSAnbWludXRlcyc6XG4gICAgY2FzZSAnbWludXRlJzpcbiAgICBjYXNlICdtaW5zJzpcbiAgICBjYXNlICdtaW4nOlxuICAgIGNhc2UgJ20nOlxuICAgICAgcmV0dXJuIG4gKiBtO1xuICAgIGNhc2UgJ3NlY29uZHMnOlxuICAgIGNhc2UgJ3NlY29uZCc6XG4gICAgY2FzZSAnc2Vjcyc6XG4gICAgY2FzZSAnc2VjJzpcbiAgICBjYXNlICdzJzpcbiAgICAgIHJldHVybiBuICogcztcbiAgICBjYXNlICdtaWxsaXNlY29uZHMnOlxuICAgIGNhc2UgJ21pbGxpc2Vjb25kJzpcbiAgICBjYXNlICdtc2Vjcyc6XG4gICAgY2FzZSAnbXNlYyc6XG4gICAgY2FzZSAnbXMnOlxuICAgICAgcmV0dXJuIG47XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbn1cblxuLyoqXG4gKiBTaG9ydCBmb3JtYXQgZm9yIGBtc2AuXG4gKlxuICogQHBhcmFtIHtOdW1iZXJ9IG1zXG4gKiBAcmV0dXJuIHtTdHJpbmd9XG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuXG5mdW5jdGlvbiBmbXRTaG9ydChtcykge1xuICB2YXIgbXNBYnMgPSBNYXRoLmFicyhtcyk7XG4gIGlmIChtc0FicyA+PSBkKSB7XG4gICAgcmV0dXJuIE1hdGgucm91bmQobXMgLyBkKSArICdkJztcbiAgfVxuICBpZiAobXNBYnMgPj0gaCkge1xuICAgIHJldHVybiBNYXRoLnJvdW5kKG1zIC8gaCkgKyAnaCc7XG4gIH1cbiAgaWYgKG1zQWJzID49IG0pIHtcbiAgICByZXR1cm4gTWF0aC5yb3VuZChtcyAvIG0pICsgJ20nO1xuICB9XG4gIGlmIChtc0FicyA+PSBzKSB7XG4gICAgcmV0dXJuIE1hdGgucm91bmQobXMgLyBzKSArICdzJztcbiAgfVxuICByZXR1cm4gbXMgKyAnbXMnO1xufVxuXG4vKipcbiAqIExvbmcgZm9ybWF0IGZvciBgbXNgLlxuICpcbiAqIEBwYXJhbSB7TnVtYmVyfSBtc1xuICogQHJldHVybiB7U3RyaW5nfVxuICogQGFwaSBwcml2YXRlXG4gKi9cblxuZnVuY3Rpb24gZm10TG9uZyhtcykge1xuICB2YXIgbXNBYnMgPSBNYXRoLmFicyhtcyk7XG4gIGlmIChtc0FicyA+PSBkKSB7XG4gICAgcmV0dXJuIHBsdXJhbChtcywgbXNBYnMsIGQsICdkYXknKTtcbiAgfVxuICBpZiAobXNBYnMgPj0gaCkge1xuICAgIHJldHVybiBwbHVyYWwobXMsIG1zQWJzLCBoLCAnaG91cicpO1xuICB9XG4gIGlmIChtc0FicyA+PSBtKSB7XG4gICAgcmV0dXJuIHBsdXJhbChtcywgbXNBYnMsIG0sICdtaW51dGUnKTtcbiAgfVxuICBpZiAobXNBYnMgPj0gcykge1xuICAgIHJldHVybiBwbHVyYWwobXMsIG1zQWJzLCBzLCAnc2Vjb25kJyk7XG4gIH1cbiAgcmV0dXJuIG1zICsgJyBtcyc7XG59XG5cbi8qKlxuICogUGx1cmFsaXphdGlvbiBoZWxwZXIuXG4gKi9cblxuZnVuY3Rpb24gcGx1cmFsKG1zLCBtc0FicywgbiwgbmFtZSkge1xuICB2YXIgaXNQbHVyYWwgPSBtc0FicyA+PSBuICogMS41O1xuICByZXR1cm4gTWF0aC5yb3VuZChtcyAvIG4pICsgJyAnICsgbmFtZSArIChpc1BsdXJhbCA/ICdzJyA6ICcnKTtcbn1cbiIsIi8qIGVzbGludC1lbnYgYnJvd3NlciAqL1xuXG4vKipcbiAqIFRoaXMgaXMgdGhlIHdlYiBicm93c2VyIGltcGxlbWVudGF0aW9uIG9mIGBkZWJ1ZygpYC5cbiAqL1xuXG5leHBvcnRzLmZvcm1hdEFyZ3MgPSBmb3JtYXRBcmdzO1xuZXhwb3J0cy5zYXZlID0gc2F2ZTtcbmV4cG9ydHMubG9hZCA9IGxvYWQ7XG5leHBvcnRzLnVzZUNvbG9ycyA9IHVzZUNvbG9ycztcbmV4cG9ydHMuc3RvcmFnZSA9IGxvY2Fsc3RvcmFnZSgpO1xuZXhwb3J0cy5kZXN0cm95ID0gKCgpID0+IHtcblx0bGV0IHdhcm5lZCA9IGZhbHNlO1xuXG5cdHJldHVybiAoKSA9PiB7XG5cdFx0aWYgKCF3YXJuZWQpIHtcblx0XHRcdHdhcm5lZCA9IHRydWU7XG5cdFx0XHRjb25zb2xlLndhcm4oJ0luc3RhbmNlIG1ldGhvZCBgZGVidWcuZGVzdHJveSgpYCBpcyBkZXByZWNhdGVkIGFuZCBubyBsb25nZXIgZG9lcyBhbnl0aGluZy4gSXQgd2lsbCBiZSByZW1vdmVkIGluIHRoZSBuZXh0IG1ham9yIHZlcnNpb24gb2YgYGRlYnVnYC4nKTtcblx0XHR9XG5cdH07XG59KSgpO1xuXG4vKipcbiAqIENvbG9ycy5cbiAqL1xuXG5leHBvcnRzLmNvbG9ycyA9IFtcblx0JyMwMDAwQ0MnLFxuXHQnIzAwMDBGRicsXG5cdCcjMDAzM0NDJyxcblx0JyMwMDMzRkYnLFxuXHQnIzAwNjZDQycsXG5cdCcjMDA2NkZGJyxcblx0JyMwMDk5Q0MnLFxuXHQnIzAwOTlGRicsXG5cdCcjMDBDQzAwJyxcblx0JyMwMENDMzMnLFxuXHQnIzAwQ0M2NicsXG5cdCcjMDBDQzk5Jyxcblx0JyMwMENDQ0MnLFxuXHQnIzAwQ0NGRicsXG5cdCcjMzMwMENDJyxcblx0JyMzMzAwRkYnLFxuXHQnIzMzMzNDQycsXG5cdCcjMzMzM0ZGJyxcblx0JyMzMzY2Q0MnLFxuXHQnIzMzNjZGRicsXG5cdCcjMzM5OUNDJyxcblx0JyMzMzk5RkYnLFxuXHQnIzMzQ0MwMCcsXG5cdCcjMzNDQzMzJyxcblx0JyMzM0NDNjYnLFxuXHQnIzMzQ0M5OScsXG5cdCcjMzNDQ0NDJyxcblx0JyMzM0NDRkYnLFxuXHQnIzY2MDBDQycsXG5cdCcjNjYwMEZGJyxcblx0JyM2NjMzQ0MnLFxuXHQnIzY2MzNGRicsXG5cdCcjNjZDQzAwJyxcblx0JyM2NkNDMzMnLFxuXHQnIzk5MDBDQycsXG5cdCcjOTkwMEZGJyxcblx0JyM5OTMzQ0MnLFxuXHQnIzk5MzNGRicsXG5cdCcjOTlDQzAwJyxcblx0JyM5OUNDMzMnLFxuXHQnI0NDMDAwMCcsXG5cdCcjQ0MwMDMzJyxcblx0JyNDQzAwNjYnLFxuXHQnI0NDMDA5OScsXG5cdCcjQ0MwMENDJyxcblx0JyNDQzAwRkYnLFxuXHQnI0NDMzMwMCcsXG5cdCcjQ0MzMzMzJyxcblx0JyNDQzMzNjYnLFxuXHQnI0NDMzM5OScsXG5cdCcjQ0MzM0NDJyxcblx0JyNDQzMzRkYnLFxuXHQnI0NDNjYwMCcsXG5cdCcjQ0M2NjMzJyxcblx0JyNDQzk5MDAnLFxuXHQnI0NDOTkzMycsXG5cdCcjQ0NDQzAwJyxcblx0JyNDQ0NDMzMnLFxuXHQnI0ZGMDAwMCcsXG5cdCcjRkYwMDMzJyxcblx0JyNGRjAwNjYnLFxuXHQnI0ZGMDA5OScsXG5cdCcjRkYwMENDJyxcblx0JyNGRjAwRkYnLFxuXHQnI0ZGMzMwMCcsXG5cdCcjRkYzMzMzJyxcblx0JyNGRjMzNjYnLFxuXHQnI0ZGMzM5OScsXG5cdCcjRkYzM0NDJyxcblx0JyNGRjMzRkYnLFxuXHQnI0ZGNjYwMCcsXG5cdCcjRkY2NjMzJyxcblx0JyNGRjk5MDAnLFxuXHQnI0ZGOTkzMycsXG5cdCcjRkZDQzAwJyxcblx0JyNGRkNDMzMnXG5dO1xuXG4vKipcbiAqIEN1cnJlbnRseSBvbmx5IFdlYktpdC1iYXNlZCBXZWIgSW5zcGVjdG9ycywgRmlyZWZveCA+PSB2MzEsXG4gKiBhbmQgdGhlIEZpcmVidWcgZXh0ZW5zaW9uIChhbnkgRmlyZWZveCB2ZXJzaW9uKSBhcmUga25vd25cbiAqIHRvIHN1cHBvcnQgXCIlY1wiIENTUyBjdXN0b21pemF0aW9ucy5cbiAqXG4gKiBUT0RPOiBhZGQgYSBgbG9jYWxTdG9yYWdlYCB2YXJpYWJsZSB0byBleHBsaWNpdGx5IGVuYWJsZS9kaXNhYmxlIGNvbG9yc1xuICovXG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjb21wbGV4aXR5XG5mdW5jdGlvbiB1c2VDb2xvcnMoKSB7XG5cdC8vIE5COiBJbiBhbiBFbGVjdHJvbiBwcmVsb2FkIHNjcmlwdCwgZG9jdW1lbnQgd2lsbCBiZSBkZWZpbmVkIGJ1dCBub3QgZnVsbHlcblx0Ly8gaW5pdGlhbGl6ZWQuIFNpbmNlIHdlIGtub3cgd2UncmUgaW4gQ2hyb21lLCB3ZSdsbCBqdXN0IGRldGVjdCB0aGlzIGNhc2Vcblx0Ly8gZXhwbGljaXRseVxuXHRpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgd2luZG93LnByb2Nlc3MgJiYgKHdpbmRvdy5wcm9jZXNzLnR5cGUgPT09ICdyZW5kZXJlcicgfHwgd2luZG93LnByb2Nlc3MuX19ud2pzKSkge1xuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cblx0Ly8gSW50ZXJuZXQgRXhwbG9yZXIgYW5kIEVkZ2UgZG8gbm90IHN1cHBvcnQgY29sb3JzLlxuXHRpZiAodHlwZW9mIG5hdmlnYXRvciAhPT0gJ3VuZGVmaW5lZCcgJiYgbmF2aWdhdG9yLnVzZXJBZ2VudCAmJiBuYXZpZ2F0b3IudXNlckFnZW50LnRvTG93ZXJDYXNlKCkubWF0Y2goLyhlZGdlfHRyaWRlbnQpXFwvKFxcZCspLykpIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblxuXHQvLyBJcyB3ZWJraXQ/IGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9hLzE2NDU5NjA2LzM3Njc3M1xuXHQvLyBkb2N1bWVudCBpcyB1bmRlZmluZWQgaW4gcmVhY3QtbmF0aXZlOiBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QtbmF0aXZlL3B1bGwvMTYzMlxuXHRyZXR1cm4gKHR5cGVvZiBkb2N1bWVudCAhPT0gJ3VuZGVmaW5lZCcgJiYgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50ICYmIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zdHlsZSAmJiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc3R5bGUuV2Via2l0QXBwZWFyYW5jZSkgfHxcblx0XHQvLyBJcyBmaXJlYnVnPyBodHRwOi8vc3RhY2tvdmVyZmxvdy5jb20vYS8zOTgxMjAvMzc2NzczXG5cdFx0KHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIHdpbmRvdy5jb25zb2xlICYmICh3aW5kb3cuY29uc29sZS5maXJlYnVnIHx8ICh3aW5kb3cuY29uc29sZS5leGNlcHRpb24gJiYgd2luZG93LmNvbnNvbGUudGFibGUpKSkgfHxcblx0XHQvLyBJcyBmaXJlZm94ID49IHYzMT9cblx0XHQvLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1Rvb2xzL1dlYl9Db25zb2xlI1N0eWxpbmdfbWVzc2FnZXNcblx0XHQodHlwZW9mIG5hdmlnYXRvciAhPT0gJ3VuZGVmaW5lZCcgJiYgbmF2aWdhdG9yLnVzZXJBZ2VudCAmJiBuYXZpZ2F0b3IudXNlckFnZW50LnRvTG93ZXJDYXNlKCkubWF0Y2goL2ZpcmVmb3hcXC8oXFxkKykvKSAmJiBwYXJzZUludChSZWdFeHAuJDEsIDEwKSA+PSAzMSkgfHxcblx0XHQvLyBEb3VibGUgY2hlY2sgd2Via2l0IGluIHVzZXJBZ2VudCBqdXN0IGluIGNhc2Ugd2UgYXJlIGluIGEgd29ya2VyXG5cdFx0KHR5cGVvZiBuYXZpZ2F0b3IgIT09ICd1bmRlZmluZWQnICYmIG5hdmlnYXRvci51c2VyQWdlbnQgJiYgbmF2aWdhdG9yLnVzZXJBZ2VudC50b0xvd2VyQ2FzZSgpLm1hdGNoKC9hcHBsZXdlYmtpdFxcLyhcXGQrKS8pKTtcbn1cblxuLyoqXG4gKiBDb2xvcml6ZSBsb2cgYXJndW1lbnRzIGlmIGVuYWJsZWQuXG4gKlxuICogQGFwaSBwdWJsaWNcbiAqL1xuXG5mdW5jdGlvbiBmb3JtYXRBcmdzKGFyZ3MpIHtcblx0YXJnc1swXSA9ICh0aGlzLnVzZUNvbG9ycyA/ICclYycgOiAnJykgK1xuXHRcdHRoaXMubmFtZXNwYWNlICtcblx0XHQodGhpcy51c2VDb2xvcnMgPyAnICVjJyA6ICcgJykgK1xuXHRcdGFyZ3NbMF0gK1xuXHRcdCh0aGlzLnVzZUNvbG9ycyA/ICclYyAnIDogJyAnKSArXG5cdFx0JysnICsgbW9kdWxlLmV4cG9ydHMuaHVtYW5pemUodGhpcy5kaWZmKTtcblxuXHRpZiAoIXRoaXMudXNlQ29sb3JzKSB7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0Y29uc3QgYyA9ICdjb2xvcjogJyArIHRoaXMuY29sb3I7XG5cdGFyZ3Muc3BsaWNlKDEsIDAsIGMsICdjb2xvcjogaW5oZXJpdCcpO1xuXG5cdC8vIFRoZSBmaW5hbCBcIiVjXCIgaXMgc29tZXdoYXQgdHJpY2t5LCBiZWNhdXNlIHRoZXJlIGNvdWxkIGJlIG90aGVyXG5cdC8vIGFyZ3VtZW50cyBwYXNzZWQgZWl0aGVyIGJlZm9yZSBvciBhZnRlciB0aGUgJWMsIHNvIHdlIG5lZWQgdG9cblx0Ly8gZmlndXJlIG91dCB0aGUgY29ycmVjdCBpbmRleCB0byBpbnNlcnQgdGhlIENTUyBpbnRvXG5cdGxldCBpbmRleCA9IDA7XG5cdGxldCBsYXN0QyA9IDA7XG5cdGFyZ3NbMF0ucmVwbGFjZSgvJVthLXpBLVolXS9nLCBtYXRjaCA9PiB7XG5cdFx0aWYgKG1hdGNoID09PSAnJSUnKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdGluZGV4Kys7XG5cdFx0aWYgKG1hdGNoID09PSAnJWMnKSB7XG5cdFx0XHQvLyBXZSBvbmx5IGFyZSBpbnRlcmVzdGVkIGluIHRoZSAqbGFzdCogJWNcblx0XHRcdC8vICh0aGUgdXNlciBtYXkgaGF2ZSBwcm92aWRlZCB0aGVpciBvd24pXG5cdFx0XHRsYXN0QyA9IGluZGV4O1xuXHRcdH1cblx0fSk7XG5cblx0YXJncy5zcGxpY2UobGFzdEMsIDAsIGMpO1xufVxuXG4vKipcbiAqIEludm9rZXMgYGNvbnNvbGUuZGVidWcoKWAgd2hlbiBhdmFpbGFibGUuXG4gKiBOby1vcCB3aGVuIGBjb25zb2xlLmRlYnVnYCBpcyBub3QgYSBcImZ1bmN0aW9uXCIuXG4gKiBJZiBgY29uc29sZS5kZWJ1Z2AgaXMgbm90IGF2YWlsYWJsZSwgZmFsbHMgYmFja1xuICogdG8gYGNvbnNvbGUubG9nYC5cbiAqXG4gKiBAYXBpIHB1YmxpY1xuICovXG5leHBvcnRzLmxvZyA9IGNvbnNvbGUuZGVidWcgfHwgY29uc29sZS5sb2cgfHwgKCgpID0+IHt9KTtcblxuLyoqXG4gKiBTYXZlIGBuYW1lc3BhY2VzYC5cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gbmFtZXNwYWNlc1xuICogQGFwaSBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIHNhdmUobmFtZXNwYWNlcykge1xuXHR0cnkge1xuXHRcdGlmIChuYW1lc3BhY2VzKSB7XG5cdFx0XHRleHBvcnRzLnN0b3JhZ2Uuc2V0SXRlbSgnZGVidWcnLCBuYW1lc3BhY2VzKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0ZXhwb3J0cy5zdG9yYWdlLnJlbW92ZUl0ZW0oJ2RlYnVnJyk7XG5cdFx0fVxuXHR9IGNhdGNoIChlcnJvcikge1xuXHRcdC8vIFN3YWxsb3dcblx0XHQvLyBYWFggKEBRaXgtKSBzaG91bGQgd2UgYmUgbG9nZ2luZyB0aGVzZT9cblx0fVxufVxuXG4vKipcbiAqIExvYWQgYG5hbWVzcGFjZXNgLlxuICpcbiAqIEByZXR1cm4ge1N0cmluZ30gcmV0dXJucyB0aGUgcHJldmlvdXNseSBwZXJzaXN0ZWQgZGVidWcgbW9kZXNcbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBsb2FkKCkge1xuXHRsZXQgcjtcblx0dHJ5IHtcblx0XHRyID0gZXhwb3J0cy5zdG9yYWdlLmdldEl0ZW0oJ2RlYnVnJyk7XG5cdH0gY2F0Y2ggKGVycm9yKSB7XG5cdFx0Ly8gU3dhbGxvd1xuXHRcdC8vIFhYWCAoQFFpeC0pIHNob3VsZCB3ZSBiZSBsb2dnaW5nIHRoZXNlP1xuXHR9XG5cblx0Ly8gSWYgZGVidWcgaXNuJ3Qgc2V0IGluIExTLCBhbmQgd2UncmUgaW4gRWxlY3Ryb24sIHRyeSB0byBsb2FkICRERUJVR1xuXHRpZiAoIXIgJiYgdHlwZW9mIHByb2Nlc3MgIT09ICd1bmRlZmluZWQnICYmICdlbnYnIGluIHByb2Nlc3MpIHtcblx0XHRyID0gcHJvY2Vzcy5lbnYuREVCVUc7XG5cdH1cblxuXHRyZXR1cm4gcjtcbn1cblxuLyoqXG4gKiBMb2NhbHN0b3JhZ2UgYXR0ZW1wdHMgdG8gcmV0dXJuIHRoZSBsb2NhbHN0b3JhZ2UuXG4gKlxuICogVGhpcyBpcyBuZWNlc3NhcnkgYmVjYXVzZSBzYWZhcmkgdGhyb3dzXG4gKiB3aGVuIGEgdXNlciBkaXNhYmxlcyBjb29raWVzL2xvY2Fsc3RvcmFnZVxuICogYW5kIHlvdSBhdHRlbXB0IHRvIGFjY2VzcyBpdC5cbiAqXG4gKiBAcmV0dXJuIHtMb2NhbFN0b3JhZ2V9XG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuXG5mdW5jdGlvbiBsb2NhbHN0b3JhZ2UoKSB7XG5cdHRyeSB7XG5cdFx0Ly8gVFZNTEtpdCAoQXBwbGUgVFYgSlMgUnVudGltZSkgZG9lcyBub3QgaGF2ZSBhIHdpbmRvdyBvYmplY3QsIGp1c3QgbG9jYWxTdG9yYWdlIGluIHRoZSBnbG9iYWwgY29udGV4dFxuXHRcdC8vIFRoZSBCcm93c2VyIGFsc28gaGFzIGxvY2FsU3RvcmFnZSBpbiB0aGUgZ2xvYmFsIGNvbnRleHQuXG5cdFx0cmV0dXJuIGxvY2FsU3RvcmFnZTtcblx0fSBjYXRjaCAoZXJyb3IpIHtcblx0XHQvLyBTd2FsbG93XG5cdFx0Ly8gWFhYIChAUWl4LSkgc2hvdWxkIHdlIGJlIGxvZ2dpbmcgdGhlc2U/XG5cdH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2NvbW1vbicpKGV4cG9ydHMpO1xuXG5jb25zdCB7Zm9ybWF0dGVyc30gPSBtb2R1bGUuZXhwb3J0cztcblxuLyoqXG4gKiBNYXAgJWogdG8gYEpTT04uc3RyaW5naWZ5KClgLCBzaW5jZSBubyBXZWIgSW5zcGVjdG9ycyBkbyB0aGF0IGJ5IGRlZmF1bHQuXG4gKi9cblxuZm9ybWF0dGVycy5qID0gZnVuY3Rpb24gKHYpIHtcblx0dHJ5IHtcblx0XHRyZXR1cm4gSlNPTi5zdHJpbmdpZnkodik7XG5cdH0gY2F0Y2ggKGVycm9yKSB7XG5cdFx0cmV0dXJuICdbVW5leHBlY3RlZEpTT05QYXJzZUVycm9yXTogJyArIGVycm9yLm1lc3NhZ2U7XG5cdH1cbn07XG4iLCJcbi8qKlxuICogVGhpcyBpcyB0aGUgY29tbW9uIGxvZ2ljIGZvciBib3RoIHRoZSBOb2RlLmpzIGFuZCB3ZWIgYnJvd3NlclxuICogaW1wbGVtZW50YXRpb25zIG9mIGBkZWJ1ZygpYC5cbiAqL1xuXG5mdW5jdGlvbiBzZXR1cChlbnYpIHtcblx0Y3JlYXRlRGVidWcuZGVidWcgPSBjcmVhdGVEZWJ1Zztcblx0Y3JlYXRlRGVidWcuZGVmYXVsdCA9IGNyZWF0ZURlYnVnO1xuXHRjcmVhdGVEZWJ1Zy5jb2VyY2UgPSBjb2VyY2U7XG5cdGNyZWF0ZURlYnVnLmRpc2FibGUgPSBkaXNhYmxlO1xuXHRjcmVhdGVEZWJ1Zy5lbmFibGUgPSBlbmFibGU7XG5cdGNyZWF0ZURlYnVnLmVuYWJsZWQgPSBlbmFibGVkO1xuXHRjcmVhdGVEZWJ1Zy5odW1hbml6ZSA9IHJlcXVpcmUoJ21zJyk7XG5cdGNyZWF0ZURlYnVnLmRlc3Ryb3kgPSBkZXN0cm95O1xuXG5cdE9iamVjdC5rZXlzKGVudikuZm9yRWFjaChrZXkgPT4ge1xuXHRcdGNyZWF0ZURlYnVnW2tleV0gPSBlbnZba2V5XTtcblx0fSk7XG5cblx0LyoqXG5cdCogVGhlIGN1cnJlbnRseSBhY3RpdmUgZGVidWcgbW9kZSBuYW1lcywgYW5kIG5hbWVzIHRvIHNraXAuXG5cdCovXG5cblx0Y3JlYXRlRGVidWcubmFtZXMgPSBbXTtcblx0Y3JlYXRlRGVidWcuc2tpcHMgPSBbXTtcblxuXHQvKipcblx0KiBNYXAgb2Ygc3BlY2lhbCBcIiVuXCIgaGFuZGxpbmcgZnVuY3Rpb25zLCBmb3IgdGhlIGRlYnVnIFwiZm9ybWF0XCIgYXJndW1lbnQuXG5cdCpcblx0KiBWYWxpZCBrZXkgbmFtZXMgYXJlIGEgc2luZ2xlLCBsb3dlciBvciB1cHBlci1jYXNlIGxldHRlciwgaS5lLiBcIm5cIiBhbmQgXCJOXCIuXG5cdCovXG5cdGNyZWF0ZURlYnVnLmZvcm1hdHRlcnMgPSB7fTtcblxuXHQvKipcblx0KiBTZWxlY3RzIGEgY29sb3IgZm9yIGEgZGVidWcgbmFtZXNwYWNlXG5cdCogQHBhcmFtIHtTdHJpbmd9IG5hbWVzcGFjZSBUaGUgbmFtZXNwYWNlIHN0cmluZyBmb3IgdGhlIGRlYnVnIGluc3RhbmNlIHRvIGJlIGNvbG9yZWRcblx0KiBAcmV0dXJuIHtOdW1iZXJ8U3RyaW5nfSBBbiBBTlNJIGNvbG9yIGNvZGUgZm9yIHRoZSBnaXZlbiBuYW1lc3BhY2Vcblx0KiBAYXBpIHByaXZhdGVcblx0Ki9cblx0ZnVuY3Rpb24gc2VsZWN0Q29sb3IobmFtZXNwYWNlKSB7XG5cdFx0bGV0IGhhc2ggPSAwO1xuXG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBuYW1lc3BhY2UubGVuZ3RoOyBpKyspIHtcblx0XHRcdGhhc2ggPSAoKGhhc2ggPDwgNSkgLSBoYXNoKSArIG5hbWVzcGFjZS5jaGFyQ29kZUF0KGkpO1xuXHRcdFx0aGFzaCB8PSAwOyAvLyBDb252ZXJ0IHRvIDMyYml0IGludGVnZXJcblx0XHR9XG5cblx0XHRyZXR1cm4gY3JlYXRlRGVidWcuY29sb3JzW01hdGguYWJzKGhhc2gpICUgY3JlYXRlRGVidWcuY29sb3JzLmxlbmd0aF07XG5cdH1cblx0Y3JlYXRlRGVidWcuc2VsZWN0Q29sb3IgPSBzZWxlY3RDb2xvcjtcblxuXHQvKipcblx0KiBDcmVhdGUgYSBkZWJ1Z2dlciB3aXRoIHRoZSBnaXZlbiBgbmFtZXNwYWNlYC5cblx0KlxuXHQqIEBwYXJhbSB7U3RyaW5nfSBuYW1lc3BhY2Vcblx0KiBAcmV0dXJuIHtGdW5jdGlvbn1cblx0KiBAYXBpIHB1YmxpY1xuXHQqL1xuXHRmdW5jdGlvbiBjcmVhdGVEZWJ1ZyhuYW1lc3BhY2UpIHtcblx0XHRsZXQgcHJldlRpbWU7XG5cdFx0bGV0IGVuYWJsZU92ZXJyaWRlID0gbnVsbDtcblx0XHRsZXQgbmFtZXNwYWNlc0NhY2hlO1xuXHRcdGxldCBlbmFibGVkQ2FjaGU7XG5cblx0XHRmdW5jdGlvbiBkZWJ1ZyguLi5hcmdzKSB7XG5cdFx0XHQvLyBEaXNhYmxlZD9cblx0XHRcdGlmICghZGVidWcuZW5hYmxlZCkge1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cblx0XHRcdGNvbnN0IHNlbGYgPSBkZWJ1ZztcblxuXHRcdFx0Ly8gU2V0IGBkaWZmYCB0aW1lc3RhbXBcblx0XHRcdGNvbnN0IGN1cnIgPSBOdW1iZXIobmV3IERhdGUoKSk7XG5cdFx0XHRjb25zdCBtcyA9IGN1cnIgLSAocHJldlRpbWUgfHwgY3Vycik7XG5cdFx0XHRzZWxmLmRpZmYgPSBtcztcblx0XHRcdHNlbGYucHJldiA9IHByZXZUaW1lO1xuXHRcdFx0c2VsZi5jdXJyID0gY3Vycjtcblx0XHRcdHByZXZUaW1lID0gY3VycjtcblxuXHRcdFx0YXJnc1swXSA9IGNyZWF0ZURlYnVnLmNvZXJjZShhcmdzWzBdKTtcblxuXHRcdFx0aWYgKHR5cGVvZiBhcmdzWzBdICE9PSAnc3RyaW5nJykge1xuXHRcdFx0XHQvLyBBbnl0aGluZyBlbHNlIGxldCdzIGluc3BlY3Qgd2l0aCAlT1xuXHRcdFx0XHRhcmdzLnVuc2hpZnQoJyVPJyk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIEFwcGx5IGFueSBgZm9ybWF0dGVyc2AgdHJhbnNmb3JtYXRpb25zXG5cdFx0XHRsZXQgaW5kZXggPSAwO1xuXHRcdFx0YXJnc1swXSA9IGFyZ3NbMF0ucmVwbGFjZSgvJShbYS16QS1aJV0pL2csIChtYXRjaCwgZm9ybWF0KSA9PiB7XG5cdFx0XHRcdC8vIElmIHdlIGVuY291bnRlciBhbiBlc2NhcGVkICUgdGhlbiBkb24ndCBpbmNyZWFzZSB0aGUgYXJyYXkgaW5kZXhcblx0XHRcdFx0aWYgKG1hdGNoID09PSAnJSUnKSB7XG5cdFx0XHRcdFx0cmV0dXJuICclJztcblx0XHRcdFx0fVxuXHRcdFx0XHRpbmRleCsrO1xuXHRcdFx0XHRjb25zdCBmb3JtYXR0ZXIgPSBjcmVhdGVEZWJ1Zy5mb3JtYXR0ZXJzW2Zvcm1hdF07XG5cdFx0XHRcdGlmICh0eXBlb2YgZm9ybWF0dGVyID09PSAnZnVuY3Rpb24nKSB7XG5cdFx0XHRcdFx0Y29uc3QgdmFsID0gYXJnc1tpbmRleF07XG5cdFx0XHRcdFx0bWF0Y2ggPSBmb3JtYXR0ZXIuY2FsbChzZWxmLCB2YWwpO1xuXG5cdFx0XHRcdFx0Ly8gTm93IHdlIG5lZWQgdG8gcmVtb3ZlIGBhcmdzW2luZGV4XWAgc2luY2UgaXQncyBpbmxpbmVkIGluIHRoZSBgZm9ybWF0YFxuXHRcdFx0XHRcdGFyZ3Muc3BsaWNlKGluZGV4LCAxKTtcblx0XHRcdFx0XHRpbmRleC0tO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiBtYXRjaDtcblx0XHRcdH0pO1xuXG5cdFx0XHQvLyBBcHBseSBlbnYtc3BlY2lmaWMgZm9ybWF0dGluZyAoY29sb3JzLCBldGMuKVxuXHRcdFx0Y3JlYXRlRGVidWcuZm9ybWF0QXJncy5jYWxsKHNlbGYsIGFyZ3MpO1xuXG5cdFx0XHRjb25zdCBsb2dGbiA9IHNlbGYubG9nIHx8IGNyZWF0ZURlYnVnLmxvZztcblx0XHRcdGxvZ0ZuLmFwcGx5KHNlbGYsIGFyZ3MpO1xuXHRcdH1cblxuXHRcdGRlYnVnLm5hbWVzcGFjZSA9IG5hbWVzcGFjZTtcblx0XHRkZWJ1Zy51c2VDb2xvcnMgPSBjcmVhdGVEZWJ1Zy51c2VDb2xvcnMoKTtcblx0XHRkZWJ1Zy5jb2xvciA9IGNyZWF0ZURlYnVnLnNlbGVjdENvbG9yKG5hbWVzcGFjZSk7XG5cdFx0ZGVidWcuZXh0ZW5kID0gZXh0ZW5kO1xuXHRcdGRlYnVnLmRlc3Ryb3kgPSBjcmVhdGVEZWJ1Zy5kZXN0cm95OyAvLyBYWFggVGVtcG9yYXJ5LiBXaWxsIGJlIHJlbW92ZWQgaW4gdGhlIG5leHQgbWFqb3IgcmVsZWFzZS5cblxuXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShkZWJ1ZywgJ2VuYWJsZWQnLCB7XG5cdFx0XHRlbnVtZXJhYmxlOiB0cnVlLFxuXHRcdFx0Y29uZmlndXJhYmxlOiBmYWxzZSxcblx0XHRcdGdldDogKCkgPT4ge1xuXHRcdFx0XHRpZiAoZW5hYmxlT3ZlcnJpZGUgIT09IG51bGwpIHtcblx0XHRcdFx0XHRyZXR1cm4gZW5hYmxlT3ZlcnJpZGU7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKG5hbWVzcGFjZXNDYWNoZSAhPT0gY3JlYXRlRGVidWcubmFtZXNwYWNlcykge1xuXHRcdFx0XHRcdG5hbWVzcGFjZXNDYWNoZSA9IGNyZWF0ZURlYnVnLm5hbWVzcGFjZXM7XG5cdFx0XHRcdFx0ZW5hYmxlZENhY2hlID0gY3JlYXRlRGVidWcuZW5hYmxlZChuYW1lc3BhY2UpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0cmV0dXJuIGVuYWJsZWRDYWNoZTtcblx0XHRcdH0sXG5cdFx0XHRzZXQ6IHYgPT4ge1xuXHRcdFx0XHRlbmFibGVPdmVycmlkZSA9IHY7XG5cdFx0XHR9XG5cdFx0fSk7XG5cblx0XHQvLyBFbnYtc3BlY2lmaWMgaW5pdGlhbGl6YXRpb24gbG9naWMgZm9yIGRlYnVnIGluc3RhbmNlc1xuXHRcdGlmICh0eXBlb2YgY3JlYXRlRGVidWcuaW5pdCA9PT0gJ2Z1bmN0aW9uJykge1xuXHRcdFx0Y3JlYXRlRGVidWcuaW5pdChkZWJ1Zyk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGRlYnVnO1xuXHR9XG5cblx0ZnVuY3Rpb24gZXh0ZW5kKG5hbWVzcGFjZSwgZGVsaW1pdGVyKSB7XG5cdFx0Y29uc3QgbmV3RGVidWcgPSBjcmVhdGVEZWJ1Zyh0aGlzLm5hbWVzcGFjZSArICh0eXBlb2YgZGVsaW1pdGVyID09PSAndW5kZWZpbmVkJyA/ICc6JyA6IGRlbGltaXRlcikgKyBuYW1lc3BhY2UpO1xuXHRcdG5ld0RlYnVnLmxvZyA9IHRoaXMubG9nO1xuXHRcdHJldHVybiBuZXdEZWJ1Zztcblx0fVxuXG5cdC8qKlxuXHQqIEVuYWJsZXMgYSBkZWJ1ZyBtb2RlIGJ5IG5hbWVzcGFjZXMuIFRoaXMgY2FuIGluY2x1ZGUgbW9kZXNcblx0KiBzZXBhcmF0ZWQgYnkgYSBjb2xvbiBhbmQgd2lsZGNhcmRzLlxuXHQqXG5cdCogQHBhcmFtIHtTdHJpbmd9IG5hbWVzcGFjZXNcblx0KiBAYXBpIHB1YmxpY1xuXHQqL1xuXHRmdW5jdGlvbiBlbmFibGUobmFtZXNwYWNlcykge1xuXHRcdGNyZWF0ZURlYnVnLnNhdmUobmFtZXNwYWNlcyk7XG5cdFx0Y3JlYXRlRGVidWcubmFtZXNwYWNlcyA9IG5hbWVzcGFjZXM7XG5cblx0XHRjcmVhdGVEZWJ1Zy5uYW1lcyA9IFtdO1xuXHRcdGNyZWF0ZURlYnVnLnNraXBzID0gW107XG5cblx0XHRsZXQgaTtcblx0XHRjb25zdCBzcGxpdCA9ICh0eXBlb2YgbmFtZXNwYWNlcyA9PT0gJ3N0cmluZycgPyBuYW1lc3BhY2VzIDogJycpLnNwbGl0KC9bXFxzLF0rLyk7XG5cdFx0Y29uc3QgbGVuID0gc3BsaXQubGVuZ3RoO1xuXG5cdFx0Zm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7XG5cdFx0XHRpZiAoIXNwbGl0W2ldKSB7XG5cdFx0XHRcdC8vIGlnbm9yZSBlbXB0eSBzdHJpbmdzXG5cdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0fVxuXG5cdFx0XHRuYW1lc3BhY2VzID0gc3BsaXRbaV0ucmVwbGFjZSgvXFwqL2csICcuKj8nKTtcblxuXHRcdFx0aWYgKG5hbWVzcGFjZXNbMF0gPT09ICctJykge1xuXHRcdFx0XHRjcmVhdGVEZWJ1Zy5za2lwcy5wdXNoKG5ldyBSZWdFeHAoJ14nICsgbmFtZXNwYWNlcy5zbGljZSgxKSArICckJykpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Y3JlYXRlRGVidWcubmFtZXMucHVzaChuZXcgUmVnRXhwKCdeJyArIG5hbWVzcGFjZXMgKyAnJCcpKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvKipcblx0KiBEaXNhYmxlIGRlYnVnIG91dHB1dC5cblx0KlxuXHQqIEByZXR1cm4ge1N0cmluZ30gbmFtZXNwYWNlc1xuXHQqIEBhcGkgcHVibGljXG5cdCovXG5cdGZ1bmN0aW9uIGRpc2FibGUoKSB7XG5cdFx0Y29uc3QgbmFtZXNwYWNlcyA9IFtcblx0XHRcdC4uLmNyZWF0ZURlYnVnLm5hbWVzLm1hcCh0b05hbWVzcGFjZSksXG5cdFx0XHQuLi5jcmVhdGVEZWJ1Zy5za2lwcy5tYXAodG9OYW1lc3BhY2UpLm1hcChuYW1lc3BhY2UgPT4gJy0nICsgbmFtZXNwYWNlKVxuXHRcdF0uam9pbignLCcpO1xuXHRcdGNyZWF0ZURlYnVnLmVuYWJsZSgnJyk7XG5cdFx0cmV0dXJuIG5hbWVzcGFjZXM7XG5cdH1cblxuXHQvKipcblx0KiBSZXR1cm5zIHRydWUgaWYgdGhlIGdpdmVuIG1vZGUgbmFtZSBpcyBlbmFibGVkLCBmYWxzZSBvdGhlcndpc2UuXG5cdCpcblx0KiBAcGFyYW0ge1N0cmluZ30gbmFtZVxuXHQqIEByZXR1cm4ge0Jvb2xlYW59XG5cdCogQGFwaSBwdWJsaWNcblx0Ki9cblx0ZnVuY3Rpb24gZW5hYmxlZChuYW1lKSB7XG5cdFx0aWYgKG5hbWVbbmFtZS5sZW5ndGggLSAxXSA9PT0gJyonKSB7XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9XG5cblx0XHRsZXQgaTtcblx0XHRsZXQgbGVuO1xuXG5cdFx0Zm9yIChpID0gMCwgbGVuID0gY3JlYXRlRGVidWcuc2tpcHMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcblx0XHRcdGlmIChjcmVhdGVEZWJ1Zy5za2lwc1tpXS50ZXN0KG5hbWUpKSB7XG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRmb3IgKGkgPSAwLCBsZW4gPSBjcmVhdGVEZWJ1Zy5uYW1lcy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuXHRcdFx0aWYgKGNyZWF0ZURlYnVnLm5hbWVzW2ldLnRlc3QobmFtZSkpIHtcblx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cblx0LyoqXG5cdCogQ29udmVydCByZWdleHAgdG8gbmFtZXNwYWNlXG5cdCpcblx0KiBAcGFyYW0ge1JlZ0V4cH0gcmVneGVwXG5cdCogQHJldHVybiB7U3RyaW5nfSBuYW1lc3BhY2Vcblx0KiBAYXBpIHByaXZhdGVcblx0Ki9cblx0ZnVuY3Rpb24gdG9OYW1lc3BhY2UocmVnZXhwKSB7XG5cdFx0cmV0dXJuIHJlZ2V4cC50b1N0cmluZygpXG5cdFx0XHQuc3Vic3RyaW5nKDIsIHJlZ2V4cC50b1N0cmluZygpLmxlbmd0aCAtIDIpXG5cdFx0XHQucmVwbGFjZSgvXFwuXFwqXFw/JC8sICcqJyk7XG5cdH1cblxuXHQvKipcblx0KiBDb2VyY2UgYHZhbGAuXG5cdCpcblx0KiBAcGFyYW0ge01peGVkfSB2YWxcblx0KiBAcmV0dXJuIHtNaXhlZH1cblx0KiBAYXBpIHByaXZhdGVcblx0Ki9cblx0ZnVuY3Rpb24gY29lcmNlKHZhbCkge1xuXHRcdGlmICh2YWwgaW5zdGFuY2VvZiBFcnJvcikge1xuXHRcdFx0cmV0dXJuIHZhbC5zdGFjayB8fCB2YWwubWVzc2FnZTtcblx0XHR9XG5cdFx0cmV0dXJuIHZhbDtcblx0fVxuXG5cdC8qKlxuXHQqIFhYWCBETyBOT1QgVVNFLiBUaGlzIGlzIGEgdGVtcG9yYXJ5IHN0dWIgZnVuY3Rpb24uXG5cdCogWFhYIEl0IFdJTEwgYmUgcmVtb3ZlZCBpbiB0aGUgbmV4dCBtYWpvciByZWxlYXNlLlxuXHQqL1xuXHRmdW5jdGlvbiBkZXN0cm95KCkge1xuXHRcdGNvbnNvbGUud2FybignSW5zdGFuY2UgbWV0aG9kIGBkZWJ1Zy5kZXN0cm95KClgIGlzIGRlcHJlY2F0ZWQgYW5kIG5vIGxvbmdlciBkb2VzIGFueXRoaW5nLiBJdCB3aWxsIGJlIHJlbW92ZWQgaW4gdGhlIG5leHQgbWFqb3IgdmVyc2lvbiBvZiBgZGVidWdgLicpO1xuXHR9XG5cblx0Y3JlYXRlRGVidWcuZW5hYmxlKGNyZWF0ZURlYnVnLmxvYWQoKSk7XG5cblx0cmV0dXJuIGNyZWF0ZURlYnVnO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHNldHVwO1xuIiwiLyoqXG4gKiBEZXRlY3QgRWxlY3Ryb24gcmVuZGVyZXIgLyBud2pzIHByb2Nlc3MsIHdoaWNoIGlzIG5vZGUsIGJ1dCB3ZSBzaG91bGRcbiAqIHRyZWF0IGFzIGEgYnJvd3Nlci5cbiAqL1xuXG5pZiAodHlwZW9mIHByb2Nlc3MgPT09ICd1bmRlZmluZWQnIHx8IHByb2Nlc3MudHlwZSA9PT0gJ3JlbmRlcmVyJyB8fCBwcm9jZXNzLmJyb3dzZXIgPT09IHRydWUgfHwgcHJvY2Vzcy5fX253anMpIHtcblx0bW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2Jyb3dzZXIuanMnKTtcbn0gZWxzZSB7XG5cdG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9ub2RlLmpzJyk7XG59XG4iLCIvKipcbiAqIE1vZHVsZSBkZXBlbmRlbmNpZXMuXG4gKi9cblxuY29uc3QgdHR5ID0gcmVxdWlyZSgndHR5Jyk7XG5jb25zdCB1dGlsID0gcmVxdWlyZSgndXRpbCcpO1xuXG4vKipcbiAqIFRoaXMgaXMgdGhlIE5vZGUuanMgaW1wbGVtZW50YXRpb24gb2YgYGRlYnVnKClgLlxuICovXG5cbmV4cG9ydHMuaW5pdCA9IGluaXQ7XG5leHBvcnRzLmxvZyA9IGxvZztcbmV4cG9ydHMuZm9ybWF0QXJncyA9IGZvcm1hdEFyZ3M7XG5leHBvcnRzLnNhdmUgPSBzYXZlO1xuZXhwb3J0cy5sb2FkID0gbG9hZDtcbmV4cG9ydHMudXNlQ29sb3JzID0gdXNlQ29sb3JzO1xuZXhwb3J0cy5kZXN0cm95ID0gdXRpbC5kZXByZWNhdGUoXG5cdCgpID0+IHt9LFxuXHQnSW5zdGFuY2UgbWV0aG9kIGBkZWJ1Zy5kZXN0cm95KClgIGlzIGRlcHJlY2F0ZWQgYW5kIG5vIGxvbmdlciBkb2VzIGFueXRoaW5nLiBJdCB3aWxsIGJlIHJlbW92ZWQgaW4gdGhlIG5leHQgbWFqb3IgdmVyc2lvbiBvZiBgZGVidWdgLidcbik7XG5cbi8qKlxuICogQ29sb3JzLlxuICovXG5cbmV4cG9ydHMuY29sb3JzID0gWzYsIDIsIDMsIDQsIDUsIDFdO1xuXG50cnkge1xuXHQvLyBPcHRpb25hbCBkZXBlbmRlbmN5IChhcyBpbiwgZG9lc24ndCBuZWVkIHRvIGJlIGluc3RhbGxlZCwgTk9UIGxpa2Ugb3B0aW9uYWxEZXBlbmRlbmNpZXMgaW4gcGFja2FnZS5qc29uKVxuXHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0L25vLWV4dHJhbmVvdXMtZGVwZW5kZW5jaWVzXG5cdGNvbnN0IHN1cHBvcnRzQ29sb3IgPSByZXF1aXJlKCdzdXBwb3J0cy1jb2xvcicpO1xuXG5cdGlmIChzdXBwb3J0c0NvbG9yICYmIChzdXBwb3J0c0NvbG9yLnN0ZGVyciB8fCBzdXBwb3J0c0NvbG9yKS5sZXZlbCA+PSAyKSB7XG5cdFx0ZXhwb3J0cy5jb2xvcnMgPSBbXG5cdFx0XHQyMCxcblx0XHRcdDIxLFxuXHRcdFx0MjYsXG5cdFx0XHQyNyxcblx0XHRcdDMyLFxuXHRcdFx0MzMsXG5cdFx0XHQzOCxcblx0XHRcdDM5LFxuXHRcdFx0NDAsXG5cdFx0XHQ0MSxcblx0XHRcdDQyLFxuXHRcdFx0NDMsXG5cdFx0XHQ0NCxcblx0XHRcdDQ1LFxuXHRcdFx0NTYsXG5cdFx0XHQ1Nyxcblx0XHRcdDYyLFxuXHRcdFx0NjMsXG5cdFx0XHQ2OCxcblx0XHRcdDY5LFxuXHRcdFx0NzQsXG5cdFx0XHQ3NSxcblx0XHRcdDc2LFxuXHRcdFx0NzcsXG5cdFx0XHQ3OCxcblx0XHRcdDc5LFxuXHRcdFx0ODAsXG5cdFx0XHQ4MSxcblx0XHRcdDkyLFxuXHRcdFx0OTMsXG5cdFx0XHQ5OCxcblx0XHRcdDk5LFxuXHRcdFx0MTEyLFxuXHRcdFx0MTEzLFxuXHRcdFx0MTI4LFxuXHRcdFx0MTI5LFxuXHRcdFx0MTM0LFxuXHRcdFx0MTM1LFxuXHRcdFx0MTQ4LFxuXHRcdFx0MTQ5LFxuXHRcdFx0MTYwLFxuXHRcdFx0MTYxLFxuXHRcdFx0MTYyLFxuXHRcdFx0MTYzLFxuXHRcdFx0MTY0LFxuXHRcdFx0MTY1LFxuXHRcdFx0MTY2LFxuXHRcdFx0MTY3LFxuXHRcdFx0MTY4LFxuXHRcdFx0MTY5LFxuXHRcdFx0MTcwLFxuXHRcdFx0MTcxLFxuXHRcdFx0MTcyLFxuXHRcdFx0MTczLFxuXHRcdFx0MTc4LFxuXHRcdFx0MTc5LFxuXHRcdFx0MTg0LFxuXHRcdFx0MTg1LFxuXHRcdFx0MTk2LFxuXHRcdFx0MTk3LFxuXHRcdFx0MTk4LFxuXHRcdFx0MTk5LFxuXHRcdFx0MjAwLFxuXHRcdFx0MjAxLFxuXHRcdFx0MjAyLFxuXHRcdFx0MjAzLFxuXHRcdFx0MjA0LFxuXHRcdFx0MjA1LFxuXHRcdFx0MjA2LFxuXHRcdFx0MjA3LFxuXHRcdFx0MjA4LFxuXHRcdFx0MjA5LFxuXHRcdFx0MjE0LFxuXHRcdFx0MjE1LFxuXHRcdFx0MjIwLFxuXHRcdFx0MjIxXG5cdFx0XTtcblx0fVxufSBjYXRjaCAoZXJyb3IpIHtcblx0Ly8gU3dhbGxvdyAtIHdlIG9ubHkgY2FyZSBpZiBgc3VwcG9ydHMtY29sb3JgIGlzIGF2YWlsYWJsZTsgaXQgZG9lc24ndCBoYXZlIHRvIGJlLlxufVxuXG4vKipcbiAqIEJ1aWxkIHVwIHRoZSBkZWZhdWx0IGBpbnNwZWN0T3B0c2Agb2JqZWN0IGZyb20gdGhlIGVudmlyb25tZW50IHZhcmlhYmxlcy5cbiAqXG4gKiAgICQgREVCVUdfQ09MT1JTPW5vIERFQlVHX0RFUFRIPTEwIERFQlVHX1NIT1dfSElEREVOPWVuYWJsZWQgbm9kZSBzY3JpcHQuanNcbiAqL1xuXG5leHBvcnRzLmluc3BlY3RPcHRzID0gT2JqZWN0LmtleXMocHJvY2Vzcy5lbnYpLmZpbHRlcihrZXkgPT4ge1xuXHRyZXR1cm4gL15kZWJ1Z18vaS50ZXN0KGtleSk7XG59KS5yZWR1Y2UoKG9iaiwga2V5KSA9PiB7XG5cdC8vIENhbWVsLWNhc2Vcblx0Y29uc3QgcHJvcCA9IGtleVxuXHRcdC5zdWJzdHJpbmcoNilcblx0XHQudG9Mb3dlckNhc2UoKVxuXHRcdC5yZXBsYWNlKC9fKFthLXpdKS9nLCAoXywgaykgPT4ge1xuXHRcdFx0cmV0dXJuIGsudG9VcHBlckNhc2UoKTtcblx0XHR9KTtcblxuXHQvLyBDb2VyY2Ugc3RyaW5nIHZhbHVlIGludG8gSlMgdmFsdWVcblx0bGV0IHZhbCA9IHByb2Nlc3MuZW52W2tleV07XG5cdGlmICgvXih5ZXN8b258dHJ1ZXxlbmFibGVkKSQvaS50ZXN0KHZhbCkpIHtcblx0XHR2YWwgPSB0cnVlO1xuXHR9IGVsc2UgaWYgKC9eKG5vfG9mZnxmYWxzZXxkaXNhYmxlZCkkL2kudGVzdCh2YWwpKSB7XG5cdFx0dmFsID0gZmFsc2U7XG5cdH0gZWxzZSBpZiAodmFsID09PSAnbnVsbCcpIHtcblx0XHR2YWwgPSBudWxsO1xuXHR9IGVsc2Uge1xuXHRcdHZhbCA9IE51bWJlcih2YWwpO1xuXHR9XG5cblx0b2JqW3Byb3BdID0gdmFsO1xuXHRyZXR1cm4gb2JqO1xufSwge30pO1xuXG4vKipcbiAqIElzIHN0ZG91dCBhIFRUWT8gQ29sb3JlZCBvdXRwdXQgaXMgZW5hYmxlZCB3aGVuIGB0cnVlYC5cbiAqL1xuXG5mdW5jdGlvbiB1c2VDb2xvcnMoKSB7XG5cdHJldHVybiAnY29sb3JzJyBpbiBleHBvcnRzLmluc3BlY3RPcHRzID9cblx0XHRCb29sZWFuKGV4cG9ydHMuaW5zcGVjdE9wdHMuY29sb3JzKSA6XG5cdFx0dHR5LmlzYXR0eShwcm9jZXNzLnN0ZGVyci5mZCk7XG59XG5cbi8qKlxuICogQWRkcyBBTlNJIGNvbG9yIGVzY2FwZSBjb2RlcyBpZiBlbmFibGVkLlxuICpcbiAqIEBhcGkgcHVibGljXG4gKi9cblxuZnVuY3Rpb24gZm9ybWF0QXJncyhhcmdzKSB7XG5cdGNvbnN0IHtuYW1lc3BhY2U6IG5hbWUsIHVzZUNvbG9yc30gPSB0aGlzO1xuXG5cdGlmICh1c2VDb2xvcnMpIHtcblx0XHRjb25zdCBjID0gdGhpcy5jb2xvcjtcblx0XHRjb25zdCBjb2xvckNvZGUgPSAnXFx1MDAxQlszJyArIChjIDwgOCA/IGMgOiAnODs1OycgKyBjKTtcblx0XHRjb25zdCBwcmVmaXggPSBgICAke2NvbG9yQ29kZX07MW0ke25hbWV9IFxcdTAwMUJbMG1gO1xuXG5cdFx0YXJnc1swXSA9IHByZWZpeCArIGFyZ3NbMF0uc3BsaXQoJ1xcbicpLmpvaW4oJ1xcbicgKyBwcmVmaXgpO1xuXHRcdGFyZ3MucHVzaChjb2xvckNvZGUgKyAnbSsnICsgbW9kdWxlLmV4cG9ydHMuaHVtYW5pemUodGhpcy5kaWZmKSArICdcXHUwMDFCWzBtJyk7XG5cdH0gZWxzZSB7XG5cdFx0YXJnc1swXSA9IGdldERhdGUoKSArIG5hbWUgKyAnICcgKyBhcmdzWzBdO1xuXHR9XG59XG5cbmZ1bmN0aW9uIGdldERhdGUoKSB7XG5cdGlmIChleHBvcnRzLmluc3BlY3RPcHRzLmhpZGVEYXRlKSB7XG5cdFx0cmV0dXJuICcnO1xuXHR9XG5cdHJldHVybiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCkgKyAnICc7XG59XG5cbi8qKlxuICogSW52b2tlcyBgdXRpbC5mb3JtYXQoKWAgd2l0aCB0aGUgc3BlY2lmaWVkIGFyZ3VtZW50cyBhbmQgd3JpdGVzIHRvIHN0ZGVyci5cbiAqL1xuXG5mdW5jdGlvbiBsb2coLi4uYXJncykge1xuXHRyZXR1cm4gcHJvY2Vzcy5zdGRlcnIud3JpdGUodXRpbC5mb3JtYXQoLi4uYXJncykgKyAnXFxuJyk7XG59XG5cbi8qKlxuICogU2F2ZSBgbmFtZXNwYWNlc2AuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IG5hbWVzcGFjZXNcbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBzYXZlKG5hbWVzcGFjZXMpIHtcblx0aWYgKG5hbWVzcGFjZXMpIHtcblx0XHRwcm9jZXNzLmVudi5ERUJVRyA9IG5hbWVzcGFjZXM7XG5cdH0gZWxzZSB7XG5cdFx0Ly8gSWYgeW91IHNldCBhIHByb2Nlc3MuZW52IGZpZWxkIHRvIG51bGwgb3IgdW5kZWZpbmVkLCBpdCBnZXRzIGNhc3QgdG8gdGhlXG5cdFx0Ly8gc3RyaW5nICdudWxsJyBvciAndW5kZWZpbmVkJy4gSnVzdCBkZWxldGUgaW5zdGVhZC5cblx0XHRkZWxldGUgcHJvY2Vzcy5lbnYuREVCVUc7XG5cdH1cbn1cblxuLyoqXG4gKiBMb2FkIGBuYW1lc3BhY2VzYC5cbiAqXG4gKiBAcmV0dXJuIHtTdHJpbmd9IHJldHVybnMgdGhlIHByZXZpb3VzbHkgcGVyc2lzdGVkIGRlYnVnIG1vZGVzXG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuXG5mdW5jdGlvbiBsb2FkKCkge1xuXHRyZXR1cm4gcHJvY2Vzcy5lbnYuREVCVUc7XG59XG5cbi8qKlxuICogSW5pdCBsb2dpYyBmb3IgYGRlYnVnYCBpbnN0YW5jZXMuXG4gKlxuICogQ3JlYXRlIGEgbmV3IGBpbnNwZWN0T3B0c2Agb2JqZWN0IGluIGNhc2UgYHVzZUNvbG9yc2AgaXMgc2V0XG4gKiBkaWZmZXJlbnRseSBmb3IgYSBwYXJ0aWN1bGFyIGBkZWJ1Z2AgaW5zdGFuY2UuXG4gKi9cblxuZnVuY3Rpb24gaW5pdChkZWJ1Zykge1xuXHRkZWJ1Zy5pbnNwZWN0T3B0cyA9IHt9O1xuXG5cdGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhleHBvcnRzLmluc3BlY3RPcHRzKTtcblx0Zm9yIChsZXQgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgaSsrKSB7XG5cdFx0ZGVidWcuaW5zcGVjdE9wdHNba2V5c1tpXV0gPSBleHBvcnRzLmluc3BlY3RPcHRzW2tleXNbaV1dO1xuXHR9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9jb21tb24nKShleHBvcnRzKTtcblxuY29uc3Qge2Zvcm1hdHRlcnN9ID0gbW9kdWxlLmV4cG9ydHM7XG5cbi8qKlxuICogTWFwICVvIHRvIGB1dGlsLmluc3BlY3QoKWAsIGFsbCBvbiBhIHNpbmdsZSBsaW5lLlxuICovXG5cbmZvcm1hdHRlcnMubyA9IGZ1bmN0aW9uICh2KSB7XG5cdHRoaXMuaW5zcGVjdE9wdHMuY29sb3JzID0gdGhpcy51c2VDb2xvcnM7XG5cdHJldHVybiB1dGlsLmluc3BlY3QodiwgdGhpcy5pbnNwZWN0T3B0cylcblx0XHQuc3BsaXQoJ1xcbicpXG5cdFx0Lm1hcChzdHIgPT4gc3RyLnRyaW0oKSlcblx0XHQuam9pbignICcpO1xufTtcblxuLyoqXG4gKiBNYXAgJU8gdG8gYHV0aWwuaW5zcGVjdCgpYCwgYWxsb3dpbmcgbXVsdGlwbGUgbGluZXMgaWYgbmVlZGVkLlxuICovXG5cbmZvcm1hdHRlcnMuTyA9IGZ1bmN0aW9uICh2KSB7XG5cdHRoaXMuaW5zcGVjdE9wdHMuY29sb3JzID0gdGhpcy51c2VDb2xvcnM7XG5cdHJldHVybiB1dGlsLmluc3BlY3QodiwgdGhpcy5pbnNwZWN0T3B0cyk7XG59O1xuIiwidmFyIFN0cmVhbSA9IHJlcXVpcmUoJ3N0cmVhbScpLlN0cmVhbTtcbnZhciB1dGlsID0gcmVxdWlyZSgndXRpbCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IERlbGF5ZWRTdHJlYW07XG5mdW5jdGlvbiBEZWxheWVkU3RyZWFtKCkge1xuICB0aGlzLnNvdXJjZSA9IG51bGw7XG4gIHRoaXMuZGF0YVNpemUgPSAwO1xuICB0aGlzLm1heERhdGFTaXplID0gMTAyNCAqIDEwMjQ7XG4gIHRoaXMucGF1c2VTdHJlYW0gPSB0cnVlO1xuXG4gIHRoaXMuX21heERhdGFTaXplRXhjZWVkZWQgPSBmYWxzZTtcbiAgdGhpcy5fcmVsZWFzZWQgPSBmYWxzZTtcbiAgdGhpcy5fYnVmZmVyZWRFdmVudHMgPSBbXTtcbn1cbnV0aWwuaW5oZXJpdHMoRGVsYXllZFN0cmVhbSwgU3RyZWFtKTtcblxuRGVsYXllZFN0cmVhbS5jcmVhdGUgPSBmdW5jdGlvbihzb3VyY2UsIG9wdGlvbnMpIHtcbiAgdmFyIGRlbGF5ZWRTdHJlYW0gPSBuZXcgdGhpcygpO1xuXG4gIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuICBmb3IgKHZhciBvcHRpb24gaW4gb3B0aW9ucykge1xuICAgIGRlbGF5ZWRTdHJlYW1bb3B0aW9uXSA9IG9wdGlvbnNbb3B0aW9uXTtcbiAgfVxuXG4gIGRlbGF5ZWRTdHJlYW0uc291cmNlID0gc291cmNlO1xuXG4gIHZhciByZWFsRW1pdCA9IHNvdXJjZS5lbWl0O1xuICBzb3VyY2UuZW1pdCA9IGZ1bmN0aW9uKCkge1xuICAgIGRlbGF5ZWRTdHJlYW0uX2hhbmRsZUVtaXQoYXJndW1lbnRzKTtcbiAgICByZXR1cm4gcmVhbEVtaXQuYXBwbHkoc291cmNlLCBhcmd1bWVudHMpO1xuICB9O1xuXG4gIHNvdXJjZS5vbignZXJyb3InLCBmdW5jdGlvbigpIHt9KTtcbiAgaWYgKGRlbGF5ZWRTdHJlYW0ucGF1c2VTdHJlYW0pIHtcbiAgICBzb3VyY2UucGF1c2UoKTtcbiAgfVxuXG4gIHJldHVybiBkZWxheWVkU3RyZWFtO1xufTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KERlbGF5ZWRTdHJlYW0ucHJvdG90eXBlLCAncmVhZGFibGUnLCB7XG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5zb3VyY2UucmVhZGFibGU7XG4gIH1cbn0pO1xuXG5EZWxheWVkU3RyZWFtLnByb3RvdHlwZS5zZXRFbmNvZGluZyA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gdGhpcy5zb3VyY2Uuc2V0RW5jb2RpbmcuYXBwbHkodGhpcy5zb3VyY2UsIGFyZ3VtZW50cyk7XG59O1xuXG5EZWxheWVkU3RyZWFtLnByb3RvdHlwZS5yZXN1bWUgPSBmdW5jdGlvbigpIHtcbiAgaWYgKCF0aGlzLl9yZWxlYXNlZCkge1xuICAgIHRoaXMucmVsZWFzZSgpO1xuICB9XG5cbiAgdGhpcy5zb3VyY2UucmVzdW1lKCk7XG59O1xuXG5EZWxheWVkU3RyZWFtLnByb3RvdHlwZS5wYXVzZSA9IGZ1bmN0aW9uKCkge1xuICB0aGlzLnNvdXJjZS5wYXVzZSgpO1xufTtcblxuRGVsYXllZFN0cmVhbS5wcm90b3R5cGUucmVsZWFzZSA9IGZ1bmN0aW9uKCkge1xuICB0aGlzLl9yZWxlYXNlZCA9IHRydWU7XG5cbiAgdGhpcy5fYnVmZmVyZWRFdmVudHMuZm9yRWFjaChmdW5jdGlvbihhcmdzKSB7XG4gICAgdGhpcy5lbWl0LmFwcGx5KHRoaXMsIGFyZ3MpO1xuICB9LmJpbmQodGhpcykpO1xuICB0aGlzLl9idWZmZXJlZEV2ZW50cyA9IFtdO1xufTtcblxuRGVsYXllZFN0cmVhbS5wcm90b3R5cGUucGlwZSA9IGZ1bmN0aW9uKCkge1xuICB2YXIgciA9IFN0cmVhbS5wcm90b3R5cGUucGlwZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICB0aGlzLnJlc3VtZSgpO1xuICByZXR1cm4gcjtcbn07XG5cbkRlbGF5ZWRTdHJlYW0ucHJvdG90eXBlLl9oYW5kbGVFbWl0ID0gZnVuY3Rpb24oYXJncykge1xuICBpZiAodGhpcy5fcmVsZWFzZWQpIHtcbiAgICB0aGlzLmVtaXQuYXBwbHkodGhpcywgYXJncyk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKGFyZ3NbMF0gPT09ICdkYXRhJykge1xuICAgIHRoaXMuZGF0YVNpemUgKz0gYXJnc1sxXS5sZW5ndGg7XG4gICAgdGhpcy5fY2hlY2tJZk1heERhdGFTaXplRXhjZWVkZWQoKTtcbiAgfVxuXG4gIHRoaXMuX2J1ZmZlcmVkRXZlbnRzLnB1c2goYXJncyk7XG59O1xuXG5EZWxheWVkU3RyZWFtLnByb3RvdHlwZS5fY2hlY2tJZk1heERhdGFTaXplRXhjZWVkZWQgPSBmdW5jdGlvbigpIHtcbiAgaWYgKHRoaXMuX21heERhdGFTaXplRXhjZWVkZWQpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAodGhpcy5kYXRhU2l6ZSA8PSB0aGlzLm1heERhdGFTaXplKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdGhpcy5fbWF4RGF0YVNpemVFeGNlZWRlZCA9IHRydWU7XG4gIHZhciBtZXNzYWdlID1cbiAgICAnRGVsYXllZFN0cmVhbSNtYXhEYXRhU2l6ZSBvZiAnICsgdGhpcy5tYXhEYXRhU2l6ZSArICcgYnl0ZXMgZXhjZWVkZWQuJ1xuICB0aGlzLmVtaXQoJ2Vycm9yJywgbmV3IEVycm9yKG1lc3NhZ2UpKTtcbn07XG4iLCJ2YXIgZGVidWc7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKCkge1xuICBpZiAoIWRlYnVnKSB7XG4gICAgdHJ5IHtcbiAgICAgIC8qIGVzbGludCBnbG9iYWwtcmVxdWlyZTogb2ZmICovXG4gICAgICBkZWJ1ZyA9IHJlcXVpcmUoXCJkZWJ1Z1wiKShcImZvbGxvdy1yZWRpcmVjdHNcIik7XG4gICAgfVxuICAgIGNhdGNoIChlcnJvcikgeyAvKiAqLyB9XG4gICAgaWYgKHR5cGVvZiBkZWJ1ZyAhPT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICBkZWJ1ZyA9IGZ1bmN0aW9uICgpIHsgLyogKi8gfTtcbiAgICB9XG4gIH1cbiAgZGVidWcuYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcbn07XG4iLCJ2YXIgdXJsID0gcmVxdWlyZShcInVybFwiKTtcbnZhciBVUkwgPSB1cmwuVVJMO1xudmFyIGh0dHAgPSByZXF1aXJlKFwiaHR0cFwiKTtcbnZhciBodHRwcyA9IHJlcXVpcmUoXCJodHRwc1wiKTtcbnZhciBXcml0YWJsZSA9IHJlcXVpcmUoXCJzdHJlYW1cIikuV3JpdGFibGU7XG52YXIgYXNzZXJ0ID0gcmVxdWlyZShcImFzc2VydFwiKTtcbnZhciBkZWJ1ZyA9IHJlcXVpcmUoXCIuL2RlYnVnXCIpO1xuXG4vLyBDcmVhdGUgaGFuZGxlcnMgdGhhdCBwYXNzIGV2ZW50cyBmcm9tIG5hdGl2ZSByZXF1ZXN0c1xudmFyIGV2ZW50cyA9IFtcImFib3J0XCIsIFwiYWJvcnRlZFwiLCBcImNvbm5lY3RcIiwgXCJlcnJvclwiLCBcInNvY2tldFwiLCBcInRpbWVvdXRcIl07XG52YXIgZXZlbnRIYW5kbGVycyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG5ldmVudHMuZm9yRWFjaChmdW5jdGlvbiAoZXZlbnQpIHtcbiAgZXZlbnRIYW5kbGVyc1tldmVudF0gPSBmdW5jdGlvbiAoYXJnMSwgYXJnMiwgYXJnMykge1xuICAgIHRoaXMuX3JlZGlyZWN0YWJsZS5lbWl0KGV2ZW50LCBhcmcxLCBhcmcyLCBhcmczKTtcbiAgfTtcbn0pO1xuXG4vLyBFcnJvciB0eXBlcyB3aXRoIGNvZGVzXG52YXIgUmVkaXJlY3Rpb25FcnJvciA9IGNyZWF0ZUVycm9yVHlwZShcbiAgXCJFUlJfRlJfUkVESVJFQ1RJT05fRkFJTFVSRVwiLFxuICBcIlJlZGlyZWN0ZWQgcmVxdWVzdCBmYWlsZWRcIlxuKTtcbnZhciBUb29NYW55UmVkaXJlY3RzRXJyb3IgPSBjcmVhdGVFcnJvclR5cGUoXG4gIFwiRVJSX0ZSX1RPT19NQU5ZX1JFRElSRUNUU1wiLFxuICBcIk1heGltdW0gbnVtYmVyIG9mIHJlZGlyZWN0cyBleGNlZWRlZFwiXG4pO1xudmFyIE1heEJvZHlMZW5ndGhFeGNlZWRlZEVycm9yID0gY3JlYXRlRXJyb3JUeXBlKFxuICBcIkVSUl9GUl9NQVhfQk9EWV9MRU5HVEhfRVhDRUVERURcIixcbiAgXCJSZXF1ZXN0IGJvZHkgbGFyZ2VyIHRoYW4gbWF4Qm9keUxlbmd0aCBsaW1pdFwiXG4pO1xudmFyIFdyaXRlQWZ0ZXJFbmRFcnJvciA9IGNyZWF0ZUVycm9yVHlwZShcbiAgXCJFUlJfU1RSRUFNX1dSSVRFX0FGVEVSX0VORFwiLFxuICBcIndyaXRlIGFmdGVyIGVuZFwiXG4pO1xuXG4vLyBBbiBIVFRQKFMpIHJlcXVlc3QgdGhhdCBjYW4gYmUgcmVkaXJlY3RlZFxuZnVuY3Rpb24gUmVkaXJlY3RhYmxlUmVxdWVzdChvcHRpb25zLCByZXNwb25zZUNhbGxiYWNrKSB7XG4gIC8vIEluaXRpYWxpemUgdGhlIHJlcXVlc3RcbiAgV3JpdGFibGUuY2FsbCh0aGlzKTtcbiAgdGhpcy5fc2FuaXRpemVPcHRpb25zKG9wdGlvbnMpO1xuICB0aGlzLl9vcHRpb25zID0gb3B0aW9ucztcbiAgdGhpcy5fZW5kZWQgPSBmYWxzZTtcbiAgdGhpcy5fZW5kaW5nID0gZmFsc2U7XG4gIHRoaXMuX3JlZGlyZWN0Q291bnQgPSAwO1xuICB0aGlzLl9yZWRpcmVjdHMgPSBbXTtcbiAgdGhpcy5fcmVxdWVzdEJvZHlMZW5ndGggPSAwO1xuICB0aGlzLl9yZXF1ZXN0Qm9keUJ1ZmZlcnMgPSBbXTtcblxuICAvLyBBdHRhY2ggYSBjYWxsYmFjayBpZiBwYXNzZWRcbiAgaWYgKHJlc3BvbnNlQ2FsbGJhY2spIHtcbiAgICB0aGlzLm9uKFwicmVzcG9uc2VcIiwgcmVzcG9uc2VDYWxsYmFjayk7XG4gIH1cblxuICAvLyBSZWFjdCB0byByZXNwb25zZXMgb2YgbmF0aXZlIHJlcXVlc3RzXG4gIHZhciBzZWxmID0gdGhpcztcbiAgdGhpcy5fb25OYXRpdmVSZXNwb25zZSA9IGZ1bmN0aW9uIChyZXNwb25zZSkge1xuICAgIHNlbGYuX3Byb2Nlc3NSZXNwb25zZShyZXNwb25zZSk7XG4gIH07XG5cbiAgLy8gUGVyZm9ybSB0aGUgZmlyc3QgcmVxdWVzdFxuICB0aGlzLl9wZXJmb3JtUmVxdWVzdCgpO1xufVxuUmVkaXJlY3RhYmxlUmVxdWVzdC5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFdyaXRhYmxlLnByb3RvdHlwZSk7XG5cblJlZGlyZWN0YWJsZVJlcXVlc3QucHJvdG90eXBlLmFib3J0ID0gZnVuY3Rpb24gKCkge1xuICBhYm9ydFJlcXVlc3QodGhpcy5fY3VycmVudFJlcXVlc3QpO1xuICB0aGlzLmVtaXQoXCJhYm9ydFwiKTtcbn07XG5cbi8vIFdyaXRlcyBidWZmZXJlZCBkYXRhIHRvIHRoZSBjdXJyZW50IG5hdGl2ZSByZXF1ZXN0XG5SZWRpcmVjdGFibGVSZXF1ZXN0LnByb3RvdHlwZS53cml0ZSA9IGZ1bmN0aW9uIChkYXRhLCBlbmNvZGluZywgY2FsbGJhY2spIHtcbiAgLy8gV3JpdGluZyBpcyBub3QgYWxsb3dlZCBpZiBlbmQgaGFzIGJlZW4gY2FsbGVkXG4gIGlmICh0aGlzLl9lbmRpbmcpIHtcbiAgICB0aHJvdyBuZXcgV3JpdGVBZnRlckVuZEVycm9yKCk7XG4gIH1cblxuICAvLyBWYWxpZGF0ZSBpbnB1dCBhbmQgc2hpZnQgcGFyYW1ldGVycyBpZiBuZWNlc3NhcnlcbiAgaWYgKCEodHlwZW9mIGRhdGEgPT09IFwic3RyaW5nXCIgfHwgdHlwZW9mIGRhdGEgPT09IFwib2JqZWN0XCIgJiYgKFwibGVuZ3RoXCIgaW4gZGF0YSkpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcImRhdGEgc2hvdWxkIGJlIGEgc3RyaW5nLCBCdWZmZXIgb3IgVWludDhBcnJheVwiKTtcbiAgfVxuICBpZiAodHlwZW9mIGVuY29kaW5nID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICBjYWxsYmFjayA9IGVuY29kaW5nO1xuICAgIGVuY29kaW5nID0gbnVsbDtcbiAgfVxuXG4gIC8vIElnbm9yZSBlbXB0eSBidWZmZXJzLCBzaW5jZSB3cml0aW5nIHRoZW0gZG9lc24ndCBpbnZva2UgdGhlIGNhbGxiYWNrXG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9ub2RlanMvbm9kZS9pc3N1ZXMvMjIwNjZcbiAgaWYgKGRhdGEubGVuZ3RoID09PSAwKSB7XG4gICAgaWYgKGNhbGxiYWNrKSB7XG4gICAgICBjYWxsYmFjaygpO1xuICAgIH1cbiAgICByZXR1cm47XG4gIH1cbiAgLy8gT25seSB3cml0ZSB3aGVuIHdlIGRvbid0IGV4Y2VlZCB0aGUgbWF4aW11bSBib2R5IGxlbmd0aFxuICBpZiAodGhpcy5fcmVxdWVzdEJvZHlMZW5ndGggKyBkYXRhLmxlbmd0aCA8PSB0aGlzLl9vcHRpb25zLm1heEJvZHlMZW5ndGgpIHtcbiAgICB0aGlzLl9yZXF1ZXN0Qm9keUxlbmd0aCArPSBkYXRhLmxlbmd0aDtcbiAgICB0aGlzLl9yZXF1ZXN0Qm9keUJ1ZmZlcnMucHVzaCh7IGRhdGE6IGRhdGEsIGVuY29kaW5nOiBlbmNvZGluZyB9KTtcbiAgICB0aGlzLl9jdXJyZW50UmVxdWVzdC53cml0ZShkYXRhLCBlbmNvZGluZywgY2FsbGJhY2spO1xuICB9XG4gIC8vIEVycm9yIHdoZW4gd2UgZXhjZWVkIHRoZSBtYXhpbXVtIGJvZHkgbGVuZ3RoXG4gIGVsc2Uge1xuICAgIHRoaXMuZW1pdChcImVycm9yXCIsIG5ldyBNYXhCb2R5TGVuZ3RoRXhjZWVkZWRFcnJvcigpKTtcbiAgICB0aGlzLmFib3J0KCk7XG4gIH1cbn07XG5cbi8vIEVuZHMgdGhlIGN1cnJlbnQgbmF0aXZlIHJlcXVlc3RcblJlZGlyZWN0YWJsZVJlcXVlc3QucHJvdG90eXBlLmVuZCA9IGZ1bmN0aW9uIChkYXRhLCBlbmNvZGluZywgY2FsbGJhY2spIHtcbiAgLy8gU2hpZnQgcGFyYW1ldGVycyBpZiBuZWNlc3NhcnlcbiAgaWYgKHR5cGVvZiBkYXRhID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICBjYWxsYmFjayA9IGRhdGE7XG4gICAgZGF0YSA9IGVuY29kaW5nID0gbnVsbDtcbiAgfVxuICBlbHNlIGlmICh0eXBlb2YgZW5jb2RpbmcgPT09IFwiZnVuY3Rpb25cIikge1xuICAgIGNhbGxiYWNrID0gZW5jb2Rpbmc7XG4gICAgZW5jb2RpbmcgPSBudWxsO1xuICB9XG5cbiAgLy8gV3JpdGUgZGF0YSBpZiBuZWVkZWQgYW5kIGVuZFxuICBpZiAoIWRhdGEpIHtcbiAgICB0aGlzLl9lbmRlZCA9IHRoaXMuX2VuZGluZyA9IHRydWU7XG4gICAgdGhpcy5fY3VycmVudFJlcXVlc3QuZW5kKG51bGwsIG51bGwsIGNhbGxiYWNrKTtcbiAgfVxuICBlbHNlIHtcbiAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgdmFyIGN1cnJlbnRSZXF1ZXN0ID0gdGhpcy5fY3VycmVudFJlcXVlc3Q7XG4gICAgdGhpcy53cml0ZShkYXRhLCBlbmNvZGluZywgZnVuY3Rpb24gKCkge1xuICAgICAgc2VsZi5fZW5kZWQgPSB0cnVlO1xuICAgICAgY3VycmVudFJlcXVlc3QuZW5kKG51bGwsIG51bGwsIGNhbGxiYWNrKTtcbiAgICB9KTtcbiAgICB0aGlzLl9lbmRpbmcgPSB0cnVlO1xuICB9XG59O1xuXG4vLyBTZXRzIGEgaGVhZGVyIHZhbHVlIG9uIHRoZSBjdXJyZW50IG5hdGl2ZSByZXF1ZXN0XG5SZWRpcmVjdGFibGVSZXF1ZXN0LnByb3RvdHlwZS5zZXRIZWFkZXIgPSBmdW5jdGlvbiAobmFtZSwgdmFsdWUpIHtcbiAgdGhpcy5fb3B0aW9ucy5oZWFkZXJzW25hbWVdID0gdmFsdWU7XG4gIHRoaXMuX2N1cnJlbnRSZXF1ZXN0LnNldEhlYWRlcihuYW1lLCB2YWx1ZSk7XG59O1xuXG4vLyBDbGVhcnMgYSBoZWFkZXIgdmFsdWUgb24gdGhlIGN1cnJlbnQgbmF0aXZlIHJlcXVlc3RcblJlZGlyZWN0YWJsZVJlcXVlc3QucHJvdG90eXBlLnJlbW92ZUhlYWRlciA9IGZ1bmN0aW9uIChuYW1lKSB7XG4gIGRlbGV0ZSB0aGlzLl9vcHRpb25zLmhlYWRlcnNbbmFtZV07XG4gIHRoaXMuX2N1cnJlbnRSZXF1ZXN0LnJlbW92ZUhlYWRlcihuYW1lKTtcbn07XG5cbi8vIEdsb2JhbCB0aW1lb3V0IGZvciBhbGwgdW5kZXJseWluZyByZXF1ZXN0c1xuUmVkaXJlY3RhYmxlUmVxdWVzdC5wcm90b3R5cGUuc2V0VGltZW91dCA9IGZ1bmN0aW9uIChtc2VjcywgY2FsbGJhY2spIHtcbiAgdmFyIHNlbGYgPSB0aGlzO1xuXG4gIC8vIERlc3Ryb3lzIHRoZSBzb2NrZXQgb24gdGltZW91dFxuICBmdW5jdGlvbiBkZXN0cm95T25UaW1lb3V0KHNvY2tldCkge1xuICAgIHNvY2tldC5zZXRUaW1lb3V0KG1zZWNzKTtcbiAgICBzb2NrZXQucmVtb3ZlTGlzdGVuZXIoXCJ0aW1lb3V0XCIsIHNvY2tldC5kZXN0cm95KTtcbiAgICBzb2NrZXQuYWRkTGlzdGVuZXIoXCJ0aW1lb3V0XCIsIHNvY2tldC5kZXN0cm95KTtcbiAgfVxuXG4gIC8vIFNldHMgdXAgYSB0aW1lciB0byB0cmlnZ2VyIGEgdGltZW91dCBldmVudFxuICBmdW5jdGlvbiBzdGFydFRpbWVyKHNvY2tldCkge1xuICAgIGlmIChzZWxmLl90aW1lb3V0KSB7XG4gICAgICBjbGVhclRpbWVvdXQoc2VsZi5fdGltZW91dCk7XG4gICAgfVxuICAgIHNlbGYuX3RpbWVvdXQgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgIHNlbGYuZW1pdChcInRpbWVvdXRcIik7XG4gICAgICBjbGVhclRpbWVyKCk7XG4gICAgfSwgbXNlY3MpO1xuICAgIGRlc3Ryb3lPblRpbWVvdXQoc29ja2V0KTtcbiAgfVxuXG4gIC8vIFN0b3BzIGEgdGltZW91dCBmcm9tIHRyaWdnZXJpbmdcbiAgZnVuY3Rpb24gY2xlYXJUaW1lcigpIHtcbiAgICAvLyBDbGVhciB0aGUgdGltZW91dFxuICAgIGlmIChzZWxmLl90aW1lb3V0KSB7XG4gICAgICBjbGVhclRpbWVvdXQoc2VsZi5fdGltZW91dCk7XG4gICAgICBzZWxmLl90aW1lb3V0ID0gbnVsbDtcbiAgICB9XG5cbiAgICAvLyBDbGVhbiB1cCBhbGwgYXR0YWNoZWQgbGlzdGVuZXJzXG4gICAgc2VsZi5yZW1vdmVMaXN0ZW5lcihcImFib3J0XCIsIGNsZWFyVGltZXIpO1xuICAgIHNlbGYucmVtb3ZlTGlzdGVuZXIoXCJlcnJvclwiLCBjbGVhclRpbWVyKTtcbiAgICBzZWxmLnJlbW92ZUxpc3RlbmVyKFwicmVzcG9uc2VcIiwgY2xlYXJUaW1lcik7XG4gICAgaWYgKGNhbGxiYWNrKSB7XG4gICAgICBzZWxmLnJlbW92ZUxpc3RlbmVyKFwidGltZW91dFwiLCBjYWxsYmFjayk7XG4gICAgfVxuICAgIGlmICghc2VsZi5zb2NrZXQpIHtcbiAgICAgIHNlbGYuX2N1cnJlbnRSZXF1ZXN0LnJlbW92ZUxpc3RlbmVyKFwic29ja2V0XCIsIHN0YXJ0VGltZXIpO1xuICAgIH1cbiAgfVxuXG4gIC8vIEF0dGFjaCBjYWxsYmFjayBpZiBwYXNzZWRcbiAgaWYgKGNhbGxiYWNrKSB7XG4gICAgdGhpcy5vbihcInRpbWVvdXRcIiwgY2FsbGJhY2spO1xuICB9XG5cbiAgLy8gU3RhcnQgdGhlIHRpbWVyIGlmIG9yIHdoZW4gdGhlIHNvY2tldCBpcyBvcGVuZWRcbiAgaWYgKHRoaXMuc29ja2V0KSB7XG4gICAgc3RhcnRUaW1lcih0aGlzLnNvY2tldCk7XG4gIH1cbiAgZWxzZSB7XG4gICAgdGhpcy5fY3VycmVudFJlcXVlc3Qub25jZShcInNvY2tldFwiLCBzdGFydFRpbWVyKTtcbiAgfVxuXG4gIC8vIENsZWFuIHVwIG9uIGV2ZW50c1xuICB0aGlzLm9uKFwic29ja2V0XCIsIGRlc3Ryb3lPblRpbWVvdXQpO1xuICB0aGlzLm9uKFwiYWJvcnRcIiwgY2xlYXJUaW1lcik7XG4gIHRoaXMub24oXCJlcnJvclwiLCBjbGVhclRpbWVyKTtcbiAgdGhpcy5vbihcInJlc3BvbnNlXCIsIGNsZWFyVGltZXIpO1xuXG4gIHJldHVybiB0aGlzO1xufTtcblxuLy8gUHJveHkgYWxsIG90aGVyIHB1YmxpYyBDbGllbnRSZXF1ZXN0IG1ldGhvZHNcbltcbiAgXCJmbHVzaEhlYWRlcnNcIiwgXCJnZXRIZWFkZXJcIixcbiAgXCJzZXROb0RlbGF5XCIsIFwic2V0U29ja2V0S2VlcEFsaXZlXCIsXG5dLmZvckVhY2goZnVuY3Rpb24gKG1ldGhvZCkge1xuICBSZWRpcmVjdGFibGVSZXF1ZXN0LnByb3RvdHlwZVttZXRob2RdID0gZnVuY3Rpb24gKGEsIGIpIHtcbiAgICByZXR1cm4gdGhpcy5fY3VycmVudFJlcXVlc3RbbWV0aG9kXShhLCBiKTtcbiAgfTtcbn0pO1xuXG4vLyBQcm94eSBhbGwgcHVibGljIENsaWVudFJlcXVlc3QgcHJvcGVydGllc1xuW1wiYWJvcnRlZFwiLCBcImNvbm5lY3Rpb25cIiwgXCJzb2NrZXRcIl0uZm9yRWFjaChmdW5jdGlvbiAocHJvcGVydHkpIHtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFJlZGlyZWN0YWJsZVJlcXVlc3QucHJvdG90eXBlLCBwcm9wZXJ0eSwge1xuICAgIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpcy5fY3VycmVudFJlcXVlc3RbcHJvcGVydHldOyB9LFxuICB9KTtcbn0pO1xuXG5SZWRpcmVjdGFibGVSZXF1ZXN0LnByb3RvdHlwZS5fc2FuaXRpemVPcHRpb25zID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgLy8gRW5zdXJlIGhlYWRlcnMgYXJlIGFsd2F5cyBwcmVzZW50XG4gIGlmICghb3B0aW9ucy5oZWFkZXJzKSB7XG4gICAgb3B0aW9ucy5oZWFkZXJzID0ge307XG4gIH1cblxuICAvLyBTaW5jZSBodHRwLnJlcXVlc3QgdHJlYXRzIGhvc3QgYXMgYW4gYWxpYXMgb2YgaG9zdG5hbWUsXG4gIC8vIGJ1dCB0aGUgdXJsIG1vZHVsZSBpbnRlcnByZXRzIGhvc3QgYXMgaG9zdG5hbWUgcGx1cyBwb3J0LFxuICAvLyBlbGltaW5hdGUgdGhlIGhvc3QgcHJvcGVydHkgdG8gYXZvaWQgY29uZnVzaW9uLlxuICBpZiAob3B0aW9ucy5ob3N0KSB7XG4gICAgLy8gVXNlIGhvc3RuYW1lIGlmIHNldCwgYmVjYXVzZSBpdCBoYXMgcHJlY2VkZW5jZVxuICAgIGlmICghb3B0aW9ucy5ob3N0bmFtZSkge1xuICAgICAgb3B0aW9ucy5ob3N0bmFtZSA9IG9wdGlvbnMuaG9zdDtcbiAgICB9XG4gICAgZGVsZXRlIG9wdGlvbnMuaG9zdDtcbiAgfVxuXG4gIC8vIENvbXBsZXRlIHRoZSBVUkwgb2JqZWN0IHdoZW4gbmVjZXNzYXJ5XG4gIGlmICghb3B0aW9ucy5wYXRobmFtZSAmJiBvcHRpb25zLnBhdGgpIHtcbiAgICB2YXIgc2VhcmNoUG9zID0gb3B0aW9ucy5wYXRoLmluZGV4T2YoXCI/XCIpO1xuICAgIGlmIChzZWFyY2hQb3MgPCAwKSB7XG4gICAgICBvcHRpb25zLnBhdGhuYW1lID0gb3B0aW9ucy5wYXRoO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIG9wdGlvbnMucGF0aG5hbWUgPSBvcHRpb25zLnBhdGguc3Vic3RyaW5nKDAsIHNlYXJjaFBvcyk7XG4gICAgICBvcHRpb25zLnNlYXJjaCA9IG9wdGlvbnMucGF0aC5zdWJzdHJpbmcoc2VhcmNoUG9zKTtcbiAgICB9XG4gIH1cbn07XG5cblxuLy8gRXhlY3V0ZXMgdGhlIG5leHQgbmF0aXZlIHJlcXVlc3QgKGluaXRpYWwgb3IgcmVkaXJlY3QpXG5SZWRpcmVjdGFibGVSZXF1ZXN0LnByb3RvdHlwZS5fcGVyZm9ybVJlcXVlc3QgPSBmdW5jdGlvbiAoKSB7XG4gIC8vIExvYWQgdGhlIG5hdGl2ZSBwcm90b2NvbFxuICB2YXIgcHJvdG9jb2wgPSB0aGlzLl9vcHRpb25zLnByb3RvY29sO1xuICB2YXIgbmF0aXZlUHJvdG9jb2wgPSB0aGlzLl9vcHRpb25zLm5hdGl2ZVByb3RvY29sc1twcm90b2NvbF07XG4gIGlmICghbmF0aXZlUHJvdG9jb2wpIHtcbiAgICB0aGlzLmVtaXQoXCJlcnJvclwiLCBuZXcgVHlwZUVycm9yKFwiVW5zdXBwb3J0ZWQgcHJvdG9jb2wgXCIgKyBwcm90b2NvbCkpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8vIElmIHNwZWNpZmllZCwgdXNlIHRoZSBhZ2VudCBjb3JyZXNwb25kaW5nIHRvIHRoZSBwcm90b2NvbFxuICAvLyAoSFRUUCBhbmQgSFRUUFMgdXNlIGRpZmZlcmVudCB0eXBlcyBvZiBhZ2VudHMpXG4gIGlmICh0aGlzLl9vcHRpb25zLmFnZW50cykge1xuICAgIHZhciBzY2hlbWUgPSBwcm90b2NvbC5zbGljZSgwLCAtMSk7XG4gICAgdGhpcy5fb3B0aW9ucy5hZ2VudCA9IHRoaXMuX29wdGlvbnMuYWdlbnRzW3NjaGVtZV07XG4gIH1cblxuICAvLyBDcmVhdGUgdGhlIG5hdGl2ZSByZXF1ZXN0IGFuZCBzZXQgdXAgaXRzIGV2ZW50IGhhbmRsZXJzXG4gIHZhciByZXF1ZXN0ID0gdGhpcy5fY3VycmVudFJlcXVlc3QgPVxuICAgICAgICBuYXRpdmVQcm90b2NvbC5yZXF1ZXN0KHRoaXMuX29wdGlvbnMsIHRoaXMuX29uTmF0aXZlUmVzcG9uc2UpO1xuICByZXF1ZXN0Ll9yZWRpcmVjdGFibGUgPSB0aGlzO1xuICBmb3IgKHZhciBldmVudCBvZiBldmVudHMpIHtcbiAgICByZXF1ZXN0Lm9uKGV2ZW50LCBldmVudEhhbmRsZXJzW2V2ZW50XSk7XG4gIH1cblxuICAvLyBSRkM3MjMwwqc1LjMuMTogV2hlbiBtYWtpbmcgYSByZXF1ZXN0IGRpcmVjdGx5IHRvIGFuIG9yaWdpbiBzZXJ2ZXIsIFvigKZdXG4gIC8vIGEgY2xpZW50IE1VU1Qgc2VuZCBvbmx5IHRoZSBhYnNvbHV0ZSBwYXRoIFvigKZdIGFzIHRoZSByZXF1ZXN0LXRhcmdldC5cbiAgdGhpcy5fY3VycmVudFVybCA9IC9eXFwvLy50ZXN0KHRoaXMuX29wdGlvbnMucGF0aCkgP1xuICAgIHVybC5mb3JtYXQodGhpcy5fb3B0aW9ucykgOlxuICAgIC8vIFdoZW4gbWFraW5nIGEgcmVxdWVzdCB0byBhIHByb3h5LCBb4oCmXVxuICAgIC8vIGEgY2xpZW50IE1VU1Qgc2VuZCB0aGUgdGFyZ2V0IFVSSSBpbiBhYnNvbHV0ZS1mb3JtIFvigKZdLlxuICAgIHRoaXMuX2N1cnJlbnRVcmwgPSB0aGlzLl9vcHRpb25zLnBhdGg7XG5cbiAgLy8gRW5kIGEgcmVkaXJlY3RlZCByZXF1ZXN0XG4gIC8vIChUaGUgZmlyc3QgcmVxdWVzdCBtdXN0IGJlIGVuZGVkIGV4cGxpY2l0bHkgd2l0aCBSZWRpcmVjdGFibGVSZXF1ZXN0I2VuZClcbiAgaWYgKHRoaXMuX2lzUmVkaXJlY3QpIHtcbiAgICAvLyBXcml0ZSB0aGUgcmVxdWVzdCBlbnRpdHkgYW5kIGVuZFxuICAgIHZhciBpID0gMDtcbiAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgdmFyIGJ1ZmZlcnMgPSB0aGlzLl9yZXF1ZXN0Qm9keUJ1ZmZlcnM7XG4gICAgKGZ1bmN0aW9uIHdyaXRlTmV4dChlcnJvcikge1xuICAgICAgLy8gT25seSB3cml0ZSBpZiB0aGlzIHJlcXVlc3QgaGFzIG5vdCBiZWVuIHJlZGlyZWN0ZWQgeWV0XG4gICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgICAgaWYgKHJlcXVlc3QgPT09IHNlbGYuX2N1cnJlbnRSZXF1ZXN0KSB7XG4gICAgICAgIC8vIFJlcG9ydCBhbnkgd3JpdGUgZXJyb3JzXG4gICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgICBzZWxmLmVtaXQoXCJlcnJvclwiLCBlcnJvcik7XG4gICAgICAgIH1cbiAgICAgICAgLy8gV3JpdGUgdGhlIG5leHQgYnVmZmVyIGlmIHRoZXJlIGFyZSBzdGlsbCBsZWZ0XG4gICAgICAgIGVsc2UgaWYgKGkgPCBidWZmZXJzLmxlbmd0aCkge1xuICAgICAgICAgIHZhciBidWZmZXIgPSBidWZmZXJzW2krK107XG4gICAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICAgICAgICBpZiAoIXJlcXVlc3QuZmluaXNoZWQpIHtcbiAgICAgICAgICAgIHJlcXVlc3Qud3JpdGUoYnVmZmVyLmRhdGEsIGJ1ZmZlci5lbmNvZGluZywgd3JpdGVOZXh0KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gRW5kIHRoZSByZXF1ZXN0IGlmIGBlbmRgIGhhcyBiZWVuIGNhbGxlZCBvbiB1c1xuICAgICAgICBlbHNlIGlmIChzZWxmLl9lbmRlZCkge1xuICAgICAgICAgIHJlcXVlc3QuZW5kKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KCkpO1xuICB9XG59O1xuXG4vLyBQcm9jZXNzZXMgYSByZXNwb25zZSBmcm9tIHRoZSBjdXJyZW50IG5hdGl2ZSByZXF1ZXN0XG5SZWRpcmVjdGFibGVSZXF1ZXN0LnByb3RvdHlwZS5fcHJvY2Vzc1Jlc3BvbnNlID0gZnVuY3Rpb24gKHJlc3BvbnNlKSB7XG4gIC8vIFN0b3JlIHRoZSByZWRpcmVjdGVkIHJlc3BvbnNlXG4gIHZhciBzdGF0dXNDb2RlID0gcmVzcG9uc2Uuc3RhdHVzQ29kZTtcbiAgaWYgKHRoaXMuX29wdGlvbnMudHJhY2tSZWRpcmVjdHMpIHtcbiAgICB0aGlzLl9yZWRpcmVjdHMucHVzaCh7XG4gICAgICB1cmw6IHRoaXMuX2N1cnJlbnRVcmwsXG4gICAgICBoZWFkZXJzOiByZXNwb25zZS5oZWFkZXJzLFxuICAgICAgc3RhdHVzQ29kZTogc3RhdHVzQ29kZSxcbiAgICB9KTtcbiAgfVxuXG4gIC8vIFJGQzcyMzHCpzYuNDogVGhlIDN4eCAoUmVkaXJlY3Rpb24pIGNsYXNzIG9mIHN0YXR1cyBjb2RlIGluZGljYXRlc1xuICAvLyB0aGF0IGZ1cnRoZXIgYWN0aW9uIG5lZWRzIHRvIGJlIHRha2VuIGJ5IHRoZSB1c2VyIGFnZW50IGluIG9yZGVyIHRvXG4gIC8vIGZ1bGZpbGwgdGhlIHJlcXVlc3QuIElmIGEgTG9jYXRpb24gaGVhZGVyIGZpZWxkIGlzIHByb3ZpZGVkLFxuICAvLyB0aGUgdXNlciBhZ2VudCBNQVkgYXV0b21hdGljYWxseSByZWRpcmVjdCBpdHMgcmVxdWVzdCB0byB0aGUgVVJJXG4gIC8vIHJlZmVyZW5jZWQgYnkgdGhlIExvY2F0aW9uIGZpZWxkIHZhbHVlLFxuICAvLyBldmVuIGlmIHRoZSBzcGVjaWZpYyBzdGF0dXMgY29kZSBpcyBub3QgdW5kZXJzdG9vZC5cblxuICAvLyBJZiB0aGUgcmVzcG9uc2UgaXMgbm90IGEgcmVkaXJlY3Q7IHJldHVybiBpdCBhcy1pc1xuICB2YXIgbG9jYXRpb24gPSByZXNwb25zZS5oZWFkZXJzLmxvY2F0aW9uO1xuICBpZiAoIWxvY2F0aW9uIHx8IHRoaXMuX29wdGlvbnMuZm9sbG93UmVkaXJlY3RzID09PSBmYWxzZSB8fFxuICAgICAgc3RhdHVzQ29kZSA8IDMwMCB8fCBzdGF0dXNDb2RlID49IDQwMCkge1xuICAgIHJlc3BvbnNlLnJlc3BvbnNlVXJsID0gdGhpcy5fY3VycmVudFVybDtcbiAgICByZXNwb25zZS5yZWRpcmVjdHMgPSB0aGlzLl9yZWRpcmVjdHM7XG4gICAgdGhpcy5lbWl0KFwicmVzcG9uc2VcIiwgcmVzcG9uc2UpO1xuXG4gICAgLy8gQ2xlYW4gdXBcbiAgICB0aGlzLl9yZXF1ZXN0Qm9keUJ1ZmZlcnMgPSBbXTtcbiAgICByZXR1cm47XG4gIH1cblxuICAvLyBUaGUgcmVzcG9uc2UgaXMgYSByZWRpcmVjdCwgc28gYWJvcnQgdGhlIGN1cnJlbnQgcmVxdWVzdFxuICBhYm9ydFJlcXVlc3QodGhpcy5fY3VycmVudFJlcXVlc3QpO1xuICAvLyBEaXNjYXJkIHRoZSByZW1haW5kZXIgb2YgdGhlIHJlc3BvbnNlIHRvIGF2b2lkIHdhaXRpbmcgZm9yIGRhdGFcbiAgcmVzcG9uc2UuZGVzdHJveSgpO1xuXG4gIC8vIFJGQzcyMzHCpzYuNDogQSBjbGllbnQgU0hPVUxEIGRldGVjdCBhbmQgaW50ZXJ2ZW5lXG4gIC8vIGluIGN5Y2xpY2FsIHJlZGlyZWN0aW9ucyAoaS5lLiwgXCJpbmZpbml0ZVwiIHJlZGlyZWN0aW9uIGxvb3BzKS5cbiAgaWYgKCsrdGhpcy5fcmVkaXJlY3RDb3VudCA+IHRoaXMuX29wdGlvbnMubWF4UmVkaXJlY3RzKSB7XG4gICAgdGhpcy5lbWl0KFwiZXJyb3JcIiwgbmV3IFRvb01hbnlSZWRpcmVjdHNFcnJvcigpKTtcbiAgICByZXR1cm47XG4gIH1cblxuICAvLyBTdG9yZSB0aGUgcmVxdWVzdCBoZWFkZXJzIGlmIGFwcGxpY2FibGVcbiAgdmFyIHJlcXVlc3RIZWFkZXJzO1xuICB2YXIgYmVmb3JlUmVkaXJlY3QgPSB0aGlzLl9vcHRpb25zLmJlZm9yZVJlZGlyZWN0O1xuICBpZiAoYmVmb3JlUmVkaXJlY3QpIHtcbiAgICByZXF1ZXN0SGVhZGVycyA9IE9iamVjdC5hc3NpZ24oe1xuICAgICAgLy8gVGhlIEhvc3QgaGVhZGVyIHdhcyBzZXQgYnkgbmF0aXZlUHJvdG9jb2wucmVxdWVzdFxuICAgICAgSG9zdDogcmVzcG9uc2UucmVxLmdldEhlYWRlcihcImhvc3RcIiksXG4gICAgfSwgdGhpcy5fb3B0aW9ucy5oZWFkZXJzKTtcbiAgfVxuXG4gIC8vIFJGQzcyMzHCpzYuNDogQXV0b21hdGljIHJlZGlyZWN0aW9uIG5lZWRzIHRvIGRvbmUgd2l0aFxuICAvLyBjYXJlIGZvciBtZXRob2RzIG5vdCBrbm93biB0byBiZSBzYWZlLCBb4oCmXVxuICAvLyBSRkM3MjMxwqc2LjQuMuKAkzM6IEZvciBoaXN0b3JpY2FsIHJlYXNvbnMsIGEgdXNlciBhZ2VudCBNQVkgY2hhbmdlXG4gIC8vIHRoZSByZXF1ZXN0IG1ldGhvZCBmcm9tIFBPU1QgdG8gR0VUIGZvciB0aGUgc3Vic2VxdWVudCByZXF1ZXN0LlxuICB2YXIgbWV0aG9kID0gdGhpcy5fb3B0aW9ucy5tZXRob2Q7XG4gIGlmICgoc3RhdHVzQ29kZSA9PT0gMzAxIHx8IHN0YXR1c0NvZGUgPT09IDMwMikgJiYgdGhpcy5fb3B0aW9ucy5tZXRob2QgPT09IFwiUE9TVFwiIHx8XG4gICAgICAvLyBSRkM3MjMxwqc2LjQuNDogVGhlIDMwMyAoU2VlIE90aGVyKSBzdGF0dXMgY29kZSBpbmRpY2F0ZXMgdGhhdFxuICAgICAgLy8gdGhlIHNlcnZlciBpcyByZWRpcmVjdGluZyB0aGUgdXNlciBhZ2VudCB0byBhIGRpZmZlcmVudCByZXNvdXJjZSBb4oCmXVxuICAgICAgLy8gQSB1c2VyIGFnZW50IGNhbiBwZXJmb3JtIGEgcmV0cmlldmFsIHJlcXVlc3QgdGFyZ2V0aW5nIHRoYXQgVVJJXG4gICAgICAvLyAoYSBHRVQgb3IgSEVBRCByZXF1ZXN0IGlmIHVzaW5nIEhUVFApIFvigKZdXG4gICAgICAoc3RhdHVzQ29kZSA9PT0gMzAzKSAmJiAhL14oPzpHRVR8SEVBRCkkLy50ZXN0KHRoaXMuX29wdGlvbnMubWV0aG9kKSkge1xuICAgIHRoaXMuX29wdGlvbnMubWV0aG9kID0gXCJHRVRcIjtcbiAgICAvLyBEcm9wIGEgcG9zc2libGUgZW50aXR5IGFuZCBoZWFkZXJzIHJlbGF0ZWQgdG8gaXRcbiAgICB0aGlzLl9yZXF1ZXN0Qm9keUJ1ZmZlcnMgPSBbXTtcbiAgICByZW1vdmVNYXRjaGluZ0hlYWRlcnMoL15jb250ZW50LS9pLCB0aGlzLl9vcHRpb25zLmhlYWRlcnMpO1xuICB9XG5cbiAgLy8gRHJvcCB0aGUgSG9zdCBoZWFkZXIsIGFzIHRoZSByZWRpcmVjdCBtaWdodCBsZWFkIHRvIGEgZGlmZmVyZW50IGhvc3RcbiAgdmFyIGN1cnJlbnRIb3N0SGVhZGVyID0gcmVtb3ZlTWF0Y2hpbmdIZWFkZXJzKC9eaG9zdCQvaSwgdGhpcy5fb3B0aW9ucy5oZWFkZXJzKTtcblxuICAvLyBJZiB0aGUgcmVkaXJlY3QgaXMgcmVsYXRpdmUsIGNhcnJ5IG92ZXIgdGhlIGhvc3Qgb2YgdGhlIGxhc3QgcmVxdWVzdFxuICB2YXIgY3VycmVudFVybFBhcnRzID0gdXJsLnBhcnNlKHRoaXMuX2N1cnJlbnRVcmwpO1xuICB2YXIgY3VycmVudEhvc3QgPSBjdXJyZW50SG9zdEhlYWRlciB8fCBjdXJyZW50VXJsUGFydHMuaG9zdDtcbiAgdmFyIGN1cnJlbnRVcmwgPSAvXlxcdys6Ly50ZXN0KGxvY2F0aW9uKSA/IHRoaXMuX2N1cnJlbnRVcmwgOlxuICAgIHVybC5mb3JtYXQoT2JqZWN0LmFzc2lnbihjdXJyZW50VXJsUGFydHMsIHsgaG9zdDogY3VycmVudEhvc3QgfSkpO1xuXG4gIC8vIERldGVybWluZSB0aGUgVVJMIG9mIHRoZSByZWRpcmVjdGlvblxuICB2YXIgcmVkaXJlY3RVcmw7XG4gIHRyeSB7XG4gICAgcmVkaXJlY3RVcmwgPSB1cmwucmVzb2x2ZShjdXJyZW50VXJsLCBsb2NhdGlvbik7XG4gIH1cbiAgY2F0Y2ggKGNhdXNlKSB7XG4gICAgdGhpcy5lbWl0KFwiZXJyb3JcIiwgbmV3IFJlZGlyZWN0aW9uRXJyb3IoY2F1c2UpKTtcbiAgICByZXR1cm47XG4gIH1cblxuICAvLyBDcmVhdGUgdGhlIHJlZGlyZWN0ZWQgcmVxdWVzdFxuICBkZWJ1ZyhcInJlZGlyZWN0aW5nIHRvXCIsIHJlZGlyZWN0VXJsKTtcbiAgdGhpcy5faXNSZWRpcmVjdCA9IHRydWU7XG4gIHZhciByZWRpcmVjdFVybFBhcnRzID0gdXJsLnBhcnNlKHJlZGlyZWN0VXJsKTtcbiAgT2JqZWN0LmFzc2lnbih0aGlzLl9vcHRpb25zLCByZWRpcmVjdFVybFBhcnRzKTtcblxuICAvLyBEcm9wIGNvbmZpZGVudGlhbCBoZWFkZXJzIHdoZW4gcmVkaXJlY3RpbmcgdG8gYSBsZXNzIHNlY3VyZSBwcm90b2NvbFxuICAvLyBvciB0byBhIGRpZmZlcmVudCBkb21haW4gdGhhdCBpcyBub3QgYSBzdXBlcmRvbWFpblxuICBpZiAocmVkaXJlY3RVcmxQYXJ0cy5wcm90b2NvbCAhPT0gY3VycmVudFVybFBhcnRzLnByb3RvY29sICYmXG4gICAgIHJlZGlyZWN0VXJsUGFydHMucHJvdG9jb2wgIT09IFwiaHR0cHM6XCIgfHxcbiAgICAgcmVkaXJlY3RVcmxQYXJ0cy5ob3N0ICE9PSBjdXJyZW50SG9zdCAmJlxuICAgICAhaXNTdWJkb21haW4ocmVkaXJlY3RVcmxQYXJ0cy5ob3N0LCBjdXJyZW50SG9zdCkpIHtcbiAgICByZW1vdmVNYXRjaGluZ0hlYWRlcnMoL14oPzphdXRob3JpemF0aW9ufGNvb2tpZSkkL2ksIHRoaXMuX29wdGlvbnMuaGVhZGVycyk7XG4gIH1cblxuICAvLyBFdmFsdWF0ZSB0aGUgYmVmb3JlUmVkaXJlY3QgY2FsbGJhY2tcbiAgaWYgKHR5cGVvZiBiZWZvcmVSZWRpcmVjdCA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgdmFyIHJlc3BvbnNlRGV0YWlscyA9IHtcbiAgICAgIGhlYWRlcnM6IHJlc3BvbnNlLmhlYWRlcnMsXG4gICAgICBzdGF0dXNDb2RlOiBzdGF0dXNDb2RlLFxuICAgIH07XG4gICAgdmFyIHJlcXVlc3REZXRhaWxzID0ge1xuICAgICAgdXJsOiBjdXJyZW50VXJsLFxuICAgICAgbWV0aG9kOiBtZXRob2QsXG4gICAgICBoZWFkZXJzOiByZXF1ZXN0SGVhZGVycyxcbiAgICB9O1xuICAgIHRyeSB7XG4gICAgICBiZWZvcmVSZWRpcmVjdCh0aGlzLl9vcHRpb25zLCByZXNwb25zZURldGFpbHMsIHJlcXVlc3REZXRhaWxzKTtcbiAgICB9XG4gICAgY2F0Y2ggKGVycikge1xuICAgICAgdGhpcy5lbWl0KFwiZXJyb3JcIiwgZXJyKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5fc2FuaXRpemVPcHRpb25zKHRoaXMuX29wdGlvbnMpO1xuICB9XG5cbiAgLy8gUGVyZm9ybSB0aGUgcmVkaXJlY3RlZCByZXF1ZXN0XG4gIHRyeSB7XG4gICAgdGhpcy5fcGVyZm9ybVJlcXVlc3QoKTtcbiAgfVxuICBjYXRjaCAoY2F1c2UpIHtcbiAgICB0aGlzLmVtaXQoXCJlcnJvclwiLCBuZXcgUmVkaXJlY3Rpb25FcnJvcihjYXVzZSkpO1xuICB9XG59O1xuXG4vLyBXcmFwcyB0aGUga2V5L3ZhbHVlIG9iamVjdCBvZiBwcm90b2NvbHMgd2l0aCByZWRpcmVjdCBmdW5jdGlvbmFsaXR5XG5mdW5jdGlvbiB3cmFwKHByb3RvY29scykge1xuICAvLyBEZWZhdWx0IHNldHRpbmdzXG4gIHZhciBleHBvcnRzID0ge1xuICAgIG1heFJlZGlyZWN0czogMjEsXG4gICAgbWF4Qm9keUxlbmd0aDogMTAgKiAxMDI0ICogMTAyNCxcbiAgfTtcblxuICAvLyBXcmFwIGVhY2ggcHJvdG9jb2xcbiAgdmFyIG5hdGl2ZVByb3RvY29scyA9IHt9O1xuICBPYmplY3Qua2V5cyhwcm90b2NvbHMpLmZvckVhY2goZnVuY3Rpb24gKHNjaGVtZSkge1xuICAgIHZhciBwcm90b2NvbCA9IHNjaGVtZSArIFwiOlwiO1xuICAgIHZhciBuYXRpdmVQcm90b2NvbCA9IG5hdGl2ZVByb3RvY29sc1twcm90b2NvbF0gPSBwcm90b2NvbHNbc2NoZW1lXTtcbiAgICB2YXIgd3JhcHBlZFByb3RvY29sID0gZXhwb3J0c1tzY2hlbWVdID0gT2JqZWN0LmNyZWF0ZShuYXRpdmVQcm90b2NvbCk7XG5cbiAgICAvLyBFeGVjdXRlcyBhIHJlcXVlc3QsIGZvbGxvd2luZyByZWRpcmVjdHNcbiAgICBmdW5jdGlvbiByZXF1ZXN0KGlucHV0LCBvcHRpb25zLCBjYWxsYmFjaykge1xuICAgICAgLy8gUGFyc2UgcGFyYW1ldGVyc1xuICAgICAgaWYgKHR5cGVvZiBpbnB1dCA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICB2YXIgdXJsU3RyID0gaW5wdXQ7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgaW5wdXQgPSB1cmxUb09wdGlvbnMobmV3IFVSTCh1cmxTdHIpKTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICAgICAgICBpbnB1dCA9IHVybC5wYXJzZSh1cmxTdHIpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBlbHNlIGlmIChVUkwgJiYgKGlucHV0IGluc3RhbmNlb2YgVVJMKSkge1xuICAgICAgICBpbnB1dCA9IHVybFRvT3B0aW9ucyhpbnB1dCk7XG4gICAgICB9XG4gICAgICBlbHNlIHtcbiAgICAgICAgY2FsbGJhY2sgPSBvcHRpb25zO1xuICAgICAgICBvcHRpb25zID0gaW5wdXQ7XG4gICAgICAgIGlucHV0ID0geyBwcm90b2NvbDogcHJvdG9jb2wgfTtcbiAgICAgIH1cbiAgICAgIGlmICh0eXBlb2Ygb3B0aW9ucyA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgIGNhbGxiYWNrID0gb3B0aW9ucztcbiAgICAgICAgb3B0aW9ucyA9IG51bGw7XG4gICAgICB9XG5cbiAgICAgIC8vIFNldCBkZWZhdWx0c1xuICAgICAgb3B0aW9ucyA9IE9iamVjdC5hc3NpZ24oe1xuICAgICAgICBtYXhSZWRpcmVjdHM6IGV4cG9ydHMubWF4UmVkaXJlY3RzLFxuICAgICAgICBtYXhCb2R5TGVuZ3RoOiBleHBvcnRzLm1heEJvZHlMZW5ndGgsXG4gICAgICB9LCBpbnB1dCwgb3B0aW9ucyk7XG4gICAgICBvcHRpb25zLm5hdGl2ZVByb3RvY29scyA9IG5hdGl2ZVByb3RvY29scztcblxuICAgICAgYXNzZXJ0LmVxdWFsKG9wdGlvbnMucHJvdG9jb2wsIHByb3RvY29sLCBcInByb3RvY29sIG1pc21hdGNoXCIpO1xuICAgICAgZGVidWcoXCJvcHRpb25zXCIsIG9wdGlvbnMpO1xuICAgICAgcmV0dXJuIG5ldyBSZWRpcmVjdGFibGVSZXF1ZXN0KG9wdGlvbnMsIGNhbGxiYWNrKTtcbiAgICB9XG5cbiAgICAvLyBFeGVjdXRlcyBhIEdFVCByZXF1ZXN0LCBmb2xsb3dpbmcgcmVkaXJlY3RzXG4gICAgZnVuY3Rpb24gZ2V0KGlucHV0LCBvcHRpb25zLCBjYWxsYmFjaykge1xuICAgICAgdmFyIHdyYXBwZWRSZXF1ZXN0ID0gd3JhcHBlZFByb3RvY29sLnJlcXVlc3QoaW5wdXQsIG9wdGlvbnMsIGNhbGxiYWNrKTtcbiAgICAgIHdyYXBwZWRSZXF1ZXN0LmVuZCgpO1xuICAgICAgcmV0dXJuIHdyYXBwZWRSZXF1ZXN0O1xuICAgIH1cblxuICAgIC8vIEV4cG9zZSB0aGUgcHJvcGVydGllcyBvbiB0aGUgd3JhcHBlZCBwcm90b2NvbFxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHdyYXBwZWRQcm90b2NvbCwge1xuICAgICAgcmVxdWVzdDogeyB2YWx1ZTogcmVxdWVzdCwgY29uZmlndXJhYmxlOiB0cnVlLCBlbnVtZXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSB9LFxuICAgICAgZ2V0OiB7IHZhbHVlOiBnZXQsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgZW51bWVyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUgfSxcbiAgICB9KTtcbiAgfSk7XG4gIHJldHVybiBleHBvcnRzO1xufVxuXG4vKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuZnVuY3Rpb24gbm9vcCgpIHsgLyogZW1wdHkgKi8gfVxuXG4vLyBmcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS9ub2RlanMvbm9kZS9ibG9iL21hc3Rlci9saWIvaW50ZXJuYWwvdXJsLmpzXG5mdW5jdGlvbiB1cmxUb09wdGlvbnModXJsT2JqZWN0KSB7XG4gIHZhciBvcHRpb25zID0ge1xuICAgIHByb3RvY29sOiB1cmxPYmplY3QucHJvdG9jb2wsXG4gICAgaG9zdG5hbWU6IHVybE9iamVjdC5ob3N0bmFtZS5zdGFydHNXaXRoKFwiW1wiKSA/XG4gICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgICAgdXJsT2JqZWN0Lmhvc3RuYW1lLnNsaWNlKDEsIC0xKSA6XG4gICAgICB1cmxPYmplY3QuaG9zdG5hbWUsXG4gICAgaGFzaDogdXJsT2JqZWN0Lmhhc2gsXG4gICAgc2VhcmNoOiB1cmxPYmplY3Quc2VhcmNoLFxuICAgIHBhdGhuYW1lOiB1cmxPYmplY3QucGF0aG5hbWUsXG4gICAgcGF0aDogdXJsT2JqZWN0LnBhdGhuYW1lICsgdXJsT2JqZWN0LnNlYXJjaCxcbiAgICBocmVmOiB1cmxPYmplY3QuaHJlZixcbiAgfTtcbiAgaWYgKHVybE9iamVjdC5wb3J0ICE9PSBcIlwiKSB7XG4gICAgb3B0aW9ucy5wb3J0ID0gTnVtYmVyKHVybE9iamVjdC5wb3J0KTtcbiAgfVxuICByZXR1cm4gb3B0aW9ucztcbn1cblxuZnVuY3Rpb24gcmVtb3ZlTWF0Y2hpbmdIZWFkZXJzKHJlZ2V4LCBoZWFkZXJzKSB7XG4gIHZhciBsYXN0VmFsdWU7XG4gIGZvciAodmFyIGhlYWRlciBpbiBoZWFkZXJzKSB7XG4gICAgaWYgKHJlZ2V4LnRlc3QoaGVhZGVyKSkge1xuICAgICAgbGFzdFZhbHVlID0gaGVhZGVyc1toZWFkZXJdO1xuICAgICAgZGVsZXRlIGhlYWRlcnNbaGVhZGVyXTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIChsYXN0VmFsdWUgPT09IG51bGwgfHwgdHlwZW9mIGxhc3RWYWx1ZSA9PT0gXCJ1bmRlZmluZWRcIikgP1xuICAgIHVuZGVmaW5lZCA6IFN0cmluZyhsYXN0VmFsdWUpLnRyaW0oKTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlRXJyb3JUeXBlKGNvZGUsIGRlZmF1bHRNZXNzYWdlKSB7XG4gIGZ1bmN0aW9uIEN1c3RvbUVycm9yKGNhdXNlKSB7XG4gICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcywgdGhpcy5jb25zdHJ1Y3Rvcik7XG4gICAgaWYgKCFjYXVzZSkge1xuICAgICAgdGhpcy5tZXNzYWdlID0gZGVmYXVsdE1lc3NhZ2U7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgdGhpcy5tZXNzYWdlID0gZGVmYXVsdE1lc3NhZ2UgKyBcIjogXCIgKyBjYXVzZS5tZXNzYWdlO1xuICAgICAgdGhpcy5jYXVzZSA9IGNhdXNlO1xuICAgIH1cbiAgfVxuICBDdXN0b21FcnJvci5wcm90b3R5cGUgPSBuZXcgRXJyb3IoKTtcbiAgQ3VzdG9tRXJyb3IucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQ3VzdG9tRXJyb3I7XG4gIEN1c3RvbUVycm9yLnByb3RvdHlwZS5uYW1lID0gXCJFcnJvciBbXCIgKyBjb2RlICsgXCJdXCI7XG4gIEN1c3RvbUVycm9yLnByb3RvdHlwZS5jb2RlID0gY29kZTtcbiAgcmV0dXJuIEN1c3RvbUVycm9yO1xufVxuXG5mdW5jdGlvbiBhYm9ydFJlcXVlc3QocmVxdWVzdCkge1xuICBmb3IgKHZhciBldmVudCBvZiBldmVudHMpIHtcbiAgICByZXF1ZXN0LnJlbW92ZUxpc3RlbmVyKGV2ZW50LCBldmVudEhhbmRsZXJzW2V2ZW50XSk7XG4gIH1cbiAgcmVxdWVzdC5vbihcImVycm9yXCIsIG5vb3ApO1xuICByZXF1ZXN0LmFib3J0KCk7XG59XG5cbmZ1bmN0aW9uIGlzU3ViZG9tYWluKHN1YmRvbWFpbiwgZG9tYWluKSB7XG4gIGNvbnN0IGRvdCA9IHN1YmRvbWFpbi5sZW5ndGggLSBkb21haW4ubGVuZ3RoIC0gMTtcbiAgcmV0dXJuIGRvdCA+IDAgJiYgc3ViZG9tYWluW2RvdF0gPT09IFwiLlwiICYmIHN1YmRvbWFpbi5lbmRzV2l0aChkb21haW4pO1xufVxuXG4vLyBFeHBvcnRzXG5tb2R1bGUuZXhwb3J0cyA9IHdyYXAoeyBodHRwOiBodHRwLCBodHRwczogaHR0cHMgfSk7XG5tb2R1bGUuZXhwb3J0cy53cmFwID0gd3JhcDtcbiIsInZhciBDb21iaW5lZFN0cmVhbSA9IHJlcXVpcmUoJ2NvbWJpbmVkLXN0cmVhbScpO1xudmFyIHV0aWwgPSByZXF1aXJlKCd1dGlsJyk7XG52YXIgcGF0aCA9IHJlcXVpcmUoJ3BhdGgnKTtcbnZhciBodHRwID0gcmVxdWlyZSgnaHR0cCcpO1xudmFyIGh0dHBzID0gcmVxdWlyZSgnaHR0cHMnKTtcbnZhciBwYXJzZVVybCA9IHJlcXVpcmUoJ3VybCcpLnBhcnNlO1xudmFyIGZzID0gcmVxdWlyZSgnZnMnKTtcbnZhciBTdHJlYW0gPSByZXF1aXJlKCdzdHJlYW0nKS5TdHJlYW07XG52YXIgbWltZSA9IHJlcXVpcmUoJ21pbWUtdHlwZXMnKTtcbnZhciBhc3luY2tpdCA9IHJlcXVpcmUoJ2FzeW5ja2l0Jyk7XG52YXIgcG9wdWxhdGUgPSByZXF1aXJlKCcuL3BvcHVsYXRlLmpzJyk7XG5cbi8vIFB1YmxpYyBBUElcbm1vZHVsZS5leHBvcnRzID0gRm9ybURhdGE7XG5cbi8vIG1ha2UgaXQgYSBTdHJlYW1cbnV0aWwuaW5oZXJpdHMoRm9ybURhdGEsIENvbWJpbmVkU3RyZWFtKTtcblxuLyoqXG4gKiBDcmVhdGUgcmVhZGFibGUgXCJtdWx0aXBhcnQvZm9ybS1kYXRhXCIgc3RyZWFtcy5cbiAqIENhbiBiZSB1c2VkIHRvIHN1Ym1pdCBmb3Jtc1xuICogYW5kIGZpbGUgdXBsb2FkcyB0byBvdGhlciB3ZWIgYXBwbGljYXRpb25zLlxuICpcbiAqIEBjb25zdHJ1Y3RvclxuICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnMgLSBQcm9wZXJ0aWVzIHRvIGJlIGFkZGVkL292ZXJyaWRlbiBmb3IgRm9ybURhdGEgYW5kIENvbWJpbmVkU3RyZWFtXG4gKi9cbmZ1bmN0aW9uIEZvcm1EYXRhKG9wdGlvbnMpIHtcbiAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIEZvcm1EYXRhKSkge1xuICAgIHJldHVybiBuZXcgRm9ybURhdGEob3B0aW9ucyk7XG4gIH1cblxuICB0aGlzLl9vdmVyaGVhZExlbmd0aCA9IDA7XG4gIHRoaXMuX3ZhbHVlTGVuZ3RoID0gMDtcbiAgdGhpcy5fdmFsdWVzVG9NZWFzdXJlID0gW107XG5cbiAgQ29tYmluZWRTdHJlYW0uY2FsbCh0aGlzKTtcblxuICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcbiAgZm9yICh2YXIgb3B0aW9uIGluIG9wdGlvbnMpIHtcbiAgICB0aGlzW29wdGlvbl0gPSBvcHRpb25zW29wdGlvbl07XG4gIH1cbn1cblxuRm9ybURhdGEuTElORV9CUkVBSyA9ICdcXHJcXG4nO1xuRm9ybURhdGEuREVGQVVMVF9DT05URU5UX1RZUEUgPSAnYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtJztcblxuRm9ybURhdGEucHJvdG90eXBlLmFwcGVuZCA9IGZ1bmN0aW9uKGZpZWxkLCB2YWx1ZSwgb3B0aW9ucykge1xuXG4gIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuXG4gIC8vIGFsbG93IGZpbGVuYW1lIGFzIHNpbmdsZSBvcHRpb25cbiAgaWYgKHR5cGVvZiBvcHRpb25zID09ICdzdHJpbmcnKSB7XG4gICAgb3B0aW9ucyA9IHtmaWxlbmFtZTogb3B0aW9uc307XG4gIH1cblxuICB2YXIgYXBwZW5kID0gQ29tYmluZWRTdHJlYW0ucHJvdG90eXBlLmFwcGVuZC5iaW5kKHRoaXMpO1xuXG4gIC8vIGFsbCB0aGF0IHN0cmVhbXkgYnVzaW5lc3MgY2FuJ3QgaGFuZGxlIG51bWJlcnNcbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PSAnbnVtYmVyJykge1xuICAgIHZhbHVlID0gJycgKyB2YWx1ZTtcbiAgfVxuXG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9mZWxpeGdlL25vZGUtZm9ybS1kYXRhL2lzc3Vlcy8zOFxuICBpZiAodXRpbC5pc0FycmF5KHZhbHVlKSkge1xuICAgIC8vIFBsZWFzZSBjb252ZXJ0IHlvdXIgYXJyYXkgaW50byBzdHJpbmdcbiAgICAvLyB0aGUgd2F5IHdlYiBzZXJ2ZXIgZXhwZWN0cyBpdFxuICAgIHRoaXMuX2Vycm9yKG5ldyBFcnJvcignQXJyYXlzIGFyZSBub3Qgc3VwcG9ydGVkLicpKTtcbiAgICByZXR1cm47XG4gIH1cblxuICB2YXIgaGVhZGVyID0gdGhpcy5fbXVsdGlQYXJ0SGVhZGVyKGZpZWxkLCB2YWx1ZSwgb3B0aW9ucyk7XG4gIHZhciBmb290ZXIgPSB0aGlzLl9tdWx0aVBhcnRGb290ZXIoKTtcblxuICBhcHBlbmQoaGVhZGVyKTtcbiAgYXBwZW5kKHZhbHVlKTtcbiAgYXBwZW5kKGZvb3Rlcik7XG5cbiAgLy8gcGFzcyBhbG9uZyBvcHRpb25zLmtub3duTGVuZ3RoXG4gIHRoaXMuX3RyYWNrTGVuZ3RoKGhlYWRlciwgdmFsdWUsIG9wdGlvbnMpO1xufTtcblxuRm9ybURhdGEucHJvdG90eXBlLl90cmFja0xlbmd0aCA9IGZ1bmN0aW9uKGhlYWRlciwgdmFsdWUsIG9wdGlvbnMpIHtcbiAgdmFyIHZhbHVlTGVuZ3RoID0gMDtcblxuICAvLyB1c2VkIHcvIGdldExlbmd0aFN5bmMoKSwgd2hlbiBsZW5ndGggaXMga25vd24uXG4gIC8vIGUuZy4gZm9yIHN0cmVhbWluZyBkaXJlY3RseSBmcm9tIGEgcmVtb3RlIHNlcnZlcixcbiAgLy8gdy8gYSBrbm93biBmaWxlIGEgc2l6ZSwgYW5kIG5vdCB3YW50aW5nIHRvIHdhaXQgZm9yXG4gIC8vIGluY29taW5nIGZpbGUgdG8gZmluaXNoIHRvIGdldCBpdHMgc2l6ZS5cbiAgaWYgKG9wdGlvbnMua25vd25MZW5ndGggIT0gbnVsbCkge1xuICAgIHZhbHVlTGVuZ3RoICs9ICtvcHRpb25zLmtub3duTGVuZ3RoO1xuICB9IGVsc2UgaWYgKEJ1ZmZlci5pc0J1ZmZlcih2YWx1ZSkpIHtcbiAgICB2YWx1ZUxlbmd0aCA9IHZhbHVlLmxlbmd0aDtcbiAgfSBlbHNlIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgdmFsdWVMZW5ndGggPSBCdWZmZXIuYnl0ZUxlbmd0aCh2YWx1ZSk7XG4gIH1cblxuICB0aGlzLl92YWx1ZUxlbmd0aCArPSB2YWx1ZUxlbmd0aDtcblxuICAvLyBAY2hlY2sgd2h5IGFkZCBDUkxGPyBkb2VzIHRoaXMgYWNjb3VudCBmb3IgY3VzdG9tL211bHRpcGxlIENSTEZzP1xuICB0aGlzLl9vdmVyaGVhZExlbmd0aCArPVxuICAgIEJ1ZmZlci5ieXRlTGVuZ3RoKGhlYWRlcikgK1xuICAgIEZvcm1EYXRhLkxJTkVfQlJFQUsubGVuZ3RoO1xuXG4gIC8vIGVtcHR5IG9yIGVpdGhlciBkb2Vzbid0IGhhdmUgcGF0aCBvciBub3QgYW4gaHR0cCByZXNwb25zZSBvciBub3QgYSBzdHJlYW1cbiAgaWYgKCF2YWx1ZSB8fCAoICF2YWx1ZS5wYXRoICYmICEodmFsdWUucmVhZGFibGUgJiYgdmFsdWUuaGFzT3duUHJvcGVydHkoJ2h0dHBWZXJzaW9uJykpICYmICEodmFsdWUgaW5zdGFuY2VvZiBTdHJlYW0pKSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8vIG5vIG5lZWQgdG8gYm90aGVyIHdpdGggdGhlIGxlbmd0aFxuICBpZiAoIW9wdGlvbnMua25vd25MZW5ndGgpIHtcbiAgICB0aGlzLl92YWx1ZXNUb01lYXN1cmUucHVzaCh2YWx1ZSk7XG4gIH1cbn07XG5cbkZvcm1EYXRhLnByb3RvdHlwZS5fbGVuZ3RoUmV0cmlldmVyID0gZnVuY3Rpb24odmFsdWUsIGNhbGxiYWNrKSB7XG5cbiAgaWYgKHZhbHVlLmhhc093blByb3BlcnR5KCdmZCcpKSB7XG5cbiAgICAvLyB0YWtlIHJlYWQgcmFuZ2UgaW50byBhIGFjY291bnRcbiAgICAvLyBgZW5kYCA9IEluZmluaXR5IOKAkz4gcmVhZCBmaWxlIHRpbGwgdGhlIGVuZFxuICAgIC8vXG4gICAgLy8gVE9ETzogTG9va3MgbGlrZSB0aGVyZSBpcyBidWcgaW4gTm9kZSBmcy5jcmVhdGVSZWFkU3RyZWFtXG4gICAgLy8gaXQgZG9lc24ndCByZXNwZWN0IGBlbmRgIG9wdGlvbnMgd2l0aG91dCBgc3RhcnRgIG9wdGlvbnNcbiAgICAvLyBGaXggaXQgd2hlbiBub2RlIGZpeGVzIGl0LlxuICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9qb3llbnQvbm9kZS9pc3N1ZXMvNzgxOVxuICAgIGlmICh2YWx1ZS5lbmQgIT0gdW5kZWZpbmVkICYmIHZhbHVlLmVuZCAhPSBJbmZpbml0eSAmJiB2YWx1ZS5zdGFydCAhPSB1bmRlZmluZWQpIHtcblxuICAgICAgLy8gd2hlbiBlbmQgc3BlY2lmaWVkXG4gICAgICAvLyBubyBuZWVkIHRvIGNhbGN1bGF0ZSByYW5nZVxuICAgICAgLy8gaW5jbHVzaXZlLCBzdGFydHMgd2l0aCAwXG4gICAgICBjYWxsYmFjayhudWxsLCB2YWx1ZS5lbmQgKyAxIC0gKHZhbHVlLnN0YXJ0ID8gdmFsdWUuc3RhcnQgOiAwKSk7XG5cbiAgICAvLyBub3QgdGhhdCBmYXN0IHNub29weVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBzdGlsbCBuZWVkIHRvIGZldGNoIGZpbGUgc2l6ZSBmcm9tIGZzXG4gICAgICBmcy5zdGF0KHZhbHVlLnBhdGgsIGZ1bmN0aW9uKGVyciwgc3RhdCkge1xuXG4gICAgICAgIHZhciBmaWxlU2l6ZTtcblxuICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAvLyB1cGRhdGUgZmluYWwgc2l6ZSBiYXNlZCBvbiB0aGUgcmFuZ2Ugb3B0aW9uc1xuICAgICAgICBmaWxlU2l6ZSA9IHN0YXQuc2l6ZSAtICh2YWx1ZS5zdGFydCA/IHZhbHVlLnN0YXJ0IDogMCk7XG4gICAgICAgIGNhbGxiYWNrKG51bGwsIGZpbGVTaXplKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAvLyBvciBodHRwIHJlc3BvbnNlXG4gIH0gZWxzZSBpZiAodmFsdWUuaGFzT3duUHJvcGVydHkoJ2h0dHBWZXJzaW9uJykpIHtcbiAgICBjYWxsYmFjayhudWxsLCArdmFsdWUuaGVhZGVyc1snY29udGVudC1sZW5ndGgnXSk7XG5cbiAgLy8gb3IgcmVxdWVzdCBzdHJlYW0gaHR0cDovL2dpdGh1Yi5jb20vbWlrZWFsL3JlcXVlc3RcbiAgfSBlbHNlIGlmICh2YWx1ZS5oYXNPd25Qcm9wZXJ0eSgnaHR0cE1vZHVsZScpKSB7XG4gICAgLy8gd2FpdCB0aWxsIHJlc3BvbnNlIGNvbWUgYmFja1xuICAgIHZhbHVlLm9uKCdyZXNwb25zZScsIGZ1bmN0aW9uKHJlc3BvbnNlKSB7XG4gICAgICB2YWx1ZS5wYXVzZSgpO1xuICAgICAgY2FsbGJhY2sobnVsbCwgK3Jlc3BvbnNlLmhlYWRlcnNbJ2NvbnRlbnQtbGVuZ3RoJ10pO1xuICAgIH0pO1xuICAgIHZhbHVlLnJlc3VtZSgpO1xuXG4gIC8vIHNvbWV0aGluZyBlbHNlXG4gIH0gZWxzZSB7XG4gICAgY2FsbGJhY2soJ1Vua25vd24gc3RyZWFtJyk7XG4gIH1cbn07XG5cbkZvcm1EYXRhLnByb3RvdHlwZS5fbXVsdGlQYXJ0SGVhZGVyID0gZnVuY3Rpb24oZmllbGQsIHZhbHVlLCBvcHRpb25zKSB7XG4gIC8vIGN1c3RvbSBoZWFkZXIgc3BlY2lmaWVkIChhcyBzdHJpbmcpP1xuICAvLyBpdCBiZWNvbWVzIHJlc3BvbnNpYmxlIGZvciBib3VuZGFyeVxuICAvLyAoZS5nLiB0byBoYW5kbGUgZXh0cmEgQ1JMRnMgb24gLk5FVCBzZXJ2ZXJzKVxuICBpZiAodHlwZW9mIG9wdGlvbnMuaGVhZGVyID09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIG9wdGlvbnMuaGVhZGVyO1xuICB9XG5cbiAgdmFyIGNvbnRlbnREaXNwb3NpdGlvbiA9IHRoaXMuX2dldENvbnRlbnREaXNwb3NpdGlvbih2YWx1ZSwgb3B0aW9ucyk7XG4gIHZhciBjb250ZW50VHlwZSA9IHRoaXMuX2dldENvbnRlbnRUeXBlKHZhbHVlLCBvcHRpb25zKTtcblxuICB2YXIgY29udGVudHMgPSAnJztcbiAgdmFyIGhlYWRlcnMgID0ge1xuICAgIC8vIGFkZCBjdXN0b20gZGlzcG9zaXRpb24gYXMgdGhpcmQgZWxlbWVudCBvciBrZWVwIGl0IHR3byBlbGVtZW50cyBpZiBub3RcbiAgICAnQ29udGVudC1EaXNwb3NpdGlvbic6IFsnZm9ybS1kYXRhJywgJ25hbWU9XCInICsgZmllbGQgKyAnXCInXS5jb25jYXQoY29udGVudERpc3Bvc2l0aW9uIHx8IFtdKSxcbiAgICAvLyBpZiBubyBjb250ZW50IHR5cGUuIGFsbG93IGl0IHRvIGJlIGVtcHR5IGFycmF5XG4gICAgJ0NvbnRlbnQtVHlwZSc6IFtdLmNvbmNhdChjb250ZW50VHlwZSB8fCBbXSlcbiAgfTtcblxuICAvLyBhbGxvdyBjdXN0b20gaGVhZGVycy5cbiAgaWYgKHR5cGVvZiBvcHRpb25zLmhlYWRlciA9PSAnb2JqZWN0Jykge1xuICAgIHBvcHVsYXRlKGhlYWRlcnMsIG9wdGlvbnMuaGVhZGVyKTtcbiAgfVxuXG4gIHZhciBoZWFkZXI7XG4gIGZvciAodmFyIHByb3AgaW4gaGVhZGVycykge1xuICAgIGlmICghaGVhZGVycy5oYXNPd25Qcm9wZXJ0eShwcm9wKSkgY29udGludWU7XG4gICAgaGVhZGVyID0gaGVhZGVyc1twcm9wXTtcblxuICAgIC8vIHNraXAgbnVsbGlzaCBoZWFkZXJzLlxuICAgIGlmIChoZWFkZXIgPT0gbnVsbCkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgLy8gY29udmVydCBhbGwgaGVhZGVycyB0byBhcnJheXMuXG4gICAgaWYgKCFBcnJheS5pc0FycmF5KGhlYWRlcikpIHtcbiAgICAgIGhlYWRlciA9IFtoZWFkZXJdO1xuICAgIH1cblxuICAgIC8vIGFkZCBub24tZW1wdHkgaGVhZGVycy5cbiAgICBpZiAoaGVhZGVyLmxlbmd0aCkge1xuICAgICAgY29udGVudHMgKz0gcHJvcCArICc6ICcgKyBoZWFkZXIuam9pbignOyAnKSArIEZvcm1EYXRhLkxJTkVfQlJFQUs7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuICctLScgKyB0aGlzLmdldEJvdW5kYXJ5KCkgKyBGb3JtRGF0YS5MSU5FX0JSRUFLICsgY29udGVudHMgKyBGb3JtRGF0YS5MSU5FX0JSRUFLO1xufTtcblxuRm9ybURhdGEucHJvdG90eXBlLl9nZXRDb250ZW50RGlzcG9zaXRpb24gPSBmdW5jdGlvbih2YWx1ZSwgb3B0aW9ucykge1xuXG4gIHZhciBmaWxlbmFtZVxuICAgICwgY29udGVudERpc3Bvc2l0aW9uXG4gICAgO1xuXG4gIGlmICh0eXBlb2Ygb3B0aW9ucy5maWxlcGF0aCA9PT0gJ3N0cmluZycpIHtcbiAgICAvLyBjdXN0b20gZmlsZXBhdGggZm9yIHJlbGF0aXZlIHBhdGhzXG4gICAgZmlsZW5hbWUgPSBwYXRoLm5vcm1hbGl6ZShvcHRpb25zLmZpbGVwYXRoKS5yZXBsYWNlKC9cXFxcL2csICcvJyk7XG4gIH0gZWxzZSBpZiAob3B0aW9ucy5maWxlbmFtZSB8fCB2YWx1ZS5uYW1lIHx8IHZhbHVlLnBhdGgpIHtcbiAgICAvLyBjdXN0b20gZmlsZW5hbWUgdGFrZSBwcmVjZWRlbmNlXG4gICAgLy8gZm9ybWlkYWJsZSBhbmQgdGhlIGJyb3dzZXIgYWRkIGEgbmFtZSBwcm9wZXJ0eVxuICAgIC8vIGZzLSBhbmQgcmVxdWVzdC0gc3RyZWFtcyBoYXZlIHBhdGggcHJvcGVydHlcbiAgICBmaWxlbmFtZSA9IHBhdGguYmFzZW5hbWUob3B0aW9ucy5maWxlbmFtZSB8fCB2YWx1ZS5uYW1lIHx8IHZhbHVlLnBhdGgpO1xuICB9IGVsc2UgaWYgKHZhbHVlLnJlYWRhYmxlICYmIHZhbHVlLmhhc093blByb3BlcnR5KCdodHRwVmVyc2lvbicpKSB7XG4gICAgLy8gb3IgdHJ5IGh0dHAgcmVzcG9uc2VcbiAgICBmaWxlbmFtZSA9IHBhdGguYmFzZW5hbWUodmFsdWUuY2xpZW50Ll9odHRwTWVzc2FnZS5wYXRoIHx8ICcnKTtcbiAgfVxuXG4gIGlmIChmaWxlbmFtZSkge1xuICAgIGNvbnRlbnREaXNwb3NpdGlvbiA9ICdmaWxlbmFtZT1cIicgKyBmaWxlbmFtZSArICdcIic7XG4gIH1cblxuICByZXR1cm4gY29udGVudERpc3Bvc2l0aW9uO1xufTtcblxuRm9ybURhdGEucHJvdG90eXBlLl9nZXRDb250ZW50VHlwZSA9IGZ1bmN0aW9uKHZhbHVlLCBvcHRpb25zKSB7XG5cbiAgLy8gdXNlIGN1c3RvbSBjb250ZW50LXR5cGUgYWJvdmUgYWxsXG4gIHZhciBjb250ZW50VHlwZSA9IG9wdGlvbnMuY29udGVudFR5cGU7XG5cbiAgLy8gb3IgdHJ5IGBuYW1lYCBmcm9tIGZvcm1pZGFibGUsIGJyb3dzZXJcbiAgaWYgKCFjb250ZW50VHlwZSAmJiB2YWx1ZS5uYW1lKSB7XG4gICAgY29udGVudFR5cGUgPSBtaW1lLmxvb2t1cCh2YWx1ZS5uYW1lKTtcbiAgfVxuXG4gIC8vIG9yIHRyeSBgcGF0aGAgZnJvbSBmcy0sIHJlcXVlc3QtIHN0cmVhbXNcbiAgaWYgKCFjb250ZW50VHlwZSAmJiB2YWx1ZS5wYXRoKSB7XG4gICAgY29udGVudFR5cGUgPSBtaW1lLmxvb2t1cCh2YWx1ZS5wYXRoKTtcbiAgfVxuXG4gIC8vIG9yIGlmIGl0J3MgaHR0cC1yZXBvbnNlXG4gIGlmICghY29udGVudFR5cGUgJiYgdmFsdWUucmVhZGFibGUgJiYgdmFsdWUuaGFzT3duUHJvcGVydHkoJ2h0dHBWZXJzaW9uJykpIHtcbiAgICBjb250ZW50VHlwZSA9IHZhbHVlLmhlYWRlcnNbJ2NvbnRlbnQtdHlwZSddO1xuICB9XG5cbiAgLy8gb3IgZ3Vlc3MgaXQgZnJvbSB0aGUgZmlsZXBhdGggb3IgZmlsZW5hbWVcbiAgaWYgKCFjb250ZW50VHlwZSAmJiAob3B0aW9ucy5maWxlcGF0aCB8fCBvcHRpb25zLmZpbGVuYW1lKSkge1xuICAgIGNvbnRlbnRUeXBlID0gbWltZS5sb29rdXAob3B0aW9ucy5maWxlcGF0aCB8fCBvcHRpb25zLmZpbGVuYW1lKTtcbiAgfVxuXG4gIC8vIGZhbGxiYWNrIHRvIHRoZSBkZWZhdWx0IGNvbnRlbnQgdHlwZSBpZiBgdmFsdWVgIGlzIG5vdCBzaW1wbGUgdmFsdWVcbiAgaWYgKCFjb250ZW50VHlwZSAmJiB0eXBlb2YgdmFsdWUgPT0gJ29iamVjdCcpIHtcbiAgICBjb250ZW50VHlwZSA9IEZvcm1EYXRhLkRFRkFVTFRfQ09OVEVOVF9UWVBFO1xuICB9XG5cbiAgcmV0dXJuIGNvbnRlbnRUeXBlO1xufTtcblxuRm9ybURhdGEucHJvdG90eXBlLl9tdWx0aVBhcnRGb290ZXIgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKG5leHQpIHtcbiAgICB2YXIgZm9vdGVyID0gRm9ybURhdGEuTElORV9CUkVBSztcblxuICAgIHZhciBsYXN0UGFydCA9ICh0aGlzLl9zdHJlYW1zLmxlbmd0aCA9PT0gMCk7XG4gICAgaWYgKGxhc3RQYXJ0KSB7XG4gICAgICBmb290ZXIgKz0gdGhpcy5fbGFzdEJvdW5kYXJ5KCk7XG4gICAgfVxuXG4gICAgbmV4dChmb290ZXIpO1xuICB9LmJpbmQodGhpcyk7XG59O1xuXG5Gb3JtRGF0YS5wcm90b3R5cGUuX2xhc3RCb3VuZGFyeSA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gJy0tJyArIHRoaXMuZ2V0Qm91bmRhcnkoKSArICctLScgKyBGb3JtRGF0YS5MSU5FX0JSRUFLO1xufTtcblxuRm9ybURhdGEucHJvdG90eXBlLmdldEhlYWRlcnMgPSBmdW5jdGlvbih1c2VySGVhZGVycykge1xuICB2YXIgaGVhZGVyO1xuICB2YXIgZm9ybUhlYWRlcnMgPSB7XG4gICAgJ2NvbnRlbnQtdHlwZSc6ICdtdWx0aXBhcnQvZm9ybS1kYXRhOyBib3VuZGFyeT0nICsgdGhpcy5nZXRCb3VuZGFyeSgpXG4gIH07XG5cbiAgZm9yIChoZWFkZXIgaW4gdXNlckhlYWRlcnMpIHtcbiAgICBpZiAodXNlckhlYWRlcnMuaGFzT3duUHJvcGVydHkoaGVhZGVyKSkge1xuICAgICAgZm9ybUhlYWRlcnNbaGVhZGVyLnRvTG93ZXJDYXNlKCldID0gdXNlckhlYWRlcnNbaGVhZGVyXTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZm9ybUhlYWRlcnM7XG59O1xuXG5Gb3JtRGF0YS5wcm90b3R5cGUuc2V0Qm91bmRhcnkgPSBmdW5jdGlvbihib3VuZGFyeSkge1xuICB0aGlzLl9ib3VuZGFyeSA9IGJvdW5kYXJ5O1xufTtcblxuRm9ybURhdGEucHJvdG90eXBlLmdldEJvdW5kYXJ5ID0gZnVuY3Rpb24oKSB7XG4gIGlmICghdGhpcy5fYm91bmRhcnkpIHtcbiAgICB0aGlzLl9nZW5lcmF0ZUJvdW5kYXJ5KCk7XG4gIH1cblxuICByZXR1cm4gdGhpcy5fYm91bmRhcnk7XG59O1xuXG5Gb3JtRGF0YS5wcm90b3R5cGUuZ2V0QnVmZmVyID0gZnVuY3Rpb24oKSB7XG4gIHZhciBkYXRhQnVmZmVyID0gbmV3IEJ1ZmZlci5hbGxvYyggMCApO1xuICB2YXIgYm91bmRhcnkgPSB0aGlzLmdldEJvdW5kYXJ5KCk7XG5cbiAgLy8gQ3JlYXRlIHRoZSBmb3JtIGNvbnRlbnQuIEFkZCBMaW5lIGJyZWFrcyB0byB0aGUgZW5kIG9mIGRhdGEuXG4gIGZvciAodmFyIGkgPSAwLCBsZW4gPSB0aGlzLl9zdHJlYW1zLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgaWYgKHR5cGVvZiB0aGlzLl9zdHJlYW1zW2ldICE9PSAnZnVuY3Rpb24nKSB7XG5cbiAgICAgIC8vIEFkZCBjb250ZW50IHRvIHRoZSBidWZmZXIuXG4gICAgICBpZihCdWZmZXIuaXNCdWZmZXIodGhpcy5fc3RyZWFtc1tpXSkpIHtcbiAgICAgICAgZGF0YUJ1ZmZlciA9IEJ1ZmZlci5jb25jYXQoIFtkYXRhQnVmZmVyLCB0aGlzLl9zdHJlYW1zW2ldXSk7XG4gICAgICB9ZWxzZSB7XG4gICAgICAgIGRhdGFCdWZmZXIgPSBCdWZmZXIuY29uY2F0KCBbZGF0YUJ1ZmZlciwgQnVmZmVyLmZyb20odGhpcy5fc3RyZWFtc1tpXSldKTtcbiAgICAgIH1cblxuICAgICAgLy8gQWRkIGJyZWFrIGFmdGVyIGNvbnRlbnQuXG4gICAgICBpZiAodHlwZW9mIHRoaXMuX3N0cmVhbXNbaV0gIT09ICdzdHJpbmcnIHx8IHRoaXMuX3N0cmVhbXNbaV0uc3Vic3RyaW5nKCAyLCBib3VuZGFyeS5sZW5ndGggKyAyICkgIT09IGJvdW5kYXJ5KSB7XG4gICAgICAgIGRhdGFCdWZmZXIgPSBCdWZmZXIuY29uY2F0KCBbZGF0YUJ1ZmZlciwgQnVmZmVyLmZyb20oRm9ybURhdGEuTElORV9CUkVBSyldICk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gQWRkIHRoZSBmb290ZXIgYW5kIHJldHVybiB0aGUgQnVmZmVyIG9iamVjdC5cbiAgcmV0dXJuIEJ1ZmZlci5jb25jYXQoIFtkYXRhQnVmZmVyLCBCdWZmZXIuZnJvbSh0aGlzLl9sYXN0Qm91bmRhcnkoKSldICk7XG59O1xuXG5Gb3JtRGF0YS5wcm90b3R5cGUuX2dlbmVyYXRlQm91bmRhcnkgPSBmdW5jdGlvbigpIHtcbiAgLy8gVGhpcyBnZW5lcmF0ZXMgYSA1MCBjaGFyYWN0ZXIgYm91bmRhcnkgc2ltaWxhciB0byB0aG9zZSB1c2VkIGJ5IEZpcmVmb3guXG4gIC8vIFRoZXkgYXJlIG9wdGltaXplZCBmb3IgYm95ZXItbW9vcmUgcGFyc2luZy5cbiAgdmFyIGJvdW5kYXJ5ID0gJy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tJztcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCAyNDsgaSsrKSB7XG4gICAgYm91bmRhcnkgKz0gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogMTApLnRvU3RyaW5nKDE2KTtcbiAgfVxuXG4gIHRoaXMuX2JvdW5kYXJ5ID0gYm91bmRhcnk7XG59O1xuXG4vLyBOb3RlOiBnZXRMZW5ndGhTeW5jIERPRVNOJ1QgY2FsY3VsYXRlIHN0cmVhbXMgbGVuZ3RoXG4vLyBBcyB3b3JrYXJvdW5kIG9uZSBjYW4gY2FsY3VsYXRlIGZpbGUgc2l6ZSBtYW51YWxseVxuLy8gYW5kIGFkZCBpdCBhcyBrbm93bkxlbmd0aCBvcHRpb25cbkZvcm1EYXRhLnByb3RvdHlwZS5nZXRMZW5ndGhTeW5jID0gZnVuY3Rpb24oKSB7XG4gIHZhciBrbm93bkxlbmd0aCA9IHRoaXMuX292ZXJoZWFkTGVuZ3RoICsgdGhpcy5fdmFsdWVMZW5ndGg7XG5cbiAgLy8gRG9uJ3QgZ2V0IGNvbmZ1c2VkLCB0aGVyZSBhcmUgMyBcImludGVybmFsXCIgc3RyZWFtcyBmb3IgZWFjaCBrZXl2YWwgcGFpclxuICAvLyBzbyBpdCBiYXNpY2FsbHkgY2hlY2tzIGlmIHRoZXJlIGlzIGFueSB2YWx1ZSBhZGRlZCB0byB0aGUgZm9ybVxuICBpZiAodGhpcy5fc3RyZWFtcy5sZW5ndGgpIHtcbiAgICBrbm93bkxlbmd0aCArPSB0aGlzLl9sYXN0Qm91bmRhcnkoKS5sZW5ndGg7XG4gIH1cblxuICAvLyBodHRwczovL2dpdGh1Yi5jb20vZm9ybS1kYXRhL2Zvcm0tZGF0YS9pc3N1ZXMvNDBcbiAgaWYgKCF0aGlzLmhhc0tub3duTGVuZ3RoKCkpIHtcbiAgICAvLyBTb21lIGFzeW5jIGxlbmd0aCByZXRyaWV2ZXJzIGFyZSBwcmVzZW50XG4gICAgLy8gdGhlcmVmb3JlIHN5bmNocm9ub3VzIGxlbmd0aCBjYWxjdWxhdGlvbiBpcyBmYWxzZS5cbiAgICAvLyBQbGVhc2UgdXNlIGdldExlbmd0aChjYWxsYmFjaykgdG8gZ2V0IHByb3BlciBsZW5ndGhcbiAgICB0aGlzLl9lcnJvcihuZXcgRXJyb3IoJ0Nhbm5vdCBjYWxjdWxhdGUgcHJvcGVyIGxlbmd0aCBpbiBzeW5jaHJvbm91cyB3YXkuJykpO1xuICB9XG5cbiAgcmV0dXJuIGtub3duTGVuZ3RoO1xufTtcblxuLy8gUHVibGljIEFQSSB0byBjaGVjayBpZiBsZW5ndGggb2YgYWRkZWQgdmFsdWVzIGlzIGtub3duXG4vLyBodHRwczovL2dpdGh1Yi5jb20vZm9ybS1kYXRhL2Zvcm0tZGF0YS9pc3N1ZXMvMTk2XG4vLyBodHRwczovL2dpdGh1Yi5jb20vZm9ybS1kYXRhL2Zvcm0tZGF0YS9pc3N1ZXMvMjYyXG5Gb3JtRGF0YS5wcm90b3R5cGUuaGFzS25vd25MZW5ndGggPSBmdW5jdGlvbigpIHtcbiAgdmFyIGhhc0tub3duTGVuZ3RoID0gdHJ1ZTtcblxuICBpZiAodGhpcy5fdmFsdWVzVG9NZWFzdXJlLmxlbmd0aCkge1xuICAgIGhhc0tub3duTGVuZ3RoID0gZmFsc2U7XG4gIH1cblxuICByZXR1cm4gaGFzS25vd25MZW5ndGg7XG59O1xuXG5Gb3JtRGF0YS5wcm90b3R5cGUuZ2V0TGVuZ3RoID0gZnVuY3Rpb24oY2IpIHtcbiAgdmFyIGtub3duTGVuZ3RoID0gdGhpcy5fb3ZlcmhlYWRMZW5ndGggKyB0aGlzLl92YWx1ZUxlbmd0aDtcblxuICBpZiAodGhpcy5fc3RyZWFtcy5sZW5ndGgpIHtcbiAgICBrbm93bkxlbmd0aCArPSB0aGlzLl9sYXN0Qm91bmRhcnkoKS5sZW5ndGg7XG4gIH1cblxuICBpZiAoIXRoaXMuX3ZhbHVlc1RvTWVhc3VyZS5sZW5ndGgpIHtcbiAgICBwcm9jZXNzLm5leHRUaWNrKGNiLmJpbmQodGhpcywgbnVsbCwga25vd25MZW5ndGgpKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBhc3luY2tpdC5wYXJhbGxlbCh0aGlzLl92YWx1ZXNUb01lYXN1cmUsIHRoaXMuX2xlbmd0aFJldHJpZXZlciwgZnVuY3Rpb24oZXJyLCB2YWx1ZXMpIHtcbiAgICBpZiAoZXJyKSB7XG4gICAgICBjYihlcnIpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhbHVlcy5mb3JFYWNoKGZ1bmN0aW9uKGxlbmd0aCkge1xuICAgICAga25vd25MZW5ndGggKz0gbGVuZ3RoO1xuICAgIH0pO1xuXG4gICAgY2IobnVsbCwga25vd25MZW5ndGgpO1xuICB9KTtcbn07XG5cbkZvcm1EYXRhLnByb3RvdHlwZS5zdWJtaXQgPSBmdW5jdGlvbihwYXJhbXMsIGNiKSB7XG4gIHZhciByZXF1ZXN0XG4gICAgLCBvcHRpb25zXG4gICAgLCBkZWZhdWx0cyA9IHttZXRob2Q6ICdwb3N0J31cbiAgICA7XG5cbiAgLy8gcGFyc2UgcHJvdmlkZWQgdXJsIGlmIGl0J3Mgc3RyaW5nXG4gIC8vIG9yIHRyZWF0IGl0IGFzIG9wdGlvbnMgb2JqZWN0XG4gIGlmICh0eXBlb2YgcGFyYW1zID09ICdzdHJpbmcnKSB7XG5cbiAgICBwYXJhbXMgPSBwYXJzZVVybChwYXJhbXMpO1xuICAgIG9wdGlvbnMgPSBwb3B1bGF0ZSh7XG4gICAgICBwb3J0OiBwYXJhbXMucG9ydCxcbiAgICAgIHBhdGg6IHBhcmFtcy5wYXRobmFtZSxcbiAgICAgIGhvc3Q6IHBhcmFtcy5ob3N0bmFtZSxcbiAgICAgIHByb3RvY29sOiBwYXJhbXMucHJvdG9jb2xcbiAgICB9LCBkZWZhdWx0cyk7XG5cbiAgLy8gdXNlIGN1c3RvbSBwYXJhbXNcbiAgfSBlbHNlIHtcblxuICAgIG9wdGlvbnMgPSBwb3B1bGF0ZShwYXJhbXMsIGRlZmF1bHRzKTtcbiAgICAvLyBpZiBubyBwb3J0IHByb3ZpZGVkIHVzZSBkZWZhdWx0IG9uZVxuICAgIGlmICghb3B0aW9ucy5wb3J0KSB7XG4gICAgICBvcHRpb25zLnBvcnQgPSBvcHRpb25zLnByb3RvY29sID09ICdodHRwczonID8gNDQzIDogODA7XG4gICAgfVxuICB9XG5cbiAgLy8gcHV0IHRoYXQgZ29vZCBjb2RlIGluIGdldEhlYWRlcnMgdG8gc29tZSB1c2VcbiAgb3B0aW9ucy5oZWFkZXJzID0gdGhpcy5nZXRIZWFkZXJzKHBhcmFtcy5oZWFkZXJzKTtcblxuICAvLyBodHRwcyBpZiBzcGVjaWZpZWQsIGZhbGxiYWNrIHRvIGh0dHAgaW4gYW55IG90aGVyIGNhc2VcbiAgaWYgKG9wdGlvbnMucHJvdG9jb2wgPT0gJ2h0dHBzOicpIHtcbiAgICByZXF1ZXN0ID0gaHR0cHMucmVxdWVzdChvcHRpb25zKTtcbiAgfSBlbHNlIHtcbiAgICByZXF1ZXN0ID0gaHR0cC5yZXF1ZXN0KG9wdGlvbnMpO1xuICB9XG5cbiAgLy8gZ2V0IGNvbnRlbnQgbGVuZ3RoIGFuZCBmaXJlIGF3YXlcbiAgdGhpcy5nZXRMZW5ndGgoZnVuY3Rpb24oZXJyLCBsZW5ndGgpIHtcbiAgICBpZiAoZXJyICYmIGVyciAhPT0gJ1Vua25vd24gc3RyZWFtJykge1xuICAgICAgdGhpcy5fZXJyb3IoZXJyKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBhZGQgY29udGVudCBsZW5ndGhcbiAgICBpZiAobGVuZ3RoKSB7XG4gICAgICByZXF1ZXN0LnNldEhlYWRlcignQ29udGVudC1MZW5ndGgnLCBsZW5ndGgpO1xuICAgIH1cblxuICAgIHRoaXMucGlwZShyZXF1ZXN0KTtcbiAgICBpZiAoY2IpIHtcbiAgICAgIHZhciBvblJlc3BvbnNlO1xuXG4gICAgICB2YXIgY2FsbGJhY2sgPSBmdW5jdGlvbiAoZXJyb3IsIHJlc3BvbmNlKSB7XG4gICAgICAgIHJlcXVlc3QucmVtb3ZlTGlzdGVuZXIoJ2Vycm9yJywgY2FsbGJhY2spO1xuICAgICAgICByZXF1ZXN0LnJlbW92ZUxpc3RlbmVyKCdyZXNwb25zZScsIG9uUmVzcG9uc2UpO1xuXG4gICAgICAgIHJldHVybiBjYi5jYWxsKHRoaXMsIGVycm9yLCByZXNwb25jZSk7XG4gICAgICB9O1xuXG4gICAgICBvblJlc3BvbnNlID0gY2FsbGJhY2suYmluZCh0aGlzLCBudWxsKTtcblxuICAgICAgcmVxdWVzdC5vbignZXJyb3InLCBjYWxsYmFjayk7XG4gICAgICByZXF1ZXN0Lm9uKCdyZXNwb25zZScsIG9uUmVzcG9uc2UpO1xuICAgIH1cbiAgfS5iaW5kKHRoaXMpKTtcblxuICByZXR1cm4gcmVxdWVzdDtcbn07XG5cbkZvcm1EYXRhLnByb3RvdHlwZS5fZXJyb3IgPSBmdW5jdGlvbihlcnIpIHtcbiAgaWYgKCF0aGlzLmVycm9yKSB7XG4gICAgdGhpcy5lcnJvciA9IGVycjtcbiAgICB0aGlzLnBhdXNlKCk7XG4gICAgdGhpcy5lbWl0KCdlcnJvcicsIGVycik7XG4gIH1cbn07XG5cbkZvcm1EYXRhLnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuICdbb2JqZWN0IEZvcm1EYXRhXSc7XG59O1xuIiwiLy8gcG9wdWxhdGVzIG1pc3NpbmcgdmFsdWVzXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGRzdCwgc3JjKSB7XG5cbiAgT2JqZWN0LmtleXMoc3JjKS5mb3JFYWNoKGZ1bmN0aW9uKHByb3ApXG4gIHtcbiAgICBkc3RbcHJvcF0gPSBkc3RbcHJvcF0gfHwgc3JjW3Byb3BdO1xuICB9KTtcblxuICByZXR1cm4gZHN0O1xufTtcbiIsIid1c2Ugc3RyaWN0Jztcbm1vZHVsZS5leHBvcnRzID0gKGZsYWcsIGFyZ3YpID0+IHtcblx0YXJndiA9IGFyZ3YgfHwgcHJvY2Vzcy5hcmd2O1xuXHRjb25zdCBwcmVmaXggPSBmbGFnLnN0YXJ0c1dpdGgoJy0nKSA/ICcnIDogKGZsYWcubGVuZ3RoID09PSAxID8gJy0nIDogJy0tJyk7XG5cdGNvbnN0IHBvcyA9IGFyZ3YuaW5kZXhPZihwcmVmaXggKyBmbGFnKTtcblx0Y29uc3QgdGVybWluYXRvclBvcyA9IGFyZ3YuaW5kZXhPZignLS0nKTtcblx0cmV0dXJuIHBvcyAhPT0gLTEgJiYgKHRlcm1pbmF0b3JQb3MgPT09IC0xID8gdHJ1ZSA6IHBvcyA8IHRlcm1pbmF0b3JQb3MpO1xufTtcbiIsInZhciBqc29uX3N0cmluZ2lmeSA9IHJlcXVpcmUoJy4vbGliL3N0cmluZ2lmeS5qcycpLnN0cmluZ2lmeTtcbnZhciBqc29uX3BhcnNlICAgICA9IHJlcXVpcmUoJy4vbGliL3BhcnNlLmpzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24ob3B0aW9ucykge1xuICAgIHJldHVybiAge1xuICAgICAgICBwYXJzZToganNvbl9wYXJzZShvcHRpb25zKSxcbiAgICAgICAgc3RyaW5naWZ5OiBqc29uX3N0cmluZ2lmeVxuICAgIH1cbn07XG4vL2NyZWF0ZSB0aGUgZGVmYXVsdCBtZXRob2QgbWVtYmVycyB3aXRoIG5vIG9wdGlvbnMgYXBwbGllZCBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHlcbm1vZHVsZS5leHBvcnRzLnBhcnNlID0ganNvbl9wYXJzZSgpO1xubW9kdWxlLmV4cG9ydHMuc3RyaW5naWZ5ID0ganNvbl9zdHJpbmdpZnk7XG4iLCJ2YXIgQmlnTnVtYmVyID0gbnVsbDtcblxuLy8gcmVnZXhweHMgZXh0cmFjdGVkIGZyb21cbi8vIChjKSBCU0QtMy1DbGF1c2Vcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9mYXN0aWZ5L3NlY3VyZS1qc29uLXBhcnNlL2dyYXBocy9jb250cmlidXRvcnMgYW5kIGh0dHBzOi8vZ2l0aHViLmNvbS9oYXBpanMvYm91cm5lL2dyYXBocy9jb250cmlidXRvcnNcblxuY29uc3Qgc3VzcGVjdFByb3RvUnggPSAvKD86X3xcXFxcdTAwNVtGZl0pKD86X3xcXFxcdTAwNVtGZl0pKD86cHxcXFxcdTAwNzApKD86cnxcXFxcdTAwNzIpKD86b3xcXFxcdTAwNltGZl0pKD86dHxcXFxcdTAwNzQpKD86b3xcXFxcdTAwNltGZl0pKD86X3xcXFxcdTAwNVtGZl0pKD86X3xcXFxcdTAwNVtGZl0pLztcbmNvbnN0IHN1c3BlY3RDb25zdHJ1Y3RvclJ4ID0gLyg/OmN8XFxcXHUwMDYzKSg/Om98XFxcXHUwMDZbRmZdKSg/Om58XFxcXHUwMDZbRWVdKSg/OnN8XFxcXHUwMDczKSg/OnR8XFxcXHUwMDc0KSg/OnJ8XFxcXHUwMDcyKSg/OnV8XFxcXHUwMDc1KSg/OmN8XFxcXHUwMDYzKSg/OnR8XFxcXHUwMDc0KSg/Om98XFxcXHUwMDZbRmZdKSg/OnJ8XFxcXHUwMDcyKS87XG5cbi8qXG4gICAganNvbl9wYXJzZS5qc1xuICAgIDIwMTItMDYtMjBcblxuICAgIFB1YmxpYyBEb21haW4uXG5cbiAgICBOTyBXQVJSQU5UWSBFWFBSRVNTRUQgT1IgSU1QTElFRC4gVVNFIEFUIFlPVVIgT1dOIFJJU0suXG5cbiAgICBUaGlzIGZpbGUgY3JlYXRlcyBhIGpzb25fcGFyc2UgZnVuY3Rpb24uXG4gICAgRHVyaW5nIGNyZWF0ZSB5b3UgY2FuIChvcHRpb25hbGx5KSBzcGVjaWZ5IHNvbWUgYmVoYXZpb3VyYWwgc3dpdGNoZXNcblxuICAgICAgICByZXF1aXJlKCdqc29uLWJpZ2ludCcpKG9wdGlvbnMpXG5cbiAgICAgICAgICAgIFRoZSBvcHRpb25hbCBvcHRpb25zIHBhcmFtZXRlciBob2xkcyBzd2l0Y2hlcyB0aGF0IGRyaXZlIGNlcnRhaW5cbiAgICAgICAgICAgIGFzcGVjdHMgb2YgdGhlIHBhcnNpbmcgcHJvY2VzczpcbiAgICAgICAgICAgICogb3B0aW9ucy5zdHJpY3QgPSB0cnVlIHdpbGwgd2FybiBhYm91dCBkdXBsaWNhdGUta2V5IHVzYWdlIGluIHRoZSBqc29uLlxuICAgICAgICAgICAgICBUaGUgZGVmYXVsdCAoc3RyaWN0ID0gZmFsc2UpIHdpbGwgc2lsZW50bHkgaWdub3JlIHRob3NlIGFuZCBvdmVyd3JpdGVcbiAgICAgICAgICAgICAgdmFsdWVzIGZvciBrZXlzIHRoYXQgYXJlIGluIGR1cGxpY2F0ZSB1c2UuXG5cbiAgICBUaGUgcmVzdWx0aW5nIGZ1bmN0aW9uIGZvbGxvd3MgdGhpcyBzaWduYXR1cmU6XG4gICAgICAgIGpzb25fcGFyc2UodGV4dCwgcmV2aXZlcilcbiAgICAgICAgICAgIFRoaXMgbWV0aG9kIHBhcnNlcyBhIEpTT04gdGV4dCB0byBwcm9kdWNlIGFuIG9iamVjdCBvciBhcnJheS5cbiAgICAgICAgICAgIEl0IGNhbiB0aHJvdyBhIFN5bnRheEVycm9yIGV4Y2VwdGlvbi5cblxuICAgICAgICAgICAgVGhlIG9wdGlvbmFsIHJldml2ZXIgcGFyYW1ldGVyIGlzIGEgZnVuY3Rpb24gdGhhdCBjYW4gZmlsdGVyIGFuZFxuICAgICAgICAgICAgdHJhbnNmb3JtIHRoZSByZXN1bHRzLiBJdCByZWNlaXZlcyBlYWNoIG9mIHRoZSBrZXlzIGFuZCB2YWx1ZXMsXG4gICAgICAgICAgICBhbmQgaXRzIHJldHVybiB2YWx1ZSBpcyB1c2VkIGluc3RlYWQgb2YgdGhlIG9yaWdpbmFsIHZhbHVlLlxuICAgICAgICAgICAgSWYgaXQgcmV0dXJucyB3aGF0IGl0IHJlY2VpdmVkLCB0aGVuIHRoZSBzdHJ1Y3R1cmUgaXMgbm90IG1vZGlmaWVkLlxuICAgICAgICAgICAgSWYgaXQgcmV0dXJucyB1bmRlZmluZWQgdGhlbiB0aGUgbWVtYmVyIGlzIGRlbGV0ZWQuXG5cbiAgICAgICAgICAgIEV4YW1wbGU6XG5cbiAgICAgICAgICAgIC8vIFBhcnNlIHRoZSB0ZXh0LiBWYWx1ZXMgdGhhdCBsb29rIGxpa2UgSVNPIGRhdGUgc3RyaW5ncyB3aWxsXG4gICAgICAgICAgICAvLyBiZSBjb252ZXJ0ZWQgdG8gRGF0ZSBvYmplY3RzLlxuXG4gICAgICAgICAgICBteURhdGEgPSBqc29uX3BhcnNlKHRleHQsIGZ1bmN0aW9uIChrZXksIHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgdmFyIGE7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICAgICAgYSA9XG4vXihcXGR7NH0pLShcXGR7Mn0pLShcXGR7Mn0pVChcXGR7Mn0pOihcXGR7Mn0pOihcXGR7Mn0oPzpcXC5cXGQqKT8pWiQvLmV4ZWModmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoYSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBEYXRlKERhdGUuVVRDKCthWzFdLCArYVsyXSAtIDEsICthWzNdLCArYVs0XSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICArYVs1XSwgK2FbNl0pKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgICAgICB9KTtcblxuICAgIFRoaXMgaXMgYSByZWZlcmVuY2UgaW1wbGVtZW50YXRpb24uIFlvdSBhcmUgZnJlZSB0byBjb3B5LCBtb2RpZnksIG9yXG4gICAgcmVkaXN0cmlidXRlLlxuXG4gICAgVGhpcyBjb2RlIHNob3VsZCBiZSBtaW5pZmllZCBiZWZvcmUgZGVwbG95bWVudC5cbiAgICBTZWUgaHR0cDovL2phdmFzY3JpcHQuY3JvY2tmb3JkLmNvbS9qc21pbi5odG1sXG5cbiAgICBVU0UgWU9VUiBPV04gQ09QWS4gSVQgSVMgRVhUUkVNRUxZIFVOV0lTRSBUTyBMT0FEIENPREUgRlJPTSBTRVJWRVJTIFlPVSBET1xuICAgIE5PVCBDT05UUk9MLlxuKi9cblxuLyptZW1iZXJzIFwiXCIsIFwiXFxcIlwiLCBcIlxcL1wiLCBcIlxcXFxcIiwgYXQsIGIsIGNhbGwsIGNoYXJBdCwgZiwgZnJvbUNoYXJDb2RlLFxuICAgIGhhc093blByb3BlcnR5LCBtZXNzYWdlLCBuLCBuYW1lLCBwcm90b3R5cGUsIHB1c2gsIHIsIHQsIHRleHRcbiovXG5cbnZhciBqc29uX3BhcnNlID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgJ3VzZSBzdHJpY3QnO1xuXG4gIC8vIFRoaXMgaXMgYSBmdW5jdGlvbiB0aGF0IGNhbiBwYXJzZSBhIEpTT04gdGV4dCwgcHJvZHVjaW5nIGEgSmF2YVNjcmlwdFxuICAvLyBkYXRhIHN0cnVjdHVyZS4gSXQgaXMgYSBzaW1wbGUsIHJlY3Vyc2l2ZSBkZXNjZW50IHBhcnNlci4gSXQgZG9lcyBub3QgdXNlXG4gIC8vIGV2YWwgb3IgcmVndWxhciBleHByZXNzaW9ucywgc28gaXQgY2FuIGJlIHVzZWQgYXMgYSBtb2RlbCBmb3IgaW1wbGVtZW50aW5nXG4gIC8vIGEgSlNPTiBwYXJzZXIgaW4gb3RoZXIgbGFuZ3VhZ2VzLlxuXG4gIC8vIFdlIGFyZSBkZWZpbmluZyB0aGUgZnVuY3Rpb24gaW5zaWRlIG9mIGFub3RoZXIgZnVuY3Rpb24gdG8gYXZvaWQgY3JlYXRpbmdcbiAgLy8gZ2xvYmFsIHZhcmlhYmxlcy5cblxuICAvLyBEZWZhdWx0IG9wdGlvbnMgb25lIGNhbiBvdmVycmlkZSBieSBwYXNzaW5nIG9wdGlvbnMgdG8gdGhlIHBhcnNlKClcbiAgdmFyIF9vcHRpb25zID0ge1xuICAgIHN0cmljdDogZmFsc2UsIC8vIG5vdCBiZWluZyBzdHJpY3QgbWVhbnMgZG8gbm90IGdlbmVyYXRlIHN5bnRheCBlcnJvcnMgZm9yIFwiZHVwbGljYXRlIGtleVwiXG4gICAgc3RvcmVBc1N0cmluZzogZmFsc2UsIC8vIHRvZ2dsZXMgd2hldGhlciB0aGUgdmFsdWVzIHNob3VsZCBiZSBzdG9yZWQgYXMgQmlnTnVtYmVyIChkZWZhdWx0KSBvciBhIHN0cmluZ1xuICAgIGFsd2F5c1BhcnNlQXNCaWc6IGZhbHNlLCAvLyB0b2dnbGVzIHdoZXRoZXIgYWxsIG51bWJlcnMgc2hvdWxkIGJlIEJpZ1xuICAgIHVzZU5hdGl2ZUJpZ0ludDogZmFsc2UsIC8vIHRvZ2dsZXMgd2hldGhlciB0byB1c2UgbmF0aXZlIEJpZ0ludCBpbnN0ZWFkIG9mIGJpZ251bWJlci5qc1xuICAgIHByb3RvQWN0aW9uOiAnZXJyb3InLFxuICAgIGNvbnN0cnVjdG9yQWN0aW9uOiAnZXJyb3InLFxuICB9O1xuXG4gIC8vIElmIHRoZXJlIGFyZSBvcHRpb25zLCB0aGVuIHVzZSB0aGVtIHRvIG92ZXJyaWRlIHRoZSBkZWZhdWx0IF9vcHRpb25zXG4gIGlmIChvcHRpb25zICE9PSB1bmRlZmluZWQgJiYgb3B0aW9ucyAhPT0gbnVsbCkge1xuICAgIGlmIChvcHRpb25zLnN0cmljdCA9PT0gdHJ1ZSkge1xuICAgICAgX29wdGlvbnMuc3RyaWN0ID0gdHJ1ZTtcbiAgICB9XG4gICAgaWYgKG9wdGlvbnMuc3RvcmVBc1N0cmluZyA9PT0gdHJ1ZSkge1xuICAgICAgX29wdGlvbnMuc3RvcmVBc1N0cmluZyA9IHRydWU7XG4gICAgfVxuICAgIF9vcHRpb25zLmFsd2F5c1BhcnNlQXNCaWcgPVxuICAgICAgb3B0aW9ucy5hbHdheXNQYXJzZUFzQmlnID09PSB0cnVlID8gb3B0aW9ucy5hbHdheXNQYXJzZUFzQmlnIDogZmFsc2U7XG4gICAgX29wdGlvbnMudXNlTmF0aXZlQmlnSW50ID1cbiAgICAgIG9wdGlvbnMudXNlTmF0aXZlQmlnSW50ID09PSB0cnVlID8gb3B0aW9ucy51c2VOYXRpdmVCaWdJbnQgOiBmYWxzZTtcblxuICAgIGlmICh0eXBlb2Ygb3B0aW9ucy5jb25zdHJ1Y3RvckFjdGlvbiAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIGlmIChcbiAgICAgICAgb3B0aW9ucy5jb25zdHJ1Y3RvckFjdGlvbiA9PT0gJ2Vycm9yJyB8fFxuICAgICAgICBvcHRpb25zLmNvbnN0cnVjdG9yQWN0aW9uID09PSAnaWdub3JlJyB8fFxuICAgICAgICBvcHRpb25zLmNvbnN0cnVjdG9yQWN0aW9uID09PSAncHJlc2VydmUnXG4gICAgICApIHtcbiAgICAgICAgX29wdGlvbnMuY29uc3RydWN0b3JBY3Rpb24gPSBvcHRpb25zLmNvbnN0cnVjdG9yQWN0aW9uO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIGBJbmNvcnJlY3QgdmFsdWUgZm9yIGNvbnN0cnVjdG9yQWN0aW9uIG9wdGlvbiwgbXVzdCBiZSBcImVycm9yXCIsIFwiaWdub3JlXCIgb3IgdW5kZWZpbmVkIGJ1dCBwYXNzZWQgJHtvcHRpb25zLmNvbnN0cnVjdG9yQWN0aW9ufWBcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIG9wdGlvbnMucHJvdG9BY3Rpb24gIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBpZiAoXG4gICAgICAgIG9wdGlvbnMucHJvdG9BY3Rpb24gPT09ICdlcnJvcicgfHxcbiAgICAgICAgb3B0aW9ucy5wcm90b0FjdGlvbiA9PT0gJ2lnbm9yZScgfHxcbiAgICAgICAgb3B0aW9ucy5wcm90b0FjdGlvbiA9PT0gJ3ByZXNlcnZlJ1xuICAgICAgKSB7XG4gICAgICAgIF9vcHRpb25zLnByb3RvQWN0aW9uID0gb3B0aW9ucy5wcm90b0FjdGlvbjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBgSW5jb3JyZWN0IHZhbHVlIGZvciBwcm90b0FjdGlvbiBvcHRpb24sIG11c3QgYmUgXCJlcnJvclwiLCBcImlnbm9yZVwiIG9yIHVuZGVmaW5lZCBidXQgcGFzc2VkICR7b3B0aW9ucy5wcm90b0FjdGlvbn1gXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgdmFyIGF0LCAvLyBUaGUgaW5kZXggb2YgdGhlIGN1cnJlbnQgY2hhcmFjdGVyXG4gICAgY2gsIC8vIFRoZSBjdXJyZW50IGNoYXJhY3RlclxuICAgIGVzY2FwZWUgPSB7XG4gICAgICAnXCInOiAnXCInLFxuICAgICAgJ1xcXFwnOiAnXFxcXCcsXG4gICAgICAnLyc6ICcvJyxcbiAgICAgIGI6ICdcXGInLFxuICAgICAgZjogJ1xcZicsXG4gICAgICBuOiAnXFxuJyxcbiAgICAgIHI6ICdcXHInLFxuICAgICAgdDogJ1xcdCcsXG4gICAgfSxcbiAgICB0ZXh0LFxuICAgIGVycm9yID0gZnVuY3Rpb24gKG0pIHtcbiAgICAgIC8vIENhbGwgZXJyb3Igd2hlbiBzb21ldGhpbmcgaXMgd3JvbmcuXG5cbiAgICAgIHRocm93IHtcbiAgICAgICAgbmFtZTogJ1N5bnRheEVycm9yJyxcbiAgICAgICAgbWVzc2FnZTogbSxcbiAgICAgICAgYXQ6IGF0LFxuICAgICAgICB0ZXh0OiB0ZXh0LFxuICAgICAgfTtcbiAgICB9LFxuICAgIG5leHQgPSBmdW5jdGlvbiAoYykge1xuICAgICAgLy8gSWYgYSBjIHBhcmFtZXRlciBpcyBwcm92aWRlZCwgdmVyaWZ5IHRoYXQgaXQgbWF0Y2hlcyB0aGUgY3VycmVudCBjaGFyYWN0ZXIuXG5cbiAgICAgIGlmIChjICYmIGMgIT09IGNoKSB7XG4gICAgICAgIGVycm9yKFwiRXhwZWN0ZWQgJ1wiICsgYyArIFwiJyBpbnN0ZWFkIG9mICdcIiArIGNoICsgXCInXCIpO1xuICAgICAgfVxuXG4gICAgICAvLyBHZXQgdGhlIG5leHQgY2hhcmFjdGVyLiBXaGVuIHRoZXJlIGFyZSBubyBtb3JlIGNoYXJhY3RlcnMsXG4gICAgICAvLyByZXR1cm4gdGhlIGVtcHR5IHN0cmluZy5cblxuICAgICAgY2ggPSB0ZXh0LmNoYXJBdChhdCk7XG4gICAgICBhdCArPSAxO1xuICAgICAgcmV0dXJuIGNoO1xuICAgIH0sXG4gICAgbnVtYmVyID0gZnVuY3Rpb24gKCkge1xuICAgICAgLy8gUGFyc2UgYSBudW1iZXIgdmFsdWUuXG5cbiAgICAgIHZhciBudW1iZXIsXG4gICAgICAgIHN0cmluZyA9ICcnO1xuXG4gICAgICBpZiAoY2ggPT09ICctJykge1xuICAgICAgICBzdHJpbmcgPSAnLSc7XG4gICAgICAgIG5leHQoJy0nKTtcbiAgICAgIH1cbiAgICAgIHdoaWxlIChjaCA+PSAnMCcgJiYgY2ggPD0gJzknKSB7XG4gICAgICAgIHN0cmluZyArPSBjaDtcbiAgICAgICAgbmV4dCgpO1xuICAgICAgfVxuICAgICAgaWYgKGNoID09PSAnLicpIHtcbiAgICAgICAgc3RyaW5nICs9ICcuJztcbiAgICAgICAgd2hpbGUgKG5leHQoKSAmJiBjaCA+PSAnMCcgJiYgY2ggPD0gJzknKSB7XG4gICAgICAgICAgc3RyaW5nICs9IGNoO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoY2ggPT09ICdlJyB8fCBjaCA9PT0gJ0UnKSB7XG4gICAgICAgIHN0cmluZyArPSBjaDtcbiAgICAgICAgbmV4dCgpO1xuICAgICAgICBpZiAoY2ggPT09ICctJyB8fCBjaCA9PT0gJysnKSB7XG4gICAgICAgICAgc3RyaW5nICs9IGNoO1xuICAgICAgICAgIG5leHQoKTtcbiAgICAgICAgfVxuICAgICAgICB3aGlsZSAoY2ggPj0gJzAnICYmIGNoIDw9ICc5Jykge1xuICAgICAgICAgIHN0cmluZyArPSBjaDtcbiAgICAgICAgICBuZXh0KCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIG51bWJlciA9ICtzdHJpbmc7XG4gICAgICBpZiAoIWlzRmluaXRlKG51bWJlcikpIHtcbiAgICAgICAgZXJyb3IoJ0JhZCBudW1iZXInKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChCaWdOdW1iZXIgPT0gbnVsbCkgQmlnTnVtYmVyID0gcmVxdWlyZSgnYmlnbnVtYmVyLmpzJyk7XG4gICAgICAgIC8vaWYgKG51bWJlciA+IDkwMDcxOTkyNTQ3NDA5OTIgfHwgbnVtYmVyIDwgLTkwMDcxOTkyNTQ3NDA5OTIpXG4gICAgICAgIC8vIEJpZ251bWJlciBoYXMgc3RyaWN0ZXIgY2hlY2s6IGV2ZXJ5dGhpbmcgd2l0aCBsZW5ndGggPiAxNSBkaWdpdHMgZGlzYWxsb3dlZFxuICAgICAgICBpZiAoc3RyaW5nLmxlbmd0aCA+IDE1KVxuICAgICAgICAgIHJldHVybiBfb3B0aW9ucy5zdG9yZUFzU3RyaW5nXG4gICAgICAgICAgICA/IHN0cmluZ1xuICAgICAgICAgICAgOiBfb3B0aW9ucy51c2VOYXRpdmVCaWdJbnRcbiAgICAgICAgICAgID8gQmlnSW50KHN0cmluZylcbiAgICAgICAgICAgIDogbmV3IEJpZ051bWJlcihzdHJpbmcpO1xuICAgICAgICBlbHNlXG4gICAgICAgICAgcmV0dXJuICFfb3B0aW9ucy5hbHdheXNQYXJzZUFzQmlnXG4gICAgICAgICAgICA/IG51bWJlclxuICAgICAgICAgICAgOiBfb3B0aW9ucy51c2VOYXRpdmVCaWdJbnRcbiAgICAgICAgICAgID8gQmlnSW50KG51bWJlcilcbiAgICAgICAgICAgIDogbmV3IEJpZ051bWJlcihudW1iZXIpO1xuICAgICAgfVxuICAgIH0sXG4gICAgc3RyaW5nID0gZnVuY3Rpb24gKCkge1xuICAgICAgLy8gUGFyc2UgYSBzdHJpbmcgdmFsdWUuXG5cbiAgICAgIHZhciBoZXgsXG4gICAgICAgIGksXG4gICAgICAgIHN0cmluZyA9ICcnLFxuICAgICAgICB1ZmZmZjtcblxuICAgICAgLy8gV2hlbiBwYXJzaW5nIGZvciBzdHJpbmcgdmFsdWVzLCB3ZSBtdXN0IGxvb2sgZm9yIFwiIGFuZCBcXCBjaGFyYWN0ZXJzLlxuXG4gICAgICBpZiAoY2ggPT09ICdcIicpIHtcbiAgICAgICAgdmFyIHN0YXJ0QXQgPSBhdDtcbiAgICAgICAgd2hpbGUgKG5leHQoKSkge1xuICAgICAgICAgIGlmIChjaCA9PT0gJ1wiJykge1xuICAgICAgICAgICAgaWYgKGF0IC0gMSA+IHN0YXJ0QXQpIHN0cmluZyArPSB0ZXh0LnN1YnN0cmluZyhzdGFydEF0LCBhdCAtIDEpO1xuICAgICAgICAgICAgbmV4dCgpO1xuICAgICAgICAgICAgcmV0dXJuIHN0cmluZztcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGNoID09PSAnXFxcXCcpIHtcbiAgICAgICAgICAgIGlmIChhdCAtIDEgPiBzdGFydEF0KSBzdHJpbmcgKz0gdGV4dC5zdWJzdHJpbmcoc3RhcnRBdCwgYXQgLSAxKTtcbiAgICAgICAgICAgIG5leHQoKTtcbiAgICAgICAgICAgIGlmIChjaCA9PT0gJ3UnKSB7XG4gICAgICAgICAgICAgIHVmZmZmID0gMDtcbiAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IDQ7IGkgKz0gMSkge1xuICAgICAgICAgICAgICAgIGhleCA9IHBhcnNlSW50KG5leHQoKSwgMTYpO1xuICAgICAgICAgICAgICAgIGlmICghaXNGaW5pdGUoaGV4KSkge1xuICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHVmZmZmID0gdWZmZmYgKiAxNiArIGhleDtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBzdHJpbmcgKz0gU3RyaW5nLmZyb21DaGFyQ29kZSh1ZmZmZik7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBlc2NhcGVlW2NoXSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgc3RyaW5nICs9IGVzY2FwZWVbY2hdO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzdGFydEF0ID0gYXQ7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBlcnJvcignQmFkIHN0cmluZycpO1xuICAgIH0sXG4gICAgd2hpdGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAvLyBTa2lwIHdoaXRlc3BhY2UuXG5cbiAgICAgIHdoaWxlIChjaCAmJiBjaCA8PSAnICcpIHtcbiAgICAgICAgbmV4dCgpO1xuICAgICAgfVxuICAgIH0sXG4gICAgd29yZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIC8vIHRydWUsIGZhbHNlLCBvciBudWxsLlxuXG4gICAgICBzd2l0Y2ggKGNoKSB7XG4gICAgICAgIGNhc2UgJ3QnOlxuICAgICAgICAgIG5leHQoJ3QnKTtcbiAgICAgICAgICBuZXh0KCdyJyk7XG4gICAgICAgICAgbmV4dCgndScpO1xuICAgICAgICAgIG5leHQoJ2UnKTtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgY2FzZSAnZic6XG4gICAgICAgICAgbmV4dCgnZicpO1xuICAgICAgICAgIG5leHQoJ2EnKTtcbiAgICAgICAgICBuZXh0KCdsJyk7XG4gICAgICAgICAgbmV4dCgncycpO1xuICAgICAgICAgIG5leHQoJ2UnKTtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIGNhc2UgJ24nOlxuICAgICAgICAgIG5leHQoJ24nKTtcbiAgICAgICAgICBuZXh0KCd1Jyk7XG4gICAgICAgICAgbmV4dCgnbCcpO1xuICAgICAgICAgIG5leHQoJ2wnKTtcbiAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICAgIGVycm9yKFwiVW5leHBlY3RlZCAnXCIgKyBjaCArIFwiJ1wiKTtcbiAgICB9LFxuICAgIHZhbHVlLCAvLyBQbGFjZSBob2xkZXIgZm9yIHRoZSB2YWx1ZSBmdW5jdGlvbi5cbiAgICBhcnJheSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIC8vIFBhcnNlIGFuIGFycmF5IHZhbHVlLlxuXG4gICAgICB2YXIgYXJyYXkgPSBbXTtcblxuICAgICAgaWYgKGNoID09PSAnWycpIHtcbiAgICAgICAgbmV4dCgnWycpO1xuICAgICAgICB3aGl0ZSgpO1xuICAgICAgICBpZiAoY2ggPT09ICddJykge1xuICAgICAgICAgIG5leHQoJ10nKTtcbiAgICAgICAgICByZXR1cm4gYXJyYXk7IC8vIGVtcHR5IGFycmF5XG4gICAgICAgIH1cbiAgICAgICAgd2hpbGUgKGNoKSB7XG4gICAgICAgICAgYXJyYXkucHVzaCh2YWx1ZSgpKTtcbiAgICAgICAgICB3aGl0ZSgpO1xuICAgICAgICAgIGlmIChjaCA9PT0gJ10nKSB7XG4gICAgICAgICAgICBuZXh0KCddJyk7XG4gICAgICAgICAgICByZXR1cm4gYXJyYXk7XG4gICAgICAgICAgfVxuICAgICAgICAgIG5leHQoJywnKTtcbiAgICAgICAgICB3aGl0ZSgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBlcnJvcignQmFkIGFycmF5Jyk7XG4gICAgfSxcbiAgICBvYmplY3QgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAvLyBQYXJzZSBhbiBvYmplY3QgdmFsdWUuXG5cbiAgICAgIHZhciBrZXksXG4gICAgICAgIG9iamVjdCA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG5cbiAgICAgIGlmIChjaCA9PT0gJ3snKSB7XG4gICAgICAgIG5leHQoJ3snKTtcbiAgICAgICAgd2hpdGUoKTtcbiAgICAgICAgaWYgKGNoID09PSAnfScpIHtcbiAgICAgICAgICBuZXh0KCd9Jyk7XG4gICAgICAgICAgcmV0dXJuIG9iamVjdDsgLy8gZW1wdHkgb2JqZWN0XG4gICAgICAgIH1cbiAgICAgICAgd2hpbGUgKGNoKSB7XG4gICAgICAgICAga2V5ID0gc3RyaW5nKCk7XG4gICAgICAgICAgd2hpdGUoKTtcbiAgICAgICAgICBuZXh0KCc6Jyk7XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgX29wdGlvbnMuc3RyaWN0ID09PSB0cnVlICYmXG4gICAgICAgICAgICBPYmplY3QuaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIGtleSlcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIGVycm9yKCdEdXBsaWNhdGUga2V5IFwiJyArIGtleSArICdcIicpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChzdXNwZWN0UHJvdG9SeC50ZXN0KGtleSkgPT09IHRydWUpIHtcbiAgICAgICAgICAgIGlmIChfb3B0aW9ucy5wcm90b0FjdGlvbiA9PT0gJ2Vycm9yJykge1xuICAgICAgICAgICAgICBlcnJvcignT2JqZWN0IGNvbnRhaW5zIGZvcmJpZGRlbiBwcm90b3R5cGUgcHJvcGVydHknKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoX29wdGlvbnMucHJvdG9BY3Rpb24gPT09ICdpZ25vcmUnKSB7XG4gICAgICAgICAgICAgIHZhbHVlKCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBvYmplY3Rba2V5XSA9IHZhbHVlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIGlmIChzdXNwZWN0Q29uc3RydWN0b3JSeC50ZXN0KGtleSkgPT09IHRydWUpIHtcbiAgICAgICAgICAgIGlmIChfb3B0aW9ucy5jb25zdHJ1Y3RvckFjdGlvbiA9PT0gJ2Vycm9yJykge1xuICAgICAgICAgICAgICBlcnJvcignT2JqZWN0IGNvbnRhaW5zIGZvcmJpZGRlbiBjb25zdHJ1Y3RvciBwcm9wZXJ0eScpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChfb3B0aW9ucy5jb25zdHJ1Y3RvckFjdGlvbiA9PT0gJ2lnbm9yZScpIHtcbiAgICAgICAgICAgICAgdmFsdWUoKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIG9iamVjdFtrZXldID0gdmFsdWUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgb2JqZWN0W2tleV0gPSB2YWx1ZSgpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHdoaXRlKCk7XG4gICAgICAgICAgaWYgKGNoID09PSAnfScpIHtcbiAgICAgICAgICAgIG5leHQoJ30nKTtcbiAgICAgICAgICAgIHJldHVybiBvYmplY3Q7XG4gICAgICAgICAgfVxuICAgICAgICAgIG5leHQoJywnKTtcbiAgICAgICAgICB3aGl0ZSgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBlcnJvcignQmFkIG9iamVjdCcpO1xuICAgIH07XG5cbiAgdmFsdWUgPSBmdW5jdGlvbiAoKSB7XG4gICAgLy8gUGFyc2UgYSBKU09OIHZhbHVlLiBJdCBjb3VsZCBiZSBhbiBvYmplY3QsIGFuIGFycmF5LCBhIHN0cmluZywgYSBudW1iZXIsXG4gICAgLy8gb3IgYSB3b3JkLlxuXG4gICAgd2hpdGUoKTtcbiAgICBzd2l0Y2ggKGNoKSB7XG4gICAgICBjYXNlICd7JzpcbiAgICAgICAgcmV0dXJuIG9iamVjdCgpO1xuICAgICAgY2FzZSAnWyc6XG4gICAgICAgIHJldHVybiBhcnJheSgpO1xuICAgICAgY2FzZSAnXCInOlxuICAgICAgICByZXR1cm4gc3RyaW5nKCk7XG4gICAgICBjYXNlICctJzpcbiAgICAgICAgcmV0dXJuIG51bWJlcigpO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIGNoID49ICcwJyAmJiBjaCA8PSAnOScgPyBudW1iZXIoKSA6IHdvcmQoKTtcbiAgICB9XG4gIH07XG5cbiAgLy8gUmV0dXJuIHRoZSBqc29uX3BhcnNlIGZ1bmN0aW9uLiBJdCB3aWxsIGhhdmUgYWNjZXNzIHRvIGFsbCBvZiB0aGUgYWJvdmVcbiAgLy8gZnVuY3Rpb25zIGFuZCB2YXJpYWJsZXMuXG5cbiAgcmV0dXJuIGZ1bmN0aW9uIChzb3VyY2UsIHJldml2ZXIpIHtcbiAgICB2YXIgcmVzdWx0O1xuXG4gICAgdGV4dCA9IHNvdXJjZSArICcnO1xuICAgIGF0ID0gMDtcbiAgICBjaCA9ICcgJztcbiAgICByZXN1bHQgPSB2YWx1ZSgpO1xuICAgIHdoaXRlKCk7XG4gICAgaWYgKGNoKSB7XG4gICAgICBlcnJvcignU3ludGF4IGVycm9yJyk7XG4gICAgfVxuXG4gICAgLy8gSWYgdGhlcmUgaXMgYSByZXZpdmVyIGZ1bmN0aW9uLCB3ZSByZWN1cnNpdmVseSB3YWxrIHRoZSBuZXcgc3RydWN0dXJlLFxuICAgIC8vIHBhc3NpbmcgZWFjaCBuYW1lL3ZhbHVlIHBhaXIgdG8gdGhlIHJldml2ZXIgZnVuY3Rpb24gZm9yIHBvc3NpYmxlXG4gICAgLy8gdHJhbnNmb3JtYXRpb24sIHN0YXJ0aW5nIHdpdGggYSB0ZW1wb3Jhcnkgcm9vdCBvYmplY3QgdGhhdCBob2xkcyB0aGUgcmVzdWx0XG4gICAgLy8gaW4gYW4gZW1wdHkga2V5LiBJZiB0aGVyZSBpcyBub3QgYSByZXZpdmVyIGZ1bmN0aW9uLCB3ZSBzaW1wbHkgcmV0dXJuIHRoZVxuICAgIC8vIHJlc3VsdC5cblxuICAgIHJldHVybiB0eXBlb2YgcmV2aXZlciA9PT0gJ2Z1bmN0aW9uJ1xuICAgICAgPyAoZnVuY3Rpb24gd2Fsayhob2xkZXIsIGtleSkge1xuICAgICAgICAgIHZhciBrLFxuICAgICAgICAgICAgdixcbiAgICAgICAgICAgIHZhbHVlID0gaG9sZGVyW2tleV07XG4gICAgICAgICAgaWYgKHZhbHVlICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgIE9iamVjdC5rZXlzKHZhbHVlKS5mb3JFYWNoKGZ1bmN0aW9uIChrKSB7XG4gICAgICAgICAgICAgIHYgPSB3YWxrKHZhbHVlLCBrKTtcbiAgICAgICAgICAgICAgaWYgKHYgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIHZhbHVlW2tdID0gdjtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBkZWxldGUgdmFsdWVba107XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gcmV2aXZlci5jYWxsKGhvbGRlciwga2V5LCB2YWx1ZSk7XG4gICAgICAgIH0pKHsgJyc6IHJlc3VsdCB9LCAnJylcbiAgICAgIDogcmVzdWx0O1xuICB9O1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBqc29uX3BhcnNlO1xuIiwidmFyIEJpZ051bWJlciA9IHJlcXVpcmUoJ2JpZ251bWJlci5qcycpO1xuXG4vKlxuICAgIGpzb24yLmpzXG4gICAgMjAxMy0wNS0yNlxuXG4gICAgUHVibGljIERvbWFpbi5cblxuICAgIE5PIFdBUlJBTlRZIEVYUFJFU1NFRCBPUiBJTVBMSUVELiBVU0UgQVQgWU9VUiBPV04gUklTSy5cblxuICAgIFNlZSBodHRwOi8vd3d3LkpTT04ub3JnL2pzLmh0bWxcblxuXG4gICAgVGhpcyBjb2RlIHNob3VsZCBiZSBtaW5pZmllZCBiZWZvcmUgZGVwbG95bWVudC5cbiAgICBTZWUgaHR0cDovL2phdmFzY3JpcHQuY3JvY2tmb3JkLmNvbS9qc21pbi5odG1sXG5cbiAgICBVU0UgWU9VUiBPV04gQ09QWS4gSVQgSVMgRVhUUkVNRUxZIFVOV0lTRSBUTyBMT0FEIENPREUgRlJPTSBTRVJWRVJTIFlPVSBET1xuICAgIE5PVCBDT05UUk9MLlxuXG5cbiAgICBUaGlzIGZpbGUgY3JlYXRlcyBhIGdsb2JhbCBKU09OIG9iamVjdCBjb250YWluaW5nIHR3byBtZXRob2RzOiBzdHJpbmdpZnlcbiAgICBhbmQgcGFyc2UuXG5cbiAgICAgICAgSlNPTi5zdHJpbmdpZnkodmFsdWUsIHJlcGxhY2VyLCBzcGFjZSlcbiAgICAgICAgICAgIHZhbHVlICAgICAgIGFueSBKYXZhU2NyaXB0IHZhbHVlLCB1c3VhbGx5IGFuIG9iamVjdCBvciBhcnJheS5cblxuICAgICAgICAgICAgcmVwbGFjZXIgICAgYW4gb3B0aW9uYWwgcGFyYW1ldGVyIHRoYXQgZGV0ZXJtaW5lcyBob3cgb2JqZWN0XG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZXMgYXJlIHN0cmluZ2lmaWVkIGZvciBvYmplY3RzLiBJdCBjYW4gYmUgYVxuICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gb3IgYW4gYXJyYXkgb2Ygc3RyaW5ncy5cblxuICAgICAgICAgICAgc3BhY2UgICAgICAgYW4gb3B0aW9uYWwgcGFyYW1ldGVyIHRoYXQgc3BlY2lmaWVzIHRoZSBpbmRlbnRhdGlvblxuICAgICAgICAgICAgICAgICAgICAgICAgb2YgbmVzdGVkIHN0cnVjdHVyZXMuIElmIGl0IGlzIG9taXR0ZWQsIHRoZSB0ZXh0IHdpbGxcbiAgICAgICAgICAgICAgICAgICAgICAgIGJlIHBhY2tlZCB3aXRob3V0IGV4dHJhIHdoaXRlc3BhY2UuIElmIGl0IGlzIGEgbnVtYmVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgaXQgd2lsbCBzcGVjaWZ5IHRoZSBudW1iZXIgb2Ygc3BhY2VzIHRvIGluZGVudCBhdCBlYWNoXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXZlbC4gSWYgaXQgaXMgYSBzdHJpbmcgKHN1Y2ggYXMgJ1xcdCcgb3IgJyZuYnNwOycpLFxuICAgICAgICAgICAgICAgICAgICAgICAgaXQgY29udGFpbnMgdGhlIGNoYXJhY3RlcnMgdXNlZCB0byBpbmRlbnQgYXQgZWFjaCBsZXZlbC5cblxuICAgICAgICAgICAgVGhpcyBtZXRob2QgcHJvZHVjZXMgYSBKU09OIHRleHQgZnJvbSBhIEphdmFTY3JpcHQgdmFsdWUuXG5cbiAgICAgICAgICAgIFdoZW4gYW4gb2JqZWN0IHZhbHVlIGlzIGZvdW5kLCBpZiB0aGUgb2JqZWN0IGNvbnRhaW5zIGEgdG9KU09OXG4gICAgICAgICAgICBtZXRob2QsIGl0cyB0b0pTT04gbWV0aG9kIHdpbGwgYmUgY2FsbGVkIGFuZCB0aGUgcmVzdWx0IHdpbGwgYmVcbiAgICAgICAgICAgIHN0cmluZ2lmaWVkLiBBIHRvSlNPTiBtZXRob2QgZG9lcyBub3Qgc2VyaWFsaXplOiBpdCByZXR1cm5zIHRoZVxuICAgICAgICAgICAgdmFsdWUgcmVwcmVzZW50ZWQgYnkgdGhlIG5hbWUvdmFsdWUgcGFpciB0aGF0IHNob3VsZCBiZSBzZXJpYWxpemVkLFxuICAgICAgICAgICAgb3IgdW5kZWZpbmVkIGlmIG5vdGhpbmcgc2hvdWxkIGJlIHNlcmlhbGl6ZWQuIFRoZSB0b0pTT04gbWV0aG9kXG4gICAgICAgICAgICB3aWxsIGJlIHBhc3NlZCB0aGUga2V5IGFzc29jaWF0ZWQgd2l0aCB0aGUgdmFsdWUsIGFuZCB0aGlzIHdpbGwgYmVcbiAgICAgICAgICAgIGJvdW5kIHRvIHRoZSB2YWx1ZVxuXG4gICAgICAgICAgICBGb3IgZXhhbXBsZSwgdGhpcyB3b3VsZCBzZXJpYWxpemUgRGF0ZXMgYXMgSVNPIHN0cmluZ3MuXG5cbiAgICAgICAgICAgICAgICBEYXRlLnByb3RvdHlwZS50b0pTT04gPSBmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGYobikge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gRm9ybWF0IGludGVnZXJzIHRvIGhhdmUgYXQgbGVhc3QgdHdvIGRpZ2l0cy5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuIDwgMTAgPyAnMCcgKyBuIDogbjtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmdldFVUQ0Z1bGxZZWFyKCkgICArICctJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgZih0aGlzLmdldFVUQ01vbnRoKCkgKyAxKSArICctJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgZih0aGlzLmdldFVUQ0RhdGUoKSkgICAgICArICdUJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgZih0aGlzLmdldFVUQ0hvdXJzKCkpICAgICArICc6JyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgZih0aGlzLmdldFVUQ01pbnV0ZXMoKSkgICArICc6JyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgZih0aGlzLmdldFVUQ1NlY29uZHMoKSkgICArICdaJztcbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBZb3UgY2FuIHByb3ZpZGUgYW4gb3B0aW9uYWwgcmVwbGFjZXIgbWV0aG9kLiBJdCB3aWxsIGJlIHBhc3NlZCB0aGVcbiAgICAgICAgICAgIGtleSBhbmQgdmFsdWUgb2YgZWFjaCBtZW1iZXIsIHdpdGggdGhpcyBib3VuZCB0byB0aGUgY29udGFpbmluZ1xuICAgICAgICAgICAgb2JqZWN0LiBUaGUgdmFsdWUgdGhhdCBpcyByZXR1cm5lZCBmcm9tIHlvdXIgbWV0aG9kIHdpbGwgYmVcbiAgICAgICAgICAgIHNlcmlhbGl6ZWQuIElmIHlvdXIgbWV0aG9kIHJldHVybnMgdW5kZWZpbmVkLCB0aGVuIHRoZSBtZW1iZXIgd2lsbFxuICAgICAgICAgICAgYmUgZXhjbHVkZWQgZnJvbSB0aGUgc2VyaWFsaXphdGlvbi5cblxuICAgICAgICAgICAgSWYgdGhlIHJlcGxhY2VyIHBhcmFtZXRlciBpcyBhbiBhcnJheSBvZiBzdHJpbmdzLCB0aGVuIGl0IHdpbGwgYmVcbiAgICAgICAgICAgIHVzZWQgdG8gc2VsZWN0IHRoZSBtZW1iZXJzIHRvIGJlIHNlcmlhbGl6ZWQuIEl0IGZpbHRlcnMgdGhlIHJlc3VsdHNcbiAgICAgICAgICAgIHN1Y2ggdGhhdCBvbmx5IG1lbWJlcnMgd2l0aCBrZXlzIGxpc3RlZCBpbiB0aGUgcmVwbGFjZXIgYXJyYXkgYXJlXG4gICAgICAgICAgICBzdHJpbmdpZmllZC5cblxuICAgICAgICAgICAgVmFsdWVzIHRoYXQgZG8gbm90IGhhdmUgSlNPTiByZXByZXNlbnRhdGlvbnMsIHN1Y2ggYXMgdW5kZWZpbmVkIG9yXG4gICAgICAgICAgICBmdW5jdGlvbnMsIHdpbGwgbm90IGJlIHNlcmlhbGl6ZWQuIFN1Y2ggdmFsdWVzIGluIG9iamVjdHMgd2lsbCBiZVxuICAgICAgICAgICAgZHJvcHBlZDsgaW4gYXJyYXlzIHRoZXkgd2lsbCBiZSByZXBsYWNlZCB3aXRoIG51bGwuIFlvdSBjYW4gdXNlXG4gICAgICAgICAgICBhIHJlcGxhY2VyIGZ1bmN0aW9uIHRvIHJlcGxhY2UgdGhvc2Ugd2l0aCBKU09OIHZhbHVlcy5cbiAgICAgICAgICAgIEpTT04uc3RyaW5naWZ5KHVuZGVmaW5lZCkgcmV0dXJucyB1bmRlZmluZWQuXG5cbiAgICAgICAgICAgIFRoZSBvcHRpb25hbCBzcGFjZSBwYXJhbWV0ZXIgcHJvZHVjZXMgYSBzdHJpbmdpZmljYXRpb24gb2YgdGhlXG4gICAgICAgICAgICB2YWx1ZSB0aGF0IGlzIGZpbGxlZCB3aXRoIGxpbmUgYnJlYWtzIGFuZCBpbmRlbnRhdGlvbiB0byBtYWtlIGl0XG4gICAgICAgICAgICBlYXNpZXIgdG8gcmVhZC5cblxuICAgICAgICAgICAgSWYgdGhlIHNwYWNlIHBhcmFtZXRlciBpcyBhIG5vbi1lbXB0eSBzdHJpbmcsIHRoZW4gdGhhdCBzdHJpbmcgd2lsbFxuICAgICAgICAgICAgYmUgdXNlZCBmb3IgaW5kZW50YXRpb24uIElmIHRoZSBzcGFjZSBwYXJhbWV0ZXIgaXMgYSBudW1iZXIsIHRoZW5cbiAgICAgICAgICAgIHRoZSBpbmRlbnRhdGlvbiB3aWxsIGJlIHRoYXQgbWFueSBzcGFjZXMuXG5cbiAgICAgICAgICAgIEV4YW1wbGU6XG5cbiAgICAgICAgICAgIHRleHQgPSBKU09OLnN0cmluZ2lmeShbJ2UnLCB7cGx1cmlidXM6ICd1bnVtJ31dKTtcbiAgICAgICAgICAgIC8vIHRleHQgaXMgJ1tcImVcIix7XCJwbHVyaWJ1c1wiOlwidW51bVwifV0nXG5cblxuICAgICAgICAgICAgdGV4dCA9IEpTT04uc3RyaW5naWZ5KFsnZScsIHtwbHVyaWJ1czogJ3VudW0nfV0sIG51bGwsICdcXHQnKTtcbiAgICAgICAgICAgIC8vIHRleHQgaXMgJ1tcXG5cXHRcImVcIixcXG5cXHR7XFxuXFx0XFx0XCJwbHVyaWJ1c1wiOiBcInVudW1cIlxcblxcdH1cXG5dJ1xuXG4gICAgICAgICAgICB0ZXh0ID0gSlNPTi5zdHJpbmdpZnkoW25ldyBEYXRlKCldLCBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzW2tleV0gaW5zdGFuY2VvZiBEYXRlID9cbiAgICAgICAgICAgICAgICAgICAgJ0RhdGUoJyArIHRoaXNba2V5XSArICcpJyA6IHZhbHVlO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAvLyB0ZXh0IGlzICdbXCJEYXRlKC0tLWN1cnJlbnQgdGltZS0tLSlcIl0nXG5cblxuICAgICAgICBKU09OLnBhcnNlKHRleHQsIHJldml2ZXIpXG4gICAgICAgICAgICBUaGlzIG1ldGhvZCBwYXJzZXMgYSBKU09OIHRleHQgdG8gcHJvZHVjZSBhbiBvYmplY3Qgb3IgYXJyYXkuXG4gICAgICAgICAgICBJdCBjYW4gdGhyb3cgYSBTeW50YXhFcnJvciBleGNlcHRpb24uXG5cbiAgICAgICAgICAgIFRoZSBvcHRpb25hbCByZXZpdmVyIHBhcmFtZXRlciBpcyBhIGZ1bmN0aW9uIHRoYXQgY2FuIGZpbHRlciBhbmRcbiAgICAgICAgICAgIHRyYW5zZm9ybSB0aGUgcmVzdWx0cy4gSXQgcmVjZWl2ZXMgZWFjaCBvZiB0aGUga2V5cyBhbmQgdmFsdWVzLFxuICAgICAgICAgICAgYW5kIGl0cyByZXR1cm4gdmFsdWUgaXMgdXNlZCBpbnN0ZWFkIG9mIHRoZSBvcmlnaW5hbCB2YWx1ZS5cbiAgICAgICAgICAgIElmIGl0IHJldHVybnMgd2hhdCBpdCByZWNlaXZlZCwgdGhlbiB0aGUgc3RydWN0dXJlIGlzIG5vdCBtb2RpZmllZC5cbiAgICAgICAgICAgIElmIGl0IHJldHVybnMgdW5kZWZpbmVkIHRoZW4gdGhlIG1lbWJlciBpcyBkZWxldGVkLlxuXG4gICAgICAgICAgICBFeGFtcGxlOlxuXG4gICAgICAgICAgICAvLyBQYXJzZSB0aGUgdGV4dC4gVmFsdWVzIHRoYXQgbG9vayBsaWtlIElTTyBkYXRlIHN0cmluZ3Mgd2lsbFxuICAgICAgICAgICAgLy8gYmUgY29udmVydGVkIHRvIERhdGUgb2JqZWN0cy5cblxuICAgICAgICAgICAgbXlEYXRhID0gSlNPTi5wYXJzZSh0ZXh0LCBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkge1xuICAgICAgICAgICAgICAgIHZhciBhO1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgICAgIGEgPVxuL14oXFxkezR9KS0oXFxkezJ9KS0oXFxkezJ9KVQoXFxkezJ9KTooXFxkezJ9KTooXFxkezJ9KD86XFwuXFxkKik/KVokLy5leGVjKHZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgRGF0ZShEYXRlLlVUQygrYVsxXSwgK2FbMl0gLSAxLCArYVszXSwgK2FbNF0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgK2FbNV0sICthWzZdKSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIG15RGF0YSA9IEpTT04ucGFyc2UoJ1tcIkRhdGUoMDkvMDkvMjAwMSlcIl0nLCBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkge1xuICAgICAgICAgICAgICAgIHZhciBkO1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnICYmXG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZS5zbGljZSgwLCA1KSA9PT0gJ0RhdGUoJyAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUuc2xpY2UoLTEpID09PSAnKScpIHtcbiAgICAgICAgICAgICAgICAgICAgZCA9IG5ldyBEYXRlKHZhbHVlLnNsaWNlKDUsIC0xKSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgICAgICB9KTtcblxuXG4gICAgVGhpcyBpcyBhIHJlZmVyZW5jZSBpbXBsZW1lbnRhdGlvbi4gWW91IGFyZSBmcmVlIHRvIGNvcHksIG1vZGlmeSwgb3JcbiAgICByZWRpc3RyaWJ1dGUuXG4qL1xuXG4vKmpzbGludCBldmlsOiB0cnVlLCByZWdleHA6IHRydWUgKi9cblxuLyptZW1iZXJzIFwiXCIsIFwiXFxiXCIsIFwiXFx0XCIsIFwiXFxuXCIsIFwiXFxmXCIsIFwiXFxyXCIsIFwiXFxcIlwiLCBKU09OLCBcIlxcXFxcIiwgYXBwbHksXG4gICAgY2FsbCwgY2hhckNvZGVBdCwgZ2V0VVRDRGF0ZSwgZ2V0VVRDRnVsbFllYXIsIGdldFVUQ0hvdXJzLFxuICAgIGdldFVUQ01pbnV0ZXMsIGdldFVUQ01vbnRoLCBnZXRVVENTZWNvbmRzLCBoYXNPd25Qcm9wZXJ0eSwgam9pbixcbiAgICBsYXN0SW5kZXgsIGxlbmd0aCwgcGFyc2UsIHByb3RvdHlwZSwgcHVzaCwgcmVwbGFjZSwgc2xpY2UsIHN0cmluZ2lmeSxcbiAgICB0ZXN0LCB0b0pTT04sIHRvU3RyaW5nLCB2YWx1ZU9mXG4qL1xuXG5cbi8vIENyZWF0ZSBhIEpTT04gb2JqZWN0IG9ubHkgaWYgb25lIGRvZXMgbm90IGFscmVhZHkgZXhpc3QuIFdlIGNyZWF0ZSB0aGVcbi8vIG1ldGhvZHMgaW4gYSBjbG9zdXJlIHRvIGF2b2lkIGNyZWF0aW5nIGdsb2JhbCB2YXJpYWJsZXMuXG5cbnZhciBKU09OID0gbW9kdWxlLmV4cG9ydHM7XG5cbihmdW5jdGlvbiAoKSB7XG4gICAgJ3VzZSBzdHJpY3QnO1xuXG4gICAgZnVuY3Rpb24gZihuKSB7XG4gICAgICAgIC8vIEZvcm1hdCBpbnRlZ2VycyB0byBoYXZlIGF0IGxlYXN0IHR3byBkaWdpdHMuXG4gICAgICAgIHJldHVybiBuIDwgMTAgPyAnMCcgKyBuIDogbjtcbiAgICB9XG5cbiAgICB2YXIgY3ggPSAvW1xcdTAwMDBcXHUwMGFkXFx1MDYwMC1cXHUwNjA0XFx1MDcwZlxcdTE3YjRcXHUxN2I1XFx1MjAwYy1cXHUyMDBmXFx1MjAyOC1cXHUyMDJmXFx1MjA2MC1cXHUyMDZmXFx1ZmVmZlxcdWZmZjAtXFx1ZmZmZl0vZyxcbiAgICAgICAgZXNjYXBhYmxlID0gL1tcXFxcXFxcIlxceDAwLVxceDFmXFx4N2YtXFx4OWZcXHUwMGFkXFx1MDYwMC1cXHUwNjA0XFx1MDcwZlxcdTE3YjRcXHUxN2I1XFx1MjAwYy1cXHUyMDBmXFx1MjAyOC1cXHUyMDJmXFx1MjA2MC1cXHUyMDZmXFx1ZmVmZlxcdWZmZjAtXFx1ZmZmZl0vZyxcbiAgICAgICAgZ2FwLFxuICAgICAgICBpbmRlbnQsXG4gICAgICAgIG1ldGEgPSB7ICAgIC8vIHRhYmxlIG9mIGNoYXJhY3RlciBzdWJzdGl0dXRpb25zXG4gICAgICAgICAgICAnXFxiJzogJ1xcXFxiJyxcbiAgICAgICAgICAgICdcXHQnOiAnXFxcXHQnLFxuICAgICAgICAgICAgJ1xcbic6ICdcXFxcbicsXG4gICAgICAgICAgICAnXFxmJzogJ1xcXFxmJyxcbiAgICAgICAgICAgICdcXHInOiAnXFxcXHInLFxuICAgICAgICAgICAgJ1wiJyA6ICdcXFxcXCInLFxuICAgICAgICAgICAgJ1xcXFwnOiAnXFxcXFxcXFwnXG4gICAgICAgIH0sXG4gICAgICAgIHJlcDtcblxuXG4gICAgZnVuY3Rpb24gcXVvdGUoc3RyaW5nKSB7XG5cbi8vIElmIHRoZSBzdHJpbmcgY29udGFpbnMgbm8gY29udHJvbCBjaGFyYWN0ZXJzLCBubyBxdW90ZSBjaGFyYWN0ZXJzLCBhbmQgbm9cbi8vIGJhY2tzbGFzaCBjaGFyYWN0ZXJzLCB0aGVuIHdlIGNhbiBzYWZlbHkgc2xhcCBzb21lIHF1b3RlcyBhcm91bmQgaXQuXG4vLyBPdGhlcndpc2Ugd2UgbXVzdCBhbHNvIHJlcGxhY2UgdGhlIG9mZmVuZGluZyBjaGFyYWN0ZXJzIHdpdGggc2FmZSBlc2NhcGVcbi8vIHNlcXVlbmNlcy5cblxuICAgICAgICBlc2NhcGFibGUubGFzdEluZGV4ID0gMDtcbiAgICAgICAgcmV0dXJuIGVzY2FwYWJsZS50ZXN0KHN0cmluZykgPyAnXCInICsgc3RyaW5nLnJlcGxhY2UoZXNjYXBhYmxlLCBmdW5jdGlvbiAoYSkge1xuICAgICAgICAgICAgdmFyIGMgPSBtZXRhW2FdO1xuICAgICAgICAgICAgcmV0dXJuIHR5cGVvZiBjID09PSAnc3RyaW5nJ1xuICAgICAgICAgICAgICAgID8gY1xuICAgICAgICAgICAgICAgIDogJ1xcXFx1JyArICgnMDAwMCcgKyBhLmNoYXJDb2RlQXQoMCkudG9TdHJpbmcoMTYpKS5zbGljZSgtNCk7XG4gICAgICAgIH0pICsgJ1wiJyA6ICdcIicgKyBzdHJpbmcgKyAnXCInO1xuICAgIH1cblxuXG4gICAgZnVuY3Rpb24gc3RyKGtleSwgaG9sZGVyKSB7XG5cbi8vIFByb2R1Y2UgYSBzdHJpbmcgZnJvbSBob2xkZXJba2V5XS5cblxuICAgICAgICB2YXIgaSwgICAgICAgICAgLy8gVGhlIGxvb3AgY291bnRlci5cbiAgICAgICAgICAgIGssICAgICAgICAgIC8vIFRoZSBtZW1iZXIga2V5LlxuICAgICAgICAgICAgdiwgICAgICAgICAgLy8gVGhlIG1lbWJlciB2YWx1ZS5cbiAgICAgICAgICAgIGxlbmd0aCxcbiAgICAgICAgICAgIG1pbmQgPSBnYXAsXG4gICAgICAgICAgICBwYXJ0aWFsLFxuICAgICAgICAgICAgdmFsdWUgPSBob2xkZXJba2V5XSxcbiAgICAgICAgICAgIGlzQmlnTnVtYmVyID0gdmFsdWUgIT0gbnVsbCAmJiAodmFsdWUgaW5zdGFuY2VvZiBCaWdOdW1iZXIgfHwgQmlnTnVtYmVyLmlzQmlnTnVtYmVyKHZhbHVlKSk7XG5cbi8vIElmIHRoZSB2YWx1ZSBoYXMgYSB0b0pTT04gbWV0aG9kLCBjYWxsIGl0IHRvIG9idGFpbiBhIHJlcGxhY2VtZW50IHZhbHVlLlxuXG4gICAgICAgIGlmICh2YWx1ZSAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmXG4gICAgICAgICAgICAgICAgdHlwZW9mIHZhbHVlLnRvSlNPTiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZS50b0pTT04oa2V5KTtcbiAgICAgICAgfVxuXG4vLyBJZiB3ZSB3ZXJlIGNhbGxlZCB3aXRoIGEgcmVwbGFjZXIgZnVuY3Rpb24sIHRoZW4gY2FsbCB0aGUgcmVwbGFjZXIgdG9cbi8vIG9idGFpbiBhIHJlcGxhY2VtZW50IHZhbHVlLlxuXG4gICAgICAgIGlmICh0eXBlb2YgcmVwID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICB2YWx1ZSA9IHJlcC5jYWxsKGhvbGRlciwga2V5LCB2YWx1ZSk7XG4gICAgICAgIH1cblxuLy8gV2hhdCBoYXBwZW5zIG5leHQgZGVwZW5kcyBvbiB0aGUgdmFsdWUncyB0eXBlLlxuXG4gICAgICAgIHN3aXRjaCAodHlwZW9mIHZhbHVlKSB7XG4gICAgICAgIGNhc2UgJ3N0cmluZyc6XG4gICAgICAgICAgICBpZiAoaXNCaWdOdW1iZXIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiBxdW90ZSh2YWx1ZSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgY2FzZSAnbnVtYmVyJzpcblxuLy8gSlNPTiBudW1iZXJzIG11c3QgYmUgZmluaXRlLiBFbmNvZGUgbm9uLWZpbml0ZSBudW1iZXJzIGFzIG51bGwuXG5cbiAgICAgICAgICAgIHJldHVybiBpc0Zpbml0ZSh2YWx1ZSkgPyBTdHJpbmcodmFsdWUpIDogJ251bGwnO1xuXG4gICAgICAgIGNhc2UgJ2Jvb2xlYW4nOlxuICAgICAgICBjYXNlICdudWxsJzpcbiAgICAgICAgY2FzZSAnYmlnaW50JzpcblxuLy8gSWYgdGhlIHZhbHVlIGlzIGEgYm9vbGVhbiBvciBudWxsLCBjb252ZXJ0IGl0IHRvIGEgc3RyaW5nLiBOb3RlOlxuLy8gdHlwZW9mIG51bGwgZG9lcyBub3QgcHJvZHVjZSAnbnVsbCcuIFRoZSBjYXNlIGlzIGluY2x1ZGVkIGhlcmUgaW5cbi8vIHRoZSByZW1vdGUgY2hhbmNlIHRoYXQgdGhpcyBnZXRzIGZpeGVkIHNvbWVkYXkuXG5cbiAgICAgICAgICAgIHJldHVybiBTdHJpbmcodmFsdWUpO1xuXG4vLyBJZiB0aGUgdHlwZSBpcyAnb2JqZWN0Jywgd2UgbWlnaHQgYmUgZGVhbGluZyB3aXRoIGFuIG9iamVjdCBvciBhbiBhcnJheSBvclxuLy8gbnVsbC5cblxuICAgICAgICBjYXNlICdvYmplY3QnOlxuXG4vLyBEdWUgdG8gYSBzcGVjaWZpY2F0aW9uIGJsdW5kZXIgaW4gRUNNQVNjcmlwdCwgdHlwZW9mIG51bGwgaXMgJ29iamVjdCcsXG4vLyBzbyB3YXRjaCBvdXQgZm9yIHRoYXQgY2FzZS5cblxuICAgICAgICAgICAgaWYgKCF2YWx1ZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiAnbnVsbCc7XG4gICAgICAgICAgICB9XG5cbi8vIE1ha2UgYW4gYXJyYXkgdG8gaG9sZCB0aGUgcGFydGlhbCByZXN1bHRzIG9mIHN0cmluZ2lmeWluZyB0aGlzIG9iamVjdCB2YWx1ZS5cblxuICAgICAgICAgICAgZ2FwICs9IGluZGVudDtcbiAgICAgICAgICAgIHBhcnRpYWwgPSBbXTtcblxuLy8gSXMgdGhlIHZhbHVlIGFuIGFycmF5P1xuXG4gICAgICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5hcHBseSh2YWx1ZSkgPT09ICdbb2JqZWN0IEFycmF5XScpIHtcblxuLy8gVGhlIHZhbHVlIGlzIGFuIGFycmF5LiBTdHJpbmdpZnkgZXZlcnkgZWxlbWVudC4gVXNlIG51bGwgYXMgYSBwbGFjZWhvbGRlclxuLy8gZm9yIG5vbi1KU09OIHZhbHVlcy5cblxuICAgICAgICAgICAgICAgIGxlbmd0aCA9IHZhbHVlLmxlbmd0aDtcbiAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbGVuZ3RoOyBpICs9IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgcGFydGlhbFtpXSA9IHN0cihpLCB2YWx1ZSkgfHwgJ251bGwnO1xuICAgICAgICAgICAgICAgIH1cblxuLy8gSm9pbiBhbGwgb2YgdGhlIGVsZW1lbnRzIHRvZ2V0aGVyLCBzZXBhcmF0ZWQgd2l0aCBjb21tYXMsIGFuZCB3cmFwIHRoZW0gaW5cbi8vIGJyYWNrZXRzLlxuXG4gICAgICAgICAgICAgICAgdiA9IHBhcnRpYWwubGVuZ3RoID09PSAwXG4gICAgICAgICAgICAgICAgICAgID8gJ1tdJ1xuICAgICAgICAgICAgICAgICAgICA6IGdhcFxuICAgICAgICAgICAgICAgICAgICA/ICdbXFxuJyArIGdhcCArIHBhcnRpYWwuam9pbignLFxcbicgKyBnYXApICsgJ1xcbicgKyBtaW5kICsgJ10nXG4gICAgICAgICAgICAgICAgICAgIDogJ1snICsgcGFydGlhbC5qb2luKCcsJykgKyAnXSc7XG4gICAgICAgICAgICAgICAgZ2FwID0gbWluZDtcbiAgICAgICAgICAgICAgICByZXR1cm4gdjtcbiAgICAgICAgICAgIH1cblxuLy8gSWYgdGhlIHJlcGxhY2VyIGlzIGFuIGFycmF5LCB1c2UgaXQgdG8gc2VsZWN0IHRoZSBtZW1iZXJzIHRvIGJlIHN0cmluZ2lmaWVkLlxuXG4gICAgICAgICAgICBpZiAocmVwICYmIHR5cGVvZiByZXAgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICAgICAgbGVuZ3RoID0gcmVwLmxlbmd0aDtcbiAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbGVuZ3RoOyBpICs9IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiByZXBbaV0gPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBrID0gcmVwW2ldO1xuICAgICAgICAgICAgICAgICAgICAgICAgdiA9IHN0cihrLCB2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnRpYWwucHVzaChxdW90ZShrKSArIChnYXAgPyAnOiAnIDogJzonKSArIHYpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcblxuLy8gT3RoZXJ3aXNlLCBpdGVyYXRlIHRocm91Z2ggYWxsIG9mIHRoZSBrZXlzIGluIHRoZSBvYmplY3QuXG5cbiAgICAgICAgICAgICAgICBPYmplY3Qua2V5cyh2YWx1ZSkuZm9yRWFjaChmdW5jdGlvbihrKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciB2ID0gc3RyKGssIHZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHYpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcnRpYWwucHVzaChxdW90ZShrKSArIChnYXAgPyAnOiAnIDogJzonKSArIHYpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG5cbi8vIEpvaW4gYWxsIG9mIHRoZSBtZW1iZXIgdGV4dHMgdG9nZXRoZXIsIHNlcGFyYXRlZCB3aXRoIGNvbW1hcyxcbi8vIGFuZCB3cmFwIHRoZW0gaW4gYnJhY2VzLlxuXG4gICAgICAgICAgICB2ID0gcGFydGlhbC5sZW5ndGggPT09IDBcbiAgICAgICAgICAgICAgICA/ICd7fSdcbiAgICAgICAgICAgICAgICA6IGdhcFxuICAgICAgICAgICAgICAgID8gJ3tcXG4nICsgZ2FwICsgcGFydGlhbC5qb2luKCcsXFxuJyArIGdhcCkgKyAnXFxuJyArIG1pbmQgKyAnfSdcbiAgICAgICAgICAgICAgICA6ICd7JyArIHBhcnRpYWwuam9pbignLCcpICsgJ30nO1xuICAgICAgICAgICAgZ2FwID0gbWluZDtcbiAgICAgICAgICAgIHJldHVybiB2O1xuICAgICAgICB9XG4gICAgfVxuXG4vLyBJZiB0aGUgSlNPTiBvYmplY3QgZG9lcyBub3QgeWV0IGhhdmUgYSBzdHJpbmdpZnkgbWV0aG9kLCBnaXZlIGl0IG9uZS5cblxuICAgIGlmICh0eXBlb2YgSlNPTi5zdHJpbmdpZnkgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgSlNPTi5zdHJpbmdpZnkgPSBmdW5jdGlvbiAodmFsdWUsIHJlcGxhY2VyLCBzcGFjZSkge1xuXG4vLyBUaGUgc3RyaW5naWZ5IG1ldGhvZCB0YWtlcyBhIHZhbHVlIGFuZCBhbiBvcHRpb25hbCByZXBsYWNlciwgYW5kIGFuIG9wdGlvbmFsXG4vLyBzcGFjZSBwYXJhbWV0ZXIsIGFuZCByZXR1cm5zIGEgSlNPTiB0ZXh0LiBUaGUgcmVwbGFjZXIgY2FuIGJlIGEgZnVuY3Rpb25cbi8vIHRoYXQgY2FuIHJlcGxhY2UgdmFsdWVzLCBvciBhbiBhcnJheSBvZiBzdHJpbmdzIHRoYXQgd2lsbCBzZWxlY3QgdGhlIGtleXMuXG4vLyBBIGRlZmF1bHQgcmVwbGFjZXIgbWV0aG9kIGNhbiBiZSBwcm92aWRlZC4gVXNlIG9mIHRoZSBzcGFjZSBwYXJhbWV0ZXIgY2FuXG4vLyBwcm9kdWNlIHRleHQgdGhhdCBpcyBtb3JlIGVhc2lseSByZWFkYWJsZS5cblxuICAgICAgICAgICAgdmFyIGk7XG4gICAgICAgICAgICBnYXAgPSAnJztcbiAgICAgICAgICAgIGluZGVudCA9ICcnO1xuXG4vLyBJZiB0aGUgc3BhY2UgcGFyYW1ldGVyIGlzIGEgbnVtYmVyLCBtYWtlIGFuIGluZGVudCBzdHJpbmcgY29udGFpbmluZyB0aGF0XG4vLyBtYW55IHNwYWNlcy5cblxuICAgICAgICAgICAgaWYgKHR5cGVvZiBzcGFjZSA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgc3BhY2U7IGkgKz0gMSkge1xuICAgICAgICAgICAgICAgICAgICBpbmRlbnQgKz0gJyAnO1xuICAgICAgICAgICAgICAgIH1cblxuLy8gSWYgdGhlIHNwYWNlIHBhcmFtZXRlciBpcyBhIHN0cmluZywgaXQgd2lsbCBiZSB1c2VkIGFzIHRoZSBpbmRlbnQgc3RyaW5nLlxuXG4gICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBzcGFjZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICBpbmRlbnQgPSBzcGFjZTtcbiAgICAgICAgICAgIH1cblxuLy8gSWYgdGhlcmUgaXMgYSByZXBsYWNlciwgaXQgbXVzdCBiZSBhIGZ1bmN0aW9uIG9yIGFuIGFycmF5LlxuLy8gT3RoZXJ3aXNlLCB0aHJvdyBhbiBlcnJvci5cblxuICAgICAgICAgICAgcmVwID0gcmVwbGFjZXI7XG4gICAgICAgICAgICBpZiAocmVwbGFjZXIgJiYgdHlwZW9mIHJlcGxhY2VyICE9PSAnZnVuY3Rpb24nICYmXG4gICAgICAgICAgICAgICAgICAgICh0eXBlb2YgcmVwbGFjZXIgIT09ICdvYmplY3QnIHx8XG4gICAgICAgICAgICAgICAgICAgIHR5cGVvZiByZXBsYWNlci5sZW5ndGggIT09ICdudW1iZXInKSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignSlNPTi5zdHJpbmdpZnknKTtcbiAgICAgICAgICAgIH1cblxuLy8gTWFrZSBhIGZha2Ugcm9vdCBvYmplY3QgY29udGFpbmluZyBvdXIgdmFsdWUgdW5kZXIgdGhlIGtleSBvZiAnJy5cbi8vIFJldHVybiB0aGUgcmVzdWx0IG9mIHN0cmluZ2lmeWluZyB0aGUgdmFsdWUuXG5cbiAgICAgICAgICAgIHJldHVybiBzdHIoJycsIHsnJzogdmFsdWV9KTtcbiAgICAgICAgfTtcbiAgICB9XG59KCkpO1xuIiwiLyohXG4gKiBtaW1lLWRiXG4gKiBDb3B5cmlnaHQoYykgMjAxNCBKb25hdGhhbiBPbmdcbiAqIENvcHlyaWdodChjKSAyMDE1LTIwMjIgRG91Z2xhcyBDaHJpc3RvcGhlciBXaWxzb25cbiAqIE1JVCBMaWNlbnNlZFxuICovXG5cbi8qKlxuICogTW9kdWxlIGV4cG9ydHMuXG4gKi9cblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2RiLmpzb24nKVxuIiwiLyohXG4gKiBtaW1lLXR5cGVzXG4gKiBDb3B5cmlnaHQoYykgMjAxNCBKb25hdGhhbiBPbmdcbiAqIENvcHlyaWdodChjKSAyMDE1IERvdWdsYXMgQ2hyaXN0b3BoZXIgV2lsc29uXG4gKiBNSVQgTGljZW5zZWRcbiAqL1xuXG4ndXNlIHN0cmljdCdcblxuLyoqXG4gKiBNb2R1bGUgZGVwZW5kZW5jaWVzLlxuICogQHByaXZhdGVcbiAqL1xuXG52YXIgZGIgPSByZXF1aXJlKCdtaW1lLWRiJylcbnZhciBleHRuYW1lID0gcmVxdWlyZSgncGF0aCcpLmV4dG5hbWVcblxuLyoqXG4gKiBNb2R1bGUgdmFyaWFibGVzLlxuICogQHByaXZhdGVcbiAqL1xuXG52YXIgRVhUUkFDVF9UWVBFX1JFR0VYUCA9IC9eXFxzKihbXjtcXHNdKikoPzo7fFxcc3wkKS9cbnZhciBURVhUX1RZUEVfUkVHRVhQID0gL150ZXh0XFwvL2lcblxuLyoqXG4gKiBNb2R1bGUgZXhwb3J0cy5cbiAqIEBwdWJsaWNcbiAqL1xuXG5leHBvcnRzLmNoYXJzZXQgPSBjaGFyc2V0XG5leHBvcnRzLmNoYXJzZXRzID0geyBsb29rdXA6IGNoYXJzZXQgfVxuZXhwb3J0cy5jb250ZW50VHlwZSA9IGNvbnRlbnRUeXBlXG5leHBvcnRzLmV4dGVuc2lvbiA9IGV4dGVuc2lvblxuZXhwb3J0cy5leHRlbnNpb25zID0gT2JqZWN0LmNyZWF0ZShudWxsKVxuZXhwb3J0cy5sb29rdXAgPSBsb29rdXBcbmV4cG9ydHMudHlwZXMgPSBPYmplY3QuY3JlYXRlKG51bGwpXG5cbi8vIFBvcHVsYXRlIHRoZSBleHRlbnNpb25zL3R5cGVzIG1hcHNcbnBvcHVsYXRlTWFwcyhleHBvcnRzLmV4dGVuc2lvbnMsIGV4cG9ydHMudHlwZXMpXG5cbi8qKlxuICogR2V0IHRoZSBkZWZhdWx0IGNoYXJzZXQgZm9yIGEgTUlNRSB0eXBlLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSB0eXBlXG4gKiBAcmV0dXJuIHtib29sZWFufHN0cmluZ31cbiAqL1xuXG5mdW5jdGlvbiBjaGFyc2V0ICh0eXBlKSB7XG4gIGlmICghdHlwZSB8fCB0eXBlb2YgdHlwZSAhPT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIC8vIFRPRE86IHVzZSBtZWRpYS10eXBlclxuICB2YXIgbWF0Y2ggPSBFWFRSQUNUX1RZUEVfUkVHRVhQLmV4ZWModHlwZSlcbiAgdmFyIG1pbWUgPSBtYXRjaCAmJiBkYlttYXRjaFsxXS50b0xvd2VyQ2FzZSgpXVxuXG4gIGlmIChtaW1lICYmIG1pbWUuY2hhcnNldCkge1xuICAgIHJldHVybiBtaW1lLmNoYXJzZXRcbiAgfVxuXG4gIC8vIGRlZmF1bHQgdGV4dC8qIHRvIHV0Zi04XG4gIGlmIChtYXRjaCAmJiBURVhUX1RZUEVfUkVHRVhQLnRlc3QobWF0Y2hbMV0pKSB7XG4gICAgcmV0dXJuICdVVEYtOCdcbiAgfVxuXG4gIHJldHVybiBmYWxzZVxufVxuXG4vKipcbiAqIENyZWF0ZSBhIGZ1bGwgQ29udGVudC1UeXBlIGhlYWRlciBnaXZlbiBhIE1JTUUgdHlwZSBvciBleHRlbnNpb24uXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHN0clxuICogQHJldHVybiB7Ym9vbGVhbnxzdHJpbmd9XG4gKi9cblxuZnVuY3Rpb24gY29udGVudFR5cGUgKHN0cikge1xuICAvLyBUT0RPOiBzaG91bGQgdGhpcyBldmVuIGJlIGluIHRoaXMgbW9kdWxlP1xuICBpZiAoIXN0ciB8fCB0eXBlb2Ygc3RyICE9PSAnc3RyaW5nJykge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgdmFyIG1pbWUgPSBzdHIuaW5kZXhPZignLycpID09PSAtMVxuICAgID8gZXhwb3J0cy5sb29rdXAoc3RyKVxuICAgIDogc3RyXG5cbiAgaWYgKCFtaW1lKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICAvLyBUT0RPOiB1c2UgY29udGVudC10eXBlIG9yIG90aGVyIG1vZHVsZVxuICBpZiAobWltZS5pbmRleE9mKCdjaGFyc2V0JykgPT09IC0xKSB7XG4gICAgdmFyIGNoYXJzZXQgPSBleHBvcnRzLmNoYXJzZXQobWltZSlcbiAgICBpZiAoY2hhcnNldCkgbWltZSArPSAnOyBjaGFyc2V0PScgKyBjaGFyc2V0LnRvTG93ZXJDYXNlKClcbiAgfVxuXG4gIHJldHVybiBtaW1lXG59XG5cbi8qKlxuICogR2V0IHRoZSBkZWZhdWx0IGV4dGVuc2lvbiBmb3IgYSBNSU1FIHR5cGUuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHR5cGVcbiAqIEByZXR1cm4ge2Jvb2xlYW58c3RyaW5nfVxuICovXG5cbmZ1bmN0aW9uIGV4dGVuc2lvbiAodHlwZSkge1xuICBpZiAoIXR5cGUgfHwgdHlwZW9mIHR5cGUgIT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICAvLyBUT0RPOiB1c2UgbWVkaWEtdHlwZXJcbiAgdmFyIG1hdGNoID0gRVhUUkFDVF9UWVBFX1JFR0VYUC5leGVjKHR5cGUpXG5cbiAgLy8gZ2V0IGV4dGVuc2lvbnNcbiAgdmFyIGV4dHMgPSBtYXRjaCAmJiBleHBvcnRzLmV4dGVuc2lvbnNbbWF0Y2hbMV0udG9Mb3dlckNhc2UoKV1cblxuICBpZiAoIWV4dHMgfHwgIWV4dHMubGVuZ3RoKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICByZXR1cm4gZXh0c1swXVxufVxuXG4vKipcbiAqIExvb2t1cCB0aGUgTUlNRSB0eXBlIGZvciBhIGZpbGUgcGF0aC9leHRlbnNpb24uXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHBhdGhcbiAqIEByZXR1cm4ge2Jvb2xlYW58c3RyaW5nfVxuICovXG5cbmZ1bmN0aW9uIGxvb2t1cCAocGF0aCkge1xuICBpZiAoIXBhdGggfHwgdHlwZW9mIHBhdGggIT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICAvLyBnZXQgdGhlIGV4dGVuc2lvbiAoXCJleHRcIiBvciBcIi5leHRcIiBvciBmdWxsIHBhdGgpXG4gIHZhciBleHRlbnNpb24gPSBleHRuYW1lKCd4LicgKyBwYXRoKVxuICAgIC50b0xvd2VyQ2FzZSgpXG4gICAgLnN1YnN0cigxKVxuXG4gIGlmICghZXh0ZW5zaW9uKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICByZXR1cm4gZXhwb3J0cy50eXBlc1tleHRlbnNpb25dIHx8IGZhbHNlXG59XG5cbi8qKlxuICogUG9wdWxhdGUgdGhlIGV4dGVuc2lvbnMgYW5kIHR5cGVzIG1hcHMuXG4gKiBAcHJpdmF0ZVxuICovXG5cbmZ1bmN0aW9uIHBvcHVsYXRlTWFwcyAoZXh0ZW5zaW9ucywgdHlwZXMpIHtcbiAgLy8gc291cmNlIHByZWZlcmVuY2UgKGxlYXN0IC0+IG1vc3QpXG4gIHZhciBwcmVmZXJlbmNlID0gWyduZ2lueCcsICdhcGFjaGUnLCB1bmRlZmluZWQsICdpYW5hJ11cblxuICBPYmplY3Qua2V5cyhkYikuZm9yRWFjaChmdW5jdGlvbiBmb3JFYWNoTWltZVR5cGUgKHR5cGUpIHtcbiAgICB2YXIgbWltZSA9IGRiW3R5cGVdXG4gICAgdmFyIGV4dHMgPSBtaW1lLmV4dGVuc2lvbnNcblxuICAgIGlmICghZXh0cyB8fCAhZXh0cy5sZW5ndGgpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIC8vIG1pbWUgLT4gZXh0ZW5zaW9uc1xuICAgIGV4dGVuc2lvbnNbdHlwZV0gPSBleHRzXG5cbiAgICAvLyBleHRlbnNpb24gLT4gbWltZVxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZXh0cy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGV4dGVuc2lvbiA9IGV4dHNbaV1cblxuICAgICAgaWYgKHR5cGVzW2V4dGVuc2lvbl0pIHtcbiAgICAgICAgdmFyIGZyb20gPSBwcmVmZXJlbmNlLmluZGV4T2YoZGJbdHlwZXNbZXh0ZW5zaW9uXV0uc291cmNlKVxuICAgICAgICB2YXIgdG8gPSBwcmVmZXJlbmNlLmluZGV4T2YobWltZS5zb3VyY2UpXG5cbiAgICAgICAgaWYgKHR5cGVzW2V4dGVuc2lvbl0gIT09ICdhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0nICYmXG4gICAgICAgICAgKGZyb20gPiB0byB8fCAoZnJvbSA9PT0gdG8gJiYgdHlwZXNbZXh0ZW5zaW9uXS5zdWJzdHIoMCwgMTIpID09PSAnYXBwbGljYXRpb24vJykpKSB7XG4gICAgICAgICAgLy8gc2tpcCB0aGUgcmVtYXBwaW5nXG4gICAgICAgICAgY29udGludWVcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBzZXQgdGhlIGV4dGVuc2lvbiAtPiBtaW1lXG4gICAgICB0eXBlc1tleHRlbnNpb25dID0gdHlwZVxuICAgIH1cbiAgfSlcbn1cbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIHBhcnNlVXJsID0gcmVxdWlyZSgndXJsJykucGFyc2U7XG5cbnZhciBERUZBVUxUX1BPUlRTID0ge1xuICBmdHA6IDIxLFxuICBnb3BoZXI6IDcwLFxuICBodHRwOiA4MCxcbiAgaHR0cHM6IDQ0MyxcbiAgd3M6IDgwLFxuICB3c3M6IDQ0Myxcbn07XG5cbnZhciBzdHJpbmdFbmRzV2l0aCA9IFN0cmluZy5wcm90b3R5cGUuZW5kc1dpdGggfHwgZnVuY3Rpb24ocykge1xuICByZXR1cm4gcy5sZW5ndGggPD0gdGhpcy5sZW5ndGggJiZcbiAgICB0aGlzLmluZGV4T2YocywgdGhpcy5sZW5ndGggLSBzLmxlbmd0aCkgIT09IC0xO1xufTtcblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ3xvYmplY3R9IHVybCAtIFRoZSBVUkwsIG9yIHRoZSByZXN1bHQgZnJvbSB1cmwucGFyc2UuXG4gKiBAcmV0dXJuIHtzdHJpbmd9IFRoZSBVUkwgb2YgdGhlIHByb3h5IHRoYXQgc2hvdWxkIGhhbmRsZSB0aGUgcmVxdWVzdCB0byB0aGVcbiAqICBnaXZlbiBVUkwuIElmIG5vIHByb3h5IGlzIHNldCwgdGhpcyB3aWxsIGJlIGFuIGVtcHR5IHN0cmluZy5cbiAqL1xuZnVuY3Rpb24gZ2V0UHJveHlGb3JVcmwodXJsKSB7XG4gIHZhciBwYXJzZWRVcmwgPSB0eXBlb2YgdXJsID09PSAnc3RyaW5nJyA/IHBhcnNlVXJsKHVybCkgOiB1cmwgfHwge307XG4gIHZhciBwcm90byA9IHBhcnNlZFVybC5wcm90b2NvbDtcbiAgdmFyIGhvc3RuYW1lID0gcGFyc2VkVXJsLmhvc3Q7XG4gIHZhciBwb3J0ID0gcGFyc2VkVXJsLnBvcnQ7XG4gIGlmICh0eXBlb2YgaG9zdG5hbWUgIT09ICdzdHJpbmcnIHx8ICFob3N0bmFtZSB8fCB0eXBlb2YgcHJvdG8gIT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuICcnOyAgLy8gRG9uJ3QgcHJveHkgVVJMcyB3aXRob3V0IGEgdmFsaWQgc2NoZW1lIG9yIGhvc3QuXG4gIH1cblxuICBwcm90byA9IHByb3RvLnNwbGl0KCc6JywgMSlbMF07XG4gIC8vIFN0cmlwcGluZyBwb3J0cyBpbiB0aGlzIHdheSBpbnN0ZWFkIG9mIHVzaW5nIHBhcnNlZFVybC5ob3N0bmFtZSB0byBtYWtlXG4gIC8vIHN1cmUgdGhhdCB0aGUgYnJhY2tldHMgYXJvdW5kIElQdjYgYWRkcmVzc2VzIGFyZSBrZXB0LlxuICBob3N0bmFtZSA9IGhvc3RuYW1lLnJlcGxhY2UoLzpcXGQqJC8sICcnKTtcbiAgcG9ydCA9IHBhcnNlSW50KHBvcnQpIHx8IERFRkFVTFRfUE9SVFNbcHJvdG9dIHx8IDA7XG4gIGlmICghc2hvdWxkUHJveHkoaG9zdG5hbWUsIHBvcnQpKSB7XG4gICAgcmV0dXJuICcnOyAgLy8gRG9uJ3QgcHJveHkgVVJMcyB0aGF0IG1hdGNoIE5PX1BST1hZLlxuICB9XG5cbiAgdmFyIHByb3h5ID1cbiAgICBnZXRFbnYoJ25wbV9jb25maWdfJyArIHByb3RvICsgJ19wcm94eScpIHx8XG4gICAgZ2V0RW52KHByb3RvICsgJ19wcm94eScpIHx8XG4gICAgZ2V0RW52KCducG1fY29uZmlnX3Byb3h5JykgfHxcbiAgICBnZXRFbnYoJ2FsbF9wcm94eScpO1xuICBpZiAocHJveHkgJiYgcHJveHkuaW5kZXhPZignOi8vJykgPT09IC0xKSB7XG4gICAgLy8gTWlzc2luZyBzY2hlbWUgaW4gcHJveHksIGRlZmF1bHQgdG8gdGhlIHJlcXVlc3RlZCBVUkwncyBzY2hlbWUuXG4gICAgcHJveHkgPSBwcm90byArICc6Ly8nICsgcHJveHk7XG4gIH1cbiAgcmV0dXJuIHByb3h5O1xufVxuXG4vKipcbiAqIERldGVybWluZXMgd2hldGhlciBhIGdpdmVuIFVSTCBzaG91bGQgYmUgcHJveGllZC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gaG9zdG5hbWUgLSBUaGUgaG9zdCBuYW1lIG9mIHRoZSBVUkwuXG4gKiBAcGFyYW0ge251bWJlcn0gcG9ydCAtIFRoZSBlZmZlY3RpdmUgcG9ydCBvZiB0aGUgVVJMLlxuICogQHJldHVybnMge2Jvb2xlYW59IFdoZXRoZXIgdGhlIGdpdmVuIFVSTCBzaG91bGQgYmUgcHJveGllZC5cbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIHNob3VsZFByb3h5KGhvc3RuYW1lLCBwb3J0KSB7XG4gIHZhciBOT19QUk9YWSA9XG4gICAgKGdldEVudignbnBtX2NvbmZpZ19ub19wcm94eScpIHx8IGdldEVudignbm9fcHJveHknKSkudG9Mb3dlckNhc2UoKTtcbiAgaWYgKCFOT19QUk9YWSkge1xuICAgIHJldHVybiB0cnVlOyAgLy8gQWx3YXlzIHByb3h5IGlmIE5PX1BST1hZIGlzIG5vdCBzZXQuXG4gIH1cbiAgaWYgKE5PX1BST1hZID09PSAnKicpIHtcbiAgICByZXR1cm4gZmFsc2U7ICAvLyBOZXZlciBwcm94eSBpZiB3aWxkY2FyZCBpcyBzZXQuXG4gIH1cblxuICByZXR1cm4gTk9fUFJPWFkuc3BsaXQoL1ssXFxzXS8pLmV2ZXJ5KGZ1bmN0aW9uKHByb3h5KSB7XG4gICAgaWYgKCFwcm94eSkge1xuICAgICAgcmV0dXJuIHRydWU7ICAvLyBTa2lwIHplcm8tbGVuZ3RoIGhvc3RzLlxuICAgIH1cbiAgICB2YXIgcGFyc2VkUHJveHkgPSBwcm94eS5tYXRjaCgvXiguKyk6KFxcZCspJC8pO1xuICAgIHZhciBwYXJzZWRQcm94eUhvc3RuYW1lID0gcGFyc2VkUHJveHkgPyBwYXJzZWRQcm94eVsxXSA6IHByb3h5O1xuICAgIHZhciBwYXJzZWRQcm94eVBvcnQgPSBwYXJzZWRQcm94eSA/IHBhcnNlSW50KHBhcnNlZFByb3h5WzJdKSA6IDA7XG4gICAgaWYgKHBhcnNlZFByb3h5UG9ydCAmJiBwYXJzZWRQcm94eVBvcnQgIT09IHBvcnQpIHtcbiAgICAgIHJldHVybiB0cnVlOyAgLy8gU2tpcCBpZiBwb3J0cyBkb24ndCBtYXRjaC5cbiAgICB9XG5cbiAgICBpZiAoIS9eWy4qXS8udGVzdChwYXJzZWRQcm94eUhvc3RuYW1lKSkge1xuICAgICAgLy8gTm8gd2lsZGNhcmRzLCBzbyBzdG9wIHByb3h5aW5nIGlmIHRoZXJlIGlzIGFuIGV4YWN0IG1hdGNoLlxuICAgICAgcmV0dXJuIGhvc3RuYW1lICE9PSBwYXJzZWRQcm94eUhvc3RuYW1lO1xuICAgIH1cblxuICAgIGlmIChwYXJzZWRQcm94eUhvc3RuYW1lLmNoYXJBdCgwKSA9PT0gJyonKSB7XG4gICAgICAvLyBSZW1vdmUgbGVhZGluZyB3aWxkY2FyZC5cbiAgICAgIHBhcnNlZFByb3h5SG9zdG5hbWUgPSBwYXJzZWRQcm94eUhvc3RuYW1lLnNsaWNlKDEpO1xuICAgIH1cbiAgICAvLyBTdG9wIHByb3h5aW5nIGlmIHRoZSBob3N0bmFtZSBlbmRzIHdpdGggdGhlIG5vX3Byb3h5IGhvc3QuXG4gICAgcmV0dXJuICFzdHJpbmdFbmRzV2l0aC5jYWxsKGhvc3RuYW1lLCBwYXJzZWRQcm94eUhvc3RuYW1lKTtcbiAgfSk7XG59XG5cbi8qKlxuICogR2V0IHRoZSB2YWx1ZSBmb3IgYW4gZW52aXJvbm1lbnQgdmFyaWFibGUuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGtleSAtIFRoZSBuYW1lIG9mIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZS5cbiAqIEByZXR1cm4ge3N0cmluZ30gVGhlIHZhbHVlIG9mIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZS5cbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIGdldEVudihrZXkpIHtcbiAgcmV0dXJuIHByb2Nlc3MuZW52W2tleS50b0xvd2VyQ2FzZSgpXSB8fCBwcm9jZXNzLmVudltrZXkudG9VcHBlckNhc2UoKV0gfHwgJyc7XG59XG5cbmV4cG9ydHMuZ2V0UHJveHlGb3JVcmwgPSBnZXRQcm94eUZvclVybDtcbiIsIid1c2Ugc3RyaWN0JztcbmNvbnN0IG9zID0gcmVxdWlyZSgnb3MnKTtcbmNvbnN0IGhhc0ZsYWcgPSByZXF1aXJlKCdoYXMtZmxhZycpO1xuXG5jb25zdCBlbnYgPSBwcm9jZXNzLmVudjtcblxubGV0IGZvcmNlQ29sb3I7XG5pZiAoaGFzRmxhZygnbm8tY29sb3InKSB8fFxuXHRoYXNGbGFnKCduby1jb2xvcnMnKSB8fFxuXHRoYXNGbGFnKCdjb2xvcj1mYWxzZScpKSB7XG5cdGZvcmNlQ29sb3IgPSBmYWxzZTtcbn0gZWxzZSBpZiAoaGFzRmxhZygnY29sb3InKSB8fFxuXHRoYXNGbGFnKCdjb2xvcnMnKSB8fFxuXHRoYXNGbGFnKCdjb2xvcj10cnVlJykgfHxcblx0aGFzRmxhZygnY29sb3I9YWx3YXlzJykpIHtcblx0Zm9yY2VDb2xvciA9IHRydWU7XG59XG5pZiAoJ0ZPUkNFX0NPTE9SJyBpbiBlbnYpIHtcblx0Zm9yY2VDb2xvciA9IGVudi5GT1JDRV9DT0xPUi5sZW5ndGggPT09IDAgfHwgcGFyc2VJbnQoZW52LkZPUkNFX0NPTE9SLCAxMCkgIT09IDA7XG59XG5cbmZ1bmN0aW9uIHRyYW5zbGF0ZUxldmVsKGxldmVsKSB7XG5cdGlmIChsZXZlbCA9PT0gMCkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXG5cdHJldHVybiB7XG5cdFx0bGV2ZWwsXG5cdFx0aGFzQmFzaWM6IHRydWUsXG5cdFx0aGFzMjU2OiBsZXZlbCA+PSAyLFxuXHRcdGhhczE2bTogbGV2ZWwgPj0gM1xuXHR9O1xufVxuXG5mdW5jdGlvbiBzdXBwb3J0c0NvbG9yKHN0cmVhbSkge1xuXHRpZiAoZm9yY2VDb2xvciA9PT0gZmFsc2UpIHtcblx0XHRyZXR1cm4gMDtcblx0fVxuXG5cdGlmIChoYXNGbGFnKCdjb2xvcj0xNm0nKSB8fFxuXHRcdGhhc0ZsYWcoJ2NvbG9yPWZ1bGwnKSB8fFxuXHRcdGhhc0ZsYWcoJ2NvbG9yPXRydWVjb2xvcicpKSB7XG5cdFx0cmV0dXJuIDM7XG5cdH1cblxuXHRpZiAoaGFzRmxhZygnY29sb3I9MjU2JykpIHtcblx0XHRyZXR1cm4gMjtcblx0fVxuXG5cdGlmIChzdHJlYW0gJiYgIXN0cmVhbS5pc1RUWSAmJiBmb3JjZUNvbG9yICE9PSB0cnVlKSB7XG5cdFx0cmV0dXJuIDA7XG5cdH1cblxuXHRjb25zdCBtaW4gPSBmb3JjZUNvbG9yID8gMSA6IDA7XG5cblx0aWYgKHByb2Nlc3MucGxhdGZvcm0gPT09ICd3aW4zMicpIHtcblx0XHQvLyBOb2RlLmpzIDcuNS4wIGlzIHRoZSBmaXJzdCB2ZXJzaW9uIG9mIE5vZGUuanMgdG8gaW5jbHVkZSBhIHBhdGNoIHRvXG5cdFx0Ly8gbGlidXYgdGhhdCBlbmFibGVzIDI1NiBjb2xvciBvdXRwdXQgb24gV2luZG93cy4gQW55dGhpbmcgZWFybGllciBhbmQgaXRcblx0XHQvLyB3b24ndCB3b3JrLiBIb3dldmVyLCBoZXJlIHdlIHRhcmdldCBOb2RlLmpzIDggYXQgbWluaW11bSBhcyBpdCBpcyBhbiBMVFNcblx0XHQvLyByZWxlYXNlLCBhbmQgTm9kZS5qcyA3IGlzIG5vdC4gV2luZG93cyAxMCBidWlsZCAxMDU4NiBpcyB0aGUgZmlyc3QgV2luZG93c1xuXHRcdC8vIHJlbGVhc2UgdGhhdCBzdXBwb3J0cyAyNTYgY29sb3JzLiBXaW5kb3dzIDEwIGJ1aWxkIDE0OTMxIGlzIHRoZSBmaXJzdCByZWxlYXNlXG5cdFx0Ly8gdGhhdCBzdXBwb3J0cyAxNm0vVHJ1ZUNvbG9yLlxuXHRcdGNvbnN0IG9zUmVsZWFzZSA9IG9zLnJlbGVhc2UoKS5zcGxpdCgnLicpO1xuXHRcdGlmIChcblx0XHRcdE51bWJlcihwcm9jZXNzLnZlcnNpb25zLm5vZGUuc3BsaXQoJy4nKVswXSkgPj0gOCAmJlxuXHRcdFx0TnVtYmVyKG9zUmVsZWFzZVswXSkgPj0gMTAgJiZcblx0XHRcdE51bWJlcihvc1JlbGVhc2VbMl0pID49IDEwNTg2XG5cdFx0KSB7XG5cdFx0XHRyZXR1cm4gTnVtYmVyKG9zUmVsZWFzZVsyXSkgPj0gMTQ5MzEgPyAzIDogMjtcblx0XHR9XG5cblx0XHRyZXR1cm4gMTtcblx0fVxuXG5cdGlmICgnQ0knIGluIGVudikge1xuXHRcdGlmIChbJ1RSQVZJUycsICdDSVJDTEVDSScsICdBUFBWRVlPUicsICdHSVRMQUJfQ0knXS5zb21lKHNpZ24gPT4gc2lnbiBpbiBlbnYpIHx8IGVudi5DSV9OQU1FID09PSAnY29kZXNoaXAnKSB7XG5cdFx0XHRyZXR1cm4gMTtcblx0XHR9XG5cblx0XHRyZXR1cm4gbWluO1xuXHR9XG5cblx0aWYgKCdURUFNQ0lUWV9WRVJTSU9OJyBpbiBlbnYpIHtcblx0XHRyZXR1cm4gL14oOVxcLigwKlsxLTldXFxkKilcXC58XFxkezIsfVxcLikvLnRlc3QoZW52LlRFQU1DSVRZX1ZFUlNJT04pID8gMSA6IDA7XG5cdH1cblxuXHRpZiAoZW52LkNPTE9SVEVSTSA9PT0gJ3RydWVjb2xvcicpIHtcblx0XHRyZXR1cm4gMztcblx0fVxuXG5cdGlmICgnVEVSTV9QUk9HUkFNJyBpbiBlbnYpIHtcblx0XHRjb25zdCB2ZXJzaW9uID0gcGFyc2VJbnQoKGVudi5URVJNX1BST0dSQU1fVkVSU0lPTiB8fCAnJykuc3BsaXQoJy4nKVswXSwgMTApO1xuXG5cdFx0c3dpdGNoIChlbnYuVEVSTV9QUk9HUkFNKSB7XG5cdFx0XHRjYXNlICdpVGVybS5hcHAnOlxuXHRcdFx0XHRyZXR1cm4gdmVyc2lvbiA+PSAzID8gMyA6IDI7XG5cdFx0XHRjYXNlICdBcHBsZV9UZXJtaW5hbCc6XG5cdFx0XHRcdHJldHVybiAyO1xuXHRcdFx0Ly8gTm8gZGVmYXVsdFxuXHRcdH1cblx0fVxuXG5cdGlmICgvLTI1Nihjb2xvcik/JC9pLnRlc3QoZW52LlRFUk0pKSB7XG5cdFx0cmV0dXJuIDI7XG5cdH1cblxuXHRpZiAoL15zY3JlZW58Xnh0ZXJtfF52dDEwMHxednQyMjB8XnJ4dnR8Y29sb3J8YW5zaXxjeWd3aW58bGludXgvaS50ZXN0KGVudi5URVJNKSkge1xuXHRcdHJldHVybiAxO1xuXHR9XG5cblx0aWYgKCdDT0xPUlRFUk0nIGluIGVudikge1xuXHRcdHJldHVybiAxO1xuXHR9XG5cblx0aWYgKGVudi5URVJNID09PSAnZHVtYicpIHtcblx0XHRyZXR1cm4gbWluO1xuXHR9XG5cblx0cmV0dXJuIG1pbjtcbn1cblxuZnVuY3Rpb24gZ2V0U3VwcG9ydExldmVsKHN0cmVhbSkge1xuXHRjb25zdCBsZXZlbCA9IHN1cHBvcnRzQ29sb3Ioc3RyZWFtKTtcblx0cmV0dXJuIHRyYW5zbGF0ZUxldmVsKGxldmVsKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG5cdHN1cHBvcnRzQ29sb3I6IGdldFN1cHBvcnRMZXZlbCxcblx0c3Rkb3V0OiBnZXRTdXBwb3J0TGV2ZWwocHJvY2Vzcy5zdGRvdXQpLFxuXHRzdGRlcnI6IGdldFN1cHBvcnRMZXZlbChwcm9jZXNzLnN0ZGVycilcbn07XG4iLCIoZnVuY3Rpb24gKG5hbWUsIGNvbnRleHQsIGRlZmluaXRpb24pIHtcbiAgaWYgKHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnICYmIG1vZHVsZS5leHBvcnRzKSBtb2R1bGUuZXhwb3J0cyA9IGRlZmluaXRpb24oKTtcbiAgZWxzZSBpZiAodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kKSBkZWZpbmUoZGVmaW5pdGlvbik7XG4gIGVsc2UgY29udGV4dFtuYW1lXSA9IGRlZmluaXRpb24oKTtcbn0pKCd1cmxqb2luJywgdGhpcywgZnVuY3Rpb24gKCkge1xuXG4gIGZ1bmN0aW9uIG5vcm1hbGl6ZSAoc3RyQXJyYXkpIHtcbiAgICB2YXIgcmVzdWx0QXJyYXkgPSBbXTtcbiAgICBpZiAoc3RyQXJyYXkubGVuZ3RoID09PSAwKSB7IHJldHVybiAnJzsgfVxuXG4gICAgaWYgKHR5cGVvZiBzdHJBcnJheVswXSAhPT0gJ3N0cmluZycpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1VybCBtdXN0IGJlIGEgc3RyaW5nLiBSZWNlaXZlZCAnICsgc3RyQXJyYXlbMF0pO1xuICAgIH1cblxuICAgIC8vIElmIHRoZSBmaXJzdCBwYXJ0IGlzIGEgcGxhaW4gcHJvdG9jb2wsIHdlIGNvbWJpbmUgaXQgd2l0aCB0aGUgbmV4dCBwYXJ0LlxuICAgIGlmIChzdHJBcnJheVswXS5tYXRjaCgvXlteLzpdKzpcXC8qJC8pICYmIHN0ckFycmF5Lmxlbmd0aCA+IDEpIHtcbiAgICAgIHZhciBmaXJzdCA9IHN0ckFycmF5LnNoaWZ0KCk7XG4gICAgICBzdHJBcnJheVswXSA9IGZpcnN0ICsgc3RyQXJyYXlbMF07XG4gICAgfVxuXG4gICAgLy8gVGhlcmUgbXVzdCBiZSB0d28gb3IgdGhyZWUgc2xhc2hlcyBpbiB0aGUgZmlsZSBwcm90b2NvbCwgdHdvIHNsYXNoZXMgaW4gYW55dGhpbmcgZWxzZS5cbiAgICBpZiAoc3RyQXJyYXlbMF0ubWF0Y2goL15maWxlOlxcL1xcL1xcLy8pKSB7XG4gICAgICBzdHJBcnJheVswXSA9IHN0ckFycmF5WzBdLnJlcGxhY2UoL14oW14vOl0rKTpcXC8qLywgJyQxOi8vLycpO1xuICAgIH0gZWxzZSB7XG4gICAgICBzdHJBcnJheVswXSA9IHN0ckFycmF5WzBdLnJlcGxhY2UoL14oW14vOl0rKTpcXC8qLywgJyQxOi8vJyk7XG4gICAgfVxuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzdHJBcnJheS5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGNvbXBvbmVudCA9IHN0ckFycmF5W2ldO1xuXG4gICAgICBpZiAodHlwZW9mIGNvbXBvbmVudCAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVXJsIG11c3QgYmUgYSBzdHJpbmcuIFJlY2VpdmVkICcgKyBjb21wb25lbnQpO1xuICAgICAgfVxuXG4gICAgICBpZiAoY29tcG9uZW50ID09PSAnJykgeyBjb250aW51ZTsgfVxuXG4gICAgICBpZiAoaSA+IDApIHtcbiAgICAgICAgLy8gUmVtb3ZpbmcgdGhlIHN0YXJ0aW5nIHNsYXNoZXMgZm9yIGVhY2ggY29tcG9uZW50IGJ1dCB0aGUgZmlyc3QuXG4gICAgICAgIGNvbXBvbmVudCA9IGNvbXBvbmVudC5yZXBsYWNlKC9eW1xcL10rLywgJycpO1xuICAgICAgfVxuICAgICAgaWYgKGkgPCBzdHJBcnJheS5sZW5ndGggLSAxKSB7XG4gICAgICAgIC8vIFJlbW92aW5nIHRoZSBlbmRpbmcgc2xhc2hlcyBmb3IgZWFjaCBjb21wb25lbnQgYnV0IHRoZSBsYXN0LlxuICAgICAgICBjb21wb25lbnQgPSBjb21wb25lbnQucmVwbGFjZSgvW1xcL10rJC8sICcnKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIEZvciB0aGUgbGFzdCBjb21wb25lbnQgd2Ugd2lsbCBjb21iaW5lIG11bHRpcGxlIHNsYXNoZXMgdG8gYSBzaW5nbGUgb25lLlxuICAgICAgICBjb21wb25lbnQgPSBjb21wb25lbnQucmVwbGFjZSgvW1xcL10rJC8sICcvJyk7XG4gICAgICB9XG5cbiAgICAgIHJlc3VsdEFycmF5LnB1c2goY29tcG9uZW50KTtcblxuICAgIH1cblxuICAgIHZhciBzdHIgPSByZXN1bHRBcnJheS5qb2luKCcvJyk7XG4gICAgLy8gRWFjaCBpbnB1dCBjb21wb25lbnQgaXMgbm93IHNlcGFyYXRlZCBieSBhIHNpbmdsZSBzbGFzaCBleGNlcHQgdGhlIHBvc3NpYmxlIGZpcnN0IHBsYWluIHByb3RvY29sIHBhcnQuXG5cbiAgICAvLyByZW1vdmUgdHJhaWxpbmcgc2xhc2ggYmVmb3JlIHBhcmFtZXRlcnMgb3IgaGFzaFxuICAgIHN0ciA9IHN0ci5yZXBsYWNlKC9cXC8oXFw/fCZ8I1teIV0pL2csICckMScpO1xuXG4gICAgLy8gcmVwbGFjZSA/IGluIHBhcmFtZXRlcnMgd2l0aCAmXG4gICAgdmFyIHBhcnRzID0gc3RyLnNwbGl0KCc/Jyk7XG4gICAgc3RyID0gcGFydHMuc2hpZnQoKSArIChwYXJ0cy5sZW5ndGggPiAwID8gJz8nOiAnJykgKyBwYXJ0cy5qb2luKCcmJyk7XG5cbiAgICByZXR1cm4gc3RyO1xuICB9XG5cbiAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgaW5wdXQ7XG5cbiAgICBpZiAodHlwZW9mIGFyZ3VtZW50c1swXSA9PT0gJ29iamVjdCcpIHtcbiAgICAgIGlucHV0ID0gYXJndW1lbnRzWzBdO1xuICAgIH0gZWxzZSB7XG4gICAgICBpbnB1dCA9IFtdLnNsaWNlLmNhbGwoYXJndW1lbnRzKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbm9ybWFsaXplKGlucHV0KTtcbiAgfTtcblxufSk7XG4iLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJhc3NlcnRcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiZXZlbnRzXCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImZzXCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImh0dHBcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiaHR0cHNcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwib3NcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwicGF0aFwiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJzdHJlYW1cIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwidHR5XCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcInVybFwiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJ1dGlsXCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcInpsaWJcIik7IiwiLy8gQXhpb3MgdjEuNi4yIENvcHlyaWdodCAoYykgMjAyMyBNYXR0IFphYnJpc2tpZSBhbmQgY29udHJpYnV0b3JzXG4ndXNlIHN0cmljdCc7XG5cbmNvbnN0IEZvcm1EYXRhJDEgPSByZXF1aXJlKCdmb3JtLWRhdGEnKTtcbmNvbnN0IHVybCA9IHJlcXVpcmUoJ3VybCcpO1xuY29uc3QgcHJveHlGcm9tRW52ID0gcmVxdWlyZSgncHJveHktZnJvbS1lbnYnKTtcbmNvbnN0IGh0dHAgPSByZXF1aXJlKCdodHRwJyk7XG5jb25zdCBodHRwcyA9IHJlcXVpcmUoJ2h0dHBzJyk7XG5jb25zdCB1dGlsID0gcmVxdWlyZSgndXRpbCcpO1xuY29uc3QgZm9sbG93UmVkaXJlY3RzID0gcmVxdWlyZSgnZm9sbG93LXJlZGlyZWN0cycpO1xuY29uc3QgemxpYiA9IHJlcXVpcmUoJ3psaWInKTtcbmNvbnN0IHN0cmVhbSA9IHJlcXVpcmUoJ3N0cmVhbScpO1xuY29uc3QgRXZlbnRFbWl0dGVyID0gcmVxdWlyZSgnZXZlbnRzJyk7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wRGVmYXVsdExlZ2FjeSAoZSkgeyByZXR1cm4gZSAmJiB0eXBlb2YgZSA9PT0gJ29iamVjdCcgJiYgJ2RlZmF1bHQnIGluIGUgPyBlIDogeyAnZGVmYXVsdCc6IGUgfTsgfVxuXG5jb25zdCBGb3JtRGF0YV9fZGVmYXVsdCA9IC8qI19fUFVSRV9fKi9faW50ZXJvcERlZmF1bHRMZWdhY3koRm9ybURhdGEkMSk7XG5jb25zdCB1cmxfX2RlZmF1bHQgPSAvKiNfX1BVUkVfXyovX2ludGVyb3BEZWZhdWx0TGVnYWN5KHVybCk7XG5jb25zdCBodHRwX19kZWZhdWx0ID0gLyojX19QVVJFX18qL19pbnRlcm9wRGVmYXVsdExlZ2FjeShodHRwKTtcbmNvbnN0IGh0dHBzX19kZWZhdWx0ID0gLyojX19QVVJFX18qL19pbnRlcm9wRGVmYXVsdExlZ2FjeShodHRwcyk7XG5jb25zdCB1dGlsX19kZWZhdWx0ID0gLyojX19QVVJFX18qL19pbnRlcm9wRGVmYXVsdExlZ2FjeSh1dGlsKTtcbmNvbnN0IGZvbGxvd1JlZGlyZWN0c19fZGVmYXVsdCA9IC8qI19fUFVSRV9fKi9faW50ZXJvcERlZmF1bHRMZWdhY3koZm9sbG93UmVkaXJlY3RzKTtcbmNvbnN0IHpsaWJfX2RlZmF1bHQgPSAvKiNfX1BVUkVfXyovX2ludGVyb3BEZWZhdWx0TGVnYWN5KHpsaWIpO1xuY29uc3Qgc3RyZWFtX19kZWZhdWx0ID0gLyojX19QVVJFX18qL19pbnRlcm9wRGVmYXVsdExlZ2FjeShzdHJlYW0pO1xuY29uc3QgRXZlbnRFbWl0dGVyX19kZWZhdWx0ID0gLyojX19QVVJFX18qL19pbnRlcm9wRGVmYXVsdExlZ2FjeShFdmVudEVtaXR0ZXIpO1xuXG5mdW5jdGlvbiBiaW5kKGZuLCB0aGlzQXJnKSB7XG4gIHJldHVybiBmdW5jdGlvbiB3cmFwKCkge1xuICAgIHJldHVybiBmbi5hcHBseSh0aGlzQXJnLCBhcmd1bWVudHMpO1xuICB9O1xufVxuXG4vLyB1dGlscyBpcyBhIGxpYnJhcnkgb2YgZ2VuZXJpYyBoZWxwZXIgZnVuY3Rpb25zIG5vbi1zcGVjaWZpYyB0byBheGlvc1xuXG5jb25zdCB7dG9TdHJpbmd9ID0gT2JqZWN0LnByb3RvdHlwZTtcbmNvbnN0IHtnZXRQcm90b3R5cGVPZn0gPSBPYmplY3Q7XG5cbmNvbnN0IGtpbmRPZiA9IChjYWNoZSA9PiB0aGluZyA9PiB7XG4gICAgY29uc3Qgc3RyID0gdG9TdHJpbmcuY2FsbCh0aGluZyk7XG4gICAgcmV0dXJuIGNhY2hlW3N0cl0gfHwgKGNhY2hlW3N0cl0gPSBzdHIuc2xpY2UoOCwgLTEpLnRvTG93ZXJDYXNlKCkpO1xufSkoT2JqZWN0LmNyZWF0ZShudWxsKSk7XG5cbmNvbnN0IGtpbmRPZlRlc3QgPSAodHlwZSkgPT4ge1xuICB0eXBlID0gdHlwZS50b0xvd2VyQ2FzZSgpO1xuICByZXR1cm4gKHRoaW5nKSA9PiBraW5kT2YodGhpbmcpID09PSB0eXBlXG59O1xuXG5jb25zdCB0eXBlT2ZUZXN0ID0gdHlwZSA9PiB0aGluZyA9PiB0eXBlb2YgdGhpbmcgPT09IHR5cGU7XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYW4gQXJyYXlcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYW4gQXJyYXksIG90aGVyd2lzZSBmYWxzZVxuICovXG5jb25zdCB7aXNBcnJheX0gPSBBcnJheTtcblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyB1bmRlZmluZWRcbiAqXG4gKiBAcGFyYW0geyp9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHRoZSB2YWx1ZSBpcyB1bmRlZmluZWQsIG90aGVyd2lzZSBmYWxzZVxuICovXG5jb25zdCBpc1VuZGVmaW5lZCA9IHR5cGVPZlRlc3QoJ3VuZGVmaW5lZCcpO1xuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgQnVmZmVyXG4gKlxuICogQHBhcmFtIHsqfSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIEJ1ZmZlciwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzQnVmZmVyKHZhbCkge1xuICByZXR1cm4gdmFsICE9PSBudWxsICYmICFpc1VuZGVmaW5lZCh2YWwpICYmIHZhbC5jb25zdHJ1Y3RvciAhPT0gbnVsbCAmJiAhaXNVbmRlZmluZWQodmFsLmNvbnN0cnVjdG9yKVxuICAgICYmIGlzRnVuY3Rpb24odmFsLmNvbnN0cnVjdG9yLmlzQnVmZmVyKSAmJiB2YWwuY29uc3RydWN0b3IuaXNCdWZmZXIodmFsKTtcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhbiBBcnJheUJ1ZmZlclxuICpcbiAqIEBwYXJhbSB7Kn0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYW4gQXJyYXlCdWZmZXIsIG90aGVyd2lzZSBmYWxzZVxuICovXG5jb25zdCBpc0FycmF5QnVmZmVyID0ga2luZE9mVGVzdCgnQXJyYXlCdWZmZXInKTtcblxuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgdmlldyBvbiBhbiBBcnJheUJ1ZmZlclxuICpcbiAqIEBwYXJhbSB7Kn0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSB2aWV3IG9uIGFuIEFycmF5QnVmZmVyLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNBcnJheUJ1ZmZlclZpZXcodmFsKSB7XG4gIGxldCByZXN1bHQ7XG4gIGlmICgodHlwZW9mIEFycmF5QnVmZmVyICE9PSAndW5kZWZpbmVkJykgJiYgKEFycmF5QnVmZmVyLmlzVmlldykpIHtcbiAgICByZXN1bHQgPSBBcnJheUJ1ZmZlci5pc1ZpZXcodmFsKTtcbiAgfSBlbHNlIHtcbiAgICByZXN1bHQgPSAodmFsKSAmJiAodmFsLmJ1ZmZlcikgJiYgKGlzQXJyYXlCdWZmZXIodmFsLmJ1ZmZlcikpO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBTdHJpbmdcbiAqXG4gKiBAcGFyYW0geyp9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgU3RyaW5nLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuY29uc3QgaXNTdHJpbmcgPSB0eXBlT2ZUZXN0KCdzdHJpbmcnKTtcblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIEZ1bmN0aW9uXG4gKlxuICogQHBhcmFtIHsqfSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgRnVuY3Rpb24sIG90aGVyd2lzZSBmYWxzZVxuICovXG5jb25zdCBpc0Z1bmN0aW9uID0gdHlwZU9mVGVzdCgnZnVuY3Rpb24nKTtcblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIE51bWJlclxuICpcbiAqIEBwYXJhbSB7Kn0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBOdW1iZXIsIG90aGVyd2lzZSBmYWxzZVxuICovXG5jb25zdCBpc051bWJlciA9IHR5cGVPZlRlc3QoJ251bWJlcicpO1xuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGFuIE9iamVjdFxuICpcbiAqIEBwYXJhbSB7Kn0gdGhpbmcgVGhlIHZhbHVlIHRvIHRlc3RcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhbiBPYmplY3QsIG90aGVyd2lzZSBmYWxzZVxuICovXG5jb25zdCBpc09iamVjdCA9ICh0aGluZykgPT4gdGhpbmcgIT09IG51bGwgJiYgdHlwZW9mIHRoaW5nID09PSAnb2JqZWN0JztcblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIEJvb2xlYW5cbiAqXG4gKiBAcGFyYW0geyp9IHRoaW5nIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIEJvb2xlYW4sIG90aGVyd2lzZSBmYWxzZVxuICovXG5jb25zdCBpc0Jvb2xlYW4gPSB0aGluZyA9PiB0aGluZyA9PT0gdHJ1ZSB8fCB0aGluZyA9PT0gZmFsc2U7XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBwbGFpbiBPYmplY3RcbiAqXG4gKiBAcGFyYW0geyp9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgcGxhaW4gT2JqZWN0LCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuY29uc3QgaXNQbGFpbk9iamVjdCA9ICh2YWwpID0+IHtcbiAgaWYgKGtpbmRPZih2YWwpICE9PSAnb2JqZWN0Jykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGNvbnN0IHByb3RvdHlwZSA9IGdldFByb3RvdHlwZU9mKHZhbCk7XG4gIHJldHVybiAocHJvdG90eXBlID09PSBudWxsIHx8IHByb3RvdHlwZSA9PT0gT2JqZWN0LnByb3RvdHlwZSB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2YocHJvdG90eXBlKSA9PT0gbnVsbCkgJiYgIShTeW1ib2wudG9TdHJpbmdUYWcgaW4gdmFsKSAmJiAhKFN5bWJvbC5pdGVyYXRvciBpbiB2YWwpO1xufTtcblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIERhdGVcbiAqXG4gKiBAcGFyYW0geyp9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgRGF0ZSwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmNvbnN0IGlzRGF0ZSA9IGtpbmRPZlRlc3QoJ0RhdGUnKTtcblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIEZpbGVcbiAqXG4gKiBAcGFyYW0geyp9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgRmlsZSwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmNvbnN0IGlzRmlsZSA9IGtpbmRPZlRlc3QoJ0ZpbGUnKTtcblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIEJsb2JcbiAqXG4gKiBAcGFyYW0geyp9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgQmxvYiwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmNvbnN0IGlzQmxvYiA9IGtpbmRPZlRlc3QoJ0Jsb2InKTtcblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIEZpbGVMaXN0XG4gKlxuICogQHBhcmFtIHsqfSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIEZpbGUsIG90aGVyd2lzZSBmYWxzZVxuICovXG5jb25zdCBpc0ZpbGVMaXN0ID0ga2luZE9mVGVzdCgnRmlsZUxpc3QnKTtcblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIFN0cmVhbVxuICpcbiAqIEBwYXJhbSB7Kn0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBTdHJlYW0sIG90aGVyd2lzZSBmYWxzZVxuICovXG5jb25zdCBpc1N0cmVhbSA9ICh2YWwpID0+IGlzT2JqZWN0KHZhbCkgJiYgaXNGdW5jdGlvbih2YWwucGlwZSk7XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBGb3JtRGF0YVxuICpcbiAqIEBwYXJhbSB7Kn0gdGhpbmcgVGhlIHZhbHVlIHRvIHRlc3RcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhbiBGb3JtRGF0YSwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmNvbnN0IGlzRm9ybURhdGEgPSAodGhpbmcpID0+IHtcbiAgbGV0IGtpbmQ7XG4gIHJldHVybiB0aGluZyAmJiAoXG4gICAgKHR5cGVvZiBGb3JtRGF0YSA9PT0gJ2Z1bmN0aW9uJyAmJiB0aGluZyBpbnN0YW5jZW9mIEZvcm1EYXRhKSB8fCAoXG4gICAgICBpc0Z1bmN0aW9uKHRoaW5nLmFwcGVuZCkgJiYgKFxuICAgICAgICAoa2luZCA9IGtpbmRPZih0aGluZykpID09PSAnZm9ybWRhdGEnIHx8XG4gICAgICAgIC8vIGRldGVjdCBmb3JtLWRhdGEgaW5zdGFuY2VcbiAgICAgICAgKGtpbmQgPT09ICdvYmplY3QnICYmIGlzRnVuY3Rpb24odGhpbmcudG9TdHJpbmcpICYmIHRoaW5nLnRvU3RyaW5nKCkgPT09ICdbb2JqZWN0IEZvcm1EYXRhXScpXG4gICAgICApXG4gICAgKVxuICApXG59O1xuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgVVJMU2VhcmNoUGFyYW1zIG9iamVjdFxuICpcbiAqIEBwYXJhbSB7Kn0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBVUkxTZWFyY2hQYXJhbXMgb2JqZWN0LCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuY29uc3QgaXNVUkxTZWFyY2hQYXJhbXMgPSBraW5kT2ZUZXN0KCdVUkxTZWFyY2hQYXJhbXMnKTtcblxuLyoqXG4gKiBUcmltIGV4Y2VzcyB3aGl0ZXNwYWNlIG9mZiB0aGUgYmVnaW5uaW5nIGFuZCBlbmQgb2YgYSBzdHJpbmdcbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gc3RyIFRoZSBTdHJpbmcgdG8gdHJpbVxuICpcbiAqIEByZXR1cm5zIHtTdHJpbmd9IFRoZSBTdHJpbmcgZnJlZWQgb2YgZXhjZXNzIHdoaXRlc3BhY2VcbiAqL1xuY29uc3QgdHJpbSA9IChzdHIpID0+IHN0ci50cmltID9cbiAgc3RyLnRyaW0oKSA6IHN0ci5yZXBsYWNlKC9eW1xcc1xcdUZFRkZcXHhBMF0rfFtcXHNcXHVGRUZGXFx4QTBdKyQvZywgJycpO1xuXG4vKipcbiAqIEl0ZXJhdGUgb3ZlciBhbiBBcnJheSBvciBhbiBPYmplY3QgaW52b2tpbmcgYSBmdW5jdGlvbiBmb3IgZWFjaCBpdGVtLlxuICpcbiAqIElmIGBvYmpgIGlzIGFuIEFycmF5IGNhbGxiYWNrIHdpbGwgYmUgY2FsbGVkIHBhc3NpbmdcbiAqIHRoZSB2YWx1ZSwgaW5kZXgsIGFuZCBjb21wbGV0ZSBhcnJheSBmb3IgZWFjaCBpdGVtLlxuICpcbiAqIElmICdvYmonIGlzIGFuIE9iamVjdCBjYWxsYmFjayB3aWxsIGJlIGNhbGxlZCBwYXNzaW5nXG4gKiB0aGUgdmFsdWUsIGtleSwgYW5kIGNvbXBsZXRlIG9iamVjdCBmb3IgZWFjaCBwcm9wZXJ0eS5cbiAqXG4gKiBAcGFyYW0ge09iamVjdHxBcnJheX0gb2JqIFRoZSBvYmplY3QgdG8gaXRlcmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZm4gVGhlIGNhbGxiYWNrIHRvIGludm9rZSBmb3IgZWFjaCBpdGVtXG4gKlxuICogQHBhcmFtIHtCb29sZWFufSBbYWxsT3duS2V5cyA9IGZhbHNlXVxuICogQHJldHVybnMge2FueX1cbiAqL1xuZnVuY3Rpb24gZm9yRWFjaChvYmosIGZuLCB7YWxsT3duS2V5cyA9IGZhbHNlfSA9IHt9KSB7XG4gIC8vIERvbid0IGJvdGhlciBpZiBubyB2YWx1ZSBwcm92aWRlZFxuICBpZiAob2JqID09PSBudWxsIHx8IHR5cGVvZiBvYmogPT09ICd1bmRlZmluZWQnKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgbGV0IGk7XG4gIGxldCBsO1xuXG4gIC8vIEZvcmNlIGFuIGFycmF5IGlmIG5vdCBhbHJlYWR5IHNvbWV0aGluZyBpdGVyYWJsZVxuICBpZiAodHlwZW9mIG9iaiAhPT0gJ29iamVjdCcpIHtcbiAgICAvKmVzbGludCBuby1wYXJhbS1yZWFzc2lnbjowKi9cbiAgICBvYmogPSBbb2JqXTtcbiAgfVxuXG4gIGlmIChpc0FycmF5KG9iaikpIHtcbiAgICAvLyBJdGVyYXRlIG92ZXIgYXJyYXkgdmFsdWVzXG4gICAgZm9yIChpID0gMCwgbCA9IG9iai5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgIGZuLmNhbGwobnVsbCwgb2JqW2ldLCBpLCBvYmopO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICAvLyBJdGVyYXRlIG92ZXIgb2JqZWN0IGtleXNcbiAgICBjb25zdCBrZXlzID0gYWxsT3duS2V5cyA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKG9iaikgOiBPYmplY3Qua2V5cyhvYmopO1xuICAgIGNvbnN0IGxlbiA9IGtleXMubGVuZ3RoO1xuICAgIGxldCBrZXk7XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgIGtleSA9IGtleXNbaV07XG4gICAgICBmbi5jYWxsKG51bGwsIG9ialtrZXldLCBrZXksIG9iaik7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGZpbmRLZXkob2JqLCBrZXkpIHtcbiAga2V5ID0ga2V5LnRvTG93ZXJDYXNlKCk7XG4gIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhvYmopO1xuICBsZXQgaSA9IGtleXMubGVuZ3RoO1xuICBsZXQgX2tleTtcbiAgd2hpbGUgKGktLSA+IDApIHtcbiAgICBfa2V5ID0ga2V5c1tpXTtcbiAgICBpZiAoa2V5ID09PSBfa2V5LnRvTG93ZXJDYXNlKCkpIHtcbiAgICAgIHJldHVybiBfa2V5O1xuICAgIH1cbiAgfVxuICByZXR1cm4gbnVsbDtcbn1cblxuY29uc3QgX2dsb2JhbCA9ICgoKSA9PiB7XG4gIC8qZXNsaW50IG5vLXVuZGVmOjAqL1xuICBpZiAodHlwZW9mIGdsb2JhbFRoaXMgIT09IFwidW5kZWZpbmVkXCIpIHJldHVybiBnbG9iYWxUaGlzO1xuICByZXR1cm4gdHlwZW9mIHNlbGYgIT09IFwidW5kZWZpbmVkXCIgPyBzZWxmIDogKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnID8gd2luZG93IDogZ2xvYmFsKVxufSkoKTtcblxuY29uc3QgaXNDb250ZXh0RGVmaW5lZCA9IChjb250ZXh0KSA9PiAhaXNVbmRlZmluZWQoY29udGV4dCkgJiYgY29udGV4dCAhPT0gX2dsb2JhbDtcblxuLyoqXG4gKiBBY2NlcHRzIHZhcmFyZ3MgZXhwZWN0aW5nIGVhY2ggYXJndW1lbnQgdG8gYmUgYW4gb2JqZWN0LCB0aGVuXG4gKiBpbW11dGFibHkgbWVyZ2VzIHRoZSBwcm9wZXJ0aWVzIG9mIGVhY2ggb2JqZWN0IGFuZCByZXR1cm5zIHJlc3VsdC5cbiAqXG4gKiBXaGVuIG11bHRpcGxlIG9iamVjdHMgY29udGFpbiB0aGUgc2FtZSBrZXkgdGhlIGxhdGVyIG9iamVjdCBpblxuICogdGhlIGFyZ3VtZW50cyBsaXN0IHdpbGwgdGFrZSBwcmVjZWRlbmNlLlxuICpcbiAqIEV4YW1wbGU6XG4gKlxuICogYGBganNcbiAqIHZhciByZXN1bHQgPSBtZXJnZSh7Zm9vOiAxMjN9LCB7Zm9vOiA0NTZ9KTtcbiAqIGNvbnNvbGUubG9nKHJlc3VsdC5mb28pOyAvLyBvdXRwdXRzIDQ1NlxuICogYGBgXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IG9iajEgT2JqZWN0IHRvIG1lcmdlXG4gKlxuICogQHJldHVybnMge09iamVjdH0gUmVzdWx0IG9mIGFsbCBtZXJnZSBwcm9wZXJ0aWVzXG4gKi9cbmZ1bmN0aW9uIG1lcmdlKC8qIG9iajEsIG9iajIsIG9iajMsIC4uLiAqLykge1xuICBjb25zdCB7Y2FzZWxlc3N9ID0gaXNDb250ZXh0RGVmaW5lZCh0aGlzKSAmJiB0aGlzIHx8IHt9O1xuICBjb25zdCByZXN1bHQgPSB7fTtcbiAgY29uc3QgYXNzaWduVmFsdWUgPSAodmFsLCBrZXkpID0+IHtcbiAgICBjb25zdCB0YXJnZXRLZXkgPSBjYXNlbGVzcyAmJiBmaW5kS2V5KHJlc3VsdCwga2V5KSB8fCBrZXk7XG4gICAgaWYgKGlzUGxhaW5PYmplY3QocmVzdWx0W3RhcmdldEtleV0pICYmIGlzUGxhaW5PYmplY3QodmFsKSkge1xuICAgICAgcmVzdWx0W3RhcmdldEtleV0gPSBtZXJnZShyZXN1bHRbdGFyZ2V0S2V5XSwgdmFsKTtcbiAgICB9IGVsc2UgaWYgKGlzUGxhaW5PYmplY3QodmFsKSkge1xuICAgICAgcmVzdWx0W3RhcmdldEtleV0gPSBtZXJnZSh7fSwgdmFsKTtcbiAgICB9IGVsc2UgaWYgKGlzQXJyYXkodmFsKSkge1xuICAgICAgcmVzdWx0W3RhcmdldEtleV0gPSB2YWwuc2xpY2UoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVzdWx0W3RhcmdldEtleV0gPSB2YWw7XG4gICAgfVxuICB9O1xuXG4gIGZvciAobGV0IGkgPSAwLCBsID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgIGFyZ3VtZW50c1tpXSAmJiBmb3JFYWNoKGFyZ3VtZW50c1tpXSwgYXNzaWduVmFsdWUpO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbi8qKlxuICogRXh0ZW5kcyBvYmplY3QgYSBieSBtdXRhYmx5IGFkZGluZyB0byBpdCB0aGUgcHJvcGVydGllcyBvZiBvYmplY3QgYi5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gYSBUaGUgb2JqZWN0IHRvIGJlIGV4dGVuZGVkXG4gKiBAcGFyYW0ge09iamVjdH0gYiBUaGUgb2JqZWN0IHRvIGNvcHkgcHJvcGVydGllcyBmcm9tXG4gKiBAcGFyYW0ge09iamVjdH0gdGhpc0FyZyBUaGUgb2JqZWN0IHRvIGJpbmQgZnVuY3Rpb24gdG9cbiAqXG4gKiBAcGFyYW0ge0Jvb2xlYW59IFthbGxPd25LZXlzXVxuICogQHJldHVybnMge09iamVjdH0gVGhlIHJlc3VsdGluZyB2YWx1ZSBvZiBvYmplY3QgYVxuICovXG5jb25zdCBleHRlbmQgPSAoYSwgYiwgdGhpc0FyZywge2FsbE93bktleXN9PSB7fSkgPT4ge1xuICBmb3JFYWNoKGIsICh2YWwsIGtleSkgPT4ge1xuICAgIGlmICh0aGlzQXJnICYmIGlzRnVuY3Rpb24odmFsKSkge1xuICAgICAgYVtrZXldID0gYmluZCh2YWwsIHRoaXNBcmcpO1xuICAgIH0gZWxzZSB7XG4gICAgICBhW2tleV0gPSB2YWw7XG4gICAgfVxuICB9LCB7YWxsT3duS2V5c30pO1xuICByZXR1cm4gYTtcbn07XG5cbi8qKlxuICogUmVtb3ZlIGJ5dGUgb3JkZXIgbWFya2VyLiBUaGlzIGNhdGNoZXMgRUYgQkIgQkYgKHRoZSBVVEYtOCBCT00pXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGNvbnRlbnQgd2l0aCBCT01cbiAqXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBjb250ZW50IHZhbHVlIHdpdGhvdXQgQk9NXG4gKi9cbmNvbnN0IHN0cmlwQk9NID0gKGNvbnRlbnQpID0+IHtcbiAgaWYgKGNvbnRlbnQuY2hhckNvZGVBdCgwKSA9PT0gMHhGRUZGKSB7XG4gICAgY29udGVudCA9IGNvbnRlbnQuc2xpY2UoMSk7XG4gIH1cbiAgcmV0dXJuIGNvbnRlbnQ7XG59O1xuXG4vKipcbiAqIEluaGVyaXQgdGhlIHByb3RvdHlwZSBtZXRob2RzIGZyb20gb25lIGNvbnN0cnVjdG9yIGludG8gYW5vdGhlclxuICogQHBhcmFtIHtmdW5jdGlvbn0gY29uc3RydWN0b3JcbiAqIEBwYXJhbSB7ZnVuY3Rpb259IHN1cGVyQ29uc3RydWN0b3JcbiAqIEBwYXJhbSB7b2JqZWN0fSBbcHJvcHNdXG4gKiBAcGFyYW0ge29iamVjdH0gW2Rlc2NyaXB0b3JzXVxuICpcbiAqIEByZXR1cm5zIHt2b2lkfVxuICovXG5jb25zdCBpbmhlcml0cyA9IChjb25zdHJ1Y3Rvciwgc3VwZXJDb25zdHJ1Y3RvciwgcHJvcHMsIGRlc2NyaXB0b3JzKSA9PiB7XG4gIGNvbnN0cnVjdG9yLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIGRlc2NyaXB0b3JzKTtcbiAgY29uc3RydWN0b3IucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gY29uc3RydWN0b3I7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShjb25zdHJ1Y3RvciwgJ3N1cGVyJywge1xuICAgIHZhbHVlOiBzdXBlckNvbnN0cnVjdG9yLnByb3RvdHlwZVxuICB9KTtcbiAgcHJvcHMgJiYgT2JqZWN0LmFzc2lnbihjb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3BzKTtcbn07XG5cbi8qKlxuICogUmVzb2x2ZSBvYmplY3Qgd2l0aCBkZWVwIHByb3RvdHlwZSBjaGFpbiB0byBhIGZsYXQgb2JqZWN0XG4gKiBAcGFyYW0ge09iamVjdH0gc291cmNlT2JqIHNvdXJjZSBvYmplY3RcbiAqIEBwYXJhbSB7T2JqZWN0fSBbZGVzdE9ial1cbiAqIEBwYXJhbSB7RnVuY3Rpb258Qm9vbGVhbn0gW2ZpbHRlcl1cbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtwcm9wRmlsdGVyXVxuICpcbiAqIEByZXR1cm5zIHtPYmplY3R9XG4gKi9cbmNvbnN0IHRvRmxhdE9iamVjdCA9IChzb3VyY2VPYmosIGRlc3RPYmosIGZpbHRlciwgcHJvcEZpbHRlcikgPT4ge1xuICBsZXQgcHJvcHM7XG4gIGxldCBpO1xuICBsZXQgcHJvcDtcbiAgY29uc3QgbWVyZ2VkID0ge307XG5cbiAgZGVzdE9iaiA9IGRlc3RPYmogfHwge307XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1lcS1udWxsLGVxZXFlcVxuICBpZiAoc291cmNlT2JqID09IG51bGwpIHJldHVybiBkZXN0T2JqO1xuXG4gIGRvIHtcbiAgICBwcm9wcyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHNvdXJjZU9iaik7XG4gICAgaSA9IHByb3BzLmxlbmd0aDtcbiAgICB3aGlsZSAoaS0tID4gMCkge1xuICAgICAgcHJvcCA9IHByb3BzW2ldO1xuICAgICAgaWYgKCghcHJvcEZpbHRlciB8fCBwcm9wRmlsdGVyKHByb3AsIHNvdXJjZU9iaiwgZGVzdE9iaikpICYmICFtZXJnZWRbcHJvcF0pIHtcbiAgICAgICAgZGVzdE9ialtwcm9wXSA9IHNvdXJjZU9ialtwcm9wXTtcbiAgICAgICAgbWVyZ2VkW3Byb3BdID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gICAgc291cmNlT2JqID0gZmlsdGVyICE9PSBmYWxzZSAmJiBnZXRQcm90b3R5cGVPZihzb3VyY2VPYmopO1xuICB9IHdoaWxlIChzb3VyY2VPYmogJiYgKCFmaWx0ZXIgfHwgZmlsdGVyKHNvdXJjZU9iaiwgZGVzdE9iaikpICYmIHNvdXJjZU9iaiAhPT0gT2JqZWN0LnByb3RvdHlwZSk7XG5cbiAgcmV0dXJuIGRlc3RPYmo7XG59O1xuXG4vKipcbiAqIERldGVybWluZXMgd2hldGhlciBhIHN0cmluZyBlbmRzIHdpdGggdGhlIGNoYXJhY3RlcnMgb2YgYSBzcGVjaWZpZWQgc3RyaW5nXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IHN0clxuICogQHBhcmFtIHtTdHJpbmd9IHNlYXJjaFN0cmluZ1xuICogQHBhcmFtIHtOdW1iZXJ9IFtwb3NpdGlvbj0gMF1cbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqL1xuY29uc3QgZW5kc1dpdGggPSAoc3RyLCBzZWFyY2hTdHJpbmcsIHBvc2l0aW9uKSA9PiB7XG4gIHN0ciA9IFN0cmluZyhzdHIpO1xuICBpZiAocG9zaXRpb24gPT09IHVuZGVmaW5lZCB8fCBwb3NpdGlvbiA+IHN0ci5sZW5ndGgpIHtcbiAgICBwb3NpdGlvbiA9IHN0ci5sZW5ndGg7XG4gIH1cbiAgcG9zaXRpb24gLT0gc2VhcmNoU3RyaW5nLmxlbmd0aDtcbiAgY29uc3QgbGFzdEluZGV4ID0gc3RyLmluZGV4T2Yoc2VhcmNoU3RyaW5nLCBwb3NpdGlvbik7XG4gIHJldHVybiBsYXN0SW5kZXggIT09IC0xICYmIGxhc3RJbmRleCA9PT0gcG9zaXRpb247XG59O1xuXG5cbi8qKlxuICogUmV0dXJucyBuZXcgYXJyYXkgZnJvbSBhcnJheSBsaWtlIG9iamVjdCBvciBudWxsIGlmIGZhaWxlZFxuICpcbiAqIEBwYXJhbSB7Kn0gW3RoaW5nXVxuICpcbiAqIEByZXR1cm5zIHs/QXJyYXl9XG4gKi9cbmNvbnN0IHRvQXJyYXkgPSAodGhpbmcpID0+IHtcbiAgaWYgKCF0aGluZykgcmV0dXJuIG51bGw7XG4gIGlmIChpc0FycmF5KHRoaW5nKSkgcmV0dXJuIHRoaW5nO1xuICBsZXQgaSA9IHRoaW5nLmxlbmd0aDtcbiAgaWYgKCFpc051bWJlcihpKSkgcmV0dXJuIG51bGw7XG4gIGNvbnN0IGFyciA9IG5ldyBBcnJheShpKTtcbiAgd2hpbGUgKGktLSA+IDApIHtcbiAgICBhcnJbaV0gPSB0aGluZ1tpXTtcbiAgfVxuICByZXR1cm4gYXJyO1xufTtcblxuLyoqXG4gKiBDaGVja2luZyBpZiB0aGUgVWludDhBcnJheSBleGlzdHMgYW5kIGlmIGl0IGRvZXMsIGl0IHJldHVybnMgYSBmdW5jdGlvbiB0aGF0IGNoZWNrcyBpZiB0aGVcbiAqIHRoaW5nIHBhc3NlZCBpbiBpcyBhbiBpbnN0YW5jZSBvZiBVaW50OEFycmF5XG4gKlxuICogQHBhcmFtIHtUeXBlZEFycmF5fVxuICpcbiAqIEByZXR1cm5zIHtBcnJheX1cbiAqL1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGZ1bmMtbmFtZXNcbmNvbnN0IGlzVHlwZWRBcnJheSA9IChUeXBlZEFycmF5ID0+IHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGZ1bmMtbmFtZXNcbiAgcmV0dXJuIHRoaW5nID0+IHtcbiAgICByZXR1cm4gVHlwZWRBcnJheSAmJiB0aGluZyBpbnN0YW5jZW9mIFR5cGVkQXJyYXk7XG4gIH07XG59KSh0eXBlb2YgVWludDhBcnJheSAhPT0gJ3VuZGVmaW5lZCcgJiYgZ2V0UHJvdG90eXBlT2YoVWludDhBcnJheSkpO1xuXG4vKipcbiAqIEZvciBlYWNoIGVudHJ5IGluIHRoZSBvYmplY3QsIGNhbGwgdGhlIGZ1bmN0aW9uIHdpdGggdGhlIGtleSBhbmQgdmFsdWUuXG4gKlxuICogQHBhcmFtIHtPYmplY3Q8YW55LCBhbnk+fSBvYmogLSBUaGUgb2JqZWN0IHRvIGl0ZXJhdGUgb3Zlci5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuIC0gVGhlIGZ1bmN0aW9uIHRvIGNhbGwgZm9yIGVhY2ggZW50cnkuXG4gKlxuICogQHJldHVybnMge3ZvaWR9XG4gKi9cbmNvbnN0IGZvckVhY2hFbnRyeSA9IChvYmosIGZuKSA9PiB7XG4gIGNvbnN0IGdlbmVyYXRvciA9IG9iaiAmJiBvYmpbU3ltYm9sLml0ZXJhdG9yXTtcblxuICBjb25zdCBpdGVyYXRvciA9IGdlbmVyYXRvci5jYWxsKG9iaik7XG5cbiAgbGV0IHJlc3VsdDtcblxuICB3aGlsZSAoKHJlc3VsdCA9IGl0ZXJhdG9yLm5leHQoKSkgJiYgIXJlc3VsdC5kb25lKSB7XG4gICAgY29uc3QgcGFpciA9IHJlc3VsdC52YWx1ZTtcbiAgICBmbi5jYWxsKG9iaiwgcGFpclswXSwgcGFpclsxXSk7XG4gIH1cbn07XG5cbi8qKlxuICogSXQgdGFrZXMgYSByZWd1bGFyIGV4cHJlc3Npb24gYW5kIGEgc3RyaW5nLCBhbmQgcmV0dXJucyBhbiBhcnJheSBvZiBhbGwgdGhlIG1hdGNoZXNcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gcmVnRXhwIC0gVGhlIHJlZ3VsYXIgZXhwcmVzc2lvbiB0byBtYXRjaCBhZ2FpbnN0LlxuICogQHBhcmFtIHtzdHJpbmd9IHN0ciAtIFRoZSBzdHJpbmcgdG8gc2VhcmNoLlxuICpcbiAqIEByZXR1cm5zIHtBcnJheTxib29sZWFuPn1cbiAqL1xuY29uc3QgbWF0Y2hBbGwgPSAocmVnRXhwLCBzdHIpID0+IHtcbiAgbGV0IG1hdGNoZXM7XG4gIGNvbnN0IGFyciA9IFtdO1xuXG4gIHdoaWxlICgobWF0Y2hlcyA9IHJlZ0V4cC5leGVjKHN0cikpICE9PSBudWxsKSB7XG4gICAgYXJyLnB1c2gobWF0Y2hlcyk7XG4gIH1cblxuICByZXR1cm4gYXJyO1xufTtcblxuLyogQ2hlY2tpbmcgaWYgdGhlIGtpbmRPZlRlc3QgZnVuY3Rpb24gcmV0dXJucyB0cnVlIHdoZW4gcGFzc2VkIGFuIEhUTUxGb3JtRWxlbWVudC4gKi9cbmNvbnN0IGlzSFRNTEZvcm0gPSBraW5kT2ZUZXN0KCdIVE1MRm9ybUVsZW1lbnQnKTtcblxuY29uc3QgdG9DYW1lbENhc2UgPSBzdHIgPT4ge1xuICByZXR1cm4gc3RyLnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvWy1fXFxzXShbYS16XFxkXSkoXFx3KikvZyxcbiAgICBmdW5jdGlvbiByZXBsYWNlcihtLCBwMSwgcDIpIHtcbiAgICAgIHJldHVybiBwMS50b1VwcGVyQ2FzZSgpICsgcDI7XG4gICAgfVxuICApO1xufTtcblxuLyogQ3JlYXRpbmcgYSBmdW5jdGlvbiB0aGF0IHdpbGwgY2hlY2sgaWYgYW4gb2JqZWN0IGhhcyBhIHByb3BlcnR5LiAqL1xuY29uc3QgaGFzT3duUHJvcGVydHkgPSAoKHtoYXNPd25Qcm9wZXJ0eX0pID0+IChvYmosIHByb3ApID0+IGhhc093blByb3BlcnR5LmNhbGwob2JqLCBwcm9wKSkoT2JqZWN0LnByb3RvdHlwZSk7XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBSZWdFeHAgb2JqZWN0XG4gKlxuICogQHBhcmFtIHsqfSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIFJlZ0V4cCBvYmplY3QsIG90aGVyd2lzZSBmYWxzZVxuICovXG5jb25zdCBpc1JlZ0V4cCA9IGtpbmRPZlRlc3QoJ1JlZ0V4cCcpO1xuXG5jb25zdCByZWR1Y2VEZXNjcmlwdG9ycyA9IChvYmosIHJlZHVjZXIpID0+IHtcbiAgY29uc3QgZGVzY3JpcHRvcnMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhvYmopO1xuICBjb25zdCByZWR1Y2VkRGVzY3JpcHRvcnMgPSB7fTtcblxuICBmb3JFYWNoKGRlc2NyaXB0b3JzLCAoZGVzY3JpcHRvciwgbmFtZSkgPT4ge1xuICAgIGxldCByZXQ7XG4gICAgaWYgKChyZXQgPSByZWR1Y2VyKGRlc2NyaXB0b3IsIG5hbWUsIG9iaikpICE9PSBmYWxzZSkge1xuICAgICAgcmVkdWNlZERlc2NyaXB0b3JzW25hbWVdID0gcmV0IHx8IGRlc2NyaXB0b3I7XG4gICAgfVxuICB9KTtcblxuICBPYmplY3QuZGVmaW5lUHJvcGVydGllcyhvYmosIHJlZHVjZWREZXNjcmlwdG9ycyk7XG59O1xuXG4vKipcbiAqIE1ha2VzIGFsbCBtZXRob2RzIHJlYWQtb25seVxuICogQHBhcmFtIHtPYmplY3R9IG9ialxuICovXG5cbmNvbnN0IGZyZWV6ZU1ldGhvZHMgPSAob2JqKSA9PiB7XG4gIHJlZHVjZURlc2NyaXB0b3JzKG9iaiwgKGRlc2NyaXB0b3IsIG5hbWUpID0+IHtcbiAgICAvLyBza2lwIHJlc3RyaWN0ZWQgcHJvcHMgaW4gc3RyaWN0IG1vZGVcbiAgICBpZiAoaXNGdW5jdGlvbihvYmopICYmIFsnYXJndW1lbnRzJywgJ2NhbGxlcicsICdjYWxsZWUnXS5pbmRleE9mKG5hbWUpICE9PSAtMSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGNvbnN0IHZhbHVlID0gb2JqW25hbWVdO1xuXG4gICAgaWYgKCFpc0Z1bmN0aW9uKHZhbHVlKSkgcmV0dXJuO1xuXG4gICAgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gZmFsc2U7XG5cbiAgICBpZiAoJ3dyaXRhYmxlJyBpbiBkZXNjcmlwdG9yKSB7XG4gICAgICBkZXNjcmlwdG9yLndyaXRhYmxlID0gZmFsc2U7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKCFkZXNjcmlwdG9yLnNldCkge1xuICAgICAgZGVzY3JpcHRvci5zZXQgPSAoKSA9PiB7XG4gICAgICAgIHRocm93IEVycm9yKCdDYW4gbm90IHJld3JpdGUgcmVhZC1vbmx5IG1ldGhvZCBcXCcnICsgbmFtZSArICdcXCcnKTtcbiAgICAgIH07XG4gICAgfVxuICB9KTtcbn07XG5cbmNvbnN0IHRvT2JqZWN0U2V0ID0gKGFycmF5T3JTdHJpbmcsIGRlbGltaXRlcikgPT4ge1xuICBjb25zdCBvYmogPSB7fTtcblxuICBjb25zdCBkZWZpbmUgPSAoYXJyKSA9PiB7XG4gICAgYXJyLmZvckVhY2godmFsdWUgPT4ge1xuICAgICAgb2JqW3ZhbHVlXSA9IHRydWU7XG4gICAgfSk7XG4gIH07XG5cbiAgaXNBcnJheShhcnJheU9yU3RyaW5nKSA/IGRlZmluZShhcnJheU9yU3RyaW5nKSA6IGRlZmluZShTdHJpbmcoYXJyYXlPclN0cmluZykuc3BsaXQoZGVsaW1pdGVyKSk7XG5cbiAgcmV0dXJuIG9iajtcbn07XG5cbmNvbnN0IG5vb3AgPSAoKSA9PiB7fTtcblxuY29uc3QgdG9GaW5pdGVOdW1iZXIgPSAodmFsdWUsIGRlZmF1bHRWYWx1ZSkgPT4ge1xuICB2YWx1ZSA9ICt2YWx1ZTtcbiAgcmV0dXJuIE51bWJlci5pc0Zpbml0ZSh2YWx1ZSkgPyB2YWx1ZSA6IGRlZmF1bHRWYWx1ZTtcbn07XG5cbmNvbnN0IEFMUEhBID0gJ2FiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6JztcblxuY29uc3QgRElHSVQgPSAnMDEyMzQ1Njc4OSc7XG5cbmNvbnN0IEFMUEhBQkVUID0ge1xuICBESUdJVCxcbiAgQUxQSEEsXG4gIEFMUEhBX0RJR0lUOiBBTFBIQSArIEFMUEhBLnRvVXBwZXJDYXNlKCkgKyBESUdJVFxufTtcblxuY29uc3QgZ2VuZXJhdGVTdHJpbmcgPSAoc2l6ZSA9IDE2LCBhbHBoYWJldCA9IEFMUEhBQkVULkFMUEhBX0RJR0lUKSA9PiB7XG4gIGxldCBzdHIgPSAnJztcbiAgY29uc3Qge2xlbmd0aH0gPSBhbHBoYWJldDtcbiAgd2hpbGUgKHNpemUtLSkge1xuICAgIHN0ciArPSBhbHBoYWJldFtNYXRoLnJhbmRvbSgpICogbGVuZ3RofDBdO1xuICB9XG5cbiAgcmV0dXJuIHN0cjtcbn07XG5cbi8qKlxuICogSWYgdGhlIHRoaW5nIGlzIGEgRm9ybURhdGEgb2JqZWN0LCByZXR1cm4gdHJ1ZSwgb3RoZXJ3aXNlIHJldHVybiBmYWxzZS5cbiAqXG4gKiBAcGFyYW0ge3Vua25vd259IHRoaW5nIC0gVGhlIHRoaW5nIHRvIGNoZWNrLlxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5mdW5jdGlvbiBpc1NwZWNDb21wbGlhbnRGb3JtKHRoaW5nKSB7XG4gIHJldHVybiAhISh0aGluZyAmJiBpc0Z1bmN0aW9uKHRoaW5nLmFwcGVuZCkgJiYgdGhpbmdbU3ltYm9sLnRvU3RyaW5nVGFnXSA9PT0gJ0Zvcm1EYXRhJyAmJiB0aGluZ1tTeW1ib2wuaXRlcmF0b3JdKTtcbn1cblxuY29uc3QgdG9KU09OT2JqZWN0ID0gKG9iaikgPT4ge1xuICBjb25zdCBzdGFjayA9IG5ldyBBcnJheSgxMCk7XG5cbiAgY29uc3QgdmlzaXQgPSAoc291cmNlLCBpKSA9PiB7XG5cbiAgICBpZiAoaXNPYmplY3Qoc291cmNlKSkge1xuICAgICAgaWYgKHN0YWNrLmluZGV4T2Yoc291cmNlKSA+PSAwKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYoISgndG9KU09OJyBpbiBzb3VyY2UpKSB7XG4gICAgICAgIHN0YWNrW2ldID0gc291cmNlO1xuICAgICAgICBjb25zdCB0YXJnZXQgPSBpc0FycmF5KHNvdXJjZSkgPyBbXSA6IHt9O1xuXG4gICAgICAgIGZvckVhY2goc291cmNlLCAodmFsdWUsIGtleSkgPT4ge1xuICAgICAgICAgIGNvbnN0IHJlZHVjZWRWYWx1ZSA9IHZpc2l0KHZhbHVlLCBpICsgMSk7XG4gICAgICAgICAgIWlzVW5kZWZpbmVkKHJlZHVjZWRWYWx1ZSkgJiYgKHRhcmdldFtrZXldID0gcmVkdWNlZFZhbHVlKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgc3RhY2tbaV0gPSB1bmRlZmluZWQ7XG5cbiAgICAgICAgcmV0dXJuIHRhcmdldDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gc291cmNlO1xuICB9O1xuXG4gIHJldHVybiB2aXNpdChvYmosIDApO1xufTtcblxuY29uc3QgaXNBc3luY0ZuID0ga2luZE9mVGVzdCgnQXN5bmNGdW5jdGlvbicpO1xuXG5jb25zdCBpc1RoZW5hYmxlID0gKHRoaW5nKSA9PlxuICB0aGluZyAmJiAoaXNPYmplY3QodGhpbmcpIHx8IGlzRnVuY3Rpb24odGhpbmcpKSAmJiBpc0Z1bmN0aW9uKHRoaW5nLnRoZW4pICYmIGlzRnVuY3Rpb24odGhpbmcuY2F0Y2gpO1xuXG5jb25zdCB1dGlscyQxID0ge1xuICBpc0FycmF5LFxuICBpc0FycmF5QnVmZmVyLFxuICBpc0J1ZmZlcixcbiAgaXNGb3JtRGF0YSxcbiAgaXNBcnJheUJ1ZmZlclZpZXcsXG4gIGlzU3RyaW5nLFxuICBpc051bWJlcixcbiAgaXNCb29sZWFuLFxuICBpc09iamVjdCxcbiAgaXNQbGFpbk9iamVjdCxcbiAgaXNVbmRlZmluZWQsXG4gIGlzRGF0ZSxcbiAgaXNGaWxlLFxuICBpc0Jsb2IsXG4gIGlzUmVnRXhwLFxuICBpc0Z1bmN0aW9uLFxuICBpc1N0cmVhbSxcbiAgaXNVUkxTZWFyY2hQYXJhbXMsXG4gIGlzVHlwZWRBcnJheSxcbiAgaXNGaWxlTGlzdCxcbiAgZm9yRWFjaCxcbiAgbWVyZ2UsXG4gIGV4dGVuZCxcbiAgdHJpbSxcbiAgc3RyaXBCT00sXG4gIGluaGVyaXRzLFxuICB0b0ZsYXRPYmplY3QsXG4gIGtpbmRPZixcbiAga2luZE9mVGVzdCxcbiAgZW5kc1dpdGgsXG4gIHRvQXJyYXksXG4gIGZvckVhY2hFbnRyeSxcbiAgbWF0Y2hBbGwsXG4gIGlzSFRNTEZvcm0sXG4gIGhhc093blByb3BlcnR5LFxuICBoYXNPd25Qcm9wOiBoYXNPd25Qcm9wZXJ0eSwgLy8gYW4gYWxpYXMgdG8gYXZvaWQgRVNMaW50IG5vLXByb3RvdHlwZS1idWlsdGlucyBkZXRlY3Rpb25cbiAgcmVkdWNlRGVzY3JpcHRvcnMsXG4gIGZyZWV6ZU1ldGhvZHMsXG4gIHRvT2JqZWN0U2V0LFxuICB0b0NhbWVsQ2FzZSxcbiAgbm9vcCxcbiAgdG9GaW5pdGVOdW1iZXIsXG4gIGZpbmRLZXksXG4gIGdsb2JhbDogX2dsb2JhbCxcbiAgaXNDb250ZXh0RGVmaW5lZCxcbiAgQUxQSEFCRVQsXG4gIGdlbmVyYXRlU3RyaW5nLFxuICBpc1NwZWNDb21wbGlhbnRGb3JtLFxuICB0b0pTT05PYmplY3QsXG4gIGlzQXN5bmNGbixcbiAgaXNUaGVuYWJsZVxufTtcblxuLyoqXG4gKiBDcmVhdGUgYW4gRXJyb3Igd2l0aCB0aGUgc3BlY2lmaWVkIG1lc3NhZ2UsIGNvbmZpZywgZXJyb3IgY29kZSwgcmVxdWVzdCBhbmQgcmVzcG9uc2UuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IG1lc3NhZ2UgVGhlIGVycm9yIG1lc3NhZ2UuXG4gKiBAcGFyYW0ge3N0cmluZ30gW2NvZGVdIFRoZSBlcnJvciBjb2RlIChmb3IgZXhhbXBsZSwgJ0VDT05OQUJPUlRFRCcpLlxuICogQHBhcmFtIHtPYmplY3R9IFtjb25maWddIFRoZSBjb25maWcuXG4gKiBAcGFyYW0ge09iamVjdH0gW3JlcXVlc3RdIFRoZSByZXF1ZXN0LlxuICogQHBhcmFtIHtPYmplY3R9IFtyZXNwb25zZV0gVGhlIHJlc3BvbnNlLlxuICpcbiAqIEByZXR1cm5zIHtFcnJvcn0gVGhlIGNyZWF0ZWQgZXJyb3IuXG4gKi9cbmZ1bmN0aW9uIEF4aW9zRXJyb3IobWVzc2FnZSwgY29kZSwgY29uZmlnLCByZXF1ZXN0LCByZXNwb25zZSkge1xuICBFcnJvci5jYWxsKHRoaXMpO1xuXG4gIGlmIChFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSkge1xuICAgIEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKHRoaXMsIHRoaXMuY29uc3RydWN0b3IpO1xuICB9IGVsc2Uge1xuICAgIHRoaXMuc3RhY2sgPSAobmV3IEVycm9yKCkpLnN0YWNrO1xuICB9XG5cbiAgdGhpcy5tZXNzYWdlID0gbWVzc2FnZTtcbiAgdGhpcy5uYW1lID0gJ0F4aW9zRXJyb3InO1xuICBjb2RlICYmICh0aGlzLmNvZGUgPSBjb2RlKTtcbiAgY29uZmlnICYmICh0aGlzLmNvbmZpZyA9IGNvbmZpZyk7XG4gIHJlcXVlc3QgJiYgKHRoaXMucmVxdWVzdCA9IHJlcXVlc3QpO1xuICByZXNwb25zZSAmJiAodGhpcy5yZXNwb25zZSA9IHJlc3BvbnNlKTtcbn1cblxudXRpbHMkMS5pbmhlcml0cyhBeGlvc0Vycm9yLCBFcnJvciwge1xuICB0b0pTT046IGZ1bmN0aW9uIHRvSlNPTigpIHtcbiAgICByZXR1cm4ge1xuICAgICAgLy8gU3RhbmRhcmRcbiAgICAgIG1lc3NhZ2U6IHRoaXMubWVzc2FnZSxcbiAgICAgIG5hbWU6IHRoaXMubmFtZSxcbiAgICAgIC8vIE1pY3Jvc29mdFxuICAgICAgZGVzY3JpcHRpb246IHRoaXMuZGVzY3JpcHRpb24sXG4gICAgICBudW1iZXI6IHRoaXMubnVtYmVyLFxuICAgICAgLy8gTW96aWxsYVxuICAgICAgZmlsZU5hbWU6IHRoaXMuZmlsZU5hbWUsXG4gICAgICBsaW5lTnVtYmVyOiB0aGlzLmxpbmVOdW1iZXIsXG4gICAgICBjb2x1bW5OdW1iZXI6IHRoaXMuY29sdW1uTnVtYmVyLFxuICAgICAgc3RhY2s6IHRoaXMuc3RhY2ssXG4gICAgICAvLyBBeGlvc1xuICAgICAgY29uZmlnOiB1dGlscyQxLnRvSlNPTk9iamVjdCh0aGlzLmNvbmZpZyksXG4gICAgICBjb2RlOiB0aGlzLmNvZGUsXG4gICAgICBzdGF0dXM6IHRoaXMucmVzcG9uc2UgJiYgdGhpcy5yZXNwb25zZS5zdGF0dXMgPyB0aGlzLnJlc3BvbnNlLnN0YXR1cyA6IG51bGxcbiAgICB9O1xuICB9XG59KTtcblxuY29uc3QgcHJvdG90eXBlJDEgPSBBeGlvc0Vycm9yLnByb3RvdHlwZTtcbmNvbnN0IGRlc2NyaXB0b3JzID0ge307XG5cbltcbiAgJ0VSUl9CQURfT1BUSU9OX1ZBTFVFJyxcbiAgJ0VSUl9CQURfT1BUSU9OJyxcbiAgJ0VDT05OQUJPUlRFRCcsXG4gICdFVElNRURPVVQnLFxuICAnRVJSX05FVFdPUksnLFxuICAnRVJSX0ZSX1RPT19NQU5ZX1JFRElSRUNUUycsXG4gICdFUlJfREVQUkVDQVRFRCcsXG4gICdFUlJfQkFEX1JFU1BPTlNFJyxcbiAgJ0VSUl9CQURfUkVRVUVTVCcsXG4gICdFUlJfQ0FOQ0VMRUQnLFxuICAnRVJSX05PVF9TVVBQT1JUJyxcbiAgJ0VSUl9JTlZBTElEX1VSTCdcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBmdW5jLW5hbWVzXG5dLmZvckVhY2goY29kZSA9PiB7XG4gIGRlc2NyaXB0b3JzW2NvZGVdID0ge3ZhbHVlOiBjb2RlfTtcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhBeGlvc0Vycm9yLCBkZXNjcmlwdG9ycyk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkocHJvdG90eXBlJDEsICdpc0F4aW9zRXJyb3InLCB7dmFsdWU6IHRydWV9KTtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGZ1bmMtbmFtZXNcbkF4aW9zRXJyb3IuZnJvbSA9IChlcnJvciwgY29kZSwgY29uZmlnLCByZXF1ZXN0LCByZXNwb25zZSwgY3VzdG9tUHJvcHMpID0+IHtcbiAgY29uc3QgYXhpb3NFcnJvciA9IE9iamVjdC5jcmVhdGUocHJvdG90eXBlJDEpO1xuXG4gIHV0aWxzJDEudG9GbGF0T2JqZWN0KGVycm9yLCBheGlvc0Vycm9yLCBmdW5jdGlvbiBmaWx0ZXIob2JqKSB7XG4gICAgcmV0dXJuIG9iaiAhPT0gRXJyb3IucHJvdG90eXBlO1xuICB9LCBwcm9wID0+IHtcbiAgICByZXR1cm4gcHJvcCAhPT0gJ2lzQXhpb3NFcnJvcic7XG4gIH0pO1xuXG4gIEF4aW9zRXJyb3IuY2FsbChheGlvc0Vycm9yLCBlcnJvci5tZXNzYWdlLCBjb2RlLCBjb25maWcsIHJlcXVlc3QsIHJlc3BvbnNlKTtcblxuICBheGlvc0Vycm9yLmNhdXNlID0gZXJyb3I7XG5cbiAgYXhpb3NFcnJvci5uYW1lID0gZXJyb3IubmFtZTtcblxuICBjdXN0b21Qcm9wcyAmJiBPYmplY3QuYXNzaWduKGF4aW9zRXJyb3IsIGN1c3RvbVByb3BzKTtcblxuICByZXR1cm4gYXhpb3NFcnJvcjtcbn07XG5cbi8qKlxuICogRGV0ZXJtaW5lcyBpZiB0aGUgZ2l2ZW4gdGhpbmcgaXMgYSBhcnJheSBvciBqcyBvYmplY3QuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHRoaW5nIC0gVGhlIG9iamVjdCBvciBhcnJheSB0byBiZSB2aXNpdGVkLlxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5mdW5jdGlvbiBpc1Zpc2l0YWJsZSh0aGluZykge1xuICByZXR1cm4gdXRpbHMkMS5pc1BsYWluT2JqZWN0KHRoaW5nKSB8fCB1dGlscyQxLmlzQXJyYXkodGhpbmcpO1xufVxuXG4vKipcbiAqIEl0IHJlbW92ZXMgdGhlIGJyYWNrZXRzIGZyb20gdGhlIGVuZCBvZiBhIHN0cmluZ1xuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgLSBUaGUga2V5IG9mIHRoZSBwYXJhbWV0ZXIuXG4gKlxuICogQHJldHVybnMge3N0cmluZ30gdGhlIGtleSB3aXRob3V0IHRoZSBicmFja2V0cy5cbiAqL1xuZnVuY3Rpb24gcmVtb3ZlQnJhY2tldHMoa2V5KSB7XG4gIHJldHVybiB1dGlscyQxLmVuZHNXaXRoKGtleSwgJ1tdJykgPyBrZXkuc2xpY2UoMCwgLTIpIDoga2V5O1xufVxuXG4vKipcbiAqIEl0IHRha2VzIGEgcGF0aCwgYSBrZXksIGFuZCBhIGJvb2xlYW4sIGFuZCByZXR1cm5zIGEgc3RyaW5nXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHBhdGggLSBUaGUgcGF0aCB0byB0aGUgY3VycmVudCBrZXkuXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IC0gVGhlIGtleSBvZiB0aGUgY3VycmVudCBvYmplY3QgYmVpbmcgaXRlcmF0ZWQgb3Zlci5cbiAqIEBwYXJhbSB7c3RyaW5nfSBkb3RzIC0gSWYgdHJ1ZSwgdGhlIGtleSB3aWxsIGJlIHJlbmRlcmVkIHdpdGggZG90cyBpbnN0ZWFkIG9mIGJyYWNrZXRzLlxuICpcbiAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSBwYXRoIHRvIHRoZSBjdXJyZW50IGtleS5cbiAqL1xuZnVuY3Rpb24gcmVuZGVyS2V5KHBhdGgsIGtleSwgZG90cykge1xuICBpZiAoIXBhdGgpIHJldHVybiBrZXk7XG4gIHJldHVybiBwYXRoLmNvbmNhdChrZXkpLm1hcChmdW5jdGlvbiBlYWNoKHRva2VuLCBpKSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXBhcmFtLXJlYXNzaWduXG4gICAgdG9rZW4gPSByZW1vdmVCcmFja2V0cyh0b2tlbik7XG4gICAgcmV0dXJuICFkb3RzICYmIGkgPyAnWycgKyB0b2tlbiArICddJyA6IHRva2VuO1xuICB9KS5qb2luKGRvdHMgPyAnLicgOiAnJyk7XG59XG5cbi8qKlxuICogSWYgdGhlIGFycmF5IGlzIGFuIGFycmF5IGFuZCBub25lIG9mIGl0cyBlbGVtZW50cyBhcmUgdmlzaXRhYmxlLCB0aGVuIGl0J3MgYSBmbGF0IGFycmF5LlxuICpcbiAqIEBwYXJhbSB7QXJyYXk8YW55Pn0gYXJyIC0gVGhlIGFycmF5IHRvIGNoZWNrXG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKi9cbmZ1bmN0aW9uIGlzRmxhdEFycmF5KGFycikge1xuICByZXR1cm4gdXRpbHMkMS5pc0FycmF5KGFycikgJiYgIWFyci5zb21lKGlzVmlzaXRhYmxlKTtcbn1cblxuY29uc3QgcHJlZGljYXRlcyA9IHV0aWxzJDEudG9GbGF0T2JqZWN0KHV0aWxzJDEsIHt9LCBudWxsLCBmdW5jdGlvbiBmaWx0ZXIocHJvcCkge1xuICByZXR1cm4gL15pc1tBLVpdLy50ZXN0KHByb3ApO1xufSk7XG5cbi8qKlxuICogQ29udmVydCBhIGRhdGEgb2JqZWN0IHRvIEZvcm1EYXRhXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IG9ialxuICogQHBhcmFtIHs/T2JqZWN0fSBbZm9ybURhdGFdXG4gKiBAcGFyYW0gez9PYmplY3R9IFtvcHRpb25zXVxuICogQHBhcmFtIHtGdW5jdGlvbn0gW29wdGlvbnMudmlzaXRvcl1cbiAqIEBwYXJhbSB7Qm9vbGVhbn0gW29wdGlvbnMubWV0YVRva2VucyA9IHRydWVdXG4gKiBAcGFyYW0ge0Jvb2xlYW59IFtvcHRpb25zLmRvdHMgPSBmYWxzZV1cbiAqIEBwYXJhbSB7P0Jvb2xlYW59IFtvcHRpb25zLmluZGV4ZXMgPSBmYWxzZV1cbiAqXG4gKiBAcmV0dXJucyB7T2JqZWN0fVxuICoqL1xuXG4vKipcbiAqIEl0IGNvbnZlcnRzIGFuIG9iamVjdCBpbnRvIGEgRm9ybURhdGEgb2JqZWN0XG4gKlxuICogQHBhcmFtIHtPYmplY3Q8YW55LCBhbnk+fSBvYmogLSBUaGUgb2JqZWN0IHRvIGNvbnZlcnQgdG8gZm9ybSBkYXRhLlxuICogQHBhcmFtIHtzdHJpbmd9IGZvcm1EYXRhIC0gVGhlIEZvcm1EYXRhIG9iamVjdCB0byBhcHBlbmQgdG8uXG4gKiBAcGFyYW0ge09iamVjdDxzdHJpbmcsIGFueT59IG9wdGlvbnNcbiAqXG4gKiBAcmV0dXJuc1xuICovXG5mdW5jdGlvbiB0b0Zvcm1EYXRhKG9iaiwgZm9ybURhdGEsIG9wdGlvbnMpIHtcbiAgaWYgKCF1dGlscyQxLmlzT2JqZWN0KG9iaikpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCd0YXJnZXQgbXVzdCBiZSBhbiBvYmplY3QnKTtcbiAgfVxuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuICBmb3JtRGF0YSA9IGZvcm1EYXRhIHx8IG5ldyAoRm9ybURhdGFfX2RlZmF1bHRbXCJkZWZhdWx0XCJdIHx8IEZvcm1EYXRhKSgpO1xuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuICBvcHRpb25zID0gdXRpbHMkMS50b0ZsYXRPYmplY3Qob3B0aW9ucywge1xuICAgIG1ldGFUb2tlbnM6IHRydWUsXG4gICAgZG90czogZmFsc2UsXG4gICAgaW5kZXhlczogZmFsc2VcbiAgfSwgZmFsc2UsIGZ1bmN0aW9uIGRlZmluZWQob3B0aW9uLCBzb3VyY2UpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tZXEtbnVsbCxlcWVxZXFcbiAgICByZXR1cm4gIXV0aWxzJDEuaXNVbmRlZmluZWQoc291cmNlW29wdGlvbl0pO1xuICB9KTtcblxuICBjb25zdCBtZXRhVG9rZW5zID0gb3B0aW9ucy5tZXRhVG9rZW5zO1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdXNlLWJlZm9yZS1kZWZpbmVcbiAgY29uc3QgdmlzaXRvciA9IG9wdGlvbnMudmlzaXRvciB8fCBkZWZhdWx0VmlzaXRvcjtcbiAgY29uc3QgZG90cyA9IG9wdGlvbnMuZG90cztcbiAgY29uc3QgaW5kZXhlcyA9IG9wdGlvbnMuaW5kZXhlcztcbiAgY29uc3QgX0Jsb2IgPSBvcHRpb25zLkJsb2IgfHwgdHlwZW9mIEJsb2IgIT09ICd1bmRlZmluZWQnICYmIEJsb2I7XG4gIGNvbnN0IHVzZUJsb2IgPSBfQmxvYiAmJiB1dGlscyQxLmlzU3BlY0NvbXBsaWFudEZvcm0oZm9ybURhdGEpO1xuXG4gIGlmICghdXRpbHMkMS5pc0Z1bmN0aW9uKHZpc2l0b3IpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcigndmlzaXRvciBtdXN0IGJlIGEgZnVuY3Rpb24nKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNvbnZlcnRWYWx1ZSh2YWx1ZSkge1xuICAgIGlmICh2YWx1ZSA9PT0gbnVsbCkgcmV0dXJuICcnO1xuXG4gICAgaWYgKHV0aWxzJDEuaXNEYXRlKHZhbHVlKSkge1xuICAgICAgcmV0dXJuIHZhbHVlLnRvSVNPU3RyaW5nKCk7XG4gICAgfVxuXG4gICAgaWYgKCF1c2VCbG9iICYmIHV0aWxzJDEuaXNCbG9iKHZhbHVlKSkge1xuICAgICAgdGhyb3cgbmV3IEF4aW9zRXJyb3IoJ0Jsb2IgaXMgbm90IHN1cHBvcnRlZC4gVXNlIGEgQnVmZmVyIGluc3RlYWQuJyk7XG4gICAgfVxuXG4gICAgaWYgKHV0aWxzJDEuaXNBcnJheUJ1ZmZlcih2YWx1ZSkgfHwgdXRpbHMkMS5pc1R5cGVkQXJyYXkodmFsdWUpKSB7XG4gICAgICByZXR1cm4gdXNlQmxvYiAmJiB0eXBlb2YgQmxvYiA9PT0gJ2Z1bmN0aW9uJyA/IG5ldyBCbG9iKFt2YWx1ZV0pIDogQnVmZmVyLmZyb20odmFsdWUpO1xuICAgIH1cblxuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWZhdWx0IHZpc2l0b3IuXG4gICAqXG4gICAqIEBwYXJhbSB7Kn0gdmFsdWVcbiAgICogQHBhcmFtIHtTdHJpbmd8TnVtYmVyfSBrZXlcbiAgICogQHBhcmFtIHtBcnJheTxTdHJpbmd8TnVtYmVyPn0gcGF0aFxuICAgKiBAdGhpcyB7Rm9ybURhdGF9XG4gICAqXG4gICAqIEByZXR1cm5zIHtib29sZWFufSByZXR1cm4gdHJ1ZSB0byB2aXNpdCB0aGUgZWFjaCBwcm9wIG9mIHRoZSB2YWx1ZSByZWN1cnNpdmVseVxuICAgKi9cbiAgZnVuY3Rpb24gZGVmYXVsdFZpc2l0b3IodmFsdWUsIGtleSwgcGF0aCkge1xuICAgIGxldCBhcnIgPSB2YWx1ZTtcblxuICAgIGlmICh2YWx1ZSAmJiAhcGF0aCAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnKSB7XG4gICAgICBpZiAodXRpbHMkMS5lbmRzV2l0aChrZXksICd7fScpKSB7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuICAgICAgICBrZXkgPSBtZXRhVG9rZW5zID8ga2V5IDoga2V5LnNsaWNlKDAsIC0yKTtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXBhcmFtLXJlYXNzaWduXG4gICAgICAgIHZhbHVlID0gSlNPTi5zdHJpbmdpZnkodmFsdWUpO1xuICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgKHV0aWxzJDEuaXNBcnJheSh2YWx1ZSkgJiYgaXNGbGF0QXJyYXkodmFsdWUpKSB8fFxuICAgICAgICAoKHV0aWxzJDEuaXNGaWxlTGlzdCh2YWx1ZSkgfHwgdXRpbHMkMS5lbmRzV2l0aChrZXksICdbXScpKSAmJiAoYXJyID0gdXRpbHMkMS50b0FycmF5KHZhbHVlKSlcbiAgICAgICAgKSkge1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcGFyYW0tcmVhc3NpZ25cbiAgICAgICAga2V5ID0gcmVtb3ZlQnJhY2tldHMoa2V5KTtcblxuICAgICAgICBhcnIuZm9yRWFjaChmdW5jdGlvbiBlYWNoKGVsLCBpbmRleCkge1xuICAgICAgICAgICEodXRpbHMkMS5pc1VuZGVmaW5lZChlbCkgfHwgZWwgPT09IG51bGwpICYmIGZvcm1EYXRhLmFwcGVuZChcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1uZXN0ZWQtdGVybmFyeVxuICAgICAgICAgICAgaW5kZXhlcyA9PT0gdHJ1ZSA/IHJlbmRlcktleShba2V5XSwgaW5kZXgsIGRvdHMpIDogKGluZGV4ZXMgPT09IG51bGwgPyBrZXkgOiBrZXkgKyAnW10nKSxcbiAgICAgICAgICAgIGNvbnZlcnRWYWx1ZShlbClcbiAgICAgICAgICApO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChpc1Zpc2l0YWJsZSh2YWx1ZSkpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGZvcm1EYXRhLmFwcGVuZChyZW5kZXJLZXkocGF0aCwga2V5LCBkb3RzKSwgY29udmVydFZhbHVlKHZhbHVlKSk7XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBjb25zdCBzdGFjayA9IFtdO1xuXG4gIGNvbnN0IGV4cG9zZWRIZWxwZXJzID0gT2JqZWN0LmFzc2lnbihwcmVkaWNhdGVzLCB7XG4gICAgZGVmYXVsdFZpc2l0b3IsXG4gICAgY29udmVydFZhbHVlLFxuICAgIGlzVmlzaXRhYmxlXG4gIH0pO1xuXG4gIGZ1bmN0aW9uIGJ1aWxkKHZhbHVlLCBwYXRoKSB7XG4gICAgaWYgKHV0aWxzJDEuaXNVbmRlZmluZWQodmFsdWUpKSByZXR1cm47XG5cbiAgICBpZiAoc3RhY2suaW5kZXhPZih2YWx1ZSkgIT09IC0xKSB7XG4gICAgICB0aHJvdyBFcnJvcignQ2lyY3VsYXIgcmVmZXJlbmNlIGRldGVjdGVkIGluICcgKyBwYXRoLmpvaW4oJy4nKSk7XG4gICAgfVxuXG4gICAgc3RhY2sucHVzaCh2YWx1ZSk7XG5cbiAgICB1dGlscyQxLmZvckVhY2godmFsdWUsIGZ1bmN0aW9uIGVhY2goZWwsIGtleSkge1xuICAgICAgY29uc3QgcmVzdWx0ID0gISh1dGlscyQxLmlzVW5kZWZpbmVkKGVsKSB8fCBlbCA9PT0gbnVsbCkgJiYgdmlzaXRvci5jYWxsKFxuICAgICAgICBmb3JtRGF0YSwgZWwsIHV0aWxzJDEuaXNTdHJpbmcoa2V5KSA/IGtleS50cmltKCkgOiBrZXksIHBhdGgsIGV4cG9zZWRIZWxwZXJzXG4gICAgICApO1xuXG4gICAgICBpZiAocmVzdWx0ID09PSB0cnVlKSB7XG4gICAgICAgIGJ1aWxkKGVsLCBwYXRoID8gcGF0aC5jb25jYXQoa2V5KSA6IFtrZXldKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHN0YWNrLnBvcCgpO1xuICB9XG5cbiAgaWYgKCF1dGlscyQxLmlzT2JqZWN0KG9iaikpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdkYXRhIG11c3QgYmUgYW4gb2JqZWN0Jyk7XG4gIH1cblxuICBidWlsZChvYmopO1xuXG4gIHJldHVybiBmb3JtRGF0YTtcbn1cblxuLyoqXG4gKiBJdCBlbmNvZGVzIGEgc3RyaW5nIGJ5IHJlcGxhY2luZyBhbGwgY2hhcmFjdGVycyB0aGF0IGFyZSBub3QgaW4gdGhlIHVucmVzZXJ2ZWQgc2V0IHdpdGhcbiAqIHRoZWlyIHBlcmNlbnQtZW5jb2RlZCBlcXVpdmFsZW50c1xuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBzdHIgLSBUaGUgc3RyaW5nIHRvIGVuY29kZS5cbiAqXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgZW5jb2RlZCBzdHJpbmcuXG4gKi9cbmZ1bmN0aW9uIGVuY29kZSQxKHN0cikge1xuICBjb25zdCBjaGFyTWFwID0ge1xuICAgICchJzogJyUyMScsXG4gICAgXCInXCI6ICclMjcnLFxuICAgICcoJzogJyUyOCcsXG4gICAgJyknOiAnJTI5JyxcbiAgICAnfic6ICclN0UnLFxuICAgICclMjAnOiAnKycsXG4gICAgJyUwMCc6ICdcXHgwMCdcbiAgfTtcbiAgcmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudChzdHIpLnJlcGxhY2UoL1shJygpfl18JTIwfCUwMC9nLCBmdW5jdGlvbiByZXBsYWNlcihtYXRjaCkge1xuICAgIHJldHVybiBjaGFyTWFwW21hdGNoXTtcbiAgfSk7XG59XG5cbi8qKlxuICogSXQgdGFrZXMgYSBwYXJhbXMgb2JqZWN0IGFuZCBjb252ZXJ0cyBpdCB0byBhIEZvcm1EYXRhIG9iamVjdFxuICpcbiAqIEBwYXJhbSB7T2JqZWN0PHN0cmluZywgYW55Pn0gcGFyYW1zIC0gVGhlIHBhcmFtZXRlcnMgdG8gYmUgY29udmVydGVkIHRvIGEgRm9ybURhdGEgb2JqZWN0LlxuICogQHBhcmFtIHtPYmplY3Q8c3RyaW5nLCBhbnk+fSBvcHRpb25zIC0gVGhlIG9wdGlvbnMgb2JqZWN0IHBhc3NlZCB0byB0aGUgQXhpb3MgY29uc3RydWN0b3IuXG4gKlxuICogQHJldHVybnMge3ZvaWR9XG4gKi9cbmZ1bmN0aW9uIEF4aW9zVVJMU2VhcmNoUGFyYW1zKHBhcmFtcywgb3B0aW9ucykge1xuICB0aGlzLl9wYWlycyA9IFtdO1xuXG4gIHBhcmFtcyAmJiB0b0Zvcm1EYXRhKHBhcmFtcywgdGhpcywgb3B0aW9ucyk7XG59XG5cbmNvbnN0IHByb3RvdHlwZSA9IEF4aW9zVVJMU2VhcmNoUGFyYW1zLnByb3RvdHlwZTtcblxucHJvdG90eXBlLmFwcGVuZCA9IGZ1bmN0aW9uIGFwcGVuZChuYW1lLCB2YWx1ZSkge1xuICB0aGlzLl9wYWlycy5wdXNoKFtuYW1lLCB2YWx1ZV0pO1xufTtcblxucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24gdG9TdHJpbmcoZW5jb2Rlcikge1xuICBjb25zdCBfZW5jb2RlID0gZW5jb2RlciA/IGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgcmV0dXJuIGVuY29kZXIuY2FsbCh0aGlzLCB2YWx1ZSwgZW5jb2RlJDEpO1xuICB9IDogZW5jb2RlJDE7XG5cbiAgcmV0dXJuIHRoaXMuX3BhaXJzLm1hcChmdW5jdGlvbiBlYWNoKHBhaXIpIHtcbiAgICByZXR1cm4gX2VuY29kZShwYWlyWzBdKSArICc9JyArIF9lbmNvZGUocGFpclsxXSk7XG4gIH0sICcnKS5qb2luKCcmJyk7XG59O1xuXG4vKipcbiAqIEl0IHJlcGxhY2VzIGFsbCBpbnN0YW5jZXMgb2YgdGhlIGNoYXJhY3RlcnMgYDpgLCBgJGAsIGAsYCwgYCtgLCBgW2AsIGFuZCBgXWAgd2l0aCB0aGVpclxuICogVVJJIGVuY29kZWQgY291bnRlcnBhcnRzXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbCBUaGUgdmFsdWUgdG8gYmUgZW5jb2RlZC5cbiAqXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgZW5jb2RlZCB2YWx1ZS5cbiAqL1xuZnVuY3Rpb24gZW5jb2RlKHZhbCkge1xuICByZXR1cm4gZW5jb2RlVVJJQ29tcG9uZW50KHZhbCkuXG4gICAgcmVwbGFjZSgvJTNBL2dpLCAnOicpLlxuICAgIHJlcGxhY2UoLyUyNC9nLCAnJCcpLlxuICAgIHJlcGxhY2UoLyUyQy9naSwgJywnKS5cbiAgICByZXBsYWNlKC8lMjAvZywgJysnKS5cbiAgICByZXBsYWNlKC8lNUIvZ2ksICdbJykuXG4gICAgcmVwbGFjZSgvJTVEL2dpLCAnXScpO1xufVxuXG4vKipcbiAqIEJ1aWxkIGEgVVJMIGJ5IGFwcGVuZGluZyBwYXJhbXMgdG8gdGhlIGVuZFxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSB1cmwgVGhlIGJhc2Ugb2YgdGhlIHVybCAoZS5nLiwgaHR0cDovL3d3dy5nb29nbGUuY29tKVxuICogQHBhcmFtIHtvYmplY3R9IFtwYXJhbXNdIFRoZSBwYXJhbXMgdG8gYmUgYXBwZW5kZWRcbiAqIEBwYXJhbSB7P29iamVjdH0gb3B0aW9uc1xuICpcbiAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSBmb3JtYXR0ZWQgdXJsXG4gKi9cbmZ1bmN0aW9uIGJ1aWxkVVJMKHVybCwgcGFyYW1zLCBvcHRpb25zKSB7XG4gIC8qZXNsaW50IG5vLXBhcmFtLXJlYXNzaWduOjAqL1xuICBpZiAoIXBhcmFtcykge1xuICAgIHJldHVybiB1cmw7XG4gIH1cbiAgXG4gIGNvbnN0IF9lbmNvZGUgPSBvcHRpb25zICYmIG9wdGlvbnMuZW5jb2RlIHx8IGVuY29kZTtcblxuICBjb25zdCBzZXJpYWxpemVGbiA9IG9wdGlvbnMgJiYgb3B0aW9ucy5zZXJpYWxpemU7XG5cbiAgbGV0IHNlcmlhbGl6ZWRQYXJhbXM7XG5cbiAgaWYgKHNlcmlhbGl6ZUZuKSB7XG4gICAgc2VyaWFsaXplZFBhcmFtcyA9IHNlcmlhbGl6ZUZuKHBhcmFtcywgb3B0aW9ucyk7XG4gIH0gZWxzZSB7XG4gICAgc2VyaWFsaXplZFBhcmFtcyA9IHV0aWxzJDEuaXNVUkxTZWFyY2hQYXJhbXMocGFyYW1zKSA/XG4gICAgICBwYXJhbXMudG9TdHJpbmcoKSA6XG4gICAgICBuZXcgQXhpb3NVUkxTZWFyY2hQYXJhbXMocGFyYW1zLCBvcHRpb25zKS50b1N0cmluZyhfZW5jb2RlKTtcbiAgfVxuXG4gIGlmIChzZXJpYWxpemVkUGFyYW1zKSB7XG4gICAgY29uc3QgaGFzaG1hcmtJbmRleCA9IHVybC5pbmRleE9mKFwiI1wiKTtcblxuICAgIGlmIChoYXNobWFya0luZGV4ICE9PSAtMSkge1xuICAgICAgdXJsID0gdXJsLnNsaWNlKDAsIGhhc2htYXJrSW5kZXgpO1xuICAgIH1cbiAgICB1cmwgKz0gKHVybC5pbmRleE9mKCc/JykgPT09IC0xID8gJz8nIDogJyYnKSArIHNlcmlhbGl6ZWRQYXJhbXM7XG4gIH1cblxuICByZXR1cm4gdXJsO1xufVxuXG5jbGFzcyBJbnRlcmNlcHRvck1hbmFnZXIge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLmhhbmRsZXJzID0gW107XG4gIH1cblxuICAvKipcbiAgICogQWRkIGEgbmV3IGludGVyY2VwdG9yIHRvIHRoZSBzdGFja1xuICAgKlxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdWxmaWxsZWQgVGhlIGZ1bmN0aW9uIHRvIGhhbmRsZSBgdGhlbmAgZm9yIGEgYFByb21pc2VgXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IHJlamVjdGVkIFRoZSBmdW5jdGlvbiB0byBoYW5kbGUgYHJlamVjdGAgZm9yIGEgYFByb21pc2VgXG4gICAqXG4gICAqIEByZXR1cm4ge051bWJlcn0gQW4gSUQgdXNlZCB0byByZW1vdmUgaW50ZXJjZXB0b3IgbGF0ZXJcbiAgICovXG4gIHVzZShmdWxmaWxsZWQsIHJlamVjdGVkLCBvcHRpb25zKSB7XG4gICAgdGhpcy5oYW5kbGVycy5wdXNoKHtcbiAgICAgIGZ1bGZpbGxlZCxcbiAgICAgIHJlamVjdGVkLFxuICAgICAgc3luY2hyb25vdXM6IG9wdGlvbnMgPyBvcHRpb25zLnN5bmNocm9ub3VzIDogZmFsc2UsXG4gICAgICBydW5XaGVuOiBvcHRpb25zID8gb3B0aW9ucy5ydW5XaGVuIDogbnVsbFxuICAgIH0pO1xuICAgIHJldHVybiB0aGlzLmhhbmRsZXJzLmxlbmd0aCAtIDE7XG4gIH1cblxuICAvKipcbiAgICogUmVtb3ZlIGFuIGludGVyY2VwdG9yIGZyb20gdGhlIHN0YWNrXG4gICAqXG4gICAqIEBwYXJhbSB7TnVtYmVyfSBpZCBUaGUgSUQgdGhhdCB3YXMgcmV0dXJuZWQgYnkgYHVzZWBcbiAgICpcbiAgICogQHJldHVybnMge0Jvb2xlYW59IGB0cnVlYCBpZiB0aGUgaW50ZXJjZXB0b3Igd2FzIHJlbW92ZWQsIGBmYWxzZWAgb3RoZXJ3aXNlXG4gICAqL1xuICBlamVjdChpZCkge1xuICAgIGlmICh0aGlzLmhhbmRsZXJzW2lkXSkge1xuICAgICAgdGhpcy5oYW5kbGVyc1tpZF0gPSBudWxsO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDbGVhciBhbGwgaW50ZXJjZXB0b3JzIGZyb20gdGhlIHN0YWNrXG4gICAqXG4gICAqIEByZXR1cm5zIHt2b2lkfVxuICAgKi9cbiAgY2xlYXIoKSB7XG4gICAgaWYgKHRoaXMuaGFuZGxlcnMpIHtcbiAgICAgIHRoaXMuaGFuZGxlcnMgPSBbXTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogSXRlcmF0ZSBvdmVyIGFsbCB0aGUgcmVnaXN0ZXJlZCBpbnRlcmNlcHRvcnNcbiAgICpcbiAgICogVGhpcyBtZXRob2QgaXMgcGFydGljdWxhcmx5IHVzZWZ1bCBmb3Igc2tpcHBpbmcgb3ZlciBhbnlcbiAgICogaW50ZXJjZXB0b3JzIHRoYXQgbWF5IGhhdmUgYmVjb21lIGBudWxsYCBjYWxsaW5nIGBlamVjdGAuXG4gICAqXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IGZuIFRoZSBmdW5jdGlvbiB0byBjYWxsIGZvciBlYWNoIGludGVyY2VwdG9yXG4gICAqXG4gICAqIEByZXR1cm5zIHt2b2lkfVxuICAgKi9cbiAgZm9yRWFjaChmbikge1xuICAgIHV0aWxzJDEuZm9yRWFjaCh0aGlzLmhhbmRsZXJzLCBmdW5jdGlvbiBmb3JFYWNoSGFuZGxlcihoKSB7XG4gICAgICBpZiAoaCAhPT0gbnVsbCkge1xuICAgICAgICBmbihoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxufVxuXG5jb25zdCBJbnRlcmNlcHRvck1hbmFnZXIkMSA9IEludGVyY2VwdG9yTWFuYWdlcjtcblxuY29uc3QgdHJhbnNpdGlvbmFsRGVmYXVsdHMgPSB7XG4gIHNpbGVudEpTT05QYXJzaW5nOiB0cnVlLFxuICBmb3JjZWRKU09OUGFyc2luZzogdHJ1ZSxcbiAgY2xhcmlmeVRpbWVvdXRFcnJvcjogZmFsc2Vcbn07XG5cbmNvbnN0IFVSTFNlYXJjaFBhcmFtcyA9IHVybF9fZGVmYXVsdFtcImRlZmF1bHRcIl0uVVJMU2VhcmNoUGFyYW1zO1xuXG5jb25zdCBwbGF0Zm9ybSQxID0ge1xuICBpc05vZGU6IHRydWUsXG4gIGNsYXNzZXM6IHtcbiAgICBVUkxTZWFyY2hQYXJhbXMsXG4gICAgRm9ybURhdGE6IEZvcm1EYXRhX19kZWZhdWx0W1wiZGVmYXVsdFwiXSxcbiAgICBCbG9iOiB0eXBlb2YgQmxvYiAhPT0gJ3VuZGVmaW5lZCcgJiYgQmxvYiB8fCBudWxsXG4gIH0sXG4gIHByb3RvY29sczogWyAnaHR0cCcsICdodHRwcycsICdmaWxlJywgJ2RhdGEnIF1cbn07XG5cbmNvbnN0IGhhc0Jyb3dzZXJFbnYgPSB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2YgZG9jdW1lbnQgIT09ICd1bmRlZmluZWQnO1xuXG4vKipcbiAqIERldGVybWluZSBpZiB3ZSdyZSBydW5uaW5nIGluIGEgc3RhbmRhcmQgYnJvd3NlciBlbnZpcm9ubWVudFxuICpcbiAqIFRoaXMgYWxsb3dzIGF4aW9zIHRvIHJ1biBpbiBhIHdlYiB3b3JrZXIsIGFuZCByZWFjdC1uYXRpdmUuXG4gKiBCb3RoIGVudmlyb25tZW50cyBzdXBwb3J0IFhNTEh0dHBSZXF1ZXN0LCBidXQgbm90IGZ1bGx5IHN0YW5kYXJkIGdsb2JhbHMuXG4gKlxuICogd2ViIHdvcmtlcnM6XG4gKiAgdHlwZW9mIHdpbmRvdyAtPiB1bmRlZmluZWRcbiAqICB0eXBlb2YgZG9jdW1lbnQgLT4gdW5kZWZpbmVkXG4gKlxuICogcmVhY3QtbmF0aXZlOlxuICogIG5hdmlnYXRvci5wcm9kdWN0IC0+ICdSZWFjdE5hdGl2ZSdcbiAqIG5hdGl2ZXNjcmlwdFxuICogIG5hdmlnYXRvci5wcm9kdWN0IC0+ICdOYXRpdmVTY3JpcHQnIG9yICdOUydcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqL1xuY29uc3QgaGFzU3RhbmRhcmRCcm93c2VyRW52ID0gKFxuICAocHJvZHVjdCkgPT4ge1xuICAgIHJldHVybiBoYXNCcm93c2VyRW52ICYmIFsnUmVhY3ROYXRpdmUnLCAnTmF0aXZlU2NyaXB0JywgJ05TJ10uaW5kZXhPZihwcm9kdWN0KSA8IDBcbiAgfSkodHlwZW9mIG5hdmlnYXRvciAhPT0gJ3VuZGVmaW5lZCcgJiYgbmF2aWdhdG9yLnByb2R1Y3QpO1xuXG4vKipcbiAqIERldGVybWluZSBpZiB3ZSdyZSBydW5uaW5nIGluIGEgc3RhbmRhcmQgYnJvd3NlciB3ZWJXb3JrZXIgZW52aXJvbm1lbnRcbiAqXG4gKiBBbHRob3VnaCB0aGUgYGlzU3RhbmRhcmRCcm93c2VyRW52YCBtZXRob2QgaW5kaWNhdGVzIHRoYXRcbiAqIGBhbGxvd3MgYXhpb3MgdG8gcnVuIGluIGEgd2ViIHdvcmtlcmAsIHRoZSBXZWJXb3JrZXIgd2lsbCBzdGlsbCBiZVxuICogZmlsdGVyZWQgb3V0IGR1ZSB0byBpdHMganVkZ21lbnQgc3RhbmRhcmRcbiAqIGB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2YgZG9jdW1lbnQgIT09ICd1bmRlZmluZWQnYC5cbiAqIFRoaXMgbGVhZHMgdG8gYSBwcm9ibGVtIHdoZW4gYXhpb3MgcG9zdCBgRm9ybURhdGFgIGluIHdlYldvcmtlclxuICovXG5jb25zdCBoYXNTdGFuZGFyZEJyb3dzZXJXZWJXb3JrZXJFbnYgPSAoKCkgPT4ge1xuICByZXR1cm4gKFxuICAgIHR5cGVvZiBXb3JrZXJHbG9iYWxTY29wZSAhPT0gJ3VuZGVmaW5lZCcgJiZcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW5kZWZcbiAgICBzZWxmIGluc3RhbmNlb2YgV29ya2VyR2xvYmFsU2NvcGUgJiZcbiAgICB0eXBlb2Ygc2VsZi5pbXBvcnRTY3JpcHRzID09PSAnZnVuY3Rpb24nXG4gICk7XG59KSgpO1xuXG5jb25zdCB1dGlscyA9IC8qI19fUFVSRV9fKi9PYmplY3QuZnJlZXplKHtcbiAgX19wcm90b19fOiBudWxsLFxuICBoYXNCcm93c2VyRW52OiBoYXNCcm93c2VyRW52LFxuICBoYXNTdGFuZGFyZEJyb3dzZXJXZWJXb3JrZXJFbnY6IGhhc1N0YW5kYXJkQnJvd3NlcldlYldvcmtlckVudixcbiAgaGFzU3RhbmRhcmRCcm93c2VyRW52OiBoYXNTdGFuZGFyZEJyb3dzZXJFbnZcbn0pO1xuXG5jb25zdCBwbGF0Zm9ybSA9IHtcbiAgLi4udXRpbHMsXG4gIC4uLnBsYXRmb3JtJDFcbn07XG5cbmZ1bmN0aW9uIHRvVVJMRW5jb2RlZEZvcm0oZGF0YSwgb3B0aW9ucykge1xuICByZXR1cm4gdG9Gb3JtRGF0YShkYXRhLCBuZXcgcGxhdGZvcm0uY2xhc3Nlcy5VUkxTZWFyY2hQYXJhbXMoKSwgT2JqZWN0LmFzc2lnbih7XG4gICAgdmlzaXRvcjogZnVuY3Rpb24odmFsdWUsIGtleSwgcGF0aCwgaGVscGVycykge1xuICAgICAgaWYgKHBsYXRmb3JtLmlzTm9kZSAmJiB1dGlscyQxLmlzQnVmZmVyKHZhbHVlKSkge1xuICAgICAgICB0aGlzLmFwcGVuZChrZXksIHZhbHVlLnRvU3RyaW5nKCdiYXNlNjQnKSk7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGhlbHBlcnMuZGVmYXVsdFZpc2l0b3IuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICB9XG4gIH0sIG9wdGlvbnMpKTtcbn1cblxuLyoqXG4gKiBJdCB0YWtlcyBhIHN0cmluZyBsaWtlIGBmb29beF1beV1bel1gIGFuZCByZXR1cm5zIGFuIGFycmF5IGxpa2UgYFsnZm9vJywgJ3gnLCAneScsICd6J11cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gbmFtZSAtIFRoZSBuYW1lIG9mIHRoZSBwcm9wZXJ0eSB0byBnZXQuXG4gKlxuICogQHJldHVybnMgQW4gYXJyYXkgb2Ygc3RyaW5ncy5cbiAqL1xuZnVuY3Rpb24gcGFyc2VQcm9wUGF0aChuYW1lKSB7XG4gIC8vIGZvb1t4XVt5XVt6XVxuICAvLyBmb28ueC55LnpcbiAgLy8gZm9vLXgteS16XG4gIC8vIGZvbyB4IHkgelxuICByZXR1cm4gdXRpbHMkMS5tYXRjaEFsbCgvXFx3K3xcXFsoXFx3KildL2csIG5hbWUpLm1hcChtYXRjaCA9PiB7XG4gICAgcmV0dXJuIG1hdGNoWzBdID09PSAnW10nID8gJycgOiBtYXRjaFsxXSB8fCBtYXRjaFswXTtcbiAgfSk7XG59XG5cbi8qKlxuICogQ29udmVydCBhbiBhcnJheSB0byBhbiBvYmplY3QuXG4gKlxuICogQHBhcmFtIHtBcnJheTxhbnk+fSBhcnIgLSBUaGUgYXJyYXkgdG8gY29udmVydCB0byBhbiBvYmplY3QuXG4gKlxuICogQHJldHVybnMgQW4gb2JqZWN0IHdpdGggdGhlIHNhbWUga2V5cyBhbmQgdmFsdWVzIGFzIHRoZSBhcnJheS5cbiAqL1xuZnVuY3Rpb24gYXJyYXlUb09iamVjdChhcnIpIHtcbiAgY29uc3Qgb2JqID0ge307XG4gIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhhcnIpO1xuICBsZXQgaTtcbiAgY29uc3QgbGVuID0ga2V5cy5sZW5ndGg7XG4gIGxldCBrZXk7XG4gIGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykge1xuICAgIGtleSA9IGtleXNbaV07XG4gICAgb2JqW2tleV0gPSBhcnJba2V5XTtcbiAgfVxuICByZXR1cm4gb2JqO1xufVxuXG4vKipcbiAqIEl0IHRha2VzIGEgRm9ybURhdGEgb2JqZWN0IGFuZCByZXR1cm5zIGEgSmF2YVNjcmlwdCBvYmplY3RcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gZm9ybURhdGEgVGhlIEZvcm1EYXRhIG9iamVjdCB0byBjb252ZXJ0IHRvIEpTT04uXG4gKlxuICogQHJldHVybnMge09iamVjdDxzdHJpbmcsIGFueT4gfCBudWxsfSBUaGUgY29udmVydGVkIG9iamVjdC5cbiAqL1xuZnVuY3Rpb24gZm9ybURhdGFUb0pTT04oZm9ybURhdGEpIHtcbiAgZnVuY3Rpb24gYnVpbGRQYXRoKHBhdGgsIHZhbHVlLCB0YXJnZXQsIGluZGV4KSB7XG4gICAgbGV0IG5hbWUgPSBwYXRoW2luZGV4KytdO1xuICAgIGNvbnN0IGlzTnVtZXJpY0tleSA9IE51bWJlci5pc0Zpbml0ZSgrbmFtZSk7XG4gICAgY29uc3QgaXNMYXN0ID0gaW5kZXggPj0gcGF0aC5sZW5ndGg7XG4gICAgbmFtZSA9ICFuYW1lICYmIHV0aWxzJDEuaXNBcnJheSh0YXJnZXQpID8gdGFyZ2V0Lmxlbmd0aCA6IG5hbWU7XG5cbiAgICBpZiAoaXNMYXN0KSB7XG4gICAgICBpZiAodXRpbHMkMS5oYXNPd25Qcm9wKHRhcmdldCwgbmFtZSkpIHtcbiAgICAgICAgdGFyZ2V0W25hbWVdID0gW3RhcmdldFtuYW1lXSwgdmFsdWVdO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGFyZ2V0W25hbWVdID0gdmFsdWU7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiAhaXNOdW1lcmljS2V5O1xuICAgIH1cblxuICAgIGlmICghdGFyZ2V0W25hbWVdIHx8ICF1dGlscyQxLmlzT2JqZWN0KHRhcmdldFtuYW1lXSkpIHtcbiAgICAgIHRhcmdldFtuYW1lXSA9IFtdO1xuICAgIH1cblxuICAgIGNvbnN0IHJlc3VsdCA9IGJ1aWxkUGF0aChwYXRoLCB2YWx1ZSwgdGFyZ2V0W25hbWVdLCBpbmRleCk7XG5cbiAgICBpZiAocmVzdWx0ICYmIHV0aWxzJDEuaXNBcnJheSh0YXJnZXRbbmFtZV0pKSB7XG4gICAgICB0YXJnZXRbbmFtZV0gPSBhcnJheVRvT2JqZWN0KHRhcmdldFtuYW1lXSk7XG4gICAgfVxuXG4gICAgcmV0dXJuICFpc051bWVyaWNLZXk7XG4gIH1cblxuICBpZiAodXRpbHMkMS5pc0Zvcm1EYXRhKGZvcm1EYXRhKSAmJiB1dGlscyQxLmlzRnVuY3Rpb24oZm9ybURhdGEuZW50cmllcykpIHtcbiAgICBjb25zdCBvYmogPSB7fTtcblxuICAgIHV0aWxzJDEuZm9yRWFjaEVudHJ5KGZvcm1EYXRhLCAobmFtZSwgdmFsdWUpID0+IHtcbiAgICAgIGJ1aWxkUGF0aChwYXJzZVByb3BQYXRoKG5hbWUpLCB2YWx1ZSwgb2JqLCAwKTtcbiAgICB9KTtcblxuICAgIHJldHVybiBvYmo7XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn1cblxuLyoqXG4gKiBJdCB0YWtlcyBhIHN0cmluZywgdHJpZXMgdG8gcGFyc2UgaXQsIGFuZCBpZiBpdCBmYWlscywgaXQgcmV0dXJucyB0aGUgc3RyaW5naWZpZWQgdmVyc2lvblxuICogb2YgdGhlIGlucHV0XG4gKlxuICogQHBhcmFtIHthbnl9IHJhd1ZhbHVlIC0gVGhlIHZhbHVlIHRvIGJlIHN0cmluZ2lmaWVkLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gcGFyc2VyIC0gQSBmdW5jdGlvbiB0aGF0IHBhcnNlcyBhIHN0cmluZyBpbnRvIGEgSmF2YVNjcmlwdCBvYmplY3QuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBlbmNvZGVyIC0gQSBmdW5jdGlvbiB0aGF0IHRha2VzIGEgdmFsdWUgYW5kIHJldHVybnMgYSBzdHJpbmcuXG4gKlxuICogQHJldHVybnMge3N0cmluZ30gQSBzdHJpbmdpZmllZCB2ZXJzaW9uIG9mIHRoZSByYXdWYWx1ZS5cbiAqL1xuZnVuY3Rpb24gc3RyaW5naWZ5U2FmZWx5KHJhd1ZhbHVlLCBwYXJzZXIsIGVuY29kZXIpIHtcbiAgaWYgKHV0aWxzJDEuaXNTdHJpbmcocmF3VmFsdWUpKSB7XG4gICAgdHJ5IHtcbiAgICAgIChwYXJzZXIgfHwgSlNPTi5wYXJzZSkocmF3VmFsdWUpO1xuICAgICAgcmV0dXJuIHV0aWxzJDEudHJpbShyYXdWYWx1ZSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgaWYgKGUubmFtZSAhPT0gJ1N5bnRheEVycm9yJykge1xuICAgICAgICB0aHJvdyBlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiAoZW5jb2RlciB8fCBKU09OLnN0cmluZ2lmeSkocmF3VmFsdWUpO1xufVxuXG5jb25zdCBkZWZhdWx0cyA9IHtcblxuICB0cmFuc2l0aW9uYWw6IHRyYW5zaXRpb25hbERlZmF1bHRzLFxuXG4gIGFkYXB0ZXI6IFsneGhyJywgJ2h0dHAnXSxcblxuICB0cmFuc2Zvcm1SZXF1ZXN0OiBbZnVuY3Rpb24gdHJhbnNmb3JtUmVxdWVzdChkYXRhLCBoZWFkZXJzKSB7XG4gICAgY29uc3QgY29udGVudFR5cGUgPSBoZWFkZXJzLmdldENvbnRlbnRUeXBlKCkgfHwgJyc7XG4gICAgY29uc3QgaGFzSlNPTkNvbnRlbnRUeXBlID0gY29udGVudFR5cGUuaW5kZXhPZignYXBwbGljYXRpb24vanNvbicpID4gLTE7XG4gICAgY29uc3QgaXNPYmplY3RQYXlsb2FkID0gdXRpbHMkMS5pc09iamVjdChkYXRhKTtcblxuICAgIGlmIChpc09iamVjdFBheWxvYWQgJiYgdXRpbHMkMS5pc0hUTUxGb3JtKGRhdGEpKSB7XG4gICAgICBkYXRhID0gbmV3IEZvcm1EYXRhKGRhdGEpO1xuICAgIH1cblxuICAgIGNvbnN0IGlzRm9ybURhdGEgPSB1dGlscyQxLmlzRm9ybURhdGEoZGF0YSk7XG5cbiAgICBpZiAoaXNGb3JtRGF0YSkge1xuICAgICAgaWYgKCFoYXNKU09OQ29udGVudFR5cGUpIHtcbiAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgICB9XG4gICAgICByZXR1cm4gaGFzSlNPTkNvbnRlbnRUeXBlID8gSlNPTi5zdHJpbmdpZnkoZm9ybURhdGFUb0pTT04oZGF0YSkpIDogZGF0YTtcbiAgICB9XG5cbiAgICBpZiAodXRpbHMkMS5pc0FycmF5QnVmZmVyKGRhdGEpIHx8XG4gICAgICB1dGlscyQxLmlzQnVmZmVyKGRhdGEpIHx8XG4gICAgICB1dGlscyQxLmlzU3RyZWFtKGRhdGEpIHx8XG4gICAgICB1dGlscyQxLmlzRmlsZShkYXRhKSB8fFxuICAgICAgdXRpbHMkMS5pc0Jsb2IoZGF0YSlcbiAgICApIHtcbiAgICAgIHJldHVybiBkYXRhO1xuICAgIH1cbiAgICBpZiAodXRpbHMkMS5pc0FycmF5QnVmZmVyVmlldyhkYXRhKSkge1xuICAgICAgcmV0dXJuIGRhdGEuYnVmZmVyO1xuICAgIH1cbiAgICBpZiAodXRpbHMkMS5pc1VSTFNlYXJjaFBhcmFtcyhkYXRhKSkge1xuICAgICAgaGVhZGVycy5zZXRDb250ZW50VHlwZSgnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkO2NoYXJzZXQ9dXRmLTgnLCBmYWxzZSk7XG4gICAgICByZXR1cm4gZGF0YS50b1N0cmluZygpO1xuICAgIH1cblxuICAgIGxldCBpc0ZpbGVMaXN0O1xuXG4gICAgaWYgKGlzT2JqZWN0UGF5bG9hZCkge1xuICAgICAgaWYgKGNvbnRlbnRUeXBlLmluZGV4T2YoJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCcpID4gLTEpIHtcbiAgICAgICAgcmV0dXJuIHRvVVJMRW5jb2RlZEZvcm0oZGF0YSwgdGhpcy5mb3JtU2VyaWFsaXplcikudG9TdHJpbmcoKTtcbiAgICAgIH1cblxuICAgICAgaWYgKChpc0ZpbGVMaXN0ID0gdXRpbHMkMS5pc0ZpbGVMaXN0KGRhdGEpKSB8fCBjb250ZW50VHlwZS5pbmRleE9mKCdtdWx0aXBhcnQvZm9ybS1kYXRhJykgPiAtMSkge1xuICAgICAgICBjb25zdCBfRm9ybURhdGEgPSB0aGlzLmVudiAmJiB0aGlzLmVudi5Gb3JtRGF0YTtcblxuICAgICAgICByZXR1cm4gdG9Gb3JtRGF0YShcbiAgICAgICAgICBpc0ZpbGVMaXN0ID8geydmaWxlc1tdJzogZGF0YX0gOiBkYXRhLFxuICAgICAgICAgIF9Gb3JtRGF0YSAmJiBuZXcgX0Zvcm1EYXRhKCksXG4gICAgICAgICAgdGhpcy5mb3JtU2VyaWFsaXplclxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChpc09iamVjdFBheWxvYWQgfHwgaGFzSlNPTkNvbnRlbnRUeXBlICkge1xuICAgICAgaGVhZGVycy5zZXRDb250ZW50VHlwZSgnYXBwbGljYXRpb24vanNvbicsIGZhbHNlKTtcbiAgICAgIHJldHVybiBzdHJpbmdpZnlTYWZlbHkoZGF0YSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGRhdGE7XG4gIH1dLFxuXG4gIHRyYW5zZm9ybVJlc3BvbnNlOiBbZnVuY3Rpb24gdHJhbnNmb3JtUmVzcG9uc2UoZGF0YSkge1xuICAgIGNvbnN0IHRyYW5zaXRpb25hbCA9IHRoaXMudHJhbnNpdGlvbmFsIHx8IGRlZmF1bHRzLnRyYW5zaXRpb25hbDtcbiAgICBjb25zdCBmb3JjZWRKU09OUGFyc2luZyA9IHRyYW5zaXRpb25hbCAmJiB0cmFuc2l0aW9uYWwuZm9yY2VkSlNPTlBhcnNpbmc7XG4gICAgY29uc3QgSlNPTlJlcXVlc3RlZCA9IHRoaXMucmVzcG9uc2VUeXBlID09PSAnanNvbic7XG5cbiAgICBpZiAoZGF0YSAmJiB1dGlscyQxLmlzU3RyaW5nKGRhdGEpICYmICgoZm9yY2VkSlNPTlBhcnNpbmcgJiYgIXRoaXMucmVzcG9uc2VUeXBlKSB8fCBKU09OUmVxdWVzdGVkKSkge1xuICAgICAgY29uc3Qgc2lsZW50SlNPTlBhcnNpbmcgPSB0cmFuc2l0aW9uYWwgJiYgdHJhbnNpdGlvbmFsLnNpbGVudEpTT05QYXJzaW5nO1xuICAgICAgY29uc3Qgc3RyaWN0SlNPTlBhcnNpbmcgPSAhc2lsZW50SlNPTlBhcnNpbmcgJiYgSlNPTlJlcXVlc3RlZDtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIEpTT04ucGFyc2UoZGF0YSk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGlmIChzdHJpY3RKU09OUGFyc2luZykge1xuICAgICAgICAgIGlmIChlLm5hbWUgPT09ICdTeW50YXhFcnJvcicpIHtcbiAgICAgICAgICAgIHRocm93IEF4aW9zRXJyb3IuZnJvbShlLCBBeGlvc0Vycm9yLkVSUl9CQURfUkVTUE9OU0UsIHRoaXMsIG51bGwsIHRoaXMucmVzcG9uc2UpO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGRhdGE7XG4gIH1dLFxuXG4gIC8qKlxuICAgKiBBIHRpbWVvdXQgaW4gbWlsbGlzZWNvbmRzIHRvIGFib3J0IGEgcmVxdWVzdC4gSWYgc2V0IHRvIDAgKGRlZmF1bHQpIGFcbiAgICogdGltZW91dCBpcyBub3QgY3JlYXRlZC5cbiAgICovXG4gIHRpbWVvdXQ6IDAsXG5cbiAgeHNyZkNvb2tpZU5hbWU6ICdYU1JGLVRPS0VOJyxcbiAgeHNyZkhlYWRlck5hbWU6ICdYLVhTUkYtVE9LRU4nLFxuXG4gIG1heENvbnRlbnRMZW5ndGg6IC0xLFxuICBtYXhCb2R5TGVuZ3RoOiAtMSxcblxuICBlbnY6IHtcbiAgICBGb3JtRGF0YTogcGxhdGZvcm0uY2xhc3Nlcy5Gb3JtRGF0YSxcbiAgICBCbG9iOiBwbGF0Zm9ybS5jbGFzc2VzLkJsb2JcbiAgfSxcblxuICB2YWxpZGF0ZVN0YXR1czogZnVuY3Rpb24gdmFsaWRhdGVTdGF0dXMoc3RhdHVzKSB7XG4gICAgcmV0dXJuIHN0YXR1cyA+PSAyMDAgJiYgc3RhdHVzIDwgMzAwO1xuICB9LFxuXG4gIGhlYWRlcnM6IHtcbiAgICBjb21tb246IHtcbiAgICAgICdBY2NlcHQnOiAnYXBwbGljYXRpb24vanNvbiwgdGV4dC9wbGFpbiwgKi8qJyxcbiAgICAgICdDb250ZW50LVR5cGUnOiB1bmRlZmluZWRcbiAgICB9XG4gIH1cbn07XG5cbnV0aWxzJDEuZm9yRWFjaChbJ2RlbGV0ZScsICdnZXQnLCAnaGVhZCcsICdwb3N0JywgJ3B1dCcsICdwYXRjaCddLCAobWV0aG9kKSA9PiB7XG4gIGRlZmF1bHRzLmhlYWRlcnNbbWV0aG9kXSA9IHt9O1xufSk7XG5cbmNvbnN0IGRlZmF1bHRzJDEgPSBkZWZhdWx0cztcblxuLy8gUmF3QXhpb3NIZWFkZXJzIHdob3NlIGR1cGxpY2F0ZXMgYXJlIGlnbm9yZWQgYnkgbm9kZVxuLy8gYy5mLiBodHRwczovL25vZGVqcy5vcmcvYXBpL2h0dHAuaHRtbCNodHRwX21lc3NhZ2VfaGVhZGVyc1xuY29uc3QgaWdub3JlRHVwbGljYXRlT2YgPSB1dGlscyQxLnRvT2JqZWN0U2V0KFtcbiAgJ2FnZScsICdhdXRob3JpemF0aW9uJywgJ2NvbnRlbnQtbGVuZ3RoJywgJ2NvbnRlbnQtdHlwZScsICdldGFnJyxcbiAgJ2V4cGlyZXMnLCAnZnJvbScsICdob3N0JywgJ2lmLW1vZGlmaWVkLXNpbmNlJywgJ2lmLXVubW9kaWZpZWQtc2luY2UnLFxuICAnbGFzdC1tb2RpZmllZCcsICdsb2NhdGlvbicsICdtYXgtZm9yd2FyZHMnLCAncHJveHktYXV0aG9yaXphdGlvbicsXG4gICdyZWZlcmVyJywgJ3JldHJ5LWFmdGVyJywgJ3VzZXItYWdlbnQnXG5dKTtcblxuLyoqXG4gKiBQYXJzZSBoZWFkZXJzIGludG8gYW4gb2JqZWN0XG4gKlxuICogYGBgXG4gKiBEYXRlOiBXZWQsIDI3IEF1ZyAyMDE0IDA4OjU4OjQ5IEdNVFxuICogQ29udGVudC1UeXBlOiBhcHBsaWNhdGlvbi9qc29uXG4gKiBDb25uZWN0aW9uOiBrZWVwLWFsaXZlXG4gKiBUcmFuc2Zlci1FbmNvZGluZzogY2h1bmtlZFxuICogYGBgXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IHJhd0hlYWRlcnMgSGVhZGVycyBuZWVkaW5nIHRvIGJlIHBhcnNlZFxuICpcbiAqIEByZXR1cm5zIHtPYmplY3R9IEhlYWRlcnMgcGFyc2VkIGludG8gYW4gb2JqZWN0XG4gKi9cbmNvbnN0IHBhcnNlSGVhZGVycyA9IHJhd0hlYWRlcnMgPT4ge1xuICBjb25zdCBwYXJzZWQgPSB7fTtcbiAgbGV0IGtleTtcbiAgbGV0IHZhbDtcbiAgbGV0IGk7XG5cbiAgcmF3SGVhZGVycyAmJiByYXdIZWFkZXJzLnNwbGl0KCdcXG4nKS5mb3JFYWNoKGZ1bmN0aW9uIHBhcnNlcihsaW5lKSB7XG4gICAgaSA9IGxpbmUuaW5kZXhPZignOicpO1xuICAgIGtleSA9IGxpbmUuc3Vic3RyaW5nKDAsIGkpLnRyaW0oKS50b0xvd2VyQ2FzZSgpO1xuICAgIHZhbCA9IGxpbmUuc3Vic3RyaW5nKGkgKyAxKS50cmltKCk7XG5cbiAgICBpZiAoIWtleSB8fCAocGFyc2VkW2tleV0gJiYgaWdub3JlRHVwbGljYXRlT2Zba2V5XSkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoa2V5ID09PSAnc2V0LWNvb2tpZScpIHtcbiAgICAgIGlmIChwYXJzZWRba2V5XSkge1xuICAgICAgICBwYXJzZWRba2V5XS5wdXNoKHZhbCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwYXJzZWRba2V5XSA9IFt2YWxdO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBwYXJzZWRba2V5XSA9IHBhcnNlZFtrZXldID8gcGFyc2VkW2tleV0gKyAnLCAnICsgdmFsIDogdmFsO1xuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIHBhcnNlZDtcbn07XG5cbmNvbnN0ICRpbnRlcm5hbHMgPSBTeW1ib2woJ2ludGVybmFscycpO1xuXG5mdW5jdGlvbiBub3JtYWxpemVIZWFkZXIoaGVhZGVyKSB7XG4gIHJldHVybiBoZWFkZXIgJiYgU3RyaW5nKGhlYWRlcikudHJpbSgpLnRvTG93ZXJDYXNlKCk7XG59XG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZVZhbHVlKHZhbHVlKSB7XG4gIGlmICh2YWx1ZSA9PT0gZmFsc2UgfHwgdmFsdWUgPT0gbnVsbCkge1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuXG4gIHJldHVybiB1dGlscyQxLmlzQXJyYXkodmFsdWUpID8gdmFsdWUubWFwKG5vcm1hbGl6ZVZhbHVlKSA6IFN0cmluZyh2YWx1ZSk7XG59XG5cbmZ1bmN0aW9uIHBhcnNlVG9rZW5zKHN0cikge1xuICBjb25zdCB0b2tlbnMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICBjb25zdCB0b2tlbnNSRSA9IC8oW15cXHMsOz1dKylcXHMqKD86PVxccyooW14sO10rKSk/L2c7XG4gIGxldCBtYXRjaDtcblxuICB3aGlsZSAoKG1hdGNoID0gdG9rZW5zUkUuZXhlYyhzdHIpKSkge1xuICAgIHRva2Vuc1ttYXRjaFsxXV0gPSBtYXRjaFsyXTtcbiAgfVxuXG4gIHJldHVybiB0b2tlbnM7XG59XG5cbmNvbnN0IGlzVmFsaWRIZWFkZXJOYW1lID0gKHN0cikgPT4gL15bLV9hLXpBLVowLTleYHx+LCEjJCUmJyorLl0rJC8udGVzdChzdHIudHJpbSgpKTtcblxuZnVuY3Rpb24gbWF0Y2hIZWFkZXJWYWx1ZShjb250ZXh0LCB2YWx1ZSwgaGVhZGVyLCBmaWx0ZXIsIGlzSGVhZGVyTmFtZUZpbHRlcikge1xuICBpZiAodXRpbHMkMS5pc0Z1bmN0aW9uKGZpbHRlcikpIHtcbiAgICByZXR1cm4gZmlsdGVyLmNhbGwodGhpcywgdmFsdWUsIGhlYWRlcik7XG4gIH1cblxuICBpZiAoaXNIZWFkZXJOYW1lRmlsdGVyKSB7XG4gICAgdmFsdWUgPSBoZWFkZXI7XG4gIH1cblxuICBpZiAoIXV0aWxzJDEuaXNTdHJpbmcodmFsdWUpKSByZXR1cm47XG5cbiAgaWYgKHV0aWxzJDEuaXNTdHJpbmcoZmlsdGVyKSkge1xuICAgIHJldHVybiB2YWx1ZS5pbmRleE9mKGZpbHRlcikgIT09IC0xO1xuICB9XG5cbiAgaWYgKHV0aWxzJDEuaXNSZWdFeHAoZmlsdGVyKSkge1xuICAgIHJldHVybiBmaWx0ZXIudGVzdCh2YWx1ZSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gZm9ybWF0SGVhZGVyKGhlYWRlcikge1xuICByZXR1cm4gaGVhZGVyLnRyaW0oKVxuICAgIC50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoLyhbYS16XFxkXSkoXFx3KikvZywgKHcsIGNoYXIsIHN0cikgPT4ge1xuICAgICAgcmV0dXJuIGNoYXIudG9VcHBlckNhc2UoKSArIHN0cjtcbiAgICB9KTtcbn1cblxuZnVuY3Rpb24gYnVpbGRBY2Nlc3NvcnMob2JqLCBoZWFkZXIpIHtcbiAgY29uc3QgYWNjZXNzb3JOYW1lID0gdXRpbHMkMS50b0NhbWVsQ2FzZSgnICcgKyBoZWFkZXIpO1xuXG4gIFsnZ2V0JywgJ3NldCcsICdoYXMnXS5mb3JFYWNoKG1ldGhvZE5hbWUgPT4ge1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIG1ldGhvZE5hbWUgKyBhY2Nlc3Nvck5hbWUsIHtcbiAgICAgIHZhbHVlOiBmdW5jdGlvbihhcmcxLCBhcmcyLCBhcmczKSB7XG4gICAgICAgIHJldHVybiB0aGlzW21ldGhvZE5hbWVdLmNhbGwodGhpcywgaGVhZGVyLCBhcmcxLCBhcmcyLCBhcmczKTtcbiAgICAgIH0sXG4gICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgfSk7XG59XG5cbmNsYXNzIEF4aW9zSGVhZGVycyB7XG4gIGNvbnN0cnVjdG9yKGhlYWRlcnMpIHtcbiAgICBoZWFkZXJzICYmIHRoaXMuc2V0KGhlYWRlcnMpO1xuICB9XG5cbiAgc2V0KGhlYWRlciwgdmFsdWVPclJld3JpdGUsIHJld3JpdGUpIHtcbiAgICBjb25zdCBzZWxmID0gdGhpcztcblxuICAgIGZ1bmN0aW9uIHNldEhlYWRlcihfdmFsdWUsIF9oZWFkZXIsIF9yZXdyaXRlKSB7XG4gICAgICBjb25zdCBsSGVhZGVyID0gbm9ybWFsaXplSGVhZGVyKF9oZWFkZXIpO1xuXG4gICAgICBpZiAoIWxIZWFkZXIpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdoZWFkZXIgbmFtZSBtdXN0IGJlIGEgbm9uLWVtcHR5IHN0cmluZycpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBrZXkgPSB1dGlscyQxLmZpbmRLZXkoc2VsZiwgbEhlYWRlcik7XG5cbiAgICAgIGlmKCFrZXkgfHwgc2VsZltrZXldID09PSB1bmRlZmluZWQgfHwgX3Jld3JpdGUgPT09IHRydWUgfHwgKF9yZXdyaXRlID09PSB1bmRlZmluZWQgJiYgc2VsZltrZXldICE9PSBmYWxzZSkpIHtcbiAgICAgICAgc2VsZltrZXkgfHwgX2hlYWRlcl0gPSBub3JtYWxpemVWYWx1ZShfdmFsdWUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IHNldEhlYWRlcnMgPSAoaGVhZGVycywgX3Jld3JpdGUpID0+XG4gICAgICB1dGlscyQxLmZvckVhY2goaGVhZGVycywgKF92YWx1ZSwgX2hlYWRlcikgPT4gc2V0SGVhZGVyKF92YWx1ZSwgX2hlYWRlciwgX3Jld3JpdGUpKTtcblxuICAgIGlmICh1dGlscyQxLmlzUGxhaW5PYmplY3QoaGVhZGVyKSB8fCBoZWFkZXIgaW5zdGFuY2VvZiB0aGlzLmNvbnN0cnVjdG9yKSB7XG4gICAgICBzZXRIZWFkZXJzKGhlYWRlciwgdmFsdWVPclJld3JpdGUpO1xuICAgIH0gZWxzZSBpZih1dGlscyQxLmlzU3RyaW5nKGhlYWRlcikgJiYgKGhlYWRlciA9IGhlYWRlci50cmltKCkpICYmICFpc1ZhbGlkSGVhZGVyTmFtZShoZWFkZXIpKSB7XG4gICAgICBzZXRIZWFkZXJzKHBhcnNlSGVhZGVycyhoZWFkZXIpLCB2YWx1ZU9yUmV3cml0ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGhlYWRlciAhPSBudWxsICYmIHNldEhlYWRlcih2YWx1ZU9yUmV3cml0ZSwgaGVhZGVyLCByZXdyaXRlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIGdldChoZWFkZXIsIHBhcnNlcikge1xuICAgIGhlYWRlciA9IG5vcm1hbGl6ZUhlYWRlcihoZWFkZXIpO1xuXG4gICAgaWYgKGhlYWRlcikge1xuICAgICAgY29uc3Qga2V5ID0gdXRpbHMkMS5maW5kS2V5KHRoaXMsIGhlYWRlcik7XG5cbiAgICAgIGlmIChrZXkpIHtcbiAgICAgICAgY29uc3QgdmFsdWUgPSB0aGlzW2tleV07XG5cbiAgICAgICAgaWYgKCFwYXJzZXIpIHtcbiAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocGFyc2VyID09PSB0cnVlKSB7XG4gICAgICAgICAgcmV0dXJuIHBhcnNlVG9rZW5zKHZhbHVlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh1dGlscyQxLmlzRnVuY3Rpb24ocGFyc2VyKSkge1xuICAgICAgICAgIHJldHVybiBwYXJzZXIuY2FsbCh0aGlzLCB2YWx1ZSwga2V5KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh1dGlscyQxLmlzUmVnRXhwKHBhcnNlcikpIHtcbiAgICAgICAgICByZXR1cm4gcGFyc2VyLmV4ZWModmFsdWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcigncGFyc2VyIG11c3QgYmUgYm9vbGVhbnxyZWdleHB8ZnVuY3Rpb24nKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBoYXMoaGVhZGVyLCBtYXRjaGVyKSB7XG4gICAgaGVhZGVyID0gbm9ybWFsaXplSGVhZGVyKGhlYWRlcik7XG5cbiAgICBpZiAoaGVhZGVyKSB7XG4gICAgICBjb25zdCBrZXkgPSB1dGlscyQxLmZpbmRLZXkodGhpcywgaGVhZGVyKTtcblxuICAgICAgcmV0dXJuICEhKGtleSAmJiB0aGlzW2tleV0gIT09IHVuZGVmaW5lZCAmJiAoIW1hdGNoZXIgfHwgbWF0Y2hIZWFkZXJWYWx1ZSh0aGlzLCB0aGlzW2tleV0sIGtleSwgbWF0Y2hlcikpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBkZWxldGUoaGVhZGVyLCBtYXRjaGVyKSB7XG4gICAgY29uc3Qgc2VsZiA9IHRoaXM7XG4gICAgbGV0IGRlbGV0ZWQgPSBmYWxzZTtcblxuICAgIGZ1bmN0aW9uIGRlbGV0ZUhlYWRlcihfaGVhZGVyKSB7XG4gICAgICBfaGVhZGVyID0gbm9ybWFsaXplSGVhZGVyKF9oZWFkZXIpO1xuXG4gICAgICBpZiAoX2hlYWRlcikge1xuICAgICAgICBjb25zdCBrZXkgPSB1dGlscyQxLmZpbmRLZXkoc2VsZiwgX2hlYWRlcik7XG5cbiAgICAgICAgaWYgKGtleSAmJiAoIW1hdGNoZXIgfHwgbWF0Y2hIZWFkZXJWYWx1ZShzZWxmLCBzZWxmW2tleV0sIGtleSwgbWF0Y2hlcikpKSB7XG4gICAgICAgICAgZGVsZXRlIHNlbGZba2V5XTtcblxuICAgICAgICAgIGRlbGV0ZWQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHV0aWxzJDEuaXNBcnJheShoZWFkZXIpKSB7XG4gICAgICBoZWFkZXIuZm9yRWFjaChkZWxldGVIZWFkZXIpO1xuICAgIH0gZWxzZSB7XG4gICAgICBkZWxldGVIZWFkZXIoaGVhZGVyKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZGVsZXRlZDtcbiAgfVxuXG4gIGNsZWFyKG1hdGNoZXIpIHtcbiAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXModGhpcyk7XG4gICAgbGV0IGkgPSBrZXlzLmxlbmd0aDtcbiAgICBsZXQgZGVsZXRlZCA9IGZhbHNlO1xuXG4gICAgd2hpbGUgKGktLSkge1xuICAgICAgY29uc3Qga2V5ID0ga2V5c1tpXTtcbiAgICAgIGlmKCFtYXRjaGVyIHx8IG1hdGNoSGVhZGVyVmFsdWUodGhpcywgdGhpc1trZXldLCBrZXksIG1hdGNoZXIsIHRydWUpKSB7XG4gICAgICAgIGRlbGV0ZSB0aGlzW2tleV07XG4gICAgICAgIGRlbGV0ZWQgPSB0cnVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBkZWxldGVkO1xuICB9XG5cbiAgbm9ybWFsaXplKGZvcm1hdCkge1xuICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xuICAgIGNvbnN0IGhlYWRlcnMgPSB7fTtcblxuICAgIHV0aWxzJDEuZm9yRWFjaCh0aGlzLCAodmFsdWUsIGhlYWRlcikgPT4ge1xuICAgICAgY29uc3Qga2V5ID0gdXRpbHMkMS5maW5kS2V5KGhlYWRlcnMsIGhlYWRlcik7XG5cbiAgICAgIGlmIChrZXkpIHtcbiAgICAgICAgc2VsZltrZXldID0gbm9ybWFsaXplVmFsdWUodmFsdWUpO1xuICAgICAgICBkZWxldGUgc2VsZltoZWFkZXJdO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IG5vcm1hbGl6ZWQgPSBmb3JtYXQgPyBmb3JtYXRIZWFkZXIoaGVhZGVyKSA6IFN0cmluZyhoZWFkZXIpLnRyaW0oKTtcblxuICAgICAgaWYgKG5vcm1hbGl6ZWQgIT09IGhlYWRlcikge1xuICAgICAgICBkZWxldGUgc2VsZltoZWFkZXJdO1xuICAgICAgfVxuXG4gICAgICBzZWxmW25vcm1hbGl6ZWRdID0gbm9ybWFsaXplVmFsdWUodmFsdWUpO1xuXG4gICAgICBoZWFkZXJzW25vcm1hbGl6ZWRdID0gdHJ1ZTtcbiAgICB9KTtcblxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgY29uY2F0KC4uLnRhcmdldHMpIHtcbiAgICByZXR1cm4gdGhpcy5jb25zdHJ1Y3Rvci5jb25jYXQodGhpcywgLi4udGFyZ2V0cyk7XG4gIH1cblxuICB0b0pTT04oYXNTdHJpbmdzKSB7XG4gICAgY29uc3Qgb2JqID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcblxuICAgIHV0aWxzJDEuZm9yRWFjaCh0aGlzLCAodmFsdWUsIGhlYWRlcikgPT4ge1xuICAgICAgdmFsdWUgIT0gbnVsbCAmJiB2YWx1ZSAhPT0gZmFsc2UgJiYgKG9ialtoZWFkZXJdID0gYXNTdHJpbmdzICYmIHV0aWxzJDEuaXNBcnJheSh2YWx1ZSkgPyB2YWx1ZS5qb2luKCcsICcpIDogdmFsdWUpO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIG9iajtcbiAgfVxuXG4gIFtTeW1ib2wuaXRlcmF0b3JdKCkge1xuICAgIHJldHVybiBPYmplY3QuZW50cmllcyh0aGlzLnRvSlNPTigpKVtTeW1ib2wuaXRlcmF0b3JdKCk7XG4gIH1cblxuICB0b1N0cmluZygpIHtcbiAgICByZXR1cm4gT2JqZWN0LmVudHJpZXModGhpcy50b0pTT04oKSkubWFwKChbaGVhZGVyLCB2YWx1ZV0pID0+IGhlYWRlciArICc6ICcgKyB2YWx1ZSkuam9pbignXFxuJyk7XG4gIH1cblxuICBnZXQgW1N5bWJvbC50b1N0cmluZ1RhZ10oKSB7XG4gICAgcmV0dXJuICdBeGlvc0hlYWRlcnMnO1xuICB9XG5cbiAgc3RhdGljIGZyb20odGhpbmcpIHtcbiAgICByZXR1cm4gdGhpbmcgaW5zdGFuY2VvZiB0aGlzID8gdGhpbmcgOiBuZXcgdGhpcyh0aGluZyk7XG4gIH1cblxuICBzdGF0aWMgY29uY2F0KGZpcnN0LCAuLi50YXJnZXRzKSB7XG4gICAgY29uc3QgY29tcHV0ZWQgPSBuZXcgdGhpcyhmaXJzdCk7XG5cbiAgICB0YXJnZXRzLmZvckVhY2goKHRhcmdldCkgPT4gY29tcHV0ZWQuc2V0KHRhcmdldCkpO1xuXG4gICAgcmV0dXJuIGNvbXB1dGVkO1xuICB9XG5cbiAgc3RhdGljIGFjY2Vzc29yKGhlYWRlcikge1xuICAgIGNvbnN0IGludGVybmFscyA9IHRoaXNbJGludGVybmFsc10gPSAodGhpc1skaW50ZXJuYWxzXSA9IHtcbiAgICAgIGFjY2Vzc29yczoge31cbiAgICB9KTtcblxuICAgIGNvbnN0IGFjY2Vzc29ycyA9IGludGVybmFscy5hY2Nlc3NvcnM7XG4gICAgY29uc3QgcHJvdG90eXBlID0gdGhpcy5wcm90b3R5cGU7XG5cbiAgICBmdW5jdGlvbiBkZWZpbmVBY2Nlc3NvcihfaGVhZGVyKSB7XG4gICAgICBjb25zdCBsSGVhZGVyID0gbm9ybWFsaXplSGVhZGVyKF9oZWFkZXIpO1xuXG4gICAgICBpZiAoIWFjY2Vzc29yc1tsSGVhZGVyXSkge1xuICAgICAgICBidWlsZEFjY2Vzc29ycyhwcm90b3R5cGUsIF9oZWFkZXIpO1xuICAgICAgICBhY2Nlc3NvcnNbbEhlYWRlcl0gPSB0cnVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIHV0aWxzJDEuaXNBcnJheShoZWFkZXIpID8gaGVhZGVyLmZvckVhY2goZGVmaW5lQWNjZXNzb3IpIDogZGVmaW5lQWNjZXNzb3IoaGVhZGVyKTtcblxuICAgIHJldHVybiB0aGlzO1xuICB9XG59XG5cbkF4aW9zSGVhZGVycy5hY2Nlc3NvcihbJ0NvbnRlbnQtVHlwZScsICdDb250ZW50LUxlbmd0aCcsICdBY2NlcHQnLCAnQWNjZXB0LUVuY29kaW5nJywgJ1VzZXItQWdlbnQnLCAnQXV0aG9yaXphdGlvbiddKTtcblxuLy8gcmVzZXJ2ZWQgbmFtZXMgaG90Zml4XG51dGlscyQxLnJlZHVjZURlc2NyaXB0b3JzKEF4aW9zSGVhZGVycy5wcm90b3R5cGUsICh7dmFsdWV9LCBrZXkpID0+IHtcbiAgbGV0IG1hcHBlZCA9IGtleVswXS50b1VwcGVyQ2FzZSgpICsga2V5LnNsaWNlKDEpOyAvLyBtYXAgYHNldGAgPT4gYFNldGBcbiAgcmV0dXJuIHtcbiAgICBnZXQ6ICgpID0+IHZhbHVlLFxuICAgIHNldChoZWFkZXJWYWx1ZSkge1xuICAgICAgdGhpc1ttYXBwZWRdID0gaGVhZGVyVmFsdWU7XG4gICAgfVxuICB9XG59KTtcblxudXRpbHMkMS5mcmVlemVNZXRob2RzKEF4aW9zSGVhZGVycyk7XG5cbmNvbnN0IEF4aW9zSGVhZGVycyQxID0gQXhpb3NIZWFkZXJzO1xuXG4vKipcbiAqIFRyYW5zZm9ybSB0aGUgZGF0YSBmb3IgYSByZXF1ZXN0IG9yIGEgcmVzcG9uc2VcbiAqXG4gKiBAcGFyYW0ge0FycmF5fEZ1bmN0aW9ufSBmbnMgQSBzaW5nbGUgZnVuY3Rpb24gb3IgQXJyYXkgb2YgZnVuY3Rpb25zXG4gKiBAcGFyYW0gez9PYmplY3R9IHJlc3BvbnNlIFRoZSByZXNwb25zZSBvYmplY3RcbiAqXG4gKiBAcmV0dXJucyB7Kn0gVGhlIHJlc3VsdGluZyB0cmFuc2Zvcm1lZCBkYXRhXG4gKi9cbmZ1bmN0aW9uIHRyYW5zZm9ybURhdGEoZm5zLCByZXNwb25zZSkge1xuICBjb25zdCBjb25maWcgPSB0aGlzIHx8IGRlZmF1bHRzJDE7XG4gIGNvbnN0IGNvbnRleHQgPSByZXNwb25zZSB8fCBjb25maWc7XG4gIGNvbnN0IGhlYWRlcnMgPSBBeGlvc0hlYWRlcnMkMS5mcm9tKGNvbnRleHQuaGVhZGVycyk7XG4gIGxldCBkYXRhID0gY29udGV4dC5kYXRhO1xuXG4gIHV0aWxzJDEuZm9yRWFjaChmbnMsIGZ1bmN0aW9uIHRyYW5zZm9ybShmbikge1xuICAgIGRhdGEgPSBmbi5jYWxsKGNvbmZpZywgZGF0YSwgaGVhZGVycy5ub3JtYWxpemUoKSwgcmVzcG9uc2UgPyByZXNwb25zZS5zdGF0dXMgOiB1bmRlZmluZWQpO1xuICB9KTtcblxuICBoZWFkZXJzLm5vcm1hbGl6ZSgpO1xuXG4gIHJldHVybiBkYXRhO1xufVxuXG5mdW5jdGlvbiBpc0NhbmNlbCh2YWx1ZSkge1xuICByZXR1cm4gISEodmFsdWUgJiYgdmFsdWUuX19DQU5DRUxfXyk7XG59XG5cbi8qKlxuICogQSBgQ2FuY2VsZWRFcnJvcmAgaXMgYW4gb2JqZWN0IHRoYXQgaXMgdGhyb3duIHdoZW4gYW4gb3BlcmF0aW9uIGlzIGNhbmNlbGVkLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nPX0gbWVzc2FnZSBUaGUgbWVzc2FnZS5cbiAqIEBwYXJhbSB7T2JqZWN0PX0gY29uZmlnIFRoZSBjb25maWcuXG4gKiBAcGFyYW0ge09iamVjdD19IHJlcXVlc3QgVGhlIHJlcXVlc3QuXG4gKlxuICogQHJldHVybnMge0NhbmNlbGVkRXJyb3J9IFRoZSBjcmVhdGVkIGVycm9yLlxuICovXG5mdW5jdGlvbiBDYW5jZWxlZEVycm9yKG1lc3NhZ2UsIGNvbmZpZywgcmVxdWVzdCkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tZXEtbnVsbCxlcWVxZXFcbiAgQXhpb3NFcnJvci5jYWxsKHRoaXMsIG1lc3NhZ2UgPT0gbnVsbCA/ICdjYW5jZWxlZCcgOiBtZXNzYWdlLCBBeGlvc0Vycm9yLkVSUl9DQU5DRUxFRCwgY29uZmlnLCByZXF1ZXN0KTtcbiAgdGhpcy5uYW1lID0gJ0NhbmNlbGVkRXJyb3InO1xufVxuXG51dGlscyQxLmluaGVyaXRzKENhbmNlbGVkRXJyb3IsIEF4aW9zRXJyb3IsIHtcbiAgX19DQU5DRUxfXzogdHJ1ZVxufSk7XG5cbi8qKlxuICogUmVzb2x2ZSBvciByZWplY3QgYSBQcm9taXNlIGJhc2VkIG9uIHJlc3BvbnNlIHN0YXR1cy5cbiAqXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSByZXNvbHZlIEEgZnVuY3Rpb24gdGhhdCByZXNvbHZlcyB0aGUgcHJvbWlzZS5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IHJlamVjdCBBIGZ1bmN0aW9uIHRoYXQgcmVqZWN0cyB0aGUgcHJvbWlzZS5cbiAqIEBwYXJhbSB7b2JqZWN0fSByZXNwb25zZSBUaGUgcmVzcG9uc2UuXG4gKlxuICogQHJldHVybnMge29iamVjdH0gVGhlIHJlc3BvbnNlLlxuICovXG5mdW5jdGlvbiBzZXR0bGUocmVzb2x2ZSwgcmVqZWN0LCByZXNwb25zZSkge1xuICBjb25zdCB2YWxpZGF0ZVN0YXR1cyA9IHJlc3BvbnNlLmNvbmZpZy52YWxpZGF0ZVN0YXR1cztcbiAgaWYgKCFyZXNwb25zZS5zdGF0dXMgfHwgIXZhbGlkYXRlU3RhdHVzIHx8IHZhbGlkYXRlU3RhdHVzKHJlc3BvbnNlLnN0YXR1cykpIHtcbiAgICByZXNvbHZlKHJlc3BvbnNlKTtcbiAgfSBlbHNlIHtcbiAgICByZWplY3QobmV3IEF4aW9zRXJyb3IoXG4gICAgICAnUmVxdWVzdCBmYWlsZWQgd2l0aCBzdGF0dXMgY29kZSAnICsgcmVzcG9uc2Uuc3RhdHVzLFxuICAgICAgW0F4aW9zRXJyb3IuRVJSX0JBRF9SRVFVRVNULCBBeGlvc0Vycm9yLkVSUl9CQURfUkVTUE9OU0VdW01hdGguZmxvb3IocmVzcG9uc2Uuc3RhdHVzIC8gMTAwKSAtIDRdLFxuICAgICAgcmVzcG9uc2UuY29uZmlnLFxuICAgICAgcmVzcG9uc2UucmVxdWVzdCxcbiAgICAgIHJlc3BvbnNlXG4gICAgKSk7XG4gIH1cbn1cblxuLyoqXG4gKiBEZXRlcm1pbmVzIHdoZXRoZXIgdGhlIHNwZWNpZmllZCBVUkwgaXMgYWJzb2x1dGVcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gdXJsIFRoZSBVUkwgdG8gdGVzdFxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHRoZSBzcGVjaWZpZWQgVVJMIGlzIGFic29sdXRlLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNBYnNvbHV0ZVVSTCh1cmwpIHtcbiAgLy8gQSBVUkwgaXMgY29uc2lkZXJlZCBhYnNvbHV0ZSBpZiBpdCBiZWdpbnMgd2l0aCBcIjxzY2hlbWU+Oi8vXCIgb3IgXCIvL1wiIChwcm90b2NvbC1yZWxhdGl2ZSBVUkwpLlxuICAvLyBSRkMgMzk4NiBkZWZpbmVzIHNjaGVtZSBuYW1lIGFzIGEgc2VxdWVuY2Ugb2YgY2hhcmFjdGVycyBiZWdpbm5pbmcgd2l0aCBhIGxldHRlciBhbmQgZm9sbG93ZWRcbiAgLy8gYnkgYW55IGNvbWJpbmF0aW9uIG9mIGxldHRlcnMsIGRpZ2l0cywgcGx1cywgcGVyaW9kLCBvciBoeXBoZW4uXG4gIHJldHVybiAvXihbYS16XVthLXpcXGQrXFwtLl0qOik/XFwvXFwvL2kudGVzdCh1cmwpO1xufVxuXG4vKipcbiAqIENyZWF0ZXMgYSBuZXcgVVJMIGJ5IGNvbWJpbmluZyB0aGUgc3BlY2lmaWVkIFVSTHNcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gYmFzZVVSTCBUaGUgYmFzZSBVUkxcbiAqIEBwYXJhbSB7c3RyaW5nfSByZWxhdGl2ZVVSTCBUaGUgcmVsYXRpdmUgVVJMXG4gKlxuICogQHJldHVybnMge3N0cmluZ30gVGhlIGNvbWJpbmVkIFVSTFxuICovXG5mdW5jdGlvbiBjb21iaW5lVVJMcyhiYXNlVVJMLCByZWxhdGl2ZVVSTCkge1xuICByZXR1cm4gcmVsYXRpdmVVUkxcbiAgICA/IGJhc2VVUkwucmVwbGFjZSgvXFwvKyQvLCAnJykgKyAnLycgKyByZWxhdGl2ZVVSTC5yZXBsYWNlKC9eXFwvKy8sICcnKVxuICAgIDogYmFzZVVSTDtcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEgbmV3IFVSTCBieSBjb21iaW5pbmcgdGhlIGJhc2VVUkwgd2l0aCB0aGUgcmVxdWVzdGVkVVJMLFxuICogb25seSB3aGVuIHRoZSByZXF1ZXN0ZWRVUkwgaXMgbm90IGFscmVhZHkgYW4gYWJzb2x1dGUgVVJMLlxuICogSWYgdGhlIHJlcXVlc3RVUkwgaXMgYWJzb2x1dGUsIHRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgcmVxdWVzdGVkVVJMIHVudG91Y2hlZC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gYmFzZVVSTCBUaGUgYmFzZSBVUkxcbiAqIEBwYXJhbSB7c3RyaW5nfSByZXF1ZXN0ZWRVUkwgQWJzb2x1dGUgb3IgcmVsYXRpdmUgVVJMIHRvIGNvbWJpbmVcbiAqXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgY29tYmluZWQgZnVsbCBwYXRoXG4gKi9cbmZ1bmN0aW9uIGJ1aWxkRnVsbFBhdGgoYmFzZVVSTCwgcmVxdWVzdGVkVVJMKSB7XG4gIGlmIChiYXNlVVJMICYmICFpc0Fic29sdXRlVVJMKHJlcXVlc3RlZFVSTCkpIHtcbiAgICByZXR1cm4gY29tYmluZVVSTHMoYmFzZVVSTCwgcmVxdWVzdGVkVVJMKTtcbiAgfVxuICByZXR1cm4gcmVxdWVzdGVkVVJMO1xufVxuXG5jb25zdCBWRVJTSU9OID0gXCIxLjYuMlwiO1xuXG5mdW5jdGlvbiBwYXJzZVByb3RvY29sKHVybCkge1xuICBjb25zdCBtYXRjaCA9IC9eKFstK1xcd117MSwyNX0pKDo/XFwvXFwvfDopLy5leGVjKHVybCk7XG4gIHJldHVybiBtYXRjaCAmJiBtYXRjaFsxXSB8fCAnJztcbn1cblxuY29uc3QgREFUQV9VUkxfUEFUVEVSTiA9IC9eKD86KFteO10rKTspPyg/OlteO10rOyk/KGJhc2U2NHwpLChbXFxzXFxTXSopJC87XG5cbi8qKlxuICogUGFyc2UgZGF0YSB1cmkgdG8gYSBCdWZmZXIgb3IgQmxvYlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSB1cmlcbiAqIEBwYXJhbSB7P0Jvb2xlYW59IGFzQmxvYlxuICogQHBhcmFtIHs/T2JqZWN0fSBvcHRpb25zXG4gKiBAcGFyYW0gez9GdW5jdGlvbn0gb3B0aW9ucy5CbG9iXG4gKlxuICogQHJldHVybnMge0J1ZmZlcnxCbG9ifVxuICovXG5mdW5jdGlvbiBmcm9tRGF0YVVSSSh1cmksIGFzQmxvYiwgb3B0aW9ucykge1xuICBjb25zdCBfQmxvYiA9IG9wdGlvbnMgJiYgb3B0aW9ucy5CbG9iIHx8IHBsYXRmb3JtLmNsYXNzZXMuQmxvYjtcbiAgY29uc3QgcHJvdG9jb2wgPSBwYXJzZVByb3RvY29sKHVyaSk7XG5cbiAgaWYgKGFzQmxvYiA9PT0gdW5kZWZpbmVkICYmIF9CbG9iKSB7XG4gICAgYXNCbG9iID0gdHJ1ZTtcbiAgfVxuXG4gIGlmIChwcm90b2NvbCA9PT0gJ2RhdGEnKSB7XG4gICAgdXJpID0gcHJvdG9jb2wubGVuZ3RoID8gdXJpLnNsaWNlKHByb3RvY29sLmxlbmd0aCArIDEpIDogdXJpO1xuXG4gICAgY29uc3QgbWF0Y2ggPSBEQVRBX1VSTF9QQVRURVJOLmV4ZWModXJpKTtcblxuICAgIGlmICghbWF0Y2gpIHtcbiAgICAgIHRocm93IG5ldyBBeGlvc0Vycm9yKCdJbnZhbGlkIFVSTCcsIEF4aW9zRXJyb3IuRVJSX0lOVkFMSURfVVJMKTtcbiAgICB9XG5cbiAgICBjb25zdCBtaW1lID0gbWF0Y2hbMV07XG4gICAgY29uc3QgaXNCYXNlNjQgPSBtYXRjaFsyXTtcbiAgICBjb25zdCBib2R5ID0gbWF0Y2hbM107XG4gICAgY29uc3QgYnVmZmVyID0gQnVmZmVyLmZyb20oZGVjb2RlVVJJQ29tcG9uZW50KGJvZHkpLCBpc0Jhc2U2NCA/ICdiYXNlNjQnIDogJ3V0ZjgnKTtcblxuICAgIGlmIChhc0Jsb2IpIHtcbiAgICAgIGlmICghX0Jsb2IpIHtcbiAgICAgICAgdGhyb3cgbmV3IEF4aW9zRXJyb3IoJ0Jsb2IgaXMgbm90IHN1cHBvcnRlZCcsIEF4aW9zRXJyb3IuRVJSX05PVF9TVVBQT1JUKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG5ldyBfQmxvYihbYnVmZmVyXSwge3R5cGU6IG1pbWV9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gYnVmZmVyO1xuICB9XG5cbiAgdGhyb3cgbmV3IEF4aW9zRXJyb3IoJ1Vuc3VwcG9ydGVkIHByb3RvY29sICcgKyBwcm90b2NvbCwgQXhpb3NFcnJvci5FUlJfTk9UX1NVUFBPUlQpO1xufVxuXG4vKipcbiAqIFRocm90dGxlIGRlY29yYXRvclxuICogQHBhcmFtIHtGdW5jdGlvbn0gZm5cbiAqIEBwYXJhbSB7TnVtYmVyfSBmcmVxXG4gKiBAcmV0dXJuIHtGdW5jdGlvbn1cbiAqL1xuZnVuY3Rpb24gdGhyb3R0bGUoZm4sIGZyZXEpIHtcbiAgbGV0IHRpbWVzdGFtcCA9IDA7XG4gIGNvbnN0IHRocmVzaG9sZCA9IDEwMDAgLyBmcmVxO1xuICBsZXQgdGltZXIgPSBudWxsO1xuICByZXR1cm4gZnVuY3Rpb24gdGhyb3R0bGVkKGZvcmNlLCBhcmdzKSB7XG4gICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcbiAgICBpZiAoZm9yY2UgfHwgbm93IC0gdGltZXN0YW1wID4gdGhyZXNob2xkKSB7XG4gICAgICBpZiAodGltZXIpIHtcbiAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVyKTtcbiAgICAgICAgdGltZXIgPSBudWxsO1xuICAgICAgfVxuICAgICAgdGltZXN0YW1wID0gbm93O1xuICAgICAgcmV0dXJuIGZuLmFwcGx5KG51bGwsIGFyZ3MpO1xuICAgIH1cbiAgICBpZiAoIXRpbWVyKSB7XG4gICAgICB0aW1lciA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB0aW1lciA9IG51bGw7XG4gICAgICAgIHRpbWVzdGFtcCA9IERhdGUubm93KCk7XG4gICAgICAgIHJldHVybiBmbi5hcHBseShudWxsLCBhcmdzKTtcbiAgICAgIH0sIHRocmVzaG9sZCAtIChub3cgLSB0aW1lc3RhbXApKTtcbiAgICB9XG4gIH07XG59XG5cbi8qKlxuICogQ2FsY3VsYXRlIGRhdGEgbWF4UmF0ZVxuICogQHBhcmFtIHtOdW1iZXJ9IFtzYW1wbGVzQ291bnQ9IDEwXVxuICogQHBhcmFtIHtOdW1iZXJ9IFttaW49IDEwMDBdXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259XG4gKi9cbmZ1bmN0aW9uIHNwZWVkb21ldGVyKHNhbXBsZXNDb3VudCwgbWluKSB7XG4gIHNhbXBsZXNDb3VudCA9IHNhbXBsZXNDb3VudCB8fCAxMDtcbiAgY29uc3QgYnl0ZXMgPSBuZXcgQXJyYXkoc2FtcGxlc0NvdW50KTtcbiAgY29uc3QgdGltZXN0YW1wcyA9IG5ldyBBcnJheShzYW1wbGVzQ291bnQpO1xuICBsZXQgaGVhZCA9IDA7XG4gIGxldCB0YWlsID0gMDtcbiAgbGV0IGZpcnN0U2FtcGxlVFM7XG5cbiAgbWluID0gbWluICE9PSB1bmRlZmluZWQgPyBtaW4gOiAxMDAwO1xuXG4gIHJldHVybiBmdW5jdGlvbiBwdXNoKGNodW5rTGVuZ3RoKSB7XG4gICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcblxuICAgIGNvbnN0IHN0YXJ0ZWRBdCA9IHRpbWVzdGFtcHNbdGFpbF07XG5cbiAgICBpZiAoIWZpcnN0U2FtcGxlVFMpIHtcbiAgICAgIGZpcnN0U2FtcGxlVFMgPSBub3c7XG4gICAgfVxuXG4gICAgYnl0ZXNbaGVhZF0gPSBjaHVua0xlbmd0aDtcbiAgICB0aW1lc3RhbXBzW2hlYWRdID0gbm93O1xuXG4gICAgbGV0IGkgPSB0YWlsO1xuICAgIGxldCBieXRlc0NvdW50ID0gMDtcblxuICAgIHdoaWxlIChpICE9PSBoZWFkKSB7XG4gICAgICBieXRlc0NvdW50ICs9IGJ5dGVzW2krK107XG4gICAgICBpID0gaSAlIHNhbXBsZXNDb3VudDtcbiAgICB9XG5cbiAgICBoZWFkID0gKGhlYWQgKyAxKSAlIHNhbXBsZXNDb3VudDtcblxuICAgIGlmIChoZWFkID09PSB0YWlsKSB7XG4gICAgICB0YWlsID0gKHRhaWwgKyAxKSAlIHNhbXBsZXNDb3VudDtcbiAgICB9XG5cbiAgICBpZiAobm93IC0gZmlyc3RTYW1wbGVUUyA8IG1pbikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHBhc3NlZCA9IHN0YXJ0ZWRBdCAmJiBub3cgLSBzdGFydGVkQXQ7XG5cbiAgICByZXR1cm4gcGFzc2VkID8gTWF0aC5yb3VuZChieXRlc0NvdW50ICogMTAwMCAvIHBhc3NlZCkgOiB1bmRlZmluZWQ7XG4gIH07XG59XG5cbmNvbnN0IGtJbnRlcm5hbHMgPSBTeW1ib2woJ2ludGVybmFscycpO1xuXG5jbGFzcyBBeGlvc1RyYW5zZm9ybVN0cmVhbSBleHRlbmRzIHN0cmVhbV9fZGVmYXVsdFtcImRlZmF1bHRcIl0uVHJhbnNmb3Jte1xuICBjb25zdHJ1Y3RvcihvcHRpb25zKSB7XG4gICAgb3B0aW9ucyA9IHV0aWxzJDEudG9GbGF0T2JqZWN0KG9wdGlvbnMsIHtcbiAgICAgIG1heFJhdGU6IDAsXG4gICAgICBjaHVua1NpemU6IDY0ICogMTAyNCxcbiAgICAgIG1pbkNodW5rU2l6ZTogMTAwLFxuICAgICAgdGltZVdpbmRvdzogNTAwLFxuICAgICAgdGlja3NSYXRlOiAyLFxuICAgICAgc2FtcGxlc0NvdW50OiAxNVxuICAgIH0sIG51bGwsIChwcm9wLCBzb3VyY2UpID0+IHtcbiAgICAgIHJldHVybiAhdXRpbHMkMS5pc1VuZGVmaW5lZChzb3VyY2VbcHJvcF0pO1xuICAgIH0pO1xuXG4gICAgc3VwZXIoe1xuICAgICAgcmVhZGFibGVIaWdoV2F0ZXJNYXJrOiBvcHRpb25zLmNodW5rU2l6ZVxuICAgIH0pO1xuXG4gICAgY29uc3Qgc2VsZiA9IHRoaXM7XG5cbiAgICBjb25zdCBpbnRlcm5hbHMgPSB0aGlzW2tJbnRlcm5hbHNdID0ge1xuICAgICAgbGVuZ3RoOiBvcHRpb25zLmxlbmd0aCxcbiAgICAgIHRpbWVXaW5kb3c6IG9wdGlvbnMudGltZVdpbmRvdyxcbiAgICAgIHRpY2tzUmF0ZTogb3B0aW9ucy50aWNrc1JhdGUsXG4gICAgICBjaHVua1NpemU6IG9wdGlvbnMuY2h1bmtTaXplLFxuICAgICAgbWF4UmF0ZTogb3B0aW9ucy5tYXhSYXRlLFxuICAgICAgbWluQ2h1bmtTaXplOiBvcHRpb25zLm1pbkNodW5rU2l6ZSxcbiAgICAgIGJ5dGVzU2VlbjogMCxcbiAgICAgIGlzQ2FwdHVyZWQ6IGZhbHNlLFxuICAgICAgbm90aWZpZWRCeXRlc0xvYWRlZDogMCxcbiAgICAgIHRzOiBEYXRlLm5vdygpLFxuICAgICAgYnl0ZXM6IDAsXG4gICAgICBvblJlYWRDYWxsYmFjazogbnVsbFxuICAgIH07XG5cbiAgICBjb25zdCBfc3BlZWRvbWV0ZXIgPSBzcGVlZG9tZXRlcihpbnRlcm5hbHMudGlja3NSYXRlICogb3B0aW9ucy5zYW1wbGVzQ291bnQsIGludGVybmFscy50aW1lV2luZG93KTtcblxuICAgIHRoaXMub24oJ25ld0xpc3RlbmVyJywgZXZlbnQgPT4ge1xuICAgICAgaWYgKGV2ZW50ID09PSAncHJvZ3Jlc3MnKSB7XG4gICAgICAgIGlmICghaW50ZXJuYWxzLmlzQ2FwdHVyZWQpIHtcbiAgICAgICAgICBpbnRlcm5hbHMuaXNDYXB0dXJlZCA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGxldCBieXRlc05vdGlmaWVkID0gMDtcblxuICAgIGludGVybmFscy51cGRhdGVQcm9ncmVzcyA9IHRocm90dGxlKGZ1bmN0aW9uIHRocm90dGxlZEhhbmRsZXIoKSB7XG4gICAgICBjb25zdCB0b3RhbEJ5dGVzID0gaW50ZXJuYWxzLmxlbmd0aDtcbiAgICAgIGNvbnN0IGJ5dGVzVHJhbnNmZXJyZWQgPSBpbnRlcm5hbHMuYnl0ZXNTZWVuO1xuICAgICAgY29uc3QgcHJvZ3Jlc3NCeXRlcyA9IGJ5dGVzVHJhbnNmZXJyZWQgLSBieXRlc05vdGlmaWVkO1xuICAgICAgaWYgKCFwcm9ncmVzc0J5dGVzIHx8IHNlbGYuZGVzdHJveWVkKSByZXR1cm47XG5cbiAgICAgIGNvbnN0IHJhdGUgPSBfc3BlZWRvbWV0ZXIocHJvZ3Jlc3NCeXRlcyk7XG5cbiAgICAgIGJ5dGVzTm90aWZpZWQgPSBieXRlc1RyYW5zZmVycmVkO1xuXG4gICAgICBwcm9jZXNzLm5leHRUaWNrKCgpID0+IHtcbiAgICAgICAgc2VsZi5lbWl0KCdwcm9ncmVzcycsIHtcbiAgICAgICAgICAnbG9hZGVkJzogYnl0ZXNUcmFuc2ZlcnJlZCxcbiAgICAgICAgICAndG90YWwnOiB0b3RhbEJ5dGVzLFxuICAgICAgICAgICdwcm9ncmVzcyc6IHRvdGFsQnl0ZXMgPyAoYnl0ZXNUcmFuc2ZlcnJlZCAvIHRvdGFsQnl0ZXMpIDogdW5kZWZpbmVkLFxuICAgICAgICAgICdieXRlcyc6IHByb2dyZXNzQnl0ZXMsXG4gICAgICAgICAgJ3JhdGUnOiByYXRlID8gcmF0ZSA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAnZXN0aW1hdGVkJzogcmF0ZSAmJiB0b3RhbEJ5dGVzICYmIGJ5dGVzVHJhbnNmZXJyZWQgPD0gdG90YWxCeXRlcyA/XG4gICAgICAgICAgICAodG90YWxCeXRlcyAtIGJ5dGVzVHJhbnNmZXJyZWQpIC8gcmF0ZSA6IHVuZGVmaW5lZFxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH0sIGludGVybmFscy50aWNrc1JhdGUpO1xuXG4gICAgY29uc3Qgb25GaW5pc2ggPSAoKSA9PiB7XG4gICAgICBpbnRlcm5hbHMudXBkYXRlUHJvZ3Jlc3ModHJ1ZSk7XG4gICAgfTtcblxuICAgIHRoaXMub25jZSgnZW5kJywgb25GaW5pc2gpO1xuICAgIHRoaXMub25jZSgnZXJyb3InLCBvbkZpbmlzaCk7XG4gIH1cblxuICBfcmVhZChzaXplKSB7XG4gICAgY29uc3QgaW50ZXJuYWxzID0gdGhpc1trSW50ZXJuYWxzXTtcblxuICAgIGlmIChpbnRlcm5hbHMub25SZWFkQ2FsbGJhY2spIHtcbiAgICAgIGludGVybmFscy5vblJlYWRDYWxsYmFjaygpO1xuICAgIH1cblxuICAgIHJldHVybiBzdXBlci5fcmVhZChzaXplKTtcbiAgfVxuXG4gIF90cmFuc2Zvcm0oY2h1bmssIGVuY29kaW5nLCBjYWxsYmFjaykge1xuICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xuICAgIGNvbnN0IGludGVybmFscyA9IHRoaXNba0ludGVybmFsc107XG4gICAgY29uc3QgbWF4UmF0ZSA9IGludGVybmFscy5tYXhSYXRlO1xuXG4gICAgY29uc3QgcmVhZGFibGVIaWdoV2F0ZXJNYXJrID0gdGhpcy5yZWFkYWJsZUhpZ2hXYXRlck1hcms7XG5cbiAgICBjb25zdCB0aW1lV2luZG93ID0gaW50ZXJuYWxzLnRpbWVXaW5kb3c7XG5cbiAgICBjb25zdCBkaXZpZGVyID0gMTAwMCAvIHRpbWVXaW5kb3c7XG4gICAgY29uc3QgYnl0ZXNUaHJlc2hvbGQgPSAobWF4UmF0ZSAvIGRpdmlkZXIpO1xuICAgIGNvbnN0IG1pbkNodW5rU2l6ZSA9IGludGVybmFscy5taW5DaHVua1NpemUgIT09IGZhbHNlID8gTWF0aC5tYXgoaW50ZXJuYWxzLm1pbkNodW5rU2l6ZSwgYnl0ZXNUaHJlc2hvbGQgKiAwLjAxKSA6IDA7XG5cbiAgICBmdW5jdGlvbiBwdXNoQ2h1bmsoX2NodW5rLCBfY2FsbGJhY2spIHtcbiAgICAgIGNvbnN0IGJ5dGVzID0gQnVmZmVyLmJ5dGVMZW5ndGgoX2NodW5rKTtcbiAgICAgIGludGVybmFscy5ieXRlc1NlZW4gKz0gYnl0ZXM7XG4gICAgICBpbnRlcm5hbHMuYnl0ZXMgKz0gYnl0ZXM7XG5cbiAgICAgIGlmIChpbnRlcm5hbHMuaXNDYXB0dXJlZCkge1xuICAgICAgICBpbnRlcm5hbHMudXBkYXRlUHJvZ3Jlc3MoKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHNlbGYucHVzaChfY2h1bmspKSB7XG4gICAgICAgIHByb2Nlc3MubmV4dFRpY2soX2NhbGxiYWNrKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGludGVybmFscy5vblJlYWRDYWxsYmFjayA9ICgpID0+IHtcbiAgICAgICAgICBpbnRlcm5hbHMub25SZWFkQ2FsbGJhY2sgPSBudWxsO1xuICAgICAgICAgIHByb2Nlc3MubmV4dFRpY2soX2NhbGxiYWNrKTtcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCB0cmFuc2Zvcm1DaHVuayA9IChfY2h1bmssIF9jYWxsYmFjaykgPT4ge1xuICAgICAgY29uc3QgY2h1bmtTaXplID0gQnVmZmVyLmJ5dGVMZW5ndGgoX2NodW5rKTtcbiAgICAgIGxldCBjaHVua1JlbWFpbmRlciA9IG51bGw7XG4gICAgICBsZXQgbWF4Q2h1bmtTaXplID0gcmVhZGFibGVIaWdoV2F0ZXJNYXJrO1xuICAgICAgbGV0IGJ5dGVzTGVmdDtcbiAgICAgIGxldCBwYXNzZWQgPSAwO1xuXG4gICAgICBpZiAobWF4UmF0ZSkge1xuICAgICAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuXG4gICAgICAgIGlmICghaW50ZXJuYWxzLnRzIHx8IChwYXNzZWQgPSAobm93IC0gaW50ZXJuYWxzLnRzKSkgPj0gdGltZVdpbmRvdykge1xuICAgICAgICAgIGludGVybmFscy50cyA9IG5vdztcbiAgICAgICAgICBieXRlc0xlZnQgPSBieXRlc1RocmVzaG9sZCAtIGludGVybmFscy5ieXRlcztcbiAgICAgICAgICBpbnRlcm5hbHMuYnl0ZXMgPSBieXRlc0xlZnQgPCAwID8gLWJ5dGVzTGVmdCA6IDA7XG4gICAgICAgICAgcGFzc2VkID0gMDtcbiAgICAgICAgfVxuXG4gICAgICAgIGJ5dGVzTGVmdCA9IGJ5dGVzVGhyZXNob2xkIC0gaW50ZXJuYWxzLmJ5dGVzO1xuICAgICAgfVxuXG4gICAgICBpZiAobWF4UmF0ZSkge1xuICAgICAgICBpZiAoYnl0ZXNMZWZ0IDw9IDApIHtcbiAgICAgICAgICAvLyBuZXh0IHRpbWUgd2luZG93XG4gICAgICAgICAgcmV0dXJuIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgX2NhbGxiYWNrKG51bGwsIF9jaHVuayk7XG4gICAgICAgICAgfSwgdGltZVdpbmRvdyAtIHBhc3NlZCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoYnl0ZXNMZWZ0IDwgbWF4Q2h1bmtTaXplKSB7XG4gICAgICAgICAgbWF4Q2h1bmtTaXplID0gYnl0ZXNMZWZ0O1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChtYXhDaHVua1NpemUgJiYgY2h1bmtTaXplID4gbWF4Q2h1bmtTaXplICYmIChjaHVua1NpemUgLSBtYXhDaHVua1NpemUpID4gbWluQ2h1bmtTaXplKSB7XG4gICAgICAgIGNodW5rUmVtYWluZGVyID0gX2NodW5rLnN1YmFycmF5KG1heENodW5rU2l6ZSk7XG4gICAgICAgIF9jaHVuayA9IF9jaHVuay5zdWJhcnJheSgwLCBtYXhDaHVua1NpemUpO1xuICAgICAgfVxuXG4gICAgICBwdXNoQ2h1bmsoX2NodW5rLCBjaHVua1JlbWFpbmRlciA/ICgpID0+IHtcbiAgICAgICAgcHJvY2Vzcy5uZXh0VGljayhfY2FsbGJhY2ssIG51bGwsIGNodW5rUmVtYWluZGVyKTtcbiAgICAgIH0gOiBfY2FsbGJhY2spO1xuICAgIH07XG5cbiAgICB0cmFuc2Zvcm1DaHVuayhjaHVuaywgZnVuY3Rpb24gdHJhbnNmb3JtTmV4dENodW5rKGVyciwgX2NodW5rKSB7XG4gICAgICBpZiAoZXJyKSB7XG4gICAgICAgIHJldHVybiBjYWxsYmFjayhlcnIpO1xuICAgICAgfVxuXG4gICAgICBpZiAoX2NodW5rKSB7XG4gICAgICAgIHRyYW5zZm9ybUNodW5rKF9jaHVuaywgdHJhbnNmb3JtTmV4dENodW5rKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNhbGxiYWNrKG51bGwpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgc2V0TGVuZ3RoKGxlbmd0aCkge1xuICAgIHRoaXNba0ludGVybmFsc10ubGVuZ3RoID0gK2xlbmd0aDtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxufVxuXG5jb25zdCBBeGlvc1RyYW5zZm9ybVN0cmVhbSQxID0gQXhpb3NUcmFuc2Zvcm1TdHJlYW07XG5cbmNvbnN0IHthc3luY0l0ZXJhdG9yfSA9IFN5bWJvbDtcblxuY29uc3QgcmVhZEJsb2IgPSBhc3luYyBmdW5jdGlvbiogKGJsb2IpIHtcbiAgaWYgKGJsb2Iuc3RyZWFtKSB7XG4gICAgeWllbGQqIGJsb2Iuc3RyZWFtKCk7XG4gIH0gZWxzZSBpZiAoYmxvYi5hcnJheUJ1ZmZlcikge1xuICAgIHlpZWxkIGF3YWl0IGJsb2IuYXJyYXlCdWZmZXIoKTtcbiAgfSBlbHNlIGlmIChibG9iW2FzeW5jSXRlcmF0b3JdKSB7XG4gICAgeWllbGQqIGJsb2JbYXN5bmNJdGVyYXRvcl0oKTtcbiAgfSBlbHNlIHtcbiAgICB5aWVsZCBibG9iO1xuICB9XG59O1xuXG5jb25zdCByZWFkQmxvYiQxID0gcmVhZEJsb2I7XG5cbmNvbnN0IEJPVU5EQVJZX0FMUEhBQkVUID0gdXRpbHMkMS5BTFBIQUJFVC5BTFBIQV9ESUdJVCArICctXyc7XG5cbmNvbnN0IHRleHRFbmNvZGVyID0gbmV3IHV0aWwuVGV4dEVuY29kZXIoKTtcblxuY29uc3QgQ1JMRiA9ICdcXHJcXG4nO1xuY29uc3QgQ1JMRl9CWVRFUyA9IHRleHRFbmNvZGVyLmVuY29kZShDUkxGKTtcbmNvbnN0IENSTEZfQllURVNfQ09VTlQgPSAyO1xuXG5jbGFzcyBGb3JtRGF0YVBhcnQge1xuICBjb25zdHJ1Y3RvcihuYW1lLCB2YWx1ZSkge1xuICAgIGNvbnN0IHtlc2NhcGVOYW1lfSA9IHRoaXMuY29uc3RydWN0b3I7XG4gICAgY29uc3QgaXNTdHJpbmdWYWx1ZSA9IHV0aWxzJDEuaXNTdHJpbmcodmFsdWUpO1xuXG4gICAgbGV0IGhlYWRlcnMgPSBgQ29udGVudC1EaXNwb3NpdGlvbjogZm9ybS1kYXRhOyBuYW1lPVwiJHtlc2NhcGVOYW1lKG5hbWUpfVwiJHtcbiAgICAgICFpc1N0cmluZ1ZhbHVlICYmIHZhbHVlLm5hbWUgPyBgOyBmaWxlbmFtZT1cIiR7ZXNjYXBlTmFtZSh2YWx1ZS5uYW1lKX1cImAgOiAnJ1xuICAgIH0ke0NSTEZ9YDtcblxuICAgIGlmIChpc1N0cmluZ1ZhbHVlKSB7XG4gICAgICB2YWx1ZSA9IHRleHRFbmNvZGVyLmVuY29kZShTdHJpbmcodmFsdWUpLnJlcGxhY2UoL1xccj9cXG58XFxyXFxuPy9nLCBDUkxGKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGhlYWRlcnMgKz0gYENvbnRlbnQtVHlwZTogJHt2YWx1ZS50eXBlIHx8IFwiYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtXCJ9JHtDUkxGfWA7XG4gICAgfVxuXG4gICAgdGhpcy5oZWFkZXJzID0gdGV4dEVuY29kZXIuZW5jb2RlKGhlYWRlcnMgKyBDUkxGKTtcblxuICAgIHRoaXMuY29udGVudExlbmd0aCA9IGlzU3RyaW5nVmFsdWUgPyB2YWx1ZS5ieXRlTGVuZ3RoIDogdmFsdWUuc2l6ZTtcblxuICAgIHRoaXMuc2l6ZSA9IHRoaXMuaGVhZGVycy5ieXRlTGVuZ3RoICsgdGhpcy5jb250ZW50TGVuZ3RoICsgQ1JMRl9CWVRFU19DT1VOVDtcblxuICAgIHRoaXMubmFtZSA9IG5hbWU7XG4gICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xuICB9XG5cbiAgYXN5bmMgKmVuY29kZSgpe1xuICAgIHlpZWxkIHRoaXMuaGVhZGVycztcblxuICAgIGNvbnN0IHt2YWx1ZX0gPSB0aGlzO1xuXG4gICAgaWYodXRpbHMkMS5pc1R5cGVkQXJyYXkodmFsdWUpKSB7XG4gICAgICB5aWVsZCB2YWx1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgeWllbGQqIHJlYWRCbG9iJDEodmFsdWUpO1xuICAgIH1cblxuICAgIHlpZWxkIENSTEZfQllURVM7XG4gIH1cblxuICBzdGF0aWMgZXNjYXBlTmFtZShuYW1lKSB7XG4gICAgICByZXR1cm4gU3RyaW5nKG5hbWUpLnJlcGxhY2UoL1tcXHJcXG5cIl0vZywgKG1hdGNoKSA9PiAoe1xuICAgICAgICAnXFxyJyA6ICclMEQnLFxuICAgICAgICAnXFxuJyA6ICclMEEnLFxuICAgICAgICAnXCInIDogJyUyMicsXG4gICAgICB9W21hdGNoXSkpO1xuICB9XG59XG5cbmNvbnN0IGZvcm1EYXRhVG9TdHJlYW0gPSAoZm9ybSwgaGVhZGVyc0hhbmRsZXIsIG9wdGlvbnMpID0+IHtcbiAgY29uc3Qge1xuICAgIHRhZyA9ICdmb3JtLWRhdGEtYm91bmRhcnknLFxuICAgIHNpemUgPSAyNSxcbiAgICBib3VuZGFyeSA9IHRhZyArICctJyArIHV0aWxzJDEuZ2VuZXJhdGVTdHJpbmcoc2l6ZSwgQk9VTkRBUllfQUxQSEFCRVQpXG4gIH0gPSBvcHRpb25zIHx8IHt9O1xuXG4gIGlmKCF1dGlscyQxLmlzRm9ybURhdGEoZm9ybSkpIHtcbiAgICB0aHJvdyBUeXBlRXJyb3IoJ0Zvcm1EYXRhIGluc3RhbmNlIHJlcXVpcmVkJyk7XG4gIH1cblxuICBpZiAoYm91bmRhcnkubGVuZ3RoIDwgMSB8fCBib3VuZGFyeS5sZW5ndGggPiA3MCkge1xuICAgIHRocm93IEVycm9yKCdib3VuZGFyeSBtdXN0IGJlIDEwLTcwIGNoYXJhY3RlcnMgbG9uZycpXG4gIH1cblxuICBjb25zdCBib3VuZGFyeUJ5dGVzID0gdGV4dEVuY29kZXIuZW5jb2RlKCctLScgKyBib3VuZGFyeSArIENSTEYpO1xuICBjb25zdCBmb290ZXJCeXRlcyA9IHRleHRFbmNvZGVyLmVuY29kZSgnLS0nICsgYm91bmRhcnkgKyAnLS0nICsgQ1JMRiArIENSTEYpO1xuICBsZXQgY29udGVudExlbmd0aCA9IGZvb3RlckJ5dGVzLmJ5dGVMZW5ndGg7XG5cbiAgY29uc3QgcGFydHMgPSBBcnJheS5mcm9tKGZvcm0uZW50cmllcygpKS5tYXAoKFtuYW1lLCB2YWx1ZV0pID0+IHtcbiAgICBjb25zdCBwYXJ0ID0gbmV3IEZvcm1EYXRhUGFydChuYW1lLCB2YWx1ZSk7XG4gICAgY29udGVudExlbmd0aCArPSBwYXJ0LnNpemU7XG4gICAgcmV0dXJuIHBhcnQ7XG4gIH0pO1xuXG4gIGNvbnRlbnRMZW5ndGggKz0gYm91bmRhcnlCeXRlcy5ieXRlTGVuZ3RoICogcGFydHMubGVuZ3RoO1xuXG4gIGNvbnRlbnRMZW5ndGggPSB1dGlscyQxLnRvRmluaXRlTnVtYmVyKGNvbnRlbnRMZW5ndGgpO1xuXG4gIGNvbnN0IGNvbXB1dGVkSGVhZGVycyA9IHtcbiAgICAnQ29udGVudC1UeXBlJzogYG11bHRpcGFydC9mb3JtLWRhdGE7IGJvdW5kYXJ5PSR7Ym91bmRhcnl9YFxuICB9O1xuXG4gIGlmIChOdW1iZXIuaXNGaW5pdGUoY29udGVudExlbmd0aCkpIHtcbiAgICBjb21wdXRlZEhlYWRlcnNbJ0NvbnRlbnQtTGVuZ3RoJ10gPSBjb250ZW50TGVuZ3RoO1xuICB9XG5cbiAgaGVhZGVyc0hhbmRsZXIgJiYgaGVhZGVyc0hhbmRsZXIoY29tcHV0ZWRIZWFkZXJzKTtcblxuICByZXR1cm4gc3RyZWFtLlJlYWRhYmxlLmZyb20oKGFzeW5jIGZ1bmN0aW9uICooKSB7XG4gICAgZm9yKGNvbnN0IHBhcnQgb2YgcGFydHMpIHtcbiAgICAgIHlpZWxkIGJvdW5kYXJ5Qnl0ZXM7XG4gICAgICB5aWVsZCogcGFydC5lbmNvZGUoKTtcbiAgICB9XG5cbiAgICB5aWVsZCBmb290ZXJCeXRlcztcbiAgfSkoKSk7XG59O1xuXG5jb25zdCBmb3JtRGF0YVRvU3RyZWFtJDEgPSBmb3JtRGF0YVRvU3RyZWFtO1xuXG5jbGFzcyBabGliSGVhZGVyVHJhbnNmb3JtU3RyZWFtIGV4dGVuZHMgc3RyZWFtX19kZWZhdWx0W1wiZGVmYXVsdFwiXS5UcmFuc2Zvcm0ge1xuICBfX3RyYW5zZm9ybShjaHVuaywgZW5jb2RpbmcsIGNhbGxiYWNrKSB7XG4gICAgdGhpcy5wdXNoKGNodW5rKTtcbiAgICBjYWxsYmFjaygpO1xuICB9XG5cbiAgX3RyYW5zZm9ybShjaHVuaywgZW5jb2RpbmcsIGNhbGxiYWNrKSB7XG4gICAgaWYgKGNodW5rLmxlbmd0aCAhPT0gMCkge1xuICAgICAgdGhpcy5fdHJhbnNmb3JtID0gdGhpcy5fX3RyYW5zZm9ybTtcblxuICAgICAgLy8gQWRkIERlZmF1bHQgQ29tcHJlc3Npb24gaGVhZGVycyBpZiBubyB6bGliIGhlYWRlcnMgYXJlIHByZXNlbnRcbiAgICAgIGlmIChjaHVua1swXSAhPT0gMTIwKSB7IC8vIEhleDogNzhcbiAgICAgICAgY29uc3QgaGVhZGVyID0gQnVmZmVyLmFsbG9jKDIpO1xuICAgICAgICBoZWFkZXJbMF0gPSAxMjA7IC8vIEhleDogNzhcbiAgICAgICAgaGVhZGVyWzFdID0gMTU2OyAvLyBIZXg6IDlDIFxuICAgICAgICB0aGlzLnB1c2goaGVhZGVyLCBlbmNvZGluZyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5fX3RyYW5zZm9ybShjaHVuaywgZW5jb2RpbmcsIGNhbGxiYWNrKTtcbiAgfVxufVxuXG5jb25zdCBabGliSGVhZGVyVHJhbnNmb3JtU3RyZWFtJDEgPSBabGliSGVhZGVyVHJhbnNmb3JtU3RyZWFtO1xuXG5jb25zdCBjYWxsYmFja2lmeSA9IChmbiwgcmVkdWNlcikgPT4ge1xuICByZXR1cm4gdXRpbHMkMS5pc0FzeW5jRm4oZm4pID8gZnVuY3Rpb24gKC4uLmFyZ3MpIHtcbiAgICBjb25zdCBjYiA9IGFyZ3MucG9wKCk7XG4gICAgZm4uYXBwbHkodGhpcywgYXJncykudGhlbigodmFsdWUpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHJlZHVjZXIgPyBjYihudWxsLCAuLi5yZWR1Y2VyKHZhbHVlKSkgOiBjYihudWxsLCB2YWx1ZSk7XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgY2IoZXJyKTtcbiAgICAgIH1cbiAgICB9LCBjYik7XG4gIH0gOiBmbjtcbn07XG5cbmNvbnN0IGNhbGxiYWNraWZ5JDEgPSBjYWxsYmFja2lmeTtcblxuY29uc3QgemxpYk9wdGlvbnMgPSB7XG4gIGZsdXNoOiB6bGliX19kZWZhdWx0W1wiZGVmYXVsdFwiXS5jb25zdGFudHMuWl9TWU5DX0ZMVVNILFxuICBmaW5pc2hGbHVzaDogemxpYl9fZGVmYXVsdFtcImRlZmF1bHRcIl0uY29uc3RhbnRzLlpfU1lOQ19GTFVTSFxufTtcblxuY29uc3QgYnJvdGxpT3B0aW9ucyA9IHtcbiAgZmx1c2g6IHpsaWJfX2RlZmF1bHRbXCJkZWZhdWx0XCJdLmNvbnN0YW50cy5CUk9UTElfT1BFUkFUSU9OX0ZMVVNILFxuICBmaW5pc2hGbHVzaDogemxpYl9fZGVmYXVsdFtcImRlZmF1bHRcIl0uY29uc3RhbnRzLkJST1RMSV9PUEVSQVRJT05fRkxVU0hcbn07XG5cbmNvbnN0IGlzQnJvdGxpU3VwcG9ydGVkID0gdXRpbHMkMS5pc0Z1bmN0aW9uKHpsaWJfX2RlZmF1bHRbXCJkZWZhdWx0XCJdLmNyZWF0ZUJyb3RsaURlY29tcHJlc3MpO1xuXG5jb25zdCB7aHR0cDogaHR0cEZvbGxvdywgaHR0cHM6IGh0dHBzRm9sbG93fSA9IGZvbGxvd1JlZGlyZWN0c19fZGVmYXVsdFtcImRlZmF1bHRcIl07XG5cbmNvbnN0IGlzSHR0cHMgPSAvaHR0cHM6Py87XG5cbmNvbnN0IHN1cHBvcnRlZFByb3RvY29scyA9IHBsYXRmb3JtLnByb3RvY29scy5tYXAocHJvdG9jb2wgPT4ge1xuICByZXR1cm4gcHJvdG9jb2wgKyAnOic7XG59KTtcblxuLyoqXG4gKiBJZiB0aGUgcHJveHkgb3IgY29uZmlnIGJlZm9yZVJlZGlyZWN0cyBmdW5jdGlvbnMgYXJlIGRlZmluZWQsIGNhbGwgdGhlbSB3aXRoIHRoZSBvcHRpb25zXG4gKiBvYmplY3QuXG4gKlxuICogQHBhcmFtIHtPYmplY3Q8c3RyaW5nLCBhbnk+fSBvcHRpb25zIC0gVGhlIG9wdGlvbnMgb2JqZWN0IHRoYXQgd2FzIHBhc3NlZCB0byB0aGUgcmVxdWVzdC5cbiAqXG4gKiBAcmV0dXJucyB7T2JqZWN0PHN0cmluZywgYW55Pn1cbiAqL1xuZnVuY3Rpb24gZGlzcGF0Y2hCZWZvcmVSZWRpcmVjdChvcHRpb25zKSB7XG4gIGlmIChvcHRpb25zLmJlZm9yZVJlZGlyZWN0cy5wcm94eSkge1xuICAgIG9wdGlvbnMuYmVmb3JlUmVkaXJlY3RzLnByb3h5KG9wdGlvbnMpO1xuICB9XG4gIGlmIChvcHRpb25zLmJlZm9yZVJlZGlyZWN0cy5jb25maWcpIHtcbiAgICBvcHRpb25zLmJlZm9yZVJlZGlyZWN0cy5jb25maWcob3B0aW9ucyk7XG4gIH1cbn1cblxuLyoqXG4gKiBJZiB0aGUgcHJveHkgb3IgY29uZmlnIGFmdGVyUmVkaXJlY3RzIGZ1bmN0aW9ucyBhcmUgZGVmaW5lZCwgY2FsbCB0aGVtIHdpdGggdGhlIG9wdGlvbnNcbiAqXG4gKiBAcGFyYW0ge2h0dHAuQ2xpZW50UmVxdWVzdEFyZ3N9IG9wdGlvbnNcbiAqIEBwYXJhbSB7QXhpb3NQcm94eUNvbmZpZ30gY29uZmlnUHJveHkgY29uZmlndXJhdGlvbiBmcm9tIEF4aW9zIG9wdGlvbnMgb2JqZWN0XG4gKiBAcGFyYW0ge3N0cmluZ30gbG9jYXRpb25cbiAqXG4gKiBAcmV0dXJucyB7aHR0cC5DbGllbnRSZXF1ZXN0QXJnc31cbiAqL1xuZnVuY3Rpb24gc2V0UHJveHkob3B0aW9ucywgY29uZmlnUHJveHksIGxvY2F0aW9uKSB7XG4gIGxldCBwcm94eSA9IGNvbmZpZ1Byb3h5O1xuICBpZiAoIXByb3h5ICYmIHByb3h5ICE9PSBmYWxzZSkge1xuICAgIGNvbnN0IHByb3h5VXJsID0gcHJveHlGcm9tRW52LmdldFByb3h5Rm9yVXJsKGxvY2F0aW9uKTtcbiAgICBpZiAocHJveHlVcmwpIHtcbiAgICAgIHByb3h5ID0gbmV3IFVSTChwcm94eVVybCk7XG4gICAgfVxuICB9XG4gIGlmIChwcm94eSkge1xuICAgIC8vIEJhc2ljIHByb3h5IGF1dGhvcml6YXRpb25cbiAgICBpZiAocHJveHkudXNlcm5hbWUpIHtcbiAgICAgIHByb3h5LmF1dGggPSAocHJveHkudXNlcm5hbWUgfHwgJycpICsgJzonICsgKHByb3h5LnBhc3N3b3JkIHx8ICcnKTtcbiAgICB9XG5cbiAgICBpZiAocHJveHkuYXV0aCkge1xuICAgICAgLy8gU3VwcG9ydCBwcm94eSBhdXRoIG9iamVjdCBmb3JtXG4gICAgICBpZiAocHJveHkuYXV0aC51c2VybmFtZSB8fCBwcm94eS5hdXRoLnBhc3N3b3JkKSB7XG4gICAgICAgIHByb3h5LmF1dGggPSAocHJveHkuYXV0aC51c2VybmFtZSB8fCAnJykgKyAnOicgKyAocHJveHkuYXV0aC5wYXNzd29yZCB8fCAnJyk7XG4gICAgICB9XG4gICAgICBjb25zdCBiYXNlNjQgPSBCdWZmZXJcbiAgICAgICAgLmZyb20ocHJveHkuYXV0aCwgJ3V0ZjgnKVxuICAgICAgICAudG9TdHJpbmcoJ2Jhc2U2NCcpO1xuICAgICAgb3B0aW9ucy5oZWFkZXJzWydQcm94eS1BdXRob3JpemF0aW9uJ10gPSAnQmFzaWMgJyArIGJhc2U2NDtcbiAgICB9XG5cbiAgICBvcHRpb25zLmhlYWRlcnMuaG9zdCA9IG9wdGlvbnMuaG9zdG5hbWUgKyAob3B0aW9ucy5wb3J0ID8gJzonICsgb3B0aW9ucy5wb3J0IDogJycpO1xuICAgIGNvbnN0IHByb3h5SG9zdCA9IHByb3h5Lmhvc3RuYW1lIHx8IHByb3h5Lmhvc3Q7XG4gICAgb3B0aW9ucy5ob3N0bmFtZSA9IHByb3h5SG9zdDtcbiAgICAvLyBSZXBsYWNlICdob3N0JyBzaW5jZSBvcHRpb25zIGlzIG5vdCBhIFVSTCBvYmplY3RcbiAgICBvcHRpb25zLmhvc3QgPSBwcm94eUhvc3Q7XG4gICAgb3B0aW9ucy5wb3J0ID0gcHJveHkucG9ydDtcbiAgICBvcHRpb25zLnBhdGggPSBsb2NhdGlvbjtcbiAgICBpZiAocHJveHkucHJvdG9jb2wpIHtcbiAgICAgIG9wdGlvbnMucHJvdG9jb2wgPSBwcm94eS5wcm90b2NvbC5pbmNsdWRlcygnOicpID8gcHJveHkucHJvdG9jb2wgOiBgJHtwcm94eS5wcm90b2NvbH06YDtcbiAgICB9XG4gIH1cblxuICBvcHRpb25zLmJlZm9yZVJlZGlyZWN0cy5wcm94eSA9IGZ1bmN0aW9uIGJlZm9yZVJlZGlyZWN0KHJlZGlyZWN0T3B0aW9ucykge1xuICAgIC8vIENvbmZpZ3VyZSBwcm94eSBmb3IgcmVkaXJlY3RlZCByZXF1ZXN0LCBwYXNzaW5nIHRoZSBvcmlnaW5hbCBjb25maWcgcHJveHkgdG8gYXBwbHlcbiAgICAvLyB0aGUgZXhhY3Qgc2FtZSBsb2dpYyBhcyBpZiB0aGUgcmVkaXJlY3RlZCByZXF1ZXN0IHdhcyBwZXJmb3JtZWQgYnkgYXhpb3MgZGlyZWN0bHkuXG4gICAgc2V0UHJveHkocmVkaXJlY3RPcHRpb25zLCBjb25maWdQcm94eSwgcmVkaXJlY3RPcHRpb25zLmhyZWYpO1xuICB9O1xufVxuXG5jb25zdCBpc0h0dHBBZGFwdGVyU3VwcG9ydGVkID0gdHlwZW9mIHByb2Nlc3MgIT09ICd1bmRlZmluZWQnICYmIHV0aWxzJDEua2luZE9mKHByb2Nlc3MpID09PSAncHJvY2Vzcyc7XG5cbi8vIHRlbXBvcmFyeSBob3RmaXhcblxuY29uc3Qgd3JhcEFzeW5jID0gKGFzeW5jRXhlY3V0b3IpID0+IHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBsZXQgb25Eb25lO1xuICAgIGxldCBpc0RvbmU7XG5cbiAgICBjb25zdCBkb25lID0gKHZhbHVlLCBpc1JlamVjdGVkKSA9PiB7XG4gICAgICBpZiAoaXNEb25lKSByZXR1cm47XG4gICAgICBpc0RvbmUgPSB0cnVlO1xuICAgICAgb25Eb25lICYmIG9uRG9uZSh2YWx1ZSwgaXNSZWplY3RlZCk7XG4gICAgfTtcblxuICAgIGNvbnN0IF9yZXNvbHZlID0gKHZhbHVlKSA9PiB7XG4gICAgICBkb25lKHZhbHVlKTtcbiAgICAgIHJlc29sdmUodmFsdWUpO1xuICAgIH07XG5cbiAgICBjb25zdCBfcmVqZWN0ID0gKHJlYXNvbikgPT4ge1xuICAgICAgZG9uZShyZWFzb24sIHRydWUpO1xuICAgICAgcmVqZWN0KHJlYXNvbik7XG4gICAgfTtcblxuICAgIGFzeW5jRXhlY3V0b3IoX3Jlc29sdmUsIF9yZWplY3QsIChvbkRvbmVIYW5kbGVyKSA9PiAob25Eb25lID0gb25Eb25lSGFuZGxlcikpLmNhdGNoKF9yZWplY3QpO1xuICB9KVxufTtcblxuY29uc3QgcmVzb2x2ZUZhbWlseSA9ICh7YWRkcmVzcywgZmFtaWx5fSkgPT4ge1xuICBpZiAoIXV0aWxzJDEuaXNTdHJpbmcoYWRkcmVzcykpIHtcbiAgICB0aHJvdyBUeXBlRXJyb3IoJ2FkZHJlc3MgbXVzdCBiZSBhIHN0cmluZycpO1xuICB9XG4gIHJldHVybiAoe1xuICAgIGFkZHJlc3MsXG4gICAgZmFtaWx5OiBmYW1pbHkgfHwgKGFkZHJlc3MuaW5kZXhPZignLicpIDwgMCA/IDYgOiA0KVxuICB9KTtcbn07XG5cbmNvbnN0IGJ1aWxkQWRkcmVzc0VudHJ5ID0gKGFkZHJlc3MsIGZhbWlseSkgPT4gcmVzb2x2ZUZhbWlseSh1dGlscyQxLmlzT2JqZWN0KGFkZHJlc3MpID8gYWRkcmVzcyA6IHthZGRyZXNzLCBmYW1pbHl9KTtcblxuLyplc2xpbnQgY29uc2lzdGVudC1yZXR1cm46MCovXG5jb25zdCBodHRwQWRhcHRlciA9IGlzSHR0cEFkYXB0ZXJTdXBwb3J0ZWQgJiYgZnVuY3Rpb24gaHR0cEFkYXB0ZXIoY29uZmlnKSB7XG4gIHJldHVybiB3cmFwQXN5bmMoYXN5bmMgZnVuY3Rpb24gZGlzcGF0Y2hIdHRwUmVxdWVzdChyZXNvbHZlLCByZWplY3QsIG9uRG9uZSkge1xuICAgIGxldCB7ZGF0YSwgbG9va3VwLCBmYW1pbHl9ID0gY29uZmlnO1xuICAgIGNvbnN0IHtyZXNwb25zZVR5cGUsIHJlc3BvbnNlRW5jb2Rpbmd9ID0gY29uZmlnO1xuICAgIGNvbnN0IG1ldGhvZCA9IGNvbmZpZy5tZXRob2QudG9VcHBlckNhc2UoKTtcbiAgICBsZXQgaXNEb25lO1xuICAgIGxldCByZWplY3RlZCA9IGZhbHNlO1xuICAgIGxldCByZXE7XG5cbiAgICBpZiAobG9va3VwKSB7XG4gICAgICBjb25zdCBfbG9va3VwID0gY2FsbGJhY2tpZnkkMShsb29rdXAsICh2YWx1ZSkgPT4gdXRpbHMkMS5pc0FycmF5KHZhbHVlKSA/IHZhbHVlIDogW3ZhbHVlXSk7XG4gICAgICAvLyBob3RmaXggdG8gc3VwcG9ydCBvcHQuYWxsIG9wdGlvbiB3aGljaCBpcyByZXF1aXJlZCBmb3Igbm9kZSAyMC54XG4gICAgICBsb29rdXAgPSAoaG9zdG5hbWUsIG9wdCwgY2IpID0+IHtcbiAgICAgICAgX2xvb2t1cChob3N0bmFtZSwgb3B0LCAoZXJyLCBhcmcwLCBhcmcxKSA9PiB7XG4gICAgICAgICAgY29uc3QgYWRkcmVzc2VzID0gdXRpbHMkMS5pc0FycmF5KGFyZzApID8gYXJnMC5tYXAoYWRkciA9PiBidWlsZEFkZHJlc3NFbnRyeShhZGRyKSkgOiBbYnVpbGRBZGRyZXNzRW50cnkoYXJnMCwgYXJnMSldO1xuXG4gICAgICAgICAgb3B0LmFsbCA/IGNiKGVyciwgYWRkcmVzc2VzKSA6IGNiKGVyciwgYWRkcmVzc2VzWzBdLmFkZHJlc3MsIGFkZHJlc3Nlc1swXS5mYW1pbHkpO1xuICAgICAgICB9KTtcbiAgICAgIH07XG4gICAgfVxuXG4gICAgLy8gdGVtcG9yYXJ5IGludGVybmFsIGVtaXR0ZXIgdW50aWwgdGhlIEF4aW9zUmVxdWVzdCBjbGFzcyB3aWxsIGJlIGltcGxlbWVudGVkXG4gICAgY29uc3QgZW1pdHRlciA9IG5ldyBFdmVudEVtaXR0ZXJfX2RlZmF1bHRbXCJkZWZhdWx0XCJdKCk7XG5cbiAgICBjb25zdCBvbkZpbmlzaGVkID0gKCkgPT4ge1xuICAgICAgaWYgKGNvbmZpZy5jYW5jZWxUb2tlbikge1xuICAgICAgICBjb25maWcuY2FuY2VsVG9rZW4udW5zdWJzY3JpYmUoYWJvcnQpO1xuICAgICAgfVxuXG4gICAgICBpZiAoY29uZmlnLnNpZ25hbCkge1xuICAgICAgICBjb25maWcuc2lnbmFsLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2Fib3J0JywgYWJvcnQpO1xuICAgICAgfVxuXG4gICAgICBlbWl0dGVyLnJlbW92ZUFsbExpc3RlbmVycygpO1xuICAgIH07XG5cbiAgICBvbkRvbmUoKHZhbHVlLCBpc1JlamVjdGVkKSA9PiB7XG4gICAgICBpc0RvbmUgPSB0cnVlO1xuICAgICAgaWYgKGlzUmVqZWN0ZWQpIHtcbiAgICAgICAgcmVqZWN0ZWQgPSB0cnVlO1xuICAgICAgICBvbkZpbmlzaGVkKCk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBmdW5jdGlvbiBhYm9ydChyZWFzb24pIHtcbiAgICAgIGVtaXR0ZXIuZW1pdCgnYWJvcnQnLCAhcmVhc29uIHx8IHJlYXNvbi50eXBlID8gbmV3IENhbmNlbGVkRXJyb3IobnVsbCwgY29uZmlnLCByZXEpIDogcmVhc29uKTtcbiAgICB9XG5cbiAgICBlbWl0dGVyLm9uY2UoJ2Fib3J0JywgcmVqZWN0KTtcblxuICAgIGlmIChjb25maWcuY2FuY2VsVG9rZW4gfHwgY29uZmlnLnNpZ25hbCkge1xuICAgICAgY29uZmlnLmNhbmNlbFRva2VuICYmIGNvbmZpZy5jYW5jZWxUb2tlbi5zdWJzY3JpYmUoYWJvcnQpO1xuICAgICAgaWYgKGNvbmZpZy5zaWduYWwpIHtcbiAgICAgICAgY29uZmlnLnNpZ25hbC5hYm9ydGVkID8gYWJvcnQoKSA6IGNvbmZpZy5zaWduYWwuYWRkRXZlbnRMaXN0ZW5lcignYWJvcnQnLCBhYm9ydCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gUGFyc2UgdXJsXG4gICAgY29uc3QgZnVsbFBhdGggPSBidWlsZEZ1bGxQYXRoKGNvbmZpZy5iYXNlVVJMLCBjb25maWcudXJsKTtcbiAgICBjb25zdCBwYXJzZWQgPSBuZXcgVVJMKGZ1bGxQYXRoLCAnaHR0cDovL2xvY2FsaG9zdCcpO1xuICAgIGNvbnN0IHByb3RvY29sID0gcGFyc2VkLnByb3RvY29sIHx8IHN1cHBvcnRlZFByb3RvY29sc1swXTtcblxuICAgIGlmIChwcm90b2NvbCA9PT0gJ2RhdGE6Jykge1xuICAgICAgbGV0IGNvbnZlcnRlZERhdGE7XG5cbiAgICAgIGlmIChtZXRob2QgIT09ICdHRVQnKSB7XG4gICAgICAgIHJldHVybiBzZXR0bGUocmVzb2x2ZSwgcmVqZWN0LCB7XG4gICAgICAgICAgc3RhdHVzOiA0MDUsXG4gICAgICAgICAgc3RhdHVzVGV4dDogJ21ldGhvZCBub3QgYWxsb3dlZCcsXG4gICAgICAgICAgaGVhZGVyczoge30sXG4gICAgICAgICAgY29uZmlnXG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICB0cnkge1xuICAgICAgICBjb252ZXJ0ZWREYXRhID0gZnJvbURhdGFVUkkoY29uZmlnLnVybCwgcmVzcG9uc2VUeXBlID09PSAnYmxvYicsIHtcbiAgICAgICAgICBCbG9iOiBjb25maWcuZW52ICYmIGNvbmZpZy5lbnYuQmxvYlxuICAgICAgICB9KTtcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICB0aHJvdyBBeGlvc0Vycm9yLmZyb20oZXJyLCBBeGlvc0Vycm9yLkVSUl9CQURfUkVRVUVTVCwgY29uZmlnKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHJlc3BvbnNlVHlwZSA9PT0gJ3RleHQnKSB7XG4gICAgICAgIGNvbnZlcnRlZERhdGEgPSBjb252ZXJ0ZWREYXRhLnRvU3RyaW5nKHJlc3BvbnNlRW5jb2RpbmcpO1xuXG4gICAgICAgIGlmICghcmVzcG9uc2VFbmNvZGluZyB8fCByZXNwb25zZUVuY29kaW5nID09PSAndXRmOCcpIHtcbiAgICAgICAgICBjb252ZXJ0ZWREYXRhID0gdXRpbHMkMS5zdHJpcEJPTShjb252ZXJ0ZWREYXRhKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChyZXNwb25zZVR5cGUgPT09ICdzdHJlYW0nKSB7XG4gICAgICAgIGNvbnZlcnRlZERhdGEgPSBzdHJlYW1fX2RlZmF1bHRbXCJkZWZhdWx0XCJdLlJlYWRhYmxlLmZyb20oY29udmVydGVkRGF0YSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBzZXR0bGUocmVzb2x2ZSwgcmVqZWN0LCB7XG4gICAgICAgIGRhdGE6IGNvbnZlcnRlZERhdGEsXG4gICAgICAgIHN0YXR1czogMjAwLFxuICAgICAgICBzdGF0dXNUZXh0OiAnT0snLFxuICAgICAgICBoZWFkZXJzOiBuZXcgQXhpb3NIZWFkZXJzJDEoKSxcbiAgICAgICAgY29uZmlnXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAoc3VwcG9ydGVkUHJvdG9jb2xzLmluZGV4T2YocHJvdG9jb2wpID09PSAtMSkge1xuICAgICAgcmV0dXJuIHJlamVjdChuZXcgQXhpb3NFcnJvcihcbiAgICAgICAgJ1Vuc3VwcG9ydGVkIHByb3RvY29sICcgKyBwcm90b2NvbCxcbiAgICAgICAgQXhpb3NFcnJvci5FUlJfQkFEX1JFUVVFU1QsXG4gICAgICAgIGNvbmZpZ1xuICAgICAgKSk7XG4gICAgfVxuXG4gICAgY29uc3QgaGVhZGVycyA9IEF4aW9zSGVhZGVycyQxLmZyb20oY29uZmlnLmhlYWRlcnMpLm5vcm1hbGl6ZSgpO1xuXG4gICAgLy8gU2V0IFVzZXItQWdlbnQgKHJlcXVpcmVkIGJ5IHNvbWUgc2VydmVycylcbiAgICAvLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL2F4aW9zL2F4aW9zL2lzc3Vlcy82OVxuICAgIC8vIFVzZXItQWdlbnQgaXMgc3BlY2lmaWVkOyBoYW5kbGUgY2FzZSB3aGVyZSBubyBVQSBoZWFkZXIgaXMgZGVzaXJlZFxuICAgIC8vIE9ubHkgc2V0IGhlYWRlciBpZiBpdCBoYXNuJ3QgYmVlbiBzZXQgaW4gY29uZmlnXG4gICAgaGVhZGVycy5zZXQoJ1VzZXItQWdlbnQnLCAnYXhpb3MvJyArIFZFUlNJT04sIGZhbHNlKTtcblxuICAgIGNvbnN0IG9uRG93bmxvYWRQcm9ncmVzcyA9IGNvbmZpZy5vbkRvd25sb2FkUHJvZ3Jlc3M7XG4gICAgY29uc3Qgb25VcGxvYWRQcm9ncmVzcyA9IGNvbmZpZy5vblVwbG9hZFByb2dyZXNzO1xuICAgIGNvbnN0IG1heFJhdGUgPSBjb25maWcubWF4UmF0ZTtcbiAgICBsZXQgbWF4VXBsb2FkUmF0ZSA9IHVuZGVmaW5lZDtcbiAgICBsZXQgbWF4RG93bmxvYWRSYXRlID0gdW5kZWZpbmVkO1xuXG4gICAgLy8gc3VwcG9ydCBmb3Igc3BlYyBjb21wbGlhbnQgRm9ybURhdGEgb2JqZWN0c1xuICAgIGlmICh1dGlscyQxLmlzU3BlY0NvbXBsaWFudEZvcm0oZGF0YSkpIHtcbiAgICAgIGNvbnN0IHVzZXJCb3VuZGFyeSA9IGhlYWRlcnMuZ2V0Q29udGVudFR5cGUoL2JvdW5kYXJ5PShbLV9cXHdcXGRdezEwLDcwfSkvaSk7XG5cbiAgICAgIGRhdGEgPSBmb3JtRGF0YVRvU3RyZWFtJDEoZGF0YSwgKGZvcm1IZWFkZXJzKSA9PiB7XG4gICAgICAgIGhlYWRlcnMuc2V0KGZvcm1IZWFkZXJzKTtcbiAgICAgIH0sIHtcbiAgICAgICAgdGFnOiBgYXhpb3MtJHtWRVJTSU9OfS1ib3VuZGFyeWAsXG4gICAgICAgIGJvdW5kYXJ5OiB1c2VyQm91bmRhcnkgJiYgdXNlckJvdW5kYXJ5WzFdIHx8IHVuZGVmaW5lZFxuICAgICAgfSk7XG4gICAgICAvLyBzdXBwb3J0IGZvciBodHRwczovL3d3dy5ucG1qcy5jb20vcGFja2FnZS9mb3JtLWRhdGEgYXBpXG4gICAgfSBlbHNlIGlmICh1dGlscyQxLmlzRm9ybURhdGEoZGF0YSkgJiYgdXRpbHMkMS5pc0Z1bmN0aW9uKGRhdGEuZ2V0SGVhZGVycykpIHtcbiAgICAgIGhlYWRlcnMuc2V0KGRhdGEuZ2V0SGVhZGVycygpKTtcblxuICAgICAgaWYgKCFoZWFkZXJzLmhhc0NvbnRlbnRMZW5ndGgoKSkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IGtub3duTGVuZ3RoID0gYXdhaXQgdXRpbF9fZGVmYXVsdFtcImRlZmF1bHRcIl0ucHJvbWlzaWZ5KGRhdGEuZ2V0TGVuZ3RoKS5jYWxsKGRhdGEpO1xuICAgICAgICAgIE51bWJlci5pc0Zpbml0ZShrbm93bkxlbmd0aCkgJiYga25vd25MZW5ndGggPj0gMCAmJiBoZWFkZXJzLnNldENvbnRlbnRMZW5ndGgoa25vd25MZW5ndGgpO1xuICAgICAgICAgIC8qZXNsaW50IG5vLWVtcHR5OjAqL1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHV0aWxzJDEuaXNCbG9iKGRhdGEpKSB7XG4gICAgICBkYXRhLnNpemUgJiYgaGVhZGVycy5zZXRDb250ZW50VHlwZShkYXRhLnR5cGUgfHwgJ2FwcGxpY2F0aW9uL29jdGV0LXN0cmVhbScpO1xuICAgICAgaGVhZGVycy5zZXRDb250ZW50TGVuZ3RoKGRhdGEuc2l6ZSB8fCAwKTtcbiAgICAgIGRhdGEgPSBzdHJlYW1fX2RlZmF1bHRbXCJkZWZhdWx0XCJdLlJlYWRhYmxlLmZyb20ocmVhZEJsb2IkMShkYXRhKSk7XG4gICAgfSBlbHNlIGlmIChkYXRhICYmICF1dGlscyQxLmlzU3RyZWFtKGRhdGEpKSB7XG4gICAgICBpZiAoQnVmZmVyLmlzQnVmZmVyKGRhdGEpKSA7IGVsc2UgaWYgKHV0aWxzJDEuaXNBcnJheUJ1ZmZlcihkYXRhKSkge1xuICAgICAgICBkYXRhID0gQnVmZmVyLmZyb20obmV3IFVpbnQ4QXJyYXkoZGF0YSkpO1xuICAgICAgfSBlbHNlIGlmICh1dGlscyQxLmlzU3RyaW5nKGRhdGEpKSB7XG4gICAgICAgIGRhdGEgPSBCdWZmZXIuZnJvbShkYXRhLCAndXRmLTgnKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiByZWplY3QobmV3IEF4aW9zRXJyb3IoXG4gICAgICAgICAgJ0RhdGEgYWZ0ZXIgdHJhbnNmb3JtYXRpb24gbXVzdCBiZSBhIHN0cmluZywgYW4gQXJyYXlCdWZmZXIsIGEgQnVmZmVyLCBvciBhIFN0cmVhbScsXG4gICAgICAgICAgQXhpb3NFcnJvci5FUlJfQkFEX1JFUVVFU1QsXG4gICAgICAgICAgY29uZmlnXG4gICAgICAgICkpO1xuICAgICAgfVxuXG4gICAgICAvLyBBZGQgQ29udGVudC1MZW5ndGggaGVhZGVyIGlmIGRhdGEgZXhpc3RzXG4gICAgICBoZWFkZXJzLnNldENvbnRlbnRMZW5ndGgoZGF0YS5sZW5ndGgsIGZhbHNlKTtcblxuICAgICAgaWYgKGNvbmZpZy5tYXhCb2R5TGVuZ3RoID4gLTEgJiYgZGF0YS5sZW5ndGggPiBjb25maWcubWF4Qm9keUxlbmd0aCkge1xuICAgICAgICByZXR1cm4gcmVqZWN0KG5ldyBBeGlvc0Vycm9yKFxuICAgICAgICAgICdSZXF1ZXN0IGJvZHkgbGFyZ2VyIHRoYW4gbWF4Qm9keUxlbmd0aCBsaW1pdCcsXG4gICAgICAgICAgQXhpb3NFcnJvci5FUlJfQkFEX1JFUVVFU1QsXG4gICAgICAgICAgY29uZmlnXG4gICAgICAgICkpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGNvbnRlbnRMZW5ndGggPSB1dGlscyQxLnRvRmluaXRlTnVtYmVyKGhlYWRlcnMuZ2V0Q29udGVudExlbmd0aCgpKTtcblxuICAgIGlmICh1dGlscyQxLmlzQXJyYXkobWF4UmF0ZSkpIHtcbiAgICAgIG1heFVwbG9hZFJhdGUgPSBtYXhSYXRlWzBdO1xuICAgICAgbWF4RG93bmxvYWRSYXRlID0gbWF4UmF0ZVsxXTtcbiAgICB9IGVsc2Uge1xuICAgICAgbWF4VXBsb2FkUmF0ZSA9IG1heERvd25sb2FkUmF0ZSA9IG1heFJhdGU7XG4gICAgfVxuXG4gICAgaWYgKGRhdGEgJiYgKG9uVXBsb2FkUHJvZ3Jlc3MgfHwgbWF4VXBsb2FkUmF0ZSkpIHtcbiAgICAgIGlmICghdXRpbHMkMS5pc1N0cmVhbShkYXRhKSkge1xuICAgICAgICBkYXRhID0gc3RyZWFtX19kZWZhdWx0W1wiZGVmYXVsdFwiXS5SZWFkYWJsZS5mcm9tKGRhdGEsIHtvYmplY3RNb2RlOiBmYWxzZX0pO1xuICAgICAgfVxuXG4gICAgICBkYXRhID0gc3RyZWFtX19kZWZhdWx0W1wiZGVmYXVsdFwiXS5waXBlbGluZShbZGF0YSwgbmV3IEF4aW9zVHJhbnNmb3JtU3RyZWFtJDEoe1xuICAgICAgICBsZW5ndGg6IGNvbnRlbnRMZW5ndGgsXG4gICAgICAgIG1heFJhdGU6IHV0aWxzJDEudG9GaW5pdGVOdW1iZXIobWF4VXBsb2FkUmF0ZSlcbiAgICAgIH0pXSwgdXRpbHMkMS5ub29wKTtcblxuICAgICAgb25VcGxvYWRQcm9ncmVzcyAmJiBkYXRhLm9uKCdwcm9ncmVzcycsIHByb2dyZXNzID0+IHtcbiAgICAgICAgb25VcGxvYWRQcm9ncmVzcyhPYmplY3QuYXNzaWduKHByb2dyZXNzLCB7XG4gICAgICAgICAgdXBsb2FkOiB0cnVlXG4gICAgICAgIH0pKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIEhUVFAgYmFzaWMgYXV0aGVudGljYXRpb25cbiAgICBsZXQgYXV0aCA9IHVuZGVmaW5lZDtcbiAgICBpZiAoY29uZmlnLmF1dGgpIHtcbiAgICAgIGNvbnN0IHVzZXJuYW1lID0gY29uZmlnLmF1dGgudXNlcm5hbWUgfHwgJyc7XG4gICAgICBjb25zdCBwYXNzd29yZCA9IGNvbmZpZy5hdXRoLnBhc3N3b3JkIHx8ICcnO1xuICAgICAgYXV0aCA9IHVzZXJuYW1lICsgJzonICsgcGFzc3dvcmQ7XG4gICAgfVxuXG4gICAgaWYgKCFhdXRoICYmIHBhcnNlZC51c2VybmFtZSkge1xuICAgICAgY29uc3QgdXJsVXNlcm5hbWUgPSBwYXJzZWQudXNlcm5hbWU7XG4gICAgICBjb25zdCB1cmxQYXNzd29yZCA9IHBhcnNlZC5wYXNzd29yZDtcbiAgICAgIGF1dGggPSB1cmxVc2VybmFtZSArICc6JyArIHVybFBhc3N3b3JkO1xuICAgIH1cblxuICAgIGF1dGggJiYgaGVhZGVycy5kZWxldGUoJ2F1dGhvcml6YXRpb24nKTtcblxuICAgIGxldCBwYXRoO1xuXG4gICAgdHJ5IHtcbiAgICAgIHBhdGggPSBidWlsZFVSTChcbiAgICAgICAgcGFyc2VkLnBhdGhuYW1lICsgcGFyc2VkLnNlYXJjaCxcbiAgICAgICAgY29uZmlnLnBhcmFtcyxcbiAgICAgICAgY29uZmlnLnBhcmFtc1NlcmlhbGl6ZXJcbiAgICAgICkucmVwbGFjZSgvXlxcPy8sICcnKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGNvbnN0IGN1c3RvbUVyciA9IG5ldyBFcnJvcihlcnIubWVzc2FnZSk7XG4gICAgICBjdXN0b21FcnIuY29uZmlnID0gY29uZmlnO1xuICAgICAgY3VzdG9tRXJyLnVybCA9IGNvbmZpZy51cmw7XG4gICAgICBjdXN0b21FcnIuZXhpc3RzID0gdHJ1ZTtcbiAgICAgIHJldHVybiByZWplY3QoY3VzdG9tRXJyKTtcbiAgICB9XG5cbiAgICBoZWFkZXJzLnNldChcbiAgICAgICdBY2NlcHQtRW5jb2RpbmcnLFxuICAgICAgJ2d6aXAsIGNvbXByZXNzLCBkZWZsYXRlJyArIChpc0Jyb3RsaVN1cHBvcnRlZCA/ICcsIGJyJyA6ICcnKSwgZmFsc2VcbiAgICAgICk7XG5cbiAgICBjb25zdCBvcHRpb25zID0ge1xuICAgICAgcGF0aCxcbiAgICAgIG1ldGhvZDogbWV0aG9kLFxuICAgICAgaGVhZGVyczogaGVhZGVycy50b0pTT04oKSxcbiAgICAgIGFnZW50czogeyBodHRwOiBjb25maWcuaHR0cEFnZW50LCBodHRwczogY29uZmlnLmh0dHBzQWdlbnQgfSxcbiAgICAgIGF1dGgsXG4gICAgICBwcm90b2NvbCxcbiAgICAgIGZhbWlseSxcbiAgICAgIGJlZm9yZVJlZGlyZWN0OiBkaXNwYXRjaEJlZm9yZVJlZGlyZWN0LFxuICAgICAgYmVmb3JlUmVkaXJlY3RzOiB7fVxuICAgIH07XG5cbiAgICAvLyBjYWNoZWFibGUtbG9va3VwIGludGVncmF0aW9uIGhvdGZpeFxuICAgICF1dGlscyQxLmlzVW5kZWZpbmVkKGxvb2t1cCkgJiYgKG9wdGlvbnMubG9va3VwID0gbG9va3VwKTtcblxuICAgIGlmIChjb25maWcuc29ja2V0UGF0aCkge1xuICAgICAgb3B0aW9ucy5zb2NrZXRQYXRoID0gY29uZmlnLnNvY2tldFBhdGg7XG4gICAgfSBlbHNlIHtcbiAgICAgIG9wdGlvbnMuaG9zdG5hbWUgPSBwYXJzZWQuaG9zdG5hbWU7XG4gICAgICBvcHRpb25zLnBvcnQgPSBwYXJzZWQucG9ydDtcbiAgICAgIHNldFByb3h5KG9wdGlvbnMsIGNvbmZpZy5wcm94eSwgcHJvdG9jb2wgKyAnLy8nICsgcGFyc2VkLmhvc3RuYW1lICsgKHBhcnNlZC5wb3J0ID8gJzonICsgcGFyc2VkLnBvcnQgOiAnJykgKyBvcHRpb25zLnBhdGgpO1xuICAgIH1cblxuICAgIGxldCB0cmFuc3BvcnQ7XG4gICAgY29uc3QgaXNIdHRwc1JlcXVlc3QgPSBpc0h0dHBzLnRlc3Qob3B0aW9ucy5wcm90b2NvbCk7XG4gICAgb3B0aW9ucy5hZ2VudCA9IGlzSHR0cHNSZXF1ZXN0ID8gY29uZmlnLmh0dHBzQWdlbnQgOiBjb25maWcuaHR0cEFnZW50O1xuICAgIGlmIChjb25maWcudHJhbnNwb3J0KSB7XG4gICAgICB0cmFuc3BvcnQgPSBjb25maWcudHJhbnNwb3J0O1xuICAgIH0gZWxzZSBpZiAoY29uZmlnLm1heFJlZGlyZWN0cyA9PT0gMCkge1xuICAgICAgdHJhbnNwb3J0ID0gaXNIdHRwc1JlcXVlc3QgPyBodHRwc19fZGVmYXVsdFtcImRlZmF1bHRcIl0gOiBodHRwX19kZWZhdWx0W1wiZGVmYXVsdFwiXTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKGNvbmZpZy5tYXhSZWRpcmVjdHMpIHtcbiAgICAgICAgb3B0aW9ucy5tYXhSZWRpcmVjdHMgPSBjb25maWcubWF4UmVkaXJlY3RzO1xuICAgICAgfVxuICAgICAgaWYgKGNvbmZpZy5iZWZvcmVSZWRpcmVjdCkge1xuICAgICAgICBvcHRpb25zLmJlZm9yZVJlZGlyZWN0cy5jb25maWcgPSBjb25maWcuYmVmb3JlUmVkaXJlY3Q7XG4gICAgICB9XG4gICAgICB0cmFuc3BvcnQgPSBpc0h0dHBzUmVxdWVzdCA/IGh0dHBzRm9sbG93IDogaHR0cEZvbGxvdztcbiAgICB9XG5cbiAgICBpZiAoY29uZmlnLm1heEJvZHlMZW5ndGggPiAtMSkge1xuICAgICAgb3B0aW9ucy5tYXhCb2R5TGVuZ3RoID0gY29uZmlnLm1heEJvZHlMZW5ndGg7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGZvbGxvdy1yZWRpcmVjdHMgZG9lcyBub3Qgc2tpcCBjb21wYXJpc29uLCBzbyBpdCBzaG91bGQgYWx3YXlzIHN1Y2NlZWQgZm9yIGF4aW9zIC0xIHVubGltaXRlZFxuICAgICAgb3B0aW9ucy5tYXhCb2R5TGVuZ3RoID0gSW5maW5pdHk7XG4gICAgfVxuXG4gICAgaWYgKGNvbmZpZy5pbnNlY3VyZUhUVFBQYXJzZXIpIHtcbiAgICAgIG9wdGlvbnMuaW5zZWN1cmVIVFRQUGFyc2VyID0gY29uZmlnLmluc2VjdXJlSFRUUFBhcnNlcjtcbiAgICB9XG5cbiAgICAvLyBDcmVhdGUgdGhlIHJlcXVlc3RcbiAgICByZXEgPSB0cmFuc3BvcnQucmVxdWVzdChvcHRpb25zLCBmdW5jdGlvbiBoYW5kbGVSZXNwb25zZShyZXMpIHtcbiAgICAgIGlmIChyZXEuZGVzdHJveWVkKSByZXR1cm47XG5cbiAgICAgIGNvbnN0IHN0cmVhbXMgPSBbcmVzXTtcblxuICAgICAgY29uc3QgcmVzcG9uc2VMZW5ndGggPSArcmVzLmhlYWRlcnNbJ2NvbnRlbnQtbGVuZ3RoJ107XG5cbiAgICAgIGlmIChvbkRvd25sb2FkUHJvZ3Jlc3MpIHtcbiAgICAgICAgY29uc3QgdHJhbnNmb3JtU3RyZWFtID0gbmV3IEF4aW9zVHJhbnNmb3JtU3RyZWFtJDEoe1xuICAgICAgICAgIGxlbmd0aDogdXRpbHMkMS50b0Zpbml0ZU51bWJlcihyZXNwb25zZUxlbmd0aCksXG4gICAgICAgICAgbWF4UmF0ZTogdXRpbHMkMS50b0Zpbml0ZU51bWJlcihtYXhEb3dubG9hZFJhdGUpXG4gICAgICAgIH0pO1xuXG4gICAgICAgIG9uRG93bmxvYWRQcm9ncmVzcyAmJiB0cmFuc2Zvcm1TdHJlYW0ub24oJ3Byb2dyZXNzJywgcHJvZ3Jlc3MgPT4ge1xuICAgICAgICAgIG9uRG93bmxvYWRQcm9ncmVzcyhPYmplY3QuYXNzaWduKHByb2dyZXNzLCB7XG4gICAgICAgICAgICBkb3dubG9hZDogdHJ1ZVxuICAgICAgICAgIH0pKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgc3RyZWFtcy5wdXNoKHRyYW5zZm9ybVN0cmVhbSk7XG4gICAgICB9XG5cbiAgICAgIC8vIGRlY29tcHJlc3MgdGhlIHJlc3BvbnNlIGJvZHkgdHJhbnNwYXJlbnRseSBpZiByZXF1aXJlZFxuICAgICAgbGV0IHJlc3BvbnNlU3RyZWFtID0gcmVzO1xuXG4gICAgICAvLyByZXR1cm4gdGhlIGxhc3QgcmVxdWVzdCBpbiBjYXNlIG9mIHJlZGlyZWN0c1xuICAgICAgY29uc3QgbGFzdFJlcXVlc3QgPSByZXMucmVxIHx8IHJlcTtcblxuICAgICAgLy8gaWYgZGVjb21wcmVzcyBkaXNhYmxlZCB3ZSBzaG91bGQgbm90IGRlY29tcHJlc3NcbiAgICAgIGlmIChjb25maWcuZGVjb21wcmVzcyAhPT0gZmFsc2UgJiYgcmVzLmhlYWRlcnNbJ2NvbnRlbnQtZW5jb2RpbmcnXSkge1xuICAgICAgICAvLyBpZiBubyBjb250ZW50LCBidXQgaGVhZGVycyBzdGlsbCBzYXkgdGhhdCBpdCBpcyBlbmNvZGVkLFxuICAgICAgICAvLyByZW1vdmUgdGhlIGhlYWRlciBub3QgY29uZnVzZSBkb3duc3RyZWFtIG9wZXJhdGlvbnNcbiAgICAgICAgaWYgKG1ldGhvZCA9PT0gJ0hFQUQnIHx8IHJlcy5zdGF0dXNDb2RlID09PSAyMDQpIHtcbiAgICAgICAgICBkZWxldGUgcmVzLmhlYWRlcnNbJ2NvbnRlbnQtZW5jb2RpbmcnXTtcbiAgICAgICAgfVxuXG4gICAgICAgIHN3aXRjaCAoKHJlcy5oZWFkZXJzWydjb250ZW50LWVuY29kaW5nJ10gfHwgJycpLnRvTG93ZXJDYXNlKCkpIHtcbiAgICAgICAgLyplc2xpbnQgZGVmYXVsdC1jYXNlOjAqL1xuICAgICAgICBjYXNlICdnemlwJzpcbiAgICAgICAgY2FzZSAneC1nemlwJzpcbiAgICAgICAgY2FzZSAnY29tcHJlc3MnOlxuICAgICAgICBjYXNlICd4LWNvbXByZXNzJzpcbiAgICAgICAgICAvLyBhZGQgdGhlIHVuemlwcGVyIHRvIHRoZSBib2R5IHN0cmVhbSBwcm9jZXNzaW5nIHBpcGVsaW5lXG4gICAgICAgICAgc3RyZWFtcy5wdXNoKHpsaWJfX2RlZmF1bHRbXCJkZWZhdWx0XCJdLmNyZWF0ZVVuemlwKHpsaWJPcHRpb25zKSk7XG5cbiAgICAgICAgICAvLyByZW1vdmUgdGhlIGNvbnRlbnQtZW5jb2RpbmcgaW4gb3JkZXIgdG8gbm90IGNvbmZ1c2UgZG93bnN0cmVhbSBvcGVyYXRpb25zXG4gICAgICAgICAgZGVsZXRlIHJlcy5oZWFkZXJzWydjb250ZW50LWVuY29kaW5nJ107XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ2RlZmxhdGUnOlxuICAgICAgICAgIHN0cmVhbXMucHVzaChuZXcgWmxpYkhlYWRlclRyYW5zZm9ybVN0cmVhbSQxKCkpO1xuXG4gICAgICAgICAgLy8gYWRkIHRoZSB1bnppcHBlciB0byB0aGUgYm9keSBzdHJlYW0gcHJvY2Vzc2luZyBwaXBlbGluZVxuICAgICAgICAgIHN0cmVhbXMucHVzaCh6bGliX19kZWZhdWx0W1wiZGVmYXVsdFwiXS5jcmVhdGVVbnppcCh6bGliT3B0aW9ucykpO1xuXG4gICAgICAgICAgLy8gcmVtb3ZlIHRoZSBjb250ZW50LWVuY29kaW5nIGluIG9yZGVyIHRvIG5vdCBjb25mdXNlIGRvd25zdHJlYW0gb3BlcmF0aW9uc1xuICAgICAgICAgIGRlbGV0ZSByZXMuaGVhZGVyc1snY29udGVudC1lbmNvZGluZyddO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdicic6XG4gICAgICAgICAgaWYgKGlzQnJvdGxpU3VwcG9ydGVkKSB7XG4gICAgICAgICAgICBzdHJlYW1zLnB1c2goemxpYl9fZGVmYXVsdFtcImRlZmF1bHRcIl0uY3JlYXRlQnJvdGxpRGVjb21wcmVzcyhicm90bGlPcHRpb25zKSk7XG4gICAgICAgICAgICBkZWxldGUgcmVzLmhlYWRlcnNbJ2NvbnRlbnQtZW5jb2RpbmcnXTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmVzcG9uc2VTdHJlYW0gPSBzdHJlYW1zLmxlbmd0aCA+IDEgPyBzdHJlYW1fX2RlZmF1bHRbXCJkZWZhdWx0XCJdLnBpcGVsaW5lKHN0cmVhbXMsIHV0aWxzJDEubm9vcCkgOiBzdHJlYW1zWzBdO1xuXG4gICAgICBjb25zdCBvZmZMaXN0ZW5lcnMgPSBzdHJlYW1fX2RlZmF1bHRbXCJkZWZhdWx0XCJdLmZpbmlzaGVkKHJlc3BvbnNlU3RyZWFtLCAoKSA9PiB7XG4gICAgICAgIG9mZkxpc3RlbmVycygpO1xuICAgICAgICBvbkZpbmlzaGVkKCk7XG4gICAgICB9KTtcblxuICAgICAgY29uc3QgcmVzcG9uc2UgPSB7XG4gICAgICAgIHN0YXR1czogcmVzLnN0YXR1c0NvZGUsXG4gICAgICAgIHN0YXR1c1RleHQ6IHJlcy5zdGF0dXNNZXNzYWdlLFxuICAgICAgICBoZWFkZXJzOiBuZXcgQXhpb3NIZWFkZXJzJDEocmVzLmhlYWRlcnMpLFxuICAgICAgICBjb25maWcsXG4gICAgICAgIHJlcXVlc3Q6IGxhc3RSZXF1ZXN0XG4gICAgICB9O1xuXG4gICAgICBpZiAocmVzcG9uc2VUeXBlID09PSAnc3RyZWFtJykge1xuICAgICAgICByZXNwb25zZS5kYXRhID0gcmVzcG9uc2VTdHJlYW07XG4gICAgICAgIHNldHRsZShyZXNvbHZlLCByZWplY3QsIHJlc3BvbnNlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlQnVmZmVyID0gW107XG4gICAgICAgIGxldCB0b3RhbFJlc3BvbnNlQnl0ZXMgPSAwO1xuXG4gICAgICAgIHJlc3BvbnNlU3RyZWFtLm9uKCdkYXRhJywgZnVuY3Rpb24gaGFuZGxlU3RyZWFtRGF0YShjaHVuaykge1xuICAgICAgICAgIHJlc3BvbnNlQnVmZmVyLnB1c2goY2h1bmspO1xuICAgICAgICAgIHRvdGFsUmVzcG9uc2VCeXRlcyArPSBjaHVuay5sZW5ndGg7XG5cbiAgICAgICAgICAvLyBtYWtlIHN1cmUgdGhlIGNvbnRlbnQgbGVuZ3RoIGlzIG5vdCBvdmVyIHRoZSBtYXhDb250ZW50TGVuZ3RoIGlmIHNwZWNpZmllZFxuICAgICAgICAgIGlmIChjb25maWcubWF4Q29udGVudExlbmd0aCA+IC0xICYmIHRvdGFsUmVzcG9uc2VCeXRlcyA+IGNvbmZpZy5tYXhDb250ZW50TGVuZ3RoKSB7XG4gICAgICAgICAgICAvLyBzdHJlYW0uZGVzdHJveSgpIGVtaXQgYWJvcnRlZCBldmVudCBiZWZvcmUgY2FsbGluZyByZWplY3QoKSBvbiBOb2RlLmpzIHYxNlxuICAgICAgICAgICAgcmVqZWN0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgcmVzcG9uc2VTdHJlYW0uZGVzdHJveSgpO1xuICAgICAgICAgICAgcmVqZWN0KG5ldyBBeGlvc0Vycm9yKCdtYXhDb250ZW50TGVuZ3RoIHNpemUgb2YgJyArIGNvbmZpZy5tYXhDb250ZW50TGVuZ3RoICsgJyBleGNlZWRlZCcsXG4gICAgICAgICAgICAgIEF4aW9zRXJyb3IuRVJSX0JBRF9SRVNQT05TRSwgY29uZmlnLCBsYXN0UmVxdWVzdCkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmVzcG9uc2VTdHJlYW0ub24oJ2Fib3J0ZWQnLCBmdW5jdGlvbiBoYW5kbGVyU3RyZWFtQWJvcnRlZCgpIHtcbiAgICAgICAgICBpZiAocmVqZWN0ZWQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb25zdCBlcnIgPSBuZXcgQXhpb3NFcnJvcihcbiAgICAgICAgICAgICdtYXhDb250ZW50TGVuZ3RoIHNpemUgb2YgJyArIGNvbmZpZy5tYXhDb250ZW50TGVuZ3RoICsgJyBleGNlZWRlZCcsXG4gICAgICAgICAgICBBeGlvc0Vycm9yLkVSUl9CQURfUkVTUE9OU0UsXG4gICAgICAgICAgICBjb25maWcsXG4gICAgICAgICAgICBsYXN0UmVxdWVzdFxuICAgICAgICAgICk7XG4gICAgICAgICAgcmVzcG9uc2VTdHJlYW0uZGVzdHJveShlcnIpO1xuICAgICAgICAgIHJlamVjdChlcnIpO1xuICAgICAgICB9KTtcblxuICAgICAgICByZXNwb25zZVN0cmVhbS5vbignZXJyb3InLCBmdW5jdGlvbiBoYW5kbGVTdHJlYW1FcnJvcihlcnIpIHtcbiAgICAgICAgICBpZiAocmVxLmRlc3Ryb3llZCkgcmV0dXJuO1xuICAgICAgICAgIHJlamVjdChBeGlvc0Vycm9yLmZyb20oZXJyLCBudWxsLCBjb25maWcsIGxhc3RSZXF1ZXN0KSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJlc3BvbnNlU3RyZWFtLm9uKCdlbmQnLCBmdW5jdGlvbiBoYW5kbGVTdHJlYW1FbmQoKSB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGxldCByZXNwb25zZURhdGEgPSByZXNwb25zZUJ1ZmZlci5sZW5ndGggPT09IDEgPyByZXNwb25zZUJ1ZmZlclswXSA6IEJ1ZmZlci5jb25jYXQocmVzcG9uc2VCdWZmZXIpO1xuICAgICAgICAgICAgaWYgKHJlc3BvbnNlVHlwZSAhPT0gJ2FycmF5YnVmZmVyJykge1xuICAgICAgICAgICAgICByZXNwb25zZURhdGEgPSByZXNwb25zZURhdGEudG9TdHJpbmcocmVzcG9uc2VFbmNvZGluZyk7XG4gICAgICAgICAgICAgIGlmICghcmVzcG9uc2VFbmNvZGluZyB8fCByZXNwb25zZUVuY29kaW5nID09PSAndXRmOCcpIHtcbiAgICAgICAgICAgICAgICByZXNwb25zZURhdGEgPSB1dGlscyQxLnN0cmlwQk9NKHJlc3BvbnNlRGF0YSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJlc3BvbnNlLmRhdGEgPSByZXNwb25zZURhdGE7XG4gICAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICByZXR1cm4gcmVqZWN0KEF4aW9zRXJyb3IuZnJvbShlcnIsIG51bGwsIGNvbmZpZywgcmVzcG9uc2UucmVxdWVzdCwgcmVzcG9uc2UpKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgc2V0dGxlKHJlc29sdmUsIHJlamVjdCwgcmVzcG9uc2UpO1xuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgZW1pdHRlci5vbmNlKCdhYm9ydCcsIGVyciA9PiB7XG4gICAgICAgIGlmICghcmVzcG9uc2VTdHJlYW0uZGVzdHJveWVkKSB7XG4gICAgICAgICAgcmVzcG9uc2VTdHJlYW0uZW1pdCgnZXJyb3InLCBlcnIpO1xuICAgICAgICAgIHJlc3BvbnNlU3RyZWFtLmRlc3Ryb3koKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBlbWl0dGVyLm9uY2UoJ2Fib3J0JywgZXJyID0+IHtcbiAgICAgIHJlamVjdChlcnIpO1xuICAgICAgcmVxLmRlc3Ryb3koZXJyKTtcbiAgICB9KTtcblxuICAgIC8vIEhhbmRsZSBlcnJvcnNcbiAgICByZXEub24oJ2Vycm9yJywgZnVuY3Rpb24gaGFuZGxlUmVxdWVzdEVycm9yKGVycikge1xuICAgICAgLy8gQHRvZG8gcmVtb3ZlXG4gICAgICAvLyBpZiAocmVxLmFib3J0ZWQgJiYgZXJyLmNvZGUgIT09IEF4aW9zRXJyb3IuRVJSX0ZSX1RPT19NQU5ZX1JFRElSRUNUUykgcmV0dXJuO1xuICAgICAgcmVqZWN0KEF4aW9zRXJyb3IuZnJvbShlcnIsIG51bGwsIGNvbmZpZywgcmVxKSk7XG4gICAgfSk7XG5cbiAgICAvLyBzZXQgdGNwIGtlZXAgYWxpdmUgdG8gcHJldmVudCBkcm9wIGNvbm5lY3Rpb24gYnkgcGVlclxuICAgIHJlcS5vbignc29ja2V0JywgZnVuY3Rpb24gaGFuZGxlUmVxdWVzdFNvY2tldChzb2NrZXQpIHtcbiAgICAgIC8vIGRlZmF1bHQgaW50ZXJ2YWwgb2Ygc2VuZGluZyBhY2sgcGFja2V0IGlzIDEgbWludXRlXG4gICAgICBzb2NrZXQuc2V0S2VlcEFsaXZlKHRydWUsIDEwMDAgKiA2MCk7XG4gICAgfSk7XG5cbiAgICAvLyBIYW5kbGUgcmVxdWVzdCB0aW1lb3V0XG4gICAgaWYgKGNvbmZpZy50aW1lb3V0KSB7XG4gICAgICAvLyBUaGlzIGlzIGZvcmNpbmcgYSBpbnQgdGltZW91dCB0byBhdm9pZCBwcm9ibGVtcyBpZiB0aGUgYHJlcWAgaW50ZXJmYWNlIGRvZXNuJ3QgaGFuZGxlIG90aGVyIHR5cGVzLlxuICAgICAgY29uc3QgdGltZW91dCA9IHBhcnNlSW50KGNvbmZpZy50aW1lb3V0LCAxMCk7XG5cbiAgICAgIGlmIChOdW1iZXIuaXNOYU4odGltZW91dCkpIHtcbiAgICAgICAgcmVqZWN0KG5ldyBBeGlvc0Vycm9yKFxuICAgICAgICAgICdlcnJvciB0cnlpbmcgdG8gcGFyc2UgYGNvbmZpZy50aW1lb3V0YCB0byBpbnQnLFxuICAgICAgICAgIEF4aW9zRXJyb3IuRVJSX0JBRF9PUFRJT05fVkFMVUUsXG4gICAgICAgICAgY29uZmlnLFxuICAgICAgICAgIHJlcVxuICAgICAgICApKTtcblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIC8vIFNvbWV0aW1lLCB0aGUgcmVzcG9uc2Ugd2lsbCBiZSB2ZXJ5IHNsb3csIGFuZCBkb2VzIG5vdCByZXNwb25kLCB0aGUgY29ubmVjdCBldmVudCB3aWxsIGJlIGJsb2NrIGJ5IGV2ZW50IGxvb3Agc3lzdGVtLlxuICAgICAgLy8gQW5kIHRpbWVyIGNhbGxiYWNrIHdpbGwgYmUgZmlyZWQsIGFuZCBhYm9ydCgpIHdpbGwgYmUgaW52b2tlZCBiZWZvcmUgY29ubmVjdGlvbiwgdGhlbiBnZXQgXCJzb2NrZXQgaGFuZyB1cFwiIGFuZCBjb2RlIEVDT05OUkVTRVQuXG4gICAgICAvLyBBdCB0aGlzIHRpbWUsIGlmIHdlIGhhdmUgYSBsYXJnZSBudW1iZXIgb2YgcmVxdWVzdCwgbm9kZWpzIHdpbGwgaGFuZyB1cCBzb21lIHNvY2tldCBvbiBiYWNrZ3JvdW5kLiBhbmQgdGhlIG51bWJlciB3aWxsIHVwIGFuZCB1cC5cbiAgICAgIC8vIEFuZCB0aGVuIHRoZXNlIHNvY2tldCB3aGljaCBiZSBoYW5nIHVwIHdpbGwgZGV2b3VyaW5nIENQVSBsaXR0bGUgYnkgbGl0dGxlLlxuICAgICAgLy8gQ2xpZW50UmVxdWVzdC5zZXRUaW1lb3V0IHdpbGwgYmUgZmlyZWQgb24gdGhlIHNwZWNpZnkgbWlsbGlzZWNvbmRzLCBhbmQgY2FuIG1ha2Ugc3VyZSB0aGF0IGFib3J0KCkgd2lsbCBiZSBmaXJlZCBhZnRlciBjb25uZWN0LlxuICAgICAgcmVxLnNldFRpbWVvdXQodGltZW91dCwgZnVuY3Rpb24gaGFuZGxlUmVxdWVzdFRpbWVvdXQoKSB7XG4gICAgICAgIGlmIChpc0RvbmUpIHJldHVybjtcbiAgICAgICAgbGV0IHRpbWVvdXRFcnJvck1lc3NhZ2UgPSBjb25maWcudGltZW91dCA/ICd0aW1lb3V0IG9mICcgKyBjb25maWcudGltZW91dCArICdtcyBleGNlZWRlZCcgOiAndGltZW91dCBleGNlZWRlZCc7XG4gICAgICAgIGNvbnN0IHRyYW5zaXRpb25hbCA9IGNvbmZpZy50cmFuc2l0aW9uYWwgfHwgdHJhbnNpdGlvbmFsRGVmYXVsdHM7XG4gICAgICAgIGlmIChjb25maWcudGltZW91dEVycm9yTWVzc2FnZSkge1xuICAgICAgICAgIHRpbWVvdXRFcnJvck1lc3NhZ2UgPSBjb25maWcudGltZW91dEVycm9yTWVzc2FnZTtcbiAgICAgICAgfVxuICAgICAgICByZWplY3QobmV3IEF4aW9zRXJyb3IoXG4gICAgICAgICAgdGltZW91dEVycm9yTWVzc2FnZSxcbiAgICAgICAgICB0cmFuc2l0aW9uYWwuY2xhcmlmeVRpbWVvdXRFcnJvciA/IEF4aW9zRXJyb3IuRVRJTUVET1VUIDogQXhpb3NFcnJvci5FQ09OTkFCT1JURUQsXG4gICAgICAgICAgY29uZmlnLFxuICAgICAgICAgIHJlcVxuICAgICAgICApKTtcbiAgICAgICAgYWJvcnQoKTtcbiAgICAgIH0pO1xuICAgIH1cblxuXG4gICAgLy8gU2VuZCB0aGUgcmVxdWVzdFxuICAgIGlmICh1dGlscyQxLmlzU3RyZWFtKGRhdGEpKSB7XG4gICAgICBsZXQgZW5kZWQgPSBmYWxzZTtcbiAgICAgIGxldCBlcnJvcmVkID0gZmFsc2U7XG5cbiAgICAgIGRhdGEub24oJ2VuZCcsICgpID0+IHtcbiAgICAgICAgZW5kZWQgPSB0cnVlO1xuICAgICAgfSk7XG5cbiAgICAgIGRhdGEub25jZSgnZXJyb3InLCBlcnIgPT4ge1xuICAgICAgICBlcnJvcmVkID0gdHJ1ZTtcbiAgICAgICAgcmVxLmRlc3Ryb3koZXJyKTtcbiAgICAgIH0pO1xuXG4gICAgICBkYXRhLm9uKCdjbG9zZScsICgpID0+IHtcbiAgICAgICAgaWYgKCFlbmRlZCAmJiAhZXJyb3JlZCkge1xuICAgICAgICAgIGFib3J0KG5ldyBDYW5jZWxlZEVycm9yKCdSZXF1ZXN0IHN0cmVhbSBoYXMgYmVlbiBhYm9ydGVkJywgY29uZmlnLCByZXEpKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIGRhdGEucGlwZShyZXEpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXEuZW5kKGRhdGEpO1xuICAgIH1cbiAgfSk7XG59O1xuXG5jb25zdCBjb29raWVzID0gcGxhdGZvcm0uaGFzU3RhbmRhcmRCcm93c2VyRW52ID9cblxuICAvLyBTdGFuZGFyZCBicm93c2VyIGVudnMgc3VwcG9ydCBkb2N1bWVudC5jb29raWVcbiAge1xuICAgIHdyaXRlKG5hbWUsIHZhbHVlLCBleHBpcmVzLCBwYXRoLCBkb21haW4sIHNlY3VyZSkge1xuICAgICAgY29uc3QgY29va2llID0gW25hbWUgKyAnPScgKyBlbmNvZGVVUklDb21wb25lbnQodmFsdWUpXTtcblxuICAgICAgdXRpbHMkMS5pc051bWJlcihleHBpcmVzKSAmJiBjb29raWUucHVzaCgnZXhwaXJlcz0nICsgbmV3IERhdGUoZXhwaXJlcykudG9HTVRTdHJpbmcoKSk7XG5cbiAgICAgIHV0aWxzJDEuaXNTdHJpbmcocGF0aCkgJiYgY29va2llLnB1c2goJ3BhdGg9JyArIHBhdGgpO1xuXG4gICAgICB1dGlscyQxLmlzU3RyaW5nKGRvbWFpbikgJiYgY29va2llLnB1c2goJ2RvbWFpbj0nICsgZG9tYWluKTtcblxuICAgICAgc2VjdXJlID09PSB0cnVlICYmIGNvb2tpZS5wdXNoKCdzZWN1cmUnKTtcblxuICAgICAgZG9jdW1lbnQuY29va2llID0gY29va2llLmpvaW4oJzsgJyk7XG4gICAgfSxcblxuICAgIHJlYWQobmFtZSkge1xuICAgICAgY29uc3QgbWF0Y2ggPSBkb2N1bWVudC5jb29raWUubWF0Y2gobmV3IFJlZ0V4cCgnKF58O1xcXFxzKikoJyArIG5hbWUgKyAnKT0oW147XSopJykpO1xuICAgICAgcmV0dXJuIChtYXRjaCA/IGRlY29kZVVSSUNvbXBvbmVudChtYXRjaFszXSkgOiBudWxsKTtcbiAgICB9LFxuXG4gICAgcmVtb3ZlKG5hbWUpIHtcbiAgICAgIHRoaXMud3JpdGUobmFtZSwgJycsIERhdGUubm93KCkgLSA4NjQwMDAwMCk7XG4gICAgfVxuICB9XG5cbiAgOlxuXG4gIC8vIE5vbi1zdGFuZGFyZCBicm93c2VyIGVudiAod2ViIHdvcmtlcnMsIHJlYWN0LW5hdGl2ZSkgbGFjayBuZWVkZWQgc3VwcG9ydC5cbiAge1xuICAgIHdyaXRlKCkge30sXG4gICAgcmVhZCgpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH0sXG4gICAgcmVtb3ZlKCkge31cbiAgfTtcblxuY29uc3QgaXNVUkxTYW1lT3JpZ2luID0gcGxhdGZvcm0uaGFzU3RhbmRhcmRCcm93c2VyRW52ID9cblxuLy8gU3RhbmRhcmQgYnJvd3NlciBlbnZzIGhhdmUgZnVsbCBzdXBwb3J0IG9mIHRoZSBBUElzIG5lZWRlZCB0byB0ZXN0XG4vLyB3aGV0aGVyIHRoZSByZXF1ZXN0IFVSTCBpcyBvZiB0aGUgc2FtZSBvcmlnaW4gYXMgY3VycmVudCBsb2NhdGlvbi5cbiAgKGZ1bmN0aW9uIHN0YW5kYXJkQnJvd3NlckVudigpIHtcbiAgICBjb25zdCBtc2llID0gLyhtc2llfHRyaWRlbnQpL2kudGVzdChuYXZpZ2F0b3IudXNlckFnZW50KTtcbiAgICBjb25zdCB1cmxQYXJzaW5nTm9kZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKTtcbiAgICBsZXQgb3JpZ2luVVJMO1xuXG4gICAgLyoqXG4gICAgKiBQYXJzZSBhIFVSTCB0byBkaXNjb3ZlciBpdHMgY29tcG9uZW50c1xuICAgICpcbiAgICAqIEBwYXJhbSB7U3RyaW5nfSB1cmwgVGhlIFVSTCB0byBiZSBwYXJzZWRcbiAgICAqIEByZXR1cm5zIHtPYmplY3R9XG4gICAgKi9cbiAgICBmdW5jdGlvbiByZXNvbHZlVVJMKHVybCkge1xuICAgICAgbGV0IGhyZWYgPSB1cmw7XG5cbiAgICAgIGlmIChtc2llKSB7XG4gICAgICAgIC8vIElFIG5lZWRzIGF0dHJpYnV0ZSBzZXQgdHdpY2UgdG8gbm9ybWFsaXplIHByb3BlcnRpZXNcbiAgICAgICAgdXJsUGFyc2luZ05vZGUuc2V0QXR0cmlidXRlKCdocmVmJywgaHJlZik7XG4gICAgICAgIGhyZWYgPSB1cmxQYXJzaW5nTm9kZS5ocmVmO1xuICAgICAgfVxuXG4gICAgICB1cmxQYXJzaW5nTm9kZS5zZXRBdHRyaWJ1dGUoJ2hyZWYnLCBocmVmKTtcblxuICAgICAgLy8gdXJsUGFyc2luZ05vZGUgcHJvdmlkZXMgdGhlIFVybFV0aWxzIGludGVyZmFjZSAtIGh0dHA6Ly91cmwuc3BlYy53aGF0d2cub3JnLyN1cmx1dGlsc1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgaHJlZjogdXJsUGFyc2luZ05vZGUuaHJlZixcbiAgICAgICAgcHJvdG9jb2w6IHVybFBhcnNpbmdOb2RlLnByb3RvY29sID8gdXJsUGFyc2luZ05vZGUucHJvdG9jb2wucmVwbGFjZSgvOiQvLCAnJykgOiAnJyxcbiAgICAgICAgaG9zdDogdXJsUGFyc2luZ05vZGUuaG9zdCxcbiAgICAgICAgc2VhcmNoOiB1cmxQYXJzaW5nTm9kZS5zZWFyY2ggPyB1cmxQYXJzaW5nTm9kZS5zZWFyY2gucmVwbGFjZSgvXlxcPy8sICcnKSA6ICcnLFxuICAgICAgICBoYXNoOiB1cmxQYXJzaW5nTm9kZS5oYXNoID8gdXJsUGFyc2luZ05vZGUuaGFzaC5yZXBsYWNlKC9eIy8sICcnKSA6ICcnLFxuICAgICAgICBob3N0bmFtZTogdXJsUGFyc2luZ05vZGUuaG9zdG5hbWUsXG4gICAgICAgIHBvcnQ6IHVybFBhcnNpbmdOb2RlLnBvcnQsXG4gICAgICAgIHBhdGhuYW1lOiAodXJsUGFyc2luZ05vZGUucGF0aG5hbWUuY2hhckF0KDApID09PSAnLycpID9cbiAgICAgICAgICB1cmxQYXJzaW5nTm9kZS5wYXRobmFtZSA6XG4gICAgICAgICAgJy8nICsgdXJsUGFyc2luZ05vZGUucGF0aG5hbWVcbiAgICAgIH07XG4gICAgfVxuXG4gICAgb3JpZ2luVVJMID0gcmVzb2x2ZVVSTCh3aW5kb3cubG9jYXRpb24uaHJlZik7XG5cbiAgICAvKipcbiAgICAqIERldGVybWluZSBpZiBhIFVSTCBzaGFyZXMgdGhlIHNhbWUgb3JpZ2luIGFzIHRoZSBjdXJyZW50IGxvY2F0aW9uXG4gICAgKlxuICAgICogQHBhcmFtIHtTdHJpbmd9IHJlcXVlc3RVUkwgVGhlIFVSTCB0byB0ZXN0XG4gICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiBVUkwgc2hhcmVzIHRoZSBzYW1lIG9yaWdpbiwgb3RoZXJ3aXNlIGZhbHNlXG4gICAgKi9cbiAgICByZXR1cm4gZnVuY3Rpb24gaXNVUkxTYW1lT3JpZ2luKHJlcXVlc3RVUkwpIHtcbiAgICAgIGNvbnN0IHBhcnNlZCA9ICh1dGlscyQxLmlzU3RyaW5nKHJlcXVlc3RVUkwpKSA/IHJlc29sdmVVUkwocmVxdWVzdFVSTCkgOiByZXF1ZXN0VVJMO1xuICAgICAgcmV0dXJuIChwYXJzZWQucHJvdG9jb2wgPT09IG9yaWdpblVSTC5wcm90b2NvbCAmJlxuICAgICAgICAgIHBhcnNlZC5ob3N0ID09PSBvcmlnaW5VUkwuaG9zdCk7XG4gICAgfTtcbiAgfSkoKSA6XG5cbiAgLy8gTm9uIHN0YW5kYXJkIGJyb3dzZXIgZW52cyAod2ViIHdvcmtlcnMsIHJlYWN0LW5hdGl2ZSkgbGFjayBuZWVkZWQgc3VwcG9ydC5cbiAgKGZ1bmN0aW9uIG5vblN0YW5kYXJkQnJvd3NlckVudigpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gaXNVUkxTYW1lT3JpZ2luKCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfTtcbiAgfSkoKTtcblxuZnVuY3Rpb24gcHJvZ3Jlc3NFdmVudFJlZHVjZXIobGlzdGVuZXIsIGlzRG93bmxvYWRTdHJlYW0pIHtcbiAgbGV0IGJ5dGVzTm90aWZpZWQgPSAwO1xuICBjb25zdCBfc3BlZWRvbWV0ZXIgPSBzcGVlZG9tZXRlcig1MCwgMjUwKTtcblxuICByZXR1cm4gZSA9PiB7XG4gICAgY29uc3QgbG9hZGVkID0gZS5sb2FkZWQ7XG4gICAgY29uc3QgdG90YWwgPSBlLmxlbmd0aENvbXB1dGFibGUgPyBlLnRvdGFsIDogdW5kZWZpbmVkO1xuICAgIGNvbnN0IHByb2dyZXNzQnl0ZXMgPSBsb2FkZWQgLSBieXRlc05vdGlmaWVkO1xuICAgIGNvbnN0IHJhdGUgPSBfc3BlZWRvbWV0ZXIocHJvZ3Jlc3NCeXRlcyk7XG4gICAgY29uc3QgaW5SYW5nZSA9IGxvYWRlZCA8PSB0b3RhbDtcblxuICAgIGJ5dGVzTm90aWZpZWQgPSBsb2FkZWQ7XG5cbiAgICBjb25zdCBkYXRhID0ge1xuICAgICAgbG9hZGVkLFxuICAgICAgdG90YWwsXG4gICAgICBwcm9ncmVzczogdG90YWwgPyAobG9hZGVkIC8gdG90YWwpIDogdW5kZWZpbmVkLFxuICAgICAgYnl0ZXM6IHByb2dyZXNzQnl0ZXMsXG4gICAgICByYXRlOiByYXRlID8gcmF0ZSA6IHVuZGVmaW5lZCxcbiAgICAgIGVzdGltYXRlZDogcmF0ZSAmJiB0b3RhbCAmJiBpblJhbmdlID8gKHRvdGFsIC0gbG9hZGVkKSAvIHJhdGUgOiB1bmRlZmluZWQsXG4gICAgICBldmVudDogZVxuICAgIH07XG5cbiAgICBkYXRhW2lzRG93bmxvYWRTdHJlYW0gPyAnZG93bmxvYWQnIDogJ3VwbG9hZCddID0gdHJ1ZTtcblxuICAgIGxpc3RlbmVyKGRhdGEpO1xuICB9O1xufVxuXG5jb25zdCBpc1hIUkFkYXB0ZXJTdXBwb3J0ZWQgPSB0eXBlb2YgWE1MSHR0cFJlcXVlc3QgIT09ICd1bmRlZmluZWQnO1xuXG5jb25zdCB4aHJBZGFwdGVyID0gaXNYSFJBZGFwdGVyU3VwcG9ydGVkICYmIGZ1bmN0aW9uIChjb25maWcpIHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIGRpc3BhdGNoWGhyUmVxdWVzdChyZXNvbHZlLCByZWplY3QpIHtcbiAgICBsZXQgcmVxdWVzdERhdGEgPSBjb25maWcuZGF0YTtcbiAgICBjb25zdCByZXF1ZXN0SGVhZGVycyA9IEF4aW9zSGVhZGVycyQxLmZyb20oY29uZmlnLmhlYWRlcnMpLm5vcm1hbGl6ZSgpO1xuICAgIGxldCB7cmVzcG9uc2VUeXBlLCB3aXRoWFNSRlRva2VufSA9IGNvbmZpZztcbiAgICBsZXQgb25DYW5jZWxlZDtcbiAgICBmdW5jdGlvbiBkb25lKCkge1xuICAgICAgaWYgKGNvbmZpZy5jYW5jZWxUb2tlbikge1xuICAgICAgICBjb25maWcuY2FuY2VsVG9rZW4udW5zdWJzY3JpYmUob25DYW5jZWxlZCk7XG4gICAgICB9XG5cbiAgICAgIGlmIChjb25maWcuc2lnbmFsKSB7XG4gICAgICAgIGNvbmZpZy5zaWduYWwucmVtb3ZlRXZlbnRMaXN0ZW5lcignYWJvcnQnLCBvbkNhbmNlbGVkKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBsZXQgY29udGVudFR5cGU7XG5cbiAgICBpZiAodXRpbHMkMS5pc0Zvcm1EYXRhKHJlcXVlc3REYXRhKSkge1xuICAgICAgaWYgKHBsYXRmb3JtLmhhc1N0YW5kYXJkQnJvd3NlckVudiB8fCBwbGF0Zm9ybS5oYXNTdGFuZGFyZEJyb3dzZXJXZWJXb3JrZXJFbnYpIHtcbiAgICAgICAgcmVxdWVzdEhlYWRlcnMuc2V0Q29udGVudFR5cGUoZmFsc2UpOyAvLyBMZXQgdGhlIGJyb3dzZXIgc2V0IGl0XG4gICAgICB9IGVsc2UgaWYgKChjb250ZW50VHlwZSA9IHJlcXVlc3RIZWFkZXJzLmdldENvbnRlbnRUeXBlKCkpICE9PSBmYWxzZSkge1xuICAgICAgICAvLyBmaXggc2VtaWNvbG9uIGR1cGxpY2F0aW9uIGlzc3VlIGZvciBSZWFjdE5hdGl2ZSBGb3JtRGF0YSBpbXBsZW1lbnRhdGlvblxuICAgICAgICBjb25zdCBbdHlwZSwgLi4udG9rZW5zXSA9IGNvbnRlbnRUeXBlID8gY29udGVudFR5cGUuc3BsaXQoJzsnKS5tYXAodG9rZW4gPT4gdG9rZW4udHJpbSgpKS5maWx0ZXIoQm9vbGVhbikgOiBbXTtcbiAgICAgICAgcmVxdWVzdEhlYWRlcnMuc2V0Q29udGVudFR5cGUoW3R5cGUgfHwgJ211bHRpcGFydC9mb3JtLWRhdGEnLCAuLi50b2tlbnNdLmpvaW4oJzsgJykpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGxldCByZXF1ZXN0ID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7XG5cbiAgICAvLyBIVFRQIGJhc2ljIGF1dGhlbnRpY2F0aW9uXG4gICAgaWYgKGNvbmZpZy5hdXRoKSB7XG4gICAgICBjb25zdCB1c2VybmFtZSA9IGNvbmZpZy5hdXRoLnVzZXJuYW1lIHx8ICcnO1xuICAgICAgY29uc3QgcGFzc3dvcmQgPSBjb25maWcuYXV0aC5wYXNzd29yZCA/IHVuZXNjYXBlKGVuY29kZVVSSUNvbXBvbmVudChjb25maWcuYXV0aC5wYXNzd29yZCkpIDogJyc7XG4gICAgICByZXF1ZXN0SGVhZGVycy5zZXQoJ0F1dGhvcml6YXRpb24nLCAnQmFzaWMgJyArIGJ0b2EodXNlcm5hbWUgKyAnOicgKyBwYXNzd29yZCkpO1xuICAgIH1cblxuICAgIGNvbnN0IGZ1bGxQYXRoID0gYnVpbGRGdWxsUGF0aChjb25maWcuYmFzZVVSTCwgY29uZmlnLnVybCk7XG5cbiAgICByZXF1ZXN0Lm9wZW4oY29uZmlnLm1ldGhvZC50b1VwcGVyQ2FzZSgpLCBidWlsZFVSTChmdWxsUGF0aCwgY29uZmlnLnBhcmFtcywgY29uZmlnLnBhcmFtc1NlcmlhbGl6ZXIpLCB0cnVlKTtcblxuICAgIC8vIFNldCB0aGUgcmVxdWVzdCB0aW1lb3V0IGluIE1TXG4gICAgcmVxdWVzdC50aW1lb3V0ID0gY29uZmlnLnRpbWVvdXQ7XG5cbiAgICBmdW5jdGlvbiBvbmxvYWRlbmQoKSB7XG4gICAgICBpZiAoIXJlcXVlc3QpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgLy8gUHJlcGFyZSB0aGUgcmVzcG9uc2VcbiAgICAgIGNvbnN0IHJlc3BvbnNlSGVhZGVycyA9IEF4aW9zSGVhZGVycyQxLmZyb20oXG4gICAgICAgICdnZXRBbGxSZXNwb25zZUhlYWRlcnMnIGluIHJlcXVlc3QgJiYgcmVxdWVzdC5nZXRBbGxSZXNwb25zZUhlYWRlcnMoKVxuICAgICAgKTtcbiAgICAgIGNvbnN0IHJlc3BvbnNlRGF0YSA9ICFyZXNwb25zZVR5cGUgfHwgcmVzcG9uc2VUeXBlID09PSAndGV4dCcgfHwgcmVzcG9uc2VUeXBlID09PSAnanNvbicgP1xuICAgICAgICByZXF1ZXN0LnJlc3BvbnNlVGV4dCA6IHJlcXVlc3QucmVzcG9uc2U7XG4gICAgICBjb25zdCByZXNwb25zZSA9IHtcbiAgICAgICAgZGF0YTogcmVzcG9uc2VEYXRhLFxuICAgICAgICBzdGF0dXM6IHJlcXVlc3Quc3RhdHVzLFxuICAgICAgICBzdGF0dXNUZXh0OiByZXF1ZXN0LnN0YXR1c1RleHQsXG4gICAgICAgIGhlYWRlcnM6IHJlc3BvbnNlSGVhZGVycyxcbiAgICAgICAgY29uZmlnLFxuICAgICAgICByZXF1ZXN0XG4gICAgICB9O1xuXG4gICAgICBzZXR0bGUoZnVuY3Rpb24gX3Jlc29sdmUodmFsdWUpIHtcbiAgICAgICAgcmVzb2x2ZSh2YWx1ZSk7XG4gICAgICAgIGRvbmUoKTtcbiAgICAgIH0sIGZ1bmN0aW9uIF9yZWplY3QoZXJyKSB7XG4gICAgICAgIHJlamVjdChlcnIpO1xuICAgICAgICBkb25lKCk7XG4gICAgICB9LCByZXNwb25zZSk7XG5cbiAgICAgIC8vIENsZWFuIHVwIHJlcXVlc3RcbiAgICAgIHJlcXVlc3QgPSBudWxsO1xuICAgIH1cblxuICAgIGlmICgnb25sb2FkZW5kJyBpbiByZXF1ZXN0KSB7XG4gICAgICAvLyBVc2Ugb25sb2FkZW5kIGlmIGF2YWlsYWJsZVxuICAgICAgcmVxdWVzdC5vbmxvYWRlbmQgPSBvbmxvYWRlbmQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIExpc3RlbiBmb3IgcmVhZHkgc3RhdGUgdG8gZW11bGF0ZSBvbmxvYWRlbmRcbiAgICAgIHJlcXVlc3Qub25yZWFkeXN0YXRlY2hhbmdlID0gZnVuY3Rpb24gaGFuZGxlTG9hZCgpIHtcbiAgICAgICAgaWYgKCFyZXF1ZXN0IHx8IHJlcXVlc3QucmVhZHlTdGF0ZSAhPT0gNCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFRoZSByZXF1ZXN0IGVycm9yZWQgb3V0IGFuZCB3ZSBkaWRuJ3QgZ2V0IGEgcmVzcG9uc2UsIHRoaXMgd2lsbCBiZVxuICAgICAgICAvLyBoYW5kbGVkIGJ5IG9uZXJyb3IgaW5zdGVhZFxuICAgICAgICAvLyBXaXRoIG9uZSBleGNlcHRpb246IHJlcXVlc3QgdGhhdCB1c2luZyBmaWxlOiBwcm90b2NvbCwgbW9zdCBicm93c2Vyc1xuICAgICAgICAvLyB3aWxsIHJldHVybiBzdGF0dXMgYXMgMCBldmVuIHRob3VnaCBpdCdzIGEgc3VjY2Vzc2Z1bCByZXF1ZXN0XG4gICAgICAgIGlmIChyZXF1ZXN0LnN0YXR1cyA9PT0gMCAmJiAhKHJlcXVlc3QucmVzcG9uc2VVUkwgJiYgcmVxdWVzdC5yZXNwb25zZVVSTC5pbmRleE9mKCdmaWxlOicpID09PSAwKSkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICAvLyByZWFkeXN0YXRlIGhhbmRsZXIgaXMgY2FsbGluZyBiZWZvcmUgb25lcnJvciBvciBvbnRpbWVvdXQgaGFuZGxlcnMsXG4gICAgICAgIC8vIHNvIHdlIHNob3VsZCBjYWxsIG9ubG9hZGVuZCBvbiB0aGUgbmV4dCAndGljaydcbiAgICAgICAgc2V0VGltZW91dChvbmxvYWRlbmQpO1xuICAgICAgfTtcbiAgICB9XG5cbiAgICAvLyBIYW5kbGUgYnJvd3NlciByZXF1ZXN0IGNhbmNlbGxhdGlvbiAoYXMgb3Bwb3NlZCB0byBhIG1hbnVhbCBjYW5jZWxsYXRpb24pXG4gICAgcmVxdWVzdC5vbmFib3J0ID0gZnVuY3Rpb24gaGFuZGxlQWJvcnQoKSB7XG4gICAgICBpZiAoIXJlcXVlc3QpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICByZWplY3QobmV3IEF4aW9zRXJyb3IoJ1JlcXVlc3QgYWJvcnRlZCcsIEF4aW9zRXJyb3IuRUNPTk5BQk9SVEVELCBjb25maWcsIHJlcXVlc3QpKTtcblxuICAgICAgLy8gQ2xlYW4gdXAgcmVxdWVzdFxuICAgICAgcmVxdWVzdCA9IG51bGw7XG4gICAgfTtcblxuICAgIC8vIEhhbmRsZSBsb3cgbGV2ZWwgbmV0d29yayBlcnJvcnNcbiAgICByZXF1ZXN0Lm9uZXJyb3IgPSBmdW5jdGlvbiBoYW5kbGVFcnJvcigpIHtcbiAgICAgIC8vIFJlYWwgZXJyb3JzIGFyZSBoaWRkZW4gZnJvbSB1cyBieSB0aGUgYnJvd3NlclxuICAgICAgLy8gb25lcnJvciBzaG91bGQgb25seSBmaXJlIGlmIGl0J3MgYSBuZXR3b3JrIGVycm9yXG4gICAgICByZWplY3QobmV3IEF4aW9zRXJyb3IoJ05ldHdvcmsgRXJyb3InLCBBeGlvc0Vycm9yLkVSUl9ORVRXT1JLLCBjb25maWcsIHJlcXVlc3QpKTtcblxuICAgICAgLy8gQ2xlYW4gdXAgcmVxdWVzdFxuICAgICAgcmVxdWVzdCA9IG51bGw7XG4gICAgfTtcblxuICAgIC8vIEhhbmRsZSB0aW1lb3V0XG4gICAgcmVxdWVzdC5vbnRpbWVvdXQgPSBmdW5jdGlvbiBoYW5kbGVUaW1lb3V0KCkge1xuICAgICAgbGV0IHRpbWVvdXRFcnJvck1lc3NhZ2UgPSBjb25maWcudGltZW91dCA/ICd0aW1lb3V0IG9mICcgKyBjb25maWcudGltZW91dCArICdtcyBleGNlZWRlZCcgOiAndGltZW91dCBleGNlZWRlZCc7XG4gICAgICBjb25zdCB0cmFuc2l0aW9uYWwgPSBjb25maWcudHJhbnNpdGlvbmFsIHx8IHRyYW5zaXRpb25hbERlZmF1bHRzO1xuICAgICAgaWYgKGNvbmZpZy50aW1lb3V0RXJyb3JNZXNzYWdlKSB7XG4gICAgICAgIHRpbWVvdXRFcnJvck1lc3NhZ2UgPSBjb25maWcudGltZW91dEVycm9yTWVzc2FnZTtcbiAgICAgIH1cbiAgICAgIHJlamVjdChuZXcgQXhpb3NFcnJvcihcbiAgICAgICAgdGltZW91dEVycm9yTWVzc2FnZSxcbiAgICAgICAgdHJhbnNpdGlvbmFsLmNsYXJpZnlUaW1lb3V0RXJyb3IgPyBBeGlvc0Vycm9yLkVUSU1FRE9VVCA6IEF4aW9zRXJyb3IuRUNPTk5BQk9SVEVELFxuICAgICAgICBjb25maWcsXG4gICAgICAgIHJlcXVlc3QpKTtcblxuICAgICAgLy8gQ2xlYW4gdXAgcmVxdWVzdFxuICAgICAgcmVxdWVzdCA9IG51bGw7XG4gICAgfTtcblxuICAgIC8vIEFkZCB4c3JmIGhlYWRlclxuICAgIC8vIFRoaXMgaXMgb25seSBkb25lIGlmIHJ1bm5pbmcgaW4gYSBzdGFuZGFyZCBicm93c2VyIGVudmlyb25tZW50LlxuICAgIC8vIFNwZWNpZmljYWxseSBub3QgaWYgd2UncmUgaW4gYSB3ZWIgd29ya2VyLCBvciByZWFjdC1uYXRpdmUuXG4gICAgaWYocGxhdGZvcm0uaGFzU3RhbmRhcmRCcm93c2VyRW52KSB7XG4gICAgICB3aXRoWFNSRlRva2VuICYmIHV0aWxzJDEuaXNGdW5jdGlvbih3aXRoWFNSRlRva2VuKSAmJiAod2l0aFhTUkZUb2tlbiA9IHdpdGhYU1JGVG9rZW4oY29uZmlnKSk7XG5cbiAgICAgIGlmICh3aXRoWFNSRlRva2VuIHx8ICh3aXRoWFNSRlRva2VuICE9PSBmYWxzZSAmJiBpc1VSTFNhbWVPcmlnaW4oZnVsbFBhdGgpKSkge1xuICAgICAgICAvLyBBZGQgeHNyZiBoZWFkZXJcbiAgICAgICAgY29uc3QgeHNyZlZhbHVlID0gY29uZmlnLnhzcmZIZWFkZXJOYW1lICYmIGNvbmZpZy54c3JmQ29va2llTmFtZSAmJiBjb29raWVzLnJlYWQoY29uZmlnLnhzcmZDb29raWVOYW1lKTtcblxuICAgICAgICBpZiAoeHNyZlZhbHVlKSB7XG4gICAgICAgICAgcmVxdWVzdEhlYWRlcnMuc2V0KGNvbmZpZy54c3JmSGVhZGVyTmFtZSwgeHNyZlZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFJlbW92ZSBDb250ZW50LVR5cGUgaWYgZGF0YSBpcyB1bmRlZmluZWRcbiAgICByZXF1ZXN0RGF0YSA9PT0gdW5kZWZpbmVkICYmIHJlcXVlc3RIZWFkZXJzLnNldENvbnRlbnRUeXBlKG51bGwpO1xuXG4gICAgLy8gQWRkIGhlYWRlcnMgdG8gdGhlIHJlcXVlc3RcbiAgICBpZiAoJ3NldFJlcXVlc3RIZWFkZXInIGluIHJlcXVlc3QpIHtcbiAgICAgIHV0aWxzJDEuZm9yRWFjaChyZXF1ZXN0SGVhZGVycy50b0pTT04oKSwgZnVuY3Rpb24gc2V0UmVxdWVzdEhlYWRlcih2YWwsIGtleSkge1xuICAgICAgICByZXF1ZXN0LnNldFJlcXVlc3RIZWFkZXIoa2V5LCB2YWwpO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gQWRkIHdpdGhDcmVkZW50aWFscyB0byByZXF1ZXN0IGlmIG5lZWRlZFxuICAgIGlmICghdXRpbHMkMS5pc1VuZGVmaW5lZChjb25maWcud2l0aENyZWRlbnRpYWxzKSkge1xuICAgICAgcmVxdWVzdC53aXRoQ3JlZGVudGlhbHMgPSAhIWNvbmZpZy53aXRoQ3JlZGVudGlhbHM7XG4gICAgfVxuXG4gICAgLy8gQWRkIHJlc3BvbnNlVHlwZSB0byByZXF1ZXN0IGlmIG5lZWRlZFxuICAgIGlmIChyZXNwb25zZVR5cGUgJiYgcmVzcG9uc2VUeXBlICE9PSAnanNvbicpIHtcbiAgICAgIHJlcXVlc3QucmVzcG9uc2VUeXBlID0gY29uZmlnLnJlc3BvbnNlVHlwZTtcbiAgICB9XG5cbiAgICAvLyBIYW5kbGUgcHJvZ3Jlc3MgaWYgbmVlZGVkXG4gICAgaWYgKHR5cGVvZiBjb25maWcub25Eb3dubG9hZFByb2dyZXNzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICByZXF1ZXN0LmFkZEV2ZW50TGlzdGVuZXIoJ3Byb2dyZXNzJywgcHJvZ3Jlc3NFdmVudFJlZHVjZXIoY29uZmlnLm9uRG93bmxvYWRQcm9ncmVzcywgdHJ1ZSkpO1xuICAgIH1cblxuICAgIC8vIE5vdCBhbGwgYnJvd3NlcnMgc3VwcG9ydCB1cGxvYWQgZXZlbnRzXG4gICAgaWYgKHR5cGVvZiBjb25maWcub25VcGxvYWRQcm9ncmVzcyA9PT0gJ2Z1bmN0aW9uJyAmJiByZXF1ZXN0LnVwbG9hZCkge1xuICAgICAgcmVxdWVzdC51cGxvYWQuYWRkRXZlbnRMaXN0ZW5lcigncHJvZ3Jlc3MnLCBwcm9ncmVzc0V2ZW50UmVkdWNlcihjb25maWcub25VcGxvYWRQcm9ncmVzcykpO1xuICAgIH1cblxuICAgIGlmIChjb25maWcuY2FuY2VsVG9rZW4gfHwgY29uZmlnLnNpZ25hbCkge1xuICAgICAgLy8gSGFuZGxlIGNhbmNlbGxhdGlvblxuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGZ1bmMtbmFtZXNcbiAgICAgIG9uQ2FuY2VsZWQgPSBjYW5jZWwgPT4ge1xuICAgICAgICBpZiAoIXJlcXVlc3QpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgcmVqZWN0KCFjYW5jZWwgfHwgY2FuY2VsLnR5cGUgPyBuZXcgQ2FuY2VsZWRFcnJvcihudWxsLCBjb25maWcsIHJlcXVlc3QpIDogY2FuY2VsKTtcbiAgICAgICAgcmVxdWVzdC5hYm9ydCgpO1xuICAgICAgICByZXF1ZXN0ID0gbnVsbDtcbiAgICAgIH07XG5cbiAgICAgIGNvbmZpZy5jYW5jZWxUb2tlbiAmJiBjb25maWcuY2FuY2VsVG9rZW4uc3Vic2NyaWJlKG9uQ2FuY2VsZWQpO1xuICAgICAgaWYgKGNvbmZpZy5zaWduYWwpIHtcbiAgICAgICAgY29uZmlnLnNpZ25hbC5hYm9ydGVkID8gb25DYW5jZWxlZCgpIDogY29uZmlnLnNpZ25hbC5hZGRFdmVudExpc3RlbmVyKCdhYm9ydCcsIG9uQ2FuY2VsZWQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IHByb3RvY29sID0gcGFyc2VQcm90b2NvbChmdWxsUGF0aCk7XG5cbiAgICBpZiAocHJvdG9jb2wgJiYgcGxhdGZvcm0ucHJvdG9jb2xzLmluZGV4T2YocHJvdG9jb2wpID09PSAtMSkge1xuICAgICAgcmVqZWN0KG5ldyBBeGlvc0Vycm9yKCdVbnN1cHBvcnRlZCBwcm90b2NvbCAnICsgcHJvdG9jb2wgKyAnOicsIEF4aW9zRXJyb3IuRVJSX0JBRF9SRVFVRVNULCBjb25maWcpKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cblxuICAgIC8vIFNlbmQgdGhlIHJlcXVlc3RcbiAgICByZXF1ZXN0LnNlbmQocmVxdWVzdERhdGEgfHwgbnVsbCk7XG4gIH0pO1xufTtcblxuY29uc3Qga25vd25BZGFwdGVycyA9IHtcbiAgaHR0cDogaHR0cEFkYXB0ZXIsXG4gIHhocjogeGhyQWRhcHRlclxufTtcblxudXRpbHMkMS5mb3JFYWNoKGtub3duQWRhcHRlcnMsIChmbiwgdmFsdWUpID0+IHtcbiAgaWYgKGZuKSB7XG4gICAgdHJ5IHtcbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShmbiwgJ25hbWUnLCB7dmFsdWV9KTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tZW1wdHlcbiAgICB9XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGZuLCAnYWRhcHRlck5hbWUnLCB7dmFsdWV9KTtcbiAgfVxufSk7XG5cbmNvbnN0IHJlbmRlclJlYXNvbiA9IChyZWFzb24pID0+IGAtICR7cmVhc29ufWA7XG5cbmNvbnN0IGlzUmVzb2x2ZWRIYW5kbGUgPSAoYWRhcHRlcikgPT4gdXRpbHMkMS5pc0Z1bmN0aW9uKGFkYXB0ZXIpIHx8IGFkYXB0ZXIgPT09IG51bGwgfHwgYWRhcHRlciA9PT0gZmFsc2U7XG5cbmNvbnN0IGFkYXB0ZXJzID0ge1xuICBnZXRBZGFwdGVyOiAoYWRhcHRlcnMpID0+IHtcbiAgICBhZGFwdGVycyA9IHV0aWxzJDEuaXNBcnJheShhZGFwdGVycykgPyBhZGFwdGVycyA6IFthZGFwdGVyc107XG5cbiAgICBjb25zdCB7bGVuZ3RofSA9IGFkYXB0ZXJzO1xuICAgIGxldCBuYW1lT3JBZGFwdGVyO1xuICAgIGxldCBhZGFwdGVyO1xuXG4gICAgY29uc3QgcmVqZWN0ZWRSZWFzb25zID0ge307XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICBuYW1lT3JBZGFwdGVyID0gYWRhcHRlcnNbaV07XG4gICAgICBsZXQgaWQ7XG5cbiAgICAgIGFkYXB0ZXIgPSBuYW1lT3JBZGFwdGVyO1xuXG4gICAgICBpZiAoIWlzUmVzb2x2ZWRIYW5kbGUobmFtZU9yQWRhcHRlcikpIHtcbiAgICAgICAgYWRhcHRlciA9IGtub3duQWRhcHRlcnNbKGlkID0gU3RyaW5nKG5hbWVPckFkYXB0ZXIpKS50b0xvd2VyQ2FzZSgpXTtcblxuICAgICAgICBpZiAoYWRhcHRlciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEF4aW9zRXJyb3IoYFVua25vd24gYWRhcHRlciAnJHtpZH0nYCk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKGFkYXB0ZXIpIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICAgIHJlamVjdGVkUmVhc29uc1tpZCB8fCAnIycgKyBpXSA9IGFkYXB0ZXI7XG4gICAgfVxuXG4gICAgaWYgKCFhZGFwdGVyKSB7XG5cbiAgICAgIGNvbnN0IHJlYXNvbnMgPSBPYmplY3QuZW50cmllcyhyZWplY3RlZFJlYXNvbnMpXG4gICAgICAgIC5tYXAoKFtpZCwgc3RhdGVdKSA9PiBgYWRhcHRlciAke2lkfSBgICtcbiAgICAgICAgICAoc3RhdGUgPT09IGZhbHNlID8gJ2lzIG5vdCBzdXBwb3J0ZWQgYnkgdGhlIGVudmlyb25tZW50JyA6ICdpcyBub3QgYXZhaWxhYmxlIGluIHRoZSBidWlsZCcpXG4gICAgICAgICk7XG5cbiAgICAgIGxldCBzID0gbGVuZ3RoID9cbiAgICAgICAgKHJlYXNvbnMubGVuZ3RoID4gMSA/ICdzaW5jZSA6XFxuJyArIHJlYXNvbnMubWFwKHJlbmRlclJlYXNvbikuam9pbignXFxuJykgOiAnICcgKyByZW5kZXJSZWFzb24ocmVhc29uc1swXSkpIDpcbiAgICAgICAgJ2FzIG5vIGFkYXB0ZXIgc3BlY2lmaWVkJztcblxuICAgICAgdGhyb3cgbmV3IEF4aW9zRXJyb3IoXG4gICAgICAgIGBUaGVyZSBpcyBubyBzdWl0YWJsZSBhZGFwdGVyIHRvIGRpc3BhdGNoIHRoZSByZXF1ZXN0IGAgKyBzLFxuICAgICAgICAnRVJSX05PVF9TVVBQT1JUJ1xuICAgICAgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gYWRhcHRlcjtcbiAgfSxcbiAgYWRhcHRlcnM6IGtub3duQWRhcHRlcnNcbn07XG5cbi8qKlxuICogVGhyb3dzIGEgYENhbmNlbGVkRXJyb3JgIGlmIGNhbmNlbGxhdGlvbiBoYXMgYmVlbiByZXF1ZXN0ZWQuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGNvbmZpZyBUaGUgY29uZmlnIHRoYXQgaXMgdG8gYmUgdXNlZCBmb3IgdGhlIHJlcXVlc3RcbiAqXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuZnVuY3Rpb24gdGhyb3dJZkNhbmNlbGxhdGlvblJlcXVlc3RlZChjb25maWcpIHtcbiAgaWYgKGNvbmZpZy5jYW5jZWxUb2tlbikge1xuICAgIGNvbmZpZy5jYW5jZWxUb2tlbi50aHJvd0lmUmVxdWVzdGVkKCk7XG4gIH1cblxuICBpZiAoY29uZmlnLnNpZ25hbCAmJiBjb25maWcuc2lnbmFsLmFib3J0ZWQpIHtcbiAgICB0aHJvdyBuZXcgQ2FuY2VsZWRFcnJvcihudWxsLCBjb25maWcpO1xuICB9XG59XG5cbi8qKlxuICogRGlzcGF0Y2ggYSByZXF1ZXN0IHRvIHRoZSBzZXJ2ZXIgdXNpbmcgdGhlIGNvbmZpZ3VyZWQgYWRhcHRlci5cbiAqXG4gKiBAcGFyYW0ge29iamVjdH0gY29uZmlnIFRoZSBjb25maWcgdGhhdCBpcyB0byBiZSB1c2VkIGZvciB0aGUgcmVxdWVzdFxuICpcbiAqIEByZXR1cm5zIHtQcm9taXNlfSBUaGUgUHJvbWlzZSB0byBiZSBmdWxmaWxsZWRcbiAqL1xuZnVuY3Rpb24gZGlzcGF0Y2hSZXF1ZXN0KGNvbmZpZykge1xuICB0aHJvd0lmQ2FuY2VsbGF0aW9uUmVxdWVzdGVkKGNvbmZpZyk7XG5cbiAgY29uZmlnLmhlYWRlcnMgPSBBeGlvc0hlYWRlcnMkMS5mcm9tKGNvbmZpZy5oZWFkZXJzKTtcblxuICAvLyBUcmFuc2Zvcm0gcmVxdWVzdCBkYXRhXG4gIGNvbmZpZy5kYXRhID0gdHJhbnNmb3JtRGF0YS5jYWxsKFxuICAgIGNvbmZpZyxcbiAgICBjb25maWcudHJhbnNmb3JtUmVxdWVzdFxuICApO1xuXG4gIGlmIChbJ3Bvc3QnLCAncHV0JywgJ3BhdGNoJ10uaW5kZXhPZihjb25maWcubWV0aG9kKSAhPT0gLTEpIHtcbiAgICBjb25maWcuaGVhZGVycy5zZXRDb250ZW50VHlwZSgnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJywgZmFsc2UpO1xuICB9XG5cbiAgY29uc3QgYWRhcHRlciA9IGFkYXB0ZXJzLmdldEFkYXB0ZXIoY29uZmlnLmFkYXB0ZXIgfHwgZGVmYXVsdHMkMS5hZGFwdGVyKTtcblxuICByZXR1cm4gYWRhcHRlcihjb25maWcpLnRoZW4oZnVuY3Rpb24gb25BZGFwdGVyUmVzb2x1dGlvbihyZXNwb25zZSkge1xuICAgIHRocm93SWZDYW5jZWxsYXRpb25SZXF1ZXN0ZWQoY29uZmlnKTtcblxuICAgIC8vIFRyYW5zZm9ybSByZXNwb25zZSBkYXRhXG4gICAgcmVzcG9uc2UuZGF0YSA9IHRyYW5zZm9ybURhdGEuY2FsbChcbiAgICAgIGNvbmZpZyxcbiAgICAgIGNvbmZpZy50cmFuc2Zvcm1SZXNwb25zZSxcbiAgICAgIHJlc3BvbnNlXG4gICAgKTtcblxuICAgIHJlc3BvbnNlLmhlYWRlcnMgPSBBeGlvc0hlYWRlcnMkMS5mcm9tKHJlc3BvbnNlLmhlYWRlcnMpO1xuXG4gICAgcmV0dXJuIHJlc3BvbnNlO1xuICB9LCBmdW5jdGlvbiBvbkFkYXB0ZXJSZWplY3Rpb24ocmVhc29uKSB7XG4gICAgaWYgKCFpc0NhbmNlbChyZWFzb24pKSB7XG4gICAgICB0aHJvd0lmQ2FuY2VsbGF0aW9uUmVxdWVzdGVkKGNvbmZpZyk7XG5cbiAgICAgIC8vIFRyYW5zZm9ybSByZXNwb25zZSBkYXRhXG4gICAgICBpZiAocmVhc29uICYmIHJlYXNvbi5yZXNwb25zZSkge1xuICAgICAgICByZWFzb24ucmVzcG9uc2UuZGF0YSA9IHRyYW5zZm9ybURhdGEuY2FsbChcbiAgICAgICAgICBjb25maWcsXG4gICAgICAgICAgY29uZmlnLnRyYW5zZm9ybVJlc3BvbnNlLFxuICAgICAgICAgIHJlYXNvbi5yZXNwb25zZVxuICAgICAgICApO1xuICAgICAgICByZWFzb24ucmVzcG9uc2UuaGVhZGVycyA9IEF4aW9zSGVhZGVycyQxLmZyb20ocmVhc29uLnJlc3BvbnNlLmhlYWRlcnMpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBQcm9taXNlLnJlamVjdChyZWFzb24pO1xuICB9KTtcbn1cblxuY29uc3QgaGVhZGVyc1RvT2JqZWN0ID0gKHRoaW5nKSA9PiB0aGluZyBpbnN0YW5jZW9mIEF4aW9zSGVhZGVycyQxID8gdGhpbmcudG9KU09OKCkgOiB0aGluZztcblxuLyoqXG4gKiBDb25maWctc3BlY2lmaWMgbWVyZ2UtZnVuY3Rpb24gd2hpY2ggY3JlYXRlcyBhIG5ldyBjb25maWctb2JqZWN0XG4gKiBieSBtZXJnaW5nIHR3byBjb25maWd1cmF0aW9uIG9iamVjdHMgdG9nZXRoZXIuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGNvbmZpZzFcbiAqIEBwYXJhbSB7T2JqZWN0fSBjb25maWcyXG4gKlxuICogQHJldHVybnMge09iamVjdH0gTmV3IG9iamVjdCByZXN1bHRpbmcgZnJvbSBtZXJnaW5nIGNvbmZpZzIgdG8gY29uZmlnMVxuICovXG5mdW5jdGlvbiBtZXJnZUNvbmZpZyhjb25maWcxLCBjb25maWcyKSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuICBjb25maWcyID0gY29uZmlnMiB8fCB7fTtcbiAgY29uc3QgY29uZmlnID0ge307XG5cbiAgZnVuY3Rpb24gZ2V0TWVyZ2VkVmFsdWUodGFyZ2V0LCBzb3VyY2UsIGNhc2VsZXNzKSB7XG4gICAgaWYgKHV0aWxzJDEuaXNQbGFpbk9iamVjdCh0YXJnZXQpICYmIHV0aWxzJDEuaXNQbGFpbk9iamVjdChzb3VyY2UpKSB7XG4gICAgICByZXR1cm4gdXRpbHMkMS5tZXJnZS5jYWxsKHtjYXNlbGVzc30sIHRhcmdldCwgc291cmNlKTtcbiAgICB9IGVsc2UgaWYgKHV0aWxzJDEuaXNQbGFpbk9iamVjdChzb3VyY2UpKSB7XG4gICAgICByZXR1cm4gdXRpbHMkMS5tZXJnZSh7fSwgc291cmNlKTtcbiAgICB9IGVsc2UgaWYgKHV0aWxzJDEuaXNBcnJheShzb3VyY2UpKSB7XG4gICAgICByZXR1cm4gc291cmNlLnNsaWNlKCk7XG4gICAgfVxuICAgIHJldHVybiBzb3VyY2U7XG4gIH1cblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY29uc2lzdGVudC1yZXR1cm5cbiAgZnVuY3Rpb24gbWVyZ2VEZWVwUHJvcGVydGllcyhhLCBiLCBjYXNlbGVzcykge1xuICAgIGlmICghdXRpbHMkMS5pc1VuZGVmaW5lZChiKSkge1xuICAgICAgcmV0dXJuIGdldE1lcmdlZFZhbHVlKGEsIGIsIGNhc2VsZXNzKTtcbiAgICB9IGVsc2UgaWYgKCF1dGlscyQxLmlzVW5kZWZpbmVkKGEpKSB7XG4gICAgICByZXR1cm4gZ2V0TWVyZ2VkVmFsdWUodW5kZWZpbmVkLCBhLCBjYXNlbGVzcyk7XG4gICAgfVxuICB9XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGNvbnNpc3RlbnQtcmV0dXJuXG4gIGZ1bmN0aW9uIHZhbHVlRnJvbUNvbmZpZzIoYSwgYikge1xuICAgIGlmICghdXRpbHMkMS5pc1VuZGVmaW5lZChiKSkge1xuICAgICAgcmV0dXJuIGdldE1lcmdlZFZhbHVlKHVuZGVmaW5lZCwgYik7XG4gICAgfVxuICB9XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGNvbnNpc3RlbnQtcmV0dXJuXG4gIGZ1bmN0aW9uIGRlZmF1bHRUb0NvbmZpZzIoYSwgYikge1xuICAgIGlmICghdXRpbHMkMS5pc1VuZGVmaW5lZChiKSkge1xuICAgICAgcmV0dXJuIGdldE1lcmdlZFZhbHVlKHVuZGVmaW5lZCwgYik7XG4gICAgfSBlbHNlIGlmICghdXRpbHMkMS5pc1VuZGVmaW5lZChhKSkge1xuICAgICAgcmV0dXJuIGdldE1lcmdlZFZhbHVlKHVuZGVmaW5lZCwgYSk7XG4gICAgfVxuICB9XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGNvbnNpc3RlbnQtcmV0dXJuXG4gIGZ1bmN0aW9uIG1lcmdlRGlyZWN0S2V5cyhhLCBiLCBwcm9wKSB7XG4gICAgaWYgKHByb3AgaW4gY29uZmlnMikge1xuICAgICAgcmV0dXJuIGdldE1lcmdlZFZhbHVlKGEsIGIpO1xuICAgIH0gZWxzZSBpZiAocHJvcCBpbiBjb25maWcxKSB7XG4gICAgICByZXR1cm4gZ2V0TWVyZ2VkVmFsdWUodW5kZWZpbmVkLCBhKTtcbiAgICB9XG4gIH1cblxuICBjb25zdCBtZXJnZU1hcCA9IHtcbiAgICB1cmw6IHZhbHVlRnJvbUNvbmZpZzIsXG4gICAgbWV0aG9kOiB2YWx1ZUZyb21Db25maWcyLFxuICAgIGRhdGE6IHZhbHVlRnJvbUNvbmZpZzIsXG4gICAgYmFzZVVSTDogZGVmYXVsdFRvQ29uZmlnMixcbiAgICB0cmFuc2Zvcm1SZXF1ZXN0OiBkZWZhdWx0VG9Db25maWcyLFxuICAgIHRyYW5zZm9ybVJlc3BvbnNlOiBkZWZhdWx0VG9Db25maWcyLFxuICAgIHBhcmFtc1NlcmlhbGl6ZXI6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgdGltZW91dDogZGVmYXVsdFRvQ29uZmlnMixcbiAgICB0aW1lb3V0TWVzc2FnZTogZGVmYXVsdFRvQ29uZmlnMixcbiAgICB3aXRoQ3JlZGVudGlhbHM6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgd2l0aFhTUkZUb2tlbjogZGVmYXVsdFRvQ29uZmlnMixcbiAgICBhZGFwdGVyOiBkZWZhdWx0VG9Db25maWcyLFxuICAgIHJlc3BvbnNlVHlwZTogZGVmYXVsdFRvQ29uZmlnMixcbiAgICB4c3JmQ29va2llTmFtZTogZGVmYXVsdFRvQ29uZmlnMixcbiAgICB4c3JmSGVhZGVyTmFtZTogZGVmYXVsdFRvQ29uZmlnMixcbiAgICBvblVwbG9hZFByb2dyZXNzOiBkZWZhdWx0VG9Db25maWcyLFxuICAgIG9uRG93bmxvYWRQcm9ncmVzczogZGVmYXVsdFRvQ29uZmlnMixcbiAgICBkZWNvbXByZXNzOiBkZWZhdWx0VG9Db25maWcyLFxuICAgIG1heENvbnRlbnRMZW5ndGg6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgbWF4Qm9keUxlbmd0aDogZGVmYXVsdFRvQ29uZmlnMixcbiAgICBiZWZvcmVSZWRpcmVjdDogZGVmYXVsdFRvQ29uZmlnMixcbiAgICB0cmFuc3BvcnQ6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgaHR0cEFnZW50OiBkZWZhdWx0VG9Db25maWcyLFxuICAgIGh0dHBzQWdlbnQ6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgY2FuY2VsVG9rZW46IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgc29ja2V0UGF0aDogZGVmYXVsdFRvQ29uZmlnMixcbiAgICByZXNwb25zZUVuY29kaW5nOiBkZWZhdWx0VG9Db25maWcyLFxuICAgIHZhbGlkYXRlU3RhdHVzOiBtZXJnZURpcmVjdEtleXMsXG4gICAgaGVhZGVyczogKGEsIGIpID0+IG1lcmdlRGVlcFByb3BlcnRpZXMoaGVhZGVyc1RvT2JqZWN0KGEpLCBoZWFkZXJzVG9PYmplY3QoYiksIHRydWUpXG4gIH07XG5cbiAgdXRpbHMkMS5mb3JFYWNoKE9iamVjdC5rZXlzKE9iamVjdC5hc3NpZ24oe30sIGNvbmZpZzEsIGNvbmZpZzIpKSwgZnVuY3Rpb24gY29tcHV0ZUNvbmZpZ1ZhbHVlKHByb3ApIHtcbiAgICBjb25zdCBtZXJnZSA9IG1lcmdlTWFwW3Byb3BdIHx8IG1lcmdlRGVlcFByb3BlcnRpZXM7XG4gICAgY29uc3QgY29uZmlnVmFsdWUgPSBtZXJnZShjb25maWcxW3Byb3BdLCBjb25maWcyW3Byb3BdLCBwcm9wKTtcbiAgICAodXRpbHMkMS5pc1VuZGVmaW5lZChjb25maWdWYWx1ZSkgJiYgbWVyZ2UgIT09IG1lcmdlRGlyZWN0S2V5cykgfHwgKGNvbmZpZ1twcm9wXSA9IGNvbmZpZ1ZhbHVlKTtcbiAgfSk7XG5cbiAgcmV0dXJuIGNvbmZpZztcbn1cblxuY29uc3QgdmFsaWRhdG9ycyQxID0ge307XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBmdW5jLW5hbWVzXG5bJ29iamVjdCcsICdib29sZWFuJywgJ251bWJlcicsICdmdW5jdGlvbicsICdzdHJpbmcnLCAnc3ltYm9sJ10uZm9yRWFjaCgodHlwZSwgaSkgPT4ge1xuICB2YWxpZGF0b3JzJDFbdHlwZV0gPSBmdW5jdGlvbiB2YWxpZGF0b3IodGhpbmcpIHtcbiAgICByZXR1cm4gdHlwZW9mIHRoaW5nID09PSB0eXBlIHx8ICdhJyArIChpIDwgMSA/ICduICcgOiAnICcpICsgdHlwZTtcbiAgfTtcbn0pO1xuXG5jb25zdCBkZXByZWNhdGVkV2FybmluZ3MgPSB7fTtcblxuLyoqXG4gKiBUcmFuc2l0aW9uYWwgb3B0aW9uIHZhbGlkYXRvclxuICpcbiAqIEBwYXJhbSB7ZnVuY3Rpb258Ym9vbGVhbj99IHZhbGlkYXRvciAtIHNldCB0byBmYWxzZSBpZiB0aGUgdHJhbnNpdGlvbmFsIG9wdGlvbiBoYXMgYmVlbiByZW1vdmVkXG4gKiBAcGFyYW0ge3N0cmluZz99IHZlcnNpb24gLSBkZXByZWNhdGVkIHZlcnNpb24gLyByZW1vdmVkIHNpbmNlIHZlcnNpb25cbiAqIEBwYXJhbSB7c3RyaW5nP30gbWVzc2FnZSAtIHNvbWUgbWVzc2FnZSB3aXRoIGFkZGl0aW9uYWwgaW5mb1xuICpcbiAqIEByZXR1cm5zIHtmdW5jdGlvbn1cbiAqL1xudmFsaWRhdG9ycyQxLnRyYW5zaXRpb25hbCA9IGZ1bmN0aW9uIHRyYW5zaXRpb25hbCh2YWxpZGF0b3IsIHZlcnNpb24sIG1lc3NhZ2UpIHtcbiAgZnVuY3Rpb24gZm9ybWF0TWVzc2FnZShvcHQsIGRlc2MpIHtcbiAgICByZXR1cm4gJ1tBeGlvcyB2JyArIFZFUlNJT04gKyAnXSBUcmFuc2l0aW9uYWwgb3B0aW9uIFxcJycgKyBvcHQgKyAnXFwnJyArIGRlc2MgKyAobWVzc2FnZSA/ICcuICcgKyBtZXNzYWdlIDogJycpO1xuICB9XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGZ1bmMtbmFtZXNcbiAgcmV0dXJuICh2YWx1ZSwgb3B0LCBvcHRzKSA9PiB7XG4gICAgaWYgKHZhbGlkYXRvciA9PT0gZmFsc2UpIHtcbiAgICAgIHRocm93IG5ldyBBeGlvc0Vycm9yKFxuICAgICAgICBmb3JtYXRNZXNzYWdlKG9wdCwgJyBoYXMgYmVlbiByZW1vdmVkJyArICh2ZXJzaW9uID8gJyBpbiAnICsgdmVyc2lvbiA6ICcnKSksXG4gICAgICAgIEF4aW9zRXJyb3IuRVJSX0RFUFJFQ0FURURcbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKHZlcnNpb24gJiYgIWRlcHJlY2F0ZWRXYXJuaW5nc1tvcHRdKSB7XG4gICAgICBkZXByZWNhdGVkV2FybmluZ3Nbb3B0XSA9IHRydWU7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICBmb3JtYXRNZXNzYWdlKFxuICAgICAgICAgIG9wdCxcbiAgICAgICAgICAnIGhhcyBiZWVuIGRlcHJlY2F0ZWQgc2luY2UgdicgKyB2ZXJzaW9uICsgJyBhbmQgd2lsbCBiZSByZW1vdmVkIGluIHRoZSBuZWFyIGZ1dHVyZSdcbiAgICAgICAgKVxuICAgICAgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdmFsaWRhdG9yID8gdmFsaWRhdG9yKHZhbHVlLCBvcHQsIG9wdHMpIDogdHJ1ZTtcbiAgfTtcbn07XG5cbi8qKlxuICogQXNzZXJ0IG9iamVjdCdzIHByb3BlcnRpZXMgdHlwZVxuICpcbiAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zXG4gKiBAcGFyYW0ge29iamVjdH0gc2NoZW1hXG4gKiBAcGFyYW0ge2Jvb2xlYW4/fSBhbGxvd1Vua25vd25cbiAqXG4gKiBAcmV0dXJucyB7b2JqZWN0fVxuICovXG5cbmZ1bmN0aW9uIGFzc2VydE9wdGlvbnMob3B0aW9ucywgc2NoZW1hLCBhbGxvd1Vua25vd24pIHtcbiAgaWYgKHR5cGVvZiBvcHRpb25zICE9PSAnb2JqZWN0Jykge1xuICAgIHRocm93IG5ldyBBeGlvc0Vycm9yKCdvcHRpb25zIG11c3QgYmUgYW4gb2JqZWN0JywgQXhpb3NFcnJvci5FUlJfQkFEX09QVElPTl9WQUxVRSk7XG4gIH1cbiAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKG9wdGlvbnMpO1xuICBsZXQgaSA9IGtleXMubGVuZ3RoO1xuICB3aGlsZSAoaS0tID4gMCkge1xuICAgIGNvbnN0IG9wdCA9IGtleXNbaV07XG4gICAgY29uc3QgdmFsaWRhdG9yID0gc2NoZW1hW29wdF07XG4gICAgaWYgKHZhbGlkYXRvcikge1xuICAgICAgY29uc3QgdmFsdWUgPSBvcHRpb25zW29wdF07XG4gICAgICBjb25zdCByZXN1bHQgPSB2YWx1ZSA9PT0gdW5kZWZpbmVkIHx8IHZhbGlkYXRvcih2YWx1ZSwgb3B0LCBvcHRpb25zKTtcbiAgICAgIGlmIChyZXN1bHQgIT09IHRydWUpIHtcbiAgICAgICAgdGhyb3cgbmV3IEF4aW9zRXJyb3IoJ29wdGlvbiAnICsgb3B0ICsgJyBtdXN0IGJlICcgKyByZXN1bHQsIEF4aW9zRXJyb3IuRVJSX0JBRF9PUFRJT05fVkFMVUUpO1xuICAgICAgfVxuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGlmIChhbGxvd1Vua25vd24gIT09IHRydWUpIHtcbiAgICAgIHRocm93IG5ldyBBeGlvc0Vycm9yKCdVbmtub3duIG9wdGlvbiAnICsgb3B0LCBBeGlvc0Vycm9yLkVSUl9CQURfT1BUSU9OKTtcbiAgICB9XG4gIH1cbn1cblxuY29uc3QgdmFsaWRhdG9yID0ge1xuICBhc3NlcnRPcHRpb25zLFxuICB2YWxpZGF0b3JzOiB2YWxpZGF0b3JzJDFcbn07XG5cbmNvbnN0IHZhbGlkYXRvcnMgPSB2YWxpZGF0b3IudmFsaWRhdG9ycztcblxuLyoqXG4gKiBDcmVhdGUgYSBuZXcgaW5zdGFuY2Ugb2YgQXhpb3NcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gaW5zdGFuY2VDb25maWcgVGhlIGRlZmF1bHQgY29uZmlnIGZvciB0aGUgaW5zdGFuY2VcbiAqXG4gKiBAcmV0dXJuIHtBeGlvc30gQSBuZXcgaW5zdGFuY2Ugb2YgQXhpb3NcbiAqL1xuY2xhc3MgQXhpb3Mge1xuICBjb25zdHJ1Y3RvcihpbnN0YW5jZUNvbmZpZykge1xuICAgIHRoaXMuZGVmYXVsdHMgPSBpbnN0YW5jZUNvbmZpZztcbiAgICB0aGlzLmludGVyY2VwdG9ycyA9IHtcbiAgICAgIHJlcXVlc3Q6IG5ldyBJbnRlcmNlcHRvck1hbmFnZXIkMSgpLFxuICAgICAgcmVzcG9uc2U6IG5ldyBJbnRlcmNlcHRvck1hbmFnZXIkMSgpXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEaXNwYXRjaCBhIHJlcXVlc3RcbiAgICpcbiAgICogQHBhcmFtIHtTdHJpbmd8T2JqZWN0fSBjb25maWdPclVybCBUaGUgY29uZmlnIHNwZWNpZmljIGZvciB0aGlzIHJlcXVlc3QgKG1lcmdlZCB3aXRoIHRoaXMuZGVmYXVsdHMpXG4gICAqIEBwYXJhbSB7P09iamVjdH0gY29uZmlnXG4gICAqXG4gICAqIEByZXR1cm5zIHtQcm9taXNlfSBUaGUgUHJvbWlzZSB0byBiZSBmdWxmaWxsZWRcbiAgICovXG4gIHJlcXVlc3QoY29uZmlnT3JVcmwsIGNvbmZpZykge1xuICAgIC8qZXNsaW50IG5vLXBhcmFtLXJlYXNzaWduOjAqL1xuICAgIC8vIEFsbG93IGZvciBheGlvcygnZXhhbXBsZS91cmwnWywgY29uZmlnXSkgYSBsYSBmZXRjaCBBUElcbiAgICBpZiAodHlwZW9mIGNvbmZpZ09yVXJsID09PSAnc3RyaW5nJykge1xuICAgICAgY29uZmlnID0gY29uZmlnIHx8IHt9O1xuICAgICAgY29uZmlnLnVybCA9IGNvbmZpZ09yVXJsO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25maWcgPSBjb25maWdPclVybCB8fCB7fTtcbiAgICB9XG5cbiAgICBjb25maWcgPSBtZXJnZUNvbmZpZyh0aGlzLmRlZmF1bHRzLCBjb25maWcpO1xuXG4gICAgY29uc3Qge3RyYW5zaXRpb25hbCwgcGFyYW1zU2VyaWFsaXplciwgaGVhZGVyc30gPSBjb25maWc7XG5cbiAgICBpZiAodHJhbnNpdGlvbmFsICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHZhbGlkYXRvci5hc3NlcnRPcHRpb25zKHRyYW5zaXRpb25hbCwge1xuICAgICAgICBzaWxlbnRKU09OUGFyc2luZzogdmFsaWRhdG9ycy50cmFuc2l0aW9uYWwodmFsaWRhdG9ycy5ib29sZWFuKSxcbiAgICAgICAgZm9yY2VkSlNPTlBhcnNpbmc6IHZhbGlkYXRvcnMudHJhbnNpdGlvbmFsKHZhbGlkYXRvcnMuYm9vbGVhbiksXG4gICAgICAgIGNsYXJpZnlUaW1lb3V0RXJyb3I6IHZhbGlkYXRvcnMudHJhbnNpdGlvbmFsKHZhbGlkYXRvcnMuYm9vbGVhbilcbiAgICAgIH0sIGZhbHNlKTtcbiAgICB9XG5cbiAgICBpZiAocGFyYW1zU2VyaWFsaXplciAhPSBudWxsKSB7XG4gICAgICBpZiAodXRpbHMkMS5pc0Z1bmN0aW9uKHBhcmFtc1NlcmlhbGl6ZXIpKSB7XG4gICAgICAgIGNvbmZpZy5wYXJhbXNTZXJpYWxpemVyID0ge1xuICAgICAgICAgIHNlcmlhbGl6ZTogcGFyYW1zU2VyaWFsaXplclxuICAgICAgICB9O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFsaWRhdG9yLmFzc2VydE9wdGlvbnMocGFyYW1zU2VyaWFsaXplciwge1xuICAgICAgICAgIGVuY29kZTogdmFsaWRhdG9ycy5mdW5jdGlvbixcbiAgICAgICAgICBzZXJpYWxpemU6IHZhbGlkYXRvcnMuZnVuY3Rpb25cbiAgICAgICAgfSwgdHJ1ZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gU2V0IGNvbmZpZy5tZXRob2RcbiAgICBjb25maWcubWV0aG9kID0gKGNvbmZpZy5tZXRob2QgfHwgdGhpcy5kZWZhdWx0cy5tZXRob2QgfHwgJ2dldCcpLnRvTG93ZXJDYXNlKCk7XG5cbiAgICAvLyBGbGF0dGVuIGhlYWRlcnNcbiAgICBsZXQgY29udGV4dEhlYWRlcnMgPSBoZWFkZXJzICYmIHV0aWxzJDEubWVyZ2UoXG4gICAgICBoZWFkZXJzLmNvbW1vbixcbiAgICAgIGhlYWRlcnNbY29uZmlnLm1ldGhvZF1cbiAgICApO1xuXG4gICAgaGVhZGVycyAmJiB1dGlscyQxLmZvckVhY2goXG4gICAgICBbJ2RlbGV0ZScsICdnZXQnLCAnaGVhZCcsICdwb3N0JywgJ3B1dCcsICdwYXRjaCcsICdjb21tb24nXSxcbiAgICAgIChtZXRob2QpID0+IHtcbiAgICAgICAgZGVsZXRlIGhlYWRlcnNbbWV0aG9kXTtcbiAgICAgIH1cbiAgICApO1xuXG4gICAgY29uZmlnLmhlYWRlcnMgPSBBeGlvc0hlYWRlcnMkMS5jb25jYXQoY29udGV4dEhlYWRlcnMsIGhlYWRlcnMpO1xuXG4gICAgLy8gZmlsdGVyIG91dCBza2lwcGVkIGludGVyY2VwdG9yc1xuICAgIGNvbnN0IHJlcXVlc3RJbnRlcmNlcHRvckNoYWluID0gW107XG4gICAgbGV0IHN5bmNocm9ub3VzUmVxdWVzdEludGVyY2VwdG9ycyA9IHRydWU7XG4gICAgdGhpcy5pbnRlcmNlcHRvcnMucmVxdWVzdC5mb3JFYWNoKGZ1bmN0aW9uIHVuc2hpZnRSZXF1ZXN0SW50ZXJjZXB0b3JzKGludGVyY2VwdG9yKSB7XG4gICAgICBpZiAodHlwZW9mIGludGVyY2VwdG9yLnJ1bldoZW4gPT09ICdmdW5jdGlvbicgJiYgaW50ZXJjZXB0b3IucnVuV2hlbihjb25maWcpID09PSBmYWxzZSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHN5bmNocm9ub3VzUmVxdWVzdEludGVyY2VwdG9ycyA9IHN5bmNocm9ub3VzUmVxdWVzdEludGVyY2VwdG9ycyAmJiBpbnRlcmNlcHRvci5zeW5jaHJvbm91cztcblxuICAgICAgcmVxdWVzdEludGVyY2VwdG9yQ2hhaW4udW5zaGlmdChpbnRlcmNlcHRvci5mdWxmaWxsZWQsIGludGVyY2VwdG9yLnJlamVjdGVkKTtcbiAgICB9KTtcblxuICAgIGNvbnN0IHJlc3BvbnNlSW50ZXJjZXB0b3JDaGFpbiA9IFtdO1xuICAgIHRoaXMuaW50ZXJjZXB0b3JzLnJlc3BvbnNlLmZvckVhY2goZnVuY3Rpb24gcHVzaFJlc3BvbnNlSW50ZXJjZXB0b3JzKGludGVyY2VwdG9yKSB7XG4gICAgICByZXNwb25zZUludGVyY2VwdG9yQ2hhaW4ucHVzaChpbnRlcmNlcHRvci5mdWxmaWxsZWQsIGludGVyY2VwdG9yLnJlamVjdGVkKTtcbiAgICB9KTtcblxuICAgIGxldCBwcm9taXNlO1xuICAgIGxldCBpID0gMDtcbiAgICBsZXQgbGVuO1xuXG4gICAgaWYgKCFzeW5jaHJvbm91c1JlcXVlc3RJbnRlcmNlcHRvcnMpIHtcbiAgICAgIGNvbnN0IGNoYWluID0gW2Rpc3BhdGNoUmVxdWVzdC5iaW5kKHRoaXMpLCB1bmRlZmluZWRdO1xuICAgICAgY2hhaW4udW5zaGlmdC5hcHBseShjaGFpbiwgcmVxdWVzdEludGVyY2VwdG9yQ2hhaW4pO1xuICAgICAgY2hhaW4ucHVzaC5hcHBseShjaGFpbiwgcmVzcG9uc2VJbnRlcmNlcHRvckNoYWluKTtcbiAgICAgIGxlbiA9IGNoYWluLmxlbmd0aDtcblxuICAgICAgcHJvbWlzZSA9IFByb21pc2UucmVzb2x2ZShjb25maWcpO1xuXG4gICAgICB3aGlsZSAoaSA8IGxlbikge1xuICAgICAgICBwcm9taXNlID0gcHJvbWlzZS50aGVuKGNoYWluW2krK10sIGNoYWluW2krK10pO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gcHJvbWlzZTtcbiAgICB9XG5cbiAgICBsZW4gPSByZXF1ZXN0SW50ZXJjZXB0b3JDaGFpbi5sZW5ndGg7XG5cbiAgICBsZXQgbmV3Q29uZmlnID0gY29uZmlnO1xuXG4gICAgaSA9IDA7XG5cbiAgICB3aGlsZSAoaSA8IGxlbikge1xuICAgICAgY29uc3Qgb25GdWxmaWxsZWQgPSByZXF1ZXN0SW50ZXJjZXB0b3JDaGFpbltpKytdO1xuICAgICAgY29uc3Qgb25SZWplY3RlZCA9IHJlcXVlc3RJbnRlcmNlcHRvckNoYWluW2krK107XG4gICAgICB0cnkge1xuICAgICAgICBuZXdDb25maWcgPSBvbkZ1bGZpbGxlZChuZXdDb25maWcpO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgb25SZWplY3RlZC5jYWxsKHRoaXMsIGVycm9yKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIHByb21pc2UgPSBkaXNwYXRjaFJlcXVlc3QuY2FsbCh0aGlzLCBuZXdDb25maWcpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoZXJyb3IpO1xuICAgIH1cblxuICAgIGkgPSAwO1xuICAgIGxlbiA9IHJlc3BvbnNlSW50ZXJjZXB0b3JDaGFpbi5sZW5ndGg7XG5cbiAgICB3aGlsZSAoaSA8IGxlbikge1xuICAgICAgcHJvbWlzZSA9IHByb21pc2UudGhlbihyZXNwb25zZUludGVyY2VwdG9yQ2hhaW5baSsrXSwgcmVzcG9uc2VJbnRlcmNlcHRvckNoYWluW2krK10pO1xuICAgIH1cblxuICAgIHJldHVybiBwcm9taXNlO1xuICB9XG5cbiAgZ2V0VXJpKGNvbmZpZykge1xuICAgIGNvbmZpZyA9IG1lcmdlQ29uZmlnKHRoaXMuZGVmYXVsdHMsIGNvbmZpZyk7XG4gICAgY29uc3QgZnVsbFBhdGggPSBidWlsZEZ1bGxQYXRoKGNvbmZpZy5iYXNlVVJMLCBjb25maWcudXJsKTtcbiAgICByZXR1cm4gYnVpbGRVUkwoZnVsbFBhdGgsIGNvbmZpZy5wYXJhbXMsIGNvbmZpZy5wYXJhbXNTZXJpYWxpemVyKTtcbiAgfVxufVxuXG4vLyBQcm92aWRlIGFsaWFzZXMgZm9yIHN1cHBvcnRlZCByZXF1ZXN0IG1ldGhvZHNcbnV0aWxzJDEuZm9yRWFjaChbJ2RlbGV0ZScsICdnZXQnLCAnaGVhZCcsICdvcHRpb25zJ10sIGZ1bmN0aW9uIGZvckVhY2hNZXRob2ROb0RhdGEobWV0aG9kKSB7XG4gIC8qZXNsaW50IGZ1bmMtbmFtZXM6MCovXG4gIEF4aW9zLnByb3RvdHlwZVttZXRob2RdID0gZnVuY3Rpb24odXJsLCBjb25maWcpIHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0KG1lcmdlQ29uZmlnKGNvbmZpZyB8fCB7fSwge1xuICAgICAgbWV0aG9kLFxuICAgICAgdXJsLFxuICAgICAgZGF0YTogKGNvbmZpZyB8fCB7fSkuZGF0YVxuICAgIH0pKTtcbiAgfTtcbn0pO1xuXG51dGlscyQxLmZvckVhY2goWydwb3N0JywgJ3B1dCcsICdwYXRjaCddLCBmdW5jdGlvbiBmb3JFYWNoTWV0aG9kV2l0aERhdGEobWV0aG9kKSB7XG4gIC8qZXNsaW50IGZ1bmMtbmFtZXM6MCovXG5cbiAgZnVuY3Rpb24gZ2VuZXJhdGVIVFRQTWV0aG9kKGlzRm9ybSkge1xuICAgIHJldHVybiBmdW5jdGlvbiBodHRwTWV0aG9kKHVybCwgZGF0YSwgY29uZmlnKSB7XG4gICAgICByZXR1cm4gdGhpcy5yZXF1ZXN0KG1lcmdlQ29uZmlnKGNvbmZpZyB8fCB7fSwge1xuICAgICAgICBtZXRob2QsXG4gICAgICAgIGhlYWRlcnM6IGlzRm9ybSA/IHtcbiAgICAgICAgICAnQ29udGVudC1UeXBlJzogJ211bHRpcGFydC9mb3JtLWRhdGEnXG4gICAgICAgIH0gOiB7fSxcbiAgICAgICAgdXJsLFxuICAgICAgICBkYXRhXG4gICAgICB9KSk7XG4gICAgfTtcbiAgfVxuXG4gIEF4aW9zLnByb3RvdHlwZVttZXRob2RdID0gZ2VuZXJhdGVIVFRQTWV0aG9kKCk7XG5cbiAgQXhpb3MucHJvdG90eXBlW21ldGhvZCArICdGb3JtJ10gPSBnZW5lcmF0ZUhUVFBNZXRob2QodHJ1ZSk7XG59KTtcblxuY29uc3QgQXhpb3MkMSA9IEF4aW9zO1xuXG4vKipcbiAqIEEgYENhbmNlbFRva2VuYCBpcyBhbiBvYmplY3QgdGhhdCBjYW4gYmUgdXNlZCB0byByZXF1ZXN0IGNhbmNlbGxhdGlvbiBvZiBhbiBvcGVyYXRpb24uXG4gKlxuICogQHBhcmFtIHtGdW5jdGlvbn0gZXhlY3V0b3IgVGhlIGV4ZWN1dG9yIGZ1bmN0aW9uLlxuICpcbiAqIEByZXR1cm5zIHtDYW5jZWxUb2tlbn1cbiAqL1xuY2xhc3MgQ2FuY2VsVG9rZW4ge1xuICBjb25zdHJ1Y3RvcihleGVjdXRvcikge1xuICAgIGlmICh0eXBlb2YgZXhlY3V0b3IgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ2V4ZWN1dG9yIG11c3QgYmUgYSBmdW5jdGlvbi4nKTtcbiAgICB9XG5cbiAgICBsZXQgcmVzb2x2ZVByb21pc2U7XG5cbiAgICB0aGlzLnByb21pc2UgPSBuZXcgUHJvbWlzZShmdW5jdGlvbiBwcm9taXNlRXhlY3V0b3IocmVzb2x2ZSkge1xuICAgICAgcmVzb2x2ZVByb21pc2UgPSByZXNvbHZlO1xuICAgIH0pO1xuXG4gICAgY29uc3QgdG9rZW4gPSB0aGlzO1xuXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGZ1bmMtbmFtZXNcbiAgICB0aGlzLnByb21pc2UudGhlbihjYW5jZWwgPT4ge1xuICAgICAgaWYgKCF0b2tlbi5fbGlzdGVuZXJzKSByZXR1cm47XG5cbiAgICAgIGxldCBpID0gdG9rZW4uX2xpc3RlbmVycy5sZW5ndGg7XG5cbiAgICAgIHdoaWxlIChpLS0gPiAwKSB7XG4gICAgICAgIHRva2VuLl9saXN0ZW5lcnNbaV0oY2FuY2VsKTtcbiAgICAgIH1cbiAgICAgIHRva2VuLl9saXN0ZW5lcnMgPSBudWxsO1xuICAgIH0pO1xuXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGZ1bmMtbmFtZXNcbiAgICB0aGlzLnByb21pc2UudGhlbiA9IG9uZnVsZmlsbGVkID0+IHtcbiAgICAgIGxldCBfcmVzb2x2ZTtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBmdW5jLW5hbWVzXG4gICAgICBjb25zdCBwcm9taXNlID0gbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XG4gICAgICAgIHRva2VuLnN1YnNjcmliZShyZXNvbHZlKTtcbiAgICAgICAgX3Jlc29sdmUgPSByZXNvbHZlO1xuICAgICAgfSkudGhlbihvbmZ1bGZpbGxlZCk7XG5cbiAgICAgIHByb21pc2UuY2FuY2VsID0gZnVuY3Rpb24gcmVqZWN0KCkge1xuICAgICAgICB0b2tlbi51bnN1YnNjcmliZShfcmVzb2x2ZSk7XG4gICAgICB9O1xuXG4gICAgICByZXR1cm4gcHJvbWlzZTtcbiAgICB9O1xuXG4gICAgZXhlY3V0b3IoZnVuY3Rpb24gY2FuY2VsKG1lc3NhZ2UsIGNvbmZpZywgcmVxdWVzdCkge1xuICAgICAgaWYgKHRva2VuLnJlYXNvbikge1xuICAgICAgICAvLyBDYW5jZWxsYXRpb24gaGFzIGFscmVhZHkgYmVlbiByZXF1ZXN0ZWRcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB0b2tlbi5yZWFzb24gPSBuZXcgQ2FuY2VsZWRFcnJvcihtZXNzYWdlLCBjb25maWcsIHJlcXVlc3QpO1xuICAgICAgcmVzb2x2ZVByb21pc2UodG9rZW4ucmVhc29uKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaHJvd3MgYSBgQ2FuY2VsZWRFcnJvcmAgaWYgY2FuY2VsbGF0aW9uIGhhcyBiZWVuIHJlcXVlc3RlZC5cbiAgICovXG4gIHRocm93SWZSZXF1ZXN0ZWQoKSB7XG4gICAgaWYgKHRoaXMucmVhc29uKSB7XG4gICAgICB0aHJvdyB0aGlzLnJlYXNvbjtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU3Vic2NyaWJlIHRvIHRoZSBjYW5jZWwgc2lnbmFsXG4gICAqL1xuXG4gIHN1YnNjcmliZShsaXN0ZW5lcikge1xuICAgIGlmICh0aGlzLnJlYXNvbikge1xuICAgICAgbGlzdGVuZXIodGhpcy5yZWFzb24pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9saXN0ZW5lcnMpIHtcbiAgICAgIHRoaXMuX2xpc3RlbmVycy5wdXNoKGxpc3RlbmVyKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fbGlzdGVuZXJzID0gW2xpc3RlbmVyXTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVW5zdWJzY3JpYmUgZnJvbSB0aGUgY2FuY2VsIHNpZ25hbFxuICAgKi9cblxuICB1bnN1YnNjcmliZShsaXN0ZW5lcikge1xuICAgIGlmICghdGhpcy5fbGlzdGVuZXJzKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGluZGV4ID0gdGhpcy5fbGlzdGVuZXJzLmluZGV4T2YobGlzdGVuZXIpO1xuICAgIGlmIChpbmRleCAhPT0gLTEpIHtcbiAgICAgIHRoaXMuX2xpc3RlbmVycy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGFuIG9iamVjdCB0aGF0IGNvbnRhaW5zIGEgbmV3IGBDYW5jZWxUb2tlbmAgYW5kIGEgZnVuY3Rpb24gdGhhdCwgd2hlbiBjYWxsZWQsXG4gICAqIGNhbmNlbHMgdGhlIGBDYW5jZWxUb2tlbmAuXG4gICAqL1xuICBzdGF0aWMgc291cmNlKCkge1xuICAgIGxldCBjYW5jZWw7XG4gICAgY29uc3QgdG9rZW4gPSBuZXcgQ2FuY2VsVG9rZW4oZnVuY3Rpb24gZXhlY3V0b3IoYykge1xuICAgICAgY2FuY2VsID0gYztcbiAgICB9KTtcbiAgICByZXR1cm4ge1xuICAgICAgdG9rZW4sXG4gICAgICBjYW5jZWxcbiAgICB9O1xuICB9XG59XG5cbmNvbnN0IENhbmNlbFRva2VuJDEgPSBDYW5jZWxUb2tlbjtcblxuLyoqXG4gKiBTeW50YWN0aWMgc3VnYXIgZm9yIGludm9raW5nIGEgZnVuY3Rpb24gYW5kIGV4cGFuZGluZyBhbiBhcnJheSBmb3IgYXJndW1lbnRzLlxuICpcbiAqIENvbW1vbiB1c2UgY2FzZSB3b3VsZCBiZSB0byB1c2UgYEZ1bmN0aW9uLnByb3RvdHlwZS5hcHBseWAuXG4gKlxuICogIGBgYGpzXG4gKiAgZnVuY3Rpb24gZih4LCB5LCB6KSB7fVxuICogIHZhciBhcmdzID0gWzEsIDIsIDNdO1xuICogIGYuYXBwbHkobnVsbCwgYXJncyk7XG4gKiAgYGBgXG4gKlxuICogV2l0aCBgc3ByZWFkYCB0aGlzIGV4YW1wbGUgY2FuIGJlIHJlLXdyaXR0ZW4uXG4gKlxuICogIGBgYGpzXG4gKiAgc3ByZWFkKGZ1bmN0aW9uKHgsIHksIHopIHt9KShbMSwgMiwgM10pO1xuICogIGBgYFxuICpcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrXG4gKlxuICogQHJldHVybnMge0Z1bmN0aW9ufVxuICovXG5mdW5jdGlvbiBzcHJlYWQoY2FsbGJhY2spIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIHdyYXAoYXJyKSB7XG4gICAgcmV0dXJuIGNhbGxiYWNrLmFwcGx5KG51bGwsIGFycik7XG4gIH07XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSBwYXlsb2FkIGlzIGFuIGVycm9yIHRocm93biBieSBBeGlvc1xuICpcbiAqIEBwYXJhbSB7Kn0gcGF5bG9hZCBUaGUgdmFsdWUgdG8gdGVzdFxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHRoZSBwYXlsb2FkIGlzIGFuIGVycm9yIHRocm93biBieSBBeGlvcywgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzQXhpb3NFcnJvcihwYXlsb2FkKSB7XG4gIHJldHVybiB1dGlscyQxLmlzT2JqZWN0KHBheWxvYWQpICYmIChwYXlsb2FkLmlzQXhpb3NFcnJvciA9PT0gdHJ1ZSk7XG59XG5cbmNvbnN0IEh0dHBTdGF0dXNDb2RlID0ge1xuICBDb250aW51ZTogMTAwLFxuICBTd2l0Y2hpbmdQcm90b2NvbHM6IDEwMSxcbiAgUHJvY2Vzc2luZzogMTAyLFxuICBFYXJseUhpbnRzOiAxMDMsXG4gIE9rOiAyMDAsXG4gIENyZWF0ZWQ6IDIwMSxcbiAgQWNjZXB0ZWQ6IDIwMixcbiAgTm9uQXV0aG9yaXRhdGl2ZUluZm9ybWF0aW9uOiAyMDMsXG4gIE5vQ29udGVudDogMjA0LFxuICBSZXNldENvbnRlbnQ6IDIwNSxcbiAgUGFydGlhbENvbnRlbnQ6IDIwNixcbiAgTXVsdGlTdGF0dXM6IDIwNyxcbiAgQWxyZWFkeVJlcG9ydGVkOiAyMDgsXG4gIEltVXNlZDogMjI2LFxuICBNdWx0aXBsZUNob2ljZXM6IDMwMCxcbiAgTW92ZWRQZXJtYW5lbnRseTogMzAxLFxuICBGb3VuZDogMzAyLFxuICBTZWVPdGhlcjogMzAzLFxuICBOb3RNb2RpZmllZDogMzA0LFxuICBVc2VQcm94eTogMzA1LFxuICBVbnVzZWQ6IDMwNixcbiAgVGVtcG9yYXJ5UmVkaXJlY3Q6IDMwNyxcbiAgUGVybWFuZW50UmVkaXJlY3Q6IDMwOCxcbiAgQmFkUmVxdWVzdDogNDAwLFxuICBVbmF1dGhvcml6ZWQ6IDQwMSxcbiAgUGF5bWVudFJlcXVpcmVkOiA0MDIsXG4gIEZvcmJpZGRlbjogNDAzLFxuICBOb3RGb3VuZDogNDA0LFxuICBNZXRob2ROb3RBbGxvd2VkOiA0MDUsXG4gIE5vdEFjY2VwdGFibGU6IDQwNixcbiAgUHJveHlBdXRoZW50aWNhdGlvblJlcXVpcmVkOiA0MDcsXG4gIFJlcXVlc3RUaW1lb3V0OiA0MDgsXG4gIENvbmZsaWN0OiA0MDksXG4gIEdvbmU6IDQxMCxcbiAgTGVuZ3RoUmVxdWlyZWQ6IDQxMSxcbiAgUHJlY29uZGl0aW9uRmFpbGVkOiA0MTIsXG4gIFBheWxvYWRUb29MYXJnZTogNDEzLFxuICBVcmlUb29Mb25nOiA0MTQsXG4gIFVuc3VwcG9ydGVkTWVkaWFUeXBlOiA0MTUsXG4gIFJhbmdlTm90U2F0aXNmaWFibGU6IDQxNixcbiAgRXhwZWN0YXRpb25GYWlsZWQ6IDQxNyxcbiAgSW1BVGVhcG90OiA0MTgsXG4gIE1pc2RpcmVjdGVkUmVxdWVzdDogNDIxLFxuICBVbnByb2Nlc3NhYmxlRW50aXR5OiA0MjIsXG4gIExvY2tlZDogNDIzLFxuICBGYWlsZWREZXBlbmRlbmN5OiA0MjQsXG4gIFRvb0Vhcmx5OiA0MjUsXG4gIFVwZ3JhZGVSZXF1aXJlZDogNDI2LFxuICBQcmVjb25kaXRpb25SZXF1aXJlZDogNDI4LFxuICBUb29NYW55UmVxdWVzdHM6IDQyOSxcbiAgUmVxdWVzdEhlYWRlckZpZWxkc1Rvb0xhcmdlOiA0MzEsXG4gIFVuYXZhaWxhYmxlRm9yTGVnYWxSZWFzb25zOiA0NTEsXG4gIEludGVybmFsU2VydmVyRXJyb3I6IDUwMCxcbiAgTm90SW1wbGVtZW50ZWQ6IDUwMSxcbiAgQmFkR2F0ZXdheTogNTAyLFxuICBTZXJ2aWNlVW5hdmFpbGFibGU6IDUwMyxcbiAgR2F0ZXdheVRpbWVvdXQ6IDUwNCxcbiAgSHR0cFZlcnNpb25Ob3RTdXBwb3J0ZWQ6IDUwNSxcbiAgVmFyaWFudEFsc29OZWdvdGlhdGVzOiA1MDYsXG4gIEluc3VmZmljaWVudFN0b3JhZ2U6IDUwNyxcbiAgTG9vcERldGVjdGVkOiA1MDgsXG4gIE5vdEV4dGVuZGVkOiA1MTAsXG4gIE5ldHdvcmtBdXRoZW50aWNhdGlvblJlcXVpcmVkOiA1MTEsXG59O1xuXG5PYmplY3QuZW50cmllcyhIdHRwU3RhdHVzQ29kZSkuZm9yRWFjaCgoW2tleSwgdmFsdWVdKSA9PiB7XG4gIEh0dHBTdGF0dXNDb2RlW3ZhbHVlXSA9IGtleTtcbn0pO1xuXG5jb25zdCBIdHRwU3RhdHVzQ29kZSQxID0gSHR0cFN0YXR1c0NvZGU7XG5cbi8qKlxuICogQ3JlYXRlIGFuIGluc3RhbmNlIG9mIEF4aW9zXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGRlZmF1bHRDb25maWcgVGhlIGRlZmF1bHQgY29uZmlnIGZvciB0aGUgaW5zdGFuY2VcbiAqXG4gKiBAcmV0dXJucyB7QXhpb3N9IEEgbmV3IGluc3RhbmNlIG9mIEF4aW9zXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUluc3RhbmNlKGRlZmF1bHRDb25maWcpIHtcbiAgY29uc3QgY29udGV4dCA9IG5ldyBBeGlvcyQxKGRlZmF1bHRDb25maWcpO1xuICBjb25zdCBpbnN0YW5jZSA9IGJpbmQoQXhpb3MkMS5wcm90b3R5cGUucmVxdWVzdCwgY29udGV4dCk7XG5cbiAgLy8gQ29weSBheGlvcy5wcm90b3R5cGUgdG8gaW5zdGFuY2VcbiAgdXRpbHMkMS5leHRlbmQoaW5zdGFuY2UsIEF4aW9zJDEucHJvdG90eXBlLCBjb250ZXh0LCB7YWxsT3duS2V5czogdHJ1ZX0pO1xuXG4gIC8vIENvcHkgY29udGV4dCB0byBpbnN0YW5jZVxuICB1dGlscyQxLmV4dGVuZChpbnN0YW5jZSwgY29udGV4dCwgbnVsbCwge2FsbE93bktleXM6IHRydWV9KTtcblxuICAvLyBGYWN0b3J5IGZvciBjcmVhdGluZyBuZXcgaW5zdGFuY2VzXG4gIGluc3RhbmNlLmNyZWF0ZSA9IGZ1bmN0aW9uIGNyZWF0ZShpbnN0YW5jZUNvbmZpZykge1xuICAgIHJldHVybiBjcmVhdGVJbnN0YW5jZShtZXJnZUNvbmZpZyhkZWZhdWx0Q29uZmlnLCBpbnN0YW5jZUNvbmZpZykpO1xuICB9O1xuXG4gIHJldHVybiBpbnN0YW5jZTtcbn1cblxuLy8gQ3JlYXRlIHRoZSBkZWZhdWx0IGluc3RhbmNlIHRvIGJlIGV4cG9ydGVkXG5jb25zdCBheGlvcyA9IGNyZWF0ZUluc3RhbmNlKGRlZmF1bHRzJDEpO1xuXG4vLyBFeHBvc2UgQXhpb3MgY2xhc3MgdG8gYWxsb3cgY2xhc3MgaW5oZXJpdGFuY2VcbmF4aW9zLkF4aW9zID0gQXhpb3MkMTtcblxuLy8gRXhwb3NlIENhbmNlbCAmIENhbmNlbFRva2VuXG5heGlvcy5DYW5jZWxlZEVycm9yID0gQ2FuY2VsZWRFcnJvcjtcbmF4aW9zLkNhbmNlbFRva2VuID0gQ2FuY2VsVG9rZW4kMTtcbmF4aW9zLmlzQ2FuY2VsID0gaXNDYW5jZWw7XG5heGlvcy5WRVJTSU9OID0gVkVSU0lPTjtcbmF4aW9zLnRvRm9ybURhdGEgPSB0b0Zvcm1EYXRhO1xuXG4vLyBFeHBvc2UgQXhpb3NFcnJvciBjbGFzc1xuYXhpb3MuQXhpb3NFcnJvciA9IEF4aW9zRXJyb3I7XG5cbi8vIGFsaWFzIGZvciBDYW5jZWxlZEVycm9yIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5XG5heGlvcy5DYW5jZWwgPSBheGlvcy5DYW5jZWxlZEVycm9yO1xuXG4vLyBFeHBvc2UgYWxsL3NwcmVhZFxuYXhpb3MuYWxsID0gZnVuY3Rpb24gYWxsKHByb21pc2VzKSB7XG4gIHJldHVybiBQcm9taXNlLmFsbChwcm9taXNlcyk7XG59O1xuXG5heGlvcy5zcHJlYWQgPSBzcHJlYWQ7XG5cbi8vIEV4cG9zZSBpc0F4aW9zRXJyb3JcbmF4aW9zLmlzQXhpb3NFcnJvciA9IGlzQXhpb3NFcnJvcjtcblxuLy8gRXhwb3NlIG1lcmdlQ29uZmlnXG5heGlvcy5tZXJnZUNvbmZpZyA9IG1lcmdlQ29uZmlnO1xuXG5heGlvcy5BeGlvc0hlYWRlcnMgPSBBeGlvc0hlYWRlcnMkMTtcblxuYXhpb3MuZm9ybVRvSlNPTiA9IHRoaW5nID0+IGZvcm1EYXRhVG9KU09OKHV0aWxzJDEuaXNIVE1MRm9ybSh0aGluZykgPyBuZXcgRm9ybURhdGEodGhpbmcpIDogdGhpbmcpO1xuXG5heGlvcy5nZXRBZGFwdGVyID0gYWRhcHRlcnMuZ2V0QWRhcHRlcjtcblxuYXhpb3MuSHR0cFN0YXR1c0NvZGUgPSBIdHRwU3RhdHVzQ29kZSQxO1xuXG5heGlvcy5kZWZhdWx0ID0gYXhpb3M7XG5cbm1vZHVsZS5leHBvcnRzID0gYXhpb3M7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1heGlvcy5janMubWFwXG4iLCIvLyBUaGUgbW9kdWxlIGNhY2hlXG52YXIgX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fID0ge307XG5cbi8vIFRoZSByZXF1aXJlIGZ1bmN0aW9uXG5mdW5jdGlvbiBfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKSB7XG5cdC8vIENoZWNrIGlmIG1vZHVsZSBpcyBpbiBjYWNoZVxuXHR2YXIgY2FjaGVkTW9kdWxlID0gX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fW21vZHVsZUlkXTtcblx0aWYgKGNhY2hlZE1vZHVsZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0cmV0dXJuIGNhY2hlZE1vZHVsZS5leHBvcnRzO1xuXHR9XG5cdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXG5cdHZhciBtb2R1bGUgPSBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX19bbW9kdWxlSWRdID0ge1xuXHRcdC8vIG5vIG1vZHVsZS5pZCBuZWVkZWRcblx0XHQvLyBubyBtb2R1bGUubG9hZGVkIG5lZWRlZFxuXHRcdGV4cG9ydHM6IHt9XG5cdH07XG5cblx0Ly8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uXG5cdF9fd2VicGFja19tb2R1bGVzX19bbW9kdWxlSWRdLmNhbGwobW9kdWxlLmV4cG9ydHMsIG1vZHVsZSwgbW9kdWxlLmV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pO1xuXG5cdC8vIFJldHVybiB0aGUgZXhwb3J0cyBvZiB0aGUgbW9kdWxlXG5cdHJldHVybiBtb2R1bGUuZXhwb3J0cztcbn1cblxuIiwiLy8gc3RhcnR1cFxuLy8gTG9hZCBlbnRyeSBtb2R1bGUgYW5kIHJldHVybiBleHBvcnRzXG4vLyBUaGlzIGVudHJ5IG1vZHVsZSBpcyByZWZlcmVuY2VkIGJ5IG90aGVyIG1vZHVsZXMgc28gaXQgY2FuJ3QgYmUgaW5saW5lZFxudmFyIF9fd2VicGFja19leHBvcnRzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDgzMjEpO1xuIl0sIm5hbWVzIjpbInJvb3QiLCJmYWN0b3J5IiwiZXhwb3J0cyIsIm1vZHVsZSIsImRlZmluZSIsImFtZCIsInRoaXMiLCJwYXJhbGxlbCIsInNlcmlhbCIsInNlcmlhbE9yZGVyZWQiLCJjbGVhbiIsImtleSIsImpvYnMiLCJzdGF0ZSIsIk9iamVjdCIsImtleXMiLCJmb3JFYWNoIiwiYmluZCIsImRlZmVyIiwiY2FsbGJhY2siLCJpc0FzeW5jIiwiZXJyIiwicmVzdWx0IiwiZm4iLCJuZXh0VGljayIsInNldEltbWVkaWF0ZSIsInByb2Nlc3MiLCJzZXRUaW1lb3V0IiwiYXN5bmMiLCJhYm9ydCIsImxpc3QiLCJpdGVyYXRvciIsImluZGV4IiwiaXRlbSIsImxlbmd0aCIsInJ1bkpvYiIsImVycm9yIiwib3V0cHV0IiwicmVzdWx0cyIsInNvcnRNZXRob2QiLCJpc05hbWVkTGlzdCIsIkFycmF5IiwiaXNBcnJheSIsImluaXRTdGF0ZSIsImtleWVkTGlzdCIsInNpemUiLCJzb3J0IiwiYSIsImIiLCJpdGVyYXRlIiwidGVybWluYXRvciIsImFzY2VuZGluZyIsIml0ZXJhdG9ySGFuZGxlciIsImRlc2NlbmRpbmciLCJwYXJhbXMiLCJpc1B1cmVPYmplY3QiLCJFcnJvciIsImluaXQiLCJjbG9uZVBhcmFtcyIsIkNsaWVudCIsInZlcnNpb24iLCJhcGlLZXkiLCJhcGlTZWNyZXQiLCJhcGlUb2tlbiIsImNvbmZpZyIsIm9wdGlvbnMiLCJyZXNvdXJjZSIsInJlcXVlc3RfMSIsIkh0dHBNZXRob2RzXzEiLCJHZXQiLCJQb3N0IiwiUHV0IiwiRGVsZXRlIiwicGFja2FnZUpTT04iLCJzZXRDb25maWciLCJzZXRPcHRpb25zIiwidG9rZW5Db25uZWN0U3RyYXRlZ3kiLCJiYXNpY0Nvbm5lY3RTdHJhdGVneSIsImNsb25lZFBhcmFtcyIsInByb3h5IiwiaGVhZGVycyIsImN1c3RvbUNvbmZpZyIsIl90eXBlb2YiLCJzZXRWYWx1ZUlmTm90TmlsIiwiaG9zdCIsImZyZWV6ZSIsIl9fYXNzaWduIiwicGFja2FnZV9qc29uXzEiLCJpbmRleF8xIiwiaW5kZXhfMiIsIl9fZXh0ZW5kcyIsIk1haWxqZXQiLCJfX2V4cG9ydFN0YXIiLCJIdHRwTWV0aG9kcyIsIkpTT05iIiwic3RvcmVBc1N0cmluZyIsImNsaWVudCIsIm1ldGhvZCIsImNsaWVudF8xIiwidmFsdWVzIiwiaW5jbHVkZXMiLCJ1cmwiLCJ0b0xvd2VyQ2FzZSIsInN1YlBhdGgiLCJidWlsZFN1YlBhdGgiLCJhY3Rpb25QYXRoIiwiUmVxdWVzdCIsImdldFBhY2thZ2VWZXJzaW9uIiwiZ2V0QVBJVG9rZW4iLCJnZXRBUElLZXkiLCJnZXRBUElTZWNyZXQiLCJpbmRleE9mIiwiZGF0YSIsInVuZGVmaW5lZCIsImNsaWVudENvbmZpZyIsImdldENvbmZpZyIsIl9hIiwiX2IiLCJwcm90b2NvbCIsImlzQ29udGFjdExpc3RXaXRoQ1NWIiwiaXNCYXRjaEpvYldpdGhDU1YiLCJpc1NlbmRSZXNvdXJjZSIsInJlc291cmNlQ29udGFpblNNUyIsInJlcXVlc3RDb25maWciLCJnZXRSZXF1ZXN0Qm9keSIsInJlc3BvbnNlVHlwZSIsImdldFVzZXJBZ2VudCIsImdldENvbnRlbnRUeXBlIiwidHJhbnNmb3JtUmVzcG9uc2UiLCJyZXNwb25zZURhdGEiLCJkYXRhSXNTdHJpbmciLCJpc0pTT05SZXF1ZXN0ZWQiLCJwYXJzZVRvSlNPTmIiLCJpc0Jyb3dzZXIiLCJjcmVkZW50aWFscyIsImdldENyZWRlbnRpYWxzIiwiYXV0aCIsInVzZXJuYW1lIiwicGFzc3dvcmQiLCJjbGllbnRPcHRpb25zIiwiZ2V0T3B0aW9ucyIsInRpbWVvdXQiLCJtYXhCb2R5TGVuZ3RoIiwibWF4Q29udGVudExlbmd0aCIsImJhc2VVcmwiLCJ2YWx1ZSIsInRvU3RyaW5nIiwibmFtZSIsInBlcmZvcm1BUElDYWxsIiwiYnVpbGRGdWxsVXJsIiwic2V0QmFzZVVSTCIsImJvZHkiLCJtYWtlUmVxdWVzdCIsInJlc3BvbnNlIiwiX2ciLCJheGlvc18xIiwiY29kZSIsImVycl8xIiwiX2YiLCJzdGF0dXNfMSIsInN0YXR1c1RleHQiLCJzdGF0dXNDb2RlIiwiZXJyb3JNZXNzYWdlIiwiRXJyb3JNZXNzYWdlIiwibWVzc2FnZSIsIm9yaWdpbmFsTWVzc2FnZSIsImNvbmNhdCIsImZ1bGxNZXNzYWdlIiwiTWVzc2FnZXMiLCJfYyIsIkVycm9ycyIsIl9kIiwiX2UiLCJFcnJvckNvZGUiLCJFcnJvcklkZW50aWZpZXIiLCJFcnJvclJlbGF0ZWRUbyIsInRleHQiLCJwYXJzZSIsImUiLCJ3aW5kb3ciLCJEcmFmdENhbXBhaWduIiwiRWRpdE1vZGUiLCJDYW1wYWlnbkRyYWZ0U3RhdHVzIiwiQ2FtcGFpZ25EcmFmdFNlbmRpbmdTdGF0dXMiLCJTZW50Q2FtcGFpZ24iLCJDYW1wYWlnblR5cGUiLCJDb21tb24iLCJQZXJpb2QiLCJCdWxrQ29udGFjdE1hbmFnZW1lbnQiLCJNYW5hZ2VDb250YWN0c0FjdGlvbiIsIkltcG9ydExpc3RBY3Rpb24iLCJJbXBvcnRDU1ZNZXRob2QiLCJDU1ZJbXBvcnRTdGF0dXMiLCJKb2JTdGF0dXMiLCJDb250YWN0UHJvcGVydGllcyIsIkRhdGFUeXBlIiwiTmFtZVNwYWNlIiwiTWVzc2FnZSIsIk1lc3NhZ2VTdGF0ZSIsIkZyb21UeXBlIiwiTWVzc2FnZVN0YXR1cyIsIkN1cnJlbnRNZXNzYWdlU3RhdHVzIiwiRXZlbnRUeXBlIiwiU2VnbWVudGF0aW9uIiwiU2VnbWVudFN0YXR1cyIsIlNlbmRFbWFpbFYzXzEiLCJUcmFja09wZW5zIiwiVHJhY2tDbGlja3MiLCJSZXNwb25zZVN0YXR1cyIsIlNlbmRlciIsIkVtYWlsVHlwZSIsIlNlbmRlclN0YXR1cyIsIkROUyIsIkRLSU1Db25maWd1cmF0aW9uQ2hlY2tTdGF0dXMiLCJES0lNQ29uZmlndXJhdGlvblN0YXR1cyIsIlNQRkNvbmZpZ3VyYXRpb25DaGVja1N0YXR1cyIsIlNQRkNvbmZpZ3VyYXRpb25TdGF0dXMiLCJBUElLZXlDb25maWd1cmF0aW9uIiwiUnVuTGV2ZWwiLCJTdGF0aXN0aWMiLCJDYW1wYWlnbk92ZXJ2aWV3SURUeXBlIiwiQ2FtcGFpZ25PdmVydmlld0VkaXRNb2RlIiwiQ2FtcGFpZ25PdmVydmlld0VkaXRUeXBlIiwiQ291bnRlclNvdXJjZSIsIkNvdW50ZXJSZXNvbHV0aW9uIiwiQ291bnRlclRpbWluZyIsIkVtYWlsRXZlbnQiLCJUZW1wbGF0ZSIsIkNhdGVnb3JpZXMiLCJDYXRlZ29yaWVzU2VsZWN0aW9uTWV0aG9kIiwiT3duZXJUeXBlIiwiUHVycG9zZXMiLCJQdXJwb3Nlc1NlbGVjdGlvbk1ldGhvZCIsIldlYmhvb2siLCJFdmVudFR5cGVWYWx1ZSIsIlN0YXR1cyIsImVudW1lcmFibGUiLCJnZXQiLCJpc05pbF8xIiwiaXNOdWxsXzEiLCJpc1VuZGVmaW5lZF8xIiwiaXNQdXJlT2JqZWN0XzEiLCJzZXRWYWx1ZUlmTm90TmlsXzEiLCJnZXRQcm90b3R5cGVPZiIsInByb3RvdHlwZSIsInRhcmdldE9iamVjdCIsInBhdGgiLCJnbG9iYWxPYmplY3QiLCJCaWdOdW1iZXIiLCJpc051bWVyaWMiLCJtYXRoY2VpbCIsIk1hdGgiLCJjZWlsIiwibWF0aGZsb29yIiwiZmxvb3IiLCJiaWdudW1iZXJFcnJvciIsInRvb01hbnlEaWdpdHMiLCJCQVNFIiwiTE9HX0JBU0UiLCJNQVhfU0FGRV9JTlRFR0VSIiwiUE9XU19URU4iLCJTUVJUX0JBU0UiLCJNQVgiLCJiaXRGbG9vciIsIm4iLCJpIiwiY29lZmZUb1N0cmluZyIsInMiLCJ6IiwiaiIsInIiLCJjaGFyQ29kZUF0Iiwic2xpY2UiLCJjb21wYXJlIiwieCIsInkiLCJ4YyIsImMiLCJ5YyIsImsiLCJsIiwiaW50Q2hlY2siLCJtaW4iLCJtYXgiLCJTdHJpbmciLCJpc09kZCIsInRvRXhwb25lbnRpYWwiLCJzdHIiLCJjaGFyQXQiLCJ0b0ZpeGVkUG9pbnQiLCJsZW4iLCJ6cyIsImNsb25lIiwiY29uZmlnT2JqZWN0IiwiZGl2IiwiY29udmVydEJhc2UiLCJwYXJzZU51bWVyaWMiLCJwb3cyXzUzIiwicmFuZG9tNTNiaXRJbnQiLCJiYXNlUHJlZml4IiwiZG90QWZ0ZXIiLCJkb3RCZWZvcmUiLCJpc0luZmluaXR5T3JOYU4iLCJ3aGl0ZXNwYWNlT3JQbHVzIiwiUCIsImNvbnN0cnVjdG9yIiwidmFsdWVPZiIsIk9ORSIsIkRFQ0lNQUxfUExBQ0VTIiwiUk9VTkRJTkdfTU9ERSIsIlRPX0VYUF9ORUciLCJUT19FWFBfUE9TIiwiTUlOX0VYUCIsIk1BWF9FWFAiLCJDUllQVE8iLCJNT0RVTE9fTU9ERSIsIlBPV19QUkVDSVNJT04iLCJGT1JNQVQiLCJwcmVmaXgiLCJncm91cFNpemUiLCJzZWNvbmRhcnlHcm91cFNpemUiLCJncm91cFNlcGFyYXRvciIsImRlY2ltYWxTZXBhcmF0b3IiLCJmcmFjdGlvbkdyb3VwU2l6ZSIsImZyYWN0aW9uR3JvdXBTZXBhcmF0b3IiLCJzdWZmaXgiLCJBTFBIQUJFVCIsInYiLCJhbHBoYWJldCIsImNhc2VDaGFuZ2VkIiwiaXNOdW0iLCJfaXNCaWdOdW1iZXIiLCJ0ZXN0IiwicmVwbGFjZSIsInNlYXJjaCIsInN1YnN0cmluZyIsInJvdW5kIiwiREVCVUciLCJ0b1VwcGVyQ2FzZSIsInB1c2giLCJmb3JtYXQiLCJybSIsImlkIiwiYzAiLCJuZSIsIm1heE9yTWluIiwiYXJncyIsIm0iLCJjYWxsIiwibm9ybWFsaXNlIiwicG9wIiwic2QiLCJkIiwibmkiLCJyZCIsInBvd3MxMCIsIm91dCIsIlJPVU5EX1VQIiwiUk9VTkRfRE9XTiIsIlJPVU5EX0NFSUwiLCJST1VORF9GTE9PUiIsIlJPVU5EX0hBTEZfVVAiLCJST1VORF9IQUxGX0RPV04iLCJST1VORF9IQUxGX0VWRU4iLCJST1VORF9IQUxGX0NFSUwiLCJST1VORF9IQUxGX0ZMT09SIiwiRVVDTElEIiwic2V0Iiwib2JqIiwicCIsImhhc093blByb3BlcnR5IiwiY3J5cHRvIiwiZ2V0UmFuZG9tVmFsdWVzIiwicmFuZG9tQnl0ZXMiLCJFWFBPTkVOVElBTF9BVCIsIlJBTkdFIiwiaXNCaWdOdW1iZXIiLCJtYXhpbXVtIiwiYXJndW1lbnRzIiwibHQiLCJtaW5pbXVtIiwiZ3QiLCJyYW5kb20iLCJkcCIsInJhbmQiLCJVaW50MzJBcnJheSIsImNvcHkiLCJzcGxpY2UiLCJzdW0iLCJwbHVzIiwiZGVjaW1hbCIsInRvQmFzZU91dCIsImJhc2VJbiIsImJhc2VPdXQiLCJhcnJMIiwiYXJyIiwicmV2ZXJzZSIsInNpZ24iLCJjYWxsZXJJc1RvU3RyaW5nIiwicG93IiwibXVsdGlwbHkiLCJiYXNlIiwidGVtcCIsInhsbyIsInhoaSIsImNhcnJ5Iiwia2xvIiwia2hpIiwiYUwiLCJiTCIsImNtcCIsInN1YnRyYWN0IiwibW9yZSIsInByb2QiLCJwcm9kTCIsInEiLCJxYyIsInJlbSIsInJlbUwiLCJyZW0wIiwieGkiLCJ4TCIsInljMCIsInlMIiwieXoiLCJOYU4iLCJpc05hTiIsInAxIiwicDIiLCJhYnNvbHV0ZVZhbHVlIiwiYWJzIiwiY29tcGFyZWRUbyIsImRlY2ltYWxQbGFjZXMiLCJkaXZpZGVkQnkiLCJkaXZpZGVkVG9JbnRlZ2VyQnkiLCJpZGl2IiwiZXhwb25lbnRpYXRlZEJ5IiwiaGFsZiIsImlzTW9kRXhwIiwibklzQmlnIiwibklzTmVnIiwibklzT2RkIiwiaXNJbnRlZ2VyIiwibW9kIiwidGltZXMiLCJpbnRlZ2VyVmFsdWUiLCJpc0VxdWFsVG8iLCJlcSIsImlzRmluaXRlIiwiaXNHcmVhdGVyVGhhbiIsImlzR3JlYXRlclRoYW5PckVxdWFsVG8iLCJndGUiLCJpc0xlc3NUaGFuIiwiaXNMZXNzVGhhbk9yRXF1YWxUbyIsImx0ZSIsImlzTmVnYXRpdmUiLCJpc1Bvc2l0aXZlIiwiaXNaZXJvIiwibWludXMiLCJ0IiwieExUeSIsInhlIiwieWUiLCJtb2R1bG8iLCJtdWx0aXBsaWVkQnkiLCJ4Y0wiLCJ5Y0wiLCJ5bG8iLCJ5aGkiLCJ6YyIsInNxcnRCYXNlIiwibmVnYXRlZCIsInByZWNpc2lvbiIsInNoaWZ0ZWRCeSIsInNxdWFyZVJvb3QiLCJzcXJ0IiwicmVwIiwidG9GaXhlZCIsInRvRm9ybWF0Iiwic3BsaXQiLCJnMSIsImcyIiwiaW50UGFydCIsImZyYWN0aW9uUGFydCIsImlzTmVnIiwiaW50RGlnaXRzIiwic3Vic3RyIiwiUmVnRXhwIiwidG9GcmFjdGlvbiIsIm1kIiwiZDAiLCJkMSIsImQyIiwiZXhwIiwibjAiLCJuMSIsInRvTnVtYmVyIiwidG9QcmVjaXNpb24iLCJ0b0pTT04iLCJ1dGlsIiwiU3RyZWFtIiwiRGVsYXllZFN0cmVhbSIsIkNvbWJpbmVkU3RyZWFtIiwid3JpdGFibGUiLCJyZWFkYWJsZSIsImRhdGFTaXplIiwibWF4RGF0YVNpemUiLCJwYXVzZVN0cmVhbXMiLCJfcmVsZWFzZWQiLCJfc3RyZWFtcyIsIl9jdXJyZW50U3RyZWFtIiwiX2luc2lkZUxvb3AiLCJfcGVuZGluZ05leHQiLCJpbmhlcml0cyIsImNyZWF0ZSIsImNvbWJpbmVkU3RyZWFtIiwib3B0aW9uIiwiaXNTdHJlYW1MaWtlIiwic3RyZWFtIiwiQnVmZmVyIiwiaXNCdWZmZXIiLCJhcHBlbmQiLCJuZXdTdHJlYW0iLCJJbmZpbml0eSIsInBhdXNlU3RyZWFtIiwib24iLCJfY2hlY2tEYXRhU2l6ZSIsIl9oYW5kbGVFcnJvcnMiLCJwYXVzZSIsInBpcGUiLCJkZXN0IiwicmVzdW1lIiwiX2dldE5leHQiLCJfcmVhbEdldE5leHQiLCJzaGlmdCIsIl9waXBlTmV4dCIsImVuZCIsIndyaXRlIiwic2VsZiIsIl9lbWl0RXJyb3IiLCJlbWl0IiwiX3Jlc2V0IiwiZGVzdHJveSIsIl91cGRhdGVEYXRhU2l6ZSIsImgiLCJ3IiwicGx1cmFsIiwibXMiLCJtc0FicyIsImlzUGx1cmFsIiwidmFsIiwidHlwZSIsIm1hdGNoIiwiZXhlYyIsInBhcnNlRmxvYXQiLCJsb25nIiwiZm10U2hvcnQiLCJKU09OIiwic3RyaW5naWZ5IiwiZm9ybWF0QXJncyIsInVzZUNvbG9ycyIsIm5hbWVzcGFjZSIsImh1bWFuaXplIiwiZGlmZiIsImNvbG9yIiwibGFzdEMiLCJzYXZlIiwibmFtZXNwYWNlcyIsInN0b3JhZ2UiLCJzZXRJdGVtIiwicmVtb3ZlSXRlbSIsImxvYWQiLCJnZXRJdGVtIiwiZW52IiwiX19ud2pzIiwibmF2aWdhdG9yIiwidXNlckFnZW50IiwiZG9jdW1lbnQiLCJkb2N1bWVudEVsZW1lbnQiLCJzdHlsZSIsIldlYmtpdEFwcGVhcmFuY2UiLCJjb25zb2xlIiwiZmlyZWJ1ZyIsImV4Y2VwdGlvbiIsInRhYmxlIiwicGFyc2VJbnQiLCIkMSIsImxvY2FsU3RvcmFnZSIsImxvY2Fsc3RvcmFnZSIsIndhcm5lZCIsIndhcm4iLCJjb2xvcnMiLCJsb2ciLCJkZWJ1ZyIsImZvcm1hdHRlcnMiLCJjcmVhdGVEZWJ1ZyIsInByZXZUaW1lIiwibmFtZXNwYWNlc0NhY2hlIiwiZW5hYmxlZENhY2hlIiwiZW5hYmxlT3ZlcnJpZGUiLCJlbmFibGVkIiwiY3VyciIsIk51bWJlciIsIkRhdGUiLCJwcmV2IiwiY29lcmNlIiwidW5zaGlmdCIsImZvcm1hdHRlciIsImFwcGx5Iiwic2VsZWN0Q29sb3IiLCJleHRlbmQiLCJkZWZpbmVQcm9wZXJ0eSIsImNvbmZpZ3VyYWJsZSIsImRlbGltaXRlciIsIm5ld0RlYnVnIiwidG9OYW1lc3BhY2UiLCJyZWdleHAiLCJkZWZhdWx0Iiwic3RhY2siLCJkaXNhYmxlIiwibmFtZXMiLCJtYXAiLCJza2lwcyIsImpvaW4iLCJlbmFibGUiLCJoYXNoIiwiYnJvd3NlciIsInR0eSIsImluc3BlY3RPcHRzIiwic3RkZXJyIiwiY29sb3JDb2RlIiwiaGlkZURhdGUiLCJ0b0lTT1N0cmluZyIsIkJvb2xlYW4iLCJpc2F0dHkiLCJmZCIsImRlcHJlY2F0ZSIsInN1cHBvcnRzQ29sb3IiLCJsZXZlbCIsImZpbHRlciIsInJlZHVjZSIsInByb3AiLCJfIiwibyIsImluc3BlY3QiLCJ0cmltIiwiTyIsInNvdXJjZSIsIl9tYXhEYXRhU2l6ZUV4Y2VlZGVkIiwiX2J1ZmZlcmVkRXZlbnRzIiwiZGVsYXllZFN0cmVhbSIsInJlYWxFbWl0IiwiX2hhbmRsZUVtaXQiLCJzZXRFbmNvZGluZyIsInJlbGVhc2UiLCJfY2hlY2tJZk1heERhdGFTaXplRXhjZWVkZWQiLCJVUkwiLCJodHRwIiwiaHR0cHMiLCJXcml0YWJsZSIsImFzc2VydCIsImV2ZW50cyIsImV2ZW50SGFuZGxlcnMiLCJldmVudCIsImFyZzEiLCJhcmcyIiwiYXJnMyIsIl9yZWRpcmVjdGFibGUiLCJSZWRpcmVjdGlvbkVycm9yIiwiY3JlYXRlRXJyb3JUeXBlIiwiVG9vTWFueVJlZGlyZWN0c0Vycm9yIiwiTWF4Qm9keUxlbmd0aEV4Y2VlZGVkRXJyb3IiLCJXcml0ZUFmdGVyRW5kRXJyb3IiLCJSZWRpcmVjdGFibGVSZXF1ZXN0IiwicmVzcG9uc2VDYWxsYmFjayIsIl9zYW5pdGl6ZU9wdGlvbnMiLCJfb3B0aW9ucyIsIl9lbmRlZCIsIl9lbmRpbmciLCJfcmVkaXJlY3RDb3VudCIsIl9yZWRpcmVjdHMiLCJfcmVxdWVzdEJvZHlMZW5ndGgiLCJfcmVxdWVzdEJvZHlCdWZmZXJzIiwiX29uTmF0aXZlUmVzcG9uc2UiLCJfcHJvY2Vzc1Jlc3BvbnNlIiwiX3BlcmZvcm1SZXF1ZXN0Iiwid3JhcCIsInByb3RvY29scyIsIm1heFJlZGlyZWN0cyIsIm5hdGl2ZVByb3RvY29scyIsInNjaGVtZSIsIm5hdGl2ZVByb3RvY29sIiwid3JhcHBlZFByb3RvY29sIiwiZGVmaW5lUHJvcGVydGllcyIsInJlcXVlc3QiLCJpbnB1dCIsInVybFN0ciIsInVybFRvT3B0aW9ucyIsImFzc2lnbiIsImVxdWFsIiwid3JhcHBlZFJlcXVlc3QiLCJub29wIiwidXJsT2JqZWN0IiwiaG9zdG5hbWUiLCJzdGFydHNXaXRoIiwicGF0aG5hbWUiLCJocmVmIiwicG9ydCIsInJlbW92ZU1hdGNoaW5nSGVhZGVycyIsInJlZ2V4IiwibGFzdFZhbHVlIiwiaGVhZGVyIiwiZGVmYXVsdE1lc3NhZ2UiLCJDdXN0b21FcnJvciIsImNhdXNlIiwiY2FwdHVyZVN0YWNrVHJhY2UiLCJhYm9ydFJlcXVlc3QiLCJyZW1vdmVMaXN0ZW5lciIsIl9jdXJyZW50UmVxdWVzdCIsImVuY29kaW5nIiwiVHlwZUVycm9yIiwiY3VycmVudFJlcXVlc3QiLCJzZXRIZWFkZXIiLCJyZW1vdmVIZWFkZXIiLCJtc2VjcyIsImRlc3Ryb3lPblRpbWVvdXQiLCJzb2NrZXQiLCJhZGRMaXN0ZW5lciIsInN0YXJ0VGltZXIiLCJfdGltZW91dCIsImNsZWFyVGltZW91dCIsImNsZWFyVGltZXIiLCJvbmNlIiwicHJvcGVydHkiLCJzZWFyY2hQb3MiLCJhZ2VudHMiLCJhZ2VudCIsIl9jdXJyZW50VXJsIiwiX2lzUmVkaXJlY3QiLCJidWZmZXJzIiwid3JpdGVOZXh0IiwiYnVmZmVyIiwiZmluaXNoZWQiLCJ0cmFja1JlZGlyZWN0cyIsImxvY2F0aW9uIiwiZm9sbG93UmVkaXJlY3RzIiwicmVzcG9uc2VVcmwiLCJyZWRpcmVjdHMiLCJyZXF1ZXN0SGVhZGVycyIsImJlZm9yZVJlZGlyZWN0IiwiSG9zdCIsInJlcSIsImdldEhlYWRlciIsInJlZGlyZWN0VXJsIiwiY3VycmVudEhvc3RIZWFkZXIiLCJjdXJyZW50VXJsUGFydHMiLCJjdXJyZW50SG9zdCIsImN1cnJlbnRVcmwiLCJyZXNvbHZlIiwicmVkaXJlY3RVcmxQYXJ0cyIsInN1YmRvbWFpbiIsImRvbWFpbiIsImRvdCIsImVuZHNXaXRoIiwiaXNTdWJkb21haW4iLCJyZXNwb25zZURldGFpbHMiLCJyZXF1ZXN0RGV0YWlscyIsInBhcnNlVXJsIiwiZnMiLCJtaW1lIiwiYXN5bmNraXQiLCJwb3B1bGF0ZSIsIkZvcm1EYXRhIiwiX292ZXJoZWFkTGVuZ3RoIiwiX3ZhbHVlTGVuZ3RoIiwiX3ZhbHVlc1RvTWVhc3VyZSIsIkxJTkVfQlJFQUsiLCJERUZBVUxUX0NPTlRFTlRfVFlQRSIsImZpZWxkIiwiZmlsZW5hbWUiLCJfZXJyb3IiLCJfbXVsdGlQYXJ0SGVhZGVyIiwiZm9vdGVyIiwiX211bHRpUGFydEZvb3RlciIsIl90cmFja0xlbmd0aCIsInZhbHVlTGVuZ3RoIiwia25vd25MZW5ndGgiLCJieXRlTGVuZ3RoIiwiX2xlbmd0aFJldHJpZXZlciIsInN0YXJ0Iiwic3RhdCIsImZpbGVTaXplIiwiY29udGVudERpc3Bvc2l0aW9uIiwiX2dldENvbnRlbnREaXNwb3NpdGlvbiIsImNvbnRlbnRUeXBlIiwiX2dldENvbnRlbnRUeXBlIiwiY29udGVudHMiLCJnZXRCb3VuZGFyeSIsImZpbGVwYXRoIiwibm9ybWFsaXplIiwiYmFzZW5hbWUiLCJfaHR0cE1lc3NhZ2UiLCJsb29rdXAiLCJuZXh0IiwiX2xhc3RCb3VuZGFyeSIsImdldEhlYWRlcnMiLCJ1c2VySGVhZGVycyIsImZvcm1IZWFkZXJzIiwic2V0Qm91bmRhcnkiLCJib3VuZGFyeSIsIl9ib3VuZGFyeSIsIl9nZW5lcmF0ZUJvdW5kYXJ5IiwiZ2V0QnVmZmVyIiwiZGF0YUJ1ZmZlciIsImFsbG9jIiwiZnJvbSIsImdldExlbmd0aFN5bmMiLCJoYXNLbm93bkxlbmd0aCIsImdldExlbmd0aCIsImNiIiwic3VibWl0IiwiZGVmYXVsdHMiLCJvblJlc3BvbnNlIiwicmVzcG9uY2UiLCJkc3QiLCJzcmMiLCJmbGFnIiwiYXJndiIsInBvcyIsInRlcm1pbmF0b3JQb3MiLCJqc29uX3N0cmluZ2lmeSIsImpzb25fcGFyc2UiLCJzdXNwZWN0UHJvdG9SeCIsInN1c3BlY3RDb25zdHJ1Y3RvclJ4Iiwic3RyaWN0IiwiYWx3YXlzUGFyc2VBc0JpZyIsInVzZU5hdGl2ZUJpZ0ludCIsInByb3RvQWN0aW9uIiwiY29uc3RydWN0b3JBY3Rpb24iLCJhdCIsImNoIiwiZXNjYXBlZSIsImYiLCJudW1iZXIiLCJzdHJpbmciLCJCaWdJbnQiLCJoZXgiLCJ1ZmZmZiIsInN0YXJ0QXQiLCJmcm9tQ2hhckNvZGUiLCJ3aGl0ZSIsIm9iamVjdCIsImFycmF5Iiwid29yZCIsInJldml2ZXIiLCJ3YWxrIiwiaG9sZGVyIiwiZ2FwIiwiaW5kZW50IiwiZXNjYXBhYmxlIiwibWV0YSIsInF1b3RlIiwibGFzdEluZGV4IiwicGFydGlhbCIsIm1pbmQiLCJyZXBsYWNlciIsInNwYWNlIiwiZXh0ZW5zaW9ucyIsInR5cGVzIiwicHJlZmVyZW5jZSIsImRiIiwiZXh0bmFtZSIsIkVYVFJBQ1RfVFlQRV9SRUdFWFAiLCJURVhUX1RZUEVfUkVHRVhQIiwiY2hhcnNldCIsImNoYXJzZXRzIiwiZXh0ZW5zaW9uIiwiZXh0cyIsInRvIiwiREVGQVVMVF9QT1JUUyIsImZ0cCIsImdvcGhlciIsIndzIiwid3NzIiwic3RyaW5nRW5kc1dpdGgiLCJnZXRFbnYiLCJnZXRQcm94eUZvclVybCIsInBhcnNlZFVybCIsInByb3RvIiwiTk9fUFJPWFkiLCJldmVyeSIsInBhcnNlZFByb3h5IiwicGFyc2VkUHJveHlIb3N0bmFtZSIsInBhcnNlZFByb3h5UG9ydCIsInNob3VsZFByb3h5Iiwib3MiLCJoYXNGbGFnIiwiZm9yY2VDb2xvciIsImdldFN1cHBvcnRMZXZlbCIsImlzVFRZIiwicGxhdGZvcm0iLCJvc1JlbGVhc2UiLCJ2ZXJzaW9ucyIsIm5vZGUiLCJzb21lIiwiQ0lfTkFNRSIsIlRFQU1DSVRZX1ZFUlNJT04iLCJDT0xPUlRFUk0iLCJURVJNX1BST0dSQU1fVkVSU0lPTiIsIlRFUk1fUFJPR1JBTSIsIlRFUk0iLCJoYXNCYXNpYyIsImhhczI1NiIsImhhczE2bSIsInRyYW5zbGF0ZUxldmVsIiwiRk9SQ0VfQ09MT1IiLCJzdGRvdXQiLCJzdHJBcnJheSIsInJlc3VsdEFycmF5IiwiZmlyc3QiLCJjb21wb25lbnQiLCJwYXJ0cyIsImRlZmluaXRpb24iLCJyZXF1aXJlIiwiRm9ybURhdGEkMSIsInByb3h5RnJvbUVudiIsInpsaWIiLCJFdmVudEVtaXR0ZXIiLCJfaW50ZXJvcERlZmF1bHRMZWdhY3kiLCJGb3JtRGF0YV9fZGVmYXVsdCIsInVybF9fZGVmYXVsdCIsImh0dHBfX2RlZmF1bHQiLCJodHRwc19fZGVmYXVsdCIsInV0aWxfX2RlZmF1bHQiLCJmb2xsb3dSZWRpcmVjdHNfX2RlZmF1bHQiLCJ6bGliX19kZWZhdWx0Iiwic3RyZWFtX19kZWZhdWx0IiwiRXZlbnRFbWl0dGVyX19kZWZhdWx0IiwidGhpc0FyZyIsImtpbmRPZiIsImNhY2hlIiwidGhpbmciLCJraW5kT2ZUZXN0IiwidHlwZU9mVGVzdCIsImlzVW5kZWZpbmVkIiwiaXNBcnJheUJ1ZmZlciIsImlzU3RyaW5nIiwiaXNGdW5jdGlvbiIsImlzTnVtYmVyIiwiaXNPYmplY3QiLCJpc1BsYWluT2JqZWN0IiwiU3ltYm9sIiwidG9TdHJpbmdUYWciLCJpc0RhdGUiLCJpc0ZpbGUiLCJpc0Jsb2IiLCJpc0ZpbGVMaXN0IiwiaXNVUkxTZWFyY2hQYXJhbXMiLCJhbGxPd25LZXlzIiwiZ2V0T3duUHJvcGVydHlOYW1lcyIsImZpbmRLZXkiLCJfa2V5IiwiX2dsb2JhbCIsImdsb2JhbFRoaXMiLCJnbG9iYWwiLCJpc0NvbnRleHREZWZpbmVkIiwiY29udGV4dCIsImlzVHlwZWRBcnJheSIsIlR5cGVkQXJyYXkiLCJVaW50OEFycmF5IiwiaXNIVE1MRm9ybSIsImlzUmVnRXhwIiwicmVkdWNlRGVzY3JpcHRvcnMiLCJyZWR1Y2VyIiwiZGVzY3JpcHRvcnMiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzIiwicmVkdWNlZERlc2NyaXB0b3JzIiwiZGVzY3JpcHRvciIsInJldCIsIkFMUEhBIiwiRElHSVQiLCJBTFBIQV9ESUdJVCIsImlzQXN5bmNGbiIsInV0aWxzJDEiLCJpc0Zvcm1EYXRhIiwia2luZCIsImlzQXJyYXlCdWZmZXJWaWV3IiwiQXJyYXlCdWZmZXIiLCJpc1ZpZXciLCJpc0Jvb2xlYW4iLCJpc1N0cmVhbSIsIm1lcmdlIiwiY2FzZWxlc3MiLCJhc3NpZ25WYWx1ZSIsInRhcmdldEtleSIsInN0cmlwQk9NIiwiY29udGVudCIsInN1cGVyQ29uc3RydWN0b3IiLCJwcm9wcyIsInRvRmxhdE9iamVjdCIsInNvdXJjZU9iaiIsImRlc3RPYmoiLCJwcm9wRmlsdGVyIiwibWVyZ2VkIiwic2VhcmNoU3RyaW5nIiwicG9zaXRpb24iLCJ0b0FycmF5IiwiZm9yRWFjaEVudHJ5IiwiZG9uZSIsInBhaXIiLCJtYXRjaEFsbCIsInJlZ0V4cCIsIm1hdGNoZXMiLCJoYXNPd25Qcm9wIiwiZnJlZXplTWV0aG9kcyIsInRvT2JqZWN0U2V0IiwiYXJyYXlPclN0cmluZyIsInRvQ2FtZWxDYXNlIiwidG9GaW5pdGVOdW1iZXIiLCJkZWZhdWx0VmFsdWUiLCJnZW5lcmF0ZVN0cmluZyIsImlzU3BlY0NvbXBsaWFudEZvcm0iLCJ0b0pTT05PYmplY3QiLCJ2aXNpdCIsInRhcmdldCIsInJlZHVjZWRWYWx1ZSIsImlzVGhlbmFibGUiLCJ0aGVuIiwiY2F0Y2giLCJBeGlvc0Vycm9yIiwiZGVzY3JpcHRpb24iLCJmaWxlTmFtZSIsImxpbmVOdW1iZXIiLCJjb2x1bW5OdW1iZXIiLCJzdGF0dXMiLCJwcm90b3R5cGUkMSIsImlzVmlzaXRhYmxlIiwicmVtb3ZlQnJhY2tldHMiLCJyZW5kZXJLZXkiLCJkb3RzIiwidG9rZW4iLCJjdXN0b21Qcm9wcyIsImF4aW9zRXJyb3IiLCJwcmVkaWNhdGVzIiwidG9Gb3JtRGF0YSIsImZvcm1EYXRhIiwibWV0YVRva2VucyIsImluZGV4ZXMiLCJ2aXNpdG9yIiwiZGVmYXVsdFZpc2l0b3IiLCJ1c2VCbG9iIiwiQmxvYiIsImNvbnZlcnRWYWx1ZSIsImlzRmxhdEFycmF5IiwiZWwiLCJleHBvc2VkSGVscGVycyIsImJ1aWxkIiwiZW5jb2RlJDEiLCJjaGFyTWFwIiwiZW5jb2RlVVJJQ29tcG9uZW50IiwiQXhpb3NVUkxTZWFyY2hQYXJhbXMiLCJfcGFpcnMiLCJlbmNvZGUiLCJidWlsZFVSTCIsIl9lbmNvZGUiLCJzZXJpYWxpemVGbiIsInNlcmlhbGl6ZSIsInNlcmlhbGl6ZWRQYXJhbXMiLCJoYXNobWFya0luZGV4IiwiZW5jb2RlciIsIkludGVyY2VwdG9yTWFuYWdlciQxIiwiSW50ZXJjZXB0b3JNYW5hZ2VyIiwiaGFuZGxlcnMiLCJ1c2UiLCJmdWxmaWxsZWQiLCJyZWplY3RlZCIsInN5bmNocm9ub3VzIiwicnVuV2hlbiIsImVqZWN0IiwiY2xlYXIiLCJ0cmFuc2l0aW9uYWxEZWZhdWx0cyIsInNpbGVudEpTT05QYXJzaW5nIiwiZm9yY2VkSlNPTlBhcnNpbmciLCJjbGFyaWZ5VGltZW91dEVycm9yIiwicGxhdGZvcm0kMSIsImlzTm9kZSIsImNsYXNzZXMiLCJVUkxTZWFyY2hQYXJhbXMiLCJoYXNCcm93c2VyRW52IiwiaGFzU3RhbmRhcmRCcm93c2VyRW52IiwicHJvZHVjdCIsImhhc1N0YW5kYXJkQnJvd3NlcldlYldvcmtlckVudiIsIldvcmtlckdsb2JhbFNjb3BlIiwiaW1wb3J0U2NyaXB0cyIsIl9fcHJvdG9fXyIsImZvcm1EYXRhVG9KU09OIiwiYnVpbGRQYXRoIiwiaXNOdW1lcmljS2V5IiwiaXNMYXN0IiwiYXJyYXlUb09iamVjdCIsImVudHJpZXMiLCJwYXJzZVByb3BQYXRoIiwidHJhbnNpdGlvbmFsIiwiYWRhcHRlciIsInRyYW5zZm9ybVJlcXVlc3QiLCJoYXNKU09OQ29udGVudFR5cGUiLCJpc09iamVjdFBheWxvYWQiLCJzZXRDb250ZW50VHlwZSIsImhlbHBlcnMiLCJ0b1VSTEVuY29kZWRGb3JtIiwiZm9ybVNlcmlhbGl6ZXIiLCJfRm9ybURhdGEiLCJyYXdWYWx1ZSIsInBhcnNlciIsInN0cmluZ2lmeVNhZmVseSIsIkpTT05SZXF1ZXN0ZWQiLCJzdHJpY3RKU09OUGFyc2luZyIsIkVSUl9CQURfUkVTUE9OU0UiLCJ4c3JmQ29va2llTmFtZSIsInhzcmZIZWFkZXJOYW1lIiwidmFsaWRhdGVTdGF0dXMiLCJjb21tb24iLCJkZWZhdWx0cyQxIiwiaWdub3JlRHVwbGljYXRlT2YiLCIkaW50ZXJuYWxzIiwibm9ybWFsaXplSGVhZGVyIiwibm9ybWFsaXplVmFsdWUiLCJtYXRjaEhlYWRlclZhbHVlIiwiaXNIZWFkZXJOYW1lRmlsdGVyIiwiQXhpb3NIZWFkZXJzIiwidmFsdWVPclJld3JpdGUiLCJyZXdyaXRlIiwiX3ZhbHVlIiwiX2hlYWRlciIsIl9yZXdyaXRlIiwibEhlYWRlciIsInNldEhlYWRlcnMiLCJyYXdIZWFkZXJzIiwicGFyc2VkIiwibGluZSIsInBhcnNlSGVhZGVycyIsInRva2VucyIsInRva2Vuc1JFIiwicGFyc2VUb2tlbnMiLCJoYXMiLCJtYXRjaGVyIiwiZGVsZXRlIiwiZGVsZXRlZCIsImRlbGV0ZUhlYWRlciIsIm5vcm1hbGl6ZWQiLCJjaGFyIiwiZm9ybWF0SGVhZGVyIiwidGFyZ2V0cyIsImFzU3RyaW5ncyIsInN0YXRpYyIsImNvbXB1dGVkIiwiYWNjZXNzb3JzIiwiZGVmaW5lQWNjZXNzb3IiLCJhY2Nlc3Nvck5hbWUiLCJtZXRob2ROYW1lIiwiYnVpbGRBY2Nlc3NvcnMiLCJhY2Nlc3NvciIsIm1hcHBlZCIsImhlYWRlclZhbHVlIiwiQXhpb3NIZWFkZXJzJDEiLCJ0cmFuc2Zvcm1EYXRhIiwiZm5zIiwiaXNDYW5jZWwiLCJfX0NBTkNFTF9fIiwiQ2FuY2VsZWRFcnJvciIsIkVSUl9DQU5DRUxFRCIsInNldHRsZSIsInJlamVjdCIsIkVSUl9CQURfUkVRVUVTVCIsImJ1aWxkRnVsbFBhdGgiLCJiYXNlVVJMIiwicmVxdWVzdGVkVVJMIiwiaXNBYnNvbHV0ZVVSTCIsInJlbGF0aXZlVVJMIiwiY29tYmluZVVSTHMiLCJWRVJTSU9OIiwicGFyc2VQcm90b2NvbCIsIkRBVEFfVVJMX1BBVFRFUk4iLCJzcGVlZG9tZXRlciIsInNhbXBsZXNDb3VudCIsImJ5dGVzIiwidGltZXN0YW1wcyIsImZpcnN0U2FtcGxlVFMiLCJoZWFkIiwidGFpbCIsImNodW5rTGVuZ3RoIiwibm93Iiwic3RhcnRlZEF0IiwiYnl0ZXNDb3VudCIsInBhc3NlZCIsImtJbnRlcm5hbHMiLCJBeGlvc1RyYW5zZm9ybVN0cmVhbSIsIlRyYW5zZm9ybSIsInN1cGVyIiwicmVhZGFibGVIaWdoV2F0ZXJNYXJrIiwibWF4UmF0ZSIsImNodW5rU2l6ZSIsIm1pbkNodW5rU2l6ZSIsInRpbWVXaW5kb3ciLCJ0aWNrc1JhdGUiLCJpbnRlcm5hbHMiLCJieXRlc1NlZW4iLCJpc0NhcHR1cmVkIiwibm90aWZpZWRCeXRlc0xvYWRlZCIsInRzIiwib25SZWFkQ2FsbGJhY2siLCJfc3BlZWRvbWV0ZXIiLCJieXRlc05vdGlmaWVkIiwidXBkYXRlUHJvZ3Jlc3MiLCJmcmVxIiwidGltZXN0YW1wIiwidGhyZXNob2xkIiwidGltZXIiLCJmb3JjZSIsInRocm90dGxlIiwidG90YWxCeXRlcyIsImJ5dGVzVHJhbnNmZXJyZWQiLCJwcm9ncmVzc0J5dGVzIiwiZGVzdHJveWVkIiwicmF0ZSIsIm9uRmluaXNoIiwiX3JlYWQiLCJfdHJhbnNmb3JtIiwiY2h1bmsiLCJieXRlc1RocmVzaG9sZCIsInRyYW5zZm9ybUNodW5rIiwiX2NodW5rIiwiX2NhbGxiYWNrIiwiYnl0ZXNMZWZ0IiwiY2h1bmtSZW1haW5kZXIiLCJtYXhDaHVua1NpemUiLCJzdWJhcnJheSIsInB1c2hDaHVuayIsInRyYW5zZm9ybU5leHRDaHVuayIsInNldExlbmd0aCIsIkF4aW9zVHJhbnNmb3JtU3RyZWFtJDEiLCJhc3luY0l0ZXJhdG9yIiwicmVhZEJsb2IkMSIsImJsb2IiLCJhcnJheUJ1ZmZlciIsIkJPVU5EQVJZX0FMUEhBQkVUIiwidGV4dEVuY29kZXIiLCJUZXh0RW5jb2RlciIsIkNSTEYiLCJDUkxGX0JZVEVTIiwiRm9ybURhdGFQYXJ0IiwiZXNjYXBlTmFtZSIsImlzU3RyaW5nVmFsdWUiLCJjb250ZW50TGVuZ3RoIiwiZm9ybURhdGFUb1N0cmVhbSQxIiwiZm9ybSIsImhlYWRlcnNIYW5kbGVyIiwidGFnIiwiYm91bmRhcnlCeXRlcyIsImZvb3RlckJ5dGVzIiwicGFydCIsImNvbXB1dGVkSGVhZGVycyIsIlJlYWRhYmxlIiwiWmxpYkhlYWRlclRyYW5zZm9ybVN0cmVhbSIsIl9fdHJhbnNmb3JtIiwiWmxpYkhlYWRlclRyYW5zZm9ybVN0cmVhbSQxIiwiY2FsbGJhY2tpZnkkMSIsInpsaWJPcHRpb25zIiwiZmx1c2giLCJjb25zdGFudHMiLCJaX1NZTkNfRkxVU0giLCJmaW5pc2hGbHVzaCIsImJyb3RsaU9wdGlvbnMiLCJCUk9UTElfT1BFUkFUSU9OX0ZMVVNIIiwiaXNCcm90bGlTdXBwb3J0ZWQiLCJjcmVhdGVCcm90bGlEZWNvbXByZXNzIiwiaHR0cEZvbGxvdyIsImh0dHBzRm9sbG93IiwiaXNIdHRwcyIsInN1cHBvcnRlZFByb3RvY29scyIsImRpc3BhdGNoQmVmb3JlUmVkaXJlY3QiLCJiZWZvcmVSZWRpcmVjdHMiLCJzZXRQcm94eSIsImNvbmZpZ1Byb3h5IiwicHJveHlVcmwiLCJiYXNlNjQiLCJwcm94eUhvc3QiLCJyZWRpcmVjdE9wdGlvbnMiLCJpc0h0dHBBZGFwdGVyU3VwcG9ydGVkIiwiYnVpbGRBZGRyZXNzRW50cnkiLCJhZGRyZXNzIiwiZmFtaWx5IiwicmVzb2x2ZUZhbWlseSIsImh0dHBBZGFwdGVyIiwiYXN5bmNFeGVjdXRvciIsIm9uRG9uZSIsInJlc3BvbnNlRW5jb2RpbmciLCJpc0RvbmUiLCJfbG9va3VwIiwib3B0IiwiYXJnMCIsImFkZHJlc3NlcyIsImFkZHIiLCJhbGwiLCJlbWl0dGVyIiwib25GaW5pc2hlZCIsImNhbmNlbFRva2VuIiwidW5zdWJzY3JpYmUiLCJzaWduYWwiLCJyZW1vdmVFdmVudExpc3RlbmVyIiwicmVtb3ZlQWxsTGlzdGVuZXJzIiwicmVhc29uIiwiaXNSZWplY3RlZCIsInN1YnNjcmliZSIsImFib3J0ZWQiLCJhZGRFdmVudExpc3RlbmVyIiwiZnVsbFBhdGgiLCJjb252ZXJ0ZWREYXRhIiwidXJpIiwiYXNCbG9iIiwiX0Jsb2IiLCJFUlJfSU5WQUxJRF9VUkwiLCJpc0Jhc2U2NCIsImRlY29kZVVSSUNvbXBvbmVudCIsIkVSUl9OT1RfU1VQUE9SVCIsImZyb21EYXRhVVJJIiwib25Eb3dubG9hZFByb2dyZXNzIiwib25VcGxvYWRQcm9ncmVzcyIsIm1heFVwbG9hZFJhdGUiLCJtYXhEb3dubG9hZFJhdGUiLCJ1c2VyQm91bmRhcnkiLCJoYXNDb250ZW50TGVuZ3RoIiwicHJvbWlzaWZ5Iiwic2V0Q29udGVudExlbmd0aCIsImdldENvbnRlbnRMZW5ndGgiLCJvYmplY3RNb2RlIiwicGlwZWxpbmUiLCJwcm9ncmVzcyIsInVwbG9hZCIsInBhcmFtc1NlcmlhbGl6ZXIiLCJjdXN0b21FcnIiLCJleGlzdHMiLCJodHRwQWdlbnQiLCJodHRwc0FnZW50IiwidHJhbnNwb3J0Iiwic29ja2V0UGF0aCIsImlzSHR0cHNSZXF1ZXN0IiwiaW5zZWN1cmVIVFRQUGFyc2VyIiwicmVzIiwic3RyZWFtcyIsInJlc3BvbnNlTGVuZ3RoIiwidHJhbnNmb3JtU3RyZWFtIiwiZG93bmxvYWQiLCJyZXNwb25zZVN0cmVhbSIsImxhc3RSZXF1ZXN0IiwiZGVjb21wcmVzcyIsImNyZWF0ZVVuemlwIiwib2ZmTGlzdGVuZXJzIiwic3RhdHVzTWVzc2FnZSIsInJlc3BvbnNlQnVmZmVyIiwidG90YWxSZXNwb25zZUJ5dGVzIiwic2V0S2VlcEFsaXZlIiwiRVJSX0JBRF9PUFRJT05fVkFMVUUiLCJ0aW1lb3V0RXJyb3JNZXNzYWdlIiwiRVRJTUVET1VUIiwiRUNPTk5BQk9SVEVEIiwiZW5kZWQiLCJlcnJvcmVkIiwiUHJvbWlzZSIsIl9yZWplY3QiLCJvbkRvbmVIYW5kbGVyIiwiY29va2llcyIsImV4cGlyZXMiLCJzZWN1cmUiLCJjb29raWUiLCJ0b0dNVFN0cmluZyIsInJlYWQiLCJyZW1vdmUiLCJpc1VSTFNhbWVPcmlnaW4iLCJtc2llIiwidXJsUGFyc2luZ05vZGUiLCJjcmVhdGVFbGVtZW50Iiwib3JpZ2luVVJMIiwicmVzb2x2ZVVSTCIsInNldEF0dHJpYnV0ZSIsInJlcXVlc3RVUkwiLCJwcm9ncmVzc0V2ZW50UmVkdWNlciIsImxpc3RlbmVyIiwiaXNEb3dubG9hZFN0cmVhbSIsImxvYWRlZCIsInRvdGFsIiwibGVuZ3RoQ29tcHV0YWJsZSIsImVzdGltYXRlZCIsImtub3duQWRhcHRlcnMiLCJ4aHIiLCJYTUxIdHRwUmVxdWVzdCIsInJlcXVlc3REYXRhIiwib25DYW5jZWxlZCIsIndpdGhYU1JGVG9rZW4iLCJ1bmVzY2FwZSIsImJ0b2EiLCJvbmxvYWRlbmQiLCJyZXNwb25zZUhlYWRlcnMiLCJnZXRBbGxSZXNwb25zZUhlYWRlcnMiLCJyZXNwb25zZVRleHQiLCJvcGVuIiwib25yZWFkeXN0YXRlY2hhbmdlIiwicmVhZHlTdGF0ZSIsInJlc3BvbnNlVVJMIiwib25hYm9ydCIsIm9uZXJyb3IiLCJFUlJfTkVUV09SSyIsIm9udGltZW91dCIsInhzcmZWYWx1ZSIsInNldFJlcXVlc3RIZWFkZXIiLCJ3aXRoQ3JlZGVudGlhbHMiLCJjYW5jZWwiLCJzZW5kIiwicmVuZGVyUmVhc29uIiwiaXNSZXNvbHZlZEhhbmRsZSIsImFkYXB0ZXJzIiwibmFtZU9yQWRhcHRlciIsInJlamVjdGVkUmVhc29ucyIsInJlYXNvbnMiLCJ0aHJvd0lmQ2FuY2VsbGF0aW9uUmVxdWVzdGVkIiwidGhyb3dJZlJlcXVlc3RlZCIsImRpc3BhdGNoUmVxdWVzdCIsImhlYWRlcnNUb09iamVjdCIsIm1lcmdlQ29uZmlnIiwiY29uZmlnMSIsImNvbmZpZzIiLCJnZXRNZXJnZWRWYWx1ZSIsIm1lcmdlRGVlcFByb3BlcnRpZXMiLCJ2YWx1ZUZyb21Db25maWcyIiwiZGVmYXVsdFRvQ29uZmlnMiIsIm1lcmdlRGlyZWN0S2V5cyIsIm1lcmdlTWFwIiwidGltZW91dE1lc3NhZ2UiLCJjb25maWdWYWx1ZSIsInZhbGlkYXRvcnMkMSIsImRlcHJlY2F0ZWRXYXJuaW5ncyIsInZhbGlkYXRvciIsImZvcm1hdE1lc3NhZ2UiLCJkZXNjIiwib3B0cyIsIkVSUl9ERVBSRUNBVEVEIiwiYXNzZXJ0T3B0aW9ucyIsInNjaGVtYSIsImFsbG93VW5rbm93biIsIkVSUl9CQURfT1BUSU9OIiwidmFsaWRhdG9ycyIsIkF4aW9zIiwiaW5zdGFuY2VDb25maWciLCJpbnRlcmNlcHRvcnMiLCJjb25maWdPclVybCIsImJvb2xlYW4iLCJmdW5jdGlvbiIsImNvbnRleHRIZWFkZXJzIiwicmVxdWVzdEludGVyY2VwdG9yQ2hhaW4iLCJzeW5jaHJvbm91c1JlcXVlc3RJbnRlcmNlcHRvcnMiLCJpbnRlcmNlcHRvciIsInJlc3BvbnNlSW50ZXJjZXB0b3JDaGFpbiIsInByb21pc2UiLCJjaGFpbiIsIm5ld0NvbmZpZyIsIm9uRnVsZmlsbGVkIiwib25SZWplY3RlZCIsImdldFVyaSIsImdlbmVyYXRlSFRUUE1ldGhvZCIsImlzRm9ybSIsIkF4aW9zJDEiLCJDYW5jZWxUb2tlbiIsImV4ZWN1dG9yIiwicmVzb2x2ZVByb21pc2UiLCJfbGlzdGVuZXJzIiwib25mdWxmaWxsZWQiLCJfcmVzb2x2ZSIsIkNhbmNlbFRva2VuJDEiLCJIdHRwU3RhdHVzQ29kZSIsIkNvbnRpbnVlIiwiU3dpdGNoaW5nUHJvdG9jb2xzIiwiUHJvY2Vzc2luZyIsIkVhcmx5SGludHMiLCJPayIsIkNyZWF0ZWQiLCJBY2NlcHRlZCIsIk5vbkF1dGhvcml0YXRpdmVJbmZvcm1hdGlvbiIsIk5vQ29udGVudCIsIlJlc2V0Q29udGVudCIsIlBhcnRpYWxDb250ZW50IiwiTXVsdGlTdGF0dXMiLCJBbHJlYWR5UmVwb3J0ZWQiLCJJbVVzZWQiLCJNdWx0aXBsZUNob2ljZXMiLCJNb3ZlZFBlcm1hbmVudGx5IiwiRm91bmQiLCJTZWVPdGhlciIsIk5vdE1vZGlmaWVkIiwiVXNlUHJveHkiLCJVbnVzZWQiLCJUZW1wb3JhcnlSZWRpcmVjdCIsIlBlcm1hbmVudFJlZGlyZWN0IiwiQmFkUmVxdWVzdCIsIlVuYXV0aG9yaXplZCIsIlBheW1lbnRSZXF1aXJlZCIsIkZvcmJpZGRlbiIsIk5vdEZvdW5kIiwiTWV0aG9kTm90QWxsb3dlZCIsIk5vdEFjY2VwdGFibGUiLCJQcm94eUF1dGhlbnRpY2F0aW9uUmVxdWlyZWQiLCJSZXF1ZXN0VGltZW91dCIsIkNvbmZsaWN0IiwiR29uZSIsIkxlbmd0aFJlcXVpcmVkIiwiUHJlY29uZGl0aW9uRmFpbGVkIiwiUGF5bG9hZFRvb0xhcmdlIiwiVXJpVG9vTG9uZyIsIlVuc3VwcG9ydGVkTWVkaWFUeXBlIiwiUmFuZ2VOb3RTYXRpc2ZpYWJsZSIsIkV4cGVjdGF0aW9uRmFpbGVkIiwiSW1BVGVhcG90IiwiTWlzZGlyZWN0ZWRSZXF1ZXN0IiwiVW5wcm9jZXNzYWJsZUVudGl0eSIsIkxvY2tlZCIsIkZhaWxlZERlcGVuZGVuY3kiLCJUb29FYXJseSIsIlVwZ3JhZGVSZXF1aXJlZCIsIlByZWNvbmRpdGlvblJlcXVpcmVkIiwiVG9vTWFueVJlcXVlc3RzIiwiUmVxdWVzdEhlYWRlckZpZWxkc1Rvb0xhcmdlIiwiVW5hdmFpbGFibGVGb3JMZWdhbFJlYXNvbnMiLCJJbnRlcm5hbFNlcnZlckVycm9yIiwiTm90SW1wbGVtZW50ZWQiLCJCYWRHYXRld2F5IiwiU2VydmljZVVuYXZhaWxhYmxlIiwiR2F0ZXdheVRpbWVvdXQiLCJIdHRwVmVyc2lvbk5vdFN1cHBvcnRlZCIsIlZhcmlhbnRBbHNvTmVnb3RpYXRlcyIsIkluc3VmZmljaWVudFN0b3JhZ2UiLCJMb29wRGV0ZWN0ZWQiLCJOb3RFeHRlbmRlZCIsIk5ldHdvcmtBdXRoZW50aWNhdGlvblJlcXVpcmVkIiwiSHR0cFN0YXR1c0NvZGUkMSIsImF4aW9zIiwiY3JlYXRlSW5zdGFuY2UiLCJkZWZhdWx0Q29uZmlnIiwiaW5zdGFuY2UiLCJDYW5jZWwiLCJwcm9taXNlcyIsInNwcmVhZCIsImlzQXhpb3NFcnJvciIsInBheWxvYWQiLCJmb3JtVG9KU09OIiwiZ2V0QWRhcHRlciIsIl9fd2VicGFja19tb2R1bGVfY2FjaGVfXyIsIl9fd2VicGFja19leHBvcnRzX18iLCJfX3dlYnBhY2tfcmVxdWlyZV9fIiwibW9kdWxlSWQiLCJjYWNoZWRNb2R1bGUiLCJfX3dlYnBhY2tfbW9kdWxlc19fIl0sInNvdXJjZVJvb3QiOiIifQ== \ No newline at end of file +!function(e,a){"object"==typeof exports&&"object"==typeof module?module.exports=a():"function"==typeof define&&define.amd?define([],a):"object"==typeof exports?exports.mailjet=a():e.mailjet=a()}(this,(()=>{return e={9118:(e,a,n)=>{e.exports={parallel:n(9162),serial:n(1357),serialOrdered:n(9087)}},7651:e=>{function a(e){"function"==typeof this.jobs[e]&&this.jobs[e]()}e.exports=function(e){Object.keys(e.jobs).forEach(a.bind(e)),e.jobs={}}},5912:(e,a,n)=>{var i=n(9265);e.exports=function(e){var a=!1;return i((function(){a=!0})),function(n,o){a?e(n,o):i((function(){e(n,o)}))}}},9265:e=>{e.exports=function(e){var a="function"==typeof setImmediate?setImmediate:"object"==typeof process&&"function"==typeof process.nextTick?process.nextTick:null;a?a(e):setTimeout(e,0)}},7594:(e,a,n)=>{var i=n(5912),o=n(7651);e.exports=function(e,a,n,t){var s=n.keyedList?n.keyedList[n.index]:n.index;n.jobs[s]=function(e,a,n,o){return 2==e.length?e(n,i(o)):e(n,a,i(o))}(a,s,e[s],(function(e,a){s in n.jobs&&(delete n.jobs[s],e?o(n):n.results[s]=a,t(e,n.results))}))}},4528:e=>{e.exports=function(e,a){var n=!Array.isArray(e),i={index:0,keyedList:n||a?Object.keys(e):null,jobs:{},results:n?{}:[],size:n?Object.keys(e).length:e.length};return a&&i.keyedList.sort(n?a:function(n,i){return a(e[n],e[i])}),i}},5353:(e,a,n)=>{var i=n(7651),o=n(5912);e.exports=function(e){Object.keys(this.jobs).length&&(this.index=this.size,i(this),o(e)(null,this.results))}},9162:(e,a,n)=>{var i=n(7594),o=n(4528),t=n(5353);e.exports=function(e,a,n){for(var s=o(e);s.index<(s.keyedList||e).length;)i(e,a,s,(function(e,a){e?n(e,a):0!==Object.keys(s.jobs).length||n(null,s.results)})),s.index++;return t.bind(s,n)}},1357:(e,a,n)=>{var i=n(9087);e.exports=function(e,a,n){return i(e,a,null,n)}},9087:(e,a,n)=>{var i=n(7594),o=n(4528),t=n(5353);function s(e,a){return ea?1:0}e.exports=function(e,a,n,s){var r=o(e,n);return i(e,a,r,(function n(o,t){o?s(o,t):(r.index++,r.index<(r.keyedList||e).length?i(e,a,r,n):s(null,r.results))})),t.bind(r,s)},e.exports.ascending=s,e.exports.descending=function(e,a){return-1*s(e,a)}},1076:function(e,a,n){"use strict";function i(e){return i="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},i(e)}var o=this&&this.__assign||function(){return o=Object.assign||function(e){for(var a,n=1,i=arguments.length;n{"use strict";var n;Object.defineProperty(a,"__esModule",{value:!0}),function(e){e.Get="get",e.Post="post",e.Put="put",e.Delete="delete"}(n||(n={})),a.default=n},4771:function(e,a,n){"use strict";function i(e){return i="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},i(e)}var o=this&&this.__assign||function(){return o=Object.assign||function(e){for(var a,n=1,i=arguments.length;n0&&o[o.length-1])||6!==t[0]&&2!==t[0])){s=0;continue}if(3===t[0]&&(!o||t[1]>o[0]&&t[1]-1?"text/plain":"application/json"},e.prototype.getRequestBody=function(e){return[x.default.Put,x.default.Post,x.default.Delete].includes(this.method)?e:void 0},e.prototype.buildFullUrl=function(){var a,n,i=this.client.getConfig(),o=null!==(a=this.config.host)&&void 0!==a?a:i.host,t=null!==(n=this.config.version)&&void 0!==n?n:i.version;return(0,u.default)(e.protocol,o,t,this.subPath,this.url)},e.prototype.buildSubPath=function(){if(this.actionPath){var e="contactslist"===this.resource&&"csvdata/text:plain"===this.actionPath,a="batchjob"===this.resource&&"csverror/text:csv"===this.actionPath;return e||a?"DATA":this.subPath}var n="send"===this.resource,i=this.resource.indexOf("sms")>-1;return n||i?"":"REST"},e.prototype.makeRequest=function(a,n,i){var t,s={url:a,params:i,data:this.getRequestBody(n),method:this.method,responseType:"json",headers:{"User-Agent":this.getUserAgent(),"Content-Type":this.getContentType(a)},transformResponse:function(a){var n="string"==typeof a,i="json"===this.responseType;return a&&n&&i?e.parseToJSONb(a):a}};e.isBrowser()&&(s.headers["X-User-Agent"]=s.headers["User-Agent"]);var r=this.getCredentials();r.apiToken?s.headers.Authorization="Bearer ".concat(r.apiToken):s.auth={username:r.apiKey,password:r.apiSecret};var c=this.client.getConfig(),p=this.client.getOptions();p.timeout&&(s.timeout=p.timeout),p.proxy&&(s.proxy=p.proxy),p.headers&&Object.keys(p.headers).length>0&&(s.headers=o(o({},s.headers),p.headers));var l=null!==(t=this.config.output)&&void 0!==t?t:c.output;return l&&(s.responseType=l),p.maxBodyLength&&(s.maxBodyLength=p.maxBodyLength),p.maxContentLength&&(s.maxContentLength=p.maxContentLength),(0,m.default)(s)},e.prototype.setBaseURL=function(e){return this.url=e.toLowerCase(),this},e.prototype.id=function(e){if(!["string","number"].includes(i(e)))throw new Error('Argument "value" must be string or number');return this.url=(0,u.default)(this.url,e.toString()),this},e.prototype.action=function(e){if("string"!=typeof e)throw new Error('Argument "name" must be string');switch(this.actionPath=e.toLowerCase(),this.actionPath){case"csvdata":this.actionPath="csvdata/text:plain";break;case"csverror":this.actionPath="csverror/text:csv"}return this.url=(0,u.default)(this.url,this.actionPath),this.subPath=this.buildSubPath(),this},e.prototype.request=function(e,a,n){var i,o,t,s,r;return void 0===e&&(e={}),void 0===a&&(a={}),void 0===n&&(n=!0),c(this,void 0,void 0,(function(){var c,l,u,d,x,v,h,b,g,y;return p(this,(function(p){switch(p.label){case 0:if(c=this.buildFullUrl(),this.setBaseURL(this.resource),!n)return[2,{body:b=this.getRequestBody(e),params:a,url:c}];p.label=1;case 1:return p.trys.push([1,3,,4]),[4,this.makeRequest(c,e,a)];case 2:return[2,{response:l=p.sent(),body:l.data}];case 3:if((u=p.sent())instanceof m.AxiosError)throw(d=new Error).code=u.code,d.config=u.config,u.response?(x=u.response,v=x.status,h=x.statusText,b=x.data,d.response=u.response,d.statusCode=v,d.statusText=h,g=null!==(i=null==b?void 0:b.ErrorMessage)&&void 0!==i?i:u.message,d.originalMessage=g,d.message='Unsuccessful: Status Code: "'.concat(d.statusCode,'" Message: "').concat(g,'"'),b&&("string"==typeof(y=null===(r=null===(s=null===(t=null===(o=b.Messages)||void 0===o?void 0:o[0])||void 0===t?void 0:t.Errors)||void 0===s?void 0:s[0])||void 0===r?void 0:r.ErrorMessage)&&(d.message+=";\n".concat(y)),(0,f.setValueIfNotNil)(d,"ErrorMessage",b.ErrorMessage),(0,f.setValueIfNotNil)(d,"ErrorCode",b.ErrorCode),(0,f.setValueIfNotNil)(d,"ErrorIdentifier",b.ErrorIdentifier),(0,f.setValueIfNotNil)(d,"ErrorRelatedTo",b.ErrorRelatedTo))):(d.response=null,d.statusCode=null,d.statusText=null,d.originalMessage=u.message,d.message='Unsuccessful: Error Code: "'.concat(d.code,'" Message: "').concat(u.message,'"')),d;throw u;case 4:return[2]}}))}))},e.parseToJSONb=function(e){if("string"!=typeof e)throw new Error('Argument "text" must be string');var a;try{a=h.parse(e)}catch(e){a={}}return a},e.isBrowser=function(){return"object"===("undefined"==typeof window?"undefined":i(window))},e.protocol="https://",e}();a.default=b},5917:(e,a)=>{"use strict";Object.defineProperty(a,"__esModule",{value:!0}),a.SentCampaign=a.DraftCampaign=void 0,function(e){!function(e){e.Tool2="tool2",e.HTML2="html2",e.MJML="mjml"}(e.EditMode||(e.EditMode={})),function(e){e[e.AXCanceled=-3]="AXCanceled",e[e.Deleted=-2]="Deleted",e[e.Archived=-1]="Archived",e[e.Draft=0]="Draft",e[e.Programmed=1]="Programmed",e[e.Sent=2]="Sent",e[e.AXTested=3]="AXTested",e[e.AXSelected=4]="AXSelected"}(e.CampaignDraftStatus||(e.CampaignDraftStatus={})),function(e){e.AXCancelled="AXCancelled",e.Deleted="Deleted",e.Archived="Archived",e.Draft="Draft",e.Programmed="Programmed",e.Sent="Sent",e.AXTested="AXTested",e.AXSelected="AXSelected"}(e.CampaignDraftSendingStatus||(e.CampaignDraftSendingStatus={}))}(a.DraftCampaign||(a.DraftCampaign={})),function(e){!function(e){e[e.Transactional=1]="Transactional",e[e.Marketing=2]="Marketing",e[e.Unknown=3]="Unknown"}(e.CampaignType||(e.CampaignType={}))}(a.SentCampaign||(a.SentCampaign={}))},7566:(e,a)=>{"use strict";Object.defineProperty(a,"__esModule",{value:!0}),a.Common=void 0,function(e){!function(e){e.Day="Day",e.Week="Week",e.Month="Month",e.Year="Year"}(e.Period||(e.Period={}))}(a.Common||(a.Common={}))},235:(e,a)=>{"use strict";Object.defineProperty(a,"__esModule",{value:!0}),a.ContactProperties=a.BulkContactManagement=void 0,function(e){!function(e){e.AddForce="addforce",e.AddNoForce="addnoforce",e.Remove="remove",e.UnSub="unsub"}(e.ManageContactsAction||(e.ManageContactsAction={})),function(e){e.AddForce="addforce",e.AddNoForce="addnoforce",e.UnSub="unsub",e.DuplicateOverride="duplicate-override",e.DuplicateNoOverride="duplicate-no-override"}(e.ImportListAction||(e.ImportListAction={})),function(e){e.AddForce="addforce",e.AddNoForce="addnoforce",e.Remove="remove",e.UnSub="unsub",e.ExcludeMarketing="excludemarketing",e.IncludeMarketing="includemarketing"}(e.ImportCSVMethod||(e.ImportCSVMethod={})),function(e){e.Upload="Upload",e.Completed="Completed",e.Abort="Abort"}(e.CSVImportStatus||(e.CSVImportStatus={})),function(e){e.Completed="Completed",e.InProgress="In Progress",e.Error="Error"}(e.JobStatus||(e.JobStatus={}))}(a.BulkContactManagement||(a.BulkContactManagement={})),function(e){!function(e){e.Str="str",e.Int="int",e.Float="float",e.Bool="bool",e.DateTime="datetime"}(e.DataType||(e.DataType={})),function(e){e.Static="static",e.Historic="historic"}(e.NameSpace||(e.NameSpace={}))}(a.ContactProperties||(a.ContactProperties={}))},8354:(e,a)=>{"use strict";Object.defineProperty(a,"__esModule",{value:!0}),a.Message=void 0,function(e){!function(e){e[e.UserUnknown=1]="UserUnknown",e[e.MailboxInactive=2]="MailboxInactive",e[e.QuotaExceeded=3]="QuotaExceeded",e[e.InvalidDomain=4]="InvalidDomain",e[e.NoMailHost=5]="NoMailHost",e[e.RelayOrAccessDenied=6]="RelayOrAccessDenied",e[e.SenderBlocked=7]="SenderBlocked",e[e.ContentBlocked=8]="ContentBlocked",e[e.PolicyIssue=9]="PolicyIssue",e[e.SystemIssue=10]="SystemIssue",e[e.ProtocolIssue=11]="ProtocolIssue",e[e.ConnectionIssue=12]="ConnectionIssue",e[e.GreyListed=13]="GreyListed",e[e.PreBlocked=14]="PreBlocked",e[e.DuplicateInCampaign=15]="DuplicateInCampaign",e[e.SpamPreBlocked=16]="SpamPreBlocked",e[e.BadOrEmptyTemplate=17]="BadOrEmptyTemplate",e[e.ErrorInTemplateLanguage=18]="ErrorInTemplateLanguage",e[e.TypoFix=19]="TypoFix",e[e.BlackListed=20]="BlackListed",e[e.SpamReporter=21]="SpamReporter"}(e.MessageState||(e.MessageState={})),function(e){e[e.Transactional=1]="Transactional",e[e.Marketing=2]="Marketing",e[e.Unknown=3]="Unknown"}(e.FromType||(e.FromType={})),function(e){e[e.Processed=0]="Processed",e[e.Queued=1]="Queued",e[e.Sent=2]="Sent",e[e.Opened=3]="Opened",e[e.Clicked=4]="Clicked",e[e.Bounce=5]="Bounce",e[e.Spam=6]="Spam",e[e.Unsub=7]="Unsub",e[e.Blocked=8]="Blocked",e[e.SoftBounce=9]="SoftBounce",e[e.HardBounce=10]="HardBounce",e[e.Deferred=11]="Deferred"}(e.MessageStatus||(e.MessageStatus={})),function(e){e.Unknown="unknown",e.Queued="queued",e.Sent="sent",e.Opened="opened",e.Clicked="clicked",e.Bounce="bounce",e.Spam="spam",e.Unsub="unsub",e.Blocked="blocked",e.HardBounced="hardbounced",e.SoftBounced="softbounced",e.Deferred="deferred"}(e.CurrentMessageStatus||(e.CurrentMessageStatus={})),function(e){e.Sent="sent",e.Opened="opened",e.Clicked="clicked",e.Bounced="bounced",e.Blocked="blocked",e.Unsub="unsub",e.Spam="spam"}(e.EventType||(e.EventType={}))}(a.Message||(a.Message={}))},3635:(e,a)=>{"use strict";Object.defineProperty(a,"__esModule",{value:!0}),a.Segmentation=void 0,function(e){!function(e){e.Used="used",e.UnUsed="unused",e.Deleted="deleted"}(e.SegmentStatus||(e.SegmentStatus={}))}(a.Segmentation||(a.Segmentation={}))},7410:(e,a)=>{"use strict";Object.defineProperty(a,"__esModule",{value:!0}),a.SendEmailV3_1=void 0,function(e){!function(e){e.AccountDefault="account_default",e.Disabled="disabled",e.Enabled="enabled"}(e.TrackOpens||(e.TrackOpens={})),function(e){e.AccountDefault="account_default",e.Disabled="disabled",e.Enabled="enabled"}(e.TrackClicks||(e.TrackClicks={})),function(e){e.Success="success",e.Error="error"}(e.ResponseStatus||(e.ResponseStatus={}))}(a.SendEmailV3_1||(a.SendEmailV3_1={}))},2256:(e,a)=>{"use strict";Object.defineProperty(a,"__esModule",{value:!0}),a.DNS=a.Sender=void 0,function(e){!function(e){e.Transactional="transactional",e.Bulk="bulk",e.Unknown="unknown"}(e.EmailType||(e.EmailType={})),function(e){e.Inactive="Inactive",e.Active="Active",e.Deleted="Deleted"}(e.SenderStatus||(e.SenderStatus={}))}(a.Sender||(a.Sender={})),function(e){!function(e){e.OK="OK",e.Error="Error",e.NotChecked="Not checked"}(e.DKIMConfigurationCheckStatus||(e.DKIMConfigurationCheckStatus={})),function(e){e.OK="OK",e.Error="Error"}(e.DKIMConfigurationStatus||(e.DKIMConfigurationStatus={})),function(e){e.OK="OK",e.Error="Error",e.NotChecked="Not checked",e.NotFound="Not found"}(e.SPFConfigurationCheckStatus||(e.SPFConfigurationCheckStatus={})),function(e){e.OK="OK",e.Error="Error"}(e.SPFConfigurationStatus||(e.SPFConfigurationStatus={}))}(a.DNS||(a.DNS={}))},5295:(e,a)=>{"use strict";Object.defineProperty(a,"__esModule",{value:!0}),a.APIKeyConfiguration=void 0,function(e){!function(e){e.Normal="Normal",e.SoftLock="Softlock",e.HardLock="Hardlock"}(e.RunLevel||(e.RunLevel={}))}(a.APIKeyConfiguration||(a.APIKeyConfiguration={}))},6083:(e,a)=>{"use strict";Object.defineProperty(a,"__esModule",{value:!0}),a.Statistic=void 0,function(e){!function(e){e.SentCampaign="Campaign",e.ABTesting="AX",e.Draft="NL"}(e.CampaignOverviewIDType||(e.CampaignOverviewIDType={})),function(e){e.Tool="tool",e.HTML="html",e.Tool2="tool2",e.HTML2="html2",e.MJML="mjml"}(e.CampaignOverviewEditMode||(e.CampaignOverviewEditMode={})),function(e){e.Full="full",e.Unknown="unknown"}(e.CampaignOverviewEditType||(e.CampaignOverviewEditType={})),function(e){e.Campaign="Campaign",e.APIKey="APIKey",e.List="List",e.Sender="Sender"}(e.CounterSource||(e.CounterSource={})),function(e){e.Highest="Highest",e.Hour="Hour",e.Day="Day",e.Lifetime="Lifetime"}(e.CounterResolution||(e.CounterResolution={})),function(e){e.Message="Message",e.Event="Event"}(e.CounterTiming||(e.CounterTiming={})),function(e){e.Open="open",e.Click="click"}(e.EmailEvent||(e.EmailEvent={}))}(a.Statistic||(a.Statistic={}))},4098:(e,a)=>{"use strict";Object.defineProperty(a,"__esModule",{value:!0}),a.Template=void 0,function(e){!function(e){e.Full="full",e.Basic="basic",e.NewsLetter="newsletter",e.ECommerce="e-commerce",e.Events="events",e.Travel="travel",e.Sports="sports",e.Welcome="welcome",e.ContactPropertyUpdate="contact-property-update",e.Support="support",e.Invoice="invoice",e.Anniversary="anniversary",e.Account="account",e.Activation="activation"}(e.Categories||(e.Categories={})),function(e){e.ContainsAny="containsany",e.ContainsAll="containsall",e.IsSubSet="issubset"}(e.CategoriesSelectionMethod||(e.CategoriesSelectionMethod={})),function(e){e[e.DragAndDropBuilder=1]="DragAndDropBuilder",e[e.HTMLBuilder=2]="HTMLBuilder",e[e.SavedSectionBuilder=3]="SavedSectionBuilder",e[e.MJMLBuilder=4]="MJMLBuilder"}(e.EditMode||(e.EditMode={})),function(e){e.ApiKey="apikey",e.User="user",e.Global="global"}(e.OwnerType||(e.OwnerType={})),function(e){e.Marketing="marketing",e.Transactional="transactional",e.Automation="automation"}(e.Purposes||(e.Purposes={})),function(e){e.ContainsAny="containsany",e.ContainsAll="containsall",e.IsSubSet="issubset"}(e.PurposesSelectionMethod||(e.PurposesSelectionMethod={}))}(a.Template||(a.Template={}))},1174:(e,a)=>{"use strict";Object.defineProperty(a,"__esModule",{value:!0}),a.Webhook=void 0,function(e){!function(e){e.Open="open",e.Click="click",e.Bounce="bounce",e.Spam="spam",e.Blocked="blocked",e.UnSub="unsub",e.Sent="sent"}(e.EventType||(e.EventType={})),function(e){e[e.Click=1]="Click",e[e.Bounce=2]="Bounce",e[e.Spam=3]="Spam",e[e.Blocked=4]="Blocked",e[e.Unsubscribe=5]="Unsubscribe",e[e.Open=6]="Open",e[e.Sent=7]="Sent"}(e.EventTypeValue||(e.EventTypeValue={})),function(e){e.Dead="dead",e.Alive="alive"}(e.Status||(e.Status={}))}(a.Webhook||(a.Webhook={}))},4310:(e,a,n)=>{"use strict";Object.defineProperty(a,"__esModule",{value:!0}),a.APIKeyConfiguration=a.DNS=a.Sender=a.Webhook=a.Statistic=a.Template=a.Segmentation=a.SentCampaign=a.DraftCampaign=a.ContactProperties=a.BulkContactManagement=a.Message=a.SendEmailV3_1=a.Common=void 0;var i=n(7566);Object.defineProperty(a,"Common",{enumerable:!0,get:function(){return i.Common}});var o=n(7410);Object.defineProperty(a,"SendEmailV3_1",{enumerable:!0,get:function(){return o.SendEmailV3_1}});var t=n(8354);Object.defineProperty(a,"Message",{enumerable:!0,get:function(){return t.Message}});var s=n(235);Object.defineProperty(a,"BulkContactManagement",{enumerable:!0,get:function(){return s.BulkContactManagement}}),Object.defineProperty(a,"ContactProperties",{enumerable:!0,get:function(){return s.ContactProperties}});var r=n(5917);Object.defineProperty(a,"DraftCampaign",{enumerable:!0,get:function(){return r.DraftCampaign}}),Object.defineProperty(a,"SentCampaign",{enumerable:!0,get:function(){return r.SentCampaign}});var c=n(3635);Object.defineProperty(a,"Segmentation",{enumerable:!0,get:function(){return c.Segmentation}});var p=n(4098);Object.defineProperty(a,"Template",{enumerable:!0,get:function(){return p.Template}});var l=n(6083);Object.defineProperty(a,"Statistic",{enumerable:!0,get:function(){return l.Statistic}});var u=n(1174);Object.defineProperty(a,"Webhook",{enumerable:!0,get:function(){return u.Webhook}});var d=n(2256);Object.defineProperty(a,"Sender",{enumerable:!0,get:function(){return d.Sender}}),Object.defineProperty(a,"DNS",{enumerable:!0,get:function(){return d.DNS}});var m=n(5295);Object.defineProperty(a,"APIKeyConfiguration",{enumerable:!0,get:function(){return m.APIKeyConfiguration}})},9006:function(e,a,n){"use strict";var i=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(a,"__esModule",{value:!0}),a.setValueIfNotNil=a.isPureObject=a.isUndefined=a.isNull=a.isNil=void 0;var o=i(n(1808));a.isNil=o.default;var t=i(n(7376));a.isNull=t.default;var s=i(n(5034));a.isUndefined=s.default;var r=i(n(1818));a.isPureObject=r.default;var c=i(n(1190));a.setValueIfNotNil=c.default},1808:function(e,a,n){"use strict";var i=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(a,"__esModule",{value:!0});var o=i(n(7376)),t=i(n(5034));a.default=function(e){return(0,t.default)(e)||(0,o.default)(e)}},7376:(e,a)=>{"use strict";Object.defineProperty(a,"__esModule",{value:!0}),a.default=function(e){return null===e}},1818:(e,a)=>{"use strict";function n(e){return n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},n(e)}Object.defineProperty(a,"__esModule",{value:!0}),a.default=function(e){return"object"===n(e)&&null!==e&&(Object.getPrototypeOf(e)===Object.prototype||null===Object.getPrototypeOf(e))}},5034:(e,a)=>{"use strict";Object.defineProperty(a,"__esModule",{value:!0}),a.default=function(e){return void 0===e}},1190:function(e,a,n){"use strict";function i(e){return i="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},i(e)}var o=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(a,"__esModule",{value:!0});var t=o(n(1808)),s=o(n(7376));a.default=function(e,a,n){if("object"!==i(e)||(0,s.default)(e))throw Error('Argument "targetObject" is not object');if(!a)throw Error('Argument "path" is required');(0,t.default)(n)||(e[a]=n)}},4431:function(e,a,n){var i;!function(o){"use strict";var t,s=/^-?(?:\d+(?:\.\d*)?|\.\d+)(?:e[+-]?\d+)?$/i,r=Math.ceil,c=Math.floor,p="[BigNumber Error] ",l=p+"Number primitive has more than 15 significant digits: ",u=1e14,d=14,m=9007199254740991,f=[1,10,100,1e3,1e4,1e5,1e6,1e7,1e8,1e9,1e10,1e11,1e12,1e13],x=1e7,v=1e9;function h(e){var a=0|e;return e>0||e===a?a:a-1}function b(e){for(var a,n,i=1,o=e.length,t=e[0]+"";ip^n?1:-1;for(r=(c=o.length)<(p=t.length)?c:p,s=0;st[s]^n?1:-1;return c==p?0:c>p^n?1:-1}function y(e,a,n,i){if(en||e!==c(e))throw Error(p+(i||"Argument")+("number"==typeof e?en?" out of range: ":" not an integer: ":" not a primitive number: ")+String(e))}function w(e){var a=e.c.length-1;return h(e.e/d)==a&&e.c[a]%2!=0}function k(e,a){return(e.length>1?e.charAt(0)+"."+e.slice(1):e)+(a<0?"e":"e+")+a}function j(e,a,n){var i,o;if(a<0){for(o=n+".";++a;o+=n);e=o+e}else if(++a>(i=e.length)){for(o=n,a-=i;--a;o+=n);e+=o}else az?h.c=h.e=null:e.e=10;u/=10,p++);return void(p>z?h.c=h.e=null:(h.e=p,h.c=[e]))}v=String(e)}else{if(!s.test(v=String(e)))return o(h,v,f);h.s=45==v.charCodeAt(0)?(v=v.slice(1),-1):1}(p=v.indexOf("."))>-1&&(v=v.replace(".","")),(u=v.search(/e/i))>0?(p<0&&(p=u),p+=+v.slice(u+1),v=v.substring(0,u)):p<0&&(p=v.length)}else{if(y(a,2,I.length,"Base"),10==a)return G(h=new H(e),P+h.e+1,B);if(v=String(e),f="number"==typeof e){if(0*e!=0)return o(h,v,f,a);if(h.s=1/e<0?(v=v.slice(1),-1):1,H.DEBUG&&v.replace(/^0\.0*|\./,"").length>15)throw Error(l+e)}else h.s=45===v.charCodeAt(0)?(v=v.slice(1),-1):1;for(n=I.slice(0,a),p=u=0,x=v.length;up){p=x;continue}}else if(!r&&(v==v.toUpperCase()&&(v=v.toLowerCase())||v==v.toLowerCase()&&(v=v.toUpperCase()))){r=!0,u=-1,p=0;continue}return o(h,String(e),f,a)}f=!1,(p=(v=i(v,a,10,h.s)).indexOf("."))>-1?v=v.replace(".",""):p=v.length}for(u=0;48===v.charCodeAt(u);u++);for(x=v.length;48===v.charCodeAt(--x););if(v=v.slice(u,++x)){if(x-=u,f&&H.DEBUG&&x>15&&(e>m||e!==c(e)))throw Error(l+h.s*e);if((p=p-u-1)>z)h.c=h.e=null;else if(p=L)?k(c,s):j(c,s,"0");else if(t=(e=G(new H(e),a,n)).e,r=(c=b(e.c)).length,1==i||2==i&&(a<=t||t<=N)){for(;rr){if(--a>0)for(c+=".";a--;c+="0");}else if((a+=t-r)>0)for(t+1==r&&(c+=".");a--;c+="0");return e.s<0&&o?"-"+c:c}function V(e,a){for(var n,i=1,o=new H(e[0]);i=10;o/=10,i++);return(n=i+n*d-1)>z?e.c=e.e=null:n=10;p/=10,o++);if((t=a-o)<0)t+=d,s=a,x=(l=v[m=0])/h[o-s-1]%10|0;else if((m=r((t+1)/d))>=v.length){if(!i)break e;for(;v.length<=m;v.push(0));l=x=0,o=1,s=(t%=d)-d+1}else{for(l=p=v[m],o=1;p>=10;p/=10,o++);x=(s=(t%=d)-d+o)<0?0:l/h[o-s-1]%10|0}if(i=i||a<0||null!=v[m+1]||(s<0?l:l%h[o-s-1]),i=n<4?(x||i)&&(0==n||n==(e.s<0?3:2)):x>5||5==x&&(4==n||i||6==n&&(t>0?s>0?l/h[o-s]:0:v[m-1])%10&1||n==(e.s<0?8:7)),a<1||!v[0])return v.length=0,i?(a-=e.e+1,v[0]=h[(d-a%d)%d],e.e=-a||0):v[0]=e.e=0,e;if(0==t?(v.length=m,p=1,m--):(v.length=m+1,p=h[d-t],v[m]=s>0?c(l/h[o-s]%h[s])*p:0),i)for(;;){if(0==m){for(t=1,s=v[0];s>=10;s/=10,t++);for(s=v[0]+=p,p=1;s>=10;s/=10,p++);t!=p&&(e.e++,v[0]==u&&(v[0]=1));break}if(v[m]+=p,v[m]!=u)break;v[m--]=0,p=1}for(t=v.length;0===v[--t];v.pop());}e.e>z?e.c=e.e=null:e.e=L?k(a,n):j(a,n,"0"),e.s<0?"-"+a:a)}return H.clone=e,H.ROUND_UP=0,H.ROUND_DOWN=1,H.ROUND_CEIL=2,H.ROUND_FLOOR=3,H.ROUND_HALF_UP=4,H.ROUND_HALF_DOWN=5,H.ROUND_HALF_EVEN=6,H.ROUND_HALF_CEIL=7,H.ROUND_HALF_FLOOR=8,H.EUCLID=9,H.config=H.set=function(e){var a,n;if(null!=e){if("object"!=typeof e)throw Error(p+"Object expected: "+e);if(e.hasOwnProperty(a="DECIMAL_PLACES")&&(y(n=e[a],0,v,a),P=n),e.hasOwnProperty(a="ROUNDING_MODE")&&(y(n=e[a],0,8,a),B=n),e.hasOwnProperty(a="EXPONENTIAL_AT")&&((n=e[a])&&n.pop?(y(n[0],-v,0,a),y(n[1],0,v,a),N=n[0],L=n[1]):(y(n,-v,v,a),N=-(L=n<0?-n:n))),e.hasOwnProperty(a="RANGE"))if((n=e[a])&&n.pop)y(n[0],-v,-1,a),y(n[1],1,v,a),F=n[0],z=n[1];else{if(y(n,-v,v,a),!n)throw Error(p+a+" cannot be zero: "+n);F=-(z=n<0?-n:n)}if(e.hasOwnProperty(a="CRYPTO")){if((n=e[a])!==!!n)throw Error(p+a+" not true or false: "+n);if(n){if("undefined"==typeof crypto||!crypto||!crypto.getRandomValues&&!crypto.randomBytes)throw D=!n,Error(p+"crypto unavailable");D=n}else D=n}if(e.hasOwnProperty(a="MODULO_MODE")&&(y(n=e[a],0,9,a),U=n),e.hasOwnProperty(a="POW_PRECISION")&&(y(n=e[a],0,v,a),q=n),e.hasOwnProperty(a="FORMAT")){if("object"!=typeof(n=e[a]))throw Error(p+a+" not an object: "+n);M=n}if(e.hasOwnProperty(a="ALPHABET")){if("string"!=typeof(n=e[a])||/^.?$|[+\-.\s]|(.).*\1/.test(n))throw Error(p+a+" invalid: "+n);I=n}}return{DECIMAL_PLACES:P,ROUNDING_MODE:B,EXPONENTIAL_AT:[N,L],RANGE:[F,z],CRYPTO:D,MODULO_MODE:U,POW_PRECISION:q,FORMAT:M,ALPHABET:I}},H.isBigNumber=function(e){if(!e||!0!==e._isBigNumber)return!1;if(!H.DEBUG)return!0;var a,n,i=e.c,o=e.e,t=e.s;e:if("[object Array]"=={}.toString.call(i)){if((1===t||-1===t)&&o>=-v&&o<=v&&o===c(o)){if(0===i[0]){if(0===o&&1===i.length)return!0;break e}if((a=(o+1)%d)<1&&(a+=d),String(i[0]).length==a){for(a=0;a=u||n!==c(n))break e;if(0!==n)return!0}}}else if(null===i&&null===o&&(null===t||1===t||-1===t))return!0;throw Error(p+"Invalid BigNumber: "+e)},H.maximum=H.max=function(){return V(arguments,A.lt)},H.minimum=H.min=function(){return V(arguments,A.gt)},H.random=(t=9007199254740992,_=Math.random()*t&2097151?function(){return c(Math.random()*t)}:function(){return 8388608*(1073741824*Math.random()|0)+(8388608*Math.random()|0)},function(e){var a,n,i,o,t,s=0,l=[],u=new H(R);if(null==e?e=P:y(e,0,v),o=r(e/d),D)if(crypto.getRandomValues){for(a=crypto.getRandomValues(new Uint32Array(o*=2));s>>11))>=9e15?(n=crypto.getRandomValues(new Uint32Array(2)),a[s]=n[0],a[s+1]=n[1]):(l.push(t%1e14),s+=2);s=o/2}else{if(!crypto.randomBytes)throw D=!1,Error(p+"crypto unavailable");for(a=crypto.randomBytes(o*=7);s=9e15?crypto.randomBytes(7).copy(a,s):(l.push(t%1e14),s+=7);s=o/7}if(!D)for(;s=10;t/=10,s++);sn-1&&(null==s[o+1]&&(s[o+1]=0),s[o+1]+=s[o]/n|0,s[o]%=n)}return s.reverse()}return function(i,o,t,s,r){var c,p,l,u,d,m,f,x,v=i.indexOf("."),h=P,g=B;for(v>=0&&(u=q,q=0,i=i.replace(".",""),m=(x=new H(o)).pow(i.length-v),q=u,x.c=a(j(b(m.c),m.e,"0"),10,t,e),x.e=x.c.length),l=u=(f=a(i,o,t,r?(c=I,e):(c=e,I))).length;0==f[--u];f.pop());if(!f[0])return c.charAt(0);if(v<0?--l:(m.c=f,m.e=l,m.s=s,f=(m=n(m,x,h,g,t)).c,d=m.r,l=m.e),v=f[p=l+h+1],u=t/2,d=d||p<0||null!=f[p+1],d=g<4?(null!=v||d)&&(0==g||g==(m.s<0?3:2)):v>u||v==u&&(4==g||d||6==g&&1&f[p-1]||g==(m.s<0?8:7)),p<1||!f[0])i=d?j(c.charAt(1),-h,c.charAt(0)):c.charAt(0);else{if(f.length=p,d)for(--t;++f[--p]>t;)f[p]=0,p||(++l,f=[1].concat(f));for(u=f.length;!f[--u];);for(v=0,i="";v<=u;i+=c.charAt(f[v++]));i=j(i,l,c.charAt(0))}return i}}(),n=function(){function e(e,a,n){var i,o,t,s,r=0,c=e.length,p=a%x,l=a/x|0;for(e=e.slice();c--;)r=((o=p*(t=e[c]%x)+(i=l*t+(s=e[c]/x|0)*p)%x*x+r)/n|0)+(i/x|0)+l*s,e[c]=o%n;return r&&(e=[r].concat(e)),e}function a(e,a,n,i){var o,t;if(n!=i)t=n>i?1:-1;else for(o=t=0;oa[o]?1:-1;break}return t}function n(e,a,n,i){for(var o=0;n--;)e[n]-=o,o=e[n]1;e.splice(0,1));}return function(i,o,t,s,r){var p,l,m,f,x,v,b,g,y,w,k,j,_,S,E,C,O,T=i.s==o.s?1:-1,A=i.c,R=o.c;if(!(A&&A[0]&&R&&R[0]))return new H(i.s&&o.s&&(A?!R||A[0]!=R[0]:R)?A&&0==A[0]||!R?0*T:T/0:NaN);for(y=(g=new H(T)).c=[],T=t+(l=i.e-o.e)+1,r||(r=u,l=h(i.e/d)-h(o.e/d),T=T/d|0),m=0;R[m]==(A[m]||0);m++);if(R[m]>(A[m]||0)&&l--,T<0)y.push(1),f=!0;else{for(S=A.length,C=R.length,m=0,T+=2,(x=c(r/(R[0]+1)))>1&&(R=e(R,x,r),A=e(A,x,r),C=R.length,S=A.length),_=C,k=(w=A.slice(0,C)).length;k=r/2&&E++;do{if(x=0,(p=a(R,w,C,k))<0){if(j=w[0],C!=k&&(j=j*r+(w[1]||0)),(x=c(j/E))>1)for(x>=r&&(x=r-1),b=(v=e(R,x,r)).length,k=w.length;1==a(v,w,b,k);)x--,n(v,C=10;T/=10,m++);G(g,t+(g.e=m+l*d-1)+1,s,f)}else g.e=l,g.r=+f;return g}}(),S=/^(-?)0([xbo])(?=\w[\w.]*$)/i,E=/^([^.]+)\.$/,C=/^\.([^.]+)$/,O=/^-?(Infinity|NaN)$/,T=/^\s*\+(?=[\w.])|^\s+|\s+$/g,o=function(e,a,n,i){var o,t=n?a:a.replace(T,"");if(O.test(t))e.s=isNaN(t)?null:t<0?-1:1;else{if(!n&&(t=t.replace(S,(function(e,a,n){return o="x"==(n=n.toLowerCase())?16:"b"==n?2:8,i&&i!=o?e:a})),i&&(o=i,t=t.replace(E,"$1").replace(C,"0.$1")),a!=t))return new H(t,o);if(H.DEBUG)throw Error(p+"Not a"+(i?" base "+i:"")+" number: "+a);e.s=null}e.c=e.e=null},A.absoluteValue=A.abs=function(){var e=new H(this);return e.s<0&&(e.s=1),e},A.comparedTo=function(e,a){return g(this,new H(e,a))},A.decimalPlaces=A.dp=function(e,a){var n,i,o,t=this;if(null!=e)return y(e,0,v),null==a?a=B:y(a,0,8),G(new H(t),e+t.e+1,a);if(!(n=t.c))return null;if(i=((o=n.length-1)-h(this.e/d))*d,o=n[o])for(;o%10==0;o/=10,i--);return i<0&&(i=0),i},A.dividedBy=A.div=function(e,a){return n(this,new H(e,a),P,B)},A.dividedToIntegerBy=A.idiv=function(e,a){return n(this,new H(e,a),0,1)},A.exponentiatedBy=A.pow=function(e,a){var n,i,o,t,s,l,u,m,f=this;if((e=new H(e)).c&&!e.isInteger())throw Error(p+"Exponent not an integer: "+W(e));if(null!=a&&(a=new H(a)),s=e.e>14,!f.c||!f.c[0]||1==f.c[0]&&!f.e&&1==f.c.length||!e.c||!e.c[0])return m=new H(Math.pow(+W(f),s?2-w(e):+W(e))),a?m.mod(a):m;if(l=e.s<0,a){if(a.c?!a.c[0]:!a.s)return new H(NaN);(i=!l&&f.isInteger()&&a.isInteger())&&(f=f.mod(a))}else{if(e.e>9&&(f.e>0||f.e<-1||(0==f.e?f.c[0]>1||s&&f.c[1]>=24e7:f.c[0]<8e13||s&&f.c[0]<=9999975e7)))return t=f.s<0&&w(e)?-0:0,f.e>-1&&(t=1/t),new H(l?1/t:t);q&&(t=r(q/d+2))}for(s?(n=new H(.5),l&&(e.s=1),u=w(e)):u=(o=Math.abs(+W(e)))%2,m=new H(R);;){if(u){if(!(m=m.times(f)).c)break;t?m.c.length>t&&(m.c.length=t):i&&(m=m.mod(a))}if(o){if(0===(o=c(o/2)))break;u=o%2}else if(G(e=e.times(n),e.e+1,1),e.e>14)u=w(e);else{if(0==(o=+W(e)))break;u=o%2}f=f.times(f),t?f.c&&f.c.length>t&&(f.c.length=t):i&&(f=f.mod(a))}return i?m:(l&&(m=R.div(m)),a?m.mod(a):t?G(m,q,B,void 0):m)},A.integerValue=function(e){var a=new H(this);return null==e?e=B:y(e,0,8),G(a,a.e+1,e)},A.isEqualTo=A.eq=function(e,a){return 0===g(this,new H(e,a))},A.isFinite=function(){return!!this.c},A.isGreaterThan=A.gt=function(e,a){return g(this,new H(e,a))>0},A.isGreaterThanOrEqualTo=A.gte=function(e,a){return 1===(a=g(this,new H(e,a)))||0===a},A.isInteger=function(){return!!this.c&&h(this.e/d)>this.c.length-2},A.isLessThan=A.lt=function(e,a){return g(this,new H(e,a))<0},A.isLessThanOrEqualTo=A.lte=function(e,a){return-1===(a=g(this,new H(e,a)))||0===a},A.isNaN=function(){return!this.s},A.isNegative=function(){return this.s<0},A.isPositive=function(){return this.s>0},A.isZero=function(){return!!this.c&&0==this.c[0]},A.minus=function(e,a){var n,i,o,t,s=this,r=s.s;if(a=(e=new H(e,a)).s,!r||!a)return new H(NaN);if(r!=a)return e.s=-a,s.plus(e);var c=s.e/d,p=e.e/d,l=s.c,m=e.c;if(!c||!p){if(!l||!m)return l?(e.s=-a,e):new H(m?s:NaN);if(!l[0]||!m[0])return m[0]?(e.s=-a,e):new H(l[0]?s:3==B?-0:0)}if(c=h(c),p=h(p),l=l.slice(),r=c-p){for((t=r<0)?(r=-r,o=l):(p=c,o=m),o.reverse(),a=r;a--;o.push(0));o.reverse()}else for(i=(t=(r=l.length)<(a=m.length))?r:a,r=a=0;a0)for(;a--;l[n++]=0);for(a=u-1;i>r;){if(l[--i]=0;){for(n=0,f=j[o]%y,v=j[o]/y|0,t=o+(s=c);t>o;)n=((p=f*(p=k[--s]%y)+(r=v*p+(l=k[s]/y|0)*f)%y*y+b[t]+n)/g|0)+(r/y|0)+v*l,b[t--]=p%g;b[t]=n}return n?++i:b.splice(0,1),$(e,b,i)},A.negated=function(){var e=new H(this);return e.s=-e.s||null,e},A.plus=function(e,a){var n,i=this,o=i.s;if(a=(e=new H(e,a)).s,!o||!a)return new H(NaN);if(o!=a)return e.s=-a,i.minus(e);var t=i.e/d,s=e.e/d,r=i.c,c=e.c;if(!t||!s){if(!r||!c)return new H(o/0);if(!r[0]||!c[0])return c[0]?e:new H(r[0]?i:0*o)}if(t=h(t),s=h(s),r=r.slice(),o=t-s){for(o>0?(s=t,n=c):(o=-o,n=r),n.reverse();o--;n.push(0));n.reverse()}for((o=r.length)-(a=c.length)<0&&(n=c,c=r,r=n,a=o),o=0;a;)o=(r[--a]=r[a]+c[a]+o)/u|0,r[a]=u===r[a]?0:r[a]%u;return o&&(r=[o].concat(r),++s),$(e,r,s)},A.precision=A.sd=function(e,a){var n,i,o,t=this;if(null!=e&&e!==!!e)return y(e,1,v),null==a?a=B:y(a,0,8),G(new H(t),e,a);if(!(n=t.c))return null;if(i=(o=n.length-1)*d+1,o=n[o]){for(;o%10==0;o/=10,i--);for(o=n[0];o>=10;o/=10,i++);}return e&&t.e+1>i&&(i=t.e+1),i},A.shiftedBy=function(e){return y(e,-9007199254740991,m),this.times("1e"+e)},A.squareRoot=A.sqrt=function(){var e,a,i,o,t,s=this,r=s.c,c=s.s,p=s.e,l=P+4,u=new H("0.5");if(1!==c||!r||!r[0])return new H(!c||c<0&&(!r||r[0])?NaN:r?s:1/0);if(0==(c=Math.sqrt(+W(s)))||c==1/0?(((a=b(r)).length+p)%2==0&&(a+="0"),c=Math.sqrt(+a),p=h((p+1)/2)-(p<0||p%2),i=new H(a=c==1/0?"5e"+p:(a=c.toExponential()).slice(0,a.indexOf("e")+1)+p)):i=new H(c+""),i.c[0])for((c=(p=i.e)+l)<3&&(c=0);;)if(t=i,i=u.times(t.plus(n(s,t,l,1))),b(t.c).slice(0,c)===(a=b(i.c)).slice(0,c)){if(i.e0&&x>0){for(t=x%r||r,u=f.substr(0,t);t0&&(u+=l+f.slice(t)),m&&(u="-"+u)}i=d?u+(n.decimalSeparator||"")+((c=+n.fractionGroupSize)?d.replace(new RegExp("\\d{"+c+"}\\B","g"),"$&"+(n.fractionGroupSeparator||"")):d):u}return(n.prefix||"")+i+(n.suffix||"")},A.toFraction=function(e){var a,i,o,t,s,r,c,l,u,m,x,v,h=this,g=h.c;if(null!=e&&(!(c=new H(e)).isInteger()&&(c.c||1!==c.s)||c.lt(R)))throw Error(p+"Argument "+(c.isInteger()?"out of range: ":"not an integer: ")+W(c));if(!g)return new H(h);for(a=new H(R),u=i=new H(R),o=l=new H(R),v=b(g),s=a.e=v.length-h.e-1,a.c[0]=f[(r=s%d)<0?d+r:r],e=!e||c.comparedTo(a)>0?s>0?a:u:c,r=z,z=1/0,c=new H(v),l.c[0]=0;m=n(c,a,0,1),1!=(t=i.plus(m.times(o))).comparedTo(e);)i=o,o=t,u=l.plus(m.times(t=u)),l=t,a=c.minus(m.times(t=a)),c=t;return t=n(e.minus(i),o,0,1),l=l.plus(t.times(u)),i=i.plus(t.times(o)),l.s=u.s=h.s,x=n(u,o,s*=2,B).minus(h).abs().comparedTo(n(l,i,s,B).minus(h).abs())<1?[u,o]:[l,i],z=r,x},A.toNumber=function(){return+W(this)},A.toPrecision=function(e,a){return null!=e&&y(e,1,v),K(this,e,a,2)},A.toString=function(e){var a,n=this,o=n.s,t=n.e;return null===t?o?(a="Infinity",o<0&&(a="-"+a)):a="NaN":(null==e?a=t<=N||t>=L?k(b(n.c),t):j(b(n.c),t,"0"):10===e?a=j(b((n=G(new H(n),P+t+1,B)).c),n.e,"0"):(y(e,2,I.length,"Base"),a=i(j(b(n.c),t,"0"),10,e,o,!0)),o<0&&n.c[0]&&(a="-"+a)),a},A.valueOf=A.toJSON=function(){return W(this)},A._isBigNumber=!0,null!=a&&H.set(a),H}(),t.default=t.BigNumber=t,void 0===(i=function(){return t}.call(a,n,a,e))||(e.exports=i)}()},9779:(e,a,n)=>{var i=n(3837),o=n(2781).Stream,t=n(3463);function s(){this.writable=!1,this.readable=!0,this.dataSize=0,this.maxDataSize=2097152,this.pauseStreams=!0,this._released=!1,this._streams=[],this._currentStream=null,this._insideLoop=!1,this._pendingNext=!1}e.exports=s,i.inherits(s,o),s.create=function(e){var a=new this;for(var n in e=e||{})a[n]=e[n];return a},s.isStreamLike=function(e){return"function"!=typeof e&&"string"!=typeof e&&"boolean"!=typeof e&&"number"!=typeof e&&!Buffer.isBuffer(e)},s.prototype.append=function(e){if(s.isStreamLike(e)){if(!(e instanceof t)){var a=t.create(e,{maxDataSize:1/0,pauseStream:this.pauseStreams});e.on("data",this._checkDataSize.bind(this)),e=a}this._handleErrors(e),this.pauseStreams&&e.pause()}return this._streams.push(e),this},s.prototype.pipe=function(e,a){return o.prototype.pipe.call(this,e,a),this.resume(),e},s.prototype._getNext=function(){if(this._currentStream=null,this._insideLoop)this._pendingNext=!0;else{this._insideLoop=!0;try{do{this._pendingNext=!1,this._realGetNext()}while(this._pendingNext)}finally{this._insideLoop=!1}}},s.prototype._realGetNext=function(){var e=this._streams.shift();void 0!==e?"function"==typeof e?e(function(e){s.isStreamLike(e)&&(e.on("data",this._checkDataSize.bind(this)),this._handleErrors(e)),this._pipeNext(e)}.bind(this)):this._pipeNext(e):this.end()},s.prototype._pipeNext=function(e){if(this._currentStream=e,s.isStreamLike(e))return e.on("end",this._getNext.bind(this)),void e.pipe(this,{end:!1});var a=e;this.write(a),this._getNext()},s.prototype._handleErrors=function(e){var a=this;e.on("error",(function(e){a._emitError(e)}))},s.prototype.write=function(e){this.emit("data",e)},s.prototype.pause=function(){this.pauseStreams&&(this.pauseStreams&&this._currentStream&&"function"==typeof this._currentStream.pause&&this._currentStream.pause(),this.emit("pause"))},s.prototype.resume=function(){this._released||(this._released=!0,this.writable=!0,this._getNext()),this.pauseStreams&&this._currentStream&&"function"==typeof this._currentStream.resume&&this._currentStream.resume(),this.emit("resume")},s.prototype.end=function(){this._reset(),this.emit("end")},s.prototype.destroy=function(){this._reset(),this.emit("close")},s.prototype._reset=function(){this.writable=!1,this._streams=[],this._currentStream=null},s.prototype._checkDataSize=function(){if(this._updateDataSize(),!(this.dataSize<=this.maxDataSize)){var e="DelayedStream#maxDataSize of "+this.maxDataSize+" bytes exceeded.";this._emitError(new Error(e))}},s.prototype._updateDataSize=function(){this.dataSize=0;var e=this;this._streams.forEach((function(a){a.dataSize&&(e.dataSize+=a.dataSize)})),this._currentStream&&this._currentStream.dataSize&&(this.dataSize+=this._currentStream.dataSize)},s.prototype._emitError=function(e){this._reset(),this.emit("error",e)}},9435:e=>{var a=1e3,n=60*a,i=60*n,o=24*i,t=7*o,s=365.25*o;function r(e,a,n,i){var o=a>=1.5*n;return Math.round(e/n)+" "+i+(o?"s":"")}e.exports=function(e,c){c=c||{};var p,l,u=typeof e;if("string"===u&&e.length>0)return function(e){if(!((e=String(e)).length>100)){var r=/^(-?(?:\d+)?\.?\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec(e);if(r){var c=parseFloat(r[1]);switch((r[2]||"ms").toLowerCase()){case"years":case"year":case"yrs":case"yr":case"y":return c*s;case"weeks":case"week":case"w":return c*t;case"days":case"day":case"d":return c*o;case"hours":case"hour":case"hrs":case"hr":case"h":return c*i;case"minutes":case"minute":case"mins":case"min":case"m":return c*n;case"seconds":case"second":case"secs":case"sec":case"s":return c*a;case"milliseconds":case"millisecond":case"msecs":case"msec":case"ms":return c;default:return}}}}(e);if("number"===u&&isFinite(e))return c.long?(p=e,(l=Math.abs(p))>=o?r(p,l,o,"day"):l>=i?r(p,l,i,"hour"):l>=n?r(p,l,n,"minute"):l>=a?r(p,l,a,"second"):p+" ms"):function(e){var t=Math.abs(e);return t>=o?Math.round(e/o)+"d":t>=i?Math.round(e/i)+"h":t>=n?Math.round(e/n)+"m":t>=a?Math.round(e/a)+"s":e+"ms"}(e);throw new Error("val is not a non-empty string or a valid number. val="+JSON.stringify(e))}},1227:(e,a,n)=>{a.formatArgs=function(a){if(a[0]=(this.useColors?"%c":"")+this.namespace+(this.useColors?" %c":" ")+a[0]+(this.useColors?"%c ":" ")+"+"+e.exports.humanize(this.diff),!this.useColors)return;const n="color: "+this.color;a.splice(1,0,n,"color: inherit");let i=0,o=0;a[0].replace(/%[a-zA-Z%]/g,(e=>{"%%"!==e&&(i++,"%c"===e&&(o=i))})),a.splice(o,0,n)},a.save=function(e){try{e?a.storage.setItem("debug",e):a.storage.removeItem("debug")}catch(e){}},a.load=function(){let e;try{e=a.storage.getItem("debug")}catch(e){}return!e&&"undefined"!=typeof process&&"env"in process&&(e=process.env.DEBUG),e},a.useColors=function(){return!("undefined"==typeof window||!window.process||"renderer"!==window.process.type&&!window.process.__nwjs)||("undefined"==typeof navigator||!navigator.userAgent||!navigator.userAgent.toLowerCase().match(/(edge|trident)\/(\d+)/))&&("undefined"!=typeof document&&document.documentElement&&document.documentElement.style&&document.documentElement.style.WebkitAppearance||"undefined"!=typeof window&&window.console&&(window.console.firebug||window.console.exception&&window.console.table)||"undefined"!=typeof navigator&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/firefox\/(\d+)/)&&parseInt(RegExp.$1,10)>=31||"undefined"!=typeof navigator&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/applewebkit\/(\d+)/))},a.storage=function(){try{return localStorage}catch(e){}}(),a.destroy=(()=>{let e=!1;return()=>{e||(e=!0,console.warn("Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`."))}})(),a.colors=["#0000CC","#0000FF","#0033CC","#0033FF","#0066CC","#0066FF","#0099CC","#0099FF","#00CC00","#00CC33","#00CC66","#00CC99","#00CCCC","#00CCFF","#3300CC","#3300FF","#3333CC","#3333FF","#3366CC","#3366FF","#3399CC","#3399FF","#33CC00","#33CC33","#33CC66","#33CC99","#33CCCC","#33CCFF","#6600CC","#6600FF","#6633CC","#6633FF","#66CC00","#66CC33","#9900CC","#9900FF","#9933CC","#9933FF","#99CC00","#99CC33","#CC0000","#CC0033","#CC0066","#CC0099","#CC00CC","#CC00FF","#CC3300","#CC3333","#CC3366","#CC3399","#CC33CC","#CC33FF","#CC6600","#CC6633","#CC9900","#CC9933","#CCCC00","#CCCC33","#FF0000","#FF0033","#FF0066","#FF0099","#FF00CC","#FF00FF","#FF3300","#FF3333","#FF3366","#FF3399","#FF33CC","#FF33FF","#FF6600","#FF6633","#FF9900","#FF9933","#FFCC00","#FFCC33"],a.log=console.debug||console.log||(()=>{}),e.exports=n(2447)(a);const{formatters:i}=e.exports;i.j=function(e){try{return JSON.stringify(e)}catch(e){return"[UnexpectedJSONParseError]: "+e.message}}},2447:(e,a,n)=>{e.exports=function(e){function a(e){let n,o,t,s=null;function r(...e){if(!r.enabled)return;const i=r,o=Number(new Date),t=o-(n||o);i.diff=t,i.prev=n,i.curr=o,n=o,e[0]=a.coerce(e[0]),"string"!=typeof e[0]&&e.unshift("%O");let s=0;e[0]=e[0].replace(/%([a-zA-Z%])/g,((n,o)=>{if("%%"===n)return"%";s++;const t=a.formatters[o];if("function"==typeof t){const a=e[s];n=t.call(i,a),e.splice(s,1),s--}return n})),a.formatArgs.call(i,e),(i.log||a.log).apply(i,e)}return r.namespace=e,r.useColors=a.useColors(),r.color=a.selectColor(e),r.extend=i,r.destroy=a.destroy,Object.defineProperty(r,"enabled",{enumerable:!0,configurable:!1,get:()=>null!==s?s:(o!==a.namespaces&&(o=a.namespaces,t=a.enabled(e)),t),set:e=>{s=e}}),"function"==typeof a.init&&a.init(r),r}function i(e,n){const i=a(this.namespace+(void 0===n?":":n)+e);return i.log=this.log,i}function o(e){return e.toString().substring(2,e.toString().length-2).replace(/\.\*\?$/,"*")}return a.debug=a,a.default=a,a.coerce=function(e){return e instanceof Error?e.stack||e.message:e},a.disable=function(){const e=[...a.names.map(o),...a.skips.map(o).map((e=>"-"+e))].join(",");return a.enable(""),e},a.enable=function(e){let n;a.save(e),a.namespaces=e,a.names=[],a.skips=[];const i=("string"==typeof e?e:"").split(/[\s,]+/),o=i.length;for(n=0;n{a[n]=e[n]})),a.names=[],a.skips=[],a.formatters={},a.selectColor=function(e){let n=0;for(let a=0;a{"undefined"==typeof process||"renderer"===process.type||!0===process.browser||process.__nwjs?e.exports=n(1227):e.exports=n(39)},39:(e,a,n)=>{const i=n(6224),o=n(3837);a.init=function(e){e.inspectOpts={};const n=Object.keys(a.inspectOpts);for(let i=0;i{}),"Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`."),a.colors=[6,2,3,4,5,1];try{const e=n(2130);e&&(e.stderr||e).level>=2&&(a.colors=[20,21,26,27,32,33,38,39,40,41,42,43,44,45,56,57,62,63,68,69,74,75,76,77,78,79,80,81,92,93,98,99,112,113,128,129,134,135,148,149,160,161,162,163,164,165,166,167,168,169,170,171,172,173,178,179,184,185,196,197,198,199,200,201,202,203,204,205,206,207,208,209,214,215,220,221])}catch(e){}a.inspectOpts=Object.keys(process.env).filter((e=>/^debug_/i.test(e))).reduce(((e,a)=>{const n=a.substring(6).toLowerCase().replace(/_([a-z])/g,((e,a)=>a.toUpperCase()));let i=process.env[a];return i=!!/^(yes|on|true|enabled)$/i.test(i)||!/^(no|off|false|disabled)$/i.test(i)&&("null"===i?null:Number(i)),e[n]=i,e}),{}),e.exports=n(2447)(a);const{formatters:t}=e.exports;t.o=function(e){return this.inspectOpts.colors=this.useColors,o.inspect(e,this.inspectOpts).split("\n").map((e=>e.trim())).join(" ")},t.O=function(e){return this.inspectOpts.colors=this.useColors,o.inspect(e,this.inspectOpts)}},3463:(e,a,n)=>{var i=n(2781).Stream,o=n(3837);function t(){this.source=null,this.dataSize=0,this.maxDataSize=1048576,this.pauseStream=!0,this._maxDataSizeExceeded=!1,this._released=!1,this._bufferedEvents=[]}e.exports=t,o.inherits(t,i),t.create=function(e,a){var n=new this;for(var i in a=a||{})n[i]=a[i];n.source=e;var o=e.emit;return e.emit=function(){return n._handleEmit(arguments),o.apply(e,arguments)},e.on("error",(function(){})),n.pauseStream&&e.pause(),n},Object.defineProperty(t.prototype,"readable",{configurable:!0,enumerable:!0,get:function(){return this.source.readable}}),t.prototype.setEncoding=function(){return this.source.setEncoding.apply(this.source,arguments)},t.prototype.resume=function(){this._released||this.release(),this.source.resume()},t.prototype.pause=function(){this.source.pause()},t.prototype.release=function(){this._released=!0,this._bufferedEvents.forEach(function(e){this.emit.apply(this,e)}.bind(this)),this._bufferedEvents=[]},t.prototype.pipe=function(){var e=i.prototype.pipe.apply(this,arguments);return this.resume(),e},t.prototype._handleEmit=function(e){this._released?this.emit.apply(this,e):("data"===e[0]&&(this.dataSize+=e[1].length,this._checkIfMaxDataSizeExceeded()),this._bufferedEvents.push(e))},t.prototype._checkIfMaxDataSizeExceeded=function(){if(!(this._maxDataSizeExceeded||this.dataSize<=this.maxDataSize)){this._maxDataSizeExceeded=!0;var e="DelayedStream#maxDataSize of "+this.maxDataSize+" bytes exceeded.";this.emit("error",new Error(e))}}},2261:(e,a,n)=>{var i;e.exports=function(){if(!i){try{i=n(5158)("follow-redirects")}catch(e){}"function"!=typeof i&&(i=function(){})}i.apply(null,arguments)}},938:(e,a,n)=>{var i=n(7310),o=i.URL,t=n(3685),s=n(5687),r=n(2781).Writable,c=n(9491),p=n(2261),l=!1;try{c(new o)}catch(e){l="ERR_INVALID_URL"===e.code}var u=["auth","host","hostname","href","path","pathname","port","protocol","query","search","hash"],d=["abort","aborted","connect","error","socket","timeout"],m=Object.create(null);d.forEach((function(e){m[e]=function(a,n,i){this._redirectable.emit(e,a,n,i)}}));var f=C("ERR_INVALID_URL","Invalid URL",TypeError),x=C("ERR_FR_REDIRECTION_FAILURE","Redirected request failed"),v=C("ERR_FR_TOO_MANY_REDIRECTS","Maximum number of redirects exceeded",x),h=C("ERR_FR_MAX_BODY_LENGTH_EXCEEDED","Request body larger than maxBodyLength limit"),b=C("ERR_STREAM_WRITE_AFTER_END","write after end"),g=r.prototype.destroy||k;function y(e,a){r.call(this),this._sanitizeOptions(e),this._options=e,this._ended=!1,this._ending=!1,this._redirectCount=0,this._redirects=[],this._requestBodyLength=0,this._requestBodyBuffers=[],a&&this.on("response",a);var n=this;this._onNativeResponse=function(e){try{n._processResponse(e)}catch(e){n.emit("error",e instanceof x?e:new x({cause:e}))}},this._performRequest()}function w(e){var a={maxRedirects:21,maxBodyLength:10485760},n={};return Object.keys(e).forEach((function(i){var t=i+":",s=n[t]=e[i],r=a[i]=Object.create(s);Object.defineProperties(r,{request:{value:function(e,i,s){var r;return r=e,o&&r instanceof o?e=S(e):T(e)?e=S(j(e)):(s=i,i=_(e),e={protocol:t}),A(i)&&(s=i,i=null),(i=Object.assign({maxRedirects:a.maxRedirects,maxBodyLength:a.maxBodyLength},e,i)).nativeProtocols=n,T(i.host)||T(i.hostname)||(i.hostname="::1"),c.equal(i.protocol,t,"protocol mismatch"),p("options",i),new y(i,s)},configurable:!0,enumerable:!0,writable:!0},get:{value:function(e,a,n){var i=r.request(e,a,n);return i.end(),i},configurable:!0,enumerable:!0,writable:!0}})})),a}function k(){}function j(e){var a;if(l)a=new o(e);else if(!T((a=_(i.parse(e))).protocol))throw new f({input:e});return a}function _(e){if(/^\[/.test(e.hostname)&&!/^\[[:0-9a-f]+\]$/i.test(e.hostname))throw new f({input:e.href||e});if(/^\[/.test(e.host)&&!/^\[[:0-9a-f]+\](:\d+)?$/i.test(e.host))throw new f({input:e.href||e});return e}function S(e,a){var n=a||{};for(var i of u)n[i]=e[i];return n.hostname.startsWith("[")&&(n.hostname=n.hostname.slice(1,-1)),""!==n.port&&(n.port=Number(n.port)),n.path=n.search?n.pathname+n.search:n.pathname,n}function E(e,a){var n;for(var i in a)e.test(i)&&(n=a[i],delete a[i]);return null==n?void 0:String(n).trim()}function C(e,a,n){function i(n){Error.captureStackTrace(this,this.constructor),Object.assign(this,n||{}),this.code=e,this.message=this.cause?a+": "+this.cause.message:a}return i.prototype=new(n||Error),Object.defineProperties(i.prototype,{constructor:{value:i,enumerable:!1},name:{value:"Error ["+e+"]",enumerable:!1}}),i}function O(e,a){for(var n of d)e.removeListener(n,m[n]);e.on("error",k),e.destroy(a)}function T(e){return"string"==typeof e||e instanceof String}function A(e){return"function"==typeof e}y.prototype=Object.create(r.prototype),y.prototype.abort=function(){O(this._currentRequest),this._currentRequest.abort(),this.emit("abort")},y.prototype.destroy=function(e){return O(this._currentRequest,e),g.call(this,e),this},y.prototype.write=function(e,a,n){if(this._ending)throw new b;if(!(T(e)||"object"==typeof(i=e)&&"length"in i))throw new TypeError("data should be a string, Buffer or Uint8Array");var i;A(a)&&(n=a,a=null),0!==e.length?this._requestBodyLength+e.length<=this._options.maxBodyLength?(this._requestBodyLength+=e.length,this._requestBodyBuffers.push({data:e,encoding:a}),this._currentRequest.write(e,a,n)):(this.emit("error",new h),this.abort()):n&&n()},y.prototype.end=function(e,a,n){if(A(e)?(n=e,e=a=null):A(a)&&(n=a,a=null),e){var i=this,o=this._currentRequest;this.write(e,a,(function(){i._ended=!0,o.end(null,null,n)})),this._ending=!0}else this._ended=this._ending=!0,this._currentRequest.end(null,null,n)},y.prototype.setHeader=function(e,a){this._options.headers[e]=a,this._currentRequest.setHeader(e,a)},y.prototype.removeHeader=function(e){delete this._options.headers[e],this._currentRequest.removeHeader(e)},y.prototype.setTimeout=function(e,a){var n=this;function i(a){a.setTimeout(e),a.removeListener("timeout",a.destroy),a.addListener("timeout",a.destroy)}function o(a){n._timeout&&clearTimeout(n._timeout),n._timeout=setTimeout((function(){n.emit("timeout"),t()}),e),i(a)}function t(){n._timeout&&(clearTimeout(n._timeout),n._timeout=null),n.removeListener("abort",t),n.removeListener("error",t),n.removeListener("response",t),n.removeListener("close",t),a&&n.removeListener("timeout",a),n.socket||n._currentRequest.removeListener("socket",o)}return a&&this.on("timeout",a),this.socket?o(this.socket):this._currentRequest.once("socket",o),this.on("socket",i),this.on("abort",t),this.on("error",t),this.on("response",t),this.on("close",t),this},["flushHeaders","getHeader","setNoDelay","setSocketKeepAlive"].forEach((function(e){y.prototype[e]=function(a,n){return this._currentRequest[e](a,n)}})),["aborted","connection","socket"].forEach((function(e){Object.defineProperty(y.prototype,e,{get:function(){return this._currentRequest[e]}})})),y.prototype._sanitizeOptions=function(e){if(e.headers||(e.headers={}),e.host&&(e.hostname||(e.hostname=e.host),delete e.host),!e.pathname&&e.path){var a=e.path.indexOf("?");a<0?e.pathname=e.path:(e.pathname=e.path.substring(0,a),e.search=e.path.substring(a))}},y.prototype._performRequest=function(){var e=this._options.protocol,a=this._options.nativeProtocols[e];if(!a)throw new TypeError("Unsupported protocol "+e);if(this._options.agents){var n=e.slice(0,-1);this._options.agent=this._options.agents[n]}var o=this._currentRequest=a.request(this._options,this._onNativeResponse);for(var t of(o._redirectable=this,d))o.on(t,m[t]);if(this._currentUrl=/^\//.test(this._options.path)?i.format(this._options):this._options.path,this._isRedirect){var s=0,r=this,c=this._requestBodyBuffers;!function e(a){if(o===r._currentRequest)if(a)r.emit("error",a);else if(s=400)return e.responseUrl=this._currentUrl,e.redirects=this._redirects,this.emit("response",e),void(this._requestBodyBuffers=[]);if(O(this._currentRequest),e.destroy(),++this._redirectCount>this._options.maxRedirects)throw new v;var s=this._options.beforeRedirect;s&&(n=Object.assign({Host:e.req.getHeader("host")},this._options.headers));var r=this._options.method;((301===a||302===a)&&"POST"===this._options.method||303===a&&!/^(?:GET|HEAD)$/.test(this._options.method))&&(this._options.method="GET",this._requestBodyBuffers=[],E(/^content-/i,this._options.headers));var u,d,m=E(/^host$/i,this._options.headers),f=j(this._currentUrl),x=m||f.host,h=/^\w+:/.test(t)?this._currentUrl:i.format(Object.assign(f,{host:x})),b=(u=t,d=h,l?new o(u,d):j(i.resolve(d,u)));if(p("redirecting to",b.href),this._isRedirect=!0,S(b,this._options),(b.protocol!==f.protocol&&"https:"!==b.protocol||b.host!==x&&!function(e,a){c(T(e)&&T(a));var n=e.length-a.length-1;return n>0&&"."===e[n]&&e.endsWith(a)}(b.host,x))&&E(/^(?:(?:proxy-)?authorization|cookie)$/i,this._options.headers),A(s)){var g={headers:e.headers,statusCode:a},y={url:h,method:r,headers:n};s(this._options,g,y),this._sanitizeOptions(this._options)}this._performRequest()},e.exports=w({http:t,https:s}),e.exports.wrap=w},6882:(e,a,n)=>{var i=n(9779),o=n(3837),t=n(1017),s=n(3685),r=n(5687),c=n(7310).parse,p=n(7147),l=n(2781).Stream,u=n(983),d=n(9118),m=n(2275);function f(e){if(!(this instanceof f))return new f(e);for(var a in this._overheadLength=0,this._valueLength=0,this._valuesToMeasure=[],i.call(this),e=e||{})this[a]=e[a]}e.exports=f,o.inherits(f,i),f.LINE_BREAK="\r\n",f.DEFAULT_CONTENT_TYPE="application/octet-stream",f.prototype.append=function(e,a,n){"string"==typeof(n=n||{})&&(n={filename:n});var t=i.prototype.append.bind(this);if("number"==typeof a&&(a=""+a),o.isArray(a))this._error(new Error("Arrays are not supported."));else{var s=this._multiPartHeader(e,a,n),r=this._multiPartFooter();t(s),t(a),t(r),this._trackLength(s,a,n)}},f.prototype._trackLength=function(e,a,n){var i=0;null!=n.knownLength?i+=+n.knownLength:Buffer.isBuffer(a)?i=a.length:"string"==typeof a&&(i=Buffer.byteLength(a)),this._valueLength+=i,this._overheadLength+=Buffer.byteLength(e)+f.LINE_BREAK.length,a&&(a.path||a.readable&&a.hasOwnProperty("httpVersion")||a instanceof l)&&(n.knownLength||this._valuesToMeasure.push(a))},f.prototype._lengthRetriever=function(e,a){e.hasOwnProperty("fd")?null!=e.end&&e.end!=1/0&&null!=e.start?a(null,e.end+1-(e.start?e.start:0)):p.stat(e.path,(function(n,i){var o;n?a(n):(o=i.size-(e.start?e.start:0),a(null,o))})):e.hasOwnProperty("httpVersion")?a(null,+e.headers["content-length"]):e.hasOwnProperty("httpModule")?(e.on("response",(function(n){e.pause(),a(null,+n.headers["content-length"])})),e.resume()):a("Unknown stream")},f.prototype._multiPartHeader=function(e,a,n){if("string"==typeof n.header)return n.header;var i,o=this._getContentDisposition(a,n),t=this._getContentType(a,n),s="",r={"Content-Disposition":["form-data",'name="'+e+'"'].concat(o||[]),"Content-Type":[].concat(t||[])};for(var c in"object"==typeof n.header&&m(r,n.header),r)r.hasOwnProperty(c)&&null!=(i=r[c])&&(Array.isArray(i)||(i=[i]),i.length&&(s+=c+": "+i.join("; ")+f.LINE_BREAK));return"--"+this.getBoundary()+f.LINE_BREAK+s+f.LINE_BREAK},f.prototype._getContentDisposition=function(e,a){var n,i;return"string"==typeof a.filepath?n=t.normalize(a.filepath).replace(/\\/g,"/"):a.filename||e.name||e.path?n=t.basename(a.filename||e.name||e.path):e.readable&&e.hasOwnProperty("httpVersion")&&(n=t.basename(e.client._httpMessage.path||"")),n&&(i='filename="'+n+'"'),i},f.prototype._getContentType=function(e,a){var n=a.contentType;return!n&&e.name&&(n=u.lookup(e.name)),!n&&e.path&&(n=u.lookup(e.path)),!n&&e.readable&&e.hasOwnProperty("httpVersion")&&(n=e.headers["content-type"]),n||!a.filepath&&!a.filename||(n=u.lookup(a.filepath||a.filename)),n||"object"!=typeof e||(n=f.DEFAULT_CONTENT_TYPE),n},f.prototype._multiPartFooter=function(){return function(e){var a=f.LINE_BREAK;0===this._streams.length&&(a+=this._lastBoundary()),e(a)}.bind(this)},f.prototype._lastBoundary=function(){return"--"+this.getBoundary()+"--"+f.LINE_BREAK},f.prototype.getHeaders=function(e){var a,n={"content-type":"multipart/form-data; boundary="+this.getBoundary()};for(a in e)e.hasOwnProperty(a)&&(n[a.toLowerCase()]=e[a]);return n},f.prototype.setBoundary=function(e){this._boundary=e},f.prototype.getBoundary=function(){return this._boundary||this._generateBoundary(),this._boundary},f.prototype.getBuffer=function(){for(var e=new Buffer.alloc(0),a=this.getBoundary(),n=0,i=this._streams.length;n{e.exports=function(e,a){return Object.keys(a).forEach((function(n){e[n]=e[n]||a[n]})),e}},6560:e=>{"use strict";e.exports=(e,a)=>{a=a||process.argv;const n=e.startsWith("-")?"":1===e.length?"-":"--",i=a.indexOf(n+e),o=a.indexOf("--");return-1!==i&&(-1===o||i{var i=n(4123).stringify,o=n(6813);e.exports=function(e){return{parse:o(e),stringify:i}},e.exports.parse=o(),e.exports.stringify=i},6813:(e,a,n)=>{var i=null;const o=/(?:_|\\u005[Ff])(?:_|\\u005[Ff])(?:p|\\u0070)(?:r|\\u0072)(?:o|\\u006[Ff])(?:t|\\u0074)(?:o|\\u006[Ff])(?:_|\\u005[Ff])(?:_|\\u005[Ff])/,t=/(?:c|\\u0063)(?:o|\\u006[Ff])(?:n|\\u006[Ee])(?:s|\\u0073)(?:t|\\u0074)(?:r|\\u0072)(?:u|\\u0075)(?:c|\\u0063)(?:t|\\u0074)(?:o|\\u006[Ff])(?:r|\\u0072)/;e.exports=function(e){"use strict";var a={strict:!1,storeAsString:!1,alwaysParseAsBig:!1,useNativeBigInt:!1,protoAction:"error",constructorAction:"error"};if(null!=e){if(!0===e.strict&&(a.strict=!0),!0===e.storeAsString&&(a.storeAsString=!0),a.alwaysParseAsBig=!0===e.alwaysParseAsBig&&e.alwaysParseAsBig,a.useNativeBigInt=!0===e.useNativeBigInt&&e.useNativeBigInt,void 0!==e.constructorAction){if("error"!==e.constructorAction&&"ignore"!==e.constructorAction&&"preserve"!==e.constructorAction)throw new Error(`Incorrect value for constructorAction option, must be "error", "ignore" or undefined but passed ${e.constructorAction}`);a.constructorAction=e.constructorAction}if(void 0!==e.protoAction){if("error"!==e.protoAction&&"ignore"!==e.protoAction&&"preserve"!==e.protoAction)throw new Error(`Incorrect value for protoAction option, must be "error", "ignore" or undefined but passed ${e.protoAction}`);a.protoAction=e.protoAction}}var s,r,c,p,l={'"':'"',"\\":"\\","/":"/",b:"\b",f:"\f",n:"\n",r:"\r",t:"\t"},u=function(e){throw{name:"SyntaxError",message:e,at:s,text:c}},d=function(e){return e&&e!==r&&u("Expected '"+e+"' instead of '"+r+"'"),r=c.charAt(s),s+=1,r},m=function(){var e,o="";for("-"===r&&(o="-",d("-"));r>="0"&&r<="9";)o+=r,d();if("."===r)for(o+=".";d()&&r>="0"&&r<="9";)o+=r;if("e"===r||"E"===r)for(o+=r,d(),"-"!==r&&"+"!==r||(o+=r,d());r>="0"&&r<="9";)o+=r,d();if(e=+o,isFinite(e))return null==i&&(i=n(4431)),o.length>15?a.storeAsString?o:a.useNativeBigInt?BigInt(o):new i(o):a.alwaysParseAsBig?a.useNativeBigInt?BigInt(e):new i(e):e;u("Bad number")},f=function(){var e,a,n,i="";if('"'===r)for(var o=s;d();){if('"'===r)return s-1>o&&(i+=c.substring(o,s-1)),d(),i;if("\\"===r){if(s-1>o&&(i+=c.substring(o,s-1)),d(),"u"===r){for(n=0,a=0;a<4&&(e=parseInt(d(),16),isFinite(e));a+=1)n=16*n+e;i+=String.fromCharCode(n)}else{if("string"!=typeof l[r])break;i+=l[r]}o=s}}u("Bad string")},x=function(){for(;r&&r<=" ";)d()};return p=function(){switch(x(),r){case"{":return function(){var e,n=Object.create(null);if("{"===r){if(d("{"),x(),"}"===r)return d("}"),n;for(;r;){if(e=f(),x(),d(":"),!0===a.strict&&Object.hasOwnProperty.call(n,e)&&u('Duplicate key "'+e+'"'),!0===o.test(e)?"error"===a.protoAction?u("Object contains forbidden prototype property"):"ignore"===a.protoAction?p():n[e]=p():!0===t.test(e)?"error"===a.constructorAction?u("Object contains forbidden constructor property"):"ignore"===a.constructorAction?p():n[e]=p():n[e]=p(),x(),"}"===r)return d("}"),n;d(","),x()}}u("Bad object")}();case"[":return function(){var e=[];if("["===r){if(d("["),x(),"]"===r)return d("]"),e;for(;r;){if(e.push(p()),x(),"]"===r)return d("]"),e;d(","),x()}}u("Bad array")}();case'"':return f();case"-":return m();default:return r>="0"&&r<="9"?m():function(){switch(r){case"t":return d("t"),d("r"),d("u"),d("e"),!0;case"f":return d("f"),d("a"),d("l"),d("s"),d("e"),!1;case"n":return d("n"),d("u"),d("l"),d("l"),null}u("Unexpected '"+r+"'")}()}},function(e,a){var n;return c=e+"",s=0,r=" ",n=p(),x(),r&&u("Syntax error"),"function"==typeof a?function e(n,i){var o,t=n[i];return t&&"object"==typeof t&&Object.keys(t).forEach((function(a){void 0!==(o=e(t,a))?t[a]=o:delete t[a]})),a.call(n,i,t)}({"":n},""):n}}},4123:(e,a,n)=>{var i=n(4431),o=e.exports;!function(){"use strict";var e,a,n,t=/[\\\"\x00-\x1f\x7f-\x9f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,s={"\b":"\\b","\t":"\\t","\n":"\\n","\f":"\\f","\r":"\\r",'"':'\\"',"\\":"\\\\"};function r(e){return t.lastIndex=0,t.test(e)?'"'+e.replace(t,(function(e){var a=s[e];return"string"==typeof a?a:"\\u"+("0000"+e.charCodeAt(0).toString(16)).slice(-4)}))+'"':'"'+e+'"'}function c(o,t){var s,p,l,u,d,m=e,f=t[o],x=null!=f&&(f instanceof i||i.isBigNumber(f));switch(f&&"object"==typeof f&&"function"==typeof f.toJSON&&(f=f.toJSON(o)),"function"==typeof n&&(f=n.call(t,o,f)),typeof f){case"string":return x?f:r(f);case"number":return isFinite(f)?String(f):"null";case"boolean":case"null":case"bigint":return String(f);case"object":if(!f)return"null";if(e+=a,d=[],"[object Array]"===Object.prototype.toString.apply(f)){for(u=f.length,s=0;s{e.exports=n(3765)},983:(e,a,n)=>{"use strict";var i,o,t,s=n(5234),r=n(1017).extname,c=/^\s*([^;\s]*)(?:;|\s|$)/,p=/^text\//i;function l(e){if(!e||"string"!=typeof e)return!1;var a=c.exec(e),n=a&&s[a[1].toLowerCase()];return n&&n.charset?n.charset:!(!a||!p.test(a[1]))&&"UTF-8"}a.charset=l,a.charsets={lookup:l},a.contentType=function(e){if(!e||"string"!=typeof e)return!1;var n=-1===e.indexOf("/")?a.lookup(e):e;if(!n)return!1;if(-1===n.indexOf("charset")){var i=a.charset(n);i&&(n+="; charset="+i.toLowerCase())}return n},a.extension=function(e){if(!e||"string"!=typeof e)return!1;var n=c.exec(e),i=n&&a.extensions[n[1].toLowerCase()];return!(!i||!i.length)&&i[0]},a.extensions=Object.create(null),a.lookup=function(e){if(!e||"string"!=typeof e)return!1;var n=r("x."+e).toLowerCase().substr(1);return n&&a.types[n]||!1},a.types=Object.create(null),i=a.extensions,o=a.types,t=["nginx","apache",void 0,"iana"],Object.keys(s).forEach((function(e){var a=s[e],n=a.extensions;if(n&&n.length){i[e]=n;for(var r=0;rl||p===l&&"application/"===o[c].substr(0,12)))continue}o[c]=e}}}))},1394:(e,a,n)=>{"use strict";var i=n(7310).parse,o={ftp:21,gopher:70,http:80,https:443,ws:80,wss:443},t=String.prototype.endsWith||function(e){return e.length<=this.length&&-1!==this.indexOf(e,this.length-e.length)};function s(e){return process.env[e.toLowerCase()]||process.env[e.toUpperCase()]||""}a.getProxyForUrl=function(e){var a="string"==typeof e?i(e):e||{},n=a.protocol,r=a.host,c=a.port;if("string"!=typeof r||!r||"string"!=typeof n)return"";if(n=n.split(":",1)[0],!function(e,a){var n=(s("npm_config_no_proxy")||s("no_proxy")).toLowerCase();return!n||"*"!==n&&n.split(/[,\s]/).every((function(n){if(!n)return!0;var i=n.match(/^(.+):(\d+)$/),o=i?i[1]:n,s=i?parseInt(i[2]):0;return!(!s||s===a)||(/^[.*]/.test(o)?("*"===o.charAt(0)&&(o=o.slice(1)),!t.call(e,o)):e!==o)}))}(r=r.replace(/:\d*$/,""),c=parseInt(c)||o[n]||0))return"";var p=s("npm_config_"+n+"_proxy")||s(n+"_proxy")||s("npm_config_proxy")||s("all_proxy");return p&&-1===p.indexOf("://")&&(p=n+"://"+p),p}},2130:(e,a,n)=>{"use strict";const i=n(2037),o=n(6560),t=process.env;let s;function r(e){const a=function(e){if(!1===s)return 0;if(o("color=16m")||o("color=full")||o("color=truecolor"))return 3;if(o("color=256"))return 2;if(e&&!e.isTTY&&!0!==s)return 0;const a=s?1:0;if("win32"===process.platform){const e=i.release().split(".");return Number(process.versions.node.split(".")[0])>=8&&Number(e[0])>=10&&Number(e[2])>=10586?Number(e[2])>=14931?3:2:1}if("CI"in t)return["TRAVIS","CIRCLECI","APPVEYOR","GITLAB_CI"].some((e=>e in t))||"codeship"===t.CI_NAME?1:a;if("TEAMCITY_VERSION"in t)return/^(9\.(0*[1-9]\d*)\.|\d{2,}\.)/.test(t.TEAMCITY_VERSION)?1:0;if("truecolor"===t.COLORTERM)return 3;if("TERM_PROGRAM"in t){const e=parseInt((t.TERM_PROGRAM_VERSION||"").split(".")[0],10);switch(t.TERM_PROGRAM){case"iTerm.app":return e>=3?3:2;case"Apple_Terminal":return 2}}return/-256(color)?$/i.test(t.TERM)?2:/^screen|^xterm|^vt100|^vt220|^rxvt|color|ansi|cygwin|linux/i.test(t.TERM)||"COLORTERM"in t?1:(t.TERM,a)}(e);return function(e){return 0!==e&&{level:e,hasBasic:!0,has256:e>=2,has16m:e>=3}}(a)}o("no-color")||o("no-colors")||o("color=false")?s=!1:(o("color")||o("colors")||o("color=true")||o("color=always"))&&(s=!0),"FORCE_COLOR"in t&&(s=0===t.FORCE_COLOR.length||0!==parseInt(t.FORCE_COLOR,10)),e.exports={supportsColor:r,stdout:r(process.stdout),stderr:r(process.stderr)}},4078:function(e,a,n){var i,o,t;t=function(){function e(e){var a=[];if(0===e.length)return"";if("string"!=typeof e[0])throw new TypeError("Url must be a string. Received "+e[0]);if(e[0].match(/^[^/:]+:\/*$/)&&e.length>1){var n=e.shift();e[0]=n+e[0]}e[0].match(/^file:\/\/\//)?e[0]=e[0].replace(/^([^/:]+):\/*/,"$1:///"):e[0]=e[0].replace(/^([^/:]+):\/*/,"$1://");for(var i=0;i0&&(o=o.replace(/^[\/]+/,"")),o=i0?"?":"")+s.join("&")}return function(){return e("object"==typeof arguments[0]?arguments[0]:[].slice.call(arguments))}},e.exports?e.exports=t():void 0===(o="function"==typeof(i=t)?i.call(a,n,a,e):i)||(e.exports=o)},9491:e=>{"use strict";e.exports=require("assert")},2361:e=>{"use strict";e.exports=require("events")},7147:e=>{"use strict";e.exports=require("fs")},3685:e=>{"use strict";e.exports=require("http")},5687:e=>{"use strict";e.exports=require("https")},2037:e=>{"use strict";e.exports=require("os")},1017:e=>{"use strict";e.exports=require("path")},2781:e=>{"use strict";e.exports=require("stream")},6224:e=>{"use strict";e.exports=require("tty")},7310:e=>{"use strict";e.exports=require("url")},3837:e=>{"use strict";e.exports=require("util")},9796:e=>{"use strict";e.exports=require("zlib")},3306:(e,a,n)=>{"use strict";const i=n(6882),o=n(7310),t=n(1394),s=n(3685),r=n(5687),c=n(3837),p=n(938),l=n(9796),u=n(2781),d=n(2361);function m(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}const f=m(i),x=m(o),v=m(s),h=m(r),b=m(c),g=m(p),y=m(l),w=m(u);function k(e,a){return function(){return e.apply(a,arguments)}}const{toString:j}=Object.prototype,{getPrototypeOf:_}=Object,S=(E=Object.create(null),e=>{const a=j.call(e);return E[a]||(E[a]=a.slice(8,-1).toLowerCase())});var E;const C=e=>(e=e.toLowerCase(),a=>S(a)===e),O=e=>a=>typeof a===e,{isArray:T}=Array,A=O("undefined"),R=C("ArrayBuffer"),P=O("string"),B=O("function"),N=O("number"),L=e=>null!==e&&"object"==typeof e,F=e=>{if("object"!==S(e))return!1;const a=_(e);return!(null!==a&&a!==Object.prototype&&null!==Object.getPrototypeOf(a)||Symbol.toStringTag in e||Symbol.iterator in e)},z=C("Date"),D=C("File"),U=C("Blob"),q=C("FileList"),M=C("URLSearchParams"),[I,H,K,V]=["ReadableStream","Request","Response","Headers"].map(C);function $(e,a,{allOwnKeys:n=!1}={}){if(null==e)return;let i,o;if("object"!=typeof e&&(e=[e]),T(e))for(i=0,o=e.length;i0;)if(i=n[o],a===i.toLowerCase())return i;return null}const W="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:"undefined"!=typeof window?window:global,J=e=>!A(e)&&e!==W,X=(Y="undefined"!=typeof Uint8Array&&_(Uint8Array),e=>Y&&e instanceof Y);var Y;const Q=C("HTMLFormElement"),Z=(({hasOwnProperty:e})=>(a,n)=>e.call(a,n))(Object.prototype),ee=C("RegExp"),ae=(e,a)=>{const n=Object.getOwnPropertyDescriptors(e),i={};$(n,((n,o)=>{let t;!1!==(t=a(n,o,e))&&(i[o]=t||n)})),Object.defineProperties(e,i)},ne="abcdefghijklmnopqrstuvwxyz",ie="0123456789",oe={DIGIT:ie,ALPHA:ne,ALPHA_DIGIT:ne+ne.toUpperCase()+ie},te=C("AsyncFunction"),se=(re="function"==typeof setImmediate,ce=B(W.postMessage),re?setImmediate:ce?(pe=`axios@${Math.random()}`,le=[],W.addEventListener("message",(({source:e,data:a})=>{e===W&&a===pe&&le.length&&le.shift()()}),!1),e=>{le.push(e),W.postMessage(pe,"*")}):e=>setTimeout(e));var re,ce,pe,le;const ue="undefined"!=typeof queueMicrotask?queueMicrotask.bind(W):"undefined"!=typeof process&&process.nextTick||se,de={isArray:T,isArrayBuffer:R,isBuffer:function(e){return null!==e&&!A(e)&&null!==e.constructor&&!A(e.constructor)&&B(e.constructor.isBuffer)&&e.constructor.isBuffer(e)},isFormData:e=>{let a;return e&&("function"==typeof FormData&&e instanceof FormData||B(e.append)&&("formdata"===(a=S(e))||"object"===a&&B(e.toString)&&"[object FormData]"===e.toString()))},isArrayBufferView:function(e){let a;return a="undefined"!=typeof ArrayBuffer&&ArrayBuffer.isView?ArrayBuffer.isView(e):e&&e.buffer&&R(e.buffer),a},isString:P,isNumber:N,isBoolean:e=>!0===e||!1===e,isObject:L,isPlainObject:F,isReadableStream:I,isRequest:H,isResponse:K,isHeaders:V,isUndefined:A,isDate:z,isFile:D,isBlob:U,isRegExp:ee,isFunction:B,isStream:e=>L(e)&&B(e.pipe),isURLSearchParams:M,isTypedArray:X,isFileList:q,forEach:$,merge:function e(){const{caseless:a}=J(this)&&this||{},n={},i=(i,o)=>{const t=a&&G(n,o)||o;F(n[t])&&F(i)?n[t]=e(n[t],i):F(i)?n[t]=e({},i):T(i)?n[t]=i.slice():n[t]=i};for(let e=0,a=arguments.length;e($(a,((a,i)=>{n&&B(a)?e[i]=k(a,n):e[i]=a}),{allOwnKeys:i}),e),trim:e=>e.trim?e.trim():e.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,""),stripBOM:e=>(65279===e.charCodeAt(0)&&(e=e.slice(1)),e),inherits:(e,a,n,i)=>{e.prototype=Object.create(a.prototype,i),e.prototype.constructor=e,Object.defineProperty(e,"super",{value:a.prototype}),n&&Object.assign(e.prototype,n)},toFlatObject:(e,a,n,i)=>{let o,t,s;const r={};if(a=a||{},null==e)return a;do{for(o=Object.getOwnPropertyNames(e),t=o.length;t-- >0;)s=o[t],i&&!i(s,e,a)||r[s]||(a[s]=e[s],r[s]=!0);e=!1!==n&&_(e)}while(e&&(!n||n(e,a))&&e!==Object.prototype);return a},kindOf:S,kindOfTest:C,endsWith:(e,a,n)=>{e=String(e),(void 0===n||n>e.length)&&(n=e.length),n-=a.length;const i=e.indexOf(a,n);return-1!==i&&i===n},toArray:e=>{if(!e)return null;if(T(e))return e;let a=e.length;if(!N(a))return null;const n=new Array(a);for(;a-- >0;)n[a]=e[a];return n},forEachEntry:(e,a)=>{const n=(e&&e[Symbol.iterator]).call(e);let i;for(;(i=n.next())&&!i.done;){const n=i.value;a.call(e,n[0],n[1])}},matchAll:(e,a)=>{let n;const i=[];for(;null!==(n=e.exec(a));)i.push(n);return i},isHTMLForm:Q,hasOwnProperty:Z,hasOwnProp:Z,reduceDescriptors:ae,freezeMethods:e=>{ae(e,((a,n)=>{if(B(e)&&-1!==["arguments","caller","callee"].indexOf(n))return!1;const i=e[n];B(i)&&(a.enumerable=!1,"writable"in a?a.writable=!1:a.set||(a.set=()=>{throw Error("Can not rewrite read-only method '"+n+"'")}))}))},toObjectSet:(e,a)=>{const n={},i=e=>{e.forEach((e=>{n[e]=!0}))};return T(e)?i(e):i(String(e).split(a)),n},toCamelCase:e=>e.toLowerCase().replace(/[-_\s]([a-z\d])(\w*)/g,(function(e,a,n){return a.toUpperCase()+n})),noop:()=>{},toFiniteNumber:(e,a)=>null!=e&&Number.isFinite(e=+e)?e:a,findKey:G,global:W,isContextDefined:J,ALPHABET:oe,generateString:(e=16,a=oe.ALPHA_DIGIT)=>{let n="";const{length:i}=a;for(;e--;)n+=a[Math.random()*i|0];return n},isSpecCompliantForm:function(e){return!!(e&&B(e.append)&&"FormData"===e[Symbol.toStringTag]&&e[Symbol.iterator])},toJSONObject:e=>{const a=new Array(10),n=(e,i)=>{if(L(e)){if(a.indexOf(e)>=0)return;if(!("toJSON"in e)){a[i]=e;const o=T(e)?[]:{};return $(e,((e,a)=>{const t=n(e,i+1);!A(t)&&(o[a]=t)})),a[i]=void 0,o}}return e};return n(e,0)},isAsyncFn:te,isThenable:e=>e&&(L(e)||B(e))&&B(e.then)&&B(e.catch),setImmediate:se,asap:ue};function me(e,a,n,i,o){Error.call(this),Error.captureStackTrace?Error.captureStackTrace(this,this.constructor):this.stack=(new Error).stack,this.message=e,this.name="AxiosError",a&&(this.code=a),n&&(this.config=n),i&&(this.request=i),o&&(this.response=o)}de.inherits(me,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:de.toJSONObject(this.config),code:this.code,status:this.response&&this.response.status?this.response.status:null}}});const fe=me.prototype,xe={};function ve(e){return de.isPlainObject(e)||de.isArray(e)}function he(e){return de.endsWith(e,"[]")?e.slice(0,-2):e}function be(e,a,n){return e?e.concat(a).map((function(e,a){return e=he(e),!n&&a?"["+e+"]":e})).join(n?".":""):a}["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((e=>{xe[e]={value:e}})),Object.defineProperties(me,xe),Object.defineProperty(fe,"isAxiosError",{value:!0}),me.from=(e,a,n,i,o,t)=>{const s=Object.create(fe);return de.toFlatObject(e,s,(function(e){return e!==Error.prototype}),(e=>"isAxiosError"!==e)),me.call(s,e.message,a,n,i,o),s.cause=e,s.name=e.name,t&&Object.assign(s,t),s};const ge=de.toFlatObject(de,{},null,(function(e){return/^is[A-Z]/.test(e)}));function ye(e,a,n){if(!de.isObject(e))throw new TypeError("target must be an object");a=a||new(f.default||FormData);const i=(n=de.toFlatObject(n,{metaTokens:!0,dots:!1,indexes:!1},!1,(function(e,a){return!de.isUndefined(a[e])}))).metaTokens,o=n.visitor||p,t=n.dots,s=n.indexes,r=(n.Blob||"undefined"!=typeof Blob&&Blob)&&de.isSpecCompliantForm(a);if(!de.isFunction(o))throw new TypeError("visitor must be a function");function c(e){if(null===e)return"";if(de.isDate(e))return e.toISOString();if(!r&&de.isBlob(e))throw new me("Blob is not supported. Use a Buffer instead.");return de.isArrayBuffer(e)||de.isTypedArray(e)?r&&"function"==typeof Blob?new Blob([e]):Buffer.from(e):e}function p(e,n,o){let r=e;if(e&&!o&&"object"==typeof e)if(de.endsWith(n,"{}"))n=i?n:n.slice(0,-2),e=JSON.stringify(e);else if(de.isArray(e)&&function(e){return de.isArray(e)&&!e.some(ve)}(e)||(de.isFileList(e)||de.endsWith(n,"[]"))&&(r=de.toArray(e)))return n=he(n),r.forEach((function(e,i){!de.isUndefined(e)&&null!==e&&a.append(!0===s?be([n],i,t):null===s?n:n+"[]",c(e))})),!1;return!!ve(e)||(a.append(be(o,n,t),c(e)),!1)}const l=[],u=Object.assign(ge,{defaultVisitor:p,convertValue:c,isVisitable:ve});if(!de.isObject(e))throw new TypeError("data must be an object");return function e(n,i){if(!de.isUndefined(n)){if(-1!==l.indexOf(n))throw Error("Circular reference detected in "+i.join("."));l.push(n),de.forEach(n,(function(n,t){!0===(!(de.isUndefined(n)||null===n)&&o.call(a,n,de.isString(t)?t.trim():t,i,u))&&e(n,i?i.concat(t):[t])})),l.pop()}}(e),a}function we(e){const a={"!":"%21","'":"%27","(":"%28",")":"%29","~":"%7E","%20":"+","%00":"\0"};return encodeURIComponent(e).replace(/[!'()~]|%20|%00/g,(function(e){return a[e]}))}function ke(e,a){this._pairs=[],e&&ye(e,this,a)}const je=ke.prototype;function _e(e){return encodeURIComponent(e).replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%20/g,"+").replace(/%5B/gi,"[").replace(/%5D/gi,"]")}function Se(e,a,n){if(!a)return e;const i=n&&n.encode||_e,o=n&&n.serialize;let t;if(t=o?o(a,n):de.isURLSearchParams(a)?a.toString():new ke(a,n).toString(i),t){const a=e.indexOf("#");-1!==a&&(e=e.slice(0,a)),e+=(-1===e.indexOf("?")?"?":"&")+t}return e}je.append=function(e,a){this._pairs.push([e,a])},je.toString=function(e){const a=e?function(a){return e.call(this,a,we)}:we;return this._pairs.map((function(e){return a(e[0])+"="+a(e[1])}),"").join("&")};const Ee=class InterceptorManager{constructor(){this.handlers=[]}use(e,a,n){return this.handlers.push({fulfilled:e,rejected:a,synchronous:!!n&&n.synchronous,runWhen:n?n.runWhen:null}),this.handlers.length-1}eject(e){this.handlers[e]&&(this.handlers[e]=null)}clear(){this.handlers&&(this.handlers=[])}forEach(e){de.forEach(this.handlers,(function(a){null!==a&&e(a)}))}},Ce={silentJSONParsing:!0,forcedJSONParsing:!0,clarifyTimeoutError:!1},Oe={isNode:!0,classes:{URLSearchParams:x.default.URLSearchParams,FormData:f.default,Blob:"undefined"!=typeof Blob&&Blob||null},protocols:["http","https","file","data"]},Te="undefined"!=typeof window&&"undefined"!=typeof document,Ae=(Re="undefined"!=typeof navigator&&navigator.product,Te&&["ReactNative","NativeScript","NS"].indexOf(Re)<0);var Re;const Pe="undefined"!=typeof WorkerGlobalScope&&self instanceof WorkerGlobalScope&&"function"==typeof self.importScripts,Be=Te&&window.location.href||"http://localhost",Ne={...Object.freeze({__proto__:null,hasBrowserEnv:Te,hasStandardBrowserWebWorkerEnv:Pe,hasStandardBrowserEnv:Ae,origin:Be}),...Oe};function Le(e){function a(e,n,i,o){let t=e[o++];if("__proto__"===t)return!0;const s=Number.isFinite(+t),r=o>=e.length;return t=!t&&de.isArray(i)?i.length:t,r?(de.hasOwnProp(i,t)?i[t]=[i[t],n]:i[t]=n,!s):(i[t]&&de.isObject(i[t])||(i[t]=[]),a(e,n,i[t],o)&&de.isArray(i[t])&&(i[t]=function(e){const a={},n=Object.keys(e);let i;const o=n.length;let t;for(i=0;i{a(function(e){return de.matchAll(/\w+|\[(\w*)]/g,e).map((e=>"[]"===e[0]?"":e[1]||e[0]))}(e),i,n,0)})),n}return null}const Fe={transitional:Ce,adapter:["xhr","http","fetch"],transformRequest:[function(e,a){const n=a.getContentType()||"",i=n.indexOf("application/json")>-1,o=de.isObject(e);if(o&&de.isHTMLForm(e)&&(e=new FormData(e)),de.isFormData(e))return i?JSON.stringify(Le(e)):e;if(de.isArrayBuffer(e)||de.isBuffer(e)||de.isStream(e)||de.isFile(e)||de.isBlob(e)||de.isReadableStream(e))return e;if(de.isArrayBufferView(e))return e.buffer;if(de.isURLSearchParams(e))return a.setContentType("application/x-www-form-urlencoded;charset=utf-8",!1),e.toString();let t;if(o){if(n.indexOf("application/x-www-form-urlencoded")>-1)return function(e,a){return ye(e,new Ne.classes.URLSearchParams,Object.assign({visitor:function(e,a,n,i){return Ne.isNode&&de.isBuffer(e)?(this.append(a,e.toString("base64")),!1):i.defaultVisitor.apply(this,arguments)}},a))}(e,this.formSerializer).toString();if((t=de.isFileList(e))||n.indexOf("multipart/form-data")>-1){const a=this.env&&this.env.FormData;return ye(t?{"files[]":e}:e,a&&new a,this.formSerializer)}}return o||i?(a.setContentType("application/json",!1),function(e,a,n){if(de.isString(e))try{return(a||JSON.parse)(e),de.trim(e)}catch(e){if("SyntaxError"!==e.name)throw e}return(n||JSON.stringify)(e)}(e)):e}],transformResponse:[function(e){const a=this.transitional||Fe.transitional,n=a&&a.forcedJSONParsing,i="json"===this.responseType;if(de.isResponse(e)||de.isReadableStream(e))return e;if(e&&de.isString(e)&&(n&&!this.responseType||i)){const n=!(a&&a.silentJSONParsing)&&i;try{return JSON.parse(e)}catch(e){if(n){if("SyntaxError"===e.name)throw me.from(e,me.ERR_BAD_RESPONSE,this,null,this.response);throw e}}}return e}],timeout:0,xsrfCookieName:"XSRF-TOKEN",xsrfHeaderName:"X-XSRF-TOKEN",maxContentLength:-1,maxBodyLength:-1,env:{FormData:Ne.classes.FormData,Blob:Ne.classes.Blob},validateStatus:function(e){return e>=200&&e<300},headers:{common:{Accept:"application/json, text/plain, */*","Content-Type":void 0}}};de.forEach(["delete","get","head","post","put","patch"],(e=>{Fe.headers[e]={}}));const ze=Fe,De=de.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"]),Ue=Symbol("internals");function qe(e){return e&&String(e).trim().toLowerCase()}function Me(e){return!1===e||null==e?e:de.isArray(e)?e.map(Me):String(e)}function Ie(e,a,n,i,o){return de.isFunction(i)?i.call(this,a,n):(o&&(a=n),de.isString(a)?de.isString(i)?-1!==a.indexOf(i):de.isRegExp(i)?i.test(a):void 0:void 0)}class AxiosHeaders{constructor(e){e&&this.set(e)}set(e,a,n){const i=this;function o(e,a,n){const o=qe(a);if(!o)throw new Error("header name must be a non-empty string");const t=de.findKey(i,o);(!t||void 0===i[t]||!0===n||void 0===n&&!1!==i[t])&&(i[t||a]=Me(e))}const t=(e,a)=>de.forEach(e,((e,n)=>o(e,n,a)));if(de.isPlainObject(e)||e instanceof this.constructor)t(e,a);else if(de.isString(e)&&(e=e.trim())&&!/^[-_a-zA-Z0-9^`|~,!#$%&'*+.]+$/.test(e.trim()))t((e=>{const a={};let n,i,o;return e&&e.split("\n").forEach((function(e){o=e.indexOf(":"),n=e.substring(0,o).trim().toLowerCase(),i=e.substring(o+1).trim(),!n||a[n]&&De[n]||("set-cookie"===n?a[n]?a[n].push(i):a[n]=[i]:a[n]=a[n]?a[n]+", "+i:i)})),a})(e),a);else if(de.isHeaders(e))for(const[a,i]of e.entries())o(i,a,n);else null!=e&&o(a,e,n);return this}get(e,a){if(e=qe(e)){const n=de.findKey(this,e);if(n){const e=this[n];if(!a)return e;if(!0===a)return function(e){const a=Object.create(null),n=/([^\s,;=]+)\s*(?:=\s*([^,;]+))?/g;let i;for(;i=n.exec(e);)a[i[1]]=i[2];return a}(e);if(de.isFunction(a))return a.call(this,e,n);if(de.isRegExp(a))return a.exec(e);throw new TypeError("parser must be boolean|regexp|function")}}}has(e,a){if(e=qe(e)){const n=de.findKey(this,e);return!(!n||void 0===this[n]||a&&!Ie(0,this[n],n,a))}return!1}delete(e,a){const n=this;let i=!1;function o(e){if(e=qe(e)){const o=de.findKey(n,e);!o||a&&!Ie(0,n[o],o,a)||(delete n[o],i=!0)}}return de.isArray(e)?e.forEach(o):o(e),i}clear(e){const a=Object.keys(this);let n=a.length,i=!1;for(;n--;){const o=a[n];e&&!Ie(0,this[o],o,e,!0)||(delete this[o],i=!0)}return i}normalize(e){const a=this,n={};return de.forEach(this,((i,o)=>{const t=de.findKey(n,o);if(t)return a[t]=Me(i),void delete a[o];const s=e?function(e){return e.trim().toLowerCase().replace(/([a-z\d])(\w*)/g,((e,a,n)=>a.toUpperCase()+n))}(o):String(o).trim();s!==o&&delete a[o],a[s]=Me(i),n[s]=!0})),this}concat(...e){return this.constructor.concat(this,...e)}toJSON(e){const a=Object.create(null);return de.forEach(this,((n,i)=>{null!=n&&!1!==n&&(a[i]=e&&de.isArray(n)?n.join(", "):n)})),a}[Symbol.iterator](){return Object.entries(this.toJSON())[Symbol.iterator]()}toString(){return Object.entries(this.toJSON()).map((([e,a])=>e+": "+a)).join("\n")}get[Symbol.toStringTag](){return"AxiosHeaders"}static from(e){return e instanceof this?e:new this(e)}static concat(e,...a){const n=new this(e);return a.forEach((e=>n.set(e))),n}static accessor(e){const a=(this[Ue]=this[Ue]={accessors:{}}).accessors,n=this.prototype;function i(e){const i=qe(e);a[i]||(function(e,a){const n=de.toCamelCase(" "+a);["get","set","has"].forEach((i=>{Object.defineProperty(e,i+n,{value:function(e,n,o){return this[i].call(this,a,e,n,o)},configurable:!0})}))}(n,e),a[i]=!0)}return de.isArray(e)?e.forEach(i):i(e),this}}AxiosHeaders.accessor(["Content-Type","Content-Length","Accept","Accept-Encoding","User-Agent","Authorization"]),de.reduceDescriptors(AxiosHeaders.prototype,(({value:e},a)=>{let n=a[0].toUpperCase()+a.slice(1);return{get:()=>e,set(e){this[n]=e}}})),de.freezeMethods(AxiosHeaders);const He=AxiosHeaders;function Ke(e,a){const n=this||ze,i=a||n,o=He.from(i.headers);let t=i.data;return de.forEach(e,(function(e){t=e.call(n,t,o.normalize(),a?a.status:void 0)})),o.normalize(),t}function Ve(e){return!(!e||!e.__CANCEL__)}function $e(e,a,n){me.call(this,null==e?"canceled":e,me.ERR_CANCELED,a,n),this.name="CanceledError"}function Ge(e,a,n){const i=n.config.validateStatus;n.status&&i&&!i(n.status)?a(new me("Request failed with status code "+n.status,[me.ERR_BAD_REQUEST,me.ERR_BAD_RESPONSE][Math.floor(n.status/100)-4],n.config,n.request,n)):e(n)}function We(e,a){return e&&!function(e){return/^([a-z][a-z\d+\-.]*:)?\/\//i.test(e)}(a)?function(e,a){return a?e.replace(/\/?\/$/,"")+"/"+a.replace(/^\/+/,""):e}(e,a):a}de.inherits($e,me,{__CANCEL__:!0});const Je="1.7.4";function Xe(e){const a=/^([-+\w]{1,25})(:?\/\/|:)/.exec(e);return a&&a[1]||""}const Ye=/^(?:([^;]+);)?(?:[^;]+;)?(base64|),([\s\S]*)$/,Qe=Symbol("internals");class AxiosTransformStream extends w.default.Transform{constructor(e){super({readableHighWaterMark:(e=de.toFlatObject(e,{maxRate:0,chunkSize:65536,minChunkSize:100,timeWindow:500,ticksRate:2,samplesCount:15},null,((e,a)=>!de.isUndefined(a[e])))).chunkSize});const a=this[Qe]={timeWindow:e.timeWindow,chunkSize:e.chunkSize,maxRate:e.maxRate,minChunkSize:e.minChunkSize,bytesSeen:0,isCaptured:!1,notifiedBytesLoaded:0,ts:Date.now(),bytes:0,onReadCallback:null};this.on("newListener",(e=>{"progress"===e&&(a.isCaptured||(a.isCaptured=!0))}))}_read(e){const a=this[Qe];return a.onReadCallback&&a.onReadCallback(),super._read(e)}_transform(e,a,n){const i=this[Qe],o=i.maxRate,t=this.readableHighWaterMark,s=i.timeWindow,r=o/(1e3/s),c=!1!==i.minChunkSize?Math.max(i.minChunkSize,.01*r):0,p=(e,a)=>{const n=Buffer.byteLength(e);i.bytesSeen+=n,i.bytes+=n,i.isCaptured&&this.emit("progress",i.bytesSeen),this.push(e)?process.nextTick(a):i.onReadCallback=()=>{i.onReadCallback=null,process.nextTick(a)}},l=(e,a)=>{const n=Buffer.byteLength(e);let l,u=null,d=t,m=0;if(o){const e=Date.now();(!i.ts||(m=e-i.ts)>=s)&&(i.ts=e,l=r-i.bytes,i.bytes=l<0?-l:0,m=0),l=r-i.bytes}if(o){if(l<=0)return setTimeout((()=>{a(null,e)}),s-m);ld&&n-d>c&&(u=e.subarray(d),e=e.subarray(0,d)),p(e,u?()=>{process.nextTick(a,null,u)}:a)};l(e,(function e(a,i){if(a)return n(a);i?l(i,e):n(null)}))}}const Ze=AxiosTransformStream,{asyncIterator:ea}=Symbol,aa=async function*(e){e.stream?yield*e.stream():e.arrayBuffer?yield await e.arrayBuffer():e[ea]?yield*e[ea]():yield e},na=de.ALPHABET.ALPHA_DIGIT+"-_",ia=new c.TextEncoder,oa="\r\n",ta=ia.encode(oa);class FormDataPart{constructor(e,a){const{escapeName:n}=this.constructor,i=de.isString(a);let o=`Content-Disposition: form-data; name="${n(e)}"${!i&&a.name?`; filename="${n(a.name)}"`:""}\r\n`;i?a=ia.encode(String(a).replace(/\r?\n|\r\n?/g,oa)):o+=`Content-Type: ${a.type||"application/octet-stream"}\r\n`,this.headers=ia.encode(o+oa),this.contentLength=i?a.byteLength:a.size,this.size=this.headers.byteLength+this.contentLength+2,this.name=e,this.value=a}async*encode(){yield this.headers;const{value:e}=this;de.isTypedArray(e)?yield e:yield*aa(e),yield ta}static escapeName(e){return String(e).replace(/[\r\n"]/g,(e=>({"\r":"%0D","\n":"%0A",'"':"%22"}[e])))}}const sa=(e,a,n)=>{const{tag:i="form-data-boundary",size:o=25,boundary:t=i+"-"+de.generateString(o,na)}=n||{};if(!de.isFormData(e))throw TypeError("FormData instance required");if(t.length<1||t.length>70)throw Error("boundary must be 10-70 characters long");const s=ia.encode("--"+t+oa),r=ia.encode("--"+t+"--"+oa+oa);let c=r.byteLength;const p=Array.from(e.entries()).map((([e,a])=>{const n=new FormDataPart(e,a);return c+=n.size,n}));c+=s.byteLength*p.length,c=de.toFiniteNumber(c);const l={"Content-Type":`multipart/form-data; boundary=${t}`};return Number.isFinite(c)&&(l["Content-Length"]=c),a&&a(l),u.Readable.from(async function*(){for(const e of p)yield s,yield*e.encode();yield r}())};class ZlibHeaderTransformStream extends w.default.Transform{__transform(e,a,n){this.push(e),n()}_transform(e,a,n){if(0!==e.length&&(this._transform=this.__transform,120!==e[0])){const e=Buffer.alloc(2);e[0]=120,e[1]=156,this.push(e,a)}this.__transform(e,a,n)}}const ra=ZlibHeaderTransformStream,ca=(e,a)=>de.isAsyncFn(e)?function(...n){const i=n.pop();e.apply(this,n).then((e=>{try{a?i(null,...a(e)):i(null,e)}catch(e){i(e)}}),i)}:e,pa=(e,a,n=3)=>{let i=0;const o=function(e,a){e=e||10;const n=new Array(e),i=new Array(e);let o,t=0,s=0;return a=void 0!==a?a:1e3,function(r){const c=Date.now(),p=i[s];o||(o=c),n[t]=r,i[t]=c;let l=s,u=0;for(;l!==t;)u+=n[l++],l%=e;if(t=(t+1)%e,t===s&&(s=(s+1)%e),c-o{o=t,n=null,i&&(clearTimeout(i),i=null),e.apply(null,a)};return[(...e)=>{const a=Date.now(),r=a-o;r>=t?s(e,a):(n=e,i||(i=setTimeout((()=>{i=null,s(n)}),t-r)))},()=>n&&s(n)]}((n=>{const t=n.loaded,s=n.lengthComputable?n.total:void 0,r=t-i,c=o(r);i=t,e({loaded:t,total:s,progress:s?t/s:void 0,bytes:r,rate:c||void 0,estimated:c&&s&&t<=s?(s-t)/c:void 0,event:n,lengthComputable:null!=s,[a?"download":"upload"]:!0})}),n)},la=(e,a)=>{const n=null!=e;return[i=>a[0]({lengthComputable:n,total:e,loaded:i}),a[1]]},ua=e=>(...a)=>de.asap((()=>e(...a))),da={flush:y.default.constants.Z_SYNC_FLUSH,finishFlush:y.default.constants.Z_SYNC_FLUSH},ma={flush:y.default.constants.BROTLI_OPERATION_FLUSH,finishFlush:y.default.constants.BROTLI_OPERATION_FLUSH},fa=de.isFunction(y.default.createBrotliDecompress),{http:xa,https:va}=g.default,ha=/https:?/,ba=Ne.protocols.map((e=>e+":")),ga=(e,[a,n])=>(e.on("end",n).on("error",n),a);function ya(e,a){e.beforeRedirects.proxy&&e.beforeRedirects.proxy(e),e.beforeRedirects.config&&e.beforeRedirects.config(e,a)}function wa(e,a,n){let i=a;if(!i&&!1!==i){const e=t.getProxyForUrl(n);e&&(i=new URL(e))}if(i){if(i.username&&(i.auth=(i.username||"")+":"+(i.password||"")),i.auth){(i.auth.username||i.auth.password)&&(i.auth=(i.auth.username||"")+":"+(i.auth.password||""));const a=Buffer.from(i.auth,"utf8").toString("base64");e.headers["Proxy-Authorization"]="Basic "+a}e.headers.host=e.hostname+(e.port?":"+e.port:"");const a=i.hostname||i.host;e.hostname=a,e.host=a,e.port=i.port,e.path=n,i.protocol&&(e.protocol=i.protocol.includes(":")?i.protocol:`${i.protocol}:`)}e.beforeRedirects.proxy=function(e){wa(e,a,e.href)}}const ka="undefined"!=typeof process&&"process"===de.kindOf(process),ja=(e,a)=>(({address:e,family:a})=>{if(!de.isString(e))throw TypeError("address must be a string");return{address:e,family:a||(e.indexOf(".")<0?6:4)}})(de.isObject(e)?e:{address:e,family:a}),_a=ka&&function(e){return a=async function(a,n,i){let{data:o,lookup:t,family:s}=e;const{responseType:r,responseEncoding:c}=e,p=e.method.toUpperCase();let l,u,m=!1;if(t){const e=ca(t,(e=>de.isArray(e)?e:[e]));t=(a,n,i)=>{e(a,n,((e,a,o)=>{if(e)return i(e);const t=de.isArray(a)?a.map((e=>ja(e))):[ja(a,o)];n.all?i(e,t):i(e,t[0].address,t[0].family)}))}}const f=new d.EventEmitter,x=()=>{e.cancelToken&&e.cancelToken.unsubscribe(g),e.signal&&e.signal.removeEventListener("abort",g),f.removeAllListeners()};function g(a){f.emit("abort",!a||a.type?new $e(null,e,u):a)}i(((e,a)=>{l=!0,a&&(m=!0,x())})),f.once("abort",n),(e.cancelToken||e.signal)&&(e.cancelToken&&e.cancelToken.subscribe(g),e.signal&&(e.signal.aborted?g():e.signal.addEventListener("abort",g)));const k=We(e.baseURL,e.url),j=new URL(k,de.hasBrowserEnv?Ne.origin:void 0),_=j.protocol||ba[0];if("data:"===_){let i;if("GET"!==p)return Ge(a,n,{status:405,statusText:"method not allowed",headers:{},config:e});try{i=function(e,a,n){const i=n&&n.Blob||Ne.classes.Blob,o=Xe(e);if(void 0===a&&i&&(a=!0),"data"===o){e=o.length?e.slice(o.length+1):e;const n=Ye.exec(e);if(!n)throw new me("Invalid URL",me.ERR_INVALID_URL);const t=n[1],s=n[2],r=n[3],c=Buffer.from(decodeURIComponent(r),s?"base64":"utf8");if(a){if(!i)throw new me("Blob is not supported",me.ERR_NOT_SUPPORT);return new i([c],{type:t})}return c}throw new me("Unsupported protocol "+o,me.ERR_NOT_SUPPORT)}(e.url,"blob"===r,{Blob:e.env&&e.env.Blob})}catch(a){throw me.from(a,me.ERR_BAD_REQUEST,e)}return"text"===r?(i=i.toString(c),c&&"utf8"!==c||(i=de.stripBOM(i))):"stream"===r&&(i=w.default.Readable.from(i)),Ge(a,n,{data:i,status:200,statusText:"OK",headers:new He,config:e})}if(-1===ba.indexOf(_))return n(new me("Unsupported protocol "+_,me.ERR_BAD_REQUEST,e));const S=He.from(e.headers).normalize();S.set("User-Agent","axios/1.7.4",!1);const{onUploadProgress:E,onDownloadProgress:C}=e,O=e.maxRate;let T,A;if(de.isSpecCompliantForm(o)){const e=S.getContentType(/boundary=([-_\w\d]{10,70})/i);o=sa(o,(e=>{S.set(e)}),{tag:"axios-1.7.4-boundary",boundary:e&&e[1]||void 0})}else if(de.isFormData(o)&&de.isFunction(o.getHeaders)){if(S.set(o.getHeaders()),!S.hasContentLength())try{const e=await b.default.promisify(o.getLength).call(o);Number.isFinite(e)&&e>=0&&S.setContentLength(e)}catch(e){}}else if(de.isBlob(o))o.size&&S.setContentType(o.type||"application/octet-stream"),S.setContentLength(o.size||0),o=w.default.Readable.from(aa(o));else if(o&&!de.isStream(o)){if(Buffer.isBuffer(o));else if(de.isArrayBuffer(o))o=Buffer.from(new Uint8Array(o));else{if(!de.isString(o))return n(new me("Data after transformation must be a string, an ArrayBuffer, a Buffer, or a Stream",me.ERR_BAD_REQUEST,e));o=Buffer.from(o,"utf-8")}if(S.setContentLength(o.length,!1),e.maxBodyLength>-1&&o.length>e.maxBodyLength)return n(new me("Request body larger than maxBodyLength limit",me.ERR_BAD_REQUEST,e))}const R=de.toFiniteNumber(S.getContentLength());let P,B;de.isArray(O)?(T=O[0],A=O[1]):T=A=O,o&&(E||T)&&(de.isStream(o)||(o=w.default.Readable.from(o,{objectMode:!1})),o=w.default.pipeline([o,new Ze({maxRate:de.toFiniteNumber(T)})],de.noop),E&&o.on("progress",ga(o,la(R,pa(ua(E),!1,3))))),e.auth&&(P=(e.auth.username||"")+":"+(e.auth.password||"")),!P&&j.username&&(P=j.username+":"+j.password),P&&S.delete("authorization");try{B=Se(j.pathname+j.search,e.params,e.paramsSerializer).replace(/^\?/,"")}catch(a){const i=new Error(a.message);return i.config=e,i.url=e.url,i.exists=!0,n(i)}S.set("Accept-Encoding","gzip, compress, deflate"+(fa?", br":""),!1);const N={path:B,method:p,headers:S.toJSON(),agents:{http:e.httpAgent,https:e.httpsAgent},auth:P,protocol:_,family:s,beforeRedirect:ya,beforeRedirects:{}};let L;!de.isUndefined(t)&&(N.lookup=t),e.socketPath?N.socketPath=e.socketPath:(N.hostname=j.hostname,N.port=j.port,wa(N,e.proxy,_+"//"+j.hostname+(j.port?":"+j.port:"")+N.path));const F=ha.test(N.protocol);if(N.agent=F?e.httpsAgent:e.httpAgent,e.transport?L=e.transport:0===e.maxRedirects?L=F?h.default:v.default:(e.maxRedirects&&(N.maxRedirects=e.maxRedirects),e.beforeRedirect&&(N.beforeRedirects.config=e.beforeRedirect),L=F?va:xa),e.maxBodyLength>-1?N.maxBodyLength=e.maxBodyLength:N.maxBodyLength=1/0,e.insecureHTTPParser&&(N.insecureHTTPParser=e.insecureHTTPParser),u=L.request(N,(function(i){if(u.destroyed)return;const o=[i],t=+i.headers["content-length"];if(C||A){const e=new Ze({maxRate:de.toFiniteNumber(A)});C&&e.on("progress",ga(e,la(t,pa(ua(C),!0,3)))),o.push(e)}let s=i;const l=i.req||u;if(!1!==e.decompress&&i.headers["content-encoding"])switch("HEAD"!==p&&204!==i.statusCode||delete i.headers["content-encoding"],(i.headers["content-encoding"]||"").toLowerCase()){case"gzip":case"x-gzip":case"compress":case"x-compress":o.push(y.default.createUnzip(da)),delete i.headers["content-encoding"];break;case"deflate":o.push(new ra),o.push(y.default.createUnzip(da)),delete i.headers["content-encoding"];break;case"br":fa&&(o.push(y.default.createBrotliDecompress(ma)),delete i.headers["content-encoding"])}s=o.length>1?w.default.pipeline(o,de.noop):o[0];const d=w.default.finished(s,(()=>{d(),x()})),v={status:i.statusCode,statusText:i.statusMessage,headers:new He(i.headers),config:e,request:l};if("stream"===r)v.data=s,Ge(a,n,v);else{const i=[];let o=0;s.on("data",(function(a){i.push(a),o+=a.length,e.maxContentLength>-1&&o>e.maxContentLength&&(m=!0,s.destroy(),n(new me("maxContentLength size of "+e.maxContentLength+" exceeded",me.ERR_BAD_RESPONSE,e,l)))})),s.on("aborted",(function(){if(m)return;const a=new me("maxContentLength size of "+e.maxContentLength+" exceeded",me.ERR_BAD_RESPONSE,e,l);s.destroy(a),n(a)})),s.on("error",(function(a){u.destroyed||n(me.from(a,null,e,l))})),s.on("end",(function(){try{let e=1===i.length?i[0]:Buffer.concat(i);"arraybuffer"!==r&&(e=e.toString(c),c&&"utf8"!==c||(e=de.stripBOM(e))),v.data=e}catch(a){return n(me.from(a,null,e,v.request,v))}Ge(a,n,v)}))}f.once("abort",(e=>{s.destroyed||(s.emit("error",e),s.destroy())}))})),f.once("abort",(e=>{n(e),u.destroy(e)})),u.on("error",(function(a){n(me.from(a,null,e,u))})),u.on("socket",(function(e){e.setKeepAlive(!0,6e4)})),e.timeout){const a=parseInt(e.timeout,10);if(Number.isNaN(a))return void n(new me("error trying to parse `config.timeout` to int",me.ERR_BAD_OPTION_VALUE,e,u));u.setTimeout(a,(function(){if(l)return;let a=e.timeout?"timeout of "+e.timeout+"ms exceeded":"timeout exceeded";const i=e.transitional||Ce;e.timeoutErrorMessage&&(a=e.timeoutErrorMessage),n(new me(a,i.clarifyTimeoutError?me.ETIMEDOUT:me.ECONNABORTED,e,u)),g()}))}if(de.isStream(o)){let a=!1,n=!1;o.on("end",(()=>{a=!0})),o.once("error",(e=>{n=!0,u.destroy(e)})),o.on("close",(()=>{a||n||g(new $e("Request stream has been aborted",e,u))})),o.pipe(u)}else u.end(o)},new Promise(((e,n)=>{let i,o;const t=(e,a)=>{o||(o=!0,i&&i(e,a))},s=e=>{t(e,!0),n(e)};a((a=>{t(a),e(a)}),s,(e=>i=e)).catch(s)}));var a},Sa=Ne.hasStandardBrowserEnv?function(){const e=/(msie|trident)/i.test(navigator.userAgent),a=document.createElement("a");let n;function i(n){let i=n;return e&&(a.setAttribute("href",i),i=a.href),a.setAttribute("href",i),{href:a.href,protocol:a.protocol?a.protocol.replace(/:$/,""):"",host:a.host,search:a.search?a.search.replace(/^\?/,""):"",hash:a.hash?a.hash.replace(/^#/,""):"",hostname:a.hostname,port:a.port,pathname:"/"===a.pathname.charAt(0)?a.pathname:"/"+a.pathname}}return n=i(window.location.href),function(e){const a=de.isString(e)?i(e):e;return a.protocol===n.protocol&&a.host===n.host}}():function(){return!0},Ea=Ne.hasStandardBrowserEnv?{write(e,a,n,i,o,t){const s=[e+"="+encodeURIComponent(a)];de.isNumber(n)&&s.push("expires="+new Date(n).toGMTString()),de.isString(i)&&s.push("path="+i),de.isString(o)&&s.push("domain="+o),!0===t&&s.push("secure"),document.cookie=s.join("; ")},read(e){const a=document.cookie.match(new RegExp("(^|;\\s*)("+e+")=([^;]*)"));return a?decodeURIComponent(a[3]):null},remove(e){this.write(e,"",Date.now()-864e5)}}:{write(){},read:()=>null,remove(){}},Ca=e=>e instanceof He?{...e}:e;function Oa(e,a){a=a||{};const n={};function i(e,a,n){return de.isPlainObject(e)&&de.isPlainObject(a)?de.merge.call({caseless:n},e,a):de.isPlainObject(a)?de.merge({},a):de.isArray(a)?a.slice():a}function o(e,a,n){return de.isUndefined(a)?de.isUndefined(e)?void 0:i(void 0,e,n):i(e,a,n)}function t(e,a){if(!de.isUndefined(a))return i(void 0,a)}function s(e,a){return de.isUndefined(a)?de.isUndefined(e)?void 0:i(void 0,e):i(void 0,a)}function r(n,o,t){return t in a?i(n,o):t in e?i(void 0,n):void 0}const c={url:t,method:t,data:t,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:r,headers:(e,a)=>o(Ca(e),Ca(a),!0)};return de.forEach(Object.keys(Object.assign({},e,a)),(function(i){const t=c[i]||o,s=t(e[i],a[i],i);de.isUndefined(s)&&t!==r||(n[i]=s)})),n}const Ta=e=>{const a=Oa({},e);let n,{data:i,withXSRFToken:o,xsrfHeaderName:t,xsrfCookieName:s,headers:r,auth:c}=a;if(a.headers=r=He.from(r),a.url=Se(We(a.baseURL,a.url),e.params,e.paramsSerializer),c&&r.set("Authorization","Basic "+btoa((c.username||"")+":"+(c.password?unescape(encodeURIComponent(c.password)):""))),de.isFormData(i))if(Ne.hasStandardBrowserEnv||Ne.hasStandardBrowserWebWorkerEnv)r.setContentType(void 0);else if(!1!==(n=r.getContentType())){const[e,...a]=n?n.split(";").map((e=>e.trim())).filter(Boolean):[];r.setContentType([e||"multipart/form-data",...a].join("; "))}if(Ne.hasStandardBrowserEnv&&(o&&de.isFunction(o)&&(o=o(a)),o||!1!==o&&Sa(a.url))){const e=t&&s&&Ea.read(s);e&&r.set(t,e)}return a},Aa="undefined"!=typeof XMLHttpRequest&&function(e){return new Promise((function(a,n){const i=Ta(e);let o=i.data;const t=He.from(i.headers).normalize();let s,r,c,p,l,{responseType:u,onUploadProgress:d,onDownloadProgress:m}=i;function f(){p&&p(),l&&l(),i.cancelToken&&i.cancelToken.unsubscribe(s),i.signal&&i.signal.removeEventListener("abort",s)}let x=new XMLHttpRequest;function v(){if(!x)return;const i=He.from("getAllResponseHeaders"in x&&x.getAllResponseHeaders());Ge((function(e){a(e),f()}),(function(e){n(e),f()}),{data:u&&"text"!==u&&"json"!==u?x.response:x.responseText,status:x.status,statusText:x.statusText,headers:i,config:e,request:x}),x=null}x.open(i.method.toUpperCase(),i.url,!0),x.timeout=i.timeout,"onloadend"in x?x.onloadend=v:x.onreadystatechange=function(){x&&4===x.readyState&&(0!==x.status||x.responseURL&&0===x.responseURL.indexOf("file:"))&&setTimeout(v)},x.onabort=function(){x&&(n(new me("Request aborted",me.ECONNABORTED,e,x)),x=null)},x.onerror=function(){n(new me("Network Error",me.ERR_NETWORK,e,x)),x=null},x.ontimeout=function(){let a=i.timeout?"timeout of "+i.timeout+"ms exceeded":"timeout exceeded";const o=i.transitional||Ce;i.timeoutErrorMessage&&(a=i.timeoutErrorMessage),n(new me(a,o.clarifyTimeoutError?me.ETIMEDOUT:me.ECONNABORTED,e,x)),x=null},void 0===o&&t.setContentType(null),"setRequestHeader"in x&&de.forEach(t.toJSON(),(function(e,a){x.setRequestHeader(a,e)})),de.isUndefined(i.withCredentials)||(x.withCredentials=!!i.withCredentials),u&&"json"!==u&&(x.responseType=i.responseType),m&&([c,l]=pa(m,!0),x.addEventListener("progress",c)),d&&x.upload&&([r,p]=pa(d),x.upload.addEventListener("progress",r),x.upload.addEventListener("loadend",p)),(i.cancelToken||i.signal)&&(s=a=>{x&&(n(!a||a.type?new $e(null,e,x):a),x.abort(),x=null)},i.cancelToken&&i.cancelToken.subscribe(s),i.signal&&(i.signal.aborted?s():i.signal.addEventListener("abort",s)));const h=Xe(i.url);h&&-1===Ne.protocols.indexOf(h)?n(new me("Unsupported protocol "+h+":",me.ERR_BAD_REQUEST,e)):x.send(o||null)}))},Ra=(e,a)=>{let n,i=new AbortController;const o=function(e){if(!n){n=!0,s();const a=e instanceof Error?e:this.reason;i.abort(a instanceof me?a:new $e(a instanceof Error?a.message:a))}};let t=a&&setTimeout((()=>{o(new me(`timeout ${a} of ms exceeded`,me.ETIMEDOUT))}),a);const s=()=>{e&&(t&&clearTimeout(t),t=null,e.forEach((e=>{e&&(e.removeEventListener?e.removeEventListener("abort",o):e.unsubscribe(o))})),e=null)};e.forEach((e=>e&&e.addEventListener&&e.addEventListener("abort",o)));const{signal:r}=i;return r.unsubscribe=s,[r,()=>{t&&clearTimeout(t),t=null}]},Pa=function*(e,a){let n=e.byteLength;if(!a||n{const t=async function*(e,a,n){for await(const i of e)yield*Pa(ArrayBuffer.isView(i)?i:await n(String(i)),a)}(e,a,o);let s,r=0,c=e=>{s||(s=!0,i&&i(e))};return new ReadableStream({async pull(e){try{const{done:a,value:i}=await t.next();if(a)return c(),void e.close();let o=i.byteLength;if(n){let e=r+=o;n(e)}e.enqueue(new Uint8Array(i))}catch(e){throw c(e),e}},cancel:e=>(c(e),t.return())},{highWaterMark:2})},Na="function"==typeof fetch&&"function"==typeof Request&&"function"==typeof Response,La=Na&&"function"==typeof ReadableStream,Fa=Na&&("function"==typeof TextEncoder?(za=new TextEncoder,e=>za.encode(e)):async e=>new Uint8Array(await new Response(e).arrayBuffer()));var za;const Da=(e,...a)=>{try{return!!e(...a)}catch(e){return!1}},Ua=La&&Da((()=>{let e=!1;const a=new Request(Ne.origin,{body:new ReadableStream,method:"POST",get duplex(){return e=!0,"half"}}).headers.has("Content-Type");return e&&!a})),qa=La&&Da((()=>de.isReadableStream(new Response("").body))),Ma={stream:qa&&(e=>e.body)};var Ia;Na&&(Ia=new Response,["text","arrayBuffer","blob","formData","stream"].forEach((e=>{!Ma[e]&&(Ma[e]=de.isFunction(Ia[e])?a=>a[e]():(a,n)=>{throw new me(`Response type '${e}' is not supported`,me.ERR_NOT_SUPPORT,n)})})));const Ha=async(e,a)=>{const n=de.toFiniteNumber(e.getContentLength());return null==n?(async e=>null==e?0:de.isBlob(e)?e.size:de.isSpecCompliantForm(e)?(await new Request(e).arrayBuffer()).byteLength:de.isArrayBufferView(e)||de.isArrayBuffer(e)?e.byteLength:(de.isURLSearchParams(e)&&(e+=""),de.isString(e)?(await Fa(e)).byteLength:void 0))(a):n},Ka=Na&&(async e=>{let{url:a,method:n,data:i,signal:o,cancelToken:t,timeout:s,onDownloadProgress:r,onUploadProgress:c,responseType:p,headers:l,withCredentials:u="same-origin",fetchOptions:d}=Ta(e);p=p?(p+"").toLowerCase():"text";let m,f,[x,v]=o||t||s?Ra([o,t],s):[];const h=()=>{!m&&setTimeout((()=>{x&&x.unsubscribe()})),m=!0};let b;try{if(c&&Ua&&"get"!==n&&"head"!==n&&0!==(b=await Ha(l,i))){let e,n=new Request(a,{method:"POST",body:i,duplex:"half"});if(de.isFormData(i)&&(e=n.headers.get("content-type"))&&l.setContentType(e),n.body){const[e,a]=la(b,pa(ua(c)));i=Ba(n.body,65536,e,a,Fa)}}de.isString(u)||(u=u?"include":"omit"),f=new Request(a,{...d,signal:x,method:n.toUpperCase(),headers:l.normalize().toJSON(),body:i,duplex:"half",credentials:u});let o=await fetch(f);const t=qa&&("stream"===p||"response"===p);if(qa&&(r||t)){const e={};["status","statusText","headers"].forEach((a=>{e[a]=o[a]}));const a=de.toFiniteNumber(o.headers.get("content-length")),[n,i]=r&&la(a,pa(ua(r),!0))||[];o=new Response(Ba(o.body,65536,n,(()=>{i&&i(),t&&h()}),Fa),e)}p=p||"text";let s=await Ma[de.findKey(Ma,p)||"text"](o,e);return!t&&h(),v&&v(),await new Promise(((a,n)=>{Ge(a,n,{data:s,headers:He.from(o.headers),status:o.status,statusText:o.statusText,config:e,request:f})}))}catch(a){if(h(),a&&"TypeError"===a.name&&/fetch/i.test(a.message))throw Object.assign(new me("Network Error",me.ERR_NETWORK,e,f),{cause:a.cause||a});throw me.from(a,a&&a.code,e,f)}}),Va={http:_a,xhr:Aa,fetch:Ka};de.forEach(Va,((e,a)=>{if(e){try{Object.defineProperty(e,"name",{value:a})}catch(e){}Object.defineProperty(e,"adapterName",{value:a})}}));const $a=e=>`- ${e}`,Ga=e=>de.isFunction(e)||null===e||!1===e,Wa=e=>{e=de.isArray(e)?e:[e];const{length:a}=e;let n,i;const o={};for(let t=0;t`adapter ${e} `+(!1===a?"is not supported by the environment":"is not available in the build")));throw new me("There is no suitable adapter to dispatch the request "+(a?e.length>1?"since :\n"+e.map($a).join("\n"):" "+$a(e[0]):"as no adapter specified"),"ERR_NOT_SUPPORT")}return i};function Ja(e){if(e.cancelToken&&e.cancelToken.throwIfRequested(),e.signal&&e.signal.aborted)throw new $e(null,e)}function Xa(e){return Ja(e),e.headers=He.from(e.headers),e.data=Ke.call(e,e.transformRequest),-1!==["post","put","patch"].indexOf(e.method)&&e.headers.setContentType("application/x-www-form-urlencoded",!1),Wa(e.adapter||ze.adapter)(e).then((function(a){return Ja(e),a.data=Ke.call(e,e.transformResponse,a),a.headers=He.from(a.headers),a}),(function(a){return Ve(a)||(Ja(e),a&&a.response&&(a.response.data=Ke.call(e,e.transformResponse,a.response),a.response.headers=He.from(a.response.headers))),Promise.reject(a)}))}const Ya={};["object","boolean","number","function","string","symbol"].forEach(((e,a)=>{Ya[e]=function(n){return typeof n===e||"a"+(a<1?"n ":" ")+e}}));const Qa={};Ya.transitional=function(e,a,n){function i(e,a){return"[Axios v1.7.4] Transitional option '"+e+"'"+a+(n?". "+n:"")}return(n,o,t)=>{if(!1===e)throw new me(i(o," has been removed"+(a?" in "+a:"")),me.ERR_DEPRECATED);return a&&!Qa[o]&&(Qa[o]=!0,console.warn(i(o," has been deprecated since v"+a+" and will be removed in the near future"))),!e||e(n,o,t)}};const Za={assertOptions:function(e,a,n){if("object"!=typeof e)throw new me("options must be an object",me.ERR_BAD_OPTION_VALUE);const i=Object.keys(e);let o=i.length;for(;o-- >0;){const t=i[o],s=a[t];if(s){const a=e[t],n=void 0===a||s(a,t,e);if(!0!==n)throw new me("option "+t+" must be "+n,me.ERR_BAD_OPTION_VALUE)}else if(!0!==n)throw new me("Unknown option "+t,me.ERR_BAD_OPTION)}},validators:Ya},en=Za.validators;class Axios{constructor(e){this.defaults=e,this.interceptors={request:new Ee,response:new Ee}}async request(e,a){try{return await this._request(e,a)}catch(e){if(e instanceof Error){let a;Error.captureStackTrace?Error.captureStackTrace(a={}):a=new Error;const n=a.stack?a.stack.replace(/^.+\n/,""):"";try{e.stack?n&&!String(e.stack).endsWith(n.replace(/^.+\n.+\n/,""))&&(e.stack+="\n"+n):e.stack=n}catch(e){}}throw e}}_request(e,a){"string"==typeof e?(a=a||{}).url=e:a=e||{},a=Oa(this.defaults,a);const{transitional:n,paramsSerializer:i,headers:o}=a;void 0!==n&&Za.assertOptions(n,{silentJSONParsing:en.transitional(en.boolean),forcedJSONParsing:en.transitional(en.boolean),clarifyTimeoutError:en.transitional(en.boolean)},!1),null!=i&&(de.isFunction(i)?a.paramsSerializer={serialize:i}:Za.assertOptions(i,{encode:en.function,serialize:en.function},!0)),a.method=(a.method||this.defaults.method||"get").toLowerCase();let t=o&&de.merge(o.common,o[a.method]);o&&de.forEach(["delete","get","head","post","put","patch","common"],(e=>{delete o[e]})),a.headers=He.concat(t,o);const s=[];let r=!0;this.interceptors.request.forEach((function(e){"function"==typeof e.runWhen&&!1===e.runWhen(a)||(r=r&&e.synchronous,s.unshift(e.fulfilled,e.rejected))}));const c=[];let p;this.interceptors.response.forEach((function(e){c.push(e.fulfilled,e.rejected)}));let l,u=0;if(!r){const e=[Xa.bind(this),void 0];for(e.unshift.apply(e,s),e.push.apply(e,c),l=e.length,p=Promise.resolve(a);u{if(!n._listeners)return;let a=n._listeners.length;for(;a-- >0;)n._listeners[a](e);n._listeners=null})),this.promise.then=e=>{let a;const i=new Promise((e=>{n.subscribe(e),a=e})).then(e);return i.cancel=function(){n.unsubscribe(a)},i},e((function(e,i,o){n.reason||(n.reason=new $e(e,i,o),a(n.reason))}))}throwIfRequested(){if(this.reason)throw this.reason}subscribe(e){this.reason?e(this.reason):this._listeners?this._listeners.push(e):this._listeners=[e]}unsubscribe(e){if(!this._listeners)return;const a=this._listeners.indexOf(e);-1!==a&&this._listeners.splice(a,1)}static source(){let e;return{token:new CancelToken((function(a){e=a})),cancel:e}}}const nn=CancelToken,on={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(on).forEach((([e,a])=>{on[a]=e}));const tn=on,sn=function e(a){const n=new an(a),i=k(an.prototype.request,n);return de.extend(i,an.prototype,n,{allOwnKeys:!0}),de.extend(i,n,null,{allOwnKeys:!0}),i.create=function(n){return e(Oa(a,n))},i}(ze);sn.Axios=an,sn.CanceledError=$e,sn.CancelToken=nn,sn.isCancel=Ve,sn.VERSION=Je,sn.toFormData=ye,sn.AxiosError=me,sn.Cancel=sn.CanceledError,sn.all=function(e){return Promise.all(e)},sn.spread=function(e){return function(a){return e.apply(null,a)}},sn.isAxiosError=function(e){return de.isObject(e)&&!0===e.isAxiosError},sn.mergeConfig=Oa,sn.AxiosHeaders=He,sn.formToJSON=e=>Le(de.isHTMLForm(e)?new FormData(e):e),sn.getAdapter=Wa,sn.HttpStatusCode=tn,sn.default=sn,e.exports=sn},3765:e=>{"use strict";e.exports=JSON.parse('{"application/1d-interleaved-parityfec":{"source":"iana"},"application/3gpdash-qoe-report+xml":{"source":"iana","charset":"UTF-8","compressible":true},"application/3gpp-ims+xml":{"source":"iana","compressible":true},"application/3gpphal+json":{"source":"iana","compressible":true},"application/3gpphalforms+json":{"source":"iana","compressible":true},"application/a2l":{"source":"iana"},"application/ace+cbor":{"source":"iana"},"application/activemessage":{"source":"iana"},"application/activity+json":{"source":"iana","compressible":true},"application/alto-costmap+json":{"source":"iana","compressible":true},"application/alto-costmapfilter+json":{"source":"iana","compressible":true},"application/alto-directory+json":{"source":"iana","compressible":true},"application/alto-endpointcost+json":{"source":"iana","compressible":true},"application/alto-endpointcostparams+json":{"source":"iana","compressible":true},"application/alto-endpointprop+json":{"source":"iana","compressible":true},"application/alto-endpointpropparams+json":{"source":"iana","compressible":true},"application/alto-error+json":{"source":"iana","compressible":true},"application/alto-networkmap+json":{"source":"iana","compressible":true},"application/alto-networkmapfilter+json":{"source":"iana","compressible":true},"application/alto-updatestreamcontrol+json":{"source":"iana","compressible":true},"application/alto-updatestreamparams+json":{"source":"iana","compressible":true},"application/aml":{"source":"iana"},"application/andrew-inset":{"source":"iana","extensions":["ez"]},"application/applefile":{"source":"iana"},"application/applixware":{"source":"apache","extensions":["aw"]},"application/at+jwt":{"source":"iana"},"application/atf":{"source":"iana"},"application/atfx":{"source":"iana"},"application/atom+xml":{"source":"iana","compressible":true,"extensions":["atom"]},"application/atomcat+xml":{"source":"iana","compressible":true,"extensions":["atomcat"]},"application/atomdeleted+xml":{"source":"iana","compressible":true,"extensions":["atomdeleted"]},"application/atomicmail":{"source":"iana"},"application/atomsvc+xml":{"source":"iana","compressible":true,"extensions":["atomsvc"]},"application/atsc-dwd+xml":{"source":"iana","compressible":true,"extensions":["dwd"]},"application/atsc-dynamic-event-message":{"source":"iana"},"application/atsc-held+xml":{"source":"iana","compressible":true,"extensions":["held"]},"application/atsc-rdt+json":{"source":"iana","compressible":true},"application/atsc-rsat+xml":{"source":"iana","compressible":true,"extensions":["rsat"]},"application/atxml":{"source":"iana"},"application/auth-policy+xml":{"source":"iana","compressible":true},"application/bacnet-xdd+zip":{"source":"iana","compressible":false},"application/batch-smtp":{"source":"iana"},"application/bdoc":{"compressible":false,"extensions":["bdoc"]},"application/beep+xml":{"source":"iana","charset":"UTF-8","compressible":true},"application/calendar+json":{"source":"iana","compressible":true},"application/calendar+xml":{"source":"iana","compressible":true,"extensions":["xcs"]},"application/call-completion":{"source":"iana"},"application/cals-1840":{"source":"iana"},"application/captive+json":{"source":"iana","compressible":true},"application/cbor":{"source":"iana"},"application/cbor-seq":{"source":"iana"},"application/cccex":{"source":"iana"},"application/ccmp+xml":{"source":"iana","compressible":true},"application/ccxml+xml":{"source":"iana","compressible":true,"extensions":["ccxml"]},"application/cdfx+xml":{"source":"iana","compressible":true,"extensions":["cdfx"]},"application/cdmi-capability":{"source":"iana","extensions":["cdmia"]},"application/cdmi-container":{"source":"iana","extensions":["cdmic"]},"application/cdmi-domain":{"source":"iana","extensions":["cdmid"]},"application/cdmi-object":{"source":"iana","extensions":["cdmio"]},"application/cdmi-queue":{"source":"iana","extensions":["cdmiq"]},"application/cdni":{"source":"iana"},"application/cea":{"source":"iana"},"application/cea-2018+xml":{"source":"iana","compressible":true},"application/cellml+xml":{"source":"iana","compressible":true},"application/cfw":{"source":"iana"},"application/city+json":{"source":"iana","compressible":true},"application/clr":{"source":"iana"},"application/clue+xml":{"source":"iana","compressible":true},"application/clue_info+xml":{"source":"iana","compressible":true},"application/cms":{"source":"iana"},"application/cnrp+xml":{"source":"iana","compressible":true},"application/coap-group+json":{"source":"iana","compressible":true},"application/coap-payload":{"source":"iana"},"application/commonground":{"source":"iana"},"application/conference-info+xml":{"source":"iana","compressible":true},"application/cose":{"source":"iana"},"application/cose-key":{"source":"iana"},"application/cose-key-set":{"source":"iana"},"application/cpl+xml":{"source":"iana","compressible":true,"extensions":["cpl"]},"application/csrattrs":{"source":"iana"},"application/csta+xml":{"source":"iana","compressible":true},"application/cstadata+xml":{"source":"iana","compressible":true},"application/csvm+json":{"source":"iana","compressible":true},"application/cu-seeme":{"source":"apache","extensions":["cu"]},"application/cwt":{"source":"iana"},"application/cybercash":{"source":"iana"},"application/dart":{"compressible":true},"application/dash+xml":{"source":"iana","compressible":true,"extensions":["mpd"]},"application/dash-patch+xml":{"source":"iana","compressible":true,"extensions":["mpp"]},"application/dashdelta":{"source":"iana"},"application/davmount+xml":{"source":"iana","compressible":true,"extensions":["davmount"]},"application/dca-rft":{"source":"iana"},"application/dcd":{"source":"iana"},"application/dec-dx":{"source":"iana"},"application/dialog-info+xml":{"source":"iana","compressible":true},"application/dicom":{"source":"iana"},"application/dicom+json":{"source":"iana","compressible":true},"application/dicom+xml":{"source":"iana","compressible":true},"application/dii":{"source":"iana"},"application/dit":{"source":"iana"},"application/dns":{"source":"iana"},"application/dns+json":{"source":"iana","compressible":true},"application/dns-message":{"source":"iana"},"application/docbook+xml":{"source":"apache","compressible":true,"extensions":["dbk"]},"application/dots+cbor":{"source":"iana"},"application/dskpp+xml":{"source":"iana","compressible":true},"application/dssc+der":{"source":"iana","extensions":["dssc"]},"application/dssc+xml":{"source":"iana","compressible":true,"extensions":["xdssc"]},"application/dvcs":{"source":"iana"},"application/ecmascript":{"source":"iana","compressible":true,"extensions":["es","ecma"]},"application/edi-consent":{"source":"iana"},"application/edi-x12":{"source":"iana","compressible":false},"application/edifact":{"source":"iana","compressible":false},"application/efi":{"source":"iana"},"application/elm+json":{"source":"iana","charset":"UTF-8","compressible":true},"application/elm+xml":{"source":"iana","compressible":true},"application/emergencycalldata.cap+xml":{"source":"iana","charset":"UTF-8","compressible":true},"application/emergencycalldata.comment+xml":{"source":"iana","compressible":true},"application/emergencycalldata.control+xml":{"source":"iana","compressible":true},"application/emergencycalldata.deviceinfo+xml":{"source":"iana","compressible":true},"application/emergencycalldata.ecall.msd":{"source":"iana"},"application/emergencycalldata.providerinfo+xml":{"source":"iana","compressible":true},"application/emergencycalldata.serviceinfo+xml":{"source":"iana","compressible":true},"application/emergencycalldata.subscriberinfo+xml":{"source":"iana","compressible":true},"application/emergencycalldata.veds+xml":{"source":"iana","compressible":true},"application/emma+xml":{"source":"iana","compressible":true,"extensions":["emma"]},"application/emotionml+xml":{"source":"iana","compressible":true,"extensions":["emotionml"]},"application/encaprtp":{"source":"iana"},"application/epp+xml":{"source":"iana","compressible":true},"application/epub+zip":{"source":"iana","compressible":false,"extensions":["epub"]},"application/eshop":{"source":"iana"},"application/exi":{"source":"iana","extensions":["exi"]},"application/expect-ct-report+json":{"source":"iana","compressible":true},"application/express":{"source":"iana","extensions":["exp"]},"application/fastinfoset":{"source":"iana"},"application/fastsoap":{"source":"iana"},"application/fdt+xml":{"source":"iana","compressible":true,"extensions":["fdt"]},"application/fhir+json":{"source":"iana","charset":"UTF-8","compressible":true},"application/fhir+xml":{"source":"iana","charset":"UTF-8","compressible":true},"application/fido.trusted-apps+json":{"compressible":true},"application/fits":{"source":"iana"},"application/flexfec":{"source":"iana"},"application/font-sfnt":{"source":"iana"},"application/font-tdpfr":{"source":"iana","extensions":["pfr"]},"application/font-woff":{"source":"iana","compressible":false},"application/framework-attributes+xml":{"source":"iana","compressible":true},"application/geo+json":{"source":"iana","compressible":true,"extensions":["geojson"]},"application/geo+json-seq":{"source":"iana"},"application/geopackage+sqlite3":{"source":"iana"},"application/geoxacml+xml":{"source":"iana","compressible":true},"application/gltf-buffer":{"source":"iana"},"application/gml+xml":{"source":"iana","compressible":true,"extensions":["gml"]},"application/gpx+xml":{"source":"apache","compressible":true,"extensions":["gpx"]},"application/gxf":{"source":"apache","extensions":["gxf"]},"application/gzip":{"source":"iana","compressible":false,"extensions":["gz"]},"application/h224":{"source":"iana"},"application/held+xml":{"source":"iana","compressible":true},"application/hjson":{"extensions":["hjson"]},"application/http":{"source":"iana"},"application/hyperstudio":{"source":"iana","extensions":["stk"]},"application/ibe-key-request+xml":{"source":"iana","compressible":true},"application/ibe-pkg-reply+xml":{"source":"iana","compressible":true},"application/ibe-pp-data":{"source":"iana"},"application/iges":{"source":"iana"},"application/im-iscomposing+xml":{"source":"iana","charset":"UTF-8","compressible":true},"application/index":{"source":"iana"},"application/index.cmd":{"source":"iana"},"application/index.obj":{"source":"iana"},"application/index.response":{"source":"iana"},"application/index.vnd":{"source":"iana"},"application/inkml+xml":{"source":"iana","compressible":true,"extensions":["ink","inkml"]},"application/iotp":{"source":"iana"},"application/ipfix":{"source":"iana","extensions":["ipfix"]},"application/ipp":{"source":"iana"},"application/isup":{"source":"iana"},"application/its+xml":{"source":"iana","compressible":true,"extensions":["its"]},"application/java-archive":{"source":"apache","compressible":false,"extensions":["jar","war","ear"]},"application/java-serialized-object":{"source":"apache","compressible":false,"extensions":["ser"]},"application/java-vm":{"source":"apache","compressible":false,"extensions":["class"]},"application/javascript":{"source":"iana","charset":"UTF-8","compressible":true,"extensions":["js","mjs"]},"application/jf2feed+json":{"source":"iana","compressible":true},"application/jose":{"source":"iana"},"application/jose+json":{"source":"iana","compressible":true},"application/jrd+json":{"source":"iana","compressible":true},"application/jscalendar+json":{"source":"iana","compressible":true},"application/json":{"source":"iana","charset":"UTF-8","compressible":true,"extensions":["json","map"]},"application/json-patch+json":{"source":"iana","compressible":true},"application/json-seq":{"source":"iana"},"application/json5":{"extensions":["json5"]},"application/jsonml+json":{"source":"apache","compressible":true,"extensions":["jsonml"]},"application/jwk+json":{"source":"iana","compressible":true},"application/jwk-set+json":{"source":"iana","compressible":true},"application/jwt":{"source":"iana"},"application/kpml-request+xml":{"source":"iana","compressible":true},"application/kpml-response+xml":{"source":"iana","compressible":true},"application/ld+json":{"source":"iana","compressible":true,"extensions":["jsonld"]},"application/lgr+xml":{"source":"iana","compressible":true,"extensions":["lgr"]},"application/link-format":{"source":"iana"},"application/load-control+xml":{"source":"iana","compressible":true},"application/lost+xml":{"source":"iana","compressible":true,"extensions":["lostxml"]},"application/lostsync+xml":{"source":"iana","compressible":true},"application/lpf+zip":{"source":"iana","compressible":false},"application/lxf":{"source":"iana"},"application/mac-binhex40":{"source":"iana","extensions":["hqx"]},"application/mac-compactpro":{"source":"apache","extensions":["cpt"]},"application/macwriteii":{"source":"iana"},"application/mads+xml":{"source":"iana","compressible":true,"extensions":["mads"]},"application/manifest+json":{"source":"iana","charset":"UTF-8","compressible":true,"extensions":["webmanifest"]},"application/marc":{"source":"iana","extensions":["mrc"]},"application/marcxml+xml":{"source":"iana","compressible":true,"extensions":["mrcx"]},"application/mathematica":{"source":"iana","extensions":["ma","nb","mb"]},"application/mathml+xml":{"source":"iana","compressible":true,"extensions":["mathml"]},"application/mathml-content+xml":{"source":"iana","compressible":true},"application/mathml-presentation+xml":{"source":"iana","compressible":true},"application/mbms-associated-procedure-description+xml":{"source":"iana","compressible":true},"application/mbms-deregister+xml":{"source":"iana","compressible":true},"application/mbms-envelope+xml":{"source":"iana","compressible":true},"application/mbms-msk+xml":{"source":"iana","compressible":true},"application/mbms-msk-response+xml":{"source":"iana","compressible":true},"application/mbms-protection-description+xml":{"source":"iana","compressible":true},"application/mbms-reception-report+xml":{"source":"iana","compressible":true},"application/mbms-register+xml":{"source":"iana","compressible":true},"application/mbms-register-response+xml":{"source":"iana","compressible":true},"application/mbms-schedule+xml":{"source":"iana","compressible":true},"application/mbms-user-service-description+xml":{"source":"iana","compressible":true},"application/mbox":{"source":"iana","extensions":["mbox"]},"application/media-policy-dataset+xml":{"source":"iana","compressible":true,"extensions":["mpf"]},"application/media_control+xml":{"source":"iana","compressible":true},"application/mediaservercontrol+xml":{"source":"iana","compressible":true,"extensions":["mscml"]},"application/merge-patch+json":{"source":"iana","compressible":true},"application/metalink+xml":{"source":"apache","compressible":true,"extensions":["metalink"]},"application/metalink4+xml":{"source":"iana","compressible":true,"extensions":["meta4"]},"application/mets+xml":{"source":"iana","compressible":true,"extensions":["mets"]},"application/mf4":{"source":"iana"},"application/mikey":{"source":"iana"},"application/mipc":{"source":"iana"},"application/missing-blocks+cbor-seq":{"source":"iana"},"application/mmt-aei+xml":{"source":"iana","compressible":true,"extensions":["maei"]},"application/mmt-usd+xml":{"source":"iana","compressible":true,"extensions":["musd"]},"application/mods+xml":{"source":"iana","compressible":true,"extensions":["mods"]},"application/moss-keys":{"source":"iana"},"application/moss-signature":{"source":"iana"},"application/mosskey-data":{"source":"iana"},"application/mosskey-request":{"source":"iana"},"application/mp21":{"source":"iana","extensions":["m21","mp21"]},"application/mp4":{"source":"iana","extensions":["mp4s","m4p"]},"application/mpeg4-generic":{"source":"iana"},"application/mpeg4-iod":{"source":"iana"},"application/mpeg4-iod-xmt":{"source":"iana"},"application/mrb-consumer+xml":{"source":"iana","compressible":true},"application/mrb-publish+xml":{"source":"iana","compressible":true},"application/msc-ivr+xml":{"source":"iana","charset":"UTF-8","compressible":true},"application/msc-mixer+xml":{"source":"iana","charset":"UTF-8","compressible":true},"application/msword":{"source":"iana","compressible":false,"extensions":["doc","dot"]},"application/mud+json":{"source":"iana","compressible":true},"application/multipart-core":{"source":"iana"},"application/mxf":{"source":"iana","extensions":["mxf"]},"application/n-quads":{"source":"iana","extensions":["nq"]},"application/n-triples":{"source":"iana","extensions":["nt"]},"application/nasdata":{"source":"iana"},"application/news-checkgroups":{"source":"iana","charset":"US-ASCII"},"application/news-groupinfo":{"source":"iana","charset":"US-ASCII"},"application/news-transmission":{"source":"iana"},"application/nlsml+xml":{"source":"iana","compressible":true},"application/node":{"source":"iana","extensions":["cjs"]},"application/nss":{"source":"iana"},"application/oauth-authz-req+jwt":{"source":"iana"},"application/oblivious-dns-message":{"source":"iana"},"application/ocsp-request":{"source":"iana"},"application/ocsp-response":{"source":"iana"},"application/octet-stream":{"source":"iana","compressible":false,"extensions":["bin","dms","lrf","mar","so","dist","distz","pkg","bpk","dump","elc","deploy","exe","dll","deb","dmg","iso","img","msi","msp","msm","buffer"]},"application/oda":{"source":"iana","extensions":["oda"]},"application/odm+xml":{"source":"iana","compressible":true},"application/odx":{"source":"iana"},"application/oebps-package+xml":{"source":"iana","compressible":true,"extensions":["opf"]},"application/ogg":{"source":"iana","compressible":false,"extensions":["ogx"]},"application/omdoc+xml":{"source":"apache","compressible":true,"extensions":["omdoc"]},"application/onenote":{"source":"apache","extensions":["onetoc","onetoc2","onetmp","onepkg"]},"application/opc-nodeset+xml":{"source":"iana","compressible":true},"application/oscore":{"source":"iana"},"application/oxps":{"source":"iana","extensions":["oxps"]},"application/p21":{"source":"iana"},"application/p21+zip":{"source":"iana","compressible":false},"application/p2p-overlay+xml":{"source":"iana","compressible":true,"extensions":["relo"]},"application/parityfec":{"source":"iana"},"application/passport":{"source":"iana"},"application/patch-ops-error+xml":{"source":"iana","compressible":true,"extensions":["xer"]},"application/pdf":{"source":"iana","compressible":false,"extensions":["pdf"]},"application/pdx":{"source":"iana"},"application/pem-certificate-chain":{"source":"iana"},"application/pgp-encrypted":{"source":"iana","compressible":false,"extensions":["pgp"]},"application/pgp-keys":{"source":"iana","extensions":["asc"]},"application/pgp-signature":{"source":"iana","extensions":["asc","sig"]},"application/pics-rules":{"source":"apache","extensions":["prf"]},"application/pidf+xml":{"source":"iana","charset":"UTF-8","compressible":true},"application/pidf-diff+xml":{"source":"iana","charset":"UTF-8","compressible":true},"application/pkcs10":{"source":"iana","extensions":["p10"]},"application/pkcs12":{"source":"iana"},"application/pkcs7-mime":{"source":"iana","extensions":["p7m","p7c"]},"application/pkcs7-signature":{"source":"iana","extensions":["p7s"]},"application/pkcs8":{"source":"iana","extensions":["p8"]},"application/pkcs8-encrypted":{"source":"iana"},"application/pkix-attr-cert":{"source":"iana","extensions":["ac"]},"application/pkix-cert":{"source":"iana","extensions":["cer"]},"application/pkix-crl":{"source":"iana","extensions":["crl"]},"application/pkix-pkipath":{"source":"iana","extensions":["pkipath"]},"application/pkixcmp":{"source":"iana","extensions":["pki"]},"application/pls+xml":{"source":"iana","compressible":true,"extensions":["pls"]},"application/poc-settings+xml":{"source":"iana","charset":"UTF-8","compressible":true},"application/postscript":{"source":"iana","compressible":true,"extensions":["ai","eps","ps"]},"application/ppsp-tracker+json":{"source":"iana","compressible":true},"application/problem+json":{"source":"iana","compressible":true},"application/problem+xml":{"source":"iana","compressible":true},"application/provenance+xml":{"source":"iana","compressible":true,"extensions":["provx"]},"application/prs.alvestrand.titrax-sheet":{"source":"iana"},"application/prs.cww":{"source":"iana","extensions":["cww"]},"application/prs.cyn":{"source":"iana","charset":"7-BIT"},"application/prs.hpub+zip":{"source":"iana","compressible":false},"application/prs.nprend":{"source":"iana"},"application/prs.plucker":{"source":"iana"},"application/prs.rdf-xml-crypt":{"source":"iana"},"application/prs.xsf+xml":{"source":"iana","compressible":true},"application/pskc+xml":{"source":"iana","compressible":true,"extensions":["pskcxml"]},"application/pvd+json":{"source":"iana","compressible":true},"application/qsig":{"source":"iana"},"application/raml+yaml":{"compressible":true,"extensions":["raml"]},"application/raptorfec":{"source":"iana"},"application/rdap+json":{"source":"iana","compressible":true},"application/rdf+xml":{"source":"iana","compressible":true,"extensions":["rdf","owl"]},"application/reginfo+xml":{"source":"iana","compressible":true,"extensions":["rif"]},"application/relax-ng-compact-syntax":{"source":"iana","extensions":["rnc"]},"application/remote-printing":{"source":"iana"},"application/reputon+json":{"source":"iana","compressible":true},"application/resource-lists+xml":{"source":"iana","compressible":true,"extensions":["rl"]},"application/resource-lists-diff+xml":{"source":"iana","compressible":true,"extensions":["rld"]},"application/rfc+xml":{"source":"iana","compressible":true},"application/riscos":{"source":"iana"},"application/rlmi+xml":{"source":"iana","compressible":true},"application/rls-services+xml":{"source":"iana","compressible":true,"extensions":["rs"]},"application/route-apd+xml":{"source":"iana","compressible":true,"extensions":["rapd"]},"application/route-s-tsid+xml":{"source":"iana","compressible":true,"extensions":["sls"]},"application/route-usd+xml":{"source":"iana","compressible":true,"extensions":["rusd"]},"application/rpki-ghostbusters":{"source":"iana","extensions":["gbr"]},"application/rpki-manifest":{"source":"iana","extensions":["mft"]},"application/rpki-publication":{"source":"iana"},"application/rpki-roa":{"source":"iana","extensions":["roa"]},"application/rpki-updown":{"source":"iana"},"application/rsd+xml":{"source":"apache","compressible":true,"extensions":["rsd"]},"application/rss+xml":{"source":"apache","compressible":true,"extensions":["rss"]},"application/rtf":{"source":"iana","compressible":true,"extensions":["rtf"]},"application/rtploopback":{"source":"iana"},"application/rtx":{"source":"iana"},"application/samlassertion+xml":{"source":"iana","compressible":true},"application/samlmetadata+xml":{"source":"iana","compressible":true},"application/sarif+json":{"source":"iana","compressible":true},"application/sarif-external-properties+json":{"source":"iana","compressible":true},"application/sbe":{"source":"iana"},"application/sbml+xml":{"source":"iana","compressible":true,"extensions":["sbml"]},"application/scaip+xml":{"source":"iana","compressible":true},"application/scim+json":{"source":"iana","compressible":true},"application/scvp-cv-request":{"source":"iana","extensions":["scq"]},"application/scvp-cv-response":{"source":"iana","extensions":["scs"]},"application/scvp-vp-request":{"source":"iana","extensions":["spq"]},"application/scvp-vp-response":{"source":"iana","extensions":["spp"]},"application/sdp":{"source":"iana","extensions":["sdp"]},"application/secevent+jwt":{"source":"iana"},"application/senml+cbor":{"source":"iana"},"application/senml+json":{"source":"iana","compressible":true},"application/senml+xml":{"source":"iana","compressible":true,"extensions":["senmlx"]},"application/senml-etch+cbor":{"source":"iana"},"application/senml-etch+json":{"source":"iana","compressible":true},"application/senml-exi":{"source":"iana"},"application/sensml+cbor":{"source":"iana"},"application/sensml+json":{"source":"iana","compressible":true},"application/sensml+xml":{"source":"iana","compressible":true,"extensions":["sensmlx"]},"application/sensml-exi":{"source":"iana"},"application/sep+xml":{"source":"iana","compressible":true},"application/sep-exi":{"source":"iana"},"application/session-info":{"source":"iana"},"application/set-payment":{"source":"iana"},"application/set-payment-initiation":{"source":"iana","extensions":["setpay"]},"application/set-registration":{"source":"iana"},"application/set-registration-initiation":{"source":"iana","extensions":["setreg"]},"application/sgml":{"source":"iana"},"application/sgml-open-catalog":{"source":"iana"},"application/shf+xml":{"source":"iana","compressible":true,"extensions":["shf"]},"application/sieve":{"source":"iana","extensions":["siv","sieve"]},"application/simple-filter+xml":{"source":"iana","compressible":true},"application/simple-message-summary":{"source":"iana"},"application/simplesymbolcontainer":{"source":"iana"},"application/sipc":{"source":"iana"},"application/slate":{"source":"iana"},"application/smil":{"source":"iana"},"application/smil+xml":{"source":"iana","compressible":true,"extensions":["smi","smil"]},"application/smpte336m":{"source":"iana"},"application/soap+fastinfoset":{"source":"iana"},"application/soap+xml":{"source":"iana","compressible":true},"application/sparql-query":{"source":"iana","extensions":["rq"]},"application/sparql-results+xml":{"source":"iana","compressible":true,"extensions":["srx"]},"application/spdx+json":{"source":"iana","compressible":true},"application/spirits-event+xml":{"source":"iana","compressible":true},"application/sql":{"source":"iana"},"application/srgs":{"source":"iana","extensions":["gram"]},"application/srgs+xml":{"source":"iana","compressible":true,"extensions":["grxml"]},"application/sru+xml":{"source":"iana","compressible":true,"extensions":["sru"]},"application/ssdl+xml":{"source":"apache","compressible":true,"extensions":["ssdl"]},"application/ssml+xml":{"source":"iana","compressible":true,"extensions":["ssml"]},"application/stix+json":{"source":"iana","compressible":true},"application/swid+xml":{"source":"iana","compressible":true,"extensions":["swidtag"]},"application/tamp-apex-update":{"source":"iana"},"application/tamp-apex-update-confirm":{"source":"iana"},"application/tamp-community-update":{"source":"iana"},"application/tamp-community-update-confirm":{"source":"iana"},"application/tamp-error":{"source":"iana"},"application/tamp-sequence-adjust":{"source":"iana"},"application/tamp-sequence-adjust-confirm":{"source":"iana"},"application/tamp-status-query":{"source":"iana"},"application/tamp-status-response":{"source":"iana"},"application/tamp-update":{"source":"iana"},"application/tamp-update-confirm":{"source":"iana"},"application/tar":{"compressible":true},"application/taxii+json":{"source":"iana","compressible":true},"application/td+json":{"source":"iana","compressible":true},"application/tei+xml":{"source":"iana","compressible":true,"extensions":["tei","teicorpus"]},"application/tetra_isi":{"source":"iana"},"application/thraud+xml":{"source":"iana","compressible":true,"extensions":["tfi"]},"application/timestamp-query":{"source":"iana"},"application/timestamp-reply":{"source":"iana"},"application/timestamped-data":{"source":"iana","extensions":["tsd"]},"application/tlsrpt+gzip":{"source":"iana"},"application/tlsrpt+json":{"source":"iana","compressible":true},"application/tnauthlist":{"source":"iana"},"application/token-introspection+jwt":{"source":"iana"},"application/toml":{"compressible":true,"extensions":["toml"]},"application/trickle-ice-sdpfrag":{"source":"iana"},"application/trig":{"source":"iana","extensions":["trig"]},"application/ttml+xml":{"source":"iana","compressible":true,"extensions":["ttml"]},"application/tve-trigger":{"source":"iana"},"application/tzif":{"source":"iana"},"application/tzif-leap":{"source":"iana"},"application/ubjson":{"compressible":false,"extensions":["ubj"]},"application/ulpfec":{"source":"iana"},"application/urc-grpsheet+xml":{"source":"iana","compressible":true},"application/urc-ressheet+xml":{"source":"iana","compressible":true,"extensions":["rsheet"]},"application/urc-targetdesc+xml":{"source":"iana","compressible":true,"extensions":["td"]},"application/urc-uisocketdesc+xml":{"source":"iana","compressible":true},"application/vcard+json":{"source":"iana","compressible":true},"application/vcard+xml":{"source":"iana","compressible":true},"application/vemmi":{"source":"iana"},"application/vividence.scriptfile":{"source":"apache"},"application/vnd.1000minds.decision-model+xml":{"source":"iana","compressible":true,"extensions":["1km"]},"application/vnd.3gpp-prose+xml":{"source":"iana","compressible":true},"application/vnd.3gpp-prose-pc3ch+xml":{"source":"iana","compressible":true},"application/vnd.3gpp-v2x-local-service-information":{"source":"iana"},"application/vnd.3gpp.5gnas":{"source":"iana"},"application/vnd.3gpp.access-transfer-events+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.bsf+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.gmop+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.gtpc":{"source":"iana"},"application/vnd.3gpp.interworking-data":{"source":"iana"},"application/vnd.3gpp.lpp":{"source":"iana"},"application/vnd.3gpp.mc-signalling-ear":{"source":"iana"},"application/vnd.3gpp.mcdata-affiliation-command+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcdata-info+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcdata-payload":{"source":"iana"},"application/vnd.3gpp.mcdata-service-config+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcdata-signalling":{"source":"iana"},"application/vnd.3gpp.mcdata-ue-config+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcdata-user-profile+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcptt-affiliation-command+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcptt-floor-request+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcptt-info+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcptt-location-info+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcptt-mbms-usage-info+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcptt-service-config+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcptt-signed+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcptt-ue-config+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcptt-ue-init-config+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcptt-user-profile+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcvideo-affiliation-command+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcvideo-affiliation-info+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcvideo-info+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcvideo-location-info+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcvideo-mbms-usage-info+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcvideo-service-config+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcvideo-transmission-request+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcvideo-ue-config+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcvideo-user-profile+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mid-call+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.ngap":{"source":"iana"},"application/vnd.3gpp.pfcp":{"source":"iana"},"application/vnd.3gpp.pic-bw-large":{"source":"iana","extensions":["plb"]},"application/vnd.3gpp.pic-bw-small":{"source":"iana","extensions":["psb"]},"application/vnd.3gpp.pic-bw-var":{"source":"iana","extensions":["pvb"]},"application/vnd.3gpp.s1ap":{"source":"iana"},"application/vnd.3gpp.sms":{"source":"iana"},"application/vnd.3gpp.sms+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.srvcc-ext+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.srvcc-info+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.state-and-event-info+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.ussd+xml":{"source":"iana","compressible":true},"application/vnd.3gpp2.bcmcsinfo+xml":{"source":"iana","compressible":true},"application/vnd.3gpp2.sms":{"source":"iana"},"application/vnd.3gpp2.tcap":{"source":"iana","extensions":["tcap"]},"application/vnd.3lightssoftware.imagescal":{"source":"iana"},"application/vnd.3m.post-it-notes":{"source":"iana","extensions":["pwn"]},"application/vnd.accpac.simply.aso":{"source":"iana","extensions":["aso"]},"application/vnd.accpac.simply.imp":{"source":"iana","extensions":["imp"]},"application/vnd.acucobol":{"source":"iana","extensions":["acu"]},"application/vnd.acucorp":{"source":"iana","extensions":["atc","acutc"]},"application/vnd.adobe.air-application-installer-package+zip":{"source":"apache","compressible":false,"extensions":["air"]},"application/vnd.adobe.flash.movie":{"source":"iana"},"application/vnd.adobe.formscentral.fcdt":{"source":"iana","extensions":["fcdt"]},"application/vnd.adobe.fxp":{"source":"iana","extensions":["fxp","fxpl"]},"application/vnd.adobe.partial-upload":{"source":"iana"},"application/vnd.adobe.xdp+xml":{"source":"iana","compressible":true,"extensions":["xdp"]},"application/vnd.adobe.xfdf":{"source":"iana","extensions":["xfdf"]},"application/vnd.aether.imp":{"source":"iana"},"application/vnd.afpc.afplinedata":{"source":"iana"},"application/vnd.afpc.afplinedata-pagedef":{"source":"iana"},"application/vnd.afpc.cmoca-cmresource":{"source":"iana"},"application/vnd.afpc.foca-charset":{"source":"iana"},"application/vnd.afpc.foca-codedfont":{"source":"iana"},"application/vnd.afpc.foca-codepage":{"source":"iana"},"application/vnd.afpc.modca":{"source":"iana"},"application/vnd.afpc.modca-cmtable":{"source":"iana"},"application/vnd.afpc.modca-formdef":{"source":"iana"},"application/vnd.afpc.modca-mediummap":{"source":"iana"},"application/vnd.afpc.modca-objectcontainer":{"source":"iana"},"application/vnd.afpc.modca-overlay":{"source":"iana"},"application/vnd.afpc.modca-pagesegment":{"source":"iana"},"application/vnd.age":{"source":"iana","extensions":["age"]},"application/vnd.ah-barcode":{"source":"iana"},"application/vnd.ahead.space":{"source":"iana","extensions":["ahead"]},"application/vnd.airzip.filesecure.azf":{"source":"iana","extensions":["azf"]},"application/vnd.airzip.filesecure.azs":{"source":"iana","extensions":["azs"]},"application/vnd.amadeus+json":{"source":"iana","compressible":true},"application/vnd.amazon.ebook":{"source":"apache","extensions":["azw"]},"application/vnd.amazon.mobi8-ebook":{"source":"iana"},"application/vnd.americandynamics.acc":{"source":"iana","extensions":["acc"]},"application/vnd.amiga.ami":{"source":"iana","extensions":["ami"]},"application/vnd.amundsen.maze+xml":{"source":"iana","compressible":true},"application/vnd.android.ota":{"source":"iana"},"application/vnd.android.package-archive":{"source":"apache","compressible":false,"extensions":["apk"]},"application/vnd.anki":{"source":"iana"},"application/vnd.anser-web-certificate-issue-initiation":{"source":"iana","extensions":["cii"]},"application/vnd.anser-web-funds-transfer-initiation":{"source":"apache","extensions":["fti"]},"application/vnd.antix.game-component":{"source":"iana","extensions":["atx"]},"application/vnd.apache.arrow.file":{"source":"iana"},"application/vnd.apache.arrow.stream":{"source":"iana"},"application/vnd.apache.thrift.binary":{"source":"iana"},"application/vnd.apache.thrift.compact":{"source":"iana"},"application/vnd.apache.thrift.json":{"source":"iana"},"application/vnd.api+json":{"source":"iana","compressible":true},"application/vnd.aplextor.warrp+json":{"source":"iana","compressible":true},"application/vnd.apothekende.reservation+json":{"source":"iana","compressible":true},"application/vnd.apple.installer+xml":{"source":"iana","compressible":true,"extensions":["mpkg"]},"application/vnd.apple.keynote":{"source":"iana","extensions":["key"]},"application/vnd.apple.mpegurl":{"source":"iana","extensions":["m3u8"]},"application/vnd.apple.numbers":{"source":"iana","extensions":["numbers"]},"application/vnd.apple.pages":{"source":"iana","extensions":["pages"]},"application/vnd.apple.pkpass":{"compressible":false,"extensions":["pkpass"]},"application/vnd.arastra.swi":{"source":"iana"},"application/vnd.aristanetworks.swi":{"source":"iana","extensions":["swi"]},"application/vnd.artisan+json":{"source":"iana","compressible":true},"application/vnd.artsquare":{"source":"iana"},"application/vnd.astraea-software.iota":{"source":"iana","extensions":["iota"]},"application/vnd.audiograph":{"source":"iana","extensions":["aep"]},"application/vnd.autopackage":{"source":"iana"},"application/vnd.avalon+json":{"source":"iana","compressible":true},"application/vnd.avistar+xml":{"source":"iana","compressible":true},"application/vnd.balsamiq.bmml+xml":{"source":"iana","compressible":true,"extensions":["bmml"]},"application/vnd.balsamiq.bmpr":{"source":"iana"},"application/vnd.banana-accounting":{"source":"iana"},"application/vnd.bbf.usp.error":{"source":"iana"},"application/vnd.bbf.usp.msg":{"source":"iana"},"application/vnd.bbf.usp.msg+json":{"source":"iana","compressible":true},"application/vnd.bekitzur-stech+json":{"source":"iana","compressible":true},"application/vnd.bint.med-content":{"source":"iana"},"application/vnd.biopax.rdf+xml":{"source":"iana","compressible":true},"application/vnd.blink-idb-value-wrapper":{"source":"iana"},"application/vnd.blueice.multipass":{"source":"iana","extensions":["mpm"]},"application/vnd.bluetooth.ep.oob":{"source":"iana"},"application/vnd.bluetooth.le.oob":{"source":"iana"},"application/vnd.bmi":{"source":"iana","extensions":["bmi"]},"application/vnd.bpf":{"source":"iana"},"application/vnd.bpf3":{"source":"iana"},"application/vnd.businessobjects":{"source":"iana","extensions":["rep"]},"application/vnd.byu.uapi+json":{"source":"iana","compressible":true},"application/vnd.cab-jscript":{"source":"iana"},"application/vnd.canon-cpdl":{"source":"iana"},"application/vnd.canon-lips":{"source":"iana"},"application/vnd.capasystems-pg+json":{"source":"iana","compressible":true},"application/vnd.cendio.thinlinc.clientconf":{"source":"iana"},"application/vnd.century-systems.tcp_stream":{"source":"iana"},"application/vnd.chemdraw+xml":{"source":"iana","compressible":true,"extensions":["cdxml"]},"application/vnd.chess-pgn":{"source":"iana"},"application/vnd.chipnuts.karaoke-mmd":{"source":"iana","extensions":["mmd"]},"application/vnd.ciedi":{"source":"iana"},"application/vnd.cinderella":{"source":"iana","extensions":["cdy"]},"application/vnd.cirpack.isdn-ext":{"source":"iana"},"application/vnd.citationstyles.style+xml":{"source":"iana","compressible":true,"extensions":["csl"]},"application/vnd.claymore":{"source":"iana","extensions":["cla"]},"application/vnd.cloanto.rp9":{"source":"iana","extensions":["rp9"]},"application/vnd.clonk.c4group":{"source":"iana","extensions":["c4g","c4d","c4f","c4p","c4u"]},"application/vnd.cluetrust.cartomobile-config":{"source":"iana","extensions":["c11amc"]},"application/vnd.cluetrust.cartomobile-config-pkg":{"source":"iana","extensions":["c11amz"]},"application/vnd.coffeescript":{"source":"iana"},"application/vnd.collabio.xodocuments.document":{"source":"iana"},"application/vnd.collabio.xodocuments.document-template":{"source":"iana"},"application/vnd.collabio.xodocuments.presentation":{"source":"iana"},"application/vnd.collabio.xodocuments.presentation-template":{"source":"iana"},"application/vnd.collabio.xodocuments.spreadsheet":{"source":"iana"},"application/vnd.collabio.xodocuments.spreadsheet-template":{"source":"iana"},"application/vnd.collection+json":{"source":"iana","compressible":true},"application/vnd.collection.doc+json":{"source":"iana","compressible":true},"application/vnd.collection.next+json":{"source":"iana","compressible":true},"application/vnd.comicbook+zip":{"source":"iana","compressible":false},"application/vnd.comicbook-rar":{"source":"iana"},"application/vnd.commerce-battelle":{"source":"iana"},"application/vnd.commonspace":{"source":"iana","extensions":["csp"]},"application/vnd.contact.cmsg":{"source":"iana","extensions":["cdbcmsg"]},"application/vnd.coreos.ignition+json":{"source":"iana","compressible":true},"application/vnd.cosmocaller":{"source":"iana","extensions":["cmc"]},"application/vnd.crick.clicker":{"source":"iana","extensions":["clkx"]},"application/vnd.crick.clicker.keyboard":{"source":"iana","extensions":["clkk"]},"application/vnd.crick.clicker.palette":{"source":"iana","extensions":["clkp"]},"application/vnd.crick.clicker.template":{"source":"iana","extensions":["clkt"]},"application/vnd.crick.clicker.wordbank":{"source":"iana","extensions":["clkw"]},"application/vnd.criticaltools.wbs+xml":{"source":"iana","compressible":true,"extensions":["wbs"]},"application/vnd.cryptii.pipe+json":{"source":"iana","compressible":true},"application/vnd.crypto-shade-file":{"source":"iana"},"application/vnd.cryptomator.encrypted":{"source":"iana"},"application/vnd.cryptomator.vault":{"source":"iana"},"application/vnd.ctc-posml":{"source":"iana","extensions":["pml"]},"application/vnd.ctct.ws+xml":{"source":"iana","compressible":true},"application/vnd.cups-pdf":{"source":"iana"},"application/vnd.cups-postscript":{"source":"iana"},"application/vnd.cups-ppd":{"source":"iana","extensions":["ppd"]},"application/vnd.cups-raster":{"source":"iana"},"application/vnd.cups-raw":{"source":"iana"},"application/vnd.curl":{"source":"iana"},"application/vnd.curl.car":{"source":"apache","extensions":["car"]},"application/vnd.curl.pcurl":{"source":"apache","extensions":["pcurl"]},"application/vnd.cyan.dean.root+xml":{"source":"iana","compressible":true},"application/vnd.cybank":{"source":"iana"},"application/vnd.cyclonedx+json":{"source":"iana","compressible":true},"application/vnd.cyclonedx+xml":{"source":"iana","compressible":true},"application/vnd.d2l.coursepackage1p0+zip":{"source":"iana","compressible":false},"application/vnd.d3m-dataset":{"source":"iana"},"application/vnd.d3m-problem":{"source":"iana"},"application/vnd.dart":{"source":"iana","compressible":true,"extensions":["dart"]},"application/vnd.data-vision.rdz":{"source":"iana","extensions":["rdz"]},"application/vnd.datapackage+json":{"source":"iana","compressible":true},"application/vnd.dataresource+json":{"source":"iana","compressible":true},"application/vnd.dbf":{"source":"iana","extensions":["dbf"]},"application/vnd.debian.binary-package":{"source":"iana"},"application/vnd.dece.data":{"source":"iana","extensions":["uvf","uvvf","uvd","uvvd"]},"application/vnd.dece.ttml+xml":{"source":"iana","compressible":true,"extensions":["uvt","uvvt"]},"application/vnd.dece.unspecified":{"source":"iana","extensions":["uvx","uvvx"]},"application/vnd.dece.zip":{"source":"iana","extensions":["uvz","uvvz"]},"application/vnd.denovo.fcselayout-link":{"source":"iana","extensions":["fe_launch"]},"application/vnd.desmume.movie":{"source":"iana"},"application/vnd.dir-bi.plate-dl-nosuffix":{"source":"iana"},"application/vnd.dm.delegation+xml":{"source":"iana","compressible":true},"application/vnd.dna":{"source":"iana","extensions":["dna"]},"application/vnd.document+json":{"source":"iana","compressible":true},"application/vnd.dolby.mlp":{"source":"apache","extensions":["mlp"]},"application/vnd.dolby.mobile.1":{"source":"iana"},"application/vnd.dolby.mobile.2":{"source":"iana"},"application/vnd.doremir.scorecloud-binary-document":{"source":"iana"},"application/vnd.dpgraph":{"source":"iana","extensions":["dpg"]},"application/vnd.dreamfactory":{"source":"iana","extensions":["dfac"]},"application/vnd.drive+json":{"source":"iana","compressible":true},"application/vnd.ds-keypoint":{"source":"apache","extensions":["kpxx"]},"application/vnd.dtg.local":{"source":"iana"},"application/vnd.dtg.local.flash":{"source":"iana"},"application/vnd.dtg.local.html":{"source":"iana"},"application/vnd.dvb.ait":{"source":"iana","extensions":["ait"]},"application/vnd.dvb.dvbisl+xml":{"source":"iana","compressible":true},"application/vnd.dvb.dvbj":{"source":"iana"},"application/vnd.dvb.esgcontainer":{"source":"iana"},"application/vnd.dvb.ipdcdftnotifaccess":{"source":"iana"},"application/vnd.dvb.ipdcesgaccess":{"source":"iana"},"application/vnd.dvb.ipdcesgaccess2":{"source":"iana"},"application/vnd.dvb.ipdcesgpdd":{"source":"iana"},"application/vnd.dvb.ipdcroaming":{"source":"iana"},"application/vnd.dvb.iptv.alfec-base":{"source":"iana"},"application/vnd.dvb.iptv.alfec-enhancement":{"source":"iana"},"application/vnd.dvb.notif-aggregate-root+xml":{"source":"iana","compressible":true},"application/vnd.dvb.notif-container+xml":{"source":"iana","compressible":true},"application/vnd.dvb.notif-generic+xml":{"source":"iana","compressible":true},"application/vnd.dvb.notif-ia-msglist+xml":{"source":"iana","compressible":true},"application/vnd.dvb.notif-ia-registration-request+xml":{"source":"iana","compressible":true},"application/vnd.dvb.notif-ia-registration-response+xml":{"source":"iana","compressible":true},"application/vnd.dvb.notif-init+xml":{"source":"iana","compressible":true},"application/vnd.dvb.pfr":{"source":"iana"},"application/vnd.dvb.service":{"source":"iana","extensions":["svc"]},"application/vnd.dxr":{"source":"iana"},"application/vnd.dynageo":{"source":"iana","extensions":["geo"]},"application/vnd.dzr":{"source":"iana"},"application/vnd.easykaraoke.cdgdownload":{"source":"iana"},"application/vnd.ecdis-update":{"source":"iana"},"application/vnd.ecip.rlp":{"source":"iana"},"application/vnd.eclipse.ditto+json":{"source":"iana","compressible":true},"application/vnd.ecowin.chart":{"source":"iana","extensions":["mag"]},"application/vnd.ecowin.filerequest":{"source":"iana"},"application/vnd.ecowin.fileupdate":{"source":"iana"},"application/vnd.ecowin.series":{"source":"iana"},"application/vnd.ecowin.seriesrequest":{"source":"iana"},"application/vnd.ecowin.seriesupdate":{"source":"iana"},"application/vnd.efi.img":{"source":"iana"},"application/vnd.efi.iso":{"source":"iana"},"application/vnd.emclient.accessrequest+xml":{"source":"iana","compressible":true},"application/vnd.enliven":{"source":"iana","extensions":["nml"]},"application/vnd.enphase.envoy":{"source":"iana"},"application/vnd.eprints.data+xml":{"source":"iana","compressible":true},"application/vnd.epson.esf":{"source":"iana","extensions":["esf"]},"application/vnd.epson.msf":{"source":"iana","extensions":["msf"]},"application/vnd.epson.quickanime":{"source":"iana","extensions":["qam"]},"application/vnd.epson.salt":{"source":"iana","extensions":["slt"]},"application/vnd.epson.ssf":{"source":"iana","extensions":["ssf"]},"application/vnd.ericsson.quickcall":{"source":"iana"},"application/vnd.espass-espass+zip":{"source":"iana","compressible":false},"application/vnd.eszigno3+xml":{"source":"iana","compressible":true,"extensions":["es3","et3"]},"application/vnd.etsi.aoc+xml":{"source":"iana","compressible":true},"application/vnd.etsi.asic-e+zip":{"source":"iana","compressible":false},"application/vnd.etsi.asic-s+zip":{"source":"iana","compressible":false},"application/vnd.etsi.cug+xml":{"source":"iana","compressible":true},"application/vnd.etsi.iptvcommand+xml":{"source":"iana","compressible":true},"application/vnd.etsi.iptvdiscovery+xml":{"source":"iana","compressible":true},"application/vnd.etsi.iptvprofile+xml":{"source":"iana","compressible":true},"application/vnd.etsi.iptvsad-bc+xml":{"source":"iana","compressible":true},"application/vnd.etsi.iptvsad-cod+xml":{"source":"iana","compressible":true},"application/vnd.etsi.iptvsad-npvr+xml":{"source":"iana","compressible":true},"application/vnd.etsi.iptvservice+xml":{"source":"iana","compressible":true},"application/vnd.etsi.iptvsync+xml":{"source":"iana","compressible":true},"application/vnd.etsi.iptvueprofile+xml":{"source":"iana","compressible":true},"application/vnd.etsi.mcid+xml":{"source":"iana","compressible":true},"application/vnd.etsi.mheg5":{"source":"iana"},"application/vnd.etsi.overload-control-policy-dataset+xml":{"source":"iana","compressible":true},"application/vnd.etsi.pstn+xml":{"source":"iana","compressible":true},"application/vnd.etsi.sci+xml":{"source":"iana","compressible":true},"application/vnd.etsi.simservs+xml":{"source":"iana","compressible":true},"application/vnd.etsi.timestamp-token":{"source":"iana"},"application/vnd.etsi.tsl+xml":{"source":"iana","compressible":true},"application/vnd.etsi.tsl.der":{"source":"iana"},"application/vnd.eu.kasparian.car+json":{"source":"iana","compressible":true},"application/vnd.eudora.data":{"source":"iana"},"application/vnd.evolv.ecig.profile":{"source":"iana"},"application/vnd.evolv.ecig.settings":{"source":"iana"},"application/vnd.evolv.ecig.theme":{"source":"iana"},"application/vnd.exstream-empower+zip":{"source":"iana","compressible":false},"application/vnd.exstream-package":{"source":"iana"},"application/vnd.ezpix-album":{"source":"iana","extensions":["ez2"]},"application/vnd.ezpix-package":{"source":"iana","extensions":["ez3"]},"application/vnd.f-secure.mobile":{"source":"iana"},"application/vnd.familysearch.gedcom+zip":{"source":"iana","compressible":false},"application/vnd.fastcopy-disk-image":{"source":"iana"},"application/vnd.fdf":{"source":"iana","extensions":["fdf"]},"application/vnd.fdsn.mseed":{"source":"iana","extensions":["mseed"]},"application/vnd.fdsn.seed":{"source":"iana","extensions":["seed","dataless"]},"application/vnd.ffsns":{"source":"iana"},"application/vnd.ficlab.flb+zip":{"source":"iana","compressible":false},"application/vnd.filmit.zfc":{"source":"iana"},"application/vnd.fints":{"source":"iana"},"application/vnd.firemonkeys.cloudcell":{"source":"iana"},"application/vnd.flographit":{"source":"iana","extensions":["gph"]},"application/vnd.fluxtime.clip":{"source":"iana","extensions":["ftc"]},"application/vnd.font-fontforge-sfd":{"source":"iana"},"application/vnd.framemaker":{"source":"iana","extensions":["fm","frame","maker","book"]},"application/vnd.frogans.fnc":{"source":"iana","extensions":["fnc"]},"application/vnd.frogans.ltf":{"source":"iana","extensions":["ltf"]},"application/vnd.fsc.weblaunch":{"source":"iana","extensions":["fsc"]},"application/vnd.fujifilm.fb.docuworks":{"source":"iana"},"application/vnd.fujifilm.fb.docuworks.binder":{"source":"iana"},"application/vnd.fujifilm.fb.docuworks.container":{"source":"iana"},"application/vnd.fujifilm.fb.jfi+xml":{"source":"iana","compressible":true},"application/vnd.fujitsu.oasys":{"source":"iana","extensions":["oas"]},"application/vnd.fujitsu.oasys2":{"source":"iana","extensions":["oa2"]},"application/vnd.fujitsu.oasys3":{"source":"iana","extensions":["oa3"]},"application/vnd.fujitsu.oasysgp":{"source":"iana","extensions":["fg5"]},"application/vnd.fujitsu.oasysprs":{"source":"iana","extensions":["bh2"]},"application/vnd.fujixerox.art-ex":{"source":"iana"},"application/vnd.fujixerox.art4":{"source":"iana"},"application/vnd.fujixerox.ddd":{"source":"iana","extensions":["ddd"]},"application/vnd.fujixerox.docuworks":{"source":"iana","extensions":["xdw"]},"application/vnd.fujixerox.docuworks.binder":{"source":"iana","extensions":["xbd"]},"application/vnd.fujixerox.docuworks.container":{"source":"iana"},"application/vnd.fujixerox.hbpl":{"source":"iana"},"application/vnd.fut-misnet":{"source":"iana"},"application/vnd.futoin+cbor":{"source":"iana"},"application/vnd.futoin+json":{"source":"iana","compressible":true},"application/vnd.fuzzysheet":{"source":"iana","extensions":["fzs"]},"application/vnd.genomatix.tuxedo":{"source":"iana","extensions":["txd"]},"application/vnd.gentics.grd+json":{"source":"iana","compressible":true},"application/vnd.geo+json":{"source":"iana","compressible":true},"application/vnd.geocube+xml":{"source":"iana","compressible":true},"application/vnd.geogebra.file":{"source":"iana","extensions":["ggb"]},"application/vnd.geogebra.slides":{"source":"iana"},"application/vnd.geogebra.tool":{"source":"iana","extensions":["ggt"]},"application/vnd.geometry-explorer":{"source":"iana","extensions":["gex","gre"]},"application/vnd.geonext":{"source":"iana","extensions":["gxt"]},"application/vnd.geoplan":{"source":"iana","extensions":["g2w"]},"application/vnd.geospace":{"source":"iana","extensions":["g3w"]},"application/vnd.gerber":{"source":"iana"},"application/vnd.globalplatform.card-content-mgt":{"source":"iana"},"application/vnd.globalplatform.card-content-mgt-response":{"source":"iana"},"application/vnd.gmx":{"source":"iana","extensions":["gmx"]},"application/vnd.google-apps.document":{"compressible":false,"extensions":["gdoc"]},"application/vnd.google-apps.presentation":{"compressible":false,"extensions":["gslides"]},"application/vnd.google-apps.spreadsheet":{"compressible":false,"extensions":["gsheet"]},"application/vnd.google-earth.kml+xml":{"source":"iana","compressible":true,"extensions":["kml"]},"application/vnd.google-earth.kmz":{"source":"iana","compressible":false,"extensions":["kmz"]},"application/vnd.gov.sk.e-form+xml":{"source":"iana","compressible":true},"application/vnd.gov.sk.e-form+zip":{"source":"iana","compressible":false},"application/vnd.gov.sk.xmldatacontainer+xml":{"source":"iana","compressible":true},"application/vnd.grafeq":{"source":"iana","extensions":["gqf","gqs"]},"application/vnd.gridmp":{"source":"iana"},"application/vnd.groove-account":{"source":"iana","extensions":["gac"]},"application/vnd.groove-help":{"source":"iana","extensions":["ghf"]},"application/vnd.groove-identity-message":{"source":"iana","extensions":["gim"]},"application/vnd.groove-injector":{"source":"iana","extensions":["grv"]},"application/vnd.groove-tool-message":{"source":"iana","extensions":["gtm"]},"application/vnd.groove-tool-template":{"source":"iana","extensions":["tpl"]},"application/vnd.groove-vcard":{"source":"iana","extensions":["vcg"]},"application/vnd.hal+json":{"source":"iana","compressible":true},"application/vnd.hal+xml":{"source":"iana","compressible":true,"extensions":["hal"]},"application/vnd.handheld-entertainment+xml":{"source":"iana","compressible":true,"extensions":["zmm"]},"application/vnd.hbci":{"source":"iana","extensions":["hbci"]},"application/vnd.hc+json":{"source":"iana","compressible":true},"application/vnd.hcl-bireports":{"source":"iana"},"application/vnd.hdt":{"source":"iana"},"application/vnd.heroku+json":{"source":"iana","compressible":true},"application/vnd.hhe.lesson-player":{"source":"iana","extensions":["les"]},"application/vnd.hl7cda+xml":{"source":"iana","charset":"UTF-8","compressible":true},"application/vnd.hl7v2+xml":{"source":"iana","charset":"UTF-8","compressible":true},"application/vnd.hp-hpgl":{"source":"iana","extensions":["hpgl"]},"application/vnd.hp-hpid":{"source":"iana","extensions":["hpid"]},"application/vnd.hp-hps":{"source":"iana","extensions":["hps"]},"application/vnd.hp-jlyt":{"source":"iana","extensions":["jlt"]},"application/vnd.hp-pcl":{"source":"iana","extensions":["pcl"]},"application/vnd.hp-pclxl":{"source":"iana","extensions":["pclxl"]},"application/vnd.httphone":{"source":"iana"},"application/vnd.hydrostatix.sof-data":{"source":"iana","extensions":["sfd-hdstx"]},"application/vnd.hyper+json":{"source":"iana","compressible":true},"application/vnd.hyper-item+json":{"source":"iana","compressible":true},"application/vnd.hyperdrive+json":{"source":"iana","compressible":true},"application/vnd.hzn-3d-crossword":{"source":"iana"},"application/vnd.ibm.afplinedata":{"source":"iana"},"application/vnd.ibm.electronic-media":{"source":"iana"},"application/vnd.ibm.minipay":{"source":"iana","extensions":["mpy"]},"application/vnd.ibm.modcap":{"source":"iana","extensions":["afp","listafp","list3820"]},"application/vnd.ibm.rights-management":{"source":"iana","extensions":["irm"]},"application/vnd.ibm.secure-container":{"source":"iana","extensions":["sc"]},"application/vnd.iccprofile":{"source":"iana","extensions":["icc","icm"]},"application/vnd.ieee.1905":{"source":"iana"},"application/vnd.igloader":{"source":"iana","extensions":["igl"]},"application/vnd.imagemeter.folder+zip":{"source":"iana","compressible":false},"application/vnd.imagemeter.image+zip":{"source":"iana","compressible":false},"application/vnd.immervision-ivp":{"source":"iana","extensions":["ivp"]},"application/vnd.immervision-ivu":{"source":"iana","extensions":["ivu"]},"application/vnd.ims.imsccv1p1":{"source":"iana"},"application/vnd.ims.imsccv1p2":{"source":"iana"},"application/vnd.ims.imsccv1p3":{"source":"iana"},"application/vnd.ims.lis.v2.result+json":{"source":"iana","compressible":true},"application/vnd.ims.lti.v2.toolconsumerprofile+json":{"source":"iana","compressible":true},"application/vnd.ims.lti.v2.toolproxy+json":{"source":"iana","compressible":true},"application/vnd.ims.lti.v2.toolproxy.id+json":{"source":"iana","compressible":true},"application/vnd.ims.lti.v2.toolsettings+json":{"source":"iana","compressible":true},"application/vnd.ims.lti.v2.toolsettings.simple+json":{"source":"iana","compressible":true},"application/vnd.informedcontrol.rms+xml":{"source":"iana","compressible":true},"application/vnd.informix-visionary":{"source":"iana"},"application/vnd.infotech.project":{"source":"iana"},"application/vnd.infotech.project+xml":{"source":"iana","compressible":true},"application/vnd.innopath.wamp.notification":{"source":"iana"},"application/vnd.insors.igm":{"source":"iana","extensions":["igm"]},"application/vnd.intercon.formnet":{"source":"iana","extensions":["xpw","xpx"]},"application/vnd.intergeo":{"source":"iana","extensions":["i2g"]},"application/vnd.intertrust.digibox":{"source":"iana"},"application/vnd.intertrust.nncp":{"source":"iana"},"application/vnd.intu.qbo":{"source":"iana","extensions":["qbo"]},"application/vnd.intu.qfx":{"source":"iana","extensions":["qfx"]},"application/vnd.iptc.g2.catalogitem+xml":{"source":"iana","compressible":true},"application/vnd.iptc.g2.conceptitem+xml":{"source":"iana","compressible":true},"application/vnd.iptc.g2.knowledgeitem+xml":{"source":"iana","compressible":true},"application/vnd.iptc.g2.newsitem+xml":{"source":"iana","compressible":true},"application/vnd.iptc.g2.newsmessage+xml":{"source":"iana","compressible":true},"application/vnd.iptc.g2.packageitem+xml":{"source":"iana","compressible":true},"application/vnd.iptc.g2.planningitem+xml":{"source":"iana","compressible":true},"application/vnd.ipunplugged.rcprofile":{"source":"iana","extensions":["rcprofile"]},"application/vnd.irepository.package+xml":{"source":"iana","compressible":true,"extensions":["irp"]},"application/vnd.is-xpr":{"source":"iana","extensions":["xpr"]},"application/vnd.isac.fcs":{"source":"iana","extensions":["fcs"]},"application/vnd.iso11783-10+zip":{"source":"iana","compressible":false},"application/vnd.jam":{"source":"iana","extensions":["jam"]},"application/vnd.japannet-directory-service":{"source":"iana"},"application/vnd.japannet-jpnstore-wakeup":{"source":"iana"},"application/vnd.japannet-payment-wakeup":{"source":"iana"},"application/vnd.japannet-registration":{"source":"iana"},"application/vnd.japannet-registration-wakeup":{"source":"iana"},"application/vnd.japannet-setstore-wakeup":{"source":"iana"},"application/vnd.japannet-verification":{"source":"iana"},"application/vnd.japannet-verification-wakeup":{"source":"iana"},"application/vnd.jcp.javame.midlet-rms":{"source":"iana","extensions":["rms"]},"application/vnd.jisp":{"source":"iana","extensions":["jisp"]},"application/vnd.joost.joda-archive":{"source":"iana","extensions":["joda"]},"application/vnd.jsk.isdn-ngn":{"source":"iana"},"application/vnd.kahootz":{"source":"iana","extensions":["ktz","ktr"]},"application/vnd.kde.karbon":{"source":"iana","extensions":["karbon"]},"application/vnd.kde.kchart":{"source":"iana","extensions":["chrt"]},"application/vnd.kde.kformula":{"source":"iana","extensions":["kfo"]},"application/vnd.kde.kivio":{"source":"iana","extensions":["flw"]},"application/vnd.kde.kontour":{"source":"iana","extensions":["kon"]},"application/vnd.kde.kpresenter":{"source":"iana","extensions":["kpr","kpt"]},"application/vnd.kde.kspread":{"source":"iana","extensions":["ksp"]},"application/vnd.kde.kword":{"source":"iana","extensions":["kwd","kwt"]},"application/vnd.kenameaapp":{"source":"iana","extensions":["htke"]},"application/vnd.kidspiration":{"source":"iana","extensions":["kia"]},"application/vnd.kinar":{"source":"iana","extensions":["kne","knp"]},"application/vnd.koan":{"source":"iana","extensions":["skp","skd","skt","skm"]},"application/vnd.kodak-descriptor":{"source":"iana","extensions":["sse"]},"application/vnd.las":{"source":"iana"},"application/vnd.las.las+json":{"source":"iana","compressible":true},"application/vnd.las.las+xml":{"source":"iana","compressible":true,"extensions":["lasxml"]},"application/vnd.laszip":{"source":"iana"},"application/vnd.leap+json":{"source":"iana","compressible":true},"application/vnd.liberty-request+xml":{"source":"iana","compressible":true},"application/vnd.llamagraphics.life-balance.desktop":{"source":"iana","extensions":["lbd"]},"application/vnd.llamagraphics.life-balance.exchange+xml":{"source":"iana","compressible":true,"extensions":["lbe"]},"application/vnd.logipipe.circuit+zip":{"source":"iana","compressible":false},"application/vnd.loom":{"source":"iana"},"application/vnd.lotus-1-2-3":{"source":"iana","extensions":["123"]},"application/vnd.lotus-approach":{"source":"iana","extensions":["apr"]},"application/vnd.lotus-freelance":{"source":"iana","extensions":["pre"]},"application/vnd.lotus-notes":{"source":"iana","extensions":["nsf"]},"application/vnd.lotus-organizer":{"source":"iana","extensions":["org"]},"application/vnd.lotus-screencam":{"source":"iana","extensions":["scm"]},"application/vnd.lotus-wordpro":{"source":"iana","extensions":["lwp"]},"application/vnd.macports.portpkg":{"source":"iana","extensions":["portpkg"]},"application/vnd.mapbox-vector-tile":{"source":"iana","extensions":["mvt"]},"application/vnd.marlin.drm.actiontoken+xml":{"source":"iana","compressible":true},"application/vnd.marlin.drm.conftoken+xml":{"source":"iana","compressible":true},"application/vnd.marlin.drm.license+xml":{"source":"iana","compressible":true},"application/vnd.marlin.drm.mdcf":{"source":"iana"},"application/vnd.mason+json":{"source":"iana","compressible":true},"application/vnd.maxar.archive.3tz+zip":{"source":"iana","compressible":false},"application/vnd.maxmind.maxmind-db":{"source":"iana"},"application/vnd.mcd":{"source":"iana","extensions":["mcd"]},"application/vnd.medcalcdata":{"source":"iana","extensions":["mc1"]},"application/vnd.mediastation.cdkey":{"source":"iana","extensions":["cdkey"]},"application/vnd.meridian-slingshot":{"source":"iana"},"application/vnd.mfer":{"source":"iana","extensions":["mwf"]},"application/vnd.mfmp":{"source":"iana","extensions":["mfm"]},"application/vnd.micro+json":{"source":"iana","compressible":true},"application/vnd.micrografx.flo":{"source":"iana","extensions":["flo"]},"application/vnd.micrografx.igx":{"source":"iana","extensions":["igx"]},"application/vnd.microsoft.portable-executable":{"source":"iana"},"application/vnd.microsoft.windows.thumbnail-cache":{"source":"iana"},"application/vnd.miele+json":{"source":"iana","compressible":true},"application/vnd.mif":{"source":"iana","extensions":["mif"]},"application/vnd.minisoft-hp3000-save":{"source":"iana"},"application/vnd.mitsubishi.misty-guard.trustweb":{"source":"iana"},"application/vnd.mobius.daf":{"source":"iana","extensions":["daf"]},"application/vnd.mobius.dis":{"source":"iana","extensions":["dis"]},"application/vnd.mobius.mbk":{"source":"iana","extensions":["mbk"]},"application/vnd.mobius.mqy":{"source":"iana","extensions":["mqy"]},"application/vnd.mobius.msl":{"source":"iana","extensions":["msl"]},"application/vnd.mobius.plc":{"source":"iana","extensions":["plc"]},"application/vnd.mobius.txf":{"source":"iana","extensions":["txf"]},"application/vnd.mophun.application":{"source":"iana","extensions":["mpn"]},"application/vnd.mophun.certificate":{"source":"iana","extensions":["mpc"]},"application/vnd.motorola.flexsuite":{"source":"iana"},"application/vnd.motorola.flexsuite.adsi":{"source":"iana"},"application/vnd.motorola.flexsuite.fis":{"source":"iana"},"application/vnd.motorola.flexsuite.gotap":{"source":"iana"},"application/vnd.motorola.flexsuite.kmr":{"source":"iana"},"application/vnd.motorola.flexsuite.ttc":{"source":"iana"},"application/vnd.motorola.flexsuite.wem":{"source":"iana"},"application/vnd.motorola.iprm":{"source":"iana"},"application/vnd.mozilla.xul+xml":{"source":"iana","compressible":true,"extensions":["xul"]},"application/vnd.ms-3mfdocument":{"source":"iana"},"application/vnd.ms-artgalry":{"source":"iana","extensions":["cil"]},"application/vnd.ms-asf":{"source":"iana"},"application/vnd.ms-cab-compressed":{"source":"iana","extensions":["cab"]},"application/vnd.ms-color.iccprofile":{"source":"apache"},"application/vnd.ms-excel":{"source":"iana","compressible":false,"extensions":["xls","xlm","xla","xlc","xlt","xlw"]},"application/vnd.ms-excel.addin.macroenabled.12":{"source":"iana","extensions":["xlam"]},"application/vnd.ms-excel.sheet.binary.macroenabled.12":{"source":"iana","extensions":["xlsb"]},"application/vnd.ms-excel.sheet.macroenabled.12":{"source":"iana","extensions":["xlsm"]},"application/vnd.ms-excel.template.macroenabled.12":{"source":"iana","extensions":["xltm"]},"application/vnd.ms-fontobject":{"source":"iana","compressible":true,"extensions":["eot"]},"application/vnd.ms-htmlhelp":{"source":"iana","extensions":["chm"]},"application/vnd.ms-ims":{"source":"iana","extensions":["ims"]},"application/vnd.ms-lrm":{"source":"iana","extensions":["lrm"]},"application/vnd.ms-office.activex+xml":{"source":"iana","compressible":true},"application/vnd.ms-officetheme":{"source":"iana","extensions":["thmx"]},"application/vnd.ms-opentype":{"source":"apache","compressible":true},"application/vnd.ms-outlook":{"compressible":false,"extensions":["msg"]},"application/vnd.ms-package.obfuscated-opentype":{"source":"apache"},"application/vnd.ms-pki.seccat":{"source":"apache","extensions":["cat"]},"application/vnd.ms-pki.stl":{"source":"apache","extensions":["stl"]},"application/vnd.ms-playready.initiator+xml":{"source":"iana","compressible":true},"application/vnd.ms-powerpoint":{"source":"iana","compressible":false,"extensions":["ppt","pps","pot"]},"application/vnd.ms-powerpoint.addin.macroenabled.12":{"source":"iana","extensions":["ppam"]},"application/vnd.ms-powerpoint.presentation.macroenabled.12":{"source":"iana","extensions":["pptm"]},"application/vnd.ms-powerpoint.slide.macroenabled.12":{"source":"iana","extensions":["sldm"]},"application/vnd.ms-powerpoint.slideshow.macroenabled.12":{"source":"iana","extensions":["ppsm"]},"application/vnd.ms-powerpoint.template.macroenabled.12":{"source":"iana","extensions":["potm"]},"application/vnd.ms-printdevicecapabilities+xml":{"source":"iana","compressible":true},"application/vnd.ms-printing.printticket+xml":{"source":"apache","compressible":true},"application/vnd.ms-printschematicket+xml":{"source":"iana","compressible":true},"application/vnd.ms-project":{"source":"iana","extensions":["mpp","mpt"]},"application/vnd.ms-tnef":{"source":"iana"},"application/vnd.ms-windows.devicepairing":{"source":"iana"},"application/vnd.ms-windows.nwprinting.oob":{"source":"iana"},"application/vnd.ms-windows.printerpairing":{"source":"iana"},"application/vnd.ms-windows.wsd.oob":{"source":"iana"},"application/vnd.ms-wmdrm.lic-chlg-req":{"source":"iana"},"application/vnd.ms-wmdrm.lic-resp":{"source":"iana"},"application/vnd.ms-wmdrm.meter-chlg-req":{"source":"iana"},"application/vnd.ms-wmdrm.meter-resp":{"source":"iana"},"application/vnd.ms-word.document.macroenabled.12":{"source":"iana","extensions":["docm"]},"application/vnd.ms-word.template.macroenabled.12":{"source":"iana","extensions":["dotm"]},"application/vnd.ms-works":{"source":"iana","extensions":["wps","wks","wcm","wdb"]},"application/vnd.ms-wpl":{"source":"iana","extensions":["wpl"]},"application/vnd.ms-xpsdocument":{"source":"iana","compressible":false,"extensions":["xps"]},"application/vnd.msa-disk-image":{"source":"iana"},"application/vnd.mseq":{"source":"iana","extensions":["mseq"]},"application/vnd.msign":{"source":"iana"},"application/vnd.multiad.creator":{"source":"iana"},"application/vnd.multiad.creator.cif":{"source":"iana"},"application/vnd.music-niff":{"source":"iana"},"application/vnd.musician":{"source":"iana","extensions":["mus"]},"application/vnd.muvee.style":{"source":"iana","extensions":["msty"]},"application/vnd.mynfc":{"source":"iana","extensions":["taglet"]},"application/vnd.nacamar.ybrid+json":{"source":"iana","compressible":true},"application/vnd.ncd.control":{"source":"iana"},"application/vnd.ncd.reference":{"source":"iana"},"application/vnd.nearst.inv+json":{"source":"iana","compressible":true},"application/vnd.nebumind.line":{"source":"iana"},"application/vnd.nervana":{"source":"iana"},"application/vnd.netfpx":{"source":"iana"},"application/vnd.neurolanguage.nlu":{"source":"iana","extensions":["nlu"]},"application/vnd.nimn":{"source":"iana"},"application/vnd.nintendo.nitro.rom":{"source":"iana"},"application/vnd.nintendo.snes.rom":{"source":"iana"},"application/vnd.nitf":{"source":"iana","extensions":["ntf","nitf"]},"application/vnd.noblenet-directory":{"source":"iana","extensions":["nnd"]},"application/vnd.noblenet-sealer":{"source":"iana","extensions":["nns"]},"application/vnd.noblenet-web":{"source":"iana","extensions":["nnw"]},"application/vnd.nokia.catalogs":{"source":"iana"},"application/vnd.nokia.conml+wbxml":{"source":"iana"},"application/vnd.nokia.conml+xml":{"source":"iana","compressible":true},"application/vnd.nokia.iptv.config+xml":{"source":"iana","compressible":true},"application/vnd.nokia.isds-radio-presets":{"source":"iana"},"application/vnd.nokia.landmark+wbxml":{"source":"iana"},"application/vnd.nokia.landmark+xml":{"source":"iana","compressible":true},"application/vnd.nokia.landmarkcollection+xml":{"source":"iana","compressible":true},"application/vnd.nokia.n-gage.ac+xml":{"source":"iana","compressible":true,"extensions":["ac"]},"application/vnd.nokia.n-gage.data":{"source":"iana","extensions":["ngdat"]},"application/vnd.nokia.n-gage.symbian.install":{"source":"iana","extensions":["n-gage"]},"application/vnd.nokia.ncd":{"source":"iana"},"application/vnd.nokia.pcd+wbxml":{"source":"iana"},"application/vnd.nokia.pcd+xml":{"source":"iana","compressible":true},"application/vnd.nokia.radio-preset":{"source":"iana","extensions":["rpst"]},"application/vnd.nokia.radio-presets":{"source":"iana","extensions":["rpss"]},"application/vnd.novadigm.edm":{"source":"iana","extensions":["edm"]},"application/vnd.novadigm.edx":{"source":"iana","extensions":["edx"]},"application/vnd.novadigm.ext":{"source":"iana","extensions":["ext"]},"application/vnd.ntt-local.content-share":{"source":"iana"},"application/vnd.ntt-local.file-transfer":{"source":"iana"},"application/vnd.ntt-local.ogw_remote-access":{"source":"iana"},"application/vnd.ntt-local.sip-ta_remote":{"source":"iana"},"application/vnd.ntt-local.sip-ta_tcp_stream":{"source":"iana"},"application/vnd.oasis.opendocument.chart":{"source":"iana","extensions":["odc"]},"application/vnd.oasis.opendocument.chart-template":{"source":"iana","extensions":["otc"]},"application/vnd.oasis.opendocument.database":{"source":"iana","extensions":["odb"]},"application/vnd.oasis.opendocument.formula":{"source":"iana","extensions":["odf"]},"application/vnd.oasis.opendocument.formula-template":{"source":"iana","extensions":["odft"]},"application/vnd.oasis.opendocument.graphics":{"source":"iana","compressible":false,"extensions":["odg"]},"application/vnd.oasis.opendocument.graphics-template":{"source":"iana","extensions":["otg"]},"application/vnd.oasis.opendocument.image":{"source":"iana","extensions":["odi"]},"application/vnd.oasis.opendocument.image-template":{"source":"iana","extensions":["oti"]},"application/vnd.oasis.opendocument.presentation":{"source":"iana","compressible":false,"extensions":["odp"]},"application/vnd.oasis.opendocument.presentation-template":{"source":"iana","extensions":["otp"]},"application/vnd.oasis.opendocument.spreadsheet":{"source":"iana","compressible":false,"extensions":["ods"]},"application/vnd.oasis.opendocument.spreadsheet-template":{"source":"iana","extensions":["ots"]},"application/vnd.oasis.opendocument.text":{"source":"iana","compressible":false,"extensions":["odt"]},"application/vnd.oasis.opendocument.text-master":{"source":"iana","extensions":["odm"]},"application/vnd.oasis.opendocument.text-template":{"source":"iana","extensions":["ott"]},"application/vnd.oasis.opendocument.text-web":{"source":"iana","extensions":["oth"]},"application/vnd.obn":{"source":"iana"},"application/vnd.ocf+cbor":{"source":"iana"},"application/vnd.oci.image.manifest.v1+json":{"source":"iana","compressible":true},"application/vnd.oftn.l10n+json":{"source":"iana","compressible":true},"application/vnd.oipf.contentaccessdownload+xml":{"source":"iana","compressible":true},"application/vnd.oipf.contentaccessstreaming+xml":{"source":"iana","compressible":true},"application/vnd.oipf.cspg-hexbinary":{"source":"iana"},"application/vnd.oipf.dae.svg+xml":{"source":"iana","compressible":true},"application/vnd.oipf.dae.xhtml+xml":{"source":"iana","compressible":true},"application/vnd.oipf.mippvcontrolmessage+xml":{"source":"iana","compressible":true},"application/vnd.oipf.pae.gem":{"source":"iana"},"application/vnd.oipf.spdiscovery+xml":{"source":"iana","compressible":true},"application/vnd.oipf.spdlist+xml":{"source":"iana","compressible":true},"application/vnd.oipf.ueprofile+xml":{"source":"iana","compressible":true},"application/vnd.oipf.userprofile+xml":{"source":"iana","compressible":true},"application/vnd.olpc-sugar":{"source":"iana","extensions":["xo"]},"application/vnd.oma-scws-config":{"source":"iana"},"application/vnd.oma-scws-http-request":{"source":"iana"},"application/vnd.oma-scws-http-response":{"source":"iana"},"application/vnd.oma.bcast.associated-procedure-parameter+xml":{"source":"iana","compressible":true},"application/vnd.oma.bcast.drm-trigger+xml":{"source":"iana","compressible":true},"application/vnd.oma.bcast.imd+xml":{"source":"iana","compressible":true},"application/vnd.oma.bcast.ltkm":{"source":"iana"},"application/vnd.oma.bcast.notification+xml":{"source":"iana","compressible":true},"application/vnd.oma.bcast.provisioningtrigger":{"source":"iana"},"application/vnd.oma.bcast.sgboot":{"source":"iana"},"application/vnd.oma.bcast.sgdd+xml":{"source":"iana","compressible":true},"application/vnd.oma.bcast.sgdu":{"source":"iana"},"application/vnd.oma.bcast.simple-symbol-container":{"source":"iana"},"application/vnd.oma.bcast.smartcard-trigger+xml":{"source":"iana","compressible":true},"application/vnd.oma.bcast.sprov+xml":{"source":"iana","compressible":true},"application/vnd.oma.bcast.stkm":{"source":"iana"},"application/vnd.oma.cab-address-book+xml":{"source":"iana","compressible":true},"application/vnd.oma.cab-feature-handler+xml":{"source":"iana","compressible":true},"application/vnd.oma.cab-pcc+xml":{"source":"iana","compressible":true},"application/vnd.oma.cab-subs-invite+xml":{"source":"iana","compressible":true},"application/vnd.oma.cab-user-prefs+xml":{"source":"iana","compressible":true},"application/vnd.oma.dcd":{"source":"iana"},"application/vnd.oma.dcdc":{"source":"iana"},"application/vnd.oma.dd2+xml":{"source":"iana","compressible":true,"extensions":["dd2"]},"application/vnd.oma.drm.risd+xml":{"source":"iana","compressible":true},"application/vnd.oma.group-usage-list+xml":{"source":"iana","compressible":true},"application/vnd.oma.lwm2m+cbor":{"source":"iana"},"application/vnd.oma.lwm2m+json":{"source":"iana","compressible":true},"application/vnd.oma.lwm2m+tlv":{"source":"iana"},"application/vnd.oma.pal+xml":{"source":"iana","compressible":true},"application/vnd.oma.poc.detailed-progress-report+xml":{"source":"iana","compressible":true},"application/vnd.oma.poc.final-report+xml":{"source":"iana","compressible":true},"application/vnd.oma.poc.groups+xml":{"source":"iana","compressible":true},"application/vnd.oma.poc.invocation-descriptor+xml":{"source":"iana","compressible":true},"application/vnd.oma.poc.optimized-progress-report+xml":{"source":"iana","compressible":true},"application/vnd.oma.push":{"source":"iana"},"application/vnd.oma.scidm.messages+xml":{"source":"iana","compressible":true},"application/vnd.oma.xcap-directory+xml":{"source":"iana","compressible":true},"application/vnd.omads-email+xml":{"source":"iana","charset":"UTF-8","compressible":true},"application/vnd.omads-file+xml":{"source":"iana","charset":"UTF-8","compressible":true},"application/vnd.omads-folder+xml":{"source":"iana","charset":"UTF-8","compressible":true},"application/vnd.omaloc-supl-init":{"source":"iana"},"application/vnd.onepager":{"source":"iana"},"application/vnd.onepagertamp":{"source":"iana"},"application/vnd.onepagertamx":{"source":"iana"},"application/vnd.onepagertat":{"source":"iana"},"application/vnd.onepagertatp":{"source":"iana"},"application/vnd.onepagertatx":{"source":"iana"},"application/vnd.openblox.game+xml":{"source":"iana","compressible":true,"extensions":["obgx"]},"application/vnd.openblox.game-binary":{"source":"iana"},"application/vnd.openeye.oeb":{"source":"iana"},"application/vnd.openofficeorg.extension":{"source":"apache","extensions":["oxt"]},"application/vnd.openstreetmap.data+xml":{"source":"iana","compressible":true,"extensions":["osm"]},"application/vnd.opentimestamps.ots":{"source":"iana"},"application/vnd.openxmlformats-officedocument.custom-properties+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.customxmlproperties+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.drawing+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.drawingml.chart+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.drawingml.chartshapes+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.drawingml.diagramcolors+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.drawingml.diagramdata+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.drawingml.diagramlayout+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.drawingml.diagramstyle+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.extended-properties+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.presentationml.commentauthors+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.presentationml.comments+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.presentationml.handoutmaster+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.presentationml.notesmaster+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.presentationml.notesslide+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.presentationml.presentation":{"source":"iana","compressible":false,"extensions":["pptx"]},"application/vnd.openxmlformats-officedocument.presentationml.presentation.main+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.presentationml.presprops+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.presentationml.slide":{"source":"iana","extensions":["sldx"]},"application/vnd.openxmlformats-officedocument.presentationml.slide+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.presentationml.slidelayout+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.presentationml.slidemaster+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.presentationml.slideshow":{"source":"iana","extensions":["ppsx"]},"application/vnd.openxmlformats-officedocument.presentationml.slideshow.main+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.presentationml.slideupdateinfo+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.presentationml.tablestyles+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.presentationml.tags+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.presentationml.template":{"source":"iana","extensions":["potx"]},"application/vnd.openxmlformats-officedocument.presentationml.template.main+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.presentationml.viewprops+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.calcchain+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.chartsheet+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.comments+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.connections+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.dialogsheet+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.externallink+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.pivotcachedefinition+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.pivotcacherecords+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.pivottable+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.querytable+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.revisionheaders+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.revisionlog+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.sharedstrings+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet":{"source":"iana","compressible":false,"extensions":["xlsx"]},"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.sheetmetadata+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.styles+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.table+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.tablesinglecells+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.template":{"source":"iana","extensions":["xltx"]},"application/vnd.openxmlformats-officedocument.spreadsheetml.template.main+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.usernames+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.volatiledependencies+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.theme+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.themeoverride+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.vmldrawing":{"source":"iana"},"application/vnd.openxmlformats-officedocument.wordprocessingml.comments+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.wordprocessingml.document":{"source":"iana","compressible":false,"extensions":["docx"]},"application/vnd.openxmlformats-officedocument.wordprocessingml.document.glossary+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.wordprocessingml.document.main+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.wordprocessingml.endnotes+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.wordprocessingml.fonttable+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.wordprocessingml.footer+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.wordprocessingml.footnotes+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.wordprocessingml.numbering+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.wordprocessingml.settings+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.wordprocessingml.styles+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.wordprocessingml.template":{"source":"iana","extensions":["dotx"]},"application/vnd.openxmlformats-officedocument.wordprocessingml.template.main+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.wordprocessingml.websettings+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-package.core-properties+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-package.digital-signature-xmlsignature+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-package.relationships+xml":{"source":"iana","compressible":true},"application/vnd.oracle.resource+json":{"source":"iana","compressible":true},"application/vnd.orange.indata":{"source":"iana"},"application/vnd.osa.netdeploy":{"source":"iana"},"application/vnd.osgeo.mapguide.package":{"source":"iana","extensions":["mgp"]},"application/vnd.osgi.bundle":{"source":"iana"},"application/vnd.osgi.dp":{"source":"iana","extensions":["dp"]},"application/vnd.osgi.subsystem":{"source":"iana","extensions":["esa"]},"application/vnd.otps.ct-kip+xml":{"source":"iana","compressible":true},"application/vnd.oxli.countgraph":{"source":"iana"},"application/vnd.pagerduty+json":{"source":"iana","compressible":true},"application/vnd.palm":{"source":"iana","extensions":["pdb","pqa","oprc"]},"application/vnd.panoply":{"source":"iana"},"application/vnd.paos.xml":{"source":"iana"},"application/vnd.patentdive":{"source":"iana"},"application/vnd.patientecommsdoc":{"source":"iana"},"application/vnd.pawaafile":{"source":"iana","extensions":["paw"]},"application/vnd.pcos":{"source":"iana"},"application/vnd.pg.format":{"source":"iana","extensions":["str"]},"application/vnd.pg.osasli":{"source":"iana","extensions":["ei6"]},"application/vnd.piaccess.application-licence":{"source":"iana"},"application/vnd.picsel":{"source":"iana","extensions":["efif"]},"application/vnd.pmi.widget":{"source":"iana","extensions":["wg"]},"application/vnd.poc.group-advertisement+xml":{"source":"iana","compressible":true},"application/vnd.pocketlearn":{"source":"iana","extensions":["plf"]},"application/vnd.powerbuilder6":{"source":"iana","extensions":["pbd"]},"application/vnd.powerbuilder6-s":{"source":"iana"},"application/vnd.powerbuilder7":{"source":"iana"},"application/vnd.powerbuilder7-s":{"source":"iana"},"application/vnd.powerbuilder75":{"source":"iana"},"application/vnd.powerbuilder75-s":{"source":"iana"},"application/vnd.preminet":{"source":"iana"},"application/vnd.previewsystems.box":{"source":"iana","extensions":["box"]},"application/vnd.proteus.magazine":{"source":"iana","extensions":["mgz"]},"application/vnd.psfs":{"source":"iana"},"application/vnd.publishare-delta-tree":{"source":"iana","extensions":["qps"]},"application/vnd.pvi.ptid1":{"source":"iana","extensions":["ptid"]},"application/vnd.pwg-multiplexed":{"source":"iana"},"application/vnd.pwg-xhtml-print+xml":{"source":"iana","compressible":true},"application/vnd.qualcomm.brew-app-res":{"source":"iana"},"application/vnd.quarantainenet":{"source":"iana"},"application/vnd.quark.quarkxpress":{"source":"iana","extensions":["qxd","qxt","qwd","qwt","qxl","qxb"]},"application/vnd.quobject-quoxdocument":{"source":"iana"},"application/vnd.radisys.moml+xml":{"source":"iana","compressible":true},"application/vnd.radisys.msml+xml":{"source":"iana","compressible":true},"application/vnd.radisys.msml-audit+xml":{"source":"iana","compressible":true},"application/vnd.radisys.msml-audit-conf+xml":{"source":"iana","compressible":true},"application/vnd.radisys.msml-audit-conn+xml":{"source":"iana","compressible":true},"application/vnd.radisys.msml-audit-dialog+xml":{"source":"iana","compressible":true},"application/vnd.radisys.msml-audit-stream+xml":{"source":"iana","compressible":true},"application/vnd.radisys.msml-conf+xml":{"source":"iana","compressible":true},"application/vnd.radisys.msml-dialog+xml":{"source":"iana","compressible":true},"application/vnd.radisys.msml-dialog-base+xml":{"source":"iana","compressible":true},"application/vnd.radisys.msml-dialog-fax-detect+xml":{"source":"iana","compressible":true},"application/vnd.radisys.msml-dialog-fax-sendrecv+xml":{"source":"iana","compressible":true},"application/vnd.radisys.msml-dialog-group+xml":{"source":"iana","compressible":true},"application/vnd.radisys.msml-dialog-speech+xml":{"source":"iana","compressible":true},"application/vnd.radisys.msml-dialog-transform+xml":{"source":"iana","compressible":true},"application/vnd.rainstor.data":{"source":"iana"},"application/vnd.rapid":{"source":"iana"},"application/vnd.rar":{"source":"iana","extensions":["rar"]},"application/vnd.realvnc.bed":{"source":"iana","extensions":["bed"]},"application/vnd.recordare.musicxml":{"source":"iana","extensions":["mxl"]},"application/vnd.recordare.musicxml+xml":{"source":"iana","compressible":true,"extensions":["musicxml"]},"application/vnd.renlearn.rlprint":{"source":"iana"},"application/vnd.resilient.logic":{"source":"iana"},"application/vnd.restful+json":{"source":"iana","compressible":true},"application/vnd.rig.cryptonote":{"source":"iana","extensions":["cryptonote"]},"application/vnd.rim.cod":{"source":"apache","extensions":["cod"]},"application/vnd.rn-realmedia":{"source":"apache","extensions":["rm"]},"application/vnd.rn-realmedia-vbr":{"source":"apache","extensions":["rmvb"]},"application/vnd.route66.link66+xml":{"source":"iana","compressible":true,"extensions":["link66"]},"application/vnd.rs-274x":{"source":"iana"},"application/vnd.ruckus.download":{"source":"iana"},"application/vnd.s3sms":{"source":"iana"},"application/vnd.sailingtracker.track":{"source":"iana","extensions":["st"]},"application/vnd.sar":{"source":"iana"},"application/vnd.sbm.cid":{"source":"iana"},"application/vnd.sbm.mid2":{"source":"iana"},"application/vnd.scribus":{"source":"iana"},"application/vnd.sealed.3df":{"source":"iana"},"application/vnd.sealed.csf":{"source":"iana"},"application/vnd.sealed.doc":{"source":"iana"},"application/vnd.sealed.eml":{"source":"iana"},"application/vnd.sealed.mht":{"source":"iana"},"application/vnd.sealed.net":{"source":"iana"},"application/vnd.sealed.ppt":{"source":"iana"},"application/vnd.sealed.tiff":{"source":"iana"},"application/vnd.sealed.xls":{"source":"iana"},"application/vnd.sealedmedia.softseal.html":{"source":"iana"},"application/vnd.sealedmedia.softseal.pdf":{"source":"iana"},"application/vnd.seemail":{"source":"iana","extensions":["see"]},"application/vnd.seis+json":{"source":"iana","compressible":true},"application/vnd.sema":{"source":"iana","extensions":["sema"]},"application/vnd.semd":{"source":"iana","extensions":["semd"]},"application/vnd.semf":{"source":"iana","extensions":["semf"]},"application/vnd.shade-save-file":{"source":"iana"},"application/vnd.shana.informed.formdata":{"source":"iana","extensions":["ifm"]},"application/vnd.shana.informed.formtemplate":{"source":"iana","extensions":["itp"]},"application/vnd.shana.informed.interchange":{"source":"iana","extensions":["iif"]},"application/vnd.shana.informed.package":{"source":"iana","extensions":["ipk"]},"application/vnd.shootproof+json":{"source":"iana","compressible":true},"application/vnd.shopkick+json":{"source":"iana","compressible":true},"application/vnd.shp":{"source":"iana"},"application/vnd.shx":{"source":"iana"},"application/vnd.sigrok.session":{"source":"iana"},"application/vnd.simtech-mindmapper":{"source":"iana","extensions":["twd","twds"]},"application/vnd.siren+json":{"source":"iana","compressible":true},"application/vnd.smaf":{"source":"iana","extensions":["mmf"]},"application/vnd.smart.notebook":{"source":"iana"},"application/vnd.smart.teacher":{"source":"iana","extensions":["teacher"]},"application/vnd.snesdev-page-table":{"source":"iana"},"application/vnd.software602.filler.form+xml":{"source":"iana","compressible":true,"extensions":["fo"]},"application/vnd.software602.filler.form-xml-zip":{"source":"iana"},"application/vnd.solent.sdkm+xml":{"source":"iana","compressible":true,"extensions":["sdkm","sdkd"]},"application/vnd.spotfire.dxp":{"source":"iana","extensions":["dxp"]},"application/vnd.spotfire.sfs":{"source":"iana","extensions":["sfs"]},"application/vnd.sqlite3":{"source":"iana"},"application/vnd.sss-cod":{"source":"iana"},"application/vnd.sss-dtf":{"source":"iana"},"application/vnd.sss-ntf":{"source":"iana"},"application/vnd.stardivision.calc":{"source":"apache","extensions":["sdc"]},"application/vnd.stardivision.draw":{"source":"apache","extensions":["sda"]},"application/vnd.stardivision.impress":{"source":"apache","extensions":["sdd"]},"application/vnd.stardivision.math":{"source":"apache","extensions":["smf"]},"application/vnd.stardivision.writer":{"source":"apache","extensions":["sdw","vor"]},"application/vnd.stardivision.writer-global":{"source":"apache","extensions":["sgl"]},"application/vnd.stepmania.package":{"source":"iana","extensions":["smzip"]},"application/vnd.stepmania.stepchart":{"source":"iana","extensions":["sm"]},"application/vnd.street-stream":{"source":"iana"},"application/vnd.sun.wadl+xml":{"source":"iana","compressible":true,"extensions":["wadl"]},"application/vnd.sun.xml.calc":{"source":"apache","extensions":["sxc"]},"application/vnd.sun.xml.calc.template":{"source":"apache","extensions":["stc"]},"application/vnd.sun.xml.draw":{"source":"apache","extensions":["sxd"]},"application/vnd.sun.xml.draw.template":{"source":"apache","extensions":["std"]},"application/vnd.sun.xml.impress":{"source":"apache","extensions":["sxi"]},"application/vnd.sun.xml.impress.template":{"source":"apache","extensions":["sti"]},"application/vnd.sun.xml.math":{"source":"apache","extensions":["sxm"]},"application/vnd.sun.xml.writer":{"source":"apache","extensions":["sxw"]},"application/vnd.sun.xml.writer.global":{"source":"apache","extensions":["sxg"]},"application/vnd.sun.xml.writer.template":{"source":"apache","extensions":["stw"]},"application/vnd.sus-calendar":{"source":"iana","extensions":["sus","susp"]},"application/vnd.svd":{"source":"iana","extensions":["svd"]},"application/vnd.swiftview-ics":{"source":"iana"},"application/vnd.sycle+xml":{"source":"iana","compressible":true},"application/vnd.syft+json":{"source":"iana","compressible":true},"application/vnd.symbian.install":{"source":"apache","extensions":["sis","sisx"]},"application/vnd.syncml+xml":{"source":"iana","charset":"UTF-8","compressible":true,"extensions":["xsm"]},"application/vnd.syncml.dm+wbxml":{"source":"iana","charset":"UTF-8","extensions":["bdm"]},"application/vnd.syncml.dm+xml":{"source":"iana","charset":"UTF-8","compressible":true,"extensions":["xdm"]},"application/vnd.syncml.dm.notification":{"source":"iana"},"application/vnd.syncml.dmddf+wbxml":{"source":"iana"},"application/vnd.syncml.dmddf+xml":{"source":"iana","charset":"UTF-8","compressible":true,"extensions":["ddf"]},"application/vnd.syncml.dmtnds+wbxml":{"source":"iana"},"application/vnd.syncml.dmtnds+xml":{"source":"iana","charset":"UTF-8","compressible":true},"application/vnd.syncml.ds.notification":{"source":"iana"},"application/vnd.tableschema+json":{"source":"iana","compressible":true},"application/vnd.tao.intent-module-archive":{"source":"iana","extensions":["tao"]},"application/vnd.tcpdump.pcap":{"source":"iana","extensions":["pcap","cap","dmp"]},"application/vnd.think-cell.ppttc+json":{"source":"iana","compressible":true},"application/vnd.tmd.mediaflex.api+xml":{"source":"iana","compressible":true},"application/vnd.tml":{"source":"iana"},"application/vnd.tmobile-livetv":{"source":"iana","extensions":["tmo"]},"application/vnd.tri.onesource":{"source":"iana"},"application/vnd.trid.tpt":{"source":"iana","extensions":["tpt"]},"application/vnd.triscape.mxs":{"source":"iana","extensions":["mxs"]},"application/vnd.trueapp":{"source":"iana","extensions":["tra"]},"application/vnd.truedoc":{"source":"iana"},"application/vnd.ubisoft.webplayer":{"source":"iana"},"application/vnd.ufdl":{"source":"iana","extensions":["ufd","ufdl"]},"application/vnd.uiq.theme":{"source":"iana","extensions":["utz"]},"application/vnd.umajin":{"source":"iana","extensions":["umj"]},"application/vnd.unity":{"source":"iana","extensions":["unityweb"]},"application/vnd.uoml+xml":{"source":"iana","compressible":true,"extensions":["uoml"]},"application/vnd.uplanet.alert":{"source":"iana"},"application/vnd.uplanet.alert-wbxml":{"source":"iana"},"application/vnd.uplanet.bearer-choice":{"source":"iana"},"application/vnd.uplanet.bearer-choice-wbxml":{"source":"iana"},"application/vnd.uplanet.cacheop":{"source":"iana"},"application/vnd.uplanet.cacheop-wbxml":{"source":"iana"},"application/vnd.uplanet.channel":{"source":"iana"},"application/vnd.uplanet.channel-wbxml":{"source":"iana"},"application/vnd.uplanet.list":{"source":"iana"},"application/vnd.uplanet.list-wbxml":{"source":"iana"},"application/vnd.uplanet.listcmd":{"source":"iana"},"application/vnd.uplanet.listcmd-wbxml":{"source":"iana"},"application/vnd.uplanet.signal":{"source":"iana"},"application/vnd.uri-map":{"source":"iana"},"application/vnd.valve.source.material":{"source":"iana"},"application/vnd.vcx":{"source":"iana","extensions":["vcx"]},"application/vnd.vd-study":{"source":"iana"},"application/vnd.vectorworks":{"source":"iana"},"application/vnd.vel+json":{"source":"iana","compressible":true},"application/vnd.verimatrix.vcas":{"source":"iana"},"application/vnd.veritone.aion+json":{"source":"iana","compressible":true},"application/vnd.veryant.thin":{"source":"iana"},"application/vnd.ves.encrypted":{"source":"iana"},"application/vnd.vidsoft.vidconference":{"source":"iana"},"application/vnd.visio":{"source":"iana","extensions":["vsd","vst","vss","vsw"]},"application/vnd.visionary":{"source":"iana","extensions":["vis"]},"application/vnd.vividence.scriptfile":{"source":"iana"},"application/vnd.vsf":{"source":"iana","extensions":["vsf"]},"application/vnd.wap.sic":{"source":"iana"},"application/vnd.wap.slc":{"source":"iana"},"application/vnd.wap.wbxml":{"source":"iana","charset":"UTF-8","extensions":["wbxml"]},"application/vnd.wap.wmlc":{"source":"iana","extensions":["wmlc"]},"application/vnd.wap.wmlscriptc":{"source":"iana","extensions":["wmlsc"]},"application/vnd.webturbo":{"source":"iana","extensions":["wtb"]},"application/vnd.wfa.dpp":{"source":"iana"},"application/vnd.wfa.p2p":{"source":"iana"},"application/vnd.wfa.wsc":{"source":"iana"},"application/vnd.windows.devicepairing":{"source":"iana"},"application/vnd.wmc":{"source":"iana"},"application/vnd.wmf.bootstrap":{"source":"iana"},"application/vnd.wolfram.mathematica":{"source":"iana"},"application/vnd.wolfram.mathematica.package":{"source":"iana"},"application/vnd.wolfram.player":{"source":"iana","extensions":["nbp"]},"application/vnd.wordperfect":{"source":"iana","extensions":["wpd"]},"application/vnd.wqd":{"source":"iana","extensions":["wqd"]},"application/vnd.wrq-hp3000-labelled":{"source":"iana"},"application/vnd.wt.stf":{"source":"iana","extensions":["stf"]},"application/vnd.wv.csp+wbxml":{"source":"iana"},"application/vnd.wv.csp+xml":{"source":"iana","compressible":true},"application/vnd.wv.ssp+xml":{"source":"iana","compressible":true},"application/vnd.xacml+json":{"source":"iana","compressible":true},"application/vnd.xara":{"source":"iana","extensions":["xar"]},"application/vnd.xfdl":{"source":"iana","extensions":["xfdl"]},"application/vnd.xfdl.webform":{"source":"iana"},"application/vnd.xmi+xml":{"source":"iana","compressible":true},"application/vnd.xmpie.cpkg":{"source":"iana"},"application/vnd.xmpie.dpkg":{"source":"iana"},"application/vnd.xmpie.plan":{"source":"iana"},"application/vnd.xmpie.ppkg":{"source":"iana"},"application/vnd.xmpie.xlim":{"source":"iana"},"application/vnd.yamaha.hv-dic":{"source":"iana","extensions":["hvd"]},"application/vnd.yamaha.hv-script":{"source":"iana","extensions":["hvs"]},"application/vnd.yamaha.hv-voice":{"source":"iana","extensions":["hvp"]},"application/vnd.yamaha.openscoreformat":{"source":"iana","extensions":["osf"]},"application/vnd.yamaha.openscoreformat.osfpvg+xml":{"source":"iana","compressible":true,"extensions":["osfpvg"]},"application/vnd.yamaha.remote-setup":{"source":"iana"},"application/vnd.yamaha.smaf-audio":{"source":"iana","extensions":["saf"]},"application/vnd.yamaha.smaf-phrase":{"source":"iana","extensions":["spf"]},"application/vnd.yamaha.through-ngn":{"source":"iana"},"application/vnd.yamaha.tunnel-udpencap":{"source":"iana"},"application/vnd.yaoweme":{"source":"iana"},"application/vnd.yellowriver-custom-menu":{"source":"iana","extensions":["cmp"]},"application/vnd.youtube.yt":{"source":"iana"},"application/vnd.zul":{"source":"iana","extensions":["zir","zirz"]},"application/vnd.zzazz.deck+xml":{"source":"iana","compressible":true,"extensions":["zaz"]},"application/voicexml+xml":{"source":"iana","compressible":true,"extensions":["vxml"]},"application/voucher-cms+json":{"source":"iana","compressible":true},"application/vq-rtcpxr":{"source":"iana"},"application/wasm":{"source":"iana","compressible":true,"extensions":["wasm"]},"application/watcherinfo+xml":{"source":"iana","compressible":true,"extensions":["wif"]},"application/webpush-options+json":{"source":"iana","compressible":true},"application/whoispp-query":{"source":"iana"},"application/whoispp-response":{"source":"iana"},"application/widget":{"source":"iana","extensions":["wgt"]},"application/winhlp":{"source":"apache","extensions":["hlp"]},"application/wita":{"source":"iana"},"application/wordperfect5.1":{"source":"iana"},"application/wsdl+xml":{"source":"iana","compressible":true,"extensions":["wsdl"]},"application/wspolicy+xml":{"source":"iana","compressible":true,"extensions":["wspolicy"]},"application/x-7z-compressed":{"source":"apache","compressible":false,"extensions":["7z"]},"application/x-abiword":{"source":"apache","extensions":["abw"]},"application/x-ace-compressed":{"source":"apache","extensions":["ace"]},"application/x-amf":{"source":"apache"},"application/x-apple-diskimage":{"source":"apache","extensions":["dmg"]},"application/x-arj":{"compressible":false,"extensions":["arj"]},"application/x-authorware-bin":{"source":"apache","extensions":["aab","x32","u32","vox"]},"application/x-authorware-map":{"source":"apache","extensions":["aam"]},"application/x-authorware-seg":{"source":"apache","extensions":["aas"]},"application/x-bcpio":{"source":"apache","extensions":["bcpio"]},"application/x-bdoc":{"compressible":false,"extensions":["bdoc"]},"application/x-bittorrent":{"source":"apache","extensions":["torrent"]},"application/x-blorb":{"source":"apache","extensions":["blb","blorb"]},"application/x-bzip":{"source":"apache","compressible":false,"extensions":["bz"]},"application/x-bzip2":{"source":"apache","compressible":false,"extensions":["bz2","boz"]},"application/x-cbr":{"source":"apache","extensions":["cbr","cba","cbt","cbz","cb7"]},"application/x-cdlink":{"source":"apache","extensions":["vcd"]},"application/x-cfs-compressed":{"source":"apache","extensions":["cfs"]},"application/x-chat":{"source":"apache","extensions":["chat"]},"application/x-chess-pgn":{"source":"apache","extensions":["pgn"]},"application/x-chrome-extension":{"extensions":["crx"]},"application/x-cocoa":{"source":"nginx","extensions":["cco"]},"application/x-compress":{"source":"apache"},"application/x-conference":{"source":"apache","extensions":["nsc"]},"application/x-cpio":{"source":"apache","extensions":["cpio"]},"application/x-csh":{"source":"apache","extensions":["csh"]},"application/x-deb":{"compressible":false},"application/x-debian-package":{"source":"apache","extensions":["deb","udeb"]},"application/x-dgc-compressed":{"source":"apache","extensions":["dgc"]},"application/x-director":{"source":"apache","extensions":["dir","dcr","dxr","cst","cct","cxt","w3d","fgd","swa"]},"application/x-doom":{"source":"apache","extensions":["wad"]},"application/x-dtbncx+xml":{"source":"apache","compressible":true,"extensions":["ncx"]},"application/x-dtbook+xml":{"source":"apache","compressible":true,"extensions":["dtb"]},"application/x-dtbresource+xml":{"source":"apache","compressible":true,"extensions":["res"]},"application/x-dvi":{"source":"apache","compressible":false,"extensions":["dvi"]},"application/x-envoy":{"source":"apache","extensions":["evy"]},"application/x-eva":{"source":"apache","extensions":["eva"]},"application/x-font-bdf":{"source":"apache","extensions":["bdf"]},"application/x-font-dos":{"source":"apache"},"application/x-font-framemaker":{"source":"apache"},"application/x-font-ghostscript":{"source":"apache","extensions":["gsf"]},"application/x-font-libgrx":{"source":"apache"},"application/x-font-linux-psf":{"source":"apache","extensions":["psf"]},"application/x-font-pcf":{"source":"apache","extensions":["pcf"]},"application/x-font-snf":{"source":"apache","extensions":["snf"]},"application/x-font-speedo":{"source":"apache"},"application/x-font-sunos-news":{"source":"apache"},"application/x-font-type1":{"source":"apache","extensions":["pfa","pfb","pfm","afm"]},"application/x-font-vfont":{"source":"apache"},"application/x-freearc":{"source":"apache","extensions":["arc"]},"application/x-futuresplash":{"source":"apache","extensions":["spl"]},"application/x-gca-compressed":{"source":"apache","extensions":["gca"]},"application/x-glulx":{"source":"apache","extensions":["ulx"]},"application/x-gnumeric":{"source":"apache","extensions":["gnumeric"]},"application/x-gramps-xml":{"source":"apache","extensions":["gramps"]},"application/x-gtar":{"source":"apache","extensions":["gtar"]},"application/x-gzip":{"source":"apache"},"application/x-hdf":{"source":"apache","extensions":["hdf"]},"application/x-httpd-php":{"compressible":true,"extensions":["php"]},"application/x-install-instructions":{"source":"apache","extensions":["install"]},"application/x-iso9660-image":{"source":"apache","extensions":["iso"]},"application/x-iwork-keynote-sffkey":{"extensions":["key"]},"application/x-iwork-numbers-sffnumbers":{"extensions":["numbers"]},"application/x-iwork-pages-sffpages":{"extensions":["pages"]},"application/x-java-archive-diff":{"source":"nginx","extensions":["jardiff"]},"application/x-java-jnlp-file":{"source":"apache","compressible":false,"extensions":["jnlp"]},"application/x-javascript":{"compressible":true},"application/x-keepass2":{"extensions":["kdbx"]},"application/x-latex":{"source":"apache","compressible":false,"extensions":["latex"]},"application/x-lua-bytecode":{"extensions":["luac"]},"application/x-lzh-compressed":{"source":"apache","extensions":["lzh","lha"]},"application/x-makeself":{"source":"nginx","extensions":["run"]},"application/x-mie":{"source":"apache","extensions":["mie"]},"application/x-mobipocket-ebook":{"source":"apache","extensions":["prc","mobi"]},"application/x-mpegurl":{"compressible":false},"application/x-ms-application":{"source":"apache","extensions":["application"]},"application/x-ms-shortcut":{"source":"apache","extensions":["lnk"]},"application/x-ms-wmd":{"source":"apache","extensions":["wmd"]},"application/x-ms-wmz":{"source":"apache","extensions":["wmz"]},"application/x-ms-xbap":{"source":"apache","extensions":["xbap"]},"application/x-msaccess":{"source":"apache","extensions":["mdb"]},"application/x-msbinder":{"source":"apache","extensions":["obd"]},"application/x-mscardfile":{"source":"apache","extensions":["crd"]},"application/x-msclip":{"source":"apache","extensions":["clp"]},"application/x-msdos-program":{"extensions":["exe"]},"application/x-msdownload":{"source":"apache","extensions":["exe","dll","com","bat","msi"]},"application/x-msmediaview":{"source":"apache","extensions":["mvb","m13","m14"]},"application/x-msmetafile":{"source":"apache","extensions":["wmf","wmz","emf","emz"]},"application/x-msmoney":{"source":"apache","extensions":["mny"]},"application/x-mspublisher":{"source":"apache","extensions":["pub"]},"application/x-msschedule":{"source":"apache","extensions":["scd"]},"application/x-msterminal":{"source":"apache","extensions":["trm"]},"application/x-mswrite":{"source":"apache","extensions":["wri"]},"application/x-netcdf":{"source":"apache","extensions":["nc","cdf"]},"application/x-ns-proxy-autoconfig":{"compressible":true,"extensions":["pac"]},"application/x-nzb":{"source":"apache","extensions":["nzb"]},"application/x-perl":{"source":"nginx","extensions":["pl","pm"]},"application/x-pilot":{"source":"nginx","extensions":["prc","pdb"]},"application/x-pkcs12":{"source":"apache","compressible":false,"extensions":["p12","pfx"]},"application/x-pkcs7-certificates":{"source":"apache","extensions":["p7b","spc"]},"application/x-pkcs7-certreqresp":{"source":"apache","extensions":["p7r"]},"application/x-pki-message":{"source":"iana"},"application/x-rar-compressed":{"source":"apache","compressible":false,"extensions":["rar"]},"application/x-redhat-package-manager":{"source":"nginx","extensions":["rpm"]},"application/x-research-info-systems":{"source":"apache","extensions":["ris"]},"application/x-sea":{"source":"nginx","extensions":["sea"]},"application/x-sh":{"source":"apache","compressible":true,"extensions":["sh"]},"application/x-shar":{"source":"apache","extensions":["shar"]},"application/x-shockwave-flash":{"source":"apache","compressible":false,"extensions":["swf"]},"application/x-silverlight-app":{"source":"apache","extensions":["xap"]},"application/x-sql":{"source":"apache","extensions":["sql"]},"application/x-stuffit":{"source":"apache","compressible":false,"extensions":["sit"]},"application/x-stuffitx":{"source":"apache","extensions":["sitx"]},"application/x-subrip":{"source":"apache","extensions":["srt"]},"application/x-sv4cpio":{"source":"apache","extensions":["sv4cpio"]},"application/x-sv4crc":{"source":"apache","extensions":["sv4crc"]},"application/x-t3vm-image":{"source":"apache","extensions":["t3"]},"application/x-tads":{"source":"apache","extensions":["gam"]},"application/x-tar":{"source":"apache","compressible":true,"extensions":["tar"]},"application/x-tcl":{"source":"apache","extensions":["tcl","tk"]},"application/x-tex":{"source":"apache","extensions":["tex"]},"application/x-tex-tfm":{"source":"apache","extensions":["tfm"]},"application/x-texinfo":{"source":"apache","extensions":["texinfo","texi"]},"application/x-tgif":{"source":"apache","extensions":["obj"]},"application/x-ustar":{"source":"apache","extensions":["ustar"]},"application/x-virtualbox-hdd":{"compressible":true,"extensions":["hdd"]},"application/x-virtualbox-ova":{"compressible":true,"extensions":["ova"]},"application/x-virtualbox-ovf":{"compressible":true,"extensions":["ovf"]},"application/x-virtualbox-vbox":{"compressible":true,"extensions":["vbox"]},"application/x-virtualbox-vbox-extpack":{"compressible":false,"extensions":["vbox-extpack"]},"application/x-virtualbox-vdi":{"compressible":true,"extensions":["vdi"]},"application/x-virtualbox-vhd":{"compressible":true,"extensions":["vhd"]},"application/x-virtualbox-vmdk":{"compressible":true,"extensions":["vmdk"]},"application/x-wais-source":{"source":"apache","extensions":["src"]},"application/x-web-app-manifest+json":{"compressible":true,"extensions":["webapp"]},"application/x-www-form-urlencoded":{"source":"iana","compressible":true},"application/x-x509-ca-cert":{"source":"iana","extensions":["der","crt","pem"]},"application/x-x509-ca-ra-cert":{"source":"iana"},"application/x-x509-next-ca-cert":{"source":"iana"},"application/x-xfig":{"source":"apache","extensions":["fig"]},"application/x-xliff+xml":{"source":"apache","compressible":true,"extensions":["xlf"]},"application/x-xpinstall":{"source":"apache","compressible":false,"extensions":["xpi"]},"application/x-xz":{"source":"apache","extensions":["xz"]},"application/x-zmachine":{"source":"apache","extensions":["z1","z2","z3","z4","z5","z6","z7","z8"]},"application/x400-bp":{"source":"iana"},"application/xacml+xml":{"source":"iana","compressible":true},"application/xaml+xml":{"source":"apache","compressible":true,"extensions":["xaml"]},"application/xcap-att+xml":{"source":"iana","compressible":true,"extensions":["xav"]},"application/xcap-caps+xml":{"source":"iana","compressible":true,"extensions":["xca"]},"application/xcap-diff+xml":{"source":"iana","compressible":true,"extensions":["xdf"]},"application/xcap-el+xml":{"source":"iana","compressible":true,"extensions":["xel"]},"application/xcap-error+xml":{"source":"iana","compressible":true},"application/xcap-ns+xml":{"source":"iana","compressible":true,"extensions":["xns"]},"application/xcon-conference-info+xml":{"source":"iana","compressible":true},"application/xcon-conference-info-diff+xml":{"source":"iana","compressible":true},"application/xenc+xml":{"source":"iana","compressible":true,"extensions":["xenc"]},"application/xhtml+xml":{"source":"iana","compressible":true,"extensions":["xhtml","xht"]},"application/xhtml-voice+xml":{"source":"apache","compressible":true},"application/xliff+xml":{"source":"iana","compressible":true,"extensions":["xlf"]},"application/xml":{"source":"iana","compressible":true,"extensions":["xml","xsl","xsd","rng"]},"application/xml-dtd":{"source":"iana","compressible":true,"extensions":["dtd"]},"application/xml-external-parsed-entity":{"source":"iana"},"application/xml-patch+xml":{"source":"iana","compressible":true},"application/xmpp+xml":{"source":"iana","compressible":true},"application/xop+xml":{"source":"iana","compressible":true,"extensions":["xop"]},"application/xproc+xml":{"source":"apache","compressible":true,"extensions":["xpl"]},"application/xslt+xml":{"source":"iana","compressible":true,"extensions":["xsl","xslt"]},"application/xspf+xml":{"source":"apache","compressible":true,"extensions":["xspf"]},"application/xv+xml":{"source":"iana","compressible":true,"extensions":["mxml","xhvml","xvml","xvm"]},"application/yang":{"source":"iana","extensions":["yang"]},"application/yang-data+json":{"source":"iana","compressible":true},"application/yang-data+xml":{"source":"iana","compressible":true},"application/yang-patch+json":{"source":"iana","compressible":true},"application/yang-patch+xml":{"source":"iana","compressible":true},"application/yin+xml":{"source":"iana","compressible":true,"extensions":["yin"]},"application/zip":{"source":"iana","compressible":false,"extensions":["zip"]},"application/zlib":{"source":"iana"},"application/zstd":{"source":"iana"},"audio/1d-interleaved-parityfec":{"source":"iana"},"audio/32kadpcm":{"source":"iana"},"audio/3gpp":{"source":"iana","compressible":false,"extensions":["3gpp"]},"audio/3gpp2":{"source":"iana"},"audio/aac":{"source":"iana"},"audio/ac3":{"source":"iana"},"audio/adpcm":{"source":"apache","extensions":["adp"]},"audio/amr":{"source":"iana","extensions":["amr"]},"audio/amr-wb":{"source":"iana"},"audio/amr-wb+":{"source":"iana"},"audio/aptx":{"source":"iana"},"audio/asc":{"source":"iana"},"audio/atrac-advanced-lossless":{"source":"iana"},"audio/atrac-x":{"source":"iana"},"audio/atrac3":{"source":"iana"},"audio/basic":{"source":"iana","compressible":false,"extensions":["au","snd"]},"audio/bv16":{"source":"iana"},"audio/bv32":{"source":"iana"},"audio/clearmode":{"source":"iana"},"audio/cn":{"source":"iana"},"audio/dat12":{"source":"iana"},"audio/dls":{"source":"iana"},"audio/dsr-es201108":{"source":"iana"},"audio/dsr-es202050":{"source":"iana"},"audio/dsr-es202211":{"source":"iana"},"audio/dsr-es202212":{"source":"iana"},"audio/dv":{"source":"iana"},"audio/dvi4":{"source":"iana"},"audio/eac3":{"source":"iana"},"audio/encaprtp":{"source":"iana"},"audio/evrc":{"source":"iana"},"audio/evrc-qcp":{"source":"iana"},"audio/evrc0":{"source":"iana"},"audio/evrc1":{"source":"iana"},"audio/evrcb":{"source":"iana"},"audio/evrcb0":{"source":"iana"},"audio/evrcb1":{"source":"iana"},"audio/evrcnw":{"source":"iana"},"audio/evrcnw0":{"source":"iana"},"audio/evrcnw1":{"source":"iana"},"audio/evrcwb":{"source":"iana"},"audio/evrcwb0":{"source":"iana"},"audio/evrcwb1":{"source":"iana"},"audio/evs":{"source":"iana"},"audio/flexfec":{"source":"iana"},"audio/fwdred":{"source":"iana"},"audio/g711-0":{"source":"iana"},"audio/g719":{"source":"iana"},"audio/g722":{"source":"iana"},"audio/g7221":{"source":"iana"},"audio/g723":{"source":"iana"},"audio/g726-16":{"source":"iana"},"audio/g726-24":{"source":"iana"},"audio/g726-32":{"source":"iana"},"audio/g726-40":{"source":"iana"},"audio/g728":{"source":"iana"},"audio/g729":{"source":"iana"},"audio/g7291":{"source":"iana"},"audio/g729d":{"source":"iana"},"audio/g729e":{"source":"iana"},"audio/gsm":{"source":"iana"},"audio/gsm-efr":{"source":"iana"},"audio/gsm-hr-08":{"source":"iana"},"audio/ilbc":{"source":"iana"},"audio/ip-mr_v2.5":{"source":"iana"},"audio/isac":{"source":"apache"},"audio/l16":{"source":"iana"},"audio/l20":{"source":"iana"},"audio/l24":{"source":"iana","compressible":false},"audio/l8":{"source":"iana"},"audio/lpc":{"source":"iana"},"audio/melp":{"source":"iana"},"audio/melp1200":{"source":"iana"},"audio/melp2400":{"source":"iana"},"audio/melp600":{"source":"iana"},"audio/mhas":{"source":"iana"},"audio/midi":{"source":"apache","extensions":["mid","midi","kar","rmi"]},"audio/mobile-xmf":{"source":"iana","extensions":["mxmf"]},"audio/mp3":{"compressible":false,"extensions":["mp3"]},"audio/mp4":{"source":"iana","compressible":false,"extensions":["m4a","mp4a"]},"audio/mp4a-latm":{"source":"iana"},"audio/mpa":{"source":"iana"},"audio/mpa-robust":{"source":"iana"},"audio/mpeg":{"source":"iana","compressible":false,"extensions":["mpga","mp2","mp2a","mp3","m2a","m3a"]},"audio/mpeg4-generic":{"source":"iana"},"audio/musepack":{"source":"apache"},"audio/ogg":{"source":"iana","compressible":false,"extensions":["oga","ogg","spx","opus"]},"audio/opus":{"source":"iana"},"audio/parityfec":{"source":"iana"},"audio/pcma":{"source":"iana"},"audio/pcma-wb":{"source":"iana"},"audio/pcmu":{"source":"iana"},"audio/pcmu-wb":{"source":"iana"},"audio/prs.sid":{"source":"iana"},"audio/qcelp":{"source":"iana"},"audio/raptorfec":{"source":"iana"},"audio/red":{"source":"iana"},"audio/rtp-enc-aescm128":{"source":"iana"},"audio/rtp-midi":{"source":"iana"},"audio/rtploopback":{"source":"iana"},"audio/rtx":{"source":"iana"},"audio/s3m":{"source":"apache","extensions":["s3m"]},"audio/scip":{"source":"iana"},"audio/silk":{"source":"apache","extensions":["sil"]},"audio/smv":{"source":"iana"},"audio/smv-qcp":{"source":"iana"},"audio/smv0":{"source":"iana"},"audio/sofa":{"source":"iana"},"audio/sp-midi":{"source":"iana"},"audio/speex":{"source":"iana"},"audio/t140c":{"source":"iana"},"audio/t38":{"source":"iana"},"audio/telephone-event":{"source":"iana"},"audio/tetra_acelp":{"source":"iana"},"audio/tetra_acelp_bb":{"source":"iana"},"audio/tone":{"source":"iana"},"audio/tsvcis":{"source":"iana"},"audio/uemclip":{"source":"iana"},"audio/ulpfec":{"source":"iana"},"audio/usac":{"source":"iana"},"audio/vdvi":{"source":"iana"},"audio/vmr-wb":{"source":"iana"},"audio/vnd.3gpp.iufp":{"source":"iana"},"audio/vnd.4sb":{"source":"iana"},"audio/vnd.audiokoz":{"source":"iana"},"audio/vnd.celp":{"source":"iana"},"audio/vnd.cisco.nse":{"source":"iana"},"audio/vnd.cmles.radio-events":{"source":"iana"},"audio/vnd.cns.anp1":{"source":"iana"},"audio/vnd.cns.inf1":{"source":"iana"},"audio/vnd.dece.audio":{"source":"iana","extensions":["uva","uvva"]},"audio/vnd.digital-winds":{"source":"iana","extensions":["eol"]},"audio/vnd.dlna.adts":{"source":"iana"},"audio/vnd.dolby.heaac.1":{"source":"iana"},"audio/vnd.dolby.heaac.2":{"source":"iana"},"audio/vnd.dolby.mlp":{"source":"iana"},"audio/vnd.dolby.mps":{"source":"iana"},"audio/vnd.dolby.pl2":{"source":"iana"},"audio/vnd.dolby.pl2x":{"source":"iana"},"audio/vnd.dolby.pl2z":{"source":"iana"},"audio/vnd.dolby.pulse.1":{"source":"iana"},"audio/vnd.dra":{"source":"iana","extensions":["dra"]},"audio/vnd.dts":{"source":"iana","extensions":["dts"]},"audio/vnd.dts.hd":{"source":"iana","extensions":["dtshd"]},"audio/vnd.dts.uhd":{"source":"iana"},"audio/vnd.dvb.file":{"source":"iana"},"audio/vnd.everad.plj":{"source":"iana"},"audio/vnd.hns.audio":{"source":"iana"},"audio/vnd.lucent.voice":{"source":"iana","extensions":["lvp"]},"audio/vnd.ms-playready.media.pya":{"source":"iana","extensions":["pya"]},"audio/vnd.nokia.mobile-xmf":{"source":"iana"},"audio/vnd.nortel.vbk":{"source":"iana"},"audio/vnd.nuera.ecelp4800":{"source":"iana","extensions":["ecelp4800"]},"audio/vnd.nuera.ecelp7470":{"source":"iana","extensions":["ecelp7470"]},"audio/vnd.nuera.ecelp9600":{"source":"iana","extensions":["ecelp9600"]},"audio/vnd.octel.sbc":{"source":"iana"},"audio/vnd.presonus.multitrack":{"source":"iana"},"audio/vnd.qcelp":{"source":"iana"},"audio/vnd.rhetorex.32kadpcm":{"source":"iana"},"audio/vnd.rip":{"source":"iana","extensions":["rip"]},"audio/vnd.rn-realaudio":{"compressible":false},"audio/vnd.sealedmedia.softseal.mpeg":{"source":"iana"},"audio/vnd.vmx.cvsd":{"source":"iana"},"audio/vnd.wave":{"compressible":false},"audio/vorbis":{"source":"iana","compressible":false},"audio/vorbis-config":{"source":"iana"},"audio/wav":{"compressible":false,"extensions":["wav"]},"audio/wave":{"compressible":false,"extensions":["wav"]},"audio/webm":{"source":"apache","compressible":false,"extensions":["weba"]},"audio/x-aac":{"source":"apache","compressible":false,"extensions":["aac"]},"audio/x-aiff":{"source":"apache","extensions":["aif","aiff","aifc"]},"audio/x-caf":{"source":"apache","compressible":false,"extensions":["caf"]},"audio/x-flac":{"source":"apache","extensions":["flac"]},"audio/x-m4a":{"source":"nginx","extensions":["m4a"]},"audio/x-matroska":{"source":"apache","extensions":["mka"]},"audio/x-mpegurl":{"source":"apache","extensions":["m3u"]},"audio/x-ms-wax":{"source":"apache","extensions":["wax"]},"audio/x-ms-wma":{"source":"apache","extensions":["wma"]},"audio/x-pn-realaudio":{"source":"apache","extensions":["ram","ra"]},"audio/x-pn-realaudio-plugin":{"source":"apache","extensions":["rmp"]},"audio/x-realaudio":{"source":"nginx","extensions":["ra"]},"audio/x-tta":{"source":"apache"},"audio/x-wav":{"source":"apache","extensions":["wav"]},"audio/xm":{"source":"apache","extensions":["xm"]},"chemical/x-cdx":{"source":"apache","extensions":["cdx"]},"chemical/x-cif":{"source":"apache","extensions":["cif"]},"chemical/x-cmdf":{"source":"apache","extensions":["cmdf"]},"chemical/x-cml":{"source":"apache","extensions":["cml"]},"chemical/x-csml":{"source":"apache","extensions":["csml"]},"chemical/x-pdb":{"source":"apache"},"chemical/x-xyz":{"source":"apache","extensions":["xyz"]},"font/collection":{"source":"iana","extensions":["ttc"]},"font/otf":{"source":"iana","compressible":true,"extensions":["otf"]},"font/sfnt":{"source":"iana"},"font/ttf":{"source":"iana","compressible":true,"extensions":["ttf"]},"font/woff":{"source":"iana","extensions":["woff"]},"font/woff2":{"source":"iana","extensions":["woff2"]},"image/aces":{"source":"iana","extensions":["exr"]},"image/apng":{"compressible":false,"extensions":["apng"]},"image/avci":{"source":"iana","extensions":["avci"]},"image/avcs":{"source":"iana","extensions":["avcs"]},"image/avif":{"source":"iana","compressible":false,"extensions":["avif"]},"image/bmp":{"source":"iana","compressible":true,"extensions":["bmp"]},"image/cgm":{"source":"iana","extensions":["cgm"]},"image/dicom-rle":{"source":"iana","extensions":["drle"]},"image/emf":{"source":"iana","extensions":["emf"]},"image/fits":{"source":"iana","extensions":["fits"]},"image/g3fax":{"source":"iana","extensions":["g3"]},"image/gif":{"source":"iana","compressible":false,"extensions":["gif"]},"image/heic":{"source":"iana","extensions":["heic"]},"image/heic-sequence":{"source":"iana","extensions":["heics"]},"image/heif":{"source":"iana","extensions":["heif"]},"image/heif-sequence":{"source":"iana","extensions":["heifs"]},"image/hej2k":{"source":"iana","extensions":["hej2"]},"image/hsj2":{"source":"iana","extensions":["hsj2"]},"image/ief":{"source":"iana","extensions":["ief"]},"image/jls":{"source":"iana","extensions":["jls"]},"image/jp2":{"source":"iana","compressible":false,"extensions":["jp2","jpg2"]},"image/jpeg":{"source":"iana","compressible":false,"extensions":["jpeg","jpg","jpe"]},"image/jph":{"source":"iana","extensions":["jph"]},"image/jphc":{"source":"iana","extensions":["jhc"]},"image/jpm":{"source":"iana","compressible":false,"extensions":["jpm"]},"image/jpx":{"source":"iana","compressible":false,"extensions":["jpx","jpf"]},"image/jxr":{"source":"iana","extensions":["jxr"]},"image/jxra":{"source":"iana","extensions":["jxra"]},"image/jxrs":{"source":"iana","extensions":["jxrs"]},"image/jxs":{"source":"iana","extensions":["jxs"]},"image/jxsc":{"source":"iana","extensions":["jxsc"]},"image/jxsi":{"source":"iana","extensions":["jxsi"]},"image/jxss":{"source":"iana","extensions":["jxss"]},"image/ktx":{"source":"iana","extensions":["ktx"]},"image/ktx2":{"source":"iana","extensions":["ktx2"]},"image/naplps":{"source":"iana"},"image/pjpeg":{"compressible":false},"image/png":{"source":"iana","compressible":false,"extensions":["png"]},"image/prs.btif":{"source":"iana","extensions":["btif"]},"image/prs.pti":{"source":"iana","extensions":["pti"]},"image/pwg-raster":{"source":"iana"},"image/sgi":{"source":"apache","extensions":["sgi"]},"image/svg+xml":{"source":"iana","compressible":true,"extensions":["svg","svgz"]},"image/t38":{"source":"iana","extensions":["t38"]},"image/tiff":{"source":"iana","compressible":false,"extensions":["tif","tiff"]},"image/tiff-fx":{"source":"iana","extensions":["tfx"]},"image/vnd.adobe.photoshop":{"source":"iana","compressible":true,"extensions":["psd"]},"image/vnd.airzip.accelerator.azv":{"source":"iana","extensions":["azv"]},"image/vnd.cns.inf2":{"source":"iana"},"image/vnd.dece.graphic":{"source":"iana","extensions":["uvi","uvvi","uvg","uvvg"]},"image/vnd.djvu":{"source":"iana","extensions":["djvu","djv"]},"image/vnd.dvb.subtitle":{"source":"iana","extensions":["sub"]},"image/vnd.dwg":{"source":"iana","extensions":["dwg"]},"image/vnd.dxf":{"source":"iana","extensions":["dxf"]},"image/vnd.fastbidsheet":{"source":"iana","extensions":["fbs"]},"image/vnd.fpx":{"source":"iana","extensions":["fpx"]},"image/vnd.fst":{"source":"iana","extensions":["fst"]},"image/vnd.fujixerox.edmics-mmr":{"source":"iana","extensions":["mmr"]},"image/vnd.fujixerox.edmics-rlc":{"source":"iana","extensions":["rlc"]},"image/vnd.globalgraphics.pgb":{"source":"iana"},"image/vnd.microsoft.icon":{"source":"iana","compressible":true,"extensions":["ico"]},"image/vnd.mix":{"source":"iana"},"image/vnd.mozilla.apng":{"source":"iana"},"image/vnd.ms-dds":{"compressible":true,"extensions":["dds"]},"image/vnd.ms-modi":{"source":"iana","extensions":["mdi"]},"image/vnd.ms-photo":{"source":"apache","extensions":["wdp"]},"image/vnd.net-fpx":{"source":"iana","extensions":["npx"]},"image/vnd.pco.b16":{"source":"iana","extensions":["b16"]},"image/vnd.radiance":{"source":"iana"},"image/vnd.sealed.png":{"source":"iana"},"image/vnd.sealedmedia.softseal.gif":{"source":"iana"},"image/vnd.sealedmedia.softseal.jpg":{"source":"iana"},"image/vnd.svf":{"source":"iana"},"image/vnd.tencent.tap":{"source":"iana","extensions":["tap"]},"image/vnd.valve.source.texture":{"source":"iana","extensions":["vtf"]},"image/vnd.wap.wbmp":{"source":"iana","extensions":["wbmp"]},"image/vnd.xiff":{"source":"iana","extensions":["xif"]},"image/vnd.zbrush.pcx":{"source":"iana","extensions":["pcx"]},"image/webp":{"source":"apache","extensions":["webp"]},"image/wmf":{"source":"iana","extensions":["wmf"]},"image/x-3ds":{"source":"apache","extensions":["3ds"]},"image/x-cmu-raster":{"source":"apache","extensions":["ras"]},"image/x-cmx":{"source":"apache","extensions":["cmx"]},"image/x-freehand":{"source":"apache","extensions":["fh","fhc","fh4","fh5","fh7"]},"image/x-icon":{"source":"apache","compressible":true,"extensions":["ico"]},"image/x-jng":{"source":"nginx","extensions":["jng"]},"image/x-mrsid-image":{"source":"apache","extensions":["sid"]},"image/x-ms-bmp":{"source":"nginx","compressible":true,"extensions":["bmp"]},"image/x-pcx":{"source":"apache","extensions":["pcx"]},"image/x-pict":{"source":"apache","extensions":["pic","pct"]},"image/x-portable-anymap":{"source":"apache","extensions":["pnm"]},"image/x-portable-bitmap":{"source":"apache","extensions":["pbm"]},"image/x-portable-graymap":{"source":"apache","extensions":["pgm"]},"image/x-portable-pixmap":{"source":"apache","extensions":["ppm"]},"image/x-rgb":{"source":"apache","extensions":["rgb"]},"image/x-tga":{"source":"apache","extensions":["tga"]},"image/x-xbitmap":{"source":"apache","extensions":["xbm"]},"image/x-xcf":{"compressible":false},"image/x-xpixmap":{"source":"apache","extensions":["xpm"]},"image/x-xwindowdump":{"source":"apache","extensions":["xwd"]},"message/cpim":{"source":"iana"},"message/delivery-status":{"source":"iana"},"message/disposition-notification":{"source":"iana","extensions":["disposition-notification"]},"message/external-body":{"source":"iana"},"message/feedback-report":{"source":"iana"},"message/global":{"source":"iana","extensions":["u8msg"]},"message/global-delivery-status":{"source":"iana","extensions":["u8dsn"]},"message/global-disposition-notification":{"source":"iana","extensions":["u8mdn"]},"message/global-headers":{"source":"iana","extensions":["u8hdr"]},"message/http":{"source":"iana","compressible":false},"message/imdn+xml":{"source":"iana","compressible":true},"message/news":{"source":"iana"},"message/partial":{"source":"iana","compressible":false},"message/rfc822":{"source":"iana","compressible":true,"extensions":["eml","mime"]},"message/s-http":{"source":"iana"},"message/sip":{"source":"iana"},"message/sipfrag":{"source":"iana"},"message/tracking-status":{"source":"iana"},"message/vnd.si.simp":{"source":"iana"},"message/vnd.wfa.wsc":{"source":"iana","extensions":["wsc"]},"model/3mf":{"source":"iana","extensions":["3mf"]},"model/e57":{"source":"iana"},"model/gltf+json":{"source":"iana","compressible":true,"extensions":["gltf"]},"model/gltf-binary":{"source":"iana","compressible":true,"extensions":["glb"]},"model/iges":{"source":"iana","compressible":false,"extensions":["igs","iges"]},"model/mesh":{"source":"iana","compressible":false,"extensions":["msh","mesh","silo"]},"model/mtl":{"source":"iana","extensions":["mtl"]},"model/obj":{"source":"iana","extensions":["obj"]},"model/step":{"source":"iana"},"model/step+xml":{"source":"iana","compressible":true,"extensions":["stpx"]},"model/step+zip":{"source":"iana","compressible":false,"extensions":["stpz"]},"model/step-xml+zip":{"source":"iana","compressible":false,"extensions":["stpxz"]},"model/stl":{"source":"iana","extensions":["stl"]},"model/vnd.collada+xml":{"source":"iana","compressible":true,"extensions":["dae"]},"model/vnd.dwf":{"source":"iana","extensions":["dwf"]},"model/vnd.flatland.3dml":{"source":"iana"},"model/vnd.gdl":{"source":"iana","extensions":["gdl"]},"model/vnd.gs-gdl":{"source":"apache"},"model/vnd.gs.gdl":{"source":"iana"},"model/vnd.gtw":{"source":"iana","extensions":["gtw"]},"model/vnd.moml+xml":{"source":"iana","compressible":true},"model/vnd.mts":{"source":"iana","extensions":["mts"]},"model/vnd.opengex":{"source":"iana","extensions":["ogex"]},"model/vnd.parasolid.transmit.binary":{"source":"iana","extensions":["x_b"]},"model/vnd.parasolid.transmit.text":{"source":"iana","extensions":["x_t"]},"model/vnd.pytha.pyox":{"source":"iana"},"model/vnd.rosette.annotated-data-model":{"source":"iana"},"model/vnd.sap.vds":{"source":"iana","extensions":["vds"]},"model/vnd.usdz+zip":{"source":"iana","compressible":false,"extensions":["usdz"]},"model/vnd.valve.source.compiled-map":{"source":"iana","extensions":["bsp"]},"model/vnd.vtu":{"source":"iana","extensions":["vtu"]},"model/vrml":{"source":"iana","compressible":false,"extensions":["wrl","vrml"]},"model/x3d+binary":{"source":"apache","compressible":false,"extensions":["x3db","x3dbz"]},"model/x3d+fastinfoset":{"source":"iana","extensions":["x3db"]},"model/x3d+vrml":{"source":"apache","compressible":false,"extensions":["x3dv","x3dvz"]},"model/x3d+xml":{"source":"iana","compressible":true,"extensions":["x3d","x3dz"]},"model/x3d-vrml":{"source":"iana","extensions":["x3dv"]},"multipart/alternative":{"source":"iana","compressible":false},"multipart/appledouble":{"source":"iana"},"multipart/byteranges":{"source":"iana"},"multipart/digest":{"source":"iana"},"multipart/encrypted":{"source":"iana","compressible":false},"multipart/form-data":{"source":"iana","compressible":false},"multipart/header-set":{"source":"iana"},"multipart/mixed":{"source":"iana"},"multipart/multilingual":{"source":"iana"},"multipart/parallel":{"source":"iana"},"multipart/related":{"source":"iana","compressible":false},"multipart/report":{"source":"iana"},"multipart/signed":{"source":"iana","compressible":false},"multipart/vnd.bint.med-plus":{"source":"iana"},"multipart/voice-message":{"source":"iana"},"multipart/x-mixed-replace":{"source":"iana"},"text/1d-interleaved-parityfec":{"source":"iana"},"text/cache-manifest":{"source":"iana","compressible":true,"extensions":["appcache","manifest"]},"text/calendar":{"source":"iana","extensions":["ics","ifb"]},"text/calender":{"compressible":true},"text/cmd":{"compressible":true},"text/coffeescript":{"extensions":["coffee","litcoffee"]},"text/cql":{"source":"iana"},"text/cql-expression":{"source":"iana"},"text/cql-identifier":{"source":"iana"},"text/css":{"source":"iana","charset":"UTF-8","compressible":true,"extensions":["css"]},"text/csv":{"source":"iana","compressible":true,"extensions":["csv"]},"text/csv-schema":{"source":"iana"},"text/directory":{"source":"iana"},"text/dns":{"source":"iana"},"text/ecmascript":{"source":"iana"},"text/encaprtp":{"source":"iana"},"text/enriched":{"source":"iana"},"text/fhirpath":{"source":"iana"},"text/flexfec":{"source":"iana"},"text/fwdred":{"source":"iana"},"text/gff3":{"source":"iana"},"text/grammar-ref-list":{"source":"iana"},"text/html":{"source":"iana","compressible":true,"extensions":["html","htm","shtml"]},"text/jade":{"extensions":["jade"]},"text/javascript":{"source":"iana","compressible":true},"text/jcr-cnd":{"source":"iana"},"text/jsx":{"compressible":true,"extensions":["jsx"]},"text/less":{"compressible":true,"extensions":["less"]},"text/markdown":{"source":"iana","compressible":true,"extensions":["markdown","md"]},"text/mathml":{"source":"nginx","extensions":["mml"]},"text/mdx":{"compressible":true,"extensions":["mdx"]},"text/mizar":{"source":"iana"},"text/n3":{"source":"iana","charset":"UTF-8","compressible":true,"extensions":["n3"]},"text/parameters":{"source":"iana","charset":"UTF-8"},"text/parityfec":{"source":"iana"},"text/plain":{"source":"iana","compressible":true,"extensions":["txt","text","conf","def","list","log","in","ini"]},"text/provenance-notation":{"source":"iana","charset":"UTF-8"},"text/prs.fallenstein.rst":{"source":"iana"},"text/prs.lines.tag":{"source":"iana","extensions":["dsc"]},"text/prs.prop.logic":{"source":"iana"},"text/raptorfec":{"source":"iana"},"text/red":{"source":"iana"},"text/rfc822-headers":{"source":"iana"},"text/richtext":{"source":"iana","compressible":true,"extensions":["rtx"]},"text/rtf":{"source":"iana","compressible":true,"extensions":["rtf"]},"text/rtp-enc-aescm128":{"source":"iana"},"text/rtploopback":{"source":"iana"},"text/rtx":{"source":"iana"},"text/sgml":{"source":"iana","extensions":["sgml","sgm"]},"text/shaclc":{"source":"iana"},"text/shex":{"source":"iana","extensions":["shex"]},"text/slim":{"extensions":["slim","slm"]},"text/spdx":{"source":"iana","extensions":["spdx"]},"text/strings":{"source":"iana"},"text/stylus":{"extensions":["stylus","styl"]},"text/t140":{"source":"iana"},"text/tab-separated-values":{"source":"iana","compressible":true,"extensions":["tsv"]},"text/troff":{"source":"iana","extensions":["t","tr","roff","man","me","ms"]},"text/turtle":{"source":"iana","charset":"UTF-8","extensions":["ttl"]},"text/ulpfec":{"source":"iana"},"text/uri-list":{"source":"iana","compressible":true,"extensions":["uri","uris","urls"]},"text/vcard":{"source":"iana","compressible":true,"extensions":["vcard"]},"text/vnd.a":{"source":"iana"},"text/vnd.abc":{"source":"iana"},"text/vnd.ascii-art":{"source":"iana"},"text/vnd.curl":{"source":"iana","extensions":["curl"]},"text/vnd.curl.dcurl":{"source":"apache","extensions":["dcurl"]},"text/vnd.curl.mcurl":{"source":"apache","extensions":["mcurl"]},"text/vnd.curl.scurl":{"source":"apache","extensions":["scurl"]},"text/vnd.debian.copyright":{"source":"iana","charset":"UTF-8"},"text/vnd.dmclientscript":{"source":"iana"},"text/vnd.dvb.subtitle":{"source":"iana","extensions":["sub"]},"text/vnd.esmertec.theme-descriptor":{"source":"iana","charset":"UTF-8"},"text/vnd.familysearch.gedcom":{"source":"iana","extensions":["ged"]},"text/vnd.ficlab.flt":{"source":"iana"},"text/vnd.fly":{"source":"iana","extensions":["fly"]},"text/vnd.fmi.flexstor":{"source":"iana","extensions":["flx"]},"text/vnd.gml":{"source":"iana"},"text/vnd.graphviz":{"source":"iana","extensions":["gv"]},"text/vnd.hans":{"source":"iana"},"text/vnd.hgl":{"source":"iana"},"text/vnd.in3d.3dml":{"source":"iana","extensions":["3dml"]},"text/vnd.in3d.spot":{"source":"iana","extensions":["spot"]},"text/vnd.iptc.newsml":{"source":"iana"},"text/vnd.iptc.nitf":{"source":"iana"},"text/vnd.latex-z":{"source":"iana"},"text/vnd.motorola.reflex":{"source":"iana"},"text/vnd.ms-mediapackage":{"source":"iana"},"text/vnd.net2phone.commcenter.command":{"source":"iana"},"text/vnd.radisys.msml-basic-layout":{"source":"iana"},"text/vnd.senx.warpscript":{"source":"iana"},"text/vnd.si.uricatalogue":{"source":"iana"},"text/vnd.sosi":{"source":"iana"},"text/vnd.sun.j2me.app-descriptor":{"source":"iana","charset":"UTF-8","extensions":["jad"]},"text/vnd.trolltech.linguist":{"source":"iana","charset":"UTF-8"},"text/vnd.wap.si":{"source":"iana"},"text/vnd.wap.sl":{"source":"iana"},"text/vnd.wap.wml":{"source":"iana","extensions":["wml"]},"text/vnd.wap.wmlscript":{"source":"iana","extensions":["wmls"]},"text/vtt":{"source":"iana","charset":"UTF-8","compressible":true,"extensions":["vtt"]},"text/x-asm":{"source":"apache","extensions":["s","asm"]},"text/x-c":{"source":"apache","extensions":["c","cc","cxx","cpp","h","hh","dic"]},"text/x-component":{"source":"nginx","extensions":["htc"]},"text/x-fortran":{"source":"apache","extensions":["f","for","f77","f90"]},"text/x-gwt-rpc":{"compressible":true},"text/x-handlebars-template":{"extensions":["hbs"]},"text/x-java-source":{"source":"apache","extensions":["java"]},"text/x-jquery-tmpl":{"compressible":true},"text/x-lua":{"extensions":["lua"]},"text/x-markdown":{"compressible":true,"extensions":["mkd"]},"text/x-nfo":{"source":"apache","extensions":["nfo"]},"text/x-opml":{"source":"apache","extensions":["opml"]},"text/x-org":{"compressible":true,"extensions":["org"]},"text/x-pascal":{"source":"apache","extensions":["p","pas"]},"text/x-processing":{"compressible":true,"extensions":["pde"]},"text/x-sass":{"extensions":["sass"]},"text/x-scss":{"extensions":["scss"]},"text/x-setext":{"source":"apache","extensions":["etx"]},"text/x-sfv":{"source":"apache","extensions":["sfv"]},"text/x-suse-ymp":{"compressible":true,"extensions":["ymp"]},"text/x-uuencode":{"source":"apache","extensions":["uu"]},"text/x-vcalendar":{"source":"apache","extensions":["vcs"]},"text/x-vcard":{"source":"apache","extensions":["vcf"]},"text/xml":{"source":"iana","compressible":true,"extensions":["xml"]},"text/xml-external-parsed-entity":{"source":"iana"},"text/yaml":{"compressible":true,"extensions":["yaml","yml"]},"video/1d-interleaved-parityfec":{"source":"iana"},"video/3gpp":{"source":"iana","extensions":["3gp","3gpp"]},"video/3gpp-tt":{"source":"iana"},"video/3gpp2":{"source":"iana","extensions":["3g2"]},"video/av1":{"source":"iana"},"video/bmpeg":{"source":"iana"},"video/bt656":{"source":"iana"},"video/celb":{"source":"iana"},"video/dv":{"source":"iana"},"video/encaprtp":{"source":"iana"},"video/ffv1":{"source":"iana"},"video/flexfec":{"source":"iana"},"video/h261":{"source":"iana","extensions":["h261"]},"video/h263":{"source":"iana","extensions":["h263"]},"video/h263-1998":{"source":"iana"},"video/h263-2000":{"source":"iana"},"video/h264":{"source":"iana","extensions":["h264"]},"video/h264-rcdo":{"source":"iana"},"video/h264-svc":{"source":"iana"},"video/h265":{"source":"iana"},"video/iso.segment":{"source":"iana","extensions":["m4s"]},"video/jpeg":{"source":"iana","extensions":["jpgv"]},"video/jpeg2000":{"source":"iana"},"video/jpm":{"source":"apache","extensions":["jpm","jpgm"]},"video/jxsv":{"source":"iana"},"video/mj2":{"source":"iana","extensions":["mj2","mjp2"]},"video/mp1s":{"source":"iana"},"video/mp2p":{"source":"iana"},"video/mp2t":{"source":"iana","extensions":["ts"]},"video/mp4":{"source":"iana","compressible":false,"extensions":["mp4","mp4v","mpg4"]},"video/mp4v-es":{"source":"iana"},"video/mpeg":{"source":"iana","compressible":false,"extensions":["mpeg","mpg","mpe","m1v","m2v"]},"video/mpeg4-generic":{"source":"iana"},"video/mpv":{"source":"iana"},"video/nv":{"source":"iana"},"video/ogg":{"source":"iana","compressible":false,"extensions":["ogv"]},"video/parityfec":{"source":"iana"},"video/pointer":{"source":"iana"},"video/quicktime":{"source":"iana","compressible":false,"extensions":["qt","mov"]},"video/raptorfec":{"source":"iana"},"video/raw":{"source":"iana"},"video/rtp-enc-aescm128":{"source":"iana"},"video/rtploopback":{"source":"iana"},"video/rtx":{"source":"iana"},"video/scip":{"source":"iana"},"video/smpte291":{"source":"iana"},"video/smpte292m":{"source":"iana"},"video/ulpfec":{"source":"iana"},"video/vc1":{"source":"iana"},"video/vc2":{"source":"iana"},"video/vnd.cctv":{"source":"iana"},"video/vnd.dece.hd":{"source":"iana","extensions":["uvh","uvvh"]},"video/vnd.dece.mobile":{"source":"iana","extensions":["uvm","uvvm"]},"video/vnd.dece.mp4":{"source":"iana"},"video/vnd.dece.pd":{"source":"iana","extensions":["uvp","uvvp"]},"video/vnd.dece.sd":{"source":"iana","extensions":["uvs","uvvs"]},"video/vnd.dece.video":{"source":"iana","extensions":["uvv","uvvv"]},"video/vnd.directv.mpeg":{"source":"iana"},"video/vnd.directv.mpeg-tts":{"source":"iana"},"video/vnd.dlna.mpeg-tts":{"source":"iana"},"video/vnd.dvb.file":{"source":"iana","extensions":["dvb"]},"video/vnd.fvt":{"source":"iana","extensions":["fvt"]},"video/vnd.hns.video":{"source":"iana"},"video/vnd.iptvforum.1dparityfec-1010":{"source":"iana"},"video/vnd.iptvforum.1dparityfec-2005":{"source":"iana"},"video/vnd.iptvforum.2dparityfec-1010":{"source":"iana"},"video/vnd.iptvforum.2dparityfec-2005":{"source":"iana"},"video/vnd.iptvforum.ttsavc":{"source":"iana"},"video/vnd.iptvforum.ttsmpeg2":{"source":"iana"},"video/vnd.motorola.video":{"source":"iana"},"video/vnd.motorola.videop":{"source":"iana"},"video/vnd.mpegurl":{"source":"iana","extensions":["mxu","m4u"]},"video/vnd.ms-playready.media.pyv":{"source":"iana","extensions":["pyv"]},"video/vnd.nokia.interleaved-multimedia":{"source":"iana"},"video/vnd.nokia.mp4vr":{"source":"iana"},"video/vnd.nokia.videovoip":{"source":"iana"},"video/vnd.objectvideo":{"source":"iana"},"video/vnd.radgamettools.bink":{"source":"iana"},"video/vnd.radgamettools.smacker":{"source":"iana"},"video/vnd.sealed.mpeg1":{"source":"iana"},"video/vnd.sealed.mpeg4":{"source":"iana"},"video/vnd.sealed.swf":{"source":"iana"},"video/vnd.sealedmedia.softseal.mov":{"source":"iana"},"video/vnd.uvvu.mp4":{"source":"iana","extensions":["uvu","uvvu"]},"video/vnd.vivo":{"source":"iana","extensions":["viv"]},"video/vnd.youtube.yt":{"source":"iana"},"video/vp8":{"source":"iana"},"video/vp9":{"source":"iana"},"video/webm":{"source":"apache","compressible":false,"extensions":["webm"]},"video/x-f4v":{"source":"apache","extensions":["f4v"]},"video/x-fli":{"source":"apache","extensions":["fli"]},"video/x-flv":{"source":"apache","compressible":false,"extensions":["flv"]},"video/x-m4v":{"source":"apache","extensions":["m4v"]},"video/x-matroska":{"source":"apache","compressible":false,"extensions":["mkv","mk3d","mks"]},"video/x-mng":{"source":"apache","extensions":["mng"]},"video/x-ms-asf":{"source":"apache","extensions":["asf","asx"]},"video/x-ms-vob":{"source":"apache","extensions":["vob"]},"video/x-ms-wm":{"source":"apache","extensions":["wm"]},"video/x-ms-wmv":{"source":"apache","compressible":false,"extensions":["wmv"]},"video/x-ms-wmx":{"source":"apache","extensions":["wmx"]},"video/x-ms-wvx":{"source":"apache","extensions":["wvx"]},"video/x-msvideo":{"source":"apache","extensions":["avi"]},"video/x-sgi-movie":{"source":"apache","extensions":["movie"]},"video/x-smv":{"source":"apache","extensions":["smv"]},"x-conference/x-cooltalk":{"source":"apache","extensions":["ice"]},"x-shader/x-fragment":{"compressible":true},"x-shader/x-vertex":{"compressible":true}}')},4147:e=>{"use strict";e.exports=JSON.parse('{"name":"node-mailjet","version":"6.0.6","main":"./dist/mailjet.node.js","browser":"./dist/mailjet.web.js","types":"./dist/declarations/index.d.ts","description":"Mailjet API client","author":"Mailjet","license":"MIT","private":true,"keywords":["email","sms","node","mail","mailjet"],"engines":{"node":">= 12.0.0","npm":">= 6.9.0"},"files":["lib/**","dist/**"],"directories":{"lib":"./lib","docs":"./docs"},"typescript":{"definition":"./dist/declarations/index.d.ts"},"scripts":{"test":"npm run ts:mocha test/","test:int":"npm run ts:mocha test/integration/","test:unit":"npm run ts:mocha test/unit/","test:watch":"mocha --extension ts -r tsconfig-paths/register -r ts-node/register --watch","cover":"npm run cover:expandable npm run test","cover:int":"npm run cover:expandable npm run test:int","cover:unit":"npm run cover:expandable npm run test:unit","cover:expandable":"nyc --reporter=text-summary --reporter=lcov --report-dir=.coverage --temp-dir=./.coverage/.nyc_output","build":"npm run build:release && npm run build:prepublish","build:dev":"webpack --config ./webpack/webpack.dev.config.js --progress --color","build:release":"webpack --config ./webpack/webpack.release.config.js --progress --color","build:prepublish":"node ./scripts/PreparePackage.js","build:watch":"webpack --watch --config ./webpack/webpack.dev.config.js --progress --color","lint":"eslint .","lint:fix":"eslint --fix .","lint:errors":"eslint --quiet .","ts:run":"ts-node --transpileOnly --project ./tsconfig.json -r tsconfig-paths/register","ts:watch":"ts-node-dev --respawn --transpile-only --project ./tsconfig.json -r tsconfig-paths/register","ts:mocha":"mocha --extension ts --recursive -r tsconfig-paths/register -r ts-node/register","ts:patch":"ts-patch install -s","init":"npm install && npm run ts:patch && npm run pkg:prepare","pkg:link":"cd ./dist && npm link && echo \'\\n=== link name: node-mailjet ===\'","pkg:prepare":"husky install","pkg:precommit":"npm audit && npm run lint:errors && npm run test","release":"standard-version -a","release:dry":"standard-version --dry-run","release:quiet":"standard-version --no-verify -a","release:minor":"standard-version -a --release-as minor","release:patch":"standard-version -a --release-as patch","release:major":"standard-version -a --release-as major","docs":"typedoc --tsconfig ./tsconfig.json"},"dependencies":{"axios":"1.7.4","json-bigint":"^1.0.0","url-join":"^4.0.0"},"devDependencies":{"@babel/core":"^7.18.0","@babel/preset-env":"^7.18.0","@commitlint/cli":"^17.0.2","@commitlint/config-conventional":"^17.0.2","@types/chai":"^4.3.1","@types/json-bigint":"^1.0.1","@types/mocha":"^9.1.1","@types/node":"^17.0.34","@types/qs":"^6.9.7","@types/superagent":"^4.1.15","@types/url-join":"^4.0.1","@typescript-eslint/eslint-plugin":"^5.24.0","@typescript-eslint/parser":"^5.24.0","babel-loader":"^8.2.5","chai":"^4.1.0","eslint":"^8.15.0","eslint-config-airbnb-base":"^15.0.0","eslint-import-resolver-typescript":"^2.7.1","eslint-plugin-import":"^2.26.0","eslint-plugin-tsdoc":"^0.2.16","husky":"^8.0.1","mocha":"^9.0.0","nock":"^13.2.4","nyc":"^15.1.0","qs":"^6.5.0","standard-version":"^9.5.0","terser-webpack-plugin":"^5.3.1","ts-loader":"^9.3.0","ts-node":"^10.7.0","ts-node-dev":"^1.1.8","ts-patch":"^2.0.1","tsconfig-paths":"^4.0.0","tsconfig-paths-webpack-plugin":"^3.5.2","typedoc":"^0.22.15","typescript":"^4.6.4","typescript-transform-paths":"^3.3.1","webpack":"^5.76.0","webpack-cli":"^4.9.2","webpack-merge":"^5.8.0"},"homepage":"https://github.com/mailjet/mailjet-apiv3-nodejs#readme","repository":{"type":"git","url":"git+https://github.com/mailjet/mailjet-apiv3-nodejs.git"},"bugs":{"url":"https://github.com/mailjet/mailjet-apiv3-nodejs/issues"},"contributors":["Arnaud Breton (https://github.com/arnaudbreton)","Nicholas Smith (https://github.com/safani)","Jérémie Parker (https://github.com/p-j)"]}')}},a={},n=function n(i){var o=a[i];if(void 0!==o)return o.exports;var t=a[i]={exports:{}};return e[i].call(t.exports,t,t.exports,n),t.exports}(8321),n=n.default;var e,a,n})); +//# sourceMappingURL=data:application/json;charset=utf-8;base64,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LFlBQUFBLElBQUFBLGNBQ0FBLEVBQUFBLEVBQUFBLGNBQUFBLElBQUFBLGdCQUNBQSxFQUFBQSxFQUFBQSxnQkFBQUEsSUFBQUEsa0JBQ0FBLEVBQUFBLEVBQUFBLFdBQUFBLElBQUFBLGFBQ0FBLEVBQUFBLEVBQUFBLFdBQUFBLElBQUFBLGFBQ0FBLEVBQUFBLEVBQUFBLG9CQUFBQSxJQUFBQSxzQkFDQUEsRUFBQUEsRUFBQUEsZUFBQUEsSUFBQUEsaUJBQ0FBLEVBQUFBLEVBQUFBLG1CQUFBQSxJQUFBQSxxQkFDQUEsRUFBQUEsRUFBQUEsd0JBQUFBLElBQUFBLDBCQUNBQSxFQUFBQSxFQUFBQSxRQUFBQSxJQUFBQSxVQUNBQSxFQUFBQSxFQUFBQSxZQUFBQSxJQUFBQSxjQUNBQSxFQUFBQSxFQUFBQSxhQUFBQSxJQUFBQSxjQUNELENBdEJELENBQVlELEVBQUFBLGVBQUFBLEVBQUFBLGFBQVksS0F3QnhCLFNBQVlFLEdBQ1ZBLEVBQUFBLEVBQUFBLGNBQUFBLEdBQUFBLGdCQUNBQSxFQUFBQSxFQUFBQSxVQUFBQSxHQUFBQSxZQUNBQSxFQUFBQSxFQUFBQSxRQUFBQSxHQUFBQSxTQUNELENBSkQsQ0FBWUYsRUFBQUEsV0FBQUEsRUFBQUEsU0FBUSxLQU1wQixTQUFZRyxHQUNWQSxFQUFBQSxFQUFBQSxVQUFBQSxHQUFBQSxZQUNBQSxFQUFBQSxFQUFBQSxPQUFBQSxHQUFBQSxTQUNBQSxFQUFBQSxFQUFBQSxLQUFBQSxHQUFBQSxPQUNBQSxFQUFBQSxFQUFBQSxPQUFBQSxHQUFBQSxTQUNBQSxFQUFBQSxFQUFBQSxRQUFBQSxHQUFBQSxVQUNBQSxFQUFBQSxFQUFBQSxPQUFBQSxHQUFBQSxTQUNBQSxFQUFBQSxFQUFBQSxLQUFBQSxHQUFBQSxPQUNBQSxFQUFBQSxFQUFBQSxNQUFBQSxHQUFBQSxRQUNBQSxFQUFBQSxFQUFBQSxRQUFBQSxHQUFBQSxVQUNBQSxFQUFBQSxFQUFBQSxXQUFBQSxHQUFBQSxhQUNBQSxFQUFBQSxFQUFBQSxXQUFBQSxJQUFBQSxhQUNBQSxFQUFBQSxFQUFBQSxTQUFB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L0QsSUFBSTRSLEVBQ3JCLEVBRUFMLEdBQU0xM0IsT0ExSU4sU0FBZ0JuckIsR0FDZCxPQUFPLFNBQWNrWCxHQUNuQixPQUFPbFgsRUFBU3drQixNQUFNLEtBQU10TixFQUM5QixDQUNGLEVBeUlBMnJDLEdBQU1NLGFBaElOLFNBQXNCQyxHQUNwQixPQUFPbm1CLEdBQVEvQyxTQUFTa3BCLEtBQXNDLElBQXpCQSxFQUFRRCxZQUMvQyxFQWlJQU4sR0FBTXJNLFlBQWNBLEdBRXBCcU0sR0FBTTNjLGFBQWVrQyxHQUVyQnlhLEdBQU1RLFdBQWF6cEIsR0FBU29LLEdBQWUvRyxHQUFRdEIsV0FBVy9CLEdBQVMsSUFBSXZLLFNBQVN1SyxHQUFTQSxHQUU3RmlwQixHQUFNUyxXQUFheEgsR0FFbkIrRyxHQUFNakUsZUFBaUJnRSxHQUV2QkMsR0FBTTU5QixRQUFVNDlCLEdBRWhCN2pELEVBQU9ELFFBQVU4akQsdXJsSkNwb0piVSxFQUEyQixDQUFDLEVDRTVCQyxFRENKLFNBQVNDLEVBQW9CQyxHQUU1QixJQUFJQyxFQUFlSixFQUF5QkcsR0FDNUMsUUFBcUI1OUMsSUFBakI2OUMsRUFDSCxPQUFPQSxFQUFhNWtELFFBR3JCLElBQUlDLEVBQVN1a0QsRUFBeUJHLEdBQVksQ0FHakQza0QsUUFBUyxDQUFDLEdBT1gsT0FIQTZrRCxFQUFvQkYsR0FBVXZ2QyxLQUFLblYsRUFBT0QsUUFBU0MsRUFBUUEsRUFBT0QsUUFBUzBrRCxHQUdwRXprRCxFQUFPRCxPQUNmLENDbkIwQjBrRCxDQUFvQixrQnBFTzlDLE1tRVRJRixFQ0VBQyIsInNvdXJjZXMiOlsid2VicGFjazovL21haWxqZXQvd2VicGFjay91bml2ZXJzYWxNb2R1bGVEZWZpbml0aW9uIiwid2VicGFjazovL21haWxqZXQvLi9ub2RlX21vZHVsZXMvYXN5bmNraXQvaW5kZXguanMiLCJ3ZWJwYWNrOi8vbWFpbGpldC8uL25vZGVfbW9kdWxlcy9hc3luY2tpdC9saWIvYWJvcnQuanMiLCJ3ZWJwYWNrOi8vbWFpbGpldC8uL25vZGVfbW9kdWxlcy9hc3luY2tpdC9saWIvYXN5bmMuanMiLCJ3ZWJwYWNrOi8vbWFpbGpldC8uL25vZGVfbW9kdWxlcy9hc3luY2tpdC9saWIvZGVmZXIuanMiLCJ3ZWJwYWNrOi8vbWFpbGpldC8uL25vZGVfbW9kdWxlcy9hc3luY2tpdC9saWIvaXRlcmF0ZS5qcyIsIndlYnBhY2s6Ly9tYWlsamV0Ly4vbm9kZV9tb2R1bGVzL2FzeW5ja2l0L2xpYi9zdGF0ZS5qcyIsIndlYnBhY2s6Ly9tYWlsamV0Ly4vbm9kZV9tb2R1bGVzL2FzeW5ja2l0L2xpYi90ZXJtaW5hdG9yLmpzIiwid2VicGFjazovL21haWxqZXQvLi9ub2RlX21vZHVsZXMvYXN5bmNraXQvcGFyYWxsZWwuanMiLCJ3ZWJwYWNrOi8vbWFpbGpldC8uL25vZGVfbW9kdWxlcy9hc3luY2tpdC9zZXJpYWwuanMiLCJ3ZWJwYWNrOi8vbWFpbGpldC8uL25vZGVfbW9kdWxlcy9hc3luY2tpdC9zZXJpYWxPcmRlcmVkLmpzIiwid2VicGFjazovL21haWxqZXQvLi9saWIvY2xpZW50L2luZGV4LnRzIiwid2VicGFjazovL21haWxqZXQvLi9saWIvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vbWFpbGpldC8uL2xpYi9yZXF1ZXN0L0h0dHBNZXRob2RzLnRzIiwid2VicGFjazovL21haWxqZXQvLi9saWIvcmVxdWVzdC9pbmRleC50cyIsIndlYnBhY2s6Ly9tYWlsamV0Ly4vbGliL3R5cGVzL2FwaS9DYW1wYWlnbi50cyIsIndlYnBhY2s6Ly9tYWlsamV0Ly4vbGliL3R5cGVzL2FwaS9Db21tb24udHMiLCJ3ZWJwYWNrOi8vbWFpbGpldC8uL2xpYi90eXBlcy9hcGkvQ29udGFjdC50cyIsIndlYnBhY2s6Ly9tYWlsamV0Ly4vbGliL3R5cGVzL2FwaS9NZXNzYWdlLnRzIiwid2VicGFjazovL21haWxqZXQvLi9saWIvdHlwZXMvYXBpL1NlZ21lbnRhdGlvbi50cyIsIndlYnBhY2s6Ly9tYWlsamV0Ly4vbGliL3R5cGVzL2FwaS9TZW5kRW1haWwudHMiLCJ3ZWJwYWNrOi8vbWFpbGpldC8uL2xpYi90eXBlcy9hcGkvU2VuZGVyQWRkcmVzc0FuZERvbWFpbi50cyIsIndlYnBhY2s6Ly9tYWlsamV0Ly4vbGliL3R5cGVzL2FwaS9TZXR0aW5nLnRzIiwid2VicGFjazovL21haWxqZXQvLi9saWIvdHlwZXMvYXBpL1N0YXRpc3RpYy50cyIsIndlYnBhY2s6Ly9tYWlsamV0Ly4vbGliL3R5cGVzL2FwaS9UZW1wbGF0ZS50cyIsIndlYnBhY2s6Ly9tYWlsamV0Ly4vbGliL3R5cGVzL2FwaS9XZWJob29rLnRzIiwid2VicGFjazovL21haWxqZXQvLi9saWIvdHlwZXMvYXBpL2luZGV4LnRzIiwid2VicGFjazovL21haWxqZXQvLi9saWIvdXRpbHMvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vbWFpbGpldC8uL2xpYi91dGlscy9pc05pbC50cyIsIndlYnBhY2s6Ly9tYWlsamV0Ly4vbGliL3V0aWxzL2lzTnVsbC50cyIsIndlYnBhY2s6Ly9tYWlsamV0Ly4vbGliL3V0aWxzL2lzUHVyZU9iamVjdC50cyIsIndlYnBhY2s6Ly9tYWlsamV0Ly4vbGliL3V0aWxzL2lzVW5kZWZpbmVkLnRzIiwid2VicGFjazovL21haWxqZXQvLi9saWIvdXRpbHMvc2V0VmFsdWVJZk5vdE5pbC50cyIsIndlYnBhY2s6Ly9tYWlsamV0Ly4vbm9kZV9tb2R1bGVzL2JpZ251bWJlci5qcy9iaWdudW1iZXIuanMiLCJ3ZWJwYWNrOi8vbWFpbGpldC8uL25vZGVfbW9kdWxlcy9jb21iaW5lZC1zdHJlYW0vbGliL2NvbWJpbmVkX3N0cmVhbS5qcyIsIndlYnBhY2s6Ly9tYWlsamV0Ly4vbm9kZV9tb2R1bGVzL2RlYnVnL25vZGVfbW9kdWxlcy9tcy9pbmRleC5qcyIsIndlYnBhY2s6Ly9tYWlsamV0Ly4vbm9kZV9tb2R1bGVzL2RlYnVnL3NyYy9icm93c2VyLmpzIiwid2VicGFjazovL21haWxqZXQvLi9ub2RlX21vZHVsZXMvZGVidWcvc3JjL2NvbW1vbi5qcyIsIndlYnBhY2s6Ly9tYWlsamV0Ly4vbm9kZV9tb2R1bGVzL2RlYnVnL3NyYy9pbmRleC5qcyIsIndlYnBhY2s6Ly9tYWlsamV0Ly4vbm9kZV9tb2R1bGVzL2RlYnVnL3NyYy9ub2RlLmpzIiwid2VicGFjazovL21haWxqZXQvLi9ub2RlX21vZHVsZXMvZGVsYXllZC1zdHJlYW0vbGliL2RlbGF5ZWRfc3RyZWFtLmpzIiwid2VicGFjazovL21haWxqZXQvLi9ub2RlX21vZHVsZXMvZm9sbG93LXJlZGlyZWN0cy9kZWJ1Zy5qcyIsIndlYnBhY2s6Ly9tYWlsamV0Ly4vbm9kZV9tb2R1bGVzL2ZvbGxvdy1yZWRpcmVjdHMvaW5kZXguanMiLCJ3ZWJwYWNrOi8vbWFpbGpldC8uL25vZGVfbW9kdWxlcy9mb3JtLWRhdGEvbGliL2Zvcm1fZGF0YS5qcyIsIndlYnBhY2s6Ly9tYWlsamV0Ly4vbm9kZV9tb2R1bGVzL2Zvcm0tZGF0YS9saWIvcG9wdWxhdGUuanMiLCJ3ZWJwYWNrOi8vbWFpbGpldC8uL25vZGVfbW9kdWxlcy9oYXMtZmxhZy9pbmRleC5qcyIsIndlYnBhY2s6Ly9tYWlsamV0Ly4vbm9kZV9tb2R1bGVzL2pzb24tYmlnaW50L2luZGV4LmpzIiwid2VicGFjazovL21haWxqZXQvLi9ub2RlX21vZHVsZXMvanNvbi1iaWdpbnQvbGliL3BhcnNlLmpzIiwid2VicGFjazovL21haWxqZXQvLi9ub2RlX21vZHVsZXMvanNvbi1iaWdpbnQvbGliL3N0cmluZ2lmeS5qcyIsIndlYnBhY2s6Ly9tYWlsamV0Ly4vbm9kZV9tb2R1bGVzL21pbWUtZGIvaW5kZXguanMiLCJ3ZWJwYWNrOi8vbWFpbGpldC8uL25vZGVfbW9kdWxlcy9taW1lLXR5cGVzL2luZGV4LmpzIiwid2VicGFjazovL21haWxqZXQvLi9ub2RlX21vZHVsZXMvcHJveHktZnJvbS1lbnYvaW5kZXguanMiLCJ3ZWJwYWNrOi8vbWFpbGpldC8uL25vZGVfbW9kdWxlcy9zdXBwb3J0cy1jb2xvci9pbmRleC5qcyIsIndlYnBhY2s6Ly9tYWlsamV0Ly4vbm9kZV9tb2R1bGVzL3VybC1qb2luL2xpYi91cmwtam9pbi5qcyIsIndlYnBhY2s6Ly9tYWlsamV0L2V4dGVybmFsIG5vZGUtY29tbW9uanMgXCJhc3NlcnRcIiIsIndlYnBhY2s6Ly9tYWlsamV0L2V4dGVybmFsIG5vZGUtY29tbW9uanMgXCJldmVudHNcIiIsIndlYnBhY2s6Ly9tYWlsamV0L2V4dGVybmFsIG5vZGUtY29tbW9uanMgXCJmc1wiIiwid2VicGFjazovL21haWxqZXQvZXh0ZXJuYWwgbm9kZS1jb21tb25qcyBcImh0dHBcIiIsIndlYnBhY2s6Ly9tYWlsamV0L2V4dGVybmFsIG5vZGUtY29tbW9uanMgXCJodHRwc1wiIiwid2VicGFjazovL21haWxqZXQvZXh0ZXJuYWwgbm9kZS1jb21tb25qcyBcIm9zXCIiLCJ3ZWJwYWNrOi8vbWFpbGpldC9leHRlcm5hbCBub2RlLWNvbW1vbmpzIFwicGF0aFwiIiwid2VicGFjazovL21haWxqZXQvZXh0ZXJuYWwgbm9kZS1jb21tb25qcyBcInN0cmVhbVwiIiwid2VicGFjazovL21haWxqZXQvZXh0ZXJuYWwgbm9kZS1jb21tb25qcyBcInR0eVwiIiwid2VicGFjazovL21haWxqZXQvZXh0ZXJuYWwgbm9kZS1jb21tb25qcyBcInVybFwiIiwid2VicGFjazovL21haWxqZXQvZXh0ZXJuYWwgbm9kZS1jb21tb25qcyBcInV0aWxcIiIsIndlYnBhY2s6Ly9tYWlsamV0L2V4dGVybmFsIG5vZGUtY29tbW9uanMgXCJ6bGliXCIiLCJ3ZWJwYWNrOi8vbWFpbGpldC8uL25vZGVfbW9kdWxlcy9heGlvcy9kaXN0L25vZGUvYXhpb3MuY2pzIiwid2VicGFjazovL21haWxqZXQvd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vbWFpbGpldC93ZWJwYWNrL3N0YXJ0dXAiXSwic291cmNlc0NvbnRlbnQiOlsiKGZ1bmN0aW9uIHdlYnBhY2tVbml2ZXJzYWxNb2R1bGVEZWZpbml0aW9uKHJvb3QsIGZhY3RvcnkpIHtcblx0aWYodHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgPT09ICdvYmplY3QnKVxuXHRcdG1vZHVsZS5leHBvcnRzID0gZmFjdG9yeSgpO1xuXHRlbHNlIGlmKHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZClcblx0XHRkZWZpbmUoW10sIGZhY3RvcnkpO1xuXHRlbHNlIGlmKHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0Jylcblx0XHRleHBvcnRzW1wibWFpbGpldFwiXSA9IGZhY3RvcnkoKTtcblx0ZWxzZVxuXHRcdHJvb3RbXCJtYWlsamV0XCJdID0gZmFjdG9yeSgpO1xufSkodGhpcywgKCkgPT4ge1xucmV0dXJuICIsIm1vZHVsZS5leHBvcnRzID1cbntcbiAgcGFyYWxsZWwgICAgICA6IHJlcXVpcmUoJy4vcGFyYWxsZWwuanMnKSxcbiAgc2VyaWFsICAgICAgICA6IHJlcXVpcmUoJy4vc2VyaWFsLmpzJyksXG4gIHNlcmlhbE9yZGVyZWQgOiByZXF1aXJlKCcuL3NlcmlhbE9yZGVyZWQuanMnKVxufTtcbiIsIi8vIEFQSVxubW9kdWxlLmV4cG9ydHMgPSBhYm9ydDtcblxuLyoqXG4gKiBBYm9ydHMgbGVmdG92ZXIgYWN0aXZlIGpvYnNcbiAqXG4gKiBAcGFyYW0ge29iamVjdH0gc3RhdGUgLSBjdXJyZW50IHN0YXRlIG9iamVjdFxuICovXG5mdW5jdGlvbiBhYm9ydChzdGF0ZSlcbntcbiAgT2JqZWN0LmtleXMoc3RhdGUuam9icykuZm9yRWFjaChjbGVhbi5iaW5kKHN0YXRlKSk7XG5cbiAgLy8gcmVzZXQgbGVmdG92ZXIgam9ic1xuICBzdGF0ZS5qb2JzID0ge307XG59XG5cbi8qKlxuICogQ2xlYW5zIHVwIGxlZnRvdmVyIGpvYiBieSBpbnZva2luZyBhYm9ydCBmdW5jdGlvbiBmb3IgdGhlIHByb3ZpZGVkIGpvYiBpZFxuICpcbiAqIEB0aGlzICBzdGF0ZVxuICogQHBhcmFtIHtzdHJpbmd8bnVtYmVyfSBrZXkgLSBqb2IgaWQgdG8gYWJvcnRcbiAqL1xuZnVuY3Rpb24gY2xlYW4oa2V5KVxue1xuICBpZiAodHlwZW9mIHRoaXMuam9ic1trZXldID09ICdmdW5jdGlvbicpXG4gIHtcbiAgICB0aGlzLmpvYnNba2V5XSgpO1xuICB9XG59XG4iLCJ2YXIgZGVmZXIgPSByZXF1aXJlKCcuL2RlZmVyLmpzJyk7XG5cbi8vIEFQSVxubW9kdWxlLmV4cG9ydHMgPSBhc3luYztcblxuLyoqXG4gKiBSdW5zIHByb3ZpZGVkIGNhbGxiYWNrIGFzeW5jaHJvbm91c2x5XG4gKiBldmVuIGlmIGNhbGxiYWNrIGl0c2VsZiBpcyBub3RcbiAqXG4gKiBAcGFyYW0gICB7ZnVuY3Rpb259IGNhbGxiYWNrIC0gY2FsbGJhY2sgdG8gaW52b2tlXG4gKiBAcmV0dXJucyB7ZnVuY3Rpb259IC0gYXVnbWVudGVkIGNhbGxiYWNrXG4gKi9cbmZ1bmN0aW9uIGFzeW5jKGNhbGxiYWNrKVxue1xuICB2YXIgaXNBc3luYyA9IGZhbHNlO1xuXG4gIC8vIGNoZWNrIGlmIGFzeW5jIGhhcHBlbmVkXG4gIGRlZmVyKGZ1bmN0aW9uKCkgeyBpc0FzeW5jID0gdHJ1ZTsgfSk7XG5cbiAgcmV0dXJuIGZ1bmN0aW9uIGFzeW5jX2NhbGxiYWNrKGVyciwgcmVzdWx0KVxuICB7XG4gICAgaWYgKGlzQXN5bmMpXG4gICAge1xuICAgICAgY2FsbGJhY2soZXJyLCByZXN1bHQpO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgZGVmZXIoZnVuY3Rpb24gbmV4dFRpY2tfY2FsbGJhY2soKVxuICAgICAge1xuICAgICAgICBjYWxsYmFjayhlcnIsIHJlc3VsdCk7XG4gICAgICB9KTtcbiAgICB9XG4gIH07XG59XG4iLCJtb2R1bGUuZXhwb3J0cyA9IGRlZmVyO1xuXG4vKipcbiAqIFJ1bnMgcHJvdmlkZWQgZnVuY3Rpb24gb24gbmV4dCBpdGVyYXRpb24gb2YgdGhlIGV2ZW50IGxvb3BcbiAqXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBmbiAtIGZ1bmN0aW9uIHRvIHJ1blxuICovXG5mdW5jdGlvbiBkZWZlcihmbilcbntcbiAgdmFyIG5leHRUaWNrID0gdHlwZW9mIHNldEltbWVkaWF0ZSA9PSAnZnVuY3Rpb24nXG4gICAgPyBzZXRJbW1lZGlhdGVcbiAgICA6IChcbiAgICAgIHR5cGVvZiBwcm9jZXNzID09ICdvYmplY3QnICYmIHR5cGVvZiBwcm9jZXNzLm5leHRUaWNrID09ICdmdW5jdGlvbidcbiAgICAgID8gcHJvY2Vzcy5uZXh0VGlja1xuICAgICAgOiBudWxsXG4gICAgKTtcblxuICBpZiAobmV4dFRpY2spXG4gIHtcbiAgICBuZXh0VGljayhmbik7XG4gIH1cbiAgZWxzZVxuICB7XG4gICAgc2V0VGltZW91dChmbiwgMCk7XG4gIH1cbn1cbiIsInZhciBhc3luYyA9IHJlcXVpcmUoJy4vYXN5bmMuanMnKVxuICAsIGFib3J0ID0gcmVxdWlyZSgnLi9hYm9ydC5qcycpXG4gIDtcblxuLy8gQVBJXG5tb2R1bGUuZXhwb3J0cyA9IGl0ZXJhdGU7XG5cbi8qKlxuICogSXRlcmF0ZXMgb3ZlciBlYWNoIGpvYiBvYmplY3RcbiAqXG4gKiBAcGFyYW0ge2FycmF5fG9iamVjdH0gbGlzdCAtIGFycmF5IG9yIG9iamVjdCAobmFtZWQgbGlzdCkgdG8gaXRlcmF0ZSBvdmVyXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBpdGVyYXRvciAtIGl0ZXJhdG9yIHRvIHJ1blxuICogQHBhcmFtIHtvYmplY3R9IHN0YXRlIC0gY3VycmVudCBqb2Igc3RhdHVzXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBjYWxsYmFjayAtIGludm9rZWQgd2hlbiBhbGwgZWxlbWVudHMgcHJvY2Vzc2VkXG4gKi9cbmZ1bmN0aW9uIGl0ZXJhdGUobGlzdCwgaXRlcmF0b3IsIHN0YXRlLCBjYWxsYmFjaylcbntcbiAgLy8gc3RvcmUgY3VycmVudCBpbmRleFxuICB2YXIga2V5ID0gc3RhdGVbJ2tleWVkTGlzdCddID8gc3RhdGVbJ2tleWVkTGlzdCddW3N0YXRlLmluZGV4XSA6IHN0YXRlLmluZGV4O1xuXG4gIHN0YXRlLmpvYnNba2V5XSA9IHJ1bkpvYihpdGVyYXRvciwga2V5LCBsaXN0W2tleV0sIGZ1bmN0aW9uKGVycm9yLCBvdXRwdXQpXG4gIHtcbiAgICAvLyBkb24ndCByZXBlYXQgeW91cnNlbGZcbiAgICAvLyBza2lwIHNlY29uZGFyeSBjYWxsYmFja3NcbiAgICBpZiAoIShrZXkgaW4gc3RhdGUuam9icykpXG4gICAge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIGNsZWFuIHVwIGpvYnNcbiAgICBkZWxldGUgc3RhdGUuam9ic1trZXldO1xuXG4gICAgaWYgKGVycm9yKVxuICAgIHtcbiAgICAgIC8vIGRvbid0IHByb2Nlc3MgcmVzdCBvZiB0aGUgcmVzdWx0c1xuICAgICAgLy8gc3RvcCBzdGlsbCBhY3RpdmUgam9ic1xuICAgICAgLy8gYW5kIHJlc2V0IHRoZSBsaXN0XG4gICAgICBhYm9ydChzdGF0ZSk7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICBzdGF0ZS5yZXN1bHRzW2tleV0gPSBvdXRwdXQ7XG4gICAgfVxuXG4gICAgLy8gcmV0dXJuIHNhbHZhZ2VkIHJlc3VsdHNcbiAgICBjYWxsYmFjayhlcnJvciwgc3RhdGUucmVzdWx0cyk7XG4gIH0pO1xufVxuXG4vKipcbiAqIFJ1bnMgaXRlcmF0b3Igb3ZlciBwcm92aWRlZCBqb2IgZWxlbWVudFxuICpcbiAqIEBwYXJhbSAgIHtmdW5jdGlvbn0gaXRlcmF0b3IgLSBpdGVyYXRvciB0byBpbnZva2VcbiAqIEBwYXJhbSAgIHtzdHJpbmd8bnVtYmVyfSBrZXkgLSBrZXkvaW5kZXggb2YgdGhlIGVsZW1lbnQgaW4gdGhlIGxpc3Qgb2Ygam9ic1xuICogQHBhcmFtICAge21peGVkfSBpdGVtIC0gam9iIGRlc2NyaXB0aW9uXG4gKiBAcGFyYW0gICB7ZnVuY3Rpb259IGNhbGxiYWNrIC0gaW52b2tlZCBhZnRlciBpdGVyYXRvciBpcyBkb25lIHdpdGggdGhlIGpvYlxuICogQHJldHVybnMge2Z1bmN0aW9ufG1peGVkfSAtIGpvYiBhYm9ydCBmdW5jdGlvbiBvciBzb21ldGhpbmcgZWxzZVxuICovXG5mdW5jdGlvbiBydW5Kb2IoaXRlcmF0b3IsIGtleSwgaXRlbSwgY2FsbGJhY2spXG57XG4gIHZhciBhYm9ydGVyO1xuXG4gIC8vIGFsbG93IHNob3J0Y3V0IGlmIGl0ZXJhdG9yIGV4cGVjdHMgb25seSB0d28gYXJndW1lbnRzXG4gIGlmIChpdGVyYXRvci5sZW5ndGggPT0gMilcbiAge1xuICAgIGFib3J0ZXIgPSBpdGVyYXRvcihpdGVtLCBhc3luYyhjYWxsYmFjaykpO1xuICB9XG4gIC8vIG90aGVyd2lzZSBnbyB3aXRoIGZ1bGwgdGhyZWUgYXJndW1lbnRzXG4gIGVsc2VcbiAge1xuICAgIGFib3J0ZXIgPSBpdGVyYXRvcihpdGVtLCBrZXksIGFzeW5jKGNhbGxiYWNrKSk7XG4gIH1cblxuICByZXR1cm4gYWJvcnRlcjtcbn1cbiIsIi8vIEFQSVxubW9kdWxlLmV4cG9ydHMgPSBzdGF0ZTtcblxuLyoqXG4gKiBDcmVhdGVzIGluaXRpYWwgc3RhdGUgb2JqZWN0XG4gKiBmb3IgaXRlcmF0aW9uIG92ZXIgbGlzdFxuICpcbiAqIEBwYXJhbSAgIHthcnJheXxvYmplY3R9IGxpc3QgLSBsaXN0IHRvIGl0ZXJhdGUgb3ZlclxuICogQHBhcmFtICAge2Z1bmN0aW9ufG51bGx9IHNvcnRNZXRob2QgLSBmdW5jdGlvbiB0byB1c2UgZm9yIGtleXMgc29ydCxcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yIGBudWxsYCB0byBrZWVwIHRoZW0gYXMgaXNcbiAqIEByZXR1cm5zIHtvYmplY3R9IC0gaW5pdGlhbCBzdGF0ZSBvYmplY3RcbiAqL1xuZnVuY3Rpb24gc3RhdGUobGlzdCwgc29ydE1ldGhvZClcbntcbiAgdmFyIGlzTmFtZWRMaXN0ID0gIUFycmF5LmlzQXJyYXkobGlzdClcbiAgICAsIGluaXRTdGF0ZSA9XG4gICAge1xuICAgICAgaW5kZXggICAgOiAwLFxuICAgICAga2V5ZWRMaXN0OiBpc05hbWVkTGlzdCB8fCBzb3J0TWV0aG9kID8gT2JqZWN0LmtleXMobGlzdCkgOiBudWxsLFxuICAgICAgam9icyAgICAgOiB7fSxcbiAgICAgIHJlc3VsdHMgIDogaXNOYW1lZExpc3QgPyB7fSA6IFtdLFxuICAgICAgc2l6ZSAgICAgOiBpc05hbWVkTGlzdCA/IE9iamVjdC5rZXlzKGxpc3QpLmxlbmd0aCA6IGxpc3QubGVuZ3RoXG4gICAgfVxuICAgIDtcblxuICBpZiAoc29ydE1ldGhvZClcbiAge1xuICAgIC8vIHNvcnQgYXJyYXkga2V5cyBiYXNlZCBvbiBpdCdzIHZhbHVlc1xuICAgIC8vIHNvcnQgb2JqZWN0J3Mga2V5cyBqdXN0IG9uIG93biBtZXJpdFxuICAgIGluaXRTdGF0ZS5rZXllZExpc3Quc29ydChpc05hbWVkTGlzdCA/IHNvcnRNZXRob2QgOiBmdW5jdGlvbihhLCBiKVxuICAgIHtcbiAgICAgIHJldHVybiBzb3J0TWV0aG9kKGxpc3RbYV0sIGxpc3RbYl0pO1xuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIGluaXRTdGF0ZTtcbn1cbiIsInZhciBhYm9ydCA9IHJlcXVpcmUoJy4vYWJvcnQuanMnKVxuICAsIGFzeW5jID0gcmVxdWlyZSgnLi9hc3luYy5qcycpXG4gIDtcblxuLy8gQVBJXG5tb2R1bGUuZXhwb3J0cyA9IHRlcm1pbmF0b3I7XG5cbi8qKlxuICogVGVybWluYXRlcyBqb2JzIGluIHRoZSBhdHRhY2hlZCBzdGF0ZSBjb250ZXh0XG4gKlxuICogQHRoaXMgIEFzeW5jS2l0U3RhdGUjXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBjYWxsYmFjayAtIGZpbmFsIGNhbGxiYWNrIHRvIGludm9rZSBhZnRlciB0ZXJtaW5hdGlvblxuICovXG5mdW5jdGlvbiB0ZXJtaW5hdG9yKGNhbGxiYWNrKVxue1xuICBpZiAoIU9iamVjdC5rZXlzKHRoaXMuam9icykubGVuZ3RoKVxuICB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLy8gZmFzdCBmb3J3YXJkIGl0ZXJhdGlvbiBpbmRleFxuICB0aGlzLmluZGV4ID0gdGhpcy5zaXplO1xuXG4gIC8vIGFib3J0IGpvYnNcbiAgYWJvcnQodGhpcyk7XG5cbiAgLy8gc2VuZCBiYWNrIHJlc3VsdHMgd2UgaGF2ZSBzbyBmYXJcbiAgYXN5bmMoY2FsbGJhY2spKG51bGwsIHRoaXMucmVzdWx0cyk7XG59XG4iLCJ2YXIgaXRlcmF0ZSAgICA9IHJlcXVpcmUoJy4vbGliL2l0ZXJhdGUuanMnKVxuICAsIGluaXRTdGF0ZSAgPSByZXF1aXJlKCcuL2xpYi9zdGF0ZS5qcycpXG4gICwgdGVybWluYXRvciA9IHJlcXVpcmUoJy4vbGliL3Rlcm1pbmF0b3IuanMnKVxuICA7XG5cbi8vIFB1YmxpYyBBUElcbm1vZHVsZS5leHBvcnRzID0gcGFyYWxsZWw7XG5cbi8qKlxuICogUnVucyBpdGVyYXRvciBvdmVyIHByb3ZpZGVkIGFycmF5IGVsZW1lbnRzIGluIHBhcmFsbGVsXG4gKlxuICogQHBhcmFtICAge2FycmF5fG9iamVjdH0gbGlzdCAtIGFycmF5IG9yIG9iamVjdCAobmFtZWQgbGlzdCkgdG8gaXRlcmF0ZSBvdmVyXG4gKiBAcGFyYW0gICB7ZnVuY3Rpb259IGl0ZXJhdG9yIC0gaXRlcmF0b3IgdG8gcnVuXG4gKiBAcGFyYW0gICB7ZnVuY3Rpb259IGNhbGxiYWNrIC0gaW52b2tlZCB3aGVuIGFsbCBlbGVtZW50cyBwcm9jZXNzZWRcbiAqIEByZXR1cm5zIHtmdW5jdGlvbn0gLSBqb2JzIHRlcm1pbmF0b3JcbiAqL1xuZnVuY3Rpb24gcGFyYWxsZWwobGlzdCwgaXRlcmF0b3IsIGNhbGxiYWNrKVxue1xuICB2YXIgc3RhdGUgPSBpbml0U3RhdGUobGlzdCk7XG5cbiAgd2hpbGUgKHN0YXRlLmluZGV4IDwgKHN0YXRlWydrZXllZExpc3QnXSB8fCBsaXN0KS5sZW5ndGgpXG4gIHtcbiAgICBpdGVyYXRlKGxpc3QsIGl0ZXJhdG9yLCBzdGF0ZSwgZnVuY3Rpb24oZXJyb3IsIHJlc3VsdClcbiAgICB7XG4gICAgICBpZiAoZXJyb3IpXG4gICAgICB7XG4gICAgICAgIGNhbGxiYWNrKGVycm9yLCByZXN1bHQpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIC8vIGxvb2tzIGxpa2UgaXQncyB0aGUgbGFzdCBvbmVcbiAgICAgIGlmIChPYmplY3Qua2V5cyhzdGF0ZS5qb2JzKS5sZW5ndGggPT09IDApXG4gICAgICB7XG4gICAgICAgIGNhbGxiYWNrKG51bGwsIHN0YXRlLnJlc3VsdHMpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBzdGF0ZS5pbmRleCsrO1xuICB9XG5cbiAgcmV0dXJuIHRlcm1pbmF0b3IuYmluZChzdGF0ZSwgY2FsbGJhY2spO1xufVxuIiwidmFyIHNlcmlhbE9yZGVyZWQgPSByZXF1aXJlKCcuL3NlcmlhbE9yZGVyZWQuanMnKTtcblxuLy8gUHVibGljIEFQSVxubW9kdWxlLmV4cG9ydHMgPSBzZXJpYWw7XG5cbi8qKlxuICogUnVucyBpdGVyYXRvciBvdmVyIHByb3ZpZGVkIGFycmF5IGVsZW1lbnRzIGluIHNlcmllc1xuICpcbiAqIEBwYXJhbSAgIHthcnJheXxvYmplY3R9IGxpc3QgLSBhcnJheSBvciBvYmplY3QgKG5hbWVkIGxpc3QpIHRvIGl0ZXJhdGUgb3ZlclxuICogQHBhcmFtICAge2Z1bmN0aW9ufSBpdGVyYXRvciAtIGl0ZXJhdG9yIHRvIHJ1blxuICogQHBhcmFtICAge2Z1bmN0aW9ufSBjYWxsYmFjayAtIGludm9rZWQgd2hlbiBhbGwgZWxlbWVudHMgcHJvY2Vzc2VkXG4gKiBAcmV0dXJucyB7ZnVuY3Rpb259IC0gam9icyB0ZXJtaW5hdG9yXG4gKi9cbmZ1bmN0aW9uIHNlcmlhbChsaXN0LCBpdGVyYXRvciwgY2FsbGJhY2spXG57XG4gIHJldHVybiBzZXJpYWxPcmRlcmVkKGxpc3QsIGl0ZXJhdG9yLCBudWxsLCBjYWxsYmFjayk7XG59XG4iLCJ2YXIgaXRlcmF0ZSAgICA9IHJlcXVpcmUoJy4vbGliL2l0ZXJhdGUuanMnKVxuICAsIGluaXRTdGF0ZSAgPSByZXF1aXJlKCcuL2xpYi9zdGF0ZS5qcycpXG4gICwgdGVybWluYXRvciA9IHJlcXVpcmUoJy4vbGliL3Rlcm1pbmF0b3IuanMnKVxuICA7XG5cbi8vIFB1YmxpYyBBUElcbm1vZHVsZS5leHBvcnRzID0gc2VyaWFsT3JkZXJlZDtcbi8vIHNvcnRpbmcgaGVscGVyc1xubW9kdWxlLmV4cG9ydHMuYXNjZW5kaW5nICA9IGFzY2VuZGluZztcbm1vZHVsZS5leHBvcnRzLmRlc2NlbmRpbmcgPSBkZXNjZW5kaW5nO1xuXG4vKipcbiAqIFJ1bnMgaXRlcmF0b3Igb3ZlciBwcm92aWRlZCBzb3J0ZWQgYXJyYXkgZWxlbWVudHMgaW4gc2VyaWVzXG4gKlxuICogQHBhcmFtICAge2FycmF5fG9iamVjdH0gbGlzdCAtIGFycmF5IG9yIG9iamVjdCAobmFtZWQgbGlzdCkgdG8gaXRlcmF0ZSBvdmVyXG4gKiBAcGFyYW0gICB7ZnVuY3Rpb259IGl0ZXJhdG9yIC0gaXRlcmF0b3IgdG8gcnVuXG4gKiBAcGFyYW0gICB7ZnVuY3Rpb259IHNvcnRNZXRob2QgLSBjdXN0b20gc29ydCBmdW5jdGlvblxuICogQHBhcmFtICAge2Z1bmN0aW9ufSBjYWxsYmFjayAtIGludm9rZWQgd2hlbiBhbGwgZWxlbWVudHMgcHJvY2Vzc2VkXG4gKiBAcmV0dXJucyB7ZnVuY3Rpb259IC0gam9icyB0ZXJtaW5hdG9yXG4gKi9cbmZ1bmN0aW9uIHNlcmlhbE9yZGVyZWQobGlzdCwgaXRlcmF0b3IsIHNvcnRNZXRob2QsIGNhbGxiYWNrKVxue1xuICB2YXIgc3RhdGUgPSBpbml0U3RhdGUobGlzdCwgc29ydE1ldGhvZCk7XG5cbiAgaXRlcmF0ZShsaXN0LCBpdGVyYXRvciwgc3RhdGUsIGZ1bmN0aW9uIGl0ZXJhdG9ySGFuZGxlcihlcnJvciwgcmVzdWx0KVxuICB7XG4gICAgaWYgKGVycm9yKVxuICAgIHtcbiAgICAgIGNhbGxiYWNrKGVycm9yLCByZXN1bHQpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHN0YXRlLmluZGV4Kys7XG5cbiAgICAvLyBhcmUgd2UgdGhlcmUgeWV0P1xuICAgIGlmIChzdGF0ZS5pbmRleCA8IChzdGF0ZVsna2V5ZWRMaXN0J10gfHwgbGlzdCkubGVuZ3RoKVxuICAgIHtcbiAgICAgIGl0ZXJhdGUobGlzdCwgaXRlcmF0b3IsIHN0YXRlLCBpdGVyYXRvckhhbmRsZXIpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIGRvbmUgaGVyZVxuICAgIGNhbGxiYWNrKG51bGwsIHN0YXRlLnJlc3VsdHMpO1xuICB9KTtcblxuICByZXR1cm4gdGVybWluYXRvci5iaW5kKHN0YXRlLCBjYWxsYmFjayk7XG59XG5cbi8qXG4gKiAtLSBTb3J0IG1ldGhvZHNcbiAqL1xuXG4vKipcbiAqIHNvcnQgaGVscGVyIHRvIHNvcnQgYXJyYXkgZWxlbWVudHMgaW4gYXNjZW5kaW5nIG9yZGVyXG4gKlxuICogQHBhcmFtICAge21peGVkfSBhIC0gYW4gaXRlbSB0byBjb21wYXJlXG4gKiBAcGFyYW0gICB7bWl4ZWR9IGIgLSBhbiBpdGVtIHRvIGNvbXBhcmVcbiAqIEByZXR1cm5zIHtudW1iZXJ9IC0gY29tcGFyaXNvbiByZXN1bHRcbiAqL1xuZnVuY3Rpb24gYXNjZW5kaW5nKGEsIGIpXG57XG4gIHJldHVybiBhIDwgYiA/IC0xIDogYSA+IGIgPyAxIDogMDtcbn1cblxuLyoqXG4gKiBzb3J0IGhlbHBlciB0byBzb3J0IGFycmF5IGVsZW1lbnRzIGluIGRlc2NlbmRpbmcgb3JkZXJcbiAqXG4gKiBAcGFyYW0gICB7bWl4ZWR9IGEgLSBhbiBpdGVtIHRvIGNvbXBhcmVcbiAqIEBwYXJhbSAgIHttaXhlZH0gYiAtIGFuIGl0ZW0gdG8gY29tcGFyZVxuICogQHJldHVybnMge251bWJlcn0gLSBjb21wYXJpc29uIHJlc3VsdFxuICovXG5mdW5jdGlvbiBkZXNjZW5kaW5nKGEsIGIpXG57XG4gIHJldHVybiAtMSAqIGFzY2VuZGluZyhhLCBiKTtcbn1cbiIsIi8qZXh0ZXJuYWwgbW9kdWxlcyovXG4vKnV0aWxzKi9cbmltcG9ydCB7XG4gIGlzUHVyZU9iamVjdCxcbiAgc2V0VmFsdWVJZk5vdE5pbCxcbn0gZnJvbSAnLi4vdXRpbHMnO1xuLyp0eXBlcyovXG5pbXBvcnQgSHR0cE1ldGhvZHMgZnJvbSAnLi4vcmVxdWVzdC9IdHRwTWV0aG9kcyc7XG5pbXBvcnQgeyBDbGllbnRQYXJhbXMgfSBmcm9tICcuL0NsaWVudCc7XG5pbXBvcnQgeyBSZXF1ZXN0Q29uZmlnLCBSZXF1ZXN0T3B0aW9ucywgUmVxdWVzdENvbnN0cnVjdG9yQ29uZmlnIH0gZnJvbSAnLi4vcmVxdWVzdC9SZXF1ZXN0Jztcbi8qbGliKi9cbmltcG9ydCBSZXF1ZXN0IGZyb20gJy4uL3JlcXVlc3QnO1xuaW1wb3J0IHBhY2thZ2VKU09OIGZyb20gJy4uLy4uL3BhY2thZ2UuanNvbic7XG4vKm90aGVyKi9cblxuZXhwb3J0IHR5cGUgQ2xpZW50Q29ubmVjdFBhcmFtcyA9IFBpY2s8Q2xpZW50UGFyYW1zLCAnY29uZmlnJyB8ICdvcHRpb25zJz47XG5cbmNsYXNzIENsaWVudCB7XG4gIHByaXZhdGUgdmVyc2lvbiE6IHN0cmluZztcblxuICBwcml2YXRlIGNvbmZpZyE6IFJlcXVlc3RDb25maWc7XG4gIHByaXZhdGUgb3B0aW9ucyE6IFJlcXVlc3RPcHRpb25zO1xuXG4gIHByaXZhdGUgYXBpS2V5Pzogc3RyaW5nO1xuICBwcml2YXRlIGFwaVNlY3JldD86IHN0cmluZztcbiAgcHJpdmF0ZSBhcGlUb2tlbj86IHN0cmluZztcblxuICBjb25zdHJ1Y3RvcihwYXJhbXM6IENsaWVudFBhcmFtcykge1xuICAgIGlmICghaXNQdXJlT2JqZWN0KHBhcmFtcykpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQXJndW1lbnQgXCJwYXJhbXNcIiBtdXN0IGJlIG9iamVjdCcpO1xuICAgIH1cblxuICAgIHRoaXMuaW5pdCh0aGlzLmNsb25lUGFyYW1zKHBhcmFtcykpO1xuICB9XG5cbiAgcHVibGljIGdldFBhY2thZ2VWZXJzaW9uKCkge1xuICAgIHJldHVybiB0aGlzLnZlcnNpb247XG4gIH1cblxuICBwdWJsaWMgZ2V0QVBJS2V5KCkge1xuICAgIHJldHVybiB0aGlzLmFwaUtleTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRBUElTZWNyZXQoKSB7XG4gICAgcmV0dXJuIHRoaXMuYXBpU2VjcmV0O1xuICB9XG5cbiAgcHVibGljIGdldEFQSVRva2VuKCkge1xuICAgIHJldHVybiB0aGlzLmFwaVRva2VuO1xuICB9XG5cbiAgcHVibGljIGdldENvbmZpZygpIHtcbiAgICByZXR1cm4geyAuLi50aGlzLmNvbmZpZyB9O1xuICB9XG5cbiAgcHVibGljIGdldE9wdGlvbnMoKTogUmVxdWVzdE9wdGlvbnMge1xuICAgIHJldHVybiB7IC4uLnRoaXMub3B0aW9ucyB9O1xuICB9XG5cbiAgcHVibGljIGdldChyZXNvdXJjZTogc3RyaW5nLCBjb25maWc/OiBSZXF1ZXN0Q29uc3RydWN0b3JDb25maWcpIHtcbiAgICByZXR1cm4gbmV3IFJlcXVlc3QodGhpcywgSHR0cE1ldGhvZHMuR2V0LCByZXNvdXJjZSwgY29uZmlnKTtcbiAgfVxuXG4gIHB1YmxpYyBwb3N0KHJlc291cmNlOiBzdHJpbmcsIGNvbmZpZz86IFJlcXVlc3RDb25zdHJ1Y3RvckNvbmZpZykge1xuICAgIHJldHVybiBuZXcgUmVxdWVzdCh0aGlzLCBIdHRwTWV0aG9kcy5Qb3N0LCByZXNvdXJjZSwgY29uZmlnKTtcbiAgfVxuXG4gIHB1YmxpYyBwdXQocmVzb3VyY2U6IHN0cmluZywgY29uZmlnPzogUmVxdWVzdENvbnN0cnVjdG9yQ29uZmlnKSB7XG4gICAgcmV0dXJuIG5ldyBSZXF1ZXN0KHRoaXMsIEh0dHBNZXRob2RzLlB1dCwgcmVzb3VyY2UsIGNvbmZpZyk7XG4gIH1cblxuICBwdWJsaWMgZGVsZXRlKHJlc291cmNlOiBzdHJpbmcsIGNvbmZpZz86IFJlcXVlc3RDb25zdHJ1Y3RvckNvbmZpZykge1xuICAgIHJldHVybiBuZXcgUmVxdWVzdCh0aGlzLCBIdHRwTWV0aG9kcy5EZWxldGUsIHJlc291cmNlLCBjb25maWcpO1xuICB9XG5cbiAgcHJpdmF0ZSBpbml0KHBhcmFtczogQ2xpZW50UGFyYW1zKSB7XG4gICAgaWYgKCFpc1B1cmVPYmplY3QocGFyYW1zKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdBcmd1bWVudCBcInBhcmFtc1wiIG11c3QgYmUgb2JqZWN0Jyk7XG4gICAgfVxuXG4gICAgY29uc3Qge1xuICAgICAgYXBpVG9rZW4sXG4gICAgICBhcGlLZXksXG4gICAgICBhcGlTZWNyZXQsXG4gICAgICBvcHRpb25zLFxuICAgICAgY29uZmlnLFxuICAgIH0gPSBwYXJhbXM7XG5cbiAgICB0aGlzLnZlcnNpb24gPSBDbGllbnQucGFja2FnZUpTT04udmVyc2lvbjtcblxuICAgIHRoaXMuc2V0Q29uZmlnKGNvbmZpZyA/PyBudWxsKTtcbiAgICB0aGlzLnNldE9wdGlvbnMob3B0aW9ucyA/PyBudWxsKTtcblxuICAgIHJldHVybiAnYXBpVG9rZW4nIGluIHBhcmFtc1xuICAgICAgPyB0aGlzLnRva2VuQ29ubmVjdFN0cmF0ZWd5KGFwaVRva2VuKVxuICAgICAgOiB0aGlzLmJhc2ljQ29ubmVjdFN0cmF0ZWd5KGFwaUtleSwgYXBpU2VjcmV0KTtcbiAgfVxuXG4gIHByaXZhdGUgY2xvbmVQYXJhbXMocGFyYW1zOiBDbGllbnRQYXJhbXMpIHtcbiAgICBpZiAoIWlzUHVyZU9iamVjdChwYXJhbXMpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0FyZ3VtZW50IFwicGFyYW1zXCIgbXVzdCBiZSBvYmplY3QnKTtcbiAgICB9XG5cbiAgICBjb25zdCBjbG9uZWRQYXJhbXMgPSB7IC4uLnBhcmFtcyB9O1xuXG4gICAgaWYgKHBhcmFtcy5jb25maWcpIHtcbiAgICAgIGNsb25lZFBhcmFtcy5jb25maWcgPSB7XG4gICAgICAgIC4uLnBhcmFtcy5jb25maWcsXG4gICAgICB9O1xuICAgIH1cblxuICAgIGlmIChwYXJhbXMub3B0aW9ucykge1xuICAgICAgY2xvbmVkUGFyYW1zLm9wdGlvbnMgPSB7XG4gICAgICAgIC4uLnBhcmFtcy5vcHRpb25zLFxuICAgICAgfTtcblxuICAgICAgaWYgKGNsb25lZFBhcmFtcy5vcHRpb25zLnByb3h5KSB7XG4gICAgICAgIGNsb25lZFBhcmFtcy5vcHRpb25zLnByb3h5ID0ge1xuICAgICAgICAgIC4uLmNsb25lZFBhcmFtcy5vcHRpb25zLnByb3h5LFxuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICBpZiAoY2xvbmVkUGFyYW1zLm9wdGlvbnMuaGVhZGVycykge1xuICAgICAgICBjbG9uZWRQYXJhbXMub3B0aW9ucy5oZWFkZXJzID0ge1xuICAgICAgICAgIC4uLmNsb25lZFBhcmFtcy5vcHRpb25zLmhlYWRlcnMsXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGNsb25lZFBhcmFtcztcbiAgfVxuXG4gIHByaXZhdGUgc2V0Q29uZmlnKGN1c3RvbUNvbmZpZzogUGFydGlhbDxSZXF1ZXN0Q29uZmlnPiB8IG51bGwpIHtcbiAgICBpZiAodHlwZW9mIGN1c3RvbUNvbmZpZyAhPT0gJ29iamVjdCcpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQXJndW1lbnQgXCJjdXN0b21Db25maWdcIiBtdXN0IGJlIG9iamVjdCBvciBudWxsJyk7XG4gICAgfVxuXG4gICAgY29uc3QgY29uZmlnID0geyAuLi5DbGllbnQuY29uZmlnIH07XG5cbiAgICBpZiAoY3VzdG9tQ29uZmlnICE9PSBudWxsKSB7XG4gICAgICBzZXRWYWx1ZUlmTm90TmlsKGNvbmZpZywgJ2hvc3QnLCBjdXN0b21Db25maWcuaG9zdCk7XG4gICAgICBzZXRWYWx1ZUlmTm90TmlsKGNvbmZpZywgJ291dHB1dCcsIGN1c3RvbUNvbmZpZy5vdXRwdXQpO1xuICAgICAgc2V0VmFsdWVJZk5vdE5pbChjb25maWcsICd2ZXJzaW9uJywgY3VzdG9tQ29uZmlnLnZlcnNpb24pO1xuICAgIH1cblxuICAgIHRoaXMuY29uZmlnID0gY29uZmlnO1xuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBwcml2YXRlIHNldE9wdGlvbnMob3B0aW9uczogUmVxdWVzdE9wdGlvbnMgfCBudWxsKSB7XG4gICAgaWYgKHR5cGVvZiBvcHRpb25zICE9PSAnb2JqZWN0Jykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdBcmd1bWVudCBcIm9wdGlvbnNcIiBtdXN0IGJlIG9iamVjdCBvciBudWxsJyk7XG4gICAgfVxuXG4gICAgdGhpcy5vcHRpb25zID0gb3B0aW9ucyA/PyB7fTtcblxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgcHJpdmF0ZSB0b2tlbkNvbm5lY3RTdHJhdGVneShhcGlUb2tlbjogc3RyaW5nIHwgdW5kZWZpbmVkKSB7XG4gICAgaWYgKCFhcGlUb2tlbikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdNYWlsamV0IEFQSV9UT0tFTiBpcyByZXF1aXJlZCcpO1xuICAgIH1cblxuICAgIHRoaXMuYXBpVG9rZW4gPSBhcGlUb2tlbjtcblxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgcHJpdmF0ZSBiYXNpY0Nvbm5lY3RTdHJhdGVneShhcGlLZXk6IHN0cmluZyB8IHVuZGVmaW5lZCwgYXBpU2VjcmV0OiBzdHJpbmcgfCB1bmRlZmluZWQpIHtcbiAgICBpZiAoIWFwaUtleSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdNYWlsamV0IEFQSV9LRVkgaXMgcmVxdWlyZWQnKTtcbiAgICB9XG4gICAgaWYgKCFhcGlTZWNyZXQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignTWFpbGpldCBBUElfU0VDUkVUIGlzIHJlcXVpcmVkJyk7XG4gICAgfVxuXG4gICAgdGhpcy5hcGlLZXkgPSBhcGlLZXk7XG4gICAgdGhpcy5hcGlTZWNyZXQgPSBhcGlTZWNyZXQ7XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIHB1YmxpYyBzdGF0aWMgYXBpQ29ubmVjdChhcGlLZXk6IHN0cmluZywgYXBpU2VjcmV0OiBzdHJpbmcsIHBhcmFtcz86IENsaWVudENvbm5lY3RQYXJhbXMpIHtcbiAgICByZXR1cm4gbmV3IENsaWVudCh7IGFwaUtleSwgYXBpU2VjcmV0LCAuLi5wYXJhbXMgfSk7XG4gIH1cblxuICBwdWJsaWMgc3RhdGljIHNtc0Nvbm5lY3QoYXBpVG9rZW46IHN0cmluZywgcGFyYW1zPzogQ2xpZW50Q29ubmVjdFBhcmFtcykge1xuICAgIHJldHVybiBuZXcgQ2xpZW50KHsgYXBpVG9rZW4sIC4uLnBhcmFtcyB9KTtcbiAgfVxuXG4gIHB1YmxpYyBzdGF0aWMgY29uZmlnOiBSZWFkb25seTxSZXF1ZXN0Q29uZmlnPiA9IE9iamVjdC5mcmVlemUoe1xuICAgIGhvc3Q6ICdhcGkubWFpbGpldC5jb20nLFxuICAgIHZlcnNpb246ICd2MycsXG4gICAgb3V0cHV0OiAnanNvbicsXG4gIH0gYXMgY29uc3QpO1xuXG4gIHB1YmxpYyBzdGF0aWMgcGFja2FnZUpTT04gPSBPYmplY3QuZnJlZXplKHtcbiAgICAuLi5wYWNrYWdlSlNPTixcbiAgfSBhcyBjb25zdCk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IENsaWVudDtcbiIsIi8qZXh0ZXJuYWwgbW9kdWxlcyovXG4vKnV0aWxzKi9cbi8qdHlwZXMqL1xuaW1wb3J0IEh0dHBNZXRob2RzIGZyb20gJy4vcmVxdWVzdC9IdHRwTWV0aG9kcyc7XG4vKmxpYiovXG5pbXBvcnQgUmVxdWVzdCBmcm9tICcuL3JlcXVlc3QvaW5kZXgnO1xuaW1wb3J0IENsaWVudCBmcm9tICcuL2NsaWVudC9pbmRleCc7XG4vKm90aGVyKi9cblxuY2xhc3MgTWFpbGpldCBleHRlbmRzIENsaWVudCB7XG4gIHN0YXRpYyBSZXF1ZXN0ID0gUmVxdWVzdDtcbiAgc3RhdGljIEh0dHBNZXRob2RzID0gSHR0cE1ldGhvZHM7XG4gIHN0YXRpYyBDbGllbnQgPSBDbGllbnQ7XG59XG5cbmV4cG9ydCAqIGZyb20gJy4vdHlwZXMvYXBpJztcbmV4cG9ydCB7IENsaWVudCwgUmVxdWVzdCwgSHR0cE1ldGhvZHMgfTtcbmV4cG9ydCBkZWZhdWx0IE1haWxqZXQ7XG4iLCIvKmV4dGVybmFsIG1vZHVsZXMqL1xuLyp0eXBlcyovXG4vKnV0aWxzKi9cbi8qbGliKi9cbi8qb3RoZXIqL1xuXG5lbnVtIEh0dHBNZXRob2RzIHtcbiAgR2V0ID0gJ2dldCcsXG4gIFBvc3QgPSAncG9zdCcsXG4gIFB1dCA9ICdwdXQnLFxuICBEZWxldGUgPSAnZGVsZXRlJ1xufVxuXG5leHBvcnQgZGVmYXVsdCBIdHRwTWV0aG9kcztcbiIsIi8qZXh0ZXJuYWwgbW9kdWxlcyovXG5pbXBvcnQgdXJsSm9pbiBmcm9tICd1cmwtam9pbic7XG5pbXBvcnQgSlNPTkJpZ0ludCBmcm9tICdqc29uLWJpZ2ludCc7XG5pbXBvcnQgYXhpb3MsIHsgQXhpb3NFcnJvciB9IGZyb20gJ2F4aW9zJztcbi8qdXRpbHMqL1xuaW1wb3J0IHsgc2V0VmFsdWVJZk5vdE5pbCB9IGZyb20gJy4uL3V0aWxzL2luZGV4Jztcbi8qdHlwZXMqL1xuaW1wb3J0IHsgVE9iamVjdCB9IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCB7IExpYnJhcnlSZXNwb25zZSwgTGlicmFyeUxvY2FsUmVzcG9uc2UgfSBmcm9tICcuLi90eXBlcy9hcGknO1xuaW1wb3J0IEh0dHBNZXRob2RzIGZyb20gJy4vSHR0cE1ldGhvZHMnO1xuaW1wb3J0IHtcbiAgUmVxdWVzdENvbmZpZyxcbiAgUmVxdWVzdERhdGEsXG4gIFJlcXVlc3RQYXJhbXMsXG4gIFJlcXVlc3RDb25zdHJ1Y3RvckNvbmZpZyxcbiAgUmVxdWVzdEF4aW9zQ29uZmlnLFxuICBTdWJQYXRoLFxufSBmcm9tICcuL1JlcXVlc3QnO1xuLypsaWIqL1xuaW1wb3J0IENsaWVudCBmcm9tICcuLi9jbGllbnQnO1xuLypvdGhlciovXG5cbnR5cGUgVW5rbm93blJlYyA9IFRPYmplY3QuVW5rbm93blJlY1xuXG5jb25zdCBKU09OYiA9IEpTT05CaWdJbnQoeyBzdG9yZUFzU3RyaW5nOiB0cnVlIH0pO1xuXG5jbGFzcyBSZXF1ZXN0IHtcbiAgcHJpdmF0ZSByZWFkb25seSBjbGllbnQ6IENsaWVudDtcbiAgcHJpdmF0ZSByZWFkb25seSBtZXRob2Q6IEh0dHBNZXRob2RzO1xuICBwcml2YXRlIHJlYWRvbmx5IGNvbmZpZzogUGFydGlhbDxSZXF1ZXN0Q29uZmlnPjtcbiAgcHJpdmF0ZSByZWFkb25seSByZXNvdXJjZTogc3RyaW5nO1xuXG4gIHByaXZhdGUgdXJsOiBzdHJpbmc7XG4gIHByaXZhdGUgc3ViUGF0aDogU3ViUGF0aDtcbiAgcHJpdmF0ZSBhY3Rpb25QYXRoOiBzdHJpbmcgfCBudWxsO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIGNsaWVudDogQ2xpZW50LFxuICAgIG1ldGhvZDogSHR0cE1ldGhvZHMsXG4gICAgcmVzb3VyY2U6IHN0cmluZyxcbiAgICBjb25maWc/OiBSZXF1ZXN0Q29uc3RydWN0b3JDb25maWcsXG4gICkge1xuICAgIGlmICghKGNsaWVudCBpbnN0YW5jZW9mIENsaWVudCkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQXJndW1lbnQgXCJjbGllbnRcIiBtdXN0IGJlIGluc3RhbmNlIG9mIENsaWVudCcpO1xuICAgIH1cblxuICAgIGlmICghT2JqZWN0LnZhbHVlcyhIdHRwTWV0aG9kcykuaW5jbHVkZXMobWV0aG9kKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdBcmd1bWVudCBcIm1ldGhvZFwiIG11c3QgYmUgb25lIG9mIHN1cHBvcnRlZCBtZXRob2RzOiBnZXQsIHBvc3QsIHB1dCwgZGVsZXRlJyk7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiByZXNvdXJjZSAhPT0gJ3N0cmluZycpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQXJndW1lbnQgXCJyZXNvdXJjZVwiIG11c3QgYmUgc3RyaW5nJyk7XG4gICAgfVxuXG4gICAgdGhpcy5jbGllbnQgPSBjbGllbnQ7XG5cbiAgICB0aGlzLm1ldGhvZCA9IG1ldGhvZDtcbiAgICB0aGlzLnVybCA9IHJlc291cmNlLnRvTG93ZXJDYXNlKCk7XG4gICAgdGhpcy5yZXNvdXJjZSA9IHJlc291cmNlLnRvTG93ZXJDYXNlKCk7XG4gICAgdGhpcy5zdWJQYXRoID0gdGhpcy5idWlsZFN1YlBhdGgoKTtcbiAgICB0aGlzLmFjdGlvblBhdGggPSBudWxsO1xuXG4gICAgdGhpcy5jb25maWcgPSB7IC4uLmNvbmZpZyB9O1xuICB9XG5cbiAgcHVibGljIGdldFVzZXJBZ2VudCgpIHtcbiAgICByZXR1cm4gYG1haWxqZXQtYXBpLXYzLW5vZGVqcy8ke3RoaXMuY2xpZW50LmdldFBhY2thZ2VWZXJzaW9uKCl9YDtcbiAgfVxuXG4gIHB1YmxpYyBnZXRDcmVkZW50aWFscygpIHtcbiAgICByZXR1cm4ge1xuICAgICAgYXBpVG9rZW46IHRoaXMuY2xpZW50LmdldEFQSVRva2VuKCksXG4gICAgICBhcGlLZXk6IHRoaXMuY2xpZW50LmdldEFQSUtleSgpLFxuICAgICAgYXBpU2VjcmV0OiB0aGlzLmNsaWVudC5nZXRBUElTZWNyZXQoKSxcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRDb250ZW50VHlwZSh1cmw6IHN0cmluZykge1xuICAgIGlmICh0eXBlb2YgdXJsICE9PSAnc3RyaW5nJykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdBcmd1bWVudCBcInVybFwiIG11c3QgYmUgc3RyaW5nJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHVybC5pbmRleE9mKCd0ZXh0OnBsYWluJykgPiAtMVxuICAgICAgPyAndGV4dC9wbGFpbidcbiAgICAgIDogJ2FwcGxpY2F0aW9uL2pzb24nO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRSZXF1ZXN0Qm9keShkYXRhOiBSZXF1ZXN0RGF0YSkge1xuICAgIHJldHVybiBbXG4gICAgICBIdHRwTWV0aG9kcy5QdXQsXG4gICAgICBIdHRwTWV0aG9kcy5Qb3N0LFxuICAgICAgSHR0cE1ldGhvZHMuRGVsZXRlLFxuICAgIF0uaW5jbHVkZXModGhpcy5tZXRob2QpID8gZGF0YSA6IHVuZGVmaW5lZDtcbiAgfVxuXG4gIHByaXZhdGUgYnVpbGRGdWxsVXJsKCkge1xuICAgIGNvbnN0IGNsaWVudENvbmZpZyA9IHRoaXMuY2xpZW50LmdldENvbmZpZygpO1xuXG4gICAgY29uc3QgaG9zdCA9IHRoaXMuY29uZmlnLmhvc3QgPz8gY2xpZW50Q29uZmlnLmhvc3Q7XG4gICAgY29uc3QgdmVyc2lvbiA9IHRoaXMuY29uZmlnLnZlcnNpb24gPz8gY2xpZW50Q29uZmlnLnZlcnNpb247XG5cbiAgICByZXR1cm4gdXJsSm9pbihSZXF1ZXN0LnByb3RvY29sLCBob3N0LCB2ZXJzaW9uLCB0aGlzLnN1YlBhdGgsIHRoaXMudXJsKTtcbiAgfVxuXG4gIHByaXZhdGUgYnVpbGRTdWJQYXRoKCkge1xuICAgIGlmICh0aGlzLmFjdGlvblBhdGgpIHtcbiAgICAgIGNvbnN0IGlzQ29udGFjdExpc3RXaXRoQ1NWID0gdGhpcy5yZXNvdXJjZSA9PT0gJ2NvbnRhY3RzbGlzdCcgJiYgdGhpcy5hY3Rpb25QYXRoID09PSAnY3N2ZGF0YS90ZXh0OnBsYWluJztcbiAgICAgIGNvbnN0IGlzQmF0Y2hKb2JXaXRoQ1NWID0gdGhpcy5yZXNvdXJjZSA9PT0gJ2JhdGNoam9iJyAmJiB0aGlzLmFjdGlvblBhdGggPT09ICdjc3ZlcnJvci90ZXh0OmNzdic7XG5cbiAgICAgIHJldHVybiAoaXNDb250YWN0TGlzdFdpdGhDU1YgfHwgaXNCYXRjaEpvYldpdGhDU1YpID8gJ0RBVEEnIDogdGhpcy5zdWJQYXRoO1xuICAgIH1cbiAgICBjb25zdCBpc1NlbmRSZXNvdXJjZSA9IHRoaXMucmVzb3VyY2UgPT09ICdzZW5kJztcbiAgICBjb25zdCByZXNvdXJjZUNvbnRhaW5TTVMgPSB0aGlzLnJlc291cmNlLmluZGV4T2YoJ3NtcycpID4gLTE7XG5cbiAgICByZXR1cm4gKCFpc1NlbmRSZXNvdXJjZSAmJiAhcmVzb3VyY2VDb250YWluU01TKSA/ICdSRVNUJyA6ICcnO1xuICB9XG5cbiAgcHJpdmF0ZSBtYWtlUmVxdWVzdCh1cmw6IHN0cmluZywgZGF0YTogUmVxdWVzdERhdGEsIHBhcmFtczogUmVxdWVzdFBhcmFtcykge1xuICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9heGlvcy9heGlvcyNyZXF1ZXN0LWNvbmZpZ1xuICAgIGNvbnN0IHJlcXVlc3RDb25maWc6IFJlcXVlc3RBeGlvc0NvbmZpZyA9IHtcbiAgICAgIHVybCxcbiAgICAgIHBhcmFtcyxcbiAgICAgIGRhdGE6IHRoaXMuZ2V0UmVxdWVzdEJvZHkoZGF0YSksXG4gICAgICBtZXRob2Q6IHRoaXMubWV0aG9kLFxuICAgICAgcmVzcG9uc2VUeXBlOiAnanNvbicsXG4gICAgICBoZWFkZXJzOiB7XG4gICAgICAgICdVc2VyLUFnZW50JzogdGhpcy5nZXRVc2VyQWdlbnQoKSxcbiAgICAgICAgJ0NvbnRlbnQtVHlwZSc6IHRoaXMuZ2V0Q29udGVudFR5cGUodXJsKSxcbiAgICAgIH0sXG4gICAgICB0cmFuc2Zvcm1SZXNwb25zZShyZXNwb25zZURhdGE6IHVua25vd24pIHtcbiAgICAgICAgY29uc3QgZGF0YUlzU3RyaW5nID0gdHlwZW9mIHJlc3BvbnNlRGF0YSA9PT0gJ3N0cmluZyc7XG4gICAgICAgIGNvbnN0IGlzSlNPTlJlcXVlc3RlZCA9IHRoaXMucmVzcG9uc2VUeXBlID09PSAnanNvbic7XG5cbiAgICAgICAgaWYgKHJlc3BvbnNlRGF0YSAmJiBkYXRhSXNTdHJpbmcgJiYgaXNKU09OUmVxdWVzdGVkKSB7XG4gICAgICAgICAgcmV0dXJuIFJlcXVlc3QucGFyc2VUb0pTT05iKHJlc3BvbnNlRGF0YSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcmVzcG9uc2VEYXRhO1xuICAgICAgfSxcbiAgICB9O1xuXG4gICAgLy8gQlJPV1NFUiBTSURFXG4gICAgaWYgKFJlcXVlc3QuaXNCcm93c2VyKCkpIHtcbiAgICAgIHJlcXVlc3RDb25maWcuaGVhZGVyc1snWC1Vc2VyLUFnZW50J10gPSByZXF1ZXN0Q29uZmlnLmhlYWRlcnNbJ1VzZXItQWdlbnQnXTtcbiAgICB9XG5cbiAgICAvLyBBVVRIXG4gICAgY29uc3QgY3JlZGVudGlhbHMgPSB0aGlzLmdldENyZWRlbnRpYWxzKCk7XG5cbiAgICBpZiAoY3JlZGVudGlhbHMuYXBpVG9rZW4pIHtcbiAgICAgIHJlcXVlc3RDb25maWcuaGVhZGVyc1snQXV0aG9yaXphdGlvbiddID0gYEJlYXJlciAke2NyZWRlbnRpYWxzLmFwaVRva2VufWA7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlcXVlc3RDb25maWcuYXV0aCA9IHtcbiAgICAgICAgdXNlcm5hbWU6IGNyZWRlbnRpYWxzLmFwaUtleSBhcyBzdHJpbmcsXG4gICAgICAgIHBhc3N3b3JkOiBjcmVkZW50aWFscy5hcGlTZWNyZXQgYXMgc3RyaW5nLFxuICAgICAgfTtcbiAgICB9XG5cbiAgICAvLyBPUFRJT05TXG4gICAgY29uc3QgY2xpZW50Q29uZmlnID0gdGhpcy5jbGllbnQuZ2V0Q29uZmlnKCk7XG4gICAgY29uc3QgY2xpZW50T3B0aW9ucyA9IHRoaXMuY2xpZW50LmdldE9wdGlvbnMoKTtcblxuICAgIC8vIDEuIFRpbWVvdXRcbiAgICBpZiAoY2xpZW50T3B0aW9ucy50aW1lb3V0KSB7XG4gICAgICByZXF1ZXN0Q29uZmlnLnRpbWVvdXQgPSBjbGllbnRPcHRpb25zLnRpbWVvdXQ7XG4gICAgfVxuXG4gICAgLy8gMi4gUHJveHlcbiAgICBpZiAoY2xpZW50T3B0aW9ucy5wcm94eSkge1xuICAgICAgcmVxdWVzdENvbmZpZy5wcm94eSA9IGNsaWVudE9wdGlvbnMucHJveHk7XG4gICAgfVxuXG4gICAgLy8gMy4gSGVhZGVyc1xuICAgIGlmIChjbGllbnRPcHRpb25zLmhlYWRlcnMgJiYgT2JqZWN0LmtleXMoY2xpZW50T3B0aW9ucy5oZWFkZXJzKS5sZW5ndGggPiAwKSB7XG4gICAgICByZXF1ZXN0Q29uZmlnLmhlYWRlcnMgPSB7XG4gICAgICAgIC4uLnJlcXVlc3RDb25maWcuaGVhZGVycyxcbiAgICAgICAgLi4uY2xpZW50T3B0aW9ucy5oZWFkZXJzLFxuICAgICAgfTtcbiAgICB9XG5cbiAgICAvLyA0LiBPdXRwdXRcbiAgICBjb25zdCBvdXRwdXQgPSB0aGlzLmNvbmZpZy5vdXRwdXQgPz8gY2xpZW50Q29uZmlnLm91dHB1dDtcbiAgICBpZiAob3V0cHV0KSB7XG4gICAgICByZXF1ZXN0Q29uZmlnLnJlc3BvbnNlVHlwZSA9IG91dHB1dDtcbiAgICB9XG5cbiAgICAvLyBOT0RFIFNJREVcbiAgICAvLyA1LiBNYXggcmVxdWVzdCBjb250ZW50IHNpemVcbiAgICBpZiAoY2xpZW50T3B0aW9ucy5tYXhCb2R5TGVuZ3RoKSB7XG4gICAgICByZXF1ZXN0Q29uZmlnLm1heEJvZHlMZW5ndGggPSBjbGllbnRPcHRpb25zLm1heEJvZHlMZW5ndGg7XG4gICAgfVxuXG4gICAgLy8gTk9ERSBTSURFXG4gICAgLy8gNi4gTWF4IHJlc3BvbnNlIGNvbnRlbnQgc2l6ZVxuICAgIGlmIChjbGllbnRPcHRpb25zLm1heENvbnRlbnRMZW5ndGgpIHtcbiAgICAgIHJlcXVlc3RDb25maWcubWF4Q29udGVudExlbmd0aCA9IGNsaWVudE9wdGlvbnMubWF4Q29udGVudExlbmd0aDtcbiAgICB9XG5cbiAgICByZXR1cm4gYXhpb3MocmVxdWVzdENvbmZpZyk7XG4gIH1cblxuICBwcml2YXRlIHNldEJhc2VVUkwoYmFzZVVybDogc3RyaW5nKSB7XG4gICAgdGhpcy51cmwgPSBiYXNlVXJsLnRvTG93ZXJDYXNlKCk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBwdWJsaWMgaWQodmFsdWU6IHN0cmluZyB8IG51bWJlcikge1xuICAgIGlmICghWydzdHJpbmcnLCAnbnVtYmVyJ10uaW5jbHVkZXModHlwZW9mIHZhbHVlKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdBcmd1bWVudCBcInZhbHVlXCIgbXVzdCBiZSBzdHJpbmcgb3IgbnVtYmVyJyk7XG4gICAgfVxuXG4gICAgdGhpcy51cmwgPSB1cmxKb2luKHRoaXMudXJsLCB2YWx1ZS50b1N0cmluZygpKTtcblxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgcHVibGljIGFjdGlvbihuYW1lOiBzdHJpbmcpIHtcbiAgICBpZiAodHlwZW9mIG5hbWUgIT09ICdzdHJpbmcnKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0FyZ3VtZW50IFwibmFtZVwiIG11c3QgYmUgc3RyaW5nJyk7XG4gICAgfVxuXG4gICAgdGhpcy5hY3Rpb25QYXRoID0gbmFtZS50b0xvd2VyQ2FzZSgpO1xuXG4gICAgc3dpdGNoICh0aGlzLmFjdGlvblBhdGgpIHtcbiAgICAgIGNhc2UgJ2NzdmRhdGEnOiB7XG4gICAgICAgIHRoaXMuYWN0aW9uUGF0aCA9ICdjc3ZkYXRhL3RleHQ6cGxhaW4nO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGNhc2UgJ2NzdmVycm9yJzoge1xuICAgICAgICB0aGlzLmFjdGlvblBhdGggPSAnY3N2ZXJyb3IvdGV4dDpjc3YnO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy51cmwgPSB1cmxKb2luKHRoaXMudXJsLCB0aGlzLmFjdGlvblBhdGgpO1xuICAgIHRoaXMuc3ViUGF0aCA9IHRoaXMuYnVpbGRTdWJQYXRoKCk7XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyByZXF1ZXN0PEJvZHkgZXh0ZW5kcyBSZXF1ZXN0RGF0YT4oXG4gICAgZGF0YT86IFJlcXVlc3REYXRhLFxuICAgIHBhcmFtcz86IFJlcXVlc3RQYXJhbXMsXG4gICAgcGVyZm9ybUFQSUNhbGw/OiB0cnVlLFxuICApOiBQcm9taXNlPExpYnJhcnlSZXNwb25zZTxCb2R5Pj5cblxuICBwdWJsaWMgYXN5bmMgcmVxdWVzdDxCb2R5IGV4dGVuZHMgUmVxdWVzdERhdGEsIFBhcmFtcyBleHRlbmRzIFVua25vd25SZWM+KFxuICAgIGRhdGE/OiBCb2R5LFxuICAgIHBhcmFtcz86IFBhcmFtcyxcbiAgICBwZXJmb3JtQVBJQ2FsbD86IGZhbHNlLFxuICApOiBQcm9taXNlPExpYnJhcnlMb2NhbFJlc3BvbnNlPEJvZHksIFBhcmFtcz4+XG5cbiAgcHVibGljIGFzeW5jIHJlcXVlc3Q8Qm9keSBleHRlbmRzIFJlcXVlc3REYXRhLCBQYXJhbXMgZXh0ZW5kcyBVbmtub3duUmVjPihcbiAgICBkYXRhOiBSZXF1ZXN0RGF0YSB8IEJvZHkgPSB7fSxcbiAgICBwYXJhbXM6IFJlcXVlc3RQYXJhbXMgfCBQYXJhbXMgPSB7fSxcbiAgICBwZXJmb3JtQVBJQ2FsbCA9IHRydWUsXG4gICk6IFByb21pc2U8TGlicmFyeVJlc3BvbnNlPEJvZHk+IHwgTGlicmFyeUxvY2FsUmVzcG9uc2U8Qm9keSwgUGFyYW1zPj4ge1xuICAgIGNvbnN0IHVybCA9IHRoaXMuYnVpbGRGdWxsVXJsKCk7XG4gICAgdGhpcy5zZXRCYXNlVVJMKHRoaXMucmVzb3VyY2UpO1xuXG4gICAgaWYgKCFwZXJmb3JtQVBJQ2FsbCkge1xuICAgICAgY29uc3QgYm9keSA9IHRoaXMuZ2V0UmVxdWVzdEJvZHkoZGF0YSk7XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIGJvZHksXG4gICAgICAgIHBhcmFtcyxcbiAgICAgICAgdXJsLFxuICAgICAgfSBhcyBMaWJyYXJ5TG9jYWxSZXNwb25zZTxCb2R5LCBQYXJhbXM+O1xuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMubWFrZVJlcXVlc3QodXJsLCBkYXRhLCBwYXJhbXMpO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgcmVzcG9uc2UsXG4gICAgICAgIGJvZHk6IHJlc3BvbnNlLmRhdGEsXG4gICAgICB9O1xuICAgIH0gY2F0Y2ggKGVycjogdW5rbm93bikge1xuICAgICAgaWYgKGVyciBpbnN0YW5jZW9mIEF4aW9zRXJyb3IpIHtcbiAgICAgICAgY29uc3QgZXJyb3I6IGFueSA9IG5ldyBFcnJvcigpO1xuXG4gICAgICAgIGVycm9yLmNvZGUgPSBlcnIuY29kZTtcbiAgICAgICAgZXJyb3IuY29uZmlnID0gZXJyLmNvbmZpZztcblxuICAgICAgICBpZiAoZXJyLnJlc3BvbnNlKSB7XG4gICAgICAgICAgY29uc3Qge1xuICAgICAgICAgICAgc3RhdHVzLFxuICAgICAgICAgICAgc3RhdHVzVGV4dCxcbiAgICAgICAgICAgIGRhdGE6IGJvZHksXG4gICAgICAgICAgfSA9IGVyci5yZXNwb25zZTtcblxuICAgICAgICAgIGVycm9yLnJlc3BvbnNlID0gZXJyLnJlc3BvbnNlO1xuXG4gICAgICAgICAgZXJyb3Iuc3RhdHVzQ29kZSA9IHN0YXR1cztcbiAgICAgICAgICBlcnJvci5zdGF0dXNUZXh0ID0gc3RhdHVzVGV4dDtcblxuICAgICAgICAgIGNvbnN0IGVycm9yTWVzc2FnZSA9IGJvZHk/LkVycm9yTWVzc2FnZSA/PyBlcnIubWVzc2FnZTtcbiAgICAgICAgICBlcnJvci5vcmlnaW5hbE1lc3NhZ2UgPSBlcnJvck1lc3NhZ2U7XG4gICAgICAgICAgZXJyb3IubWVzc2FnZSA9IGBVbnN1Y2Nlc3NmdWw6IFN0YXR1cyBDb2RlOiBcIiR7ZXJyb3Iuc3RhdHVzQ29kZX1cIiBNZXNzYWdlOiBcIiR7ZXJyb3JNZXNzYWdlfVwiYDtcblxuICAgICAgICAgIGlmIChib2R5KSB7XG4gICAgICAgICAgICAvLyBodHRwczovL2Rldi5tYWlsamV0LmNvbS9lbWFpbC9ndWlkZXMvc2VuZC1hcGktdjMxLyNzZW5kLWluLWJ1bGtcbiAgICAgICAgICAgIGNvbnN0IGZ1bGxNZXNzYWdlID0gYm9keS5NZXNzYWdlcz8uWzBdPy5FcnJvcnM/LlswXT8uRXJyb3JNZXNzYWdlO1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBmdWxsTWVzc2FnZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgZXJyb3IubWVzc2FnZSArPSBgO1xcbiR7ZnVsbE1lc3NhZ2V9YDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gdjMuMSBjYXNlXG4gICAgICAgICAgICAvLyBodHRwczovL2Rldi5tYWlsamV0LmNvbS9lbWFpbC9ndWlkZXMvc2VuZC1hcGktdjMxLyNzYW5kYm94LW1vZGVcbiAgICAgICAgICAgIHNldFZhbHVlSWZOb3ROaWwoZXJyb3IsICdFcnJvck1lc3NhZ2UnLCBib2R5LkVycm9yTWVzc2FnZSk7XG4gICAgICAgICAgICBzZXRWYWx1ZUlmTm90TmlsKGVycm9yLCAnRXJyb3JDb2RlJywgYm9keS5FcnJvckNvZGUpO1xuICAgICAgICAgICAgc2V0VmFsdWVJZk5vdE5pbChlcnJvciwgJ0Vycm9ySWRlbnRpZmllcicsIGJvZHkuRXJyb3JJZGVudGlmaWVyKTtcbiAgICAgICAgICAgIHNldFZhbHVlSWZOb3ROaWwoZXJyb3IsICdFcnJvclJlbGF0ZWRUbycsIGJvZHkuRXJyb3JSZWxhdGVkVG8pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBlcnJvci5yZXNwb25zZSA9IG51bGw7XG5cbiAgICAgICAgICBlcnJvci5zdGF0dXNDb2RlID0gbnVsbDtcbiAgICAgICAgICBlcnJvci5zdGF0dXNUZXh0ID0gbnVsbDtcblxuICAgICAgICAgIGVycm9yLm9yaWdpbmFsTWVzc2FnZSA9IGVyci5tZXNzYWdlO1xuICAgICAgICAgIGVycm9yLm1lc3NhZ2UgPSBgVW5zdWNjZXNzZnVsOiBFcnJvciBDb2RlOiBcIiR7ZXJyb3IuY29kZX1cIiBNZXNzYWdlOiBcIiR7ZXJyLm1lc3NhZ2V9XCJgO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICB9XG5cbiAgICAgIHRocm93IGVycjtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgc3RhdGljIHByb3RvY29sID0gJ2h0dHBzOi8vJyBhcyBjb25zdDtcblxuICBwdWJsaWMgc3RhdGljIHBhcnNlVG9KU09OYih0ZXh0OiBzdHJpbmcpIHtcbiAgICBpZiAodHlwZW9mIHRleHQgIT09ICdzdHJpbmcnKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0FyZ3VtZW50IFwidGV4dFwiIG11c3QgYmUgc3RyaW5nJyk7XG4gICAgfVxuXG4gICAgbGV0IGJvZHk7XG4gICAgdHJ5IHtcbiAgICAgIGJvZHkgPSBKU09OYi5wYXJzZSh0ZXh0KTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBib2R5ID0ge307XG4gICAgfVxuXG4gICAgcmV0dXJuIGJvZHk7XG4gIH1cblxuICBwdWJsaWMgc3RhdGljIGlzQnJvd3NlcigpIHtcbiAgICByZXR1cm4gdHlwZW9mIHdpbmRvdyA9PT0gJ29iamVjdCc7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgUmVxdWVzdDtcbiIsImltcG9ydCB7IENvbW1vbiB9IGZyb20gJy4vQ29tbW9uJztcblxuZXhwb3J0IG5hbWVzcGFjZSBEcmFmdENhbXBhaWduIHtcbiAgZXhwb3J0IGVudW0gRWRpdE1vZGUge1xuICAgIFRvb2wyID0gJ3Rvb2wyJyxcbiAgICBIVE1MMiA9ICdodG1sMicsXG4gICAgTUpNTCA9ICdtam1sJ1xuICB9XG5cbiAgZXhwb3J0IGVudW0gQ2FtcGFpZ25EcmFmdFN0YXR1cyB7XG4gICAgQVhDYW5jZWxlZCA9IC0zLFxuICAgIERlbGV0ZWQgPSAtMixcbiAgICBBcmNoaXZlZCA9IC0xLFxuICAgIERyYWZ0ID0gMCxcbiAgICBQcm9ncmFtbWVkID0gMSxcbiAgICBTZW50ID0gMixcbiAgICBBWFRlc3RlZCA9IDMsXG4gICAgQVhTZWxlY3RlZCA9IDRcbiAgfVxuXG4gIGV4cG9ydCBlbnVtIENhbXBhaWduRHJhZnRTZW5kaW5nU3RhdHVzIHtcbiAgICBBWENhbmNlbGxlZCA9ICdBWENhbmNlbGxlZCcsXG4gICAgRGVsZXRlZCA9ICdEZWxldGVkJyxcbiAgICBBcmNoaXZlZCA9ICdBcmNoaXZlZCcsXG4gICAgRHJhZnQgPSAnRHJhZnQnLFxuICAgIFByb2dyYW1tZWQgPSAnUHJvZ3JhbW1lZCcsXG4gICAgU2VudCA9ICdTZW50JyxcbiAgICBBWFRlc3RlZCA9ICdBWFRlc3RlZCcsXG4gICAgQVhTZWxlY3RlZCA9ICdBWFNlbGVjdGVkJ1xuICB9XG5cbiAgZXhwb3J0IGludGVyZmFjZSBSZWNpcGllbnQge1xuICAgIEVtYWlsOiBzdHJpbmc7XG4gICAgTmFtZT86IHN0cmluZ1xuICB9XG5cbiAgZXhwb3J0IGludGVyZmFjZSBDYW1wYWlnbkRyYWZ0PEFYVGVzdGluZyA9IENvbW1vbi5Vbmtub3duUmVjPiB7XG4gICAgSUQ6IG51bWJlcjtcbiAgICBBWEZyYWN0aW9uOiBudW1iZXI7XG4gICAgQVhGcmFjdGlvbk5hbWU6IHN0cmluZztcbiAgICBBWFRlc3Rpbmc6IEFYVGVzdGluZztcbiAgICBDdXJyZW50OiBudW1iZXI7XG4gICAgRWRpdE1vZGU6IEVkaXRNb2RlO1xuICAgIElzU3RhcnJlZDogYm9vbGVhbjtcbiAgICBJc1RleHRQYXJ0SW5jbHVkZWQ6IGJvb2xlYW47XG4gICAgUmVwbHlFbWFpbDogc3RyaW5nO1xuICAgIFNlbmRlck5hbWU6IHN0cmluZztcbiAgICBUZW1wbGF0ZUlEOiBudW1iZXI7XG4gICAgVGl0bGU6IHN0cmluZztcbiAgICBDYW1wYWlnbklEOiBudW1iZXI7XG4gICAgQ29udGFjdHNMaXN0SUQ6IG51bWJlcjtcbiAgICBDcmVhdGVkQXQ6IHN0cmluZztcbiAgICBEZWxpdmVyZWRBdDogc3RyaW5nO1xuICAgIExvY2FsZTogc3RyaW5nO1xuICAgIE1vZGlmaWVkQXQ6IHN0cmluZztcbiAgICBQcmVzZXQ6IHN0cmluZztcbiAgICBTZWdtZW50YXRpb25JRDogbnVtYmVyO1xuICAgIFNlbmRlcjogc3RyaW5nO1xuICAgIFNlbmRlckVtYWlsOiBzdHJpbmc7XG4gICAgU3RhdHVzOiBDYW1wYWlnbkRyYWZ0U3RhdHVzO1xuICAgIFN1YmplY3Q6IHN0cmluZztcbiAgICBVcmw6IHN0cmluZztcbiAgICBVc2VkOiBib29sZWFuO1xuICB9XG5cbiAgZXhwb3J0IGludGVyZmFjZSBDYW1wYWlnbkRyYWZ0RGV0YWlsQ29udGVudDxIZWFkZXJzID0gQ29tbW9uLlVua25vd25SZWM+IHtcbiAgICBIZWFkZXJzOiBIZWFkZXJzO1xuICAgICdIdG1sLXBhcnQnOiBzdHJpbmc7XG4gICAgJ1RleHQtcGFydCc6IHN0cmluZztcbiAgICBNSk1MQ29udGVudDogc3RyaW5nO1xuICB9XG5cbiAgZXhwb3J0IGludGVyZmFjZSBDYW1wYWlnbkRyYWZ0U2NoZWR1bGUge1xuICAgIERhdGU6IHN0cmluZztcbiAgICBTdGF0dXM6IHN0cmluZztcbiAgfVxuXG4gIC8vIFJFUVVFU1QgUEFSVFxuICBleHBvcnQgdHlwZSBQb3N0Q2FtcGFpZ25EcmFmdEJvZHk8QVhUZXN0aW5nID0gQ29tbW9uLlVua25vd25SZWM+ID0ge1xuICAgIExvY2FsZTogc3RyaW5nO1xuICAgIFN1YmplY3Q6IHN0cmluZztcblxuICAgIEFYRnJhY3Rpb24/OiBudW1iZXI7XG4gICAgQVhGcmFjdGlvbk5hbWU/OiBzdHJpbmc7XG4gICAgQVhUZXN0aW5nPzogQVhUZXN0aW5nO1xuICAgIEN1cnJlbnQ/OiBudW1iZXI7XG4gICAgRWRpdE1vZGU/OiBFZGl0TW9kZTtcbiAgICBJc1N0YXJyZWQ/OiBib29sZWFuO1xuICAgIElzVGV4dFBhcnRJbmNsdWRlZD86IGJvb2xlYW47XG4gICAgUmVwbHlFbWFpbD86IHN0cmluZztcbiAgICBTZW5kZXJOYW1lPzogc3RyaW5nO1xuICAgIFRlbXBsYXRlSUQ/OiBudW1iZXI7XG4gICAgVGl0bGU/OiBzdHJpbmc7XG4gICAgQ29udGFjdHNMaXN0SUQ/OiBudW1iZXI7XG4gICAgQ29udGFjdHNMaXN0QWx0Pzogc3RyaW5nO1xuICAgIFNlZ21lbnRhdGlvbklEPzogbnVtYmVyO1xuICAgIFNlZ21lbnRhdGlvbkFsdD86IHN0cmluZztcbiAgICBTZW5kZXI/OiBzdHJpbmc7XG4gICAgU2VuZGVyRW1haWw/OiBzdHJpbmc7XG4gIH1cblxuICBleHBvcnQgdHlwZSBQdXRDYW1wYWlnbkRyYWZ0Qm9keTxBWFRlc3RpbmcgPSBDb21tb24uVW5rbm93blJlYz4gPVxuICAgIE9taXQ8UGFydGlhbDxQb3N0Q2FtcGFpZ25EcmFmdEJvZHk8QVhUZXN0aW5nPj4sICdDb250YWN0c0xpc3RBbHQnPiAmXG4gIHtcbiAgICBTdGF0dXM/OiBDYW1wYWlnbkRyYWZ0U3RhdHVzXG4gIH1cblxuICBleHBvcnQgdHlwZSBHZXRDYW1wYWlnbkRyYWZ0UXVlcnlQYXJhbXMgPSBQYXJ0aWFsPENvbW1vbi5QYWdpbmF0aW9uPiAmIHtcbiAgICBBWFRlc3Rpbmc/OiBudW1iZXI7XG4gICAgQ2FtcGFpZ24/OiBudW1iZXI7XG4gICAgQ29udGFjdHNMaXN0PzogbnVtYmVyO1xuICAgIERlbGl2ZXJlZEF0Pzogc3RyaW5nO1xuICAgIEVkaXRNb2RlPzogRWRpdE1vZGU7XG4gICAgSXNBcmNoaXZlZD86IGJvb2xlYW47XG4gICAgSXNDYW1wYWlnbj86IGJvb2xlYW47XG4gICAgSXNEZWxldGVkPzogYm9vbGVhbjtcbiAgICBJc0hhbmRsZWQ/OiBib29sZWFuO1xuICAgIElzU3RhcnJlZD86IGJvb2xlYW47XG4gICAgTW9kaWZpZWQ/OiBib29sZWFuO1xuICAgIE5ld3NMZXR0ZXJUZW1wbGF0ZT86IG51bWJlcjtcbiAgICBTdGF0dXM/OiBDYW1wYWlnbkRyYWZ0U3RhdHVzO1xuICAgIFN1YmplY3Q/OiBzdHJpbmc7XG4gICAgVGVtcGxhdGU/OiBudW1iZXI7XG4gIH1cblxuICBleHBvcnQgdHlwZSBQb3N0Q2FtcGFpZ25EcmFmdERldGFpbENvbnRlbnRCb2R5PEhlYWRlcnMgPSBDb21tb24uVW5rbm93blJlYz4gPVxuICAgIFBhcnRpYWw8Q2FtcGFpZ25EcmFmdERldGFpbENvbnRlbnQ8SGVhZGVycz4+XG5cbiAgZXhwb3J0IHR5cGUgUG9zdENhbXBhaWduRHJhZnRTY2hlZHVsZUJvZHkgPSB7XG4gICAgRGF0ZTogc3RyaW5nO1xuICB9XG5cbiAgZXhwb3J0IHR5cGUgUHV0Q2FtcGFpZ25EcmFmdFNjaGVkdWxlQm9keSA9IFBhcnRpYWw8UG9zdENhbXBhaWduRHJhZnRTY2hlZHVsZUJvZHk+XG5cbiAgZXhwb3J0IHR5cGUgUG9zdENhbXBhaWduRHJhZnRUZXN0Qm9keSA9IHtcbiAgICBSZWNpcGllbnRzOiBSZWNpcGllbnRbXVxuICB9XG5cbiAgLy8gUkVTUE9OU0UgUEFSVFxuICB0eXBlIENhbXBhaWduRHJhZnRSZXNwb25zZSA9IENvbW1vbi5SZXNwb25zZTxDYW1wYWlnbkRyYWZ0W10+O1xuICB0eXBlIENhbXBhaWduRHJhZnRTY2hlZHVsZVJlc3BvbnNlID0gQ29tbW9uLlJlc3BvbnNlPENhbXBhaWduRHJhZnRTY2hlZHVsZVtdPjtcbiAgdHlwZSBDYW1wYWlnbkRyYWZ0RGV0YWlsQ29udGVudFJlc3BvbnNlPEhlYWRlcnMgPSBDb21tb24uVW5rbm93blJlYz4gPVxuICAgIENvbW1vbi5SZXNwb25zZTxBcnJheTxDYW1wYWlnbkRyYWZ0RGV0YWlsQ29udGVudDxIZWFkZXJzPj4+O1xuICB0eXBlIENhbXBhaWduRHJhZnRTdGF0dXNSZXNwb25zZSA9XG4gICAgQ29tbW9uLlJlc3BvbnNlPEFycmF5PHsgU3RhdHVzOiBDYW1wYWlnbkRyYWZ0U2VuZGluZ1N0YXR1cyB9Pj47XG5cbiAgZXhwb3J0IHR5cGUgUG9zdENhbXBhaWduRHJhZnRSZXNwb25zZSA9IENhbXBhaWduRHJhZnRSZXNwb25zZVxuICBleHBvcnQgdHlwZSBQdXRDYW1wYWlnbkRyYWZ0UmVzcG9uc2UgPSBDYW1wYWlnbkRyYWZ0UmVzcG9uc2VcbiAgZXhwb3J0IHR5cGUgR2V0Q2FtcGFpZ25EcmFmdFJlc3BvbnNlID0gQ2FtcGFpZ25EcmFmdFJlc3BvbnNlXG5cbiAgZXhwb3J0IHR5cGUgUG9zdENhbXBhaWduRHJhZnRTY2hlZHVsZVJlc3BvbnNlID0gQ2FtcGFpZ25EcmFmdFNjaGVkdWxlUmVzcG9uc2VcbiAgZXhwb3J0IHR5cGUgUHV0Q2FtcGFpZ25EcmFmdFNjaGVkdWxlUmVzcG9uc2UgPSBDYW1wYWlnbkRyYWZ0U2NoZWR1bGVSZXNwb25zZVxuICBleHBvcnQgdHlwZSBHZXRDYW1wYWlnbkRyYWZ0U2NoZWR1bGVSZXNwb25zZSA9IENhbXBhaWduRHJhZnRTY2hlZHVsZVJlc3BvbnNlXG5cbiAgZXhwb3J0IHR5cGUgUG9zdENhbXBhaWduRHJhZnREZXRhaWxDb250ZW50UmVzcG9uc2U8SGVhZGVycyA9IENvbW1vbi5Vbmtub3duUmVjPiA9XG4gICAgQ2FtcGFpZ25EcmFmdERldGFpbENvbnRlbnRSZXNwb25zZTxIZWFkZXJzPlxuICBleHBvcnQgdHlwZSBHZXRDYW1wYWlnbkRyYWZ0RGV0YWlsQ29udGVudFJlc3BvbnNlPEhlYWRlcnMgPSBDb21tb24uVW5rbm93blJlYz4gPVxuICAgIENhbXBhaWduRHJhZnREZXRhaWxDb250ZW50UmVzcG9uc2U8SGVhZGVycz5cblxuICBleHBvcnQgdHlwZSBQb3N0Q2FtcGFpZ25EcmFmdFNlbmQgPSBDYW1wYWlnbkRyYWZ0U3RhdHVzUmVzcG9uc2VcbiAgZXhwb3J0IHR5cGUgUG9zdENhbXBhaWduRHJhZnRUZXN0ID0gQ2FtcGFpZ25EcmFmdFN0YXR1c1Jlc3BvbnNlXG4gIGV4cG9ydCB0eXBlIEdldENhbXBhaWduRHJhZnRTdGF0dXMgPSBDYW1wYWlnbkRyYWZ0U3RhdHVzUmVzcG9uc2Vcbn1cblxuZXhwb3J0IG5hbWVzcGFjZSBTZW50Q2FtcGFpZ24ge1xuICBleHBvcnQgZW51bSBDYW1wYWlnblR5cGUge1xuICAgIFRyYW5zYWN0aW9uYWwgPSAxLFxuICAgIE1hcmtldGluZyA9IDIsXG4gICAgVW5rbm93biA9IDMsXG4gIH1cblxuICBleHBvcnQgaW50ZXJmYWNlIENhbXBhaWduIHtcbiAgICBJRDogbnVtYmVyO1xuICAgIElzRGVsZXRlZDogYm9vbGVhbjtcbiAgICBJc1N0YXJyZWQ6IGJvb2xlYW47XG4gICAgQ2FtcGFpZ25UeXBlOiBDYW1wYWlnblR5cGU7XG4gICAgQ3JlYXRlZEF0OiBzdHJpbmc7XG4gICAgQ3VzdG9tVmFsdWU6IHN0cmluZztcbiAgICBGaXJzdE1lc3NhZ2VJRDogbnVtYmVyO1xuICAgIEZyb21FbWFpbDogc3RyaW5nO1xuICAgIEZyb21JRDogbnVtYmVyO1xuICAgIEZyb21OYW1lOiBzdHJpbmc7XG4gICAgSGFzSHRtbENvdW50OiBudW1iZXI7XG4gICAgSGFzVHh0Q291bnQ6IG51bWJlcjtcbiAgICBMaXN0SUQ6IG51bWJlcjtcbiAgICBOZXdzTGV0dGVySUQ6IG51bWJlcjtcbiAgICBTZWdtZW50YXRpb25JRDogbnVtYmVyO1xuICAgIFNlbmRFbmRBdDogc3RyaW5nO1xuICAgIFNlbmRTdGFydEF0OiBzdHJpbmc7XG4gICAgU3BhbWFzc1Njb3JlOiBudW1iZXI7XG4gICAgU3ViamVjdDogc3RyaW5nO1xuICAgIFdvcmtmbG93SUQ6IG51bWJlcjtcbiAgfVxuXG4gIC8vIFJFUVVFU1QgUEFSVFxuICBleHBvcnQgdHlwZSBQdXRDYW1wYWlnbkJvZHkgPSB7XG4gICAgSXNEZWxldGVkPzogYm9vbGVhbjtcbiAgICBJc1N0YXJyZWQ/OiBib29sZWFuO1xuICB9XG5cbiAgZXhwb3J0IHR5cGUgR2V0Q2FtcGFpZ25RdWVyeVBhcmFtcyA9IFBhcnRpYWw8Q29tbW9uLlRpbWVzdGFtcFBlcmlvZD4gJlxuICAgIFBhcnRpYWw8Q29tbW9uLlBhZ2luYXRpb24+ICZcbiAge1xuICAgIENhbXBhaWduSUQ/OiBudW1iZXI7XG4gICAgQ29udGFjdHNMaXN0SUQ/OiBudW1iZXI7XG4gICAgQ3VzdG9tQ2FtcGFpZ24/OiBzdHJpbmc7XG4gICAgRnJvbT86IHN0cmluZztcbiAgICBGcm9tRG9tYWluPzogc3RyaW5nO1xuICAgIEZyb21JRD86IG51bWJlcjtcbiAgICBGcm9tVHlwZT86IENhbXBhaWduVHlwZTtcbiAgICBJc0RlbGV0ZWQ/OiBib29sZWFuO1xuICAgIElzTmV3c2xldHRlclRvb2w/OiBib29sZWFuO1xuICAgIElzU3RhcnJlZD86IGJvb2xlYW47XG4gICAgUGVyaW9kPzogQ29tbW9uLlBlcmlvZDtcbiAgICBXb3JrZmxvd0lEPzogbnVtYmVyO1xuICB9XG5cbiAgLy8gUkVTUE9OU0UgUEFSVFxuICB0eXBlIENhbXBhaWduUmVzcG9uc2UgPSBDb21tb24uUmVzcG9uc2U8Q2FtcGFpZ25bXT47XG5cbiAgZXhwb3J0IHR5cGUgUHV0Q2FtcGFpZ25SZXNwb25zZSA9IENhbXBhaWduUmVzcG9uc2VcbiAgZXhwb3J0IHR5cGUgR2V0Q2FtcGFpZ25SZXNwb25zZSA9IENhbXBhaWduUmVzcG9uc2Vcbn1cbiIsImV4cG9ydCBuYW1lc3BhY2UgQ29tbW9uIHtcbiAgZXhwb3J0IHR5cGUgVW5rbm93blJlYyA9IFJlY29yZDxzdHJpbmcsIHVua25vd24+XG5cbiAgZXhwb3J0IGludGVyZmFjZSBQYWdpbmF0aW9uIHtcbiAgICBjb3VudE9ubHk6IGJvb2xlYW47XG5cbiAgICBMaW1pdDogbnVtYmVyO1xuICAgIE9mZnNldDogbnVtYmVyO1xuICAgIFNvcnQ6IHN0cmluZztcbiAgfVxuXG4gIGV4cG9ydCBpbnRlcmZhY2UgVGltZXN0YW1wUGVyaW9kIHtcbiAgICBGcm9tVFM6IHN0cmluZyB8IG51bWJlcjtcbiAgICBUb1RTOiBzdHJpbmcgfCBudW1iZXI7XG4gIH1cblxuICBleHBvcnQgdHlwZSBSZXNwb25zZTxFbnRpdHk+ID0ge1xuICAgIENvdW50OiBudW1iZXI7XG4gICAgVG90YWw6IG51bWJlcjtcbiAgICBEYXRhOiBFbnRpdHk7XG4gIH1cblxuICBleHBvcnQgZW51bSBQZXJpb2Qge1xuICAgIERheSA9ICdEYXknLFxuICAgIFdlZWsgPSAnV2VlaycsXG4gICAgTW9udGggPSAnTW9udGgnLFxuICAgIFllYXIgPSAnWWVhcicsXG4gIH1cbn1cbiIsImltcG9ydCB7IENvbW1vbiB9IGZyb20gJy4vQ29tbW9uJztcblxuZXhwb3J0IG5hbWVzcGFjZSBDb250YWN0IHtcbiAgZXhwb3J0IGludGVyZmFjZSBDb250YWN0IHtcbiAgICBJRDogbnVtYmVyO1xuICAgIElzRXhjbHVkZWRGcm9tQ2FtcGFpZ25zOiBib29sZWFuO1xuICAgIE5hbWU6IHN0cmluZztcbiAgICBDcmVhdGVkQXQ6IHN0cmluZztcbiAgICBEZWxpdmVyZWRDb3VudDogbnVtYmVyO1xuICAgIEVtYWlsOiBzdHJpbmc7XG4gICAgRXhjbHVzaW9uRnJvbUNhbXBhaWduc1VwZGF0ZWRBdDogc3RyaW5nO1xuICAgIElzT3B0SW5QZW5kaW5nOiBib29sZWFuO1xuICAgIElzU3BhbUNvbXBsYWluaW5nOiBib29sZWFuO1xuICAgIExhc3RBY3Rpdml0eUF0OiBzdHJpbmc7XG4gICAgTGFzdFVwZGF0ZUF0OiBzdHJpbmc7XG4gIH1cblxuICAvLyBSRVFVRVNUIFBBUlRcbiAgZXhwb3J0IHR5cGUgUG9zdENvbnRhY3RCb2R5ID0ge1xuICAgIEVtYWlsOiBzdHJpbmc7XG4gICAgSXNFeGNsdWRlZEZyb21DYW1wYWlnbnM/OiBib29sZWFuO1xuICAgIE5hbWU/OiBzdHJpbmc7XG4gIH1cblxuICBleHBvcnQgdHlwZSBQdXRDb250YWN0Qm9keSA9IE9taXQ8UG9zdENvbnRhY3RCb2R5LCAnRW1haWwnPlxuXG4gIGV4cG9ydCB0eXBlIEdldENvbnRhY3RRdWVyeVBhcmFtcyA9IFBhcnRpYWw8Q29tbW9uLlBhZ2luYXRpb24+ICYge1xuICAgIENhbXBhaWduPzogbnVtYmVyO1xuICAgIENvbnRhY3RzTGlzdD86IG51bWJlcjtcbiAgICBJc0V4Y2x1ZGVkRnJvbUNhbXBhaWducz86IGJvb2xlYW47XG4gIH1cblxuICAvLyBSRVNQT05TRSBQQVJUXG4gIHR5cGUgQ29udGFjdFJlc3BvbnNlID0ge1xuICAgIENvdW50OiBudW1iZXI7XG4gICAgVG90YWw6IG51bWJlcjtcbiAgICBEYXRhOiBDb250YWN0W107XG4gIH07XG5cbiAgZXhwb3J0IHR5cGUgUG9zdENvbnRhY3RSZXNwb25zZSA9IENvbnRhY3RSZXNwb25zZVxuICBleHBvcnQgdHlwZSBQdXRDb250YWN0UmVzcG9uc2UgPSBDb250YWN0UmVzcG9uc2VcbiAgZXhwb3J0IHR5cGUgR2V0Q29udGFjdFJlc3BvbnNlID0gQ29udGFjdFJlc3BvbnNlXG59XG5cbmV4cG9ydCBuYW1lc3BhY2UgQ29udGFjdExpc3Qge1xuICBleHBvcnQgaW50ZXJmYWNlIENvbnRhY3RMaXN0IHtcbiAgICBJRDogbnVtYmVyO1xuICAgIElzRGVsZXRlZDogYm9vbGVhbjtcbiAgICBOYW1lOiBzdHJpbmc7XG4gICAgQWRkcmVzczogc3RyaW5nO1xuICAgIENyZWF0ZWRBdDogc3RyaW5nO1xuICAgIFN1YnNjcmliZXJDb3VudDogbnVtYmVyO1xuICB9XG5cbiAgLy8gUkVRVUVTVCBQQVJUXG4gIGV4cG9ydCB0eXBlIFBvc3RDb250YWN0TGlzdEJvZHkgPSB7XG4gICAgTmFtZTogc3RyaW5nO1xuICAgIElzRGVsZXRlZD86IGJvb2xlYW47XG4gIH1cblxuICBleHBvcnQgdHlwZSBQdXRDb250YWN0TGlzdEJvZHkgPSBQYXJ0aWFsPFBvc3RDb250YWN0TGlzdEJvZHk+XG5cbiAgZXhwb3J0IHR5cGUgR2V0Q29udGFjdExpc3RRdWVyeVBhcmFtcyA9IFBhcnRpYWw8Q29tbW9uLlBhZ2luYXRpb24+ICYge1xuICAgIEFkZHJlc3M/OiBzdHJpbmc7XG4gICAgRXhjbHVkZUlEPzogbnVtYmVyO1xuICAgIElzRGVsZXRlZD86IGJvb2xlYW47XG4gICAgTmFtZT86IHN0cmluZztcbiAgfVxuXG4gIC8vIFJFU1BPTlNFIFBBUlRcbiAgdHlwZSBDb250YWN0TGlzdFJlc3BvbnNlID0gQ29tbW9uLlJlc3BvbnNlPENvbnRhY3RMaXN0W10+O1xuXG4gIGV4cG9ydCB0eXBlIFBvc3RDb250YWN0TGlzdFJlc3BvbnNlID0gQ29udGFjdExpc3RSZXNwb25zZVxuICBleHBvcnQgdHlwZSBQdXRDb250YWN0TGlzdFJlc3BvbnNlID0gQ29udGFjdExpc3RSZXNwb25zZVxuICBleHBvcnQgdHlwZSBHZXRDb250YWN0TGlzdFJlc3BvbnNlID0gQ29udGFjdExpc3RSZXNwb25zZVxufVxuXG5leHBvcnQgbmFtZXNwYWNlIEJ1bGtDb250YWN0TWFuYWdlbWVudCB7XG4gIGV4cG9ydCBlbnVtIE1hbmFnZUNvbnRhY3RzQWN0aW9uIHtcbiAgICBBZGRGb3JjZSA9ICdhZGRmb3JjZScsXG4gICAgQWRkTm9Gb3JjZSA9ICdhZGRub2ZvcmNlJyxcbiAgICBSZW1vdmUgPSAncmVtb3ZlJyxcbiAgICBVblN1YiA9ICd1bnN1YidcbiAgfVxuXG4gIGV4cG9ydCBlbnVtIEltcG9ydExpc3RBY3Rpb24ge1xuICAgIEFkZEZvcmNlID0gJ2FkZGZvcmNlJyxcbiAgICBBZGROb0ZvcmNlID0gJ2FkZG5vZm9yY2UnLFxuICAgIFVuU3ViID0gJ3Vuc3ViJyxcbiAgICBEdXBsaWNhdGVPdmVycmlkZSA9ICdkdXBsaWNhdGUtb3ZlcnJpZGUnLFxuICAgIER1cGxpY2F0ZU5vT3ZlcnJpZGUgPSAnZHVwbGljYXRlLW5vLW92ZXJyaWRlJ1xuICB9XG5cbiAgZXhwb3J0IGVudW0gSW1wb3J0Q1NWTWV0aG9kIHtcbiAgICBBZGRGb3JjZSA9ICdhZGRmb3JjZScsXG4gICAgQWRkTm9Gb3JjZSA9ICdhZGRub2ZvcmNlJyxcbiAgICBSZW1vdmUgPSAncmVtb3ZlJyxcbiAgICBVblN1YiA9ICd1bnN1YicsXG4gICAgRXhjbHVkZU1hcmtldGluZyA9ICdleGNsdWRlbWFya2V0aW5nJyxcbiAgICBJbmNsdWRlTWFya2V0aW5nID0gJ2luY2x1ZGVtYXJrZXRpbmcnXG4gIH1cblxuICBleHBvcnQgZW51bSBDU1ZJbXBvcnRTdGF0dXMge1xuICAgIFVwbG9hZCA9ICdVcGxvYWQnLFxuICAgIENvbXBsZXRlZCA9ICdDb21wbGV0ZWQnLFxuICAgIEFib3J0ID0gJ0Fib3J0JyxcbiAgfVxuXG4gIGV4cG9ydCBlbnVtIEpvYlN0YXR1cyB7XG4gICAgQ29tcGxldGVkID0gJ0NvbXBsZXRlZCcsXG4gICAgSW5Qcm9ncmVzcyA9ICdJbiBQcm9ncmVzcycsXG4gICAgRXJyb3IgPSAnRXJyb3InXG4gIH1cblxuICBleHBvcnQgaW50ZXJmYWNlIEpvYiB7XG4gICAgSm9iSUQ6IG51bWJlcjtcbiAgfVxuXG4gIGV4cG9ydCBpbnRlcmZhY2UgQ1NWSW1wb3J0IHtcbiAgICBJRDogbnVtYmVyO1xuICAgIEVyclRyZXNob2xkOiBudW1iZXI7XG4gICAgSW1wb3J0T3B0aW9uczogc3RyaW5nO1xuICAgIE1ldGhvZDogSW1wb3J0Q1NWTWV0aG9kO1xuICAgIEFsaXZlQXQ6IHN0cmluZztcbiAgICBDb250YWN0c0xpc3RJRDogbnVtYmVyO1xuICAgIENvdW50OiBudW1iZXI7XG4gICAgQ3VycmVudDogbnVtYmVyO1xuICAgIERhdGFJRDogbnVtYmVyO1xuICAgIEVycmNvdW50OiBudW1iZXI7XG4gICAgSm9iRW5kOiBzdHJpbmc7XG4gICAgSm9iU3RhcnQ6IHN0cmluZztcbiAgICBSZXF1ZXN0QXQ6IHN0cmluZztcbiAgICBTdGF0dXM6IENTVkltcG9ydFN0YXR1cztcbiAgfVxuXG4gIGV4cG9ydCBpbnRlcmZhY2UgQ29udGFjdExpc3Qge1xuICAgIExpc3RJRDogbnVtYmVyO1xuICAgIEFjdGlvbjogTWFuYWdlQ29udGFjdHNBY3Rpb247XG4gIH1cblxuICBleHBvcnQgaW50ZXJmYWNlIENvbnRhY3RNYW5hZ2VNYW55Q29udGFjdHMge1xuICAgIENvbnRhY3RzTGlzdHM6IENvbnRhY3RMaXN0W107XG4gICAgQ291bnQ6IG51bWJlcjtcbiAgICBFcnJvcjogc3RyaW5nO1xuICAgIEVycm9yRmlsZTogc3RyaW5nO1xuICAgIEpvYkVuZDogc3RyaW5nO1xuICAgIEpvYlN0YXJ0OiBzdHJpbmc7XG4gICAgU3RhdHVzOiBKb2JTdGF0dXM7XG4gIH1cblxuICBleHBvcnQgaW50ZXJmYWNlIENvbnRhY3RzTGlzdEltcG9ydExpc3Qge1xuICAgIEpvYklEOiBudW1iZXI7XG4gICAgQWN0aW9uOiBJbXBvcnRMaXN0QWN0aW9uO1xuICAgIExpc3RJRDogbnVtYmVyO1xuICB9XG5cbiAgLy8gUkVRVUVTVCBQQVJUXG4gIGV4cG9ydCB0eXBlIENvbnRhY3RCb2R5PFByb3BlcnRpZXMgPSBDb21tb24uVW5rbm93blJlYz4gPSB7XG4gICAgRW1haWw6IHN0cmluZztcbiAgICBOYW1lPzogc3RyaW5nO1xuICAgIElzRXhjbHVkZWRGcm9tQ2FtcGFpZ25zPzogYm9vbGVhbjtcbiAgICBQcm9wZXJ0aWVzPzogUHJvcGVydGllcztcbiAgfVxuXG4gIGV4cG9ydCB0eXBlIFBvc3RDb250YWN0TWFuYWdlTWFueUNvbnRhY3RzQm9keTxQcm9wZXJ0aWVzID0gQ29tbW9uLlVua25vd25SZWM+ID0ge1xuICAgIENvbnRhY3RzOiBBcnJheTxDb250YWN0Qm9keTxQcm9wZXJ0aWVzPj47XG4gICAgQ29udGFjdHNMaXN0cz86IENvbnRhY3RMaXN0W107XG4gIH1cblxuICBleHBvcnQgdHlwZSBQb3N0Q29udGFjdHNMaXN0SW1wb3J0TGlzdEJvZHkgPSB7XG4gICAgQWN0aW9uOiBJbXBvcnRMaXN0QWN0aW9uO1xuICAgIExpc3RJRDogbnVtYmVyO1xuICB9XG5cbiAgZXhwb3J0IHR5cGUgUG9zdENvbnRhY3RzTGlzdE1hbmFnZU1hbnlDb250YWN0c0JvZHk8UHJvcGVydGllcyA9IENvbW1vbi5Vbmtub3duUmVjPiA9IHtcbiAgICBBY3Rpb246IE1hbmFnZUNvbnRhY3RzQWN0aW9uO1xuICAgIENvbnRhY3RzOiBBcnJheTxDb250YWN0Qm9keTxQcm9wZXJ0aWVzPj47XG4gIH1cblxuICBleHBvcnQgdHlwZSBQb3N0Q1NWSW1wb3J0Qm9keSA9IHtcbiAgICBDb250YWN0c0xpc3RJRDogbnVtYmVyO1xuICAgIERhdGFJRDogbnVtYmVyO1xuICAgIEVyclRyZXNob2xkPzogbnVtYmVyO1xuICAgIEltcG9ydE9wdGlvbnM/OiBzdHJpbmc7XG4gICAgTWV0aG9kPzogSW1wb3J0Q1NWTWV0aG9kO1xuICB9XG5cbiAgZXhwb3J0IHR5cGUgUHV0Q1NWSW1wb3J0Qm9keSA9IFBhcnRpYWw8UG9zdENTVkltcG9ydEJvZHk+ICYge1xuICAgIFN0YXR1cz86IENTVkltcG9ydFN0YXR1cztcbiAgfVxuXG4gIGV4cG9ydCB0eXBlIEdldENTVkltcG9ydFF1ZXJ5UGFyYW1zID0gUGFydGlhbDxDb21tb24uUGFnaW5hdGlvbj5cblxuICAvLyBSRVNQT05TRSBQQVJUXG4gIHR5cGUgSm9iUmVzcG9uc2UgPSBDb21tb24uUmVzcG9uc2U8Sm9iW10+O1xuICB0eXBlIENTVkltcG9ydFJlc3BvbnNlID0gQ29tbW9uLlJlc3BvbnNlPENTVkltcG9ydFtdPjtcbiAgdHlwZSBDb250YWN0TWFuYWdlTWFueUNvbnRhY3RzUmVzcG9uc2UgPSBDb21tb24uUmVzcG9uc2U8Q29udGFjdE1hbmFnZU1hbnlDb250YWN0c1tdPjtcblxuICBleHBvcnQgdHlwZSBQb3N0Q29udGFjdE1hbmFnZU1hbnlDb250YWN0c1Jlc3BvbnNlID0gSm9iUmVzcG9uc2VcbiAgZXhwb3J0IHR5cGUgR2V0Q29udGFjdE1hbmFnZU1hbnlDb250YWN0c1Jlc3BvbnNlID0gQ29udGFjdE1hbmFnZU1hbnlDb250YWN0c1Jlc3BvbnNlXG5cbiAgZXhwb3J0IHR5cGUgUG9zdENvbnRhY3RzTGlzdEltcG9ydExpc3RSZXNwb25zZSA9IEpvYlJlc3BvbnNlXG4gIGV4cG9ydCB0eXBlIEdldENvbnRhY3RzTGlzdEltcG9ydExpc3RSZXNwb25zZSA9IENvbW1vbi5SZXNwb25zZTxDb250YWN0c0xpc3RJbXBvcnRMaXN0W10+O1xuXG4gIGV4cG9ydCB0eXBlIFBvc3RDb250YWN0c0xpc3RNYW5hZ2VNYW55Q29udGFjdHNSZXNwb25zZSA9IEpvYlJlc3BvbnNlXG4gIGV4cG9ydCB0eXBlIEdldENvbnRhY3RzTGlzdE1hbmFnZU1hbnlDb250YWN0c1Jlc3BvbnNlID0gQ29udGFjdE1hbmFnZU1hbnlDb250YWN0c1Jlc3BvbnNlO1xuXG4gIGV4cG9ydCB0eXBlIFBvc3RDU1ZJbXBvcnRSZXNwb25zZSA9IENTVkltcG9ydFJlc3BvbnNlXG4gIGV4cG9ydCB0eXBlIFB1dENTVkltcG9ydFJlc3BvbnNlID0gQ1NWSW1wb3J0UmVzcG9uc2VcbiAgZXhwb3J0IHR5cGUgR2V0Q1NWSW1wb3J0UmVzcG9uc2UgPSBDU1ZJbXBvcnRSZXNwb25zZVxufVxuXG5leHBvcnQgbmFtZXNwYWNlIENvbnRhY3RQcm9wZXJ0aWVzIHtcbiAgZXhwb3J0IGVudW0gRGF0YVR5cGUge1xuICAgIFN0ciA9ICdzdHInLFxuICAgIEludCA9ICdpbnQnLFxuICAgIEZsb2F0ID0gJ2Zsb2F0JyxcbiAgICBCb29sID0gJ2Jvb2wnLFxuICAgIERhdGVUaW1lID0gJ2RhdGV0aW1lJ1xuICB9XG5cbiAgZXhwb3J0IGVudW0gTmFtZVNwYWNlIHtcbiAgICBTdGF0aWMgPSAnc3RhdGljJyxcbiAgICBIaXN0b3JpYyA9ICdoaXN0b3JpYydcbiAgfVxuXG4gIGV4cG9ydCBpbnRlcmZhY2UgQ29udGFjdFByb3BlcnR5IHtcbiAgICBOYW1lOiBzdHJpbmc7XG4gICAgVmFsdWU6IHN0cmluZztcbiAgfVxuXG4gIGV4cG9ydCBpbnRlcmZhY2UgQ29udGFjdERhdGEge1xuICAgIElEOiBudW1iZXI7XG4gICAgQ29udGFjdElEOiBudW1iZXI7XG4gICAgRGF0YTogQ29udGFjdFByb3BlcnR5W107XG4gIH1cblxuICBleHBvcnQgaW50ZXJmYWNlIENvbnRhY3RNZXRhRGF0YSB7XG4gICAgSUQ6IG51bWJlcjtcbiAgICBEYXRhdHlwZTogRGF0YVR5cGU7XG4gICAgTmFtZTogc3RyaW5nO1xuICAgIE5hbWVTcGFjZTogTmFtZVNwYWNlO1xuICB9XG5cbiAgLy8gUkVRVUVTVCBQQVJUXG4gIGV4cG9ydCB0eXBlIFBvc3RDb250YWN0TWV0YURhdGFCb2R5ID0ge1xuICAgIE5hbWU6IHN0cmluZztcbiAgICBEYXRhdHlwZT86IERhdGFUeXBlO1xuICAgIE5hbWVTcGFjZT86IE5hbWVTcGFjZTtcbiAgfVxuXG4gIGV4cG9ydCB0eXBlIFB1dENvbnRhY3RNZXRhRGF0YUJvZHkgPSB7XG4gICAgTmFtZT86IHN0cmluZztcbiAgICBEYXRhdHlwZT86IERhdGFUeXBlO1xuICB9XG5cbiAgZXhwb3J0IHR5cGUgR2V0Q29udGFjdE1ldGFEYXRhUXVlcnlQYXJhbXMgPSBQYXJ0aWFsPENvbW1vbi5QYWdpbmF0aW9uPiAmIHtcbiAgICBEYXRhVHlwZT86IERhdGFUeXBlXG4gICAgTmFtZXNwYWNlPzogTmFtZVNwYWNlO1xuICB9XG5cbiAgZXhwb3J0IHR5cGUgUHV0Q29udGFjdERhdGFCb2R5ID0ge1xuICAgIERhdGE6IENvbnRhY3RQcm9wZXJ0eVtdO1xuICB9XG5cbiAgZXhwb3J0IHR5cGUgR2V0Q29udGFjdERhdGFRdWVyeVBhcmFtcyA9IFBhcnRpYWw8Q29tbW9uLlBhZ2luYXRpb24+ICYge1xuICAgIENhbXBhaWduPzogbnVtYmVyO1xuICAgIENvbnRhY3RFbWFpbD86IHN0cmluZztcbiAgICBDb250YWN0c0xpc3Q/OiBudW1iZXI7XG4gICAgRmllbGRzPzogc3RyaW5nO1xuICAgIExhc3RBY3Rpdml0eUF0Pzogc3RyaW5nO1xuICB9XG5cbiAgLy8gUkVTUE9OU0UgUEFSVFxuICB0eXBlIENvbnRhY3REYXRhUmVzcG9uc2UgPSBDb21tb24uUmVzcG9uc2U8Q29udGFjdERhdGFbXT47XG4gIHR5cGUgQ29udGFjdE1ldGFEYXRhUmVzcG9uc2UgPSBDb21tb24uUmVzcG9uc2U8Q29udGFjdE1ldGFEYXRhW10+O1xuXG4gIGV4cG9ydCB0eXBlIFBvc3RDb250YWN0TWV0YURhdGFSZXNwb25zZSA9IENvbnRhY3RNZXRhRGF0YVJlc3BvbnNlO1xuICBleHBvcnQgdHlwZSBQdXRDb250YWN0TWV0YURhdGFSZXNwb25zZSA9IENvbnRhY3RNZXRhRGF0YVJlc3BvbnNlO1xuICBleHBvcnQgdHlwZSBHZXRDb250YWN0TWV0YURhdGFSZXNwb25zZSA9IENvbnRhY3RNZXRhRGF0YVJlc3BvbnNlO1xuXG4gIGV4cG9ydCB0eXBlIFB1dENvbnRhY3REYXRhUmVzcG9uc2UgPSBDb250YWN0RGF0YVJlc3BvbnNlO1xuICBleHBvcnQgdHlwZSBHZXRDb250YWN0RGF0YVJlc3BvbnNlID0gQ29udGFjdERhdGFSZXNwb25zZTtcbn1cblxuZXhwb3J0IG5hbWVzcGFjZSBDb250YWN0U3Vic2NyaXB0aW9uIHtcbiAgZXhwb3J0IGludGVyZmFjZSBNYW5hZ2VDb250YWN0czxQcm9wZXJ0aWVzID0gQ29tbW9uLlVua25vd25SZWM+IHtcbiAgICBFbWFpbDogc3RyaW5nO1xuICAgIEFjdGlvbjogQnVsa0NvbnRhY3RNYW5hZ2VtZW50Lk1hbmFnZUNvbnRhY3RzQWN0aW9uO1xuICAgIE5hbWU6IHN0cmluZztcbiAgICBQcm9wZXJ0aWVzOiBQcm9wZXJ0aWVzO1xuICB9XG5cbiAgZXhwb3J0IGludGVyZmFjZSBMaXN0UmVjaXBpZW50IHtcbiAgICBJRDogbnVtYmVyO1xuICAgIElzVW5zdWJzY3JpYmVkOiBib29sZWFuO1xuICAgIENvbnRhY3RJRDogbnVtYmVyO1xuICAgIExpc3RJRDogbnVtYmVyO1xuICAgIExpc3ROYW1lOiBzdHJpbmc7XG4gICAgU3Vic2NyaWJlZEF0OiBzdHJpbmc7XG4gICAgVW5zdWJzY3JpYmVkQXQ6IHN0cmluZztcbiAgfVxuXG4gIGV4cG9ydCBpbnRlcmZhY2UgQ29udGFjdHNMaXN0IHtcbiAgICBMaXN0SUQ6IG51bWJlcjtcbiAgICBJc1Vuc3ViOiBib29sZWFuO1xuICAgIFN1YnNjcmliZWRBdDogc3RyaW5nO1xuICB9XG5cbiAgZXhwb3J0IGludGVyZmFjZSBDb250YWN0c0xpc3RTaWdudXAge1xuICAgIElEOiBudW1iZXI7XG4gICAgQ29uZmlybUF0OiBudW1iZXI7XG4gICAgQ29uZmlybUlwOiBzdHJpbmc7XG4gICAgQ29udGFjdElEOiBudW1iZXI7XG4gICAgRW1haWw6IHN0cmluZztcbiAgICBMaXN0SUQ6IG51bWJlcjtcbiAgICBTaWdudXBBdDogbnVtYmVyO1xuICAgIFNpZ251cElwOiBzdHJpbmc7XG4gICAgU2lnbnVwS2V5OiBzdHJpbmc7XG4gICAgU291cmNlSWQ6IG51bWJlcjtcbiAgICBTb3VyY2U6IHN0cmluZztcbiAgfVxuXG4gIC8vIFJFUVVFU1QgUEFSVFxuICBleHBvcnQgdHlwZSBQb3N0Q29udGFjdE1hbmFnZUNvbnRhY3RzTGlzdHNCb2R5ID0ge1xuICAgIENvbnRhY3RzTGlzdHM6IEJ1bGtDb250YWN0TWFuYWdlbWVudC5Db250YWN0TGlzdFtdO1xuICB9XG5cbiAgZXhwb3J0IHR5cGUgUG9zdENvbnRhY3RzTGlzdE1hbmFnZUNvbnRhY3RCb2R5PFByb3BlcnRpZXMgPSBDb21tb24uVW5rbm93blJlYz4gPSB7XG4gICAgRW1haWw6IHN0cmluZztcbiAgICBBY3Rpb246IEJ1bGtDb250YWN0TWFuYWdlbWVudC5NYW5hZ2VDb250YWN0c0FjdGlvbjtcbiAgICBOYW1lPzogc3RyaW5nO1xuICAgIFByb3BlcnRpZXM/OiBQcm9wZXJ0aWVzO1xuICB9XG5cbiAgZXhwb3J0IHR5cGUgUG9zdExpc3RSZWNpcGllbnRCb2R5ID0ge1xuICAgIElzVW5zdWJzY3JpYmVkPzogYm9vbGVhbjtcbiAgICBDb250YWN0SUQ6IG51bWJlcjtcbiAgICBDb250YWN0QWx0Pzogc3RyaW5nO1xuICAgIExpc3RJRDogbnVtYmVyO1xuICAgIExpc3RBbHQ/OiBzdHJpbmc7XG4gIH1cblxuICBleHBvcnQgdHlwZSBQdXRMaXN0UmVjaXBpZW50Qm9keSA9IHtcbiAgICBJc1Vuc3Vic2NyaWJlZD86IGJvb2xlYW47XG4gIH1cblxuICBleHBvcnQgdHlwZSBHZXRMaXN0UmVjaXBpZW50UXVlcnlQYXJhbXMgPSBQYXJ0aWFsPENvbW1vbi5QYWdpbmF0aW9uPiAmIHtcbiAgICBCbG9ja2VkPzogYm9vbGVhbjtcbiAgICBDb250YWN0PzogbnVtYmVyO1xuICAgIENvbnRhY3RFbWFpbD86IHN0cmluZztcbiAgICBDb250YWN0c0xpc3Q/OiBudW1iZXI7XG4gICAgSWdub3JlRGVsZXRlZD86IGJvb2xlYW47XG4gICAgSXNFeGNsdWRlZEZyb21DYW1wYWlnbnM/OiBib29sZWFuO1xuICAgIExhc3RBY3Rpdml0eUF0Pzogc3RyaW5nO1xuICAgIExpc3ROYW1lPzogc3RyaW5nO1xuICAgIE9wZW5lZD86IGJvb2xlYW47XG4gICAgVW5zdWI/OiBib29sZWFuO1xuICB9XG5cbiAgZXhwb3J0IHR5cGUgR2V0Q29udGFjdHNMaXN0U2lnbnVwUXVlcnlQYXJhbXMgPSBQYXJ0aWFsPENvbW1vbi5QYWdpbmF0aW9uPiAmIHtcbiAgICBDb250YWN0PzogbnVtYmVyO1xuICAgIENvbnRhY3RzTGlzdD86IG51bWJlcjtcbiAgICBEb21haW4/OiBzdHJpbmc7XG4gICAgRW1haWw/OiBzdHJpbmc7XG4gICAgTG9jYWxQYXJ0Pzogc3RyaW5nO1xuICAgIE1heENvbmZpcm1BdD86IG51bWJlcjtcbiAgICBNaW5Db25maXJtQXQ/OiBudW1iZXI7XG4gICAgTWF4U2lnbnVwQXQ/OiBudW1iZXI7XG4gICAgTWluU2lnbnVwQXQ/OiBudW1iZXI7XG4gICAgU2lnbnVwSXA/OiBzdHJpbmc7XG4gICAgU291cmNlPzogc3RyaW5nO1xuICAgIFNvdXJjZUlEPzogbnVtYmVyO1xuICB9XG5cbiAgLy8gUkVTUE9OU0UgUEFSVFxuICB0eXBlIExpc3RSZWNpcGllbnRSZXNwb25zZSA9IENvbW1vbi5SZXNwb25zZTxMaXN0UmVjaXBpZW50W10+O1xuXG4gIGV4cG9ydCB0eXBlIFBvc3RDb250YWN0TWFuYWdlQ29udGFjdHNMaXN0c1Jlc3BvbnNlID0gQ29tbW9uLlJlc3BvbnNlPFxuICAgIEFycmF5PHsgQ29udGFjdHNMaXN0czogQnVsa0NvbnRhY3RNYW5hZ2VtZW50LkNvbnRhY3RMaXN0W10gfT5cbiAgICA+O1xuXG4gIGV4cG9ydCB0eXBlIFBvc3RDb250YWN0c0xpc3RNYW5hZ2VDb250YWN0UmVzcG9uc2U8UHJvcGVydGllcyA9IENvbW1vbi5Vbmtub3duUmVjPiA9XG4gICAgICBDb21tb24uUmVzcG9uc2U8QXJyYXk8TWFuYWdlQ29udGFjdHM8UHJvcGVydGllcz4+PjtcblxuICBleHBvcnQgdHlwZSBQb3N0TGlzdFJlY2lwaWVudFJlc3BvbnNlID0gTGlzdFJlY2lwaWVudFJlc3BvbnNlXG4gIGV4cG9ydCB0eXBlIFB1dExpc3RSZWNpcGllbnRSZXNwb25zZSA9IExpc3RSZWNpcGllbnRSZXNwb25zZVxuICBleHBvcnQgdHlwZSBHZXRMaXN0UmVjaXBpZW50UmVzcG9uc2UgPSBMaXN0UmVjaXBpZW50UmVzcG9uc2VcblxuICBleHBvcnQgdHlwZSBHZXRDb250YWN0R2V0Q29udGFjdHNMaXN0c1Jlc3BvbnNlID0gQ29tbW9uLlJlc3BvbnNlPENvbnRhY3RzTGlzdFtdPlxuXG4gIGV4cG9ydCB0eXBlIEdldENvbnRhY3RzTGlzdFNpZ251cFJlc3BvbnNlID0gQ29tbW9uLlJlc3BvbnNlPENvbnRhY3RzTGlzdFNpZ251cFtdPlxufVxuXG5leHBvcnQgbmFtZXNwYWNlIENvbnRhY3RWZXJpZmljYXRpb24ge1xuICBleHBvcnQgaW50ZXJmYWNlIFZlcmlmaWNhdGlvblN1bW1hcnk8UmVzdWx0ID0gQ29tbW9uLlVua25vd25SZWMsIFJpc2sgPSBDb21tb24uVW5rbm93blJlYz4ge1xuICAgIHJlc3VsdDogUmVzdWx0O1xuICAgIHJpc2s6IFJpc2s7XG4gIH1cblxuICBleHBvcnQgaW50ZXJmYWNlIENvbnRhY3RzTGlzdFZlcmlmaWNhdGlvbjxSZXN1bHQgPSBDb21tb24uVW5rbm93blJlYywgUmlzayA9IENvbW1vbi5Vbmtub3duUmVjPiB7XG4gICAgQWtpZDogbnVtYmVyO1xuICAgIENvbnRhY3RMaXN0SUQ6IG51bWJlcjtcbiAgICBDb3VudDogbnVtYmVyO1xuICAgIEVycm9yOiBzdHJpbmc7XG4gICAgSUQ6IG51bWJlcjtcbiAgICBKb2JFbmQ6IHN0cmluZztcbiAgICBKb2JTdGFydDogc3RyaW5nO1xuICAgIE1ldGhvZDogc3RyaW5nO1xuICAgIFJlc3BvbnNlVVJMOiBzdHJpbmc7XG4gICAgU3RhdHVzOiBzdHJpbmc7XG4gICAgU3VtbWFyeTogVmVyaWZpY2F0aW9uU3VtbWFyeTxSZXN1bHQsIFJpc2s+XG4gIH1cblxuICAvLyBSRVFVRVNUIFBBUlRcblxuICAvLyBSRVNQT05TRSBQQVJUXG4gIGV4cG9ydCB0eXBlIEdldENvbnRhY3RzTGlzdFZlcmlmeVJlc3BvbnNlPFJlc3VsdCA9IENvbW1vbi5Vbmtub3duUmVjLCBSaXNrID0gQ29tbW9uLlVua25vd25SZWM+ID1cbiAgICBDb21tb24uUmVzcG9uc2U8QXJyYXk8Q29udGFjdHNMaXN0VmVyaWZpY2F0aW9uPFJlc3VsdCwgUmlzaz4+Pjtcbn1cbiIsImltcG9ydCB7IENvbW1vbiB9IGZyb20gJy4vQ29tbW9uJztcblxuZXhwb3J0IG5hbWVzcGFjZSBNZXNzYWdlIHtcbiAgZXhwb3J0IGVudW0gTWVzc2FnZVN0YXRlIHtcbiAgICBVc2VyVW5rbm93biA9IDEsXG4gICAgTWFpbGJveEluYWN0aXZlID0gMixcbiAgICBRdW90YUV4Y2VlZGVkID0gMyxcbiAgICBJbnZhbGlkRG9tYWluID0gNCxcbiAgICBOb01haWxIb3N0ID0gNSxcbiAgICBSZWxheU9yQWNjZXNzRGVuaWVkID0gNixcbiAgICBTZW5kZXJCbG9ja2VkID0gNyxcbiAgICBDb250ZW50QmxvY2tlZCA9IDgsXG4gICAgUG9saWN5SXNzdWUgPSA5LFxuICAgIFN5c3RlbUlzc3VlID0gMTAsXG4gICAgUHJvdG9jb2xJc3N1ZSA9IDExLFxuICAgIENvbm5lY3Rpb25Jc3N1ZSA9IDEyLFxuICAgIEdyZXlMaXN0ZWQgPSAxMyxcbiAgICBQcmVCbG9ja2VkID0gMTQsXG4gICAgRHVwbGljYXRlSW5DYW1wYWlnbiA9IDE1LFxuICAgIFNwYW1QcmVCbG9ja2VkID0gMTYsXG4gICAgQmFkT3JFbXB0eVRlbXBsYXRlID0gMTcsXG4gICAgRXJyb3JJblRlbXBsYXRlTGFuZ3VhZ2UgPSAxOCxcbiAgICBUeXBvRml4ID0gMTksXG4gICAgQmxhY2tMaXN0ZWQgPSAyMCxcbiAgICBTcGFtUmVwb3J0ZXIgPSAyMVxuICB9XG5cbiAgZXhwb3J0IGVudW0gRnJvbVR5cGUge1xuICAgIFRyYW5zYWN0aW9uYWwgPSAxLFxuICAgIE1hcmtldGluZyA9IDIsXG4gICAgVW5rbm93biA9IDMsXG4gIH1cblxuICBleHBvcnQgZW51bSBNZXNzYWdlU3RhdHVzIHtcbiAgICBQcm9jZXNzZWQgPSAwLFxuICAgIFF1ZXVlZCA9IDEsXG4gICAgU2VudCA9IDIsXG4gICAgT3BlbmVkID0gMyxcbiAgICBDbGlja2VkID0gNCxcbiAgICBCb3VuY2UgPSA1LFxuICAgIFNwYW0gPSA2LFxuICAgIFVuc3ViID0gNyxcbiAgICBCbG9ja2VkID0gOCxcbiAgICBTb2Z0Qm91bmNlID0gOSxcbiAgICBIYXJkQm91bmNlID0gMTAsXG4gICAgRGVmZXJyZWQgPSAxMSxcbiAgfVxuXG4gIGV4cG9ydCBlbnVtIEN1cnJlbnRNZXNzYWdlU3RhdHVzIHtcbiAgICBVbmtub3duID0gJ3Vua25vd24nLFxuICAgIFF1ZXVlZCA9ICdxdWV1ZWQnLFxuICAgIFNlbnQgPSAnc2VudCcsXG4gICAgT3BlbmVkID0gJ29wZW5lZCcsXG4gICAgQ2xpY2tlZCA9ICdjbGlja2VkJyxcbiAgICBCb3VuY2UgPSAnYm91bmNlJyxcbiAgICBTcGFtID0gJ3NwYW0nLFxuICAgIFVuc3ViID0gJ3Vuc3ViJyxcbiAgICBCbG9ja2VkID0gJ2Jsb2NrZWQnLFxuICAgIEhhcmRCb3VuY2VkID0gJ2hhcmRib3VuY2VkJyxcbiAgICBTb2Z0Qm91bmNlZCA9ICdzb2Z0Ym91bmNlZCcsXG4gICAgRGVmZXJyZWQgPSAnZGVmZXJyZWQnLFxuICB9XG5cbiAgZXhwb3J0IGVudW0gRXZlbnRUeXBlIHtcbiAgICBTZW50ID0gJ3NlbnQnLFxuICAgIE9wZW5lZCA9ICdvcGVuZWQnLFxuICAgIENsaWNrZWQgPSAnY2xpY2tlZCcsXG4gICAgQm91bmNlZCA9ICdib3VuY2VkJyxcbiAgICBCbG9ja2VkID0gJ2Jsb2NrZWQnLFxuICAgIFVuc3ViID0gJ3Vuc3ViJyxcbiAgICBTcGFtID0gJ3NwYW0nXG4gIH1cblxuICBleHBvcnQgaW50ZXJmYWNlIE1lc3NhZ2VUcmFja2VkIHtcbiAgICBJc0NsaWNrVHJhY2tlZDogYm9vbGVhbjtcbiAgICBJc0hUTUxQYXJ0SW5jbHVkZWQ6IGJvb2xlYW47XG4gICAgSXNPcGVuVHJhY2tlZDogYm9vbGVhbjtcbiAgICBJc1RleHRQYXJ0SW5jbHVkZWQ6IGJvb2xlYW47XG4gICAgSXNVbnN1YlRyYWNrZWQ6IGJvb2xlYW47XG4gIH1cblxuICBleHBvcnQgaW50ZXJmYWNlIE1lc3NhZ2UgZXh0ZW5kcyBNZXNzYWdlVHJhY2tlZCB7XG4gICAgSUQ6IG51bWJlcjtcbiAgICBBcnJpdmVkQXQ6IHN0cmluZztcbiAgICBBdHRhY2htZW50Q291bnQ6IG51bWJlcjtcbiAgICBBdHRlbXB0Q291bnQ6IG51bWJlcjtcbiAgICBDYW1wYWlnbklEOiBudW1iZXI7XG4gICAgQ29udGFjdEFsdDogc3RyaW5nO1xuICAgIENvbnRhY3RJRDogbnVtYmVyO1xuICAgIERlbGF5OiBudW1iZXI7XG4gICAgRGVzdGluYXRpb25JRDogbnVtYmVyO1xuICAgIEZpbHRlclRpbWU6IG51bWJlcjtcbiAgICBNZXNzYWdlU2l6ZTogbnVtYmVyO1xuICAgIFNlbmRlcklEOiBudW1iZXI7XG4gICAgU3BhbWFzc2Fzc2luU2NvcmU6IG51bWJlcjtcbiAgICBTcGFtYXNzUnVsZXM6IHN0cmluZztcbiAgICBTdGF0ZUlEOiBNZXNzYWdlU3RhdGU7XG4gICAgU3RhdGVQZXJtYW5lbnQ6IGJvb2xlYW47XG4gICAgU3RhdHVzOiBDdXJyZW50TWVzc2FnZVN0YXR1cztcbiAgICBTdWJqZWN0OiBzdHJpbmc7XG4gICAgVVVJRDogc3RyaW5nO1xuICB9XG5cbiAgZXhwb3J0IGludGVyZmFjZSBNZXNzYWdlSGlzdG9yeSB7XG4gICAgQ29tbWVudDogc3RyaW5nO1xuICAgIEV2ZW50QXQ6IG51bWJlcjtcbiAgICBFdmVudFR5cGU6IEV2ZW50VHlwZTtcbiAgICBTdGF0ZTogc3RyaW5nO1xuICAgIFVzZXJhZ2VudDogc3RyaW5nO1xuICAgIFVzZXJhZ2VudElEOiBudW1iZXI7XG4gIH1cblxuICBleHBvcnQgaW50ZXJmYWNlIE1lc3NhZ2VJbmZvcm1hdGlvbjxSdWxlcyA9IENvbW1vbi5Vbmtub3duUmVjPiB7XG4gICAgSUQ6IG51bWJlcjtcbiAgICBDYW1wYWlnbklEOiBudW1iZXI7XG4gICAgQ2xpY2tUcmFja2VkQ291bnQ6IG51bWJlcjtcbiAgICBDb250YWN0SUQ6IG51bWJlcjtcbiAgICBDcmVhdGVkQXQ6IHN0cmluZztcbiAgICBNZXNzYWdlU2l6ZTogbnVtYmVyO1xuICAgIE9wZW5UcmFja2VkQ291bnQ6IG51bWJlcjtcbiAgICBRdWV1ZWRDb3VudDogbnVtYmVyO1xuICAgIFNlbmRFbmRBdDogc3RyaW5nO1xuICAgIFNlbnRDb3VudDogbnVtYmVyO1xuICAgIFNwYW1Bc3Nhc3NpblJ1bGVzOiBSdWxlcztcbiAgICBTcGFtQXNzYXNzaW5TY29yZTogbnVtYmVyO1xuICB9XG5cbiAgLy8gUkVRVUVTVCBQQVJUXG4gIGV4cG9ydCB0eXBlIEdldE1lc3NhZ2VRdWVyeVBhcmFtcyA9IFBhcnRpYWw8Q29tbW9uLlRpbWVzdGFtcFBlcmlvZD4gJlxuICAgIFBhcnRpYWw8Q29tbW9uLlBhZ2luYXRpb24+ICZcbiAge1xuICAgIENhbXBhaWduPzogbnVtYmVyO1xuICAgIENvbnRhY3Q/OiBudW1iZXI7XG4gICAgQ3VzdG9tSUQ/OiBzdHJpbmc7XG4gICAgRGVzdGluYXRpb24/OiBudW1iZXI7XG4gICAgRnJvbVR5cGU/OiBGcm9tVHlwZTtcbiAgICBNZXNzYWdlU3RhdGU/OiBNZXNzYWdlU3RhdGU7XG4gICAgTWVzc2FnZVN0YXR1cz86IE1lc3NhZ2VTdGF0dXM7XG4gICAgUGxhblN1YnNjcmlwdGlvbj86IG51bWJlcjtcbiAgICBTZW5kZXJJRD86IG51bWJlcjtcbiAgICBTaG93Q29udGFjdEFsdD86IGJvb2xlYW47XG4gICAgU2hvd0N1c3RvbUlEPzogYm9vbGVhbjtcbiAgICBTaG93U3ViamVjdD86IGJvb2xlYW47XG4gIH1cblxuICBleHBvcnQgdHlwZSBHZXRNZXNzYWdlSW5mb3JtYXRpb25RdWVyeVBhcmFtcyA9IFBhcnRpYWw8Q29tbW9uLlRpbWVzdGFtcFBlcmlvZD4gJlxuICAgIFBhcnRpYWw8Q29tbW9uLlBhZ2luYXRpb24+ICZcbiAge1xuICAgIENhbXBhaWduSUQ/OiBudW1iZXI7XG4gICAgQ29udGFjdHNMaXN0PzogbnVtYmVyO1xuICAgIEN1c3RvbUNhbXBhaWduPzogc3RyaW5nO1xuICAgIEZyb20/OiBzdHJpbmc7XG4gICAgRnJvbURvbWFpbj86IHN0cmluZztcbiAgICBGcm9tSUQ/OiBudW1iZXI7XG4gICAgRnJvbVR5cGU/OiBGcm9tVHlwZTtcbiAgICBJc0RlbGV0ZWQ/OiBib29sZWFuO1xuICAgIElzTmV3c2xldHRlclRvb2w/OiBib29sZWFuO1xuICAgIElzU3RhcnJlZD86IGJvb2xlYW47XG4gICAgTWVzc2FnZVN0YXR1cz86IE1lc3NhZ2VTdGF0dXM7XG4gICAgUGVyaW9kPzogQ29tbW9uLlBlcmlvZDtcbiAgfVxuXG4gIC8vIFJFU1BPTlNFIFBBUlRcbiAgZXhwb3J0IHR5cGUgR2V0TWVzc2FnZXNSZXNwb25zZSA9IENvbW1vbi5SZXNwb25zZTxNZXNzYWdlW10+XG4gIGV4cG9ydCB0eXBlIEdldE1lc3NhZ2VIaXN0b3J5UmVzcG9uc2UgPSBDb21tb24uUmVzcG9uc2U8TWVzc2FnZUhpc3RvcnlbXT5cbiAgZXhwb3J0IHR5cGUgR2V0TWVzc2FnZUluZm9ybWF0aW9uUmVzcG9uc2U8UnVsZXMgPSBDb21tb24uVW5rbm93blJlYz4gPVxuICAgICAgQ29tbW9uLlJlc3BvbnNlPEFycmF5PE1lc3NhZ2VJbmZvcm1hdGlvbjxSdWxlcz4+PlxufVxuIiwiaW1wb3J0IHsgQ29tbW9uIH0gZnJvbSAnLi9Db21tb24nO1xuXG5leHBvcnQgbmFtZXNwYWNlIFNlZ21lbnRhdGlvbiB7XG4gIGV4cG9ydCBlbnVtIFNlZ21lbnRTdGF0dXMge1xuICAgIFVzZWQgPSAndXNlZCcsXG4gICAgVW5Vc2VkID0gJ3VudXNlZCcsXG4gICAgRGVsZXRlZCA9ICdkZWxldGVkJ1xuICB9XG5cbiAgZXhwb3J0IGludGVyZmFjZSBDb250YWN0RmlsdGVyIHtcbiAgICBJRDogbnVtYmVyO1xuICAgIERlc2NyaXB0aW9uOiBzdHJpbmc7XG4gICAgRXhwcmVzc2lvbjogc3RyaW5nO1xuICAgIE5hbWU6IHN0cmluZztcbiAgICBTdGF0dXM6IFNlZ21lbnRTdGF0dXM7XG4gIH1cblxuICAvLyBSRVFVRVNUIFBBUlRcbiAgZXhwb3J0IHR5cGUgUG9zdENvbnRhY3RGaWx0ZXJCb2R5ID0ge1xuICAgIE5hbWU6IHN0cmluZztcbiAgICBFeHByZXNzaW9uOiBzdHJpbmc7XG4gICAgRGVzY3JpcHRpb24/OiBzdHJpbmc7XG4gIH1cblxuICBleHBvcnQgdHlwZSBQdXRDb250YWN0RmlsdGVyQm9keSA9IFBhcnRpYWw8UG9zdENvbnRhY3RGaWx0ZXJCb2R5PiAmIHtcbiAgICBTdGF0dXM/OiBTZWdtZW50U3RhdHVzO1xuICB9XG5cbiAgZXhwb3J0IHR5cGUgR2V0Q29udGFjdEZpbHRlclF1ZXJ5UGFyYW1zID0gUGFydGlhbDxDb21tb24uUGFnaW5hdGlvbj4gJiB7XG4gICAgU2hvd0RlbGV0ZWQ/OiBib29sZWFuO1xuICAgIFN0YXR1cz86IFNlZ21lbnRTdGF0dXM7XG4gIH1cblxuICAvLyBSRVNQT05TRSBQQVJUXG4gIHR5cGUgQ29udGFjdEZpbHRlclJlc3BvbnNlID0gQ29tbW9uLlJlc3BvbnNlPENvbnRhY3RGaWx0ZXJbXT47XG5cbiAgZXhwb3J0IHR5cGUgUG9zdENvbnRhY3RGaWx0ZXJSZXNwb25zZSA9IENvbnRhY3RGaWx0ZXJSZXNwb25zZTtcbiAgZXhwb3J0IHR5cGUgUHV0Q29udGFjdEZpbHRlclJlc3BvbnNlID0gQ29udGFjdEZpbHRlclJlc3BvbnNlO1xuICBleHBvcnQgdHlwZSBHZXRDb250YWN0RmlsdGVyUmVzcG9uc2UgPSBDb250YWN0RmlsdGVyUmVzcG9uc2U7XG59XG4iLCJpbXBvcnQgeyBDb21tb24gfSBmcm9tICcuL0NvbW1vbic7XG5cbmV4cG9ydCBuYW1lc3BhY2UgU2VuZEVtYWlsVjMge1xuICBleHBvcnQgdHlwZSBNalRlbXBsYXRlRXJyb3JEZWxpdmVyID0gJzAnIHwgJ2RlbGl2ZXInXG4gIGV4cG9ydCB0eXBlIE1qRGVkdXBsaWNhdGVDYW1wYWlnbiA9IDAgfCAxO1xuICBleHBvcnQgdHlwZSBNalRyYWNrT3BlbiA9IDAgfCAxIHwgMjtcblxuICBleHBvcnQgaW50ZXJmYWNlIFJlY2lwaWVudCB7XG4gICAgRW1haWw6IHN0cmluZztcbiAgICBOYW1lPzogc3RyaW5nXG4gICAgVmFycz86IHN0cmluZztcbiAgfVxuXG4gIGV4cG9ydCBpbnRlcmZhY2UgQXR0YWNobWVudCB7XG4gICAgRmlsZW5hbWU6IHN0cmluZztcbiAgICBDb250ZW50OiBzdHJpbmc7XG4gICAgJ0NvbnRlbnQtdHlwZSc6IHN0cmluZztcbiAgfVxuXG4gIGV4cG9ydCB0eXBlIEJvZHlNaiA9IHtcbiAgICAnTWotVGVtcGxhdGVJRCc/OiBudW1iZXI7XG4gICAgJ01qLVRlbXBsYXRlTGFuZ3VhZ2UnPzogYm9vbGVhbjtcbiAgICAnTWotVGVtcGxhdGVFcnJvclJlcG9ydGluZyc/OiBzdHJpbmc7XG4gICAgJ01qLVRlbXBsYXRlRXJyb3JEZWxpdmVyJz86IE1qVGVtcGxhdGVFcnJvckRlbGl2ZXI7XG4gICAgJ01qLXByaW8nPzogbnVtYmVyO1xuICAgICdNai1jYW1wYWlnbic/OiBzdHJpbmc7XG4gICAgJ01qLWRlZHVwbGljYXRlY2FtcGFpZ24nPzogTWpEZWR1cGxpY2F0ZUNhbXBhaWduO1xuICAgICdNai10cmFja29wZW4nPzogTWpUcmFja09wZW47XG4gICAgJ01qLUN1c3RvbUlEJz86IHN0cmluZztcbiAgICAnTWotRXZlbnRQYXlsb2FkJz86IHN0cmluZztcbiAgfVxuXG4gIC8vIFJFUVVFU1QgUEFSVFxuICBleHBvcnQgdHlwZSBCb2R5PFxuICAgIEhlYWRlcnMgPSBDb21tb24uVW5rbm93blJlYyxcbiAgICBWYXJzID0gQ29tbW9uLlVua25vd25SZWNcbiAgICA+ID0gQm9keU1qICYge1xuICAgIEZyb21FbWFpbD86IHN0cmluZztcbiAgICBGcm9tTmFtZT86IHN0cmluZztcbiAgICBSZWNpcGllbnRzPzogUmVjaXBpZW50W107XG4gICAgU2VuZGVyPzogYm9vbGVhbjtcbiAgICBTdWJqZWN0Pzogc3RyaW5nO1xuICAgICdUZXh0LXBhcnQnPzogc3RyaW5nO1xuICAgICdIdG1sLXBhcnQnPzogc3RyaW5nO1xuICAgIFRvPzogc3RyaW5nO1xuICAgIENjPzogc3RyaW5nO1xuICAgIEJjYz86IHN0cmluZztcbiAgICBBdHRhY2htZW50cz86IEF0dGFjaG1lbnRbXTtcbiAgICBJbmxpbmVfYXR0YWNobWVudHM/OiBBdHRhY2htZW50W107XG4gICAgSGVhZGVycz86IEhlYWRlcnM7XG4gICAgVmFycz86IFZhcnM7XG4gIH1cblxuICAvLyBSRVNQT05TRSBQQVJUXG4gIGV4cG9ydCBpbnRlcmZhY2UgUmVzcG9uc2VTZW50IHtcbiAgICBFbWFpbDogc3RyaW5nO1xuICAgIE1lc3NhZ2VJRDogbnVtYmVyO1xuICAgIE1lc3NhZ2VVVUlEOiBzdHJpbmc7XG4gIH1cblxuICBleHBvcnQgdHlwZSBSZXNwb25zZSA9IHtcbiAgICBTZW50OiBSZXNwb25zZVNlbnRbXTtcbiAgfVxufVxuXG5leHBvcnQgbmFtZXNwYWNlIFNlbmRFbWFpbFYzXzEge1xuICBleHBvcnQgZW51bSBUcmFja09wZW5zIHtcbiAgICBBY2NvdW50RGVmYXVsdCA9ICdhY2NvdW50X2RlZmF1bHQnLFxuICAgIERpc2FibGVkID0gJ2Rpc2FibGVkJyxcbiAgICBFbmFibGVkID0gJ2VuYWJsZWQnLFxuICB9XG5cbiAgZXhwb3J0IGVudW0gVHJhY2tDbGlja3Mge1xuICAgIEFjY291bnREZWZhdWx0ID0gJ2FjY291bnRfZGVmYXVsdCcsXG4gICAgRGlzYWJsZWQgPSAnZGlzYWJsZWQnLFxuICAgIEVuYWJsZWQgPSAnZW5hYmxlZCcsXG4gIH1cblxuICBleHBvcnQgaW50ZXJmYWNlIEVtYWlsQWRkcmVzc1RvIHtcbiAgICBFbWFpbDogc3RyaW5nO1xuICAgIE5hbWU/OiBzdHJpbmc7XG4gIH1cblxuICBleHBvcnQgaW50ZXJmYWNlIEF0dGFjaG1lbnQge1xuICAgIEZpbGVuYW1lOiBzdHJpbmc7XG4gICAgQ29udGVudFR5cGU6IHN0cmluZztcbiAgICBCYXNlNjRDb250ZW50OiBzdHJpbmc7XG4gIH1cblxuICBleHBvcnQgaW50ZXJmYWNlIElubGluZWRBdHRhY2htZW50IGV4dGVuZHMgQXR0YWNobWVudCB7XG4gICAgQ29udGVudElEPzogc3RyaW5nO1xuICB9XG5cbiAgZXhwb3J0IGludGVyZmFjZSBNZXNzYWdlPEhlYWRlcnMgPSBDb21tb24uVW5rbm93blJlYywgVmFyaWFibGVzID0gQ29tbW9uLlVua25vd25SZWM+IHtcbiAgICBGcm9tOiBFbWFpbEFkZHJlc3NUbztcbiAgICBTZW5kZXI/OiBFbWFpbEFkZHJlc3NUbztcbiAgICBUbzogRW1haWxBZGRyZXNzVG9bXTtcbiAgICBDYz86IEVtYWlsQWRkcmVzc1RvW107XG4gICAgQmNjPzogRW1haWxBZGRyZXNzVG9bXTtcbiAgICBSZXBseVRvPzogRW1haWxBZGRyZXNzVG87XG4gICAgU3ViamVjdD86IHN0cmluZztcbiAgICBUZXh0UGFydD86IHN0cmluZztcbiAgICBIVE1MUGFydD86IHN0cmluZztcbiAgICBUZW1wbGF0ZUlEPzogbnVtYmVyO1xuICAgIFRlbXBsYXRlTGFuZ3VhZ2U/OiBib29sZWFuO1xuICAgIFRlbXBsYXRlRXJyb3JSZXBvcnRpbmc/OiBFbWFpbEFkZHJlc3NUbztcbiAgICBUZW1wbGF0ZUVycm9yRGVsaXZlcj86IGJvb2xlYW47XG4gICAgQXR0YWNobWVudHM/OiBBdHRhY2htZW50W107XG4gICAgSW5saW5lZEF0dGFjaG1lbnRzPzogSW5saW5lZEF0dGFjaG1lbnRbXTtcbiAgICBQcmlvcml0eT86IG51bWJlcjtcbiAgICBDdXN0b21DYW1wYWlnbj86IHN0cmluZztcbiAgICBEZWR1cGxpY2F0ZUNhbXBhaWduPzogYm9vbGVhbjtcbiAgICBUcmFja09wZW5zPzogVHJhY2tPcGVucztcbiAgICBUcmFja0NsaWNrcz86IFRyYWNrQ2xpY2tzO1xuICAgIEN1c3RvbUlEPzogc3RyaW5nO1xuICAgIEV2ZW50UGF5bG9hZD86IHN0cmluZztcbiAgICBVUkxUYWdzPzogc3RyaW5nO1xuICAgIEhlYWRlcnM/OiBIZWFkZXJzO1xuICAgIFZhcmlhYmxlcz86IFZhcmlhYmxlcztcbiAgfVxuXG4gIGV4cG9ydCBlbnVtIFJlc3BvbnNlU3RhdHVzIHtcbiAgICBTdWNjZXNzID0gJ3N1Y2Nlc3MnLFxuICAgIEVycm9yID0gJ2Vycm9yJyxcbiAgfVxuXG4gIGV4cG9ydCBpbnRlcmZhY2UgUmVzcG9uc2VFcnJvciB7XG4gICAgRXJyb3JJZGVudGlmaWVyOiBzdHJpbmc7XG4gICAgRXJyb3JDb2RlOiBzdHJpbmc7XG4gICAgU3RhdHVzQ29kZTogbnVtYmVyO1xuICAgIEVycm9yTWVzc2FnZTogc3RyaW5nO1xuICAgIEVycm9yUmVsYXRlZFRvOiBBcnJheTxzdHJpbmc+O1xuICB9XG5cbiAgZXhwb3J0IGludGVyZmFjZSBSZXNwb25zZUVtYWlsQWRkcmVzc1RvIHtcbiAgICBFbWFpbDogc3RyaW5nO1xuICAgIE1lc3NhZ2VVVUlEOiBzdHJpbmc7XG4gICAgTWVzc2FnZUlEOiBudW1iZXI7XG4gICAgTWVzc2FnZUhyZWY6IHN0cmluZztcbiAgfVxuXG4gIC8vIFJFUVVFU1QgUEFSVFxuICBleHBvcnQgdHlwZSBCb2R5PFxuICAgIEhlYWRlcnMgPSBDb21tb24uVW5rbm93blJlYyxcbiAgICBWYXJpYWJsZXMgPSBDb21tb24uVW5rbm93blJlYyxcbiAgICBHbG9iYWxzID0gQ29tbW9uLlVua25vd25SZWMsXG4gICAgPiA9IHtcbiAgICBNZXNzYWdlczogQXJyYXk8TWVzc2FnZTxIZWFkZXJzLCBWYXJpYWJsZXM+PjtcbiAgICBTYW5kYm94TW9kZT86IGJvb2xlYW47XG4gICAgQWR2YW5jZUVycm9ySGFuZGxpbmc/OiBib29sZWFuO1xuICAgIEdsb2JhbHM/OiBHbG9iYWxzO1xuICB9IHwge1xuICAgIE1lc3NhZ2VzOiBBcnJheTxPbWl0PE1lc3NhZ2U8SGVhZGVycywgVmFyaWFibGVzPiwgJ0Zyb20nPiAmIHsgRnJvbT86IHN0cmluZyB9PjtcbiAgICBTYW5kYm94TW9kZT86IGJvb2xlYW47XG4gICAgQWR2YW5jZUVycm9ySGFuZGxpbmc/OiBib29sZWFuO1xuICAgIEdsb2JhbHM6IHtcbiAgICAgIEZyb206IEVtYWlsQWRkcmVzc1RvO1xuICAgICAgW2tleTogc3RyaW5nXTogdW5rbm93bjtcbiAgICB9O1xuICB9XG5cbiAgLy8gUkVTUE9OU0UgUEFSVFxuICBleHBvcnQgaW50ZXJmYWNlIFJlc3BvbnNlTWVzc2FnZSB7XG4gICAgU3RhdHVzOiBSZXNwb25zZVN0YXR1cztcbiAgICBFcnJvcnM6IFJlc3BvbnNlRXJyb3JbXTtcbiAgICBDdXN0b21JRDogc3RyaW5nO1xuICAgIFRvOiBSZXNwb25zZUVtYWlsQWRkcmVzc1RvW107XG4gICAgQ2M6IFJlc3BvbnNlRW1haWxBZGRyZXNzVG9bXTtcbiAgICBCY2M6IFJlc3BvbnNlRW1haWxBZGRyZXNzVG9bXTtcbiAgfVxuXG4gIGV4cG9ydCB0eXBlIFJlc3BvbnNlID0ge1xuICAgIE1lc3NhZ2VzOiBSZXNwb25zZU1lc3NhZ2VbXTtcbiAgfVxufVxuIiwiaW1wb3J0IHsgQ29tbW9uIH0gZnJvbSAnLi9Db21tb24nO1xuXG5leHBvcnQgbmFtZXNwYWNlIFNlbmRlciB7XG4gIGV4cG9ydCBlbnVtIEVtYWlsVHlwZSB7XG4gICAgVHJhbnNhY3Rpb25hbCA9ICd0cmFuc2FjdGlvbmFsJyxcbiAgICBCdWxrID0gJ2J1bGsnLFxuICAgIFVua25vd24gPSAndW5rbm93bidcbiAgfVxuXG4gIGV4cG9ydCBlbnVtIFNlbmRlclN0YXR1cyB7XG4gICAgSW5hY3RpdmUgPSAnSW5hY3RpdmUnLFxuICAgIEFjdGl2ZSA9ICdBY3RpdmUnLFxuICAgIERlbGV0ZWQgPSAnRGVsZXRlZCcsXG4gIH1cblxuICBleHBvcnQgaW50ZXJmYWNlIFNlbmRlciB7XG4gICAgSUQ6IG51bWJlcjtcbiAgICBFbWFpbFR5cGU6IEVtYWlsVHlwZTtcbiAgICBJc0RlZmF1bHRTZW5kZXI6IGJvb2xlYW47XG4gICAgTmFtZTogc3RyaW5nO1xuICAgIENyZWF0ZWRBdDogc3RyaW5nO1xuICAgIEROU0lEOiBudW1iZXI7XG4gICAgRW1haWw6IHN0cmluZztcbiAgICBGaWxlbmFtZTogc3RyaW5nO1xuICAgIFN0YXR1czogU2VuZGVyU3RhdHVzO1xuICB9XG5cbiAgZXhwb3J0IGludGVyZmFjZSBTZW5kZXJWYWxpZGF0ZSB7XG4gICAgVmFsaWRhdGlvbk1ldGhvZDogc3RyaW5nO1xuICAgIEVycm9yczogc3RyaW5nO1xuICAgIEdsb2JhbEVycm9yOiBzdHJpbmc7XG4gIH1cblxuICAvLyBSRVFVRVNUIFBBUlRcbiAgZXhwb3J0IHR5cGUgUG9zdFNlbmRlckJvZHkgPSB7XG4gICAgRW1haWw6IHN0cmluZztcbiAgICBFbWFpbFR5cGU/OiBFbWFpbFR5cGU7XG4gICAgSXNEZWZhdWx0U2VuZGVyPzogYm9vbGVhbjtcbiAgICBOYW1lPzogc3RyaW5nO1xuICB9XG5cbiAgZXhwb3J0IHR5cGUgUHV0U2VuZGVyQm9keSA9IE9taXQ8UG9zdFNlbmRlckJvZHksICdFbWFpbCc+XG5cbiAgZXhwb3J0IHR5cGUgR2V0U2VuZGVyUXVlcnlQYXJhbXMgPSBQYXJ0aWFsPENvbW1vbi5QYWdpbmF0aW9uPiAmIHtcbiAgICBEbnNJRD86IG51bWJlcjtcbiAgICBEb21haW4/OiBzdHJpbmc7XG4gICAgRW1haWw/OiBzdHJpbmc7XG4gICAgSXNEb21haW5TZW5kZXI/OiBib29sZWFuO1xuICAgIExvY2FsUGFydD86IHN0cmluZztcbiAgICBTaG93RGVsZXRlZD86IGJvb2xlYW47XG4gICAgU3RhdHVzPzogU2VuZGVyU3RhdHVzO1xuICB9XG5cbiAgLy8gUkVTUE9OU0UgUEFSVFxuICB0eXBlIFNlbmRlclJlc3BvbnNlID0gQ29tbW9uLlJlc3BvbnNlPFNlbmRlcltdPjtcblxuICBleHBvcnQgdHlwZSBQb3N0U2VuZGVyUmVzcG9uc2UgPSBTZW5kZXJSZXNwb25zZVxuICBleHBvcnQgdHlwZSBQdXRTZW5kZXJSZXNwb25zZSA9IFNlbmRlclJlc3BvbnNlXG4gIGV4cG9ydCB0eXBlIEdldFNlbmRlclJlc3BvbnNlID0gU2VuZGVyUmVzcG9uc2VcblxuICBleHBvcnQgdHlwZSBQb3N0U2VuZGVyVmFsaWRhdGVSZXNwb25zZSA9IENvbW1vbi5SZXNwb25zZTxTZW5kZXJWYWxpZGF0ZVtdPjtcbn1cblxuZXhwb3J0IG5hbWVzcGFjZSBNZXRhc2VuZGVyIHtcbiAgZXhwb3J0IGludGVyZmFjZSBNZXRhU2VuZGVyIHtcbiAgICBJRDogbnVtYmVyO1xuICAgIERlc2NyaXB0aW9uOiBzdHJpbmc7XG4gICAgQ3JlYXRlZEF0OiBzdHJpbmc7XG4gICAgRW1haWw6IHN0cmluZztcbiAgICBGaWxlbmFtZTogc3RyaW5nO1xuICAgIElzRW5hYmxlZDogYm9vbGVhbjtcbiAgfVxuXG4gIC8vIFJFUVVFU1QgUEFSVFxuICBleHBvcnQgdHlwZSBQb3N0TWV0YVNlbmRlckJvZHkgPSB7XG4gICAgRW1haWw6IHN0cmluZztcbiAgICBEZXNjcmlwdGlvbj86IHN0cmluZztcbiAgfVxuXG4gIGV4cG9ydCB0eXBlIFB1dE1ldGFTZW5kZXJCb2R5ID0gT21pdDxQb3N0TWV0YVNlbmRlckJvZHksICdFbWFpbCc+XG5cbiAgZXhwb3J0IHR5cGUgR2V0TWV0YVNlbmRlclF1ZXJ5UGFyYW1zID0gUGFydGlhbDxDb21tb24uUGFnaW5hdGlvbj4gJiB7XG4gICAgRE5TPzogbnVtYmVyO1xuICB9XG5cbiAgLy8gUkVTUE9OU0UgUEFSVFxuICB0eXBlIE1ldGFTZW5kZXJSZXNwb25zZSA9IENvbW1vbi5SZXNwb25zZTxNZXRhU2VuZGVyW10+O1xuXG4gIGV4cG9ydCB0eXBlIFBvc3RNZXRhU2VuZGVyUmVzcG9uc2UgPSBNZXRhU2VuZGVyUmVzcG9uc2VcbiAgZXhwb3J0IHR5cGUgUHV0TWV0YVNlbmRlclJlc3BvbnNlID0gTWV0YVNlbmRlclJlc3BvbnNlXG4gIGV4cG9ydCB0eXBlIEdldE1ldGFTZW5kZXJSZXNwb25zZSA9IE1ldGFTZW5kZXJSZXNwb25zZVxufVxuXG5leHBvcnQgbmFtZXNwYWNlIEROUyB7XG4gIGV4cG9ydCBlbnVtIERLSU1Db25maWd1cmF0aW9uQ2hlY2tTdGF0dXMge1xuICAgIE9LID0gJ09LJyxcbiAgICBFcnJvciA9ICdFcnJvcicsXG4gICAgTm90Q2hlY2tlZCA9ICdOb3QgY2hlY2tlZCdcbiAgfVxuXG4gIGV4cG9ydCBlbnVtIERLSU1Db25maWd1cmF0aW9uU3RhdHVzIHtcbiAgICBPSyA9ICdPSycsXG4gICAgRXJyb3IgPSAnRXJyb3InXG4gIH1cblxuICBleHBvcnQgZW51bSBTUEZDb25maWd1cmF0aW9uQ2hlY2tTdGF0dXMge1xuICAgIE9LID0gJ09LJyxcbiAgICBFcnJvciA9ICdFcnJvcicsXG4gICAgTm90Q2hlY2tlZCA9ICdOb3QgY2hlY2tlZCcsXG4gICAgTm90Rm91bmQgPSAnTm90IGZvdW5kJyxcbiAgfVxuXG4gIGV4cG9ydCBlbnVtIFNQRkNvbmZpZ3VyYXRpb25TdGF0dXMge1xuICAgIE9LID0gJ09LJyxcbiAgICBFcnJvciA9ICdFcnJvcidcbiAgfVxuXG4gIGV4cG9ydCBpbnRlcmZhY2UgRE5TIHtcbiAgICBJRDogbnVtYmVyO1xuICAgIERLSU1SZWNvcmROYW1lOiBzdHJpbmc7XG4gICAgREtJTVJlY29yZFZhbHVlOiBzdHJpbmc7XG4gICAgREtJTVN0YXR1czogREtJTUNvbmZpZ3VyYXRpb25DaGVja1N0YXR1cztcbiAgICBEb21haW46IHN0cmluZztcbiAgICBJc0NoZWNrSW5Qcm9ncmVzczogYm9vbGVhbjtcbiAgICBMYXN0Q2hlY2tBdDogc3RyaW5nO1xuICAgIE93bmVyU2hpcFRva2VuOiBzdHJpbmc7XG4gICAgT3duZXJTaGlwVG9rZW5SZWNvcmROYW1lOiBzdHJpbmc7XG4gICAgU1BGUmVjb3JkVmFsdWU6IHN0cmluZztcbiAgICBTUEZTdGF0dXM6IFNQRkNvbmZpZ3VyYXRpb25DaGVja1N0YXR1cztcbiAgfVxuXG4gIGV4cG9ydCBpbnRlcmZhY2UgRE5TQ2hlY2sge1xuICAgIERLSU1FcnJvcnM6IHN0cmluZztcbiAgICBES0lNUmVjb3JkQ3VycmVudFZhbHVlOiBzdHJpbmc7XG4gICAgREtJTVN0YXR1czogREtJTUNvbmZpZ3VyYXRpb25TdGF0dXM7XG4gICAgU1BGRXJyb3JzOiBzdHJpbmc7XG4gICAgU1BGUmVjb3JkQ3VycmVudFZhbHVlOiBzdHJpbmc7XG4gICAgU1BGU3RhdHVzOiBTUEZDb25maWd1cmF0aW9uU3RhdHVzO1xuICB9XG5cbiAgLy8gUkVRVUVTVCBQQVJUXG4gIGV4cG9ydCB0eXBlIEdldEROU1F1ZXJ5UGFyYW1zID0gUGFydGlhbDxDb21tb24uUGFnaW5hdGlvbj4gJiB7XG4gICAgSXNDaGVja0luUHJvZ3Jlc3M/OiBib29sZWFuO1xuICAgIElzU2VuZGVySWRlbnRpZmllZD86IGJvb2xlYW47XG4gICAgSXNZYWhvb0ZCTD86IGJvb2xlYW47XG4gICAgTWF4TGFzdENoZWNrQXQ/OiBzdHJpbmc7XG4gICAgTWluTGFzdENoZWNrQXQ/OiBzdHJpbmc7XG4gICAgU1BGU3RhdHVzPzogU1BGQ29uZmlndXJhdGlvbkNoZWNrU3RhdHVzO1xuICB9XG5cbiAgLy8gUkVTUE9OU0UgUEFSVFxuICBleHBvcnQgdHlwZSBHZXRETlNSZXNwb25zZSA9IENvbW1vbi5SZXNwb25zZTxETlNbXT47XG4gIGV4cG9ydCB0eXBlIFBvc3RETlNDaGVja1Jlc3BvbnNlID0gQ29tbW9uLlJlc3BvbnNlPEROU0NoZWNrW10+O1xufVxuIiwiaW1wb3J0IHsgQ29tbW9uIH0gZnJvbSAnLi9Db21tb24nO1xuXG5leHBvcnQgbmFtZXNwYWNlIEFQSUtleUNvbmZpZ3VyYXRpb24ge1xuICBleHBvcnQgZW51bSBSdW5MZXZlbCB7XG4gICAgTm9ybWFsID0gJ05vcm1hbCcsXG4gICAgU29mdExvY2sgPSAnU29mdGxvY2snLFxuICAgIEhhcmRMb2NrID0gJ0hhcmRsb2NrJ1xuICB9XG5cbiAgZXhwb3J0IGludGVyZmFjZSBBcGlLZXkge1xuICAgIElEOiBudW1iZXI7XG4gICAgQUNMOiBzdHJpbmc7XG4gICAgSXNBY3RpdmU6IGJvb2xlYW47XG4gICAgQVBJS2V5OiBzdHJpbmc7XG4gICAgQ3JlYXRlZEF0OiBzdHJpbmc7XG4gICAgSXNNYXN0ZXI6IGJvb2xlYW47XG4gICAgTmFtZTogc3RyaW5nO1xuICAgIFF1YXJhbnRpbmVWYWx1ZTogbnVtYmVyO1xuICAgIFJ1bmxldmVsOiBSdW5MZXZlbDtcbiAgICBTZWNyZXRLZXk6IHN0cmluZztcbiAgICBUcmFja0hvc3Q6IHN0cmluZztcbiAgICBVc2VySUQ6IG51bWJlcjtcbiAgfVxuXG4gIC8vIFJFUVVFU1QgUEFSVFxuICBleHBvcnQgdHlwZSBQb3N0QXBpS2V5Qm9keSA9IHtcbiAgICBOYW1lOiBzdHJpbmc7XG4gICAgQUNMPzogc3RyaW5nO1xuICAgIElzQWN0aXZlPzogYm9vbGVhbjtcbiAgfVxuXG4gIGV4cG9ydCB0eXBlIFB1dEFwaUtleUJvZHkgPSBQYXJ0aWFsPFBvc3RBcGlLZXlCb2R5PlxuXG4gIGV4cG9ydCB0eXBlIEdldEFwaUtleVF1ZXJ5UGFyYW1zID0gUGFydGlhbDxDb21tb24uUGFnaW5hdGlvbj4gJiB7XG4gICAgQVBJS2V5Pzogc3RyaW5nO1xuICAgIElzQWN0aXZlPzogYm9vbGVhbjtcbiAgICBJc01hc3Rlcj86IGJvb2xlYW47XG4gICAgTmFtZT86IHN0cmluZztcbiAgfVxuXG4gIC8vIFJFU1BPTlNFIFBBUlRcbiAgdHlwZSBBcGlLZXlSZXNwb25zZSA9IENvbW1vbi5SZXNwb25zZTxBcGlLZXlbXT47XG5cbiAgZXhwb3J0IHR5cGUgUG9zdEFwaUtleVJlc3BvbnNlID0gQXBpS2V5UmVzcG9uc2VcbiAgZXhwb3J0IHR5cGUgUHV0QXBpS2V5UmVzcG9uc2UgPSBBcGlLZXlSZXNwb25zZVxuICBleHBvcnQgdHlwZSBHZXRBcGlLZXlSZXNwb25zZSA9QXBpS2V5UmVzcG9uc2Vcbn1cblxuZXhwb3J0IG5hbWVzcGFjZSBBY2NvdW50U2V0dGluZyB7XG4gIGV4cG9ydCBpbnRlcmZhY2UgTXlQcm9maWxlIHtcbiAgICBJRDogbnVtYmVyO1xuICAgIEFkZHJlc3NDaXR5OiBzdHJpbmc7XG4gICAgQWRkcmVzc0NvdW50cnk6IHN0cmluZztcbiAgICBBZGRyZXNzUG9zdGFsQ29kZTogc3RyaW5nO1xuICAgIEFkZHJlc3NTdGF0ZTogc3RyaW5nO1xuICAgIEFkZHJlc3NTdHJlZXQ6IHN0cmluZztcbiAgICBCaWxsaW5nRW1haWw6IHN0cmluZztcbiAgICBCaXJ0aGRheUF0OiBzdHJpbmc7XG4gICAgQ29tcGFueU5hbWU6IHN0cmluZztcbiAgICBDb21wYW55TnVtT2ZFbXBsb3llZXM6IHN0cmluZztcbiAgICBDb250YWN0UGhvbmU6IHN0cmluZztcbiAgICBFc3RpbWF0ZWRWb2x1bWU6IG51bWJlcjtcbiAgICBGZWF0dXJlczogc3RyaW5nO1xuICAgIEZpcnN0bmFtZTogc3RyaW5nO1xuICAgIEluZHVzdHJ5OiBudW1iZXI7XG4gICAgSm9iVGl0bGU6IHN0cmluZztcbiAgICBMYXN0bmFtZTogc3RyaW5nO1xuICAgIFZBVE51bWJlcjogc3RyaW5nO1xuICAgIFdlYnNpdGU6IHN0cmluZztcbiAgICBWQVQ6IG51bWJlcjtcbiAgICBVc2VySUQ6IG51bWJlcjtcbiAgfVxuXG4gIGV4cG9ydCBpbnRlcmZhY2UgVXNlciB7XG4gICAgSUQ6IG51bWJlcjtcbiAgICBBQ0w6IHN0cmluZztcbiAgICBFbWFpbDogc3RyaW5nO1xuICAgIExhc3RMb2dpbkF0OiBzdHJpbmc7XG4gICAgTG9jYWxlOiBzdHJpbmc7XG4gICAgVGltZXpvbmU6IHN0cmluZztcbiAgICBDcmVhdGVkQXQ6IHN0cmluZztcbiAgICBGaXJzdElwOiBzdHJpbmc7XG4gICAgTGFzdElwOiBzdHJpbmc7XG4gICAgTWF4QWxsb3dlZEFQSUtleXM6IG51bWJlcjtcbiAgICBVc2VybmFtZTogc3RyaW5nO1xuICAgIFdhcm5lZFJhdGVsaW1pdEF0OiBzdHJpbmc7XG4gIH1cblxuICAvLyBSRVFVRVNUIFBBUlRcbiAgZXhwb3J0IHR5cGUgUHV0TXlQcm9maWxlQm9keSA9IFBhcnRpYWw8T21pdDxNeVByb2ZpbGUsICdJRCcgfCAnVkFUJyB8ICdVc2VySUQnPj5cblxuICBleHBvcnQgdHlwZSBQdXRVc2VyQm9keSA9XG4gICAgUGFydGlhbDxPbWl0PFVzZXIsICdJRCcgfCAnQ3JlYXRlZEF0JyB8ICdGaXJzdElwJyB8ICdNYXhBbGxvd2VkQVBJS2V5cycgfCAnV2FybmVkUmF0ZWxpbWl0QXQnPj5cblxuICAvLyBSRVNQT05TRSBQQVJUXG4gIHR5cGUgTXlQcm9maWxlUmVzcG9uc2UgPSBDb21tb24uUmVzcG9uc2U8TXlQcm9maWxlW10+O1xuICB0eXBlIFVzZXJSZXNwb25zZSA9IENvbW1vbi5SZXNwb25zZTxVc2VyW10+O1xuXG4gIGV4cG9ydCB0eXBlIFB1dE15UHJvZmlsZVJlc3BvbnNlID0gTXlQcm9maWxlUmVzcG9uc2VcbiAgZXhwb3J0IHR5cGUgR2V0TXlQcm9maWxlUmVzcG9uc2UgPSBNeVByb2ZpbGVSZXNwb25zZVxuXG4gIGV4cG9ydCB0eXBlIFB1dFVzZXJSZXNwb25zZSA9IFVzZXJSZXNwb25zZVxuICBleHBvcnQgdHlwZSBHZXRVc2VyUmVzcG9uc2UgPSBVc2VyUmVzcG9uc2Vcbn1cbiIsImltcG9ydCB7IENvbW1vbiB9IGZyb20gJy4vQ29tbW9uJztcbmltcG9ydCB7IE1lc3NhZ2UgfSBmcm9tICcuL01lc3NhZ2UnO1xuXG5leHBvcnQgbmFtZXNwYWNlIFN0YXRpc3RpYyB7XG4gIGV4cG9ydCBlbnVtIENhbXBhaWduT3ZlcnZpZXdJRFR5cGUge1xuICAgIFNlbnRDYW1wYWlnbiA9ICdDYW1wYWlnbicsXG4gICAgQUJUZXN0aW5nID0gJ0FYJyxcbiAgICBEcmFmdCA9ICdOTCdcbiAgfVxuXG4gIGV4cG9ydCBlbnVtIENhbXBhaWduT3ZlcnZpZXdFZGl0TW9kZSB7XG4gICAgVG9vbCA9ICd0b29sJyxcbiAgICBIVE1MID0gJ2h0bWwnLFxuICAgIFRvb2wyID0gJ3Rvb2wyJyxcbiAgICBIVE1MMiA9ICdodG1sMicsXG4gICAgTUpNTCA9ICdtam1sJyxcbiAgfVxuXG4gIGV4cG9ydCBlbnVtIENhbXBhaWduT3ZlcnZpZXdFZGl0VHlwZSB7XG4gICAgRnVsbCA9ICdmdWxsJyxcbiAgICBVbmtub3duID0gJ3Vua25vd24nXG4gIH1cblxuICBleHBvcnQgZW51bSBDb3VudGVyU291cmNlIHtcbiAgICBDYW1wYWlnbiA9ICdDYW1wYWlnbicsXG4gICAgQVBJS2V5ID0gJ0FQSUtleScsXG4gICAgTGlzdCA9ICdMaXN0JyxcbiAgICBTZW5kZXIgPSAnU2VuZGVyJ1xuICB9XG5cbiAgZXhwb3J0IGVudW0gQ291bnRlclJlc29sdXRpb24ge1xuICAgIEhpZ2hlc3QgPSAnSGlnaGVzdCcsXG4gICAgSG91ciA9ICdIb3VyJyxcbiAgICBEYXkgPSAnRGF5JyxcbiAgICBMaWZldGltZSA9ICdMaWZldGltZSdcbiAgfVxuXG4gIGV4cG9ydCBlbnVtIENvdW50ZXJUaW1pbmcge1xuICAgIE1lc3NhZ2UgPSAnTWVzc2FnZScsXG4gICAgRXZlbnQgPSAnRXZlbnQnXG4gIH1cblxuICBleHBvcnQgZW51bSBFbWFpbEV2ZW50IHtcbiAgICBPcGVuID0gJ29wZW4nLFxuICAgIENsaWNrID0gJ2NsaWNrJ1xuICB9XG5cbiAgZXhwb3J0IGludGVyZmFjZSBDYW1wYWlnbk92ZXJ2aWV3IHtcbiAgICBDbGlja2VkQ291bnQ6IG51bWJlcjtcbiAgICBEZWxpdmVyZWRDb3VudDogbnVtYmVyO1xuICAgIEVkaXRNb2RlOiBDYW1wYWlnbk92ZXJ2aWV3RWRpdE1vZGU7XG4gICAgRWRpdFR5cGU6IENhbXBhaWduT3ZlcnZpZXdFZGl0VHlwZTtcbiAgICBJRDogbnVtYmVyO1xuICAgIElEVHlwZTogQ2FtcGFpZ25PdmVydmlld0lEVHlwZTtcbiAgICBPcGVuZWRDb3VudDogbnVtYmVyO1xuICAgIFByb2Nlc3NlZENvdW50OiBudW1iZXI7XG4gICAgU2VuZFRpbWVTdGFydDogbnVtYmVyO1xuICAgIFN0YXJyZWQ6IGJvb2xlYW47XG4gICAgU3ViamVjdDogc3RyaW5nO1xuICAgIFRpdGxlOiBzdHJpbmc7XG4gIH1cblxuICBleHBvcnQgaW50ZXJmYWNlIENvbnRhY3RTdGF0aXN0aWMge1xuICAgIEJsb2NrZWRDb3VudDogbnVtYmVyO1xuICAgIEJvdW5jZWRDb3VudDogbnVtYmVyO1xuICAgIENsaWNrZWRDb3VudDogbnVtYmVyO1xuICAgIENvbnRhY3RJRDogbnVtYmVyO1xuICAgIERlZmVycmVkQ291bnQ6IG51bWJlcjtcbiAgICBEZWxpdmVyZWRDb3VudDogbnVtYmVyO1xuICAgIEhhcmRib3VuY2VkQ291bnQ6IG51bWJlcjtcbiAgICBMYXN0QWN0aXZpdHlBdDogc3RyaW5nO1xuICAgIE1hcmtldGluZ0NvbnRhY3RzOiBudW1iZXI7XG4gICAgT3BlbmVkQ291bnQ6IG51bWJlcjtcbiAgICBQcm9jZXNzZWRDb3VudDogbnVtYmVyO1xuICAgIFF1ZXVlZENvdW50OiBudW1iZXI7XG4gICAgU29mdGJvdW5jZWRDb3VudDogbnVtYmVyO1xuICAgIFNwYW1Db21wbGFpbnRDb3VudDogbnVtYmVyO1xuICAgIFVuc3Vic2NyaWJlZENvdW50OiBudW1iZXI7XG4gICAgVXNlck1hcmtldGluZ0NvbnRhY3RzOiBudW1iZXI7XG4gICAgV29ya0Zsb3dFeGl0ZWRDb3VudDogbnVtYmVyO1xuICB9XG5cbiAgZXhwb3J0IGludGVyZmFjZSBHRU9TdGF0aXN0aWMge1xuICAgIENsaWNrZWRDb3VudDogbnVtYmVyO1xuICAgIE9wZW5lZENvdW50OiBudW1iZXI7XG4gICAgQ291bnRyeTogc3RyaW5nO1xuICB9XG5cbiAgZXhwb3J0IGludGVyZmFjZSBMaXN0UmVjaXBpZW50U3RhdGlzdGljPERhdGEgPSBBcnJheTx1bmtub3duPj4ge1xuICAgIEJsb2NrZWRDb3VudDogbnVtYmVyO1xuICAgIEJvdW5jZWRDb3VudDogbnVtYmVyO1xuICAgIENsaWNrZWRDb3VudDogbnVtYmVyO1xuICAgIERhdGE6IERhdGE7XG4gICAgRGVmZXJyZWRDb3VudDogbnVtYmVyO1xuICAgIERlbGl2ZXJlZENvdW50OiBudW1iZXI7XG4gICAgSGFyZGJvdW5jZWRDb3VudDogbnVtYmVyO1xuICAgIExhc3RBY3Rpdml0eUF0OiBzdHJpbmc7XG4gICAgTGlzdFJlY2lwaWVudElEOiBudW1iZXI7XG4gICAgT3BlbmVkQ291bnQ6IG51bWJlcjtcbiAgICBQcmVRdWV1ZWRDb3VudDogbnVtYmVyO1xuICAgIFByb2Nlc3NlZENvdW50OiBudW1iZXI7XG4gICAgUXVldWVkQ291bnQ6IG51bWJlcjtcbiAgICBTb2Z0Ym91bmNlZENvdW50OiBudW1iZXI7XG4gICAgU3BhbUNvbXBsYWludENvdW50OiBudW1iZXI7XG4gICAgVW5zdWJzY3JpYmVkQ291bnQ6IG51bWJlcjtcbiAgICBXb3JrRmxvd0V4aXRlZENvdW50OiBudW1iZXI7XG4gIH1cblxuICBleHBvcnQgaW50ZXJmYWNlIFN0YXRDb3VudGVyIHtcbiAgICBBUElLZXlJRDogbnVtYmVyO1xuICAgIEV2ZW50Q2xpY2tEZWxheTogbnVtYmVyO1xuICAgIEV2ZW50Q2xpY2tlZENvdW50OiBudW1iZXI7XG4gICAgRXZlbnRPcGVuRGVsYXk6IG51bWJlcjtcbiAgICBFdmVudE9wZW5lZENvdW50OiBudW1iZXI7XG4gICAgRXZlbnRTcGFtQ291bnQ6IG51bWJlcjtcbiAgICBFdmVudFVuc3Vic2NyaWJlZENvdW50OiBudW1iZXI7XG4gICAgRXZlbnRXb3JrZmxvd0V4aXRlZENvdW50OiBudW1iZXI7XG4gICAgTWVzc2FnZUJsb2NrZWRDb3VudDogbnVtYmVyO1xuICAgIE1lc3NhZ2VDbGlja2VkQ291bnQ6IG51bWJlcjtcbiAgICBNZXNzYWdlRGVmZXJyZWRDb3VudDogbnVtYmVyO1xuICAgIE1lc3NhZ2VIYXJkQm91bmNlZENvdW50OiBudW1iZXI7XG4gICAgTWVzc2FnZU9wZW5lZENvdW50OiBudW1iZXI7XG4gICAgTWVzc2FnZVF1ZXVlZENvdW50OiBudW1iZXI7XG4gICAgTWVzc2FnZVNlbnRDb3VudDogbnVtYmVyO1xuICAgIE1lc3NhZ2VTb2Z0Qm91bmNlZENvdW50OiBudW1iZXI7XG4gICAgTWVzc2FnZVNwYW1Db3VudDogbnVtYmVyO1xuICAgIE1lc3NhZ2VVbnN1YnNjcmliZWRDb3VudDogbnVtYmVyO1xuICAgIE1lc3NhZ2VXb3JrRmxvd0V4aXRlZENvdW50OiBudW1iZXI7XG4gICAgU291cmNlSUQ6IG51bWJlcjtcbiAgICBUaW1lc2xpY2U6IHN0cmluZztcbiAgICBUb3RhbDogbnVtYmVyO1xuICB9XG5cbiAgZXhwb3J0IGludGVyZmFjZSBMaW5rQ2xpY2tTdGF0aXN0aWMge1xuICAgIENsaWNrZWRFdmVudHNDb3VudDogbnVtYmVyO1xuICAgIENsaWNrZWRNZXNzYWdlc0NvdW50OiBudW1iZXI7XG4gICAgUG9zaXRpb25JbmRleDogbnVtYmVyO1xuICAgIFVSTDogc3RyaW5nO1xuICB9XG5cbiAgZXhwb3J0IGludGVyZmFjZSBSZWNpcGllbnRFU1BTdGF0aXN0aWMge1xuICAgIEF0dGVtcHRlZE1lc3NhZ2VzQ291bnQ/OiBudW1iZXI7XG4gICAgQ2xpY2tlZE1lc3NhZ2VzQ291bnQ/OiBudW1iZXI7XG4gICAgRGVmZXJyZWRNZXNzYWdlc0NvdW50PzogbnVtYmVyO1xuICAgIERlbGl2ZXJlZE1lc3NhZ2VzQ291bnQ/OiBudW1iZXI7XG4gICAgSGFyZEJvdW5jZWRNZXNzYWdlc0NvdW50PzogbnVtYmVyO1xuICAgIEVTUE5hbWU/OiBzdHJpbmc7XG4gICAgT3BlbmVkTWVzc2FnZXNDb3VudD86IG51bWJlcjtcbiAgICBTb2Z0Qm91bmNlZE1lc3NhZ2VzQ291bnQ/OiBudW1iZXI7XG4gICAgU3BhbVJlcG9ydHNDb3VudD86IG51bWJlcjtcbiAgICBVbnN1YnNjcmliZWRNZXNzYWdlc0NvdW50PzogbnVtYmVyO1xuICAgIE9wZW5SYXRlPzogbnVtYmVyO1xuICAgIENsaWNrVGhyb3VnaFJhdGU/OiBudW1iZXI7XG4gICAgU29mdEJvdW5jZWRSYXRlPzogbnVtYmVyO1xuICAgIEhhcmRCb3VuY2VkUmF0ZT86IG51bWJlcjtcbiAgICBVbnN1YnNjcmliZWRSYXRlPzogbnVtYmVyO1xuICAgIFNwYW1SZXBvcnRzUmF0ZT86IG51bWJlcjtcbiAgICBEZWZlcnJlZFJhdGU/OiBudW1iZXI7XG4gIH1cblxuICBleHBvcnQgaW50ZXJmYWNlIFRvcExpbmtDbGlja2VkIHtcbiAgICBDbGlja2VkQ291bnQ6IG51bWJlcjtcbiAgICBMaW5rSWQ6IG51bWJlcjtcbiAgICBVcmw6IHN0cmluZztcbiAgfVxuXG4gIGV4cG9ydCBpbnRlcmZhY2UgVXNlckFnZW50U3RhdGlzdGljIHtcbiAgICBDb3VudDogbnVtYmVyO1xuICAgIERpc3RpbmN0Q291bnQ6IG51bWJlcjtcbiAgICBQbGF0Zm9ybTogc3RyaW5nO1xuICAgIFVzZXJBZ2VudDogc3RyaW5nO1xuICB9XG5cbiAgLy8gUkVRVUVTVCBQQVJUXG4gIGV4cG9ydCB0eXBlIEdldENhbXBhaWduT3ZlcnZpZXdRdWVyeVBhcmFtcyA9IFBhcnRpYWw8Q29tbW9uLlBhZ2luYXRpb24+ICYge1xuICAgIEFsbD86IGJvb2xlYW47XG4gICAgQXJjaGl2ZWQ/OiBib29sZWFuO1xuICAgIERyYWZ0cz86IGJvb2xlYW47XG4gICAgSUQ/OiBudW1iZXI7XG4gICAgSURUeXBlPzogQ2FtcGFpZ25PdmVydmlld0lEVHlwZTtcbiAgICBQcm9ncmFtbWVkPzogYm9vbGVhbjtcbiAgICBTZW50PzogYm9vbGVhbjtcbiAgICBTdGFycmVkPzogYm9vbGVhbjtcbiAgICBTdWJqZWN0Pzogc3RyaW5nO1xuICB9XG5cbiAgZXhwb3J0IHR5cGUgR2V0Q29udGFjdFN0YXRpc3RpY3NRdWVyeVBhcmFtcyA9IFBhcnRpYWw8Q29tbW9uLlBhZ2luYXRpb24+ICYge1xuICAgIEJsb2NrZWQ/OiBib29sZWFuO1xuICAgIEJvdW5jZWQ/OiBib29sZWFuO1xuICAgIENsaWNrPzogYm9vbGVhbjtcbiAgICBEZWZlcnJlZD86IGJvb2xlYW47XG4gICAgSGFyZGJvdW5jZWQ/OiBib29sZWFuO1xuICAgIExhc3RBY3Rpdml0eUF0Pzogc3RyaW5nO1xuICAgIE1heExhc3RBY3Rpdml0eUF0Pzogc3RyaW5nO1xuICAgIE1pbkxhc3RBY3Rpdml0eUF0Pzogc3RyaW5nO1xuICAgIE9wZW4/OiBib29sZWFuO1xuICAgIFF1ZXVlZD86IGJvb2xlYW47XG4gICAgU2VudD86IGJvb2xlYW47XG4gICAgU3BhbT86IGJvb2xlYW47XG4gICAgU29mdGJvdW5jZWQ/OiBib29sZWFuO1xuICAgIFVuc3Vic2NyaWJlZD86IGJvb2xlYW47XG4gIH1cblxuICBleHBvcnQgdHlwZSBHZXRHRU9TdGF0aXN0aWNzUXVlcnlQYXJhbXMgPSBQYXJ0aWFsPENvbW1vbi5UaW1lc3RhbXBQZXJpb2Q+ICZcbiAgICBQYXJ0aWFsPENvbW1vbi5QYWdpbmF0aW9uPiAmXG4gIHtcbiAgICBDYW1wYWlnbklEPzogbnVtYmVyO1xuICAgIENvbnRhY3RzTGlzdD86IG51bWJlcjtcbiAgICBDdXN0b21DYW1wYWlnbj86IHN0cmluZztcbiAgICBGcm9tPzogc3RyaW5nO1xuICAgIEZyb21Eb21haW4/OiBzdHJpbmc7XG4gICAgRnJvbUlEPzogbnVtYmVyO1xuICAgIEZyb21UeXBlPzogTWVzc2FnZS5Gcm9tVHlwZTtcbiAgICBJc0RlbGV0ZWQ/OiBib29sZWFuO1xuICAgIElzTmV3c2xldHRlclRvb2w/OiBib29sZWFuO1xuICAgIElzU3RhcnJlZD86IGJvb2xlYW47XG4gICAgTWVzc2FnZVN0YXR1cz86IE1lc3NhZ2UuTWVzc2FnZVN0YXR1cztcbiAgICBQZXJpb2Q/OiBDb21tb24uUGVyaW9kO1xuICB9XG5cbiAgZXhwb3J0IHR5cGUgR2V0TGlzdFJlY2lwaWVudFN0YXRpc3RpY3NRdWVyeVBhcmFtcyA9IFBhcnRpYWw8Q29tbW9uLlBhZ2luYXRpb24+ICYge1xuICAgIEJsb2NrZWQ/OiBib29sZWFuO1xuICAgIEJvdW5jZWQ/OiBib29sZWFuO1xuICAgIENsaWNrPzogYm9vbGVhbjtcbiAgICBDb250YWN0PzogbnVtYmVyO1xuICAgIENvbnRhY3RzTGlzdD86IG51bWJlcjtcbiAgICBJc0V4Y2x1ZGVkRnJvbUNhbXBhaWducz86IGJvb2xlYW47XG4gICAgSXNVbnN1YnNjcmliZWQ/OiBib29sZWFuO1xuICAgIExhc3RBY3Rpdml0eUF0Pzogc3RyaW5nO1xuICAgIE1heExhc3RBY3Rpdml0eUF0Pzogc3RyaW5nO1xuICAgIE1pbkxhc3RBY3Rpdml0eUF0Pzogc3RyaW5nO1xuICAgIE1heFVuc3Vic2NyaWJlZEF0Pzogc3RyaW5nO1xuICAgIE1pblVuc3Vic2NyaWJlZEF0Pzogc3RyaW5nO1xuICAgIE9wZW4/OiBib29sZWFuO1xuICAgIFF1ZXVlZD86IGJvb2xlYW47XG4gICAgU2VudD86IGJvb2xlYW47XG4gICAgU2hvd0V4dHJhRGF0YT86IGJvb2xlYW47XG4gICAgU3BhbT86IGJvb2xlYW47XG4gICAgVGltZVpvbmU/OiBzdHJpbmc7XG4gICAgVW5zdWJzY3JpYmVkPzogYm9vbGVhbjtcbiAgfVxuXG4gIGV4cG9ydCB0eXBlIEdldFN0YXRDb3VudGVyc1F1ZXJ5UGFyYW1zID0gUGFydGlhbDxDb21tb24uVGltZXN0YW1wUGVyaW9kPiAmXG4gICAgUGFydGlhbDxDb21tb24uUGFnaW5hdGlvbj4gJlxuICB7XG4gICAgQ291bnRlclNvdXJjZTogQ291bnRlclNvdXJjZTtcbiAgICBDb3VudGVyUmVzb2x1dGlvbjogQ291bnRlclJlc29sdXRpb247XG4gICAgQ291bnRlclRpbWluZzogQ291bnRlclRpbWluZztcbiAgICBTb3VyY2VJRD86IG51bWJlcjtcbiAgfVxuXG4gIGV4cG9ydCB0eXBlIEdldExpbmtDbGlja1N0YXRpc3RpY3NRdWVyeVBhcmFtcyA9IFBhcnRpYWw8Q29tbW9uLlBhZ2luYXRpb24+ICYge1xuICAgIENhbXBhaWduSUQ6IG51bWJlcjtcbiAgfVxuXG4gIGV4cG9ydCB0eXBlIEdldFJlY2lwaWVudEVTUFN0YXRpc3RpY3NRdWVyeVBhcmFtcyA9IEdldExpbmtDbGlja1N0YXRpc3RpY3NRdWVyeVBhcmFtcyAmXG4gIHtcbiAgICBFU1BfTmFtZT86IG51bWJlcjtcbiAgfVxuXG4gIGV4cG9ydCB0eXBlIEdldFRvcExpbmtDbGlja2VkUXVlcnlQYXJhbXMgPSBQYXJ0aWFsPENvbW1vbi5UaW1lc3RhbXBQZXJpb2Q+ICZcbiAgICBQYXJ0aWFsPENvbW1vbi5QYWdpbmF0aW9uPiAmXG4gIHtcbiAgICBBY3R1YWxDbGlja3M/OiBib29sZWFuO1xuICAgIENhbXBhaWduSUQ/OiBudW1iZXI7XG4gICAgQ29udGFjdD86IG51bWJlcjtcbiAgICBDb250YWN0c0xpc3Q/OiBudW1iZXI7XG4gICAgQ3VzdG9tQ2FtcGFpZ24/OiBzdHJpbmc7XG4gICAgRnJvbT86IHN0cmluZztcbiAgICBGcm9tRG9tYWluPzogc3RyaW5nO1xuICAgIEZyb21JRD86IG51bWJlcjtcbiAgICBGcm9tVHlwZT86IE1lc3NhZ2UuRnJvbVR5cGU7XG4gICAgSXNEZWxldGVkPzogYm9vbGVhbjtcbiAgICBJc05ld3NsZXR0ZXJUb29sPzogYm9vbGVhbjtcbiAgICBJc1N0YXJyZWQ/OiBib29sZWFuO1xuICAgIE1lc3NhZ2U/OiBudW1iZXI7XG4gICAgUGVyaW9kPzogQ29tbW9uLlBlcmlvZDtcbiAgfVxuXG4gIGV4cG9ydCB0eXBlIEdldFVzZXJBZ2VudFN0YXRpc3RpY3NRdWVyeVBhcmFtcyA9IFBhcnRpYWw8Q29tbW9uLlRpbWVzdGFtcFBlcmlvZD4gJlxuICAgIFBhcnRpYWw8Q29tbW9uLlBhZ2luYXRpb24+ICZcbiAge1xuICAgIENhbXBhaWduSUQ/OiBudW1iZXI7XG4gICAgQ29udGFjdHNMaXN0PzogbnVtYmVyO1xuICAgIEN1c3RvbUNhbXBhaWduPzogc3RyaW5nO1xuICAgIEV2ZW50PzogRW1haWxFdmVudDtcbiAgICBFeGNsdWRlUGxhdGZvcm0/OiBzdHJpbmc7XG4gICAgRnJvbT86IHN0cmluZztcbiAgICBGcm9tRG9tYWluPzogc3RyaW5nO1xuICAgIEZyb21JRD86IG51bWJlcjtcbiAgICBGcm9tVHlwZT86IE1lc3NhZ2UuRnJvbVR5cGU7XG4gICAgSXNEZWxldGVkPzogYm9vbGVhbjtcbiAgICBJc05ld3NsZXR0ZXJUb29sPzogYm9vbGVhbjtcbiAgICBJc1N0YXJyZWQ/OiBib29sZWFuO1xuICAgIFBlcmlvZD86IENvbW1vbi5QZXJpb2Q7XG4gICAgUGxhdGZvcm0/OiBzdHJpbmc7XG4gIH1cblxuICAvLyBSRVNQT05TRSBQQVJUXG4gIGV4cG9ydCB0eXBlIEdldENhbXBhaWduT3ZlcnZpZXdSZXNwb25zZSA9IENvbW1vbi5SZXNwb25zZTxDYW1wYWlnbk92ZXJ2aWV3W10+O1xuXG4gIGV4cG9ydCB0eXBlIEdldENvbnRhY3RTdGF0aXN0aWNzUmVzcG9uc2UgPSBDb21tb24uUmVzcG9uc2U8Q29udGFjdFN0YXRpc3RpY1tdPjtcblxuICBleHBvcnQgdHlwZSBHZXRHRU9TdGF0aXN0aWNzUmVzcG9uc2UgPSBDb21tb24uUmVzcG9uc2U8R0VPU3RhdGlzdGljW10+O1xuXG4gIGV4cG9ydCB0eXBlIEdldExpc3RSZWNpcGllbnRTdGF0aXN0aWNzUmVzcG9uc2U8RGF0YSA9IEFycmF5PHVua25vd24+PiA9XG4gICAgQ29tbW9uLlJlc3BvbnNlPEFycmF5PExpc3RSZWNpcGllbnRTdGF0aXN0aWM8RGF0YT4+PjtcblxuICBleHBvcnQgdHlwZSBHZXRTdGF0Q291bnRlcnNSZXNwb25zZSA9IENvbW1vbi5SZXNwb25zZTxTdGF0Q291bnRlcltdPjtcblxuICBleHBvcnQgdHlwZSBHZXRMaW5rQ2xpY2tTdGF0aXN0aWNzUmVzcG9uc2UgPSBDb21tb24uUmVzcG9uc2U8TGlua0NsaWNrU3RhdGlzdGljW10+O1xuXG4gIGV4cG9ydCB0eXBlIEdldFJlY2lwaWVudEVTUFN0YXRpc3RpY3NSZXNwb25zZSA9IENvbW1vbi5SZXNwb25zZTxSZWNpcGllbnRFU1BTdGF0aXN0aWNbXT47XG5cbiAgZXhwb3J0IHR5cGUgR2V0VG9wTGlua0NsaWNrZWRSZXNwb25zZSA9IENvbW1vbi5SZXNwb25zZTxUb3BMaW5rQ2xpY2tlZFtdPjtcblxuICBleHBvcnQgdHlwZSBHZXRVc2VyQWdlbnRTdGF0aXN0aWNzUmVzcG9uc2UgPSBDb21tb24uUmVzcG9uc2U8VXNlckFnZW50U3RhdGlzdGljW10+O1xufVxuIiwiaW1wb3J0IHsgQ29tbW9uIH0gZnJvbSAnLi9Db21tb24nO1xuXG5leHBvcnQgbmFtZXNwYWNlIFRlbXBsYXRlIHtcbiAgZXhwb3J0IGVudW0gQ2F0ZWdvcmllcyB7XG4gICAgRnVsbCA9ICdmdWxsJyxcbiAgICBCYXNpYyA9ICdiYXNpYycsXG4gICAgTmV3c0xldHRlciA9ICduZXdzbGV0dGVyJyxcbiAgICBFQ29tbWVyY2UgPSAnZS1jb21tZXJjZScsXG4gICAgRXZlbnRzID0gJ2V2ZW50cycsXG4gICAgVHJhdmVsID0gJ3RyYXZlbCcsXG4gICAgU3BvcnRzID0gJ3Nwb3J0cycsXG4gICAgV2VsY29tZSA9ICd3ZWxjb21lJyxcbiAgICBDb250YWN0UHJvcGVydHlVcGRhdGUgPSAnY29udGFjdC1wcm9wZXJ0eS11cGRhdGUnLFxuICAgIFN1cHBvcnQgPSAnc3VwcG9ydCcsXG4gICAgSW52b2ljZSA9ICdpbnZvaWNlJyxcbiAgICBBbm5pdmVyc2FyeSA9ICdhbm5pdmVyc2FyeScsXG4gICAgQWNjb3VudCA9ICdhY2NvdW50JyxcbiAgICBBY3RpdmF0aW9uID0gJ2FjdGl2YXRpb24nXG4gIH1cblxuICBleHBvcnQgZW51bSBDYXRlZ29yaWVzU2VsZWN0aW9uTWV0aG9kIHtcbiAgICBDb250YWluc0FueSA9ICdjb250YWluc2FueScsXG4gICAgQ29udGFpbnNBbGwgPSAnY29udGFpbnNhbGwnLFxuICAgIElzU3ViU2V0ID0gJ2lzc3Vic2V0J1xuICB9XG5cbiAgZXhwb3J0IGVudW0gRWRpdE1vZGUge1xuICAgIERyYWdBbmREcm9wQnVpbGRlciA9IDEsXG4gICAgSFRNTEJ1aWxkZXIgPSAyLFxuICAgIFNhdmVkU2VjdGlvbkJ1aWxkZXIgPSAzLFxuICAgIE1KTUxCdWlsZGVyID0gNFxuICB9XG5cbiAgZXhwb3J0IGVudW0gT3duZXJUeXBlIHtcbiAgICBBcGlLZXkgPSAnYXBpa2V5JyxcbiAgICBVc2VyID0gJ3VzZXInLFxuICAgIEdsb2JhbCA9ICdnbG9iYWwnXG4gIH1cblxuICBleHBvcnQgZW51bSBQdXJwb3NlcyB7XG4gICAgTWFya2V0aW5nID0gJ21hcmtldGluZycsXG4gICAgVHJhbnNhY3Rpb25hbCA9ICd0cmFuc2FjdGlvbmFsJyxcbiAgICBBdXRvbWF0aW9uID0gJ2F1dG9tYXRpb24nXG4gIH1cblxuICBleHBvcnQgZW51bSBQdXJwb3Nlc1NlbGVjdGlvbk1ldGhvZCB7XG4gICAgQ29udGFpbnNBbnkgPSAnY29udGFpbnNhbnknLFxuICAgIENvbnRhaW5zQWxsID0gJ2NvbnRhaW5zYWxsJyxcbiAgICBJc1N1YlNldCA9ICdpc3N1YnNldCdcbiAgfVxuXG4gIGV4cG9ydCBpbnRlcmZhY2UgSGVhZGVycyB7XG4gICAgRnJvbTogc3RyaW5nO1xuICAgIFN1YmplY3Q6IHN0cmluZztcbiAgICAnUmVwbHktdG8nOiBzdHJpbmc7XG4gIH1cblxuICBleHBvcnQgaW50ZXJmYWNlIFRlbXBsYXRlIHtcbiAgICBBdXRob3I6IHN0cmluZztcbiAgICBDYXRlZ29yaWVzOiBDYXRlZ29yaWVzO1xuICAgIENvcHlyaWdodDogc3RyaW5nO1xuICAgIERlc2NyaXB0aW9uOiBzdHJpbmc7XG4gICAgRWRpdE1vZGU6IEVkaXRNb2RlO1xuICAgIElzU3RhcnJlZDogYm9vbGVhbjtcbiAgICBJc1RleHRQYXJ0R2VuZXJhdGlvbkVuYWJsZWQ6IGJvb2xlYW47XG4gICAgTG9jYWxlOiBzdHJpbmc7XG4gICAgTmFtZTogc3RyaW5nO1xuICAgIE93bmVyVHlwZTogT3duZXJUeXBlO1xuICAgIFByZXNldHM6IHN0cmluZztcbiAgICBQdXJwb3NlczogUHVycG9zZXM7XG4gICAgSUQ6IG51bWJlcjtcbiAgICBPd25lcklkOiBudW1iZXI7XG4gICAgUHJldmlld3M6IHN0cmluZztcbiAgICBDcmVhdGVkQXQ6IHN0cmluZztcbiAgICBMYXN0VXBkYXRlZEF0OiBzdHJpbmc7XG4gIH1cblxuICBleHBvcnQgdHlwZSBUZW1wbGF0ZURldGFpbENvbnRlbnQgPSB7XG4gICAgSGVhZGVyczogSGVhZGVycztcbiAgICAnSHRtbC1wYXJ0Jzogc3RyaW5nO1xuICAgICdUZXh0LXBhcnQnOiBzdHJpbmc7XG4gICAgTUpNTENvbnRlbnQ6IHN0cmluZztcbiAgfVxuXG4gIC8vIFJFUVVFU1QgUEFSVFxuICBleHBvcnQgdHlwZSBQb3N0VGVtcGxhdGVCb2R5ID1cbiAgICBQYXJ0aWFsPE9taXQ8VGVtcGxhdGUsICdOYW1lJyB8ICdJRCcgfCAnT3duZXJJZCcgfCAnUHJldmlld3MnIHwgJ0NyZWF0ZWRBdCcgfCAnTGFzdFVwZGF0ZWRBdCc+PiAmXG4gIHtcbiAgICBOYW1lOiBzdHJpbmc7XG4gIH1cblxuICBleHBvcnQgdHlwZSBQdXRUZW1wbGF0ZUJvZHkgPSBQYXJ0aWFsPFBvc3RUZW1wbGF0ZUJvZHk+XG5cbiAgZXhwb3J0IHR5cGUgR2V0VGVtcGxhdGVRdWVyeVBhcmFtcyA9IFBhcnRpYWw8Q29tbW9uLlBhZ2luYXRpb24+ICYge1xuICAgIENhdGVnb3JpZXM/OiBzdHJpbmc7XG4gICAgQ2F0ZWdvcmllc1NlbGVjdGlvbk1ldGhvZD86IENhdGVnb3JpZXNTZWxlY3Rpb25NZXRob2Q7XG4gICAgRWRpdE1vZGU/OiBFZGl0TW9kZTtcbiAgICBOYW1lPzogc3RyaW5nO1xuICAgIE93bmVyVHlwZT86IE93bmVyVHlwZTtcbiAgICBQdXJwb3Nlcz86IFB1cnBvc2VzO1xuICAgIFB1cnBvc2VzU2VsZWN0aW9uTWV0aG9kPzogUHVycG9zZXNTZWxlY3Rpb25NZXRob2Q7XG4gIH1cblxuICBleHBvcnQgdHlwZSBQb3N0VGVtcGxhdGVEZXRhaWxDb250ZW50Qm9keSA9XG4gICAgUGFydGlhbDxPbWl0PFRlbXBsYXRlRGV0YWlsQ29udGVudCwgJ0hlYWRlcnMnPj4gJlxuICB7XG4gICAgSGVhZGVycz86IFBhcnRpYWw8SGVhZGVycz47XG4gIH1cblxuICBleHBvcnQgdHlwZSBQdXRUZW1wbGF0ZURldGFpbENvbnRlbnRCb2R5ID0gUG9zdFRlbXBsYXRlRGV0YWlsQ29udGVudEJvZHlcblxuICAvLyBSRVNQT05TRSBQQVJUXG4gIHR5cGUgVGVtcGxhdGVSZXNwb25zZSA9IENvbW1vbi5SZXNwb25zZTxUZW1wbGF0ZVtdPjtcbiAgdHlwZSBUZW1wbGF0ZURldGFpbENvbnRlbnRSZXNwb25zZSA9IENvbW1vbi5SZXNwb25zZTxUZW1wbGF0ZURldGFpbENvbnRlbnRbXT47XG5cbiAgZXhwb3J0IHR5cGUgUG9zdFRlbXBsYXRlUmVzcG9uc2UgPSBUZW1wbGF0ZVJlc3BvbnNlXG4gIGV4cG9ydCB0eXBlIFB1dFRlbXBsYXRlUmVzcG9uc2UgPSBUZW1wbGF0ZVJlc3BvbnNlXG4gIGV4cG9ydCB0eXBlIEdldFRlbXBsYXRlUmVzcG9uc2UgPSBUZW1wbGF0ZVJlc3BvbnNlXG5cbiAgZXhwb3J0IHR5cGUgUG9zdFRlbXBsYXRlRGV0YWlsQ29udGVudFJlc3BvbnNlID0gVGVtcGxhdGVEZXRhaWxDb250ZW50UmVzcG9uc2VcbiAgZXhwb3J0IHR5cGUgUHV0VGVtcGxhdGVEZXRhaWxDb250ZW50UmVzcG9uc2UgPSBUZW1wbGF0ZURldGFpbENvbnRlbnRSZXNwb25zZVxuICBleHBvcnQgdHlwZSBHZXRUZW1wbGF0ZURldGFpbENvbnRlbnRSZXNwb25zZSA9IFRlbXBsYXRlRGV0YWlsQ29udGVudFJlc3BvbnNlXG59XG4iLCJpbXBvcnQgeyBDb21tb24gfSBmcm9tICcuL0NvbW1vbic7XG5cbmV4cG9ydCBuYW1lc3BhY2UgV2ViaG9vayB7XG4gIGV4cG9ydCBlbnVtIEV2ZW50VHlwZSB7XG4gICAgT3BlbiA9ICdvcGVuJyxcbiAgICBDbGljayA9ICdjbGljaycsXG4gICAgQm91bmNlID0gJ2JvdW5jZScsXG4gICAgU3BhbSA9ICdzcGFtJyxcbiAgICBCbG9ja2VkID0gJ2Jsb2NrZWQnLFxuICAgIFVuU3ViID0gJ3Vuc3ViJyxcbiAgICBTZW50ID0gJ3NlbnQnLFxuICB9XG5cbiAgZXhwb3J0IGVudW0gRXZlbnRUeXBlVmFsdWUge1xuICAgIENsaWNrID0gMSxcbiAgICBCb3VuY2UgPSAyLFxuICAgIFNwYW0gPSAzLFxuICAgIEJsb2NrZWQgPSA0LFxuICAgIFVuc3Vic2NyaWJlID0gNSxcbiAgICBPcGVuID0gNixcbiAgICBTZW50ID0gNyxcbiAgfVxuXG4gIGV4cG9ydCBlbnVtIFN0YXR1cyB7XG4gICAgRGVhZCA9ICdkZWFkJyxcbiAgICBBbGl2ZSA9ICdhbGl2ZSdcbiAgfVxuXG4gIGV4cG9ydCB0eXBlIFZlcnNpb24gPSAxIHwgMjtcblxuICBleHBvcnQgaW50ZXJmYWNlIEV2ZW50Q2FsbGJhY2tVcmwge1xuICAgIElEOiBudW1iZXI7XG4gICAgRXZlbnRUeXBlOiBFdmVudFR5cGU7XG4gICAgSXNCYWNrdXA6IGJvb2xlYW47XG4gICAgU3RhdHVzOiBTdGF0dXM7XG4gICAgQVBJS2V5SUQ6IG51bWJlcjtcbiAgICBWZXJzaW9uOiBWZXJzaW9uO1xuICAgIFVybDogc3RyaW5nO1xuICB9XG5cbiAgLy8gUkVRVUVTVCBQQVJUXG4gIGV4cG9ydCB0eXBlIFBvc3RFdmVudENhbGxiYWNrVXJsQm9keSA9IHtcbiAgICBVcmw6IHN0cmluZztcbiAgICBFdmVudFR5cGU/OiBFdmVudFR5cGU7XG4gICAgSXNCYWNrdXA/OiBib29sZWFuO1xuICAgIFN0YXR1cz86IFN0YXR1cztcbiAgfVxuXG4gIGV4cG9ydCB0eXBlIFB1dEV2ZW50Q2FsbGJhY2tVcmxCb2R5ID0gUGFydGlhbDxQb3N0RXZlbnRDYWxsYmFja1VybEJvZHk+XG5cbiAgZXhwb3J0IHR5cGUgR2V0RXZlbnRDYWxsYmFja1VybFF1ZXJ5UGFyYW1zID0gUGFydGlhbDxDb21tb24uUGFnaW5hdGlvbj4gJiB7XG4gICAgQmFja3VwPzogYm9vbGVhbjtcbiAgICBFdmVudFR5cGU/OiBFdmVudFR5cGVWYWx1ZTtcbiAgICBTdGF0dXM/OiBzdHJpbmc7XG4gICAgVmVyc2lvbj86IFZlcnNpb247XG4gIH1cblxuICAvLyBSRVNQT05TRSBQQVJUXG4gIHR5cGUgRXZlbnRDYWxsYmFja1VybFJlc3BvbnNlID0ge1xuICAgIENvdW50OiBudW1iZXI7XG4gICAgVG90YWw6IG51bWJlcjtcbiAgICBEYXRhOiBFdmVudENhbGxiYWNrVXJsW107XG4gIH07XG5cbiAgZXhwb3J0IHR5cGUgUG9zdEV2ZW50Q2FsbGJhY2tVcmxSZXNwb25zZSA9IEV2ZW50Q2FsbGJhY2tVcmxSZXNwb25zZVxuICBleHBvcnQgdHlwZSBQdXRFdmVudENhbGxiYWNrVXJsUmVzcG9uc2UgPSBFdmVudENhbGxiYWNrVXJsUmVzcG9uc2VcbiAgZXhwb3J0IHR5cGUgR2V0RXZlbnRDYWxsYmFja1VybFJlc3BvbnNlID0gRXZlbnRDYWxsYmFja1VybFJlc3BvbnNlXG59XG4iLCIvLyBDT01NT05cbmV4cG9ydCB7IExpYnJhcnlSZXNwb25zZSwgTGlicmFyeUxvY2FsUmVzcG9uc2UgfSBmcm9tICcuL0xpYnJhcnlSZXNwb25zZSc7XG5leHBvcnQgeyBDb21tb24gfSBmcm9tICcuL0NvbW1vbic7XG5cbi8vIFNFTkRcbmV4cG9ydCB7XG4gIFNlbmRFbWFpbFYzLFxuICBTZW5kRW1haWxWM18xLFxufSBmcm9tICcuL1NlbmRFbWFpbCc7XG5cbi8vIEFQSVxuZXhwb3J0IHsgTWVzc2FnZSB9IGZyb20gJy4vTWVzc2FnZSc7XG5leHBvcnQge1xuICBDb250YWN0LFxuICBDb250YWN0TGlzdCxcbiAgQnVsa0NvbnRhY3RNYW5hZ2VtZW50LFxuICBDb250YWN0UHJvcGVydGllcyxcbiAgQ29udGFjdFN1YnNjcmlwdGlvbixcbiAgQ29udGFjdFZlcmlmaWNhdGlvbixcbn0gZnJvbSAnLi9Db250YWN0JztcbmV4cG9ydCB7XG4gIERyYWZ0Q2FtcGFpZ24sXG4gIFNlbnRDYW1wYWlnbixcbn0gZnJvbSAnLi9DYW1wYWlnbic7XG5leHBvcnQgeyBTZWdtZW50YXRpb24gfSBmcm9tICcuL1NlZ21lbnRhdGlvbic7XG5leHBvcnQgeyBUZW1wbGF0ZSB9IGZyb20gJy4vVGVtcGxhdGUnO1xuZXhwb3J0IHsgU3RhdGlzdGljIH0gZnJvbSAnLi9TdGF0aXN0aWMnO1xuZXhwb3J0IHsgTWVzc2FnZUV2ZW50IH0gZnJvbSAnLi9NZXNzYWdlRXZlbnQnO1xuZXhwb3J0IHsgV2ViaG9vayB9IGZyb20gJy4vV2ViaG9vayc7XG5leHBvcnQgeyBQYXJzZSB9IGZyb20gJy4vUGFyc2UnO1xuZXhwb3J0IHtcbiAgU2VuZGVyLFxuICBNZXRhc2VuZGVyLFxuICBETlMsXG59IGZyb20gJy4vU2VuZGVyQWRkcmVzc0FuZERvbWFpbic7XG5leHBvcnQge1xuICBBUElLZXlDb25maWd1cmF0aW9uLFxuICBBY2NvdW50U2V0dGluZyxcbn0gZnJvbSAnLi9TZXR0aW5nJztcblxuLy8gU01TXG5leHBvcnQgeyBTZW5kTWVzc2FnZSB9IGZyb20gJy4vU2VuZE1lc3NhZ2UnO1xuZXhwb3J0IHsgU01TTWVzc2FnZSB9IGZyb20gJy4vU01TTWVzc2FnZSc7XG4iLCJpbXBvcnQgaXNOaWwgZnJvbSAnLi9pc05pbCc7XG5pbXBvcnQgaXNOdWxsIGZyb20gJy4vaXNOdWxsJztcbmltcG9ydCBpc1VuZGVmaW5lZCBmcm9tICcuL2lzVW5kZWZpbmVkJztcbmltcG9ydCBpc1B1cmVPYmplY3QgZnJvbSAnLi9pc1B1cmVPYmplY3QnO1xuaW1wb3J0IHNldFZhbHVlSWZOb3ROaWwgZnJvbSAnLi9zZXRWYWx1ZUlmTm90TmlsJztcblxuZXhwb3J0IHtcbiAgaXNOaWwsXG4gIGlzTnVsbCxcbiAgaXNVbmRlZmluZWQsXG4gIGlzUHVyZU9iamVjdCxcbiAgc2V0VmFsdWVJZk5vdE5pbCxcbn07XG4iLCIvKmV4dGVybmFsIG1vZHVsZXMqL1xuLyp0eXBlcyovXG4vKnV0aWxzKi9cbmltcG9ydCBpc051bGwgZnJvbSAnLi9pc051bGwnO1xuaW1wb3J0IGlzVW5kZWZpbmVkIGZyb20gJy4vaXNVbmRlZmluZWQnO1xuLypsaWIqL1xuLypvdGhlciovXG5cbmZ1bmN0aW9uIGlzTmlsKHZhbHVlOiB1bmtub3duKTogYm9vbGVhbiB7XG4gIHJldHVybiBpc1VuZGVmaW5lZCh2YWx1ZSkgfHwgaXNOdWxsKHZhbHVlKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgaXNOaWw7XG4iLCIvKmV4dGVybmFsIG1vZHVsZXMqL1xuLyp0eXBlcyovXG4vKnV0aWxzKi9cbi8qbGliKi9cbi8qb3RoZXIqL1xuXG5mdW5jdGlvbiBpc051bGwodmFsdWU6IHVua25vd24pOiB2YWx1ZSBpcyBudWxsIHtcbiAgcmV0dXJuIHZhbHVlID09PSBudWxsO1xufVxuXG5leHBvcnQgZGVmYXVsdCBpc051bGw7XG4iLCIvKmV4dGVybmFsIG1vZHVsZXMqL1xuLyp0eXBlcyovXG4vKnV0aWxzKi9cbi8qbGliKi9cbi8qb3RoZXIqL1xuXG5mdW5jdGlvbiBpc1B1cmVPYmplY3QodmFsdWU6IHVua25vd24pOiBib29sZWFuIHtcbiAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCdcbiAgICAmJiB2YWx1ZSAhPT0gbnVsbFxuICAgICYmIChPYmplY3QuZ2V0UHJvdG90eXBlT2YodmFsdWUpID09PSBPYmplY3QucHJvdG90eXBlIHx8IE9iamVjdC5nZXRQcm90b3R5cGVPZih2YWx1ZSkgPT09IG51bGwpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBpc1B1cmVPYmplY3Q7XG4iLCIvKmV4dGVybmFsIG1vZHVsZXMqL1xuLyp0eXBlcyovXG4vKnV0aWxzKi9cbi8qbGliKi9cbi8qb3RoZXIqL1xuXG5mdW5jdGlvbiBpc1VuZGVmaW5lZCh2YWx1ZTogdW5rbm93bik6IHZhbHVlIGlzIHVuZGVmaW5lZCB7XG4gIHJldHVybiB2YWx1ZSA9PT0gdW5kZWZpbmVkO1xufVxuXG5leHBvcnQgZGVmYXVsdCBpc1VuZGVmaW5lZDtcbiIsIi8qZXh0ZXJuYWwgbW9kdWxlcyovXG4vKnR5cGVzKi9cbmltcG9ydCB7IFRPYmplY3QgfSBmcm9tICcuLi90eXBlcyc7XG4vKnV0aWxzKi9cbmltcG9ydCBpc05pbCBmcm9tICcuL2lzTmlsJztcbmltcG9ydCBpc051bGwgZnJvbSAnLi9pc051bGwnO1xuLypsaWIqL1xuLypvdGhlciovXG5cbmZ1bmN0aW9uIHNldFZhbHVlSWZOb3ROaWwoXG4gIHRhcmdldE9iamVjdDogVE9iamVjdC5Vbmtub3duUmVjLFxuICBwYXRoOiBzdHJpbmcsXG4gIHZhbHVlOiB1bmtub3duLFxuKTogdm9pZCB7XG4gIGlmICh0eXBlb2YgdGFyZ2V0T2JqZWN0ICE9PSAnb2JqZWN0JyB8fCBpc051bGwodGFyZ2V0T2JqZWN0KSkge1xuICAgIHRocm93IEVycm9yKCdBcmd1bWVudCBcInRhcmdldE9iamVjdFwiIGlzIG5vdCBvYmplY3QnKTtcbiAgfVxuXG4gIGlmICghcGF0aCkge1xuICAgIHRocm93IEVycm9yKCdBcmd1bWVudCBcInBhdGhcIiBpcyByZXF1aXJlZCcpO1xuICB9XG5cbiAgaWYgKCFpc05pbCh2YWx1ZSkpIHtcbiAgICB0YXJnZXRPYmplY3RbcGF0aF0gPSB2YWx1ZTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBzZXRWYWx1ZUlmTm90TmlsO1xuIiwiOyhmdW5jdGlvbiAoZ2xvYmFsT2JqZWN0KSB7XHJcbiAgJ3VzZSBzdHJpY3QnO1xyXG5cclxuLypcclxuICogICAgICBiaWdudW1iZXIuanMgdjkuMC4xXHJcbiAqICAgICAgQSBKYXZhU2NyaXB0IGxpYnJhcnkgZm9yIGFyYml0cmFyeS1wcmVjaXNpb24gYXJpdGhtZXRpYy5cclxuICogICAgICBodHRwczovL2dpdGh1Yi5jb20vTWlrZU1jbC9iaWdudW1iZXIuanNcclxuICogICAgICBDb3B5cmlnaHQgKGMpIDIwMjAgTWljaGFlbCBNY2xhdWdobGluIDxNOGNoODhsQGdtYWlsLmNvbT5cclxuICogICAgICBNSVQgTGljZW5zZWQuXHJcbiAqXHJcbiAqICAgICAgQmlnTnVtYmVyLnByb3RvdHlwZSBtZXRob2RzICAgICB8ICBCaWdOdW1iZXIgbWV0aG9kc1xyXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxyXG4gKiAgICAgIGFic29sdXRlVmFsdWUgICAgICAgICAgICBhYnMgICAgfCAgY2xvbmVcclxuICogICAgICBjb21wYXJlZFRvICAgICAgICAgICAgICAgICAgICAgIHwgIGNvbmZpZyAgICAgICAgICAgICAgIHNldFxyXG4gKiAgICAgIGRlY2ltYWxQbGFjZXMgICAgICAgICAgICBkcCAgICAgfCAgICAgIERFQ0lNQUxfUExBQ0VTXHJcbiAqICAgICAgZGl2aWRlZEJ5ICAgICAgICAgICAgICAgIGRpdiAgICB8ICAgICAgUk9VTkRJTkdfTU9ERVxyXG4gKiAgICAgIGRpdmlkZWRUb0ludGVnZXJCeSAgICAgICBpZGl2ICAgfCAgICAgIEVYUE9ORU5USUFMX0FUXHJcbiAqICAgICAgZXhwb25lbnRpYXRlZEJ5ICAgICAgICAgIHBvdyAgICB8ICAgICAgUkFOR0VcclxuICogICAgICBpbnRlZ2VyVmFsdWUgICAgICAgICAgICAgICAgICAgIHwgICAgICBDUllQVE9cclxuICogICAgICBpc0VxdWFsVG8gICAgICAgICAgICAgICAgZXEgICAgIHwgICAgICBNT0RVTE9fTU9ERVxyXG4gKiAgICAgIGlzRmluaXRlICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgIFBPV19QUkVDSVNJT05cclxuICogICAgICBpc0dyZWF0ZXJUaGFuICAgICAgICAgICAgZ3QgICAgIHwgICAgICBGT1JNQVRcclxuICogICAgICBpc0dyZWF0ZXJUaGFuT3JFcXVhbFRvICAgZ3RlICAgIHwgICAgICBBTFBIQUJFVFxyXG4gKiAgICAgIGlzSW50ZWdlciAgICAgICAgICAgICAgICAgICAgICAgfCAgaXNCaWdOdW1iZXJcclxuICogICAgICBpc0xlc3NUaGFuICAgICAgICAgICAgICAgbHQgICAgIHwgIG1heGltdW0gICAgICAgICAgICAgIG1heFxyXG4gKiAgICAgIGlzTGVzc1RoYW5PckVxdWFsVG8gICAgICBsdGUgICAgfCAgbWluaW11bSAgICAgICAgICAgICAgbWluXHJcbiAqICAgICAgaXNOYU4gICAgICAgICAgICAgICAgICAgICAgICAgICB8ICByYW5kb21cclxuICogICAgICBpc05lZ2F0aXZlICAgICAgICAgICAgICAgICAgICAgIHwgIHN1bVxyXG4gKiAgICAgIGlzUG9zaXRpdmUgICAgICAgICAgICAgICAgICAgICAgfFxyXG4gKiAgICAgIGlzWmVybyAgICAgICAgICAgICAgICAgICAgICAgICAgfFxyXG4gKiAgICAgIG1pbnVzICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxyXG4gKiAgICAgIG1vZHVsbyAgICAgICAgICAgICAgICAgICBtb2QgICAgfFxyXG4gKiAgICAgIG11bHRpcGxpZWRCeSAgICAgICAgICAgICB0aW1lcyAgfFxyXG4gKiAgICAgIG5lZ2F0ZWQgICAgICAgICAgICAgICAgICAgICAgICAgfFxyXG4gKiAgICAgIHBsdXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxyXG4gKiAgICAgIHByZWNpc2lvbiAgICAgICAgICAgICAgICBzZCAgICAgfFxyXG4gKiAgICAgIHNoaWZ0ZWRCeSAgICAgICAgICAgICAgICAgICAgICAgfFxyXG4gKiAgICAgIHNxdWFyZVJvb3QgICAgICAgICAgICAgICBzcXJ0ICAgfFxyXG4gKiAgICAgIHRvRXhwb25lbnRpYWwgICAgICAgICAgICAgICAgICAgfFxyXG4gKiAgICAgIHRvRml4ZWQgICAgICAgICAgICAgICAgICAgICAgICAgfFxyXG4gKiAgICAgIHRvRm9ybWF0ICAgICAgICAgICAgICAgICAgICAgICAgfFxyXG4gKiAgICAgIHRvRnJhY3Rpb24gICAgICAgICAgICAgICAgICAgICAgfFxyXG4gKiAgICAgIHRvSlNPTiAgICAgICAgICAgICAgICAgICAgICAgICAgfFxyXG4gKiAgICAgIHRvTnVtYmVyICAgICAgICAgICAgICAgICAgICAgICAgfFxyXG4gKiAgICAgIHRvUHJlY2lzaW9uICAgICAgICAgICAgICAgICAgICAgfFxyXG4gKiAgICAgIHRvU3RyaW5nICAgICAgICAgICAgICAgICAgICAgICAgfFxyXG4gKiAgICAgIHZhbHVlT2YgICAgICAgICAgICAgICAgICAgICAgICAgfFxyXG4gKlxyXG4gKi9cclxuXHJcblxyXG4gIHZhciBCaWdOdW1iZXIsXHJcbiAgICBpc051bWVyaWMgPSAvXi0/KD86XFxkKyg/OlxcLlxcZCopP3xcXC5cXGQrKSg/OmVbKy1dP1xcZCspPyQvaSxcclxuICAgIG1hdGhjZWlsID0gTWF0aC5jZWlsLFxyXG4gICAgbWF0aGZsb29yID0gTWF0aC5mbG9vcixcclxuXHJcbiAgICBiaWdudW1iZXJFcnJvciA9ICdbQmlnTnVtYmVyIEVycm9yXSAnLFxyXG4gICAgdG9vTWFueURpZ2l0cyA9IGJpZ251bWJlckVycm9yICsgJ051bWJlciBwcmltaXRpdmUgaGFzIG1vcmUgdGhhbiAxNSBzaWduaWZpY2FudCBkaWdpdHM6ICcsXHJcblxyXG4gICAgQkFTRSA9IDFlMTQsXHJcbiAgICBMT0dfQkFTRSA9IDE0LFxyXG4gICAgTUFYX1NBRkVfSU5URUdFUiA9IDB4MWZmZmZmZmZmZmZmZmYsICAgICAgICAgLy8gMl41MyAtIDFcclxuICAgIC8vIE1BWF9JTlQzMiA9IDB4N2ZmZmZmZmYsICAgICAgICAgICAgICAgICAgIC8vIDJeMzEgLSAxXHJcbiAgICBQT1dTX1RFTiA9IFsxLCAxMCwgMTAwLCAxZTMsIDFlNCwgMWU1LCAxZTYsIDFlNywgMWU4LCAxZTksIDFlMTAsIDFlMTEsIDFlMTIsIDFlMTNdLFxyXG4gICAgU1FSVF9CQVNFID0gMWU3LFxyXG5cclxuICAgIC8vIEVESVRBQkxFXHJcbiAgICAvLyBUaGUgbGltaXQgb24gdGhlIHZhbHVlIG9mIERFQ0lNQUxfUExBQ0VTLCBUT19FWFBfTkVHLCBUT19FWFBfUE9TLCBNSU5fRVhQLCBNQVhfRVhQLCBhbmRcclxuICAgIC8vIHRoZSBhcmd1bWVudHMgdG8gdG9FeHBvbmVudGlhbCwgdG9GaXhlZCwgdG9Gb3JtYXQsIGFuZCB0b1ByZWNpc2lvbi5cclxuICAgIE1BWCA9IDFFOTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIDAgdG8gTUFYX0lOVDMyXHJcblxyXG5cclxuICAvKlxyXG4gICAqIENyZWF0ZSBhbmQgcmV0dXJuIGEgQmlnTnVtYmVyIGNvbnN0cnVjdG9yLlxyXG4gICAqL1xyXG4gIGZ1bmN0aW9uIGNsb25lKGNvbmZpZ09iamVjdCkge1xyXG4gICAgdmFyIGRpdiwgY29udmVydEJhc2UsIHBhcnNlTnVtZXJpYyxcclxuICAgICAgUCA9IEJpZ051bWJlci5wcm90b3R5cGUgPSB7IGNvbnN0cnVjdG9yOiBCaWdOdW1iZXIsIHRvU3RyaW5nOiBudWxsLCB2YWx1ZU9mOiBudWxsIH0sXHJcbiAgICAgIE9ORSA9IG5ldyBCaWdOdW1iZXIoMSksXHJcblxyXG5cclxuICAgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBFRElUQUJMRSBDT05GSUcgREVGQVVMVFMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuXHJcbiAgICAgIC8vIFRoZSBkZWZhdWx0IHZhbHVlcyBiZWxvdyBtdXN0IGJlIGludGVnZXJzIHdpdGhpbiB0aGUgaW5jbHVzaXZlIHJhbmdlcyBzdGF0ZWQuXHJcbiAgICAgIC8vIFRoZSB2YWx1ZXMgY2FuIGFsc28gYmUgY2hhbmdlZCBhdCBydW4tdGltZSB1c2luZyBCaWdOdW1iZXIuc2V0LlxyXG5cclxuICAgICAgLy8gVGhlIG1heGltdW0gbnVtYmVyIG9mIGRlY2ltYWwgcGxhY2VzIGZvciBvcGVyYXRpb25zIGludm9sdmluZyBkaXZpc2lvbi5cclxuICAgICAgREVDSU1BTF9QTEFDRVMgPSAyMCwgICAgICAgICAgICAgICAgICAgICAvLyAwIHRvIE1BWFxyXG5cclxuICAgICAgLy8gVGhlIHJvdW5kaW5nIG1vZGUgdXNlZCB3aGVuIHJvdW5kaW5nIHRvIHRoZSBhYm92ZSBkZWNpbWFsIHBsYWNlcywgYW5kIHdoZW4gdXNpbmdcclxuICAgICAgLy8gdG9FeHBvbmVudGlhbCwgdG9GaXhlZCwgdG9Gb3JtYXQgYW5kIHRvUHJlY2lzaW9uLCBhbmQgcm91bmQgKGRlZmF1bHQgdmFsdWUpLlxyXG4gICAgICAvLyBVUCAgICAgICAgIDAgQXdheSBmcm9tIHplcm8uXHJcbiAgICAgIC8vIERPV04gICAgICAgMSBUb3dhcmRzIHplcm8uXHJcbiAgICAgIC8vIENFSUwgICAgICAgMiBUb3dhcmRzICtJbmZpbml0eS5cclxuICAgICAgLy8gRkxPT1IgICAgICAzIFRvd2FyZHMgLUluZmluaXR5LlxyXG4gICAgICAvLyBIQUxGX1VQICAgIDQgVG93YXJkcyBuZWFyZXN0IG5laWdoYm91ci4gSWYgZXF1aWRpc3RhbnQsIHVwLlxyXG4gICAgICAvLyBIQUxGX0RPV04gIDUgVG93YXJkcyBuZWFyZXN0IG5laWdoYm91ci4gSWYgZXF1aWRpc3RhbnQsIGRvd24uXHJcbiAgICAgIC8vIEhBTEZfRVZFTiAgNiBUb3dhcmRzIG5lYXJlc3QgbmVpZ2hib3VyLiBJZiBlcXVpZGlzdGFudCwgdG93YXJkcyBldmVuIG5laWdoYm91ci5cclxuICAgICAgLy8gSEFMRl9DRUlMICA3IFRvd2FyZHMgbmVhcmVzdCBuZWlnaGJvdXIuIElmIGVxdWlkaXN0YW50LCB0b3dhcmRzICtJbmZpbml0eS5cclxuICAgICAgLy8gSEFMRl9GTE9PUiA4IFRvd2FyZHMgbmVhcmVzdCBuZWlnaGJvdXIuIElmIGVxdWlkaXN0YW50LCB0b3dhcmRzIC1JbmZpbml0eS5cclxuICAgICAgUk9VTkRJTkdfTU9ERSA9IDQsICAgICAgICAgICAgICAgICAgICAgICAvLyAwIHRvIDhcclxuXHJcbiAgICAgIC8vIEVYUE9ORU5USUFMX0FUIDogW1RPX0VYUF9ORUcgLCBUT19FWFBfUE9TXVxyXG5cclxuICAgICAgLy8gVGhlIGV4cG9uZW50IHZhbHVlIGF0IGFuZCBiZW5lYXRoIHdoaWNoIHRvU3RyaW5nIHJldHVybnMgZXhwb25lbnRpYWwgbm90YXRpb24uXHJcbiAgICAgIC8vIE51bWJlciB0eXBlOiAtN1xyXG4gICAgICBUT19FWFBfTkVHID0gLTcsICAgICAgICAgICAgICAgICAgICAgICAgIC8vIDAgdG8gLU1BWFxyXG5cclxuICAgICAgLy8gVGhlIGV4cG9uZW50IHZhbHVlIGF0IGFuZCBhYm92ZSB3aGljaCB0b1N0cmluZyByZXR1cm5zIGV4cG9uZW50aWFsIG5vdGF0aW9uLlxyXG4gICAgICAvLyBOdW1iZXIgdHlwZTogMjFcclxuICAgICAgVE9fRVhQX1BPUyA9IDIxLCAgICAgICAgICAgICAgICAgICAgICAgICAvLyAwIHRvIE1BWFxyXG5cclxuICAgICAgLy8gUkFOR0UgOiBbTUlOX0VYUCwgTUFYX0VYUF1cclxuXHJcbiAgICAgIC8vIFRoZSBtaW5pbXVtIGV4cG9uZW50IHZhbHVlLCBiZW5lYXRoIHdoaWNoIHVuZGVyZmxvdyB0byB6ZXJvIG9jY3Vycy5cclxuICAgICAgLy8gTnVtYmVyIHR5cGU6IC0zMjQgICg1ZS0zMjQpXHJcbiAgICAgIE1JTl9FWFAgPSAtMWU3LCAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gLTEgdG8gLU1BWFxyXG5cclxuICAgICAgLy8gVGhlIG1heGltdW0gZXhwb25lbnQgdmFsdWUsIGFib3ZlIHdoaWNoIG92ZXJmbG93IHRvIEluZmluaXR5IG9jY3Vycy5cclxuICAgICAgLy8gTnVtYmVyIHR5cGU6ICAzMDggICgxLjc5NzY5MzEzNDg2MjMxNTdlKzMwOClcclxuICAgICAgLy8gRm9yIE1BWF9FWFAgPiAxZTcsIGUuZy4gbmV3IEJpZ051bWJlcignMWUxMDAwMDAwMDAnKS5wbHVzKDEpIG1heSBiZSBzbG93LlxyXG4gICAgICBNQVhfRVhQID0gMWU3LCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIDEgdG8gTUFYXHJcblxyXG4gICAgICAvLyBXaGV0aGVyIHRvIHVzZSBjcnlwdG9ncmFwaGljYWxseS1zZWN1cmUgcmFuZG9tIG51bWJlciBnZW5lcmF0aW9uLCBpZiBhdmFpbGFibGUuXHJcbiAgICAgIENSWVBUTyA9IGZhbHNlLCAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdHJ1ZSBvciBmYWxzZVxyXG5cclxuICAgICAgLy8gVGhlIG1vZHVsbyBtb2RlIHVzZWQgd2hlbiBjYWxjdWxhdGluZyB0aGUgbW9kdWx1czogYSBtb2Qgbi5cclxuICAgICAgLy8gVGhlIHF1b3RpZW50IChxID0gYSAvIG4pIGlzIGNhbGN1bGF0ZWQgYWNjb3JkaW5nIHRvIHRoZSBjb3JyZXNwb25kaW5nIHJvdW5kaW5nIG1vZGUuXHJcbiAgICAgIC8vIFRoZSByZW1haW5kZXIgKHIpIGlzIGNhbGN1bGF0ZWQgYXM6IHIgPSBhIC0gbiAqIHEuXHJcbiAgICAgIC8vXHJcbiAgICAgIC8vIFVQICAgICAgICAwIFRoZSByZW1haW5kZXIgaXMgcG9zaXRpdmUgaWYgdGhlIGRpdmlkZW5kIGlzIG5lZ2F0aXZlLCBlbHNlIGlzIG5lZ2F0aXZlLlxyXG4gICAgICAvLyBET1dOICAgICAgMSBUaGUgcmVtYWluZGVyIGhhcyB0aGUgc2FtZSBzaWduIGFzIHRoZSBkaXZpZGVuZC5cclxuICAgICAgLy8gICAgICAgICAgICAgVGhpcyBtb2R1bG8gbW9kZSBpcyBjb21tb25seSBrbm93biBhcyAndHJ1bmNhdGVkIGRpdmlzaW9uJyBhbmQgaXNcclxuICAgICAgLy8gICAgICAgICAgICAgZXF1aXZhbGVudCB0byAoYSAlIG4pIGluIEphdmFTY3JpcHQuXHJcbiAgICAgIC8vIEZMT09SICAgICAzIFRoZSByZW1haW5kZXIgaGFzIHRoZSBzYW1lIHNpZ24gYXMgdGhlIGRpdmlzb3IgKFB5dGhvbiAlKS5cclxuICAgICAgLy8gSEFMRl9FVkVOIDYgVGhpcyBtb2R1bG8gbW9kZSBpbXBsZW1lbnRzIHRoZSBJRUVFIDc1NCByZW1haW5kZXIgZnVuY3Rpb24uXHJcbiAgICAgIC8vIEVVQ0xJRCAgICA5IEV1Y2xpZGlhbiBkaXZpc2lvbi4gcSA9IHNpZ24obikgKiBmbG9vcihhIC8gYWJzKG4pKS5cclxuICAgICAgLy8gICAgICAgICAgICAgVGhlIHJlbWFpbmRlciBpcyBhbHdheXMgcG9zaXRpdmUuXHJcbiAgICAgIC8vXHJcbiAgICAgIC8vIFRoZSB0cnVuY2F0ZWQgZGl2aXNpb24sIGZsb29yZWQgZGl2aXNpb24sIEV1Y2xpZGlhbiBkaXZpc2lvbiBhbmQgSUVFRSA3NTQgcmVtYWluZGVyXHJcbiAgICAgIC8vIG1vZGVzIGFyZSBjb21tb25seSB1c2VkIGZvciB0aGUgbW9kdWx1cyBvcGVyYXRpb24uXHJcbiAgICAgIC8vIEFsdGhvdWdoIHRoZSBvdGhlciByb3VuZGluZyBtb2RlcyBjYW4gYWxzbyBiZSB1c2VkLCB0aGV5IG1heSBub3QgZ2l2ZSB1c2VmdWwgcmVzdWx0cy5cclxuICAgICAgTU9EVUxPX01PREUgPSAxLCAgICAgICAgICAgICAgICAgICAgICAgICAvLyAwIHRvIDlcclxuXHJcbiAgICAgIC8vIFRoZSBtYXhpbXVtIG51bWJlciBvZiBzaWduaWZpY2FudCBkaWdpdHMgb2YgdGhlIHJlc3VsdCBvZiB0aGUgZXhwb25lbnRpYXRlZEJ5IG9wZXJhdGlvbi5cclxuICAgICAgLy8gSWYgUE9XX1BSRUNJU0lPTiBpcyAwLCB0aGVyZSB3aWxsIGJlIHVubGltaXRlZCBzaWduaWZpY2FudCBkaWdpdHMuXHJcbiAgICAgIFBPV19QUkVDSVNJT04gPSAwLCAgICAgICAgICAgICAgICAgICAgLy8gMCB0byBNQVhcclxuXHJcbiAgICAgIC8vIFRoZSBmb3JtYXQgc3BlY2lmaWNhdGlvbiB1c2VkIGJ5IHRoZSBCaWdOdW1iZXIucHJvdG90eXBlLnRvRm9ybWF0IG1ldGhvZC5cclxuICAgICAgRk9STUFUID0ge1xyXG4gICAgICAgIHByZWZpeDogJycsXHJcbiAgICAgICAgZ3JvdXBTaXplOiAzLFxyXG4gICAgICAgIHNlY29uZGFyeUdyb3VwU2l6ZTogMCxcclxuICAgICAgICBncm91cFNlcGFyYXRvcjogJywnLFxyXG4gICAgICAgIGRlY2ltYWxTZXBhcmF0b3I6ICcuJyxcclxuICAgICAgICBmcmFjdGlvbkdyb3VwU2l6ZTogMCxcclxuICAgICAgICBmcmFjdGlvbkdyb3VwU2VwYXJhdG9yOiAnXFx4QTAnLCAgICAgIC8vIG5vbi1icmVha2luZyBzcGFjZVxyXG4gICAgICAgIHN1ZmZpeDogJydcclxuICAgICAgfSxcclxuXHJcbiAgICAgIC8vIFRoZSBhbHBoYWJldCB1c2VkIGZvciBiYXNlIGNvbnZlcnNpb24uIEl0IG11c3QgYmUgYXQgbGVhc3QgMiBjaGFyYWN0ZXJzIGxvbmcsIHdpdGggbm8gJysnLFxyXG4gICAgICAvLyAnLScsICcuJywgd2hpdGVzcGFjZSwgb3IgcmVwZWF0ZWQgY2hhcmFjdGVyLlxyXG4gICAgICAvLyAnMDEyMzQ1Njc4OWFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6QUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVokXydcclxuICAgICAgQUxQSEFCRVQgPSAnMDEyMzQ1Njc4OWFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6JztcclxuXHJcblxyXG4gICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcblxyXG4gICAgLy8gQ09OU1RSVUNUT1JcclxuXHJcblxyXG4gICAgLypcclxuICAgICAqIFRoZSBCaWdOdW1iZXIgY29uc3RydWN0b3IgYW5kIGV4cG9ydGVkIGZ1bmN0aW9uLlxyXG4gICAgICogQ3JlYXRlIGFuZCByZXR1cm4gYSBuZXcgaW5zdGFuY2Ugb2YgYSBCaWdOdW1iZXIgb2JqZWN0LlxyXG4gICAgICpcclxuICAgICAqIHYge251bWJlcnxzdHJpbmd8QmlnTnVtYmVyfSBBIG51bWVyaWMgdmFsdWUuXHJcbiAgICAgKiBbYl0ge251bWJlcn0gVGhlIGJhc2Ugb2Ygdi4gSW50ZWdlciwgMiB0byBBTFBIQUJFVC5sZW5ndGggaW5jbHVzaXZlLlxyXG4gICAgICovXHJcbiAgICBmdW5jdGlvbiBCaWdOdW1iZXIodiwgYikge1xyXG4gICAgICB2YXIgYWxwaGFiZXQsIGMsIGNhc2VDaGFuZ2VkLCBlLCBpLCBpc051bSwgbGVuLCBzdHIsXHJcbiAgICAgICAgeCA9IHRoaXM7XHJcblxyXG4gICAgICAvLyBFbmFibGUgY29uc3RydWN0b3IgY2FsbCB3aXRob3V0IGBuZXdgLlxyXG4gICAgICBpZiAoISh4IGluc3RhbmNlb2YgQmlnTnVtYmVyKSkgcmV0dXJuIG5ldyBCaWdOdW1iZXIodiwgYik7XHJcblxyXG4gICAgICBpZiAoYiA9PSBudWxsKSB7XHJcblxyXG4gICAgICAgIGlmICh2ICYmIHYuX2lzQmlnTnVtYmVyID09PSB0cnVlKSB7XHJcbiAgICAgICAgICB4LnMgPSB2LnM7XHJcblxyXG4gICAgICAgICAgaWYgKCF2LmMgfHwgdi5lID4gTUFYX0VYUCkge1xyXG4gICAgICAgICAgICB4LmMgPSB4LmUgPSBudWxsO1xyXG4gICAgICAgICAgfSBlbHNlIGlmICh2LmUgPCBNSU5fRVhQKSB7XHJcbiAgICAgICAgICAgIHguYyA9IFt4LmUgPSAwXTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHguZSA9IHYuZTtcclxuICAgICAgICAgICAgeC5jID0gdi5jLnNsaWNlKCk7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKChpc051bSA9IHR5cGVvZiB2ID09ICdudW1iZXInKSAmJiB2ICogMCA9PSAwKSB7XHJcblxyXG4gICAgICAgICAgLy8gVXNlIGAxIC8gbmAgdG8gaGFuZGxlIG1pbnVzIHplcm8gYWxzby5cclxuICAgICAgICAgIHgucyA9IDEgLyB2IDwgMCA/ICh2ID0gLXYsIC0xKSA6IDE7XHJcblxyXG4gICAgICAgICAgLy8gRmFzdCBwYXRoIGZvciBpbnRlZ2Vycywgd2hlcmUgbiA8IDIxNDc0ODM2NDggKDIqKjMxKS5cclxuICAgICAgICAgIGlmICh2ID09PSB+fnYpIHtcclxuICAgICAgICAgICAgZm9yIChlID0gMCwgaSA9IHY7IGkgPj0gMTA7IGkgLz0gMTAsIGUrKyk7XHJcblxyXG4gICAgICAgICAgICBpZiAoZSA+IE1BWF9FWFApIHtcclxuICAgICAgICAgICAgICB4LmMgPSB4LmUgPSBudWxsO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIHguZSA9IGU7XHJcbiAgICAgICAgICAgICAgeC5jID0gW3ZdO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgc3RyID0gU3RyaW5nKHYpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcblxyXG4gICAgICAgICAgaWYgKCFpc051bWVyaWMudGVzdChzdHIgPSBTdHJpbmcodikpKSByZXR1cm4gcGFyc2VOdW1lcmljKHgsIHN0ciwgaXNOdW0pO1xyXG5cclxuICAgICAgICAgIHgucyA9IHN0ci5jaGFyQ29kZUF0KDApID09IDQ1ID8gKHN0ciA9IHN0ci5zbGljZSgxKSwgLTEpIDogMTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIERlY2ltYWwgcG9pbnQ/XHJcbiAgICAgICAgaWYgKChlID0gc3RyLmluZGV4T2YoJy4nKSkgPiAtMSkgc3RyID0gc3RyLnJlcGxhY2UoJy4nLCAnJyk7XHJcblxyXG4gICAgICAgIC8vIEV4cG9uZW50aWFsIGZvcm0/XHJcbiAgICAgICAgaWYgKChpID0gc3RyLnNlYXJjaCgvZS9pKSkgPiAwKSB7XHJcblxyXG4gICAgICAgICAgLy8gRGV0ZXJtaW5lIGV4cG9uZW50LlxyXG4gICAgICAgICAgaWYgKGUgPCAwKSBlID0gaTtcclxuICAgICAgICAgIGUgKz0gK3N0ci5zbGljZShpICsgMSk7XHJcbiAgICAgICAgICBzdHIgPSBzdHIuc3Vic3RyaW5nKDAsIGkpO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoZSA8IDApIHtcclxuXHJcbiAgICAgICAgICAvLyBJbnRlZ2VyLlxyXG4gICAgICAgICAgZSA9IHN0ci5sZW5ndGg7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgfSBlbHNlIHtcclxuXHJcbiAgICAgICAgLy8gJ1tCaWdOdW1iZXIgRXJyb3JdIEJhc2Uge25vdCBhIHByaW1pdGl2ZSBudW1iZXJ8bm90IGFuIGludGVnZXJ8b3V0IG9mIHJhbmdlfToge2J9J1xyXG4gICAgICAgIGludENoZWNrKGIsIDIsIEFMUEhBQkVULmxlbmd0aCwgJ0Jhc2UnKTtcclxuXHJcbiAgICAgICAgLy8gQWxsb3cgZXhwb25lbnRpYWwgbm90YXRpb24gdG8gYmUgdXNlZCB3aXRoIGJhc2UgMTAgYXJndW1lbnQsIHdoaWxlXHJcbiAgICAgICAgLy8gYWxzbyByb3VuZGluZyB0byBERUNJTUFMX1BMQUNFUyBhcyB3aXRoIG90aGVyIGJhc2VzLlxyXG4gICAgICAgIGlmIChiID09IDEwKSB7XHJcbiAgICAgICAgICB4ID0gbmV3IEJpZ051bWJlcih2KTtcclxuICAgICAgICAgIHJldHVybiByb3VuZCh4LCBERUNJTUFMX1BMQUNFUyArIHguZSArIDEsIFJPVU5ESU5HX01PREUpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgc3RyID0gU3RyaW5nKHYpO1xyXG5cclxuICAgICAgICBpZiAoaXNOdW0gPSB0eXBlb2YgdiA9PSAnbnVtYmVyJykge1xyXG5cclxuICAgICAgICAgIC8vIEF2b2lkIHBvdGVudGlhbCBpbnRlcnByZXRhdGlvbiBvZiBJbmZpbml0eSBhbmQgTmFOIGFzIGJhc2UgNDQrIHZhbHVlcy5cclxuICAgICAgICAgIGlmICh2ICogMCAhPSAwKSByZXR1cm4gcGFyc2VOdW1lcmljKHgsIHN0ciwgaXNOdW0sIGIpO1xyXG5cclxuICAgICAgICAgIHgucyA9IDEgLyB2IDwgMCA/IChzdHIgPSBzdHIuc2xpY2UoMSksIC0xKSA6IDE7XHJcblxyXG4gICAgICAgICAgLy8gJ1tCaWdOdW1iZXIgRXJyb3JdIE51bWJlciBwcmltaXRpdmUgaGFzIG1vcmUgdGhhbiAxNSBzaWduaWZpY2FudCBkaWdpdHM6IHtufSdcclxuICAgICAgICAgIGlmIChCaWdOdW1iZXIuREVCVUcgJiYgc3RyLnJlcGxhY2UoL14wXFwuMCp8XFwuLywgJycpLmxlbmd0aCA+IDE1KSB7XHJcbiAgICAgICAgICAgIHRocm93IEVycm9yXHJcbiAgICAgICAgICAgICAodG9vTWFueURpZ2l0cyArIHYpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB4LnMgPSBzdHIuY2hhckNvZGVBdCgwKSA9PT0gNDUgPyAoc3RyID0gc3RyLnNsaWNlKDEpLCAtMSkgOiAxO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgYWxwaGFiZXQgPSBBTFBIQUJFVC5zbGljZSgwLCBiKTtcclxuICAgICAgICBlID0gaSA9IDA7XHJcblxyXG4gICAgICAgIC8vIENoZWNrIHRoYXQgc3RyIGlzIGEgdmFsaWQgYmFzZSBiIG51bWJlci5cclxuICAgICAgICAvLyBEb24ndCB1c2UgUmVnRXhwLCBzbyBhbHBoYWJldCBjYW4gY29udGFpbiBzcGVjaWFsIGNoYXJhY3RlcnMuXHJcbiAgICAgICAgZm9yIChsZW4gPSBzdHIubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcclxuICAgICAgICAgIGlmIChhbHBoYWJldC5pbmRleE9mKGMgPSBzdHIuY2hhckF0KGkpKSA8IDApIHtcclxuICAgICAgICAgICAgaWYgKGMgPT0gJy4nKSB7XHJcblxyXG4gICAgICAgICAgICAgIC8vIElmICcuJyBpcyBub3QgdGhlIGZpcnN0IGNoYXJhY3RlciBhbmQgaXQgaGFzIG5vdCBiZSBmb3VuZCBiZWZvcmUuXHJcbiAgICAgICAgICAgICAgaWYgKGkgPiBlKSB7XHJcbiAgICAgICAgICAgICAgICBlID0gbGVuO1xyXG4gICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKCFjYXNlQ2hhbmdlZCkge1xyXG5cclxuICAgICAgICAgICAgICAvLyBBbGxvdyBlLmcuIGhleGFkZWNpbWFsICdGRicgYXMgd2VsbCBhcyAnZmYnLlxyXG4gICAgICAgICAgICAgIGlmIChzdHIgPT0gc3RyLnRvVXBwZXJDYXNlKCkgJiYgKHN0ciA9IHN0ci50b0xvd2VyQ2FzZSgpKSB8fFxyXG4gICAgICAgICAgICAgICAgICBzdHIgPT0gc3RyLnRvTG93ZXJDYXNlKCkgJiYgKHN0ciA9IHN0ci50b1VwcGVyQ2FzZSgpKSkge1xyXG4gICAgICAgICAgICAgICAgY2FzZUNoYW5nZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgaSA9IC0xO1xyXG4gICAgICAgICAgICAgICAgZSA9IDA7XHJcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHJldHVybiBwYXJzZU51bWVyaWMoeCwgU3RyaW5nKHYpLCBpc051bSwgYik7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBQcmV2ZW50IGxhdGVyIGNoZWNrIGZvciBsZW5ndGggb24gY29udmVydGVkIG51bWJlci5cclxuICAgICAgICBpc051bSA9IGZhbHNlO1xyXG4gICAgICAgIHN0ciA9IGNvbnZlcnRCYXNlKHN0ciwgYiwgMTAsIHgucyk7XHJcblxyXG4gICAgICAgIC8vIERlY2ltYWwgcG9pbnQ/XHJcbiAgICAgICAgaWYgKChlID0gc3RyLmluZGV4T2YoJy4nKSkgPiAtMSkgc3RyID0gc3RyLnJlcGxhY2UoJy4nLCAnJyk7XHJcbiAgICAgICAgZWxzZSBlID0gc3RyLmxlbmd0aDtcclxuICAgICAgfVxyXG5cclxuICAgICAgLy8gRGV0ZXJtaW5lIGxlYWRpbmcgemVyb3MuXHJcbiAgICAgIGZvciAoaSA9IDA7IHN0ci5jaGFyQ29kZUF0KGkpID09PSA0ODsgaSsrKTtcclxuXHJcbiAgICAgIC8vIERldGVybWluZSB0cmFpbGluZyB6ZXJvcy5cclxuICAgICAgZm9yIChsZW4gPSBzdHIubGVuZ3RoOyBzdHIuY2hhckNvZGVBdCgtLWxlbikgPT09IDQ4Oyk7XHJcblxyXG4gICAgICBpZiAoc3RyID0gc3RyLnNsaWNlKGksICsrbGVuKSkge1xyXG4gICAgICAgIGxlbiAtPSBpO1xyXG5cclxuICAgICAgICAvLyAnW0JpZ051bWJlciBFcnJvcl0gTnVtYmVyIHByaW1pdGl2ZSBoYXMgbW9yZSB0aGFuIDE1IHNpZ25pZmljYW50IGRpZ2l0czoge259J1xyXG4gICAgICAgIGlmIChpc051bSAmJiBCaWdOdW1iZXIuREVCVUcgJiZcclxuICAgICAgICAgIGxlbiA+IDE1ICYmICh2ID4gTUFYX1NBRkVfSU5URUdFUiB8fCB2ICE9PSBtYXRoZmxvb3IodikpKSB7XHJcbiAgICAgICAgICAgIHRocm93IEVycm9yXHJcbiAgICAgICAgICAgICAodG9vTWFueURpZ2l0cyArICh4LnMgKiB2KSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAgLy8gT3ZlcmZsb3c/XHJcbiAgICAgICAgaWYgKChlID0gZSAtIGkgLSAxKSA+IE1BWF9FWFApIHtcclxuXHJcbiAgICAgICAgICAvLyBJbmZpbml0eS5cclxuICAgICAgICAgIHguYyA9IHguZSA9IG51bGw7XHJcblxyXG4gICAgICAgIC8vIFVuZGVyZmxvdz9cclxuICAgICAgICB9IGVsc2UgaWYgKGUgPCBNSU5fRVhQKSB7XHJcblxyXG4gICAgICAgICAgLy8gWmVyby5cclxuICAgICAgICAgIHguYyA9IFt4LmUgPSAwXTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgeC5lID0gZTtcclxuICAgICAgICAgIHguYyA9IFtdO1xyXG5cclxuICAgICAgICAgIC8vIFRyYW5zZm9ybSBiYXNlXHJcblxyXG4gICAgICAgICAgLy8gZSBpcyB0aGUgYmFzZSAxMCBleHBvbmVudC5cclxuICAgICAgICAgIC8vIGkgaXMgd2hlcmUgdG8gc2xpY2Ugc3RyIHRvIGdldCB0aGUgZmlyc3QgZWxlbWVudCBvZiB0aGUgY29lZmZpY2llbnQgYXJyYXkuXHJcbiAgICAgICAgICBpID0gKGUgKyAxKSAlIExPR19CQVNFO1xyXG4gICAgICAgICAgaWYgKGUgPCAwKSBpICs9IExPR19CQVNFOyAgLy8gaSA8IDFcclxuXHJcbiAgICAgICAgICBpZiAoaSA8IGxlbikge1xyXG4gICAgICAgICAgICBpZiAoaSkgeC5jLnB1c2goK3N0ci5zbGljZSgwLCBpKSk7XHJcblxyXG4gICAgICAgICAgICBmb3IgKGxlbiAtPSBMT0dfQkFTRTsgaSA8IGxlbjspIHtcclxuICAgICAgICAgICAgICB4LmMucHVzaCgrc3RyLnNsaWNlKGksIGkgKz0gTE9HX0JBU0UpKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaSA9IExPR19CQVNFIC0gKHN0ciA9IHN0ci5zbGljZShpKSkubGVuZ3RoO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgaSAtPSBsZW47XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgZm9yICg7IGktLTsgc3RyICs9ICcwJyk7XHJcbiAgICAgICAgICB4LmMucHVzaCgrc3RyKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSB7XHJcblxyXG4gICAgICAgIC8vIFplcm8uXHJcbiAgICAgICAgeC5jID0gW3guZSA9IDBdO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8vIENPTlNUUlVDVE9SIFBST1BFUlRJRVNcclxuXHJcblxyXG4gICAgQmlnTnVtYmVyLmNsb25lID0gY2xvbmU7XHJcblxyXG4gICAgQmlnTnVtYmVyLlJPVU5EX1VQID0gMDtcclxuICAgIEJpZ051bWJlci5ST1VORF9ET1dOID0gMTtcclxuICAgIEJpZ051bWJlci5ST1VORF9DRUlMID0gMjtcclxuICAgIEJpZ051bWJlci5ST1VORF9GTE9PUiA9IDM7XHJcbiAgICBCaWdOdW1iZXIuUk9VTkRfSEFMRl9VUCA9IDQ7XHJcbiAgICBCaWdOdW1iZXIuUk9VTkRfSEFMRl9ET1dOID0gNTtcclxuICAgIEJpZ051bWJlci5ST1VORF9IQUxGX0VWRU4gPSA2O1xyXG4gICAgQmlnTnVtYmVyLlJPVU5EX0hBTEZfQ0VJTCA9IDc7XHJcbiAgICBCaWdOdW1iZXIuUk9VTkRfSEFMRl9GTE9PUiA9IDg7XHJcbiAgICBCaWdOdW1iZXIuRVVDTElEID0gOTtcclxuXHJcblxyXG4gICAgLypcclxuICAgICAqIENvbmZpZ3VyZSBpbmZyZXF1ZW50bHktY2hhbmdpbmcgbGlicmFyeS13aWRlIHNldHRpbmdzLlxyXG4gICAgICpcclxuICAgICAqIEFjY2VwdCBhbiBvYmplY3Qgd2l0aCB0aGUgZm9sbG93aW5nIG9wdGlvbmFsIHByb3BlcnRpZXMgKGlmIHRoZSB2YWx1ZSBvZiBhIHByb3BlcnR5IGlzXHJcbiAgICAgKiBhIG51bWJlciwgaXQgbXVzdCBiZSBhbiBpbnRlZ2VyIHdpdGhpbiB0aGUgaW5jbHVzaXZlIHJhbmdlIHN0YXRlZCk6XHJcbiAgICAgKlxyXG4gICAgICogICBERUNJTUFMX1BMQUNFUyAgIHtudW1iZXJ9ICAgICAgICAgICAwIHRvIE1BWFxyXG4gICAgICogICBST1VORElOR19NT0RFICAgIHtudW1iZXJ9ICAgICAgICAgICAwIHRvIDhcclxuICAgICAqICAgRVhQT05FTlRJQUxfQVQgICB7bnVtYmVyfG51bWJlcltdfSAgLU1BWCB0byBNQVggIG9yICBbLU1BWCB0byAwLCAwIHRvIE1BWF1cclxuICAgICAqICAgUkFOR0UgICAgICAgICAgICB7bnVtYmVyfG51bWJlcltdfSAgLU1BWCB0byBNQVggKG5vdCB6ZXJvKSAgb3IgIFstTUFYIHRvIC0xLCAxIHRvIE1BWF1cclxuICAgICAqICAgQ1JZUFRPICAgICAgICAgICB7Ym9vbGVhbn0gICAgICAgICAgdHJ1ZSBvciBmYWxzZVxyXG4gICAgICogICBNT0RVTE9fTU9ERSAgICAgIHtudW1iZXJ9ICAgICAgICAgICAwIHRvIDlcclxuICAgICAqICAgUE9XX1BSRUNJU0lPTiAgICAgICB7bnVtYmVyfSAgICAgICAgICAgMCB0byBNQVhcclxuICAgICAqICAgQUxQSEFCRVQgICAgICAgICB7c3RyaW5nfSAgICAgICAgICAgQSBzdHJpbmcgb2YgdHdvIG9yIG1vcmUgdW5pcXVlIGNoYXJhY3RlcnMgd2hpY2ggZG9lc1xyXG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub3QgY29udGFpbiAnLicuXHJcbiAgICAgKiAgIEZPUk1BVCAgICAgICAgICAge29iamVjdH0gICAgICAgICAgIEFuIG9iamVjdCB3aXRoIHNvbWUgb2YgdGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzOlxyXG4gICAgICogICAgIHByZWZpeCAgICAgICAgICAgICAgICAge3N0cmluZ31cclxuICAgICAqICAgICBncm91cFNpemUgICAgICAgICAgICAgIHtudW1iZXJ9XHJcbiAgICAgKiAgICAgc2Vjb25kYXJ5R3JvdXBTaXplICAgICB7bnVtYmVyfVxyXG4gICAgICogICAgIGdyb3VwU2VwYXJhdG9yICAgICAgICAge3N0cmluZ31cclxuICAgICAqICAgICBkZWNpbWFsU2VwYXJhdG9yICAgICAgIHtzdHJpbmd9XHJcbiAgICAgKiAgICAgZnJhY3Rpb25Hcm91cFNpemUgICAgICB7bnVtYmVyfVxyXG4gICAgICogICAgIGZyYWN0aW9uR3JvdXBTZXBhcmF0b3Ige3N0cmluZ31cclxuICAgICAqICAgICBzdWZmaXggICAgICAgICAgICAgICAgIHtzdHJpbmd9XHJcbiAgICAgKlxyXG4gICAgICogKFRoZSB2YWx1ZXMgYXNzaWduZWQgdG8gdGhlIGFib3ZlIEZPUk1BVCBvYmplY3QgcHJvcGVydGllcyBhcmUgbm90IGNoZWNrZWQgZm9yIHZhbGlkaXR5LilcclxuICAgICAqXHJcbiAgICAgKiBFLmcuXHJcbiAgICAgKiBCaWdOdW1iZXIuY29uZmlnKHsgREVDSU1BTF9QTEFDRVMgOiAyMCwgUk9VTkRJTkdfTU9ERSA6IDQgfSlcclxuICAgICAqXHJcbiAgICAgKiBJZ25vcmUgcHJvcGVydGllcy9wYXJhbWV0ZXJzIHNldCB0byBudWxsIG9yIHVuZGVmaW5lZCwgZXhjZXB0IGZvciBBTFBIQUJFVC5cclxuICAgICAqXHJcbiAgICAgKiBSZXR1cm4gYW4gb2JqZWN0IHdpdGggdGhlIHByb3BlcnRpZXMgY3VycmVudCB2YWx1ZXMuXHJcbiAgICAgKi9cclxuICAgIEJpZ051bWJlci5jb25maWcgPSBCaWdOdW1iZXIuc2V0ID0gZnVuY3Rpb24gKG9iaikge1xyXG4gICAgICB2YXIgcCwgdjtcclxuXHJcbiAgICAgIGlmIChvYmogIT0gbnVsbCkge1xyXG5cclxuICAgICAgICBpZiAodHlwZW9mIG9iaiA9PSAnb2JqZWN0Jykge1xyXG5cclxuICAgICAgICAgIC8vIERFQ0lNQUxfUExBQ0VTIHtudW1iZXJ9IEludGVnZXIsIDAgdG8gTUFYIGluY2x1c2l2ZS5cclxuICAgICAgICAgIC8vICdbQmlnTnVtYmVyIEVycm9yXSBERUNJTUFMX1BMQUNFUyB7bm90IGEgcHJpbWl0aXZlIG51bWJlcnxub3QgYW4gaW50ZWdlcnxvdXQgb2YgcmFuZ2V9OiB7dn0nXHJcbiAgICAgICAgICBpZiAob2JqLmhhc093blByb3BlcnR5KHAgPSAnREVDSU1BTF9QTEFDRVMnKSkge1xyXG4gICAgICAgICAgICB2ID0gb2JqW3BdO1xyXG4gICAgICAgICAgICBpbnRDaGVjayh2LCAwLCBNQVgsIHApO1xyXG4gICAgICAgICAgICBERUNJTUFMX1BMQUNFUyA9IHY7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgLy8gUk9VTkRJTkdfTU9ERSB7bnVtYmVyfSBJbnRlZ2VyLCAwIHRvIDggaW5jbHVzaXZlLlxyXG4gICAgICAgICAgLy8gJ1tCaWdOdW1iZXIgRXJyb3JdIFJPVU5ESU5HX01PREUge25vdCBhIHByaW1pdGl2ZSBudW1iZXJ8bm90IGFuIGludGVnZXJ8b3V0IG9mIHJhbmdlfToge3Z9J1xyXG4gICAgICAgICAgaWYgKG9iai5oYXNPd25Qcm9wZXJ0eShwID0gJ1JPVU5ESU5HX01PREUnKSkge1xyXG4gICAgICAgICAgICB2ID0gb2JqW3BdO1xyXG4gICAgICAgICAgICBpbnRDaGVjayh2LCAwLCA4LCBwKTtcclxuICAgICAgICAgICAgUk9VTkRJTkdfTU9ERSA9IHY7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgLy8gRVhQT05FTlRJQUxfQVQge251bWJlcnxudW1iZXJbXX1cclxuICAgICAgICAgIC8vIEludGVnZXIsIC1NQVggdG8gTUFYIGluY2x1c2l2ZSBvclxyXG4gICAgICAgICAgLy8gW2ludGVnZXIgLU1BWCB0byAwIGluY2x1c2l2ZSwgMCB0byBNQVggaW5jbHVzaXZlXS5cclxuICAgICAgICAgIC8vICdbQmlnTnVtYmVyIEVycm9yXSBFWFBPTkVOVElBTF9BVCB7bm90IGEgcHJpbWl0aXZlIG51bWJlcnxub3QgYW4gaW50ZWdlcnxvdXQgb2YgcmFuZ2V9OiB7dn0nXHJcbiAgICAgICAgICBpZiAob2JqLmhhc093blByb3BlcnR5KHAgPSAnRVhQT05FTlRJQUxfQVQnKSkge1xyXG4gICAgICAgICAgICB2ID0gb2JqW3BdO1xyXG4gICAgICAgICAgICBpZiAodiAmJiB2LnBvcCkge1xyXG4gICAgICAgICAgICAgIGludENoZWNrKHZbMF0sIC1NQVgsIDAsIHApO1xyXG4gICAgICAgICAgICAgIGludENoZWNrKHZbMV0sIDAsIE1BWCwgcCk7XHJcbiAgICAgICAgICAgICAgVE9fRVhQX05FRyA9IHZbMF07XHJcbiAgICAgICAgICAgICAgVE9fRVhQX1BPUyA9IHZbMV07XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgaW50Q2hlY2sodiwgLU1BWCwgTUFYLCBwKTtcclxuICAgICAgICAgICAgICBUT19FWFBfTkVHID0gLShUT19FWFBfUE9TID0gdiA8IDAgPyAtdiA6IHYpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgLy8gUkFOR0Uge251bWJlcnxudW1iZXJbXX0gTm9uLXplcm8gaW50ZWdlciwgLU1BWCB0byBNQVggaW5jbHVzaXZlIG9yXHJcbiAgICAgICAgICAvLyBbaW50ZWdlciAtTUFYIHRvIC0xIGluY2x1c2l2ZSwgaW50ZWdlciAxIHRvIE1BWCBpbmNsdXNpdmVdLlxyXG4gICAgICAgICAgLy8gJ1tCaWdOdW1iZXIgRXJyb3JdIFJBTkdFIHtub3QgYSBwcmltaXRpdmUgbnVtYmVyfG5vdCBhbiBpbnRlZ2VyfG91dCBvZiByYW5nZXxjYW5ub3QgYmUgemVyb306IHt2fSdcclxuICAgICAgICAgIGlmIChvYmouaGFzT3duUHJvcGVydHkocCA9ICdSQU5HRScpKSB7XHJcbiAgICAgICAgICAgIHYgPSBvYmpbcF07XHJcbiAgICAgICAgICAgIGlmICh2ICYmIHYucG9wKSB7XHJcbiAgICAgICAgICAgICAgaW50Q2hlY2sodlswXSwgLU1BWCwgLTEsIHApO1xyXG4gICAgICAgICAgICAgIGludENoZWNrKHZbMV0sIDEsIE1BWCwgcCk7XHJcbiAgICAgICAgICAgICAgTUlOX0VYUCA9IHZbMF07XHJcbiAgICAgICAgICAgICAgTUFYX0VYUCA9IHZbMV07XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgaW50Q2hlY2sodiwgLU1BWCwgTUFYLCBwKTtcclxuICAgICAgICAgICAgICBpZiAodikge1xyXG4gICAgICAgICAgICAgICAgTUlOX0VYUCA9IC0oTUFYX0VYUCA9IHYgPCAwID8gLXYgOiB2KTtcclxuICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhyb3cgRXJyb3JcclxuICAgICAgICAgICAgICAgICAoYmlnbnVtYmVyRXJyb3IgKyBwICsgJyBjYW5ub3QgYmUgemVybzogJyArIHYpO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIC8vIENSWVBUTyB7Ym9vbGVhbn0gdHJ1ZSBvciBmYWxzZS5cclxuICAgICAgICAgIC8vICdbQmlnTnVtYmVyIEVycm9yXSBDUllQVE8gbm90IHRydWUgb3IgZmFsc2U6IHt2fSdcclxuICAgICAgICAgIC8vICdbQmlnTnVtYmVyIEVycm9yXSBjcnlwdG8gdW5hdmFpbGFibGUnXHJcbiAgICAgICAgICBpZiAob2JqLmhhc093blByb3BlcnR5KHAgPSAnQ1JZUFRPJykpIHtcclxuICAgICAgICAgICAgdiA9IG9ialtwXTtcclxuICAgICAgICAgICAgaWYgKHYgPT09ICEhdikge1xyXG4gICAgICAgICAgICAgIGlmICh2KSB7XHJcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGNyeXB0byAhPSAndW5kZWZpbmVkJyAmJiBjcnlwdG8gJiZcclxuICAgICAgICAgICAgICAgICAoY3J5cHRvLmdldFJhbmRvbVZhbHVlcyB8fCBjcnlwdG8ucmFuZG9tQnl0ZXMpKSB7XHJcbiAgICAgICAgICAgICAgICAgIENSWVBUTyA9IHY7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICBDUllQVE8gPSAhdjtcclxuICAgICAgICAgICAgICAgICAgdGhyb3cgRXJyb3JcclxuICAgICAgICAgICAgICAgICAgIChiaWdudW1iZXJFcnJvciArICdjcnlwdG8gdW5hdmFpbGFibGUnKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgQ1JZUFRPID0gdjtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgdGhyb3cgRXJyb3JcclxuICAgICAgICAgICAgICAgKGJpZ251bWJlckVycm9yICsgcCArICcgbm90IHRydWUgb3IgZmFsc2U6ICcgKyB2KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIC8vIE1PRFVMT19NT0RFIHtudW1iZXJ9IEludGVnZXIsIDAgdG8gOSBpbmNsdXNpdmUuXHJcbiAgICAgICAgICAvLyAnW0JpZ051bWJlciBFcnJvcl0gTU9EVUxPX01PREUge25vdCBhIHByaW1pdGl2ZSBudW1iZXJ8bm90IGFuIGludGVnZXJ8b3V0IG9mIHJhbmdlfToge3Z9J1xyXG4gICAgICAgICAgaWYgKG9iai5oYXNPd25Qcm9wZXJ0eShwID0gJ01PRFVMT19NT0RFJykpIHtcclxuICAgICAgICAgICAgdiA9IG9ialtwXTtcclxuICAgICAgICAgICAgaW50Q2hlY2sodiwgMCwgOSwgcCk7XHJcbiAgICAgICAgICAgIE1PRFVMT19NT0RFID0gdjtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAvLyBQT1dfUFJFQ0lTSU9OIHtudW1iZXJ9IEludGVnZXIsIDAgdG8gTUFYIGluY2x1c2l2ZS5cclxuICAgICAgICAgIC8vICdbQmlnTnVtYmVyIEVycm9yXSBQT1dfUFJFQ0lTSU9OIHtub3QgYSBwcmltaXRpdmUgbnVtYmVyfG5vdCBhbiBpbnRlZ2VyfG91dCBvZiByYW5nZX06IHt2fSdcclxuICAgICAgICAgIGlmIChvYmouaGFzT3duUHJvcGVydHkocCA9ICdQT1dfUFJFQ0lTSU9OJykpIHtcclxuICAgICAgICAgICAgdiA9IG9ialtwXTtcclxuICAgICAgICAgICAgaW50Q2hlY2sodiwgMCwgTUFYLCBwKTtcclxuICAgICAgICAgICAgUE9XX1BSRUNJU0lPTiA9IHY7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgLy8gRk9STUFUIHtvYmplY3R9XHJcbiAgICAgICAgICAvLyAnW0JpZ051bWJlciBFcnJvcl0gRk9STUFUIG5vdCBhbiBvYmplY3Q6IHt2fSdcclxuICAgICAgICAgIGlmIChvYmouaGFzT3duUHJvcGVydHkocCA9ICdGT1JNQVQnKSkge1xyXG4gICAgICAgICAgICB2ID0gb2JqW3BdO1xyXG4gICAgICAgICAgICBpZiAodHlwZW9mIHYgPT0gJ29iamVjdCcpIEZPUk1BVCA9IHY7XHJcbiAgICAgICAgICAgIGVsc2UgdGhyb3cgRXJyb3JcclxuICAgICAgICAgICAgIChiaWdudW1iZXJFcnJvciArIHAgKyAnIG5vdCBhbiBvYmplY3Q6ICcgKyB2KTtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAvLyBBTFBIQUJFVCB7c3RyaW5nfVxyXG4gICAgICAgICAgLy8gJ1tCaWdOdW1iZXIgRXJyb3JdIEFMUEhBQkVUIGludmFsaWQ6IHt2fSdcclxuICAgICAgICAgIGlmIChvYmouaGFzT3duUHJvcGVydHkocCA9ICdBTFBIQUJFVCcpKSB7XHJcbiAgICAgICAgICAgIHYgPSBvYmpbcF07XHJcblxyXG4gICAgICAgICAgICAvLyBEaXNhbGxvdyBpZiBsZXNzIHRoYW4gdHdvIGNoYXJhY3RlcnMsXHJcbiAgICAgICAgICAgIC8vIG9yIGlmIGl0IGNvbnRhaW5zICcrJywgJy0nLCAnLicsIHdoaXRlc3BhY2UsIG9yIGEgcmVwZWF0ZWQgY2hhcmFjdGVyLlxyXG4gICAgICAgICAgICBpZiAodHlwZW9mIHYgPT0gJ3N0cmluZycgJiYgIS9eLj8kfFsrXFwtLlxcc118KC4pLipcXDEvLnRlc3QodikpIHtcclxuICAgICAgICAgICAgICBBTFBIQUJFVCA9IHY7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgdGhyb3cgRXJyb3JcclxuICAgICAgICAgICAgICAgKGJpZ251bWJlckVycm9yICsgcCArICcgaW52YWxpZDogJyArIHYpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgIH0gZWxzZSB7XHJcblxyXG4gICAgICAgICAgLy8gJ1tCaWdOdW1iZXIgRXJyb3JdIE9iamVjdCBleHBlY3RlZDoge3Z9J1xyXG4gICAgICAgICAgdGhyb3cgRXJyb3JcclxuICAgICAgICAgICAoYmlnbnVtYmVyRXJyb3IgKyAnT2JqZWN0IGV4cGVjdGVkOiAnICsgb2JqKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJldHVybiB7XHJcbiAgICAgICAgREVDSU1BTF9QTEFDRVM6IERFQ0lNQUxfUExBQ0VTLFxyXG4gICAgICAgIFJPVU5ESU5HX01PREU6IFJPVU5ESU5HX01PREUsXHJcbiAgICAgICAgRVhQT05FTlRJQUxfQVQ6IFtUT19FWFBfTkVHLCBUT19FWFBfUE9TXSxcclxuICAgICAgICBSQU5HRTogW01JTl9FWFAsIE1BWF9FWFBdLFxyXG4gICAgICAgIENSWVBUTzogQ1JZUFRPLFxyXG4gICAgICAgIE1PRFVMT19NT0RFOiBNT0RVTE9fTU9ERSxcclxuICAgICAgICBQT1dfUFJFQ0lTSU9OOiBQT1dfUFJFQ0lTSU9OLFxyXG4gICAgICAgIEZPUk1BVDogRk9STUFULFxyXG4gICAgICAgIEFMUEhBQkVUOiBBTFBIQUJFVFxyXG4gICAgICB9O1xyXG4gICAgfTtcclxuXHJcblxyXG4gICAgLypcclxuICAgICAqIFJldHVybiB0cnVlIGlmIHYgaXMgYSBCaWdOdW1iZXIgaW5zdGFuY2UsIG90aGVyd2lzZSByZXR1cm4gZmFsc2UuXHJcbiAgICAgKlxyXG4gICAgICogSWYgQmlnTnVtYmVyLkRFQlVHIGlzIHRydWUsIHRocm93IGlmIGEgQmlnTnVtYmVyIGluc3RhbmNlIGlzIG5vdCB3ZWxsLWZvcm1lZC5cclxuICAgICAqXHJcbiAgICAgKiB2IHthbnl9XHJcbiAgICAgKlxyXG4gICAgICogJ1tCaWdOdW1iZXIgRXJyb3JdIEludmFsaWQgQmlnTnVtYmVyOiB7dn0nXHJcbiAgICAgKi9cclxuICAgIEJpZ051bWJlci5pc0JpZ051bWJlciA9IGZ1bmN0aW9uICh2KSB7XHJcbiAgICAgIGlmICghdiB8fCB2Ll9pc0JpZ051bWJlciAhPT0gdHJ1ZSkgcmV0dXJuIGZhbHNlO1xyXG4gICAgICBpZiAoIUJpZ051bWJlci5ERUJVRykgcmV0dXJuIHRydWU7XHJcblxyXG4gICAgICB2YXIgaSwgbixcclxuICAgICAgICBjID0gdi5jLFxyXG4gICAgICAgIGUgPSB2LmUsXHJcbiAgICAgICAgcyA9IHYucztcclxuXHJcbiAgICAgIG91dDogaWYgKHt9LnRvU3RyaW5nLmNhbGwoYykgPT0gJ1tvYmplY3QgQXJyYXldJykge1xyXG5cclxuICAgICAgICBpZiAoKHMgPT09IDEgfHwgcyA9PT0gLTEpICYmIGUgPj0gLU1BWCAmJiBlIDw9IE1BWCAmJiBlID09PSBtYXRoZmxvb3IoZSkpIHtcclxuXHJcbiAgICAgICAgICAvLyBJZiB0aGUgZmlyc3QgZWxlbWVudCBpcyB6ZXJvLCB0aGUgQmlnTnVtYmVyIHZhbHVlIG11c3QgYmUgemVyby5cclxuICAgICAgICAgIGlmIChjWzBdID09PSAwKSB7XHJcbiAgICAgICAgICAgIGlmIChlID09PSAwICYmIGMubGVuZ3RoID09PSAxKSByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAgICAgYnJlYWsgb3V0O1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIC8vIENhbGN1bGF0ZSBudW1iZXIgb2YgZGlnaXRzIHRoYXQgY1swXSBzaG91bGQgaGF2ZSwgYmFzZWQgb24gdGhlIGV4cG9uZW50LlxyXG4gICAgICAgICAgaSA9IChlICsgMSkgJSBMT0dfQkFTRTtcclxuICAgICAgICAgIGlmIChpIDwgMSkgaSArPSBMT0dfQkFTRTtcclxuXHJcbiAgICAgICAgICAvLyBDYWxjdWxhdGUgbnVtYmVyIG9mIGRpZ2l0cyBvZiBjWzBdLlxyXG4gICAgICAgICAgLy9pZiAoTWF0aC5jZWlsKE1hdGgubG9nKGNbMF0gKyAxKSAvIE1hdGguTE4xMCkgPT0gaSkge1xyXG4gICAgICAgICAgaWYgKFN0cmluZyhjWzBdKS5sZW5ndGggPT0gaSkge1xyXG5cclxuICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICBuID0gY1tpXTtcclxuICAgICAgICAgICAgICBpZiAobiA8IDAgfHwgbiA+PSBCQVNFIHx8IG4gIT09IG1hdGhmbG9vcihuKSkgYnJlYWsgb3V0O1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAvLyBMYXN0IGVsZW1lbnQgY2Fubm90IGJlIHplcm8sIHVubGVzcyBpdCBpcyB0aGUgb25seSBlbGVtZW50LlxyXG4gICAgICAgICAgICBpZiAobiAhPT0gMCkgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgLy8gSW5maW5pdHkvTmFOXHJcbiAgICAgIH0gZWxzZSBpZiAoYyA9PT0gbnVsbCAmJiBlID09PSBudWxsICYmIChzID09PSBudWxsIHx8IHMgPT09IDEgfHwgcyA9PT0gLTEpKSB7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHRocm93IEVycm9yXHJcbiAgICAgICAgKGJpZ251bWJlckVycm9yICsgJ0ludmFsaWQgQmlnTnVtYmVyOiAnICsgdik7XHJcbiAgICB9O1xyXG5cclxuXHJcbiAgICAvKlxyXG4gICAgICogUmV0dXJuIGEgbmV3IEJpZ051bWJlciB3aG9zZSB2YWx1ZSBpcyB0aGUgbWF4aW11bSBvZiB0aGUgYXJndW1lbnRzLlxyXG4gICAgICpcclxuICAgICAqIGFyZ3VtZW50cyB7bnVtYmVyfHN0cmluZ3xCaWdOdW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIEJpZ051bWJlci5tYXhpbXVtID0gQmlnTnVtYmVyLm1heCA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgcmV0dXJuIG1heE9yTWluKGFyZ3VtZW50cywgUC5sdCk7XHJcbiAgICB9O1xyXG5cclxuXHJcbiAgICAvKlxyXG4gICAgICogUmV0dXJuIGEgbmV3IEJpZ051bWJlciB3aG9zZSB2YWx1ZSBpcyB0aGUgbWluaW11bSBvZiB0aGUgYXJndW1lbnRzLlxyXG4gICAgICpcclxuICAgICAqIGFyZ3VtZW50cyB7bnVtYmVyfHN0cmluZ3xCaWdOdW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIEJpZ051bWJlci5taW5pbXVtID0gQmlnTnVtYmVyLm1pbiA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgcmV0dXJuIG1heE9yTWluKGFyZ3VtZW50cywgUC5ndCk7XHJcbiAgICB9O1xyXG5cclxuXHJcbiAgICAvKlxyXG4gICAgICogUmV0dXJuIGEgbmV3IEJpZ051bWJlciB3aXRoIGEgcmFuZG9tIHZhbHVlIGVxdWFsIHRvIG9yIGdyZWF0ZXIgdGhhbiAwIGFuZCBsZXNzIHRoYW4gMSxcclxuICAgICAqIGFuZCB3aXRoIGRwLCBvciBERUNJTUFMX1BMQUNFUyBpZiBkcCBpcyBvbWl0dGVkLCBkZWNpbWFsIHBsYWNlcyAob3IgbGVzcyBpZiB0cmFpbGluZ1xyXG4gICAgICogemVyb3MgYXJlIHByb2R1Y2VkKS5cclxuICAgICAqXHJcbiAgICAgKiBbZHBdIHtudW1iZXJ9IERlY2ltYWwgcGxhY2VzLiBJbnRlZ2VyLCAwIHRvIE1BWCBpbmNsdXNpdmUuXHJcbiAgICAgKlxyXG4gICAgICogJ1tCaWdOdW1iZXIgRXJyb3JdIEFyZ3VtZW50IHtub3QgYSBwcmltaXRpdmUgbnVtYmVyfG5vdCBhbiBpbnRlZ2VyfG91dCBvZiByYW5nZX06IHtkcH0nXHJcbiAgICAgKiAnW0JpZ051bWJlciBFcnJvcl0gY3J5cHRvIHVuYXZhaWxhYmxlJ1xyXG4gICAgICovXHJcbiAgICBCaWdOdW1iZXIucmFuZG9tID0gKGZ1bmN0aW9uICgpIHtcclxuICAgICAgdmFyIHBvdzJfNTMgPSAweDIwMDAwMDAwMDAwMDAwO1xyXG5cclxuICAgICAgLy8gUmV0dXJuIGEgNTMgYml0IGludGVnZXIgbiwgd2hlcmUgMCA8PSBuIDwgOTAwNzE5OTI1NDc0MDk5Mi5cclxuICAgICAgLy8gQ2hlY2sgaWYgTWF0aC5yYW5kb20oKSBwcm9kdWNlcyBtb3JlIHRoYW4gMzIgYml0cyBvZiByYW5kb21uZXNzLlxyXG4gICAgICAvLyBJZiBpdCBkb2VzLCBhc3N1bWUgYXQgbGVhc3QgNTMgYml0cyBhcmUgcHJvZHVjZWQsIG90aGVyd2lzZSBhc3N1bWUgYXQgbGVhc3QgMzAgYml0cy5cclxuICAgICAgLy8gMHg0MDAwMDAwMCBpcyAyXjMwLCAweDgwMDAwMCBpcyAyXjIzLCAweDFmZmZmZiBpcyAyXjIxIC0gMS5cclxuICAgICAgdmFyIHJhbmRvbTUzYml0SW50ID0gKE1hdGgucmFuZG9tKCkgKiBwb3cyXzUzKSAmIDB4MWZmZmZmXHJcbiAgICAgICA/IGZ1bmN0aW9uICgpIHsgcmV0dXJuIG1hdGhmbG9vcihNYXRoLnJhbmRvbSgpICogcG93Ml81Myk7IH1cclxuICAgICAgIDogZnVuY3Rpb24gKCkgeyByZXR1cm4gKChNYXRoLnJhbmRvbSgpICogMHg0MDAwMDAwMCB8IDApICogMHg4MDAwMDApICtcclxuICAgICAgICAgKE1hdGgucmFuZG9tKCkgKiAweDgwMDAwMCB8IDApOyB9O1xyXG5cclxuICAgICAgcmV0dXJuIGZ1bmN0aW9uIChkcCkge1xyXG4gICAgICAgIHZhciBhLCBiLCBlLCBrLCB2LFxyXG4gICAgICAgICAgaSA9IDAsXHJcbiAgICAgICAgICBjID0gW10sXHJcbiAgICAgICAgICByYW5kID0gbmV3IEJpZ051bWJlcihPTkUpO1xyXG5cclxuICAgICAgICBpZiAoZHAgPT0gbnVsbCkgZHAgPSBERUNJTUFMX1BMQUNFUztcclxuICAgICAgICBlbHNlIGludENoZWNrKGRwLCAwLCBNQVgpO1xyXG5cclxuICAgICAgICBrID0gbWF0aGNlaWwoZHAgLyBMT0dfQkFTRSk7XHJcblxyXG4gICAgICAgIGlmIChDUllQVE8pIHtcclxuXHJcbiAgICAgICAgICAvLyBCcm93c2VycyBzdXBwb3J0aW5nIGNyeXB0by5nZXRSYW5kb21WYWx1ZXMuXHJcbiAgICAgICAgICBpZiAoY3J5cHRvLmdldFJhbmRvbVZhbHVlcykge1xyXG5cclxuICAgICAgICAgICAgYSA9IGNyeXB0by5nZXRSYW5kb21WYWx1ZXMobmV3IFVpbnQzMkFycmF5KGsgKj0gMikpO1xyXG5cclxuICAgICAgICAgICAgZm9yICg7IGkgPCBrOykge1xyXG5cclxuICAgICAgICAgICAgICAvLyA1MyBiaXRzOlxyXG4gICAgICAgICAgICAgIC8vICgoTWF0aC5wb3coMiwgMzIpIC0gMSkgKiBNYXRoLnBvdygyLCAyMSkpLnRvU3RyaW5nKDIpXHJcbiAgICAgICAgICAgICAgLy8gMTExMTEgMTExMTExMTEgMTExMTExMTEgMTExMTExMTEgMTExMDAwMDAgMDAwMDAwMDAgMDAwMDAwMDBcclxuICAgICAgICAgICAgICAvLyAoKE1hdGgucG93KDIsIDMyKSAtIDEpID4+PiAxMSkudG9TdHJpbmcoMilcclxuICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMTExMSAxMTExMTExMSAxMTExMTExMVxyXG4gICAgICAgICAgICAgIC8vIDB4MjAwMDAgaXMgMl4yMS5cclxuICAgICAgICAgICAgICB2ID0gYVtpXSAqIDB4MjAwMDAgKyAoYVtpICsgMV0gPj4+IDExKTtcclxuXHJcbiAgICAgICAgICAgICAgLy8gUmVqZWN0aW9uIHNhbXBsaW5nOlxyXG4gICAgICAgICAgICAgIC8vIDAgPD0gdiA8IDkwMDcxOTkyNTQ3NDA5OTJcclxuICAgICAgICAgICAgICAvLyBQcm9iYWJpbGl0eSB0aGF0IHYgPj0gOWUxNSwgaXNcclxuICAgICAgICAgICAgICAvLyA3MTk5MjU0NzQwOTkyIC8gOTAwNzE5OTI1NDc0MDk5MiB+PSAwLjAwMDgsIGkuZS4gMSBpbiAxMjUxXHJcbiAgICAgICAgICAgICAgaWYgKHYgPj0gOWUxNSkge1xyXG4gICAgICAgICAgICAgICAgYiA9IGNyeXB0by5nZXRSYW5kb21WYWx1ZXMobmV3IFVpbnQzMkFycmF5KDIpKTtcclxuICAgICAgICAgICAgICAgIGFbaV0gPSBiWzBdO1xyXG4gICAgICAgICAgICAgICAgYVtpICsgMV0gPSBiWzFdO1xyXG4gICAgICAgICAgICAgIH0gZWxzZSB7XHJcblxyXG4gICAgICAgICAgICAgICAgLy8gMCA8PSB2IDw9IDg5OTk5OTk5OTk5OTk5OTlcclxuICAgICAgICAgICAgICAgIC8vIDAgPD0gKHYgJSAxZTE0KSA8PSA5OTk5OTk5OTk5OTk5OVxyXG4gICAgICAgICAgICAgICAgYy5wdXNoKHYgJSAxZTE0KTtcclxuICAgICAgICAgICAgICAgIGkgKz0gMjtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaSA9IGsgLyAyO1xyXG5cclxuICAgICAgICAgIC8vIE5vZGUuanMgc3VwcG9ydGluZyBjcnlwdG8ucmFuZG9tQnl0ZXMuXHJcbiAgICAgICAgICB9IGVsc2UgaWYgKGNyeXB0by5yYW5kb21CeXRlcykge1xyXG5cclxuICAgICAgICAgICAgLy8gYnVmZmVyXHJcbiAgICAgICAgICAgIGEgPSBjcnlwdG8ucmFuZG9tQnl0ZXMoayAqPSA3KTtcclxuXHJcbiAgICAgICAgICAgIGZvciAoOyBpIDwgazspIHtcclxuXHJcbiAgICAgICAgICAgICAgLy8gMHgxMDAwMDAwMDAwMDAwIGlzIDJeNDgsIDB4MTAwMDAwMDAwMDAgaXMgMl40MFxyXG4gICAgICAgICAgICAgIC8vIDB4MTAwMDAwMDAwIGlzIDJeMzIsIDB4MTAwMDAwMCBpcyAyXjI0XHJcbiAgICAgICAgICAgICAgLy8gMTExMTEgMTExMTExMTEgMTExMTExMTEgMTExMTExMTEgMTExMTExMTEgMTExMTExMTEgMTExMTExMTFcclxuICAgICAgICAgICAgICAvLyAwIDw9IHYgPCA5MDA3MTk5MjU0NzQwOTkyXHJcbiAgICAgICAgICAgICAgdiA9ICgoYVtpXSAmIDMxKSAqIDB4MTAwMDAwMDAwMDAwMCkgKyAoYVtpICsgMV0gKiAweDEwMDAwMDAwMDAwKSArXHJcbiAgICAgICAgICAgICAgICAgKGFbaSArIDJdICogMHgxMDAwMDAwMDApICsgKGFbaSArIDNdICogMHgxMDAwMDAwKSArXHJcbiAgICAgICAgICAgICAgICAgKGFbaSArIDRdIDw8IDE2KSArIChhW2kgKyA1XSA8PCA4KSArIGFbaSArIDZdO1xyXG5cclxuICAgICAgICAgICAgICBpZiAodiA+PSA5ZTE1KSB7XHJcbiAgICAgICAgICAgICAgICBjcnlwdG8ucmFuZG9tQnl0ZXMoNykuY29weShhLCBpKTtcclxuICAgICAgICAgICAgICB9IGVsc2Uge1xyXG5cclxuICAgICAgICAgICAgICAgIC8vIDAgPD0gKHYgJSAxZTE0KSA8PSA5OTk5OTk5OTk5OTk5OVxyXG4gICAgICAgICAgICAgICAgYy5wdXNoKHYgJSAxZTE0KTtcclxuICAgICAgICAgICAgICAgIGkgKz0gNztcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaSA9IGsgLyA3O1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgQ1JZUFRPID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHRocm93IEVycm9yXHJcbiAgICAgICAgICAgICAoYmlnbnVtYmVyRXJyb3IgKyAnY3J5cHRvIHVuYXZhaWxhYmxlJyk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBVc2UgTWF0aC5yYW5kb20uXHJcbiAgICAgICAgaWYgKCFDUllQVE8pIHtcclxuXHJcbiAgICAgICAgICBmb3IgKDsgaSA8IGs7KSB7XHJcbiAgICAgICAgICAgIHYgPSByYW5kb201M2JpdEludCgpO1xyXG4gICAgICAgICAgICBpZiAodiA8IDllMTUpIGNbaSsrXSA9IHYgJSAxZTE0O1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgayA9IGNbLS1pXTtcclxuICAgICAgICBkcCAlPSBMT0dfQkFTRTtcclxuXHJcbiAgICAgICAgLy8gQ29udmVydCB0cmFpbGluZyBkaWdpdHMgdG8gemVyb3MgYWNjb3JkaW5nIHRvIGRwLlxyXG4gICAgICAgIGlmIChrICYmIGRwKSB7XHJcbiAgICAgICAgICB2ID0gUE9XU19URU5bTE9HX0JBU0UgLSBkcF07XHJcbiAgICAgICAgICBjW2ldID0gbWF0aGZsb29yKGsgLyB2KSAqIHY7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBSZW1vdmUgdHJhaWxpbmcgZWxlbWVudHMgd2hpY2ggYXJlIHplcm8uXHJcbiAgICAgICAgZm9yICg7IGNbaV0gPT09IDA7IGMucG9wKCksIGktLSk7XHJcblxyXG4gICAgICAgIC8vIFplcm8/XHJcbiAgICAgICAgaWYgKGkgPCAwKSB7XHJcbiAgICAgICAgICBjID0gW2UgPSAwXTtcclxuICAgICAgICB9IGVsc2Uge1xyXG5cclxuICAgICAgICAgIC8vIFJlbW92ZSBsZWFkaW5nIGVsZW1lbnRzIHdoaWNoIGFyZSB6ZXJvIGFuZCBhZGp1c3QgZXhwb25lbnQgYWNjb3JkaW5nbHkuXHJcbiAgICAgICAgICBmb3IgKGUgPSAtMSA7IGNbMF0gPT09IDA7IGMuc3BsaWNlKDAsIDEpLCBlIC09IExPR19CQVNFKTtcclxuXHJcbiAgICAgICAgICAvLyBDb3VudCB0aGUgZGlnaXRzIG9mIHRoZSBmaXJzdCBlbGVtZW50IG9mIGMgdG8gZGV0ZXJtaW5lIGxlYWRpbmcgemVyb3MsIGFuZC4uLlxyXG4gICAgICAgICAgZm9yIChpID0gMSwgdiA9IGNbMF07IHYgPj0gMTA7IHYgLz0gMTAsIGkrKyk7XHJcblxyXG4gICAgICAgICAgLy8gYWRqdXN0IHRoZSBleHBvbmVudCBhY2NvcmRpbmdseS5cclxuICAgICAgICAgIGlmIChpIDwgTE9HX0JBU0UpIGUgLT0gTE9HX0JBU0UgLSBpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmFuZC5lID0gZTtcclxuICAgICAgICByYW5kLmMgPSBjO1xyXG4gICAgICAgIHJldHVybiByYW5kO1xyXG4gICAgICB9O1xyXG4gICAgfSkoKTtcclxuXHJcblxyXG4gICAgLypcclxuICAgICAqIFJldHVybiBhIEJpZ051bWJlciB3aG9zZSB2YWx1ZSBpcyB0aGUgc3VtIG9mIHRoZSBhcmd1bWVudHMuXHJcbiAgICAgKlxyXG4gICAgICogYXJndW1lbnRzIHtudW1iZXJ8c3RyaW5nfEJpZ051bWJlcn1cclxuICAgICAqL1xyXG4gICAgQmlnTnVtYmVyLnN1bSA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgdmFyIGkgPSAxLFxyXG4gICAgICAgIGFyZ3MgPSBhcmd1bWVudHMsXHJcbiAgICAgICAgc3VtID0gbmV3IEJpZ051bWJlcihhcmdzWzBdKTtcclxuICAgICAgZm9yICg7IGkgPCBhcmdzLmxlbmd0aDspIHN1bSA9IHN1bS5wbHVzKGFyZ3NbaSsrXSk7XHJcbiAgICAgIHJldHVybiBzdW07XHJcbiAgICB9O1xyXG5cclxuXHJcbiAgICAvLyBQUklWQVRFIEZVTkNUSU9OU1xyXG5cclxuXHJcbiAgICAvLyBDYWxsZWQgYnkgQmlnTnVtYmVyIGFuZCBCaWdOdW1iZXIucHJvdG90eXBlLnRvU3RyaW5nLlxyXG4gICAgY29udmVydEJhc2UgPSAoZnVuY3Rpb24gKCkge1xyXG4gICAgICB2YXIgZGVjaW1hbCA9ICcwMTIzNDU2Nzg5JztcclxuXHJcbiAgICAgIC8qXHJcbiAgICAgICAqIENvbnZlcnQgc3RyaW5nIG9mIGJhc2VJbiB0byBhbiBhcnJheSBvZiBudW1iZXJzIG9mIGJhc2VPdXQuXHJcbiAgICAgICAqIEVnLiB0b0Jhc2VPdXQoJzI1NScsIDEwLCAxNikgcmV0dXJucyBbMTUsIDE1XS5cclxuICAgICAgICogRWcuIHRvQmFzZU91dCgnZmYnLCAxNiwgMTApIHJldHVybnMgWzIsIDUsIDVdLlxyXG4gICAgICAgKi9cclxuICAgICAgZnVuY3Rpb24gdG9CYXNlT3V0KHN0ciwgYmFzZUluLCBiYXNlT3V0LCBhbHBoYWJldCkge1xyXG4gICAgICAgIHZhciBqLFxyXG4gICAgICAgICAgYXJyID0gWzBdLFxyXG4gICAgICAgICAgYXJyTCxcclxuICAgICAgICAgIGkgPSAwLFxyXG4gICAgICAgICAgbGVuID0gc3RyLmxlbmd0aDtcclxuXHJcbiAgICAgICAgZm9yICg7IGkgPCBsZW47KSB7XHJcbiAgICAgICAgICBmb3IgKGFyckwgPSBhcnIubGVuZ3RoOyBhcnJMLS07IGFyclthcnJMXSAqPSBiYXNlSW4pO1xyXG5cclxuICAgICAgICAgIGFyclswXSArPSBhbHBoYWJldC5pbmRleE9mKHN0ci5jaGFyQXQoaSsrKSk7XHJcblxyXG4gICAgICAgICAgZm9yIChqID0gMDsgaiA8IGFyci5sZW5ndGg7IGorKykge1xyXG5cclxuICAgICAgICAgICAgaWYgKGFycltqXSA+IGJhc2VPdXQgLSAxKSB7XHJcbiAgICAgICAgICAgICAgaWYgKGFycltqICsgMV0gPT0gbnVsbCkgYXJyW2ogKyAxXSA9IDA7XHJcbiAgICAgICAgICAgICAgYXJyW2ogKyAxXSArPSBhcnJbal0gLyBiYXNlT3V0IHwgMDtcclxuICAgICAgICAgICAgICBhcnJbal0gJT0gYmFzZU91dDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGFyci5yZXZlcnNlKCk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vIENvbnZlcnQgYSBudW1lcmljIHN0cmluZyBvZiBiYXNlSW4gdG8gYSBudW1lcmljIHN0cmluZyBvZiBiYXNlT3V0LlxyXG4gICAgICAvLyBJZiB0aGUgY2FsbGVyIGlzIHRvU3RyaW5nLCB3ZSBhcmUgY29udmVydGluZyBmcm9tIGJhc2UgMTAgdG8gYmFzZU91dC5cclxuICAgICAgLy8gSWYgdGhlIGNhbGxlciBpcyBCaWdOdW1iZXIsIHdlIGFyZSBjb252ZXJ0aW5nIGZyb20gYmFzZUluIHRvIGJhc2UgMTAuXHJcbiAgICAgIHJldHVybiBmdW5jdGlvbiAoc3RyLCBiYXNlSW4sIGJhc2VPdXQsIHNpZ24sIGNhbGxlcklzVG9TdHJpbmcpIHtcclxuICAgICAgICB2YXIgYWxwaGFiZXQsIGQsIGUsIGssIHIsIHgsIHhjLCB5LFxyXG4gICAgICAgICAgaSA9IHN0ci5pbmRleE9mKCcuJyksXHJcbiAgICAgICAgICBkcCA9IERFQ0lNQUxfUExBQ0VTLFxyXG4gICAgICAgICAgcm0gPSBST1VORElOR19NT0RFO1xyXG5cclxuICAgICAgICAvLyBOb24taW50ZWdlci5cclxuICAgICAgICBpZiAoaSA+PSAwKSB7XHJcbiAgICAgICAgICBrID0gUE9XX1BSRUNJU0lPTjtcclxuXHJcbiAgICAgICAgICAvLyBVbmxpbWl0ZWQgcHJlY2lzaW9uLlxyXG4gICAgICAgICAgUE9XX1BSRUNJU0lPTiA9IDA7XHJcbiAgICAgICAgICBzdHIgPSBzdHIucmVwbGFjZSgnLicsICcnKTtcclxuICAgICAgICAgIHkgPSBuZXcgQmlnTnVtYmVyKGJhc2VJbik7XHJcbiAgICAgICAgICB4ID0geS5wb3coc3RyLmxlbmd0aCAtIGkpO1xyXG4gICAgICAgICAgUE9XX1BSRUNJU0lPTiA9IGs7XHJcblxyXG4gICAgICAgICAgLy8gQ29udmVydCBzdHIgYXMgaWYgYW4gaW50ZWdlciwgdGhlbiByZXN0b3JlIHRoZSBmcmFjdGlvbiBwYXJ0IGJ5IGRpdmlkaW5nIHRoZVxyXG4gICAgICAgICAgLy8gcmVzdWx0IGJ5IGl0cyBiYXNlIHJhaXNlZCB0byBhIHBvd2VyLlxyXG5cclxuICAgICAgICAgIHkuYyA9IHRvQmFzZU91dCh0b0ZpeGVkUG9pbnQoY29lZmZUb1N0cmluZyh4LmMpLCB4LmUsICcwJyksXHJcbiAgICAgICAgICAgMTAsIGJhc2VPdXQsIGRlY2ltYWwpO1xyXG4gICAgICAgICAgeS5lID0geS5jLmxlbmd0aDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIENvbnZlcnQgdGhlIG51bWJlciBhcyBpbnRlZ2VyLlxyXG5cclxuICAgICAgICB4YyA9IHRvQmFzZU91dChzdHIsIGJhc2VJbiwgYmFzZU91dCwgY2FsbGVySXNUb1N0cmluZ1xyXG4gICAgICAgICA/IChhbHBoYWJldCA9IEFMUEhBQkVULCBkZWNpbWFsKVxyXG4gICAgICAgICA6IChhbHBoYWJldCA9IGRlY2ltYWwsIEFMUEhBQkVUKSk7XHJcblxyXG4gICAgICAgIC8vIHhjIG5vdyByZXByZXNlbnRzIHN0ciBhcyBhbiBpbnRlZ2VyIGFuZCBjb252ZXJ0ZWQgdG8gYmFzZU91dC4gZSBpcyB0aGUgZXhwb25lbnQuXHJcbiAgICAgICAgZSA9IGsgPSB4Yy5sZW5ndGg7XHJcblxyXG4gICAgICAgIC8vIFJlbW92ZSB0cmFpbGluZyB6ZXJvcy5cclxuICAgICAgICBmb3IgKDsgeGNbLS1rXSA9PSAwOyB4Yy5wb3AoKSk7XHJcblxyXG4gICAgICAgIC8vIFplcm8/XHJcbiAgICAgICAgaWYgKCF4Y1swXSkgcmV0dXJuIGFscGhhYmV0LmNoYXJBdCgwKTtcclxuXHJcbiAgICAgICAgLy8gRG9lcyBzdHIgcmVwcmVzZW50IGFuIGludGVnZXI/IElmIHNvLCBubyBuZWVkIGZvciB0aGUgZGl2aXNpb24uXHJcbiAgICAgICAgaWYgKGkgPCAwKSB7XHJcbiAgICAgICAgICAtLWU7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHguYyA9IHhjO1xyXG4gICAgICAgICAgeC5lID0gZTtcclxuXHJcbiAgICAgICAgICAvLyBUaGUgc2lnbiBpcyBuZWVkZWQgZm9yIGNvcnJlY3Qgcm91bmRpbmcuXHJcbiAgICAgICAgICB4LnMgPSBzaWduO1xyXG4gICAgICAgICAgeCA9IGRpdih4LCB5LCBkcCwgcm0sIGJhc2VPdXQpO1xyXG4gICAgICAgICAgeGMgPSB4LmM7XHJcbiAgICAgICAgICByID0geC5yO1xyXG4gICAgICAgICAgZSA9IHguZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIHhjIG5vdyByZXByZXNlbnRzIHN0ciBjb252ZXJ0ZWQgdG8gYmFzZU91dC5cclxuXHJcbiAgICAgICAgLy8gVEhlIGluZGV4IG9mIHRoZSByb3VuZGluZyBkaWdpdC5cclxuICAgICAgICBkID0gZSArIGRwICsgMTtcclxuXHJcbiAgICAgICAgLy8gVGhlIHJvdW5kaW5nIGRpZ2l0OiB0aGUgZGlnaXQgdG8gdGhlIHJpZ2h0IG9mIHRoZSBkaWdpdCB0aGF0IG1heSBiZSByb3VuZGVkIHVwLlxyXG4gICAgICAgIGkgPSB4Y1tkXTtcclxuXHJcbiAgICAgICAgLy8gTG9vayBhdCB0aGUgcm91bmRpbmcgZGlnaXRzIGFuZCBtb2RlIHRvIGRldGVybWluZSB3aGV0aGVyIHRvIHJvdW5kIHVwLlxyXG5cclxuICAgICAgICBrID0gYmFzZU91dCAvIDI7XHJcbiAgICAgICAgciA9IHIgfHwgZCA8IDAgfHwgeGNbZCArIDFdICE9IG51bGw7XHJcblxyXG4gICAgICAgIHIgPSBybSA8IDQgPyAoaSAhPSBudWxsIHx8IHIpICYmIChybSA9PSAwIHx8IHJtID09ICh4LnMgPCAwID8gMyA6IDIpKVxyXG4gICAgICAgICAgICAgIDogaSA+IGsgfHwgaSA9PSBrICYmKHJtID09IDQgfHwgciB8fCBybSA9PSA2ICYmIHhjW2QgLSAxXSAmIDEgfHxcclxuICAgICAgICAgICAgICAgcm0gPT0gKHgucyA8IDAgPyA4IDogNykpO1xyXG5cclxuICAgICAgICAvLyBJZiB0aGUgaW5kZXggb2YgdGhlIHJvdW5kaW5nIGRpZ2l0IGlzIG5vdCBncmVhdGVyIHRoYW4gemVybywgb3IgeGMgcmVwcmVzZW50c1xyXG4gICAgICAgIC8vIHplcm8sIHRoZW4gdGhlIHJlc3VsdCBvZiB0aGUgYmFzZSBjb252ZXJzaW9uIGlzIHplcm8gb3IsIGlmIHJvdW5kaW5nIHVwLCBhIHZhbHVlXHJcbiAgICAgICAgLy8gc3VjaCBhcyAwLjAwMDAxLlxyXG4gICAgICAgIGlmIChkIDwgMSB8fCAheGNbMF0pIHtcclxuXHJcbiAgICAgICAgICAvLyAxXi1kcCBvciAwXHJcbiAgICAgICAgICBzdHIgPSByID8gdG9GaXhlZFBvaW50KGFscGhhYmV0LmNoYXJBdCgxKSwgLWRwLCBhbHBoYWJldC5jaGFyQXQoMCkpIDogYWxwaGFiZXQuY2hhckF0KDApO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcblxyXG4gICAgICAgICAgLy8gVHJ1bmNhdGUgeGMgdG8gdGhlIHJlcXVpcmVkIG51bWJlciBvZiBkZWNpbWFsIHBsYWNlcy5cclxuICAgICAgICAgIHhjLmxlbmd0aCA9IGQ7XHJcblxyXG4gICAgICAgICAgLy8gUm91bmQgdXA/XHJcbiAgICAgICAgICBpZiAocikge1xyXG5cclxuICAgICAgICAgICAgLy8gUm91bmRpbmcgdXAgbWF5IG1lYW4gdGhlIHByZXZpb3VzIGRpZ2l0IGhhcyB0byBiZSByb3VuZGVkIHVwIGFuZCBzbyBvbi5cclxuICAgICAgICAgICAgZm9yICgtLWJhc2VPdXQ7ICsreGNbLS1kXSA+IGJhc2VPdXQ7KSB7XHJcbiAgICAgICAgICAgICAgeGNbZF0gPSAwO1xyXG5cclxuICAgICAgICAgICAgICBpZiAoIWQpIHtcclxuICAgICAgICAgICAgICAgICsrZTtcclxuICAgICAgICAgICAgICAgIHhjID0gWzFdLmNvbmNhdCh4Yyk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgLy8gRGV0ZXJtaW5lIHRyYWlsaW5nIHplcm9zLlxyXG4gICAgICAgICAgZm9yIChrID0geGMubGVuZ3RoOyAheGNbLS1rXTspO1xyXG5cclxuICAgICAgICAgIC8vIEUuZy4gWzQsIDExLCAxNV0gYmVjb21lcyA0YmYuXHJcbiAgICAgICAgICBmb3IgKGkgPSAwLCBzdHIgPSAnJzsgaSA8PSBrOyBzdHIgKz0gYWxwaGFiZXQuY2hhckF0KHhjW2krK10pKTtcclxuXHJcbiAgICAgICAgICAvLyBBZGQgbGVhZGluZyB6ZXJvcywgZGVjaW1hbCBwb2ludCBhbmQgdHJhaWxpbmcgemVyb3MgYXMgcmVxdWlyZWQuXHJcbiAgICAgICAgICBzdHIgPSB0b0ZpeGVkUG9pbnQoc3RyLCBlLCBhbHBoYWJldC5jaGFyQXQoMCkpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gVGhlIGNhbGxlciB3aWxsIGFkZCB0aGUgc2lnbi5cclxuICAgICAgICByZXR1cm4gc3RyO1xyXG4gICAgICB9O1xyXG4gICAgfSkoKTtcclxuXHJcblxyXG4gICAgLy8gUGVyZm9ybSBkaXZpc2lvbiBpbiB0aGUgc3BlY2lmaWVkIGJhc2UuIENhbGxlZCBieSBkaXYgYW5kIGNvbnZlcnRCYXNlLlxyXG4gICAgZGl2ID0gKGZ1bmN0aW9uICgpIHtcclxuXHJcbiAgICAgIC8vIEFzc3VtZSBub24temVybyB4IGFuZCBrLlxyXG4gICAgICBmdW5jdGlvbiBtdWx0aXBseSh4LCBrLCBiYXNlKSB7XHJcbiAgICAgICAgdmFyIG0sIHRlbXAsIHhsbywgeGhpLFxyXG4gICAgICAgICAgY2FycnkgPSAwLFxyXG4gICAgICAgICAgaSA9IHgubGVuZ3RoLFxyXG4gICAgICAgICAga2xvID0gayAlIFNRUlRfQkFTRSxcclxuICAgICAgICAgIGtoaSA9IGsgLyBTUVJUX0JBU0UgfCAwO1xyXG5cclxuICAgICAgICBmb3IgKHggPSB4LnNsaWNlKCk7IGktLTspIHtcclxuICAgICAgICAgIHhsbyA9IHhbaV0gJSBTUVJUX0JBU0U7XHJcbiAgICAgICAgICB4aGkgPSB4W2ldIC8gU1FSVF9CQVNFIHwgMDtcclxuICAgICAgICAgIG0gPSBraGkgKiB4bG8gKyB4aGkgKiBrbG87XHJcbiAgICAgICAgICB0ZW1wID0ga2xvICogeGxvICsgKChtICUgU1FSVF9CQVNFKSAqIFNRUlRfQkFTRSkgKyBjYXJyeTtcclxuICAgICAgICAgIGNhcnJ5ID0gKHRlbXAgLyBiYXNlIHwgMCkgKyAobSAvIFNRUlRfQkFTRSB8IDApICsga2hpICogeGhpO1xyXG4gICAgICAgICAgeFtpXSA9IHRlbXAgJSBiYXNlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGNhcnJ5KSB4ID0gW2NhcnJ5XS5jb25jYXQoeCk7XHJcblxyXG4gICAgICAgIHJldHVybiB4O1xyXG4gICAgICB9XHJcblxyXG4gICAgICBmdW5jdGlvbiBjb21wYXJlKGEsIGIsIGFMLCBiTCkge1xyXG4gICAgICAgIHZhciBpLCBjbXA7XHJcblxyXG4gICAgICAgIGlmIChhTCAhPSBiTCkge1xyXG4gICAgICAgICAgY21wID0gYUwgPiBiTCA/IDEgOiAtMTtcclxuICAgICAgICB9IGVsc2Uge1xyXG5cclxuICAgICAgICAgIGZvciAoaSA9IGNtcCA9IDA7IGkgPCBhTDsgaSsrKSB7XHJcblxyXG4gICAgICAgICAgICBpZiAoYVtpXSAhPSBiW2ldKSB7XHJcbiAgICAgICAgICAgICAgY21wID0gYVtpXSA+IGJbaV0gPyAxIDogLTE7XHJcbiAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBjbXA7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGZ1bmN0aW9uIHN1YnRyYWN0KGEsIGIsIGFMLCBiYXNlKSB7XHJcbiAgICAgICAgdmFyIGkgPSAwO1xyXG5cclxuICAgICAgICAvLyBTdWJ0cmFjdCBiIGZyb20gYS5cclxuICAgICAgICBmb3IgKDsgYUwtLTspIHtcclxuICAgICAgICAgIGFbYUxdIC09IGk7XHJcbiAgICAgICAgICBpID0gYVthTF0gPCBiW2FMXSA/IDEgOiAwO1xyXG4gICAgICAgICAgYVthTF0gPSBpICogYmFzZSArIGFbYUxdIC0gYlthTF07XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBSZW1vdmUgbGVhZGluZyB6ZXJvcy5cclxuICAgICAgICBmb3IgKDsgIWFbMF0gJiYgYS5sZW5ndGggPiAxOyBhLnNwbGljZSgwLCAxKSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vIHg6IGRpdmlkZW5kLCB5OiBkaXZpc29yLlxyXG4gICAgICByZXR1cm4gZnVuY3Rpb24gKHgsIHksIGRwLCBybSwgYmFzZSkge1xyXG4gICAgICAgIHZhciBjbXAsIGUsIGksIG1vcmUsIG4sIHByb2QsIHByb2RMLCBxLCBxYywgcmVtLCByZW1MLCByZW0wLCB4aSwgeEwsIHljMCxcclxuICAgICAgICAgIHlMLCB5eixcclxuICAgICAgICAgIHMgPSB4LnMgPT0geS5zID8gMSA6IC0xLFxyXG4gICAgICAgICAgeGMgPSB4LmMsXHJcbiAgICAgICAgICB5YyA9IHkuYztcclxuXHJcbiAgICAgICAgLy8gRWl0aGVyIE5hTiwgSW5maW5pdHkgb3IgMD9cclxuICAgICAgICBpZiAoIXhjIHx8ICF4Y1swXSB8fCAheWMgfHwgIXljWzBdKSB7XHJcblxyXG4gICAgICAgICAgcmV0dXJuIG5ldyBCaWdOdW1iZXIoXHJcblxyXG4gICAgICAgICAgIC8vIFJldHVybiBOYU4gaWYgZWl0aGVyIE5hTiwgb3IgYm90aCBJbmZpbml0eSBvciAwLlxyXG4gICAgICAgICAgICF4LnMgfHwgIXkucyB8fCAoeGMgPyB5YyAmJiB4Y1swXSA9PSB5Y1swXSA6ICF5YykgPyBOYU4gOlxyXG5cclxuICAgICAgICAgICAgLy8gUmV0dXJuIMKxMCBpZiB4IGlzIMKxMCBvciB5IGlzIMKxSW5maW5pdHksIG9yIHJldHVybiDCsUluZmluaXR5IGFzIHkgaXMgwrEwLlxyXG4gICAgICAgICAgICB4YyAmJiB4Y1swXSA9PSAwIHx8ICF5YyA/IHMgKiAwIDogcyAvIDBcclxuICAgICAgICAgKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHEgPSBuZXcgQmlnTnVtYmVyKHMpO1xyXG4gICAgICAgIHFjID0gcS5jID0gW107XHJcbiAgICAgICAgZSA9IHguZSAtIHkuZTtcclxuICAgICAgICBzID0gZHAgKyBlICsgMTtcclxuXHJcbiAgICAgICAgaWYgKCFiYXNlKSB7XHJcbiAgICAgICAgICBiYXNlID0gQkFTRTtcclxuICAgICAgICAgIGUgPSBiaXRGbG9vcih4LmUgLyBMT0dfQkFTRSkgLSBiaXRGbG9vcih5LmUgLyBMT0dfQkFTRSk7XHJcbiAgICAgICAgICBzID0gcyAvIExPR19CQVNFIHwgMDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIFJlc3VsdCBleHBvbmVudCBtYXkgYmUgb25lIGxlc3MgdGhlbiB0aGUgY3VycmVudCB2YWx1ZSBvZiBlLlxyXG4gICAgICAgIC8vIFRoZSBjb2VmZmljaWVudHMgb2YgdGhlIEJpZ051bWJlcnMgZnJvbSBjb252ZXJ0QmFzZSBtYXkgaGF2ZSB0cmFpbGluZyB6ZXJvcy5cclxuICAgICAgICBmb3IgKGkgPSAwOyB5Y1tpXSA9PSAoeGNbaV0gfHwgMCk7IGkrKyk7XHJcblxyXG4gICAgICAgIGlmICh5Y1tpXSA+ICh4Y1tpXSB8fCAwKSkgZS0tO1xyXG5cclxuICAgICAgICBpZiAocyA8IDApIHtcclxuICAgICAgICAgIHFjLnB1c2goMSk7XHJcbiAgICAgICAgICBtb3JlID0gdHJ1ZTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgeEwgPSB4Yy5sZW5ndGg7XHJcbiAgICAgICAgICB5TCA9IHljLmxlbmd0aDtcclxuICAgICAgICAgIGkgPSAwO1xyXG4gICAgICAgICAgcyArPSAyO1xyXG5cclxuICAgICAgICAgIC8vIE5vcm1hbGlzZSB4YyBhbmQgeWMgc28gaGlnaGVzdCBvcmRlciBkaWdpdCBvZiB5YyBpcyA+PSBiYXNlIC8gMi5cclxuXHJcbiAgICAgICAgICBuID0gbWF0aGZsb29yKGJhc2UgLyAoeWNbMF0gKyAxKSk7XHJcblxyXG4gICAgICAgICAgLy8gTm90IG5lY2Vzc2FyeSwgYnV0IHRvIGhhbmRsZSBvZGQgYmFzZXMgd2hlcmUgeWNbMF0gPT0gKGJhc2UgLyAyKSAtIDEuXHJcbiAgICAgICAgICAvLyBpZiAobiA+IDEgfHwgbisrID09IDEgJiYgeWNbMF0gPCBiYXNlIC8gMikge1xyXG4gICAgICAgICAgaWYgKG4gPiAxKSB7XHJcbiAgICAgICAgICAgIHljID0gbXVsdGlwbHkoeWMsIG4sIGJhc2UpO1xyXG4gICAgICAgICAgICB4YyA9IG11bHRpcGx5KHhjLCBuLCBiYXNlKTtcclxuICAgICAgICAgICAgeUwgPSB5Yy5sZW5ndGg7XHJcbiAgICAgICAgICAgIHhMID0geGMubGVuZ3RoO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIHhpID0geUw7XHJcbiAgICAgICAgICByZW0gPSB4Yy5zbGljZSgwLCB5TCk7XHJcbiAgICAgICAgICByZW1MID0gcmVtLmxlbmd0aDtcclxuXHJcbiAgICAgICAgICAvLyBBZGQgemVyb3MgdG8gbWFrZSByZW1haW5kZXIgYXMgbG9uZyBhcyBkaXZpc29yLlxyXG4gICAgICAgICAgZm9yICg7IHJlbUwgPCB5TDsgcmVtW3JlbUwrK10gPSAwKTtcclxuICAgICAgICAgIHl6ID0geWMuc2xpY2UoKTtcclxuICAgICAgICAgIHl6ID0gWzBdLmNvbmNhdCh5eik7XHJcbiAgICAgICAgICB5YzAgPSB5Y1swXTtcclxuICAgICAgICAgIGlmICh5Y1sxXSA+PSBiYXNlIC8gMikgeWMwKys7XHJcbiAgICAgICAgICAvLyBOb3QgbmVjZXNzYXJ5LCBidXQgdG8gcHJldmVudCB0cmlhbCBkaWdpdCBuID4gYmFzZSwgd2hlbiB1c2luZyBiYXNlIDMuXHJcbiAgICAgICAgICAvLyBlbHNlIGlmIChiYXNlID09IDMgJiYgeWMwID09IDEpIHljMCA9IDEgKyAxZS0xNTtcclxuXHJcbiAgICAgICAgICBkbyB7XHJcbiAgICAgICAgICAgIG4gPSAwO1xyXG5cclxuICAgICAgICAgICAgLy8gQ29tcGFyZSBkaXZpc29yIGFuZCByZW1haW5kZXIuXHJcbiAgICAgICAgICAgIGNtcCA9IGNvbXBhcmUoeWMsIHJlbSwgeUwsIHJlbUwpO1xyXG5cclxuICAgICAgICAgICAgLy8gSWYgZGl2aXNvciA8IHJlbWFpbmRlci5cclxuICAgICAgICAgICAgaWYgKGNtcCA8IDApIHtcclxuXHJcbiAgICAgICAgICAgICAgLy8gQ2FsY3VsYXRlIHRyaWFsIGRpZ2l0LCBuLlxyXG5cclxuICAgICAgICAgICAgICByZW0wID0gcmVtWzBdO1xyXG4gICAgICAgICAgICAgIGlmICh5TCAhPSByZW1MKSByZW0wID0gcmVtMCAqIGJhc2UgKyAocmVtWzFdIHx8IDApO1xyXG5cclxuICAgICAgICAgICAgICAvLyBuIGlzIGhvdyBtYW55IHRpbWVzIHRoZSBkaXZpc29yIGdvZXMgaW50byB0aGUgY3VycmVudCByZW1haW5kZXIuXHJcbiAgICAgICAgICAgICAgbiA9IG1hdGhmbG9vcihyZW0wIC8geWMwKTtcclxuXHJcbiAgICAgICAgICAgICAgLy8gIEFsZ29yaXRobTpcclxuICAgICAgICAgICAgICAvLyAgcHJvZHVjdCA9IGRpdmlzb3IgbXVsdGlwbGllZCBieSB0cmlhbCBkaWdpdCAobikuXHJcbiAgICAgICAgICAgICAgLy8gIENvbXBhcmUgcHJvZHVjdCBhbmQgcmVtYWluZGVyLlxyXG4gICAgICAgICAgICAgIC8vICBJZiBwcm9kdWN0IGlzIGdyZWF0ZXIgdGhhbiByZW1haW5kZXI6XHJcbiAgICAgICAgICAgICAgLy8gICAgU3VidHJhY3QgZGl2aXNvciBmcm9tIHByb2R1Y3QsIGRlY3JlbWVudCB0cmlhbCBkaWdpdC5cclxuICAgICAgICAgICAgICAvLyAgU3VidHJhY3QgcHJvZHVjdCBmcm9tIHJlbWFpbmRlci5cclxuICAgICAgICAgICAgICAvLyAgSWYgcHJvZHVjdCB3YXMgbGVzcyB0aGFuIHJlbWFpbmRlciBhdCB0aGUgbGFzdCBjb21wYXJlOlxyXG4gICAgICAgICAgICAgIC8vICAgIENvbXBhcmUgbmV3IHJlbWFpbmRlciBhbmQgZGl2aXNvci5cclxuICAgICAgICAgICAgICAvLyAgICBJZiByZW1haW5kZXIgaXMgZ3JlYXRlciB0aGFuIGRpdmlzb3I6XHJcbiAgICAgICAgICAgICAgLy8gICAgICBTdWJ0cmFjdCBkaXZpc29yIGZyb20gcmVtYWluZGVyLCBpbmNyZW1lbnQgdHJpYWwgZGlnaXQuXHJcblxyXG4gICAgICAgICAgICAgIGlmIChuID4gMSkge1xyXG5cclxuICAgICAgICAgICAgICAgIC8vIG4gbWF5IGJlID4gYmFzZSBvbmx5IHdoZW4gYmFzZSBpcyAzLlxyXG4gICAgICAgICAgICAgICAgaWYgKG4gPj0gYmFzZSkgbiA9IGJhc2UgLSAxO1xyXG5cclxuICAgICAgICAgICAgICAgIC8vIHByb2R1Y3QgPSBkaXZpc29yICogdHJpYWwgZGlnaXQuXHJcbiAgICAgICAgICAgICAgICBwcm9kID0gbXVsdGlwbHkoeWMsIG4sIGJhc2UpO1xyXG4gICAgICAgICAgICAgICAgcHJvZEwgPSBwcm9kLmxlbmd0aDtcclxuICAgICAgICAgICAgICAgIHJlbUwgPSByZW0ubGVuZ3RoO1xyXG5cclxuICAgICAgICAgICAgICAgIC8vIENvbXBhcmUgcHJvZHVjdCBhbmQgcmVtYWluZGVyLlxyXG4gICAgICAgICAgICAgICAgLy8gSWYgcHJvZHVjdCA+IHJlbWFpbmRlciB0aGVuIHRyaWFsIGRpZ2l0IG4gdG9vIGhpZ2guXHJcbiAgICAgICAgICAgICAgICAvLyBuIGlzIDEgdG9vIGhpZ2ggYWJvdXQgNSUgb2YgdGhlIHRpbWUsIGFuZCBpcyBub3Qga25vd24gdG8gaGF2ZVxyXG4gICAgICAgICAgICAgICAgLy8gZXZlciBiZWVuIG1vcmUgdGhhbiAxIHRvbyBoaWdoLlxyXG4gICAgICAgICAgICAgICAgd2hpbGUgKGNvbXBhcmUocHJvZCwgcmVtLCBwcm9kTCwgcmVtTCkgPT0gMSkge1xyXG4gICAgICAgICAgICAgICAgICBuLS07XHJcblxyXG4gICAgICAgICAgICAgICAgICAvLyBTdWJ0cmFjdCBkaXZpc29yIGZyb20gcHJvZHVjdC5cclxuICAgICAgICAgICAgICAgICAgc3VidHJhY3QocHJvZCwgeUwgPCBwcm9kTCA/IHl6IDogeWMsIHByb2RMLCBiYXNlKTtcclxuICAgICAgICAgICAgICAgICAgcHJvZEwgPSBwcm9kLmxlbmd0aDtcclxuICAgICAgICAgICAgICAgICAgY21wID0gMTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9IGVsc2Uge1xyXG5cclxuICAgICAgICAgICAgICAgIC8vIG4gaXMgMCBvciAxLCBjbXAgaXMgLTEuXHJcbiAgICAgICAgICAgICAgICAvLyBJZiBuIGlzIDAsIHRoZXJlIGlzIG5vIG5lZWQgdG8gY29tcGFyZSB5YyBhbmQgcmVtIGFnYWluIGJlbG93LFxyXG4gICAgICAgICAgICAgICAgLy8gc28gY2hhbmdlIGNtcCB0byAxIHRvIGF2b2lkIGl0LlxyXG4gICAgICAgICAgICAgICAgLy8gSWYgbiBpcyAxLCBsZWF2ZSBjbXAgYXMgLTEsIHNvIHljIGFuZCByZW0gYXJlIGNvbXBhcmVkIGFnYWluLlxyXG4gICAgICAgICAgICAgICAgaWYgKG4gPT0gMCkge1xyXG5cclxuICAgICAgICAgICAgICAgICAgLy8gZGl2aXNvciA8IHJlbWFpbmRlciwgc28gbiBtdXN0IGJlIGF0IGxlYXN0IDEuXHJcbiAgICAgICAgICAgICAgICAgIGNtcCA9IG4gPSAxO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIC8vIHByb2R1Y3QgPSBkaXZpc29yXHJcbiAgICAgICAgICAgICAgICBwcm9kID0geWMuc2xpY2UoKTtcclxuICAgICAgICAgICAgICAgIHByb2RMID0gcHJvZC5sZW5ndGg7XHJcbiAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICBpZiAocHJvZEwgPCByZW1MKSBwcm9kID0gWzBdLmNvbmNhdChwcm9kKTtcclxuXHJcbiAgICAgICAgICAgICAgLy8gU3VidHJhY3QgcHJvZHVjdCBmcm9tIHJlbWFpbmRlci5cclxuICAgICAgICAgICAgICBzdWJ0cmFjdChyZW0sIHByb2QsIHJlbUwsIGJhc2UpO1xyXG4gICAgICAgICAgICAgIHJlbUwgPSByZW0ubGVuZ3RoO1xyXG5cclxuICAgICAgICAgICAgICAgLy8gSWYgcHJvZHVjdCB3YXMgPCByZW1haW5kZXIuXHJcbiAgICAgICAgICAgICAgaWYgKGNtcCA9PSAtMSkge1xyXG5cclxuICAgICAgICAgICAgICAgIC8vIENvbXBhcmUgZGl2aXNvciBhbmQgbmV3IHJlbWFpbmRlci5cclxuICAgICAgICAgICAgICAgIC8vIElmIGRpdmlzb3IgPCBuZXcgcmVtYWluZGVyLCBzdWJ0cmFjdCBkaXZpc29yIGZyb20gcmVtYWluZGVyLlxyXG4gICAgICAgICAgICAgICAgLy8gVHJpYWwgZGlnaXQgbiB0b28gbG93LlxyXG4gICAgICAgICAgICAgICAgLy8gbiBpcyAxIHRvbyBsb3cgYWJvdXQgNSUgb2YgdGhlIHRpbWUsIGFuZCB2ZXJ5IHJhcmVseSAyIHRvbyBsb3cuXHJcbiAgICAgICAgICAgICAgICB3aGlsZSAoY29tcGFyZSh5YywgcmVtLCB5TCwgcmVtTCkgPCAxKSB7XHJcbiAgICAgICAgICAgICAgICAgIG4rKztcclxuXHJcbiAgICAgICAgICAgICAgICAgIC8vIFN1YnRyYWN0IGRpdmlzb3IgZnJvbSByZW1haW5kZXIuXHJcbiAgICAgICAgICAgICAgICAgIHN1YnRyYWN0KHJlbSwgeUwgPCByZW1MID8geXogOiB5YywgcmVtTCwgYmFzZSk7XHJcbiAgICAgICAgICAgICAgICAgIHJlbUwgPSByZW0ubGVuZ3RoO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBlbHNlIGlmIChjbXAgPT09IDApIHtcclxuICAgICAgICAgICAgICBuKys7XHJcbiAgICAgICAgICAgICAgcmVtID0gWzBdO1xyXG4gICAgICAgICAgICB9IC8vIGVsc2UgY21wID09PSAxIGFuZCBuIHdpbGwgYmUgMFxyXG5cclxuICAgICAgICAgICAgLy8gQWRkIHRoZSBuZXh0IGRpZ2l0LCBuLCB0byB0aGUgcmVzdWx0IGFycmF5LlxyXG4gICAgICAgICAgICBxY1tpKytdID0gbjtcclxuXHJcbiAgICAgICAgICAgIC8vIFVwZGF0ZSB0aGUgcmVtYWluZGVyLlxyXG4gICAgICAgICAgICBpZiAocmVtWzBdKSB7XHJcbiAgICAgICAgICAgICAgcmVtW3JlbUwrK10gPSB4Y1t4aV0gfHwgMDtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICByZW0gPSBbeGNbeGldXTtcclxuICAgICAgICAgICAgICByZW1MID0gMTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSB3aGlsZSAoKHhpKysgPCB4TCB8fCByZW1bMF0gIT0gbnVsbCkgJiYgcy0tKTtcclxuXHJcbiAgICAgICAgICBtb3JlID0gcmVtWzBdICE9IG51bGw7XHJcblxyXG4gICAgICAgICAgLy8gTGVhZGluZyB6ZXJvP1xyXG4gICAgICAgICAgaWYgKCFxY1swXSkgcWMuc3BsaWNlKDAsIDEpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGJhc2UgPT0gQkFTRSkge1xyXG5cclxuICAgICAgICAgIC8vIFRvIGNhbGN1bGF0ZSBxLmUsIGZpcnN0IGdldCB0aGUgbnVtYmVyIG9mIGRpZ2l0cyBvZiBxY1swXS5cclxuICAgICAgICAgIGZvciAoaSA9IDEsIHMgPSBxY1swXTsgcyA+PSAxMDsgcyAvPSAxMCwgaSsrKTtcclxuXHJcbiAgICAgICAgICByb3VuZChxLCBkcCArIChxLmUgPSBpICsgZSAqIExPR19CQVNFIC0gMSkgKyAxLCBybSwgbW9yZSk7XHJcblxyXG4gICAgICAgIC8vIENhbGxlciBpcyBjb252ZXJ0QmFzZS5cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgcS5lID0gZTtcclxuICAgICAgICAgIHEuciA9ICttb3JlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHE7XHJcbiAgICAgIH07XHJcbiAgICB9KSgpO1xyXG5cclxuXHJcbiAgICAvKlxyXG4gICAgICogUmV0dXJuIGEgc3RyaW5nIHJlcHJlc2VudGluZyB0aGUgdmFsdWUgb2YgQmlnTnVtYmVyIG4gaW4gZml4ZWQtcG9pbnQgb3IgZXhwb25lbnRpYWxcclxuICAgICAqIG5vdGF0aW9uIHJvdW5kZWQgdG8gdGhlIHNwZWNpZmllZCBkZWNpbWFsIHBsYWNlcyBvciBzaWduaWZpY2FudCBkaWdpdHMuXHJcbiAgICAgKlxyXG4gICAgICogbjogYSBCaWdOdW1iZXIuXHJcbiAgICAgKiBpOiB0aGUgaW5kZXggb2YgdGhlIGxhc3QgZGlnaXQgcmVxdWlyZWQgKGkuZS4gdGhlIGRpZ2l0IHRoYXQgbWF5IGJlIHJvdW5kZWQgdXApLlxyXG4gICAgICogcm06IHRoZSByb3VuZGluZyBtb2RlLlxyXG4gICAgICogaWQ6IDEgKHRvRXhwb25lbnRpYWwpIG9yIDIgKHRvUHJlY2lzaW9uKS5cclxuICAgICAqL1xyXG4gICAgZnVuY3Rpb24gZm9ybWF0KG4sIGksIHJtLCBpZCkge1xyXG4gICAgICB2YXIgYzAsIGUsIG5lLCBsZW4sIHN0cjtcclxuXHJcbiAgICAgIGlmIChybSA9PSBudWxsKSBybSA9IFJPVU5ESU5HX01PREU7XHJcbiAgICAgIGVsc2UgaW50Q2hlY2socm0sIDAsIDgpO1xyXG5cclxuICAgICAgaWYgKCFuLmMpIHJldHVybiBuLnRvU3RyaW5nKCk7XHJcblxyXG4gICAgICBjMCA9IG4uY1swXTtcclxuICAgICAgbmUgPSBuLmU7XHJcblxyXG4gICAgICBpZiAoaSA9PSBudWxsKSB7XHJcbiAgICAgICAgc3RyID0gY29lZmZUb1N0cmluZyhuLmMpO1xyXG4gICAgICAgIHN0ciA9IGlkID09IDEgfHwgaWQgPT0gMiAmJiAobmUgPD0gVE9fRVhQX05FRyB8fCBuZSA+PSBUT19FWFBfUE9TKVxyXG4gICAgICAgICA/IHRvRXhwb25lbnRpYWwoc3RyLCBuZSlcclxuICAgICAgICAgOiB0b0ZpeGVkUG9pbnQoc3RyLCBuZSwgJzAnKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBuID0gcm91bmQobmV3IEJpZ051bWJlcihuKSwgaSwgcm0pO1xyXG5cclxuICAgICAgICAvLyBuLmUgbWF5IGhhdmUgY2hhbmdlZCBpZiB0aGUgdmFsdWUgd2FzIHJvdW5kZWQgdXAuXHJcbiAgICAgICAgZSA9IG4uZTtcclxuXHJcbiAgICAgICAgc3RyID0gY29lZmZUb1N0cmluZyhuLmMpO1xyXG4gICAgICAgIGxlbiA9IHN0ci5sZW5ndGg7XHJcblxyXG4gICAgICAgIC8vIHRvUHJlY2lzaW9uIHJldHVybnMgZXhwb25lbnRpYWwgbm90YXRpb24gaWYgdGhlIG51bWJlciBvZiBzaWduaWZpY2FudCBkaWdpdHNcclxuICAgICAgICAvLyBzcGVjaWZpZWQgaXMgbGVzcyB0aGFuIHRoZSBudW1iZXIgb2YgZGlnaXRzIG5lY2Vzc2FyeSB0byByZXByZXNlbnQgdGhlIGludGVnZXJcclxuICAgICAgICAvLyBwYXJ0IG9mIHRoZSB2YWx1ZSBpbiBmaXhlZC1wb2ludCBub3RhdGlvbi5cclxuXHJcbiAgICAgICAgLy8gRXhwb25lbnRpYWwgbm90YXRpb24uXHJcbiAgICAgICAgaWYgKGlkID09IDEgfHwgaWQgPT0gMiAmJiAoaSA8PSBlIHx8IGUgPD0gVE9fRVhQX05FRykpIHtcclxuXHJcbiAgICAgICAgICAvLyBBcHBlbmQgemVyb3M/XHJcbiAgICAgICAgICBmb3IgKDsgbGVuIDwgaTsgc3RyICs9ICcwJywgbGVuKyspO1xyXG4gICAgICAgICAgc3RyID0gdG9FeHBvbmVudGlhbChzdHIsIGUpO1xyXG5cclxuICAgICAgICAvLyBGaXhlZC1wb2ludCBub3RhdGlvbi5cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgaSAtPSBuZTtcclxuICAgICAgICAgIHN0ciA9IHRvRml4ZWRQb2ludChzdHIsIGUsICcwJyk7XHJcblxyXG4gICAgICAgICAgLy8gQXBwZW5kIHplcm9zP1xyXG4gICAgICAgICAgaWYgKGUgKyAxID4gbGVuKSB7XHJcbiAgICAgICAgICAgIGlmICgtLWkgPiAwKSBmb3IgKHN0ciArPSAnLic7IGktLTsgc3RyICs9ICcwJyk7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBpICs9IGUgLSBsZW47XHJcbiAgICAgICAgICAgIGlmIChpID4gMCkge1xyXG4gICAgICAgICAgICAgIGlmIChlICsgMSA9PSBsZW4pIHN0ciArPSAnLic7XHJcbiAgICAgICAgICAgICAgZm9yICg7IGktLTsgc3RyICs9ICcwJyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJldHVybiBuLnMgPCAwICYmIGMwID8gJy0nICsgc3RyIDogc3RyO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvLyBIYW5kbGUgQmlnTnVtYmVyLm1heCBhbmQgQmlnTnVtYmVyLm1pbi5cclxuICAgIGZ1bmN0aW9uIG1heE9yTWluKGFyZ3MsIG1ldGhvZCkge1xyXG4gICAgICB2YXIgbixcclxuICAgICAgICBpID0gMSxcclxuICAgICAgICBtID0gbmV3IEJpZ051bWJlcihhcmdzWzBdKTtcclxuXHJcbiAgICAgIGZvciAoOyBpIDwgYXJncy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIG4gPSBuZXcgQmlnTnVtYmVyKGFyZ3NbaV0pO1xyXG5cclxuICAgICAgICAvLyBJZiBhbnkgbnVtYmVyIGlzIE5hTiwgcmV0dXJuIE5hTi5cclxuICAgICAgICBpZiAoIW4ucykge1xyXG4gICAgICAgICAgbSA9IG47XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICB9IGVsc2UgaWYgKG1ldGhvZC5jYWxsKG0sIG4pKSB7XHJcbiAgICAgICAgICBtID0gbjtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJldHVybiBtO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvKlxyXG4gICAgICogU3RyaXAgdHJhaWxpbmcgemVyb3MsIGNhbGN1bGF0ZSBiYXNlIDEwIGV4cG9uZW50IGFuZCBjaGVjayBhZ2FpbnN0IE1JTl9FWFAgYW5kIE1BWF9FWFAuXHJcbiAgICAgKiBDYWxsZWQgYnkgbWludXMsIHBsdXMgYW5kIHRpbWVzLlxyXG4gICAgICovXHJcbiAgICBmdW5jdGlvbiBub3JtYWxpc2UobiwgYywgZSkge1xyXG4gICAgICB2YXIgaSA9IDEsXHJcbiAgICAgICAgaiA9IGMubGVuZ3RoO1xyXG5cclxuICAgICAgIC8vIFJlbW92ZSB0cmFpbGluZyB6ZXJvcy5cclxuICAgICAgZm9yICg7ICFjWy0tal07IGMucG9wKCkpO1xyXG5cclxuICAgICAgLy8gQ2FsY3VsYXRlIHRoZSBiYXNlIDEwIGV4cG9uZW50LiBGaXJzdCBnZXQgdGhlIG51bWJlciBvZiBkaWdpdHMgb2YgY1swXS5cclxuICAgICAgZm9yIChqID0gY1swXTsgaiA+PSAxMDsgaiAvPSAxMCwgaSsrKTtcclxuXHJcbiAgICAgIC8vIE92ZXJmbG93P1xyXG4gICAgICBpZiAoKGUgPSBpICsgZSAqIExPR19CQVNFIC0gMSkgPiBNQVhfRVhQKSB7XHJcblxyXG4gICAgICAgIC8vIEluZmluaXR5LlxyXG4gICAgICAgIG4uYyA9IG4uZSA9IG51bGw7XHJcblxyXG4gICAgICAvLyBVbmRlcmZsb3c/XHJcbiAgICAgIH0gZWxzZSBpZiAoZSA8IE1JTl9FWFApIHtcclxuXHJcbiAgICAgICAgLy8gWmVyby5cclxuICAgICAgICBuLmMgPSBbbi5lID0gMF07XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgbi5lID0gZTtcclxuICAgICAgICBuLmMgPSBjO1xyXG4gICAgICB9XHJcblxyXG4gICAgICByZXR1cm4gbjtcclxuICAgIH1cclxuXHJcblxyXG4gICAgLy8gSGFuZGxlIHZhbHVlcyB0aGF0IGZhaWwgdGhlIHZhbGlkaXR5IHRlc3QgaW4gQmlnTnVtYmVyLlxyXG4gICAgcGFyc2VOdW1lcmljID0gKGZ1bmN0aW9uICgpIHtcclxuICAgICAgdmFyIGJhc2VQcmVmaXggPSAvXigtPykwKFt4Ym9dKSg/PVxcd1tcXHcuXSokKS9pLFxyXG4gICAgICAgIGRvdEFmdGVyID0gL14oW14uXSspXFwuJC8sXHJcbiAgICAgICAgZG90QmVmb3JlID0gL15cXC4oW14uXSspJC8sXHJcbiAgICAgICAgaXNJbmZpbml0eU9yTmFOID0gL14tPyhJbmZpbml0eXxOYU4pJC8sXHJcbiAgICAgICAgd2hpdGVzcGFjZU9yUGx1cyA9IC9eXFxzKlxcKyg/PVtcXHcuXSl8Xlxccyt8XFxzKyQvZztcclxuXHJcbiAgICAgIHJldHVybiBmdW5jdGlvbiAoeCwgc3RyLCBpc051bSwgYikge1xyXG4gICAgICAgIHZhciBiYXNlLFxyXG4gICAgICAgICAgcyA9IGlzTnVtID8gc3RyIDogc3RyLnJlcGxhY2Uod2hpdGVzcGFjZU9yUGx1cywgJycpO1xyXG5cclxuICAgICAgICAvLyBObyBleGNlcHRpb24gb24gwrFJbmZpbml0eSBvciBOYU4uXHJcbiAgICAgICAgaWYgKGlzSW5maW5pdHlPck5hTi50ZXN0KHMpKSB7XHJcbiAgICAgICAgICB4LnMgPSBpc05hTihzKSA/IG51bGwgOiBzIDwgMCA/IC0xIDogMTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgaWYgKCFpc051bSkge1xyXG5cclxuICAgICAgICAgICAgLy8gYmFzZVByZWZpeCA9IC9eKC0/KTAoW3hib10pKD89XFx3W1xcdy5dKiQpL2lcclxuICAgICAgICAgICAgcyA9IHMucmVwbGFjZShiYXNlUHJlZml4LCBmdW5jdGlvbiAobSwgcDEsIHAyKSB7XHJcbiAgICAgICAgICAgICAgYmFzZSA9IChwMiA9IHAyLnRvTG93ZXJDYXNlKCkpID09ICd4JyA/IDE2IDogcDIgPT0gJ2InID8gMiA6IDg7XHJcbiAgICAgICAgICAgICAgcmV0dXJuICFiIHx8IGIgPT0gYmFzZSA/IHAxIDogbTtcclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICBpZiAoYikge1xyXG4gICAgICAgICAgICAgIGJhc2UgPSBiO1xyXG5cclxuICAgICAgICAgICAgICAvLyBFLmcuICcxLicgdG8gJzEnLCAnLjEnIHRvICcwLjEnXHJcbiAgICAgICAgICAgICAgcyA9IHMucmVwbGFjZShkb3RBZnRlciwgJyQxJykucmVwbGFjZShkb3RCZWZvcmUsICcwLiQxJyk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmIChzdHIgIT0gcykgcmV0dXJuIG5ldyBCaWdOdW1iZXIocywgYmFzZSk7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgLy8gJ1tCaWdOdW1iZXIgRXJyb3JdIE5vdCBhIG51bWJlcjoge259J1xyXG4gICAgICAgICAgLy8gJ1tCaWdOdW1iZXIgRXJyb3JdIE5vdCBhIGJhc2Uge2J9IG51bWJlcjoge259J1xyXG4gICAgICAgICAgaWYgKEJpZ051bWJlci5ERUJVRykge1xyXG4gICAgICAgICAgICB0aHJvdyBFcnJvclxyXG4gICAgICAgICAgICAgIChiaWdudW1iZXJFcnJvciArICdOb3QgYScgKyAoYiA/ICcgYmFzZSAnICsgYiA6ICcnKSArICcgbnVtYmVyOiAnICsgc3RyKTtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAvLyBOYU5cclxuICAgICAgICAgIHgucyA9IG51bGw7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB4LmMgPSB4LmUgPSBudWxsO1xyXG4gICAgICB9XHJcbiAgICB9KSgpO1xyXG5cclxuXHJcbiAgICAvKlxyXG4gICAgICogUm91bmQgeCB0byBzZCBzaWduaWZpY2FudCBkaWdpdHMgdXNpbmcgcm91bmRpbmcgbW9kZSBybS4gQ2hlY2sgZm9yIG92ZXIvdW5kZXItZmxvdy5cclxuICAgICAqIElmIHIgaXMgdHJ1dGh5LCBpdCBpcyBrbm93biB0aGF0IHRoZXJlIGFyZSBtb3JlIGRpZ2l0cyBhZnRlciB0aGUgcm91bmRpbmcgZGlnaXQuXHJcbiAgICAgKi9cclxuICAgIGZ1bmN0aW9uIHJvdW5kKHgsIHNkLCBybSwgcikge1xyXG4gICAgICB2YXIgZCwgaSwgaiwgaywgbiwgbmksIHJkLFxyXG4gICAgICAgIHhjID0geC5jLFxyXG4gICAgICAgIHBvd3MxMCA9IFBPV1NfVEVOO1xyXG5cclxuICAgICAgLy8gaWYgeCBpcyBub3QgSW5maW5pdHkgb3IgTmFOLi4uXHJcbiAgICAgIGlmICh4Yykge1xyXG5cclxuICAgICAgICAvLyByZCBpcyB0aGUgcm91bmRpbmcgZGlnaXQsIGkuZS4gdGhlIGRpZ2l0IGFmdGVyIHRoZSBkaWdpdCB0aGF0IG1heSBiZSByb3VuZGVkIHVwLlxyXG4gICAgICAgIC8vIG4gaXMgYSBiYXNlIDFlMTQgbnVtYmVyLCB0aGUgdmFsdWUgb2YgdGhlIGVsZW1lbnQgb2YgYXJyYXkgeC5jIGNvbnRhaW5pbmcgcmQuXHJcbiAgICAgICAgLy8gbmkgaXMgdGhlIGluZGV4IG9mIG4gd2l0aGluIHguYy5cclxuICAgICAgICAvLyBkIGlzIHRoZSBudW1iZXIgb2YgZGlnaXRzIG9mIG4uXHJcbiAgICAgICAgLy8gaSBpcyB0aGUgaW5kZXggb2YgcmQgd2l0aGluIG4gaW5jbHVkaW5nIGxlYWRpbmcgemVyb3MuXHJcbiAgICAgICAgLy8gaiBpcyB0aGUgYWN0dWFsIGluZGV4IG9mIHJkIHdpdGhpbiBuIChpZiA8IDAsIHJkIGlzIGEgbGVhZGluZyB6ZXJvKS5cclxuICAgICAgICBvdXQ6IHtcclxuXHJcbiAgICAgICAgICAvLyBHZXQgdGhlIG51bWJlciBvZiBkaWdpdHMgb2YgdGhlIGZpcnN0IGVsZW1lbnQgb2YgeGMuXHJcbiAgICAgICAgICBmb3IgKGQgPSAxLCBrID0geGNbMF07IGsgPj0gMTA7IGsgLz0gMTAsIGQrKyk7XHJcbiAgICAgICAgICBpID0gc2QgLSBkO1xyXG5cclxuICAgICAgICAgIC8vIElmIHRoZSByb3VuZGluZyBkaWdpdCBpcyBpbiB0aGUgZmlyc3QgZWxlbWVudCBvZiB4Yy4uLlxyXG4gICAgICAgICAgaWYgKGkgPCAwKSB7XHJcbiAgICAgICAgICAgIGkgKz0gTE9HX0JBU0U7XHJcbiAgICAgICAgICAgIGogPSBzZDtcclxuICAgICAgICAgICAgbiA9IHhjW25pID0gMF07XHJcblxyXG4gICAgICAgICAgICAvLyBHZXQgdGhlIHJvdW5kaW5nIGRpZ2l0IGF0IGluZGV4IGogb2Ygbi5cclxuICAgICAgICAgICAgcmQgPSBuIC8gcG93czEwW2QgLSBqIC0gMV0gJSAxMCB8IDA7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBuaSA9IG1hdGhjZWlsKChpICsgMSkgLyBMT0dfQkFTRSk7XHJcblxyXG4gICAgICAgICAgICBpZiAobmkgPj0geGMubGVuZ3RoKSB7XHJcblxyXG4gICAgICAgICAgICAgIGlmIChyKSB7XHJcblxyXG4gICAgICAgICAgICAgICAgLy8gTmVlZGVkIGJ5IHNxcnQuXHJcbiAgICAgICAgICAgICAgICBmb3IgKDsgeGMubGVuZ3RoIDw9IG5pOyB4Yy5wdXNoKDApKTtcclxuICAgICAgICAgICAgICAgIG4gPSByZCA9IDA7XHJcbiAgICAgICAgICAgICAgICBkID0gMTtcclxuICAgICAgICAgICAgICAgIGkgJT0gTE9HX0JBU0U7XHJcbiAgICAgICAgICAgICAgICBqID0gaSAtIExPR19CQVNFICsgMTtcclxuICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgYnJlYWsgb3V0O1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICBuID0gayA9IHhjW25pXTtcclxuXHJcbiAgICAgICAgICAgICAgLy8gR2V0IHRoZSBudW1iZXIgb2YgZGlnaXRzIG9mIG4uXHJcbiAgICAgICAgICAgICAgZm9yIChkID0gMTsgayA+PSAxMDsgayAvPSAxMCwgZCsrKTtcclxuXHJcbiAgICAgICAgICAgICAgLy8gR2V0IHRoZSBpbmRleCBvZiByZCB3aXRoaW4gbi5cclxuICAgICAgICAgICAgICBpICU9IExPR19CQVNFO1xyXG5cclxuICAgICAgICAgICAgICAvLyBHZXQgdGhlIGluZGV4IG9mIHJkIHdpdGhpbiBuLCBhZGp1c3RlZCBmb3IgbGVhZGluZyB6ZXJvcy5cclxuICAgICAgICAgICAgICAvLyBUaGUgbnVtYmVyIG9mIGxlYWRpbmcgemVyb3Mgb2YgbiBpcyBnaXZlbiBieSBMT0dfQkFTRSAtIGQuXHJcbiAgICAgICAgICAgICAgaiA9IGkgLSBMT0dfQkFTRSArIGQ7XHJcblxyXG4gICAgICAgICAgICAgIC8vIEdldCB0aGUgcm91bmRpbmcgZGlnaXQgYXQgaW5kZXggaiBvZiBuLlxyXG4gICAgICAgICAgICAgIHJkID0gaiA8IDAgPyAwIDogbiAvIHBvd3MxMFtkIC0gaiAtIDFdICUgMTAgfCAwO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgciA9IHIgfHwgc2QgPCAwIHx8XHJcblxyXG4gICAgICAgICAgLy8gQXJlIHRoZXJlIGFueSBub24temVybyBkaWdpdHMgYWZ0ZXIgdGhlIHJvdW5kaW5nIGRpZ2l0P1xyXG4gICAgICAgICAgLy8gVGhlIGV4cHJlc3Npb24gIG4gJSBwb3dzMTBbZCAtIGogLSAxXSAgcmV0dXJucyBhbGwgZGlnaXRzIG9mIG4gdG8gdGhlIHJpZ2h0XHJcbiAgICAgICAgICAvLyBvZiB0aGUgZGlnaXQgYXQgaiwgZS5nLiBpZiBuIGlzIDkwODcxNCBhbmQgaiBpcyAyLCB0aGUgZXhwcmVzc2lvbiBnaXZlcyA3MTQuXHJcbiAgICAgICAgICAgeGNbbmkgKyAxXSAhPSBudWxsIHx8IChqIDwgMCA/IG4gOiBuICUgcG93czEwW2QgLSBqIC0gMV0pO1xyXG5cclxuICAgICAgICAgIHIgPSBybSA8IDRcclxuICAgICAgICAgICA/IChyZCB8fCByKSAmJiAocm0gPT0gMCB8fCBybSA9PSAoeC5zIDwgMCA/IDMgOiAyKSlcclxuICAgICAgICAgICA6IHJkID4gNSB8fCByZCA9PSA1ICYmIChybSA9PSA0IHx8IHIgfHwgcm0gPT0gNiAmJlxyXG5cclxuICAgICAgICAgICAgLy8gQ2hlY2sgd2hldGhlciB0aGUgZGlnaXQgdG8gdGhlIGxlZnQgb2YgdGhlIHJvdW5kaW5nIGRpZ2l0IGlzIG9kZC5cclxuICAgICAgICAgICAgKChpID4gMCA/IGogPiAwID8gbiAvIHBvd3MxMFtkIC0gal0gOiAwIDogeGNbbmkgLSAxXSkgJSAxMCkgJiAxIHx8XHJcbiAgICAgICAgICAgICBybSA9PSAoeC5zIDwgMCA/IDggOiA3KSk7XHJcblxyXG4gICAgICAgICAgaWYgKHNkIDwgMSB8fCAheGNbMF0pIHtcclxuICAgICAgICAgICAgeGMubGVuZ3RoID0gMDtcclxuXHJcbiAgICAgICAgICAgIGlmIChyKSB7XHJcblxyXG4gICAgICAgICAgICAgIC8vIENvbnZlcnQgc2QgdG8gZGVjaW1hbCBwbGFjZXMuXHJcbiAgICAgICAgICAgICAgc2QgLT0geC5lICsgMTtcclxuXHJcbiAgICAgICAgICAgICAgLy8gMSwgMC4xLCAwLjAxLCAwLjAwMSwgMC4wMDAxIGV0Yy5cclxuICAgICAgICAgICAgICB4Y1swXSA9IHBvd3MxMFsoTE9HX0JBU0UgLSBzZCAlIExPR19CQVNFKSAlIExPR19CQVNFXTtcclxuICAgICAgICAgICAgICB4LmUgPSAtc2QgfHwgMDtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuXHJcbiAgICAgICAgICAgICAgLy8gWmVyby5cclxuICAgICAgICAgICAgICB4Y1swXSA9IHguZSA9IDA7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHJldHVybiB4O1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIC8vIFJlbW92ZSBleGNlc3MgZGlnaXRzLlxyXG4gICAgICAgICAgaWYgKGkgPT0gMCkge1xyXG4gICAgICAgICAgICB4Yy5sZW5ndGggPSBuaTtcclxuICAgICAgICAgICAgayA9IDE7XHJcbiAgICAgICAgICAgIG5pLS07XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB4Yy5sZW5ndGggPSBuaSArIDE7XHJcbiAgICAgICAgICAgIGsgPSBwb3dzMTBbTE9HX0JBU0UgLSBpXTtcclxuXHJcbiAgICAgICAgICAgIC8vIEUuZy4gNTY3MDAgYmVjb21lcyA1NjAwMCBpZiA3IGlzIHRoZSByb3VuZGluZyBkaWdpdC5cclxuICAgICAgICAgICAgLy8gaiA+IDAgbWVhbnMgaSA+IG51bWJlciBvZiBsZWFkaW5nIHplcm9zIG9mIG4uXHJcbiAgICAgICAgICAgIHhjW25pXSA9IGogPiAwID8gbWF0aGZsb29yKG4gLyBwb3dzMTBbZCAtIGpdICUgcG93czEwW2pdKSAqIGsgOiAwO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIC8vIFJvdW5kIHVwP1xyXG4gICAgICAgICAgaWYgKHIpIHtcclxuXHJcbiAgICAgICAgICAgIGZvciAoOyA7KSB7XHJcblxyXG4gICAgICAgICAgICAgIC8vIElmIHRoZSBkaWdpdCB0byBiZSByb3VuZGVkIHVwIGlzIGluIHRoZSBmaXJzdCBlbGVtZW50IG9mIHhjLi4uXHJcbiAgICAgICAgICAgICAgaWYgKG5pID09IDApIHtcclxuXHJcbiAgICAgICAgICAgICAgICAvLyBpIHdpbGwgYmUgdGhlIGxlbmd0aCBvZiB4Y1swXSBiZWZvcmUgayBpcyBhZGRlZC5cclxuICAgICAgICAgICAgICAgIGZvciAoaSA9IDEsIGogPSB4Y1swXTsgaiA+PSAxMDsgaiAvPSAxMCwgaSsrKTtcclxuICAgICAgICAgICAgICAgIGogPSB4Y1swXSArPSBrO1xyXG4gICAgICAgICAgICAgICAgZm9yIChrID0gMTsgaiA+PSAxMDsgaiAvPSAxMCwgaysrKTtcclxuXHJcbiAgICAgICAgICAgICAgICAvLyBpZiBpICE9IGsgdGhlIGxlbmd0aCBoYXMgaW5jcmVhc2VkLlxyXG4gICAgICAgICAgICAgICAgaWYgKGkgIT0gaykge1xyXG4gICAgICAgICAgICAgICAgICB4LmUrKztcclxuICAgICAgICAgICAgICAgICAgaWYgKHhjWzBdID09IEJBU0UpIHhjWzBdID0gMTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgeGNbbmldICs9IGs7XHJcbiAgICAgICAgICAgICAgICBpZiAoeGNbbmldICE9IEJBU0UpIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgeGNbbmktLV0gPSAwO1xyXG4gICAgICAgICAgICAgICAgayA9IDE7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgLy8gUmVtb3ZlIHRyYWlsaW5nIHplcm9zLlxyXG4gICAgICAgICAgZm9yIChpID0geGMubGVuZ3RoOyB4Y1stLWldID09PSAwOyB4Yy5wb3AoKSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBPdmVyZmxvdz8gSW5maW5pdHkuXHJcbiAgICAgICAgaWYgKHguZSA+IE1BWF9FWFApIHtcclxuICAgICAgICAgIHguYyA9IHguZSA9IG51bGw7XHJcblxyXG4gICAgICAgIC8vIFVuZGVyZmxvdz8gWmVyby5cclxuICAgICAgICB9IGVsc2UgaWYgKHguZSA8IE1JTl9FWFApIHtcclxuICAgICAgICAgIHguYyA9IFt4LmUgPSAwXTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJldHVybiB4O1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICBmdW5jdGlvbiB2YWx1ZU9mKG4pIHtcclxuICAgICAgdmFyIHN0cixcclxuICAgICAgICBlID0gbi5lO1xyXG5cclxuICAgICAgaWYgKGUgPT09IG51bGwpIHJldHVybiBuLnRvU3RyaW5nKCk7XHJcblxyXG4gICAgICBzdHIgPSBjb2VmZlRvU3RyaW5nKG4uYyk7XHJcblxyXG4gICAgICBzdHIgPSBlIDw9IFRPX0VYUF9ORUcgfHwgZSA+PSBUT19FWFBfUE9TXHJcbiAgICAgICAgPyB0b0V4cG9uZW50aWFsKHN0ciwgZSlcclxuICAgICAgICA6IHRvRml4ZWRQb2ludChzdHIsIGUsICcwJyk7XHJcblxyXG4gICAgICByZXR1cm4gbi5zIDwgMCA/ICctJyArIHN0ciA6IHN0cjtcclxuICAgIH1cclxuXHJcblxyXG4gICAgLy8gUFJPVE9UWVBFL0lOU1RBTkNFIE1FVEhPRFNcclxuXHJcblxyXG4gICAgLypcclxuICAgICAqIFJldHVybiBhIG5ldyBCaWdOdW1iZXIgd2hvc2UgdmFsdWUgaXMgdGhlIGFic29sdXRlIHZhbHVlIG9mIHRoaXMgQmlnTnVtYmVyLlxyXG4gICAgICovXHJcbiAgICBQLmFic29sdXRlVmFsdWUgPSBQLmFicyA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgdmFyIHggPSBuZXcgQmlnTnVtYmVyKHRoaXMpO1xyXG4gICAgICBpZiAoeC5zIDwgMCkgeC5zID0gMTtcclxuICAgICAgcmV0dXJuIHg7XHJcbiAgICB9O1xyXG5cclxuXHJcbiAgICAvKlxyXG4gICAgICogUmV0dXJuXHJcbiAgICAgKiAgIDEgaWYgdGhlIHZhbHVlIG9mIHRoaXMgQmlnTnVtYmVyIGlzIGdyZWF0ZXIgdGhhbiB0aGUgdmFsdWUgb2YgQmlnTnVtYmVyKHksIGIpLFxyXG4gICAgICogICAtMSBpZiB0aGUgdmFsdWUgb2YgdGhpcyBCaWdOdW1iZXIgaXMgbGVzcyB0aGFuIHRoZSB2YWx1ZSBvZiBCaWdOdW1iZXIoeSwgYiksXHJcbiAgICAgKiAgIDAgaWYgdGhleSBoYXZlIHRoZSBzYW1lIHZhbHVlLFxyXG4gICAgICogICBvciBudWxsIGlmIHRoZSB2YWx1ZSBvZiBlaXRoZXIgaXMgTmFOLlxyXG4gICAgICovXHJcbiAgICBQLmNvbXBhcmVkVG8gPSBmdW5jdGlvbiAoeSwgYikge1xyXG4gICAgICByZXR1cm4gY29tcGFyZSh0aGlzLCBuZXcgQmlnTnVtYmVyKHksIGIpKTtcclxuICAgIH07XHJcblxyXG5cclxuICAgIC8qXHJcbiAgICAgKiBJZiBkcCBpcyB1bmRlZmluZWQgb3IgbnVsbCBvciB0cnVlIG9yIGZhbHNlLCByZXR1cm4gdGhlIG51bWJlciBvZiBkZWNpbWFsIHBsYWNlcyBvZiB0aGVcclxuICAgICAqIHZhbHVlIG9mIHRoaXMgQmlnTnVtYmVyLCBvciBudWxsIGlmIHRoZSB2YWx1ZSBvZiB0aGlzIEJpZ051bWJlciBpcyDCsUluZmluaXR5IG9yIE5hTi5cclxuICAgICAqXHJcbiAgICAgKiBPdGhlcndpc2UsIGlmIGRwIGlzIGEgbnVtYmVyLCByZXR1cm4gYSBuZXcgQmlnTnVtYmVyIHdob3NlIHZhbHVlIGlzIHRoZSB2YWx1ZSBvZiB0aGlzXHJcbiAgICAgKiBCaWdOdW1iZXIgcm91bmRlZCB0byBhIG1heGltdW0gb2YgZHAgZGVjaW1hbCBwbGFjZXMgdXNpbmcgcm91bmRpbmcgbW9kZSBybSwgb3JcclxuICAgICAqIFJPVU5ESU5HX01PREUgaWYgcm0gaXMgb21pdHRlZC5cclxuICAgICAqXHJcbiAgICAgKiBbZHBdIHtudW1iZXJ9IERlY2ltYWwgcGxhY2VzOiBpbnRlZ2VyLCAwIHRvIE1BWCBpbmNsdXNpdmUuXHJcbiAgICAgKiBbcm1dIHtudW1iZXJ9IFJvdW5kaW5nIG1vZGUuIEludGVnZXIsIDAgdG8gOCBpbmNsdXNpdmUuXHJcbiAgICAgKlxyXG4gICAgICogJ1tCaWdOdW1iZXIgRXJyb3JdIEFyZ3VtZW50IHtub3QgYSBwcmltaXRpdmUgbnVtYmVyfG5vdCBhbiBpbnRlZ2VyfG91dCBvZiByYW5nZX06IHtkcHxybX0nXHJcbiAgICAgKi9cclxuICAgIFAuZGVjaW1hbFBsYWNlcyA9IFAuZHAgPSBmdW5jdGlvbiAoZHAsIHJtKSB7XHJcbiAgICAgIHZhciBjLCBuLCB2LFxyXG4gICAgICAgIHggPSB0aGlzO1xyXG5cclxuICAgICAgaWYgKGRwICE9IG51bGwpIHtcclxuICAgICAgICBpbnRDaGVjayhkcCwgMCwgTUFYKTtcclxuICAgICAgICBpZiAocm0gPT0gbnVsbCkgcm0gPSBST1VORElOR19NT0RFO1xyXG4gICAgICAgIGVsc2UgaW50Q2hlY2socm0sIDAsIDgpO1xyXG5cclxuICAgICAgICByZXR1cm4gcm91bmQobmV3IEJpZ051bWJlcih4KSwgZHAgKyB4LmUgKyAxLCBybSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmICghKGMgPSB4LmMpKSByZXR1cm4gbnVsbDtcclxuICAgICAgbiA9ICgodiA9IGMubGVuZ3RoIC0gMSkgLSBiaXRGbG9vcih0aGlzLmUgLyBMT0dfQkFTRSkpICogTE9HX0JBU0U7XHJcblxyXG4gICAgICAvLyBTdWJ0cmFjdCB0aGUgbnVtYmVyIG9mIHRyYWlsaW5nIHplcm9zIG9mIHRoZSBsYXN0IG51bWJlci5cclxuICAgICAgaWYgKHYgPSBjW3ZdKSBmb3IgKDsgdiAlIDEwID09IDA7IHYgLz0gMTAsIG4tLSk7XHJcbiAgICAgIGlmIChuIDwgMCkgbiA9IDA7XHJcblxyXG4gICAgICByZXR1cm4gbjtcclxuICAgIH07XHJcblxyXG5cclxuICAgIC8qXHJcbiAgICAgKiAgbiAvIDAgPSBJXHJcbiAgICAgKiAgbiAvIE4gPSBOXHJcbiAgICAgKiAgbiAvIEkgPSAwXHJcbiAgICAgKiAgMCAvIG4gPSAwXHJcbiAgICAgKiAgMCAvIDAgPSBOXHJcbiAgICAgKiAgMCAvIE4gPSBOXHJcbiAgICAgKiAgMCAvIEkgPSAwXHJcbiAgICAgKiAgTiAvIG4gPSBOXHJcbiAgICAgKiAgTiAvIDAgPSBOXHJcbiAgICAgKiAgTiAvIE4gPSBOXHJcbiAgICAgKiAgTiAvIEkgPSBOXHJcbiAgICAgKiAgSSAvIG4gPSBJXHJcbiAgICAgKiAgSSAvIDAgPSBJXHJcbiAgICAgKiAgSSAvIE4gPSBOXHJcbiAgICAgKiAgSSAvIEkgPSBOXHJcbiAgICAgKlxyXG4gICAgICogUmV0dXJuIGEgbmV3IEJpZ051bWJlciB3aG9zZSB2YWx1ZSBpcyB0aGUgdmFsdWUgb2YgdGhpcyBCaWdOdW1iZXIgZGl2aWRlZCBieSB0aGUgdmFsdWUgb2ZcclxuICAgICAqIEJpZ051bWJlcih5LCBiKSwgcm91bmRlZCBhY2NvcmRpbmcgdG8gREVDSU1BTF9QTEFDRVMgYW5kIFJPVU5ESU5HX01PREUuXHJcbiAgICAgKi9cclxuICAgIFAuZGl2aWRlZEJ5ID0gUC5kaXYgPSBmdW5jdGlvbiAoeSwgYikge1xyXG4gICAgICByZXR1cm4gZGl2KHRoaXMsIG5ldyBCaWdOdW1iZXIoeSwgYiksIERFQ0lNQUxfUExBQ0VTLCBST1VORElOR19NT0RFKTtcclxuICAgIH07XHJcblxyXG5cclxuICAgIC8qXHJcbiAgICAgKiBSZXR1cm4gYSBuZXcgQmlnTnVtYmVyIHdob3NlIHZhbHVlIGlzIHRoZSBpbnRlZ2VyIHBhcnQgb2YgZGl2aWRpbmcgdGhlIHZhbHVlIG9mIHRoaXNcclxuICAgICAqIEJpZ051bWJlciBieSB0aGUgdmFsdWUgb2YgQmlnTnVtYmVyKHksIGIpLlxyXG4gICAgICovXHJcbiAgICBQLmRpdmlkZWRUb0ludGVnZXJCeSA9IFAuaWRpdiA9IGZ1bmN0aW9uICh5LCBiKSB7XHJcbiAgICAgIHJldHVybiBkaXYodGhpcywgbmV3IEJpZ051bWJlcih5LCBiKSwgMCwgMSk7XHJcbiAgICB9O1xyXG5cclxuXHJcbiAgICAvKlxyXG4gICAgICogUmV0dXJuIGEgQmlnTnVtYmVyIHdob3NlIHZhbHVlIGlzIHRoZSB2YWx1ZSBvZiB0aGlzIEJpZ051bWJlciBleHBvbmVudGlhdGVkIGJ5IG4uXHJcbiAgICAgKlxyXG4gICAgICogSWYgbSBpcyBwcmVzZW50LCByZXR1cm4gdGhlIHJlc3VsdCBtb2R1bG8gbS5cclxuICAgICAqIElmIG4gaXMgbmVnYXRpdmUgcm91bmQgYWNjb3JkaW5nIHRvIERFQ0lNQUxfUExBQ0VTIGFuZCBST1VORElOR19NT0RFLlxyXG4gICAgICogSWYgUE9XX1BSRUNJU0lPTiBpcyBub24temVybyBhbmQgbSBpcyBub3QgcHJlc2VudCwgcm91bmQgdG8gUE9XX1BSRUNJU0lPTiB1c2luZyBST1VORElOR19NT0RFLlxyXG4gICAgICpcclxuICAgICAqIFRoZSBtb2R1bGFyIHBvd2VyIG9wZXJhdGlvbiB3b3JrcyBlZmZpY2llbnRseSB3aGVuIHgsIG4sIGFuZCBtIGFyZSBpbnRlZ2Vycywgb3RoZXJ3aXNlIGl0XHJcbiAgICAgKiBpcyBlcXVpdmFsZW50IHRvIGNhbGN1bGF0aW5nIHguZXhwb25lbnRpYXRlZEJ5KG4pLm1vZHVsbyhtKSB3aXRoIGEgUE9XX1BSRUNJU0lPTiBvZiAwLlxyXG4gICAgICpcclxuICAgICAqIG4ge251bWJlcnxzdHJpbmd8QmlnTnVtYmVyfSBUaGUgZXhwb25lbnQuIEFuIGludGVnZXIuXHJcbiAgICAgKiBbbV0ge251bWJlcnxzdHJpbmd8QmlnTnVtYmVyfSBUaGUgbW9kdWx1cy5cclxuICAgICAqXHJcbiAgICAgKiAnW0JpZ051bWJlciBFcnJvcl0gRXhwb25lbnQgbm90IGFuIGludGVnZXI6IHtufSdcclxuICAgICAqL1xyXG4gICAgUC5leHBvbmVudGlhdGVkQnkgPSBQLnBvdyA9IGZ1bmN0aW9uIChuLCBtKSB7XHJcbiAgICAgIHZhciBoYWxmLCBpc01vZEV4cCwgaSwgaywgbW9yZSwgbklzQmlnLCBuSXNOZWcsIG5Jc09kZCwgeSxcclxuICAgICAgICB4ID0gdGhpcztcclxuXHJcbiAgICAgIG4gPSBuZXcgQmlnTnVtYmVyKG4pO1xyXG5cclxuICAgICAgLy8gQWxsb3cgTmFOIGFuZCDCsUluZmluaXR5LCBidXQgbm90IG90aGVyIG5vbi1pbnRlZ2Vycy5cclxuICAgICAgaWYgKG4uYyAmJiAhbi5pc0ludGVnZXIoKSkge1xyXG4gICAgICAgIHRocm93IEVycm9yXHJcbiAgICAgICAgICAoYmlnbnVtYmVyRXJyb3IgKyAnRXhwb25lbnQgbm90IGFuIGludGVnZXI6ICcgKyB2YWx1ZU9mKG4pKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKG0gIT0gbnVsbCkgbSA9IG5ldyBCaWdOdW1iZXIobSk7XHJcblxyXG4gICAgICAvLyBFeHBvbmVudCBvZiBNQVhfU0FGRV9JTlRFR0VSIGlzIDE1LlxyXG4gICAgICBuSXNCaWcgPSBuLmUgPiAxNDtcclxuXHJcbiAgICAgIC8vIElmIHggaXMgTmFOLCDCsUluZmluaXR5LCDCsTAgb3IgwrExLCBvciBuIGlzIMKxSW5maW5pdHksIE5hTiBvciDCsTAuXHJcbiAgICAgIGlmICgheC5jIHx8ICF4LmNbMF0gfHwgeC5jWzBdID09IDEgJiYgIXguZSAmJiB4LmMubGVuZ3RoID09IDEgfHwgIW4uYyB8fCAhbi5jWzBdKSB7XHJcblxyXG4gICAgICAgIC8vIFRoZSBzaWduIG9mIHRoZSByZXN1bHQgb2YgcG93IHdoZW4geCBpcyBuZWdhdGl2ZSBkZXBlbmRzIG9uIHRoZSBldmVubmVzcyBvZiBuLlxyXG4gICAgICAgIC8vIElmICtuIG92ZXJmbG93cyB0byDCsUluZmluaXR5LCB0aGUgZXZlbm5lc3Mgb2YgbiB3b3VsZCBiZSBub3QgYmUga25vd24uXHJcbiAgICAgICAgeSA9IG5ldyBCaWdOdW1iZXIoTWF0aC5wb3coK3ZhbHVlT2YoeCksIG5Jc0JpZyA/IDIgLSBpc09kZChuKSA6ICt2YWx1ZU9mKG4pKSk7XHJcbiAgICAgICAgcmV0dXJuIG0gPyB5Lm1vZChtKSA6IHk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIG5Jc05lZyA9IG4ucyA8IDA7XHJcblxyXG4gICAgICBpZiAobSkge1xyXG5cclxuICAgICAgICAvLyB4ICUgbSByZXR1cm5zIE5hTiBpZiBhYnMobSkgaXMgemVybywgb3IgbSBpcyBOYU4uXHJcbiAgICAgICAgaWYgKG0uYyA/ICFtLmNbMF0gOiAhbS5zKSByZXR1cm4gbmV3IEJpZ051bWJlcihOYU4pO1xyXG5cclxuICAgICAgICBpc01vZEV4cCA9ICFuSXNOZWcgJiYgeC5pc0ludGVnZXIoKSAmJiBtLmlzSW50ZWdlcigpO1xyXG5cclxuICAgICAgICBpZiAoaXNNb2RFeHApIHggPSB4Lm1vZChtKTtcclxuXHJcbiAgICAgIC8vIE92ZXJmbG93IHRvIMKxSW5maW5pdHk6ID49MioqMWUxMCBvciA+PTEuMDAwMDAyNCoqMWUxNS5cclxuICAgICAgLy8gVW5kZXJmbG93IHRvIMKxMDogPD0wLjc5KioxZTEwIG9yIDw9MC45OTk5OTc1KioxZTE1LlxyXG4gICAgICB9IGVsc2UgaWYgKG4uZSA+IDkgJiYgKHguZSA+IDAgfHwgeC5lIDwgLTEgfHwgKHguZSA9PSAwXHJcbiAgICAgICAgLy8gWzEsIDI0MDAwMDAwMF1cclxuICAgICAgICA/IHguY1swXSA+IDEgfHwgbklzQmlnICYmIHguY1sxXSA+PSAyNGU3XHJcbiAgICAgICAgLy8gWzgwMDAwMDAwMDAwMDAwXSAgWzk5OTk5NzUwMDAwMDAwXVxyXG4gICAgICAgIDogeC5jWzBdIDwgOGUxMyB8fCBuSXNCaWcgJiYgeC5jWzBdIDw9IDk5OTk5NzVlNykpKSB7XHJcblxyXG4gICAgICAgIC8vIElmIHggaXMgbmVnYXRpdmUgYW5kIG4gaXMgb2RkLCBrID0gLTAsIGVsc2UgayA9IDAuXHJcbiAgICAgICAgayA9IHgucyA8IDAgJiYgaXNPZGQobikgPyAtMCA6IDA7XHJcblxyXG4gICAgICAgIC8vIElmIHggPj0gMSwgayA9IMKxSW5maW5pdHkuXHJcbiAgICAgICAgaWYgKHguZSA+IC0xKSBrID0gMSAvIGs7XHJcblxyXG4gICAgICAgIC8vIElmIG4gaXMgbmVnYXRpdmUgcmV0dXJuIMKxMCwgZWxzZSByZXR1cm4gwrFJbmZpbml0eS5cclxuICAgICAgICByZXR1cm4gbmV3IEJpZ051bWJlcihuSXNOZWcgPyAxIC8gayA6IGspO1xyXG5cclxuICAgICAgfSBlbHNlIGlmIChQT1dfUFJFQ0lTSU9OKSB7XHJcblxyXG4gICAgICAgIC8vIFRydW5jYXRpbmcgZWFjaCBjb2VmZmljaWVudCBhcnJheSB0byBhIGxlbmd0aCBvZiBrIGFmdGVyIGVhY2ggbXVsdGlwbGljYXRpb25cclxuICAgICAgICAvLyBlcXVhdGVzIHRvIHRydW5jYXRpbmcgc2lnbmlmaWNhbnQgZGlnaXRzIHRvIFBPV19QUkVDSVNJT04gKyBbMjgsIDQxXSxcclxuICAgICAgICAvLyBpLmUuIHRoZXJlIHdpbGwgYmUgYSBtaW5pbXVtIG9mIDI4IGd1YXJkIGRpZ2l0cyByZXRhaW5lZC5cclxuICAgICAgICBrID0gbWF0aGNlaWwoUE9XX1BSRUNJU0lPTiAvIExPR19CQVNFICsgMik7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmIChuSXNCaWcpIHtcclxuICAgICAgICBoYWxmID0gbmV3IEJpZ051bWJlcigwLjUpO1xyXG4gICAgICAgIGlmIChuSXNOZWcpIG4ucyA9IDE7XHJcbiAgICAgICAgbklzT2RkID0gaXNPZGQobik7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgaSA9IE1hdGguYWJzKCt2YWx1ZU9mKG4pKTtcclxuICAgICAgICBuSXNPZGQgPSBpICUgMjtcclxuICAgICAgfVxyXG5cclxuICAgICAgeSA9IG5ldyBCaWdOdW1iZXIoT05FKTtcclxuXHJcbiAgICAgIC8vIFBlcmZvcm1zIDU0IGxvb3AgaXRlcmF0aW9ucyBmb3IgbiBvZiA5MDA3MTk5MjU0NzQwOTkxLlxyXG4gICAgICBmb3IgKDsgOykge1xyXG5cclxuICAgICAgICBpZiAobklzT2RkKSB7XHJcbiAgICAgICAgICB5ID0geS50aW1lcyh4KTtcclxuICAgICAgICAgIGlmICgheS5jKSBicmVhaztcclxuXHJcbiAgICAgICAgICBpZiAoaykge1xyXG4gICAgICAgICAgICBpZiAoeS5jLmxlbmd0aCA+IGspIHkuYy5sZW5ndGggPSBrO1xyXG4gICAgICAgICAgfSBlbHNlIGlmIChpc01vZEV4cCkge1xyXG4gICAgICAgICAgICB5ID0geS5tb2QobSk7ICAgIC8veSA9IHkubWludXMoZGl2KHksIG0sIDAsIE1PRFVMT19NT0RFKS50aW1lcyhtKSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoaSkge1xyXG4gICAgICAgICAgaSA9IG1hdGhmbG9vcihpIC8gMik7XHJcbiAgICAgICAgICBpZiAoaSA9PT0gMCkgYnJlYWs7XHJcbiAgICAgICAgICBuSXNPZGQgPSBpICUgMjtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgbiA9IG4udGltZXMoaGFsZik7XHJcbiAgICAgICAgICByb3VuZChuLCBuLmUgKyAxLCAxKTtcclxuXHJcbiAgICAgICAgICBpZiAobi5lID4gMTQpIHtcclxuICAgICAgICAgICAgbklzT2RkID0gaXNPZGQobik7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBpID0gK3ZhbHVlT2Yobik7XHJcbiAgICAgICAgICAgIGlmIChpID09PSAwKSBicmVhaztcclxuICAgICAgICAgICAgbklzT2RkID0gaSAlIDI7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB4ID0geC50aW1lcyh4KTtcclxuXHJcbiAgICAgICAgaWYgKGspIHtcclxuICAgICAgICAgIGlmICh4LmMgJiYgeC5jLmxlbmd0aCA+IGspIHguYy5sZW5ndGggPSBrO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoaXNNb2RFeHApIHtcclxuICAgICAgICAgIHggPSB4Lm1vZChtKTsgICAgLy94ID0geC5taW51cyhkaXYoeCwgbSwgMCwgTU9EVUxPX01PREUpLnRpbWVzKG0pKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmIChpc01vZEV4cCkgcmV0dXJuIHk7XHJcbiAgICAgIGlmIChuSXNOZWcpIHkgPSBPTkUuZGl2KHkpO1xyXG5cclxuICAgICAgcmV0dXJuIG0gPyB5Lm1vZChtKSA6IGsgPyByb3VuZCh5LCBQT1dfUFJFQ0lTSU9OLCBST1VORElOR19NT0RFLCBtb3JlKSA6IHk7XHJcbiAgICB9O1xyXG5cclxuXHJcbiAgICAvKlxyXG4gICAgICogUmV0dXJuIGEgbmV3IEJpZ051bWJlciB3aG9zZSB2YWx1ZSBpcyB0aGUgdmFsdWUgb2YgdGhpcyBCaWdOdW1iZXIgcm91bmRlZCB0byBhbiBpbnRlZ2VyXHJcbiAgICAgKiB1c2luZyByb3VuZGluZyBtb2RlIHJtLCBvciBST1VORElOR19NT0RFIGlmIHJtIGlzIG9taXR0ZWQuXHJcbiAgICAgKlxyXG4gICAgICogW3JtXSB7bnVtYmVyfSBSb3VuZGluZyBtb2RlLiBJbnRlZ2VyLCAwIHRvIDggaW5jbHVzaXZlLlxyXG4gICAgICpcclxuICAgICAqICdbQmlnTnVtYmVyIEVycm9yXSBBcmd1bWVudCB7bm90IGEgcHJpbWl0aXZlIG51bWJlcnxub3QgYW4gaW50ZWdlcnxvdXQgb2YgcmFuZ2V9OiB7cm19J1xyXG4gICAgICovXHJcbiAgICBQLmludGVnZXJWYWx1ZSA9IGZ1bmN0aW9uIChybSkge1xyXG4gICAgICB2YXIgbiA9IG5ldyBCaWdOdW1iZXIodGhpcyk7XHJcbiAgICAgIGlmIChybSA9PSBudWxsKSBybSA9IFJPVU5ESU5HX01PREU7XHJcbiAgICAgIGVsc2UgaW50Q2hlY2socm0sIDAsIDgpO1xyXG4gICAgICByZXR1cm4gcm91bmQobiwgbi5lICsgMSwgcm0pO1xyXG4gICAgfTtcclxuXHJcblxyXG4gICAgLypcclxuICAgICAqIFJldHVybiB0cnVlIGlmIHRoZSB2YWx1ZSBvZiB0aGlzIEJpZ051bWJlciBpcyBlcXVhbCB0byB0aGUgdmFsdWUgb2YgQmlnTnVtYmVyKHksIGIpLFxyXG4gICAgICogb3RoZXJ3aXNlIHJldHVybiBmYWxzZS5cclxuICAgICAqL1xyXG4gICAgUC5pc0VxdWFsVG8gPSBQLmVxID0gZnVuY3Rpb24gKHksIGIpIHtcclxuICAgICAgcmV0dXJuIGNvbXBhcmUodGhpcywgbmV3IEJpZ051bWJlcih5LCBiKSkgPT09IDA7XHJcbiAgICB9O1xyXG5cclxuXHJcbiAgICAvKlxyXG4gICAgICogUmV0dXJuIHRydWUgaWYgdGhlIHZhbHVlIG9mIHRoaXMgQmlnTnVtYmVyIGlzIGEgZmluaXRlIG51bWJlciwgb3RoZXJ3aXNlIHJldHVybiBmYWxzZS5cclxuICAgICAqL1xyXG4gICAgUC5pc0Zpbml0ZSA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgcmV0dXJuICEhdGhpcy5jO1xyXG4gICAgfTtcclxuXHJcblxyXG4gICAgLypcclxuICAgICAqIFJldHVybiB0cnVlIGlmIHRoZSB2YWx1ZSBvZiB0aGlzIEJpZ051bWJlciBpcyBncmVhdGVyIHRoYW4gdGhlIHZhbHVlIG9mIEJpZ051bWJlcih5LCBiKSxcclxuICAgICAqIG90aGVyd2lzZSByZXR1cm4gZmFsc2UuXHJcbiAgICAgKi9cclxuICAgIFAuaXNHcmVhdGVyVGhhbiA9IFAuZ3QgPSBmdW5jdGlvbiAoeSwgYikge1xyXG4gICAgICByZXR1cm4gY29tcGFyZSh0aGlzLCBuZXcgQmlnTnVtYmVyKHksIGIpKSA+IDA7XHJcbiAgICB9O1xyXG5cclxuXHJcbiAgICAvKlxyXG4gICAgICogUmV0dXJuIHRydWUgaWYgdGhlIHZhbHVlIG9mIHRoaXMgQmlnTnVtYmVyIGlzIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byB0aGUgdmFsdWUgb2ZcclxuICAgICAqIEJpZ051bWJlcih5LCBiKSwgb3RoZXJ3aXNlIHJldHVybiBmYWxzZS5cclxuICAgICAqL1xyXG4gICAgUC5pc0dyZWF0ZXJUaGFuT3JFcXVhbFRvID0gUC5ndGUgPSBmdW5jdGlvbiAoeSwgYikge1xyXG4gICAgICByZXR1cm4gKGIgPSBjb21wYXJlKHRoaXMsIG5ldyBCaWdOdW1iZXIoeSwgYikpKSA9PT0gMSB8fCBiID09PSAwO1xyXG5cclxuICAgIH07XHJcblxyXG5cclxuICAgIC8qXHJcbiAgICAgKiBSZXR1cm4gdHJ1ZSBpZiB0aGUgdmFsdWUgb2YgdGhpcyBCaWdOdW1iZXIgaXMgYW4gaW50ZWdlciwgb3RoZXJ3aXNlIHJldHVybiBmYWxzZS5cclxuICAgICAqL1xyXG4gICAgUC5pc0ludGVnZXIgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgIHJldHVybiAhIXRoaXMuYyAmJiBiaXRGbG9vcih0aGlzLmUgLyBMT0dfQkFTRSkgPiB0aGlzLmMubGVuZ3RoIC0gMjtcclxuICAgIH07XHJcblxyXG5cclxuICAgIC8qXHJcbiAgICAgKiBSZXR1cm4gdHJ1ZSBpZiB0aGUgdmFsdWUgb2YgdGhpcyBCaWdOdW1iZXIgaXMgbGVzcyB0aGFuIHRoZSB2YWx1ZSBvZiBCaWdOdW1iZXIoeSwgYiksXHJcbiAgICAgKiBvdGhlcndpc2UgcmV0dXJuIGZhbHNlLlxyXG4gICAgICovXHJcbiAgICBQLmlzTGVzc1RoYW4gPSBQLmx0ID0gZnVuY3Rpb24gKHksIGIpIHtcclxuICAgICAgcmV0dXJuIGNvbXBhcmUodGhpcywgbmV3IEJpZ051bWJlcih5LCBiKSkgPCAwO1xyXG4gICAgfTtcclxuXHJcblxyXG4gICAgLypcclxuICAgICAqIFJldHVybiB0cnVlIGlmIHRoZSB2YWx1ZSBvZiB0aGlzIEJpZ051bWJlciBpcyBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gdGhlIHZhbHVlIG9mXHJcbiAgICAgKiBCaWdOdW1iZXIoeSwgYiksIG90aGVyd2lzZSByZXR1cm4gZmFsc2UuXHJcbiAgICAgKi9cclxuICAgIFAuaXNMZXNzVGhhbk9yRXF1YWxUbyA9IFAubHRlID0gZnVuY3Rpb24gKHksIGIpIHtcclxuICAgICAgcmV0dXJuIChiID0gY29tcGFyZSh0aGlzLCBuZXcgQmlnTnVtYmVyKHksIGIpKSkgPT09IC0xIHx8IGIgPT09IDA7XHJcbiAgICB9O1xyXG5cclxuXHJcbiAgICAvKlxyXG4gICAgICogUmV0dXJuIHRydWUgaWYgdGhlIHZhbHVlIG9mIHRoaXMgQmlnTnVtYmVyIGlzIE5hTiwgb3RoZXJ3aXNlIHJldHVybiBmYWxzZS5cclxuICAgICAqL1xyXG4gICAgUC5pc05hTiA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgcmV0dXJuICF0aGlzLnM7XHJcbiAgICB9O1xyXG5cclxuXHJcbiAgICAvKlxyXG4gICAgICogUmV0dXJuIHRydWUgaWYgdGhlIHZhbHVlIG9mIHRoaXMgQmlnTnVtYmVyIGlzIG5lZ2F0aXZlLCBvdGhlcndpc2UgcmV0dXJuIGZhbHNlLlxyXG4gICAgICovXHJcbiAgICBQLmlzTmVnYXRpdmUgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLnMgPCAwO1xyXG4gICAgfTtcclxuXHJcblxyXG4gICAgLypcclxuICAgICAqIFJldHVybiB0cnVlIGlmIHRoZSB2YWx1ZSBvZiB0aGlzIEJpZ051bWJlciBpcyBwb3NpdGl2ZSwgb3RoZXJ3aXNlIHJldHVybiBmYWxzZS5cclxuICAgICAqL1xyXG4gICAgUC5pc1Bvc2l0aXZlID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICByZXR1cm4gdGhpcy5zID4gMDtcclxuICAgIH07XHJcblxyXG5cclxuICAgIC8qXHJcbiAgICAgKiBSZXR1cm4gdHJ1ZSBpZiB0aGUgdmFsdWUgb2YgdGhpcyBCaWdOdW1iZXIgaXMgMCBvciAtMCwgb3RoZXJ3aXNlIHJldHVybiBmYWxzZS5cclxuICAgICAqL1xyXG4gICAgUC5pc1plcm8gPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgIHJldHVybiAhIXRoaXMuYyAmJiB0aGlzLmNbMF0gPT0gMDtcclxuICAgIH07XHJcblxyXG5cclxuICAgIC8qXHJcbiAgICAgKiAgbiAtIDAgPSBuXHJcbiAgICAgKiAgbiAtIE4gPSBOXHJcbiAgICAgKiAgbiAtIEkgPSAtSVxyXG4gICAgICogIDAgLSBuID0gLW5cclxuICAgICAqICAwIC0gMCA9IDBcclxuICAgICAqICAwIC0gTiA9IE5cclxuICAgICAqICAwIC0gSSA9IC1JXHJcbiAgICAgKiAgTiAtIG4gPSBOXHJcbiAgICAgKiAgTiAtIDAgPSBOXHJcbiAgICAgKiAgTiAtIE4gPSBOXHJcbiAgICAgKiAgTiAtIEkgPSBOXHJcbiAgICAgKiAgSSAtIG4gPSBJXHJcbiAgICAgKiAgSSAtIDAgPSBJXHJcbiAgICAgKiAgSSAtIE4gPSBOXHJcbiAgICAgKiAgSSAtIEkgPSBOXHJcbiAgICAgKlxyXG4gICAgICogUmV0dXJuIGEgbmV3IEJpZ051bWJlciB3aG9zZSB2YWx1ZSBpcyB0aGUgdmFsdWUgb2YgdGhpcyBCaWdOdW1iZXIgbWludXMgdGhlIHZhbHVlIG9mXHJcbiAgICAgKiBCaWdOdW1iZXIoeSwgYikuXHJcbiAgICAgKi9cclxuICAgIFAubWludXMgPSBmdW5jdGlvbiAoeSwgYikge1xyXG4gICAgICB2YXIgaSwgaiwgdCwgeExUeSxcclxuICAgICAgICB4ID0gdGhpcyxcclxuICAgICAgICBhID0geC5zO1xyXG5cclxuICAgICAgeSA9IG5ldyBCaWdOdW1iZXIoeSwgYik7XHJcbiAgICAgIGIgPSB5LnM7XHJcblxyXG4gICAgICAvLyBFaXRoZXIgTmFOP1xyXG4gICAgICBpZiAoIWEgfHwgIWIpIHJldHVybiBuZXcgQmlnTnVtYmVyKE5hTik7XHJcblxyXG4gICAgICAvLyBTaWducyBkaWZmZXI/XHJcbiAgICAgIGlmIChhICE9IGIpIHtcclxuICAgICAgICB5LnMgPSAtYjtcclxuICAgICAgICByZXR1cm4geC5wbHVzKHkpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICB2YXIgeGUgPSB4LmUgLyBMT0dfQkFTRSxcclxuICAgICAgICB5ZSA9IHkuZSAvIExPR19CQVNFLFxyXG4gICAgICAgIHhjID0geC5jLFxyXG4gICAgICAgIHljID0geS5jO1xyXG5cclxuICAgICAgaWYgKCF4ZSB8fCAheWUpIHtcclxuXHJcbiAgICAgICAgLy8gRWl0aGVyIEluZmluaXR5P1xyXG4gICAgICAgIGlmICgheGMgfHwgIXljKSByZXR1cm4geGMgPyAoeS5zID0gLWIsIHkpIDogbmV3IEJpZ051bWJlcih5YyA/IHggOiBOYU4pO1xyXG5cclxuICAgICAgICAvLyBFaXRoZXIgemVybz9cclxuICAgICAgICBpZiAoIXhjWzBdIHx8ICF5Y1swXSkge1xyXG5cclxuICAgICAgICAgIC8vIFJldHVybiB5IGlmIHkgaXMgbm9uLXplcm8sIHggaWYgeCBpcyBub24temVybywgb3IgemVybyBpZiBib3RoIGFyZSB6ZXJvLlxyXG4gICAgICAgICAgcmV0dXJuIHljWzBdID8gKHkucyA9IC1iLCB5KSA6IG5ldyBCaWdOdW1iZXIoeGNbMF0gPyB4IDpcclxuXHJcbiAgICAgICAgICAgLy8gSUVFRSA3NTQgKDIwMDgpIDYuMzogbiAtIG4gPSAtMCB3aGVuIHJvdW5kaW5nIHRvIC1JbmZpbml0eVxyXG4gICAgICAgICAgIFJPVU5ESU5HX01PREUgPT0gMyA/IC0wIDogMCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICB4ZSA9IGJpdEZsb29yKHhlKTtcclxuICAgICAgeWUgPSBiaXRGbG9vcih5ZSk7XHJcbiAgICAgIHhjID0geGMuc2xpY2UoKTtcclxuXHJcbiAgICAgIC8vIERldGVybWluZSB3aGljaCBpcyB0aGUgYmlnZ2VyIG51bWJlci5cclxuICAgICAgaWYgKGEgPSB4ZSAtIHllKSB7XHJcblxyXG4gICAgICAgIGlmICh4TFR5ID0gYSA8IDApIHtcclxuICAgICAgICAgIGEgPSAtYTtcclxuICAgICAgICAgIHQgPSB4YztcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgeWUgPSB4ZTtcclxuICAgICAgICAgIHQgPSB5YztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHQucmV2ZXJzZSgpO1xyXG5cclxuICAgICAgICAvLyBQcmVwZW5kIHplcm9zIHRvIGVxdWFsaXNlIGV4cG9uZW50cy5cclxuICAgICAgICBmb3IgKGIgPSBhOyBiLS07IHQucHVzaCgwKSk7XHJcbiAgICAgICAgdC5yZXZlcnNlKCk7XHJcbiAgICAgIH0gZWxzZSB7XHJcblxyXG4gICAgICAgIC8vIEV4cG9uZW50cyBlcXVhbC4gQ2hlY2sgZGlnaXQgYnkgZGlnaXQuXHJcbiAgICAgICAgaiA9ICh4TFR5ID0gKGEgPSB4Yy5sZW5ndGgpIDwgKGIgPSB5Yy5sZW5ndGgpKSA/IGEgOiBiO1xyXG5cclxuICAgICAgICBmb3IgKGEgPSBiID0gMDsgYiA8IGo7IGIrKykge1xyXG5cclxuICAgICAgICAgIGlmICh4Y1tiXSAhPSB5Y1tiXSkge1xyXG4gICAgICAgICAgICB4TFR5ID0geGNbYl0gPCB5Y1tiXTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyB4IDwgeT8gUG9pbnQgeGMgdG8gdGhlIGFycmF5IG9mIHRoZSBiaWdnZXIgbnVtYmVyLlxyXG4gICAgICBpZiAoeExUeSkgdCA9IHhjLCB4YyA9IHljLCB5YyA9IHQsIHkucyA9IC15LnM7XHJcblxyXG4gICAgICBiID0gKGogPSB5Yy5sZW5ndGgpIC0gKGkgPSB4Yy5sZW5ndGgpO1xyXG5cclxuICAgICAgLy8gQXBwZW5kIHplcm9zIHRvIHhjIGlmIHNob3J0ZXIuXHJcbiAgICAgIC8vIE5vIG5lZWQgdG8gYWRkIHplcm9zIHRvIHljIGlmIHNob3J0ZXIgYXMgc3VidHJhY3Qgb25seSBuZWVkcyB0byBzdGFydCBhdCB5Yy5sZW5ndGguXHJcbiAgICAgIGlmIChiID4gMCkgZm9yICg7IGItLTsgeGNbaSsrXSA9IDApO1xyXG4gICAgICBiID0gQkFTRSAtIDE7XHJcblxyXG4gICAgICAvLyBTdWJ0cmFjdCB5YyBmcm9tIHhjLlxyXG4gICAgICBmb3IgKDsgaiA+IGE7KSB7XHJcblxyXG4gICAgICAgIGlmICh4Y1stLWpdIDwgeWNbal0pIHtcclxuICAgICAgICAgIGZvciAoaSA9IGo7IGkgJiYgIXhjWy0taV07IHhjW2ldID0gYik7XHJcbiAgICAgICAgICAtLXhjW2ldO1xyXG4gICAgICAgICAgeGNbal0gKz0gQkFTRTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHhjW2pdIC09IHljW2pdO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyBSZW1vdmUgbGVhZGluZyB6ZXJvcyBhbmQgYWRqdXN0IGV4cG9uZW50IGFjY29yZGluZ2x5LlxyXG4gICAgICBmb3IgKDsgeGNbMF0gPT0gMDsgeGMuc3BsaWNlKDAsIDEpLCAtLXllKTtcclxuXHJcbiAgICAgIC8vIFplcm8/XHJcbiAgICAgIGlmICgheGNbMF0pIHtcclxuXHJcbiAgICAgICAgLy8gRm9sbG93aW5nIElFRUUgNzU0ICgyMDA4KSA2LjMsXHJcbiAgICAgICAgLy8gbiAtIG4gPSArMCAgYnV0ICBuIC0gbiA9IC0wICB3aGVuIHJvdW5kaW5nIHRvd2FyZHMgLUluZmluaXR5LlxyXG4gICAgICAgIHkucyA9IFJPVU5ESU5HX01PREUgPT0gMyA/IC0xIDogMTtcclxuICAgICAgICB5LmMgPSBbeS5lID0gMF07XHJcbiAgICAgICAgcmV0dXJuIHk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vIE5vIG5lZWQgdG8gY2hlY2sgZm9yIEluZmluaXR5IGFzICt4IC0gK3kgIT0gSW5maW5pdHkgJiYgLXggLSAteSAhPSBJbmZpbml0eVxyXG4gICAgICAvLyBmb3IgZmluaXRlIHggYW5kIHkuXHJcbiAgICAgIHJldHVybiBub3JtYWxpc2UoeSwgeGMsIHllKTtcclxuICAgIH07XHJcblxyXG5cclxuICAgIC8qXHJcbiAgICAgKiAgIG4gJSAwID0gIE5cclxuICAgICAqICAgbiAlIE4gPSAgTlxyXG4gICAgICogICBuICUgSSA9ICBuXHJcbiAgICAgKiAgIDAgJSBuID0gIDBcclxuICAgICAqICAtMCAlIG4gPSAtMFxyXG4gICAgICogICAwICUgMCA9ICBOXHJcbiAgICAgKiAgIDAgJSBOID0gIE5cclxuICAgICAqICAgMCAlIEkgPSAgMFxyXG4gICAgICogICBOICUgbiA9ICBOXHJcbiAgICAgKiAgIE4gJSAwID0gIE5cclxuICAgICAqICAgTiAlIE4gPSAgTlxyXG4gICAgICogICBOICUgSSA9ICBOXHJcbiAgICAgKiAgIEkgJSBuID0gIE5cclxuICAgICAqICAgSSAlIDAgPSAgTlxyXG4gICAgICogICBJICUgTiA9ICBOXHJcbiAgICAgKiAgIEkgJSBJID0gIE5cclxuICAgICAqXHJcbiAgICAgKiBSZXR1cm4gYSBuZXcgQmlnTnVtYmVyIHdob3NlIHZhbHVlIGlzIHRoZSB2YWx1ZSBvZiB0aGlzIEJpZ051bWJlciBtb2R1bG8gdGhlIHZhbHVlIG9mXHJcbiAgICAgKiBCaWdOdW1iZXIoeSwgYikuIFRoZSByZXN1bHQgZGVwZW5kcyBvbiB0aGUgdmFsdWUgb2YgTU9EVUxPX01PREUuXHJcbiAgICAgKi9cclxuICAgIFAubW9kdWxvID0gUC5tb2QgPSBmdW5jdGlvbiAoeSwgYikge1xyXG4gICAgICB2YXIgcSwgcyxcclxuICAgICAgICB4ID0gdGhpcztcclxuXHJcbiAgICAgIHkgPSBuZXcgQmlnTnVtYmVyKHksIGIpO1xyXG5cclxuICAgICAgLy8gUmV0dXJuIE5hTiBpZiB4IGlzIEluZmluaXR5IG9yIE5hTiwgb3IgeSBpcyBOYU4gb3IgemVyby5cclxuICAgICAgaWYgKCF4LmMgfHwgIXkucyB8fCB5LmMgJiYgIXkuY1swXSkge1xyXG4gICAgICAgIHJldHVybiBuZXcgQmlnTnVtYmVyKE5hTik7XHJcblxyXG4gICAgICAvLyBSZXR1cm4geCBpZiB5IGlzIEluZmluaXR5IG9yIHggaXMgemVyby5cclxuICAgICAgfSBlbHNlIGlmICgheS5jIHx8IHguYyAmJiAheC5jWzBdKSB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBCaWdOdW1iZXIoeCk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmIChNT0RVTE9fTU9ERSA9PSA5KSB7XHJcblxyXG4gICAgICAgIC8vIEV1Y2xpZGlhbiBkaXZpc2lvbjogcSA9IHNpZ24oeSkgKiBmbG9vcih4IC8gYWJzKHkpKVxyXG4gICAgICAgIC8vIHIgPSB4IC0gcXkgICAgd2hlcmUgIDAgPD0gciA8IGFicyh5KVxyXG4gICAgICAgIHMgPSB5LnM7XHJcbiAgICAgICAgeS5zID0gMTtcclxuICAgICAgICBxID0gZGl2KHgsIHksIDAsIDMpO1xyXG4gICAgICAgIHkucyA9IHM7XHJcbiAgICAgICAgcS5zICo9IHM7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcSA9IGRpdih4LCB5LCAwLCBNT0RVTE9fTU9ERSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHkgPSB4Lm1pbnVzKHEudGltZXMoeSkpO1xyXG5cclxuICAgICAgLy8gVG8gbWF0Y2ggSmF2YVNjcmlwdCAlLCBlbnN1cmUgc2lnbiBvZiB6ZXJvIGlzIHNpZ24gb2YgZGl2aWRlbmQuXHJcbiAgICAgIGlmICgheS5jWzBdICYmIE1PRFVMT19NT0RFID09IDEpIHkucyA9IHgucztcclxuXHJcbiAgICAgIHJldHVybiB5O1xyXG4gICAgfTtcclxuXHJcblxyXG4gICAgLypcclxuICAgICAqICBuICogMCA9IDBcclxuICAgICAqICBuICogTiA9IE5cclxuICAgICAqICBuICogSSA9IElcclxuICAgICAqICAwICogbiA9IDBcclxuICAgICAqICAwICogMCA9IDBcclxuICAgICAqICAwICogTiA9IE5cclxuICAgICAqICAwICogSSA9IE5cclxuICAgICAqICBOICogbiA9IE5cclxuICAgICAqICBOICogMCA9IE5cclxuICAgICAqICBOICogTiA9IE5cclxuICAgICAqICBOICogSSA9IE5cclxuICAgICAqICBJICogbiA9IElcclxuICAgICAqICBJICogMCA9IE5cclxuICAgICAqICBJICogTiA9IE5cclxuICAgICAqICBJICogSSA9IElcclxuICAgICAqXHJcbiAgICAgKiBSZXR1cm4gYSBuZXcgQmlnTnVtYmVyIHdob3NlIHZhbHVlIGlzIHRoZSB2YWx1ZSBvZiB0aGlzIEJpZ051bWJlciBtdWx0aXBsaWVkIGJ5IHRoZSB2YWx1ZVxyXG4gICAgICogb2YgQmlnTnVtYmVyKHksIGIpLlxyXG4gICAgICovXHJcbiAgICBQLm11bHRpcGxpZWRCeSA9IFAudGltZXMgPSBmdW5jdGlvbiAoeSwgYikge1xyXG4gICAgICB2YXIgYywgZSwgaSwgaiwgaywgbSwgeGNMLCB4bG8sIHhoaSwgeWNMLCB5bG8sIHloaSwgemMsXHJcbiAgICAgICAgYmFzZSwgc3FydEJhc2UsXHJcbiAgICAgICAgeCA9IHRoaXMsXHJcbiAgICAgICAgeGMgPSB4LmMsXHJcbiAgICAgICAgeWMgPSAoeSA9IG5ldyBCaWdOdW1iZXIoeSwgYikpLmM7XHJcblxyXG4gICAgICAvLyBFaXRoZXIgTmFOLCDCsUluZmluaXR5IG9yIMKxMD9cclxuICAgICAgaWYgKCF4YyB8fCAheWMgfHwgIXhjWzBdIHx8ICF5Y1swXSkge1xyXG5cclxuICAgICAgICAvLyBSZXR1cm4gTmFOIGlmIGVpdGhlciBpcyBOYU4sIG9yIG9uZSBpcyAwIGFuZCB0aGUgb3RoZXIgaXMgSW5maW5pdHkuXHJcbiAgICAgICAgaWYgKCF4LnMgfHwgIXkucyB8fCB4YyAmJiAheGNbMF0gJiYgIXljIHx8IHljICYmICF5Y1swXSAmJiAheGMpIHtcclxuICAgICAgICAgIHkuYyA9IHkuZSA9IHkucyA9IG51bGw7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHkucyAqPSB4LnM7XHJcblxyXG4gICAgICAgICAgLy8gUmV0dXJuIMKxSW5maW5pdHkgaWYgZWl0aGVyIGlzIMKxSW5maW5pdHkuXHJcbiAgICAgICAgICBpZiAoIXhjIHx8ICF5Yykge1xyXG4gICAgICAgICAgICB5LmMgPSB5LmUgPSBudWxsO1xyXG5cclxuICAgICAgICAgIC8vIFJldHVybiDCsTAgaWYgZWl0aGVyIGlzIMKxMC5cclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHkuYyA9IFswXTtcclxuICAgICAgICAgICAgeS5lID0gMDtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB5O1xyXG4gICAgICB9XHJcblxyXG4gICAgICBlID0gYml0Rmxvb3IoeC5lIC8gTE9HX0JBU0UpICsgYml0Rmxvb3IoeS5lIC8gTE9HX0JBU0UpO1xyXG4gICAgICB5LnMgKj0geC5zO1xyXG4gICAgICB4Y0wgPSB4Yy5sZW5ndGg7XHJcbiAgICAgIHljTCA9IHljLmxlbmd0aDtcclxuXHJcbiAgICAgIC8vIEVuc3VyZSB4YyBwb2ludHMgdG8gbG9uZ2VyIGFycmF5IGFuZCB4Y0wgdG8gaXRzIGxlbmd0aC5cclxuICAgICAgaWYgKHhjTCA8IHljTCkgemMgPSB4YywgeGMgPSB5YywgeWMgPSB6YywgaSA9IHhjTCwgeGNMID0geWNMLCB5Y0wgPSBpO1xyXG5cclxuICAgICAgLy8gSW5pdGlhbGlzZSB0aGUgcmVzdWx0IGFycmF5IHdpdGggemVyb3MuXHJcbiAgICAgIGZvciAoaSA9IHhjTCArIHljTCwgemMgPSBbXTsgaS0tOyB6Yy5wdXNoKDApKTtcclxuXHJcbiAgICAgIGJhc2UgPSBCQVNFO1xyXG4gICAgICBzcXJ0QmFzZSA9IFNRUlRfQkFTRTtcclxuXHJcbiAgICAgIGZvciAoaSA9IHljTDsgLS1pID49IDA7KSB7XHJcbiAgICAgICAgYyA9IDA7XHJcbiAgICAgICAgeWxvID0geWNbaV0gJSBzcXJ0QmFzZTtcclxuICAgICAgICB5aGkgPSB5Y1tpXSAvIHNxcnRCYXNlIHwgMDtcclxuXHJcbiAgICAgICAgZm9yIChrID0geGNMLCBqID0gaSArIGs7IGogPiBpOykge1xyXG4gICAgICAgICAgeGxvID0geGNbLS1rXSAlIHNxcnRCYXNlO1xyXG4gICAgICAgICAgeGhpID0geGNba10gLyBzcXJ0QmFzZSB8IDA7XHJcbiAgICAgICAgICBtID0geWhpICogeGxvICsgeGhpICogeWxvO1xyXG4gICAgICAgICAgeGxvID0geWxvICogeGxvICsgKChtICUgc3FydEJhc2UpICogc3FydEJhc2UpICsgemNbal0gKyBjO1xyXG4gICAgICAgICAgYyA9ICh4bG8gLyBiYXNlIHwgMCkgKyAobSAvIHNxcnRCYXNlIHwgMCkgKyB5aGkgKiB4aGk7XHJcbiAgICAgICAgICB6Y1tqLS1dID0geGxvICUgYmFzZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHpjW2pdID0gYztcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKGMpIHtcclxuICAgICAgICArK2U7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgemMuc3BsaWNlKDAsIDEpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICByZXR1cm4gbm9ybWFsaXNlKHksIHpjLCBlKTtcclxuICAgIH07XHJcblxyXG5cclxuICAgIC8qXHJcbiAgICAgKiBSZXR1cm4gYSBuZXcgQmlnTnVtYmVyIHdob3NlIHZhbHVlIGlzIHRoZSB2YWx1ZSBvZiB0aGlzIEJpZ051bWJlciBuZWdhdGVkLFxyXG4gICAgICogaS5lLiBtdWx0aXBsaWVkIGJ5IC0xLlxyXG4gICAgICovXHJcbiAgICBQLm5lZ2F0ZWQgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgIHZhciB4ID0gbmV3IEJpZ051bWJlcih0aGlzKTtcclxuICAgICAgeC5zID0gLXgucyB8fCBudWxsO1xyXG4gICAgICByZXR1cm4geDtcclxuICAgIH07XHJcblxyXG5cclxuICAgIC8qXHJcbiAgICAgKiAgbiArIDAgPSBuXHJcbiAgICAgKiAgbiArIE4gPSBOXHJcbiAgICAgKiAgbiArIEkgPSBJXHJcbiAgICAgKiAgMCArIG4gPSBuXHJcbiAgICAgKiAgMCArIDAgPSAwXHJcbiAgICAgKiAgMCArIE4gPSBOXHJcbiAgICAgKiAgMCArIEkgPSBJXHJcbiAgICAgKiAgTiArIG4gPSBOXHJcbiAgICAgKiAgTiArIDAgPSBOXHJcbiAgICAgKiAgTiArIE4gPSBOXHJcbiAgICAgKiAgTiArIEkgPSBOXHJcbiAgICAgKiAgSSArIG4gPSBJXHJcbiAgICAgKiAgSSArIDAgPSBJXHJcbiAgICAgKiAgSSArIE4gPSBOXHJcbiAgICAgKiAgSSArIEkgPSBJXHJcbiAgICAgKlxyXG4gICAgICogUmV0dXJuIGEgbmV3IEJpZ051bWJlciB3aG9zZSB2YWx1ZSBpcyB0aGUgdmFsdWUgb2YgdGhpcyBCaWdOdW1iZXIgcGx1cyB0aGUgdmFsdWUgb2ZcclxuICAgICAqIEJpZ051bWJlcih5LCBiKS5cclxuICAgICAqL1xyXG4gICAgUC5wbHVzID0gZnVuY3Rpb24gKHksIGIpIHtcclxuICAgICAgdmFyIHQsXHJcbiAgICAgICAgeCA9IHRoaXMsXHJcbiAgICAgICAgYSA9IHgucztcclxuXHJcbiAgICAgIHkgPSBuZXcgQmlnTnVtYmVyKHksIGIpO1xyXG4gICAgICBiID0geS5zO1xyXG5cclxuICAgICAgLy8gRWl0aGVyIE5hTj9cclxuICAgICAgaWYgKCFhIHx8ICFiKSByZXR1cm4gbmV3IEJpZ051bWJlcihOYU4pO1xyXG5cclxuICAgICAgLy8gU2lnbnMgZGlmZmVyP1xyXG4gICAgICAgaWYgKGEgIT0gYikge1xyXG4gICAgICAgIHkucyA9IC1iO1xyXG4gICAgICAgIHJldHVybiB4Lm1pbnVzKHkpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICB2YXIgeGUgPSB4LmUgLyBMT0dfQkFTRSxcclxuICAgICAgICB5ZSA9IHkuZSAvIExPR19CQVNFLFxyXG4gICAgICAgIHhjID0geC5jLFxyXG4gICAgICAgIHljID0geS5jO1xyXG5cclxuICAgICAgaWYgKCF4ZSB8fCAheWUpIHtcclxuXHJcbiAgICAgICAgLy8gUmV0dXJuIMKxSW5maW5pdHkgaWYgZWl0aGVyIMKxSW5maW5pdHkuXHJcbiAgICAgICAgaWYgKCF4YyB8fCAheWMpIHJldHVybiBuZXcgQmlnTnVtYmVyKGEgLyAwKTtcclxuXHJcbiAgICAgICAgLy8gRWl0aGVyIHplcm8/XHJcbiAgICAgICAgLy8gUmV0dXJuIHkgaWYgeSBpcyBub24temVybywgeCBpZiB4IGlzIG5vbi16ZXJvLCBvciB6ZXJvIGlmIGJvdGggYXJlIHplcm8uXHJcbiAgICAgICAgaWYgKCF4Y1swXSB8fCAheWNbMF0pIHJldHVybiB5Y1swXSA/IHkgOiBuZXcgQmlnTnVtYmVyKHhjWzBdID8geCA6IGEgKiAwKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgeGUgPSBiaXRGbG9vcih4ZSk7XHJcbiAgICAgIHllID0gYml0Rmxvb3IoeWUpO1xyXG4gICAgICB4YyA9IHhjLnNsaWNlKCk7XHJcblxyXG4gICAgICAvLyBQcmVwZW5kIHplcm9zIHRvIGVxdWFsaXNlIGV4cG9uZW50cy4gRmFzdGVyIHRvIHVzZSByZXZlcnNlIHRoZW4gZG8gdW5zaGlmdHMuXHJcbiAgICAgIGlmIChhID0geGUgLSB5ZSkge1xyXG4gICAgICAgIGlmIChhID4gMCkge1xyXG4gICAgICAgICAgeWUgPSB4ZTtcclxuICAgICAgICAgIHQgPSB5YztcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgYSA9IC1hO1xyXG4gICAgICAgICAgdCA9IHhjO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdC5yZXZlcnNlKCk7XHJcbiAgICAgICAgZm9yICg7IGEtLTsgdC5wdXNoKDApKTtcclxuICAgICAgICB0LnJldmVyc2UoKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgYSA9IHhjLmxlbmd0aDtcclxuICAgICAgYiA9IHljLmxlbmd0aDtcclxuXHJcbiAgICAgIC8vIFBvaW50IHhjIHRvIHRoZSBsb25nZXIgYXJyYXksIGFuZCBiIHRvIHRoZSBzaG9ydGVyIGxlbmd0aC5cclxuICAgICAgaWYgKGEgLSBiIDwgMCkgdCA9IHljLCB5YyA9IHhjLCB4YyA9IHQsIGIgPSBhO1xyXG5cclxuICAgICAgLy8gT25seSBzdGFydCBhZGRpbmcgYXQgeWMubGVuZ3RoIC0gMSBhcyB0aGUgZnVydGhlciBkaWdpdHMgb2YgeGMgY2FuIGJlIGlnbm9yZWQuXHJcbiAgICAgIGZvciAoYSA9IDA7IGI7KSB7XHJcbiAgICAgICAgYSA9ICh4Y1stLWJdID0geGNbYl0gKyB5Y1tiXSArIGEpIC8gQkFTRSB8IDA7XHJcbiAgICAgICAgeGNbYl0gPSBCQVNFID09PSB4Y1tiXSA/IDAgOiB4Y1tiXSAlIEJBU0U7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmIChhKSB7XHJcbiAgICAgICAgeGMgPSBbYV0uY29uY2F0KHhjKTtcclxuICAgICAgICArK3llO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyBObyBuZWVkIHRvIGNoZWNrIGZvciB6ZXJvLCBhcyAreCArICt5ICE9IDAgJiYgLXggKyAteSAhPSAwXHJcbiAgICAgIC8vIHllID0gTUFYX0VYUCArIDEgcG9zc2libGVcclxuICAgICAgcmV0dXJuIG5vcm1hbGlzZSh5LCB4YywgeWUpO1xyXG4gICAgfTtcclxuXHJcblxyXG4gICAgLypcclxuICAgICAqIElmIHNkIGlzIHVuZGVmaW5lZCBvciBudWxsIG9yIHRydWUgb3IgZmFsc2UsIHJldHVybiB0aGUgbnVtYmVyIG9mIHNpZ25pZmljYW50IGRpZ2l0cyBvZlxyXG4gICAgICogdGhlIHZhbHVlIG9mIHRoaXMgQmlnTnVtYmVyLCBvciBudWxsIGlmIHRoZSB2YWx1ZSBvZiB0aGlzIEJpZ051bWJlciBpcyDCsUluZmluaXR5IG9yIE5hTi5cclxuICAgICAqIElmIHNkIGlzIHRydWUgaW5jbHVkZSBpbnRlZ2VyLXBhcnQgdHJhaWxpbmcgemVyb3MgaW4gdGhlIGNvdW50LlxyXG4gICAgICpcclxuICAgICAqIE90aGVyd2lzZSwgaWYgc2QgaXMgYSBudW1iZXIsIHJldHVybiBhIG5ldyBCaWdOdW1iZXIgd2hvc2UgdmFsdWUgaXMgdGhlIHZhbHVlIG9mIHRoaXNcclxuICAgICAqIEJpZ051bWJlciByb3VuZGVkIHRvIGEgbWF4aW11bSBvZiBzZCBzaWduaWZpY2FudCBkaWdpdHMgdXNpbmcgcm91bmRpbmcgbW9kZSBybSwgb3JcclxuICAgICAqIFJPVU5ESU5HX01PREUgaWYgcm0gaXMgb21pdHRlZC5cclxuICAgICAqXHJcbiAgICAgKiBzZCB7bnVtYmVyfGJvb2xlYW59IG51bWJlcjogc2lnbmlmaWNhbnQgZGlnaXRzOiBpbnRlZ2VyLCAxIHRvIE1BWCBpbmNsdXNpdmUuXHJcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgIGJvb2xlYW46IHdoZXRoZXIgdG8gY291bnQgaW50ZWdlci1wYXJ0IHRyYWlsaW5nIHplcm9zOiB0cnVlIG9yIGZhbHNlLlxyXG4gICAgICogW3JtXSB7bnVtYmVyfSBSb3VuZGluZyBtb2RlLiBJbnRlZ2VyLCAwIHRvIDggaW5jbHVzaXZlLlxyXG4gICAgICpcclxuICAgICAqICdbQmlnTnVtYmVyIEVycm9yXSBBcmd1bWVudCB7bm90IGEgcHJpbWl0aXZlIG51bWJlcnxub3QgYW4gaW50ZWdlcnxvdXQgb2YgcmFuZ2V9OiB7c2R8cm19J1xyXG4gICAgICovXHJcbiAgICBQLnByZWNpc2lvbiA9IFAuc2QgPSBmdW5jdGlvbiAoc2QsIHJtKSB7XHJcbiAgICAgIHZhciBjLCBuLCB2LFxyXG4gICAgICAgIHggPSB0aGlzO1xyXG5cclxuICAgICAgaWYgKHNkICE9IG51bGwgJiYgc2QgIT09ICEhc2QpIHtcclxuICAgICAgICBpbnRDaGVjayhzZCwgMSwgTUFYKTtcclxuICAgICAgICBpZiAocm0gPT0gbnVsbCkgcm0gPSBST1VORElOR19NT0RFO1xyXG4gICAgICAgIGVsc2UgaW50Q2hlY2socm0sIDAsIDgpO1xyXG5cclxuICAgICAgICByZXR1cm4gcm91bmQobmV3IEJpZ051bWJlcih4KSwgc2QsIHJtKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKCEoYyA9IHguYykpIHJldHVybiBudWxsO1xyXG4gICAgICB2ID0gYy5sZW5ndGggLSAxO1xyXG4gICAgICBuID0gdiAqIExPR19CQVNFICsgMTtcclxuXHJcbiAgICAgIGlmICh2ID0gY1t2XSkge1xyXG5cclxuICAgICAgICAvLyBTdWJ0cmFjdCB0aGUgbnVtYmVyIG9mIHRyYWlsaW5nIHplcm9zIG9mIHRoZSBsYXN0IGVsZW1lbnQuXHJcbiAgICAgICAgZm9yICg7IHYgJSAxMCA9PSAwOyB2IC89IDEwLCBuLS0pO1xyXG5cclxuICAgICAgICAvLyBBZGQgdGhlIG51bWJlciBvZiBkaWdpdHMgb2YgdGhlIGZpcnN0IGVsZW1lbnQuXHJcbiAgICAgICAgZm9yICh2ID0gY1swXTsgdiA+PSAxMDsgdiAvPSAxMCwgbisrKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKHNkICYmIHguZSArIDEgPiBuKSBuID0geC5lICsgMTtcclxuXHJcbiAgICAgIHJldHVybiBuO1xyXG4gICAgfTtcclxuXHJcblxyXG4gICAgLypcclxuICAgICAqIFJldHVybiBhIG5ldyBCaWdOdW1iZXIgd2hvc2UgdmFsdWUgaXMgdGhlIHZhbHVlIG9mIHRoaXMgQmlnTnVtYmVyIHNoaWZ0ZWQgYnkgayBwbGFjZXNcclxuICAgICAqIChwb3dlcnMgb2YgMTApLiBTaGlmdCB0byB0aGUgcmlnaHQgaWYgbiA+IDAsIGFuZCB0byB0aGUgbGVmdCBpZiBuIDwgMC5cclxuICAgICAqXHJcbiAgICAgKiBrIHtudW1iZXJ9IEludGVnZXIsIC1NQVhfU0FGRV9JTlRFR0VSIHRvIE1BWF9TQUZFX0lOVEVHRVIgaW5jbHVzaXZlLlxyXG4gICAgICpcclxuICAgICAqICdbQmlnTnVtYmVyIEVycm9yXSBBcmd1bWVudCB7bm90IGEgcHJpbWl0aXZlIG51bWJlcnxub3QgYW4gaW50ZWdlcnxvdXQgb2YgcmFuZ2V9OiB7a30nXHJcbiAgICAgKi9cclxuICAgIFAuc2hpZnRlZEJ5ID0gZnVuY3Rpb24gKGspIHtcclxuICAgICAgaW50Q2hlY2soaywgLU1BWF9TQUZFX0lOVEVHRVIsIE1BWF9TQUZFX0lOVEVHRVIpO1xyXG4gICAgICByZXR1cm4gdGhpcy50aW1lcygnMWUnICsgayk7XHJcbiAgICB9O1xyXG5cclxuXHJcbiAgICAvKlxyXG4gICAgICogIHNxcnQoLW4pID0gIE5cclxuICAgICAqICBzcXJ0KE4pID0gIE5cclxuICAgICAqICBzcXJ0KC1JKSA9ICBOXHJcbiAgICAgKiAgc3FydChJKSA9ICBJXHJcbiAgICAgKiAgc3FydCgwKSA9ICAwXHJcbiAgICAgKiAgc3FydCgtMCkgPSAtMFxyXG4gICAgICpcclxuICAgICAqIFJldHVybiBhIG5ldyBCaWdOdW1iZXIgd2hvc2UgdmFsdWUgaXMgdGhlIHNxdWFyZSByb290IG9mIHRoZSB2YWx1ZSBvZiB0aGlzIEJpZ051bWJlcixcclxuICAgICAqIHJvdW5kZWQgYWNjb3JkaW5nIHRvIERFQ0lNQUxfUExBQ0VTIGFuZCBST1VORElOR19NT0RFLlxyXG4gICAgICovXHJcbiAgICBQLnNxdWFyZVJvb3QgPSBQLnNxcnQgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgIHZhciBtLCBuLCByLCByZXAsIHQsXHJcbiAgICAgICAgeCA9IHRoaXMsXHJcbiAgICAgICAgYyA9IHguYyxcclxuICAgICAgICBzID0geC5zLFxyXG4gICAgICAgIGUgPSB4LmUsXHJcbiAgICAgICAgZHAgPSBERUNJTUFMX1BMQUNFUyArIDQsXHJcbiAgICAgICAgaGFsZiA9IG5ldyBCaWdOdW1iZXIoJzAuNScpO1xyXG5cclxuICAgICAgLy8gTmVnYXRpdmUvTmFOL0luZmluaXR5L3plcm8/XHJcbiAgICAgIGlmIChzICE9PSAxIHx8ICFjIHx8ICFjWzBdKSB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBCaWdOdW1iZXIoIXMgfHwgcyA8IDAgJiYgKCFjIHx8IGNbMF0pID8gTmFOIDogYyA/IHggOiAxIC8gMCk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vIEluaXRpYWwgZXN0aW1hdGUuXHJcbiAgICAgIHMgPSBNYXRoLnNxcnQoK3ZhbHVlT2YoeCkpO1xyXG5cclxuICAgICAgLy8gTWF0aC5zcXJ0IHVuZGVyZmxvdy9vdmVyZmxvdz9cclxuICAgICAgLy8gUGFzcyB4IHRvIE1hdGguc3FydCBhcyBpbnRlZ2VyLCB0aGVuIGFkanVzdCB0aGUgZXhwb25lbnQgb2YgdGhlIHJlc3VsdC5cclxuICAgICAgaWYgKHMgPT0gMCB8fCBzID09IDEgLyAwKSB7XHJcbiAgICAgICAgbiA9IGNvZWZmVG9TdHJpbmcoYyk7XHJcbiAgICAgICAgaWYgKChuLmxlbmd0aCArIGUpICUgMiA9PSAwKSBuICs9ICcwJztcclxuICAgICAgICBzID0gTWF0aC5zcXJ0KCtuKTtcclxuICAgICAgICBlID0gYml0Rmxvb3IoKGUgKyAxKSAvIDIpIC0gKGUgPCAwIHx8IGUgJSAyKTtcclxuXHJcbiAgICAgICAgaWYgKHMgPT0gMSAvIDApIHtcclxuICAgICAgICAgIG4gPSAnNWUnICsgZTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgbiA9IHMudG9FeHBvbmVudGlhbCgpO1xyXG4gICAgICAgICAgbiA9IG4uc2xpY2UoMCwgbi5pbmRleE9mKCdlJykgKyAxKSArIGU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByID0gbmV3IEJpZ051bWJlcihuKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICByID0gbmV3IEJpZ051bWJlcihzICsgJycpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyBDaGVjayBmb3IgemVyby5cclxuICAgICAgLy8gciBjb3VsZCBiZSB6ZXJvIGlmIE1JTl9FWFAgaXMgY2hhbmdlZCBhZnRlciB0aGUgdGhpcyB2YWx1ZSB3YXMgY3JlYXRlZC5cclxuICAgICAgLy8gVGhpcyB3b3VsZCBjYXVzZSBhIGRpdmlzaW9uIGJ5IHplcm8gKHgvdCkgYW5kIGhlbmNlIEluZmluaXR5IGJlbG93LCB3aGljaCB3b3VsZCBjYXVzZVxyXG4gICAgICAvLyBjb2VmZlRvU3RyaW5nIHRvIHRocm93LlxyXG4gICAgICBpZiAoci5jWzBdKSB7XHJcbiAgICAgICAgZSA9IHIuZTtcclxuICAgICAgICBzID0gZSArIGRwO1xyXG4gICAgICAgIGlmIChzIDwgMykgcyA9IDA7XHJcblxyXG4gICAgICAgIC8vIE5ld3Rvbi1SYXBoc29uIGl0ZXJhdGlvbi5cclxuICAgICAgICBmb3IgKDsgOykge1xyXG4gICAgICAgICAgdCA9IHI7XHJcbiAgICAgICAgICByID0gaGFsZi50aW1lcyh0LnBsdXMoZGl2KHgsIHQsIGRwLCAxKSkpO1xyXG5cclxuICAgICAgICAgIGlmIChjb2VmZlRvU3RyaW5nKHQuYykuc2xpY2UoMCwgcykgPT09IChuID0gY29lZmZUb1N0cmluZyhyLmMpKS5zbGljZSgwLCBzKSkge1xyXG5cclxuICAgICAgICAgICAgLy8gVGhlIGV4cG9uZW50IG9mIHIgbWF5IGhlcmUgYmUgb25lIGxlc3MgdGhhbiB0aGUgZmluYWwgcmVzdWx0IGV4cG9uZW50LFxyXG4gICAgICAgICAgICAvLyBlLmcgMC4wMDA5OTk5IChlLTQpIC0tPiAwLjAwMSAoZS0zKSwgc28gYWRqdXN0IHMgc28gdGhlIHJvdW5kaW5nIGRpZ2l0c1xyXG4gICAgICAgICAgICAvLyBhcmUgaW5kZXhlZCBjb3JyZWN0bHkuXHJcbiAgICAgICAgICAgIGlmIChyLmUgPCBlKSAtLXM7XHJcbiAgICAgICAgICAgIG4gPSBuLnNsaWNlKHMgLSAzLCBzICsgMSk7XHJcblxyXG4gICAgICAgICAgICAvLyBUaGUgNHRoIHJvdW5kaW5nIGRpZ2l0IG1heSBiZSBpbiBlcnJvciBieSAtMSBzbyBpZiB0aGUgNCByb3VuZGluZyBkaWdpdHNcclxuICAgICAgICAgICAgLy8gYXJlIDk5OTkgb3IgNDk5OSAoaS5lLiBhcHByb2FjaGluZyBhIHJvdW5kaW5nIGJvdW5kYXJ5KSBjb250aW51ZSB0aGVcclxuICAgICAgICAgICAgLy8gaXRlcmF0aW9uLlxyXG4gICAgICAgICAgICBpZiAobiA9PSAnOTk5OScgfHwgIXJlcCAmJiBuID09ICc0OTk5Jykge1xyXG5cclxuICAgICAgICAgICAgICAvLyBPbiB0aGUgZmlyc3QgaXRlcmF0aW9uIG9ubHksIGNoZWNrIHRvIHNlZSBpZiByb3VuZGluZyB1cCBnaXZlcyB0aGVcclxuICAgICAgICAgICAgICAvLyBleGFjdCByZXN1bHQgYXMgdGhlIG5pbmVzIG1heSBpbmZpbml0ZWx5IHJlcGVhdC5cclxuICAgICAgICAgICAgICBpZiAoIXJlcCkge1xyXG4gICAgICAgICAgICAgICAgcm91bmQodCwgdC5lICsgREVDSU1BTF9QTEFDRVMgKyAyLCAwKTtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAodC50aW1lcyh0KS5lcSh4KSkge1xyXG4gICAgICAgICAgICAgICAgICByID0gdDtcclxuICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICBkcCArPSA0O1xyXG4gICAgICAgICAgICAgIHMgKz0gNDtcclxuICAgICAgICAgICAgICByZXAgPSAxO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG5cclxuICAgICAgICAgICAgICAvLyBJZiByb3VuZGluZyBkaWdpdHMgYXJlIG51bGwsIDB7MCw0fSBvciA1MHswLDN9LCBjaGVjayBmb3IgZXhhY3RcclxuICAgICAgICAgICAgICAvLyByZXN1bHQuIElmIG5vdCwgdGhlbiB0aGVyZSBhcmUgZnVydGhlciBkaWdpdHMgYW5kIG0gd2lsbCBiZSB0cnV0aHkuXHJcbiAgICAgICAgICAgICAgaWYgKCErbiB8fCAhK24uc2xpY2UoMSkgJiYgbi5jaGFyQXQoMCkgPT0gJzUnKSB7XHJcblxyXG4gICAgICAgICAgICAgICAgLy8gVHJ1bmNhdGUgdG8gdGhlIGZpcnN0IHJvdW5kaW5nIGRpZ2l0LlxyXG4gICAgICAgICAgICAgICAgcm91bmQociwgci5lICsgREVDSU1BTF9QTEFDRVMgKyAyLCAxKTtcclxuICAgICAgICAgICAgICAgIG0gPSAhci50aW1lcyhyKS5lcSh4KTtcclxuICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICByZXR1cm4gcm91bmQociwgci5lICsgREVDSU1BTF9QTEFDRVMgKyAxLCBST1VORElOR19NT0RFLCBtKTtcclxuICAgIH07XHJcblxyXG5cclxuICAgIC8qXHJcbiAgICAgKiBSZXR1cm4gYSBzdHJpbmcgcmVwcmVzZW50aW5nIHRoZSB2YWx1ZSBvZiB0aGlzIEJpZ051bWJlciBpbiBleHBvbmVudGlhbCBub3RhdGlvbiBhbmRcclxuICAgICAqIHJvdW5kZWQgdXNpbmcgUk9VTkRJTkdfTU9ERSB0byBkcCBmaXhlZCBkZWNpbWFsIHBsYWNlcy5cclxuICAgICAqXHJcbiAgICAgKiBbZHBdIHtudW1iZXJ9IERlY2ltYWwgcGxhY2VzLiBJbnRlZ2VyLCAwIHRvIE1BWCBpbmNsdXNpdmUuXHJcbiAgICAgKiBbcm1dIHtudW1iZXJ9IFJvdW5kaW5nIG1vZGUuIEludGVnZXIsIDAgdG8gOCBpbmNsdXNpdmUuXHJcbiAgICAgKlxyXG4gICAgICogJ1tCaWdOdW1iZXIgRXJyb3JdIEFyZ3VtZW50IHtub3QgYSBwcmltaXRpdmUgbnVtYmVyfG5vdCBhbiBpbnRlZ2VyfG91dCBvZiByYW5nZX06IHtkcHxybX0nXHJcbiAgICAgKi9cclxuICAgIFAudG9FeHBvbmVudGlhbCA9IGZ1bmN0aW9uIChkcCwgcm0pIHtcclxuICAgICAgaWYgKGRwICE9IG51bGwpIHtcclxuICAgICAgICBpbnRDaGVjayhkcCwgMCwgTUFYKTtcclxuICAgICAgICBkcCsrO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiBmb3JtYXQodGhpcywgZHAsIHJtLCAxKTtcclxuICAgIH07XHJcblxyXG5cclxuICAgIC8qXHJcbiAgICAgKiBSZXR1cm4gYSBzdHJpbmcgcmVwcmVzZW50aW5nIHRoZSB2YWx1ZSBvZiB0aGlzIEJpZ051bWJlciBpbiBmaXhlZC1wb2ludCBub3RhdGlvbiByb3VuZGluZ1xyXG4gICAgICogdG8gZHAgZml4ZWQgZGVjaW1hbCBwbGFjZXMgdXNpbmcgcm91bmRpbmcgbW9kZSBybSwgb3IgUk9VTkRJTkdfTU9ERSBpZiBybSBpcyBvbWl0dGVkLlxyXG4gICAgICpcclxuICAgICAqIE5vdGU6IGFzIHdpdGggSmF2YVNjcmlwdCdzIG51bWJlciB0eXBlLCAoLTApLnRvRml4ZWQoMCkgaXMgJzAnLFxyXG4gICAgICogYnV0IGUuZy4gKC0wLjAwMDAxKS50b0ZpeGVkKDApIGlzICctMCcuXHJcbiAgICAgKlxyXG4gICAgICogW2RwXSB7bnVtYmVyfSBEZWNpbWFsIHBsYWNlcy4gSW50ZWdlciwgMCB0byBNQVggaW5jbHVzaXZlLlxyXG4gICAgICogW3JtXSB7bnVtYmVyfSBSb3VuZGluZyBtb2RlLiBJbnRlZ2VyLCAwIHRvIDggaW5jbHVzaXZlLlxyXG4gICAgICpcclxuICAgICAqICdbQmlnTnVtYmVyIEVycm9yXSBBcmd1bWVudCB7bm90IGEgcHJpbWl0aXZlIG51bWJlcnxub3QgYW4gaW50ZWdlcnxvdXQgb2YgcmFuZ2V9OiB7ZHB8cm19J1xyXG4gICAgICovXHJcbiAgICBQLnRvRml4ZWQgPSBmdW5jdGlvbiAoZHAsIHJtKSB7XHJcbiAgICAgIGlmIChkcCAhPSBudWxsKSB7XHJcbiAgICAgICAgaW50Q2hlY2soZHAsIDAsIE1BWCk7XHJcbiAgICAgICAgZHAgPSBkcCArIHRoaXMuZSArIDE7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIGZvcm1hdCh0aGlzLCBkcCwgcm0pO1xyXG4gICAgfTtcclxuXHJcblxyXG4gICAgLypcclxuICAgICAqIFJldHVybiBhIHN0cmluZyByZXByZXNlbnRpbmcgdGhlIHZhbHVlIG9mIHRoaXMgQmlnTnVtYmVyIGluIGZpeGVkLXBvaW50IG5vdGF0aW9uIHJvdW5kZWRcclxuICAgICAqIHVzaW5nIHJtIG9yIFJPVU5ESU5HX01PREUgdG8gZHAgZGVjaW1hbCBwbGFjZXMsIGFuZCBmb3JtYXR0ZWQgYWNjb3JkaW5nIHRvIHRoZSBwcm9wZXJ0aWVzXHJcbiAgICAgKiBvZiB0aGUgZm9ybWF0IG9yIEZPUk1BVCBvYmplY3QgKHNlZSBCaWdOdW1iZXIuc2V0KS5cclxuICAgICAqXHJcbiAgICAgKiBUaGUgZm9ybWF0dGluZyBvYmplY3QgbWF5IGNvbnRhaW4gc29tZSBvciBhbGwgb2YgdGhlIHByb3BlcnRpZXMgc2hvd24gYmVsb3cuXHJcbiAgICAgKlxyXG4gICAgICogRk9STUFUID0ge1xyXG4gICAgICogICBwcmVmaXg6ICcnLFxyXG4gICAgICogICBncm91cFNpemU6IDMsXHJcbiAgICAgKiAgIHNlY29uZGFyeUdyb3VwU2l6ZTogMCxcclxuICAgICAqICAgZ3JvdXBTZXBhcmF0b3I6ICcsJyxcclxuICAgICAqICAgZGVjaW1hbFNlcGFyYXRvcjogJy4nLFxyXG4gICAgICogICBmcmFjdGlvbkdyb3VwU2l6ZTogMCxcclxuICAgICAqICAgZnJhY3Rpb25Hcm91cFNlcGFyYXRvcjogJ1xceEEwJywgICAgICAvLyBub24tYnJlYWtpbmcgc3BhY2VcclxuICAgICAqICAgc3VmZml4OiAnJ1xyXG4gICAgICogfTtcclxuICAgICAqXHJcbiAgICAgKiBbZHBdIHtudW1iZXJ9IERlY2ltYWwgcGxhY2VzLiBJbnRlZ2VyLCAwIHRvIE1BWCBpbmNsdXNpdmUuXHJcbiAgICAgKiBbcm1dIHtudW1iZXJ9IFJvdW5kaW5nIG1vZGUuIEludGVnZXIsIDAgdG8gOCBpbmNsdXNpdmUuXHJcbiAgICAgKiBbZm9ybWF0XSB7b2JqZWN0fSBGb3JtYXR0aW5nIG9wdGlvbnMuIFNlZSBGT1JNQVQgcGJqZWN0IGFib3ZlLlxyXG4gICAgICpcclxuICAgICAqICdbQmlnTnVtYmVyIEVycm9yXSBBcmd1bWVudCB7bm90IGEgcHJpbWl0aXZlIG51bWJlcnxub3QgYW4gaW50ZWdlcnxvdXQgb2YgcmFuZ2V9OiB7ZHB8cm19J1xyXG4gICAgICogJ1tCaWdOdW1iZXIgRXJyb3JdIEFyZ3VtZW50IG5vdCBhbiBvYmplY3Q6IHtmb3JtYXR9J1xyXG4gICAgICovXHJcbiAgICBQLnRvRm9ybWF0ID0gZnVuY3Rpb24gKGRwLCBybSwgZm9ybWF0KSB7XHJcbiAgICAgIHZhciBzdHIsXHJcbiAgICAgICAgeCA9IHRoaXM7XHJcblxyXG4gICAgICBpZiAoZm9ybWF0ID09IG51bGwpIHtcclxuICAgICAgICBpZiAoZHAgIT0gbnVsbCAmJiBybSAmJiB0eXBlb2Ygcm0gPT0gJ29iamVjdCcpIHtcclxuICAgICAgICAgIGZvcm1hdCA9IHJtO1xyXG4gICAgICAgICAgcm0gPSBudWxsO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoZHAgJiYgdHlwZW9mIGRwID09ICdvYmplY3QnKSB7XHJcbiAgICAgICAgICBmb3JtYXQgPSBkcDtcclxuICAgICAgICAgIGRwID0gcm0gPSBudWxsO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBmb3JtYXQgPSBGT1JNQVQ7XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiBmb3JtYXQgIT0gJ29iamVjdCcpIHtcclxuICAgICAgICB0aHJvdyBFcnJvclxyXG4gICAgICAgICAgKGJpZ251bWJlckVycm9yICsgJ0FyZ3VtZW50IG5vdCBhbiBvYmplY3Q6ICcgKyBmb3JtYXQpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBzdHIgPSB4LnRvRml4ZWQoZHAsIHJtKTtcclxuXHJcbiAgICAgIGlmICh4LmMpIHtcclxuICAgICAgICB2YXIgaSxcclxuICAgICAgICAgIGFyciA9IHN0ci5zcGxpdCgnLicpLFxyXG4gICAgICAgICAgZzEgPSArZm9ybWF0Lmdyb3VwU2l6ZSxcclxuICAgICAgICAgIGcyID0gK2Zvcm1hdC5zZWNvbmRhcnlHcm91cFNpemUsXHJcbiAgICAgICAgICBncm91cFNlcGFyYXRvciA9IGZvcm1hdC5ncm91cFNlcGFyYXRvciB8fCAnJyxcclxuICAgICAgICAgIGludFBhcnQgPSBhcnJbMF0sXHJcbiAgICAgICAgICBmcmFjdGlvblBhcnQgPSBhcnJbMV0sXHJcbiAgICAgICAgICBpc05lZyA9IHgucyA8IDAsXHJcbiAgICAgICAgICBpbnREaWdpdHMgPSBpc05lZyA/IGludFBhcnQuc2xpY2UoMSkgOiBpbnRQYXJ0LFxyXG4gICAgICAgICAgbGVuID0gaW50RGlnaXRzLmxlbmd0aDtcclxuXHJcbiAgICAgICAgaWYgKGcyKSBpID0gZzEsIGcxID0gZzIsIGcyID0gaSwgbGVuIC09IGk7XHJcblxyXG4gICAgICAgIGlmIChnMSA+IDAgJiYgbGVuID4gMCkge1xyXG4gICAgICAgICAgaSA9IGxlbiAlIGcxIHx8IGcxO1xyXG4gICAgICAgICAgaW50UGFydCA9IGludERpZ2l0cy5zdWJzdHIoMCwgaSk7XHJcbiAgICAgICAgICBmb3IgKDsgaSA8IGxlbjsgaSArPSBnMSkgaW50UGFydCArPSBncm91cFNlcGFyYXRvciArIGludERpZ2l0cy5zdWJzdHIoaSwgZzEpO1xyXG4gICAgICAgICAgaWYgKGcyID4gMCkgaW50UGFydCArPSBncm91cFNlcGFyYXRvciArIGludERpZ2l0cy5zbGljZShpKTtcclxuICAgICAgICAgIGlmIChpc05lZykgaW50UGFydCA9ICctJyArIGludFBhcnQ7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBzdHIgPSBmcmFjdGlvblBhcnRcclxuICAgICAgICAgPyBpbnRQYXJ0ICsgKGZvcm1hdC5kZWNpbWFsU2VwYXJhdG9yIHx8ICcnKSArICgoZzIgPSArZm9ybWF0LmZyYWN0aW9uR3JvdXBTaXplKVxyXG4gICAgICAgICAgPyBmcmFjdGlvblBhcnQucmVwbGFjZShuZXcgUmVnRXhwKCdcXFxcZHsnICsgZzIgKyAnfVxcXFxCJywgJ2cnKSxcclxuICAgICAgICAgICAnJCYnICsgKGZvcm1hdC5mcmFjdGlvbkdyb3VwU2VwYXJhdG9yIHx8ICcnKSlcclxuICAgICAgICAgIDogZnJhY3Rpb25QYXJ0KVxyXG4gICAgICAgICA6IGludFBhcnQ7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJldHVybiAoZm9ybWF0LnByZWZpeCB8fCAnJykgKyBzdHIgKyAoZm9ybWF0LnN1ZmZpeCB8fCAnJyk7XHJcbiAgICB9O1xyXG5cclxuXHJcbiAgICAvKlxyXG4gICAgICogUmV0dXJuIGFuIGFycmF5IG9mIHR3byBCaWdOdW1iZXJzIHJlcHJlc2VudGluZyB0aGUgdmFsdWUgb2YgdGhpcyBCaWdOdW1iZXIgYXMgYSBzaW1wbGVcclxuICAgICAqIGZyYWN0aW9uIHdpdGggYW4gaW50ZWdlciBudW1lcmF0b3IgYW5kIGFuIGludGVnZXIgZGVub21pbmF0b3IuXHJcbiAgICAgKiBUaGUgZGVub21pbmF0b3Igd2lsbCBiZSBhIHBvc2l0aXZlIG5vbi16ZXJvIHZhbHVlIGxlc3MgdGhhbiBvciBlcXVhbCB0byB0aGUgc3BlY2lmaWVkXHJcbiAgICAgKiBtYXhpbXVtIGRlbm9taW5hdG9yLiBJZiBhIG1heGltdW0gZGVub21pbmF0b3IgaXMgbm90IHNwZWNpZmllZCwgdGhlIGRlbm9taW5hdG9yIHdpbGwgYmVcclxuICAgICAqIHRoZSBsb3dlc3QgdmFsdWUgbmVjZXNzYXJ5IHRvIHJlcHJlc2VudCB0aGUgbnVtYmVyIGV4YWN0bHkuXHJcbiAgICAgKlxyXG4gICAgICogW21kXSB7bnVtYmVyfHN0cmluZ3xCaWdOdW1iZXJ9IEludGVnZXIgPj0gMSwgb3IgSW5maW5pdHkuIFRoZSBtYXhpbXVtIGRlbm9taW5hdG9yLlxyXG4gICAgICpcclxuICAgICAqICdbQmlnTnVtYmVyIEVycm9yXSBBcmd1bWVudCB7bm90IGFuIGludGVnZXJ8b3V0IG9mIHJhbmdlfSA6IHttZH0nXHJcbiAgICAgKi9cclxuICAgIFAudG9GcmFjdGlvbiA9IGZ1bmN0aW9uIChtZCkge1xyXG4gICAgICB2YXIgZCwgZDAsIGQxLCBkMiwgZSwgZXhwLCBuLCBuMCwgbjEsIHEsIHIsIHMsXHJcbiAgICAgICAgeCA9IHRoaXMsXHJcbiAgICAgICAgeGMgPSB4LmM7XHJcblxyXG4gICAgICBpZiAobWQgIT0gbnVsbCkge1xyXG4gICAgICAgIG4gPSBuZXcgQmlnTnVtYmVyKG1kKTtcclxuXHJcbiAgICAgICAgLy8gVGhyb3cgaWYgbWQgaXMgbGVzcyB0aGFuIG9uZSBvciBpcyBub3QgYW4gaW50ZWdlciwgdW5sZXNzIGl0IGlzIEluZmluaXR5LlxyXG4gICAgICAgIGlmICghbi5pc0ludGVnZXIoKSAmJiAobi5jIHx8IG4ucyAhPT0gMSkgfHwgbi5sdChPTkUpKSB7XHJcbiAgICAgICAgICB0aHJvdyBFcnJvclxyXG4gICAgICAgICAgICAoYmlnbnVtYmVyRXJyb3IgKyAnQXJndW1lbnQgJyArXHJcbiAgICAgICAgICAgICAgKG4uaXNJbnRlZ2VyKCkgPyAnb3V0IG9mIHJhbmdlOiAnIDogJ25vdCBhbiBpbnRlZ2VyOiAnKSArIHZhbHVlT2YobikpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKCF4YykgcmV0dXJuIG5ldyBCaWdOdW1iZXIoeCk7XHJcblxyXG4gICAgICBkID0gbmV3IEJpZ051bWJlcihPTkUpO1xyXG4gICAgICBuMSA9IGQwID0gbmV3IEJpZ051bWJlcihPTkUpO1xyXG4gICAgICBkMSA9IG4wID0gbmV3IEJpZ051bWJlcihPTkUpO1xyXG4gICAgICBzID0gY29lZmZUb1N0cmluZyh4Yyk7XHJcblxyXG4gICAgICAvLyBEZXRlcm1pbmUgaW5pdGlhbCBkZW5vbWluYXRvci5cclxuICAgICAgLy8gZCBpcyBhIHBvd2VyIG9mIDEwIGFuZCB0aGUgbWluaW11bSBtYXggZGVub21pbmF0b3IgdGhhdCBzcGVjaWZpZXMgdGhlIHZhbHVlIGV4YWN0bHkuXHJcbiAgICAgIGUgPSBkLmUgPSBzLmxlbmd0aCAtIHguZSAtIDE7XHJcbiAgICAgIGQuY1swXSA9IFBPV1NfVEVOWyhleHAgPSBlICUgTE9HX0JBU0UpIDwgMCA/IExPR19CQVNFICsgZXhwIDogZXhwXTtcclxuICAgICAgbWQgPSAhbWQgfHwgbi5jb21wYXJlZFRvKGQpID4gMCA/IChlID4gMCA/IGQgOiBuMSkgOiBuO1xyXG5cclxuICAgICAgZXhwID0gTUFYX0VYUDtcclxuICAgICAgTUFYX0VYUCA9IDEgLyAwO1xyXG4gICAgICBuID0gbmV3IEJpZ051bWJlcihzKTtcclxuXHJcbiAgICAgIC8vIG4wID0gZDEgPSAwXHJcbiAgICAgIG4wLmNbMF0gPSAwO1xyXG5cclxuICAgICAgZm9yICg7IDspICB7XHJcbiAgICAgICAgcSA9IGRpdihuLCBkLCAwLCAxKTtcclxuICAgICAgICBkMiA9IGQwLnBsdXMocS50aW1lcyhkMSkpO1xyXG4gICAgICAgIGlmIChkMi5jb21wYXJlZFRvKG1kKSA9PSAxKSBicmVhaztcclxuICAgICAgICBkMCA9IGQxO1xyXG4gICAgICAgIGQxID0gZDI7XHJcbiAgICAgICAgbjEgPSBuMC5wbHVzKHEudGltZXMoZDIgPSBuMSkpO1xyXG4gICAgICAgIG4wID0gZDI7XHJcbiAgICAgICAgZCA9IG4ubWludXMocS50aW1lcyhkMiA9IGQpKTtcclxuICAgICAgICBuID0gZDI7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGQyID0gZGl2KG1kLm1pbnVzKGQwKSwgZDEsIDAsIDEpO1xyXG4gICAgICBuMCA9IG4wLnBsdXMoZDIudGltZXMobjEpKTtcclxuICAgICAgZDAgPSBkMC5wbHVzKGQyLnRpbWVzKGQxKSk7XHJcbiAgICAgIG4wLnMgPSBuMS5zID0geC5zO1xyXG4gICAgICBlID0gZSAqIDI7XHJcblxyXG4gICAgICAvLyBEZXRlcm1pbmUgd2hpY2ggZnJhY3Rpb24gaXMgY2xvc2VyIHRvIHgsIG4wL2QwIG9yIG4xL2QxXHJcbiAgICAgIHIgPSBkaXYobjEsIGQxLCBlLCBST1VORElOR19NT0RFKS5taW51cyh4KS5hYnMoKS5jb21wYXJlZFRvKFxyXG4gICAgICAgICAgZGl2KG4wLCBkMCwgZSwgUk9VTkRJTkdfTU9ERSkubWludXMoeCkuYWJzKCkpIDwgMSA/IFtuMSwgZDFdIDogW24wLCBkMF07XHJcblxyXG4gICAgICBNQVhfRVhQID0gZXhwO1xyXG5cclxuICAgICAgcmV0dXJuIHI7XHJcbiAgICB9O1xyXG5cclxuXHJcbiAgICAvKlxyXG4gICAgICogUmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGlzIEJpZ051bWJlciBjb252ZXJ0ZWQgdG8gYSBudW1iZXIgcHJpbWl0aXZlLlxyXG4gICAgICovXHJcbiAgICBQLnRvTnVtYmVyID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICByZXR1cm4gK3ZhbHVlT2YodGhpcyk7XHJcbiAgICB9O1xyXG5cclxuXHJcbiAgICAvKlxyXG4gICAgICogUmV0dXJuIGEgc3RyaW5nIHJlcHJlc2VudGluZyB0aGUgdmFsdWUgb2YgdGhpcyBCaWdOdW1iZXIgcm91bmRlZCB0byBzZCBzaWduaWZpY2FudCBkaWdpdHNcclxuICAgICAqIHVzaW5nIHJvdW5kaW5nIG1vZGUgcm0gb3IgUk9VTkRJTkdfTU9ERS4gSWYgc2QgaXMgbGVzcyB0aGFuIHRoZSBudW1iZXIgb2YgZGlnaXRzXHJcbiAgICAgKiBuZWNlc3NhcnkgdG8gcmVwcmVzZW50IHRoZSBpbnRlZ2VyIHBhcnQgb2YgdGhlIHZhbHVlIGluIGZpeGVkLXBvaW50IG5vdGF0aW9uLCB0aGVuIHVzZVxyXG4gICAgICogZXhwb25lbnRpYWwgbm90YXRpb24uXHJcbiAgICAgKlxyXG4gICAgICogW3NkXSB7bnVtYmVyfSBTaWduaWZpY2FudCBkaWdpdHMuIEludGVnZXIsIDEgdG8gTUFYIGluY2x1c2l2ZS5cclxuICAgICAqIFtybV0ge251bWJlcn0gUm91bmRpbmcgbW9kZS4gSW50ZWdlciwgMCB0byA4IGluY2x1c2l2ZS5cclxuICAgICAqXHJcbiAgICAgKiAnW0JpZ051bWJlciBFcnJvcl0gQXJndW1lbnQge25vdCBhIHByaW1pdGl2ZSBudW1iZXJ8bm90IGFuIGludGVnZXJ8b3V0IG9mIHJhbmdlfToge3NkfHJtfSdcclxuICAgICAqL1xyXG4gICAgUC50b1ByZWNpc2lvbiA9IGZ1bmN0aW9uIChzZCwgcm0pIHtcclxuICAgICAgaWYgKHNkICE9IG51bGwpIGludENoZWNrKHNkLCAxLCBNQVgpO1xyXG4gICAgICByZXR1cm4gZm9ybWF0KHRoaXMsIHNkLCBybSwgMik7XHJcbiAgICB9O1xyXG5cclxuXHJcbiAgICAvKlxyXG4gICAgICogUmV0dXJuIGEgc3RyaW5nIHJlcHJlc2VudGluZyB0aGUgdmFsdWUgb2YgdGhpcyBCaWdOdW1iZXIgaW4gYmFzZSBiLCBvciBiYXNlIDEwIGlmIGIgaXNcclxuICAgICAqIG9taXR0ZWQuIElmIGEgYmFzZSBpcyBzcGVjaWZpZWQsIGluY2x1ZGluZyBiYXNlIDEwLCByb3VuZCBhY2NvcmRpbmcgdG8gREVDSU1BTF9QTEFDRVMgYW5kXHJcbiAgICAgKiBST1VORElOR19NT0RFLiBJZiBhIGJhc2UgaXMgbm90IHNwZWNpZmllZCwgYW5kIHRoaXMgQmlnTnVtYmVyIGhhcyBhIHBvc2l0aXZlIGV4cG9uZW50XHJcbiAgICAgKiB0aGF0IGlzIGVxdWFsIHRvIG9yIGdyZWF0ZXIgdGhhbiBUT19FWFBfUE9TLCBvciBhIG5lZ2F0aXZlIGV4cG9uZW50IGVxdWFsIHRvIG9yIGxlc3MgdGhhblxyXG4gICAgICogVE9fRVhQX05FRywgcmV0dXJuIGV4cG9uZW50aWFsIG5vdGF0aW9uLlxyXG4gICAgICpcclxuICAgICAqIFtiXSB7bnVtYmVyfSBJbnRlZ2VyLCAyIHRvIEFMUEhBQkVULmxlbmd0aCBpbmNsdXNpdmUuXHJcbiAgICAgKlxyXG4gICAgICogJ1tCaWdOdW1iZXIgRXJyb3JdIEJhc2Uge25vdCBhIHByaW1pdGl2ZSBudW1iZXJ8bm90IGFuIGludGVnZXJ8b3V0IG9mIHJhbmdlfToge2J9J1xyXG4gICAgICovXHJcbiAgICBQLnRvU3RyaW5nID0gZnVuY3Rpb24gKGIpIHtcclxuICAgICAgdmFyIHN0cixcclxuICAgICAgICBuID0gdGhpcyxcclxuICAgICAgICBzID0gbi5zLFxyXG4gICAgICAgIGUgPSBuLmU7XHJcblxyXG4gICAgICAvLyBJbmZpbml0eSBvciBOYU4/XHJcbiAgICAgIGlmIChlID09PSBudWxsKSB7XHJcbiAgICAgICAgaWYgKHMpIHtcclxuICAgICAgICAgIHN0ciA9ICdJbmZpbml0eSc7XHJcbiAgICAgICAgICBpZiAocyA8IDApIHN0ciA9ICctJyArIHN0cjtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgc3RyID0gJ05hTic7XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGlmIChiID09IG51bGwpIHtcclxuICAgICAgICAgIHN0ciA9IGUgPD0gVE9fRVhQX05FRyB8fCBlID49IFRPX0VYUF9QT1NcclxuICAgICAgICAgICA/IHRvRXhwb25lbnRpYWwoY29lZmZUb1N0cmluZyhuLmMpLCBlKVxyXG4gICAgICAgICAgIDogdG9GaXhlZFBvaW50KGNvZWZmVG9TdHJpbmcobi5jKSwgZSwgJzAnKTtcclxuICAgICAgICB9IGVsc2UgaWYgKGIgPT09IDEwKSB7XHJcbiAgICAgICAgICBuID0gcm91bmQobmV3IEJpZ051bWJlcihuKSwgREVDSU1BTF9QTEFDRVMgKyBlICsgMSwgUk9VTkRJTkdfTU9ERSk7XHJcbiAgICAgICAgICBzdHIgPSB0b0ZpeGVkUG9pbnQoY29lZmZUb1N0cmluZyhuLmMpLCBuLmUsICcwJyk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGludENoZWNrKGIsIDIsIEFMUEhBQkVULmxlbmd0aCwgJ0Jhc2UnKTtcclxuICAgICAgICAgIHN0ciA9IGNvbnZlcnRCYXNlKHRvRml4ZWRQb2ludChjb2VmZlRvU3RyaW5nKG4uYyksIGUsICcwJyksIDEwLCBiLCBzLCB0cnVlKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChzIDwgMCAmJiBuLmNbMF0pIHN0ciA9ICctJyArIHN0cjtcclxuICAgICAgfVxyXG5cclxuICAgICAgcmV0dXJuIHN0cjtcclxuICAgIH07XHJcblxyXG5cclxuICAgIC8qXHJcbiAgICAgKiBSZXR1cm4gYXMgdG9TdHJpbmcsIGJ1dCBkbyBub3QgYWNjZXB0IGEgYmFzZSBhcmd1bWVudCwgYW5kIGluY2x1ZGUgdGhlIG1pbnVzIHNpZ24gZm9yXHJcbiAgICAgKiBuZWdhdGl2ZSB6ZXJvLlxyXG4gICAgICovXHJcbiAgICBQLnZhbHVlT2YgPSBQLnRvSlNPTiA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgcmV0dXJuIHZhbHVlT2YodGhpcyk7XHJcbiAgICB9O1xyXG5cclxuXHJcbiAgICBQLl9pc0JpZ051bWJlciA9IHRydWU7XHJcblxyXG4gICAgaWYgKGNvbmZpZ09iamVjdCAhPSBudWxsKSBCaWdOdW1iZXIuc2V0KGNvbmZpZ09iamVjdCk7XHJcblxyXG4gICAgcmV0dXJuIEJpZ051bWJlcjtcclxuICB9XHJcblxyXG5cclxuICAvLyBQUklWQVRFIEhFTFBFUiBGVU5DVElPTlNcclxuXHJcbiAgLy8gVGhlc2UgZnVuY3Rpb25zIGRvbid0IG5lZWQgYWNjZXNzIHRvIHZhcmlhYmxlcyxcclxuICAvLyBlLmcuIERFQ0lNQUxfUExBQ0VTLCBpbiB0aGUgc2NvcGUgb2YgdGhlIGBjbG9uZWAgZnVuY3Rpb24gYWJvdmUuXHJcblxyXG5cclxuICBmdW5jdGlvbiBiaXRGbG9vcihuKSB7XHJcbiAgICB2YXIgaSA9IG4gfCAwO1xyXG4gICAgcmV0dXJuIG4gPiAwIHx8IG4gPT09IGkgPyBpIDogaSAtIDE7XHJcbiAgfVxyXG5cclxuXHJcbiAgLy8gUmV0dXJuIGEgY29lZmZpY2llbnQgYXJyYXkgYXMgYSBzdHJpbmcgb2YgYmFzZSAxMCBkaWdpdHMuXHJcbiAgZnVuY3Rpb24gY29lZmZUb1N0cmluZyhhKSB7XHJcbiAgICB2YXIgcywgeixcclxuICAgICAgaSA9IDEsXHJcbiAgICAgIGogPSBhLmxlbmd0aCxcclxuICAgICAgciA9IGFbMF0gKyAnJztcclxuXHJcbiAgICBmb3IgKDsgaSA8IGo7KSB7XHJcbiAgICAgIHMgPSBhW2krK10gKyAnJztcclxuICAgICAgeiA9IExPR19CQVNFIC0gcy5sZW5ndGg7XHJcbiAgICAgIGZvciAoOyB6LS07IHMgPSAnMCcgKyBzKTtcclxuICAgICAgciArPSBzO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIERldGVybWluZSB0cmFpbGluZyB6ZXJvcy5cclxuICAgIGZvciAoaiA9IHIubGVuZ3RoOyByLmNoYXJDb2RlQXQoLS1qKSA9PT0gNDg7KTtcclxuXHJcbiAgICByZXR1cm4gci5zbGljZSgwLCBqICsgMSB8fCAxKTtcclxuICB9XHJcblxyXG5cclxuICAvLyBDb21wYXJlIHRoZSB2YWx1ZSBvZiBCaWdOdW1iZXJzIHggYW5kIHkuXHJcbiAgZnVuY3Rpb24gY29tcGFyZSh4LCB5KSB7XHJcbiAgICB2YXIgYSwgYixcclxuICAgICAgeGMgPSB4LmMsXHJcbiAgICAgIHljID0geS5jLFxyXG4gICAgICBpID0geC5zLFxyXG4gICAgICBqID0geS5zLFxyXG4gICAgICBrID0geC5lLFxyXG4gICAgICBsID0geS5lO1xyXG5cclxuICAgIC8vIEVpdGhlciBOYU4/XHJcbiAgICBpZiAoIWkgfHwgIWopIHJldHVybiBudWxsO1xyXG5cclxuICAgIGEgPSB4YyAmJiAheGNbMF07XHJcbiAgICBiID0geWMgJiYgIXljWzBdO1xyXG5cclxuICAgIC8vIEVpdGhlciB6ZXJvP1xyXG4gICAgaWYgKGEgfHwgYikgcmV0dXJuIGEgPyBiID8gMCA6IC1qIDogaTtcclxuXHJcbiAgICAvLyBTaWducyBkaWZmZXI/XHJcbiAgICBpZiAoaSAhPSBqKSByZXR1cm4gaTtcclxuXHJcbiAgICBhID0gaSA8IDA7XHJcbiAgICBiID0gayA9PSBsO1xyXG5cclxuICAgIC8vIEVpdGhlciBJbmZpbml0eT9cclxuICAgIGlmICgheGMgfHwgIXljKSByZXR1cm4gYiA/IDAgOiAheGMgXiBhID8gMSA6IC0xO1xyXG5cclxuICAgIC8vIENvbXBhcmUgZXhwb25lbnRzLlxyXG4gICAgaWYgKCFiKSByZXR1cm4gayA+IGwgXiBhID8gMSA6IC0xO1xyXG5cclxuICAgIGogPSAoayA9IHhjLmxlbmd0aCkgPCAobCA9IHljLmxlbmd0aCkgPyBrIDogbDtcclxuXHJcbiAgICAvLyBDb21wYXJlIGRpZ2l0IGJ5IGRpZ2l0LlxyXG4gICAgZm9yIChpID0gMDsgaSA8IGo7IGkrKykgaWYgKHhjW2ldICE9IHljW2ldKSByZXR1cm4geGNbaV0gPiB5Y1tpXSBeIGEgPyAxIDogLTE7XHJcblxyXG4gICAgLy8gQ29tcGFyZSBsZW5ndGhzLlxyXG4gICAgcmV0dXJuIGsgPT0gbCA/IDAgOiBrID4gbCBeIGEgPyAxIDogLTE7XHJcbiAgfVxyXG5cclxuXHJcbiAgLypcclxuICAgKiBDaGVjayB0aGF0IG4gaXMgYSBwcmltaXRpdmUgbnVtYmVyLCBhbiBpbnRlZ2VyLCBhbmQgaW4gcmFuZ2UsIG90aGVyd2lzZSB0aHJvdy5cclxuICAgKi9cclxuICBmdW5jdGlvbiBpbnRDaGVjayhuLCBtaW4sIG1heCwgbmFtZSkge1xyXG4gICAgaWYgKG4gPCBtaW4gfHwgbiA+IG1heCB8fCBuICE9PSBtYXRoZmxvb3IobikpIHtcclxuICAgICAgdGhyb3cgRXJyb3JcclxuICAgICAgIChiaWdudW1iZXJFcnJvciArIChuYW1lIHx8ICdBcmd1bWVudCcpICsgKHR5cGVvZiBuID09ICdudW1iZXInXHJcbiAgICAgICAgID8gbiA8IG1pbiB8fCBuID4gbWF4ID8gJyBvdXQgb2YgcmFuZ2U6ICcgOiAnIG5vdCBhbiBpbnRlZ2VyOiAnXHJcbiAgICAgICAgIDogJyBub3QgYSBwcmltaXRpdmUgbnVtYmVyOiAnKSArIFN0cmluZyhuKSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuXHJcbiAgLy8gQXNzdW1lcyBmaW5pdGUgbi5cclxuICBmdW5jdGlvbiBpc09kZChuKSB7XHJcbiAgICB2YXIgayA9IG4uYy5sZW5ndGggLSAxO1xyXG4gICAgcmV0dXJuIGJpdEZsb29yKG4uZSAvIExPR19CQVNFKSA9PSBrICYmIG4uY1trXSAlIDIgIT0gMDtcclxuICB9XHJcblxyXG5cclxuICBmdW5jdGlvbiB0b0V4cG9uZW50aWFsKHN0ciwgZSkge1xyXG4gICAgcmV0dXJuIChzdHIubGVuZ3RoID4gMSA/IHN0ci5jaGFyQXQoMCkgKyAnLicgKyBzdHIuc2xpY2UoMSkgOiBzdHIpICtcclxuICAgICAoZSA8IDAgPyAnZScgOiAnZSsnKSArIGU7XHJcbiAgfVxyXG5cclxuXHJcbiAgZnVuY3Rpb24gdG9GaXhlZFBvaW50KHN0ciwgZSwgeikge1xyXG4gICAgdmFyIGxlbiwgenM7XHJcblxyXG4gICAgLy8gTmVnYXRpdmUgZXhwb25lbnQ/XHJcbiAgICBpZiAoZSA8IDApIHtcclxuXHJcbiAgICAgIC8vIFByZXBlbmQgemVyb3MuXHJcbiAgICAgIGZvciAoenMgPSB6ICsgJy4nOyArK2U7IHpzICs9IHopO1xyXG4gICAgICBzdHIgPSB6cyArIHN0cjtcclxuXHJcbiAgICAvLyBQb3NpdGl2ZSBleHBvbmVudFxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgbGVuID0gc3RyLmxlbmd0aDtcclxuXHJcbiAgICAgIC8vIEFwcGVuZCB6ZXJvcy5cclxuICAgICAgaWYgKCsrZSA+IGxlbikge1xyXG4gICAgICAgIGZvciAoenMgPSB6LCBlIC09IGxlbjsgLS1lOyB6cyArPSB6KTtcclxuICAgICAgICBzdHIgKz0genM7XHJcbiAgICAgIH0gZWxzZSBpZiAoZSA8IGxlbikge1xyXG4gICAgICAgIHN0ciA9IHN0ci5zbGljZSgwLCBlKSArICcuJyArIHN0ci5zbGljZShlKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBzdHI7XHJcbiAgfVxyXG5cclxuXHJcbiAgLy8gRVhQT1JUXHJcblxyXG5cclxuICBCaWdOdW1iZXIgPSBjbG9uZSgpO1xyXG4gIEJpZ051bWJlclsnZGVmYXVsdCddID0gQmlnTnVtYmVyLkJpZ051bWJlciA9IEJpZ051bWJlcjtcclxuXHJcbiAgLy8gQU1ELlxyXG4gIGlmICh0eXBlb2YgZGVmaW5lID09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCkge1xyXG4gICAgZGVmaW5lKGZ1bmN0aW9uICgpIHsgcmV0dXJuIEJpZ051bWJlcjsgfSk7XHJcblxyXG4gIC8vIE5vZGUuanMgYW5kIG90aGVyIGVudmlyb25tZW50cyB0aGF0IHN1cHBvcnQgbW9kdWxlLmV4cG9ydHMuXHJcbiAgfSBlbHNlIGlmICh0eXBlb2YgbW9kdWxlICE9ICd1bmRlZmluZWQnICYmIG1vZHVsZS5leHBvcnRzKSB7XHJcbiAgICBtb2R1bGUuZXhwb3J0cyA9IEJpZ051bWJlcjtcclxuXHJcbiAgLy8gQnJvd3Nlci5cclxuICB9IGVsc2Uge1xyXG4gICAgaWYgKCFnbG9iYWxPYmplY3QpIHtcclxuICAgICAgZ2xvYmFsT2JqZWN0ID0gdHlwZW9mIHNlbGYgIT0gJ3VuZGVmaW5lZCcgJiYgc2VsZiA/IHNlbGYgOiB3aW5kb3c7XHJcbiAgICB9XHJcblxyXG4gICAgZ2xvYmFsT2JqZWN0LkJpZ051bWJlciA9IEJpZ051bWJlcjtcclxuICB9XHJcbn0pKHRoaXMpO1xyXG4iLCJ2YXIgdXRpbCA9IHJlcXVpcmUoJ3V0aWwnKTtcbnZhciBTdHJlYW0gPSByZXF1aXJlKCdzdHJlYW0nKS5TdHJlYW07XG52YXIgRGVsYXllZFN0cmVhbSA9IHJlcXVpcmUoJ2RlbGF5ZWQtc3RyZWFtJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gQ29tYmluZWRTdHJlYW07XG5mdW5jdGlvbiBDb21iaW5lZFN0cmVhbSgpIHtcbiAgdGhpcy53cml0YWJsZSA9IGZhbHNlO1xuICB0aGlzLnJlYWRhYmxlID0gdHJ1ZTtcbiAgdGhpcy5kYXRhU2l6ZSA9IDA7XG4gIHRoaXMubWF4RGF0YVNpemUgPSAyICogMTAyNCAqIDEwMjQ7XG4gIHRoaXMucGF1c2VTdHJlYW1zID0gdHJ1ZTtcblxuICB0aGlzLl9yZWxlYXNlZCA9IGZhbHNlO1xuICB0aGlzLl9zdHJlYW1zID0gW107XG4gIHRoaXMuX2N1cnJlbnRTdHJlYW0gPSBudWxsO1xuICB0aGlzLl9pbnNpZGVMb29wID0gZmFsc2U7XG4gIHRoaXMuX3BlbmRpbmdOZXh0ID0gZmFsc2U7XG59XG51dGlsLmluaGVyaXRzKENvbWJpbmVkU3RyZWFtLCBTdHJlYW0pO1xuXG5Db21iaW5lZFN0cmVhbS5jcmVhdGUgPSBmdW5jdGlvbihvcHRpb25zKSB7XG4gIHZhciBjb21iaW5lZFN0cmVhbSA9IG5ldyB0aGlzKCk7XG5cbiAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG4gIGZvciAodmFyIG9wdGlvbiBpbiBvcHRpb25zKSB7XG4gICAgY29tYmluZWRTdHJlYW1bb3B0aW9uXSA9IG9wdGlvbnNbb3B0aW9uXTtcbiAgfVxuXG4gIHJldHVybiBjb21iaW5lZFN0cmVhbTtcbn07XG5cbkNvbWJpbmVkU3RyZWFtLmlzU3RyZWFtTGlrZSA9IGZ1bmN0aW9uKHN0cmVhbSkge1xuICByZXR1cm4gKHR5cGVvZiBzdHJlYW0gIT09ICdmdW5jdGlvbicpXG4gICAgJiYgKHR5cGVvZiBzdHJlYW0gIT09ICdzdHJpbmcnKVxuICAgICYmICh0eXBlb2Ygc3RyZWFtICE9PSAnYm9vbGVhbicpXG4gICAgJiYgKHR5cGVvZiBzdHJlYW0gIT09ICdudW1iZXInKVxuICAgICYmICghQnVmZmVyLmlzQnVmZmVyKHN0cmVhbSkpO1xufTtcblxuQ29tYmluZWRTdHJlYW0ucHJvdG90eXBlLmFwcGVuZCA9IGZ1bmN0aW9uKHN0cmVhbSkge1xuICB2YXIgaXNTdHJlYW1MaWtlID0gQ29tYmluZWRTdHJlYW0uaXNTdHJlYW1MaWtlKHN0cmVhbSk7XG5cbiAgaWYgKGlzU3RyZWFtTGlrZSkge1xuICAgIGlmICghKHN0cmVhbSBpbnN0YW5jZW9mIERlbGF5ZWRTdHJlYW0pKSB7XG4gICAgICB2YXIgbmV3U3RyZWFtID0gRGVsYXllZFN0cmVhbS5jcmVhdGUoc3RyZWFtLCB7XG4gICAgICAgIG1heERhdGFTaXplOiBJbmZpbml0eSxcbiAgICAgICAgcGF1c2VTdHJlYW06IHRoaXMucGF1c2VTdHJlYW1zLFxuICAgICAgfSk7XG4gICAgICBzdHJlYW0ub24oJ2RhdGEnLCB0aGlzLl9jaGVja0RhdGFTaXplLmJpbmQodGhpcykpO1xuICAgICAgc3RyZWFtID0gbmV3U3RyZWFtO1xuICAgIH1cblxuICAgIHRoaXMuX2hhbmRsZUVycm9ycyhzdHJlYW0pO1xuXG4gICAgaWYgKHRoaXMucGF1c2VTdHJlYW1zKSB7XG4gICAgICBzdHJlYW0ucGF1c2UoKTtcbiAgICB9XG4gIH1cblxuICB0aGlzLl9zdHJlYW1zLnB1c2goc3RyZWFtKTtcbiAgcmV0dXJuIHRoaXM7XG59O1xuXG5Db21iaW5lZFN0cmVhbS5wcm90b3R5cGUucGlwZSA9IGZ1bmN0aW9uKGRlc3QsIG9wdGlvbnMpIHtcbiAgU3RyZWFtLnByb3RvdHlwZS5waXBlLmNhbGwodGhpcywgZGVzdCwgb3B0aW9ucyk7XG4gIHRoaXMucmVzdW1lKCk7XG4gIHJldHVybiBkZXN0O1xufTtcblxuQ29tYmluZWRTdHJlYW0ucHJvdG90eXBlLl9nZXROZXh0ID0gZnVuY3Rpb24oKSB7XG4gIHRoaXMuX2N1cnJlbnRTdHJlYW0gPSBudWxsO1xuXG4gIGlmICh0aGlzLl9pbnNpZGVMb29wKSB7XG4gICAgdGhpcy5fcGVuZGluZ05leHQgPSB0cnVlO1xuICAgIHJldHVybjsgLy8gZGVmZXIgY2FsbFxuICB9XG5cbiAgdGhpcy5faW5zaWRlTG9vcCA9IHRydWU7XG4gIHRyeSB7XG4gICAgZG8ge1xuICAgICAgdGhpcy5fcGVuZGluZ05leHQgPSBmYWxzZTtcbiAgICAgIHRoaXMuX3JlYWxHZXROZXh0KCk7XG4gICAgfSB3aGlsZSAodGhpcy5fcGVuZGluZ05leHQpO1xuICB9IGZpbmFsbHkge1xuICAgIHRoaXMuX2luc2lkZUxvb3AgPSBmYWxzZTtcbiAgfVxufTtcblxuQ29tYmluZWRTdHJlYW0ucHJvdG90eXBlLl9yZWFsR2V0TmV4dCA9IGZ1bmN0aW9uKCkge1xuICB2YXIgc3RyZWFtID0gdGhpcy5fc3RyZWFtcy5zaGlmdCgpO1xuXG5cbiAgaWYgKHR5cGVvZiBzdHJlYW0gPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICB0aGlzLmVuZCgpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmICh0eXBlb2Ygc3RyZWFtICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgdGhpcy5fcGlwZU5leHQoc3RyZWFtKTtcbiAgICByZXR1cm47XG4gIH1cblxuICB2YXIgZ2V0U3RyZWFtID0gc3RyZWFtO1xuICBnZXRTdHJlYW0oZnVuY3Rpb24oc3RyZWFtKSB7XG4gICAgdmFyIGlzU3RyZWFtTGlrZSA9IENvbWJpbmVkU3RyZWFtLmlzU3RyZWFtTGlrZShzdHJlYW0pO1xuICAgIGlmIChpc1N0cmVhbUxpa2UpIHtcbiAgICAgIHN0cmVhbS5vbignZGF0YScsIHRoaXMuX2NoZWNrRGF0YVNpemUuYmluZCh0aGlzKSk7XG4gICAgICB0aGlzLl9oYW5kbGVFcnJvcnMoc3RyZWFtKTtcbiAgICB9XG5cbiAgICB0aGlzLl9waXBlTmV4dChzdHJlYW0pO1xuICB9LmJpbmQodGhpcykpO1xufTtcblxuQ29tYmluZWRTdHJlYW0ucHJvdG90eXBlLl9waXBlTmV4dCA9IGZ1bmN0aW9uKHN0cmVhbSkge1xuICB0aGlzLl9jdXJyZW50U3RyZWFtID0gc3RyZWFtO1xuXG4gIHZhciBpc1N0cmVhbUxpa2UgPSBDb21iaW5lZFN0cmVhbS5pc1N0cmVhbUxpa2Uoc3RyZWFtKTtcbiAgaWYgKGlzU3RyZWFtTGlrZSkge1xuICAgIHN0cmVhbS5vbignZW5kJywgdGhpcy5fZ2V0TmV4dC5iaW5kKHRoaXMpKTtcbiAgICBzdHJlYW0ucGlwZSh0aGlzLCB7ZW5kOiBmYWxzZX0pO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHZhciB2YWx1ZSA9IHN0cmVhbTtcbiAgdGhpcy53cml0ZSh2YWx1ZSk7XG4gIHRoaXMuX2dldE5leHQoKTtcbn07XG5cbkNvbWJpbmVkU3RyZWFtLnByb3RvdHlwZS5faGFuZGxlRXJyb3JzID0gZnVuY3Rpb24oc3RyZWFtKSB7XG4gIHZhciBzZWxmID0gdGhpcztcbiAgc3RyZWFtLm9uKCdlcnJvcicsIGZ1bmN0aW9uKGVycikge1xuICAgIHNlbGYuX2VtaXRFcnJvcihlcnIpO1xuICB9KTtcbn07XG5cbkNvbWJpbmVkU3RyZWFtLnByb3RvdHlwZS53cml0ZSA9IGZ1bmN0aW9uKGRhdGEpIHtcbiAgdGhpcy5lbWl0KCdkYXRhJywgZGF0YSk7XG59O1xuXG5Db21iaW5lZFN0cmVhbS5wcm90b3R5cGUucGF1c2UgPSBmdW5jdGlvbigpIHtcbiAgaWYgKCF0aGlzLnBhdXNlU3RyZWFtcykge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmKHRoaXMucGF1c2VTdHJlYW1zICYmIHRoaXMuX2N1cnJlbnRTdHJlYW0gJiYgdHlwZW9mKHRoaXMuX2N1cnJlbnRTdHJlYW0ucGF1c2UpID09ICdmdW5jdGlvbicpIHRoaXMuX2N1cnJlbnRTdHJlYW0ucGF1c2UoKTtcbiAgdGhpcy5lbWl0KCdwYXVzZScpO1xufTtcblxuQ29tYmluZWRTdHJlYW0ucHJvdG90eXBlLnJlc3VtZSA9IGZ1bmN0aW9uKCkge1xuICBpZiAoIXRoaXMuX3JlbGVhc2VkKSB7XG4gICAgdGhpcy5fcmVsZWFzZWQgPSB0cnVlO1xuICAgIHRoaXMud3JpdGFibGUgPSB0cnVlO1xuICAgIHRoaXMuX2dldE5leHQoKTtcbiAgfVxuXG4gIGlmKHRoaXMucGF1c2VTdHJlYW1zICYmIHRoaXMuX2N1cnJlbnRTdHJlYW0gJiYgdHlwZW9mKHRoaXMuX2N1cnJlbnRTdHJlYW0ucmVzdW1lKSA9PSAnZnVuY3Rpb24nKSB0aGlzLl9jdXJyZW50U3RyZWFtLnJlc3VtZSgpO1xuICB0aGlzLmVtaXQoJ3Jlc3VtZScpO1xufTtcblxuQ29tYmluZWRTdHJlYW0ucHJvdG90eXBlLmVuZCA9IGZ1bmN0aW9uKCkge1xuICB0aGlzLl9yZXNldCgpO1xuICB0aGlzLmVtaXQoJ2VuZCcpO1xufTtcblxuQ29tYmluZWRTdHJlYW0ucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbigpIHtcbiAgdGhpcy5fcmVzZXQoKTtcbiAgdGhpcy5lbWl0KCdjbG9zZScpO1xufTtcblxuQ29tYmluZWRTdHJlYW0ucHJvdG90eXBlLl9yZXNldCA9IGZ1bmN0aW9uKCkge1xuICB0aGlzLndyaXRhYmxlID0gZmFsc2U7XG4gIHRoaXMuX3N0cmVhbXMgPSBbXTtcbiAgdGhpcy5fY3VycmVudFN0cmVhbSA9IG51bGw7XG59O1xuXG5Db21iaW5lZFN0cmVhbS5wcm90b3R5cGUuX2NoZWNrRGF0YVNpemUgPSBmdW5jdGlvbigpIHtcbiAgdGhpcy5fdXBkYXRlRGF0YVNpemUoKTtcbiAgaWYgKHRoaXMuZGF0YVNpemUgPD0gdGhpcy5tYXhEYXRhU2l6ZSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHZhciBtZXNzYWdlID1cbiAgICAnRGVsYXllZFN0cmVhbSNtYXhEYXRhU2l6ZSBvZiAnICsgdGhpcy5tYXhEYXRhU2l6ZSArICcgYnl0ZXMgZXhjZWVkZWQuJztcbiAgdGhpcy5fZW1pdEVycm9yKG5ldyBFcnJvcihtZXNzYWdlKSk7XG59O1xuXG5Db21iaW5lZFN0cmVhbS5wcm90b3R5cGUuX3VwZGF0ZURhdGFTaXplID0gZnVuY3Rpb24oKSB7XG4gIHRoaXMuZGF0YVNpemUgPSAwO1xuXG4gIHZhciBzZWxmID0gdGhpcztcbiAgdGhpcy5fc3RyZWFtcy5mb3JFYWNoKGZ1bmN0aW9uKHN0cmVhbSkge1xuICAgIGlmICghc3RyZWFtLmRhdGFTaXplKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgc2VsZi5kYXRhU2l6ZSArPSBzdHJlYW0uZGF0YVNpemU7XG4gIH0pO1xuXG4gIGlmICh0aGlzLl9jdXJyZW50U3RyZWFtICYmIHRoaXMuX2N1cnJlbnRTdHJlYW0uZGF0YVNpemUpIHtcbiAgICB0aGlzLmRhdGFTaXplICs9IHRoaXMuX2N1cnJlbnRTdHJlYW0uZGF0YVNpemU7XG4gIH1cbn07XG5cbkNvbWJpbmVkU3RyZWFtLnByb3RvdHlwZS5fZW1pdEVycm9yID0gZnVuY3Rpb24oZXJyKSB7XG4gIHRoaXMuX3Jlc2V0KCk7XG4gIHRoaXMuZW1pdCgnZXJyb3InLCBlcnIpO1xufTtcbiIsIi8qKlxuICogSGVscGVycy5cbiAqL1xuXG52YXIgcyA9IDEwMDA7XG52YXIgbSA9IHMgKiA2MDtcbnZhciBoID0gbSAqIDYwO1xudmFyIGQgPSBoICogMjQ7XG52YXIgdyA9IGQgKiA3O1xudmFyIHkgPSBkICogMzY1LjI1O1xuXG4vKipcbiAqIFBhcnNlIG9yIGZvcm1hdCB0aGUgZ2l2ZW4gYHZhbGAuXG4gKlxuICogT3B0aW9uczpcbiAqXG4gKiAgLSBgbG9uZ2AgdmVyYm9zZSBmb3JtYXR0aW5nIFtmYWxzZV1cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ3xOdW1iZXJ9IHZhbFxuICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zXVxuICogQHRocm93cyB7RXJyb3J9IHRocm93IGFuIGVycm9yIGlmIHZhbCBpcyBub3QgYSBub24tZW1wdHkgc3RyaW5nIG9yIGEgbnVtYmVyXG4gKiBAcmV0dXJuIHtTdHJpbmd8TnVtYmVyfVxuICogQGFwaSBwdWJsaWNcbiAqL1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKHZhbCwgb3B0aW9ucykge1xuICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcbiAgdmFyIHR5cGUgPSB0eXBlb2YgdmFsO1xuICBpZiAodHlwZSA9PT0gJ3N0cmluZycgJiYgdmFsLmxlbmd0aCA+IDApIHtcbiAgICByZXR1cm4gcGFyc2UodmFsKTtcbiAgfSBlbHNlIGlmICh0eXBlID09PSAnbnVtYmVyJyAmJiBpc0Zpbml0ZSh2YWwpKSB7XG4gICAgcmV0dXJuIG9wdGlvbnMubG9uZyA/IGZtdExvbmcodmFsKSA6IGZtdFNob3J0KHZhbCk7XG4gIH1cbiAgdGhyb3cgbmV3IEVycm9yKFxuICAgICd2YWwgaXMgbm90IGEgbm9uLWVtcHR5IHN0cmluZyBvciBhIHZhbGlkIG51bWJlci4gdmFsPScgK1xuICAgICAgSlNPTi5zdHJpbmdpZnkodmFsKVxuICApO1xufTtcblxuLyoqXG4gKiBQYXJzZSB0aGUgZ2l2ZW4gYHN0cmAgYW5kIHJldHVybiBtaWxsaXNlY29uZHMuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IHN0clxuICogQHJldHVybiB7TnVtYmVyfVxuICogQGFwaSBwcml2YXRlXG4gKi9cblxuZnVuY3Rpb24gcGFyc2Uoc3RyKSB7XG4gIHN0ciA9IFN0cmluZyhzdHIpO1xuICBpZiAoc3RyLmxlbmd0aCA+IDEwMCkge1xuICAgIHJldHVybjtcbiAgfVxuICB2YXIgbWF0Y2ggPSAvXigtPyg/OlxcZCspP1xcLj9cXGQrKSAqKG1pbGxpc2Vjb25kcz98bXNlY3M/fG1zfHNlY29uZHM/fHNlY3M/fHN8bWludXRlcz98bWlucz98bXxob3Vycz98aHJzP3xofGRheXM/fGR8d2Vla3M/fHd8eWVhcnM/fHlycz98eSk/JC9pLmV4ZWMoXG4gICAgc3RyXG4gICk7XG4gIGlmICghbWF0Y2gpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgdmFyIG4gPSBwYXJzZUZsb2F0KG1hdGNoWzFdKTtcbiAgdmFyIHR5cGUgPSAobWF0Y2hbMl0gfHwgJ21zJykudG9Mb3dlckNhc2UoKTtcbiAgc3dpdGNoICh0eXBlKSB7XG4gICAgY2FzZSAneWVhcnMnOlxuICAgIGNhc2UgJ3llYXInOlxuICAgIGNhc2UgJ3lycyc6XG4gICAgY2FzZSAneXInOlxuICAgIGNhc2UgJ3knOlxuICAgICAgcmV0dXJuIG4gKiB5O1xuICAgIGNhc2UgJ3dlZWtzJzpcbiAgICBjYXNlICd3ZWVrJzpcbiAgICBjYXNlICd3JzpcbiAgICAgIHJldHVybiBuICogdztcbiAgICBjYXNlICdkYXlzJzpcbiAgICBjYXNlICdkYXknOlxuICAgIGNhc2UgJ2QnOlxuICAgICAgcmV0dXJuIG4gKiBkO1xuICAgIGNhc2UgJ2hvdXJzJzpcbiAgICBjYXNlICdob3VyJzpcbiAgICBjYXNlICdocnMnOlxuICAgIGNhc2UgJ2hyJzpcbiAgICBjYXNlICdoJzpcbiAgICAgIHJldHVybiBuICogaDtcbiAgICBjYXNlICdtaW51dGVzJzpcbiAgICBjYXNlICdtaW51dGUnOlxuICAgIGNhc2UgJ21pbnMnOlxuICAgIGNhc2UgJ21pbic6XG4gICAgY2FzZSAnbSc6XG4gICAgICByZXR1cm4gbiAqIG07XG4gICAgY2FzZSAnc2Vjb25kcyc6XG4gICAgY2FzZSAnc2Vjb25kJzpcbiAgICBjYXNlICdzZWNzJzpcbiAgICBjYXNlICdzZWMnOlxuICAgIGNhc2UgJ3MnOlxuICAgICAgcmV0dXJuIG4gKiBzO1xuICAgIGNhc2UgJ21pbGxpc2Vjb25kcyc6XG4gICAgY2FzZSAnbWlsbGlzZWNvbmQnOlxuICAgIGNhc2UgJ21zZWNzJzpcbiAgICBjYXNlICdtc2VjJzpcbiAgICBjYXNlICdtcyc6XG4gICAgICByZXR1cm4gbjtcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxufVxuXG4vKipcbiAqIFNob3J0IGZvcm1hdCBmb3IgYG1zYC5cbiAqXG4gKiBAcGFyYW0ge051bWJlcn0gbXNcbiAqIEByZXR1cm4ge1N0cmluZ31cbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5cbmZ1bmN0aW9uIGZtdFNob3J0KG1zKSB7XG4gIHZhciBtc0FicyA9IE1hdGguYWJzKG1zKTtcbiAgaWYgKG1zQWJzID49IGQpIHtcbiAgICByZXR1cm4gTWF0aC5yb3VuZChtcyAvIGQpICsgJ2QnO1xuICB9XG4gIGlmIChtc0FicyA+PSBoKSB7XG4gICAgcmV0dXJuIE1hdGgucm91bmQobXMgLyBoKSArICdoJztcbiAgfVxuICBpZiAobXNBYnMgPj0gbSkge1xuICAgIHJldHVybiBNYXRoLnJvdW5kKG1zIC8gbSkgKyAnbSc7XG4gIH1cbiAgaWYgKG1zQWJzID49IHMpIHtcbiAgICByZXR1cm4gTWF0aC5yb3VuZChtcyAvIHMpICsgJ3MnO1xuICB9XG4gIHJldHVybiBtcyArICdtcyc7XG59XG5cbi8qKlxuICogTG9uZyBmb3JtYXQgZm9yIGBtc2AuXG4gKlxuICogQHBhcmFtIHtOdW1iZXJ9IG1zXG4gKiBAcmV0dXJuIHtTdHJpbmd9XG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuXG5mdW5jdGlvbiBmbXRMb25nKG1zKSB7XG4gIHZhciBtc0FicyA9IE1hdGguYWJzKG1zKTtcbiAgaWYgKG1zQWJzID49IGQpIHtcbiAgICByZXR1cm4gcGx1cmFsKG1zLCBtc0FicywgZCwgJ2RheScpO1xuICB9XG4gIGlmIChtc0FicyA+PSBoKSB7XG4gICAgcmV0dXJuIHBsdXJhbChtcywgbXNBYnMsIGgsICdob3VyJyk7XG4gIH1cbiAgaWYgKG1zQWJzID49IG0pIHtcbiAgICByZXR1cm4gcGx1cmFsKG1zLCBtc0FicywgbSwgJ21pbnV0ZScpO1xuICB9XG4gIGlmIChtc0FicyA+PSBzKSB7XG4gICAgcmV0dXJuIHBsdXJhbChtcywgbXNBYnMsIHMsICdzZWNvbmQnKTtcbiAgfVxuICByZXR1cm4gbXMgKyAnIG1zJztcbn1cblxuLyoqXG4gKiBQbHVyYWxpemF0aW9uIGhlbHBlci5cbiAqL1xuXG5mdW5jdGlvbiBwbHVyYWwobXMsIG1zQWJzLCBuLCBuYW1lKSB7XG4gIHZhciBpc1BsdXJhbCA9IG1zQWJzID49IG4gKiAxLjU7XG4gIHJldHVybiBNYXRoLnJvdW5kKG1zIC8gbikgKyAnICcgKyBuYW1lICsgKGlzUGx1cmFsID8gJ3MnIDogJycpO1xufVxuIiwiLyogZXNsaW50LWVudiBicm93c2VyICovXG5cbi8qKlxuICogVGhpcyBpcyB0aGUgd2ViIGJyb3dzZXIgaW1wbGVtZW50YXRpb24gb2YgYGRlYnVnKClgLlxuICovXG5cbmV4cG9ydHMuZm9ybWF0QXJncyA9IGZvcm1hdEFyZ3M7XG5leHBvcnRzLnNhdmUgPSBzYXZlO1xuZXhwb3J0cy5sb2FkID0gbG9hZDtcbmV4cG9ydHMudXNlQ29sb3JzID0gdXNlQ29sb3JzO1xuZXhwb3J0cy5zdG9yYWdlID0gbG9jYWxzdG9yYWdlKCk7XG5leHBvcnRzLmRlc3Ryb3kgPSAoKCkgPT4ge1xuXHRsZXQgd2FybmVkID0gZmFsc2U7XG5cblx0cmV0dXJuICgpID0+IHtcblx0XHRpZiAoIXdhcm5lZCkge1xuXHRcdFx0d2FybmVkID0gdHJ1ZTtcblx0XHRcdGNvbnNvbGUud2FybignSW5zdGFuY2UgbWV0aG9kIGBkZWJ1Zy5kZXN0cm95KClgIGlzIGRlcHJlY2F0ZWQgYW5kIG5vIGxvbmdlciBkb2VzIGFueXRoaW5nLiBJdCB3aWxsIGJlIHJlbW92ZWQgaW4gdGhlIG5leHQgbWFqb3IgdmVyc2lvbiBvZiBgZGVidWdgLicpO1xuXHRcdH1cblx0fTtcbn0pKCk7XG5cbi8qKlxuICogQ29sb3JzLlxuICovXG5cbmV4cG9ydHMuY29sb3JzID0gW1xuXHQnIzAwMDBDQycsXG5cdCcjMDAwMEZGJyxcblx0JyMwMDMzQ0MnLFxuXHQnIzAwMzNGRicsXG5cdCcjMDA2NkNDJyxcblx0JyMwMDY2RkYnLFxuXHQnIzAwOTlDQycsXG5cdCcjMDA5OUZGJyxcblx0JyMwMENDMDAnLFxuXHQnIzAwQ0MzMycsXG5cdCcjMDBDQzY2Jyxcblx0JyMwMENDOTknLFxuXHQnIzAwQ0NDQycsXG5cdCcjMDBDQ0ZGJyxcblx0JyMzMzAwQ0MnLFxuXHQnIzMzMDBGRicsXG5cdCcjMzMzM0NDJyxcblx0JyMzMzMzRkYnLFxuXHQnIzMzNjZDQycsXG5cdCcjMzM2NkZGJyxcblx0JyMzMzk5Q0MnLFxuXHQnIzMzOTlGRicsXG5cdCcjMzNDQzAwJyxcblx0JyMzM0NDMzMnLFxuXHQnIzMzQ0M2NicsXG5cdCcjMzNDQzk5Jyxcblx0JyMzM0NDQ0MnLFxuXHQnIzMzQ0NGRicsXG5cdCcjNjYwMENDJyxcblx0JyM2NjAwRkYnLFxuXHQnIzY2MzNDQycsXG5cdCcjNjYzM0ZGJyxcblx0JyM2NkNDMDAnLFxuXHQnIzY2Q0MzMycsXG5cdCcjOTkwMENDJyxcblx0JyM5OTAwRkYnLFxuXHQnIzk5MzNDQycsXG5cdCcjOTkzM0ZGJyxcblx0JyM5OUNDMDAnLFxuXHQnIzk5Q0MzMycsXG5cdCcjQ0MwMDAwJyxcblx0JyNDQzAwMzMnLFxuXHQnI0NDMDA2NicsXG5cdCcjQ0MwMDk5Jyxcblx0JyNDQzAwQ0MnLFxuXHQnI0NDMDBGRicsXG5cdCcjQ0MzMzAwJyxcblx0JyNDQzMzMzMnLFxuXHQnI0NDMzM2NicsXG5cdCcjQ0MzMzk5Jyxcblx0JyNDQzMzQ0MnLFxuXHQnI0NDMzNGRicsXG5cdCcjQ0M2NjAwJyxcblx0JyNDQzY2MzMnLFxuXHQnI0NDOTkwMCcsXG5cdCcjQ0M5OTMzJyxcblx0JyNDQ0NDMDAnLFxuXHQnI0NDQ0MzMycsXG5cdCcjRkYwMDAwJyxcblx0JyNGRjAwMzMnLFxuXHQnI0ZGMDA2NicsXG5cdCcjRkYwMDk5Jyxcblx0JyNGRjAwQ0MnLFxuXHQnI0ZGMDBGRicsXG5cdCcjRkYzMzAwJyxcblx0JyNGRjMzMzMnLFxuXHQnI0ZGMzM2NicsXG5cdCcjRkYzMzk5Jyxcblx0JyNGRjMzQ0MnLFxuXHQnI0ZGMzNGRicsXG5cdCcjRkY2NjAwJyxcblx0JyNGRjY2MzMnLFxuXHQnI0ZGOTkwMCcsXG5cdCcjRkY5OTMzJyxcblx0JyNGRkNDMDAnLFxuXHQnI0ZGQ0MzMydcbl07XG5cbi8qKlxuICogQ3VycmVudGx5IG9ubHkgV2ViS2l0LWJhc2VkIFdlYiBJbnNwZWN0b3JzLCBGaXJlZm94ID49IHYzMSxcbiAqIGFuZCB0aGUgRmlyZWJ1ZyBleHRlbnNpb24gKGFueSBGaXJlZm94IHZlcnNpb24pIGFyZSBrbm93blxuICogdG8gc3VwcG9ydCBcIiVjXCIgQ1NTIGN1c3RvbWl6YXRpb25zLlxuICpcbiAqIFRPRE86IGFkZCBhIGBsb2NhbFN0b3JhZ2VgIHZhcmlhYmxlIHRvIGV4cGxpY2l0bHkgZW5hYmxlL2Rpc2FibGUgY29sb3JzXG4gKi9cblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGNvbXBsZXhpdHlcbmZ1bmN0aW9uIHVzZUNvbG9ycygpIHtcblx0Ly8gTkI6IEluIGFuIEVsZWN0cm9uIHByZWxvYWQgc2NyaXB0LCBkb2N1bWVudCB3aWxsIGJlIGRlZmluZWQgYnV0IG5vdCBmdWxseVxuXHQvLyBpbml0aWFsaXplZC4gU2luY2Ugd2Uga25vdyB3ZSdyZSBpbiBDaHJvbWUsIHdlJ2xsIGp1c3QgZGV0ZWN0IHRoaXMgY2FzZVxuXHQvLyBleHBsaWNpdGx5XG5cdGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiB3aW5kb3cucHJvY2VzcyAmJiAod2luZG93LnByb2Nlc3MudHlwZSA9PT0gJ3JlbmRlcmVyJyB8fCB3aW5kb3cucHJvY2Vzcy5fX253anMpKSB7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblxuXHQvLyBJbnRlcm5ldCBFeHBsb3JlciBhbmQgRWRnZSBkbyBub3Qgc3VwcG9ydCBjb2xvcnMuXG5cdGlmICh0eXBlb2YgbmF2aWdhdG9yICE9PSAndW5kZWZpbmVkJyAmJiBuYXZpZ2F0b3IudXNlckFnZW50ICYmIG5hdmlnYXRvci51c2VyQWdlbnQudG9Mb3dlckNhc2UoKS5tYXRjaCgvKGVkZ2V8dHJpZGVudClcXC8oXFxkKykvKSkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXG5cdC8vIElzIHdlYmtpdD8gaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL2EvMTY0NTk2MDYvMzc2NzczXG5cdC8vIGRvY3VtZW50IGlzIHVuZGVmaW5lZCBpbiByZWFjdC1uYXRpdmU6IGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC1uYXRpdmUvcHVsbC8xNjMyXG5cdHJldHVybiAodHlwZW9mIGRvY3VtZW50ICE9PSAndW5kZWZpbmVkJyAmJiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQgJiYgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlICYmIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zdHlsZS5XZWJraXRBcHBlYXJhbmNlKSB8fFxuXHRcdC8vIElzIGZpcmVidWc/IGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9hLzM5ODEyMC8zNzY3NzNcblx0XHQodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgd2luZG93LmNvbnNvbGUgJiYgKHdpbmRvdy5jb25zb2xlLmZpcmVidWcgfHwgKHdpbmRvdy5jb25zb2xlLmV4Y2VwdGlvbiAmJiB3aW5kb3cuY29uc29sZS50YWJsZSkpKSB8fFxuXHRcdC8vIElzIGZpcmVmb3ggPj0gdjMxP1xuXHRcdC8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvVG9vbHMvV2ViX0NvbnNvbGUjU3R5bGluZ19tZXNzYWdlc1xuXHRcdCh0eXBlb2YgbmF2aWdhdG9yICE9PSAndW5kZWZpbmVkJyAmJiBuYXZpZ2F0b3IudXNlckFnZW50ICYmIG5hdmlnYXRvci51c2VyQWdlbnQudG9Mb3dlckNhc2UoKS5tYXRjaCgvZmlyZWZveFxcLyhcXGQrKS8pICYmIHBhcnNlSW50KFJlZ0V4cC4kMSwgMTApID49IDMxKSB8fFxuXHRcdC8vIERvdWJsZSBjaGVjayB3ZWJraXQgaW4gdXNlckFnZW50IGp1c3QgaW4gY2FzZSB3ZSBhcmUgaW4gYSB3b3JrZXJcblx0XHQodHlwZW9mIG5hdmlnYXRvciAhPT0gJ3VuZGVmaW5lZCcgJiYgbmF2aWdhdG9yLnVzZXJBZ2VudCAmJiBuYXZpZ2F0b3IudXNlckFnZW50LnRvTG93ZXJDYXNlKCkubWF0Y2goL2FwcGxld2Via2l0XFwvKFxcZCspLykpO1xufVxuXG4vKipcbiAqIENvbG9yaXplIGxvZyBhcmd1bWVudHMgaWYgZW5hYmxlZC5cbiAqXG4gKiBAYXBpIHB1YmxpY1xuICovXG5cbmZ1bmN0aW9uIGZvcm1hdEFyZ3MoYXJncykge1xuXHRhcmdzWzBdID0gKHRoaXMudXNlQ29sb3JzID8gJyVjJyA6ICcnKSArXG5cdFx0dGhpcy5uYW1lc3BhY2UgK1xuXHRcdCh0aGlzLnVzZUNvbG9ycyA/ICcgJWMnIDogJyAnKSArXG5cdFx0YXJnc1swXSArXG5cdFx0KHRoaXMudXNlQ29sb3JzID8gJyVjICcgOiAnICcpICtcblx0XHQnKycgKyBtb2R1bGUuZXhwb3J0cy5odW1hbml6ZSh0aGlzLmRpZmYpO1xuXG5cdGlmICghdGhpcy51c2VDb2xvcnMpIHtcblx0XHRyZXR1cm47XG5cdH1cblxuXHRjb25zdCBjID0gJ2NvbG9yOiAnICsgdGhpcy5jb2xvcjtcblx0YXJncy5zcGxpY2UoMSwgMCwgYywgJ2NvbG9yOiBpbmhlcml0Jyk7XG5cblx0Ly8gVGhlIGZpbmFsIFwiJWNcIiBpcyBzb21ld2hhdCB0cmlja3ksIGJlY2F1c2UgdGhlcmUgY291bGQgYmUgb3RoZXJcblx0Ly8gYXJndW1lbnRzIHBhc3NlZCBlaXRoZXIgYmVmb3JlIG9yIGFmdGVyIHRoZSAlYywgc28gd2UgbmVlZCB0b1xuXHQvLyBmaWd1cmUgb3V0IHRoZSBjb3JyZWN0IGluZGV4IHRvIGluc2VydCB0aGUgQ1NTIGludG9cblx0bGV0IGluZGV4ID0gMDtcblx0bGV0IGxhc3RDID0gMDtcblx0YXJnc1swXS5yZXBsYWNlKC8lW2EtekEtWiVdL2csIG1hdGNoID0+IHtcblx0XHRpZiAobWF0Y2ggPT09ICclJScpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0aW5kZXgrKztcblx0XHRpZiAobWF0Y2ggPT09ICclYycpIHtcblx0XHRcdC8vIFdlIG9ubHkgYXJlIGludGVyZXN0ZWQgaW4gdGhlICpsYXN0KiAlY1xuXHRcdFx0Ly8gKHRoZSB1c2VyIG1heSBoYXZlIHByb3ZpZGVkIHRoZWlyIG93bilcblx0XHRcdGxhc3RDID0gaW5kZXg7XG5cdFx0fVxuXHR9KTtcblxuXHRhcmdzLnNwbGljZShsYXN0QywgMCwgYyk7XG59XG5cbi8qKlxuICogSW52b2tlcyBgY29uc29sZS5kZWJ1ZygpYCB3aGVuIGF2YWlsYWJsZS5cbiAqIE5vLW9wIHdoZW4gYGNvbnNvbGUuZGVidWdgIGlzIG5vdCBhIFwiZnVuY3Rpb25cIi5cbiAqIElmIGBjb25zb2xlLmRlYnVnYCBpcyBub3QgYXZhaWxhYmxlLCBmYWxscyBiYWNrXG4gKiB0byBgY29uc29sZS5sb2dgLlxuICpcbiAqIEBhcGkgcHVibGljXG4gKi9cbmV4cG9ydHMubG9nID0gY29uc29sZS5kZWJ1ZyB8fCBjb25zb2xlLmxvZyB8fCAoKCkgPT4ge30pO1xuXG4vKipcbiAqIFNhdmUgYG5hbWVzcGFjZXNgLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBuYW1lc3BhY2VzXG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gc2F2ZShuYW1lc3BhY2VzKSB7XG5cdHRyeSB7XG5cdFx0aWYgKG5hbWVzcGFjZXMpIHtcblx0XHRcdGV4cG9ydHMuc3RvcmFnZS5zZXRJdGVtKCdkZWJ1ZycsIG5hbWVzcGFjZXMpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRleHBvcnRzLnN0b3JhZ2UucmVtb3ZlSXRlbSgnZGVidWcnKTtcblx0XHR9XG5cdH0gY2F0Y2ggKGVycm9yKSB7XG5cdFx0Ly8gU3dhbGxvd1xuXHRcdC8vIFhYWCAoQFFpeC0pIHNob3VsZCB3ZSBiZSBsb2dnaW5nIHRoZXNlP1xuXHR9XG59XG5cbi8qKlxuICogTG9hZCBgbmFtZXNwYWNlc2AuXG4gKlxuICogQHJldHVybiB7U3RyaW5nfSByZXR1cm5zIHRoZSBwcmV2aW91c2x5IHBlcnNpc3RlZCBkZWJ1ZyBtb2Rlc1xuICogQGFwaSBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIGxvYWQoKSB7XG5cdGxldCByO1xuXHR0cnkge1xuXHRcdHIgPSBleHBvcnRzLnN0b3JhZ2UuZ2V0SXRlbSgnZGVidWcnKTtcblx0fSBjYXRjaCAoZXJyb3IpIHtcblx0XHQvLyBTd2FsbG93XG5cdFx0Ly8gWFhYIChAUWl4LSkgc2hvdWxkIHdlIGJlIGxvZ2dpbmcgdGhlc2U/XG5cdH1cblxuXHQvLyBJZiBkZWJ1ZyBpc24ndCBzZXQgaW4gTFMsIGFuZCB3ZSdyZSBpbiBFbGVjdHJvbiwgdHJ5IHRvIGxvYWQgJERFQlVHXG5cdGlmICghciAmJiB0eXBlb2YgcHJvY2VzcyAhPT0gJ3VuZGVmaW5lZCcgJiYgJ2VudicgaW4gcHJvY2Vzcykge1xuXHRcdHIgPSBwcm9jZXNzLmVudi5ERUJVRztcblx0fVxuXG5cdHJldHVybiByO1xufVxuXG4vKipcbiAqIExvY2Fsc3RvcmFnZSBhdHRlbXB0cyB0byByZXR1cm4gdGhlIGxvY2Fsc3RvcmFnZS5cbiAqXG4gKiBUaGlzIGlzIG5lY2Vzc2FyeSBiZWNhdXNlIHNhZmFyaSB0aHJvd3NcbiAqIHdoZW4gYSB1c2VyIGRpc2FibGVzIGNvb2tpZXMvbG9jYWxzdG9yYWdlXG4gKiBhbmQgeW91IGF0dGVtcHQgdG8gYWNjZXNzIGl0LlxuICpcbiAqIEByZXR1cm4ge0xvY2FsU3RvcmFnZX1cbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5cbmZ1bmN0aW9uIGxvY2Fsc3RvcmFnZSgpIHtcblx0dHJ5IHtcblx0XHQvLyBUVk1MS2l0IChBcHBsZSBUViBKUyBSdW50aW1lKSBkb2VzIG5vdCBoYXZlIGEgd2luZG93IG9iamVjdCwganVzdCBsb2NhbFN0b3JhZ2UgaW4gdGhlIGdsb2JhbCBjb250ZXh0XG5cdFx0Ly8gVGhlIEJyb3dzZXIgYWxzbyBoYXMgbG9jYWxTdG9yYWdlIGluIHRoZSBnbG9iYWwgY29udGV4dC5cblx0XHRyZXR1cm4gbG9jYWxTdG9yYWdlO1xuXHR9IGNhdGNoIChlcnJvcikge1xuXHRcdC8vIFN3YWxsb3dcblx0XHQvLyBYWFggKEBRaXgtKSBzaG91bGQgd2UgYmUgbG9nZ2luZyB0aGVzZT9cblx0fVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vY29tbW9uJykoZXhwb3J0cyk7XG5cbmNvbnN0IHtmb3JtYXR0ZXJzfSA9IG1vZHVsZS5leHBvcnRzO1xuXG4vKipcbiAqIE1hcCAlaiB0byBgSlNPTi5zdHJpbmdpZnkoKWAsIHNpbmNlIG5vIFdlYiBJbnNwZWN0b3JzIGRvIHRoYXQgYnkgZGVmYXVsdC5cbiAqL1xuXG5mb3JtYXR0ZXJzLmogPSBmdW5jdGlvbiAodikge1xuXHR0cnkge1xuXHRcdHJldHVybiBKU09OLnN0cmluZ2lmeSh2KTtcblx0fSBjYXRjaCAoZXJyb3IpIHtcblx0XHRyZXR1cm4gJ1tVbmV4cGVjdGVkSlNPTlBhcnNlRXJyb3JdOiAnICsgZXJyb3IubWVzc2FnZTtcblx0fVxufTtcbiIsIlxuLyoqXG4gKiBUaGlzIGlzIHRoZSBjb21tb24gbG9naWMgZm9yIGJvdGggdGhlIE5vZGUuanMgYW5kIHdlYiBicm93c2VyXG4gKiBpbXBsZW1lbnRhdGlvbnMgb2YgYGRlYnVnKClgLlxuICovXG5cbmZ1bmN0aW9uIHNldHVwKGVudikge1xuXHRjcmVhdGVEZWJ1Zy5kZWJ1ZyA9IGNyZWF0ZURlYnVnO1xuXHRjcmVhdGVEZWJ1Zy5kZWZhdWx0ID0gY3JlYXRlRGVidWc7XG5cdGNyZWF0ZURlYnVnLmNvZXJjZSA9IGNvZXJjZTtcblx0Y3JlYXRlRGVidWcuZGlzYWJsZSA9IGRpc2FibGU7XG5cdGNyZWF0ZURlYnVnLmVuYWJsZSA9IGVuYWJsZTtcblx0Y3JlYXRlRGVidWcuZW5hYmxlZCA9IGVuYWJsZWQ7XG5cdGNyZWF0ZURlYnVnLmh1bWFuaXplID0gcmVxdWlyZSgnbXMnKTtcblx0Y3JlYXRlRGVidWcuZGVzdHJveSA9IGRlc3Ryb3k7XG5cblx0T2JqZWN0LmtleXMoZW52KS5mb3JFYWNoKGtleSA9PiB7XG5cdFx0Y3JlYXRlRGVidWdba2V5XSA9IGVudltrZXldO1xuXHR9KTtcblxuXHQvKipcblx0KiBUaGUgY3VycmVudGx5IGFjdGl2ZSBkZWJ1ZyBtb2RlIG5hbWVzLCBhbmQgbmFtZXMgdG8gc2tpcC5cblx0Ki9cblxuXHRjcmVhdGVEZWJ1Zy5uYW1lcyA9IFtdO1xuXHRjcmVhdGVEZWJ1Zy5za2lwcyA9IFtdO1xuXG5cdC8qKlxuXHQqIE1hcCBvZiBzcGVjaWFsIFwiJW5cIiBoYW5kbGluZyBmdW5jdGlvbnMsIGZvciB0aGUgZGVidWcgXCJmb3JtYXRcIiBhcmd1bWVudC5cblx0KlxuXHQqIFZhbGlkIGtleSBuYW1lcyBhcmUgYSBzaW5nbGUsIGxvd2VyIG9yIHVwcGVyLWNhc2UgbGV0dGVyLCBpLmUuIFwiblwiIGFuZCBcIk5cIi5cblx0Ki9cblx0Y3JlYXRlRGVidWcuZm9ybWF0dGVycyA9IHt9O1xuXG5cdC8qKlxuXHQqIFNlbGVjdHMgYSBjb2xvciBmb3IgYSBkZWJ1ZyBuYW1lc3BhY2Vcblx0KiBAcGFyYW0ge1N0cmluZ30gbmFtZXNwYWNlIFRoZSBuYW1lc3BhY2Ugc3RyaW5nIGZvciB0aGUgZGVidWcgaW5zdGFuY2UgdG8gYmUgY29sb3JlZFxuXHQqIEByZXR1cm4ge051bWJlcnxTdHJpbmd9IEFuIEFOU0kgY29sb3IgY29kZSBmb3IgdGhlIGdpdmVuIG5hbWVzcGFjZVxuXHQqIEBhcGkgcHJpdmF0ZVxuXHQqL1xuXHRmdW5jdGlvbiBzZWxlY3RDb2xvcihuYW1lc3BhY2UpIHtcblx0XHRsZXQgaGFzaCA9IDA7XG5cblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IG5hbWVzcGFjZS5sZW5ndGg7IGkrKykge1xuXHRcdFx0aGFzaCA9ICgoaGFzaCA8PCA1KSAtIGhhc2gpICsgbmFtZXNwYWNlLmNoYXJDb2RlQXQoaSk7XG5cdFx0XHRoYXNoIHw9IDA7IC8vIENvbnZlcnQgdG8gMzJiaXQgaW50ZWdlclxuXHRcdH1cblxuXHRcdHJldHVybiBjcmVhdGVEZWJ1Zy5jb2xvcnNbTWF0aC5hYnMoaGFzaCkgJSBjcmVhdGVEZWJ1Zy5jb2xvcnMubGVuZ3RoXTtcblx0fVxuXHRjcmVhdGVEZWJ1Zy5zZWxlY3RDb2xvciA9IHNlbGVjdENvbG9yO1xuXG5cdC8qKlxuXHQqIENyZWF0ZSBhIGRlYnVnZ2VyIHdpdGggdGhlIGdpdmVuIGBuYW1lc3BhY2VgLlxuXHQqXG5cdCogQHBhcmFtIHtTdHJpbmd9IG5hbWVzcGFjZVxuXHQqIEByZXR1cm4ge0Z1bmN0aW9ufVxuXHQqIEBhcGkgcHVibGljXG5cdCovXG5cdGZ1bmN0aW9uIGNyZWF0ZURlYnVnKG5hbWVzcGFjZSkge1xuXHRcdGxldCBwcmV2VGltZTtcblx0XHRsZXQgZW5hYmxlT3ZlcnJpZGUgPSBudWxsO1xuXHRcdGxldCBuYW1lc3BhY2VzQ2FjaGU7XG5cdFx0bGV0IGVuYWJsZWRDYWNoZTtcblxuXHRcdGZ1bmN0aW9uIGRlYnVnKC4uLmFyZ3MpIHtcblx0XHRcdC8vIERpc2FibGVkP1xuXHRcdFx0aWYgKCFkZWJ1Zy5lbmFibGVkKSB7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblxuXHRcdFx0Y29uc3Qgc2VsZiA9IGRlYnVnO1xuXG5cdFx0XHQvLyBTZXQgYGRpZmZgIHRpbWVzdGFtcFxuXHRcdFx0Y29uc3QgY3VyciA9IE51bWJlcihuZXcgRGF0ZSgpKTtcblx0XHRcdGNvbnN0IG1zID0gY3VyciAtIChwcmV2VGltZSB8fCBjdXJyKTtcblx0XHRcdHNlbGYuZGlmZiA9IG1zO1xuXHRcdFx0c2VsZi5wcmV2ID0gcHJldlRpbWU7XG5cdFx0XHRzZWxmLmN1cnIgPSBjdXJyO1xuXHRcdFx0cHJldlRpbWUgPSBjdXJyO1xuXG5cdFx0XHRhcmdzWzBdID0gY3JlYXRlRGVidWcuY29lcmNlKGFyZ3NbMF0pO1xuXG5cdFx0XHRpZiAodHlwZW9mIGFyZ3NbMF0gIT09ICdzdHJpbmcnKSB7XG5cdFx0XHRcdC8vIEFueXRoaW5nIGVsc2UgbGV0J3MgaW5zcGVjdCB3aXRoICVPXG5cdFx0XHRcdGFyZ3MudW5zaGlmdCgnJU8nKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gQXBwbHkgYW55IGBmb3JtYXR0ZXJzYCB0cmFuc2Zvcm1hdGlvbnNcblx0XHRcdGxldCBpbmRleCA9IDA7XG5cdFx0XHRhcmdzWzBdID0gYXJnc1swXS5yZXBsYWNlKC8lKFthLXpBLVolXSkvZywgKG1hdGNoLCBmb3JtYXQpID0+IHtcblx0XHRcdFx0Ly8gSWYgd2UgZW5jb3VudGVyIGFuIGVzY2FwZWQgJSB0aGVuIGRvbid0IGluY3JlYXNlIHRoZSBhcnJheSBpbmRleFxuXHRcdFx0XHRpZiAobWF0Y2ggPT09ICclJScpIHtcblx0XHRcdFx0XHRyZXR1cm4gJyUnO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGluZGV4Kys7XG5cdFx0XHRcdGNvbnN0IGZvcm1hdHRlciA9IGNyZWF0ZURlYnVnLmZvcm1hdHRlcnNbZm9ybWF0XTtcblx0XHRcdFx0aWYgKHR5cGVvZiBmb3JtYXR0ZXIgPT09ICdmdW5jdGlvbicpIHtcblx0XHRcdFx0XHRjb25zdCB2YWwgPSBhcmdzW2luZGV4XTtcblx0XHRcdFx0XHRtYXRjaCA9IGZvcm1hdHRlci5jYWxsKHNlbGYsIHZhbCk7XG5cblx0XHRcdFx0XHQvLyBOb3cgd2UgbmVlZCB0byByZW1vdmUgYGFyZ3NbaW5kZXhdYCBzaW5jZSBpdCdzIGlubGluZWQgaW4gdGhlIGBmb3JtYXRgXG5cdFx0XHRcdFx0YXJncy5zcGxpY2UoaW5kZXgsIDEpO1xuXHRcdFx0XHRcdGluZGV4LS07XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIG1hdGNoO1xuXHRcdFx0fSk7XG5cblx0XHRcdC8vIEFwcGx5IGVudi1zcGVjaWZpYyBmb3JtYXR0aW5nIChjb2xvcnMsIGV0Yy4pXG5cdFx0XHRjcmVhdGVEZWJ1Zy5mb3JtYXRBcmdzLmNhbGwoc2VsZiwgYXJncyk7XG5cblx0XHRcdGNvbnN0IGxvZ0ZuID0gc2VsZi5sb2cgfHwgY3JlYXRlRGVidWcubG9nO1xuXHRcdFx0bG9nRm4uYXBwbHkoc2VsZiwgYXJncyk7XG5cdFx0fVxuXG5cdFx0ZGVidWcubmFtZXNwYWNlID0gbmFtZXNwYWNlO1xuXHRcdGRlYnVnLnVzZUNvbG9ycyA9IGNyZWF0ZURlYnVnLnVzZUNvbG9ycygpO1xuXHRcdGRlYnVnLmNvbG9yID0gY3JlYXRlRGVidWcuc2VsZWN0Q29sb3IobmFtZXNwYWNlKTtcblx0XHRkZWJ1Zy5leHRlbmQgPSBleHRlbmQ7XG5cdFx0ZGVidWcuZGVzdHJveSA9IGNyZWF0ZURlYnVnLmRlc3Ryb3k7IC8vIFhYWCBUZW1wb3JhcnkuIFdpbGwgYmUgcmVtb3ZlZCBpbiB0aGUgbmV4dCBtYWpvciByZWxlYXNlLlxuXG5cdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGRlYnVnLCAnZW5hYmxlZCcsIHtcblx0XHRcdGVudW1lcmFibGU6IHRydWUsXG5cdFx0XHRjb25maWd1cmFibGU6IGZhbHNlLFxuXHRcdFx0Z2V0OiAoKSA9PiB7XG5cdFx0XHRcdGlmIChlbmFibGVPdmVycmlkZSAhPT0gbnVsbCkge1xuXHRcdFx0XHRcdHJldHVybiBlbmFibGVPdmVycmlkZTtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAobmFtZXNwYWNlc0NhY2hlICE9PSBjcmVhdGVEZWJ1Zy5uYW1lc3BhY2VzKSB7XG5cdFx0XHRcdFx0bmFtZXNwYWNlc0NhY2hlID0gY3JlYXRlRGVidWcubmFtZXNwYWNlcztcblx0XHRcdFx0XHRlbmFibGVkQ2FjaGUgPSBjcmVhdGVEZWJ1Zy5lbmFibGVkKG5hbWVzcGFjZSk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRyZXR1cm4gZW5hYmxlZENhY2hlO1xuXHRcdFx0fSxcblx0XHRcdHNldDogdiA9PiB7XG5cdFx0XHRcdGVuYWJsZU92ZXJyaWRlID0gdjtcblx0XHRcdH1cblx0XHR9KTtcblxuXHRcdC8vIEVudi1zcGVjaWZpYyBpbml0aWFsaXphdGlvbiBsb2dpYyBmb3IgZGVidWcgaW5zdGFuY2VzXG5cdFx0aWYgKHR5cGVvZiBjcmVhdGVEZWJ1Zy5pbml0ID09PSAnZnVuY3Rpb24nKSB7XG5cdFx0XHRjcmVhdGVEZWJ1Zy5pbml0KGRlYnVnKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gZGVidWc7XG5cdH1cblxuXHRmdW5jdGlvbiBleHRlbmQobmFtZXNwYWNlLCBkZWxpbWl0ZXIpIHtcblx0XHRjb25zdCBuZXdEZWJ1ZyA9IGNyZWF0ZURlYnVnKHRoaXMubmFtZXNwYWNlICsgKHR5cGVvZiBkZWxpbWl0ZXIgPT09ICd1bmRlZmluZWQnID8gJzonIDogZGVsaW1pdGVyKSArIG5hbWVzcGFjZSk7XG5cdFx0bmV3RGVidWcubG9nID0gdGhpcy5sb2c7XG5cdFx0cmV0dXJuIG5ld0RlYnVnO1xuXHR9XG5cblx0LyoqXG5cdCogRW5hYmxlcyBhIGRlYnVnIG1vZGUgYnkgbmFtZXNwYWNlcy4gVGhpcyBjYW4gaW5jbHVkZSBtb2Rlc1xuXHQqIHNlcGFyYXRlZCBieSBhIGNvbG9uIGFuZCB3aWxkY2FyZHMuXG5cdCpcblx0KiBAcGFyYW0ge1N0cmluZ30gbmFtZXNwYWNlc1xuXHQqIEBhcGkgcHVibGljXG5cdCovXG5cdGZ1bmN0aW9uIGVuYWJsZShuYW1lc3BhY2VzKSB7XG5cdFx0Y3JlYXRlRGVidWcuc2F2ZShuYW1lc3BhY2VzKTtcblx0XHRjcmVhdGVEZWJ1Zy5uYW1lc3BhY2VzID0gbmFtZXNwYWNlcztcblxuXHRcdGNyZWF0ZURlYnVnLm5hbWVzID0gW107XG5cdFx0Y3JlYXRlRGVidWcuc2tpcHMgPSBbXTtcblxuXHRcdGxldCBpO1xuXHRcdGNvbnN0IHNwbGl0ID0gKHR5cGVvZiBuYW1lc3BhY2VzID09PSAnc3RyaW5nJyA/IG5hbWVzcGFjZXMgOiAnJykuc3BsaXQoL1tcXHMsXSsvKTtcblx0XHRjb25zdCBsZW4gPSBzcGxpdC5sZW5ndGg7XG5cblx0XHRmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcblx0XHRcdGlmICghc3BsaXRbaV0pIHtcblx0XHRcdFx0Ly8gaWdub3JlIGVtcHR5IHN0cmluZ3Ncblx0XHRcdFx0Y29udGludWU7XG5cdFx0XHR9XG5cblx0XHRcdG5hbWVzcGFjZXMgPSBzcGxpdFtpXS5yZXBsYWNlKC9cXCovZywgJy4qPycpO1xuXG5cdFx0XHRpZiAobmFtZXNwYWNlc1swXSA9PT0gJy0nKSB7XG5cdFx0XHRcdGNyZWF0ZURlYnVnLnNraXBzLnB1c2gobmV3IFJlZ0V4cCgnXicgKyBuYW1lc3BhY2VzLnNsaWNlKDEpICsgJyQnKSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRjcmVhdGVEZWJ1Zy5uYW1lcy5wdXNoKG5ldyBSZWdFeHAoJ14nICsgbmFtZXNwYWNlcyArICckJykpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQqIERpc2FibGUgZGVidWcgb3V0cHV0LlxuXHQqXG5cdCogQHJldHVybiB7U3RyaW5nfSBuYW1lc3BhY2VzXG5cdCogQGFwaSBwdWJsaWNcblx0Ki9cblx0ZnVuY3Rpb24gZGlzYWJsZSgpIHtcblx0XHRjb25zdCBuYW1lc3BhY2VzID0gW1xuXHRcdFx0Li4uY3JlYXRlRGVidWcubmFtZXMubWFwKHRvTmFtZXNwYWNlKSxcblx0XHRcdC4uLmNyZWF0ZURlYnVnLnNraXBzLm1hcCh0b05hbWVzcGFjZSkubWFwKG5hbWVzcGFjZSA9PiAnLScgKyBuYW1lc3BhY2UpXG5cdFx0XS5qb2luKCcsJyk7XG5cdFx0Y3JlYXRlRGVidWcuZW5hYmxlKCcnKTtcblx0XHRyZXR1cm4gbmFtZXNwYWNlcztcblx0fVxuXG5cdC8qKlxuXHQqIFJldHVybnMgdHJ1ZSBpZiB0aGUgZ2l2ZW4gbW9kZSBuYW1lIGlzIGVuYWJsZWQsIGZhbHNlIG90aGVyd2lzZS5cblx0KlxuXHQqIEBwYXJhbSB7U3RyaW5nfSBuYW1lXG5cdCogQHJldHVybiB7Qm9vbGVhbn1cblx0KiBAYXBpIHB1YmxpY1xuXHQqL1xuXHRmdW5jdGlvbiBlbmFibGVkKG5hbWUpIHtcblx0XHRpZiAobmFtZVtuYW1lLmxlbmd0aCAtIDFdID09PSAnKicpIHtcblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH1cblxuXHRcdGxldCBpO1xuXHRcdGxldCBsZW47XG5cblx0XHRmb3IgKGkgPSAwLCBsZW4gPSBjcmVhdGVEZWJ1Zy5za2lwcy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuXHRcdFx0aWYgKGNyZWF0ZURlYnVnLnNraXBzW2ldLnRlc3QobmFtZSkpIHtcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGZvciAoaSA9IDAsIGxlbiA9IGNyZWF0ZURlYnVnLm5hbWVzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG5cdFx0XHRpZiAoY3JlYXRlRGVidWcubmFtZXNbaV0udGVzdChuYW1lKSkge1xuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblxuXHQvKipcblx0KiBDb252ZXJ0IHJlZ2V4cCB0byBuYW1lc3BhY2Vcblx0KlxuXHQqIEBwYXJhbSB7UmVnRXhwfSByZWd4ZXBcblx0KiBAcmV0dXJuIHtTdHJpbmd9IG5hbWVzcGFjZVxuXHQqIEBhcGkgcHJpdmF0ZVxuXHQqL1xuXHRmdW5jdGlvbiB0b05hbWVzcGFjZShyZWdleHApIHtcblx0XHRyZXR1cm4gcmVnZXhwLnRvU3RyaW5nKClcblx0XHRcdC5zdWJzdHJpbmcoMiwgcmVnZXhwLnRvU3RyaW5nKCkubGVuZ3RoIC0gMilcblx0XHRcdC5yZXBsYWNlKC9cXC5cXCpcXD8kLywgJyonKTtcblx0fVxuXG5cdC8qKlxuXHQqIENvZXJjZSBgdmFsYC5cblx0KlxuXHQqIEBwYXJhbSB7TWl4ZWR9IHZhbFxuXHQqIEByZXR1cm4ge01peGVkfVxuXHQqIEBhcGkgcHJpdmF0ZVxuXHQqL1xuXHRmdW5jdGlvbiBjb2VyY2UodmFsKSB7XG5cdFx0aWYgKHZhbCBpbnN0YW5jZW9mIEVycm9yKSB7XG5cdFx0XHRyZXR1cm4gdmFsLnN0YWNrIHx8IHZhbC5tZXNzYWdlO1xuXHRcdH1cblx0XHRyZXR1cm4gdmFsO1xuXHR9XG5cblx0LyoqXG5cdCogWFhYIERPIE5PVCBVU0UuIFRoaXMgaXMgYSB0ZW1wb3Jhcnkgc3R1YiBmdW5jdGlvbi5cblx0KiBYWFggSXQgV0lMTCBiZSByZW1vdmVkIGluIHRoZSBuZXh0IG1ham9yIHJlbGVhc2UuXG5cdCovXG5cdGZ1bmN0aW9uIGRlc3Ryb3koKSB7XG5cdFx0Y29uc29sZS53YXJuKCdJbnN0YW5jZSBtZXRob2QgYGRlYnVnLmRlc3Ryb3koKWAgaXMgZGVwcmVjYXRlZCBhbmQgbm8gbG9uZ2VyIGRvZXMgYW55dGhpbmcuIEl0IHdpbGwgYmUgcmVtb3ZlZCBpbiB0aGUgbmV4dCBtYWpvciB2ZXJzaW9uIG9mIGBkZWJ1Z2AuJyk7XG5cdH1cblxuXHRjcmVhdGVEZWJ1Zy5lbmFibGUoY3JlYXRlRGVidWcubG9hZCgpKTtcblxuXHRyZXR1cm4gY3JlYXRlRGVidWc7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc2V0dXA7XG4iLCIvKipcbiAqIERldGVjdCBFbGVjdHJvbiByZW5kZXJlciAvIG53anMgcHJvY2Vzcywgd2hpY2ggaXMgbm9kZSwgYnV0IHdlIHNob3VsZFxuICogdHJlYXQgYXMgYSBicm93c2VyLlxuICovXG5cbmlmICh0eXBlb2YgcHJvY2VzcyA9PT0gJ3VuZGVmaW5lZCcgfHwgcHJvY2Vzcy50eXBlID09PSAncmVuZGVyZXInIHx8IHByb2Nlc3MuYnJvd3NlciA9PT0gdHJ1ZSB8fCBwcm9jZXNzLl9fbndqcykge1xuXHRtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vYnJvd3Nlci5qcycpO1xufSBlbHNlIHtcblx0bW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL25vZGUuanMnKTtcbn1cbiIsIi8qKlxuICogTW9kdWxlIGRlcGVuZGVuY2llcy5cbiAqL1xuXG5jb25zdCB0dHkgPSByZXF1aXJlKCd0dHknKTtcbmNvbnN0IHV0aWwgPSByZXF1aXJlKCd1dGlsJyk7XG5cbi8qKlxuICogVGhpcyBpcyB0aGUgTm9kZS5qcyBpbXBsZW1lbnRhdGlvbiBvZiBgZGVidWcoKWAuXG4gKi9cblxuZXhwb3J0cy5pbml0ID0gaW5pdDtcbmV4cG9ydHMubG9nID0gbG9nO1xuZXhwb3J0cy5mb3JtYXRBcmdzID0gZm9ybWF0QXJncztcbmV4cG9ydHMuc2F2ZSA9IHNhdmU7XG5leHBvcnRzLmxvYWQgPSBsb2FkO1xuZXhwb3J0cy51c2VDb2xvcnMgPSB1c2VDb2xvcnM7XG5leHBvcnRzLmRlc3Ryb3kgPSB1dGlsLmRlcHJlY2F0ZShcblx0KCkgPT4ge30sXG5cdCdJbnN0YW5jZSBtZXRob2QgYGRlYnVnLmRlc3Ryb3koKWAgaXMgZGVwcmVjYXRlZCBhbmQgbm8gbG9uZ2VyIGRvZXMgYW55dGhpbmcuIEl0IHdpbGwgYmUgcmVtb3ZlZCBpbiB0aGUgbmV4dCBtYWpvciB2ZXJzaW9uIG9mIGBkZWJ1Z2AuJ1xuKTtcblxuLyoqXG4gKiBDb2xvcnMuXG4gKi9cblxuZXhwb3J0cy5jb2xvcnMgPSBbNiwgMiwgMywgNCwgNSwgMV07XG5cbnRyeSB7XG5cdC8vIE9wdGlvbmFsIGRlcGVuZGVuY3kgKGFzIGluLCBkb2Vzbid0IG5lZWQgdG8gYmUgaW5zdGFsbGVkLCBOT1QgbGlrZSBvcHRpb25hbERlcGVuZGVuY2llcyBpbiBwYWNrYWdlLmpzb24pXG5cdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tZXh0cmFuZW91cy1kZXBlbmRlbmNpZXNcblx0Y29uc3Qgc3VwcG9ydHNDb2xvciA9IHJlcXVpcmUoJ3N1cHBvcnRzLWNvbG9yJyk7XG5cblx0aWYgKHN1cHBvcnRzQ29sb3IgJiYgKHN1cHBvcnRzQ29sb3Iuc3RkZXJyIHx8IHN1cHBvcnRzQ29sb3IpLmxldmVsID49IDIpIHtcblx0XHRleHBvcnRzLmNvbG9ycyA9IFtcblx0XHRcdDIwLFxuXHRcdFx0MjEsXG5cdFx0XHQyNixcblx0XHRcdDI3LFxuXHRcdFx0MzIsXG5cdFx0XHQzMyxcblx0XHRcdDM4LFxuXHRcdFx0MzksXG5cdFx0XHQ0MCxcblx0XHRcdDQxLFxuXHRcdFx0NDIsXG5cdFx0XHQ0Myxcblx0XHRcdDQ0LFxuXHRcdFx0NDUsXG5cdFx0XHQ1Nixcblx0XHRcdDU3LFxuXHRcdFx0NjIsXG5cdFx0XHQ2Myxcblx0XHRcdDY4LFxuXHRcdFx0NjksXG5cdFx0XHQ3NCxcblx0XHRcdDc1LFxuXHRcdFx0NzYsXG5cdFx0XHQ3Nyxcblx0XHRcdDc4LFxuXHRcdFx0NzksXG5cdFx0XHQ4MCxcblx0XHRcdDgxLFxuXHRcdFx0OTIsXG5cdFx0XHQ5Myxcblx0XHRcdDk4LFxuXHRcdFx0OTksXG5cdFx0XHQxMTIsXG5cdFx0XHQxMTMsXG5cdFx0XHQxMjgsXG5cdFx0XHQxMjksXG5cdFx0XHQxMzQsXG5cdFx0XHQxMzUsXG5cdFx0XHQxNDgsXG5cdFx0XHQxNDksXG5cdFx0XHQxNjAsXG5cdFx0XHQxNjEsXG5cdFx0XHQxNjIsXG5cdFx0XHQxNjMsXG5cdFx0XHQxNjQsXG5cdFx0XHQxNjUsXG5cdFx0XHQxNjYsXG5cdFx0XHQxNjcsXG5cdFx0XHQxNjgsXG5cdFx0XHQxNjksXG5cdFx0XHQxNzAsXG5cdFx0XHQxNzEsXG5cdFx0XHQxNzIsXG5cdFx0XHQxNzMsXG5cdFx0XHQxNzgsXG5cdFx0XHQxNzksXG5cdFx0XHQxODQsXG5cdFx0XHQxODUsXG5cdFx0XHQxOTYsXG5cdFx0XHQxOTcsXG5cdFx0XHQxOTgsXG5cdFx0XHQxOTksXG5cdFx0XHQyMDAsXG5cdFx0XHQyMDEsXG5cdFx0XHQyMDIsXG5cdFx0XHQyMDMsXG5cdFx0XHQyMDQsXG5cdFx0XHQyMDUsXG5cdFx0XHQyMDYsXG5cdFx0XHQyMDcsXG5cdFx0XHQyMDgsXG5cdFx0XHQyMDksXG5cdFx0XHQyMTQsXG5cdFx0XHQyMTUsXG5cdFx0XHQyMjAsXG5cdFx0XHQyMjFcblx0XHRdO1xuXHR9XG59IGNhdGNoIChlcnJvcikge1xuXHQvLyBTd2FsbG93IC0gd2Ugb25seSBjYXJlIGlmIGBzdXBwb3J0cy1jb2xvcmAgaXMgYXZhaWxhYmxlOyBpdCBkb2Vzbid0IGhhdmUgdG8gYmUuXG59XG5cbi8qKlxuICogQnVpbGQgdXAgdGhlIGRlZmF1bHQgYGluc3BlY3RPcHRzYCBvYmplY3QgZnJvbSB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGVzLlxuICpcbiAqICAgJCBERUJVR19DT0xPUlM9bm8gREVCVUdfREVQVEg9MTAgREVCVUdfU0hPV19ISURERU49ZW5hYmxlZCBub2RlIHNjcmlwdC5qc1xuICovXG5cbmV4cG9ydHMuaW5zcGVjdE9wdHMgPSBPYmplY3Qua2V5cyhwcm9jZXNzLmVudikuZmlsdGVyKGtleSA9PiB7XG5cdHJldHVybiAvXmRlYnVnXy9pLnRlc3Qoa2V5KTtcbn0pLnJlZHVjZSgob2JqLCBrZXkpID0+IHtcblx0Ly8gQ2FtZWwtY2FzZVxuXHRjb25zdCBwcm9wID0ga2V5XG5cdFx0LnN1YnN0cmluZyg2KVxuXHRcdC50b0xvd2VyQ2FzZSgpXG5cdFx0LnJlcGxhY2UoL18oW2Etel0pL2csIChfLCBrKSA9PiB7XG5cdFx0XHRyZXR1cm4gay50b1VwcGVyQ2FzZSgpO1xuXHRcdH0pO1xuXG5cdC8vIENvZXJjZSBzdHJpbmcgdmFsdWUgaW50byBKUyB2YWx1ZVxuXHRsZXQgdmFsID0gcHJvY2Vzcy5lbnZba2V5XTtcblx0aWYgKC9eKHllc3xvbnx0cnVlfGVuYWJsZWQpJC9pLnRlc3QodmFsKSkge1xuXHRcdHZhbCA9IHRydWU7XG5cdH0gZWxzZSBpZiAoL14obm98b2ZmfGZhbHNlfGRpc2FibGVkKSQvaS50ZXN0KHZhbCkpIHtcblx0XHR2YWwgPSBmYWxzZTtcblx0fSBlbHNlIGlmICh2YWwgPT09ICdudWxsJykge1xuXHRcdHZhbCA9IG51bGw7XG5cdH0gZWxzZSB7XG5cdFx0dmFsID0gTnVtYmVyKHZhbCk7XG5cdH1cblxuXHRvYmpbcHJvcF0gPSB2YWw7XG5cdHJldHVybiBvYmo7XG59LCB7fSk7XG5cbi8qKlxuICogSXMgc3Rkb3V0IGEgVFRZPyBDb2xvcmVkIG91dHB1dCBpcyBlbmFibGVkIHdoZW4gYHRydWVgLlxuICovXG5cbmZ1bmN0aW9uIHVzZUNvbG9ycygpIHtcblx0cmV0dXJuICdjb2xvcnMnIGluIGV4cG9ydHMuaW5zcGVjdE9wdHMgP1xuXHRcdEJvb2xlYW4oZXhwb3J0cy5pbnNwZWN0T3B0cy5jb2xvcnMpIDpcblx0XHR0dHkuaXNhdHR5KHByb2Nlc3Muc3RkZXJyLmZkKTtcbn1cblxuLyoqXG4gKiBBZGRzIEFOU0kgY29sb3IgZXNjYXBlIGNvZGVzIGlmIGVuYWJsZWQuXG4gKlxuICogQGFwaSBwdWJsaWNcbiAqL1xuXG5mdW5jdGlvbiBmb3JtYXRBcmdzKGFyZ3MpIHtcblx0Y29uc3Qge25hbWVzcGFjZTogbmFtZSwgdXNlQ29sb3JzfSA9IHRoaXM7XG5cblx0aWYgKHVzZUNvbG9ycykge1xuXHRcdGNvbnN0IGMgPSB0aGlzLmNvbG9yO1xuXHRcdGNvbnN0IGNvbG9yQ29kZSA9ICdcXHUwMDFCWzMnICsgKGMgPCA4ID8gYyA6ICc4OzU7JyArIGMpO1xuXHRcdGNvbnN0IHByZWZpeCA9IGAgICR7Y29sb3JDb2RlfTsxbSR7bmFtZX0gXFx1MDAxQlswbWA7XG5cblx0XHRhcmdzWzBdID0gcHJlZml4ICsgYXJnc1swXS5zcGxpdCgnXFxuJykuam9pbignXFxuJyArIHByZWZpeCk7XG5cdFx0YXJncy5wdXNoKGNvbG9yQ29kZSArICdtKycgKyBtb2R1bGUuZXhwb3J0cy5odW1hbml6ZSh0aGlzLmRpZmYpICsgJ1xcdTAwMUJbMG0nKTtcblx0fSBlbHNlIHtcblx0XHRhcmdzWzBdID0gZ2V0RGF0ZSgpICsgbmFtZSArICcgJyArIGFyZ3NbMF07XG5cdH1cbn1cblxuZnVuY3Rpb24gZ2V0RGF0ZSgpIHtcblx0aWYgKGV4cG9ydHMuaW5zcGVjdE9wdHMuaGlkZURhdGUpIHtcblx0XHRyZXR1cm4gJyc7XG5cdH1cblx0cmV0dXJuIG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSArICcgJztcbn1cblxuLyoqXG4gKiBJbnZva2VzIGB1dGlsLmZvcm1hdCgpYCB3aXRoIHRoZSBzcGVjaWZpZWQgYXJndW1lbnRzIGFuZCB3cml0ZXMgdG8gc3RkZXJyLlxuICovXG5cbmZ1bmN0aW9uIGxvZyguLi5hcmdzKSB7XG5cdHJldHVybiBwcm9jZXNzLnN0ZGVyci53cml0ZSh1dGlsLmZvcm1hdCguLi5hcmdzKSArICdcXG4nKTtcbn1cblxuLyoqXG4gKiBTYXZlIGBuYW1lc3BhY2VzYC5cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gbmFtZXNwYWNlc1xuICogQGFwaSBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIHNhdmUobmFtZXNwYWNlcykge1xuXHRpZiAobmFtZXNwYWNlcykge1xuXHRcdHByb2Nlc3MuZW52LkRFQlVHID0gbmFtZXNwYWNlcztcblx0fSBlbHNlIHtcblx0XHQvLyBJZiB5b3Ugc2V0IGEgcHJvY2Vzcy5lbnYgZmllbGQgdG8gbnVsbCBvciB1bmRlZmluZWQsIGl0IGdldHMgY2FzdCB0byB0aGVcblx0XHQvLyBzdHJpbmcgJ251bGwnIG9yICd1bmRlZmluZWQnLiBKdXN0IGRlbGV0ZSBpbnN0ZWFkLlxuXHRcdGRlbGV0ZSBwcm9jZXNzLmVudi5ERUJVRztcblx0fVxufVxuXG4vKipcbiAqIExvYWQgYG5hbWVzcGFjZXNgLlxuICpcbiAqIEByZXR1cm4ge1N0cmluZ30gcmV0dXJucyB0aGUgcHJldmlvdXNseSBwZXJzaXN0ZWQgZGVidWcgbW9kZXNcbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5cbmZ1bmN0aW9uIGxvYWQoKSB7XG5cdHJldHVybiBwcm9jZXNzLmVudi5ERUJVRztcbn1cblxuLyoqXG4gKiBJbml0IGxvZ2ljIGZvciBgZGVidWdgIGluc3RhbmNlcy5cbiAqXG4gKiBDcmVhdGUgYSBuZXcgYGluc3BlY3RPcHRzYCBvYmplY3QgaW4gY2FzZSBgdXNlQ29sb3JzYCBpcyBzZXRcbiAqIGRpZmZlcmVudGx5IGZvciBhIHBhcnRpY3VsYXIgYGRlYnVnYCBpbnN0YW5jZS5cbiAqL1xuXG5mdW5jdGlvbiBpbml0KGRlYnVnKSB7XG5cdGRlYnVnLmluc3BlY3RPcHRzID0ge307XG5cblx0Y29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKGV4cG9ydHMuaW5zcGVjdE9wdHMpO1xuXHRmb3IgKGxldCBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKyspIHtcblx0XHRkZWJ1Zy5pbnNwZWN0T3B0c1trZXlzW2ldXSA9IGV4cG9ydHMuaW5zcGVjdE9wdHNba2V5c1tpXV07XG5cdH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2NvbW1vbicpKGV4cG9ydHMpO1xuXG5jb25zdCB7Zm9ybWF0dGVyc30gPSBtb2R1bGUuZXhwb3J0cztcblxuLyoqXG4gKiBNYXAgJW8gdG8gYHV0aWwuaW5zcGVjdCgpYCwgYWxsIG9uIGEgc2luZ2xlIGxpbmUuXG4gKi9cblxuZm9ybWF0dGVycy5vID0gZnVuY3Rpb24gKHYpIHtcblx0dGhpcy5pbnNwZWN0T3B0cy5jb2xvcnMgPSB0aGlzLnVzZUNvbG9ycztcblx0cmV0dXJuIHV0aWwuaW5zcGVjdCh2LCB0aGlzLmluc3BlY3RPcHRzKVxuXHRcdC5zcGxpdCgnXFxuJylcblx0XHQubWFwKHN0ciA9PiBzdHIudHJpbSgpKVxuXHRcdC5qb2luKCcgJyk7XG59O1xuXG4vKipcbiAqIE1hcCAlTyB0byBgdXRpbC5pbnNwZWN0KClgLCBhbGxvd2luZyBtdWx0aXBsZSBsaW5lcyBpZiBuZWVkZWQuXG4gKi9cblxuZm9ybWF0dGVycy5PID0gZnVuY3Rpb24gKHYpIHtcblx0dGhpcy5pbnNwZWN0T3B0cy5jb2xvcnMgPSB0aGlzLnVzZUNvbG9ycztcblx0cmV0dXJuIHV0aWwuaW5zcGVjdCh2LCB0aGlzLmluc3BlY3RPcHRzKTtcbn07XG4iLCJ2YXIgU3RyZWFtID0gcmVxdWlyZSgnc3RyZWFtJykuU3RyZWFtO1xudmFyIHV0aWwgPSByZXF1aXJlKCd1dGlsJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gRGVsYXllZFN0cmVhbTtcbmZ1bmN0aW9uIERlbGF5ZWRTdHJlYW0oKSB7XG4gIHRoaXMuc291cmNlID0gbnVsbDtcbiAgdGhpcy5kYXRhU2l6ZSA9IDA7XG4gIHRoaXMubWF4RGF0YVNpemUgPSAxMDI0ICogMTAyNDtcbiAgdGhpcy5wYXVzZVN0cmVhbSA9IHRydWU7XG5cbiAgdGhpcy5fbWF4RGF0YVNpemVFeGNlZWRlZCA9IGZhbHNlO1xuICB0aGlzLl9yZWxlYXNlZCA9IGZhbHNlO1xuICB0aGlzLl9idWZmZXJlZEV2ZW50cyA9IFtdO1xufVxudXRpbC5pbmhlcml0cyhEZWxheWVkU3RyZWFtLCBTdHJlYW0pO1xuXG5EZWxheWVkU3RyZWFtLmNyZWF0ZSA9IGZ1bmN0aW9uKHNvdXJjZSwgb3B0aW9ucykge1xuICB2YXIgZGVsYXllZFN0cmVhbSA9IG5ldyB0aGlzKCk7XG5cbiAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG4gIGZvciAodmFyIG9wdGlvbiBpbiBvcHRpb25zKSB7XG4gICAgZGVsYXllZFN0cmVhbVtvcHRpb25dID0gb3B0aW9uc1tvcHRpb25dO1xuICB9XG5cbiAgZGVsYXllZFN0cmVhbS5zb3VyY2UgPSBzb3VyY2U7XG5cbiAgdmFyIHJlYWxFbWl0ID0gc291cmNlLmVtaXQ7XG4gIHNvdXJjZS5lbWl0ID0gZnVuY3Rpb24oKSB7XG4gICAgZGVsYXllZFN0cmVhbS5faGFuZGxlRW1pdChhcmd1bWVudHMpO1xuICAgIHJldHVybiByZWFsRW1pdC5hcHBseShzb3VyY2UsIGFyZ3VtZW50cyk7XG4gIH07XG5cbiAgc291cmNlLm9uKCdlcnJvcicsIGZ1bmN0aW9uKCkge30pO1xuICBpZiAoZGVsYXllZFN0cmVhbS5wYXVzZVN0cmVhbSkge1xuICAgIHNvdXJjZS5wYXVzZSgpO1xuICB9XG5cbiAgcmV0dXJuIGRlbGF5ZWRTdHJlYW07XG59O1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoRGVsYXllZFN0cmVhbS5wcm90b3R5cGUsICdyZWFkYWJsZScsIHtcbiAgY29uZmlndXJhYmxlOiB0cnVlLFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLnNvdXJjZS5yZWFkYWJsZTtcbiAgfVxufSk7XG5cbkRlbGF5ZWRTdHJlYW0ucHJvdG90eXBlLnNldEVuY29kaW5nID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiB0aGlzLnNvdXJjZS5zZXRFbmNvZGluZy5hcHBseSh0aGlzLnNvdXJjZSwgYXJndW1lbnRzKTtcbn07XG5cbkRlbGF5ZWRTdHJlYW0ucHJvdG90eXBlLnJlc3VtZSA9IGZ1bmN0aW9uKCkge1xuICBpZiAoIXRoaXMuX3JlbGVhc2VkKSB7XG4gICAgdGhpcy5yZWxlYXNlKCk7XG4gIH1cblxuICB0aGlzLnNvdXJjZS5yZXN1bWUoKTtcbn07XG5cbkRlbGF5ZWRTdHJlYW0ucHJvdG90eXBlLnBhdXNlID0gZnVuY3Rpb24oKSB7XG4gIHRoaXMuc291cmNlLnBhdXNlKCk7XG59O1xuXG5EZWxheWVkU3RyZWFtLnByb3RvdHlwZS5yZWxlYXNlID0gZnVuY3Rpb24oKSB7XG4gIHRoaXMuX3JlbGVhc2VkID0gdHJ1ZTtcblxuICB0aGlzLl9idWZmZXJlZEV2ZW50cy5mb3JFYWNoKGZ1bmN0aW9uKGFyZ3MpIHtcbiAgICB0aGlzLmVtaXQuYXBwbHkodGhpcywgYXJncyk7XG4gIH0uYmluZCh0aGlzKSk7XG4gIHRoaXMuX2J1ZmZlcmVkRXZlbnRzID0gW107XG59O1xuXG5EZWxheWVkU3RyZWFtLnByb3RvdHlwZS5waXBlID0gZnVuY3Rpb24oKSB7XG4gIHZhciByID0gU3RyZWFtLnByb3RvdHlwZS5waXBlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gIHRoaXMucmVzdW1lKCk7XG4gIHJldHVybiByO1xufTtcblxuRGVsYXllZFN0cmVhbS5wcm90b3R5cGUuX2hhbmRsZUVtaXQgPSBmdW5jdGlvbihhcmdzKSB7XG4gIGlmICh0aGlzLl9yZWxlYXNlZCkge1xuICAgIHRoaXMuZW1pdC5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAoYXJnc1swXSA9PT0gJ2RhdGEnKSB7XG4gICAgdGhpcy5kYXRhU2l6ZSArPSBhcmdzWzFdLmxlbmd0aDtcbiAgICB0aGlzLl9jaGVja0lmTWF4RGF0YVNpemVFeGNlZWRlZCgpO1xuICB9XG5cbiAgdGhpcy5fYnVmZmVyZWRFdmVudHMucHVzaChhcmdzKTtcbn07XG5cbkRlbGF5ZWRTdHJlYW0ucHJvdG90eXBlLl9jaGVja0lmTWF4RGF0YVNpemVFeGNlZWRlZCA9IGZ1bmN0aW9uKCkge1xuICBpZiAodGhpcy5fbWF4RGF0YVNpemVFeGNlZWRlZCkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmICh0aGlzLmRhdGFTaXplIDw9IHRoaXMubWF4RGF0YVNpemUpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICB0aGlzLl9tYXhEYXRhU2l6ZUV4Y2VlZGVkID0gdHJ1ZTtcbiAgdmFyIG1lc3NhZ2UgPVxuICAgICdEZWxheWVkU3RyZWFtI21heERhdGFTaXplIG9mICcgKyB0aGlzLm1heERhdGFTaXplICsgJyBieXRlcyBleGNlZWRlZC4nXG4gIHRoaXMuZW1pdCgnZXJyb3InLCBuZXcgRXJyb3IobWVzc2FnZSkpO1xufTtcbiIsInZhciBkZWJ1ZztcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoKSB7XG4gIGlmICghZGVidWcpIHtcbiAgICB0cnkge1xuICAgICAgLyogZXNsaW50IGdsb2JhbC1yZXF1aXJlOiBvZmYgKi9cbiAgICAgIGRlYnVnID0gcmVxdWlyZShcImRlYnVnXCIpKFwiZm9sbG93LXJlZGlyZWN0c1wiKTtcbiAgICB9XG4gICAgY2F0Y2ggKGVycm9yKSB7IC8qICovIH1cbiAgICBpZiAodHlwZW9mIGRlYnVnICE9PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgIGRlYnVnID0gZnVuY3Rpb24gKCkgeyAvKiAqLyB9O1xuICAgIH1cbiAgfVxuICBkZWJ1Zy5hcHBseShudWxsLCBhcmd1bWVudHMpO1xufTtcbiIsInZhciB1cmwgPSByZXF1aXJlKFwidXJsXCIpO1xudmFyIFVSTCA9IHVybC5VUkw7XG52YXIgaHR0cCA9IHJlcXVpcmUoXCJodHRwXCIpO1xudmFyIGh0dHBzID0gcmVxdWlyZShcImh0dHBzXCIpO1xudmFyIFdyaXRhYmxlID0gcmVxdWlyZShcInN0cmVhbVwiKS5Xcml0YWJsZTtcbnZhciBhc3NlcnQgPSByZXF1aXJlKFwiYXNzZXJ0XCIpO1xudmFyIGRlYnVnID0gcmVxdWlyZShcIi4vZGVidWdcIik7XG5cbi8vIFdoZXRoZXIgdG8gdXNlIHRoZSBuYXRpdmUgVVJMIG9iamVjdCBvciB0aGUgbGVnYWN5IHVybCBtb2R1bGVcbnZhciB1c2VOYXRpdmVVUkwgPSBmYWxzZTtcbnRyeSB7XG4gIGFzc2VydChuZXcgVVJMKCkpO1xufVxuY2F0Y2ggKGVycm9yKSB7XG4gIHVzZU5hdGl2ZVVSTCA9IGVycm9yLmNvZGUgPT09IFwiRVJSX0lOVkFMSURfVVJMXCI7XG59XG5cbi8vIFVSTCBmaWVsZHMgdG8gcHJlc2VydmUgaW4gY29weSBvcGVyYXRpb25zXG52YXIgcHJlc2VydmVkVXJsRmllbGRzID0gW1xuICBcImF1dGhcIixcbiAgXCJob3N0XCIsXG4gIFwiaG9zdG5hbWVcIixcbiAgXCJocmVmXCIsXG4gIFwicGF0aFwiLFxuICBcInBhdGhuYW1lXCIsXG4gIFwicG9ydFwiLFxuICBcInByb3RvY29sXCIsXG4gIFwicXVlcnlcIixcbiAgXCJzZWFyY2hcIixcbiAgXCJoYXNoXCIsXG5dO1xuXG4vLyBDcmVhdGUgaGFuZGxlcnMgdGhhdCBwYXNzIGV2ZW50cyBmcm9tIG5hdGl2ZSByZXF1ZXN0c1xudmFyIGV2ZW50cyA9IFtcImFib3J0XCIsIFwiYWJvcnRlZFwiLCBcImNvbm5lY3RcIiwgXCJlcnJvclwiLCBcInNvY2tldFwiLCBcInRpbWVvdXRcIl07XG52YXIgZXZlbnRIYW5kbGVycyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG5ldmVudHMuZm9yRWFjaChmdW5jdGlvbiAoZXZlbnQpIHtcbiAgZXZlbnRIYW5kbGVyc1tldmVudF0gPSBmdW5jdGlvbiAoYXJnMSwgYXJnMiwgYXJnMykge1xuICAgIHRoaXMuX3JlZGlyZWN0YWJsZS5lbWl0KGV2ZW50LCBhcmcxLCBhcmcyLCBhcmczKTtcbiAgfTtcbn0pO1xuXG4vLyBFcnJvciB0eXBlcyB3aXRoIGNvZGVzXG52YXIgSW52YWxpZFVybEVycm9yID0gY3JlYXRlRXJyb3JUeXBlKFxuICBcIkVSUl9JTlZBTElEX1VSTFwiLFxuICBcIkludmFsaWQgVVJMXCIsXG4gIFR5cGVFcnJvclxuKTtcbnZhciBSZWRpcmVjdGlvbkVycm9yID0gY3JlYXRlRXJyb3JUeXBlKFxuICBcIkVSUl9GUl9SRURJUkVDVElPTl9GQUlMVVJFXCIsXG4gIFwiUmVkaXJlY3RlZCByZXF1ZXN0IGZhaWxlZFwiXG4pO1xudmFyIFRvb01hbnlSZWRpcmVjdHNFcnJvciA9IGNyZWF0ZUVycm9yVHlwZShcbiAgXCJFUlJfRlJfVE9PX01BTllfUkVESVJFQ1RTXCIsXG4gIFwiTWF4aW11bSBudW1iZXIgb2YgcmVkaXJlY3RzIGV4Y2VlZGVkXCIsXG4gIFJlZGlyZWN0aW9uRXJyb3Jcbik7XG52YXIgTWF4Qm9keUxlbmd0aEV4Y2VlZGVkRXJyb3IgPSBjcmVhdGVFcnJvclR5cGUoXG4gIFwiRVJSX0ZSX01BWF9CT0RZX0xFTkdUSF9FWENFRURFRFwiLFxuICBcIlJlcXVlc3QgYm9keSBsYXJnZXIgdGhhbiBtYXhCb2R5TGVuZ3RoIGxpbWl0XCJcbik7XG52YXIgV3JpdGVBZnRlckVuZEVycm9yID0gY3JlYXRlRXJyb3JUeXBlKFxuICBcIkVSUl9TVFJFQU1fV1JJVEVfQUZURVJfRU5EXCIsXG4gIFwid3JpdGUgYWZ0ZXIgZW5kXCJcbik7XG5cbi8vIGlzdGFuYnVsIGlnbm9yZSBuZXh0XG52YXIgZGVzdHJveSA9IFdyaXRhYmxlLnByb3RvdHlwZS5kZXN0cm95IHx8IG5vb3A7XG5cbi8vIEFuIEhUVFAoUykgcmVxdWVzdCB0aGF0IGNhbiBiZSByZWRpcmVjdGVkXG5mdW5jdGlvbiBSZWRpcmVjdGFibGVSZXF1ZXN0KG9wdGlvbnMsIHJlc3BvbnNlQ2FsbGJhY2spIHtcbiAgLy8gSW5pdGlhbGl6ZSB0aGUgcmVxdWVzdFxuICBXcml0YWJsZS5jYWxsKHRoaXMpO1xuICB0aGlzLl9zYW5pdGl6ZU9wdGlvbnMob3B0aW9ucyk7XG4gIHRoaXMuX29wdGlvbnMgPSBvcHRpb25zO1xuICB0aGlzLl9lbmRlZCA9IGZhbHNlO1xuICB0aGlzLl9lbmRpbmcgPSBmYWxzZTtcbiAgdGhpcy5fcmVkaXJlY3RDb3VudCA9IDA7XG4gIHRoaXMuX3JlZGlyZWN0cyA9IFtdO1xuICB0aGlzLl9yZXF1ZXN0Qm9keUxlbmd0aCA9IDA7XG4gIHRoaXMuX3JlcXVlc3RCb2R5QnVmZmVycyA9IFtdO1xuXG4gIC8vIEF0dGFjaCBhIGNhbGxiYWNrIGlmIHBhc3NlZFxuICBpZiAocmVzcG9uc2VDYWxsYmFjaykge1xuICAgIHRoaXMub24oXCJyZXNwb25zZVwiLCByZXNwb25zZUNhbGxiYWNrKTtcbiAgfVxuXG4gIC8vIFJlYWN0IHRvIHJlc3BvbnNlcyBvZiBuYXRpdmUgcmVxdWVzdHNcbiAgdmFyIHNlbGYgPSB0aGlzO1xuICB0aGlzLl9vbk5hdGl2ZVJlc3BvbnNlID0gZnVuY3Rpb24gKHJlc3BvbnNlKSB7XG4gICAgdHJ5IHtcbiAgICAgIHNlbGYuX3Byb2Nlc3NSZXNwb25zZShyZXNwb25zZSk7XG4gICAgfVxuICAgIGNhdGNoIChjYXVzZSkge1xuICAgICAgc2VsZi5lbWl0KFwiZXJyb3JcIiwgY2F1c2UgaW5zdGFuY2VvZiBSZWRpcmVjdGlvbkVycm9yID9cbiAgICAgICAgY2F1c2UgOiBuZXcgUmVkaXJlY3Rpb25FcnJvcih7IGNhdXNlOiBjYXVzZSB9KSk7XG4gICAgfVxuICB9O1xuXG4gIC8vIFBlcmZvcm0gdGhlIGZpcnN0IHJlcXVlc3RcbiAgdGhpcy5fcGVyZm9ybVJlcXVlc3QoKTtcbn1cblJlZGlyZWN0YWJsZVJlcXVlc3QucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShXcml0YWJsZS5wcm90b3R5cGUpO1xuXG5SZWRpcmVjdGFibGVSZXF1ZXN0LnByb3RvdHlwZS5hYm9ydCA9IGZ1bmN0aW9uICgpIHtcbiAgZGVzdHJveVJlcXVlc3QodGhpcy5fY3VycmVudFJlcXVlc3QpO1xuICB0aGlzLl9jdXJyZW50UmVxdWVzdC5hYm9ydCgpO1xuICB0aGlzLmVtaXQoXCJhYm9ydFwiKTtcbn07XG5cblJlZGlyZWN0YWJsZVJlcXVlc3QucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoZXJyb3IpIHtcbiAgZGVzdHJveVJlcXVlc3QodGhpcy5fY3VycmVudFJlcXVlc3QsIGVycm9yKTtcbiAgZGVzdHJveS5jYWxsKHRoaXMsIGVycm9yKTtcbiAgcmV0dXJuIHRoaXM7XG59O1xuXG4vLyBXcml0ZXMgYnVmZmVyZWQgZGF0YSB0byB0aGUgY3VycmVudCBuYXRpdmUgcmVxdWVzdFxuUmVkaXJlY3RhYmxlUmVxdWVzdC5wcm90b3R5cGUud3JpdGUgPSBmdW5jdGlvbiAoZGF0YSwgZW5jb2RpbmcsIGNhbGxiYWNrKSB7XG4gIC8vIFdyaXRpbmcgaXMgbm90IGFsbG93ZWQgaWYgZW5kIGhhcyBiZWVuIGNhbGxlZFxuICBpZiAodGhpcy5fZW5kaW5nKSB7XG4gICAgdGhyb3cgbmV3IFdyaXRlQWZ0ZXJFbmRFcnJvcigpO1xuICB9XG5cbiAgLy8gVmFsaWRhdGUgaW5wdXQgYW5kIHNoaWZ0IHBhcmFtZXRlcnMgaWYgbmVjZXNzYXJ5XG4gIGlmICghaXNTdHJpbmcoZGF0YSkgJiYgIWlzQnVmZmVyKGRhdGEpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcImRhdGEgc2hvdWxkIGJlIGEgc3RyaW5nLCBCdWZmZXIgb3IgVWludDhBcnJheVwiKTtcbiAgfVxuICBpZiAoaXNGdW5jdGlvbihlbmNvZGluZykpIHtcbiAgICBjYWxsYmFjayA9IGVuY29kaW5nO1xuICAgIGVuY29kaW5nID0gbnVsbDtcbiAgfVxuXG4gIC8vIElnbm9yZSBlbXB0eSBidWZmZXJzLCBzaW5jZSB3cml0aW5nIHRoZW0gZG9lc24ndCBpbnZva2UgdGhlIGNhbGxiYWNrXG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9ub2RlanMvbm9kZS9pc3N1ZXMvMjIwNjZcbiAgaWYgKGRhdGEubGVuZ3RoID09PSAwKSB7XG4gICAgaWYgKGNhbGxiYWNrKSB7XG4gICAgICBjYWxsYmFjaygpO1xuICAgIH1cbiAgICByZXR1cm47XG4gIH1cbiAgLy8gT25seSB3cml0ZSB3aGVuIHdlIGRvbid0IGV4Y2VlZCB0aGUgbWF4aW11bSBib2R5IGxlbmd0aFxuICBpZiAodGhpcy5fcmVxdWVzdEJvZHlMZW5ndGggKyBkYXRhLmxlbmd0aCA8PSB0aGlzLl9vcHRpb25zLm1heEJvZHlMZW5ndGgpIHtcbiAgICB0aGlzLl9yZXF1ZXN0Qm9keUxlbmd0aCArPSBkYXRhLmxlbmd0aDtcbiAgICB0aGlzLl9yZXF1ZXN0Qm9keUJ1ZmZlcnMucHVzaCh7IGRhdGE6IGRhdGEsIGVuY29kaW5nOiBlbmNvZGluZyB9KTtcbiAgICB0aGlzLl9jdXJyZW50UmVxdWVzdC53cml0ZShkYXRhLCBlbmNvZGluZywgY2FsbGJhY2spO1xuICB9XG4gIC8vIEVycm9yIHdoZW4gd2UgZXhjZWVkIHRoZSBtYXhpbXVtIGJvZHkgbGVuZ3RoXG4gIGVsc2Uge1xuICAgIHRoaXMuZW1pdChcImVycm9yXCIsIG5ldyBNYXhCb2R5TGVuZ3RoRXhjZWVkZWRFcnJvcigpKTtcbiAgICB0aGlzLmFib3J0KCk7XG4gIH1cbn07XG5cbi8vIEVuZHMgdGhlIGN1cnJlbnQgbmF0aXZlIHJlcXVlc3RcblJlZGlyZWN0YWJsZVJlcXVlc3QucHJvdG90eXBlLmVuZCA9IGZ1bmN0aW9uIChkYXRhLCBlbmNvZGluZywgY2FsbGJhY2spIHtcbiAgLy8gU2hpZnQgcGFyYW1ldGVycyBpZiBuZWNlc3NhcnlcbiAgaWYgKGlzRnVuY3Rpb24oZGF0YSkpIHtcbiAgICBjYWxsYmFjayA9IGRhdGE7XG4gICAgZGF0YSA9IGVuY29kaW5nID0gbnVsbDtcbiAgfVxuICBlbHNlIGlmIChpc0Z1bmN0aW9uKGVuY29kaW5nKSkge1xuICAgIGNhbGxiYWNrID0gZW5jb2Rpbmc7XG4gICAgZW5jb2RpbmcgPSBudWxsO1xuICB9XG5cbiAgLy8gV3JpdGUgZGF0YSBpZiBuZWVkZWQgYW5kIGVuZFxuICBpZiAoIWRhdGEpIHtcbiAgICB0aGlzLl9lbmRlZCA9IHRoaXMuX2VuZGluZyA9IHRydWU7XG4gICAgdGhpcy5fY3VycmVudFJlcXVlc3QuZW5kKG51bGwsIG51bGwsIGNhbGxiYWNrKTtcbiAgfVxuICBlbHNlIHtcbiAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgdmFyIGN1cnJlbnRSZXF1ZXN0ID0gdGhpcy5fY3VycmVudFJlcXVlc3Q7XG4gICAgdGhpcy53cml0ZShkYXRhLCBlbmNvZGluZywgZnVuY3Rpb24gKCkge1xuICAgICAgc2VsZi5fZW5kZWQgPSB0cnVlO1xuICAgICAgY3VycmVudFJlcXVlc3QuZW5kKG51bGwsIG51bGwsIGNhbGxiYWNrKTtcbiAgICB9KTtcbiAgICB0aGlzLl9lbmRpbmcgPSB0cnVlO1xuICB9XG59O1xuXG4vLyBTZXRzIGEgaGVhZGVyIHZhbHVlIG9uIHRoZSBjdXJyZW50IG5hdGl2ZSByZXF1ZXN0XG5SZWRpcmVjdGFibGVSZXF1ZXN0LnByb3RvdHlwZS5zZXRIZWFkZXIgPSBmdW5jdGlvbiAobmFtZSwgdmFsdWUpIHtcbiAgdGhpcy5fb3B0aW9ucy5oZWFkZXJzW25hbWVdID0gdmFsdWU7XG4gIHRoaXMuX2N1cnJlbnRSZXF1ZXN0LnNldEhlYWRlcihuYW1lLCB2YWx1ZSk7XG59O1xuXG4vLyBDbGVhcnMgYSBoZWFkZXIgdmFsdWUgb24gdGhlIGN1cnJlbnQgbmF0aXZlIHJlcXVlc3RcblJlZGlyZWN0YWJsZVJlcXVlc3QucHJvdG90eXBlLnJlbW92ZUhlYWRlciA9IGZ1bmN0aW9uIChuYW1lKSB7XG4gIGRlbGV0ZSB0aGlzLl9vcHRpb25zLmhlYWRlcnNbbmFtZV07XG4gIHRoaXMuX2N1cnJlbnRSZXF1ZXN0LnJlbW92ZUhlYWRlcihuYW1lKTtcbn07XG5cbi8vIEdsb2JhbCB0aW1lb3V0IGZvciBhbGwgdW5kZXJseWluZyByZXF1ZXN0c1xuUmVkaXJlY3RhYmxlUmVxdWVzdC5wcm90b3R5cGUuc2V0VGltZW91dCA9IGZ1bmN0aW9uIChtc2VjcywgY2FsbGJhY2spIHtcbiAgdmFyIHNlbGYgPSB0aGlzO1xuXG4gIC8vIERlc3Ryb3lzIHRoZSBzb2NrZXQgb24gdGltZW91dFxuICBmdW5jdGlvbiBkZXN0cm95T25UaW1lb3V0KHNvY2tldCkge1xuICAgIHNvY2tldC5zZXRUaW1lb3V0KG1zZWNzKTtcbiAgICBzb2NrZXQucmVtb3ZlTGlzdGVuZXIoXCJ0aW1lb3V0XCIsIHNvY2tldC5kZXN0cm95KTtcbiAgICBzb2NrZXQuYWRkTGlzdGVuZXIoXCJ0aW1lb3V0XCIsIHNvY2tldC5kZXN0cm95KTtcbiAgfVxuXG4gIC8vIFNldHMgdXAgYSB0aW1lciB0byB0cmlnZ2VyIGEgdGltZW91dCBldmVudFxuICBmdW5jdGlvbiBzdGFydFRpbWVyKHNvY2tldCkge1xuICAgIGlmIChzZWxmLl90aW1lb3V0KSB7XG4gICAgICBjbGVhclRpbWVvdXQoc2VsZi5fdGltZW91dCk7XG4gICAgfVxuICAgIHNlbGYuX3RpbWVvdXQgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgIHNlbGYuZW1pdChcInRpbWVvdXRcIik7XG4gICAgICBjbGVhclRpbWVyKCk7XG4gICAgfSwgbXNlY3MpO1xuICAgIGRlc3Ryb3lPblRpbWVvdXQoc29ja2V0KTtcbiAgfVxuXG4gIC8vIFN0b3BzIGEgdGltZW91dCBmcm9tIHRyaWdnZXJpbmdcbiAgZnVuY3Rpb24gY2xlYXJUaW1lcigpIHtcbiAgICAvLyBDbGVhciB0aGUgdGltZW91dFxuICAgIGlmIChzZWxmLl90aW1lb3V0KSB7XG4gICAgICBjbGVhclRpbWVvdXQoc2VsZi5fdGltZW91dCk7XG4gICAgICBzZWxmLl90aW1lb3V0ID0gbnVsbDtcbiAgICB9XG5cbiAgICAvLyBDbGVhbiB1cCBhbGwgYXR0YWNoZWQgbGlzdGVuZXJzXG4gICAgc2VsZi5yZW1vdmVMaXN0ZW5lcihcImFib3J0XCIsIGNsZWFyVGltZXIpO1xuICAgIHNlbGYucmVtb3ZlTGlzdGVuZXIoXCJlcnJvclwiLCBjbGVhclRpbWVyKTtcbiAgICBzZWxmLnJlbW92ZUxpc3RlbmVyKFwicmVzcG9uc2VcIiwgY2xlYXJUaW1lcik7XG4gICAgc2VsZi5yZW1vdmVMaXN0ZW5lcihcImNsb3NlXCIsIGNsZWFyVGltZXIpO1xuICAgIGlmIChjYWxsYmFjaykge1xuICAgICAgc2VsZi5yZW1vdmVMaXN0ZW5lcihcInRpbWVvdXRcIiwgY2FsbGJhY2spO1xuICAgIH1cbiAgICBpZiAoIXNlbGYuc29ja2V0KSB7XG4gICAgICBzZWxmLl9jdXJyZW50UmVxdWVzdC5yZW1vdmVMaXN0ZW5lcihcInNvY2tldFwiLCBzdGFydFRpbWVyKTtcbiAgICB9XG4gIH1cblxuICAvLyBBdHRhY2ggY2FsbGJhY2sgaWYgcGFzc2VkXG4gIGlmIChjYWxsYmFjaykge1xuICAgIHRoaXMub24oXCJ0aW1lb3V0XCIsIGNhbGxiYWNrKTtcbiAgfVxuXG4gIC8vIFN0YXJ0IHRoZSB0aW1lciBpZiBvciB3aGVuIHRoZSBzb2NrZXQgaXMgb3BlbmVkXG4gIGlmICh0aGlzLnNvY2tldCkge1xuICAgIHN0YXJ0VGltZXIodGhpcy5zb2NrZXQpO1xuICB9XG4gIGVsc2Uge1xuICAgIHRoaXMuX2N1cnJlbnRSZXF1ZXN0Lm9uY2UoXCJzb2NrZXRcIiwgc3RhcnRUaW1lcik7XG4gIH1cblxuICAvLyBDbGVhbiB1cCBvbiBldmVudHNcbiAgdGhpcy5vbihcInNvY2tldFwiLCBkZXN0cm95T25UaW1lb3V0KTtcbiAgdGhpcy5vbihcImFib3J0XCIsIGNsZWFyVGltZXIpO1xuICB0aGlzLm9uKFwiZXJyb3JcIiwgY2xlYXJUaW1lcik7XG4gIHRoaXMub24oXCJyZXNwb25zZVwiLCBjbGVhclRpbWVyKTtcbiAgdGhpcy5vbihcImNsb3NlXCIsIGNsZWFyVGltZXIpO1xuXG4gIHJldHVybiB0aGlzO1xufTtcblxuLy8gUHJveHkgYWxsIG90aGVyIHB1YmxpYyBDbGllbnRSZXF1ZXN0IG1ldGhvZHNcbltcbiAgXCJmbHVzaEhlYWRlcnNcIiwgXCJnZXRIZWFkZXJcIixcbiAgXCJzZXROb0RlbGF5XCIsIFwic2V0U29ja2V0S2VlcEFsaXZlXCIsXG5dLmZvckVhY2goZnVuY3Rpb24gKG1ldGhvZCkge1xuICBSZWRpcmVjdGFibGVSZXF1ZXN0LnByb3RvdHlwZVttZXRob2RdID0gZnVuY3Rpb24gKGEsIGIpIHtcbiAgICByZXR1cm4gdGhpcy5fY3VycmVudFJlcXVlc3RbbWV0aG9kXShhLCBiKTtcbiAgfTtcbn0pO1xuXG4vLyBQcm94eSBhbGwgcHVibGljIENsaWVudFJlcXVlc3QgcHJvcGVydGllc1xuW1wiYWJvcnRlZFwiLCBcImNvbm5lY3Rpb25cIiwgXCJzb2NrZXRcIl0uZm9yRWFjaChmdW5jdGlvbiAocHJvcGVydHkpIHtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFJlZGlyZWN0YWJsZVJlcXVlc3QucHJvdG90eXBlLCBwcm9wZXJ0eSwge1xuICAgIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpcy5fY3VycmVudFJlcXVlc3RbcHJvcGVydHldOyB9LFxuICB9KTtcbn0pO1xuXG5SZWRpcmVjdGFibGVSZXF1ZXN0LnByb3RvdHlwZS5fc2FuaXRpemVPcHRpb25zID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgLy8gRW5zdXJlIGhlYWRlcnMgYXJlIGFsd2F5cyBwcmVzZW50XG4gIGlmICghb3B0aW9ucy5oZWFkZXJzKSB7XG4gICAgb3B0aW9ucy5oZWFkZXJzID0ge307XG4gIH1cblxuICAvLyBTaW5jZSBodHRwLnJlcXVlc3QgdHJlYXRzIGhvc3QgYXMgYW4gYWxpYXMgb2YgaG9zdG5hbWUsXG4gIC8vIGJ1dCB0aGUgdXJsIG1vZHVsZSBpbnRlcnByZXRzIGhvc3QgYXMgaG9zdG5hbWUgcGx1cyBwb3J0LFxuICAvLyBlbGltaW5hdGUgdGhlIGhvc3QgcHJvcGVydHkgdG8gYXZvaWQgY29uZnVzaW9uLlxuICBpZiAob3B0aW9ucy5ob3N0KSB7XG4gICAgLy8gVXNlIGhvc3RuYW1lIGlmIHNldCwgYmVjYXVzZSBpdCBoYXMgcHJlY2VkZW5jZVxuICAgIGlmICghb3B0aW9ucy5ob3N0bmFtZSkge1xuICAgICAgb3B0aW9ucy5ob3N0bmFtZSA9IG9wdGlvbnMuaG9zdDtcbiAgICB9XG4gICAgZGVsZXRlIG9wdGlvbnMuaG9zdDtcbiAgfVxuXG4gIC8vIENvbXBsZXRlIHRoZSBVUkwgb2JqZWN0IHdoZW4gbmVjZXNzYXJ5XG4gIGlmICghb3B0aW9ucy5wYXRobmFtZSAmJiBvcHRpb25zLnBhdGgpIHtcbiAgICB2YXIgc2VhcmNoUG9zID0gb3B0aW9ucy5wYXRoLmluZGV4T2YoXCI/XCIpO1xuICAgIGlmIChzZWFyY2hQb3MgPCAwKSB7XG4gICAgICBvcHRpb25zLnBhdGhuYW1lID0gb3B0aW9ucy5wYXRoO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIG9wdGlvbnMucGF0aG5hbWUgPSBvcHRpb25zLnBhdGguc3Vic3RyaW5nKDAsIHNlYXJjaFBvcyk7XG4gICAgICBvcHRpb25zLnNlYXJjaCA9IG9wdGlvbnMucGF0aC5zdWJzdHJpbmcoc2VhcmNoUG9zKTtcbiAgICB9XG4gIH1cbn07XG5cblxuLy8gRXhlY3V0ZXMgdGhlIG5leHQgbmF0aXZlIHJlcXVlc3QgKGluaXRpYWwgb3IgcmVkaXJlY3QpXG5SZWRpcmVjdGFibGVSZXF1ZXN0LnByb3RvdHlwZS5fcGVyZm9ybVJlcXVlc3QgPSBmdW5jdGlvbiAoKSB7XG4gIC8vIExvYWQgdGhlIG5hdGl2ZSBwcm90b2NvbFxuICB2YXIgcHJvdG9jb2wgPSB0aGlzLl9vcHRpb25zLnByb3RvY29sO1xuICB2YXIgbmF0aXZlUHJvdG9jb2wgPSB0aGlzLl9vcHRpb25zLm5hdGl2ZVByb3RvY29sc1twcm90b2NvbF07XG4gIGlmICghbmF0aXZlUHJvdG9jb2wpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiVW5zdXBwb3J0ZWQgcHJvdG9jb2wgXCIgKyBwcm90b2NvbCk7XG4gIH1cblxuICAvLyBJZiBzcGVjaWZpZWQsIHVzZSB0aGUgYWdlbnQgY29ycmVzcG9uZGluZyB0byB0aGUgcHJvdG9jb2xcbiAgLy8gKEhUVFAgYW5kIEhUVFBTIHVzZSBkaWZmZXJlbnQgdHlwZXMgb2YgYWdlbnRzKVxuICBpZiAodGhpcy5fb3B0aW9ucy5hZ2VudHMpIHtcbiAgICB2YXIgc2NoZW1lID0gcHJvdG9jb2wuc2xpY2UoMCwgLTEpO1xuICAgIHRoaXMuX29wdGlvbnMuYWdlbnQgPSB0aGlzLl9vcHRpb25zLmFnZW50c1tzY2hlbWVdO1xuICB9XG5cbiAgLy8gQ3JlYXRlIHRoZSBuYXRpdmUgcmVxdWVzdCBhbmQgc2V0IHVwIGl0cyBldmVudCBoYW5kbGVyc1xuICB2YXIgcmVxdWVzdCA9IHRoaXMuX2N1cnJlbnRSZXF1ZXN0ID1cbiAgICAgICAgbmF0aXZlUHJvdG9jb2wucmVxdWVzdCh0aGlzLl9vcHRpb25zLCB0aGlzLl9vbk5hdGl2ZVJlc3BvbnNlKTtcbiAgcmVxdWVzdC5fcmVkaXJlY3RhYmxlID0gdGhpcztcbiAgZm9yICh2YXIgZXZlbnQgb2YgZXZlbnRzKSB7XG4gICAgcmVxdWVzdC5vbihldmVudCwgZXZlbnRIYW5kbGVyc1tldmVudF0pO1xuICB9XG5cbiAgLy8gUkZDNzIzMMKnNS4zLjE6IFdoZW4gbWFraW5nIGEgcmVxdWVzdCBkaXJlY3RseSB0byBhbiBvcmlnaW4gc2VydmVyLCBb4oCmXVxuICAvLyBhIGNsaWVudCBNVVNUIHNlbmQgb25seSB0aGUgYWJzb2x1dGUgcGF0aCBb4oCmXSBhcyB0aGUgcmVxdWVzdC10YXJnZXQuXG4gIHRoaXMuX2N1cnJlbnRVcmwgPSAvXlxcLy8udGVzdCh0aGlzLl9vcHRpb25zLnBhdGgpID9cbiAgICB1cmwuZm9ybWF0KHRoaXMuX29wdGlvbnMpIDpcbiAgICAvLyBXaGVuIG1ha2luZyBhIHJlcXVlc3QgdG8gYSBwcm94eSwgW+KApl1cbiAgICAvLyBhIGNsaWVudCBNVVNUIHNlbmQgdGhlIHRhcmdldCBVUkkgaW4gYWJzb2x1dGUtZm9ybSBb4oCmXS5cbiAgICB0aGlzLl9vcHRpb25zLnBhdGg7XG5cbiAgLy8gRW5kIGEgcmVkaXJlY3RlZCByZXF1ZXN0XG4gIC8vIChUaGUgZmlyc3QgcmVxdWVzdCBtdXN0IGJlIGVuZGVkIGV4cGxpY2l0bHkgd2l0aCBSZWRpcmVjdGFibGVSZXF1ZXN0I2VuZClcbiAgaWYgKHRoaXMuX2lzUmVkaXJlY3QpIHtcbiAgICAvLyBXcml0ZSB0aGUgcmVxdWVzdCBlbnRpdHkgYW5kIGVuZFxuICAgIHZhciBpID0gMDtcbiAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgdmFyIGJ1ZmZlcnMgPSB0aGlzLl9yZXF1ZXN0Qm9keUJ1ZmZlcnM7XG4gICAgKGZ1bmN0aW9uIHdyaXRlTmV4dChlcnJvcikge1xuICAgICAgLy8gT25seSB3cml0ZSBpZiB0aGlzIHJlcXVlc3QgaGFzIG5vdCBiZWVuIHJlZGlyZWN0ZWQgeWV0XG4gICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgICAgaWYgKHJlcXVlc3QgPT09IHNlbGYuX2N1cnJlbnRSZXF1ZXN0KSB7XG4gICAgICAgIC8vIFJlcG9ydCBhbnkgd3JpdGUgZXJyb3JzXG4gICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgICBzZWxmLmVtaXQoXCJlcnJvclwiLCBlcnJvcik7XG4gICAgICAgIH1cbiAgICAgICAgLy8gV3JpdGUgdGhlIG5leHQgYnVmZmVyIGlmIHRoZXJlIGFyZSBzdGlsbCBsZWZ0XG4gICAgICAgIGVsc2UgaWYgKGkgPCBidWZmZXJzLmxlbmd0aCkge1xuICAgICAgICAgIHZhciBidWZmZXIgPSBidWZmZXJzW2krK107XG4gICAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICAgICAgICBpZiAoIXJlcXVlc3QuZmluaXNoZWQpIHtcbiAgICAgICAgICAgIHJlcXVlc3Qud3JpdGUoYnVmZmVyLmRhdGEsIGJ1ZmZlci5lbmNvZGluZywgd3JpdGVOZXh0KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gRW5kIHRoZSByZXF1ZXN0IGlmIGBlbmRgIGhhcyBiZWVuIGNhbGxlZCBvbiB1c1xuICAgICAgICBlbHNlIGlmIChzZWxmLl9lbmRlZCkge1xuICAgICAgICAgIHJlcXVlc3QuZW5kKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KCkpO1xuICB9XG59O1xuXG4vLyBQcm9jZXNzZXMgYSByZXNwb25zZSBmcm9tIHRoZSBjdXJyZW50IG5hdGl2ZSByZXF1ZXN0XG5SZWRpcmVjdGFibGVSZXF1ZXN0LnByb3RvdHlwZS5fcHJvY2Vzc1Jlc3BvbnNlID0gZnVuY3Rpb24gKHJlc3BvbnNlKSB7XG4gIC8vIFN0b3JlIHRoZSByZWRpcmVjdGVkIHJlc3BvbnNlXG4gIHZhciBzdGF0dXNDb2RlID0gcmVzcG9uc2Uuc3RhdHVzQ29kZTtcbiAgaWYgKHRoaXMuX29wdGlvbnMudHJhY2tSZWRpcmVjdHMpIHtcbiAgICB0aGlzLl9yZWRpcmVjdHMucHVzaCh7XG4gICAgICB1cmw6IHRoaXMuX2N1cnJlbnRVcmwsXG4gICAgICBoZWFkZXJzOiByZXNwb25zZS5oZWFkZXJzLFxuICAgICAgc3RhdHVzQ29kZTogc3RhdHVzQ29kZSxcbiAgICB9KTtcbiAgfVxuXG4gIC8vIFJGQzcyMzHCpzYuNDogVGhlIDN4eCAoUmVkaXJlY3Rpb24pIGNsYXNzIG9mIHN0YXR1cyBjb2RlIGluZGljYXRlc1xuICAvLyB0aGF0IGZ1cnRoZXIgYWN0aW9uIG5lZWRzIHRvIGJlIHRha2VuIGJ5IHRoZSB1c2VyIGFnZW50IGluIG9yZGVyIHRvXG4gIC8vIGZ1bGZpbGwgdGhlIHJlcXVlc3QuIElmIGEgTG9jYXRpb24gaGVhZGVyIGZpZWxkIGlzIHByb3ZpZGVkLFxuICAvLyB0aGUgdXNlciBhZ2VudCBNQVkgYXV0b21hdGljYWxseSByZWRpcmVjdCBpdHMgcmVxdWVzdCB0byB0aGUgVVJJXG4gIC8vIHJlZmVyZW5jZWQgYnkgdGhlIExvY2F0aW9uIGZpZWxkIHZhbHVlLFxuICAvLyBldmVuIGlmIHRoZSBzcGVjaWZpYyBzdGF0dXMgY29kZSBpcyBub3QgdW5kZXJzdG9vZC5cblxuICAvLyBJZiB0aGUgcmVzcG9uc2UgaXMgbm90IGEgcmVkaXJlY3Q7IHJldHVybiBpdCBhcy1pc1xuICB2YXIgbG9jYXRpb24gPSByZXNwb25zZS5oZWFkZXJzLmxvY2F0aW9uO1xuICBpZiAoIWxvY2F0aW9uIHx8IHRoaXMuX29wdGlvbnMuZm9sbG93UmVkaXJlY3RzID09PSBmYWxzZSB8fFxuICAgICAgc3RhdHVzQ29kZSA8IDMwMCB8fCBzdGF0dXNDb2RlID49IDQwMCkge1xuICAgIHJlc3BvbnNlLnJlc3BvbnNlVXJsID0gdGhpcy5fY3VycmVudFVybDtcbiAgICByZXNwb25zZS5yZWRpcmVjdHMgPSB0aGlzLl9yZWRpcmVjdHM7XG4gICAgdGhpcy5lbWl0KFwicmVzcG9uc2VcIiwgcmVzcG9uc2UpO1xuXG4gICAgLy8gQ2xlYW4gdXBcbiAgICB0aGlzLl9yZXF1ZXN0Qm9keUJ1ZmZlcnMgPSBbXTtcbiAgICByZXR1cm47XG4gIH1cblxuICAvLyBUaGUgcmVzcG9uc2UgaXMgYSByZWRpcmVjdCwgc28gYWJvcnQgdGhlIGN1cnJlbnQgcmVxdWVzdFxuICBkZXN0cm95UmVxdWVzdCh0aGlzLl9jdXJyZW50UmVxdWVzdCk7XG4gIC8vIERpc2NhcmQgdGhlIHJlbWFpbmRlciBvZiB0aGUgcmVzcG9uc2UgdG8gYXZvaWQgd2FpdGluZyBmb3IgZGF0YVxuICByZXNwb25zZS5kZXN0cm95KCk7XG5cbiAgLy8gUkZDNzIzMcKnNi40OiBBIGNsaWVudCBTSE9VTEQgZGV0ZWN0IGFuZCBpbnRlcnZlbmVcbiAgLy8gaW4gY3ljbGljYWwgcmVkaXJlY3Rpb25zIChpLmUuLCBcImluZmluaXRlXCIgcmVkaXJlY3Rpb24gbG9vcHMpLlxuICBpZiAoKyt0aGlzLl9yZWRpcmVjdENvdW50ID4gdGhpcy5fb3B0aW9ucy5tYXhSZWRpcmVjdHMpIHtcbiAgICB0aHJvdyBuZXcgVG9vTWFueVJlZGlyZWN0c0Vycm9yKCk7XG4gIH1cblxuICAvLyBTdG9yZSB0aGUgcmVxdWVzdCBoZWFkZXJzIGlmIGFwcGxpY2FibGVcbiAgdmFyIHJlcXVlc3RIZWFkZXJzO1xuICB2YXIgYmVmb3JlUmVkaXJlY3QgPSB0aGlzLl9vcHRpb25zLmJlZm9yZVJlZGlyZWN0O1xuICBpZiAoYmVmb3JlUmVkaXJlY3QpIHtcbiAgICByZXF1ZXN0SGVhZGVycyA9IE9iamVjdC5hc3NpZ24oe1xuICAgICAgLy8gVGhlIEhvc3QgaGVhZGVyIHdhcyBzZXQgYnkgbmF0aXZlUHJvdG9jb2wucmVxdWVzdFxuICAgICAgSG9zdDogcmVzcG9uc2UucmVxLmdldEhlYWRlcihcImhvc3RcIiksXG4gICAgfSwgdGhpcy5fb3B0aW9ucy5oZWFkZXJzKTtcbiAgfVxuXG4gIC8vIFJGQzcyMzHCpzYuNDogQXV0b21hdGljIHJlZGlyZWN0aW9uIG5lZWRzIHRvIGRvbmUgd2l0aFxuICAvLyBjYXJlIGZvciBtZXRob2RzIG5vdCBrbm93biB0byBiZSBzYWZlLCBb4oCmXVxuICAvLyBSRkM3MjMxwqc2LjQuMuKAkzM6IEZvciBoaXN0b3JpY2FsIHJlYXNvbnMsIGEgdXNlciBhZ2VudCBNQVkgY2hhbmdlXG4gIC8vIHRoZSByZXF1ZXN0IG1ldGhvZCBmcm9tIFBPU1QgdG8gR0VUIGZvciB0aGUgc3Vic2VxdWVudCByZXF1ZXN0LlxuICB2YXIgbWV0aG9kID0gdGhpcy5fb3B0aW9ucy5tZXRob2Q7XG4gIGlmICgoc3RhdHVzQ29kZSA9PT0gMzAxIHx8IHN0YXR1c0NvZGUgPT09IDMwMikgJiYgdGhpcy5fb3B0aW9ucy5tZXRob2QgPT09IFwiUE9TVFwiIHx8XG4gICAgICAvLyBSRkM3MjMxwqc2LjQuNDogVGhlIDMwMyAoU2VlIE90aGVyKSBzdGF0dXMgY29kZSBpbmRpY2F0ZXMgdGhhdFxuICAgICAgLy8gdGhlIHNlcnZlciBpcyByZWRpcmVjdGluZyB0aGUgdXNlciBhZ2VudCB0byBhIGRpZmZlcmVudCByZXNvdXJjZSBb4oCmXVxuICAgICAgLy8gQSB1c2VyIGFnZW50IGNhbiBwZXJmb3JtIGEgcmV0cmlldmFsIHJlcXVlc3QgdGFyZ2V0aW5nIHRoYXQgVVJJXG4gICAgICAvLyAoYSBHRVQgb3IgSEVBRCByZXF1ZXN0IGlmIHVzaW5nIEhUVFApIFvigKZdXG4gICAgICAoc3RhdHVzQ29kZSA9PT0gMzAzKSAmJiAhL14oPzpHRVR8SEVBRCkkLy50ZXN0KHRoaXMuX29wdGlvbnMubWV0aG9kKSkge1xuICAgIHRoaXMuX29wdGlvbnMubWV0aG9kID0gXCJHRVRcIjtcbiAgICAvLyBEcm9wIGEgcG9zc2libGUgZW50aXR5IGFuZCBoZWFkZXJzIHJlbGF0ZWQgdG8gaXRcbiAgICB0aGlzLl9yZXF1ZXN0Qm9keUJ1ZmZlcnMgPSBbXTtcbiAgICByZW1vdmVNYXRjaGluZ0hlYWRlcnMoL15jb250ZW50LS9pLCB0aGlzLl9vcHRpb25zLmhlYWRlcnMpO1xuICB9XG5cbiAgLy8gRHJvcCB0aGUgSG9zdCBoZWFkZXIsIGFzIHRoZSByZWRpcmVjdCBtaWdodCBsZWFkIHRvIGEgZGlmZmVyZW50IGhvc3RcbiAgdmFyIGN1cnJlbnRIb3N0SGVhZGVyID0gcmVtb3ZlTWF0Y2hpbmdIZWFkZXJzKC9eaG9zdCQvaSwgdGhpcy5fb3B0aW9ucy5oZWFkZXJzKTtcblxuICAvLyBJZiB0aGUgcmVkaXJlY3QgaXMgcmVsYXRpdmUsIGNhcnJ5IG92ZXIgdGhlIGhvc3Qgb2YgdGhlIGxhc3QgcmVxdWVzdFxuICB2YXIgY3VycmVudFVybFBhcnRzID0gcGFyc2VVcmwodGhpcy5fY3VycmVudFVybCk7XG4gIHZhciBjdXJyZW50SG9zdCA9IGN1cnJlbnRIb3N0SGVhZGVyIHx8IGN1cnJlbnRVcmxQYXJ0cy5ob3N0O1xuICB2YXIgY3VycmVudFVybCA9IC9eXFx3KzovLnRlc3QobG9jYXRpb24pID8gdGhpcy5fY3VycmVudFVybCA6XG4gICAgdXJsLmZvcm1hdChPYmplY3QuYXNzaWduKGN1cnJlbnRVcmxQYXJ0cywgeyBob3N0OiBjdXJyZW50SG9zdCB9KSk7XG5cbiAgLy8gQ3JlYXRlIHRoZSByZWRpcmVjdGVkIHJlcXVlc3RcbiAgdmFyIHJlZGlyZWN0VXJsID0gcmVzb2x2ZVVybChsb2NhdGlvbiwgY3VycmVudFVybCk7XG4gIGRlYnVnKFwicmVkaXJlY3RpbmcgdG9cIiwgcmVkaXJlY3RVcmwuaHJlZik7XG4gIHRoaXMuX2lzUmVkaXJlY3QgPSB0cnVlO1xuICBzcHJlYWRVcmxPYmplY3QocmVkaXJlY3RVcmwsIHRoaXMuX29wdGlvbnMpO1xuXG4gIC8vIERyb3AgY29uZmlkZW50aWFsIGhlYWRlcnMgd2hlbiByZWRpcmVjdGluZyB0byBhIGxlc3Mgc2VjdXJlIHByb3RvY29sXG4gIC8vIG9yIHRvIGEgZGlmZmVyZW50IGRvbWFpbiB0aGF0IGlzIG5vdCBhIHN1cGVyZG9tYWluXG4gIGlmIChyZWRpcmVjdFVybC5wcm90b2NvbCAhPT0gY3VycmVudFVybFBhcnRzLnByb3RvY29sICYmXG4gICAgIHJlZGlyZWN0VXJsLnByb3RvY29sICE9PSBcImh0dHBzOlwiIHx8XG4gICAgIHJlZGlyZWN0VXJsLmhvc3QgIT09IGN1cnJlbnRIb3N0ICYmXG4gICAgICFpc1N1YmRvbWFpbihyZWRpcmVjdFVybC5ob3N0LCBjdXJyZW50SG9zdCkpIHtcbiAgICByZW1vdmVNYXRjaGluZ0hlYWRlcnMoL14oPzooPzpwcm94eS0pP2F1dGhvcml6YXRpb258Y29va2llKSQvaSwgdGhpcy5fb3B0aW9ucy5oZWFkZXJzKTtcbiAgfVxuXG4gIC8vIEV2YWx1YXRlIHRoZSBiZWZvcmVSZWRpcmVjdCBjYWxsYmFja1xuICBpZiAoaXNGdW5jdGlvbihiZWZvcmVSZWRpcmVjdCkpIHtcbiAgICB2YXIgcmVzcG9uc2VEZXRhaWxzID0ge1xuICAgICAgaGVhZGVyczogcmVzcG9uc2UuaGVhZGVycyxcbiAgICAgIHN0YXR1c0NvZGU6IHN0YXR1c0NvZGUsXG4gICAgfTtcbiAgICB2YXIgcmVxdWVzdERldGFpbHMgPSB7XG4gICAgICB1cmw6IGN1cnJlbnRVcmwsXG4gICAgICBtZXRob2Q6IG1ldGhvZCxcbiAgICAgIGhlYWRlcnM6IHJlcXVlc3RIZWFkZXJzLFxuICAgIH07XG4gICAgYmVmb3JlUmVkaXJlY3QodGhpcy5fb3B0aW9ucywgcmVzcG9uc2VEZXRhaWxzLCByZXF1ZXN0RGV0YWlscyk7XG4gICAgdGhpcy5fc2FuaXRpemVPcHRpb25zKHRoaXMuX29wdGlvbnMpO1xuICB9XG5cbiAgLy8gUGVyZm9ybSB0aGUgcmVkaXJlY3RlZCByZXF1ZXN0XG4gIHRoaXMuX3BlcmZvcm1SZXF1ZXN0KCk7XG59O1xuXG4vLyBXcmFwcyB0aGUga2V5L3ZhbHVlIG9iamVjdCBvZiBwcm90b2NvbHMgd2l0aCByZWRpcmVjdCBmdW5jdGlvbmFsaXR5XG5mdW5jdGlvbiB3cmFwKHByb3RvY29scykge1xuICAvLyBEZWZhdWx0IHNldHRpbmdzXG4gIHZhciBleHBvcnRzID0ge1xuICAgIG1heFJlZGlyZWN0czogMjEsXG4gICAgbWF4Qm9keUxlbmd0aDogMTAgKiAxMDI0ICogMTAyNCxcbiAgfTtcblxuICAvLyBXcmFwIGVhY2ggcHJvdG9jb2xcbiAgdmFyIG5hdGl2ZVByb3RvY29scyA9IHt9O1xuICBPYmplY3Qua2V5cyhwcm90b2NvbHMpLmZvckVhY2goZnVuY3Rpb24gKHNjaGVtZSkge1xuICAgIHZhciBwcm90b2NvbCA9IHNjaGVtZSArIFwiOlwiO1xuICAgIHZhciBuYXRpdmVQcm90b2NvbCA9IG5hdGl2ZVByb3RvY29sc1twcm90b2NvbF0gPSBwcm90b2NvbHNbc2NoZW1lXTtcbiAgICB2YXIgd3JhcHBlZFByb3RvY29sID0gZXhwb3J0c1tzY2hlbWVdID0gT2JqZWN0LmNyZWF0ZShuYXRpdmVQcm90b2NvbCk7XG5cbiAgICAvLyBFeGVjdXRlcyBhIHJlcXVlc3QsIGZvbGxvd2luZyByZWRpcmVjdHNcbiAgICBmdW5jdGlvbiByZXF1ZXN0KGlucHV0LCBvcHRpb25zLCBjYWxsYmFjaykge1xuICAgICAgLy8gUGFyc2UgcGFyYW1ldGVycywgZW5zdXJpbmcgdGhhdCBpbnB1dCBpcyBhbiBvYmplY3RcbiAgICAgIGlmIChpc1VSTChpbnB1dCkpIHtcbiAgICAgICAgaW5wdXQgPSBzcHJlYWRVcmxPYmplY3QoaW5wdXQpO1xuICAgICAgfVxuICAgICAgZWxzZSBpZiAoaXNTdHJpbmcoaW5wdXQpKSB7XG4gICAgICAgIGlucHV0ID0gc3ByZWFkVXJsT2JqZWN0KHBhcnNlVXJsKGlucHV0KSk7XG4gICAgICB9XG4gICAgICBlbHNlIHtcbiAgICAgICAgY2FsbGJhY2sgPSBvcHRpb25zO1xuICAgICAgICBvcHRpb25zID0gdmFsaWRhdGVVcmwoaW5wdXQpO1xuICAgICAgICBpbnB1dCA9IHsgcHJvdG9jb2w6IHByb3RvY29sIH07XG4gICAgICB9XG4gICAgICBpZiAoaXNGdW5jdGlvbihvcHRpb25zKSkge1xuICAgICAgICBjYWxsYmFjayA9IG9wdGlvbnM7XG4gICAgICAgIG9wdGlvbnMgPSBudWxsO1xuICAgICAgfVxuXG4gICAgICAvLyBTZXQgZGVmYXVsdHNcbiAgICAgIG9wdGlvbnMgPSBPYmplY3QuYXNzaWduKHtcbiAgICAgICAgbWF4UmVkaXJlY3RzOiBleHBvcnRzLm1heFJlZGlyZWN0cyxcbiAgICAgICAgbWF4Qm9keUxlbmd0aDogZXhwb3J0cy5tYXhCb2R5TGVuZ3RoLFxuICAgICAgfSwgaW5wdXQsIG9wdGlvbnMpO1xuICAgICAgb3B0aW9ucy5uYXRpdmVQcm90b2NvbHMgPSBuYXRpdmVQcm90b2NvbHM7XG4gICAgICBpZiAoIWlzU3RyaW5nKG9wdGlvbnMuaG9zdCkgJiYgIWlzU3RyaW5nKG9wdGlvbnMuaG9zdG5hbWUpKSB7XG4gICAgICAgIG9wdGlvbnMuaG9zdG5hbWUgPSBcIjo6MVwiO1xuICAgICAgfVxuXG4gICAgICBhc3NlcnQuZXF1YWwob3B0aW9ucy5wcm90b2NvbCwgcHJvdG9jb2wsIFwicHJvdG9jb2wgbWlzbWF0Y2hcIik7XG4gICAgICBkZWJ1ZyhcIm9wdGlvbnNcIiwgb3B0aW9ucyk7XG4gICAgICByZXR1cm4gbmV3IFJlZGlyZWN0YWJsZVJlcXVlc3Qob3B0aW9ucywgY2FsbGJhY2spO1xuICAgIH1cblxuICAgIC8vIEV4ZWN1dGVzIGEgR0VUIHJlcXVlc3QsIGZvbGxvd2luZyByZWRpcmVjdHNcbiAgICBmdW5jdGlvbiBnZXQoaW5wdXQsIG9wdGlvbnMsIGNhbGxiYWNrKSB7XG4gICAgICB2YXIgd3JhcHBlZFJlcXVlc3QgPSB3cmFwcGVkUHJvdG9jb2wucmVxdWVzdChpbnB1dCwgb3B0aW9ucywgY2FsbGJhY2spO1xuICAgICAgd3JhcHBlZFJlcXVlc3QuZW5kKCk7XG4gICAgICByZXR1cm4gd3JhcHBlZFJlcXVlc3Q7XG4gICAgfVxuXG4gICAgLy8gRXhwb3NlIHRoZSBwcm9wZXJ0aWVzIG9uIHRoZSB3cmFwcGVkIHByb3RvY29sXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnRpZXMod3JhcHBlZFByb3RvY29sLCB7XG4gICAgICByZXF1ZXN0OiB7IHZhbHVlOiByZXF1ZXN0LCBjb25maWd1cmFibGU6IHRydWUsIGVudW1lcmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlIH0sXG4gICAgICBnZXQ6IHsgdmFsdWU6IGdldCwgY29uZmlndXJhYmxlOiB0cnVlLCBlbnVtZXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSB9LFxuICAgIH0pO1xuICB9KTtcbiAgcmV0dXJuIGV4cG9ydHM7XG59XG5cbmZ1bmN0aW9uIG5vb3AoKSB7IC8qIGVtcHR5ICovIH1cblxuZnVuY3Rpb24gcGFyc2VVcmwoaW5wdXQpIHtcbiAgdmFyIHBhcnNlZDtcbiAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgaWYgKHVzZU5hdGl2ZVVSTCkge1xuICAgIHBhcnNlZCA9IG5ldyBVUkwoaW5wdXQpO1xuICB9XG4gIGVsc2Uge1xuICAgIC8vIEVuc3VyZSB0aGUgVVJMIGlzIHZhbGlkIGFuZCBhYnNvbHV0ZVxuICAgIHBhcnNlZCA9IHZhbGlkYXRlVXJsKHVybC5wYXJzZShpbnB1dCkpO1xuICAgIGlmICghaXNTdHJpbmcocGFyc2VkLnByb3RvY29sKSkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRVcmxFcnJvcih7IGlucHV0IH0pO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcGFyc2VkO1xufVxuXG5mdW5jdGlvbiByZXNvbHZlVXJsKHJlbGF0aXZlLCBiYXNlKSB7XG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gIHJldHVybiB1c2VOYXRpdmVVUkwgPyBuZXcgVVJMKHJlbGF0aXZlLCBiYXNlKSA6IHBhcnNlVXJsKHVybC5yZXNvbHZlKGJhc2UsIHJlbGF0aXZlKSk7XG59XG5cbmZ1bmN0aW9uIHZhbGlkYXRlVXJsKGlucHV0KSB7XG4gIGlmICgvXlxcWy8udGVzdChpbnB1dC5ob3N0bmFtZSkgJiYgIS9eXFxbWzowLTlhLWZdK1xcXSQvaS50ZXN0KGlucHV0Lmhvc3RuYW1lKSkge1xuICAgIHRocm93IG5ldyBJbnZhbGlkVXJsRXJyb3IoeyBpbnB1dDogaW5wdXQuaHJlZiB8fCBpbnB1dCB9KTtcbiAgfVxuICBpZiAoL15cXFsvLnRlc3QoaW5wdXQuaG9zdCkgJiYgIS9eXFxbWzowLTlhLWZdK1xcXSg6XFxkKyk/JC9pLnRlc3QoaW5wdXQuaG9zdCkpIHtcbiAgICB0aHJvdyBuZXcgSW52YWxpZFVybEVycm9yKHsgaW5wdXQ6IGlucHV0LmhyZWYgfHwgaW5wdXQgfSk7XG4gIH1cbiAgcmV0dXJuIGlucHV0O1xufVxuXG5mdW5jdGlvbiBzcHJlYWRVcmxPYmplY3QodXJsT2JqZWN0LCB0YXJnZXQpIHtcbiAgdmFyIHNwcmVhZCA9IHRhcmdldCB8fCB7fTtcbiAgZm9yICh2YXIga2V5IG9mIHByZXNlcnZlZFVybEZpZWxkcykge1xuICAgIHNwcmVhZFtrZXldID0gdXJsT2JqZWN0W2tleV07XG4gIH1cblxuICAvLyBGaXggSVB2NiBob3N0bmFtZVxuICBpZiAoc3ByZWFkLmhvc3RuYW1lLnN0YXJ0c1dpdGgoXCJbXCIpKSB7XG4gICAgc3ByZWFkLmhvc3RuYW1lID0gc3ByZWFkLmhvc3RuYW1lLnNsaWNlKDEsIC0xKTtcbiAgfVxuICAvLyBFbnN1cmUgcG9ydCBpcyBhIG51bWJlclxuICBpZiAoc3ByZWFkLnBvcnQgIT09IFwiXCIpIHtcbiAgICBzcHJlYWQucG9ydCA9IE51bWJlcihzcHJlYWQucG9ydCk7XG4gIH1cbiAgLy8gQ29uY2F0ZW5hdGUgcGF0aFxuICBzcHJlYWQucGF0aCA9IHNwcmVhZC5zZWFyY2ggPyBzcHJlYWQucGF0aG5hbWUgKyBzcHJlYWQuc2VhcmNoIDogc3ByZWFkLnBhdGhuYW1lO1xuXG4gIHJldHVybiBzcHJlYWQ7XG59XG5cbmZ1bmN0aW9uIHJlbW92ZU1hdGNoaW5nSGVhZGVycyhyZWdleCwgaGVhZGVycykge1xuICB2YXIgbGFzdFZhbHVlO1xuICBmb3IgKHZhciBoZWFkZXIgaW4gaGVhZGVycykge1xuICAgIGlmIChyZWdleC50ZXN0KGhlYWRlcikpIHtcbiAgICAgIGxhc3RWYWx1ZSA9IGhlYWRlcnNbaGVhZGVyXTtcbiAgICAgIGRlbGV0ZSBoZWFkZXJzW2hlYWRlcl07XG4gICAgfVxuICB9XG4gIHJldHVybiAobGFzdFZhbHVlID09PSBudWxsIHx8IHR5cGVvZiBsYXN0VmFsdWUgPT09IFwidW5kZWZpbmVkXCIpID9cbiAgICB1bmRlZmluZWQgOiBTdHJpbmcobGFzdFZhbHVlKS50cmltKCk7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUVycm9yVHlwZShjb2RlLCBtZXNzYWdlLCBiYXNlQ2xhc3MpIHtcbiAgLy8gQ3JlYXRlIGNvbnN0cnVjdG9yXG4gIGZ1bmN0aW9uIEN1c3RvbUVycm9yKHByb3BlcnRpZXMpIHtcbiAgICBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSh0aGlzLCB0aGlzLmNvbnN0cnVjdG9yKTtcbiAgICBPYmplY3QuYXNzaWduKHRoaXMsIHByb3BlcnRpZXMgfHwge30pO1xuICAgIHRoaXMuY29kZSA9IGNvZGU7XG4gICAgdGhpcy5tZXNzYWdlID0gdGhpcy5jYXVzZSA/IG1lc3NhZ2UgKyBcIjogXCIgKyB0aGlzLmNhdXNlLm1lc3NhZ2UgOiBtZXNzYWdlO1xuICB9XG5cbiAgLy8gQXR0YWNoIGNvbnN0cnVjdG9yIGFuZCBzZXQgZGVmYXVsdCBwcm9wZXJ0aWVzXG4gIEN1c3RvbUVycm9yLnByb3RvdHlwZSA9IG5ldyAoYmFzZUNsYXNzIHx8IEVycm9yKSgpO1xuICBPYmplY3QuZGVmaW5lUHJvcGVydGllcyhDdXN0b21FcnJvci5wcm90b3R5cGUsIHtcbiAgICBjb25zdHJ1Y3Rvcjoge1xuICAgICAgdmFsdWU6IEN1c3RvbUVycm9yLFxuICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgfSxcbiAgICBuYW1lOiB7XG4gICAgICB2YWx1ZTogXCJFcnJvciBbXCIgKyBjb2RlICsgXCJdXCIsXG4gICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICB9LFxuICB9KTtcbiAgcmV0dXJuIEN1c3RvbUVycm9yO1xufVxuXG5mdW5jdGlvbiBkZXN0cm95UmVxdWVzdChyZXF1ZXN0LCBlcnJvcikge1xuICBmb3IgKHZhciBldmVudCBvZiBldmVudHMpIHtcbiAgICByZXF1ZXN0LnJlbW92ZUxpc3RlbmVyKGV2ZW50LCBldmVudEhhbmRsZXJzW2V2ZW50XSk7XG4gIH1cbiAgcmVxdWVzdC5vbihcImVycm9yXCIsIG5vb3ApO1xuICByZXF1ZXN0LmRlc3Ryb3koZXJyb3IpO1xufVxuXG5mdW5jdGlvbiBpc1N1YmRvbWFpbihzdWJkb21haW4sIGRvbWFpbikge1xuICBhc3NlcnQoaXNTdHJpbmcoc3ViZG9tYWluKSAmJiBpc1N0cmluZyhkb21haW4pKTtcbiAgdmFyIGRvdCA9IHN1YmRvbWFpbi5sZW5ndGggLSBkb21haW4ubGVuZ3RoIC0gMTtcbiAgcmV0dXJuIGRvdCA+IDAgJiYgc3ViZG9tYWluW2RvdF0gPT09IFwiLlwiICYmIHN1YmRvbWFpbi5lbmRzV2l0aChkb21haW4pO1xufVxuXG5mdW5jdGlvbiBpc1N0cmluZyh2YWx1ZSkge1xuICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiIHx8IHZhbHVlIGluc3RhbmNlb2YgU3RyaW5nO1xufVxuXG5mdW5jdGlvbiBpc0Z1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiB0eXBlb2YgdmFsdWUgPT09IFwiZnVuY3Rpb25cIjtcbn1cblxuZnVuY3Rpb24gaXNCdWZmZXIodmFsdWUpIHtcbiAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gXCJvYmplY3RcIiAmJiAoXCJsZW5ndGhcIiBpbiB2YWx1ZSk7XG59XG5cbmZ1bmN0aW9uIGlzVVJMKHZhbHVlKSB7XG4gIHJldHVybiBVUkwgJiYgdmFsdWUgaW5zdGFuY2VvZiBVUkw7XG59XG5cbi8vIEV4cG9ydHNcbm1vZHVsZS5leHBvcnRzID0gd3JhcCh7IGh0dHA6IGh0dHAsIGh0dHBzOiBodHRwcyB9KTtcbm1vZHVsZS5leHBvcnRzLndyYXAgPSB3cmFwO1xuIiwidmFyIENvbWJpbmVkU3RyZWFtID0gcmVxdWlyZSgnY29tYmluZWQtc3RyZWFtJyk7XG52YXIgdXRpbCA9IHJlcXVpcmUoJ3V0aWwnKTtcbnZhciBwYXRoID0gcmVxdWlyZSgncGF0aCcpO1xudmFyIGh0dHAgPSByZXF1aXJlKCdodHRwJyk7XG52YXIgaHR0cHMgPSByZXF1aXJlKCdodHRwcycpO1xudmFyIHBhcnNlVXJsID0gcmVxdWlyZSgndXJsJykucGFyc2U7XG52YXIgZnMgPSByZXF1aXJlKCdmcycpO1xudmFyIFN0cmVhbSA9IHJlcXVpcmUoJ3N0cmVhbScpLlN0cmVhbTtcbnZhciBtaW1lID0gcmVxdWlyZSgnbWltZS10eXBlcycpO1xudmFyIGFzeW5ja2l0ID0gcmVxdWlyZSgnYXN5bmNraXQnKTtcbnZhciBwb3B1bGF0ZSA9IHJlcXVpcmUoJy4vcG9wdWxhdGUuanMnKTtcblxuLy8gUHVibGljIEFQSVxubW9kdWxlLmV4cG9ydHMgPSBGb3JtRGF0YTtcblxuLy8gbWFrZSBpdCBhIFN0cmVhbVxudXRpbC5pbmhlcml0cyhGb3JtRGF0YSwgQ29tYmluZWRTdHJlYW0pO1xuXG4vKipcbiAqIENyZWF0ZSByZWFkYWJsZSBcIm11bHRpcGFydC9mb3JtLWRhdGFcIiBzdHJlYW1zLlxuICogQ2FuIGJlIHVzZWQgdG8gc3VibWl0IGZvcm1zXG4gKiBhbmQgZmlsZSB1cGxvYWRzIHRvIG90aGVyIHdlYiBhcHBsaWNhdGlvbnMuXG4gKlxuICogQGNvbnN0cnVjdG9yXG4gKiBAcGFyYW0ge09iamVjdH0gb3B0aW9ucyAtIFByb3BlcnRpZXMgdG8gYmUgYWRkZWQvb3ZlcnJpZGVuIGZvciBGb3JtRGF0YSBhbmQgQ29tYmluZWRTdHJlYW1cbiAqL1xuZnVuY3Rpb24gRm9ybURhdGEob3B0aW9ucykge1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgRm9ybURhdGEpKSB7XG4gICAgcmV0dXJuIG5ldyBGb3JtRGF0YShvcHRpb25zKTtcbiAgfVxuXG4gIHRoaXMuX292ZXJoZWFkTGVuZ3RoID0gMDtcbiAgdGhpcy5fdmFsdWVMZW5ndGggPSAwO1xuICB0aGlzLl92YWx1ZXNUb01lYXN1cmUgPSBbXTtcblxuICBDb21iaW5lZFN0cmVhbS5jYWxsKHRoaXMpO1xuXG4gIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuICBmb3IgKHZhciBvcHRpb24gaW4gb3B0aW9ucykge1xuICAgIHRoaXNbb3B0aW9uXSA9IG9wdGlvbnNbb3B0aW9uXTtcbiAgfVxufVxuXG5Gb3JtRGF0YS5MSU5FX0JSRUFLID0gJ1xcclxcbic7XG5Gb3JtRGF0YS5ERUZBVUxUX0NPTlRFTlRfVFlQRSA9ICdhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0nO1xuXG5Gb3JtRGF0YS5wcm90b3R5cGUuYXBwZW5kID0gZnVuY3Rpb24oZmllbGQsIHZhbHVlLCBvcHRpb25zKSB7XG5cbiAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG5cbiAgLy8gYWxsb3cgZmlsZW5hbWUgYXMgc2luZ2xlIG9wdGlvblxuICBpZiAodHlwZW9mIG9wdGlvbnMgPT0gJ3N0cmluZycpIHtcbiAgICBvcHRpb25zID0ge2ZpbGVuYW1lOiBvcHRpb25zfTtcbiAgfVxuXG4gIHZhciBhcHBlbmQgPSBDb21iaW5lZFN0cmVhbS5wcm90b3R5cGUuYXBwZW5kLmJpbmQodGhpcyk7XG5cbiAgLy8gYWxsIHRoYXQgc3RyZWFteSBidXNpbmVzcyBjYW4ndCBoYW5kbGUgbnVtYmVyc1xuICBpZiAodHlwZW9mIHZhbHVlID09ICdudW1iZXInKSB7XG4gICAgdmFsdWUgPSAnJyArIHZhbHVlO1xuICB9XG5cbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2ZlbGl4Z2Uvbm9kZS1mb3JtLWRhdGEvaXNzdWVzLzM4XG4gIGlmICh1dGlsLmlzQXJyYXkodmFsdWUpKSB7XG4gICAgLy8gUGxlYXNlIGNvbnZlcnQgeW91ciBhcnJheSBpbnRvIHN0cmluZ1xuICAgIC8vIHRoZSB3YXkgd2ViIHNlcnZlciBleHBlY3RzIGl0XG4gICAgdGhpcy5fZXJyb3IobmV3IEVycm9yKCdBcnJheXMgYXJlIG5vdCBzdXBwb3J0ZWQuJykpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHZhciBoZWFkZXIgPSB0aGlzLl9tdWx0aVBhcnRIZWFkZXIoZmllbGQsIHZhbHVlLCBvcHRpb25zKTtcbiAgdmFyIGZvb3RlciA9IHRoaXMuX211bHRpUGFydEZvb3RlcigpO1xuXG4gIGFwcGVuZChoZWFkZXIpO1xuICBhcHBlbmQodmFsdWUpO1xuICBhcHBlbmQoZm9vdGVyKTtcblxuICAvLyBwYXNzIGFsb25nIG9wdGlvbnMua25vd25MZW5ndGhcbiAgdGhpcy5fdHJhY2tMZW5ndGgoaGVhZGVyLCB2YWx1ZSwgb3B0aW9ucyk7XG59O1xuXG5Gb3JtRGF0YS5wcm90b3R5cGUuX3RyYWNrTGVuZ3RoID0gZnVuY3Rpb24oaGVhZGVyLCB2YWx1ZSwgb3B0aW9ucykge1xuICB2YXIgdmFsdWVMZW5ndGggPSAwO1xuXG4gIC8vIHVzZWQgdy8gZ2V0TGVuZ3RoU3luYygpLCB3aGVuIGxlbmd0aCBpcyBrbm93bi5cbiAgLy8gZS5nLiBmb3Igc3RyZWFtaW5nIGRpcmVjdGx5IGZyb20gYSByZW1vdGUgc2VydmVyLFxuICAvLyB3LyBhIGtub3duIGZpbGUgYSBzaXplLCBhbmQgbm90IHdhbnRpbmcgdG8gd2FpdCBmb3JcbiAgLy8gaW5jb21pbmcgZmlsZSB0byBmaW5pc2ggdG8gZ2V0IGl0cyBzaXplLlxuICBpZiAob3B0aW9ucy5rbm93bkxlbmd0aCAhPSBudWxsKSB7XG4gICAgdmFsdWVMZW5ndGggKz0gK29wdGlvbnMua25vd25MZW5ndGg7XG4gIH0gZWxzZSBpZiAoQnVmZmVyLmlzQnVmZmVyKHZhbHVlKSkge1xuICAgIHZhbHVlTGVuZ3RoID0gdmFsdWUubGVuZ3RoO1xuICB9IGVsc2UgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICB2YWx1ZUxlbmd0aCA9IEJ1ZmZlci5ieXRlTGVuZ3RoKHZhbHVlKTtcbiAgfVxuXG4gIHRoaXMuX3ZhbHVlTGVuZ3RoICs9IHZhbHVlTGVuZ3RoO1xuXG4gIC8vIEBjaGVjayB3aHkgYWRkIENSTEY/IGRvZXMgdGhpcyBhY2NvdW50IGZvciBjdXN0b20vbXVsdGlwbGUgQ1JMRnM/XG4gIHRoaXMuX292ZXJoZWFkTGVuZ3RoICs9XG4gICAgQnVmZmVyLmJ5dGVMZW5ndGgoaGVhZGVyKSArXG4gICAgRm9ybURhdGEuTElORV9CUkVBSy5sZW5ndGg7XG5cbiAgLy8gZW1wdHkgb3IgZWl0aGVyIGRvZXNuJ3QgaGF2ZSBwYXRoIG9yIG5vdCBhbiBodHRwIHJlc3BvbnNlIG9yIG5vdCBhIHN0cmVhbVxuICBpZiAoIXZhbHVlIHx8ICggIXZhbHVlLnBhdGggJiYgISh2YWx1ZS5yZWFkYWJsZSAmJiB2YWx1ZS5oYXNPd25Qcm9wZXJ0eSgnaHR0cFZlcnNpb24nKSkgJiYgISh2YWx1ZSBpbnN0YW5jZW9mIFN0cmVhbSkpKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLy8gbm8gbmVlZCB0byBib3RoZXIgd2l0aCB0aGUgbGVuZ3RoXG4gIGlmICghb3B0aW9ucy5rbm93bkxlbmd0aCkge1xuICAgIHRoaXMuX3ZhbHVlc1RvTWVhc3VyZS5wdXNoKHZhbHVlKTtcbiAgfVxufTtcblxuRm9ybURhdGEucHJvdG90eXBlLl9sZW5ndGhSZXRyaWV2ZXIgPSBmdW5jdGlvbih2YWx1ZSwgY2FsbGJhY2spIHtcblxuICBpZiAodmFsdWUuaGFzT3duUHJvcGVydHkoJ2ZkJykpIHtcblxuICAgIC8vIHRha2UgcmVhZCByYW5nZSBpbnRvIGEgYWNjb3VudFxuICAgIC8vIGBlbmRgID0gSW5maW5pdHkg4oCTPiByZWFkIGZpbGUgdGlsbCB0aGUgZW5kXG4gICAgLy9cbiAgICAvLyBUT0RPOiBMb29rcyBsaWtlIHRoZXJlIGlzIGJ1ZyBpbiBOb2RlIGZzLmNyZWF0ZVJlYWRTdHJlYW1cbiAgICAvLyBpdCBkb2Vzbid0IHJlc3BlY3QgYGVuZGAgb3B0aW9ucyB3aXRob3V0IGBzdGFydGAgb3B0aW9uc1xuICAgIC8vIEZpeCBpdCB3aGVuIG5vZGUgZml4ZXMgaXQuXG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2pveWVudC9ub2RlL2lzc3Vlcy83ODE5XG4gICAgaWYgKHZhbHVlLmVuZCAhPSB1bmRlZmluZWQgJiYgdmFsdWUuZW5kICE9IEluZmluaXR5ICYmIHZhbHVlLnN0YXJ0ICE9IHVuZGVmaW5lZCkge1xuXG4gICAgICAvLyB3aGVuIGVuZCBzcGVjaWZpZWRcbiAgICAgIC8vIG5vIG5lZWQgdG8gY2FsY3VsYXRlIHJhbmdlXG4gICAgICAvLyBpbmNsdXNpdmUsIHN0YXJ0cyB3aXRoIDBcbiAgICAgIGNhbGxiYWNrKG51bGwsIHZhbHVlLmVuZCArIDEgLSAodmFsdWUuc3RhcnQgPyB2YWx1ZS5zdGFydCA6IDApKTtcblxuICAgIC8vIG5vdCB0aGF0IGZhc3Qgc25vb3B5XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIHN0aWxsIG5lZWQgdG8gZmV0Y2ggZmlsZSBzaXplIGZyb20gZnNcbiAgICAgIGZzLnN0YXQodmFsdWUucGF0aCwgZnVuY3Rpb24oZXJyLCBzdGF0KSB7XG5cbiAgICAgICAgdmFyIGZpbGVTaXplO1xuXG4gICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIHVwZGF0ZSBmaW5hbCBzaXplIGJhc2VkIG9uIHRoZSByYW5nZSBvcHRpb25zXG4gICAgICAgIGZpbGVTaXplID0gc3RhdC5zaXplIC0gKHZhbHVlLnN0YXJ0ID8gdmFsdWUuc3RhcnQgOiAwKTtcbiAgICAgICAgY2FsbGJhY2sobnVsbCwgZmlsZVNpemUpO1xuICAgICAgfSk7XG4gICAgfVxuXG4gIC8vIG9yIGh0dHAgcmVzcG9uc2VcbiAgfSBlbHNlIGlmICh2YWx1ZS5oYXNPd25Qcm9wZXJ0eSgnaHR0cFZlcnNpb24nKSkge1xuICAgIGNhbGxiYWNrKG51bGwsICt2YWx1ZS5oZWFkZXJzWydjb250ZW50LWxlbmd0aCddKTtcblxuICAvLyBvciByZXF1ZXN0IHN0cmVhbSBodHRwOi8vZ2l0aHViLmNvbS9taWtlYWwvcmVxdWVzdFxuICB9IGVsc2UgaWYgKHZhbHVlLmhhc093blByb3BlcnR5KCdodHRwTW9kdWxlJykpIHtcbiAgICAvLyB3YWl0IHRpbGwgcmVzcG9uc2UgY29tZSBiYWNrXG4gICAgdmFsdWUub24oJ3Jlc3BvbnNlJywgZnVuY3Rpb24ocmVzcG9uc2UpIHtcbiAgICAgIHZhbHVlLnBhdXNlKCk7XG4gICAgICBjYWxsYmFjayhudWxsLCArcmVzcG9uc2UuaGVhZGVyc1snY29udGVudC1sZW5ndGgnXSk7XG4gICAgfSk7XG4gICAgdmFsdWUucmVzdW1lKCk7XG5cbiAgLy8gc29tZXRoaW5nIGVsc2VcbiAgfSBlbHNlIHtcbiAgICBjYWxsYmFjaygnVW5rbm93biBzdHJlYW0nKTtcbiAgfVxufTtcblxuRm9ybURhdGEucHJvdG90eXBlLl9tdWx0aVBhcnRIZWFkZXIgPSBmdW5jdGlvbihmaWVsZCwgdmFsdWUsIG9wdGlvbnMpIHtcbiAgLy8gY3VzdG9tIGhlYWRlciBzcGVjaWZpZWQgKGFzIHN0cmluZyk/XG4gIC8vIGl0IGJlY29tZXMgcmVzcG9uc2libGUgZm9yIGJvdW5kYXJ5XG4gIC8vIChlLmcuIHRvIGhhbmRsZSBleHRyYSBDUkxGcyBvbiAuTkVUIHNlcnZlcnMpXG4gIGlmICh0eXBlb2Ygb3B0aW9ucy5oZWFkZXIgPT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gb3B0aW9ucy5oZWFkZXI7XG4gIH1cblxuICB2YXIgY29udGVudERpc3Bvc2l0aW9uID0gdGhpcy5fZ2V0Q29udGVudERpc3Bvc2l0aW9uKHZhbHVlLCBvcHRpb25zKTtcbiAgdmFyIGNvbnRlbnRUeXBlID0gdGhpcy5fZ2V0Q29udGVudFR5cGUodmFsdWUsIG9wdGlvbnMpO1xuXG4gIHZhciBjb250ZW50cyA9ICcnO1xuICB2YXIgaGVhZGVycyAgPSB7XG4gICAgLy8gYWRkIGN1c3RvbSBkaXNwb3NpdGlvbiBhcyB0aGlyZCBlbGVtZW50IG9yIGtlZXAgaXQgdHdvIGVsZW1lbnRzIGlmIG5vdFxuICAgICdDb250ZW50LURpc3Bvc2l0aW9uJzogWydmb3JtLWRhdGEnLCAnbmFtZT1cIicgKyBmaWVsZCArICdcIiddLmNvbmNhdChjb250ZW50RGlzcG9zaXRpb24gfHwgW10pLFxuICAgIC8vIGlmIG5vIGNvbnRlbnQgdHlwZS4gYWxsb3cgaXQgdG8gYmUgZW1wdHkgYXJyYXlcbiAgICAnQ29udGVudC1UeXBlJzogW10uY29uY2F0KGNvbnRlbnRUeXBlIHx8IFtdKVxuICB9O1xuXG4gIC8vIGFsbG93IGN1c3RvbSBoZWFkZXJzLlxuICBpZiAodHlwZW9mIG9wdGlvbnMuaGVhZGVyID09ICdvYmplY3QnKSB7XG4gICAgcG9wdWxhdGUoaGVhZGVycywgb3B0aW9ucy5oZWFkZXIpO1xuICB9XG5cbiAgdmFyIGhlYWRlcjtcbiAgZm9yICh2YXIgcHJvcCBpbiBoZWFkZXJzKSB7XG4gICAgaWYgKCFoZWFkZXJzLmhhc093blByb3BlcnR5KHByb3ApKSBjb250aW51ZTtcbiAgICBoZWFkZXIgPSBoZWFkZXJzW3Byb3BdO1xuXG4gICAgLy8gc2tpcCBudWxsaXNoIGhlYWRlcnMuXG4gICAgaWYgKGhlYWRlciA9PSBudWxsKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICAvLyBjb252ZXJ0IGFsbCBoZWFkZXJzIHRvIGFycmF5cy5cbiAgICBpZiAoIUFycmF5LmlzQXJyYXkoaGVhZGVyKSkge1xuICAgICAgaGVhZGVyID0gW2hlYWRlcl07XG4gICAgfVxuXG4gICAgLy8gYWRkIG5vbi1lbXB0eSBoZWFkZXJzLlxuICAgIGlmIChoZWFkZXIubGVuZ3RoKSB7XG4gICAgICBjb250ZW50cyArPSBwcm9wICsgJzogJyArIGhlYWRlci5qb2luKCc7ICcpICsgRm9ybURhdGEuTElORV9CUkVBSztcbiAgICB9XG4gIH1cblxuICByZXR1cm4gJy0tJyArIHRoaXMuZ2V0Qm91bmRhcnkoKSArIEZvcm1EYXRhLkxJTkVfQlJFQUsgKyBjb250ZW50cyArIEZvcm1EYXRhLkxJTkVfQlJFQUs7XG59O1xuXG5Gb3JtRGF0YS5wcm90b3R5cGUuX2dldENvbnRlbnREaXNwb3NpdGlvbiA9IGZ1bmN0aW9uKHZhbHVlLCBvcHRpb25zKSB7XG5cbiAgdmFyIGZpbGVuYW1lXG4gICAgLCBjb250ZW50RGlzcG9zaXRpb25cbiAgICA7XG5cbiAgaWYgKHR5cGVvZiBvcHRpb25zLmZpbGVwYXRoID09PSAnc3RyaW5nJykge1xuICAgIC8vIGN1c3RvbSBmaWxlcGF0aCBmb3IgcmVsYXRpdmUgcGF0aHNcbiAgICBmaWxlbmFtZSA9IHBhdGgubm9ybWFsaXplKG9wdGlvbnMuZmlsZXBhdGgpLnJlcGxhY2UoL1xcXFwvZywgJy8nKTtcbiAgfSBlbHNlIGlmIChvcHRpb25zLmZpbGVuYW1lIHx8IHZhbHVlLm5hbWUgfHwgdmFsdWUucGF0aCkge1xuICAgIC8vIGN1c3RvbSBmaWxlbmFtZSB0YWtlIHByZWNlZGVuY2VcbiAgICAvLyBmb3JtaWRhYmxlIGFuZCB0aGUgYnJvd3NlciBhZGQgYSBuYW1lIHByb3BlcnR5XG4gICAgLy8gZnMtIGFuZCByZXF1ZXN0LSBzdHJlYW1zIGhhdmUgcGF0aCBwcm9wZXJ0eVxuICAgIGZpbGVuYW1lID0gcGF0aC5iYXNlbmFtZShvcHRpb25zLmZpbGVuYW1lIHx8IHZhbHVlLm5hbWUgfHwgdmFsdWUucGF0aCk7XG4gIH0gZWxzZSBpZiAodmFsdWUucmVhZGFibGUgJiYgdmFsdWUuaGFzT3duUHJvcGVydHkoJ2h0dHBWZXJzaW9uJykpIHtcbiAgICAvLyBvciB0cnkgaHR0cCByZXNwb25zZVxuICAgIGZpbGVuYW1lID0gcGF0aC5iYXNlbmFtZSh2YWx1ZS5jbGllbnQuX2h0dHBNZXNzYWdlLnBhdGggfHwgJycpO1xuICB9XG5cbiAgaWYgKGZpbGVuYW1lKSB7XG4gICAgY29udGVudERpc3Bvc2l0aW9uID0gJ2ZpbGVuYW1lPVwiJyArIGZpbGVuYW1lICsgJ1wiJztcbiAgfVxuXG4gIHJldHVybiBjb250ZW50RGlzcG9zaXRpb247XG59O1xuXG5Gb3JtRGF0YS5wcm90b3R5cGUuX2dldENvbnRlbnRUeXBlID0gZnVuY3Rpb24odmFsdWUsIG9wdGlvbnMpIHtcblxuICAvLyB1c2UgY3VzdG9tIGNvbnRlbnQtdHlwZSBhYm92ZSBhbGxcbiAgdmFyIGNvbnRlbnRUeXBlID0gb3B0aW9ucy5jb250ZW50VHlwZTtcblxuICAvLyBvciB0cnkgYG5hbWVgIGZyb20gZm9ybWlkYWJsZSwgYnJvd3NlclxuICBpZiAoIWNvbnRlbnRUeXBlICYmIHZhbHVlLm5hbWUpIHtcbiAgICBjb250ZW50VHlwZSA9IG1pbWUubG9va3VwKHZhbHVlLm5hbWUpO1xuICB9XG5cbiAgLy8gb3IgdHJ5IGBwYXRoYCBmcm9tIGZzLSwgcmVxdWVzdC0gc3RyZWFtc1xuICBpZiAoIWNvbnRlbnRUeXBlICYmIHZhbHVlLnBhdGgpIHtcbiAgICBjb250ZW50VHlwZSA9IG1pbWUubG9va3VwKHZhbHVlLnBhdGgpO1xuICB9XG5cbiAgLy8gb3IgaWYgaXQncyBodHRwLXJlcG9uc2VcbiAgaWYgKCFjb250ZW50VHlwZSAmJiB2YWx1ZS5yZWFkYWJsZSAmJiB2YWx1ZS5oYXNPd25Qcm9wZXJ0eSgnaHR0cFZlcnNpb24nKSkge1xuICAgIGNvbnRlbnRUeXBlID0gdmFsdWUuaGVhZGVyc1snY29udGVudC10eXBlJ107XG4gIH1cblxuICAvLyBvciBndWVzcyBpdCBmcm9tIHRoZSBmaWxlcGF0aCBvciBmaWxlbmFtZVxuICBpZiAoIWNvbnRlbnRUeXBlICYmIChvcHRpb25zLmZpbGVwYXRoIHx8IG9wdGlvbnMuZmlsZW5hbWUpKSB7XG4gICAgY29udGVudFR5cGUgPSBtaW1lLmxvb2t1cChvcHRpb25zLmZpbGVwYXRoIHx8IG9wdGlvbnMuZmlsZW5hbWUpO1xuICB9XG5cbiAgLy8gZmFsbGJhY2sgdG8gdGhlIGRlZmF1bHQgY29udGVudCB0eXBlIGlmIGB2YWx1ZWAgaXMgbm90IHNpbXBsZSB2YWx1ZVxuICBpZiAoIWNvbnRlbnRUeXBlICYmIHR5cGVvZiB2YWx1ZSA9PSAnb2JqZWN0Jykge1xuICAgIGNvbnRlbnRUeXBlID0gRm9ybURhdGEuREVGQVVMVF9DT05URU5UX1RZUEU7XG4gIH1cblxuICByZXR1cm4gY29udGVudFR5cGU7XG59O1xuXG5Gb3JtRGF0YS5wcm90b3R5cGUuX211bHRpUGFydEZvb3RlciA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gZnVuY3Rpb24obmV4dCkge1xuICAgIHZhciBmb290ZXIgPSBGb3JtRGF0YS5MSU5FX0JSRUFLO1xuXG4gICAgdmFyIGxhc3RQYXJ0ID0gKHRoaXMuX3N0cmVhbXMubGVuZ3RoID09PSAwKTtcbiAgICBpZiAobGFzdFBhcnQpIHtcbiAgICAgIGZvb3RlciArPSB0aGlzLl9sYXN0Qm91bmRhcnkoKTtcbiAgICB9XG5cbiAgICBuZXh0KGZvb3Rlcik7XG4gIH0uYmluZCh0aGlzKTtcbn07XG5cbkZvcm1EYXRhLnByb3RvdHlwZS5fbGFzdEJvdW5kYXJ5ID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiAnLS0nICsgdGhpcy5nZXRCb3VuZGFyeSgpICsgJy0tJyArIEZvcm1EYXRhLkxJTkVfQlJFQUs7XG59O1xuXG5Gb3JtRGF0YS5wcm90b3R5cGUuZ2V0SGVhZGVycyA9IGZ1bmN0aW9uKHVzZXJIZWFkZXJzKSB7XG4gIHZhciBoZWFkZXI7XG4gIHZhciBmb3JtSGVhZGVycyA9IHtcbiAgICAnY29udGVudC10eXBlJzogJ211bHRpcGFydC9mb3JtLWRhdGE7IGJvdW5kYXJ5PScgKyB0aGlzLmdldEJvdW5kYXJ5KClcbiAgfTtcblxuICBmb3IgKGhlYWRlciBpbiB1c2VySGVhZGVycykge1xuICAgIGlmICh1c2VySGVhZGVycy5oYXNPd25Qcm9wZXJ0eShoZWFkZXIpKSB7XG4gICAgICBmb3JtSGVhZGVyc1toZWFkZXIudG9Mb3dlckNhc2UoKV0gPSB1c2VySGVhZGVyc1toZWFkZXJdO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBmb3JtSGVhZGVycztcbn07XG5cbkZvcm1EYXRhLnByb3RvdHlwZS5zZXRCb3VuZGFyeSA9IGZ1bmN0aW9uKGJvdW5kYXJ5KSB7XG4gIHRoaXMuX2JvdW5kYXJ5ID0gYm91bmRhcnk7XG59O1xuXG5Gb3JtRGF0YS5wcm90b3R5cGUuZ2V0Qm91bmRhcnkgPSBmdW5jdGlvbigpIHtcbiAgaWYgKCF0aGlzLl9ib3VuZGFyeSkge1xuICAgIHRoaXMuX2dlbmVyYXRlQm91bmRhcnkoKTtcbiAgfVxuXG4gIHJldHVybiB0aGlzLl9ib3VuZGFyeTtcbn07XG5cbkZvcm1EYXRhLnByb3RvdHlwZS5nZXRCdWZmZXIgPSBmdW5jdGlvbigpIHtcbiAgdmFyIGRhdGFCdWZmZXIgPSBuZXcgQnVmZmVyLmFsbG9jKCAwICk7XG4gIHZhciBib3VuZGFyeSA9IHRoaXMuZ2V0Qm91bmRhcnkoKTtcblxuICAvLyBDcmVhdGUgdGhlIGZvcm0gY29udGVudC4gQWRkIExpbmUgYnJlYWtzIHRvIHRoZSBlbmQgb2YgZGF0YS5cbiAgZm9yICh2YXIgaSA9IDAsIGxlbiA9IHRoaXMuX3N0cmVhbXMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICBpZiAodHlwZW9mIHRoaXMuX3N0cmVhbXNbaV0gIT09ICdmdW5jdGlvbicpIHtcblxuICAgICAgLy8gQWRkIGNvbnRlbnQgdG8gdGhlIGJ1ZmZlci5cbiAgICAgIGlmKEJ1ZmZlci5pc0J1ZmZlcih0aGlzLl9zdHJlYW1zW2ldKSkge1xuICAgICAgICBkYXRhQnVmZmVyID0gQnVmZmVyLmNvbmNhdCggW2RhdGFCdWZmZXIsIHRoaXMuX3N0cmVhbXNbaV1dKTtcbiAgICAgIH1lbHNlIHtcbiAgICAgICAgZGF0YUJ1ZmZlciA9IEJ1ZmZlci5jb25jYXQoIFtkYXRhQnVmZmVyLCBCdWZmZXIuZnJvbSh0aGlzLl9zdHJlYW1zW2ldKV0pO1xuICAgICAgfVxuXG4gICAgICAvLyBBZGQgYnJlYWsgYWZ0ZXIgY29udGVudC5cbiAgICAgIGlmICh0eXBlb2YgdGhpcy5fc3RyZWFtc1tpXSAhPT0gJ3N0cmluZycgfHwgdGhpcy5fc3RyZWFtc1tpXS5zdWJzdHJpbmcoIDIsIGJvdW5kYXJ5Lmxlbmd0aCArIDIgKSAhPT0gYm91bmRhcnkpIHtcbiAgICAgICAgZGF0YUJ1ZmZlciA9IEJ1ZmZlci5jb25jYXQoIFtkYXRhQnVmZmVyLCBCdWZmZXIuZnJvbShGb3JtRGF0YS5MSU5FX0JSRUFLKV0gKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBBZGQgdGhlIGZvb3RlciBhbmQgcmV0dXJuIHRoZSBCdWZmZXIgb2JqZWN0LlxuICByZXR1cm4gQnVmZmVyLmNvbmNhdCggW2RhdGFCdWZmZXIsIEJ1ZmZlci5mcm9tKHRoaXMuX2xhc3RCb3VuZGFyeSgpKV0gKTtcbn07XG5cbkZvcm1EYXRhLnByb3RvdHlwZS5fZ2VuZXJhdGVCb3VuZGFyeSA9IGZ1bmN0aW9uKCkge1xuICAvLyBUaGlzIGdlbmVyYXRlcyBhIDUwIGNoYXJhY3RlciBib3VuZGFyeSBzaW1pbGFyIHRvIHRob3NlIHVzZWQgYnkgRmlyZWZveC5cbiAgLy8gVGhleSBhcmUgb3B0aW1pemVkIGZvciBib3llci1tb29yZSBwYXJzaW5nLlxuICB2YXIgYm91bmRhcnkgPSAnLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0nO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IDI0OyBpKyspIHtcbiAgICBib3VuZGFyeSArPSBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiAxMCkudG9TdHJpbmcoMTYpO1xuICB9XG5cbiAgdGhpcy5fYm91bmRhcnkgPSBib3VuZGFyeTtcbn07XG5cbi8vIE5vdGU6IGdldExlbmd0aFN5bmMgRE9FU04nVCBjYWxjdWxhdGUgc3RyZWFtcyBsZW5ndGhcbi8vIEFzIHdvcmthcm91bmQgb25lIGNhbiBjYWxjdWxhdGUgZmlsZSBzaXplIG1hbnVhbGx5XG4vLyBhbmQgYWRkIGl0IGFzIGtub3duTGVuZ3RoIG9wdGlvblxuRm9ybURhdGEucHJvdG90eXBlLmdldExlbmd0aFN5bmMgPSBmdW5jdGlvbigpIHtcbiAgdmFyIGtub3duTGVuZ3RoID0gdGhpcy5fb3ZlcmhlYWRMZW5ndGggKyB0aGlzLl92YWx1ZUxlbmd0aDtcblxuICAvLyBEb24ndCBnZXQgY29uZnVzZWQsIHRoZXJlIGFyZSAzIFwiaW50ZXJuYWxcIiBzdHJlYW1zIGZvciBlYWNoIGtleXZhbCBwYWlyXG4gIC8vIHNvIGl0IGJhc2ljYWxseSBjaGVja3MgaWYgdGhlcmUgaXMgYW55IHZhbHVlIGFkZGVkIHRvIHRoZSBmb3JtXG4gIGlmICh0aGlzLl9zdHJlYW1zLmxlbmd0aCkge1xuICAgIGtub3duTGVuZ3RoICs9IHRoaXMuX2xhc3RCb3VuZGFyeSgpLmxlbmd0aDtcbiAgfVxuXG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9mb3JtLWRhdGEvZm9ybS1kYXRhL2lzc3Vlcy80MFxuICBpZiAoIXRoaXMuaGFzS25vd25MZW5ndGgoKSkge1xuICAgIC8vIFNvbWUgYXN5bmMgbGVuZ3RoIHJldHJpZXZlcnMgYXJlIHByZXNlbnRcbiAgICAvLyB0aGVyZWZvcmUgc3luY2hyb25vdXMgbGVuZ3RoIGNhbGN1bGF0aW9uIGlzIGZhbHNlLlxuICAgIC8vIFBsZWFzZSB1c2UgZ2V0TGVuZ3RoKGNhbGxiYWNrKSB0byBnZXQgcHJvcGVyIGxlbmd0aFxuICAgIHRoaXMuX2Vycm9yKG5ldyBFcnJvcignQ2Fubm90IGNhbGN1bGF0ZSBwcm9wZXIgbGVuZ3RoIGluIHN5bmNocm9ub3VzIHdheS4nKSk7XG4gIH1cblxuICByZXR1cm4ga25vd25MZW5ndGg7XG59O1xuXG4vLyBQdWJsaWMgQVBJIHRvIGNoZWNrIGlmIGxlbmd0aCBvZiBhZGRlZCB2YWx1ZXMgaXMga25vd25cbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9mb3JtLWRhdGEvZm9ybS1kYXRhL2lzc3Vlcy8xOTZcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9mb3JtLWRhdGEvZm9ybS1kYXRhL2lzc3Vlcy8yNjJcbkZvcm1EYXRhLnByb3RvdHlwZS5oYXNLbm93bkxlbmd0aCA9IGZ1bmN0aW9uKCkge1xuICB2YXIgaGFzS25vd25MZW5ndGggPSB0cnVlO1xuXG4gIGlmICh0aGlzLl92YWx1ZXNUb01lYXN1cmUubGVuZ3RoKSB7XG4gICAgaGFzS25vd25MZW5ndGggPSBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiBoYXNLbm93bkxlbmd0aDtcbn07XG5cbkZvcm1EYXRhLnByb3RvdHlwZS5nZXRMZW5ndGggPSBmdW5jdGlvbihjYikge1xuICB2YXIga25vd25MZW5ndGggPSB0aGlzLl9vdmVyaGVhZExlbmd0aCArIHRoaXMuX3ZhbHVlTGVuZ3RoO1xuXG4gIGlmICh0aGlzLl9zdHJlYW1zLmxlbmd0aCkge1xuICAgIGtub3duTGVuZ3RoICs9IHRoaXMuX2xhc3RCb3VuZGFyeSgpLmxlbmd0aDtcbiAgfVxuXG4gIGlmICghdGhpcy5fdmFsdWVzVG9NZWFzdXJlLmxlbmd0aCkge1xuICAgIHByb2Nlc3MubmV4dFRpY2soY2IuYmluZCh0aGlzLCBudWxsLCBrbm93bkxlbmd0aCkpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGFzeW5ja2l0LnBhcmFsbGVsKHRoaXMuX3ZhbHVlc1RvTWVhc3VyZSwgdGhpcy5fbGVuZ3RoUmV0cmlldmVyLCBmdW5jdGlvbihlcnIsIHZhbHVlcykge1xuICAgIGlmIChlcnIpIHtcbiAgICAgIGNiKGVycik7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFsdWVzLmZvckVhY2goZnVuY3Rpb24obGVuZ3RoKSB7XG4gICAgICBrbm93bkxlbmd0aCArPSBsZW5ndGg7XG4gICAgfSk7XG5cbiAgICBjYihudWxsLCBrbm93bkxlbmd0aCk7XG4gIH0pO1xufTtcblxuRm9ybURhdGEucHJvdG90eXBlLnN1Ym1pdCA9IGZ1bmN0aW9uKHBhcmFtcywgY2IpIHtcbiAgdmFyIHJlcXVlc3RcbiAgICAsIG9wdGlvbnNcbiAgICAsIGRlZmF1bHRzID0ge21ldGhvZDogJ3Bvc3QnfVxuICAgIDtcblxuICAvLyBwYXJzZSBwcm92aWRlZCB1cmwgaWYgaXQncyBzdHJpbmdcbiAgLy8gb3IgdHJlYXQgaXQgYXMgb3B0aW9ucyBvYmplY3RcbiAgaWYgKHR5cGVvZiBwYXJhbXMgPT0gJ3N0cmluZycpIHtcblxuICAgIHBhcmFtcyA9IHBhcnNlVXJsKHBhcmFtcyk7XG4gICAgb3B0aW9ucyA9IHBvcHVsYXRlKHtcbiAgICAgIHBvcnQ6IHBhcmFtcy5wb3J0LFxuICAgICAgcGF0aDogcGFyYW1zLnBhdGhuYW1lLFxuICAgICAgaG9zdDogcGFyYW1zLmhvc3RuYW1lLFxuICAgICAgcHJvdG9jb2w6IHBhcmFtcy5wcm90b2NvbFxuICAgIH0sIGRlZmF1bHRzKTtcblxuICAvLyB1c2UgY3VzdG9tIHBhcmFtc1xuICB9IGVsc2Uge1xuXG4gICAgb3B0aW9ucyA9IHBvcHVsYXRlKHBhcmFtcywgZGVmYXVsdHMpO1xuICAgIC8vIGlmIG5vIHBvcnQgcHJvdmlkZWQgdXNlIGRlZmF1bHQgb25lXG4gICAgaWYgKCFvcHRpb25zLnBvcnQpIHtcbiAgICAgIG9wdGlvbnMucG9ydCA9IG9wdGlvbnMucHJvdG9jb2wgPT0gJ2h0dHBzOicgPyA0NDMgOiA4MDtcbiAgICB9XG4gIH1cblxuICAvLyBwdXQgdGhhdCBnb29kIGNvZGUgaW4gZ2V0SGVhZGVycyB0byBzb21lIHVzZVxuICBvcHRpb25zLmhlYWRlcnMgPSB0aGlzLmdldEhlYWRlcnMocGFyYW1zLmhlYWRlcnMpO1xuXG4gIC8vIGh0dHBzIGlmIHNwZWNpZmllZCwgZmFsbGJhY2sgdG8gaHR0cCBpbiBhbnkgb3RoZXIgY2FzZVxuICBpZiAob3B0aW9ucy5wcm90b2NvbCA9PSAnaHR0cHM6Jykge1xuICAgIHJlcXVlc3QgPSBodHRwcy5yZXF1ZXN0KG9wdGlvbnMpO1xuICB9IGVsc2Uge1xuICAgIHJlcXVlc3QgPSBodHRwLnJlcXVlc3Qob3B0aW9ucyk7XG4gIH1cblxuICAvLyBnZXQgY29udGVudCBsZW5ndGggYW5kIGZpcmUgYXdheVxuICB0aGlzLmdldExlbmd0aChmdW5jdGlvbihlcnIsIGxlbmd0aCkge1xuICAgIGlmIChlcnIgJiYgZXJyICE9PSAnVW5rbm93biBzdHJlYW0nKSB7XG4gICAgICB0aGlzLl9lcnJvcihlcnIpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIGFkZCBjb250ZW50IGxlbmd0aFxuICAgIGlmIChsZW5ndGgpIHtcbiAgICAgIHJlcXVlc3Quc2V0SGVhZGVyKCdDb250ZW50LUxlbmd0aCcsIGxlbmd0aCk7XG4gICAgfVxuXG4gICAgdGhpcy5waXBlKHJlcXVlc3QpO1xuICAgIGlmIChjYikge1xuICAgICAgdmFyIG9uUmVzcG9uc2U7XG5cbiAgICAgIHZhciBjYWxsYmFjayA9IGZ1bmN0aW9uIChlcnJvciwgcmVzcG9uY2UpIHtcbiAgICAgICAgcmVxdWVzdC5yZW1vdmVMaXN0ZW5lcignZXJyb3InLCBjYWxsYmFjayk7XG4gICAgICAgIHJlcXVlc3QucmVtb3ZlTGlzdGVuZXIoJ3Jlc3BvbnNlJywgb25SZXNwb25zZSk7XG5cbiAgICAgICAgcmV0dXJuIGNiLmNhbGwodGhpcywgZXJyb3IsIHJlc3BvbmNlKTtcbiAgICAgIH07XG5cbiAgICAgIG9uUmVzcG9uc2UgPSBjYWxsYmFjay5iaW5kKHRoaXMsIG51bGwpO1xuXG4gICAgICByZXF1ZXN0Lm9uKCdlcnJvcicsIGNhbGxiYWNrKTtcbiAgICAgIHJlcXVlc3Qub24oJ3Jlc3BvbnNlJywgb25SZXNwb25zZSk7XG4gICAgfVxuICB9LmJpbmQodGhpcykpO1xuXG4gIHJldHVybiByZXF1ZXN0O1xufTtcblxuRm9ybURhdGEucHJvdG90eXBlLl9lcnJvciA9IGZ1bmN0aW9uKGVycikge1xuICBpZiAoIXRoaXMuZXJyb3IpIHtcbiAgICB0aGlzLmVycm9yID0gZXJyO1xuICAgIHRoaXMucGF1c2UoKTtcbiAgICB0aGlzLmVtaXQoJ2Vycm9yJywgZXJyKTtcbiAgfVxufTtcblxuRm9ybURhdGEucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gJ1tvYmplY3QgRm9ybURhdGFdJztcbn07XG4iLCIvLyBwb3B1bGF0ZXMgbWlzc2luZyB2YWx1ZXNcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oZHN0LCBzcmMpIHtcblxuICBPYmplY3Qua2V5cyhzcmMpLmZvckVhY2goZnVuY3Rpb24ocHJvcClcbiAge1xuICAgIGRzdFtwcm9wXSA9IGRzdFtwcm9wXSB8fCBzcmNbcHJvcF07XG4gIH0pO1xuXG4gIHJldHVybiBkc3Q7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xubW9kdWxlLmV4cG9ydHMgPSAoZmxhZywgYXJndikgPT4ge1xuXHRhcmd2ID0gYXJndiB8fCBwcm9jZXNzLmFyZ3Y7XG5cdGNvbnN0IHByZWZpeCA9IGZsYWcuc3RhcnRzV2l0aCgnLScpID8gJycgOiAoZmxhZy5sZW5ndGggPT09IDEgPyAnLScgOiAnLS0nKTtcblx0Y29uc3QgcG9zID0gYXJndi5pbmRleE9mKHByZWZpeCArIGZsYWcpO1xuXHRjb25zdCB0ZXJtaW5hdG9yUG9zID0gYXJndi5pbmRleE9mKCctLScpO1xuXHRyZXR1cm4gcG9zICE9PSAtMSAmJiAodGVybWluYXRvclBvcyA9PT0gLTEgPyB0cnVlIDogcG9zIDwgdGVybWluYXRvclBvcyk7XG59O1xuIiwidmFyIGpzb25fc3RyaW5naWZ5ID0gcmVxdWlyZSgnLi9saWIvc3RyaW5naWZ5LmpzJykuc3RyaW5naWZ5O1xudmFyIGpzb25fcGFyc2UgICAgID0gcmVxdWlyZSgnLi9saWIvcGFyc2UuanMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihvcHRpb25zKSB7XG4gICAgcmV0dXJuICB7XG4gICAgICAgIHBhcnNlOiBqc29uX3BhcnNlKG9wdGlvbnMpLFxuICAgICAgICBzdHJpbmdpZnk6IGpzb25fc3RyaW5naWZ5XG4gICAgfVxufTtcbi8vY3JlYXRlIHRoZSBkZWZhdWx0IG1ldGhvZCBtZW1iZXJzIHdpdGggbm8gb3B0aW9ucyBhcHBsaWVkIGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eVxubW9kdWxlLmV4cG9ydHMucGFyc2UgPSBqc29uX3BhcnNlKCk7XG5tb2R1bGUuZXhwb3J0cy5zdHJpbmdpZnkgPSBqc29uX3N0cmluZ2lmeTtcbiIsInZhciBCaWdOdW1iZXIgPSBudWxsO1xuXG4vLyByZWdleHB4cyBleHRyYWN0ZWQgZnJvbVxuLy8gKGMpIEJTRC0zLUNsYXVzZVxuLy8gaHR0cHM6Ly9naXRodWIuY29tL2Zhc3RpZnkvc2VjdXJlLWpzb24tcGFyc2UvZ3JhcGhzL2NvbnRyaWJ1dG9ycyBhbmQgaHR0cHM6Ly9naXRodWIuY29tL2hhcGlqcy9ib3VybmUvZ3JhcGhzL2NvbnRyaWJ1dG9yc1xuXG5jb25zdCBzdXNwZWN0UHJvdG9SeCA9IC8oPzpffFxcXFx1MDA1W0ZmXSkoPzpffFxcXFx1MDA1W0ZmXSkoPzpwfFxcXFx1MDA3MCkoPzpyfFxcXFx1MDA3MikoPzpvfFxcXFx1MDA2W0ZmXSkoPzp0fFxcXFx1MDA3NCkoPzpvfFxcXFx1MDA2W0ZmXSkoPzpffFxcXFx1MDA1W0ZmXSkoPzpffFxcXFx1MDA1W0ZmXSkvO1xuY29uc3Qgc3VzcGVjdENvbnN0cnVjdG9yUnggPSAvKD86Y3xcXFxcdTAwNjMpKD86b3xcXFxcdTAwNltGZl0pKD86bnxcXFxcdTAwNltFZV0pKD86c3xcXFxcdTAwNzMpKD86dHxcXFxcdTAwNzQpKD86cnxcXFxcdTAwNzIpKD86dXxcXFxcdTAwNzUpKD86Y3xcXFxcdTAwNjMpKD86dHxcXFxcdTAwNzQpKD86b3xcXFxcdTAwNltGZl0pKD86cnxcXFxcdTAwNzIpLztcblxuLypcbiAgICBqc29uX3BhcnNlLmpzXG4gICAgMjAxMi0wNi0yMFxuXG4gICAgUHVibGljIERvbWFpbi5cblxuICAgIE5PIFdBUlJBTlRZIEVYUFJFU1NFRCBPUiBJTVBMSUVELiBVU0UgQVQgWU9VUiBPV04gUklTSy5cblxuICAgIFRoaXMgZmlsZSBjcmVhdGVzIGEganNvbl9wYXJzZSBmdW5jdGlvbi5cbiAgICBEdXJpbmcgY3JlYXRlIHlvdSBjYW4gKG9wdGlvbmFsbHkpIHNwZWNpZnkgc29tZSBiZWhhdmlvdXJhbCBzd2l0Y2hlc1xuXG4gICAgICAgIHJlcXVpcmUoJ2pzb24tYmlnaW50Jykob3B0aW9ucylcblxuICAgICAgICAgICAgVGhlIG9wdGlvbmFsIG9wdGlvbnMgcGFyYW1ldGVyIGhvbGRzIHN3aXRjaGVzIHRoYXQgZHJpdmUgY2VydGFpblxuICAgICAgICAgICAgYXNwZWN0cyBvZiB0aGUgcGFyc2luZyBwcm9jZXNzOlxuICAgICAgICAgICAgKiBvcHRpb25zLnN0cmljdCA9IHRydWUgd2lsbCB3YXJuIGFib3V0IGR1cGxpY2F0ZS1rZXkgdXNhZ2UgaW4gdGhlIGpzb24uXG4gICAgICAgICAgICAgIFRoZSBkZWZhdWx0IChzdHJpY3QgPSBmYWxzZSkgd2lsbCBzaWxlbnRseSBpZ25vcmUgdGhvc2UgYW5kIG92ZXJ3cml0ZVxuICAgICAgICAgICAgICB2YWx1ZXMgZm9yIGtleXMgdGhhdCBhcmUgaW4gZHVwbGljYXRlIHVzZS5cblxuICAgIFRoZSByZXN1bHRpbmcgZnVuY3Rpb24gZm9sbG93cyB0aGlzIHNpZ25hdHVyZTpcbiAgICAgICAganNvbl9wYXJzZSh0ZXh0LCByZXZpdmVyKVxuICAgICAgICAgICAgVGhpcyBtZXRob2QgcGFyc2VzIGEgSlNPTiB0ZXh0IHRvIHByb2R1Y2UgYW4gb2JqZWN0IG9yIGFycmF5LlxuICAgICAgICAgICAgSXQgY2FuIHRocm93IGEgU3ludGF4RXJyb3IgZXhjZXB0aW9uLlxuXG4gICAgICAgICAgICBUaGUgb3B0aW9uYWwgcmV2aXZlciBwYXJhbWV0ZXIgaXMgYSBmdW5jdGlvbiB0aGF0IGNhbiBmaWx0ZXIgYW5kXG4gICAgICAgICAgICB0cmFuc2Zvcm0gdGhlIHJlc3VsdHMuIEl0IHJlY2VpdmVzIGVhY2ggb2YgdGhlIGtleXMgYW5kIHZhbHVlcyxcbiAgICAgICAgICAgIGFuZCBpdHMgcmV0dXJuIHZhbHVlIGlzIHVzZWQgaW5zdGVhZCBvZiB0aGUgb3JpZ2luYWwgdmFsdWUuXG4gICAgICAgICAgICBJZiBpdCByZXR1cm5zIHdoYXQgaXQgcmVjZWl2ZWQsIHRoZW4gdGhlIHN0cnVjdHVyZSBpcyBub3QgbW9kaWZpZWQuXG4gICAgICAgICAgICBJZiBpdCByZXR1cm5zIHVuZGVmaW5lZCB0aGVuIHRoZSBtZW1iZXIgaXMgZGVsZXRlZC5cblxuICAgICAgICAgICAgRXhhbXBsZTpcblxuICAgICAgICAgICAgLy8gUGFyc2UgdGhlIHRleHQuIFZhbHVlcyB0aGF0IGxvb2sgbGlrZSBJU08gZGF0ZSBzdHJpbmdzIHdpbGxcbiAgICAgICAgICAgIC8vIGJlIGNvbnZlcnRlZCB0byBEYXRlIG9iamVjdHMuXG5cbiAgICAgICAgICAgIG15RGF0YSA9IGpzb25fcGFyc2UodGV4dCwgZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcbiAgICAgICAgICAgICAgICB2YXIgYTtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgICAgICBhID1cbi9eKFxcZHs0fSktKFxcZHsyfSktKFxcZHsyfSlUKFxcZHsyfSk6KFxcZHsyfSk6KFxcZHsyfSg/OlxcLlxcZCopPylaJC8uZXhlYyh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChhKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IERhdGUoRGF0ZS5VVEMoK2FbMV0sICthWzJdIC0gMSwgK2FbM10sICthWzRdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICthWzVdLCArYVs2XSkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgVGhpcyBpcyBhIHJlZmVyZW5jZSBpbXBsZW1lbnRhdGlvbi4gWW91IGFyZSBmcmVlIHRvIGNvcHksIG1vZGlmeSwgb3JcbiAgICByZWRpc3RyaWJ1dGUuXG5cbiAgICBUaGlzIGNvZGUgc2hvdWxkIGJlIG1pbmlmaWVkIGJlZm9yZSBkZXBsb3ltZW50LlxuICAgIFNlZSBodHRwOi8vamF2YXNjcmlwdC5jcm9ja2ZvcmQuY29tL2pzbWluLmh0bWxcblxuICAgIFVTRSBZT1VSIE9XTiBDT1BZLiBJVCBJUyBFWFRSRU1FTFkgVU5XSVNFIFRPIExPQUQgQ09ERSBGUk9NIFNFUlZFUlMgWU9VIERPXG4gICAgTk9UIENPTlRST0wuXG4qL1xuXG4vKm1lbWJlcnMgXCJcIiwgXCJcXFwiXCIsIFwiXFwvXCIsIFwiXFxcXFwiLCBhdCwgYiwgY2FsbCwgY2hhckF0LCBmLCBmcm9tQ2hhckNvZGUsXG4gICAgaGFzT3duUHJvcGVydHksIG1lc3NhZ2UsIG4sIG5hbWUsIHByb3RvdHlwZSwgcHVzaCwgciwgdCwgdGV4dFxuKi9cblxudmFyIGpzb25fcGFyc2UgPSBmdW5jdGlvbiAob3B0aW9ucykge1xuICAndXNlIHN0cmljdCc7XG5cbiAgLy8gVGhpcyBpcyBhIGZ1bmN0aW9uIHRoYXQgY2FuIHBhcnNlIGEgSlNPTiB0ZXh0LCBwcm9kdWNpbmcgYSBKYXZhU2NyaXB0XG4gIC8vIGRhdGEgc3RydWN0dXJlLiBJdCBpcyBhIHNpbXBsZSwgcmVjdXJzaXZlIGRlc2NlbnQgcGFyc2VyLiBJdCBkb2VzIG5vdCB1c2VcbiAgLy8gZXZhbCBvciByZWd1bGFyIGV4cHJlc3Npb25zLCBzbyBpdCBjYW4gYmUgdXNlZCBhcyBhIG1vZGVsIGZvciBpbXBsZW1lbnRpbmdcbiAgLy8gYSBKU09OIHBhcnNlciBpbiBvdGhlciBsYW5ndWFnZXMuXG5cbiAgLy8gV2UgYXJlIGRlZmluaW5nIHRoZSBmdW5jdGlvbiBpbnNpZGUgb2YgYW5vdGhlciBmdW5jdGlvbiB0byBhdm9pZCBjcmVhdGluZ1xuICAvLyBnbG9iYWwgdmFyaWFibGVzLlxuXG4gIC8vIERlZmF1bHQgb3B0aW9ucyBvbmUgY2FuIG92ZXJyaWRlIGJ5IHBhc3Npbmcgb3B0aW9ucyB0byB0aGUgcGFyc2UoKVxuICB2YXIgX29wdGlvbnMgPSB7XG4gICAgc3RyaWN0OiBmYWxzZSwgLy8gbm90IGJlaW5nIHN0cmljdCBtZWFucyBkbyBub3QgZ2VuZXJhdGUgc3ludGF4IGVycm9ycyBmb3IgXCJkdXBsaWNhdGUga2V5XCJcbiAgICBzdG9yZUFzU3RyaW5nOiBmYWxzZSwgLy8gdG9nZ2xlcyB3aGV0aGVyIHRoZSB2YWx1ZXMgc2hvdWxkIGJlIHN0b3JlZCBhcyBCaWdOdW1iZXIgKGRlZmF1bHQpIG9yIGEgc3RyaW5nXG4gICAgYWx3YXlzUGFyc2VBc0JpZzogZmFsc2UsIC8vIHRvZ2dsZXMgd2hldGhlciBhbGwgbnVtYmVycyBzaG91bGQgYmUgQmlnXG4gICAgdXNlTmF0aXZlQmlnSW50OiBmYWxzZSwgLy8gdG9nZ2xlcyB3aGV0aGVyIHRvIHVzZSBuYXRpdmUgQmlnSW50IGluc3RlYWQgb2YgYmlnbnVtYmVyLmpzXG4gICAgcHJvdG9BY3Rpb246ICdlcnJvcicsXG4gICAgY29uc3RydWN0b3JBY3Rpb246ICdlcnJvcicsXG4gIH07XG5cbiAgLy8gSWYgdGhlcmUgYXJlIG9wdGlvbnMsIHRoZW4gdXNlIHRoZW0gdG8gb3ZlcnJpZGUgdGhlIGRlZmF1bHQgX29wdGlvbnNcbiAgaWYgKG9wdGlvbnMgIT09IHVuZGVmaW5lZCAmJiBvcHRpb25zICE9PSBudWxsKSB7XG4gICAgaWYgKG9wdGlvbnMuc3RyaWN0ID09PSB0cnVlKSB7XG4gICAgICBfb3B0aW9ucy5zdHJpY3QgPSB0cnVlO1xuICAgIH1cbiAgICBpZiAob3B0aW9ucy5zdG9yZUFzU3RyaW5nID09PSB0cnVlKSB7XG4gICAgICBfb3B0aW9ucy5zdG9yZUFzU3RyaW5nID0gdHJ1ZTtcbiAgICB9XG4gICAgX29wdGlvbnMuYWx3YXlzUGFyc2VBc0JpZyA9XG4gICAgICBvcHRpb25zLmFsd2F5c1BhcnNlQXNCaWcgPT09IHRydWUgPyBvcHRpb25zLmFsd2F5c1BhcnNlQXNCaWcgOiBmYWxzZTtcbiAgICBfb3B0aW9ucy51c2VOYXRpdmVCaWdJbnQgPVxuICAgICAgb3B0aW9ucy51c2VOYXRpdmVCaWdJbnQgPT09IHRydWUgPyBvcHRpb25zLnVzZU5hdGl2ZUJpZ0ludCA6IGZhbHNlO1xuXG4gICAgaWYgKHR5cGVvZiBvcHRpb25zLmNvbnN0cnVjdG9yQWN0aW9uICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgaWYgKFxuICAgICAgICBvcHRpb25zLmNvbnN0cnVjdG9yQWN0aW9uID09PSAnZXJyb3InIHx8XG4gICAgICAgIG9wdGlvbnMuY29uc3RydWN0b3JBY3Rpb24gPT09ICdpZ25vcmUnIHx8XG4gICAgICAgIG9wdGlvbnMuY29uc3RydWN0b3JBY3Rpb24gPT09ICdwcmVzZXJ2ZSdcbiAgICAgICkge1xuICAgICAgICBfb3B0aW9ucy5jb25zdHJ1Y3RvckFjdGlvbiA9IG9wdGlvbnMuY29uc3RydWN0b3JBY3Rpb247XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgYEluY29ycmVjdCB2YWx1ZSBmb3IgY29uc3RydWN0b3JBY3Rpb24gb3B0aW9uLCBtdXN0IGJlIFwiZXJyb3JcIiwgXCJpZ25vcmVcIiBvciB1bmRlZmluZWQgYnV0IHBhc3NlZCAke29wdGlvbnMuY29uc3RydWN0b3JBY3Rpb259YFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0eXBlb2Ygb3B0aW9ucy5wcm90b0FjdGlvbiAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIGlmIChcbiAgICAgICAgb3B0aW9ucy5wcm90b0FjdGlvbiA9PT0gJ2Vycm9yJyB8fFxuICAgICAgICBvcHRpb25zLnByb3RvQWN0aW9uID09PSAnaWdub3JlJyB8fFxuICAgICAgICBvcHRpb25zLnByb3RvQWN0aW9uID09PSAncHJlc2VydmUnXG4gICAgICApIHtcbiAgICAgICAgX29wdGlvbnMucHJvdG9BY3Rpb24gPSBvcHRpb25zLnByb3RvQWN0aW9uO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIGBJbmNvcnJlY3QgdmFsdWUgZm9yIHByb3RvQWN0aW9uIG9wdGlvbiwgbXVzdCBiZSBcImVycm9yXCIsIFwiaWdub3JlXCIgb3IgdW5kZWZpbmVkIGJ1dCBwYXNzZWQgJHtvcHRpb25zLnByb3RvQWN0aW9ufWBcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICB2YXIgYXQsIC8vIFRoZSBpbmRleCBvZiB0aGUgY3VycmVudCBjaGFyYWN0ZXJcbiAgICBjaCwgLy8gVGhlIGN1cnJlbnQgY2hhcmFjdGVyXG4gICAgZXNjYXBlZSA9IHtcbiAgICAgICdcIic6ICdcIicsXG4gICAgICAnXFxcXCc6ICdcXFxcJyxcbiAgICAgICcvJzogJy8nLFxuICAgICAgYjogJ1xcYicsXG4gICAgICBmOiAnXFxmJyxcbiAgICAgIG46ICdcXG4nLFxuICAgICAgcjogJ1xccicsXG4gICAgICB0OiAnXFx0JyxcbiAgICB9LFxuICAgIHRleHQsXG4gICAgZXJyb3IgPSBmdW5jdGlvbiAobSkge1xuICAgICAgLy8gQ2FsbCBlcnJvciB3aGVuIHNvbWV0aGluZyBpcyB3cm9uZy5cblxuICAgICAgdGhyb3cge1xuICAgICAgICBuYW1lOiAnU3ludGF4RXJyb3InLFxuICAgICAgICBtZXNzYWdlOiBtLFxuICAgICAgICBhdDogYXQsXG4gICAgICAgIHRleHQ6IHRleHQsXG4gICAgICB9O1xuICAgIH0sXG4gICAgbmV4dCA9IGZ1bmN0aW9uIChjKSB7XG4gICAgICAvLyBJZiBhIGMgcGFyYW1ldGVyIGlzIHByb3ZpZGVkLCB2ZXJpZnkgdGhhdCBpdCBtYXRjaGVzIHRoZSBjdXJyZW50IGNoYXJhY3Rlci5cblxuICAgICAgaWYgKGMgJiYgYyAhPT0gY2gpIHtcbiAgICAgICAgZXJyb3IoXCJFeHBlY3RlZCAnXCIgKyBjICsgXCInIGluc3RlYWQgb2YgJ1wiICsgY2ggKyBcIidcIik7XG4gICAgICB9XG5cbiAgICAgIC8vIEdldCB0aGUgbmV4dCBjaGFyYWN0ZXIuIFdoZW4gdGhlcmUgYXJlIG5vIG1vcmUgY2hhcmFjdGVycyxcbiAgICAgIC8vIHJldHVybiB0aGUgZW1wdHkgc3RyaW5nLlxuXG4gICAgICBjaCA9IHRleHQuY2hhckF0KGF0KTtcbiAgICAgIGF0ICs9IDE7XG4gICAgICByZXR1cm4gY2g7XG4gICAgfSxcbiAgICBudW1iZXIgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAvLyBQYXJzZSBhIG51bWJlciB2YWx1ZS5cblxuICAgICAgdmFyIG51bWJlcixcbiAgICAgICAgc3RyaW5nID0gJyc7XG5cbiAgICAgIGlmIChjaCA9PT0gJy0nKSB7XG4gICAgICAgIHN0cmluZyA9ICctJztcbiAgICAgICAgbmV4dCgnLScpO1xuICAgICAgfVxuICAgICAgd2hpbGUgKGNoID49ICcwJyAmJiBjaCA8PSAnOScpIHtcbiAgICAgICAgc3RyaW5nICs9IGNoO1xuICAgICAgICBuZXh0KCk7XG4gICAgICB9XG4gICAgICBpZiAoY2ggPT09ICcuJykge1xuICAgICAgICBzdHJpbmcgKz0gJy4nO1xuICAgICAgICB3aGlsZSAobmV4dCgpICYmIGNoID49ICcwJyAmJiBjaCA8PSAnOScpIHtcbiAgICAgICAgICBzdHJpbmcgKz0gY2g7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChjaCA9PT0gJ2UnIHx8IGNoID09PSAnRScpIHtcbiAgICAgICAgc3RyaW5nICs9IGNoO1xuICAgICAgICBuZXh0KCk7XG4gICAgICAgIGlmIChjaCA9PT0gJy0nIHx8IGNoID09PSAnKycpIHtcbiAgICAgICAgICBzdHJpbmcgKz0gY2g7XG4gICAgICAgICAgbmV4dCgpO1xuICAgICAgICB9XG4gICAgICAgIHdoaWxlIChjaCA+PSAnMCcgJiYgY2ggPD0gJzknKSB7XG4gICAgICAgICAgc3RyaW5nICs9IGNoO1xuICAgICAgICAgIG5leHQoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgbnVtYmVyID0gK3N0cmluZztcbiAgICAgIGlmICghaXNGaW5pdGUobnVtYmVyKSkge1xuICAgICAgICBlcnJvcignQmFkIG51bWJlcicpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKEJpZ051bWJlciA9PSBudWxsKSBCaWdOdW1iZXIgPSByZXF1aXJlKCdiaWdudW1iZXIuanMnKTtcbiAgICAgICAgLy9pZiAobnVtYmVyID4gOTAwNzE5OTI1NDc0MDk5MiB8fCBudW1iZXIgPCAtOTAwNzE5OTI1NDc0MDk5MilcbiAgICAgICAgLy8gQmlnbnVtYmVyIGhhcyBzdHJpY3RlciBjaGVjazogZXZlcnl0aGluZyB3aXRoIGxlbmd0aCA+IDE1IGRpZ2l0cyBkaXNhbGxvd2VkXG4gICAgICAgIGlmIChzdHJpbmcubGVuZ3RoID4gMTUpXG4gICAgICAgICAgcmV0dXJuIF9vcHRpb25zLnN0b3JlQXNTdHJpbmdcbiAgICAgICAgICAgID8gc3RyaW5nXG4gICAgICAgICAgICA6IF9vcHRpb25zLnVzZU5hdGl2ZUJpZ0ludFxuICAgICAgICAgICAgPyBCaWdJbnQoc3RyaW5nKVxuICAgICAgICAgICAgOiBuZXcgQmlnTnVtYmVyKHN0cmluZyk7XG4gICAgICAgIGVsc2VcbiAgICAgICAgICByZXR1cm4gIV9vcHRpb25zLmFsd2F5c1BhcnNlQXNCaWdcbiAgICAgICAgICAgID8gbnVtYmVyXG4gICAgICAgICAgICA6IF9vcHRpb25zLnVzZU5hdGl2ZUJpZ0ludFxuICAgICAgICAgICAgPyBCaWdJbnQobnVtYmVyKVxuICAgICAgICAgICAgOiBuZXcgQmlnTnVtYmVyKG51bWJlcik7XG4gICAgICB9XG4gICAgfSxcbiAgICBzdHJpbmcgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAvLyBQYXJzZSBhIHN0cmluZyB2YWx1ZS5cblxuICAgICAgdmFyIGhleCxcbiAgICAgICAgaSxcbiAgICAgICAgc3RyaW5nID0gJycsXG4gICAgICAgIHVmZmZmO1xuXG4gICAgICAvLyBXaGVuIHBhcnNpbmcgZm9yIHN0cmluZyB2YWx1ZXMsIHdlIG11c3QgbG9vayBmb3IgXCIgYW5kIFxcIGNoYXJhY3RlcnMuXG5cbiAgICAgIGlmIChjaCA9PT0gJ1wiJykge1xuICAgICAgICB2YXIgc3RhcnRBdCA9IGF0O1xuICAgICAgICB3aGlsZSAobmV4dCgpKSB7XG4gICAgICAgICAgaWYgKGNoID09PSAnXCInKSB7XG4gICAgICAgICAgICBpZiAoYXQgLSAxID4gc3RhcnRBdCkgc3RyaW5nICs9IHRleHQuc3Vic3RyaW5nKHN0YXJ0QXQsIGF0IC0gMSk7XG4gICAgICAgICAgICBuZXh0KCk7XG4gICAgICAgICAgICByZXR1cm4gc3RyaW5nO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoY2ggPT09ICdcXFxcJykge1xuICAgICAgICAgICAgaWYgKGF0IC0gMSA+IHN0YXJ0QXQpIHN0cmluZyArPSB0ZXh0LnN1YnN0cmluZyhzdGFydEF0LCBhdCAtIDEpO1xuICAgICAgICAgICAgbmV4dCgpO1xuICAgICAgICAgICAgaWYgKGNoID09PSAndScpIHtcbiAgICAgICAgICAgICAgdWZmZmYgPSAwO1xuICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgNDsgaSArPSAxKSB7XG4gICAgICAgICAgICAgICAgaGV4ID0gcGFyc2VJbnQobmV4dCgpLCAxNik7XG4gICAgICAgICAgICAgICAgaWYgKCFpc0Zpbml0ZShoZXgpKSB7XG4gICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdWZmZmYgPSB1ZmZmZiAqIDE2ICsgaGV4O1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHN0cmluZyArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKHVmZmZmKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGVzY2FwZWVbY2hdID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICBzdHJpbmcgKz0gZXNjYXBlZVtjaF07XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHN0YXJ0QXQgPSBhdDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGVycm9yKCdCYWQgc3RyaW5nJyk7XG4gICAgfSxcbiAgICB3aGl0ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIC8vIFNraXAgd2hpdGVzcGFjZS5cblxuICAgICAgd2hpbGUgKGNoICYmIGNoIDw9ICcgJykge1xuICAgICAgICBuZXh0KCk7XG4gICAgICB9XG4gICAgfSxcbiAgICB3b3JkID0gZnVuY3Rpb24gKCkge1xuICAgICAgLy8gdHJ1ZSwgZmFsc2UsIG9yIG51bGwuXG5cbiAgICAgIHN3aXRjaCAoY2gpIHtcbiAgICAgICAgY2FzZSAndCc6XG4gICAgICAgICAgbmV4dCgndCcpO1xuICAgICAgICAgIG5leHQoJ3InKTtcbiAgICAgICAgICBuZXh0KCd1Jyk7XG4gICAgICAgICAgbmV4dCgnZScpO1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICBjYXNlICdmJzpcbiAgICAgICAgICBuZXh0KCdmJyk7XG4gICAgICAgICAgbmV4dCgnYScpO1xuICAgICAgICAgIG5leHQoJ2wnKTtcbiAgICAgICAgICBuZXh0KCdzJyk7XG4gICAgICAgICAgbmV4dCgnZScpO1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgY2FzZSAnbic6XG4gICAgICAgICAgbmV4dCgnbicpO1xuICAgICAgICAgIG5leHQoJ3UnKTtcbiAgICAgICAgICBuZXh0KCdsJyk7XG4gICAgICAgICAgbmV4dCgnbCcpO1xuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgICAgZXJyb3IoXCJVbmV4cGVjdGVkICdcIiArIGNoICsgXCInXCIpO1xuICAgIH0sXG4gICAgdmFsdWUsIC8vIFBsYWNlIGhvbGRlciBmb3IgdGhlIHZhbHVlIGZ1bmN0aW9uLlxuICAgIGFycmF5ID0gZnVuY3Rpb24gKCkge1xuICAgICAgLy8gUGFyc2UgYW4gYXJyYXkgdmFsdWUuXG5cbiAgICAgIHZhciBhcnJheSA9IFtdO1xuXG4gICAgICBpZiAoY2ggPT09ICdbJykge1xuICAgICAgICBuZXh0KCdbJyk7XG4gICAgICAgIHdoaXRlKCk7XG4gICAgICAgIGlmIChjaCA9PT0gJ10nKSB7XG4gICAgICAgICAgbmV4dCgnXScpO1xuICAgICAgICAgIHJldHVybiBhcnJheTsgLy8gZW1wdHkgYXJyYXlcbiAgICAgICAgfVxuICAgICAgICB3aGlsZSAoY2gpIHtcbiAgICAgICAgICBhcnJheS5wdXNoKHZhbHVlKCkpO1xuICAgICAgICAgIHdoaXRlKCk7XG4gICAgICAgICAgaWYgKGNoID09PSAnXScpIHtcbiAgICAgICAgICAgIG5leHQoJ10nKTtcbiAgICAgICAgICAgIHJldHVybiBhcnJheTtcbiAgICAgICAgICB9XG4gICAgICAgICAgbmV4dCgnLCcpO1xuICAgICAgICAgIHdoaXRlKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGVycm9yKCdCYWQgYXJyYXknKTtcbiAgICB9LFxuICAgIG9iamVjdCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIC8vIFBhcnNlIGFuIG9iamVjdCB2YWx1ZS5cblxuICAgICAgdmFyIGtleSxcbiAgICAgICAgb2JqZWN0ID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcblxuICAgICAgaWYgKGNoID09PSAneycpIHtcbiAgICAgICAgbmV4dCgneycpO1xuICAgICAgICB3aGl0ZSgpO1xuICAgICAgICBpZiAoY2ggPT09ICd9Jykge1xuICAgICAgICAgIG5leHQoJ30nKTtcbiAgICAgICAgICByZXR1cm4gb2JqZWN0OyAvLyBlbXB0eSBvYmplY3RcbiAgICAgICAgfVxuICAgICAgICB3aGlsZSAoY2gpIHtcbiAgICAgICAgICBrZXkgPSBzdHJpbmcoKTtcbiAgICAgICAgICB3aGl0ZSgpO1xuICAgICAgICAgIG5leHQoJzonKTtcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICBfb3B0aW9ucy5zdHJpY3QgPT09IHRydWUgJiZcbiAgICAgICAgICAgIE9iamVjdC5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwga2V5KVxuICAgICAgICAgICkge1xuICAgICAgICAgICAgZXJyb3IoJ0R1cGxpY2F0ZSBrZXkgXCInICsga2V5ICsgJ1wiJyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHN1c3BlY3RQcm90b1J4LnRlc3Qoa2V5KSA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgaWYgKF9vcHRpb25zLnByb3RvQWN0aW9uID09PSAnZXJyb3InKSB7XG4gICAgICAgICAgICAgIGVycm9yKCdPYmplY3QgY29udGFpbnMgZm9yYmlkZGVuIHByb3RvdHlwZSBwcm9wZXJ0eScpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChfb3B0aW9ucy5wcm90b0FjdGlvbiA9PT0gJ2lnbm9yZScpIHtcbiAgICAgICAgICAgICAgdmFsdWUoKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIG9iamVjdFtrZXldID0gdmFsdWUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2UgaWYgKHN1c3BlY3RDb25zdHJ1Y3RvclJ4LnRlc3Qoa2V5KSA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgaWYgKF9vcHRpb25zLmNvbnN0cnVjdG9yQWN0aW9uID09PSAnZXJyb3InKSB7XG4gICAgICAgICAgICAgIGVycm9yKCdPYmplY3QgY29udGFpbnMgZm9yYmlkZGVuIGNvbnN0cnVjdG9yIHByb3BlcnR5Jyk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKF9vcHRpb25zLmNvbnN0cnVjdG9yQWN0aW9uID09PSAnaWdub3JlJykge1xuICAgICAgICAgICAgICB2YWx1ZSgpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgb2JqZWN0W2tleV0gPSB2YWx1ZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBvYmplY3Rba2V5XSA9IHZhbHVlKCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgd2hpdGUoKTtcbiAgICAgICAgICBpZiAoY2ggPT09ICd9Jykge1xuICAgICAgICAgICAgbmV4dCgnfScpO1xuICAgICAgICAgICAgcmV0dXJuIG9iamVjdDtcbiAgICAgICAgICB9XG4gICAgICAgICAgbmV4dCgnLCcpO1xuICAgICAgICAgIHdoaXRlKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGVycm9yKCdCYWQgb2JqZWN0Jyk7XG4gICAgfTtcblxuICB2YWx1ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAvLyBQYXJzZSBhIEpTT04gdmFsdWUuIEl0IGNvdWxkIGJlIGFuIG9iamVjdCwgYW4gYXJyYXksIGEgc3RyaW5nLCBhIG51bWJlcixcbiAgICAvLyBvciBhIHdvcmQuXG5cbiAgICB3aGl0ZSgpO1xuICAgIHN3aXRjaCAoY2gpIHtcbiAgICAgIGNhc2UgJ3snOlxuICAgICAgICByZXR1cm4gb2JqZWN0KCk7XG4gICAgICBjYXNlICdbJzpcbiAgICAgICAgcmV0dXJuIGFycmF5KCk7XG4gICAgICBjYXNlICdcIic6XG4gICAgICAgIHJldHVybiBzdHJpbmcoKTtcbiAgICAgIGNhc2UgJy0nOlxuICAgICAgICByZXR1cm4gbnVtYmVyKCk7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gY2ggPj0gJzAnICYmIGNoIDw9ICc5JyA/IG51bWJlcigpIDogd29yZCgpO1xuICAgIH1cbiAgfTtcblxuICAvLyBSZXR1cm4gdGhlIGpzb25fcGFyc2UgZnVuY3Rpb24uIEl0IHdpbGwgaGF2ZSBhY2Nlc3MgdG8gYWxsIG9mIHRoZSBhYm92ZVxuICAvLyBmdW5jdGlvbnMgYW5kIHZhcmlhYmxlcy5cblxuICByZXR1cm4gZnVuY3Rpb24gKHNvdXJjZSwgcmV2aXZlcikge1xuICAgIHZhciByZXN1bHQ7XG5cbiAgICB0ZXh0ID0gc291cmNlICsgJyc7XG4gICAgYXQgPSAwO1xuICAgIGNoID0gJyAnO1xuICAgIHJlc3VsdCA9IHZhbHVlKCk7XG4gICAgd2hpdGUoKTtcbiAgICBpZiAoY2gpIHtcbiAgICAgIGVycm9yKCdTeW50YXggZXJyb3InKTtcbiAgICB9XG5cbiAgICAvLyBJZiB0aGVyZSBpcyBhIHJldml2ZXIgZnVuY3Rpb24sIHdlIHJlY3Vyc2l2ZWx5IHdhbGsgdGhlIG5ldyBzdHJ1Y3R1cmUsXG4gICAgLy8gcGFzc2luZyBlYWNoIG5hbWUvdmFsdWUgcGFpciB0byB0aGUgcmV2aXZlciBmdW5jdGlvbiBmb3IgcG9zc2libGVcbiAgICAvLyB0cmFuc2Zvcm1hdGlvbiwgc3RhcnRpbmcgd2l0aCBhIHRlbXBvcmFyeSByb290IG9iamVjdCB0aGF0IGhvbGRzIHRoZSByZXN1bHRcbiAgICAvLyBpbiBhbiBlbXB0eSBrZXkuIElmIHRoZXJlIGlzIG5vdCBhIHJldml2ZXIgZnVuY3Rpb24sIHdlIHNpbXBseSByZXR1cm4gdGhlXG4gICAgLy8gcmVzdWx0LlxuXG4gICAgcmV0dXJuIHR5cGVvZiByZXZpdmVyID09PSAnZnVuY3Rpb24nXG4gICAgICA/IChmdW5jdGlvbiB3YWxrKGhvbGRlciwga2V5KSB7XG4gICAgICAgICAgdmFyIGssXG4gICAgICAgICAgICB2LFxuICAgICAgICAgICAgdmFsdWUgPSBob2xkZXJba2V5XTtcbiAgICAgICAgICBpZiAodmFsdWUgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgT2JqZWN0LmtleXModmFsdWUpLmZvckVhY2goZnVuY3Rpb24gKGspIHtcbiAgICAgICAgICAgICAgdiA9IHdhbGsodmFsdWUsIGspO1xuICAgICAgICAgICAgICBpZiAodiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgdmFsdWVba10gPSB2O1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGRlbGV0ZSB2YWx1ZVtrXTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiByZXZpdmVyLmNhbGwoaG9sZGVyLCBrZXksIHZhbHVlKTtcbiAgICAgICAgfSkoeyAnJzogcmVzdWx0IH0sICcnKVxuICAgICAgOiByZXN1bHQ7XG4gIH07XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGpzb25fcGFyc2U7XG4iLCJ2YXIgQmlnTnVtYmVyID0gcmVxdWlyZSgnYmlnbnVtYmVyLmpzJyk7XG5cbi8qXG4gICAganNvbjIuanNcbiAgICAyMDEzLTA1LTI2XG5cbiAgICBQdWJsaWMgRG9tYWluLlxuXG4gICAgTk8gV0FSUkFOVFkgRVhQUkVTU0VEIE9SIElNUExJRUQuIFVTRSBBVCBZT1VSIE9XTiBSSVNLLlxuXG4gICAgU2VlIGh0dHA6Ly93d3cuSlNPTi5vcmcvanMuaHRtbFxuXG5cbiAgICBUaGlzIGNvZGUgc2hvdWxkIGJlIG1pbmlmaWVkIGJlZm9yZSBkZXBsb3ltZW50LlxuICAgIFNlZSBodHRwOi8vamF2YXNjcmlwdC5jcm9ja2ZvcmQuY29tL2pzbWluLmh0bWxcblxuICAgIFVTRSBZT1VSIE9XTiBDT1BZLiBJVCBJUyBFWFRSRU1FTFkgVU5XSVNFIFRPIExPQUQgQ09ERSBGUk9NIFNFUlZFUlMgWU9VIERPXG4gICAgTk9UIENPTlRST0wuXG5cblxuICAgIFRoaXMgZmlsZSBjcmVhdGVzIGEgZ2xvYmFsIEpTT04gb2JqZWN0IGNvbnRhaW5pbmcgdHdvIG1ldGhvZHM6IHN0cmluZ2lmeVxuICAgIGFuZCBwYXJzZS5cblxuICAgICAgICBKU09OLnN0cmluZ2lmeSh2YWx1ZSwgcmVwbGFjZXIsIHNwYWNlKVxuICAgICAgICAgICAgdmFsdWUgICAgICAgYW55IEphdmFTY3JpcHQgdmFsdWUsIHVzdWFsbHkgYW4gb2JqZWN0IG9yIGFycmF5LlxuXG4gICAgICAgICAgICByZXBsYWNlciAgICBhbiBvcHRpb25hbCBwYXJhbWV0ZXIgdGhhdCBkZXRlcm1pbmVzIGhvdyBvYmplY3RcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlcyBhcmUgc3RyaW5naWZpZWQgZm9yIG9iamVjdHMuIEl0IGNhbiBiZSBhXG4gICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBvciBhbiBhcnJheSBvZiBzdHJpbmdzLlxuXG4gICAgICAgICAgICBzcGFjZSAgICAgICBhbiBvcHRpb25hbCBwYXJhbWV0ZXIgdGhhdCBzcGVjaWZpZXMgdGhlIGluZGVudGF0aW9uXG4gICAgICAgICAgICAgICAgICAgICAgICBvZiBuZXN0ZWQgc3RydWN0dXJlcy4gSWYgaXQgaXMgb21pdHRlZCwgdGhlIHRleHQgd2lsbFxuICAgICAgICAgICAgICAgICAgICAgICAgYmUgcGFja2VkIHdpdGhvdXQgZXh0cmEgd2hpdGVzcGFjZS4gSWYgaXQgaXMgYSBudW1iZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICBpdCB3aWxsIHNwZWNpZnkgdGhlIG51bWJlciBvZiBzcGFjZXMgdG8gaW5kZW50IGF0IGVhY2hcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldmVsLiBJZiBpdCBpcyBhIHN0cmluZyAoc3VjaCBhcyAnXFx0JyBvciAnJm5ic3A7JyksXG4gICAgICAgICAgICAgICAgICAgICAgICBpdCBjb250YWlucyB0aGUgY2hhcmFjdGVycyB1c2VkIHRvIGluZGVudCBhdCBlYWNoIGxldmVsLlxuXG4gICAgICAgICAgICBUaGlzIG1ldGhvZCBwcm9kdWNlcyBhIEpTT04gdGV4dCBmcm9tIGEgSmF2YVNjcmlwdCB2YWx1ZS5cblxuICAgICAgICAgICAgV2hlbiBhbiBvYmplY3QgdmFsdWUgaXMgZm91bmQsIGlmIHRoZSBvYmplY3QgY29udGFpbnMgYSB0b0pTT05cbiAgICAgICAgICAgIG1ldGhvZCwgaXRzIHRvSlNPTiBtZXRob2Qgd2lsbCBiZSBjYWxsZWQgYW5kIHRoZSByZXN1bHQgd2lsbCBiZVxuICAgICAgICAgICAgc3RyaW5naWZpZWQuIEEgdG9KU09OIG1ldGhvZCBkb2VzIG5vdCBzZXJpYWxpemU6IGl0IHJldHVybnMgdGhlXG4gICAgICAgICAgICB2YWx1ZSByZXByZXNlbnRlZCBieSB0aGUgbmFtZS92YWx1ZSBwYWlyIHRoYXQgc2hvdWxkIGJlIHNlcmlhbGl6ZWQsXG4gICAgICAgICAgICBvciB1bmRlZmluZWQgaWYgbm90aGluZyBzaG91bGQgYmUgc2VyaWFsaXplZC4gVGhlIHRvSlNPTiBtZXRob2RcbiAgICAgICAgICAgIHdpbGwgYmUgcGFzc2VkIHRoZSBrZXkgYXNzb2NpYXRlZCB3aXRoIHRoZSB2YWx1ZSwgYW5kIHRoaXMgd2lsbCBiZVxuICAgICAgICAgICAgYm91bmQgdG8gdGhlIHZhbHVlXG5cbiAgICAgICAgICAgIEZvciBleGFtcGxlLCB0aGlzIHdvdWxkIHNlcmlhbGl6ZSBEYXRlcyBhcyBJU08gc3RyaW5ncy5cblxuICAgICAgICAgICAgICAgIERhdGUucHJvdG90eXBlLnRvSlNPTiA9IGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gZihuKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBGb3JtYXQgaW50ZWdlcnMgdG8gaGF2ZSBhdCBsZWFzdCB0d28gZGlnaXRzLlxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG4gPCAxMCA/ICcwJyArIG4gOiBuO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0VVRDRnVsbFllYXIoKSAgICsgJy0nICtcbiAgICAgICAgICAgICAgICAgICAgICAgICBmKHRoaXMuZ2V0VVRDTW9udGgoKSArIDEpICsgJy0nICtcbiAgICAgICAgICAgICAgICAgICAgICAgICBmKHRoaXMuZ2V0VVRDRGF0ZSgpKSAgICAgICsgJ1QnICtcbiAgICAgICAgICAgICAgICAgICAgICAgICBmKHRoaXMuZ2V0VVRDSG91cnMoKSkgICAgICsgJzonICtcbiAgICAgICAgICAgICAgICAgICAgICAgICBmKHRoaXMuZ2V0VVRDTWludXRlcygpKSAgICsgJzonICtcbiAgICAgICAgICAgICAgICAgICAgICAgICBmKHRoaXMuZ2V0VVRDU2Vjb25kcygpKSAgICsgJ1onO1xuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIFlvdSBjYW4gcHJvdmlkZSBhbiBvcHRpb25hbCByZXBsYWNlciBtZXRob2QuIEl0IHdpbGwgYmUgcGFzc2VkIHRoZVxuICAgICAgICAgICAga2V5IGFuZCB2YWx1ZSBvZiBlYWNoIG1lbWJlciwgd2l0aCB0aGlzIGJvdW5kIHRvIHRoZSBjb250YWluaW5nXG4gICAgICAgICAgICBvYmplY3QuIFRoZSB2YWx1ZSB0aGF0IGlzIHJldHVybmVkIGZyb20geW91ciBtZXRob2Qgd2lsbCBiZVxuICAgICAgICAgICAgc2VyaWFsaXplZC4gSWYgeW91ciBtZXRob2QgcmV0dXJucyB1bmRlZmluZWQsIHRoZW4gdGhlIG1lbWJlciB3aWxsXG4gICAgICAgICAgICBiZSBleGNsdWRlZCBmcm9tIHRoZSBzZXJpYWxpemF0aW9uLlxuXG4gICAgICAgICAgICBJZiB0aGUgcmVwbGFjZXIgcGFyYW1ldGVyIGlzIGFuIGFycmF5IG9mIHN0cmluZ3MsIHRoZW4gaXQgd2lsbCBiZVxuICAgICAgICAgICAgdXNlZCB0byBzZWxlY3QgdGhlIG1lbWJlcnMgdG8gYmUgc2VyaWFsaXplZC4gSXQgZmlsdGVycyB0aGUgcmVzdWx0c1xuICAgICAgICAgICAgc3VjaCB0aGF0IG9ubHkgbWVtYmVycyB3aXRoIGtleXMgbGlzdGVkIGluIHRoZSByZXBsYWNlciBhcnJheSBhcmVcbiAgICAgICAgICAgIHN0cmluZ2lmaWVkLlxuXG4gICAgICAgICAgICBWYWx1ZXMgdGhhdCBkbyBub3QgaGF2ZSBKU09OIHJlcHJlc2VudGF0aW9ucywgc3VjaCBhcyB1bmRlZmluZWQgb3JcbiAgICAgICAgICAgIGZ1bmN0aW9ucywgd2lsbCBub3QgYmUgc2VyaWFsaXplZC4gU3VjaCB2YWx1ZXMgaW4gb2JqZWN0cyB3aWxsIGJlXG4gICAgICAgICAgICBkcm9wcGVkOyBpbiBhcnJheXMgdGhleSB3aWxsIGJlIHJlcGxhY2VkIHdpdGggbnVsbC4gWW91IGNhbiB1c2VcbiAgICAgICAgICAgIGEgcmVwbGFjZXIgZnVuY3Rpb24gdG8gcmVwbGFjZSB0aG9zZSB3aXRoIEpTT04gdmFsdWVzLlxuICAgICAgICAgICAgSlNPTi5zdHJpbmdpZnkodW5kZWZpbmVkKSByZXR1cm5zIHVuZGVmaW5lZC5cblxuICAgICAgICAgICAgVGhlIG9wdGlvbmFsIHNwYWNlIHBhcmFtZXRlciBwcm9kdWNlcyBhIHN0cmluZ2lmaWNhdGlvbiBvZiB0aGVcbiAgICAgICAgICAgIHZhbHVlIHRoYXQgaXMgZmlsbGVkIHdpdGggbGluZSBicmVha3MgYW5kIGluZGVudGF0aW9uIHRvIG1ha2UgaXRcbiAgICAgICAgICAgIGVhc2llciB0byByZWFkLlxuXG4gICAgICAgICAgICBJZiB0aGUgc3BhY2UgcGFyYW1ldGVyIGlzIGEgbm9uLWVtcHR5IHN0cmluZywgdGhlbiB0aGF0IHN0cmluZyB3aWxsXG4gICAgICAgICAgICBiZSB1c2VkIGZvciBpbmRlbnRhdGlvbi4gSWYgdGhlIHNwYWNlIHBhcmFtZXRlciBpcyBhIG51bWJlciwgdGhlblxuICAgICAgICAgICAgdGhlIGluZGVudGF0aW9uIHdpbGwgYmUgdGhhdCBtYW55IHNwYWNlcy5cblxuICAgICAgICAgICAgRXhhbXBsZTpcblxuICAgICAgICAgICAgdGV4dCA9IEpTT04uc3RyaW5naWZ5KFsnZScsIHtwbHVyaWJ1czogJ3VudW0nfV0pO1xuICAgICAgICAgICAgLy8gdGV4dCBpcyAnW1wiZVwiLHtcInBsdXJpYnVzXCI6XCJ1bnVtXCJ9XSdcblxuXG4gICAgICAgICAgICB0ZXh0ID0gSlNPTi5zdHJpbmdpZnkoWydlJywge3BsdXJpYnVzOiAndW51bSd9XSwgbnVsbCwgJ1xcdCcpO1xuICAgICAgICAgICAgLy8gdGV4dCBpcyAnW1xcblxcdFwiZVwiLFxcblxcdHtcXG5cXHRcXHRcInBsdXJpYnVzXCI6IFwidW51bVwiXFxuXFx0fVxcbl0nXG5cbiAgICAgICAgICAgIHRleHQgPSBKU09OLnN0cmluZ2lmeShbbmV3IERhdGUoKV0sIGZ1bmN0aW9uIChrZXksIHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXNba2V5XSBpbnN0YW5jZW9mIERhdGUgP1xuICAgICAgICAgICAgICAgICAgICAnRGF0ZSgnICsgdGhpc1trZXldICsgJyknIDogdmFsdWU7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIC8vIHRleHQgaXMgJ1tcIkRhdGUoLS0tY3VycmVudCB0aW1lLS0tKVwiXSdcblxuXG4gICAgICAgIEpTT04ucGFyc2UodGV4dCwgcmV2aXZlcilcbiAgICAgICAgICAgIFRoaXMgbWV0aG9kIHBhcnNlcyBhIEpTT04gdGV4dCB0byBwcm9kdWNlIGFuIG9iamVjdCBvciBhcnJheS5cbiAgICAgICAgICAgIEl0IGNhbiB0aHJvdyBhIFN5bnRheEVycm9yIGV4Y2VwdGlvbi5cblxuICAgICAgICAgICAgVGhlIG9wdGlvbmFsIHJldml2ZXIgcGFyYW1ldGVyIGlzIGEgZnVuY3Rpb24gdGhhdCBjYW4gZmlsdGVyIGFuZFxuICAgICAgICAgICAgdHJhbnNmb3JtIHRoZSByZXN1bHRzLiBJdCByZWNlaXZlcyBlYWNoIG9mIHRoZSBrZXlzIGFuZCB2YWx1ZXMsXG4gICAgICAgICAgICBhbmQgaXRzIHJldHVybiB2YWx1ZSBpcyB1c2VkIGluc3RlYWQgb2YgdGhlIG9yaWdpbmFsIHZhbHVlLlxuICAgICAgICAgICAgSWYgaXQgcmV0dXJucyB3aGF0IGl0IHJlY2VpdmVkLCB0aGVuIHRoZSBzdHJ1Y3R1cmUgaXMgbm90IG1vZGlmaWVkLlxuICAgICAgICAgICAgSWYgaXQgcmV0dXJucyB1bmRlZmluZWQgdGhlbiB0aGUgbWVtYmVyIGlzIGRlbGV0ZWQuXG5cbiAgICAgICAgICAgIEV4YW1wbGU6XG5cbiAgICAgICAgICAgIC8vIFBhcnNlIHRoZSB0ZXh0LiBWYWx1ZXMgdGhhdCBsb29rIGxpa2UgSVNPIGRhdGUgc3RyaW5ncyB3aWxsXG4gICAgICAgICAgICAvLyBiZSBjb252ZXJ0ZWQgdG8gRGF0ZSBvYmplY3RzLlxuXG4gICAgICAgICAgICBteURhdGEgPSBKU09OLnBhcnNlKHRleHQsIGZ1bmN0aW9uIChrZXksIHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgdmFyIGE7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICAgICAgYSA9XG4vXihcXGR7NH0pLShcXGR7Mn0pLShcXGR7Mn0pVChcXGR7Mn0pOihcXGR7Mn0pOihcXGR7Mn0oPzpcXC5cXGQqKT8pWiQvLmV4ZWModmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoYSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBEYXRlKERhdGUuVVRDKCthWzFdLCArYVsyXSAtIDEsICthWzNdLCArYVs0XSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICArYVs1XSwgK2FbNl0pKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgbXlEYXRhID0gSlNPTi5wYXJzZSgnW1wiRGF0ZSgwOS8wOS8yMDAxKVwiXScsIGZ1bmN0aW9uIChrZXksIHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgdmFyIGQ7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlLnNsaWNlKDAsIDUpID09PSAnRGF0ZSgnICYmXG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZS5zbGljZSgtMSkgPT09ICcpJykge1xuICAgICAgICAgICAgICAgICAgICBkID0gbmV3IERhdGUodmFsdWUuc2xpY2UoNSwgLTEpKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBkO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgICAgIH0pO1xuXG5cbiAgICBUaGlzIGlzIGEgcmVmZXJlbmNlIGltcGxlbWVudGF0aW9uLiBZb3UgYXJlIGZyZWUgdG8gY29weSwgbW9kaWZ5LCBvclxuICAgIHJlZGlzdHJpYnV0ZS5cbiovXG5cbi8qanNsaW50IGV2aWw6IHRydWUsIHJlZ2V4cDogdHJ1ZSAqL1xuXG4vKm1lbWJlcnMgXCJcIiwgXCJcXGJcIiwgXCJcXHRcIiwgXCJcXG5cIiwgXCJcXGZcIiwgXCJcXHJcIiwgXCJcXFwiXCIsIEpTT04sIFwiXFxcXFwiLCBhcHBseSxcbiAgICBjYWxsLCBjaGFyQ29kZUF0LCBnZXRVVENEYXRlLCBnZXRVVENGdWxsWWVhciwgZ2V0VVRDSG91cnMsXG4gICAgZ2V0VVRDTWludXRlcywgZ2V0VVRDTW9udGgsIGdldFVUQ1NlY29uZHMsIGhhc093blByb3BlcnR5LCBqb2luLFxuICAgIGxhc3RJbmRleCwgbGVuZ3RoLCBwYXJzZSwgcHJvdG90eXBlLCBwdXNoLCByZXBsYWNlLCBzbGljZSwgc3RyaW5naWZ5LFxuICAgIHRlc3QsIHRvSlNPTiwgdG9TdHJpbmcsIHZhbHVlT2ZcbiovXG5cblxuLy8gQ3JlYXRlIGEgSlNPTiBvYmplY3Qgb25seSBpZiBvbmUgZG9lcyBub3QgYWxyZWFkeSBleGlzdC4gV2UgY3JlYXRlIHRoZVxuLy8gbWV0aG9kcyBpbiBhIGNsb3N1cmUgdG8gYXZvaWQgY3JlYXRpbmcgZ2xvYmFsIHZhcmlhYmxlcy5cblxudmFyIEpTT04gPSBtb2R1bGUuZXhwb3J0cztcblxuKGZ1bmN0aW9uICgpIHtcbiAgICAndXNlIHN0cmljdCc7XG5cbiAgICBmdW5jdGlvbiBmKG4pIHtcbiAgICAgICAgLy8gRm9ybWF0IGludGVnZXJzIHRvIGhhdmUgYXQgbGVhc3QgdHdvIGRpZ2l0cy5cbiAgICAgICAgcmV0dXJuIG4gPCAxMCA/ICcwJyArIG4gOiBuO1xuICAgIH1cblxuICAgIHZhciBjeCA9IC9bXFx1MDAwMFxcdTAwYWRcXHUwNjAwLVxcdTA2MDRcXHUwNzBmXFx1MTdiNFxcdTE3YjVcXHUyMDBjLVxcdTIwMGZcXHUyMDI4LVxcdTIwMmZcXHUyMDYwLVxcdTIwNmZcXHVmZWZmXFx1ZmZmMC1cXHVmZmZmXS9nLFxuICAgICAgICBlc2NhcGFibGUgPSAvW1xcXFxcXFwiXFx4MDAtXFx4MWZcXHg3Zi1cXHg5ZlxcdTAwYWRcXHUwNjAwLVxcdTA2MDRcXHUwNzBmXFx1MTdiNFxcdTE3YjVcXHUyMDBjLVxcdTIwMGZcXHUyMDI4LVxcdTIwMmZcXHUyMDYwLVxcdTIwNmZcXHVmZWZmXFx1ZmZmMC1cXHVmZmZmXS9nLFxuICAgICAgICBnYXAsXG4gICAgICAgIGluZGVudCxcbiAgICAgICAgbWV0YSA9IHsgICAgLy8gdGFibGUgb2YgY2hhcmFjdGVyIHN1YnN0aXR1dGlvbnNcbiAgICAgICAgICAgICdcXGInOiAnXFxcXGInLFxuICAgICAgICAgICAgJ1xcdCc6ICdcXFxcdCcsXG4gICAgICAgICAgICAnXFxuJzogJ1xcXFxuJyxcbiAgICAgICAgICAgICdcXGYnOiAnXFxcXGYnLFxuICAgICAgICAgICAgJ1xccic6ICdcXFxccicsXG4gICAgICAgICAgICAnXCInIDogJ1xcXFxcIicsXG4gICAgICAgICAgICAnXFxcXCc6ICdcXFxcXFxcXCdcbiAgICAgICAgfSxcbiAgICAgICAgcmVwO1xuXG5cbiAgICBmdW5jdGlvbiBxdW90ZShzdHJpbmcpIHtcblxuLy8gSWYgdGhlIHN0cmluZyBjb250YWlucyBubyBjb250cm9sIGNoYXJhY3RlcnMsIG5vIHF1b3RlIGNoYXJhY3RlcnMsIGFuZCBub1xuLy8gYmFja3NsYXNoIGNoYXJhY3RlcnMsIHRoZW4gd2UgY2FuIHNhZmVseSBzbGFwIHNvbWUgcXVvdGVzIGFyb3VuZCBpdC5cbi8vIE90aGVyd2lzZSB3ZSBtdXN0IGFsc28gcmVwbGFjZSB0aGUgb2ZmZW5kaW5nIGNoYXJhY3RlcnMgd2l0aCBzYWZlIGVzY2FwZVxuLy8gc2VxdWVuY2VzLlxuXG4gICAgICAgIGVzY2FwYWJsZS5sYXN0SW5kZXggPSAwO1xuICAgICAgICByZXR1cm4gZXNjYXBhYmxlLnRlc3Qoc3RyaW5nKSA/ICdcIicgKyBzdHJpbmcucmVwbGFjZShlc2NhcGFibGUsIGZ1bmN0aW9uIChhKSB7XG4gICAgICAgICAgICB2YXIgYyA9IG1ldGFbYV07XG4gICAgICAgICAgICByZXR1cm4gdHlwZW9mIGMgPT09ICdzdHJpbmcnXG4gICAgICAgICAgICAgICAgPyBjXG4gICAgICAgICAgICAgICAgOiAnXFxcXHUnICsgKCcwMDAwJyArIGEuY2hhckNvZGVBdCgwKS50b1N0cmluZygxNikpLnNsaWNlKC00KTtcbiAgICAgICAgfSkgKyAnXCInIDogJ1wiJyArIHN0cmluZyArICdcIic7XG4gICAgfVxuXG5cbiAgICBmdW5jdGlvbiBzdHIoa2V5LCBob2xkZXIpIHtcblxuLy8gUHJvZHVjZSBhIHN0cmluZyBmcm9tIGhvbGRlcltrZXldLlxuXG4gICAgICAgIHZhciBpLCAgICAgICAgICAvLyBUaGUgbG9vcCBjb3VudGVyLlxuICAgICAgICAgICAgaywgICAgICAgICAgLy8gVGhlIG1lbWJlciBrZXkuXG4gICAgICAgICAgICB2LCAgICAgICAgICAvLyBUaGUgbWVtYmVyIHZhbHVlLlxuICAgICAgICAgICAgbGVuZ3RoLFxuICAgICAgICAgICAgbWluZCA9IGdhcCxcbiAgICAgICAgICAgIHBhcnRpYWwsXG4gICAgICAgICAgICB2YWx1ZSA9IGhvbGRlcltrZXldLFxuICAgICAgICAgICAgaXNCaWdOdW1iZXIgPSB2YWx1ZSAhPSBudWxsICYmICh2YWx1ZSBpbnN0YW5jZW9mIEJpZ051bWJlciB8fCBCaWdOdW1iZXIuaXNCaWdOdW1iZXIodmFsdWUpKTtcblxuLy8gSWYgdGhlIHZhbHVlIGhhcyBhIHRvSlNPTiBtZXRob2QsIGNhbGwgaXQgdG8gb2J0YWluIGEgcmVwbGFjZW1lbnQgdmFsdWUuXG5cbiAgICAgICAgaWYgKHZhbHVlICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiZcbiAgICAgICAgICAgICAgICB0eXBlb2YgdmFsdWUudG9KU09OID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICB2YWx1ZSA9IHZhbHVlLnRvSlNPTihrZXkpO1xuICAgICAgICB9XG5cbi8vIElmIHdlIHdlcmUgY2FsbGVkIHdpdGggYSByZXBsYWNlciBmdW5jdGlvbiwgdGhlbiBjYWxsIHRoZSByZXBsYWNlciB0b1xuLy8gb2J0YWluIGEgcmVwbGFjZW1lbnQgdmFsdWUuXG5cbiAgICAgICAgaWYgKHR5cGVvZiByZXAgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHZhbHVlID0gcmVwLmNhbGwoaG9sZGVyLCBrZXksIHZhbHVlKTtcbiAgICAgICAgfVxuXG4vLyBXaGF0IGhhcHBlbnMgbmV4dCBkZXBlbmRzIG9uIHRoZSB2YWx1ZSdzIHR5cGUuXG5cbiAgICAgICAgc3dpdGNoICh0eXBlb2YgdmFsdWUpIHtcbiAgICAgICAgY2FzZSAnc3RyaW5nJzpcbiAgICAgICAgICAgIGlmIChpc0JpZ051bWJlcikge1xuICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHF1b3RlKHZhbHVlKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICBjYXNlICdudW1iZXInOlxuXG4vLyBKU09OIG51bWJlcnMgbXVzdCBiZSBmaW5pdGUuIEVuY29kZSBub24tZmluaXRlIG51bWJlcnMgYXMgbnVsbC5cblxuICAgICAgICAgICAgcmV0dXJuIGlzRmluaXRlKHZhbHVlKSA/IFN0cmluZyh2YWx1ZSkgOiAnbnVsbCc7XG5cbiAgICAgICAgY2FzZSAnYm9vbGVhbic6XG4gICAgICAgIGNhc2UgJ251bGwnOlxuICAgICAgICBjYXNlICdiaWdpbnQnOlxuXG4vLyBJZiB0aGUgdmFsdWUgaXMgYSBib29sZWFuIG9yIG51bGwsIGNvbnZlcnQgaXQgdG8gYSBzdHJpbmcuIE5vdGU6XG4vLyB0eXBlb2YgbnVsbCBkb2VzIG5vdCBwcm9kdWNlICdudWxsJy4gVGhlIGNhc2UgaXMgaW5jbHVkZWQgaGVyZSBpblxuLy8gdGhlIHJlbW90ZSBjaGFuY2UgdGhhdCB0aGlzIGdldHMgZml4ZWQgc29tZWRheS5cblxuICAgICAgICAgICAgcmV0dXJuIFN0cmluZyh2YWx1ZSk7XG5cbi8vIElmIHRoZSB0eXBlIGlzICdvYmplY3QnLCB3ZSBtaWdodCBiZSBkZWFsaW5nIHdpdGggYW4gb2JqZWN0IG9yIGFuIGFycmF5IG9yXG4vLyBudWxsLlxuXG4gICAgICAgIGNhc2UgJ29iamVjdCc6XG5cbi8vIER1ZSB0byBhIHNwZWNpZmljYXRpb24gYmx1bmRlciBpbiBFQ01BU2NyaXB0LCB0eXBlb2YgbnVsbCBpcyAnb2JqZWN0Jyxcbi8vIHNvIHdhdGNoIG91dCBmb3IgdGhhdCBjYXNlLlxuXG4gICAgICAgICAgICBpZiAoIXZhbHVlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICdudWxsJztcbiAgICAgICAgICAgIH1cblxuLy8gTWFrZSBhbiBhcnJheSB0byBob2xkIHRoZSBwYXJ0aWFsIHJlc3VsdHMgb2Ygc3RyaW5naWZ5aW5nIHRoaXMgb2JqZWN0IHZhbHVlLlxuXG4gICAgICAgICAgICBnYXAgKz0gaW5kZW50O1xuICAgICAgICAgICAgcGFydGlhbCA9IFtdO1xuXG4vLyBJcyB0aGUgdmFsdWUgYW4gYXJyYXk/XG5cbiAgICAgICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmFwcGx5KHZhbHVlKSA9PT0gJ1tvYmplY3QgQXJyYXldJykge1xuXG4vLyBUaGUgdmFsdWUgaXMgYW4gYXJyYXkuIFN0cmluZ2lmeSBldmVyeSBlbGVtZW50LiBVc2UgbnVsbCBhcyBhIHBsYWNlaG9sZGVyXG4vLyBmb3Igbm9uLUpTT04gdmFsdWVzLlxuXG4gICAgICAgICAgICAgICAgbGVuZ3RoID0gdmFsdWUubGVuZ3RoO1xuICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBsZW5ndGg7IGkgKz0gMSkge1xuICAgICAgICAgICAgICAgICAgICBwYXJ0aWFsW2ldID0gc3RyKGksIHZhbHVlKSB8fCAnbnVsbCc7XG4gICAgICAgICAgICAgICAgfVxuXG4vLyBKb2luIGFsbCBvZiB0aGUgZWxlbWVudHMgdG9nZXRoZXIsIHNlcGFyYXRlZCB3aXRoIGNvbW1hcywgYW5kIHdyYXAgdGhlbSBpblxuLy8gYnJhY2tldHMuXG5cbiAgICAgICAgICAgICAgICB2ID0gcGFydGlhbC5sZW5ndGggPT09IDBcbiAgICAgICAgICAgICAgICAgICAgPyAnW10nXG4gICAgICAgICAgICAgICAgICAgIDogZ2FwXG4gICAgICAgICAgICAgICAgICAgID8gJ1tcXG4nICsgZ2FwICsgcGFydGlhbC5qb2luKCcsXFxuJyArIGdhcCkgKyAnXFxuJyArIG1pbmQgKyAnXSdcbiAgICAgICAgICAgICAgICAgICAgOiAnWycgKyBwYXJ0aWFsLmpvaW4oJywnKSArICddJztcbiAgICAgICAgICAgICAgICBnYXAgPSBtaW5kO1xuICAgICAgICAgICAgICAgIHJldHVybiB2O1xuICAgICAgICAgICAgfVxuXG4vLyBJZiB0aGUgcmVwbGFjZXIgaXMgYW4gYXJyYXksIHVzZSBpdCB0byBzZWxlY3QgdGhlIG1lbWJlcnMgdG8gYmUgc3RyaW5naWZpZWQuXG5cbiAgICAgICAgICAgIGlmIChyZXAgJiYgdHlwZW9mIHJlcCA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgICAgICBsZW5ndGggPSByZXAubGVuZ3RoO1xuICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBsZW5ndGg7IGkgKz0gMSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHJlcFtpXSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGsgPSByZXBbaV07XG4gICAgICAgICAgICAgICAgICAgICAgICB2ID0gc3RyKGssIHZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFydGlhbC5wdXNoKHF1b3RlKGspICsgKGdhcCA/ICc6ICcgOiAnOicpICsgdik7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuXG4vLyBPdGhlcndpc2UsIGl0ZXJhdGUgdGhyb3VnaCBhbGwgb2YgdGhlIGtleXMgaW4gdGhlIG9iamVjdC5cblxuICAgICAgICAgICAgICAgIE9iamVjdC5rZXlzKHZhbHVlKS5mb3JFYWNoKGZ1bmN0aW9uKGspIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHYgPSBzdHIoaywgdmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICBpZiAodikge1xuICAgICAgICAgICAgICAgICAgICAgICAgcGFydGlhbC5wdXNoKHF1b3RlKGspICsgKGdhcCA/ICc6ICcgOiAnOicpICsgdik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cblxuLy8gSm9pbiBhbGwgb2YgdGhlIG1lbWJlciB0ZXh0cyB0b2dldGhlciwgc2VwYXJhdGVkIHdpdGggY29tbWFzLFxuLy8gYW5kIHdyYXAgdGhlbSBpbiBicmFjZXMuXG5cbiAgICAgICAgICAgIHYgPSBwYXJ0aWFsLmxlbmd0aCA9PT0gMFxuICAgICAgICAgICAgICAgID8gJ3t9J1xuICAgICAgICAgICAgICAgIDogZ2FwXG4gICAgICAgICAgICAgICAgPyAne1xcbicgKyBnYXAgKyBwYXJ0aWFsLmpvaW4oJyxcXG4nICsgZ2FwKSArICdcXG4nICsgbWluZCArICd9J1xuICAgICAgICAgICAgICAgIDogJ3snICsgcGFydGlhbC5qb2luKCcsJykgKyAnfSc7XG4gICAgICAgICAgICBnYXAgPSBtaW5kO1xuICAgICAgICAgICAgcmV0dXJuIHY7XG4gICAgICAgIH1cbiAgICB9XG5cbi8vIElmIHRoZSBKU09OIG9iamVjdCBkb2VzIG5vdCB5ZXQgaGF2ZSBhIHN0cmluZ2lmeSBtZXRob2QsIGdpdmUgaXQgb25lLlxuXG4gICAgaWYgKHR5cGVvZiBKU09OLnN0cmluZ2lmeSAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBKU09OLnN0cmluZ2lmeSA9IGZ1bmN0aW9uICh2YWx1ZSwgcmVwbGFjZXIsIHNwYWNlKSB7XG5cbi8vIFRoZSBzdHJpbmdpZnkgbWV0aG9kIHRha2VzIGEgdmFsdWUgYW5kIGFuIG9wdGlvbmFsIHJlcGxhY2VyLCBhbmQgYW4gb3B0aW9uYWxcbi8vIHNwYWNlIHBhcmFtZXRlciwgYW5kIHJldHVybnMgYSBKU09OIHRleHQuIFRoZSByZXBsYWNlciBjYW4gYmUgYSBmdW5jdGlvblxuLy8gdGhhdCBjYW4gcmVwbGFjZSB2YWx1ZXMsIG9yIGFuIGFycmF5IG9mIHN0cmluZ3MgdGhhdCB3aWxsIHNlbGVjdCB0aGUga2V5cy5cbi8vIEEgZGVmYXVsdCByZXBsYWNlciBtZXRob2QgY2FuIGJlIHByb3ZpZGVkLiBVc2Ugb2YgdGhlIHNwYWNlIHBhcmFtZXRlciBjYW5cbi8vIHByb2R1Y2UgdGV4dCB0aGF0IGlzIG1vcmUgZWFzaWx5IHJlYWRhYmxlLlxuXG4gICAgICAgICAgICB2YXIgaTtcbiAgICAgICAgICAgIGdhcCA9ICcnO1xuICAgICAgICAgICAgaW5kZW50ID0gJyc7XG5cbi8vIElmIHRoZSBzcGFjZSBwYXJhbWV0ZXIgaXMgYSBudW1iZXIsIG1ha2UgYW4gaW5kZW50IHN0cmluZyBjb250YWluaW5nIHRoYXRcbi8vIG1hbnkgc3BhY2VzLlxuXG4gICAgICAgICAgICBpZiAodHlwZW9mIHNwYWNlID09PSAnbnVtYmVyJykge1xuICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBzcGFjZTsgaSArPSAxKSB7XG4gICAgICAgICAgICAgICAgICAgIGluZGVudCArPSAnICc7XG4gICAgICAgICAgICAgICAgfVxuXG4vLyBJZiB0aGUgc3BhY2UgcGFyYW1ldGVyIGlzIGEgc3RyaW5nLCBpdCB3aWxsIGJlIHVzZWQgYXMgdGhlIGluZGVudCBzdHJpbmcuXG5cbiAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHNwYWNlID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgIGluZGVudCA9IHNwYWNlO1xuICAgICAgICAgICAgfVxuXG4vLyBJZiB0aGVyZSBpcyBhIHJlcGxhY2VyLCBpdCBtdXN0IGJlIGEgZnVuY3Rpb24gb3IgYW4gYXJyYXkuXG4vLyBPdGhlcndpc2UsIHRocm93IGFuIGVycm9yLlxuXG4gICAgICAgICAgICByZXAgPSByZXBsYWNlcjtcbiAgICAgICAgICAgIGlmIChyZXBsYWNlciAmJiB0eXBlb2YgcmVwbGFjZXIgIT09ICdmdW5jdGlvbicgJiZcbiAgICAgICAgICAgICAgICAgICAgKHR5cGVvZiByZXBsYWNlciAhPT0gJ29iamVjdCcgfHxcbiAgICAgICAgICAgICAgICAgICAgdHlwZW9mIHJlcGxhY2VyLmxlbmd0aCAhPT0gJ251bWJlcicpKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdKU09OLnN0cmluZ2lmeScpO1xuICAgICAgICAgICAgfVxuXG4vLyBNYWtlIGEgZmFrZSByb290IG9iamVjdCBjb250YWluaW5nIG91ciB2YWx1ZSB1bmRlciB0aGUga2V5IG9mICcnLlxuLy8gUmV0dXJuIHRoZSByZXN1bHQgb2Ygc3RyaW5naWZ5aW5nIHRoZSB2YWx1ZS5cblxuICAgICAgICAgICAgcmV0dXJuIHN0cignJywgeycnOiB2YWx1ZX0pO1xuICAgICAgICB9O1xuICAgIH1cbn0oKSk7XG4iLCIvKiFcbiAqIG1pbWUtZGJcbiAqIENvcHlyaWdodChjKSAyMDE0IEpvbmF0aGFuIE9uZ1xuICogQ29weXJpZ2h0KGMpIDIwMTUtMjAyMiBEb3VnbGFzIENocmlzdG9waGVyIFdpbHNvblxuICogTUlUIExpY2Vuc2VkXG4gKi9cblxuLyoqXG4gKiBNb2R1bGUgZXhwb3J0cy5cbiAqL1xuXG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vZGIuanNvbicpXG4iLCIvKiFcbiAqIG1pbWUtdHlwZXNcbiAqIENvcHlyaWdodChjKSAyMDE0IEpvbmF0aGFuIE9uZ1xuICogQ29weXJpZ2h0KGMpIDIwMTUgRG91Z2xhcyBDaHJpc3RvcGhlciBXaWxzb25cbiAqIE1JVCBMaWNlbnNlZFxuICovXG5cbid1c2Ugc3RyaWN0J1xuXG4vKipcbiAqIE1vZHVsZSBkZXBlbmRlbmNpZXMuXG4gKiBAcHJpdmF0ZVxuICovXG5cbnZhciBkYiA9IHJlcXVpcmUoJ21pbWUtZGInKVxudmFyIGV4dG5hbWUgPSByZXF1aXJlKCdwYXRoJykuZXh0bmFtZVxuXG4vKipcbiAqIE1vZHVsZSB2YXJpYWJsZXMuXG4gKiBAcHJpdmF0ZVxuICovXG5cbnZhciBFWFRSQUNUX1RZUEVfUkVHRVhQID0gL15cXHMqKFteO1xcc10qKSg/Ojt8XFxzfCQpL1xudmFyIFRFWFRfVFlQRV9SRUdFWFAgPSAvXnRleHRcXC8vaVxuXG4vKipcbiAqIE1vZHVsZSBleHBvcnRzLlxuICogQHB1YmxpY1xuICovXG5cbmV4cG9ydHMuY2hhcnNldCA9IGNoYXJzZXRcbmV4cG9ydHMuY2hhcnNldHMgPSB7IGxvb2t1cDogY2hhcnNldCB9XG5leHBvcnRzLmNvbnRlbnRUeXBlID0gY29udGVudFR5cGVcbmV4cG9ydHMuZXh0ZW5zaW9uID0gZXh0ZW5zaW9uXG5leHBvcnRzLmV4dGVuc2lvbnMgPSBPYmplY3QuY3JlYXRlKG51bGwpXG5leHBvcnRzLmxvb2t1cCA9IGxvb2t1cFxuZXhwb3J0cy50eXBlcyA9IE9iamVjdC5jcmVhdGUobnVsbClcblxuLy8gUG9wdWxhdGUgdGhlIGV4dGVuc2lvbnMvdHlwZXMgbWFwc1xucG9wdWxhdGVNYXBzKGV4cG9ydHMuZXh0ZW5zaW9ucywgZXhwb3J0cy50eXBlcylcblxuLyoqXG4gKiBHZXQgdGhlIGRlZmF1bHQgY2hhcnNldCBmb3IgYSBNSU1FIHR5cGUuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHR5cGVcbiAqIEByZXR1cm4ge2Jvb2xlYW58c3RyaW5nfVxuICovXG5cbmZ1bmN0aW9uIGNoYXJzZXQgKHR5cGUpIHtcbiAgaWYgKCF0eXBlIHx8IHR5cGVvZiB0eXBlICE9PSAnc3RyaW5nJykge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgLy8gVE9ETzogdXNlIG1lZGlhLXR5cGVyXG4gIHZhciBtYXRjaCA9IEVYVFJBQ1RfVFlQRV9SRUdFWFAuZXhlYyh0eXBlKVxuICB2YXIgbWltZSA9IG1hdGNoICYmIGRiW21hdGNoWzFdLnRvTG93ZXJDYXNlKCldXG5cbiAgaWYgKG1pbWUgJiYgbWltZS5jaGFyc2V0KSB7XG4gICAgcmV0dXJuIG1pbWUuY2hhcnNldFxuICB9XG5cbiAgLy8gZGVmYXVsdCB0ZXh0LyogdG8gdXRmLThcbiAgaWYgKG1hdGNoICYmIFRFWFRfVFlQRV9SRUdFWFAudGVzdChtYXRjaFsxXSkpIHtcbiAgICByZXR1cm4gJ1VURi04J1xuICB9XG5cbiAgcmV0dXJuIGZhbHNlXG59XG5cbi8qKlxuICogQ3JlYXRlIGEgZnVsbCBDb250ZW50LVR5cGUgaGVhZGVyIGdpdmVuIGEgTUlNRSB0eXBlIG9yIGV4dGVuc2lvbi5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gc3RyXG4gKiBAcmV0dXJuIHtib29sZWFufHN0cmluZ31cbiAqL1xuXG5mdW5jdGlvbiBjb250ZW50VHlwZSAoc3RyKSB7XG4gIC8vIFRPRE86IHNob3VsZCB0aGlzIGV2ZW4gYmUgaW4gdGhpcyBtb2R1bGU/XG4gIGlmICghc3RyIHx8IHR5cGVvZiBzdHIgIT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICB2YXIgbWltZSA9IHN0ci5pbmRleE9mKCcvJykgPT09IC0xXG4gICAgPyBleHBvcnRzLmxvb2t1cChzdHIpXG4gICAgOiBzdHJcblxuICBpZiAoIW1pbWUpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIC8vIFRPRE86IHVzZSBjb250ZW50LXR5cGUgb3Igb3RoZXIgbW9kdWxlXG4gIGlmIChtaW1lLmluZGV4T2YoJ2NoYXJzZXQnKSA9PT0gLTEpIHtcbiAgICB2YXIgY2hhcnNldCA9IGV4cG9ydHMuY2hhcnNldChtaW1lKVxuICAgIGlmIChjaGFyc2V0KSBtaW1lICs9ICc7IGNoYXJzZXQ9JyArIGNoYXJzZXQudG9Mb3dlckNhc2UoKVxuICB9XG5cbiAgcmV0dXJuIG1pbWVcbn1cblxuLyoqXG4gKiBHZXQgdGhlIGRlZmF1bHQgZXh0ZW5zaW9uIGZvciBhIE1JTUUgdHlwZS5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gdHlwZVxuICogQHJldHVybiB7Ym9vbGVhbnxzdHJpbmd9XG4gKi9cblxuZnVuY3Rpb24gZXh0ZW5zaW9uICh0eXBlKSB7XG4gIGlmICghdHlwZSB8fCB0eXBlb2YgdHlwZSAhPT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIC8vIFRPRE86IHVzZSBtZWRpYS10eXBlclxuICB2YXIgbWF0Y2ggPSBFWFRSQUNUX1RZUEVfUkVHRVhQLmV4ZWModHlwZSlcblxuICAvLyBnZXQgZXh0ZW5zaW9uc1xuICB2YXIgZXh0cyA9IG1hdGNoICYmIGV4cG9ydHMuZXh0ZW5zaW9uc1ttYXRjaFsxXS50b0xvd2VyQ2FzZSgpXVxuXG4gIGlmICghZXh0cyB8fCAhZXh0cy5sZW5ndGgpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIHJldHVybiBleHRzWzBdXG59XG5cbi8qKlxuICogTG9va3VwIHRoZSBNSU1FIHR5cGUgZm9yIGEgZmlsZSBwYXRoL2V4dGVuc2lvbi5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gcGF0aFxuICogQHJldHVybiB7Ym9vbGVhbnxzdHJpbmd9XG4gKi9cblxuZnVuY3Rpb24gbG9va3VwIChwYXRoKSB7XG4gIGlmICghcGF0aCB8fCB0eXBlb2YgcGF0aCAhPT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIC8vIGdldCB0aGUgZXh0ZW5zaW9uIChcImV4dFwiIG9yIFwiLmV4dFwiIG9yIGZ1bGwgcGF0aClcbiAgdmFyIGV4dGVuc2lvbiA9IGV4dG5hbWUoJ3guJyArIHBhdGgpXG4gICAgLnRvTG93ZXJDYXNlKClcbiAgICAuc3Vic3RyKDEpXG5cbiAgaWYgKCFleHRlbnNpb24pIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIHJldHVybiBleHBvcnRzLnR5cGVzW2V4dGVuc2lvbl0gfHwgZmFsc2Vcbn1cblxuLyoqXG4gKiBQb3B1bGF0ZSB0aGUgZXh0ZW5zaW9ucyBhbmQgdHlwZXMgbWFwcy5cbiAqIEBwcml2YXRlXG4gKi9cblxuZnVuY3Rpb24gcG9wdWxhdGVNYXBzIChleHRlbnNpb25zLCB0eXBlcykge1xuICAvLyBzb3VyY2UgcHJlZmVyZW5jZSAobGVhc3QgLT4gbW9zdClcbiAgdmFyIHByZWZlcmVuY2UgPSBbJ25naW54JywgJ2FwYWNoZScsIHVuZGVmaW5lZCwgJ2lhbmEnXVxuXG4gIE9iamVjdC5rZXlzKGRiKS5mb3JFYWNoKGZ1bmN0aW9uIGZvckVhY2hNaW1lVHlwZSAodHlwZSkge1xuICAgIHZhciBtaW1lID0gZGJbdHlwZV1cbiAgICB2YXIgZXh0cyA9IG1pbWUuZXh0ZW5zaW9uc1xuXG4gICAgaWYgKCFleHRzIHx8ICFleHRzLmxlbmd0aCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgLy8gbWltZSAtPiBleHRlbnNpb25zXG4gICAgZXh0ZW5zaW9uc1t0eXBlXSA9IGV4dHNcblxuICAgIC8vIGV4dGVuc2lvbiAtPiBtaW1lXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBleHRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgZXh0ZW5zaW9uID0gZXh0c1tpXVxuXG4gICAgICBpZiAodHlwZXNbZXh0ZW5zaW9uXSkge1xuICAgICAgICB2YXIgZnJvbSA9IHByZWZlcmVuY2UuaW5kZXhPZihkYlt0eXBlc1tleHRlbnNpb25dXS5zb3VyY2UpXG4gICAgICAgIHZhciB0byA9IHByZWZlcmVuY2UuaW5kZXhPZihtaW1lLnNvdXJjZSlcblxuICAgICAgICBpZiAodHlwZXNbZXh0ZW5zaW9uXSAhPT0gJ2FwcGxpY2F0aW9uL29jdGV0LXN0cmVhbScgJiZcbiAgICAgICAgICAoZnJvbSA+IHRvIHx8IChmcm9tID09PSB0byAmJiB0eXBlc1tleHRlbnNpb25dLnN1YnN0cigwLCAxMikgPT09ICdhcHBsaWNhdGlvbi8nKSkpIHtcbiAgICAgICAgICAvLyBza2lwIHRoZSByZW1hcHBpbmdcbiAgICAgICAgICBjb250aW51ZVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIHNldCB0aGUgZXh0ZW5zaW9uIC0+IG1pbWVcbiAgICAgIHR5cGVzW2V4dGVuc2lvbl0gPSB0eXBlXG4gICAgfVxuICB9KVxufVxuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgcGFyc2VVcmwgPSByZXF1aXJlKCd1cmwnKS5wYXJzZTtcblxudmFyIERFRkFVTFRfUE9SVFMgPSB7XG4gIGZ0cDogMjEsXG4gIGdvcGhlcjogNzAsXG4gIGh0dHA6IDgwLFxuICBodHRwczogNDQzLFxuICB3czogODAsXG4gIHdzczogNDQzLFxufTtcblxudmFyIHN0cmluZ0VuZHNXaXRoID0gU3RyaW5nLnByb3RvdHlwZS5lbmRzV2l0aCB8fCBmdW5jdGlvbihzKSB7XG4gIHJldHVybiBzLmxlbmd0aCA8PSB0aGlzLmxlbmd0aCAmJlxuICAgIHRoaXMuaW5kZXhPZihzLCB0aGlzLmxlbmd0aCAtIHMubGVuZ3RoKSAhPT0gLTE7XG59O1xuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfG9iamVjdH0gdXJsIC0gVGhlIFVSTCwgb3IgdGhlIHJlc3VsdCBmcm9tIHVybC5wYXJzZS5cbiAqIEByZXR1cm4ge3N0cmluZ30gVGhlIFVSTCBvZiB0aGUgcHJveHkgdGhhdCBzaG91bGQgaGFuZGxlIHRoZSByZXF1ZXN0IHRvIHRoZVxuICogIGdpdmVuIFVSTC4gSWYgbm8gcHJveHkgaXMgc2V0LCB0aGlzIHdpbGwgYmUgYW4gZW1wdHkgc3RyaW5nLlxuICovXG5mdW5jdGlvbiBnZXRQcm94eUZvclVybCh1cmwpIHtcbiAgdmFyIHBhcnNlZFVybCA9IHR5cGVvZiB1cmwgPT09ICdzdHJpbmcnID8gcGFyc2VVcmwodXJsKSA6IHVybCB8fCB7fTtcbiAgdmFyIHByb3RvID0gcGFyc2VkVXJsLnByb3RvY29sO1xuICB2YXIgaG9zdG5hbWUgPSBwYXJzZWRVcmwuaG9zdDtcbiAgdmFyIHBvcnQgPSBwYXJzZWRVcmwucG9ydDtcbiAgaWYgKHR5cGVvZiBob3N0bmFtZSAhPT0gJ3N0cmluZycgfHwgIWhvc3RuYW1lIHx8IHR5cGVvZiBwcm90byAhPT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gJyc7ICAvLyBEb24ndCBwcm94eSBVUkxzIHdpdGhvdXQgYSB2YWxpZCBzY2hlbWUgb3IgaG9zdC5cbiAgfVxuXG4gIHByb3RvID0gcHJvdG8uc3BsaXQoJzonLCAxKVswXTtcbiAgLy8gU3RyaXBwaW5nIHBvcnRzIGluIHRoaXMgd2F5IGluc3RlYWQgb2YgdXNpbmcgcGFyc2VkVXJsLmhvc3RuYW1lIHRvIG1ha2VcbiAgLy8gc3VyZSB0aGF0IHRoZSBicmFja2V0cyBhcm91bmQgSVB2NiBhZGRyZXNzZXMgYXJlIGtlcHQuXG4gIGhvc3RuYW1lID0gaG9zdG5hbWUucmVwbGFjZSgvOlxcZCokLywgJycpO1xuICBwb3J0ID0gcGFyc2VJbnQocG9ydCkgfHwgREVGQVVMVF9QT1JUU1twcm90b10gfHwgMDtcbiAgaWYgKCFzaG91bGRQcm94eShob3N0bmFtZSwgcG9ydCkpIHtcbiAgICByZXR1cm4gJyc7ICAvLyBEb24ndCBwcm94eSBVUkxzIHRoYXQgbWF0Y2ggTk9fUFJPWFkuXG4gIH1cblxuICB2YXIgcHJveHkgPVxuICAgIGdldEVudignbnBtX2NvbmZpZ18nICsgcHJvdG8gKyAnX3Byb3h5JykgfHxcbiAgICBnZXRFbnYocHJvdG8gKyAnX3Byb3h5JykgfHxcbiAgICBnZXRFbnYoJ25wbV9jb25maWdfcHJveHknKSB8fFxuICAgIGdldEVudignYWxsX3Byb3h5Jyk7XG4gIGlmIChwcm94eSAmJiBwcm94eS5pbmRleE9mKCc6Ly8nKSA9PT0gLTEpIHtcbiAgICAvLyBNaXNzaW5nIHNjaGVtZSBpbiBwcm94eSwgZGVmYXVsdCB0byB0aGUgcmVxdWVzdGVkIFVSTCdzIHNjaGVtZS5cbiAgICBwcm94eSA9IHByb3RvICsgJzovLycgKyBwcm94eTtcbiAgfVxuICByZXR1cm4gcHJveHk7XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lcyB3aGV0aGVyIGEgZ2l2ZW4gVVJMIHNob3VsZCBiZSBwcm94aWVkLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBob3N0bmFtZSAtIFRoZSBob3N0IG5hbWUgb2YgdGhlIFVSTC5cbiAqIEBwYXJhbSB7bnVtYmVyfSBwb3J0IC0gVGhlIGVmZmVjdGl2ZSBwb3J0IG9mIHRoZSBVUkwuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gV2hldGhlciB0aGUgZ2l2ZW4gVVJMIHNob3VsZCBiZSBwcm94aWVkLlxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gc2hvdWxkUHJveHkoaG9zdG5hbWUsIHBvcnQpIHtcbiAgdmFyIE5PX1BST1hZID1cbiAgICAoZ2V0RW52KCducG1fY29uZmlnX25vX3Byb3h5JykgfHwgZ2V0RW52KCdub19wcm94eScpKS50b0xvd2VyQ2FzZSgpO1xuICBpZiAoIU5PX1BST1hZKSB7XG4gICAgcmV0dXJuIHRydWU7ICAvLyBBbHdheXMgcHJveHkgaWYgTk9fUFJPWFkgaXMgbm90IHNldC5cbiAgfVxuICBpZiAoTk9fUFJPWFkgPT09ICcqJykge1xuICAgIHJldHVybiBmYWxzZTsgIC8vIE5ldmVyIHByb3h5IGlmIHdpbGRjYXJkIGlzIHNldC5cbiAgfVxuXG4gIHJldHVybiBOT19QUk9YWS5zcGxpdCgvWyxcXHNdLykuZXZlcnkoZnVuY3Rpb24ocHJveHkpIHtcbiAgICBpZiAoIXByb3h5KSB7XG4gICAgICByZXR1cm4gdHJ1ZTsgIC8vIFNraXAgemVyby1sZW5ndGggaG9zdHMuXG4gICAgfVxuICAgIHZhciBwYXJzZWRQcm94eSA9IHByb3h5Lm1hdGNoKC9eKC4rKTooXFxkKykkLyk7XG4gICAgdmFyIHBhcnNlZFByb3h5SG9zdG5hbWUgPSBwYXJzZWRQcm94eSA/IHBhcnNlZFByb3h5WzFdIDogcHJveHk7XG4gICAgdmFyIHBhcnNlZFByb3h5UG9ydCA9IHBhcnNlZFByb3h5ID8gcGFyc2VJbnQocGFyc2VkUHJveHlbMl0pIDogMDtcbiAgICBpZiAocGFyc2VkUHJveHlQb3J0ICYmIHBhcnNlZFByb3h5UG9ydCAhPT0gcG9ydCkge1xuICAgICAgcmV0dXJuIHRydWU7ICAvLyBTa2lwIGlmIHBvcnRzIGRvbid0IG1hdGNoLlxuICAgIH1cblxuICAgIGlmICghL15bLipdLy50ZXN0KHBhcnNlZFByb3h5SG9zdG5hbWUpKSB7XG4gICAgICAvLyBObyB3aWxkY2FyZHMsIHNvIHN0b3AgcHJveHlpbmcgaWYgdGhlcmUgaXMgYW4gZXhhY3QgbWF0Y2guXG4gICAgICByZXR1cm4gaG9zdG5hbWUgIT09IHBhcnNlZFByb3h5SG9zdG5hbWU7XG4gICAgfVxuXG4gICAgaWYgKHBhcnNlZFByb3h5SG9zdG5hbWUuY2hhckF0KDApID09PSAnKicpIHtcbiAgICAgIC8vIFJlbW92ZSBsZWFkaW5nIHdpbGRjYXJkLlxuICAgICAgcGFyc2VkUHJveHlIb3N0bmFtZSA9IHBhcnNlZFByb3h5SG9zdG5hbWUuc2xpY2UoMSk7XG4gICAgfVxuICAgIC8vIFN0b3AgcHJveHlpbmcgaWYgdGhlIGhvc3RuYW1lIGVuZHMgd2l0aCB0aGUgbm9fcHJveHkgaG9zdC5cbiAgICByZXR1cm4gIXN0cmluZ0VuZHNXaXRoLmNhbGwoaG9zdG5hbWUsIHBhcnNlZFByb3h5SG9zdG5hbWUpO1xuICB9KTtcbn1cblxuLyoqXG4gKiBHZXQgdGhlIHZhbHVlIGZvciBhbiBlbnZpcm9ubWVudCB2YXJpYWJsZS5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IC0gVGhlIG5hbWUgb2YgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlLlxuICogQHJldHVybiB7c3RyaW5nfSBUaGUgdmFsdWUgb2YgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlLlxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gZ2V0RW52KGtleSkge1xuICByZXR1cm4gcHJvY2Vzcy5lbnZba2V5LnRvTG93ZXJDYXNlKCldIHx8IHByb2Nlc3MuZW52W2tleS50b1VwcGVyQ2FzZSgpXSB8fCAnJztcbn1cblxuZXhwb3J0cy5nZXRQcm94eUZvclVybCA9IGdldFByb3h5Rm9yVXJsO1xuIiwiJ3VzZSBzdHJpY3QnO1xuY29uc3Qgb3MgPSByZXF1aXJlKCdvcycpO1xuY29uc3QgaGFzRmxhZyA9IHJlcXVpcmUoJ2hhcy1mbGFnJyk7XG5cbmNvbnN0IGVudiA9IHByb2Nlc3MuZW52O1xuXG5sZXQgZm9yY2VDb2xvcjtcbmlmIChoYXNGbGFnKCduby1jb2xvcicpIHx8XG5cdGhhc0ZsYWcoJ25vLWNvbG9ycycpIHx8XG5cdGhhc0ZsYWcoJ2NvbG9yPWZhbHNlJykpIHtcblx0Zm9yY2VDb2xvciA9IGZhbHNlO1xufSBlbHNlIGlmIChoYXNGbGFnKCdjb2xvcicpIHx8XG5cdGhhc0ZsYWcoJ2NvbG9ycycpIHx8XG5cdGhhc0ZsYWcoJ2NvbG9yPXRydWUnKSB8fFxuXHRoYXNGbGFnKCdjb2xvcj1hbHdheXMnKSkge1xuXHRmb3JjZUNvbG9yID0gdHJ1ZTtcbn1cbmlmICgnRk9SQ0VfQ09MT1InIGluIGVudikge1xuXHRmb3JjZUNvbG9yID0gZW52LkZPUkNFX0NPTE9SLmxlbmd0aCA9PT0gMCB8fCBwYXJzZUludChlbnYuRk9SQ0VfQ09MT1IsIDEwKSAhPT0gMDtcbn1cblxuZnVuY3Rpb24gdHJhbnNsYXRlTGV2ZWwobGV2ZWwpIHtcblx0aWYgKGxldmVsID09PSAwKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cblx0cmV0dXJuIHtcblx0XHRsZXZlbCxcblx0XHRoYXNCYXNpYzogdHJ1ZSxcblx0XHRoYXMyNTY6IGxldmVsID49IDIsXG5cdFx0aGFzMTZtOiBsZXZlbCA+PSAzXG5cdH07XG59XG5cbmZ1bmN0aW9uIHN1cHBvcnRzQ29sb3Ioc3RyZWFtKSB7XG5cdGlmIChmb3JjZUNvbG9yID09PSBmYWxzZSkge1xuXHRcdHJldHVybiAwO1xuXHR9XG5cblx0aWYgKGhhc0ZsYWcoJ2NvbG9yPTE2bScpIHx8XG5cdFx0aGFzRmxhZygnY29sb3I9ZnVsbCcpIHx8XG5cdFx0aGFzRmxhZygnY29sb3I9dHJ1ZWNvbG9yJykpIHtcblx0XHRyZXR1cm4gMztcblx0fVxuXG5cdGlmIChoYXNGbGFnKCdjb2xvcj0yNTYnKSkge1xuXHRcdHJldHVybiAyO1xuXHR9XG5cblx0aWYgKHN0cmVhbSAmJiAhc3RyZWFtLmlzVFRZICYmIGZvcmNlQ29sb3IgIT09IHRydWUpIHtcblx0XHRyZXR1cm4gMDtcblx0fVxuXG5cdGNvbnN0IG1pbiA9IGZvcmNlQ29sb3IgPyAxIDogMDtcblxuXHRpZiAocHJvY2Vzcy5wbGF0Zm9ybSA9PT0gJ3dpbjMyJykge1xuXHRcdC8vIE5vZGUuanMgNy41LjAgaXMgdGhlIGZpcnN0IHZlcnNpb24gb2YgTm9kZS5qcyB0byBpbmNsdWRlIGEgcGF0Y2ggdG9cblx0XHQvLyBsaWJ1diB0aGF0IGVuYWJsZXMgMjU2IGNvbG9yIG91dHB1dCBvbiBXaW5kb3dzLiBBbnl0aGluZyBlYXJsaWVyIGFuZCBpdFxuXHRcdC8vIHdvbid0IHdvcmsuIEhvd2V2ZXIsIGhlcmUgd2UgdGFyZ2V0IE5vZGUuanMgOCBhdCBtaW5pbXVtIGFzIGl0IGlzIGFuIExUU1xuXHRcdC8vIHJlbGVhc2UsIGFuZCBOb2RlLmpzIDcgaXMgbm90LiBXaW5kb3dzIDEwIGJ1aWxkIDEwNTg2IGlzIHRoZSBmaXJzdCBXaW5kb3dzXG5cdFx0Ly8gcmVsZWFzZSB0aGF0IHN1cHBvcnRzIDI1NiBjb2xvcnMuIFdpbmRvd3MgMTAgYnVpbGQgMTQ5MzEgaXMgdGhlIGZpcnN0IHJlbGVhc2Vcblx0XHQvLyB0aGF0IHN1cHBvcnRzIDE2bS9UcnVlQ29sb3IuXG5cdFx0Y29uc3Qgb3NSZWxlYXNlID0gb3MucmVsZWFzZSgpLnNwbGl0KCcuJyk7XG5cdFx0aWYgKFxuXHRcdFx0TnVtYmVyKHByb2Nlc3MudmVyc2lvbnMubm9kZS5zcGxpdCgnLicpWzBdKSA+PSA4ICYmXG5cdFx0XHROdW1iZXIob3NSZWxlYXNlWzBdKSA+PSAxMCAmJlxuXHRcdFx0TnVtYmVyKG9zUmVsZWFzZVsyXSkgPj0gMTA1ODZcblx0XHQpIHtcblx0XHRcdHJldHVybiBOdW1iZXIob3NSZWxlYXNlWzJdKSA+PSAxNDkzMSA/IDMgOiAyO1xuXHRcdH1cblxuXHRcdHJldHVybiAxO1xuXHR9XG5cblx0aWYgKCdDSScgaW4gZW52KSB7XG5cdFx0aWYgKFsnVFJBVklTJywgJ0NJUkNMRUNJJywgJ0FQUFZFWU9SJywgJ0dJVExBQl9DSSddLnNvbWUoc2lnbiA9PiBzaWduIGluIGVudikgfHwgZW52LkNJX05BTUUgPT09ICdjb2Rlc2hpcCcpIHtcblx0XHRcdHJldHVybiAxO1xuXHRcdH1cblxuXHRcdHJldHVybiBtaW47XG5cdH1cblxuXHRpZiAoJ1RFQU1DSVRZX1ZFUlNJT04nIGluIGVudikge1xuXHRcdHJldHVybiAvXig5XFwuKDAqWzEtOV1cXGQqKVxcLnxcXGR7Mix9XFwuKS8udGVzdChlbnYuVEVBTUNJVFlfVkVSU0lPTikgPyAxIDogMDtcblx0fVxuXG5cdGlmIChlbnYuQ09MT1JURVJNID09PSAndHJ1ZWNvbG9yJykge1xuXHRcdHJldHVybiAzO1xuXHR9XG5cblx0aWYgKCdURVJNX1BST0dSQU0nIGluIGVudikge1xuXHRcdGNvbnN0IHZlcnNpb24gPSBwYXJzZUludCgoZW52LlRFUk1fUFJPR1JBTV9WRVJTSU9OIHx8ICcnKS5zcGxpdCgnLicpWzBdLCAxMCk7XG5cblx0XHRzd2l0Y2ggKGVudi5URVJNX1BST0dSQU0pIHtcblx0XHRcdGNhc2UgJ2lUZXJtLmFwcCc6XG5cdFx0XHRcdHJldHVybiB2ZXJzaW9uID49IDMgPyAzIDogMjtcblx0XHRcdGNhc2UgJ0FwcGxlX1Rlcm1pbmFsJzpcblx0XHRcdFx0cmV0dXJuIDI7XG5cdFx0XHQvLyBObyBkZWZhdWx0XG5cdFx0fVxuXHR9XG5cblx0aWYgKC8tMjU2KGNvbG9yKT8kL2kudGVzdChlbnYuVEVSTSkpIHtcblx0XHRyZXR1cm4gMjtcblx0fVxuXG5cdGlmICgvXnNjcmVlbnxeeHRlcm18XnZ0MTAwfF52dDIyMHxecnh2dHxjb2xvcnxhbnNpfGN5Z3dpbnxsaW51eC9pLnRlc3QoZW52LlRFUk0pKSB7XG5cdFx0cmV0dXJuIDE7XG5cdH1cblxuXHRpZiAoJ0NPTE9SVEVSTScgaW4gZW52KSB7XG5cdFx0cmV0dXJuIDE7XG5cdH1cblxuXHRpZiAoZW52LlRFUk0gPT09ICdkdW1iJykge1xuXHRcdHJldHVybiBtaW47XG5cdH1cblxuXHRyZXR1cm4gbWluO1xufVxuXG5mdW5jdGlvbiBnZXRTdXBwb3J0TGV2ZWwoc3RyZWFtKSB7XG5cdGNvbnN0IGxldmVsID0gc3VwcG9ydHNDb2xvcihzdHJlYW0pO1xuXHRyZXR1cm4gdHJhbnNsYXRlTGV2ZWwobGV2ZWwpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcblx0c3VwcG9ydHNDb2xvcjogZ2V0U3VwcG9ydExldmVsLFxuXHRzdGRvdXQ6IGdldFN1cHBvcnRMZXZlbChwcm9jZXNzLnN0ZG91dCksXG5cdHN0ZGVycjogZ2V0U3VwcG9ydExldmVsKHByb2Nlc3Muc3RkZXJyKVxufTtcbiIsIihmdW5jdGlvbiAobmFtZSwgY29udGV4dCwgZGVmaW5pdGlvbikge1xuICBpZiAodHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCcgJiYgbW9kdWxlLmV4cG9ydHMpIG1vZHVsZS5leHBvcnRzID0gZGVmaW5pdGlvbigpO1xuICBlbHNlIGlmICh0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQpIGRlZmluZShkZWZpbml0aW9uKTtcbiAgZWxzZSBjb250ZXh0W25hbWVdID0gZGVmaW5pdGlvbigpO1xufSkoJ3VybGpvaW4nLCB0aGlzLCBmdW5jdGlvbiAoKSB7XG5cbiAgZnVuY3Rpb24gbm9ybWFsaXplIChzdHJBcnJheSkge1xuICAgIHZhciByZXN1bHRBcnJheSA9IFtdO1xuICAgIGlmIChzdHJBcnJheS5sZW5ndGggPT09IDApIHsgcmV0dXJuICcnOyB9XG5cbiAgICBpZiAodHlwZW9mIHN0ckFycmF5WzBdICE9PSAnc3RyaW5nJykge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVXJsIG11c3QgYmUgYSBzdHJpbmcuIFJlY2VpdmVkICcgKyBzdHJBcnJheVswXSk7XG4gICAgfVxuXG4gICAgLy8gSWYgdGhlIGZpcnN0IHBhcnQgaXMgYSBwbGFpbiBwcm90b2NvbCwgd2UgY29tYmluZSBpdCB3aXRoIHRoZSBuZXh0IHBhcnQuXG4gICAgaWYgKHN0ckFycmF5WzBdLm1hdGNoKC9eW14vOl0rOlxcLyokLykgJiYgc3RyQXJyYXkubGVuZ3RoID4gMSkge1xuICAgICAgdmFyIGZpcnN0ID0gc3RyQXJyYXkuc2hpZnQoKTtcbiAgICAgIHN0ckFycmF5WzBdID0gZmlyc3QgKyBzdHJBcnJheVswXTtcbiAgICB9XG5cbiAgICAvLyBUaGVyZSBtdXN0IGJlIHR3byBvciB0aHJlZSBzbGFzaGVzIGluIHRoZSBmaWxlIHByb3RvY29sLCB0d28gc2xhc2hlcyBpbiBhbnl0aGluZyBlbHNlLlxuICAgIGlmIChzdHJBcnJheVswXS5tYXRjaCgvXmZpbGU6XFwvXFwvXFwvLykpIHtcbiAgICAgIHN0ckFycmF5WzBdID0gc3RyQXJyYXlbMF0ucmVwbGFjZSgvXihbXi86XSspOlxcLyovLCAnJDE6Ly8vJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHN0ckFycmF5WzBdID0gc3RyQXJyYXlbMF0ucmVwbGFjZSgvXihbXi86XSspOlxcLyovLCAnJDE6Ly8nKTtcbiAgICB9XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHN0ckFycmF5Lmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgY29tcG9uZW50ID0gc3RyQXJyYXlbaV07XG5cbiAgICAgIGlmICh0eXBlb2YgY29tcG9uZW50ICE9PSAnc3RyaW5nJykge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdVcmwgbXVzdCBiZSBhIHN0cmluZy4gUmVjZWl2ZWQgJyArIGNvbXBvbmVudCk7XG4gICAgICB9XG5cbiAgICAgIGlmIChjb21wb25lbnQgPT09ICcnKSB7IGNvbnRpbnVlOyB9XG5cbiAgICAgIGlmIChpID4gMCkge1xuICAgICAgICAvLyBSZW1vdmluZyB0aGUgc3RhcnRpbmcgc2xhc2hlcyBmb3IgZWFjaCBjb21wb25lbnQgYnV0IHRoZSBmaXJzdC5cbiAgICAgICAgY29tcG9uZW50ID0gY29tcG9uZW50LnJlcGxhY2UoL15bXFwvXSsvLCAnJyk7XG4gICAgICB9XG4gICAgICBpZiAoaSA8IHN0ckFycmF5Lmxlbmd0aCAtIDEpIHtcbiAgICAgICAgLy8gUmVtb3ZpbmcgdGhlIGVuZGluZyBzbGFzaGVzIGZvciBlYWNoIGNvbXBvbmVudCBidXQgdGhlIGxhc3QuXG4gICAgICAgIGNvbXBvbmVudCA9IGNvbXBvbmVudC5yZXBsYWNlKC9bXFwvXSskLywgJycpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gRm9yIHRoZSBsYXN0IGNvbXBvbmVudCB3ZSB3aWxsIGNvbWJpbmUgbXVsdGlwbGUgc2xhc2hlcyB0byBhIHNpbmdsZSBvbmUuXG4gICAgICAgIGNvbXBvbmVudCA9IGNvbXBvbmVudC5yZXBsYWNlKC9bXFwvXSskLywgJy8nKTtcbiAgICAgIH1cblxuICAgICAgcmVzdWx0QXJyYXkucHVzaChjb21wb25lbnQpO1xuXG4gICAgfVxuXG4gICAgdmFyIHN0ciA9IHJlc3VsdEFycmF5LmpvaW4oJy8nKTtcbiAgICAvLyBFYWNoIGlucHV0IGNvbXBvbmVudCBpcyBub3cgc2VwYXJhdGVkIGJ5IGEgc2luZ2xlIHNsYXNoIGV4Y2VwdCB0aGUgcG9zc2libGUgZmlyc3QgcGxhaW4gcHJvdG9jb2wgcGFydC5cblxuICAgIC8vIHJlbW92ZSB0cmFpbGluZyBzbGFzaCBiZWZvcmUgcGFyYW1ldGVycyBvciBoYXNoXG4gICAgc3RyID0gc3RyLnJlcGxhY2UoL1xcLyhcXD98JnwjW14hXSkvZywgJyQxJyk7XG5cbiAgICAvLyByZXBsYWNlID8gaW4gcGFyYW1ldGVycyB3aXRoICZcbiAgICB2YXIgcGFydHMgPSBzdHIuc3BsaXQoJz8nKTtcbiAgICBzdHIgPSBwYXJ0cy5zaGlmdCgpICsgKHBhcnRzLmxlbmd0aCA+IDAgPyAnPyc6ICcnKSArIHBhcnRzLmpvaW4oJyYnKTtcblxuICAgIHJldHVybiBzdHI7XG4gIH1cblxuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIHZhciBpbnB1dDtcblxuICAgIGlmICh0eXBlb2YgYXJndW1lbnRzWzBdID09PSAnb2JqZWN0Jykge1xuICAgICAgaW5wdXQgPSBhcmd1bWVudHNbMF07XG4gICAgfSBlbHNlIHtcbiAgICAgIGlucHV0ID0gW10uc2xpY2UuY2FsbChhcmd1bWVudHMpO1xuICAgIH1cblxuICAgIHJldHVybiBub3JtYWxpemUoaW5wdXQpO1xuICB9O1xuXG59KTtcbiIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImFzc2VydFwiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJldmVudHNcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiZnNcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiaHR0cFwiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJodHRwc1wiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJvc1wiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJwYXRoXCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcInN0cmVhbVwiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJ0dHlcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwidXJsXCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcInV0aWxcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiemxpYlwiKTsiLCIvLyBBeGlvcyB2MS43LjQgQ29weXJpZ2h0IChjKSAyMDI0IE1hdHQgWmFicmlza2llIGFuZCBjb250cmlidXRvcnNcbid1c2Ugc3RyaWN0JztcblxuY29uc3QgRm9ybURhdGEkMSA9IHJlcXVpcmUoJ2Zvcm0tZGF0YScpO1xuY29uc3QgdXJsID0gcmVxdWlyZSgndXJsJyk7XG5jb25zdCBwcm94eUZyb21FbnYgPSByZXF1aXJlKCdwcm94eS1mcm9tLWVudicpO1xuY29uc3QgaHR0cCA9IHJlcXVpcmUoJ2h0dHAnKTtcbmNvbnN0IGh0dHBzID0gcmVxdWlyZSgnaHR0cHMnKTtcbmNvbnN0IHV0aWwgPSByZXF1aXJlKCd1dGlsJyk7XG5jb25zdCBmb2xsb3dSZWRpcmVjdHMgPSByZXF1aXJlKCdmb2xsb3ctcmVkaXJlY3RzJyk7XG5jb25zdCB6bGliID0gcmVxdWlyZSgnemxpYicpO1xuY29uc3Qgc3RyZWFtID0gcmVxdWlyZSgnc3RyZWFtJyk7XG5jb25zdCBldmVudHMgPSByZXF1aXJlKCdldmVudHMnKTtcblxuZnVuY3Rpb24gX2ludGVyb3BEZWZhdWx0TGVnYWN5IChlKSB7IHJldHVybiBlICYmIHR5cGVvZiBlID09PSAnb2JqZWN0JyAmJiAnZGVmYXVsdCcgaW4gZSA/IGUgOiB7ICdkZWZhdWx0JzogZSB9OyB9XG5cbmNvbnN0IEZvcm1EYXRhX19kZWZhdWx0ID0gLyojX19QVVJFX18qL19pbnRlcm9wRGVmYXVsdExlZ2FjeShGb3JtRGF0YSQxKTtcbmNvbnN0IHVybF9fZGVmYXVsdCA9IC8qI19fUFVSRV9fKi9faW50ZXJvcERlZmF1bHRMZWdhY3kodXJsKTtcbmNvbnN0IGh0dHBfX2RlZmF1bHQgPSAvKiNfX1BVUkVfXyovX2ludGVyb3BEZWZhdWx0TGVnYWN5KGh0dHApO1xuY29uc3QgaHR0cHNfX2RlZmF1bHQgPSAvKiNfX1BVUkVfXyovX2ludGVyb3BEZWZhdWx0TGVnYWN5KGh0dHBzKTtcbmNvbnN0IHV0aWxfX2RlZmF1bHQgPSAvKiNfX1BVUkVfXyovX2ludGVyb3BEZWZhdWx0TGVnYWN5KHV0aWwpO1xuY29uc3QgZm9sbG93UmVkaXJlY3RzX19kZWZhdWx0ID0gLyojX19QVVJFX18qL19pbnRlcm9wRGVmYXVsdExlZ2FjeShmb2xsb3dSZWRpcmVjdHMpO1xuY29uc3QgemxpYl9fZGVmYXVsdCA9IC8qI19fUFVSRV9fKi9faW50ZXJvcERlZmF1bHRMZWdhY3koemxpYik7XG5jb25zdCBzdHJlYW1fX2RlZmF1bHQgPSAvKiNfX1BVUkVfXyovX2ludGVyb3BEZWZhdWx0TGVnYWN5KHN0cmVhbSk7XG5cbmZ1bmN0aW9uIGJpbmQoZm4sIHRoaXNBcmcpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIHdyYXAoKSB7XG4gICAgcmV0dXJuIGZuLmFwcGx5KHRoaXNBcmcsIGFyZ3VtZW50cyk7XG4gIH07XG59XG5cbi8vIHV0aWxzIGlzIGEgbGlicmFyeSBvZiBnZW5lcmljIGhlbHBlciBmdW5jdGlvbnMgbm9uLXNwZWNpZmljIHRvIGF4aW9zXG5cbmNvbnN0IHt0b1N0cmluZ30gPSBPYmplY3QucHJvdG90eXBlO1xuY29uc3Qge2dldFByb3RvdHlwZU9mfSA9IE9iamVjdDtcblxuY29uc3Qga2luZE9mID0gKGNhY2hlID0+IHRoaW5nID0+IHtcbiAgICBjb25zdCBzdHIgPSB0b1N0cmluZy5jYWxsKHRoaW5nKTtcbiAgICByZXR1cm4gY2FjaGVbc3RyXSB8fCAoY2FjaGVbc3RyXSA9IHN0ci5zbGljZSg4LCAtMSkudG9Mb3dlckNhc2UoKSk7XG59KShPYmplY3QuY3JlYXRlKG51bGwpKTtcblxuY29uc3Qga2luZE9mVGVzdCA9ICh0eXBlKSA9PiB7XG4gIHR5cGUgPSB0eXBlLnRvTG93ZXJDYXNlKCk7XG4gIHJldHVybiAodGhpbmcpID0+IGtpbmRPZih0aGluZykgPT09IHR5cGVcbn07XG5cbmNvbnN0IHR5cGVPZlRlc3QgPSB0eXBlID0+IHRoaW5nID0+IHR5cGVvZiB0aGluZyA9PT0gdHlwZTtcblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhbiBBcnJheVxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhbiBBcnJheSwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmNvbnN0IHtpc0FycmF5fSA9IEFycmF5O1xuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIHVuZGVmaW5lZFxuICpcbiAqIEBwYXJhbSB7Kn0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdGhlIHZhbHVlIGlzIHVuZGVmaW5lZCwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmNvbnN0IGlzVW5kZWZpbmVkID0gdHlwZU9mVGVzdCgndW5kZWZpbmVkJyk7XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBCdWZmZXJcbiAqXG4gKiBAcGFyYW0geyp9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgQnVmZmVyLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNCdWZmZXIodmFsKSB7XG4gIHJldHVybiB2YWwgIT09IG51bGwgJiYgIWlzVW5kZWZpbmVkKHZhbCkgJiYgdmFsLmNvbnN0cnVjdG9yICE9PSBudWxsICYmICFpc1VuZGVmaW5lZCh2YWwuY29uc3RydWN0b3IpXG4gICAgJiYgaXNGdW5jdGlvbih2YWwuY29uc3RydWN0b3IuaXNCdWZmZXIpICYmIHZhbC5jb25zdHJ1Y3Rvci5pc0J1ZmZlcih2YWwpO1xufVxuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGFuIEFycmF5QnVmZmVyXG4gKlxuICogQHBhcmFtIHsqfSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhbiBBcnJheUJ1ZmZlciwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmNvbnN0IGlzQXJyYXlCdWZmZXIgPSBraW5kT2ZUZXN0KCdBcnJheUJ1ZmZlcicpO1xuXG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSB2aWV3IG9uIGFuIEFycmF5QnVmZmVyXG4gKlxuICogQHBhcmFtIHsqfSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIHZpZXcgb24gYW4gQXJyYXlCdWZmZXIsIG90aGVyd2lzZSBmYWxzZVxuICovXG5mdW5jdGlvbiBpc0FycmF5QnVmZmVyVmlldyh2YWwpIHtcbiAgbGV0IHJlc3VsdDtcbiAgaWYgKCh0eXBlb2YgQXJyYXlCdWZmZXIgIT09ICd1bmRlZmluZWQnKSAmJiAoQXJyYXlCdWZmZXIuaXNWaWV3KSkge1xuICAgIHJlc3VsdCA9IEFycmF5QnVmZmVyLmlzVmlldyh2YWwpO1xuICB9IGVsc2Uge1xuICAgIHJlc3VsdCA9ICh2YWwpICYmICh2YWwuYnVmZmVyKSAmJiAoaXNBcnJheUJ1ZmZlcih2YWwuYnVmZmVyKSk7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIFN0cmluZ1xuICpcbiAqIEBwYXJhbSB7Kn0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBTdHJpbmcsIG90aGVyd2lzZSBmYWxzZVxuICovXG5jb25zdCBpc1N0cmluZyA9IHR5cGVPZlRlc3QoJ3N0cmluZycpO1xuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgRnVuY3Rpb25cbiAqXG4gKiBAcGFyYW0geyp9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBGdW5jdGlvbiwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmNvbnN0IGlzRnVuY3Rpb24gPSB0eXBlT2ZUZXN0KCdmdW5jdGlvbicpO1xuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgTnVtYmVyXG4gKlxuICogQHBhcmFtIHsqfSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIE51bWJlciwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmNvbnN0IGlzTnVtYmVyID0gdHlwZU9mVGVzdCgnbnVtYmVyJyk7XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYW4gT2JqZWN0XG4gKlxuICogQHBhcmFtIHsqfSB0aGluZyBUaGUgdmFsdWUgdG8gdGVzdFxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGFuIE9iamVjdCwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmNvbnN0IGlzT2JqZWN0ID0gKHRoaW5nKSA9PiB0aGluZyAhPT0gbnVsbCAmJiB0eXBlb2YgdGhpbmcgPT09ICdvYmplY3QnO1xuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgQm9vbGVhblxuICpcbiAqIEBwYXJhbSB7Kn0gdGhpbmcgVGhlIHZhbHVlIHRvIHRlc3RcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgQm9vbGVhbiwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmNvbnN0IGlzQm9vbGVhbiA9IHRoaW5nID0+IHRoaW5nID09PSB0cnVlIHx8IHRoaW5nID09PSBmYWxzZTtcblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIHBsYWluIE9iamVjdFxuICpcbiAqIEBwYXJhbSB7Kn0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBwbGFpbiBPYmplY3QsIG90aGVyd2lzZSBmYWxzZVxuICovXG5jb25zdCBpc1BsYWluT2JqZWN0ID0gKHZhbCkgPT4ge1xuICBpZiAoa2luZE9mKHZhbCkgIT09ICdvYmplY3QnKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgY29uc3QgcHJvdG90eXBlID0gZ2V0UHJvdG90eXBlT2YodmFsKTtcbiAgcmV0dXJuIChwcm90b3R5cGUgPT09IG51bGwgfHwgcHJvdG90eXBlID09PSBPYmplY3QucHJvdG90eXBlIHx8IE9iamVjdC5nZXRQcm90b3R5cGVPZihwcm90b3R5cGUpID09PSBudWxsKSAmJiAhKFN5bWJvbC50b1N0cmluZ1RhZyBpbiB2YWwpICYmICEoU3ltYm9sLml0ZXJhdG9yIGluIHZhbCk7XG59O1xuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgRGF0ZVxuICpcbiAqIEBwYXJhbSB7Kn0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBEYXRlLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuY29uc3QgaXNEYXRlID0ga2luZE9mVGVzdCgnRGF0ZScpO1xuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgRmlsZVxuICpcbiAqIEBwYXJhbSB7Kn0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBGaWxlLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuY29uc3QgaXNGaWxlID0ga2luZE9mVGVzdCgnRmlsZScpO1xuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgQmxvYlxuICpcbiAqIEBwYXJhbSB7Kn0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBCbG9iLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuY29uc3QgaXNCbG9iID0ga2luZE9mVGVzdCgnQmxvYicpO1xuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgRmlsZUxpc3RcbiAqXG4gKiBAcGFyYW0geyp9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgRmlsZSwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmNvbnN0IGlzRmlsZUxpc3QgPSBraW5kT2ZUZXN0KCdGaWxlTGlzdCcpO1xuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgU3RyZWFtXG4gKlxuICogQHBhcmFtIHsqfSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIFN0cmVhbSwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmNvbnN0IGlzU3RyZWFtID0gKHZhbCkgPT4gaXNPYmplY3QodmFsKSAmJiBpc0Z1bmN0aW9uKHZhbC5waXBlKTtcblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIEZvcm1EYXRhXG4gKlxuICogQHBhcmFtIHsqfSB0aGluZyBUaGUgdmFsdWUgdG8gdGVzdFxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGFuIEZvcm1EYXRhLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuY29uc3QgaXNGb3JtRGF0YSA9ICh0aGluZykgPT4ge1xuICBsZXQga2luZDtcbiAgcmV0dXJuIHRoaW5nICYmIChcbiAgICAodHlwZW9mIEZvcm1EYXRhID09PSAnZnVuY3Rpb24nICYmIHRoaW5nIGluc3RhbmNlb2YgRm9ybURhdGEpIHx8IChcbiAgICAgIGlzRnVuY3Rpb24odGhpbmcuYXBwZW5kKSAmJiAoXG4gICAgICAgIChraW5kID0ga2luZE9mKHRoaW5nKSkgPT09ICdmb3JtZGF0YScgfHxcbiAgICAgICAgLy8gZGV0ZWN0IGZvcm0tZGF0YSBpbnN0YW5jZVxuICAgICAgICAoa2luZCA9PT0gJ29iamVjdCcgJiYgaXNGdW5jdGlvbih0aGluZy50b1N0cmluZykgJiYgdGhpbmcudG9TdHJpbmcoKSA9PT0gJ1tvYmplY3QgRm9ybURhdGFdJylcbiAgICAgIClcbiAgICApXG4gIClcbn07XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBVUkxTZWFyY2hQYXJhbXMgb2JqZWN0XG4gKlxuICogQHBhcmFtIHsqfSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIFVSTFNlYXJjaFBhcmFtcyBvYmplY3QsIG90aGVyd2lzZSBmYWxzZVxuICovXG5jb25zdCBpc1VSTFNlYXJjaFBhcmFtcyA9IGtpbmRPZlRlc3QoJ1VSTFNlYXJjaFBhcmFtcycpO1xuXG5jb25zdCBbaXNSZWFkYWJsZVN0cmVhbSwgaXNSZXF1ZXN0LCBpc1Jlc3BvbnNlLCBpc0hlYWRlcnNdID0gWydSZWFkYWJsZVN0cmVhbScsICdSZXF1ZXN0JywgJ1Jlc3BvbnNlJywgJ0hlYWRlcnMnXS5tYXAoa2luZE9mVGVzdCk7XG5cbi8qKlxuICogVHJpbSBleGNlc3Mgd2hpdGVzcGFjZSBvZmYgdGhlIGJlZ2lubmluZyBhbmQgZW5kIG9mIGEgc3RyaW5nXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IHN0ciBUaGUgU3RyaW5nIHRvIHRyaW1cbiAqXG4gKiBAcmV0dXJucyB7U3RyaW5nfSBUaGUgU3RyaW5nIGZyZWVkIG9mIGV4Y2VzcyB3aGl0ZXNwYWNlXG4gKi9cbmNvbnN0IHRyaW0gPSAoc3RyKSA9PiBzdHIudHJpbSA/XG4gIHN0ci50cmltKCkgOiBzdHIucmVwbGFjZSgvXltcXHNcXHVGRUZGXFx4QTBdK3xbXFxzXFx1RkVGRlxceEEwXSskL2csICcnKTtcblxuLyoqXG4gKiBJdGVyYXRlIG92ZXIgYW4gQXJyYXkgb3IgYW4gT2JqZWN0IGludm9raW5nIGEgZnVuY3Rpb24gZm9yIGVhY2ggaXRlbS5cbiAqXG4gKiBJZiBgb2JqYCBpcyBhbiBBcnJheSBjYWxsYmFjayB3aWxsIGJlIGNhbGxlZCBwYXNzaW5nXG4gKiB0aGUgdmFsdWUsIGluZGV4LCBhbmQgY29tcGxldGUgYXJyYXkgZm9yIGVhY2ggaXRlbS5cbiAqXG4gKiBJZiAnb2JqJyBpcyBhbiBPYmplY3QgY2FsbGJhY2sgd2lsbCBiZSBjYWxsZWQgcGFzc2luZ1xuICogdGhlIHZhbHVlLCBrZXksIGFuZCBjb21wbGV0ZSBvYmplY3QgZm9yIGVhY2ggcHJvcGVydHkuXG4gKlxuICogQHBhcmFtIHtPYmplY3R8QXJyYXl9IG9iaiBUaGUgb2JqZWN0IHRvIGl0ZXJhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuIFRoZSBjYWxsYmFjayB0byBpbnZva2UgZm9yIGVhY2ggaXRlbVxuICpcbiAqIEBwYXJhbSB7Qm9vbGVhbn0gW2FsbE93bktleXMgPSBmYWxzZV1cbiAqIEByZXR1cm5zIHthbnl9XG4gKi9cbmZ1bmN0aW9uIGZvckVhY2gob2JqLCBmbiwge2FsbE93bktleXMgPSBmYWxzZX0gPSB7fSkge1xuICAvLyBEb24ndCBib3RoZXIgaWYgbm8gdmFsdWUgcHJvdmlkZWRcbiAgaWYgKG9iaiA9PT0gbnVsbCB8fCB0eXBlb2Ygb2JqID09PSAndW5kZWZpbmVkJykge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGxldCBpO1xuICBsZXQgbDtcblxuICAvLyBGb3JjZSBhbiBhcnJheSBpZiBub3QgYWxyZWFkeSBzb21ldGhpbmcgaXRlcmFibGVcbiAgaWYgKHR5cGVvZiBvYmogIT09ICdvYmplY3QnKSB7XG4gICAgLyplc2xpbnQgbm8tcGFyYW0tcmVhc3NpZ246MCovXG4gICAgb2JqID0gW29ial07XG4gIH1cblxuICBpZiAoaXNBcnJheShvYmopKSB7XG4gICAgLy8gSXRlcmF0ZSBvdmVyIGFycmF5IHZhbHVlc1xuICAgIGZvciAoaSA9IDAsIGwgPSBvYmoubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICBmbi5jYWxsKG51bGwsIG9ialtpXSwgaSwgb2JqKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgLy8gSXRlcmF0ZSBvdmVyIG9iamVjdCBrZXlzXG4gICAgY29uc3Qga2V5cyA9IGFsbE93bktleXMgPyBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhvYmopIDogT2JqZWN0LmtleXMob2JqKTtcbiAgICBjb25zdCBsZW4gPSBrZXlzLmxlbmd0aDtcbiAgICBsZXQga2V5O1xuXG4gICAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICBrZXkgPSBrZXlzW2ldO1xuICAgICAgZm4uY2FsbChudWxsLCBvYmpba2V5XSwga2V5LCBvYmopO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBmaW5kS2V5KG9iaiwga2V5KSB7XG4gIGtleSA9IGtleS50b0xvd2VyQ2FzZSgpO1xuICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMob2JqKTtcbiAgbGV0IGkgPSBrZXlzLmxlbmd0aDtcbiAgbGV0IF9rZXk7XG4gIHdoaWxlIChpLS0gPiAwKSB7XG4gICAgX2tleSA9IGtleXNbaV07XG4gICAgaWYgKGtleSA9PT0gX2tleS50b0xvd2VyQ2FzZSgpKSB7XG4gICAgICByZXR1cm4gX2tleTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG51bGw7XG59XG5cbmNvbnN0IF9nbG9iYWwgPSAoKCkgPT4ge1xuICAvKmVzbGludCBuby11bmRlZjowKi9cbiAgaWYgKHR5cGVvZiBnbG9iYWxUaGlzICE9PSBcInVuZGVmaW5lZFwiKSByZXR1cm4gZ2xvYmFsVGhpcztcbiAgcmV0dXJuIHR5cGVvZiBzZWxmICE9PSBcInVuZGVmaW5lZFwiID8gc2VsZiA6ICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyA/IHdpbmRvdyA6IGdsb2JhbClcbn0pKCk7XG5cbmNvbnN0IGlzQ29udGV4dERlZmluZWQgPSAoY29udGV4dCkgPT4gIWlzVW5kZWZpbmVkKGNvbnRleHQpICYmIGNvbnRleHQgIT09IF9nbG9iYWw7XG5cbi8qKlxuICogQWNjZXB0cyB2YXJhcmdzIGV4cGVjdGluZyBlYWNoIGFyZ3VtZW50IHRvIGJlIGFuIG9iamVjdCwgdGhlblxuICogaW1tdXRhYmx5IG1lcmdlcyB0aGUgcHJvcGVydGllcyBvZiBlYWNoIG9iamVjdCBhbmQgcmV0dXJucyByZXN1bHQuXG4gKlxuICogV2hlbiBtdWx0aXBsZSBvYmplY3RzIGNvbnRhaW4gdGhlIHNhbWUga2V5IHRoZSBsYXRlciBvYmplY3QgaW5cbiAqIHRoZSBhcmd1bWVudHMgbGlzdCB3aWxsIHRha2UgcHJlY2VkZW5jZS5cbiAqXG4gKiBFeGFtcGxlOlxuICpcbiAqIGBgYGpzXG4gKiB2YXIgcmVzdWx0ID0gbWVyZ2Uoe2ZvbzogMTIzfSwge2ZvbzogNDU2fSk7XG4gKiBjb25zb2xlLmxvZyhyZXN1bHQuZm9vKTsgLy8gb3V0cHV0cyA0NTZcbiAqIGBgYFxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmoxIE9iamVjdCB0byBtZXJnZVxuICpcbiAqIEByZXR1cm5zIHtPYmplY3R9IFJlc3VsdCBvZiBhbGwgbWVyZ2UgcHJvcGVydGllc1xuICovXG5mdW5jdGlvbiBtZXJnZSgvKiBvYmoxLCBvYmoyLCBvYmozLCAuLi4gKi8pIHtcbiAgY29uc3Qge2Nhc2VsZXNzfSA9IGlzQ29udGV4dERlZmluZWQodGhpcykgJiYgdGhpcyB8fCB7fTtcbiAgY29uc3QgcmVzdWx0ID0ge307XG4gIGNvbnN0IGFzc2lnblZhbHVlID0gKHZhbCwga2V5KSA9PiB7XG4gICAgY29uc3QgdGFyZ2V0S2V5ID0gY2FzZWxlc3MgJiYgZmluZEtleShyZXN1bHQsIGtleSkgfHwga2V5O1xuICAgIGlmIChpc1BsYWluT2JqZWN0KHJlc3VsdFt0YXJnZXRLZXldKSAmJiBpc1BsYWluT2JqZWN0KHZhbCkpIHtcbiAgICAgIHJlc3VsdFt0YXJnZXRLZXldID0gbWVyZ2UocmVzdWx0W3RhcmdldEtleV0sIHZhbCk7XG4gICAgfSBlbHNlIGlmIChpc1BsYWluT2JqZWN0KHZhbCkpIHtcbiAgICAgIHJlc3VsdFt0YXJnZXRLZXldID0gbWVyZ2Uoe30sIHZhbCk7XG4gICAgfSBlbHNlIGlmIChpc0FycmF5KHZhbCkpIHtcbiAgICAgIHJlc3VsdFt0YXJnZXRLZXldID0gdmFsLnNsaWNlKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlc3VsdFt0YXJnZXRLZXldID0gdmFsO1xuICAgIH1cbiAgfTtcblxuICBmb3IgKGxldCBpID0gMCwgbCA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICBhcmd1bWVudHNbaV0gJiYgZm9yRWFjaChhcmd1bWVudHNbaV0sIGFzc2lnblZhbHVlKTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG4vKipcbiAqIEV4dGVuZHMgb2JqZWN0IGEgYnkgbXV0YWJseSBhZGRpbmcgdG8gaXQgdGhlIHByb3BlcnRpZXMgb2Ygb2JqZWN0IGIuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGEgVGhlIG9iamVjdCB0byBiZSBleHRlbmRlZFxuICogQHBhcmFtIHtPYmplY3R9IGIgVGhlIG9iamVjdCB0byBjb3B5IHByb3BlcnRpZXMgZnJvbVxuICogQHBhcmFtIHtPYmplY3R9IHRoaXNBcmcgVGhlIG9iamVjdCB0byBiaW5kIGZ1bmN0aW9uIHRvXG4gKlxuICogQHBhcmFtIHtCb29sZWFufSBbYWxsT3duS2V5c11cbiAqIEByZXR1cm5zIHtPYmplY3R9IFRoZSByZXN1bHRpbmcgdmFsdWUgb2Ygb2JqZWN0IGFcbiAqL1xuY29uc3QgZXh0ZW5kID0gKGEsIGIsIHRoaXNBcmcsIHthbGxPd25LZXlzfT0ge30pID0+IHtcbiAgZm9yRWFjaChiLCAodmFsLCBrZXkpID0+IHtcbiAgICBpZiAodGhpc0FyZyAmJiBpc0Z1bmN0aW9uKHZhbCkpIHtcbiAgICAgIGFba2V5XSA9IGJpbmQodmFsLCB0aGlzQXJnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgYVtrZXldID0gdmFsO1xuICAgIH1cbiAgfSwge2FsbE93bktleXN9KTtcbiAgcmV0dXJuIGE7XG59O1xuXG4vKipcbiAqIFJlbW92ZSBieXRlIG9yZGVyIG1hcmtlci4gVGhpcyBjYXRjaGVzIEVGIEJCIEJGICh0aGUgVVRGLTggQk9NKVxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBjb250ZW50IHdpdGggQk9NXG4gKlxuICogQHJldHVybnMge3N0cmluZ30gY29udGVudCB2YWx1ZSB3aXRob3V0IEJPTVxuICovXG5jb25zdCBzdHJpcEJPTSA9IChjb250ZW50KSA9PiB7XG4gIGlmIChjb250ZW50LmNoYXJDb2RlQXQoMCkgPT09IDB4RkVGRikge1xuICAgIGNvbnRlbnQgPSBjb250ZW50LnNsaWNlKDEpO1xuICB9XG4gIHJldHVybiBjb250ZW50O1xufTtcblxuLyoqXG4gKiBJbmhlcml0IHRoZSBwcm90b3R5cGUgbWV0aG9kcyBmcm9tIG9uZSBjb25zdHJ1Y3RvciBpbnRvIGFub3RoZXJcbiAqIEBwYXJhbSB7ZnVuY3Rpb259IGNvbnN0cnVjdG9yXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBzdXBlckNvbnN0cnVjdG9yXG4gKiBAcGFyYW0ge29iamVjdH0gW3Byb3BzXVxuICogQHBhcmFtIHtvYmplY3R9IFtkZXNjcmlwdG9yc11cbiAqXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuY29uc3QgaW5oZXJpdHMgPSAoY29uc3RydWN0b3IsIHN1cGVyQ29uc3RydWN0b3IsIHByb3BzLCBkZXNjcmlwdG9ycykgPT4ge1xuICBjb25zdHJ1Y3Rvci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ29uc3RydWN0b3IucHJvdG90eXBlLCBkZXNjcmlwdG9ycyk7XG4gIGNvbnN0cnVjdG9yLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IGNvbnN0cnVjdG9yO1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoY29uc3RydWN0b3IsICdzdXBlcicsIHtcbiAgICB2YWx1ZTogc3VwZXJDb25zdHJ1Y3Rvci5wcm90b3R5cGVcbiAgfSk7XG4gIHByb3BzICYmIE9iamVjdC5hc3NpZ24oY29uc3RydWN0b3IucHJvdG90eXBlLCBwcm9wcyk7XG59O1xuXG4vKipcbiAqIFJlc29sdmUgb2JqZWN0IHdpdGggZGVlcCBwcm90b3R5cGUgY2hhaW4gdG8gYSBmbGF0IG9iamVjdFxuICogQHBhcmFtIHtPYmplY3R9IHNvdXJjZU9iaiBzb3VyY2Ugb2JqZWN0XG4gKiBAcGFyYW0ge09iamVjdH0gW2Rlc3RPYmpdXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufEJvb2xlYW59IFtmaWx0ZXJdXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbcHJvcEZpbHRlcl1cbiAqXG4gKiBAcmV0dXJucyB7T2JqZWN0fVxuICovXG5jb25zdCB0b0ZsYXRPYmplY3QgPSAoc291cmNlT2JqLCBkZXN0T2JqLCBmaWx0ZXIsIHByb3BGaWx0ZXIpID0+IHtcbiAgbGV0IHByb3BzO1xuICBsZXQgaTtcbiAgbGV0IHByb3A7XG4gIGNvbnN0IG1lcmdlZCA9IHt9O1xuXG4gIGRlc3RPYmogPSBkZXN0T2JqIHx8IHt9O1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tZXEtbnVsbCxlcWVxZXFcbiAgaWYgKHNvdXJjZU9iaiA9PSBudWxsKSByZXR1cm4gZGVzdE9iajtcblxuICBkbyB7XG4gICAgcHJvcHMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhzb3VyY2VPYmopO1xuICAgIGkgPSBwcm9wcy5sZW5ndGg7XG4gICAgd2hpbGUgKGktLSA+IDApIHtcbiAgICAgIHByb3AgPSBwcm9wc1tpXTtcbiAgICAgIGlmICgoIXByb3BGaWx0ZXIgfHwgcHJvcEZpbHRlcihwcm9wLCBzb3VyY2VPYmosIGRlc3RPYmopKSAmJiAhbWVyZ2VkW3Byb3BdKSB7XG4gICAgICAgIGRlc3RPYmpbcHJvcF0gPSBzb3VyY2VPYmpbcHJvcF07XG4gICAgICAgIG1lcmdlZFtwcm9wXSA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuICAgIHNvdXJjZU9iaiA9IGZpbHRlciAhPT0gZmFsc2UgJiYgZ2V0UHJvdG90eXBlT2Yoc291cmNlT2JqKTtcbiAgfSB3aGlsZSAoc291cmNlT2JqICYmICghZmlsdGVyIHx8IGZpbHRlcihzb3VyY2VPYmosIGRlc3RPYmopKSAmJiBzb3VyY2VPYmogIT09IE9iamVjdC5wcm90b3R5cGUpO1xuXG4gIHJldHVybiBkZXN0T2JqO1xufTtcblxuLyoqXG4gKiBEZXRlcm1pbmVzIHdoZXRoZXIgYSBzdHJpbmcgZW5kcyB3aXRoIHRoZSBjaGFyYWN0ZXJzIG9mIGEgc3BlY2lmaWVkIHN0cmluZ1xuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBzdHJcbiAqIEBwYXJhbSB7U3RyaW5nfSBzZWFyY2hTdHJpbmdcbiAqIEBwYXJhbSB7TnVtYmVyfSBbcG9zaXRpb249IDBdXG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKi9cbmNvbnN0IGVuZHNXaXRoID0gKHN0ciwgc2VhcmNoU3RyaW5nLCBwb3NpdGlvbikgPT4ge1xuICBzdHIgPSBTdHJpbmcoc3RyKTtcbiAgaWYgKHBvc2l0aW9uID09PSB1bmRlZmluZWQgfHwgcG9zaXRpb24gPiBzdHIubGVuZ3RoKSB7XG4gICAgcG9zaXRpb24gPSBzdHIubGVuZ3RoO1xuICB9XG4gIHBvc2l0aW9uIC09IHNlYXJjaFN0cmluZy5sZW5ndGg7XG4gIGNvbnN0IGxhc3RJbmRleCA9IHN0ci5pbmRleE9mKHNlYXJjaFN0cmluZywgcG9zaXRpb24pO1xuICByZXR1cm4gbGFzdEluZGV4ICE9PSAtMSAmJiBsYXN0SW5kZXggPT09IHBvc2l0aW9uO1xufTtcblxuXG4vKipcbiAqIFJldHVybnMgbmV3IGFycmF5IGZyb20gYXJyYXkgbGlrZSBvYmplY3Qgb3IgbnVsbCBpZiBmYWlsZWRcbiAqXG4gKiBAcGFyYW0geyp9IFt0aGluZ11cbiAqXG4gKiBAcmV0dXJucyB7P0FycmF5fVxuICovXG5jb25zdCB0b0FycmF5ID0gKHRoaW5nKSA9PiB7XG4gIGlmICghdGhpbmcpIHJldHVybiBudWxsO1xuICBpZiAoaXNBcnJheSh0aGluZykpIHJldHVybiB0aGluZztcbiAgbGV0IGkgPSB0aGluZy5sZW5ndGg7XG4gIGlmICghaXNOdW1iZXIoaSkpIHJldHVybiBudWxsO1xuICBjb25zdCBhcnIgPSBuZXcgQXJyYXkoaSk7XG4gIHdoaWxlIChpLS0gPiAwKSB7XG4gICAgYXJyW2ldID0gdGhpbmdbaV07XG4gIH1cbiAgcmV0dXJuIGFycjtcbn07XG5cbi8qKlxuICogQ2hlY2tpbmcgaWYgdGhlIFVpbnQ4QXJyYXkgZXhpc3RzIGFuZCBpZiBpdCBkb2VzLCBpdCByZXR1cm5zIGEgZnVuY3Rpb24gdGhhdCBjaGVja3MgaWYgdGhlXG4gKiB0aGluZyBwYXNzZWQgaW4gaXMgYW4gaW5zdGFuY2Ugb2YgVWludDhBcnJheVxuICpcbiAqIEBwYXJhbSB7VHlwZWRBcnJheX1cbiAqXG4gKiBAcmV0dXJucyB7QXJyYXl9XG4gKi9cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBmdW5jLW5hbWVzXG5jb25zdCBpc1R5cGVkQXJyYXkgPSAoVHlwZWRBcnJheSA9PiB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBmdW5jLW5hbWVzXG4gIHJldHVybiB0aGluZyA9PiB7XG4gICAgcmV0dXJuIFR5cGVkQXJyYXkgJiYgdGhpbmcgaW5zdGFuY2VvZiBUeXBlZEFycmF5O1xuICB9O1xufSkodHlwZW9mIFVpbnQ4QXJyYXkgIT09ICd1bmRlZmluZWQnICYmIGdldFByb3RvdHlwZU9mKFVpbnQ4QXJyYXkpKTtcblxuLyoqXG4gKiBGb3IgZWFjaCBlbnRyeSBpbiB0aGUgb2JqZWN0LCBjYWxsIHRoZSBmdW5jdGlvbiB3aXRoIHRoZSBrZXkgYW5kIHZhbHVlLlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0PGFueSwgYW55Pn0gb2JqIC0gVGhlIG9iamVjdCB0byBpdGVyYXRlIG92ZXIuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmbiAtIFRoZSBmdW5jdGlvbiB0byBjYWxsIGZvciBlYWNoIGVudHJ5LlxuICpcbiAqIEByZXR1cm5zIHt2b2lkfVxuICovXG5jb25zdCBmb3JFYWNoRW50cnkgPSAob2JqLCBmbikgPT4ge1xuICBjb25zdCBnZW5lcmF0b3IgPSBvYmogJiYgb2JqW1N5bWJvbC5pdGVyYXRvcl07XG5cbiAgY29uc3QgaXRlcmF0b3IgPSBnZW5lcmF0b3IuY2FsbChvYmopO1xuXG4gIGxldCByZXN1bHQ7XG5cbiAgd2hpbGUgKChyZXN1bHQgPSBpdGVyYXRvci5uZXh0KCkpICYmICFyZXN1bHQuZG9uZSkge1xuICAgIGNvbnN0IHBhaXIgPSByZXN1bHQudmFsdWU7XG4gICAgZm4uY2FsbChvYmosIHBhaXJbMF0sIHBhaXJbMV0pO1xuICB9XG59O1xuXG4vKipcbiAqIEl0IHRha2VzIGEgcmVndWxhciBleHByZXNzaW9uIGFuZCBhIHN0cmluZywgYW5kIHJldHVybnMgYW4gYXJyYXkgb2YgYWxsIHRoZSBtYXRjaGVzXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHJlZ0V4cCAtIFRoZSByZWd1bGFyIGV4cHJlc3Npb24gdG8gbWF0Y2ggYWdhaW5zdC5cbiAqIEBwYXJhbSB7c3RyaW5nfSBzdHIgLSBUaGUgc3RyaW5nIHRvIHNlYXJjaC5cbiAqXG4gKiBAcmV0dXJucyB7QXJyYXk8Ym9vbGVhbj59XG4gKi9cbmNvbnN0IG1hdGNoQWxsID0gKHJlZ0V4cCwgc3RyKSA9PiB7XG4gIGxldCBtYXRjaGVzO1xuICBjb25zdCBhcnIgPSBbXTtcblxuICB3aGlsZSAoKG1hdGNoZXMgPSByZWdFeHAuZXhlYyhzdHIpKSAhPT0gbnVsbCkge1xuICAgIGFyci5wdXNoKG1hdGNoZXMpO1xuICB9XG5cbiAgcmV0dXJuIGFycjtcbn07XG5cbi8qIENoZWNraW5nIGlmIHRoZSBraW5kT2ZUZXN0IGZ1bmN0aW9uIHJldHVybnMgdHJ1ZSB3aGVuIHBhc3NlZCBhbiBIVE1MRm9ybUVsZW1lbnQuICovXG5jb25zdCBpc0hUTUxGb3JtID0ga2luZE9mVGVzdCgnSFRNTEZvcm1FbGVtZW50Jyk7XG5cbmNvbnN0IHRvQ2FtZWxDYXNlID0gc3RyID0+IHtcbiAgcmV0dXJuIHN0ci50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoL1stX1xcc10oW2EtelxcZF0pKFxcdyopL2csXG4gICAgZnVuY3Rpb24gcmVwbGFjZXIobSwgcDEsIHAyKSB7XG4gICAgICByZXR1cm4gcDEudG9VcHBlckNhc2UoKSArIHAyO1xuICAgIH1cbiAgKTtcbn07XG5cbi8qIENyZWF0aW5nIGEgZnVuY3Rpb24gdGhhdCB3aWxsIGNoZWNrIGlmIGFuIG9iamVjdCBoYXMgYSBwcm9wZXJ0eS4gKi9cbmNvbnN0IGhhc093blByb3BlcnR5ID0gKCh7aGFzT3duUHJvcGVydHl9KSA9PiAob2JqLCBwcm9wKSA9PiBoYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwgcHJvcCkpKE9iamVjdC5wcm90b3R5cGUpO1xuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgUmVnRXhwIG9iamVjdFxuICpcbiAqIEBwYXJhbSB7Kn0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBSZWdFeHAgb2JqZWN0LCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuY29uc3QgaXNSZWdFeHAgPSBraW5kT2ZUZXN0KCdSZWdFeHAnKTtcblxuY29uc3QgcmVkdWNlRGVzY3JpcHRvcnMgPSAob2JqLCByZWR1Y2VyKSA9PiB7XG4gIGNvbnN0IGRlc2NyaXB0b3JzID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMob2JqKTtcbiAgY29uc3QgcmVkdWNlZERlc2NyaXB0b3JzID0ge307XG5cbiAgZm9yRWFjaChkZXNjcmlwdG9ycywgKGRlc2NyaXB0b3IsIG5hbWUpID0+IHtcbiAgICBsZXQgcmV0O1xuICAgIGlmICgocmV0ID0gcmVkdWNlcihkZXNjcmlwdG9yLCBuYW1lLCBvYmopKSAhPT0gZmFsc2UpIHtcbiAgICAgIHJlZHVjZWREZXNjcmlwdG9yc1tuYW1lXSA9IHJldCB8fCBkZXNjcmlwdG9yO1xuICAgIH1cbiAgfSk7XG5cbiAgT2JqZWN0LmRlZmluZVByb3BlcnRpZXMob2JqLCByZWR1Y2VkRGVzY3JpcHRvcnMpO1xufTtcblxuLyoqXG4gKiBNYWtlcyBhbGwgbWV0aG9kcyByZWFkLW9ubHlcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmpcbiAqL1xuXG5jb25zdCBmcmVlemVNZXRob2RzID0gKG9iaikgPT4ge1xuICByZWR1Y2VEZXNjcmlwdG9ycyhvYmosIChkZXNjcmlwdG9yLCBuYW1lKSA9PiB7XG4gICAgLy8gc2tpcCByZXN0cmljdGVkIHByb3BzIGluIHN0cmljdCBtb2RlXG4gICAgaWYgKGlzRnVuY3Rpb24ob2JqKSAmJiBbJ2FyZ3VtZW50cycsICdjYWxsZXInLCAnY2FsbGVlJ10uaW5kZXhPZihuYW1lKSAhPT0gLTEpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBjb25zdCB2YWx1ZSA9IG9ialtuYW1lXTtcblxuICAgIGlmICghaXNGdW5jdGlvbih2YWx1ZSkpIHJldHVybjtcblxuICAgIGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IGZhbHNlO1xuXG4gICAgaWYgKCd3cml0YWJsZScgaW4gZGVzY3JpcHRvcikge1xuICAgICAgZGVzY3JpcHRvci53cml0YWJsZSA9IGZhbHNlO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICghZGVzY3JpcHRvci5zZXQpIHtcbiAgICAgIGRlc2NyaXB0b3Iuc2V0ID0gKCkgPT4ge1xuICAgICAgICB0aHJvdyBFcnJvcignQ2FuIG5vdCByZXdyaXRlIHJlYWQtb25seSBtZXRob2QgXFwnJyArIG5hbWUgKyAnXFwnJyk7XG4gICAgICB9O1xuICAgIH1cbiAgfSk7XG59O1xuXG5jb25zdCB0b09iamVjdFNldCA9IChhcnJheU9yU3RyaW5nLCBkZWxpbWl0ZXIpID0+IHtcbiAgY29uc3Qgb2JqID0ge307XG5cbiAgY29uc3QgZGVmaW5lID0gKGFycikgPT4ge1xuICAgIGFyci5mb3JFYWNoKHZhbHVlID0+IHtcbiAgICAgIG9ialt2YWx1ZV0gPSB0cnVlO1xuICAgIH0pO1xuICB9O1xuXG4gIGlzQXJyYXkoYXJyYXlPclN0cmluZykgPyBkZWZpbmUoYXJyYXlPclN0cmluZykgOiBkZWZpbmUoU3RyaW5nKGFycmF5T3JTdHJpbmcpLnNwbGl0KGRlbGltaXRlcikpO1xuXG4gIHJldHVybiBvYmo7XG59O1xuXG5jb25zdCBub29wID0gKCkgPT4ge307XG5cbmNvbnN0IHRvRmluaXRlTnVtYmVyID0gKHZhbHVlLCBkZWZhdWx0VmFsdWUpID0+IHtcbiAgcmV0dXJuIHZhbHVlICE9IG51bGwgJiYgTnVtYmVyLmlzRmluaXRlKHZhbHVlID0gK3ZhbHVlKSA/IHZhbHVlIDogZGVmYXVsdFZhbHVlO1xufTtcblxuY29uc3QgQUxQSEEgPSAnYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXonO1xuXG5jb25zdCBESUdJVCA9ICcwMTIzNDU2Nzg5JztcblxuY29uc3QgQUxQSEFCRVQgPSB7XG4gIERJR0lULFxuICBBTFBIQSxcbiAgQUxQSEFfRElHSVQ6IEFMUEhBICsgQUxQSEEudG9VcHBlckNhc2UoKSArIERJR0lUXG59O1xuXG5jb25zdCBnZW5lcmF0ZVN0cmluZyA9IChzaXplID0gMTYsIGFscGhhYmV0ID0gQUxQSEFCRVQuQUxQSEFfRElHSVQpID0+IHtcbiAgbGV0IHN0ciA9ICcnO1xuICBjb25zdCB7bGVuZ3RofSA9IGFscGhhYmV0O1xuICB3aGlsZSAoc2l6ZS0tKSB7XG4gICAgc3RyICs9IGFscGhhYmV0W01hdGgucmFuZG9tKCkgKiBsZW5ndGh8MF07XG4gIH1cblxuICByZXR1cm4gc3RyO1xufTtcblxuLyoqXG4gKiBJZiB0aGUgdGhpbmcgaXMgYSBGb3JtRGF0YSBvYmplY3QsIHJldHVybiB0cnVlLCBvdGhlcndpc2UgcmV0dXJuIGZhbHNlLlxuICpcbiAqIEBwYXJhbSB7dW5rbm93bn0gdGhpbmcgLSBUaGUgdGhpbmcgdG8gY2hlY2suXG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKi9cbmZ1bmN0aW9uIGlzU3BlY0NvbXBsaWFudEZvcm0odGhpbmcpIHtcbiAgcmV0dXJuICEhKHRoaW5nICYmIGlzRnVuY3Rpb24odGhpbmcuYXBwZW5kKSAmJiB0aGluZ1tTeW1ib2wudG9TdHJpbmdUYWddID09PSAnRm9ybURhdGEnICYmIHRoaW5nW1N5bWJvbC5pdGVyYXRvcl0pO1xufVxuXG5jb25zdCB0b0pTT05PYmplY3QgPSAob2JqKSA9PiB7XG4gIGNvbnN0IHN0YWNrID0gbmV3IEFycmF5KDEwKTtcblxuICBjb25zdCB2aXNpdCA9IChzb3VyY2UsIGkpID0+IHtcblxuICAgIGlmIChpc09iamVjdChzb3VyY2UpKSB7XG4gICAgICBpZiAoc3RhY2suaW5kZXhPZihzb3VyY2UpID49IDApIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZighKCd0b0pTT04nIGluIHNvdXJjZSkpIHtcbiAgICAgICAgc3RhY2tbaV0gPSBzb3VyY2U7XG4gICAgICAgIGNvbnN0IHRhcmdldCA9IGlzQXJyYXkoc291cmNlKSA/IFtdIDoge307XG5cbiAgICAgICAgZm9yRWFjaChzb3VyY2UsICh2YWx1ZSwga2V5KSA9PiB7XG4gICAgICAgICAgY29uc3QgcmVkdWNlZFZhbHVlID0gdmlzaXQodmFsdWUsIGkgKyAxKTtcbiAgICAgICAgICAhaXNVbmRlZmluZWQocmVkdWNlZFZhbHVlKSAmJiAodGFyZ2V0W2tleV0gPSByZWR1Y2VkVmFsdWUpO1xuICAgICAgICB9KTtcblxuICAgICAgICBzdGFja1tpXSA9IHVuZGVmaW5lZDtcblxuICAgICAgICByZXR1cm4gdGFyZ2V0O1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBzb3VyY2U7XG4gIH07XG5cbiAgcmV0dXJuIHZpc2l0KG9iaiwgMCk7XG59O1xuXG5jb25zdCBpc0FzeW5jRm4gPSBraW5kT2ZUZXN0KCdBc3luY0Z1bmN0aW9uJyk7XG5cbmNvbnN0IGlzVGhlbmFibGUgPSAodGhpbmcpID0+XG4gIHRoaW5nICYmIChpc09iamVjdCh0aGluZykgfHwgaXNGdW5jdGlvbih0aGluZykpICYmIGlzRnVuY3Rpb24odGhpbmcudGhlbikgJiYgaXNGdW5jdGlvbih0aGluZy5jYXRjaCk7XG5cbi8vIG9yaWdpbmFsIGNvZGVcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9EaWdpdGFsQnJhaW5KUy9BeGlvc1Byb21pc2UvYmxvYi8xNmRlYWIxMzcxMGVjMDk3Nzk5MjIxMzFmM2ZhNTk1NDMyMGY4M2FiL2xpYi91dGlscy5qcyNMMTEtTDM0XG5cbmNvbnN0IF9zZXRJbW1lZGlhdGUgPSAoKHNldEltbWVkaWF0ZVN1cHBvcnRlZCwgcG9zdE1lc3NhZ2VTdXBwb3J0ZWQpID0+IHtcbiAgaWYgKHNldEltbWVkaWF0ZVN1cHBvcnRlZCkge1xuICAgIHJldHVybiBzZXRJbW1lZGlhdGU7XG4gIH1cblxuICByZXR1cm4gcG9zdE1lc3NhZ2VTdXBwb3J0ZWQgPyAoKHRva2VuLCBjYWxsYmFja3MpID0+IHtcbiAgICBfZ2xvYmFsLmFkZEV2ZW50TGlzdGVuZXIoXCJtZXNzYWdlXCIsICh7c291cmNlLCBkYXRhfSkgPT4ge1xuICAgICAgaWYgKHNvdXJjZSA9PT0gX2dsb2JhbCAmJiBkYXRhID09PSB0b2tlbikge1xuICAgICAgICBjYWxsYmFja3MubGVuZ3RoICYmIGNhbGxiYWNrcy5zaGlmdCgpKCk7XG4gICAgICB9XG4gICAgfSwgZmFsc2UpO1xuXG4gICAgcmV0dXJuIChjYikgPT4ge1xuICAgICAgY2FsbGJhY2tzLnB1c2goY2IpO1xuICAgICAgX2dsb2JhbC5wb3N0TWVzc2FnZSh0b2tlbiwgXCIqXCIpO1xuICAgIH1cbiAgfSkoYGF4aW9zQCR7TWF0aC5yYW5kb20oKX1gLCBbXSkgOiAoY2IpID0+IHNldFRpbWVvdXQoY2IpO1xufSkoXG4gIHR5cGVvZiBzZXRJbW1lZGlhdGUgPT09ICdmdW5jdGlvbicsXG4gIGlzRnVuY3Rpb24oX2dsb2JhbC5wb3N0TWVzc2FnZSlcbik7XG5cbmNvbnN0IGFzYXAgPSB0eXBlb2YgcXVldWVNaWNyb3Rhc2sgIT09ICd1bmRlZmluZWQnID9cbiAgcXVldWVNaWNyb3Rhc2suYmluZChfZ2xvYmFsKSA6ICggdHlwZW9mIHByb2Nlc3MgIT09ICd1bmRlZmluZWQnICYmIHByb2Nlc3MubmV4dFRpY2sgfHwgX3NldEltbWVkaWF0ZSk7XG5cbi8vICoqKioqKioqKioqKioqKioqKioqKlxuXG5jb25zdCB1dGlscyQxID0ge1xuICBpc0FycmF5LFxuICBpc0FycmF5QnVmZmVyLFxuICBpc0J1ZmZlcixcbiAgaXNGb3JtRGF0YSxcbiAgaXNBcnJheUJ1ZmZlclZpZXcsXG4gIGlzU3RyaW5nLFxuICBpc051bWJlcixcbiAgaXNCb29sZWFuLFxuICBpc09iamVjdCxcbiAgaXNQbGFpbk9iamVjdCxcbiAgaXNSZWFkYWJsZVN0cmVhbSxcbiAgaXNSZXF1ZXN0LFxuICBpc1Jlc3BvbnNlLFxuICBpc0hlYWRlcnMsXG4gIGlzVW5kZWZpbmVkLFxuICBpc0RhdGUsXG4gIGlzRmlsZSxcbiAgaXNCbG9iLFxuICBpc1JlZ0V4cCxcbiAgaXNGdW5jdGlvbixcbiAgaXNTdHJlYW0sXG4gIGlzVVJMU2VhcmNoUGFyYW1zLFxuICBpc1R5cGVkQXJyYXksXG4gIGlzRmlsZUxpc3QsXG4gIGZvckVhY2gsXG4gIG1lcmdlLFxuICBleHRlbmQsXG4gIHRyaW0sXG4gIHN0cmlwQk9NLFxuICBpbmhlcml0cyxcbiAgdG9GbGF0T2JqZWN0LFxuICBraW5kT2YsXG4gIGtpbmRPZlRlc3QsXG4gIGVuZHNXaXRoLFxuICB0b0FycmF5LFxuICBmb3JFYWNoRW50cnksXG4gIG1hdGNoQWxsLFxuICBpc0hUTUxGb3JtLFxuICBoYXNPd25Qcm9wZXJ0eSxcbiAgaGFzT3duUHJvcDogaGFzT3duUHJvcGVydHksIC8vIGFuIGFsaWFzIHRvIGF2b2lkIEVTTGludCBuby1wcm90b3R5cGUtYnVpbHRpbnMgZGV0ZWN0aW9uXG4gIHJlZHVjZURlc2NyaXB0b3JzLFxuICBmcmVlemVNZXRob2RzLFxuICB0b09iamVjdFNldCxcbiAgdG9DYW1lbENhc2UsXG4gIG5vb3AsXG4gIHRvRmluaXRlTnVtYmVyLFxuICBmaW5kS2V5LFxuICBnbG9iYWw6IF9nbG9iYWwsXG4gIGlzQ29udGV4dERlZmluZWQsXG4gIEFMUEhBQkVULFxuICBnZW5lcmF0ZVN0cmluZyxcbiAgaXNTcGVjQ29tcGxpYW50Rm9ybSxcbiAgdG9KU09OT2JqZWN0LFxuICBpc0FzeW5jRm4sXG4gIGlzVGhlbmFibGUsXG4gIHNldEltbWVkaWF0ZTogX3NldEltbWVkaWF0ZSxcbiAgYXNhcFxufTtcblxuLyoqXG4gKiBDcmVhdGUgYW4gRXJyb3Igd2l0aCB0aGUgc3BlY2lmaWVkIG1lc3NhZ2UsIGNvbmZpZywgZXJyb3IgY29kZSwgcmVxdWVzdCBhbmQgcmVzcG9uc2UuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IG1lc3NhZ2UgVGhlIGVycm9yIG1lc3NhZ2UuXG4gKiBAcGFyYW0ge3N0cmluZ30gW2NvZGVdIFRoZSBlcnJvciBjb2RlIChmb3IgZXhhbXBsZSwgJ0VDT05OQUJPUlRFRCcpLlxuICogQHBhcmFtIHtPYmplY3R9IFtjb25maWddIFRoZSBjb25maWcuXG4gKiBAcGFyYW0ge09iamVjdH0gW3JlcXVlc3RdIFRoZSByZXF1ZXN0LlxuICogQHBhcmFtIHtPYmplY3R9IFtyZXNwb25zZV0gVGhlIHJlc3BvbnNlLlxuICpcbiAqIEByZXR1cm5zIHtFcnJvcn0gVGhlIGNyZWF0ZWQgZXJyb3IuXG4gKi9cbmZ1bmN0aW9uIEF4aW9zRXJyb3IobWVzc2FnZSwgY29kZSwgY29uZmlnLCByZXF1ZXN0LCByZXNwb25zZSkge1xuICBFcnJvci5jYWxsKHRoaXMpO1xuXG4gIGlmIChFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSkge1xuICAgIEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKHRoaXMsIHRoaXMuY29uc3RydWN0b3IpO1xuICB9IGVsc2Uge1xuICAgIHRoaXMuc3RhY2sgPSAobmV3IEVycm9yKCkpLnN0YWNrO1xuICB9XG5cbiAgdGhpcy5tZXNzYWdlID0gbWVzc2FnZTtcbiAgdGhpcy5uYW1lID0gJ0F4aW9zRXJyb3InO1xuICBjb2RlICYmICh0aGlzLmNvZGUgPSBjb2RlKTtcbiAgY29uZmlnICYmICh0aGlzLmNvbmZpZyA9IGNvbmZpZyk7XG4gIHJlcXVlc3QgJiYgKHRoaXMucmVxdWVzdCA9IHJlcXVlc3QpO1xuICByZXNwb25zZSAmJiAodGhpcy5yZXNwb25zZSA9IHJlc3BvbnNlKTtcbn1cblxudXRpbHMkMS5pbmhlcml0cyhBeGlvc0Vycm9yLCBFcnJvciwge1xuICB0b0pTT046IGZ1bmN0aW9uIHRvSlNPTigpIHtcbiAgICByZXR1cm4ge1xuICAgICAgLy8gU3RhbmRhcmRcbiAgICAgIG1lc3NhZ2U6IHRoaXMubWVzc2FnZSxcbiAgICAgIG5hbWU6IHRoaXMubmFtZSxcbiAgICAgIC8vIE1pY3Jvc29mdFxuICAgICAgZGVzY3JpcHRpb246IHRoaXMuZGVzY3JpcHRpb24sXG4gICAgICBudW1iZXI6IHRoaXMubnVtYmVyLFxuICAgICAgLy8gTW96aWxsYVxuICAgICAgZmlsZU5hbWU6IHRoaXMuZmlsZU5hbWUsXG4gICAgICBsaW5lTnVtYmVyOiB0aGlzLmxpbmVOdW1iZXIsXG4gICAgICBjb2x1bW5OdW1iZXI6IHRoaXMuY29sdW1uTnVtYmVyLFxuICAgICAgc3RhY2s6IHRoaXMuc3RhY2ssXG4gICAgICAvLyBBeGlvc1xuICAgICAgY29uZmlnOiB1dGlscyQxLnRvSlNPTk9iamVjdCh0aGlzLmNvbmZpZyksXG4gICAgICBjb2RlOiB0aGlzLmNvZGUsXG4gICAgICBzdGF0dXM6IHRoaXMucmVzcG9uc2UgJiYgdGhpcy5yZXNwb25zZS5zdGF0dXMgPyB0aGlzLnJlc3BvbnNlLnN0YXR1cyA6IG51bGxcbiAgICB9O1xuICB9XG59KTtcblxuY29uc3QgcHJvdG90eXBlJDEgPSBBeGlvc0Vycm9yLnByb3RvdHlwZTtcbmNvbnN0IGRlc2NyaXB0b3JzID0ge307XG5cbltcbiAgJ0VSUl9CQURfT1BUSU9OX1ZBTFVFJyxcbiAgJ0VSUl9CQURfT1BUSU9OJyxcbiAgJ0VDT05OQUJPUlRFRCcsXG4gICdFVElNRURPVVQnLFxuICAnRVJSX05FVFdPUksnLFxuICAnRVJSX0ZSX1RPT19NQU5ZX1JFRElSRUNUUycsXG4gICdFUlJfREVQUkVDQVRFRCcsXG4gICdFUlJfQkFEX1JFU1BPTlNFJyxcbiAgJ0VSUl9CQURfUkVRVUVTVCcsXG4gICdFUlJfQ0FOQ0VMRUQnLFxuICAnRVJSX05PVF9TVVBQT1JUJyxcbiAgJ0VSUl9JTlZBTElEX1VSTCdcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBmdW5jLW5hbWVzXG5dLmZvckVhY2goY29kZSA9PiB7XG4gIGRlc2NyaXB0b3JzW2NvZGVdID0ge3ZhbHVlOiBjb2RlfTtcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhBeGlvc0Vycm9yLCBkZXNjcmlwdG9ycyk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkocHJvdG90eXBlJDEsICdpc0F4aW9zRXJyb3InLCB7dmFsdWU6IHRydWV9KTtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGZ1bmMtbmFtZXNcbkF4aW9zRXJyb3IuZnJvbSA9IChlcnJvciwgY29kZSwgY29uZmlnLCByZXF1ZXN0LCByZXNwb25zZSwgY3VzdG9tUHJvcHMpID0+IHtcbiAgY29uc3QgYXhpb3NFcnJvciA9IE9iamVjdC5jcmVhdGUocHJvdG90eXBlJDEpO1xuXG4gIHV0aWxzJDEudG9GbGF0T2JqZWN0KGVycm9yLCBheGlvc0Vycm9yLCBmdW5jdGlvbiBmaWx0ZXIob2JqKSB7XG4gICAgcmV0dXJuIG9iaiAhPT0gRXJyb3IucHJvdG90eXBlO1xuICB9LCBwcm9wID0+IHtcbiAgICByZXR1cm4gcHJvcCAhPT0gJ2lzQXhpb3NFcnJvcic7XG4gIH0pO1xuXG4gIEF4aW9zRXJyb3IuY2FsbChheGlvc0Vycm9yLCBlcnJvci5tZXNzYWdlLCBjb2RlLCBjb25maWcsIHJlcXVlc3QsIHJlc3BvbnNlKTtcblxuICBheGlvc0Vycm9yLmNhdXNlID0gZXJyb3I7XG5cbiAgYXhpb3NFcnJvci5uYW1lID0gZXJyb3IubmFtZTtcblxuICBjdXN0b21Qcm9wcyAmJiBPYmplY3QuYXNzaWduKGF4aW9zRXJyb3IsIGN1c3RvbVByb3BzKTtcblxuICByZXR1cm4gYXhpb3NFcnJvcjtcbn07XG5cbi8qKlxuICogRGV0ZXJtaW5lcyBpZiB0aGUgZ2l2ZW4gdGhpbmcgaXMgYSBhcnJheSBvciBqcyBvYmplY3QuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHRoaW5nIC0gVGhlIG9iamVjdCBvciBhcnJheSB0byBiZSB2aXNpdGVkLlxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5mdW5jdGlvbiBpc1Zpc2l0YWJsZSh0aGluZykge1xuICByZXR1cm4gdXRpbHMkMS5pc1BsYWluT2JqZWN0KHRoaW5nKSB8fCB1dGlscyQxLmlzQXJyYXkodGhpbmcpO1xufVxuXG4vKipcbiAqIEl0IHJlbW92ZXMgdGhlIGJyYWNrZXRzIGZyb20gdGhlIGVuZCBvZiBhIHN0cmluZ1xuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgLSBUaGUga2V5IG9mIHRoZSBwYXJhbWV0ZXIuXG4gKlxuICogQHJldHVybnMge3N0cmluZ30gdGhlIGtleSB3aXRob3V0IHRoZSBicmFja2V0cy5cbiAqL1xuZnVuY3Rpb24gcmVtb3ZlQnJhY2tldHMoa2V5KSB7XG4gIHJldHVybiB1dGlscyQxLmVuZHNXaXRoKGtleSwgJ1tdJykgPyBrZXkuc2xpY2UoMCwgLTIpIDoga2V5O1xufVxuXG4vKipcbiAqIEl0IHRha2VzIGEgcGF0aCwgYSBrZXksIGFuZCBhIGJvb2xlYW4sIGFuZCByZXR1cm5zIGEgc3RyaW5nXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHBhdGggLSBUaGUgcGF0aCB0byB0aGUgY3VycmVudCBrZXkuXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IC0gVGhlIGtleSBvZiB0aGUgY3VycmVudCBvYmplY3QgYmVpbmcgaXRlcmF0ZWQgb3Zlci5cbiAqIEBwYXJhbSB7c3RyaW5nfSBkb3RzIC0gSWYgdHJ1ZSwgdGhlIGtleSB3aWxsIGJlIHJlbmRlcmVkIHdpdGggZG90cyBpbnN0ZWFkIG9mIGJyYWNrZXRzLlxuICpcbiAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSBwYXRoIHRvIHRoZSBjdXJyZW50IGtleS5cbiAqL1xuZnVuY3Rpb24gcmVuZGVyS2V5KHBhdGgsIGtleSwgZG90cykge1xuICBpZiAoIXBhdGgpIHJldHVybiBrZXk7XG4gIHJldHVybiBwYXRoLmNvbmNhdChrZXkpLm1hcChmdW5jdGlvbiBlYWNoKHRva2VuLCBpKSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXBhcmFtLXJlYXNzaWduXG4gICAgdG9rZW4gPSByZW1vdmVCcmFja2V0cyh0b2tlbik7XG4gICAgcmV0dXJuICFkb3RzICYmIGkgPyAnWycgKyB0b2tlbiArICddJyA6IHRva2VuO1xuICB9KS5qb2luKGRvdHMgPyAnLicgOiAnJyk7XG59XG5cbi8qKlxuICogSWYgdGhlIGFycmF5IGlzIGFuIGFycmF5IGFuZCBub25lIG9mIGl0cyBlbGVtZW50cyBhcmUgdmlzaXRhYmxlLCB0aGVuIGl0J3MgYSBmbGF0IGFycmF5LlxuICpcbiAqIEBwYXJhbSB7QXJyYXk8YW55Pn0gYXJyIC0gVGhlIGFycmF5IHRvIGNoZWNrXG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKi9cbmZ1bmN0aW9uIGlzRmxhdEFycmF5KGFycikge1xuICByZXR1cm4gdXRpbHMkMS5pc0FycmF5KGFycikgJiYgIWFyci5zb21lKGlzVmlzaXRhYmxlKTtcbn1cblxuY29uc3QgcHJlZGljYXRlcyA9IHV0aWxzJDEudG9GbGF0T2JqZWN0KHV0aWxzJDEsIHt9LCBudWxsLCBmdW5jdGlvbiBmaWx0ZXIocHJvcCkge1xuICByZXR1cm4gL15pc1tBLVpdLy50ZXN0KHByb3ApO1xufSk7XG5cbi8qKlxuICogQ29udmVydCBhIGRhdGEgb2JqZWN0IHRvIEZvcm1EYXRhXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IG9ialxuICogQHBhcmFtIHs/T2JqZWN0fSBbZm9ybURhdGFdXG4gKiBAcGFyYW0gez9PYmplY3R9IFtvcHRpb25zXVxuICogQHBhcmFtIHtGdW5jdGlvbn0gW29wdGlvbnMudmlzaXRvcl1cbiAqIEBwYXJhbSB7Qm9vbGVhbn0gW29wdGlvbnMubWV0YVRva2VucyA9IHRydWVdXG4gKiBAcGFyYW0ge0Jvb2xlYW59IFtvcHRpb25zLmRvdHMgPSBmYWxzZV1cbiAqIEBwYXJhbSB7P0Jvb2xlYW59IFtvcHRpb25zLmluZGV4ZXMgPSBmYWxzZV1cbiAqXG4gKiBAcmV0dXJucyB7T2JqZWN0fVxuICoqL1xuXG4vKipcbiAqIEl0IGNvbnZlcnRzIGFuIG9iamVjdCBpbnRvIGEgRm9ybURhdGEgb2JqZWN0XG4gKlxuICogQHBhcmFtIHtPYmplY3Q8YW55LCBhbnk+fSBvYmogLSBUaGUgb2JqZWN0IHRvIGNvbnZlcnQgdG8gZm9ybSBkYXRhLlxuICogQHBhcmFtIHtzdHJpbmd9IGZvcm1EYXRhIC0gVGhlIEZvcm1EYXRhIG9iamVjdCB0byBhcHBlbmQgdG8uXG4gKiBAcGFyYW0ge09iamVjdDxzdHJpbmcsIGFueT59IG9wdGlvbnNcbiAqXG4gKiBAcmV0dXJuc1xuICovXG5mdW5jdGlvbiB0b0Zvcm1EYXRhKG9iaiwgZm9ybURhdGEsIG9wdGlvbnMpIHtcbiAgaWYgKCF1dGlscyQxLmlzT2JqZWN0KG9iaikpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCd0YXJnZXQgbXVzdCBiZSBhbiBvYmplY3QnKTtcbiAgfVxuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuICBmb3JtRGF0YSA9IGZvcm1EYXRhIHx8IG5ldyAoRm9ybURhdGFfX2RlZmF1bHRbXCJkZWZhdWx0XCJdIHx8IEZvcm1EYXRhKSgpO1xuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuICBvcHRpb25zID0gdXRpbHMkMS50b0ZsYXRPYmplY3Qob3B0aW9ucywge1xuICAgIG1ldGFUb2tlbnM6IHRydWUsXG4gICAgZG90czogZmFsc2UsXG4gICAgaW5kZXhlczogZmFsc2VcbiAgfSwgZmFsc2UsIGZ1bmN0aW9uIGRlZmluZWQob3B0aW9uLCBzb3VyY2UpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tZXEtbnVsbCxlcWVxZXFcbiAgICByZXR1cm4gIXV0aWxzJDEuaXNVbmRlZmluZWQoc291cmNlW29wdGlvbl0pO1xuICB9KTtcblxuICBjb25zdCBtZXRhVG9rZW5zID0gb3B0aW9ucy5tZXRhVG9rZW5zO1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdXNlLWJlZm9yZS1kZWZpbmVcbiAgY29uc3QgdmlzaXRvciA9IG9wdGlvbnMudmlzaXRvciB8fCBkZWZhdWx0VmlzaXRvcjtcbiAgY29uc3QgZG90cyA9IG9wdGlvbnMuZG90cztcbiAgY29uc3QgaW5kZXhlcyA9IG9wdGlvbnMuaW5kZXhlcztcbiAgY29uc3QgX0Jsb2IgPSBvcHRpb25zLkJsb2IgfHwgdHlwZW9mIEJsb2IgIT09ICd1bmRlZmluZWQnICYmIEJsb2I7XG4gIGNvbnN0IHVzZUJsb2IgPSBfQmxvYiAmJiB1dGlscyQxLmlzU3BlY0NvbXBsaWFudEZvcm0oZm9ybURhdGEpO1xuXG4gIGlmICghdXRpbHMkMS5pc0Z1bmN0aW9uKHZpc2l0b3IpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcigndmlzaXRvciBtdXN0IGJlIGEgZnVuY3Rpb24nKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNvbnZlcnRWYWx1ZSh2YWx1ZSkge1xuICAgIGlmICh2YWx1ZSA9PT0gbnVsbCkgcmV0dXJuICcnO1xuXG4gICAgaWYgKHV0aWxzJDEuaXNEYXRlKHZhbHVlKSkge1xuICAgICAgcmV0dXJuIHZhbHVlLnRvSVNPU3RyaW5nKCk7XG4gICAgfVxuXG4gICAgaWYgKCF1c2VCbG9iICYmIHV0aWxzJDEuaXNCbG9iKHZhbHVlKSkge1xuICAgICAgdGhyb3cgbmV3IEF4aW9zRXJyb3IoJ0Jsb2IgaXMgbm90IHN1cHBvcnRlZC4gVXNlIGEgQnVmZmVyIGluc3RlYWQuJyk7XG4gICAgfVxuXG4gICAgaWYgKHV0aWxzJDEuaXNBcnJheUJ1ZmZlcih2YWx1ZSkgfHwgdXRpbHMkMS5pc1R5cGVkQXJyYXkodmFsdWUpKSB7XG4gICAgICByZXR1cm4gdXNlQmxvYiAmJiB0eXBlb2YgQmxvYiA9PT0gJ2Z1bmN0aW9uJyA/IG5ldyBCbG9iKFt2YWx1ZV0pIDogQnVmZmVyLmZyb20odmFsdWUpO1xuICAgIH1cblxuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWZhdWx0IHZpc2l0b3IuXG4gICAqXG4gICAqIEBwYXJhbSB7Kn0gdmFsdWVcbiAgICogQHBhcmFtIHtTdHJpbmd8TnVtYmVyfSBrZXlcbiAgICogQHBhcmFtIHtBcnJheTxTdHJpbmd8TnVtYmVyPn0gcGF0aFxuICAgKiBAdGhpcyB7Rm9ybURhdGF9XG4gICAqXG4gICAqIEByZXR1cm5zIHtib29sZWFufSByZXR1cm4gdHJ1ZSB0byB2aXNpdCB0aGUgZWFjaCBwcm9wIG9mIHRoZSB2YWx1ZSByZWN1cnNpdmVseVxuICAgKi9cbiAgZnVuY3Rpb24gZGVmYXVsdFZpc2l0b3IodmFsdWUsIGtleSwgcGF0aCkge1xuICAgIGxldCBhcnIgPSB2YWx1ZTtcblxuICAgIGlmICh2YWx1ZSAmJiAhcGF0aCAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnKSB7XG4gICAgICBpZiAodXRpbHMkMS5lbmRzV2l0aChrZXksICd7fScpKSB7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuICAgICAgICBrZXkgPSBtZXRhVG9rZW5zID8ga2V5IDoga2V5LnNsaWNlKDAsIC0yKTtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXBhcmFtLXJlYXNzaWduXG4gICAgICAgIHZhbHVlID0gSlNPTi5zdHJpbmdpZnkodmFsdWUpO1xuICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgKHV0aWxzJDEuaXNBcnJheSh2YWx1ZSkgJiYgaXNGbGF0QXJyYXkodmFsdWUpKSB8fFxuICAgICAgICAoKHV0aWxzJDEuaXNGaWxlTGlzdCh2YWx1ZSkgfHwgdXRpbHMkMS5lbmRzV2l0aChrZXksICdbXScpKSAmJiAoYXJyID0gdXRpbHMkMS50b0FycmF5KHZhbHVlKSlcbiAgICAgICAgKSkge1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcGFyYW0tcmVhc3NpZ25cbiAgICAgICAga2V5ID0gcmVtb3ZlQnJhY2tldHMoa2V5KTtcblxuICAgICAgICBhcnIuZm9yRWFjaChmdW5jdGlvbiBlYWNoKGVsLCBpbmRleCkge1xuICAgICAgICAgICEodXRpbHMkMS5pc1VuZGVmaW5lZChlbCkgfHwgZWwgPT09IG51bGwpICYmIGZvcm1EYXRhLmFwcGVuZChcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1uZXN0ZWQtdGVybmFyeVxuICAgICAgICAgICAgaW5kZXhlcyA9PT0gdHJ1ZSA/IHJlbmRlcktleShba2V5XSwgaW5kZXgsIGRvdHMpIDogKGluZGV4ZXMgPT09IG51bGwgPyBrZXkgOiBrZXkgKyAnW10nKSxcbiAgICAgICAgICAgIGNvbnZlcnRWYWx1ZShlbClcbiAgICAgICAgICApO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChpc1Zpc2l0YWJsZSh2YWx1ZSkpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGZvcm1EYXRhLmFwcGVuZChyZW5kZXJLZXkocGF0aCwga2V5LCBkb3RzKSwgY29udmVydFZhbHVlKHZhbHVlKSk7XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBjb25zdCBzdGFjayA9IFtdO1xuXG4gIGNvbnN0IGV4cG9zZWRIZWxwZXJzID0gT2JqZWN0LmFzc2lnbihwcmVkaWNhdGVzLCB7XG4gICAgZGVmYXVsdFZpc2l0b3IsXG4gICAgY29udmVydFZhbHVlLFxuICAgIGlzVmlzaXRhYmxlXG4gIH0pO1xuXG4gIGZ1bmN0aW9uIGJ1aWxkKHZhbHVlLCBwYXRoKSB7XG4gICAgaWYgKHV0aWxzJDEuaXNVbmRlZmluZWQodmFsdWUpKSByZXR1cm47XG5cbiAgICBpZiAoc3RhY2suaW5kZXhPZih2YWx1ZSkgIT09IC0xKSB7XG4gICAgICB0aHJvdyBFcnJvcignQ2lyY3VsYXIgcmVmZXJlbmNlIGRldGVjdGVkIGluICcgKyBwYXRoLmpvaW4oJy4nKSk7XG4gICAgfVxuXG4gICAgc3RhY2sucHVzaCh2YWx1ZSk7XG5cbiAgICB1dGlscyQxLmZvckVhY2godmFsdWUsIGZ1bmN0aW9uIGVhY2goZWwsIGtleSkge1xuICAgICAgY29uc3QgcmVzdWx0ID0gISh1dGlscyQxLmlzVW5kZWZpbmVkKGVsKSB8fCBlbCA9PT0gbnVsbCkgJiYgdmlzaXRvci5jYWxsKFxuICAgICAgICBmb3JtRGF0YSwgZWwsIHV0aWxzJDEuaXNTdHJpbmcoa2V5KSA/IGtleS50cmltKCkgOiBrZXksIHBhdGgsIGV4cG9zZWRIZWxwZXJzXG4gICAgICApO1xuXG4gICAgICBpZiAocmVzdWx0ID09PSB0cnVlKSB7XG4gICAgICAgIGJ1aWxkKGVsLCBwYXRoID8gcGF0aC5jb25jYXQoa2V5KSA6IFtrZXldKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHN0YWNrLnBvcCgpO1xuICB9XG5cbiAgaWYgKCF1dGlscyQxLmlzT2JqZWN0KG9iaikpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdkYXRhIG11c3QgYmUgYW4gb2JqZWN0Jyk7XG4gIH1cblxuICBidWlsZChvYmopO1xuXG4gIHJldHVybiBmb3JtRGF0YTtcbn1cblxuLyoqXG4gKiBJdCBlbmNvZGVzIGEgc3RyaW5nIGJ5IHJlcGxhY2luZyBhbGwgY2hhcmFjdGVycyB0aGF0IGFyZSBub3QgaW4gdGhlIHVucmVzZXJ2ZWQgc2V0IHdpdGhcbiAqIHRoZWlyIHBlcmNlbnQtZW5jb2RlZCBlcXVpdmFsZW50c1xuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBzdHIgLSBUaGUgc3RyaW5nIHRvIGVuY29kZS5cbiAqXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgZW5jb2RlZCBzdHJpbmcuXG4gKi9cbmZ1bmN0aW9uIGVuY29kZSQxKHN0cikge1xuICBjb25zdCBjaGFyTWFwID0ge1xuICAgICchJzogJyUyMScsXG4gICAgXCInXCI6ICclMjcnLFxuICAgICcoJzogJyUyOCcsXG4gICAgJyknOiAnJTI5JyxcbiAgICAnfic6ICclN0UnLFxuICAgICclMjAnOiAnKycsXG4gICAgJyUwMCc6ICdcXHgwMCdcbiAgfTtcbiAgcmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudChzdHIpLnJlcGxhY2UoL1shJygpfl18JTIwfCUwMC9nLCBmdW5jdGlvbiByZXBsYWNlcihtYXRjaCkge1xuICAgIHJldHVybiBjaGFyTWFwW21hdGNoXTtcbiAgfSk7XG59XG5cbi8qKlxuICogSXQgdGFrZXMgYSBwYXJhbXMgb2JqZWN0IGFuZCBjb252ZXJ0cyBpdCB0byBhIEZvcm1EYXRhIG9iamVjdFxuICpcbiAqIEBwYXJhbSB7T2JqZWN0PHN0cmluZywgYW55Pn0gcGFyYW1zIC0gVGhlIHBhcmFtZXRlcnMgdG8gYmUgY29udmVydGVkIHRvIGEgRm9ybURhdGEgb2JqZWN0LlxuICogQHBhcmFtIHtPYmplY3Q8c3RyaW5nLCBhbnk+fSBvcHRpb25zIC0gVGhlIG9wdGlvbnMgb2JqZWN0IHBhc3NlZCB0byB0aGUgQXhpb3MgY29uc3RydWN0b3IuXG4gKlxuICogQHJldHVybnMge3ZvaWR9XG4gKi9cbmZ1bmN0aW9uIEF4aW9zVVJMU2VhcmNoUGFyYW1zKHBhcmFtcywgb3B0aW9ucykge1xuICB0aGlzLl9wYWlycyA9IFtdO1xuXG4gIHBhcmFtcyAmJiB0b0Zvcm1EYXRhKHBhcmFtcywgdGhpcywgb3B0aW9ucyk7XG59XG5cbmNvbnN0IHByb3RvdHlwZSA9IEF4aW9zVVJMU2VhcmNoUGFyYW1zLnByb3RvdHlwZTtcblxucHJvdG90eXBlLmFwcGVuZCA9IGZ1bmN0aW9uIGFwcGVuZChuYW1lLCB2YWx1ZSkge1xuICB0aGlzLl9wYWlycy5wdXNoKFtuYW1lLCB2YWx1ZV0pO1xufTtcblxucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24gdG9TdHJpbmcoZW5jb2Rlcikge1xuICBjb25zdCBfZW5jb2RlID0gZW5jb2RlciA/IGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgcmV0dXJuIGVuY29kZXIuY2FsbCh0aGlzLCB2YWx1ZSwgZW5jb2RlJDEpO1xuICB9IDogZW5jb2RlJDE7XG5cbiAgcmV0dXJuIHRoaXMuX3BhaXJzLm1hcChmdW5jdGlvbiBlYWNoKHBhaXIpIHtcbiAgICByZXR1cm4gX2VuY29kZShwYWlyWzBdKSArICc9JyArIF9lbmNvZGUocGFpclsxXSk7XG4gIH0sICcnKS5qb2luKCcmJyk7XG59O1xuXG4vKipcbiAqIEl0IHJlcGxhY2VzIGFsbCBpbnN0YW5jZXMgb2YgdGhlIGNoYXJhY3RlcnMgYDpgLCBgJGAsIGAsYCwgYCtgLCBgW2AsIGFuZCBgXWAgd2l0aCB0aGVpclxuICogVVJJIGVuY29kZWQgY291bnRlcnBhcnRzXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbCBUaGUgdmFsdWUgdG8gYmUgZW5jb2RlZC5cbiAqXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgZW5jb2RlZCB2YWx1ZS5cbiAqL1xuZnVuY3Rpb24gZW5jb2RlKHZhbCkge1xuICByZXR1cm4gZW5jb2RlVVJJQ29tcG9uZW50KHZhbCkuXG4gICAgcmVwbGFjZSgvJTNBL2dpLCAnOicpLlxuICAgIHJlcGxhY2UoLyUyNC9nLCAnJCcpLlxuICAgIHJlcGxhY2UoLyUyQy9naSwgJywnKS5cbiAgICByZXBsYWNlKC8lMjAvZywgJysnKS5cbiAgICByZXBsYWNlKC8lNUIvZ2ksICdbJykuXG4gICAgcmVwbGFjZSgvJTVEL2dpLCAnXScpO1xufVxuXG4vKipcbiAqIEJ1aWxkIGEgVVJMIGJ5IGFwcGVuZGluZyBwYXJhbXMgdG8gdGhlIGVuZFxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSB1cmwgVGhlIGJhc2Ugb2YgdGhlIHVybCAoZS5nLiwgaHR0cDovL3d3dy5nb29nbGUuY29tKVxuICogQHBhcmFtIHtvYmplY3R9IFtwYXJhbXNdIFRoZSBwYXJhbXMgdG8gYmUgYXBwZW5kZWRcbiAqIEBwYXJhbSB7P29iamVjdH0gb3B0aW9uc1xuICpcbiAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSBmb3JtYXR0ZWQgdXJsXG4gKi9cbmZ1bmN0aW9uIGJ1aWxkVVJMKHVybCwgcGFyYW1zLCBvcHRpb25zKSB7XG4gIC8qZXNsaW50IG5vLXBhcmFtLXJlYXNzaWduOjAqL1xuICBpZiAoIXBhcmFtcykge1xuICAgIHJldHVybiB1cmw7XG4gIH1cbiAgXG4gIGNvbnN0IF9lbmNvZGUgPSBvcHRpb25zICYmIG9wdGlvbnMuZW5jb2RlIHx8IGVuY29kZTtcblxuICBjb25zdCBzZXJpYWxpemVGbiA9IG9wdGlvbnMgJiYgb3B0aW9ucy5zZXJpYWxpemU7XG5cbiAgbGV0IHNlcmlhbGl6ZWRQYXJhbXM7XG5cbiAgaWYgKHNlcmlhbGl6ZUZuKSB7XG4gICAgc2VyaWFsaXplZFBhcmFtcyA9IHNlcmlhbGl6ZUZuKHBhcmFtcywgb3B0aW9ucyk7XG4gIH0gZWxzZSB7XG4gICAgc2VyaWFsaXplZFBhcmFtcyA9IHV0aWxzJDEuaXNVUkxTZWFyY2hQYXJhbXMocGFyYW1zKSA/XG4gICAgICBwYXJhbXMudG9TdHJpbmcoKSA6XG4gICAgICBuZXcgQXhpb3NVUkxTZWFyY2hQYXJhbXMocGFyYW1zLCBvcHRpb25zKS50b1N0cmluZyhfZW5jb2RlKTtcbiAgfVxuXG4gIGlmIChzZXJpYWxpemVkUGFyYW1zKSB7XG4gICAgY29uc3QgaGFzaG1hcmtJbmRleCA9IHVybC5pbmRleE9mKFwiI1wiKTtcblxuICAgIGlmIChoYXNobWFya0luZGV4ICE9PSAtMSkge1xuICAgICAgdXJsID0gdXJsLnNsaWNlKDAsIGhhc2htYXJrSW5kZXgpO1xuICAgIH1cbiAgICB1cmwgKz0gKHVybC5pbmRleE9mKCc/JykgPT09IC0xID8gJz8nIDogJyYnKSArIHNlcmlhbGl6ZWRQYXJhbXM7XG4gIH1cblxuICByZXR1cm4gdXJsO1xufVxuXG5jbGFzcyBJbnRlcmNlcHRvck1hbmFnZXIge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLmhhbmRsZXJzID0gW107XG4gIH1cblxuICAvKipcbiAgICogQWRkIGEgbmV3IGludGVyY2VwdG9yIHRvIHRoZSBzdGFja1xuICAgKlxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdWxmaWxsZWQgVGhlIGZ1bmN0aW9uIHRvIGhhbmRsZSBgdGhlbmAgZm9yIGEgYFByb21pc2VgXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IHJlamVjdGVkIFRoZSBmdW5jdGlvbiB0byBoYW5kbGUgYHJlamVjdGAgZm9yIGEgYFByb21pc2VgXG4gICAqXG4gICAqIEByZXR1cm4ge051bWJlcn0gQW4gSUQgdXNlZCB0byByZW1vdmUgaW50ZXJjZXB0b3IgbGF0ZXJcbiAgICovXG4gIHVzZShmdWxmaWxsZWQsIHJlamVjdGVkLCBvcHRpb25zKSB7XG4gICAgdGhpcy5oYW5kbGVycy5wdXNoKHtcbiAgICAgIGZ1bGZpbGxlZCxcbiAgICAgIHJlamVjdGVkLFxuICAgICAgc3luY2hyb25vdXM6IG9wdGlvbnMgPyBvcHRpb25zLnN5bmNocm9ub3VzIDogZmFsc2UsXG4gICAgICBydW5XaGVuOiBvcHRpb25zID8gb3B0aW9ucy5ydW5XaGVuIDogbnVsbFxuICAgIH0pO1xuICAgIHJldHVybiB0aGlzLmhhbmRsZXJzLmxlbmd0aCAtIDE7XG4gIH1cblxuICAvKipcbiAgICogUmVtb3ZlIGFuIGludGVyY2VwdG9yIGZyb20gdGhlIHN0YWNrXG4gICAqXG4gICAqIEBwYXJhbSB7TnVtYmVyfSBpZCBUaGUgSUQgdGhhdCB3YXMgcmV0dXJuZWQgYnkgYHVzZWBcbiAgICpcbiAgICogQHJldHVybnMge0Jvb2xlYW59IGB0cnVlYCBpZiB0aGUgaW50ZXJjZXB0b3Igd2FzIHJlbW92ZWQsIGBmYWxzZWAgb3RoZXJ3aXNlXG4gICAqL1xuICBlamVjdChpZCkge1xuICAgIGlmICh0aGlzLmhhbmRsZXJzW2lkXSkge1xuICAgICAgdGhpcy5oYW5kbGVyc1tpZF0gPSBudWxsO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDbGVhciBhbGwgaW50ZXJjZXB0b3JzIGZyb20gdGhlIHN0YWNrXG4gICAqXG4gICAqIEByZXR1cm5zIHt2b2lkfVxuICAgKi9cbiAgY2xlYXIoKSB7XG4gICAgaWYgKHRoaXMuaGFuZGxlcnMpIHtcbiAgICAgIHRoaXMuaGFuZGxlcnMgPSBbXTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogSXRlcmF0ZSBvdmVyIGFsbCB0aGUgcmVnaXN0ZXJlZCBpbnRlcmNlcHRvcnNcbiAgICpcbiAgICogVGhpcyBtZXRob2QgaXMgcGFydGljdWxhcmx5IHVzZWZ1bCBmb3Igc2tpcHBpbmcgb3ZlciBhbnlcbiAgICogaW50ZXJjZXB0b3JzIHRoYXQgbWF5IGhhdmUgYmVjb21lIGBudWxsYCBjYWxsaW5nIGBlamVjdGAuXG4gICAqXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IGZuIFRoZSBmdW5jdGlvbiB0byBjYWxsIGZvciBlYWNoIGludGVyY2VwdG9yXG4gICAqXG4gICAqIEByZXR1cm5zIHt2b2lkfVxuICAgKi9cbiAgZm9yRWFjaChmbikge1xuICAgIHV0aWxzJDEuZm9yRWFjaCh0aGlzLmhhbmRsZXJzLCBmdW5jdGlvbiBmb3JFYWNoSGFuZGxlcihoKSB7XG4gICAgICBpZiAoaCAhPT0gbnVsbCkge1xuICAgICAgICBmbihoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxufVxuXG5jb25zdCBJbnRlcmNlcHRvck1hbmFnZXIkMSA9IEludGVyY2VwdG9yTWFuYWdlcjtcblxuY29uc3QgdHJhbnNpdGlvbmFsRGVmYXVsdHMgPSB7XG4gIHNpbGVudEpTT05QYXJzaW5nOiB0cnVlLFxuICBmb3JjZWRKU09OUGFyc2luZzogdHJ1ZSxcbiAgY2xhcmlmeVRpbWVvdXRFcnJvcjogZmFsc2Vcbn07XG5cbmNvbnN0IFVSTFNlYXJjaFBhcmFtcyA9IHVybF9fZGVmYXVsdFtcImRlZmF1bHRcIl0uVVJMU2VhcmNoUGFyYW1zO1xuXG5jb25zdCBwbGF0Zm9ybSQxID0ge1xuICBpc05vZGU6IHRydWUsXG4gIGNsYXNzZXM6IHtcbiAgICBVUkxTZWFyY2hQYXJhbXMsXG4gICAgRm9ybURhdGE6IEZvcm1EYXRhX19kZWZhdWx0W1wiZGVmYXVsdFwiXSxcbiAgICBCbG9iOiB0eXBlb2YgQmxvYiAhPT0gJ3VuZGVmaW5lZCcgJiYgQmxvYiB8fCBudWxsXG4gIH0sXG4gIHByb3RvY29sczogWyAnaHR0cCcsICdodHRwcycsICdmaWxlJywgJ2RhdGEnIF1cbn07XG5cbmNvbnN0IGhhc0Jyb3dzZXJFbnYgPSB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2YgZG9jdW1lbnQgIT09ICd1bmRlZmluZWQnO1xuXG4vKipcbiAqIERldGVybWluZSBpZiB3ZSdyZSBydW5uaW5nIGluIGEgc3RhbmRhcmQgYnJvd3NlciBlbnZpcm9ubWVudFxuICpcbiAqIFRoaXMgYWxsb3dzIGF4aW9zIHRvIHJ1biBpbiBhIHdlYiB3b3JrZXIsIGFuZCByZWFjdC1uYXRpdmUuXG4gKiBCb3RoIGVudmlyb25tZW50cyBzdXBwb3J0IFhNTEh0dHBSZXF1ZXN0LCBidXQgbm90IGZ1bGx5IHN0YW5kYXJkIGdsb2JhbHMuXG4gKlxuICogd2ViIHdvcmtlcnM6XG4gKiAgdHlwZW9mIHdpbmRvdyAtPiB1bmRlZmluZWRcbiAqICB0eXBlb2YgZG9jdW1lbnQgLT4gdW5kZWZpbmVkXG4gKlxuICogcmVhY3QtbmF0aXZlOlxuICogIG5hdmlnYXRvci5wcm9kdWN0IC0+ICdSZWFjdE5hdGl2ZSdcbiAqIG5hdGl2ZXNjcmlwdFxuICogIG5hdmlnYXRvci5wcm9kdWN0IC0+ICdOYXRpdmVTY3JpcHQnIG9yICdOUydcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqL1xuY29uc3QgaGFzU3RhbmRhcmRCcm93c2VyRW52ID0gKFxuICAocHJvZHVjdCkgPT4ge1xuICAgIHJldHVybiBoYXNCcm93c2VyRW52ICYmIFsnUmVhY3ROYXRpdmUnLCAnTmF0aXZlU2NyaXB0JywgJ05TJ10uaW5kZXhPZihwcm9kdWN0KSA8IDBcbiAgfSkodHlwZW9mIG5hdmlnYXRvciAhPT0gJ3VuZGVmaW5lZCcgJiYgbmF2aWdhdG9yLnByb2R1Y3QpO1xuXG4vKipcbiAqIERldGVybWluZSBpZiB3ZSdyZSBydW5uaW5nIGluIGEgc3RhbmRhcmQgYnJvd3NlciB3ZWJXb3JrZXIgZW52aXJvbm1lbnRcbiAqXG4gKiBBbHRob3VnaCB0aGUgYGlzU3RhbmRhcmRCcm93c2VyRW52YCBtZXRob2QgaW5kaWNhdGVzIHRoYXRcbiAqIGBhbGxvd3MgYXhpb3MgdG8gcnVuIGluIGEgd2ViIHdvcmtlcmAsIHRoZSBXZWJXb3JrZXIgd2lsbCBzdGlsbCBiZVxuICogZmlsdGVyZWQgb3V0IGR1ZSB0byBpdHMganVkZ21lbnQgc3RhbmRhcmRcbiAqIGB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2YgZG9jdW1lbnQgIT09ICd1bmRlZmluZWQnYC5cbiAqIFRoaXMgbGVhZHMgdG8gYSBwcm9ibGVtIHdoZW4gYXhpb3MgcG9zdCBgRm9ybURhdGFgIGluIHdlYldvcmtlclxuICovXG5jb25zdCBoYXNTdGFuZGFyZEJyb3dzZXJXZWJXb3JrZXJFbnYgPSAoKCkgPT4ge1xuICByZXR1cm4gKFxuICAgIHR5cGVvZiBXb3JrZXJHbG9iYWxTY29wZSAhPT0gJ3VuZGVmaW5lZCcgJiZcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW5kZWZcbiAgICBzZWxmIGluc3RhbmNlb2YgV29ya2VyR2xvYmFsU2NvcGUgJiZcbiAgICB0eXBlb2Ygc2VsZi5pbXBvcnRTY3JpcHRzID09PSAnZnVuY3Rpb24nXG4gICk7XG59KSgpO1xuXG5jb25zdCBvcmlnaW4gPSBoYXNCcm93c2VyRW52ICYmIHdpbmRvdy5sb2NhdGlvbi5ocmVmIHx8ICdodHRwOi8vbG9jYWxob3N0JztcblxuY29uc3QgdXRpbHMgPSAvKiNfX1BVUkVfXyovT2JqZWN0LmZyZWV6ZSh7XG4gIF9fcHJvdG9fXzogbnVsbCxcbiAgaGFzQnJvd3NlckVudjogaGFzQnJvd3NlckVudixcbiAgaGFzU3RhbmRhcmRCcm93c2VyV2ViV29ya2VyRW52OiBoYXNTdGFuZGFyZEJyb3dzZXJXZWJXb3JrZXJFbnYsXG4gIGhhc1N0YW5kYXJkQnJvd3NlckVudjogaGFzU3RhbmRhcmRCcm93c2VyRW52LFxuICBvcmlnaW46IG9yaWdpblxufSk7XG5cbmNvbnN0IHBsYXRmb3JtID0ge1xuICAuLi51dGlscyxcbiAgLi4ucGxhdGZvcm0kMVxufTtcblxuZnVuY3Rpb24gdG9VUkxFbmNvZGVkRm9ybShkYXRhLCBvcHRpb25zKSB7XG4gIHJldHVybiB0b0Zvcm1EYXRhKGRhdGEsIG5ldyBwbGF0Zm9ybS5jbGFzc2VzLlVSTFNlYXJjaFBhcmFtcygpLCBPYmplY3QuYXNzaWduKHtcbiAgICB2aXNpdG9yOiBmdW5jdGlvbih2YWx1ZSwga2V5LCBwYXRoLCBoZWxwZXJzKSB7XG4gICAgICBpZiAocGxhdGZvcm0uaXNOb2RlICYmIHV0aWxzJDEuaXNCdWZmZXIodmFsdWUpKSB7XG4gICAgICAgIHRoaXMuYXBwZW5kKGtleSwgdmFsdWUudG9TdHJpbmcoJ2Jhc2U2NCcpKTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gaGVscGVycy5kZWZhdWx0VmlzaXRvci5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgIH1cbiAgfSwgb3B0aW9ucykpO1xufVxuXG4vKipcbiAqIEl0IHRha2VzIGEgc3RyaW5nIGxpa2UgYGZvb1t4XVt5XVt6XWAgYW5kIHJldHVybnMgYW4gYXJyYXkgbGlrZSBgWydmb28nLCAneCcsICd5JywgJ3onXVxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIC0gVGhlIG5hbWUgb2YgdGhlIHByb3BlcnR5IHRvIGdldC5cbiAqXG4gKiBAcmV0dXJucyBBbiBhcnJheSBvZiBzdHJpbmdzLlxuICovXG5mdW5jdGlvbiBwYXJzZVByb3BQYXRoKG5hbWUpIHtcbiAgLy8gZm9vW3hdW3ldW3pdXG4gIC8vIGZvby54LnkuelxuICAvLyBmb28teC15LXpcbiAgLy8gZm9vIHggeSB6XG4gIHJldHVybiB1dGlscyQxLm1hdGNoQWxsKC9cXHcrfFxcWyhcXHcqKV0vZywgbmFtZSkubWFwKG1hdGNoID0+IHtcbiAgICByZXR1cm4gbWF0Y2hbMF0gPT09ICdbXScgPyAnJyA6IG1hdGNoWzFdIHx8IG1hdGNoWzBdO1xuICB9KTtcbn1cblxuLyoqXG4gKiBDb252ZXJ0IGFuIGFycmF5IHRvIGFuIG9iamVjdC5cbiAqXG4gKiBAcGFyYW0ge0FycmF5PGFueT59IGFyciAtIFRoZSBhcnJheSB0byBjb252ZXJ0IHRvIGFuIG9iamVjdC5cbiAqXG4gKiBAcmV0dXJucyBBbiBvYmplY3Qgd2l0aCB0aGUgc2FtZSBrZXlzIGFuZCB2YWx1ZXMgYXMgdGhlIGFycmF5LlxuICovXG5mdW5jdGlvbiBhcnJheVRvT2JqZWN0KGFycikge1xuICBjb25zdCBvYmogPSB7fTtcbiAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKGFycik7XG4gIGxldCBpO1xuICBjb25zdCBsZW4gPSBrZXlzLmxlbmd0aDtcbiAgbGV0IGtleTtcbiAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7XG4gICAga2V5ID0ga2V5c1tpXTtcbiAgICBvYmpba2V5XSA9IGFycltrZXldO1xuICB9XG4gIHJldHVybiBvYmo7XG59XG5cbi8qKlxuICogSXQgdGFrZXMgYSBGb3JtRGF0YSBvYmplY3QgYW5kIHJldHVybnMgYSBKYXZhU2NyaXB0IG9iamVjdFxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBmb3JtRGF0YSBUaGUgRm9ybURhdGEgb2JqZWN0IHRvIGNvbnZlcnQgdG8gSlNPTi5cbiAqXG4gKiBAcmV0dXJucyB7T2JqZWN0PHN0cmluZywgYW55PiB8IG51bGx9IFRoZSBjb252ZXJ0ZWQgb2JqZWN0LlxuICovXG5mdW5jdGlvbiBmb3JtRGF0YVRvSlNPTihmb3JtRGF0YSkge1xuICBmdW5jdGlvbiBidWlsZFBhdGgocGF0aCwgdmFsdWUsIHRhcmdldCwgaW5kZXgpIHtcbiAgICBsZXQgbmFtZSA9IHBhdGhbaW5kZXgrK107XG5cbiAgICBpZiAobmFtZSA9PT0gJ19fcHJvdG9fXycpIHJldHVybiB0cnVlO1xuXG4gICAgY29uc3QgaXNOdW1lcmljS2V5ID0gTnVtYmVyLmlzRmluaXRlKCtuYW1lKTtcbiAgICBjb25zdCBpc0xhc3QgPSBpbmRleCA+PSBwYXRoLmxlbmd0aDtcbiAgICBuYW1lID0gIW5hbWUgJiYgdXRpbHMkMS5pc0FycmF5KHRhcmdldCkgPyB0YXJnZXQubGVuZ3RoIDogbmFtZTtcblxuICAgIGlmIChpc0xhc3QpIHtcbiAgICAgIGlmICh1dGlscyQxLmhhc093blByb3AodGFyZ2V0LCBuYW1lKSkge1xuICAgICAgICB0YXJnZXRbbmFtZV0gPSBbdGFyZ2V0W25hbWVdLCB2YWx1ZV07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0YXJnZXRbbmFtZV0gPSB2YWx1ZTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuICFpc051bWVyaWNLZXk7XG4gICAgfVxuXG4gICAgaWYgKCF0YXJnZXRbbmFtZV0gfHwgIXV0aWxzJDEuaXNPYmplY3QodGFyZ2V0W25hbWVdKSkge1xuICAgICAgdGFyZ2V0W25hbWVdID0gW107XG4gICAgfVxuXG4gICAgY29uc3QgcmVzdWx0ID0gYnVpbGRQYXRoKHBhdGgsIHZhbHVlLCB0YXJnZXRbbmFtZV0sIGluZGV4KTtcblxuICAgIGlmIChyZXN1bHQgJiYgdXRpbHMkMS5pc0FycmF5KHRhcmdldFtuYW1lXSkpIHtcbiAgICAgIHRhcmdldFtuYW1lXSA9IGFycmF5VG9PYmplY3QodGFyZ2V0W25hbWVdKTtcbiAgICB9XG5cbiAgICByZXR1cm4gIWlzTnVtZXJpY0tleTtcbiAgfVxuXG4gIGlmICh1dGlscyQxLmlzRm9ybURhdGEoZm9ybURhdGEpICYmIHV0aWxzJDEuaXNGdW5jdGlvbihmb3JtRGF0YS5lbnRyaWVzKSkge1xuICAgIGNvbnN0IG9iaiA9IHt9O1xuXG4gICAgdXRpbHMkMS5mb3JFYWNoRW50cnkoZm9ybURhdGEsIChuYW1lLCB2YWx1ZSkgPT4ge1xuICAgICAgYnVpbGRQYXRoKHBhcnNlUHJvcFBhdGgobmFtZSksIHZhbHVlLCBvYmosIDApO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIG9iajtcbiAgfVxuXG4gIHJldHVybiBudWxsO1xufVxuXG4vKipcbiAqIEl0IHRha2VzIGEgc3RyaW5nLCB0cmllcyB0byBwYXJzZSBpdCwgYW5kIGlmIGl0IGZhaWxzLCBpdCByZXR1cm5zIHRoZSBzdHJpbmdpZmllZCB2ZXJzaW9uXG4gKiBvZiB0aGUgaW5wdXRcbiAqXG4gKiBAcGFyYW0ge2FueX0gcmF3VmFsdWUgLSBUaGUgdmFsdWUgdG8gYmUgc3RyaW5naWZpZWQuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBwYXJzZXIgLSBBIGZ1bmN0aW9uIHRoYXQgcGFyc2VzIGEgc3RyaW5nIGludG8gYSBKYXZhU2NyaXB0IG9iamVjdC5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGVuY29kZXIgLSBBIGZ1bmN0aW9uIHRoYXQgdGFrZXMgYSB2YWx1ZSBhbmQgcmV0dXJucyBhIHN0cmluZy5cbiAqXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBBIHN0cmluZ2lmaWVkIHZlcnNpb24gb2YgdGhlIHJhd1ZhbHVlLlxuICovXG5mdW5jdGlvbiBzdHJpbmdpZnlTYWZlbHkocmF3VmFsdWUsIHBhcnNlciwgZW5jb2Rlcikge1xuICBpZiAodXRpbHMkMS5pc1N0cmluZyhyYXdWYWx1ZSkpIHtcbiAgICB0cnkge1xuICAgICAgKHBhcnNlciB8fCBKU09OLnBhcnNlKShyYXdWYWx1ZSk7XG4gICAgICByZXR1cm4gdXRpbHMkMS50cmltKHJhd1ZhbHVlKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBpZiAoZS5uYW1lICE9PSAnU3ludGF4RXJyb3InKSB7XG4gICAgICAgIHRocm93IGU7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIChlbmNvZGVyIHx8IEpTT04uc3RyaW5naWZ5KShyYXdWYWx1ZSk7XG59XG5cbmNvbnN0IGRlZmF1bHRzID0ge1xuXG4gIHRyYW5zaXRpb25hbDogdHJhbnNpdGlvbmFsRGVmYXVsdHMsXG5cbiAgYWRhcHRlcjogWyd4aHInLCAnaHR0cCcsICdmZXRjaCddLFxuXG4gIHRyYW5zZm9ybVJlcXVlc3Q6IFtmdW5jdGlvbiB0cmFuc2Zvcm1SZXF1ZXN0KGRhdGEsIGhlYWRlcnMpIHtcbiAgICBjb25zdCBjb250ZW50VHlwZSA9IGhlYWRlcnMuZ2V0Q29udGVudFR5cGUoKSB8fCAnJztcbiAgICBjb25zdCBoYXNKU09OQ29udGVudFR5cGUgPSBjb250ZW50VHlwZS5pbmRleE9mKCdhcHBsaWNhdGlvbi9qc29uJykgPiAtMTtcbiAgICBjb25zdCBpc09iamVjdFBheWxvYWQgPSB1dGlscyQxLmlzT2JqZWN0KGRhdGEpO1xuXG4gICAgaWYgKGlzT2JqZWN0UGF5bG9hZCAmJiB1dGlscyQxLmlzSFRNTEZvcm0oZGF0YSkpIHtcbiAgICAgIGRhdGEgPSBuZXcgRm9ybURhdGEoZGF0YSk7XG4gICAgfVxuXG4gICAgY29uc3QgaXNGb3JtRGF0YSA9IHV0aWxzJDEuaXNGb3JtRGF0YShkYXRhKTtcblxuICAgIGlmIChpc0Zvcm1EYXRhKSB7XG4gICAgICByZXR1cm4gaGFzSlNPTkNvbnRlbnRUeXBlID8gSlNPTi5zdHJpbmdpZnkoZm9ybURhdGFUb0pTT04oZGF0YSkpIDogZGF0YTtcbiAgICB9XG5cbiAgICBpZiAodXRpbHMkMS5pc0FycmF5QnVmZmVyKGRhdGEpIHx8XG4gICAgICB1dGlscyQxLmlzQnVmZmVyKGRhdGEpIHx8XG4gICAgICB1dGlscyQxLmlzU3RyZWFtKGRhdGEpIHx8XG4gICAgICB1dGlscyQxLmlzRmlsZShkYXRhKSB8fFxuICAgICAgdXRpbHMkMS5pc0Jsb2IoZGF0YSkgfHxcbiAgICAgIHV0aWxzJDEuaXNSZWFkYWJsZVN0cmVhbShkYXRhKVxuICAgICkge1xuICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfVxuICAgIGlmICh1dGlscyQxLmlzQXJyYXlCdWZmZXJWaWV3KGRhdGEpKSB7XG4gICAgICByZXR1cm4gZGF0YS5idWZmZXI7XG4gICAgfVxuICAgIGlmICh1dGlscyQxLmlzVVJMU2VhcmNoUGFyYW1zKGRhdGEpKSB7XG4gICAgICBoZWFkZXJzLnNldENvbnRlbnRUeXBlKCdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQ7Y2hhcnNldD11dGYtOCcsIGZhbHNlKTtcbiAgICAgIHJldHVybiBkYXRhLnRvU3RyaW5nKCk7XG4gICAgfVxuXG4gICAgbGV0IGlzRmlsZUxpc3Q7XG5cbiAgICBpZiAoaXNPYmplY3RQYXlsb2FkKSB7XG4gICAgICBpZiAoY29udGVudFR5cGUuaW5kZXhPZignYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJykgPiAtMSkge1xuICAgICAgICByZXR1cm4gdG9VUkxFbmNvZGVkRm9ybShkYXRhLCB0aGlzLmZvcm1TZXJpYWxpemVyKS50b1N0cmluZygpO1xuICAgICAgfVxuXG4gICAgICBpZiAoKGlzRmlsZUxpc3QgPSB1dGlscyQxLmlzRmlsZUxpc3QoZGF0YSkpIHx8IGNvbnRlbnRUeXBlLmluZGV4T2YoJ211bHRpcGFydC9mb3JtLWRhdGEnKSA+IC0xKSB7XG4gICAgICAgIGNvbnN0IF9Gb3JtRGF0YSA9IHRoaXMuZW52ICYmIHRoaXMuZW52LkZvcm1EYXRhO1xuXG4gICAgICAgIHJldHVybiB0b0Zvcm1EYXRhKFxuICAgICAgICAgIGlzRmlsZUxpc3QgPyB7J2ZpbGVzW10nOiBkYXRhfSA6IGRhdGEsXG4gICAgICAgICAgX0Zvcm1EYXRhICYmIG5ldyBfRm9ybURhdGEoKSxcbiAgICAgICAgICB0aGlzLmZvcm1TZXJpYWxpemVyXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGlzT2JqZWN0UGF5bG9hZCB8fCBoYXNKU09OQ29udGVudFR5cGUgKSB7XG4gICAgICBoZWFkZXJzLnNldENvbnRlbnRUeXBlKCdhcHBsaWNhdGlvbi9qc29uJywgZmFsc2UpO1xuICAgICAgcmV0dXJuIHN0cmluZ2lmeVNhZmVseShkYXRhKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZGF0YTtcbiAgfV0sXG5cbiAgdHJhbnNmb3JtUmVzcG9uc2U6IFtmdW5jdGlvbiB0cmFuc2Zvcm1SZXNwb25zZShkYXRhKSB7XG4gICAgY29uc3QgdHJhbnNpdGlvbmFsID0gdGhpcy50cmFuc2l0aW9uYWwgfHwgZGVmYXVsdHMudHJhbnNpdGlvbmFsO1xuICAgIGNvbnN0IGZvcmNlZEpTT05QYXJzaW5nID0gdHJhbnNpdGlvbmFsICYmIHRyYW5zaXRpb25hbC5mb3JjZWRKU09OUGFyc2luZztcbiAgICBjb25zdCBKU09OUmVxdWVzdGVkID0gdGhpcy5yZXNwb25zZVR5cGUgPT09ICdqc29uJztcblxuICAgIGlmICh1dGlscyQxLmlzUmVzcG9uc2UoZGF0YSkgfHwgdXRpbHMkMS5pc1JlYWRhYmxlU3RyZWFtKGRhdGEpKSB7XG4gICAgICByZXR1cm4gZGF0YTtcbiAgICB9XG5cbiAgICBpZiAoZGF0YSAmJiB1dGlscyQxLmlzU3RyaW5nKGRhdGEpICYmICgoZm9yY2VkSlNPTlBhcnNpbmcgJiYgIXRoaXMucmVzcG9uc2VUeXBlKSB8fCBKU09OUmVxdWVzdGVkKSkge1xuICAgICAgY29uc3Qgc2lsZW50SlNPTlBhcnNpbmcgPSB0cmFuc2l0aW9uYWwgJiYgdHJhbnNpdGlvbmFsLnNpbGVudEpTT05QYXJzaW5nO1xuICAgICAgY29uc3Qgc3RyaWN0SlNPTlBhcnNpbmcgPSAhc2lsZW50SlNPTlBhcnNpbmcgJiYgSlNPTlJlcXVlc3RlZDtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIEpTT04ucGFyc2UoZGF0YSk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGlmIChzdHJpY3RKU09OUGFyc2luZykge1xuICAgICAgICAgIGlmIChlLm5hbWUgPT09ICdTeW50YXhFcnJvcicpIHtcbiAgICAgICAgICAgIHRocm93IEF4aW9zRXJyb3IuZnJvbShlLCBBeGlvc0Vycm9yLkVSUl9CQURfUkVTUE9OU0UsIHRoaXMsIG51bGwsIHRoaXMucmVzcG9uc2UpO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGRhdGE7XG4gIH1dLFxuXG4gIC8qKlxuICAgKiBBIHRpbWVvdXQgaW4gbWlsbGlzZWNvbmRzIHRvIGFib3J0IGEgcmVxdWVzdC4gSWYgc2V0IHRvIDAgKGRlZmF1bHQpIGFcbiAgICogdGltZW91dCBpcyBub3QgY3JlYXRlZC5cbiAgICovXG4gIHRpbWVvdXQ6IDAsXG5cbiAgeHNyZkNvb2tpZU5hbWU6ICdYU1JGLVRPS0VOJyxcbiAgeHNyZkhlYWRlck5hbWU6ICdYLVhTUkYtVE9LRU4nLFxuXG4gIG1heENvbnRlbnRMZW5ndGg6IC0xLFxuICBtYXhCb2R5TGVuZ3RoOiAtMSxcblxuICBlbnY6IHtcbiAgICBGb3JtRGF0YTogcGxhdGZvcm0uY2xhc3Nlcy5Gb3JtRGF0YSxcbiAgICBCbG9iOiBwbGF0Zm9ybS5jbGFzc2VzLkJsb2JcbiAgfSxcblxuICB2YWxpZGF0ZVN0YXR1czogZnVuY3Rpb24gdmFsaWRhdGVTdGF0dXMoc3RhdHVzKSB7XG4gICAgcmV0dXJuIHN0YXR1cyA+PSAyMDAgJiYgc3RhdHVzIDwgMzAwO1xuICB9LFxuXG4gIGhlYWRlcnM6IHtcbiAgICBjb21tb246IHtcbiAgICAgICdBY2NlcHQnOiAnYXBwbGljYXRpb24vanNvbiwgdGV4dC9wbGFpbiwgKi8qJyxcbiAgICAgICdDb250ZW50LVR5cGUnOiB1bmRlZmluZWRcbiAgICB9XG4gIH1cbn07XG5cbnV0aWxzJDEuZm9yRWFjaChbJ2RlbGV0ZScsICdnZXQnLCAnaGVhZCcsICdwb3N0JywgJ3B1dCcsICdwYXRjaCddLCAobWV0aG9kKSA9PiB7XG4gIGRlZmF1bHRzLmhlYWRlcnNbbWV0aG9kXSA9IHt9O1xufSk7XG5cbmNvbnN0IGRlZmF1bHRzJDEgPSBkZWZhdWx0cztcblxuLy8gUmF3QXhpb3NIZWFkZXJzIHdob3NlIGR1cGxpY2F0ZXMgYXJlIGlnbm9yZWQgYnkgbm9kZVxuLy8gYy5mLiBodHRwczovL25vZGVqcy5vcmcvYXBpL2h0dHAuaHRtbCNodHRwX21lc3NhZ2VfaGVhZGVyc1xuY29uc3QgaWdub3JlRHVwbGljYXRlT2YgPSB1dGlscyQxLnRvT2JqZWN0U2V0KFtcbiAgJ2FnZScsICdhdXRob3JpemF0aW9uJywgJ2NvbnRlbnQtbGVuZ3RoJywgJ2NvbnRlbnQtdHlwZScsICdldGFnJyxcbiAgJ2V4cGlyZXMnLCAnZnJvbScsICdob3N0JywgJ2lmLW1vZGlmaWVkLXNpbmNlJywgJ2lmLXVubW9kaWZpZWQtc2luY2UnLFxuICAnbGFzdC1tb2RpZmllZCcsICdsb2NhdGlvbicsICdtYXgtZm9yd2FyZHMnLCAncHJveHktYXV0aG9yaXphdGlvbicsXG4gICdyZWZlcmVyJywgJ3JldHJ5LWFmdGVyJywgJ3VzZXItYWdlbnQnXG5dKTtcblxuLyoqXG4gKiBQYXJzZSBoZWFkZXJzIGludG8gYW4gb2JqZWN0XG4gKlxuICogYGBgXG4gKiBEYXRlOiBXZWQsIDI3IEF1ZyAyMDE0IDA4OjU4OjQ5IEdNVFxuICogQ29udGVudC1UeXBlOiBhcHBsaWNhdGlvbi9qc29uXG4gKiBDb25uZWN0aW9uOiBrZWVwLWFsaXZlXG4gKiBUcmFuc2Zlci1FbmNvZGluZzogY2h1bmtlZFxuICogYGBgXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IHJhd0hlYWRlcnMgSGVhZGVycyBuZWVkaW5nIHRvIGJlIHBhcnNlZFxuICpcbiAqIEByZXR1cm5zIHtPYmplY3R9IEhlYWRlcnMgcGFyc2VkIGludG8gYW4gb2JqZWN0XG4gKi9cbmNvbnN0IHBhcnNlSGVhZGVycyA9IHJhd0hlYWRlcnMgPT4ge1xuICBjb25zdCBwYXJzZWQgPSB7fTtcbiAgbGV0IGtleTtcbiAgbGV0IHZhbDtcbiAgbGV0IGk7XG5cbiAgcmF3SGVhZGVycyAmJiByYXdIZWFkZXJzLnNwbGl0KCdcXG4nKS5mb3JFYWNoKGZ1bmN0aW9uIHBhcnNlcihsaW5lKSB7XG4gICAgaSA9IGxpbmUuaW5kZXhPZignOicpO1xuICAgIGtleSA9IGxpbmUuc3Vic3RyaW5nKDAsIGkpLnRyaW0oKS50b0xvd2VyQ2FzZSgpO1xuICAgIHZhbCA9IGxpbmUuc3Vic3RyaW5nKGkgKyAxKS50cmltKCk7XG5cbiAgICBpZiAoIWtleSB8fCAocGFyc2VkW2tleV0gJiYgaWdub3JlRHVwbGljYXRlT2Zba2V5XSkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoa2V5ID09PSAnc2V0LWNvb2tpZScpIHtcbiAgICAgIGlmIChwYXJzZWRba2V5XSkge1xuICAgICAgICBwYXJzZWRba2V5XS5wdXNoKHZhbCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwYXJzZWRba2V5XSA9IFt2YWxdO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBwYXJzZWRba2V5XSA9IHBhcnNlZFtrZXldID8gcGFyc2VkW2tleV0gKyAnLCAnICsgdmFsIDogdmFsO1xuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIHBhcnNlZDtcbn07XG5cbmNvbnN0ICRpbnRlcm5hbHMgPSBTeW1ib2woJ2ludGVybmFscycpO1xuXG5mdW5jdGlvbiBub3JtYWxpemVIZWFkZXIoaGVhZGVyKSB7XG4gIHJldHVybiBoZWFkZXIgJiYgU3RyaW5nKGhlYWRlcikudHJpbSgpLnRvTG93ZXJDYXNlKCk7XG59XG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZVZhbHVlKHZhbHVlKSB7XG4gIGlmICh2YWx1ZSA9PT0gZmFsc2UgfHwgdmFsdWUgPT0gbnVsbCkge1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuXG4gIHJldHVybiB1dGlscyQxLmlzQXJyYXkodmFsdWUpID8gdmFsdWUubWFwKG5vcm1hbGl6ZVZhbHVlKSA6IFN0cmluZyh2YWx1ZSk7XG59XG5cbmZ1bmN0aW9uIHBhcnNlVG9rZW5zKHN0cikge1xuICBjb25zdCB0b2tlbnMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICBjb25zdCB0b2tlbnNSRSA9IC8oW15cXHMsOz1dKylcXHMqKD86PVxccyooW14sO10rKSk/L2c7XG4gIGxldCBtYXRjaDtcblxuICB3aGlsZSAoKG1hdGNoID0gdG9rZW5zUkUuZXhlYyhzdHIpKSkge1xuICAgIHRva2Vuc1ttYXRjaFsxXV0gPSBtYXRjaFsyXTtcbiAgfVxuXG4gIHJldHVybiB0b2tlbnM7XG59XG5cbmNvbnN0IGlzVmFsaWRIZWFkZXJOYW1lID0gKHN0cikgPT4gL15bLV9hLXpBLVowLTleYHx+LCEjJCUmJyorLl0rJC8udGVzdChzdHIudHJpbSgpKTtcblxuZnVuY3Rpb24gbWF0Y2hIZWFkZXJWYWx1ZShjb250ZXh0LCB2YWx1ZSwgaGVhZGVyLCBmaWx0ZXIsIGlzSGVhZGVyTmFtZUZpbHRlcikge1xuICBpZiAodXRpbHMkMS5pc0Z1bmN0aW9uKGZpbHRlcikpIHtcbiAgICByZXR1cm4gZmlsdGVyLmNhbGwodGhpcywgdmFsdWUsIGhlYWRlcik7XG4gIH1cblxuICBpZiAoaXNIZWFkZXJOYW1lRmlsdGVyKSB7XG4gICAgdmFsdWUgPSBoZWFkZXI7XG4gIH1cblxuICBpZiAoIXV0aWxzJDEuaXNTdHJpbmcodmFsdWUpKSByZXR1cm47XG5cbiAgaWYgKHV0aWxzJDEuaXNTdHJpbmcoZmlsdGVyKSkge1xuICAgIHJldHVybiB2YWx1ZS5pbmRleE9mKGZpbHRlcikgIT09IC0xO1xuICB9XG5cbiAgaWYgKHV0aWxzJDEuaXNSZWdFeHAoZmlsdGVyKSkge1xuICAgIHJldHVybiBmaWx0ZXIudGVzdCh2YWx1ZSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gZm9ybWF0SGVhZGVyKGhlYWRlcikge1xuICByZXR1cm4gaGVhZGVyLnRyaW0oKVxuICAgIC50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoLyhbYS16XFxkXSkoXFx3KikvZywgKHcsIGNoYXIsIHN0cikgPT4ge1xuICAgICAgcmV0dXJuIGNoYXIudG9VcHBlckNhc2UoKSArIHN0cjtcbiAgICB9KTtcbn1cblxuZnVuY3Rpb24gYnVpbGRBY2Nlc3NvcnMob2JqLCBoZWFkZXIpIHtcbiAgY29uc3QgYWNjZXNzb3JOYW1lID0gdXRpbHMkMS50b0NhbWVsQ2FzZSgnICcgKyBoZWFkZXIpO1xuXG4gIFsnZ2V0JywgJ3NldCcsICdoYXMnXS5mb3JFYWNoKG1ldGhvZE5hbWUgPT4ge1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIG1ldGhvZE5hbWUgKyBhY2Nlc3Nvck5hbWUsIHtcbiAgICAgIHZhbHVlOiBmdW5jdGlvbihhcmcxLCBhcmcyLCBhcmczKSB7XG4gICAgICAgIHJldHVybiB0aGlzW21ldGhvZE5hbWVdLmNhbGwodGhpcywgaGVhZGVyLCBhcmcxLCBhcmcyLCBhcmczKTtcbiAgICAgIH0sXG4gICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgfSk7XG59XG5cbmNsYXNzIEF4aW9zSGVhZGVycyB7XG4gIGNvbnN0cnVjdG9yKGhlYWRlcnMpIHtcbiAgICBoZWFkZXJzICYmIHRoaXMuc2V0KGhlYWRlcnMpO1xuICB9XG5cbiAgc2V0KGhlYWRlciwgdmFsdWVPclJld3JpdGUsIHJld3JpdGUpIHtcbiAgICBjb25zdCBzZWxmID0gdGhpcztcblxuICAgIGZ1bmN0aW9uIHNldEhlYWRlcihfdmFsdWUsIF9oZWFkZXIsIF9yZXdyaXRlKSB7XG4gICAgICBjb25zdCBsSGVhZGVyID0gbm9ybWFsaXplSGVhZGVyKF9oZWFkZXIpO1xuXG4gICAgICBpZiAoIWxIZWFkZXIpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdoZWFkZXIgbmFtZSBtdXN0IGJlIGEgbm9uLWVtcHR5IHN0cmluZycpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBrZXkgPSB1dGlscyQxLmZpbmRLZXkoc2VsZiwgbEhlYWRlcik7XG5cbiAgICAgIGlmKCFrZXkgfHwgc2VsZltrZXldID09PSB1bmRlZmluZWQgfHwgX3Jld3JpdGUgPT09IHRydWUgfHwgKF9yZXdyaXRlID09PSB1bmRlZmluZWQgJiYgc2VsZltrZXldICE9PSBmYWxzZSkpIHtcbiAgICAgICAgc2VsZltrZXkgfHwgX2hlYWRlcl0gPSBub3JtYWxpemVWYWx1ZShfdmFsdWUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IHNldEhlYWRlcnMgPSAoaGVhZGVycywgX3Jld3JpdGUpID0+XG4gICAgICB1dGlscyQxLmZvckVhY2goaGVhZGVycywgKF92YWx1ZSwgX2hlYWRlcikgPT4gc2V0SGVhZGVyKF92YWx1ZSwgX2hlYWRlciwgX3Jld3JpdGUpKTtcblxuICAgIGlmICh1dGlscyQxLmlzUGxhaW5PYmplY3QoaGVhZGVyKSB8fCBoZWFkZXIgaW5zdGFuY2VvZiB0aGlzLmNvbnN0cnVjdG9yKSB7XG4gICAgICBzZXRIZWFkZXJzKGhlYWRlciwgdmFsdWVPclJld3JpdGUpO1xuICAgIH0gZWxzZSBpZih1dGlscyQxLmlzU3RyaW5nKGhlYWRlcikgJiYgKGhlYWRlciA9IGhlYWRlci50cmltKCkpICYmICFpc1ZhbGlkSGVhZGVyTmFtZShoZWFkZXIpKSB7XG4gICAgICBzZXRIZWFkZXJzKHBhcnNlSGVhZGVycyhoZWFkZXIpLCB2YWx1ZU9yUmV3cml0ZSk7XG4gICAgfSBlbHNlIGlmICh1dGlscyQxLmlzSGVhZGVycyhoZWFkZXIpKSB7XG4gICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBoZWFkZXIuZW50cmllcygpKSB7XG4gICAgICAgIHNldEhlYWRlcih2YWx1ZSwga2V5LCByZXdyaXRlKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaGVhZGVyICE9IG51bGwgJiYgc2V0SGVhZGVyKHZhbHVlT3JSZXdyaXRlLCBoZWFkZXIsIHJld3JpdGUpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgZ2V0KGhlYWRlciwgcGFyc2VyKSB7XG4gICAgaGVhZGVyID0gbm9ybWFsaXplSGVhZGVyKGhlYWRlcik7XG5cbiAgICBpZiAoaGVhZGVyKSB7XG4gICAgICBjb25zdCBrZXkgPSB1dGlscyQxLmZpbmRLZXkodGhpcywgaGVhZGVyKTtcblxuICAgICAgaWYgKGtleSkge1xuICAgICAgICBjb25zdCB2YWx1ZSA9IHRoaXNba2V5XTtcblxuICAgICAgICBpZiAoIXBhcnNlcikge1xuICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChwYXJzZXIgPT09IHRydWUpIHtcbiAgICAgICAgICByZXR1cm4gcGFyc2VUb2tlbnModmFsdWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHV0aWxzJDEuaXNGdW5jdGlvbihwYXJzZXIpKSB7XG4gICAgICAgICAgcmV0dXJuIHBhcnNlci5jYWxsKHRoaXMsIHZhbHVlLCBrZXkpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHV0aWxzJDEuaXNSZWdFeHAocGFyc2VyKSkge1xuICAgICAgICAgIHJldHVybiBwYXJzZXIuZXhlYyh2YWx1ZSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdwYXJzZXIgbXVzdCBiZSBib29sZWFufHJlZ2V4cHxmdW5jdGlvbicpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGhhcyhoZWFkZXIsIG1hdGNoZXIpIHtcbiAgICBoZWFkZXIgPSBub3JtYWxpemVIZWFkZXIoaGVhZGVyKTtcblxuICAgIGlmIChoZWFkZXIpIHtcbiAgICAgIGNvbnN0IGtleSA9IHV0aWxzJDEuZmluZEtleSh0aGlzLCBoZWFkZXIpO1xuXG4gICAgICByZXR1cm4gISEoa2V5ICYmIHRoaXNba2V5XSAhPT0gdW5kZWZpbmVkICYmICghbWF0Y2hlciB8fCBtYXRjaEhlYWRlclZhbHVlKHRoaXMsIHRoaXNba2V5XSwga2V5LCBtYXRjaGVyKSkpO1xuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGRlbGV0ZShoZWFkZXIsIG1hdGNoZXIpIHtcbiAgICBjb25zdCBzZWxmID0gdGhpcztcbiAgICBsZXQgZGVsZXRlZCA9IGZhbHNlO1xuXG4gICAgZnVuY3Rpb24gZGVsZXRlSGVhZGVyKF9oZWFkZXIpIHtcbiAgICAgIF9oZWFkZXIgPSBub3JtYWxpemVIZWFkZXIoX2hlYWRlcik7XG5cbiAgICAgIGlmIChfaGVhZGVyKSB7XG4gICAgICAgIGNvbnN0IGtleSA9IHV0aWxzJDEuZmluZEtleShzZWxmLCBfaGVhZGVyKTtcblxuICAgICAgICBpZiAoa2V5ICYmICghbWF0Y2hlciB8fCBtYXRjaEhlYWRlclZhbHVlKHNlbGYsIHNlbGZba2V5XSwga2V5LCBtYXRjaGVyKSkpIHtcbiAgICAgICAgICBkZWxldGUgc2VsZltrZXldO1xuXG4gICAgICAgICAgZGVsZXRlZCA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodXRpbHMkMS5pc0FycmF5KGhlYWRlcikpIHtcbiAgICAgIGhlYWRlci5mb3JFYWNoKGRlbGV0ZUhlYWRlcik7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRlbGV0ZUhlYWRlcihoZWFkZXIpO1xuICAgIH1cblxuICAgIHJldHVybiBkZWxldGVkO1xuICB9XG5cbiAgY2xlYXIobWF0Y2hlcikge1xuICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyh0aGlzKTtcbiAgICBsZXQgaSA9IGtleXMubGVuZ3RoO1xuICAgIGxldCBkZWxldGVkID0gZmFsc2U7XG5cbiAgICB3aGlsZSAoaS0tKSB7XG4gICAgICBjb25zdCBrZXkgPSBrZXlzW2ldO1xuICAgICAgaWYoIW1hdGNoZXIgfHwgbWF0Y2hIZWFkZXJWYWx1ZSh0aGlzLCB0aGlzW2tleV0sIGtleSwgbWF0Y2hlciwgdHJ1ZSkpIHtcbiAgICAgICAgZGVsZXRlIHRoaXNba2V5XTtcbiAgICAgICAgZGVsZXRlZCA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGRlbGV0ZWQ7XG4gIH1cblxuICBub3JtYWxpemUoZm9ybWF0KSB7XG4gICAgY29uc3Qgc2VsZiA9IHRoaXM7XG4gICAgY29uc3QgaGVhZGVycyA9IHt9O1xuXG4gICAgdXRpbHMkMS5mb3JFYWNoKHRoaXMsICh2YWx1ZSwgaGVhZGVyKSA9PiB7XG4gICAgICBjb25zdCBrZXkgPSB1dGlscyQxLmZpbmRLZXkoaGVhZGVycywgaGVhZGVyKTtcblxuICAgICAgaWYgKGtleSkge1xuICAgICAgICBzZWxmW2tleV0gPSBub3JtYWxpemVWYWx1ZSh2YWx1ZSk7XG4gICAgICAgIGRlbGV0ZSBzZWxmW2hlYWRlcl07XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgY29uc3Qgbm9ybWFsaXplZCA9IGZvcm1hdCA/IGZvcm1hdEhlYWRlcihoZWFkZXIpIDogU3RyaW5nKGhlYWRlcikudHJpbSgpO1xuXG4gICAgICBpZiAobm9ybWFsaXplZCAhPT0gaGVhZGVyKSB7XG4gICAgICAgIGRlbGV0ZSBzZWxmW2hlYWRlcl07XG4gICAgICB9XG5cbiAgICAgIHNlbGZbbm9ybWFsaXplZF0gPSBub3JtYWxpemVWYWx1ZSh2YWx1ZSk7XG5cbiAgICAgIGhlYWRlcnNbbm9ybWFsaXplZF0gPSB0cnVlO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBjb25jYXQoLi4udGFyZ2V0cykge1xuICAgIHJldHVybiB0aGlzLmNvbnN0cnVjdG9yLmNvbmNhdCh0aGlzLCAuLi50YXJnZXRzKTtcbiAgfVxuXG4gIHRvSlNPTihhc1N0cmluZ3MpIHtcbiAgICBjb25zdCBvYmogPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuXG4gICAgdXRpbHMkMS5mb3JFYWNoKHRoaXMsICh2YWx1ZSwgaGVhZGVyKSA9PiB7XG4gICAgICB2YWx1ZSAhPSBudWxsICYmIHZhbHVlICE9PSBmYWxzZSAmJiAob2JqW2hlYWRlcl0gPSBhc1N0cmluZ3MgJiYgdXRpbHMkMS5pc0FycmF5KHZhbHVlKSA/IHZhbHVlLmpvaW4oJywgJykgOiB2YWx1ZSk7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gb2JqO1xuICB9XG5cbiAgW1N5bWJvbC5pdGVyYXRvcl0oKSB7XG4gICAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHRoaXMudG9KU09OKCkpW1N5bWJvbC5pdGVyYXRvcl0oKTtcbiAgfVxuXG4gIHRvU3RyaW5nKCkge1xuICAgIHJldHVybiBPYmplY3QuZW50cmllcyh0aGlzLnRvSlNPTigpKS5tYXAoKFtoZWFkZXIsIHZhbHVlXSkgPT4gaGVhZGVyICsgJzogJyArIHZhbHVlKS5qb2luKCdcXG4nKTtcbiAgfVxuXG4gIGdldCBbU3ltYm9sLnRvU3RyaW5nVGFnXSgpIHtcbiAgICByZXR1cm4gJ0F4aW9zSGVhZGVycyc7XG4gIH1cblxuICBzdGF0aWMgZnJvbSh0aGluZykge1xuICAgIHJldHVybiB0aGluZyBpbnN0YW5jZW9mIHRoaXMgPyB0aGluZyA6IG5ldyB0aGlzKHRoaW5nKTtcbiAgfVxuXG4gIHN0YXRpYyBjb25jYXQoZmlyc3QsIC4uLnRhcmdldHMpIHtcbiAgICBjb25zdCBjb21wdXRlZCA9IG5ldyB0aGlzKGZpcnN0KTtcblxuICAgIHRhcmdldHMuZm9yRWFjaCgodGFyZ2V0KSA9PiBjb21wdXRlZC5zZXQodGFyZ2V0KSk7XG5cbiAgICByZXR1cm4gY29tcHV0ZWQ7XG4gIH1cblxuICBzdGF0aWMgYWNjZXNzb3IoaGVhZGVyKSB7XG4gICAgY29uc3QgaW50ZXJuYWxzID0gdGhpc1skaW50ZXJuYWxzXSA9ICh0aGlzWyRpbnRlcm5hbHNdID0ge1xuICAgICAgYWNjZXNzb3JzOiB7fVxuICAgIH0pO1xuXG4gICAgY29uc3QgYWNjZXNzb3JzID0gaW50ZXJuYWxzLmFjY2Vzc29ycztcbiAgICBjb25zdCBwcm90b3R5cGUgPSB0aGlzLnByb3RvdHlwZTtcblxuICAgIGZ1bmN0aW9uIGRlZmluZUFjY2Vzc29yKF9oZWFkZXIpIHtcbiAgICAgIGNvbnN0IGxIZWFkZXIgPSBub3JtYWxpemVIZWFkZXIoX2hlYWRlcik7XG5cbiAgICAgIGlmICghYWNjZXNzb3JzW2xIZWFkZXJdKSB7XG4gICAgICAgIGJ1aWxkQWNjZXNzb3JzKHByb3RvdHlwZSwgX2hlYWRlcik7XG4gICAgICAgIGFjY2Vzc29yc1tsSGVhZGVyXSA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdXRpbHMkMS5pc0FycmF5KGhlYWRlcikgPyBoZWFkZXIuZm9yRWFjaChkZWZpbmVBY2Nlc3NvcikgOiBkZWZpbmVBY2Nlc3NvcihoZWFkZXIpO1xuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cbn1cblxuQXhpb3NIZWFkZXJzLmFjY2Vzc29yKFsnQ29udGVudC1UeXBlJywgJ0NvbnRlbnQtTGVuZ3RoJywgJ0FjY2VwdCcsICdBY2NlcHQtRW5jb2RpbmcnLCAnVXNlci1BZ2VudCcsICdBdXRob3JpemF0aW9uJ10pO1xuXG4vLyByZXNlcnZlZCBuYW1lcyBob3RmaXhcbnV0aWxzJDEucmVkdWNlRGVzY3JpcHRvcnMoQXhpb3NIZWFkZXJzLnByb3RvdHlwZSwgKHt2YWx1ZX0sIGtleSkgPT4ge1xuICBsZXQgbWFwcGVkID0ga2V5WzBdLnRvVXBwZXJDYXNlKCkgKyBrZXkuc2xpY2UoMSk7IC8vIG1hcCBgc2V0YCA9PiBgU2V0YFxuICByZXR1cm4ge1xuICAgIGdldDogKCkgPT4gdmFsdWUsXG4gICAgc2V0KGhlYWRlclZhbHVlKSB7XG4gICAgICB0aGlzW21hcHBlZF0gPSBoZWFkZXJWYWx1ZTtcbiAgICB9XG4gIH1cbn0pO1xuXG51dGlscyQxLmZyZWV6ZU1ldGhvZHMoQXhpb3NIZWFkZXJzKTtcblxuY29uc3QgQXhpb3NIZWFkZXJzJDEgPSBBeGlvc0hlYWRlcnM7XG5cbi8qKlxuICogVHJhbnNmb3JtIHRoZSBkYXRhIGZvciBhIHJlcXVlc3Qgb3IgYSByZXNwb25zZVxuICpcbiAqIEBwYXJhbSB7QXJyYXl8RnVuY3Rpb259IGZucyBBIHNpbmdsZSBmdW5jdGlvbiBvciBBcnJheSBvZiBmdW5jdGlvbnNcbiAqIEBwYXJhbSB7P09iamVjdH0gcmVzcG9uc2UgVGhlIHJlc3BvbnNlIG9iamVjdFxuICpcbiAqIEByZXR1cm5zIHsqfSBUaGUgcmVzdWx0aW5nIHRyYW5zZm9ybWVkIGRhdGFcbiAqL1xuZnVuY3Rpb24gdHJhbnNmb3JtRGF0YShmbnMsIHJlc3BvbnNlKSB7XG4gIGNvbnN0IGNvbmZpZyA9IHRoaXMgfHwgZGVmYXVsdHMkMTtcbiAgY29uc3QgY29udGV4dCA9IHJlc3BvbnNlIHx8IGNvbmZpZztcbiAgY29uc3QgaGVhZGVycyA9IEF4aW9zSGVhZGVycyQxLmZyb20oY29udGV4dC5oZWFkZXJzKTtcbiAgbGV0IGRhdGEgPSBjb250ZXh0LmRhdGE7XG5cbiAgdXRpbHMkMS5mb3JFYWNoKGZucywgZnVuY3Rpb24gdHJhbnNmb3JtKGZuKSB7XG4gICAgZGF0YSA9IGZuLmNhbGwoY29uZmlnLCBkYXRhLCBoZWFkZXJzLm5vcm1hbGl6ZSgpLCByZXNwb25zZSA/IHJlc3BvbnNlLnN0YXR1cyA6IHVuZGVmaW5lZCk7XG4gIH0pO1xuXG4gIGhlYWRlcnMubm9ybWFsaXplKCk7XG5cbiAgcmV0dXJuIGRhdGE7XG59XG5cbmZ1bmN0aW9uIGlzQ2FuY2VsKHZhbHVlKSB7XG4gIHJldHVybiAhISh2YWx1ZSAmJiB2YWx1ZS5fX0NBTkNFTF9fKTtcbn1cblxuLyoqXG4gKiBBIGBDYW5jZWxlZEVycm9yYCBpcyBhbiBvYmplY3QgdGhhdCBpcyB0aHJvd24gd2hlbiBhbiBvcGVyYXRpb24gaXMgY2FuY2VsZWQuXG4gKlxuICogQHBhcmFtIHtzdHJpbmc9fSBtZXNzYWdlIFRoZSBtZXNzYWdlLlxuICogQHBhcmFtIHtPYmplY3Q9fSBjb25maWcgVGhlIGNvbmZpZy5cbiAqIEBwYXJhbSB7T2JqZWN0PX0gcmVxdWVzdCBUaGUgcmVxdWVzdC5cbiAqXG4gKiBAcmV0dXJucyB7Q2FuY2VsZWRFcnJvcn0gVGhlIGNyZWF0ZWQgZXJyb3IuXG4gKi9cbmZ1bmN0aW9uIENhbmNlbGVkRXJyb3IobWVzc2FnZSwgY29uZmlnLCByZXF1ZXN0KSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1lcS1udWxsLGVxZXFlcVxuICBBeGlvc0Vycm9yLmNhbGwodGhpcywgbWVzc2FnZSA9PSBudWxsID8gJ2NhbmNlbGVkJyA6IG1lc3NhZ2UsIEF4aW9zRXJyb3IuRVJSX0NBTkNFTEVELCBjb25maWcsIHJlcXVlc3QpO1xuICB0aGlzLm5hbWUgPSAnQ2FuY2VsZWRFcnJvcic7XG59XG5cbnV0aWxzJDEuaW5oZXJpdHMoQ2FuY2VsZWRFcnJvciwgQXhpb3NFcnJvciwge1xuICBfX0NBTkNFTF9fOiB0cnVlXG59KTtcblxuLyoqXG4gKiBSZXNvbHZlIG9yIHJlamVjdCBhIFByb21pc2UgYmFzZWQgb24gcmVzcG9uc2Ugc3RhdHVzLlxuICpcbiAqIEBwYXJhbSB7RnVuY3Rpb259IHJlc29sdmUgQSBmdW5jdGlvbiB0aGF0IHJlc29sdmVzIHRoZSBwcm9taXNlLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gcmVqZWN0IEEgZnVuY3Rpb24gdGhhdCByZWplY3RzIHRoZSBwcm9taXNlLlxuICogQHBhcmFtIHtvYmplY3R9IHJlc3BvbnNlIFRoZSByZXNwb25zZS5cbiAqXG4gKiBAcmV0dXJucyB7b2JqZWN0fSBUaGUgcmVzcG9uc2UuXG4gKi9cbmZ1bmN0aW9uIHNldHRsZShyZXNvbHZlLCByZWplY3QsIHJlc3BvbnNlKSB7XG4gIGNvbnN0IHZhbGlkYXRlU3RhdHVzID0gcmVzcG9uc2UuY29uZmlnLnZhbGlkYXRlU3RhdHVzO1xuICBpZiAoIXJlc3BvbnNlLnN0YXR1cyB8fCAhdmFsaWRhdGVTdGF0dXMgfHwgdmFsaWRhdGVTdGF0dXMocmVzcG9uc2Uuc3RhdHVzKSkge1xuICAgIHJlc29sdmUocmVzcG9uc2UpO1xuICB9IGVsc2Uge1xuICAgIHJlamVjdChuZXcgQXhpb3NFcnJvcihcbiAgICAgICdSZXF1ZXN0IGZhaWxlZCB3aXRoIHN0YXR1cyBjb2RlICcgKyByZXNwb25zZS5zdGF0dXMsXG4gICAgICBbQXhpb3NFcnJvci5FUlJfQkFEX1JFUVVFU1QsIEF4aW9zRXJyb3IuRVJSX0JBRF9SRVNQT05TRV1bTWF0aC5mbG9vcihyZXNwb25zZS5zdGF0dXMgLyAxMDApIC0gNF0sXG4gICAgICByZXNwb25zZS5jb25maWcsXG4gICAgICByZXNwb25zZS5yZXF1ZXN0LFxuICAgICAgcmVzcG9uc2VcbiAgICApKTtcbiAgfVxufVxuXG4vKipcbiAqIERldGVybWluZXMgd2hldGhlciB0aGUgc3BlY2lmaWVkIFVSTCBpcyBhYnNvbHV0ZVxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSB1cmwgVGhlIFVSTCB0byB0ZXN0XG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdGhlIHNwZWNpZmllZCBVUkwgaXMgYWJzb2x1dGUsIG90aGVyd2lzZSBmYWxzZVxuICovXG5mdW5jdGlvbiBpc0Fic29sdXRlVVJMKHVybCkge1xuICAvLyBBIFVSTCBpcyBjb25zaWRlcmVkIGFic29sdXRlIGlmIGl0IGJlZ2lucyB3aXRoIFwiPHNjaGVtZT46Ly9cIiBvciBcIi8vXCIgKHByb3RvY29sLXJlbGF0aXZlIFVSTCkuXG4gIC8vIFJGQyAzOTg2IGRlZmluZXMgc2NoZW1lIG5hbWUgYXMgYSBzZXF1ZW5jZSBvZiBjaGFyYWN0ZXJzIGJlZ2lubmluZyB3aXRoIGEgbGV0dGVyIGFuZCBmb2xsb3dlZFxuICAvLyBieSBhbnkgY29tYmluYXRpb24gb2YgbGV0dGVycywgZGlnaXRzLCBwbHVzLCBwZXJpb2QsIG9yIGh5cGhlbi5cbiAgcmV0dXJuIC9eKFthLXpdW2EtelxcZCtcXC0uXSo6KT9cXC9cXC8vaS50ZXN0KHVybCk7XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhIG5ldyBVUkwgYnkgY29tYmluaW5nIHRoZSBzcGVjaWZpZWQgVVJMc1xuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBiYXNlVVJMIFRoZSBiYXNlIFVSTFxuICogQHBhcmFtIHtzdHJpbmd9IHJlbGF0aXZlVVJMIFRoZSByZWxhdGl2ZSBVUkxcbiAqXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgY29tYmluZWQgVVJMXG4gKi9cbmZ1bmN0aW9uIGNvbWJpbmVVUkxzKGJhc2VVUkwsIHJlbGF0aXZlVVJMKSB7XG4gIHJldHVybiByZWxhdGl2ZVVSTFxuICAgID8gYmFzZVVSTC5yZXBsYWNlKC9cXC8/XFwvJC8sICcnKSArICcvJyArIHJlbGF0aXZlVVJMLnJlcGxhY2UoL15cXC8rLywgJycpXG4gICAgOiBiYXNlVVJMO1xufVxuXG4vKipcbiAqIENyZWF0ZXMgYSBuZXcgVVJMIGJ5IGNvbWJpbmluZyB0aGUgYmFzZVVSTCB3aXRoIHRoZSByZXF1ZXN0ZWRVUkwsXG4gKiBvbmx5IHdoZW4gdGhlIHJlcXVlc3RlZFVSTCBpcyBub3QgYWxyZWFkeSBhbiBhYnNvbHV0ZSBVUkwuXG4gKiBJZiB0aGUgcmVxdWVzdFVSTCBpcyBhYnNvbHV0ZSwgdGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSByZXF1ZXN0ZWRVUkwgdW50b3VjaGVkLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBiYXNlVVJMIFRoZSBiYXNlIFVSTFxuICogQHBhcmFtIHtzdHJpbmd9IHJlcXVlc3RlZFVSTCBBYnNvbHV0ZSBvciByZWxhdGl2ZSBVUkwgdG8gY29tYmluZVxuICpcbiAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSBjb21iaW5lZCBmdWxsIHBhdGhcbiAqL1xuZnVuY3Rpb24gYnVpbGRGdWxsUGF0aChiYXNlVVJMLCByZXF1ZXN0ZWRVUkwpIHtcbiAgaWYgKGJhc2VVUkwgJiYgIWlzQWJzb2x1dGVVUkwocmVxdWVzdGVkVVJMKSkge1xuICAgIHJldHVybiBjb21iaW5lVVJMcyhiYXNlVVJMLCByZXF1ZXN0ZWRVUkwpO1xuICB9XG4gIHJldHVybiByZXF1ZXN0ZWRVUkw7XG59XG5cbmNvbnN0IFZFUlNJT04gPSBcIjEuNy40XCI7XG5cbmZ1bmN0aW9uIHBhcnNlUHJvdG9jb2wodXJsKSB7XG4gIGNvbnN0IG1hdGNoID0gL14oWy0rXFx3XXsxLDI1fSkoOj9cXC9cXC98OikvLmV4ZWModXJsKTtcbiAgcmV0dXJuIG1hdGNoICYmIG1hdGNoWzFdIHx8ICcnO1xufVxuXG5jb25zdCBEQVRBX1VSTF9QQVRURVJOID0gL14oPzooW147XSspOyk/KD86W147XSs7KT8oYmFzZTY0fCksKFtcXHNcXFNdKikkLztcblxuLyoqXG4gKiBQYXJzZSBkYXRhIHVyaSB0byBhIEJ1ZmZlciBvciBCbG9iXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IHVyaVxuICogQHBhcmFtIHs/Qm9vbGVhbn0gYXNCbG9iXG4gKiBAcGFyYW0gez9PYmplY3R9IG9wdGlvbnNcbiAqIEBwYXJhbSB7P0Z1bmN0aW9ufSBvcHRpb25zLkJsb2JcbiAqXG4gKiBAcmV0dXJucyB7QnVmZmVyfEJsb2J9XG4gKi9cbmZ1bmN0aW9uIGZyb21EYXRhVVJJKHVyaSwgYXNCbG9iLCBvcHRpb25zKSB7XG4gIGNvbnN0IF9CbG9iID0gb3B0aW9ucyAmJiBvcHRpb25zLkJsb2IgfHwgcGxhdGZvcm0uY2xhc3Nlcy5CbG9iO1xuICBjb25zdCBwcm90b2NvbCA9IHBhcnNlUHJvdG9jb2wodXJpKTtcblxuICBpZiAoYXNCbG9iID09PSB1bmRlZmluZWQgJiYgX0Jsb2IpIHtcbiAgICBhc0Jsb2IgPSB0cnVlO1xuICB9XG5cbiAgaWYgKHByb3RvY29sID09PSAnZGF0YScpIHtcbiAgICB1cmkgPSBwcm90b2NvbC5sZW5ndGggPyB1cmkuc2xpY2UocHJvdG9jb2wubGVuZ3RoICsgMSkgOiB1cmk7XG5cbiAgICBjb25zdCBtYXRjaCA9IERBVEFfVVJMX1BBVFRFUk4uZXhlYyh1cmkpO1xuXG4gICAgaWYgKCFtYXRjaCkge1xuICAgICAgdGhyb3cgbmV3IEF4aW9zRXJyb3IoJ0ludmFsaWQgVVJMJywgQXhpb3NFcnJvci5FUlJfSU5WQUxJRF9VUkwpO1xuICAgIH1cblxuICAgIGNvbnN0IG1pbWUgPSBtYXRjaFsxXTtcbiAgICBjb25zdCBpc0Jhc2U2NCA9IG1hdGNoWzJdO1xuICAgIGNvbnN0IGJvZHkgPSBtYXRjaFszXTtcbiAgICBjb25zdCBidWZmZXIgPSBCdWZmZXIuZnJvbShkZWNvZGVVUklDb21wb25lbnQoYm9keSksIGlzQmFzZTY0ID8gJ2Jhc2U2NCcgOiAndXRmOCcpO1xuXG4gICAgaWYgKGFzQmxvYikge1xuICAgICAgaWYgKCFfQmxvYikge1xuICAgICAgICB0aHJvdyBuZXcgQXhpb3NFcnJvcignQmxvYiBpcyBub3Qgc3VwcG9ydGVkJywgQXhpb3NFcnJvci5FUlJfTk9UX1NVUFBPUlQpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gbmV3IF9CbG9iKFtidWZmZXJdLCB7dHlwZTogbWltZX0pO1xuICAgIH1cblxuICAgIHJldHVybiBidWZmZXI7XG4gIH1cblxuICB0aHJvdyBuZXcgQXhpb3NFcnJvcignVW5zdXBwb3J0ZWQgcHJvdG9jb2wgJyArIHByb3RvY29sLCBBeGlvc0Vycm9yLkVSUl9OT1RfU1VQUE9SVCk7XG59XG5cbmNvbnN0IGtJbnRlcm5hbHMgPSBTeW1ib2woJ2ludGVybmFscycpO1xuXG5jbGFzcyBBeGlvc1RyYW5zZm9ybVN0cmVhbSBleHRlbmRzIHN0cmVhbV9fZGVmYXVsdFtcImRlZmF1bHRcIl0uVHJhbnNmb3Jte1xuICBjb25zdHJ1Y3RvcihvcHRpb25zKSB7XG4gICAgb3B0aW9ucyA9IHV0aWxzJDEudG9GbGF0T2JqZWN0KG9wdGlvbnMsIHtcbiAgICAgIG1heFJhdGU6IDAsXG4gICAgICBjaHVua1NpemU6IDY0ICogMTAyNCxcbiAgICAgIG1pbkNodW5rU2l6ZTogMTAwLFxuICAgICAgdGltZVdpbmRvdzogNTAwLFxuICAgICAgdGlja3NSYXRlOiAyLFxuICAgICAgc2FtcGxlc0NvdW50OiAxNVxuICAgIH0sIG51bGwsIChwcm9wLCBzb3VyY2UpID0+IHtcbiAgICAgIHJldHVybiAhdXRpbHMkMS5pc1VuZGVmaW5lZChzb3VyY2VbcHJvcF0pO1xuICAgIH0pO1xuXG4gICAgc3VwZXIoe1xuICAgICAgcmVhZGFibGVIaWdoV2F0ZXJNYXJrOiBvcHRpb25zLmNodW5rU2l6ZVxuICAgIH0pO1xuXG4gICAgY29uc3QgaW50ZXJuYWxzID0gdGhpc1trSW50ZXJuYWxzXSA9IHtcbiAgICAgIHRpbWVXaW5kb3c6IG9wdGlvbnMudGltZVdpbmRvdyxcbiAgICAgIGNodW5rU2l6ZTogb3B0aW9ucy5jaHVua1NpemUsXG4gICAgICBtYXhSYXRlOiBvcHRpb25zLm1heFJhdGUsXG4gICAgICBtaW5DaHVua1NpemU6IG9wdGlvbnMubWluQ2h1bmtTaXplLFxuICAgICAgYnl0ZXNTZWVuOiAwLFxuICAgICAgaXNDYXB0dXJlZDogZmFsc2UsXG4gICAgICBub3RpZmllZEJ5dGVzTG9hZGVkOiAwLFxuICAgICAgdHM6IERhdGUubm93KCksXG4gICAgICBieXRlczogMCxcbiAgICAgIG9uUmVhZENhbGxiYWNrOiBudWxsXG4gICAgfTtcblxuICAgIHRoaXMub24oJ25ld0xpc3RlbmVyJywgZXZlbnQgPT4ge1xuICAgICAgaWYgKGV2ZW50ID09PSAncHJvZ3Jlc3MnKSB7XG4gICAgICAgIGlmICghaW50ZXJuYWxzLmlzQ2FwdHVyZWQpIHtcbiAgICAgICAgICBpbnRlcm5hbHMuaXNDYXB0dXJlZCA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIF9yZWFkKHNpemUpIHtcbiAgICBjb25zdCBpbnRlcm5hbHMgPSB0aGlzW2tJbnRlcm5hbHNdO1xuXG4gICAgaWYgKGludGVybmFscy5vblJlYWRDYWxsYmFjaykge1xuICAgICAgaW50ZXJuYWxzLm9uUmVhZENhbGxiYWNrKCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHN1cGVyLl9yZWFkKHNpemUpO1xuICB9XG5cbiAgX3RyYW5zZm9ybShjaHVuaywgZW5jb2RpbmcsIGNhbGxiYWNrKSB7XG4gICAgY29uc3QgaW50ZXJuYWxzID0gdGhpc1trSW50ZXJuYWxzXTtcbiAgICBjb25zdCBtYXhSYXRlID0gaW50ZXJuYWxzLm1heFJhdGU7XG5cbiAgICBjb25zdCByZWFkYWJsZUhpZ2hXYXRlck1hcmsgPSB0aGlzLnJlYWRhYmxlSGlnaFdhdGVyTWFyaztcblxuICAgIGNvbnN0IHRpbWVXaW5kb3cgPSBpbnRlcm5hbHMudGltZVdpbmRvdztcblxuICAgIGNvbnN0IGRpdmlkZXIgPSAxMDAwIC8gdGltZVdpbmRvdztcbiAgICBjb25zdCBieXRlc1RocmVzaG9sZCA9IChtYXhSYXRlIC8gZGl2aWRlcik7XG4gICAgY29uc3QgbWluQ2h1bmtTaXplID0gaW50ZXJuYWxzLm1pbkNodW5rU2l6ZSAhPT0gZmFsc2UgPyBNYXRoLm1heChpbnRlcm5hbHMubWluQ2h1bmtTaXplLCBieXRlc1RocmVzaG9sZCAqIDAuMDEpIDogMDtcblxuICAgIGNvbnN0IHB1c2hDaHVuayA9IChfY2h1bmssIF9jYWxsYmFjaykgPT4ge1xuICAgICAgY29uc3QgYnl0ZXMgPSBCdWZmZXIuYnl0ZUxlbmd0aChfY2h1bmspO1xuICAgICAgaW50ZXJuYWxzLmJ5dGVzU2VlbiArPSBieXRlcztcbiAgICAgIGludGVybmFscy5ieXRlcyArPSBieXRlcztcblxuICAgICAgaW50ZXJuYWxzLmlzQ2FwdHVyZWQgJiYgdGhpcy5lbWl0KCdwcm9ncmVzcycsIGludGVybmFscy5ieXRlc1NlZW4pO1xuXG4gICAgICBpZiAodGhpcy5wdXNoKF9jaHVuaykpIHtcbiAgICAgICAgcHJvY2Vzcy5uZXh0VGljayhfY2FsbGJhY2spO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaW50ZXJuYWxzLm9uUmVhZENhbGxiYWNrID0gKCkgPT4ge1xuICAgICAgICAgIGludGVybmFscy5vblJlYWRDYWxsYmFjayA9IG51bGw7XG4gICAgICAgICAgcHJvY2Vzcy5uZXh0VGljayhfY2FsbGJhY2spO1xuICAgICAgICB9O1xuICAgICAgfVxuICAgIH07XG5cbiAgICBjb25zdCB0cmFuc2Zvcm1DaHVuayA9IChfY2h1bmssIF9jYWxsYmFjaykgPT4ge1xuICAgICAgY29uc3QgY2h1bmtTaXplID0gQnVmZmVyLmJ5dGVMZW5ndGgoX2NodW5rKTtcbiAgICAgIGxldCBjaHVua1JlbWFpbmRlciA9IG51bGw7XG4gICAgICBsZXQgbWF4Q2h1bmtTaXplID0gcmVhZGFibGVIaWdoV2F0ZXJNYXJrO1xuICAgICAgbGV0IGJ5dGVzTGVmdDtcbiAgICAgIGxldCBwYXNzZWQgPSAwO1xuXG4gICAgICBpZiAobWF4UmF0ZSkge1xuICAgICAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuXG4gICAgICAgIGlmICghaW50ZXJuYWxzLnRzIHx8IChwYXNzZWQgPSAobm93IC0gaW50ZXJuYWxzLnRzKSkgPj0gdGltZVdpbmRvdykge1xuICAgICAgICAgIGludGVybmFscy50cyA9IG5vdztcbiAgICAgICAgICBieXRlc0xlZnQgPSBieXRlc1RocmVzaG9sZCAtIGludGVybmFscy5ieXRlcztcbiAgICAgICAgICBpbnRlcm5hbHMuYnl0ZXMgPSBieXRlc0xlZnQgPCAwID8gLWJ5dGVzTGVmdCA6IDA7XG4gICAgICAgICAgcGFzc2VkID0gMDtcbiAgICAgICAgfVxuXG4gICAgICAgIGJ5dGVzTGVmdCA9IGJ5dGVzVGhyZXNob2xkIC0gaW50ZXJuYWxzLmJ5dGVzO1xuICAgICAgfVxuXG4gICAgICBpZiAobWF4UmF0ZSkge1xuICAgICAgICBpZiAoYnl0ZXNMZWZ0IDw9IDApIHtcbiAgICAgICAgICAvLyBuZXh0IHRpbWUgd2luZG93XG4gICAgICAgICAgcmV0dXJuIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgX2NhbGxiYWNrKG51bGwsIF9jaHVuayk7XG4gICAgICAgICAgfSwgdGltZVdpbmRvdyAtIHBhc3NlZCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoYnl0ZXNMZWZ0IDwgbWF4Q2h1bmtTaXplKSB7XG4gICAgICAgICAgbWF4Q2h1bmtTaXplID0gYnl0ZXNMZWZ0O1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChtYXhDaHVua1NpemUgJiYgY2h1bmtTaXplID4gbWF4Q2h1bmtTaXplICYmIChjaHVua1NpemUgLSBtYXhDaHVua1NpemUpID4gbWluQ2h1bmtTaXplKSB7XG4gICAgICAgIGNodW5rUmVtYWluZGVyID0gX2NodW5rLnN1YmFycmF5KG1heENodW5rU2l6ZSk7XG4gICAgICAgIF9jaHVuayA9IF9jaHVuay5zdWJhcnJheSgwLCBtYXhDaHVua1NpemUpO1xuICAgICAgfVxuXG4gICAgICBwdXNoQ2h1bmsoX2NodW5rLCBjaHVua1JlbWFpbmRlciA/ICgpID0+IHtcbiAgICAgICAgcHJvY2Vzcy5uZXh0VGljayhfY2FsbGJhY2ssIG51bGwsIGNodW5rUmVtYWluZGVyKTtcbiAgICAgIH0gOiBfY2FsbGJhY2spO1xuICAgIH07XG5cbiAgICB0cmFuc2Zvcm1DaHVuayhjaHVuaywgZnVuY3Rpb24gdHJhbnNmb3JtTmV4dENodW5rKGVyciwgX2NodW5rKSB7XG4gICAgICBpZiAoZXJyKSB7XG4gICAgICAgIHJldHVybiBjYWxsYmFjayhlcnIpO1xuICAgICAgfVxuXG4gICAgICBpZiAoX2NodW5rKSB7XG4gICAgICAgIHRyYW5zZm9ybUNodW5rKF9jaHVuaywgdHJhbnNmb3JtTmV4dENodW5rKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNhbGxiYWNrKG51bGwpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG59XG5cbmNvbnN0IEF4aW9zVHJhbnNmb3JtU3RyZWFtJDEgPSBBeGlvc1RyYW5zZm9ybVN0cmVhbTtcblxuY29uc3Qge2FzeW5jSXRlcmF0b3J9ID0gU3ltYm9sO1xuXG5jb25zdCByZWFkQmxvYiA9IGFzeW5jIGZ1bmN0aW9uKiAoYmxvYikge1xuICBpZiAoYmxvYi5zdHJlYW0pIHtcbiAgICB5aWVsZCogYmxvYi5zdHJlYW0oKTtcbiAgfSBlbHNlIGlmIChibG9iLmFycmF5QnVmZmVyKSB7XG4gICAgeWllbGQgYXdhaXQgYmxvYi5hcnJheUJ1ZmZlcigpO1xuICB9IGVsc2UgaWYgKGJsb2JbYXN5bmNJdGVyYXRvcl0pIHtcbiAgICB5aWVsZCogYmxvYlthc3luY0l0ZXJhdG9yXSgpO1xuICB9IGVsc2Uge1xuICAgIHlpZWxkIGJsb2I7XG4gIH1cbn07XG5cbmNvbnN0IHJlYWRCbG9iJDEgPSByZWFkQmxvYjtcblxuY29uc3QgQk9VTkRBUllfQUxQSEFCRVQgPSB1dGlscyQxLkFMUEhBQkVULkFMUEhBX0RJR0lUICsgJy1fJztcblxuY29uc3QgdGV4dEVuY29kZXIgPSBuZXcgdXRpbC5UZXh0RW5jb2RlcigpO1xuXG5jb25zdCBDUkxGID0gJ1xcclxcbic7XG5jb25zdCBDUkxGX0JZVEVTID0gdGV4dEVuY29kZXIuZW5jb2RlKENSTEYpO1xuY29uc3QgQ1JMRl9CWVRFU19DT1VOVCA9IDI7XG5cbmNsYXNzIEZvcm1EYXRhUGFydCB7XG4gIGNvbnN0cnVjdG9yKG5hbWUsIHZhbHVlKSB7XG4gICAgY29uc3Qge2VzY2FwZU5hbWV9ID0gdGhpcy5jb25zdHJ1Y3RvcjtcbiAgICBjb25zdCBpc1N0cmluZ1ZhbHVlID0gdXRpbHMkMS5pc1N0cmluZyh2YWx1ZSk7XG5cbiAgICBsZXQgaGVhZGVycyA9IGBDb250ZW50LURpc3Bvc2l0aW9uOiBmb3JtLWRhdGE7IG5hbWU9XCIke2VzY2FwZU5hbWUobmFtZSl9XCIke1xuICAgICAgIWlzU3RyaW5nVmFsdWUgJiYgdmFsdWUubmFtZSA/IGA7IGZpbGVuYW1lPVwiJHtlc2NhcGVOYW1lKHZhbHVlLm5hbWUpfVwiYCA6ICcnXG4gICAgfSR7Q1JMRn1gO1xuXG4gICAgaWYgKGlzU3RyaW5nVmFsdWUpIHtcbiAgICAgIHZhbHVlID0gdGV4dEVuY29kZXIuZW5jb2RlKFN0cmluZyh2YWx1ZSkucmVwbGFjZSgvXFxyP1xcbnxcXHJcXG4/L2csIENSTEYpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaGVhZGVycyArPSBgQ29udGVudC1UeXBlOiAke3ZhbHVlLnR5cGUgfHwgXCJhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW1cIn0ke0NSTEZ9YDtcbiAgICB9XG5cbiAgICB0aGlzLmhlYWRlcnMgPSB0ZXh0RW5jb2Rlci5lbmNvZGUoaGVhZGVycyArIENSTEYpO1xuXG4gICAgdGhpcy5jb250ZW50TGVuZ3RoID0gaXNTdHJpbmdWYWx1ZSA/IHZhbHVlLmJ5dGVMZW5ndGggOiB2YWx1ZS5zaXplO1xuXG4gICAgdGhpcy5zaXplID0gdGhpcy5oZWFkZXJzLmJ5dGVMZW5ndGggKyB0aGlzLmNvbnRlbnRMZW5ndGggKyBDUkxGX0JZVEVTX0NPVU5UO1xuXG4gICAgdGhpcy5uYW1lID0gbmFtZTtcbiAgICB0aGlzLnZhbHVlID0gdmFsdWU7XG4gIH1cblxuICBhc3luYyAqZW5jb2RlKCl7XG4gICAgeWllbGQgdGhpcy5oZWFkZXJzO1xuXG4gICAgY29uc3Qge3ZhbHVlfSA9IHRoaXM7XG5cbiAgICBpZih1dGlscyQxLmlzVHlwZWRBcnJheSh2YWx1ZSkpIHtcbiAgICAgIHlpZWxkIHZhbHVlO1xuICAgIH0gZWxzZSB7XG4gICAgICB5aWVsZCogcmVhZEJsb2IkMSh2YWx1ZSk7XG4gICAgfVxuXG4gICAgeWllbGQgQ1JMRl9CWVRFUztcbiAgfVxuXG4gIHN0YXRpYyBlc2NhcGVOYW1lKG5hbWUpIHtcbiAgICAgIHJldHVybiBTdHJpbmcobmFtZSkucmVwbGFjZSgvW1xcclxcblwiXS9nLCAobWF0Y2gpID0+ICh7XG4gICAgICAgICdcXHInIDogJyUwRCcsXG4gICAgICAgICdcXG4nIDogJyUwQScsXG4gICAgICAgICdcIicgOiAnJTIyJyxcbiAgICAgIH1bbWF0Y2hdKSk7XG4gIH1cbn1cblxuY29uc3QgZm9ybURhdGFUb1N0cmVhbSA9IChmb3JtLCBoZWFkZXJzSGFuZGxlciwgb3B0aW9ucykgPT4ge1xuICBjb25zdCB7XG4gICAgdGFnID0gJ2Zvcm0tZGF0YS1ib3VuZGFyeScsXG4gICAgc2l6ZSA9IDI1LFxuICAgIGJvdW5kYXJ5ID0gdGFnICsgJy0nICsgdXRpbHMkMS5nZW5lcmF0ZVN0cmluZyhzaXplLCBCT1VOREFSWV9BTFBIQUJFVClcbiAgfSA9IG9wdGlvbnMgfHwge307XG5cbiAgaWYoIXV0aWxzJDEuaXNGb3JtRGF0YShmb3JtKSkge1xuICAgIHRocm93IFR5cGVFcnJvcignRm9ybURhdGEgaW5zdGFuY2UgcmVxdWlyZWQnKTtcbiAgfVxuXG4gIGlmIChib3VuZGFyeS5sZW5ndGggPCAxIHx8IGJvdW5kYXJ5Lmxlbmd0aCA+IDcwKSB7XG4gICAgdGhyb3cgRXJyb3IoJ2JvdW5kYXJ5IG11c3QgYmUgMTAtNzAgY2hhcmFjdGVycyBsb25nJylcbiAgfVxuXG4gIGNvbnN0IGJvdW5kYXJ5Qnl0ZXMgPSB0ZXh0RW5jb2Rlci5lbmNvZGUoJy0tJyArIGJvdW5kYXJ5ICsgQ1JMRik7XG4gIGNvbnN0IGZvb3RlckJ5dGVzID0gdGV4dEVuY29kZXIuZW5jb2RlKCctLScgKyBib3VuZGFyeSArICctLScgKyBDUkxGICsgQ1JMRik7XG4gIGxldCBjb250ZW50TGVuZ3RoID0gZm9vdGVyQnl0ZXMuYnl0ZUxlbmd0aDtcblxuICBjb25zdCBwYXJ0cyA9IEFycmF5LmZyb20oZm9ybS5lbnRyaWVzKCkpLm1hcCgoW25hbWUsIHZhbHVlXSkgPT4ge1xuICAgIGNvbnN0IHBhcnQgPSBuZXcgRm9ybURhdGFQYXJ0KG5hbWUsIHZhbHVlKTtcbiAgICBjb250ZW50TGVuZ3RoICs9IHBhcnQuc2l6ZTtcbiAgICByZXR1cm4gcGFydDtcbiAgfSk7XG5cbiAgY29udGVudExlbmd0aCArPSBib3VuZGFyeUJ5dGVzLmJ5dGVMZW5ndGggKiBwYXJ0cy5sZW5ndGg7XG5cbiAgY29udGVudExlbmd0aCA9IHV0aWxzJDEudG9GaW5pdGVOdW1iZXIoY29udGVudExlbmd0aCk7XG5cbiAgY29uc3QgY29tcHV0ZWRIZWFkZXJzID0ge1xuICAgICdDb250ZW50LVR5cGUnOiBgbXVsdGlwYXJ0L2Zvcm0tZGF0YTsgYm91bmRhcnk9JHtib3VuZGFyeX1gXG4gIH07XG5cbiAgaWYgKE51bWJlci5pc0Zpbml0ZShjb250ZW50TGVuZ3RoKSkge1xuICAgIGNvbXB1dGVkSGVhZGVyc1snQ29udGVudC1MZW5ndGgnXSA9IGNvbnRlbnRMZW5ndGg7XG4gIH1cblxuICBoZWFkZXJzSGFuZGxlciAmJiBoZWFkZXJzSGFuZGxlcihjb21wdXRlZEhlYWRlcnMpO1xuXG4gIHJldHVybiBzdHJlYW0uUmVhZGFibGUuZnJvbSgoYXN5bmMgZnVuY3Rpb24gKigpIHtcbiAgICBmb3IoY29uc3QgcGFydCBvZiBwYXJ0cykge1xuICAgICAgeWllbGQgYm91bmRhcnlCeXRlcztcbiAgICAgIHlpZWxkKiBwYXJ0LmVuY29kZSgpO1xuICAgIH1cblxuICAgIHlpZWxkIGZvb3RlckJ5dGVzO1xuICB9KSgpKTtcbn07XG5cbmNvbnN0IGZvcm1EYXRhVG9TdHJlYW0kMSA9IGZvcm1EYXRhVG9TdHJlYW07XG5cbmNsYXNzIFpsaWJIZWFkZXJUcmFuc2Zvcm1TdHJlYW0gZXh0ZW5kcyBzdHJlYW1fX2RlZmF1bHRbXCJkZWZhdWx0XCJdLlRyYW5zZm9ybSB7XG4gIF9fdHJhbnNmb3JtKGNodW5rLCBlbmNvZGluZywgY2FsbGJhY2spIHtcbiAgICB0aGlzLnB1c2goY2h1bmspO1xuICAgIGNhbGxiYWNrKCk7XG4gIH1cblxuICBfdHJhbnNmb3JtKGNodW5rLCBlbmNvZGluZywgY2FsbGJhY2spIHtcbiAgICBpZiAoY2h1bmsubGVuZ3RoICE9PSAwKSB7XG4gICAgICB0aGlzLl90cmFuc2Zvcm0gPSB0aGlzLl9fdHJhbnNmb3JtO1xuXG4gICAgICAvLyBBZGQgRGVmYXVsdCBDb21wcmVzc2lvbiBoZWFkZXJzIGlmIG5vIHpsaWIgaGVhZGVycyBhcmUgcHJlc2VudFxuICAgICAgaWYgKGNodW5rWzBdICE9PSAxMjApIHsgLy8gSGV4OiA3OFxuICAgICAgICBjb25zdCBoZWFkZXIgPSBCdWZmZXIuYWxsb2MoMik7XG4gICAgICAgIGhlYWRlclswXSA9IDEyMDsgLy8gSGV4OiA3OFxuICAgICAgICBoZWFkZXJbMV0gPSAxNTY7IC8vIEhleDogOUMgXG4gICAgICAgIHRoaXMucHVzaChoZWFkZXIsIGVuY29kaW5nKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLl9fdHJhbnNmb3JtKGNodW5rLCBlbmNvZGluZywgY2FsbGJhY2spO1xuICB9XG59XG5cbmNvbnN0IFpsaWJIZWFkZXJUcmFuc2Zvcm1TdHJlYW0kMSA9IFpsaWJIZWFkZXJUcmFuc2Zvcm1TdHJlYW07XG5cbmNvbnN0IGNhbGxiYWNraWZ5ID0gKGZuLCByZWR1Y2VyKSA9PiB7XG4gIHJldHVybiB1dGlscyQxLmlzQXN5bmNGbihmbikgPyBmdW5jdGlvbiAoLi4uYXJncykge1xuICAgIGNvbnN0IGNiID0gYXJncy5wb3AoKTtcbiAgICBmbi5hcHBseSh0aGlzLCBhcmdzKS50aGVuKCh2YWx1ZSkgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgcmVkdWNlciA/IGNiKG51bGwsIC4uLnJlZHVjZXIodmFsdWUpKSA6IGNiKG51bGwsIHZhbHVlKTtcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICBjYihlcnIpO1xuICAgICAgfVxuICAgIH0sIGNiKTtcbiAgfSA6IGZuO1xufTtcblxuY29uc3QgY2FsbGJhY2tpZnkkMSA9IGNhbGxiYWNraWZ5O1xuXG4vKipcbiAqIENhbGN1bGF0ZSBkYXRhIG1heFJhdGVcbiAqIEBwYXJhbSB7TnVtYmVyfSBbc2FtcGxlc0NvdW50PSAxMF1cbiAqIEBwYXJhbSB7TnVtYmVyfSBbbWluPSAxMDAwXVxuICogQHJldHVybnMge0Z1bmN0aW9ufVxuICovXG5mdW5jdGlvbiBzcGVlZG9tZXRlcihzYW1wbGVzQ291bnQsIG1pbikge1xuICBzYW1wbGVzQ291bnQgPSBzYW1wbGVzQ291bnQgfHwgMTA7XG4gIGNvbnN0IGJ5dGVzID0gbmV3IEFycmF5KHNhbXBsZXNDb3VudCk7XG4gIGNvbnN0IHRpbWVzdGFtcHMgPSBuZXcgQXJyYXkoc2FtcGxlc0NvdW50KTtcbiAgbGV0IGhlYWQgPSAwO1xuICBsZXQgdGFpbCA9IDA7XG4gIGxldCBmaXJzdFNhbXBsZVRTO1xuXG4gIG1pbiA9IG1pbiAhPT0gdW5kZWZpbmVkID8gbWluIDogMTAwMDtcblxuICByZXR1cm4gZnVuY3Rpb24gcHVzaChjaHVua0xlbmd0aCkge1xuICAgIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG5cbiAgICBjb25zdCBzdGFydGVkQXQgPSB0aW1lc3RhbXBzW3RhaWxdO1xuXG4gICAgaWYgKCFmaXJzdFNhbXBsZVRTKSB7XG4gICAgICBmaXJzdFNhbXBsZVRTID0gbm93O1xuICAgIH1cblxuICAgIGJ5dGVzW2hlYWRdID0gY2h1bmtMZW5ndGg7XG4gICAgdGltZXN0YW1wc1toZWFkXSA9IG5vdztcblxuICAgIGxldCBpID0gdGFpbDtcbiAgICBsZXQgYnl0ZXNDb3VudCA9IDA7XG5cbiAgICB3aGlsZSAoaSAhPT0gaGVhZCkge1xuICAgICAgYnl0ZXNDb3VudCArPSBieXRlc1tpKytdO1xuICAgICAgaSA9IGkgJSBzYW1wbGVzQ291bnQ7XG4gICAgfVxuXG4gICAgaGVhZCA9IChoZWFkICsgMSkgJSBzYW1wbGVzQ291bnQ7XG5cbiAgICBpZiAoaGVhZCA9PT0gdGFpbCkge1xuICAgICAgdGFpbCA9ICh0YWlsICsgMSkgJSBzYW1wbGVzQ291bnQ7XG4gICAgfVxuXG4gICAgaWYgKG5vdyAtIGZpcnN0U2FtcGxlVFMgPCBtaW4pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBwYXNzZWQgPSBzdGFydGVkQXQgJiYgbm93IC0gc3RhcnRlZEF0O1xuXG4gICAgcmV0dXJuIHBhc3NlZCA/IE1hdGgucm91bmQoYnl0ZXNDb3VudCAqIDEwMDAgLyBwYXNzZWQpIDogdW5kZWZpbmVkO1xuICB9O1xufVxuXG4vKipcbiAqIFRocm90dGxlIGRlY29yYXRvclxuICogQHBhcmFtIHtGdW5jdGlvbn0gZm5cbiAqIEBwYXJhbSB7TnVtYmVyfSBmcmVxXG4gKiBAcmV0dXJuIHtGdW5jdGlvbn1cbiAqL1xuZnVuY3Rpb24gdGhyb3R0bGUoZm4sIGZyZXEpIHtcbiAgbGV0IHRpbWVzdGFtcCA9IDA7XG4gIGxldCB0aHJlc2hvbGQgPSAxMDAwIC8gZnJlcTtcbiAgbGV0IGxhc3RBcmdzO1xuICBsZXQgdGltZXI7XG5cbiAgY29uc3QgaW52b2tlID0gKGFyZ3MsIG5vdyA9IERhdGUubm93KCkpID0+IHtcbiAgICB0aW1lc3RhbXAgPSBub3c7XG4gICAgbGFzdEFyZ3MgPSBudWxsO1xuICAgIGlmICh0aW1lcikge1xuICAgICAgY2xlYXJUaW1lb3V0KHRpbWVyKTtcbiAgICAgIHRpbWVyID0gbnVsbDtcbiAgICB9XG4gICAgZm4uYXBwbHkobnVsbCwgYXJncyk7XG4gIH07XG5cbiAgY29uc3QgdGhyb3R0bGVkID0gKC4uLmFyZ3MpID0+IHtcbiAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuICAgIGNvbnN0IHBhc3NlZCA9IG5vdyAtIHRpbWVzdGFtcDtcbiAgICBpZiAoIHBhc3NlZCA+PSB0aHJlc2hvbGQpIHtcbiAgICAgIGludm9rZShhcmdzLCBub3cpO1xuICAgIH0gZWxzZSB7XG4gICAgICBsYXN0QXJncyA9IGFyZ3M7XG4gICAgICBpZiAoIXRpbWVyKSB7XG4gICAgICAgIHRpbWVyID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgdGltZXIgPSBudWxsO1xuICAgICAgICAgIGludm9rZShsYXN0QXJncyk7XG4gICAgICAgIH0sIHRocmVzaG9sZCAtIHBhc3NlZCk7XG4gICAgICB9XG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IGZsdXNoID0gKCkgPT4gbGFzdEFyZ3MgJiYgaW52b2tlKGxhc3RBcmdzKTtcblxuICByZXR1cm4gW3Rocm90dGxlZCwgZmx1c2hdO1xufVxuXG5jb25zdCBwcm9ncmVzc0V2ZW50UmVkdWNlciA9IChsaXN0ZW5lciwgaXNEb3dubG9hZFN0cmVhbSwgZnJlcSA9IDMpID0+IHtcbiAgbGV0IGJ5dGVzTm90aWZpZWQgPSAwO1xuICBjb25zdCBfc3BlZWRvbWV0ZXIgPSBzcGVlZG9tZXRlcig1MCwgMjUwKTtcblxuICByZXR1cm4gdGhyb3R0bGUoZSA9PiB7XG4gICAgY29uc3QgbG9hZGVkID0gZS5sb2FkZWQ7XG4gICAgY29uc3QgdG90YWwgPSBlLmxlbmd0aENvbXB1dGFibGUgPyBlLnRvdGFsIDogdW5kZWZpbmVkO1xuICAgIGNvbnN0IHByb2dyZXNzQnl0ZXMgPSBsb2FkZWQgLSBieXRlc05vdGlmaWVkO1xuICAgIGNvbnN0IHJhdGUgPSBfc3BlZWRvbWV0ZXIocHJvZ3Jlc3NCeXRlcyk7XG4gICAgY29uc3QgaW5SYW5nZSA9IGxvYWRlZCA8PSB0b3RhbDtcblxuICAgIGJ5dGVzTm90aWZpZWQgPSBsb2FkZWQ7XG5cbiAgICBjb25zdCBkYXRhID0ge1xuICAgICAgbG9hZGVkLFxuICAgICAgdG90YWwsXG4gICAgICBwcm9ncmVzczogdG90YWwgPyAobG9hZGVkIC8gdG90YWwpIDogdW5kZWZpbmVkLFxuICAgICAgYnl0ZXM6IHByb2dyZXNzQnl0ZXMsXG4gICAgICByYXRlOiByYXRlID8gcmF0ZSA6IHVuZGVmaW5lZCxcbiAgICAgIGVzdGltYXRlZDogcmF0ZSAmJiB0b3RhbCAmJiBpblJhbmdlID8gKHRvdGFsIC0gbG9hZGVkKSAvIHJhdGUgOiB1bmRlZmluZWQsXG4gICAgICBldmVudDogZSxcbiAgICAgIGxlbmd0aENvbXB1dGFibGU6IHRvdGFsICE9IG51bGwsXG4gICAgICBbaXNEb3dubG9hZFN0cmVhbSA/ICdkb3dubG9hZCcgOiAndXBsb2FkJ106IHRydWVcbiAgICB9O1xuXG4gICAgbGlzdGVuZXIoZGF0YSk7XG4gIH0sIGZyZXEpO1xufTtcblxuY29uc3QgcHJvZ3Jlc3NFdmVudERlY29yYXRvciA9ICh0b3RhbCwgdGhyb3R0bGVkKSA9PiB7XG4gIGNvbnN0IGxlbmd0aENvbXB1dGFibGUgPSB0b3RhbCAhPSBudWxsO1xuXG4gIHJldHVybiBbKGxvYWRlZCkgPT4gdGhyb3R0bGVkWzBdKHtcbiAgICBsZW5ndGhDb21wdXRhYmxlLFxuICAgIHRvdGFsLFxuICAgIGxvYWRlZFxuICB9KSwgdGhyb3R0bGVkWzFdXTtcbn07XG5cbmNvbnN0IGFzeW5jRGVjb3JhdG9yID0gKGZuKSA9PiAoLi4uYXJncykgPT4gdXRpbHMkMS5hc2FwKCgpID0+IGZuKC4uLmFyZ3MpKTtcblxuY29uc3QgemxpYk9wdGlvbnMgPSB7XG4gIGZsdXNoOiB6bGliX19kZWZhdWx0W1wiZGVmYXVsdFwiXS5jb25zdGFudHMuWl9TWU5DX0ZMVVNILFxuICBmaW5pc2hGbHVzaDogemxpYl9fZGVmYXVsdFtcImRlZmF1bHRcIl0uY29uc3RhbnRzLlpfU1lOQ19GTFVTSFxufTtcblxuY29uc3QgYnJvdGxpT3B0aW9ucyA9IHtcbiAgZmx1c2g6IHpsaWJfX2RlZmF1bHRbXCJkZWZhdWx0XCJdLmNvbnN0YW50cy5CUk9UTElfT1BFUkFUSU9OX0ZMVVNILFxuICBmaW5pc2hGbHVzaDogemxpYl9fZGVmYXVsdFtcImRlZmF1bHRcIl0uY29uc3RhbnRzLkJST1RMSV9PUEVSQVRJT05fRkxVU0hcbn07XG5cbmNvbnN0IGlzQnJvdGxpU3VwcG9ydGVkID0gdXRpbHMkMS5pc0Z1bmN0aW9uKHpsaWJfX2RlZmF1bHRbXCJkZWZhdWx0XCJdLmNyZWF0ZUJyb3RsaURlY29tcHJlc3MpO1xuXG5jb25zdCB7aHR0cDogaHR0cEZvbGxvdywgaHR0cHM6IGh0dHBzRm9sbG93fSA9IGZvbGxvd1JlZGlyZWN0c19fZGVmYXVsdFtcImRlZmF1bHRcIl07XG5cbmNvbnN0IGlzSHR0cHMgPSAvaHR0cHM6Py87XG5cbmNvbnN0IHN1cHBvcnRlZFByb3RvY29scyA9IHBsYXRmb3JtLnByb3RvY29scy5tYXAocHJvdG9jb2wgPT4ge1xuICByZXR1cm4gcHJvdG9jb2wgKyAnOic7XG59KTtcblxuY29uc3QgZmx1c2hPbkZpbmlzaCA9IChzdHJlYW0sIFt0aHJvdHRsZWQsIGZsdXNoXSkgPT4ge1xuICBzdHJlYW1cbiAgICAub24oJ2VuZCcsIGZsdXNoKVxuICAgIC5vbignZXJyb3InLCBmbHVzaCk7XG5cbiAgcmV0dXJuIHRocm90dGxlZDtcbn07XG5cbi8qKlxuICogSWYgdGhlIHByb3h5IG9yIGNvbmZpZyBiZWZvcmVSZWRpcmVjdHMgZnVuY3Rpb25zIGFyZSBkZWZpbmVkLCBjYWxsIHRoZW0gd2l0aCB0aGUgb3B0aW9uc1xuICogb2JqZWN0LlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0PHN0cmluZywgYW55Pn0gb3B0aW9ucyAtIFRoZSBvcHRpb25zIG9iamVjdCB0aGF0IHdhcyBwYXNzZWQgdG8gdGhlIHJlcXVlc3QuXG4gKlxuICogQHJldHVybnMge09iamVjdDxzdHJpbmcsIGFueT59XG4gKi9cbmZ1bmN0aW9uIGRpc3BhdGNoQmVmb3JlUmVkaXJlY3Qob3B0aW9ucywgcmVzcG9uc2VEZXRhaWxzKSB7XG4gIGlmIChvcHRpb25zLmJlZm9yZVJlZGlyZWN0cy5wcm94eSkge1xuICAgIG9wdGlvbnMuYmVmb3JlUmVkaXJlY3RzLnByb3h5KG9wdGlvbnMpO1xuICB9XG4gIGlmIChvcHRpb25zLmJlZm9yZVJlZGlyZWN0cy5jb25maWcpIHtcbiAgICBvcHRpb25zLmJlZm9yZVJlZGlyZWN0cy5jb25maWcob3B0aW9ucywgcmVzcG9uc2VEZXRhaWxzKTtcbiAgfVxufVxuXG4vKipcbiAqIElmIHRoZSBwcm94eSBvciBjb25maWcgYWZ0ZXJSZWRpcmVjdHMgZnVuY3Rpb25zIGFyZSBkZWZpbmVkLCBjYWxsIHRoZW0gd2l0aCB0aGUgb3B0aW9uc1xuICpcbiAqIEBwYXJhbSB7aHR0cC5DbGllbnRSZXF1ZXN0QXJnc30gb3B0aW9uc1xuICogQHBhcmFtIHtBeGlvc1Byb3h5Q29uZmlnfSBjb25maWdQcm94eSBjb25maWd1cmF0aW9uIGZyb20gQXhpb3Mgb3B0aW9ucyBvYmplY3RcbiAqIEBwYXJhbSB7c3RyaW5nfSBsb2NhdGlvblxuICpcbiAqIEByZXR1cm5zIHtodHRwLkNsaWVudFJlcXVlc3RBcmdzfVxuICovXG5mdW5jdGlvbiBzZXRQcm94eShvcHRpb25zLCBjb25maWdQcm94eSwgbG9jYXRpb24pIHtcbiAgbGV0IHByb3h5ID0gY29uZmlnUHJveHk7XG4gIGlmICghcHJveHkgJiYgcHJveHkgIT09IGZhbHNlKSB7XG4gICAgY29uc3QgcHJveHlVcmwgPSBwcm94eUZyb21FbnYuZ2V0UHJveHlGb3JVcmwobG9jYXRpb24pO1xuICAgIGlmIChwcm94eVVybCkge1xuICAgICAgcHJveHkgPSBuZXcgVVJMKHByb3h5VXJsKTtcbiAgICB9XG4gIH1cbiAgaWYgKHByb3h5KSB7XG4gICAgLy8gQmFzaWMgcHJveHkgYXV0aG9yaXphdGlvblxuICAgIGlmIChwcm94eS51c2VybmFtZSkge1xuICAgICAgcHJveHkuYXV0aCA9IChwcm94eS51c2VybmFtZSB8fCAnJykgKyAnOicgKyAocHJveHkucGFzc3dvcmQgfHwgJycpO1xuICAgIH1cblxuICAgIGlmIChwcm94eS5hdXRoKSB7XG4gICAgICAvLyBTdXBwb3J0IHByb3h5IGF1dGggb2JqZWN0IGZvcm1cbiAgICAgIGlmIChwcm94eS5hdXRoLnVzZXJuYW1lIHx8IHByb3h5LmF1dGgucGFzc3dvcmQpIHtcbiAgICAgICAgcHJveHkuYXV0aCA9IChwcm94eS5hdXRoLnVzZXJuYW1lIHx8ICcnKSArICc6JyArIChwcm94eS5hdXRoLnBhc3N3b3JkIHx8ICcnKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGJhc2U2NCA9IEJ1ZmZlclxuICAgICAgICAuZnJvbShwcm94eS5hdXRoLCAndXRmOCcpXG4gICAgICAgIC50b1N0cmluZygnYmFzZTY0Jyk7XG4gICAgICBvcHRpb25zLmhlYWRlcnNbJ1Byb3h5LUF1dGhvcml6YXRpb24nXSA9ICdCYXNpYyAnICsgYmFzZTY0O1xuICAgIH1cblxuICAgIG9wdGlvbnMuaGVhZGVycy5ob3N0ID0gb3B0aW9ucy5ob3N0bmFtZSArIChvcHRpb25zLnBvcnQgPyAnOicgKyBvcHRpb25zLnBvcnQgOiAnJyk7XG4gICAgY29uc3QgcHJveHlIb3N0ID0gcHJveHkuaG9zdG5hbWUgfHwgcHJveHkuaG9zdDtcbiAgICBvcHRpb25zLmhvc3RuYW1lID0gcHJveHlIb3N0O1xuICAgIC8vIFJlcGxhY2UgJ2hvc3QnIHNpbmNlIG9wdGlvbnMgaXMgbm90IGEgVVJMIG9iamVjdFxuICAgIG9wdGlvbnMuaG9zdCA9IHByb3h5SG9zdDtcbiAgICBvcHRpb25zLnBvcnQgPSBwcm94eS5wb3J0O1xuICAgIG9wdGlvbnMucGF0aCA9IGxvY2F0aW9uO1xuICAgIGlmIChwcm94eS5wcm90b2NvbCkge1xuICAgICAgb3B0aW9ucy5wcm90b2NvbCA9IHByb3h5LnByb3RvY29sLmluY2x1ZGVzKCc6JykgPyBwcm94eS5wcm90b2NvbCA6IGAke3Byb3h5LnByb3RvY29sfTpgO1xuICAgIH1cbiAgfVxuXG4gIG9wdGlvbnMuYmVmb3JlUmVkaXJlY3RzLnByb3h5ID0gZnVuY3Rpb24gYmVmb3JlUmVkaXJlY3QocmVkaXJlY3RPcHRpb25zKSB7XG4gICAgLy8gQ29uZmlndXJlIHByb3h5IGZvciByZWRpcmVjdGVkIHJlcXVlc3QsIHBhc3NpbmcgdGhlIG9yaWdpbmFsIGNvbmZpZyBwcm94eSB0byBhcHBseVxuICAgIC8vIHRoZSBleGFjdCBzYW1lIGxvZ2ljIGFzIGlmIHRoZSByZWRpcmVjdGVkIHJlcXVlc3Qgd2FzIHBlcmZvcm1lZCBieSBheGlvcyBkaXJlY3RseS5cbiAgICBzZXRQcm94eShyZWRpcmVjdE9wdGlvbnMsIGNvbmZpZ1Byb3h5LCByZWRpcmVjdE9wdGlvbnMuaHJlZik7XG4gIH07XG59XG5cbmNvbnN0IGlzSHR0cEFkYXB0ZXJTdXBwb3J0ZWQgPSB0eXBlb2YgcHJvY2VzcyAhPT0gJ3VuZGVmaW5lZCcgJiYgdXRpbHMkMS5raW5kT2YocHJvY2VzcykgPT09ICdwcm9jZXNzJztcblxuLy8gdGVtcG9yYXJ5IGhvdGZpeFxuXG5jb25zdCB3cmFwQXN5bmMgPSAoYXN5bmNFeGVjdXRvcikgPT4ge1xuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIGxldCBvbkRvbmU7XG4gICAgbGV0IGlzRG9uZTtcblxuICAgIGNvbnN0IGRvbmUgPSAodmFsdWUsIGlzUmVqZWN0ZWQpID0+IHtcbiAgICAgIGlmIChpc0RvbmUpIHJldHVybjtcbiAgICAgIGlzRG9uZSA9IHRydWU7XG4gICAgICBvbkRvbmUgJiYgb25Eb25lKHZhbHVlLCBpc1JlamVjdGVkKTtcbiAgICB9O1xuXG4gICAgY29uc3QgX3Jlc29sdmUgPSAodmFsdWUpID0+IHtcbiAgICAgIGRvbmUodmFsdWUpO1xuICAgICAgcmVzb2x2ZSh2YWx1ZSk7XG4gICAgfTtcblxuICAgIGNvbnN0IF9yZWplY3QgPSAocmVhc29uKSA9PiB7XG4gICAgICBkb25lKHJlYXNvbiwgdHJ1ZSk7XG4gICAgICByZWplY3QocmVhc29uKTtcbiAgICB9O1xuXG4gICAgYXN5bmNFeGVjdXRvcihfcmVzb2x2ZSwgX3JlamVjdCwgKG9uRG9uZUhhbmRsZXIpID0+IChvbkRvbmUgPSBvbkRvbmVIYW5kbGVyKSkuY2F0Y2goX3JlamVjdCk7XG4gIH0pXG59O1xuXG5jb25zdCByZXNvbHZlRmFtaWx5ID0gKHthZGRyZXNzLCBmYW1pbHl9KSA9PiB7XG4gIGlmICghdXRpbHMkMS5pc1N0cmluZyhhZGRyZXNzKSkge1xuICAgIHRocm93IFR5cGVFcnJvcignYWRkcmVzcyBtdXN0IGJlIGEgc3RyaW5nJyk7XG4gIH1cbiAgcmV0dXJuICh7XG4gICAgYWRkcmVzcyxcbiAgICBmYW1pbHk6IGZhbWlseSB8fCAoYWRkcmVzcy5pbmRleE9mKCcuJykgPCAwID8gNiA6IDQpXG4gIH0pO1xufTtcblxuY29uc3QgYnVpbGRBZGRyZXNzRW50cnkgPSAoYWRkcmVzcywgZmFtaWx5KSA9PiByZXNvbHZlRmFtaWx5KHV0aWxzJDEuaXNPYmplY3QoYWRkcmVzcykgPyBhZGRyZXNzIDoge2FkZHJlc3MsIGZhbWlseX0pO1xuXG4vKmVzbGludCBjb25zaXN0ZW50LXJldHVybjowKi9cbmNvbnN0IGh0dHBBZGFwdGVyID0gaXNIdHRwQWRhcHRlclN1cHBvcnRlZCAmJiBmdW5jdGlvbiBodHRwQWRhcHRlcihjb25maWcpIHtcbiAgcmV0dXJuIHdyYXBBc3luYyhhc3luYyBmdW5jdGlvbiBkaXNwYXRjaEh0dHBSZXF1ZXN0KHJlc29sdmUsIHJlamVjdCwgb25Eb25lKSB7XG4gICAgbGV0IHtkYXRhLCBsb29rdXAsIGZhbWlseX0gPSBjb25maWc7XG4gICAgY29uc3Qge3Jlc3BvbnNlVHlwZSwgcmVzcG9uc2VFbmNvZGluZ30gPSBjb25maWc7XG4gICAgY29uc3QgbWV0aG9kID0gY29uZmlnLm1ldGhvZC50b1VwcGVyQ2FzZSgpO1xuICAgIGxldCBpc0RvbmU7XG4gICAgbGV0IHJlamVjdGVkID0gZmFsc2U7XG4gICAgbGV0IHJlcTtcblxuICAgIGlmIChsb29rdXApIHtcbiAgICAgIGNvbnN0IF9sb29rdXAgPSBjYWxsYmFja2lmeSQxKGxvb2t1cCwgKHZhbHVlKSA9PiB1dGlscyQxLmlzQXJyYXkodmFsdWUpID8gdmFsdWUgOiBbdmFsdWVdKTtcbiAgICAgIC8vIGhvdGZpeCB0byBzdXBwb3J0IG9wdC5hbGwgb3B0aW9uIHdoaWNoIGlzIHJlcXVpcmVkIGZvciBub2RlIDIwLnhcbiAgICAgIGxvb2t1cCA9IChob3N0bmFtZSwgb3B0LCBjYikgPT4ge1xuICAgICAgICBfbG9va3VwKGhvc3RuYW1lLCBvcHQsIChlcnIsIGFyZzAsIGFyZzEpID0+IHtcbiAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICByZXR1cm4gY2IoZXJyKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb25zdCBhZGRyZXNzZXMgPSB1dGlscyQxLmlzQXJyYXkoYXJnMCkgPyBhcmcwLm1hcChhZGRyID0+IGJ1aWxkQWRkcmVzc0VudHJ5KGFkZHIpKSA6IFtidWlsZEFkZHJlc3NFbnRyeShhcmcwLCBhcmcxKV07XG5cbiAgICAgICAgICBvcHQuYWxsID8gY2IoZXJyLCBhZGRyZXNzZXMpIDogY2IoZXJyLCBhZGRyZXNzZXNbMF0uYWRkcmVzcywgYWRkcmVzc2VzWzBdLmZhbWlseSk7XG4gICAgICAgIH0pO1xuICAgICAgfTtcbiAgICB9XG5cbiAgICAvLyB0ZW1wb3JhcnkgaW50ZXJuYWwgZW1pdHRlciB1bnRpbCB0aGUgQXhpb3NSZXF1ZXN0IGNsYXNzIHdpbGwgYmUgaW1wbGVtZW50ZWRcbiAgICBjb25zdCBlbWl0dGVyID0gbmV3IGV2ZW50cy5FdmVudEVtaXR0ZXIoKTtcblxuICAgIGNvbnN0IG9uRmluaXNoZWQgPSAoKSA9PiB7XG4gICAgICBpZiAoY29uZmlnLmNhbmNlbFRva2VuKSB7XG4gICAgICAgIGNvbmZpZy5jYW5jZWxUb2tlbi51bnN1YnNjcmliZShhYm9ydCk7XG4gICAgICB9XG5cbiAgICAgIGlmIChjb25maWcuc2lnbmFsKSB7XG4gICAgICAgIGNvbmZpZy5zaWduYWwucmVtb3ZlRXZlbnRMaXN0ZW5lcignYWJvcnQnLCBhYm9ydCk7XG4gICAgICB9XG5cbiAgICAgIGVtaXR0ZXIucmVtb3ZlQWxsTGlzdGVuZXJzKCk7XG4gICAgfTtcblxuICAgIG9uRG9uZSgodmFsdWUsIGlzUmVqZWN0ZWQpID0+IHtcbiAgICAgIGlzRG9uZSA9IHRydWU7XG4gICAgICBpZiAoaXNSZWplY3RlZCkge1xuICAgICAgICByZWplY3RlZCA9IHRydWU7XG4gICAgICAgIG9uRmluaXNoZWQoKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGZ1bmN0aW9uIGFib3J0KHJlYXNvbikge1xuICAgICAgZW1pdHRlci5lbWl0KCdhYm9ydCcsICFyZWFzb24gfHwgcmVhc29uLnR5cGUgPyBuZXcgQ2FuY2VsZWRFcnJvcihudWxsLCBjb25maWcsIHJlcSkgOiByZWFzb24pO1xuICAgIH1cblxuICAgIGVtaXR0ZXIub25jZSgnYWJvcnQnLCByZWplY3QpO1xuXG4gICAgaWYgKGNvbmZpZy5jYW5jZWxUb2tlbiB8fCBjb25maWcuc2lnbmFsKSB7XG4gICAgICBjb25maWcuY2FuY2VsVG9rZW4gJiYgY29uZmlnLmNhbmNlbFRva2VuLnN1YnNjcmliZShhYm9ydCk7XG4gICAgICBpZiAoY29uZmlnLnNpZ25hbCkge1xuICAgICAgICBjb25maWcuc2lnbmFsLmFib3J0ZWQgPyBhYm9ydCgpIDogY29uZmlnLnNpZ25hbC5hZGRFdmVudExpc3RlbmVyKCdhYm9ydCcsIGFib3J0KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBQYXJzZSB1cmxcbiAgICBjb25zdCBmdWxsUGF0aCA9IGJ1aWxkRnVsbFBhdGgoY29uZmlnLmJhc2VVUkwsIGNvbmZpZy51cmwpO1xuICAgIGNvbnN0IHBhcnNlZCA9IG5ldyBVUkwoZnVsbFBhdGgsIHV0aWxzJDEuaGFzQnJvd3NlckVudiA/IHBsYXRmb3JtLm9yaWdpbiA6IHVuZGVmaW5lZCk7XG4gICAgY29uc3QgcHJvdG9jb2wgPSBwYXJzZWQucHJvdG9jb2wgfHwgc3VwcG9ydGVkUHJvdG9jb2xzWzBdO1xuXG4gICAgaWYgKHByb3RvY29sID09PSAnZGF0YTonKSB7XG4gICAgICBsZXQgY29udmVydGVkRGF0YTtcblxuICAgICAgaWYgKG1ldGhvZCAhPT0gJ0dFVCcpIHtcbiAgICAgICAgcmV0dXJuIHNldHRsZShyZXNvbHZlLCByZWplY3QsIHtcbiAgICAgICAgICBzdGF0dXM6IDQwNSxcbiAgICAgICAgICBzdGF0dXNUZXh0OiAnbWV0aG9kIG5vdCBhbGxvd2VkJyxcbiAgICAgICAgICBoZWFkZXJzOiB7fSxcbiAgICAgICAgICBjb25maWdcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnZlcnRlZERhdGEgPSBmcm9tRGF0YVVSSShjb25maWcudXJsLCByZXNwb25zZVR5cGUgPT09ICdibG9iJywge1xuICAgICAgICAgIEJsb2I6IGNvbmZpZy5lbnYgJiYgY29uZmlnLmVudi5CbG9iXG4gICAgICAgIH0pO1xuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIHRocm93IEF4aW9zRXJyb3IuZnJvbShlcnIsIEF4aW9zRXJyb3IuRVJSX0JBRF9SRVFVRVNULCBjb25maWcpO1xuICAgICAgfVxuXG4gICAgICBpZiAocmVzcG9uc2VUeXBlID09PSAndGV4dCcpIHtcbiAgICAgICAgY29udmVydGVkRGF0YSA9IGNvbnZlcnRlZERhdGEudG9TdHJpbmcocmVzcG9uc2VFbmNvZGluZyk7XG5cbiAgICAgICAgaWYgKCFyZXNwb25zZUVuY29kaW5nIHx8IHJlc3BvbnNlRW5jb2RpbmcgPT09ICd1dGY4Jykge1xuICAgICAgICAgIGNvbnZlcnRlZERhdGEgPSB1dGlscyQxLnN0cmlwQk9NKGNvbnZlcnRlZERhdGEpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKHJlc3BvbnNlVHlwZSA9PT0gJ3N0cmVhbScpIHtcbiAgICAgICAgY29udmVydGVkRGF0YSA9IHN0cmVhbV9fZGVmYXVsdFtcImRlZmF1bHRcIl0uUmVhZGFibGUuZnJvbShjb252ZXJ0ZWREYXRhKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHNldHRsZShyZXNvbHZlLCByZWplY3QsIHtcbiAgICAgICAgZGF0YTogY29udmVydGVkRGF0YSxcbiAgICAgICAgc3RhdHVzOiAyMDAsXG4gICAgICAgIHN0YXR1c1RleHQ6ICdPSycsXG4gICAgICAgIGhlYWRlcnM6IG5ldyBBeGlvc0hlYWRlcnMkMSgpLFxuICAgICAgICBjb25maWdcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmIChzdXBwb3J0ZWRQcm90b2NvbHMuaW5kZXhPZihwcm90b2NvbCkgPT09IC0xKSB7XG4gICAgICByZXR1cm4gcmVqZWN0KG5ldyBBeGlvc0Vycm9yKFxuICAgICAgICAnVW5zdXBwb3J0ZWQgcHJvdG9jb2wgJyArIHByb3RvY29sLFxuICAgICAgICBBeGlvc0Vycm9yLkVSUl9CQURfUkVRVUVTVCxcbiAgICAgICAgY29uZmlnXG4gICAgICApKTtcbiAgICB9XG5cbiAgICBjb25zdCBoZWFkZXJzID0gQXhpb3NIZWFkZXJzJDEuZnJvbShjb25maWcuaGVhZGVycykubm9ybWFsaXplKCk7XG5cbiAgICAvLyBTZXQgVXNlci1BZ2VudCAocmVxdWlyZWQgYnkgc29tZSBzZXJ2ZXJzKVxuICAgIC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vYXhpb3MvYXhpb3MvaXNzdWVzLzY5XG4gICAgLy8gVXNlci1BZ2VudCBpcyBzcGVjaWZpZWQ7IGhhbmRsZSBjYXNlIHdoZXJlIG5vIFVBIGhlYWRlciBpcyBkZXNpcmVkXG4gICAgLy8gT25seSBzZXQgaGVhZGVyIGlmIGl0IGhhc24ndCBiZWVuIHNldCBpbiBjb25maWdcbiAgICBoZWFkZXJzLnNldCgnVXNlci1BZ2VudCcsICdheGlvcy8nICsgVkVSU0lPTiwgZmFsc2UpO1xuXG4gICAgY29uc3Qge29uVXBsb2FkUHJvZ3Jlc3MsIG9uRG93bmxvYWRQcm9ncmVzc30gPSBjb25maWc7XG4gICAgY29uc3QgbWF4UmF0ZSA9IGNvbmZpZy5tYXhSYXRlO1xuICAgIGxldCBtYXhVcGxvYWRSYXRlID0gdW5kZWZpbmVkO1xuICAgIGxldCBtYXhEb3dubG9hZFJhdGUgPSB1bmRlZmluZWQ7XG5cbiAgICAvLyBzdXBwb3J0IGZvciBzcGVjIGNvbXBsaWFudCBGb3JtRGF0YSBvYmplY3RzXG4gICAgaWYgKHV0aWxzJDEuaXNTcGVjQ29tcGxpYW50Rm9ybShkYXRhKSkge1xuICAgICAgY29uc3QgdXNlckJvdW5kYXJ5ID0gaGVhZGVycy5nZXRDb250ZW50VHlwZSgvYm91bmRhcnk9KFstX1xcd1xcZF17MTAsNzB9KS9pKTtcblxuICAgICAgZGF0YSA9IGZvcm1EYXRhVG9TdHJlYW0kMShkYXRhLCAoZm9ybUhlYWRlcnMpID0+IHtcbiAgICAgICAgaGVhZGVycy5zZXQoZm9ybUhlYWRlcnMpO1xuICAgICAgfSwge1xuICAgICAgICB0YWc6IGBheGlvcy0ke1ZFUlNJT059LWJvdW5kYXJ5YCxcbiAgICAgICAgYm91bmRhcnk6IHVzZXJCb3VuZGFyeSAmJiB1c2VyQm91bmRhcnlbMV0gfHwgdW5kZWZpbmVkXG4gICAgICB9KTtcbiAgICAgIC8vIHN1cHBvcnQgZm9yIGh0dHBzOi8vd3d3Lm5wbWpzLmNvbS9wYWNrYWdlL2Zvcm0tZGF0YSBhcGlcbiAgICB9IGVsc2UgaWYgKHV0aWxzJDEuaXNGb3JtRGF0YShkYXRhKSAmJiB1dGlscyQxLmlzRnVuY3Rpb24oZGF0YS5nZXRIZWFkZXJzKSkge1xuICAgICAgaGVhZGVycy5zZXQoZGF0YS5nZXRIZWFkZXJzKCkpO1xuXG4gICAgICBpZiAoIWhlYWRlcnMuaGFzQ29udGVudExlbmd0aCgpKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3Qga25vd25MZW5ndGggPSBhd2FpdCB1dGlsX19kZWZhdWx0W1wiZGVmYXVsdFwiXS5wcm9taXNpZnkoZGF0YS5nZXRMZW5ndGgpLmNhbGwoZGF0YSk7XG4gICAgICAgICAgTnVtYmVyLmlzRmluaXRlKGtub3duTGVuZ3RoKSAmJiBrbm93bkxlbmd0aCA+PSAwICYmIGhlYWRlcnMuc2V0Q29udGVudExlbmd0aChrbm93bkxlbmd0aCk7XG4gICAgICAgICAgLyplc2xpbnQgbm8tZW1wdHk6MCovXG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAodXRpbHMkMS5pc0Jsb2IoZGF0YSkpIHtcbiAgICAgIGRhdGEuc2l6ZSAmJiBoZWFkZXJzLnNldENvbnRlbnRUeXBlKGRhdGEudHlwZSB8fCAnYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtJyk7XG4gICAgICBoZWFkZXJzLnNldENvbnRlbnRMZW5ndGgoZGF0YS5zaXplIHx8IDApO1xuICAgICAgZGF0YSA9IHN0cmVhbV9fZGVmYXVsdFtcImRlZmF1bHRcIl0uUmVhZGFibGUuZnJvbShyZWFkQmxvYiQxKGRhdGEpKTtcbiAgICB9IGVsc2UgaWYgKGRhdGEgJiYgIXV0aWxzJDEuaXNTdHJlYW0oZGF0YSkpIHtcbiAgICAgIGlmIChCdWZmZXIuaXNCdWZmZXIoZGF0YSkpIDsgZWxzZSBpZiAodXRpbHMkMS5pc0FycmF5QnVmZmVyKGRhdGEpKSB7XG4gICAgICAgIGRhdGEgPSBCdWZmZXIuZnJvbShuZXcgVWludDhBcnJheShkYXRhKSk7XG4gICAgICB9IGVsc2UgaWYgKHV0aWxzJDEuaXNTdHJpbmcoZGF0YSkpIHtcbiAgICAgICAgZGF0YSA9IEJ1ZmZlci5mcm9tKGRhdGEsICd1dGYtOCcpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHJlamVjdChuZXcgQXhpb3NFcnJvcihcbiAgICAgICAgICAnRGF0YSBhZnRlciB0cmFuc2Zvcm1hdGlvbiBtdXN0IGJlIGEgc3RyaW5nLCBhbiBBcnJheUJ1ZmZlciwgYSBCdWZmZXIsIG9yIGEgU3RyZWFtJyxcbiAgICAgICAgICBBeGlvc0Vycm9yLkVSUl9CQURfUkVRVUVTVCxcbiAgICAgICAgICBjb25maWdcbiAgICAgICAgKSk7XG4gICAgICB9XG5cbiAgICAgIC8vIEFkZCBDb250ZW50LUxlbmd0aCBoZWFkZXIgaWYgZGF0YSBleGlzdHNcbiAgICAgIGhlYWRlcnMuc2V0Q29udGVudExlbmd0aChkYXRhLmxlbmd0aCwgZmFsc2UpO1xuXG4gICAgICBpZiAoY29uZmlnLm1heEJvZHlMZW5ndGggPiAtMSAmJiBkYXRhLmxlbmd0aCA+IGNvbmZpZy5tYXhCb2R5TGVuZ3RoKSB7XG4gICAgICAgIHJldHVybiByZWplY3QobmV3IEF4aW9zRXJyb3IoXG4gICAgICAgICAgJ1JlcXVlc3QgYm9keSBsYXJnZXIgdGhhbiBtYXhCb2R5TGVuZ3RoIGxpbWl0JyxcbiAgICAgICAgICBBeGlvc0Vycm9yLkVSUl9CQURfUkVRVUVTVCxcbiAgICAgICAgICBjb25maWdcbiAgICAgICAgKSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgY29udGVudExlbmd0aCA9IHV0aWxzJDEudG9GaW5pdGVOdW1iZXIoaGVhZGVycy5nZXRDb250ZW50TGVuZ3RoKCkpO1xuXG4gICAgaWYgKHV0aWxzJDEuaXNBcnJheShtYXhSYXRlKSkge1xuICAgICAgbWF4VXBsb2FkUmF0ZSA9IG1heFJhdGVbMF07XG4gICAgICBtYXhEb3dubG9hZFJhdGUgPSBtYXhSYXRlWzFdO1xuICAgIH0gZWxzZSB7XG4gICAgICBtYXhVcGxvYWRSYXRlID0gbWF4RG93bmxvYWRSYXRlID0gbWF4UmF0ZTtcbiAgICB9XG5cbiAgICBpZiAoZGF0YSAmJiAob25VcGxvYWRQcm9ncmVzcyB8fCBtYXhVcGxvYWRSYXRlKSkge1xuICAgICAgaWYgKCF1dGlscyQxLmlzU3RyZWFtKGRhdGEpKSB7XG4gICAgICAgIGRhdGEgPSBzdHJlYW1fX2RlZmF1bHRbXCJkZWZhdWx0XCJdLlJlYWRhYmxlLmZyb20oZGF0YSwge29iamVjdE1vZGU6IGZhbHNlfSk7XG4gICAgICB9XG5cbiAgICAgIGRhdGEgPSBzdHJlYW1fX2RlZmF1bHRbXCJkZWZhdWx0XCJdLnBpcGVsaW5lKFtkYXRhLCBuZXcgQXhpb3NUcmFuc2Zvcm1TdHJlYW0kMSh7XG4gICAgICAgIG1heFJhdGU6IHV0aWxzJDEudG9GaW5pdGVOdW1iZXIobWF4VXBsb2FkUmF0ZSlcbiAgICAgIH0pXSwgdXRpbHMkMS5ub29wKTtcblxuICAgICAgb25VcGxvYWRQcm9ncmVzcyAmJiBkYXRhLm9uKCdwcm9ncmVzcycsIGZsdXNoT25GaW5pc2goXG4gICAgICAgIGRhdGEsXG4gICAgICAgIHByb2dyZXNzRXZlbnREZWNvcmF0b3IoXG4gICAgICAgICAgY29udGVudExlbmd0aCxcbiAgICAgICAgICBwcm9ncmVzc0V2ZW50UmVkdWNlcihhc3luY0RlY29yYXRvcihvblVwbG9hZFByb2dyZXNzKSwgZmFsc2UsIDMpXG4gICAgICAgIClcbiAgICAgICkpO1xuICAgIH1cblxuICAgIC8vIEhUVFAgYmFzaWMgYXV0aGVudGljYXRpb25cbiAgICBsZXQgYXV0aCA9IHVuZGVmaW5lZDtcbiAgICBpZiAoY29uZmlnLmF1dGgpIHtcbiAgICAgIGNvbnN0IHVzZXJuYW1lID0gY29uZmlnLmF1dGgudXNlcm5hbWUgfHwgJyc7XG4gICAgICBjb25zdCBwYXNzd29yZCA9IGNvbmZpZy5hdXRoLnBhc3N3b3JkIHx8ICcnO1xuICAgICAgYXV0aCA9IHVzZXJuYW1lICsgJzonICsgcGFzc3dvcmQ7XG4gICAgfVxuXG4gICAgaWYgKCFhdXRoICYmIHBhcnNlZC51c2VybmFtZSkge1xuICAgICAgY29uc3QgdXJsVXNlcm5hbWUgPSBwYXJzZWQudXNlcm5hbWU7XG4gICAgICBjb25zdCB1cmxQYXNzd29yZCA9IHBhcnNlZC5wYXNzd29yZDtcbiAgICAgIGF1dGggPSB1cmxVc2VybmFtZSArICc6JyArIHVybFBhc3N3b3JkO1xuICAgIH1cblxuICAgIGF1dGggJiYgaGVhZGVycy5kZWxldGUoJ2F1dGhvcml6YXRpb24nKTtcblxuICAgIGxldCBwYXRoO1xuXG4gICAgdHJ5IHtcbiAgICAgIHBhdGggPSBidWlsZFVSTChcbiAgICAgICAgcGFyc2VkLnBhdGhuYW1lICsgcGFyc2VkLnNlYXJjaCxcbiAgICAgICAgY29uZmlnLnBhcmFtcyxcbiAgICAgICAgY29uZmlnLnBhcmFtc1NlcmlhbGl6ZXJcbiAgICAgICkucmVwbGFjZSgvXlxcPy8sICcnKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGNvbnN0IGN1c3RvbUVyciA9IG5ldyBFcnJvcihlcnIubWVzc2FnZSk7XG4gICAgICBjdXN0b21FcnIuY29uZmlnID0gY29uZmlnO1xuICAgICAgY3VzdG9tRXJyLnVybCA9IGNvbmZpZy51cmw7XG4gICAgICBjdXN0b21FcnIuZXhpc3RzID0gdHJ1ZTtcbiAgICAgIHJldHVybiByZWplY3QoY3VzdG9tRXJyKTtcbiAgICB9XG5cbiAgICBoZWFkZXJzLnNldChcbiAgICAgICdBY2NlcHQtRW5jb2RpbmcnLFxuICAgICAgJ2d6aXAsIGNvbXByZXNzLCBkZWZsYXRlJyArIChpc0Jyb3RsaVN1cHBvcnRlZCA/ICcsIGJyJyA6ICcnKSwgZmFsc2VcbiAgICAgICk7XG5cbiAgICBjb25zdCBvcHRpb25zID0ge1xuICAgICAgcGF0aCxcbiAgICAgIG1ldGhvZDogbWV0aG9kLFxuICAgICAgaGVhZGVyczogaGVhZGVycy50b0pTT04oKSxcbiAgICAgIGFnZW50czogeyBodHRwOiBjb25maWcuaHR0cEFnZW50LCBodHRwczogY29uZmlnLmh0dHBzQWdlbnQgfSxcbiAgICAgIGF1dGgsXG4gICAgICBwcm90b2NvbCxcbiAgICAgIGZhbWlseSxcbiAgICAgIGJlZm9yZVJlZGlyZWN0OiBkaXNwYXRjaEJlZm9yZVJlZGlyZWN0LFxuICAgICAgYmVmb3JlUmVkaXJlY3RzOiB7fVxuICAgIH07XG5cbiAgICAvLyBjYWNoZWFibGUtbG9va3VwIGludGVncmF0aW9uIGhvdGZpeFxuICAgICF1dGlscyQxLmlzVW5kZWZpbmVkKGxvb2t1cCkgJiYgKG9wdGlvbnMubG9va3VwID0gbG9va3VwKTtcblxuICAgIGlmIChjb25maWcuc29ja2V0UGF0aCkge1xuICAgICAgb3B0aW9ucy5zb2NrZXRQYXRoID0gY29uZmlnLnNvY2tldFBhdGg7XG4gICAgfSBlbHNlIHtcbiAgICAgIG9wdGlvbnMuaG9zdG5hbWUgPSBwYXJzZWQuaG9zdG5hbWU7XG4gICAgICBvcHRpb25zLnBvcnQgPSBwYXJzZWQucG9ydDtcbiAgICAgIHNldFByb3h5KG9wdGlvbnMsIGNvbmZpZy5wcm94eSwgcHJvdG9jb2wgKyAnLy8nICsgcGFyc2VkLmhvc3RuYW1lICsgKHBhcnNlZC5wb3J0ID8gJzonICsgcGFyc2VkLnBvcnQgOiAnJykgKyBvcHRpb25zLnBhdGgpO1xuICAgIH1cblxuICAgIGxldCB0cmFuc3BvcnQ7XG4gICAgY29uc3QgaXNIdHRwc1JlcXVlc3QgPSBpc0h0dHBzLnRlc3Qob3B0aW9ucy5wcm90b2NvbCk7XG4gICAgb3B0aW9ucy5hZ2VudCA9IGlzSHR0cHNSZXF1ZXN0ID8gY29uZmlnLmh0dHBzQWdlbnQgOiBjb25maWcuaHR0cEFnZW50O1xuICAgIGlmIChjb25maWcudHJhbnNwb3J0KSB7XG4gICAgICB0cmFuc3BvcnQgPSBjb25maWcudHJhbnNwb3J0O1xuICAgIH0gZWxzZSBpZiAoY29uZmlnLm1heFJlZGlyZWN0cyA9PT0gMCkge1xuICAgICAgdHJhbnNwb3J0ID0gaXNIdHRwc1JlcXVlc3QgPyBodHRwc19fZGVmYXVsdFtcImRlZmF1bHRcIl0gOiBodHRwX19kZWZhdWx0W1wiZGVmYXVsdFwiXTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKGNvbmZpZy5tYXhSZWRpcmVjdHMpIHtcbiAgICAgICAgb3B0aW9ucy5tYXhSZWRpcmVjdHMgPSBjb25maWcubWF4UmVkaXJlY3RzO1xuICAgICAgfVxuICAgICAgaWYgKGNvbmZpZy5iZWZvcmVSZWRpcmVjdCkge1xuICAgICAgICBvcHRpb25zLmJlZm9yZVJlZGlyZWN0cy5jb25maWcgPSBjb25maWcuYmVmb3JlUmVkaXJlY3Q7XG4gICAgICB9XG4gICAgICB0cmFuc3BvcnQgPSBpc0h0dHBzUmVxdWVzdCA/IGh0dHBzRm9sbG93IDogaHR0cEZvbGxvdztcbiAgICB9XG5cbiAgICBpZiAoY29uZmlnLm1heEJvZHlMZW5ndGggPiAtMSkge1xuICAgICAgb3B0aW9ucy5tYXhCb2R5TGVuZ3RoID0gY29uZmlnLm1heEJvZHlMZW5ndGg7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGZvbGxvdy1yZWRpcmVjdHMgZG9lcyBub3Qgc2tpcCBjb21wYXJpc29uLCBzbyBpdCBzaG91bGQgYWx3YXlzIHN1Y2NlZWQgZm9yIGF4aW9zIC0xIHVubGltaXRlZFxuICAgICAgb3B0aW9ucy5tYXhCb2R5TGVuZ3RoID0gSW5maW5pdHk7XG4gICAgfVxuXG4gICAgaWYgKGNvbmZpZy5pbnNlY3VyZUhUVFBQYXJzZXIpIHtcbiAgICAgIG9wdGlvbnMuaW5zZWN1cmVIVFRQUGFyc2VyID0gY29uZmlnLmluc2VjdXJlSFRUUFBhcnNlcjtcbiAgICB9XG5cbiAgICAvLyBDcmVhdGUgdGhlIHJlcXVlc3RcbiAgICByZXEgPSB0cmFuc3BvcnQucmVxdWVzdChvcHRpb25zLCBmdW5jdGlvbiBoYW5kbGVSZXNwb25zZShyZXMpIHtcbiAgICAgIGlmIChyZXEuZGVzdHJveWVkKSByZXR1cm47XG5cbiAgICAgIGNvbnN0IHN0cmVhbXMgPSBbcmVzXTtcblxuICAgICAgY29uc3QgcmVzcG9uc2VMZW5ndGggPSArcmVzLmhlYWRlcnNbJ2NvbnRlbnQtbGVuZ3RoJ107XG5cbiAgICAgIGlmIChvbkRvd25sb2FkUHJvZ3Jlc3MgfHwgbWF4RG93bmxvYWRSYXRlKSB7XG4gICAgICAgIGNvbnN0IHRyYW5zZm9ybVN0cmVhbSA9IG5ldyBBeGlvc1RyYW5zZm9ybVN0cmVhbSQxKHtcbiAgICAgICAgICBtYXhSYXRlOiB1dGlscyQxLnRvRmluaXRlTnVtYmVyKG1heERvd25sb2FkUmF0ZSlcbiAgICAgICAgfSk7XG5cbiAgICAgICAgb25Eb3dubG9hZFByb2dyZXNzICYmIHRyYW5zZm9ybVN0cmVhbS5vbigncHJvZ3Jlc3MnLCBmbHVzaE9uRmluaXNoKFxuICAgICAgICAgIHRyYW5zZm9ybVN0cmVhbSxcbiAgICAgICAgICBwcm9ncmVzc0V2ZW50RGVjb3JhdG9yKFxuICAgICAgICAgICAgcmVzcG9uc2VMZW5ndGgsXG4gICAgICAgICAgICBwcm9ncmVzc0V2ZW50UmVkdWNlcihhc3luY0RlY29yYXRvcihvbkRvd25sb2FkUHJvZ3Jlc3MpLCB0cnVlLCAzKVxuICAgICAgICAgIClcbiAgICAgICAgKSk7XG5cbiAgICAgICAgc3RyZWFtcy5wdXNoKHRyYW5zZm9ybVN0cmVhbSk7XG4gICAgICB9XG5cbiAgICAgIC8vIGRlY29tcHJlc3MgdGhlIHJlc3BvbnNlIGJvZHkgdHJhbnNwYXJlbnRseSBpZiByZXF1aXJlZFxuICAgICAgbGV0IHJlc3BvbnNlU3RyZWFtID0gcmVzO1xuXG4gICAgICAvLyByZXR1cm4gdGhlIGxhc3QgcmVxdWVzdCBpbiBjYXNlIG9mIHJlZGlyZWN0c1xuICAgICAgY29uc3QgbGFzdFJlcXVlc3QgPSByZXMucmVxIHx8IHJlcTtcblxuICAgICAgLy8gaWYgZGVjb21wcmVzcyBkaXNhYmxlZCB3ZSBzaG91bGQgbm90IGRlY29tcHJlc3NcbiAgICAgIGlmIChjb25maWcuZGVjb21wcmVzcyAhPT0gZmFsc2UgJiYgcmVzLmhlYWRlcnNbJ2NvbnRlbnQtZW5jb2RpbmcnXSkge1xuICAgICAgICAvLyBpZiBubyBjb250ZW50LCBidXQgaGVhZGVycyBzdGlsbCBzYXkgdGhhdCBpdCBpcyBlbmNvZGVkLFxuICAgICAgICAvLyByZW1vdmUgdGhlIGhlYWRlciBub3QgY29uZnVzZSBkb3duc3RyZWFtIG9wZXJhdGlvbnNcbiAgICAgICAgaWYgKG1ldGhvZCA9PT0gJ0hFQUQnIHx8IHJlcy5zdGF0dXNDb2RlID09PSAyMDQpIHtcbiAgICAgICAgICBkZWxldGUgcmVzLmhlYWRlcnNbJ2NvbnRlbnQtZW5jb2RpbmcnXTtcbiAgICAgICAgfVxuXG4gICAgICAgIHN3aXRjaCAoKHJlcy5oZWFkZXJzWydjb250ZW50LWVuY29kaW5nJ10gfHwgJycpLnRvTG93ZXJDYXNlKCkpIHtcbiAgICAgICAgLyplc2xpbnQgZGVmYXVsdC1jYXNlOjAqL1xuICAgICAgICBjYXNlICdnemlwJzpcbiAgICAgICAgY2FzZSAneC1nemlwJzpcbiAgICAgICAgY2FzZSAnY29tcHJlc3MnOlxuICAgICAgICBjYXNlICd4LWNvbXByZXNzJzpcbiAgICAgICAgICAvLyBhZGQgdGhlIHVuemlwcGVyIHRvIHRoZSBib2R5IHN0cmVhbSBwcm9jZXNzaW5nIHBpcGVsaW5lXG4gICAgICAgICAgc3RyZWFtcy5wdXNoKHpsaWJfX2RlZmF1bHRbXCJkZWZhdWx0XCJdLmNyZWF0ZVVuemlwKHpsaWJPcHRpb25zKSk7XG5cbiAgICAgICAgICAvLyByZW1vdmUgdGhlIGNvbnRlbnQtZW5jb2RpbmcgaW4gb3JkZXIgdG8gbm90IGNvbmZ1c2UgZG93bnN0cmVhbSBvcGVyYXRpb25zXG4gICAgICAgICAgZGVsZXRlIHJlcy5oZWFkZXJzWydjb250ZW50LWVuY29kaW5nJ107XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ2RlZmxhdGUnOlxuICAgICAgICAgIHN0cmVhbXMucHVzaChuZXcgWmxpYkhlYWRlclRyYW5zZm9ybVN0cmVhbSQxKCkpO1xuXG4gICAgICAgICAgLy8gYWRkIHRoZSB1bnppcHBlciB0byB0aGUgYm9keSBzdHJlYW0gcHJvY2Vzc2luZyBwaXBlbGluZVxuICAgICAgICAgIHN0cmVhbXMucHVzaCh6bGliX19kZWZhdWx0W1wiZGVmYXVsdFwiXS5jcmVhdGVVbnppcCh6bGliT3B0aW9ucykpO1xuXG4gICAgICAgICAgLy8gcmVtb3ZlIHRoZSBjb250ZW50LWVuY29kaW5nIGluIG9yZGVyIHRvIG5vdCBjb25mdXNlIGRvd25zdHJlYW0gb3BlcmF0aW9uc1xuICAgICAgICAgIGRlbGV0ZSByZXMuaGVhZGVyc1snY29udGVudC1lbmNvZGluZyddO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdicic6XG4gICAgICAgICAgaWYgKGlzQnJvdGxpU3VwcG9ydGVkKSB7XG4gICAgICAgICAgICBzdHJlYW1zLnB1c2goemxpYl9fZGVmYXVsdFtcImRlZmF1bHRcIl0uY3JlYXRlQnJvdGxpRGVjb21wcmVzcyhicm90bGlPcHRpb25zKSk7XG4gICAgICAgICAgICBkZWxldGUgcmVzLmhlYWRlcnNbJ2NvbnRlbnQtZW5jb2RpbmcnXTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmVzcG9uc2VTdHJlYW0gPSBzdHJlYW1zLmxlbmd0aCA+IDEgPyBzdHJlYW1fX2RlZmF1bHRbXCJkZWZhdWx0XCJdLnBpcGVsaW5lKHN0cmVhbXMsIHV0aWxzJDEubm9vcCkgOiBzdHJlYW1zWzBdO1xuXG4gICAgICBjb25zdCBvZmZMaXN0ZW5lcnMgPSBzdHJlYW1fX2RlZmF1bHRbXCJkZWZhdWx0XCJdLmZpbmlzaGVkKHJlc3BvbnNlU3RyZWFtLCAoKSA9PiB7XG4gICAgICAgIG9mZkxpc3RlbmVycygpO1xuICAgICAgICBvbkZpbmlzaGVkKCk7XG4gICAgICB9KTtcblxuICAgICAgY29uc3QgcmVzcG9uc2UgPSB7XG4gICAgICAgIHN0YXR1czogcmVzLnN0YXR1c0NvZGUsXG4gICAgICAgIHN0YXR1c1RleHQ6IHJlcy5zdGF0dXNNZXNzYWdlLFxuICAgICAgICBoZWFkZXJzOiBuZXcgQXhpb3NIZWFkZXJzJDEocmVzLmhlYWRlcnMpLFxuICAgICAgICBjb25maWcsXG4gICAgICAgIHJlcXVlc3Q6IGxhc3RSZXF1ZXN0XG4gICAgICB9O1xuXG4gICAgICBpZiAocmVzcG9uc2VUeXBlID09PSAnc3RyZWFtJykge1xuICAgICAgICByZXNwb25zZS5kYXRhID0gcmVzcG9uc2VTdHJlYW07XG4gICAgICAgIHNldHRsZShyZXNvbHZlLCByZWplY3QsIHJlc3BvbnNlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlQnVmZmVyID0gW107XG4gICAgICAgIGxldCB0b3RhbFJlc3BvbnNlQnl0ZXMgPSAwO1xuXG4gICAgICAgIHJlc3BvbnNlU3RyZWFtLm9uKCdkYXRhJywgZnVuY3Rpb24gaGFuZGxlU3RyZWFtRGF0YShjaHVuaykge1xuICAgICAgICAgIHJlc3BvbnNlQnVmZmVyLnB1c2goY2h1bmspO1xuICAgICAgICAgIHRvdGFsUmVzcG9uc2VCeXRlcyArPSBjaHVuay5sZW5ndGg7XG5cbiAgICAgICAgICAvLyBtYWtlIHN1cmUgdGhlIGNvbnRlbnQgbGVuZ3RoIGlzIG5vdCBvdmVyIHRoZSBtYXhDb250ZW50TGVuZ3RoIGlmIHNwZWNpZmllZFxuICAgICAgICAgIGlmIChjb25maWcubWF4Q29udGVudExlbmd0aCA+IC0xICYmIHRvdGFsUmVzcG9uc2VCeXRlcyA+IGNvbmZpZy5tYXhDb250ZW50TGVuZ3RoKSB7XG4gICAgICAgICAgICAvLyBzdHJlYW0uZGVzdHJveSgpIGVtaXQgYWJvcnRlZCBldmVudCBiZWZvcmUgY2FsbGluZyByZWplY3QoKSBvbiBOb2RlLmpzIHYxNlxuICAgICAgICAgICAgcmVqZWN0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgcmVzcG9uc2VTdHJlYW0uZGVzdHJveSgpO1xuICAgICAgICAgICAgcmVqZWN0KG5ldyBBeGlvc0Vycm9yKCdtYXhDb250ZW50TGVuZ3RoIHNpemUgb2YgJyArIGNvbmZpZy5tYXhDb250ZW50TGVuZ3RoICsgJyBleGNlZWRlZCcsXG4gICAgICAgICAgICAgIEF4aW9zRXJyb3IuRVJSX0JBRF9SRVNQT05TRSwgY29uZmlnLCBsYXN0UmVxdWVzdCkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmVzcG9uc2VTdHJlYW0ub24oJ2Fib3J0ZWQnLCBmdW5jdGlvbiBoYW5kbGVyU3RyZWFtQWJvcnRlZCgpIHtcbiAgICAgICAgICBpZiAocmVqZWN0ZWQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb25zdCBlcnIgPSBuZXcgQXhpb3NFcnJvcihcbiAgICAgICAgICAgICdtYXhDb250ZW50TGVuZ3RoIHNpemUgb2YgJyArIGNvbmZpZy5tYXhDb250ZW50TGVuZ3RoICsgJyBleGNlZWRlZCcsXG4gICAgICAgICAgICBBeGlvc0Vycm9yLkVSUl9CQURfUkVTUE9OU0UsXG4gICAgICAgICAgICBjb25maWcsXG4gICAgICAgICAgICBsYXN0UmVxdWVzdFxuICAgICAgICAgICk7XG4gICAgICAgICAgcmVzcG9uc2VTdHJlYW0uZGVzdHJveShlcnIpO1xuICAgICAgICAgIHJlamVjdChlcnIpO1xuICAgICAgICB9KTtcblxuICAgICAgICByZXNwb25zZVN0cmVhbS5vbignZXJyb3InLCBmdW5jdGlvbiBoYW5kbGVTdHJlYW1FcnJvcihlcnIpIHtcbiAgICAgICAgICBpZiAocmVxLmRlc3Ryb3llZCkgcmV0dXJuO1xuICAgICAgICAgIHJlamVjdChBeGlvc0Vycm9yLmZyb20oZXJyLCBudWxsLCBjb25maWcsIGxhc3RSZXF1ZXN0KSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJlc3BvbnNlU3RyZWFtLm9uKCdlbmQnLCBmdW5jdGlvbiBoYW5kbGVTdHJlYW1FbmQoKSB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGxldCByZXNwb25zZURhdGEgPSByZXNwb25zZUJ1ZmZlci5sZW5ndGggPT09IDEgPyByZXNwb25zZUJ1ZmZlclswXSA6IEJ1ZmZlci5jb25jYXQocmVzcG9uc2VCdWZmZXIpO1xuICAgICAgICAgICAgaWYgKHJlc3BvbnNlVHlwZSAhPT0gJ2FycmF5YnVmZmVyJykge1xuICAgICAgICAgICAgICByZXNwb25zZURhdGEgPSByZXNwb25zZURhdGEudG9TdHJpbmcocmVzcG9uc2VFbmNvZGluZyk7XG4gICAgICAgICAgICAgIGlmICghcmVzcG9uc2VFbmNvZGluZyB8fCByZXNwb25zZUVuY29kaW5nID09PSAndXRmOCcpIHtcbiAgICAgICAgICAgICAgICByZXNwb25zZURhdGEgPSB1dGlscyQxLnN0cmlwQk9NKHJlc3BvbnNlRGF0YSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJlc3BvbnNlLmRhdGEgPSByZXNwb25zZURhdGE7XG4gICAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICByZXR1cm4gcmVqZWN0KEF4aW9zRXJyb3IuZnJvbShlcnIsIG51bGwsIGNvbmZpZywgcmVzcG9uc2UucmVxdWVzdCwgcmVzcG9uc2UpKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgc2V0dGxlKHJlc29sdmUsIHJlamVjdCwgcmVzcG9uc2UpO1xuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgZW1pdHRlci5vbmNlKCdhYm9ydCcsIGVyciA9PiB7XG4gICAgICAgIGlmICghcmVzcG9uc2VTdHJlYW0uZGVzdHJveWVkKSB7XG4gICAgICAgICAgcmVzcG9uc2VTdHJlYW0uZW1pdCgnZXJyb3InLCBlcnIpO1xuICAgICAgICAgIHJlc3BvbnNlU3RyZWFtLmRlc3Ryb3koKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBlbWl0dGVyLm9uY2UoJ2Fib3J0JywgZXJyID0+IHtcbiAgICAgIHJlamVjdChlcnIpO1xuICAgICAgcmVxLmRlc3Ryb3koZXJyKTtcbiAgICB9KTtcblxuICAgIC8vIEhhbmRsZSBlcnJvcnNcbiAgICByZXEub24oJ2Vycm9yJywgZnVuY3Rpb24gaGFuZGxlUmVxdWVzdEVycm9yKGVycikge1xuICAgICAgLy8gQHRvZG8gcmVtb3ZlXG4gICAgICAvLyBpZiAocmVxLmFib3J0ZWQgJiYgZXJyLmNvZGUgIT09IEF4aW9zRXJyb3IuRVJSX0ZSX1RPT19NQU5ZX1JFRElSRUNUUykgcmV0dXJuO1xuICAgICAgcmVqZWN0KEF4aW9zRXJyb3IuZnJvbShlcnIsIG51bGwsIGNvbmZpZywgcmVxKSk7XG4gICAgfSk7XG5cbiAgICAvLyBzZXQgdGNwIGtlZXAgYWxpdmUgdG8gcHJldmVudCBkcm9wIGNvbm5lY3Rpb24gYnkgcGVlclxuICAgIHJlcS5vbignc29ja2V0JywgZnVuY3Rpb24gaGFuZGxlUmVxdWVzdFNvY2tldChzb2NrZXQpIHtcbiAgICAgIC8vIGRlZmF1bHQgaW50ZXJ2YWwgb2Ygc2VuZGluZyBhY2sgcGFja2V0IGlzIDEgbWludXRlXG4gICAgICBzb2NrZXQuc2V0S2VlcEFsaXZlKHRydWUsIDEwMDAgKiA2MCk7XG4gICAgfSk7XG5cbiAgICAvLyBIYW5kbGUgcmVxdWVzdCB0aW1lb3V0XG4gICAgaWYgKGNvbmZpZy50aW1lb3V0KSB7XG4gICAgICAvLyBUaGlzIGlzIGZvcmNpbmcgYSBpbnQgdGltZW91dCB0byBhdm9pZCBwcm9ibGVtcyBpZiB0aGUgYHJlcWAgaW50ZXJmYWNlIGRvZXNuJ3QgaGFuZGxlIG90aGVyIHR5cGVzLlxuICAgICAgY29uc3QgdGltZW91dCA9IHBhcnNlSW50KGNvbmZpZy50aW1lb3V0LCAxMCk7XG5cbiAgICAgIGlmIChOdW1iZXIuaXNOYU4odGltZW91dCkpIHtcbiAgICAgICAgcmVqZWN0KG5ldyBBeGlvc0Vycm9yKFxuICAgICAgICAgICdlcnJvciB0cnlpbmcgdG8gcGFyc2UgYGNvbmZpZy50aW1lb3V0YCB0byBpbnQnLFxuICAgICAgICAgIEF4aW9zRXJyb3IuRVJSX0JBRF9PUFRJT05fVkFMVUUsXG4gICAgICAgICAgY29uZmlnLFxuICAgICAgICAgIHJlcVxuICAgICAgICApKTtcblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIC8vIFNvbWV0aW1lLCB0aGUgcmVzcG9uc2Ugd2lsbCBiZSB2ZXJ5IHNsb3csIGFuZCBkb2VzIG5vdCByZXNwb25kLCB0aGUgY29ubmVjdCBldmVudCB3aWxsIGJlIGJsb2NrIGJ5IGV2ZW50IGxvb3Agc3lzdGVtLlxuICAgICAgLy8gQW5kIHRpbWVyIGNhbGxiYWNrIHdpbGwgYmUgZmlyZWQsIGFuZCBhYm9ydCgpIHdpbGwgYmUgaW52b2tlZCBiZWZvcmUgY29ubmVjdGlvbiwgdGhlbiBnZXQgXCJzb2NrZXQgaGFuZyB1cFwiIGFuZCBjb2RlIEVDT05OUkVTRVQuXG4gICAgICAvLyBBdCB0aGlzIHRpbWUsIGlmIHdlIGhhdmUgYSBsYXJnZSBudW1iZXIgb2YgcmVxdWVzdCwgbm9kZWpzIHdpbGwgaGFuZyB1cCBzb21lIHNvY2tldCBvbiBiYWNrZ3JvdW5kLiBhbmQgdGhlIG51bWJlciB3aWxsIHVwIGFuZCB1cC5cbiAgICAgIC8vIEFuZCB0aGVuIHRoZXNlIHNvY2tldCB3aGljaCBiZSBoYW5nIHVwIHdpbGwgZGV2b3VyaW5nIENQVSBsaXR0bGUgYnkgbGl0dGxlLlxuICAgICAgLy8gQ2xpZW50UmVxdWVzdC5zZXRUaW1lb3V0IHdpbGwgYmUgZmlyZWQgb24gdGhlIHNwZWNpZnkgbWlsbGlzZWNvbmRzLCBhbmQgY2FuIG1ha2Ugc3VyZSB0aGF0IGFib3J0KCkgd2lsbCBiZSBmaXJlZCBhZnRlciBjb25uZWN0LlxuICAgICAgcmVxLnNldFRpbWVvdXQodGltZW91dCwgZnVuY3Rpb24gaGFuZGxlUmVxdWVzdFRpbWVvdXQoKSB7XG4gICAgICAgIGlmIChpc0RvbmUpIHJldHVybjtcbiAgICAgICAgbGV0IHRpbWVvdXRFcnJvck1lc3NhZ2UgPSBjb25maWcudGltZW91dCA/ICd0aW1lb3V0IG9mICcgKyBjb25maWcudGltZW91dCArICdtcyBleGNlZWRlZCcgOiAndGltZW91dCBleGNlZWRlZCc7XG4gICAgICAgIGNvbnN0IHRyYW5zaXRpb25hbCA9IGNvbmZpZy50cmFuc2l0aW9uYWwgfHwgdHJhbnNpdGlvbmFsRGVmYXVsdHM7XG4gICAgICAgIGlmIChjb25maWcudGltZW91dEVycm9yTWVzc2FnZSkge1xuICAgICAgICAgIHRpbWVvdXRFcnJvck1lc3NhZ2UgPSBjb25maWcudGltZW91dEVycm9yTWVzc2FnZTtcbiAgICAgICAgfVxuICAgICAgICByZWplY3QobmV3IEF4aW9zRXJyb3IoXG4gICAgICAgICAgdGltZW91dEVycm9yTWVzc2FnZSxcbiAgICAgICAgICB0cmFuc2l0aW9uYWwuY2xhcmlmeVRpbWVvdXRFcnJvciA/IEF4aW9zRXJyb3IuRVRJTUVET1VUIDogQXhpb3NFcnJvci5FQ09OTkFCT1JURUQsXG4gICAgICAgICAgY29uZmlnLFxuICAgICAgICAgIHJlcVxuICAgICAgICApKTtcbiAgICAgICAgYWJvcnQoKTtcbiAgICAgIH0pO1xuICAgIH1cblxuXG4gICAgLy8gU2VuZCB0aGUgcmVxdWVzdFxuICAgIGlmICh1dGlscyQxLmlzU3RyZWFtKGRhdGEpKSB7XG4gICAgICBsZXQgZW5kZWQgPSBmYWxzZTtcbiAgICAgIGxldCBlcnJvcmVkID0gZmFsc2U7XG5cbiAgICAgIGRhdGEub24oJ2VuZCcsICgpID0+IHtcbiAgICAgICAgZW5kZWQgPSB0cnVlO1xuICAgICAgfSk7XG5cbiAgICAgIGRhdGEub25jZSgnZXJyb3InLCBlcnIgPT4ge1xuICAgICAgICBlcnJvcmVkID0gdHJ1ZTtcbiAgICAgICAgcmVxLmRlc3Ryb3koZXJyKTtcbiAgICAgIH0pO1xuXG4gICAgICBkYXRhLm9uKCdjbG9zZScsICgpID0+IHtcbiAgICAgICAgaWYgKCFlbmRlZCAmJiAhZXJyb3JlZCkge1xuICAgICAgICAgIGFib3J0KG5ldyBDYW5jZWxlZEVycm9yKCdSZXF1ZXN0IHN0cmVhbSBoYXMgYmVlbiBhYm9ydGVkJywgY29uZmlnLCByZXEpKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIGRhdGEucGlwZShyZXEpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXEuZW5kKGRhdGEpO1xuICAgIH1cbiAgfSk7XG59O1xuXG5jb25zdCBpc1VSTFNhbWVPcmlnaW4gPSBwbGF0Zm9ybS5oYXNTdGFuZGFyZEJyb3dzZXJFbnYgP1xuXG4vLyBTdGFuZGFyZCBicm93c2VyIGVudnMgaGF2ZSBmdWxsIHN1cHBvcnQgb2YgdGhlIEFQSXMgbmVlZGVkIHRvIHRlc3Rcbi8vIHdoZXRoZXIgdGhlIHJlcXVlc3QgVVJMIGlzIG9mIHRoZSBzYW1lIG9yaWdpbiBhcyBjdXJyZW50IGxvY2F0aW9uLlxuICAoZnVuY3Rpb24gc3RhbmRhcmRCcm93c2VyRW52KCkge1xuICAgIGNvbnN0IG1zaWUgPSAvKG1zaWV8dHJpZGVudCkvaS50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpO1xuICAgIGNvbnN0IHVybFBhcnNpbmdOb2RlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpO1xuICAgIGxldCBvcmlnaW5VUkw7XG5cbiAgICAvKipcbiAgICAqIFBhcnNlIGEgVVJMIHRvIGRpc2NvdmVyIGl0cyBjb21wb25lbnRzXG4gICAgKlxuICAgICogQHBhcmFtIHtTdHJpbmd9IHVybCBUaGUgVVJMIHRvIGJlIHBhcnNlZFxuICAgICogQHJldHVybnMge09iamVjdH1cbiAgICAqL1xuICAgIGZ1bmN0aW9uIHJlc29sdmVVUkwodXJsKSB7XG4gICAgICBsZXQgaHJlZiA9IHVybDtcblxuICAgICAgaWYgKG1zaWUpIHtcbiAgICAgICAgLy8gSUUgbmVlZHMgYXR0cmlidXRlIHNldCB0d2ljZSB0byBub3JtYWxpemUgcHJvcGVydGllc1xuICAgICAgICB1cmxQYXJzaW5nTm9kZS5zZXRBdHRyaWJ1dGUoJ2hyZWYnLCBocmVmKTtcbiAgICAgICAgaHJlZiA9IHVybFBhcnNpbmdOb2RlLmhyZWY7XG4gICAgICB9XG5cbiAgICAgIHVybFBhcnNpbmdOb2RlLnNldEF0dHJpYnV0ZSgnaHJlZicsIGhyZWYpO1xuXG4gICAgICAvLyB1cmxQYXJzaW5nTm9kZSBwcm92aWRlcyB0aGUgVXJsVXRpbHMgaW50ZXJmYWNlIC0gaHR0cDovL3VybC5zcGVjLndoYXR3Zy5vcmcvI3VybHV0aWxzXG4gICAgICByZXR1cm4ge1xuICAgICAgICBocmVmOiB1cmxQYXJzaW5nTm9kZS5ocmVmLFxuICAgICAgICBwcm90b2NvbDogdXJsUGFyc2luZ05vZGUucHJvdG9jb2wgPyB1cmxQYXJzaW5nTm9kZS5wcm90b2NvbC5yZXBsYWNlKC86JC8sICcnKSA6ICcnLFxuICAgICAgICBob3N0OiB1cmxQYXJzaW5nTm9kZS5ob3N0LFxuICAgICAgICBzZWFyY2g6IHVybFBhcnNpbmdOb2RlLnNlYXJjaCA/IHVybFBhcnNpbmdOb2RlLnNlYXJjaC5yZXBsYWNlKC9eXFw/LywgJycpIDogJycsXG4gICAgICAgIGhhc2g6IHVybFBhcnNpbmdOb2RlLmhhc2ggPyB1cmxQYXJzaW5nTm9kZS5oYXNoLnJlcGxhY2UoL14jLywgJycpIDogJycsXG4gICAgICAgIGhvc3RuYW1lOiB1cmxQYXJzaW5nTm9kZS5ob3N0bmFtZSxcbiAgICAgICAgcG9ydDogdXJsUGFyc2luZ05vZGUucG9ydCxcbiAgICAgICAgcGF0aG5hbWU6ICh1cmxQYXJzaW5nTm9kZS5wYXRobmFtZS5jaGFyQXQoMCkgPT09ICcvJykgP1xuICAgICAgICAgIHVybFBhcnNpbmdOb2RlLnBhdGhuYW1lIDpcbiAgICAgICAgICAnLycgKyB1cmxQYXJzaW5nTm9kZS5wYXRobmFtZVxuICAgICAgfTtcbiAgICB9XG5cbiAgICBvcmlnaW5VUkwgPSByZXNvbHZlVVJMKHdpbmRvdy5sb2NhdGlvbi5ocmVmKTtcblxuICAgIC8qKlxuICAgICogRGV0ZXJtaW5lIGlmIGEgVVJMIHNoYXJlcyB0aGUgc2FtZSBvcmlnaW4gYXMgdGhlIGN1cnJlbnQgbG9jYXRpb25cbiAgICAqXG4gICAgKiBAcGFyYW0ge1N0cmluZ30gcmVxdWVzdFVSTCBUaGUgVVJMIHRvIHRlc3RcbiAgICAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIFVSTCBzaGFyZXMgdGhlIHNhbWUgb3JpZ2luLCBvdGhlcndpc2UgZmFsc2VcbiAgICAqL1xuICAgIHJldHVybiBmdW5jdGlvbiBpc1VSTFNhbWVPcmlnaW4ocmVxdWVzdFVSTCkge1xuICAgICAgY29uc3QgcGFyc2VkID0gKHV0aWxzJDEuaXNTdHJpbmcocmVxdWVzdFVSTCkpID8gcmVzb2x2ZVVSTChyZXF1ZXN0VVJMKSA6IHJlcXVlc3RVUkw7XG4gICAgICByZXR1cm4gKHBhcnNlZC5wcm90b2NvbCA9PT0gb3JpZ2luVVJMLnByb3RvY29sICYmXG4gICAgICAgICAgcGFyc2VkLmhvc3QgPT09IG9yaWdpblVSTC5ob3N0KTtcbiAgICB9O1xuICB9KSgpIDpcblxuICAvLyBOb24gc3RhbmRhcmQgYnJvd3NlciBlbnZzICh3ZWIgd29ya2VycywgcmVhY3QtbmF0aXZlKSBsYWNrIG5lZWRlZCBzdXBwb3J0LlxuICAoZnVuY3Rpb24gbm9uU3RhbmRhcmRCcm93c2VyRW52KCkge1xuICAgIHJldHVybiBmdW5jdGlvbiBpc1VSTFNhbWVPcmlnaW4oKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9O1xuICB9KSgpO1xuXG5jb25zdCBjb29raWVzID0gcGxhdGZvcm0uaGFzU3RhbmRhcmRCcm93c2VyRW52ID9cblxuICAvLyBTdGFuZGFyZCBicm93c2VyIGVudnMgc3VwcG9ydCBkb2N1bWVudC5jb29raWVcbiAge1xuICAgIHdyaXRlKG5hbWUsIHZhbHVlLCBleHBpcmVzLCBwYXRoLCBkb21haW4sIHNlY3VyZSkge1xuICAgICAgY29uc3QgY29va2llID0gW25hbWUgKyAnPScgKyBlbmNvZGVVUklDb21wb25lbnQodmFsdWUpXTtcblxuICAgICAgdXRpbHMkMS5pc051bWJlcihleHBpcmVzKSAmJiBjb29raWUucHVzaCgnZXhwaXJlcz0nICsgbmV3IERhdGUoZXhwaXJlcykudG9HTVRTdHJpbmcoKSk7XG5cbiAgICAgIHV0aWxzJDEuaXNTdHJpbmcocGF0aCkgJiYgY29va2llLnB1c2goJ3BhdGg9JyArIHBhdGgpO1xuXG4gICAgICB1dGlscyQxLmlzU3RyaW5nKGRvbWFpbikgJiYgY29va2llLnB1c2goJ2RvbWFpbj0nICsgZG9tYWluKTtcblxuICAgICAgc2VjdXJlID09PSB0cnVlICYmIGNvb2tpZS5wdXNoKCdzZWN1cmUnKTtcblxuICAgICAgZG9jdW1lbnQuY29va2llID0gY29va2llLmpvaW4oJzsgJyk7XG4gICAgfSxcblxuICAgIHJlYWQobmFtZSkge1xuICAgICAgY29uc3QgbWF0Y2ggPSBkb2N1bWVudC5jb29raWUubWF0Y2gobmV3IFJlZ0V4cCgnKF58O1xcXFxzKikoJyArIG5hbWUgKyAnKT0oW147XSopJykpO1xuICAgICAgcmV0dXJuIChtYXRjaCA/IGRlY29kZVVSSUNvbXBvbmVudChtYXRjaFszXSkgOiBudWxsKTtcbiAgICB9LFxuXG4gICAgcmVtb3ZlKG5hbWUpIHtcbiAgICAgIHRoaXMud3JpdGUobmFtZSwgJycsIERhdGUubm93KCkgLSA4NjQwMDAwMCk7XG4gICAgfVxuICB9XG5cbiAgOlxuXG4gIC8vIE5vbi1zdGFuZGFyZCBicm93c2VyIGVudiAod2ViIHdvcmtlcnMsIHJlYWN0LW5hdGl2ZSkgbGFjayBuZWVkZWQgc3VwcG9ydC5cbiAge1xuICAgIHdyaXRlKCkge30sXG4gICAgcmVhZCgpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH0sXG4gICAgcmVtb3ZlKCkge31cbiAgfTtcblxuY29uc3QgaGVhZGVyc1RvT2JqZWN0ID0gKHRoaW5nKSA9PiB0aGluZyBpbnN0YW5jZW9mIEF4aW9zSGVhZGVycyQxID8geyAuLi50aGluZyB9IDogdGhpbmc7XG5cbi8qKlxuICogQ29uZmlnLXNwZWNpZmljIG1lcmdlLWZ1bmN0aW9uIHdoaWNoIGNyZWF0ZXMgYSBuZXcgY29uZmlnLW9iamVjdFxuICogYnkgbWVyZ2luZyB0d28gY29uZmlndXJhdGlvbiBvYmplY3RzIHRvZ2V0aGVyLlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBjb25maWcxXG4gKiBAcGFyYW0ge09iamVjdH0gY29uZmlnMlxuICpcbiAqIEByZXR1cm5zIHtPYmplY3R9IE5ldyBvYmplY3QgcmVzdWx0aW5nIGZyb20gbWVyZ2luZyBjb25maWcyIHRvIGNvbmZpZzFcbiAqL1xuZnVuY3Rpb24gbWVyZ2VDb25maWcoY29uZmlnMSwgY29uZmlnMikge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcGFyYW0tcmVhc3NpZ25cbiAgY29uZmlnMiA9IGNvbmZpZzIgfHwge307XG4gIGNvbnN0IGNvbmZpZyA9IHt9O1xuXG4gIGZ1bmN0aW9uIGdldE1lcmdlZFZhbHVlKHRhcmdldCwgc291cmNlLCBjYXNlbGVzcykge1xuICAgIGlmICh1dGlscyQxLmlzUGxhaW5PYmplY3QodGFyZ2V0KSAmJiB1dGlscyQxLmlzUGxhaW5PYmplY3Qoc291cmNlKSkge1xuICAgICAgcmV0dXJuIHV0aWxzJDEubWVyZ2UuY2FsbCh7Y2FzZWxlc3N9LCB0YXJnZXQsIHNvdXJjZSk7XG4gICAgfSBlbHNlIGlmICh1dGlscyQxLmlzUGxhaW5PYmplY3Qoc291cmNlKSkge1xuICAgICAgcmV0dXJuIHV0aWxzJDEubWVyZ2Uoe30sIHNvdXJjZSk7XG4gICAgfSBlbHNlIGlmICh1dGlscyQxLmlzQXJyYXkoc291cmNlKSkge1xuICAgICAgcmV0dXJuIHNvdXJjZS5zbGljZSgpO1xuICAgIH1cbiAgICByZXR1cm4gc291cmNlO1xuICB9XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGNvbnNpc3RlbnQtcmV0dXJuXG4gIGZ1bmN0aW9uIG1lcmdlRGVlcFByb3BlcnRpZXMoYSwgYiwgY2FzZWxlc3MpIHtcbiAgICBpZiAoIXV0aWxzJDEuaXNVbmRlZmluZWQoYikpIHtcbiAgICAgIHJldHVybiBnZXRNZXJnZWRWYWx1ZShhLCBiLCBjYXNlbGVzcyk7XG4gICAgfSBlbHNlIGlmICghdXRpbHMkMS5pc1VuZGVmaW5lZChhKSkge1xuICAgICAgcmV0dXJuIGdldE1lcmdlZFZhbHVlKHVuZGVmaW5lZCwgYSwgY2FzZWxlc3MpO1xuICAgIH1cbiAgfVxuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjb25zaXN0ZW50LXJldHVyblxuICBmdW5jdGlvbiB2YWx1ZUZyb21Db25maWcyKGEsIGIpIHtcbiAgICBpZiAoIXV0aWxzJDEuaXNVbmRlZmluZWQoYikpIHtcbiAgICAgIHJldHVybiBnZXRNZXJnZWRWYWx1ZSh1bmRlZmluZWQsIGIpO1xuICAgIH1cbiAgfVxuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjb25zaXN0ZW50LXJldHVyblxuICBmdW5jdGlvbiBkZWZhdWx0VG9Db25maWcyKGEsIGIpIHtcbiAgICBpZiAoIXV0aWxzJDEuaXNVbmRlZmluZWQoYikpIHtcbiAgICAgIHJldHVybiBnZXRNZXJnZWRWYWx1ZSh1bmRlZmluZWQsIGIpO1xuICAgIH0gZWxzZSBpZiAoIXV0aWxzJDEuaXNVbmRlZmluZWQoYSkpIHtcbiAgICAgIHJldHVybiBnZXRNZXJnZWRWYWx1ZSh1bmRlZmluZWQsIGEpO1xuICAgIH1cbiAgfVxuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjb25zaXN0ZW50LXJldHVyblxuICBmdW5jdGlvbiBtZXJnZURpcmVjdEtleXMoYSwgYiwgcHJvcCkge1xuICAgIGlmIChwcm9wIGluIGNvbmZpZzIpIHtcbiAgICAgIHJldHVybiBnZXRNZXJnZWRWYWx1ZShhLCBiKTtcbiAgICB9IGVsc2UgaWYgKHByb3AgaW4gY29uZmlnMSkge1xuICAgICAgcmV0dXJuIGdldE1lcmdlZFZhbHVlKHVuZGVmaW5lZCwgYSk7XG4gICAgfVxuICB9XG5cbiAgY29uc3QgbWVyZ2VNYXAgPSB7XG4gICAgdXJsOiB2YWx1ZUZyb21Db25maWcyLFxuICAgIG1ldGhvZDogdmFsdWVGcm9tQ29uZmlnMixcbiAgICBkYXRhOiB2YWx1ZUZyb21Db25maWcyLFxuICAgIGJhc2VVUkw6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgdHJhbnNmb3JtUmVxdWVzdDogZGVmYXVsdFRvQ29uZmlnMixcbiAgICB0cmFuc2Zvcm1SZXNwb25zZTogZGVmYXVsdFRvQ29uZmlnMixcbiAgICBwYXJhbXNTZXJpYWxpemVyOiBkZWZhdWx0VG9Db25maWcyLFxuICAgIHRpbWVvdXQ6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgdGltZW91dE1lc3NhZ2U6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgd2l0aENyZWRlbnRpYWxzOiBkZWZhdWx0VG9Db25maWcyLFxuICAgIHdpdGhYU1JGVG9rZW46IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgYWRhcHRlcjogZGVmYXVsdFRvQ29uZmlnMixcbiAgICByZXNwb25zZVR5cGU6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgeHNyZkNvb2tpZU5hbWU6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgeHNyZkhlYWRlck5hbWU6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgb25VcGxvYWRQcm9ncmVzczogZGVmYXVsdFRvQ29uZmlnMixcbiAgICBvbkRvd25sb2FkUHJvZ3Jlc3M6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgZGVjb21wcmVzczogZGVmYXVsdFRvQ29uZmlnMixcbiAgICBtYXhDb250ZW50TGVuZ3RoOiBkZWZhdWx0VG9Db25maWcyLFxuICAgIG1heEJvZHlMZW5ndGg6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgYmVmb3JlUmVkaXJlY3Q6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgdHJhbnNwb3J0OiBkZWZhdWx0VG9Db25maWcyLFxuICAgIGh0dHBBZ2VudDogZGVmYXVsdFRvQ29uZmlnMixcbiAgICBodHRwc0FnZW50OiBkZWZhdWx0VG9Db25maWcyLFxuICAgIGNhbmNlbFRva2VuOiBkZWZhdWx0VG9Db25maWcyLFxuICAgIHNvY2tldFBhdGg6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgcmVzcG9uc2VFbmNvZGluZzogZGVmYXVsdFRvQ29uZmlnMixcbiAgICB2YWxpZGF0ZVN0YXR1czogbWVyZ2VEaXJlY3RLZXlzLFxuICAgIGhlYWRlcnM6IChhLCBiKSA9PiBtZXJnZURlZXBQcm9wZXJ0aWVzKGhlYWRlcnNUb09iamVjdChhKSwgaGVhZGVyc1RvT2JqZWN0KGIpLCB0cnVlKVxuICB9O1xuXG4gIHV0aWxzJDEuZm9yRWFjaChPYmplY3Qua2V5cyhPYmplY3QuYXNzaWduKHt9LCBjb25maWcxLCBjb25maWcyKSksIGZ1bmN0aW9uIGNvbXB1dGVDb25maWdWYWx1ZShwcm9wKSB7XG4gICAgY29uc3QgbWVyZ2UgPSBtZXJnZU1hcFtwcm9wXSB8fCBtZXJnZURlZXBQcm9wZXJ0aWVzO1xuICAgIGNvbnN0IGNvbmZpZ1ZhbHVlID0gbWVyZ2UoY29uZmlnMVtwcm9wXSwgY29uZmlnMltwcm9wXSwgcHJvcCk7XG4gICAgKHV0aWxzJDEuaXNVbmRlZmluZWQoY29uZmlnVmFsdWUpICYmIG1lcmdlICE9PSBtZXJnZURpcmVjdEtleXMpIHx8IChjb25maWdbcHJvcF0gPSBjb25maWdWYWx1ZSk7XG4gIH0pO1xuXG4gIHJldHVybiBjb25maWc7XG59XG5cbmNvbnN0IHJlc29sdmVDb25maWcgPSAoY29uZmlnKSA9PiB7XG4gIGNvbnN0IG5ld0NvbmZpZyA9IG1lcmdlQ29uZmlnKHt9LCBjb25maWcpO1xuXG4gIGxldCB7ZGF0YSwgd2l0aFhTUkZUb2tlbiwgeHNyZkhlYWRlck5hbWUsIHhzcmZDb29raWVOYW1lLCBoZWFkZXJzLCBhdXRofSA9IG5ld0NvbmZpZztcblxuICBuZXdDb25maWcuaGVhZGVycyA9IGhlYWRlcnMgPSBBeGlvc0hlYWRlcnMkMS5mcm9tKGhlYWRlcnMpO1xuXG4gIG5ld0NvbmZpZy51cmwgPSBidWlsZFVSTChidWlsZEZ1bGxQYXRoKG5ld0NvbmZpZy5iYXNlVVJMLCBuZXdDb25maWcudXJsKSwgY29uZmlnLnBhcmFtcywgY29uZmlnLnBhcmFtc1NlcmlhbGl6ZXIpO1xuXG4gIC8vIEhUVFAgYmFzaWMgYXV0aGVudGljYXRpb25cbiAgaWYgKGF1dGgpIHtcbiAgICBoZWFkZXJzLnNldCgnQXV0aG9yaXphdGlvbicsICdCYXNpYyAnICtcbiAgICAgIGJ0b2EoKGF1dGgudXNlcm5hbWUgfHwgJycpICsgJzonICsgKGF1dGgucGFzc3dvcmQgPyB1bmVzY2FwZShlbmNvZGVVUklDb21wb25lbnQoYXV0aC5wYXNzd29yZCkpIDogJycpKVxuICAgICk7XG4gIH1cblxuICBsZXQgY29udGVudFR5cGU7XG5cbiAgaWYgKHV0aWxzJDEuaXNGb3JtRGF0YShkYXRhKSkge1xuICAgIGlmIChwbGF0Zm9ybS5oYXNTdGFuZGFyZEJyb3dzZXJFbnYgfHwgcGxhdGZvcm0uaGFzU3RhbmRhcmRCcm93c2VyV2ViV29ya2VyRW52KSB7XG4gICAgICBoZWFkZXJzLnNldENvbnRlbnRUeXBlKHVuZGVmaW5lZCk7IC8vIExldCB0aGUgYnJvd3NlciBzZXQgaXRcbiAgICB9IGVsc2UgaWYgKChjb250ZW50VHlwZSA9IGhlYWRlcnMuZ2V0Q29udGVudFR5cGUoKSkgIT09IGZhbHNlKSB7XG4gICAgICAvLyBmaXggc2VtaWNvbG9uIGR1cGxpY2F0aW9uIGlzc3VlIGZvciBSZWFjdE5hdGl2ZSBGb3JtRGF0YSBpbXBsZW1lbnRhdGlvblxuICAgICAgY29uc3QgW3R5cGUsIC4uLnRva2Vuc10gPSBjb250ZW50VHlwZSA/IGNvbnRlbnRUeXBlLnNwbGl0KCc7JykubWFwKHRva2VuID0+IHRva2VuLnRyaW0oKSkuZmlsdGVyKEJvb2xlYW4pIDogW107XG4gICAgICBoZWFkZXJzLnNldENvbnRlbnRUeXBlKFt0eXBlIHx8ICdtdWx0aXBhcnQvZm9ybS1kYXRhJywgLi4udG9rZW5zXS5qb2luKCc7ICcpKTtcbiAgICB9XG4gIH1cblxuICAvLyBBZGQgeHNyZiBoZWFkZXJcbiAgLy8gVGhpcyBpcyBvbmx5IGRvbmUgaWYgcnVubmluZyBpbiBhIHN0YW5kYXJkIGJyb3dzZXIgZW52aXJvbm1lbnQuXG4gIC8vIFNwZWNpZmljYWxseSBub3QgaWYgd2UncmUgaW4gYSB3ZWIgd29ya2VyLCBvciByZWFjdC1uYXRpdmUuXG5cbiAgaWYgKHBsYXRmb3JtLmhhc1N0YW5kYXJkQnJvd3NlckVudikge1xuICAgIHdpdGhYU1JGVG9rZW4gJiYgdXRpbHMkMS5pc0Z1bmN0aW9uKHdpdGhYU1JGVG9rZW4pICYmICh3aXRoWFNSRlRva2VuID0gd2l0aFhTUkZUb2tlbihuZXdDb25maWcpKTtcblxuICAgIGlmICh3aXRoWFNSRlRva2VuIHx8ICh3aXRoWFNSRlRva2VuICE9PSBmYWxzZSAmJiBpc1VSTFNhbWVPcmlnaW4obmV3Q29uZmlnLnVybCkpKSB7XG4gICAgICAvLyBBZGQgeHNyZiBoZWFkZXJcbiAgICAgIGNvbnN0IHhzcmZWYWx1ZSA9IHhzcmZIZWFkZXJOYW1lICYmIHhzcmZDb29raWVOYW1lICYmIGNvb2tpZXMucmVhZCh4c3JmQ29va2llTmFtZSk7XG5cbiAgICAgIGlmICh4c3JmVmFsdWUpIHtcbiAgICAgICAgaGVhZGVycy5zZXQoeHNyZkhlYWRlck5hbWUsIHhzcmZWYWx1ZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG5ld0NvbmZpZztcbn07XG5cbmNvbnN0IGlzWEhSQWRhcHRlclN1cHBvcnRlZCA9IHR5cGVvZiBYTUxIdHRwUmVxdWVzdCAhPT0gJ3VuZGVmaW5lZCc7XG5cbmNvbnN0IHhockFkYXB0ZXIgPSBpc1hIUkFkYXB0ZXJTdXBwb3J0ZWQgJiYgZnVuY3Rpb24gKGNvbmZpZykge1xuICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gZGlzcGF0Y2hYaHJSZXF1ZXN0KHJlc29sdmUsIHJlamVjdCkge1xuICAgIGNvbnN0IF9jb25maWcgPSByZXNvbHZlQ29uZmlnKGNvbmZpZyk7XG4gICAgbGV0IHJlcXVlc3REYXRhID0gX2NvbmZpZy5kYXRhO1xuICAgIGNvbnN0IHJlcXVlc3RIZWFkZXJzID0gQXhpb3NIZWFkZXJzJDEuZnJvbShfY29uZmlnLmhlYWRlcnMpLm5vcm1hbGl6ZSgpO1xuICAgIGxldCB7cmVzcG9uc2VUeXBlLCBvblVwbG9hZFByb2dyZXNzLCBvbkRvd25sb2FkUHJvZ3Jlc3N9ID0gX2NvbmZpZztcbiAgICBsZXQgb25DYW5jZWxlZDtcbiAgICBsZXQgdXBsb2FkVGhyb3R0bGVkLCBkb3dubG9hZFRocm90dGxlZDtcbiAgICBsZXQgZmx1c2hVcGxvYWQsIGZsdXNoRG93bmxvYWQ7XG5cbiAgICBmdW5jdGlvbiBkb25lKCkge1xuICAgICAgZmx1c2hVcGxvYWQgJiYgZmx1c2hVcGxvYWQoKTsgLy8gZmx1c2ggZXZlbnRzXG4gICAgICBmbHVzaERvd25sb2FkICYmIGZsdXNoRG93bmxvYWQoKTsgLy8gZmx1c2ggZXZlbnRzXG5cbiAgICAgIF9jb25maWcuY2FuY2VsVG9rZW4gJiYgX2NvbmZpZy5jYW5jZWxUb2tlbi51bnN1YnNjcmliZShvbkNhbmNlbGVkKTtcblxuICAgICAgX2NvbmZpZy5zaWduYWwgJiYgX2NvbmZpZy5zaWduYWwucmVtb3ZlRXZlbnRMaXN0ZW5lcignYWJvcnQnLCBvbkNhbmNlbGVkKTtcbiAgICB9XG5cbiAgICBsZXQgcmVxdWVzdCA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpO1xuXG4gICAgcmVxdWVzdC5vcGVuKF9jb25maWcubWV0aG9kLnRvVXBwZXJDYXNlKCksIF9jb25maWcudXJsLCB0cnVlKTtcblxuICAgIC8vIFNldCB0aGUgcmVxdWVzdCB0aW1lb3V0IGluIE1TXG4gICAgcmVxdWVzdC50aW1lb3V0ID0gX2NvbmZpZy50aW1lb3V0O1xuXG4gICAgZnVuY3Rpb24gb25sb2FkZW5kKCkge1xuICAgICAgaWYgKCFyZXF1ZXN0KSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIC8vIFByZXBhcmUgdGhlIHJlc3BvbnNlXG4gICAgICBjb25zdCByZXNwb25zZUhlYWRlcnMgPSBBeGlvc0hlYWRlcnMkMS5mcm9tKFxuICAgICAgICAnZ2V0QWxsUmVzcG9uc2VIZWFkZXJzJyBpbiByZXF1ZXN0ICYmIHJlcXVlc3QuZ2V0QWxsUmVzcG9uc2VIZWFkZXJzKClcbiAgICAgICk7XG4gICAgICBjb25zdCByZXNwb25zZURhdGEgPSAhcmVzcG9uc2VUeXBlIHx8IHJlc3BvbnNlVHlwZSA9PT0gJ3RleHQnIHx8IHJlc3BvbnNlVHlwZSA9PT0gJ2pzb24nID9cbiAgICAgICAgcmVxdWVzdC5yZXNwb25zZVRleHQgOiByZXF1ZXN0LnJlc3BvbnNlO1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSB7XG4gICAgICAgIGRhdGE6IHJlc3BvbnNlRGF0YSxcbiAgICAgICAgc3RhdHVzOiByZXF1ZXN0LnN0YXR1cyxcbiAgICAgICAgc3RhdHVzVGV4dDogcmVxdWVzdC5zdGF0dXNUZXh0LFxuICAgICAgICBoZWFkZXJzOiByZXNwb25zZUhlYWRlcnMsXG4gICAgICAgIGNvbmZpZyxcbiAgICAgICAgcmVxdWVzdFxuICAgICAgfTtcblxuICAgICAgc2V0dGxlKGZ1bmN0aW9uIF9yZXNvbHZlKHZhbHVlKSB7XG4gICAgICAgIHJlc29sdmUodmFsdWUpO1xuICAgICAgICBkb25lKCk7XG4gICAgICB9LCBmdW5jdGlvbiBfcmVqZWN0KGVycikge1xuICAgICAgICByZWplY3QoZXJyKTtcbiAgICAgICAgZG9uZSgpO1xuICAgICAgfSwgcmVzcG9uc2UpO1xuXG4gICAgICAvLyBDbGVhbiB1cCByZXF1ZXN0XG4gICAgICByZXF1ZXN0ID0gbnVsbDtcbiAgICB9XG5cbiAgICBpZiAoJ29ubG9hZGVuZCcgaW4gcmVxdWVzdCkge1xuICAgICAgLy8gVXNlIG9ubG9hZGVuZCBpZiBhdmFpbGFibGVcbiAgICAgIHJlcXVlc3Qub25sb2FkZW5kID0gb25sb2FkZW5kO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBMaXN0ZW4gZm9yIHJlYWR5IHN0YXRlIHRvIGVtdWxhdGUgb25sb2FkZW5kXG4gICAgICByZXF1ZXN0Lm9ucmVhZHlzdGF0ZWNoYW5nZSA9IGZ1bmN0aW9uIGhhbmRsZUxvYWQoKSB7XG4gICAgICAgIGlmICghcmVxdWVzdCB8fCByZXF1ZXN0LnJlYWR5U3RhdGUgIT09IDQpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAvLyBUaGUgcmVxdWVzdCBlcnJvcmVkIG91dCBhbmQgd2UgZGlkbid0IGdldCBhIHJlc3BvbnNlLCB0aGlzIHdpbGwgYmVcbiAgICAgICAgLy8gaGFuZGxlZCBieSBvbmVycm9yIGluc3RlYWRcbiAgICAgICAgLy8gV2l0aCBvbmUgZXhjZXB0aW9uOiByZXF1ZXN0IHRoYXQgdXNpbmcgZmlsZTogcHJvdG9jb2wsIG1vc3QgYnJvd3NlcnNcbiAgICAgICAgLy8gd2lsbCByZXR1cm4gc3RhdHVzIGFzIDAgZXZlbiB0aG91Z2ggaXQncyBhIHN1Y2Nlc3NmdWwgcmVxdWVzdFxuICAgICAgICBpZiAocmVxdWVzdC5zdGF0dXMgPT09IDAgJiYgIShyZXF1ZXN0LnJlc3BvbnNlVVJMICYmIHJlcXVlc3QucmVzcG9uc2VVUkwuaW5kZXhPZignZmlsZTonKSA9PT0gMCkpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgLy8gcmVhZHlzdGF0ZSBoYW5kbGVyIGlzIGNhbGxpbmcgYmVmb3JlIG9uZXJyb3Igb3Igb250aW1lb3V0IGhhbmRsZXJzLFxuICAgICAgICAvLyBzbyB3ZSBzaG91bGQgY2FsbCBvbmxvYWRlbmQgb24gdGhlIG5leHQgJ3RpY2snXG4gICAgICAgIHNldFRpbWVvdXQob25sb2FkZW5kKTtcbiAgICAgIH07XG4gICAgfVxuXG4gICAgLy8gSGFuZGxlIGJyb3dzZXIgcmVxdWVzdCBjYW5jZWxsYXRpb24gKGFzIG9wcG9zZWQgdG8gYSBtYW51YWwgY2FuY2VsbGF0aW9uKVxuICAgIHJlcXVlc3Qub25hYm9ydCA9IGZ1bmN0aW9uIGhhbmRsZUFib3J0KCkge1xuICAgICAgaWYgKCFyZXF1ZXN0KSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgcmVqZWN0KG5ldyBBeGlvc0Vycm9yKCdSZXF1ZXN0IGFib3J0ZWQnLCBBeGlvc0Vycm9yLkVDT05OQUJPUlRFRCwgY29uZmlnLCByZXF1ZXN0KSk7XG5cbiAgICAgIC8vIENsZWFuIHVwIHJlcXVlc3RcbiAgICAgIHJlcXVlc3QgPSBudWxsO1xuICAgIH07XG5cbiAgICAvLyBIYW5kbGUgbG93IGxldmVsIG5ldHdvcmsgZXJyb3JzXG4gICAgcmVxdWVzdC5vbmVycm9yID0gZnVuY3Rpb24gaGFuZGxlRXJyb3IoKSB7XG4gICAgICAvLyBSZWFsIGVycm9ycyBhcmUgaGlkZGVuIGZyb20gdXMgYnkgdGhlIGJyb3dzZXJcbiAgICAgIC8vIG9uZXJyb3Igc2hvdWxkIG9ubHkgZmlyZSBpZiBpdCdzIGEgbmV0d29yayBlcnJvclxuICAgICAgcmVqZWN0KG5ldyBBeGlvc0Vycm9yKCdOZXR3b3JrIEVycm9yJywgQXhpb3NFcnJvci5FUlJfTkVUV09SSywgY29uZmlnLCByZXF1ZXN0KSk7XG5cbiAgICAgIC8vIENsZWFuIHVwIHJlcXVlc3RcbiAgICAgIHJlcXVlc3QgPSBudWxsO1xuICAgIH07XG5cbiAgICAvLyBIYW5kbGUgdGltZW91dFxuICAgIHJlcXVlc3Qub250aW1lb3V0ID0gZnVuY3Rpb24gaGFuZGxlVGltZW91dCgpIHtcbiAgICAgIGxldCB0aW1lb3V0RXJyb3JNZXNzYWdlID0gX2NvbmZpZy50aW1lb3V0ID8gJ3RpbWVvdXQgb2YgJyArIF9jb25maWcudGltZW91dCArICdtcyBleGNlZWRlZCcgOiAndGltZW91dCBleGNlZWRlZCc7XG4gICAgICBjb25zdCB0cmFuc2l0aW9uYWwgPSBfY29uZmlnLnRyYW5zaXRpb25hbCB8fCB0cmFuc2l0aW9uYWxEZWZhdWx0cztcbiAgICAgIGlmIChfY29uZmlnLnRpbWVvdXRFcnJvck1lc3NhZ2UpIHtcbiAgICAgICAgdGltZW91dEVycm9yTWVzc2FnZSA9IF9jb25maWcudGltZW91dEVycm9yTWVzc2FnZTtcbiAgICAgIH1cbiAgICAgIHJlamVjdChuZXcgQXhpb3NFcnJvcihcbiAgICAgICAgdGltZW91dEVycm9yTWVzc2FnZSxcbiAgICAgICAgdHJhbnNpdGlvbmFsLmNsYXJpZnlUaW1lb3V0RXJyb3IgPyBBeGlvc0Vycm9yLkVUSU1FRE9VVCA6IEF4aW9zRXJyb3IuRUNPTk5BQk9SVEVELFxuICAgICAgICBjb25maWcsXG4gICAgICAgIHJlcXVlc3QpKTtcblxuICAgICAgLy8gQ2xlYW4gdXAgcmVxdWVzdFxuICAgICAgcmVxdWVzdCA9IG51bGw7XG4gICAgfTtcblxuICAgIC8vIFJlbW92ZSBDb250ZW50LVR5cGUgaWYgZGF0YSBpcyB1bmRlZmluZWRcbiAgICByZXF1ZXN0RGF0YSA9PT0gdW5kZWZpbmVkICYmIHJlcXVlc3RIZWFkZXJzLnNldENvbnRlbnRUeXBlKG51bGwpO1xuXG4gICAgLy8gQWRkIGhlYWRlcnMgdG8gdGhlIHJlcXVlc3RcbiAgICBpZiAoJ3NldFJlcXVlc3RIZWFkZXInIGluIHJlcXVlc3QpIHtcbiAgICAgIHV0aWxzJDEuZm9yRWFjaChyZXF1ZXN0SGVhZGVycy50b0pTT04oKSwgZnVuY3Rpb24gc2V0UmVxdWVzdEhlYWRlcih2YWwsIGtleSkge1xuICAgICAgICByZXF1ZXN0LnNldFJlcXVlc3RIZWFkZXIoa2V5LCB2YWwpO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gQWRkIHdpdGhDcmVkZW50aWFscyB0byByZXF1ZXN0IGlmIG5lZWRlZFxuICAgIGlmICghdXRpbHMkMS5pc1VuZGVmaW5lZChfY29uZmlnLndpdGhDcmVkZW50aWFscykpIHtcbiAgICAgIHJlcXVlc3Qud2l0aENyZWRlbnRpYWxzID0gISFfY29uZmlnLndpdGhDcmVkZW50aWFscztcbiAgICB9XG5cbiAgICAvLyBBZGQgcmVzcG9uc2VUeXBlIHRvIHJlcXVlc3QgaWYgbmVlZGVkXG4gICAgaWYgKHJlc3BvbnNlVHlwZSAmJiByZXNwb25zZVR5cGUgIT09ICdqc29uJykge1xuICAgICAgcmVxdWVzdC5yZXNwb25zZVR5cGUgPSBfY29uZmlnLnJlc3BvbnNlVHlwZTtcbiAgICB9XG5cbiAgICAvLyBIYW5kbGUgcHJvZ3Jlc3MgaWYgbmVlZGVkXG4gICAgaWYgKG9uRG93bmxvYWRQcm9ncmVzcykge1xuICAgICAgKFtkb3dubG9hZFRocm90dGxlZCwgZmx1c2hEb3dubG9hZF0gPSBwcm9ncmVzc0V2ZW50UmVkdWNlcihvbkRvd25sb2FkUHJvZ3Jlc3MsIHRydWUpKTtcbiAgICAgIHJlcXVlc3QuYWRkRXZlbnRMaXN0ZW5lcigncHJvZ3Jlc3MnLCBkb3dubG9hZFRocm90dGxlZCk7XG4gICAgfVxuXG4gICAgLy8gTm90IGFsbCBicm93c2VycyBzdXBwb3J0IHVwbG9hZCBldmVudHNcbiAgICBpZiAob25VcGxvYWRQcm9ncmVzcyAmJiByZXF1ZXN0LnVwbG9hZCkge1xuICAgICAgKFt1cGxvYWRUaHJvdHRsZWQsIGZsdXNoVXBsb2FkXSA9IHByb2dyZXNzRXZlbnRSZWR1Y2VyKG9uVXBsb2FkUHJvZ3Jlc3MpKTtcblxuICAgICAgcmVxdWVzdC51cGxvYWQuYWRkRXZlbnRMaXN0ZW5lcigncHJvZ3Jlc3MnLCB1cGxvYWRUaHJvdHRsZWQpO1xuXG4gICAgICByZXF1ZXN0LnVwbG9hZC5hZGRFdmVudExpc3RlbmVyKCdsb2FkZW5kJywgZmx1c2hVcGxvYWQpO1xuICAgIH1cblxuICAgIGlmIChfY29uZmlnLmNhbmNlbFRva2VuIHx8IF9jb25maWcuc2lnbmFsKSB7XG4gICAgICAvLyBIYW5kbGUgY2FuY2VsbGF0aW9uXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZnVuYy1uYW1lc1xuICAgICAgb25DYW5jZWxlZCA9IGNhbmNlbCA9PiB7XG4gICAgICAgIGlmICghcmVxdWVzdCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICByZWplY3QoIWNhbmNlbCB8fCBjYW5jZWwudHlwZSA/IG5ldyBDYW5jZWxlZEVycm9yKG51bGwsIGNvbmZpZywgcmVxdWVzdCkgOiBjYW5jZWwpO1xuICAgICAgICByZXF1ZXN0LmFib3J0KCk7XG4gICAgICAgIHJlcXVlc3QgPSBudWxsO1xuICAgICAgfTtcblxuICAgICAgX2NvbmZpZy5jYW5jZWxUb2tlbiAmJiBfY29uZmlnLmNhbmNlbFRva2VuLnN1YnNjcmliZShvbkNhbmNlbGVkKTtcbiAgICAgIGlmIChfY29uZmlnLnNpZ25hbCkge1xuICAgICAgICBfY29uZmlnLnNpZ25hbC5hYm9ydGVkID8gb25DYW5jZWxlZCgpIDogX2NvbmZpZy5zaWduYWwuYWRkRXZlbnRMaXN0ZW5lcignYWJvcnQnLCBvbkNhbmNlbGVkKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBwcm90b2NvbCA9IHBhcnNlUHJvdG9jb2woX2NvbmZpZy51cmwpO1xuXG4gICAgaWYgKHByb3RvY29sICYmIHBsYXRmb3JtLnByb3RvY29scy5pbmRleE9mKHByb3RvY29sKSA9PT0gLTEpIHtcbiAgICAgIHJlamVjdChuZXcgQXhpb3NFcnJvcignVW5zdXBwb3J0ZWQgcHJvdG9jb2wgJyArIHByb3RvY29sICsgJzonLCBBeGlvc0Vycm9yLkVSUl9CQURfUkVRVUVTVCwgY29uZmlnKSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG5cbiAgICAvLyBTZW5kIHRoZSByZXF1ZXN0XG4gICAgcmVxdWVzdC5zZW5kKHJlcXVlc3REYXRhIHx8IG51bGwpO1xuICB9KTtcbn07XG5cbmNvbnN0IGNvbXBvc2VTaWduYWxzID0gKHNpZ25hbHMsIHRpbWVvdXQpID0+IHtcbiAgbGV0IGNvbnRyb2xsZXIgPSBuZXcgQWJvcnRDb250cm9sbGVyKCk7XG5cbiAgbGV0IGFib3J0ZWQ7XG5cbiAgY29uc3Qgb25hYm9ydCA9IGZ1bmN0aW9uIChjYW5jZWwpIHtcbiAgICBpZiAoIWFib3J0ZWQpIHtcbiAgICAgIGFib3J0ZWQgPSB0cnVlO1xuICAgICAgdW5zdWJzY3JpYmUoKTtcbiAgICAgIGNvbnN0IGVyciA9IGNhbmNlbCBpbnN0YW5jZW9mIEVycm9yID8gY2FuY2VsIDogdGhpcy5yZWFzb247XG4gICAgICBjb250cm9sbGVyLmFib3J0KGVyciBpbnN0YW5jZW9mIEF4aW9zRXJyb3IgPyBlcnIgOiBuZXcgQ2FuY2VsZWRFcnJvcihlcnIgaW5zdGFuY2VvZiBFcnJvciA/IGVyci5tZXNzYWdlIDogZXJyKSk7XG4gICAgfVxuICB9O1xuXG4gIGxldCB0aW1lciA9IHRpbWVvdXQgJiYgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgb25hYm9ydChuZXcgQXhpb3NFcnJvcihgdGltZW91dCAke3RpbWVvdXR9IG9mIG1zIGV4Y2VlZGVkYCwgQXhpb3NFcnJvci5FVElNRURPVVQpKTtcbiAgfSwgdGltZW91dCk7XG5cbiAgY29uc3QgdW5zdWJzY3JpYmUgPSAoKSA9PiB7XG4gICAgaWYgKHNpZ25hbHMpIHtcbiAgICAgIHRpbWVyICYmIGNsZWFyVGltZW91dCh0aW1lcik7XG4gICAgICB0aW1lciA9IG51bGw7XG4gICAgICBzaWduYWxzLmZvckVhY2goc2lnbmFsID0+IHtcbiAgICAgICAgc2lnbmFsICYmXG4gICAgICAgIChzaWduYWwucmVtb3ZlRXZlbnRMaXN0ZW5lciA/IHNpZ25hbC5yZW1vdmVFdmVudExpc3RlbmVyKCdhYm9ydCcsIG9uYWJvcnQpIDogc2lnbmFsLnVuc3Vic2NyaWJlKG9uYWJvcnQpKTtcbiAgICAgIH0pO1xuICAgICAgc2lnbmFscyA9IG51bGw7XG4gICAgfVxuICB9O1xuXG4gIHNpZ25hbHMuZm9yRWFjaCgoc2lnbmFsKSA9PiBzaWduYWwgJiYgc2lnbmFsLmFkZEV2ZW50TGlzdGVuZXIgJiYgc2lnbmFsLmFkZEV2ZW50TGlzdGVuZXIoJ2Fib3J0Jywgb25hYm9ydCkpO1xuXG4gIGNvbnN0IHtzaWduYWx9ID0gY29udHJvbGxlcjtcblxuICBzaWduYWwudW5zdWJzY3JpYmUgPSB1bnN1YnNjcmliZTtcblxuICByZXR1cm4gW3NpZ25hbCwgKCkgPT4ge1xuICAgIHRpbWVyICYmIGNsZWFyVGltZW91dCh0aW1lcik7XG4gICAgdGltZXIgPSBudWxsO1xuICB9XTtcbn07XG5cbmNvbnN0IGNvbXBvc2VTaWduYWxzJDEgPSBjb21wb3NlU2lnbmFscztcblxuY29uc3Qgc3RyZWFtQ2h1bmsgPSBmdW5jdGlvbiogKGNodW5rLCBjaHVua1NpemUpIHtcbiAgbGV0IGxlbiA9IGNodW5rLmJ5dGVMZW5ndGg7XG5cbiAgaWYgKCFjaHVua1NpemUgfHwgbGVuIDwgY2h1bmtTaXplKSB7XG4gICAgeWllbGQgY2h1bms7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgbGV0IHBvcyA9IDA7XG4gIGxldCBlbmQ7XG5cbiAgd2hpbGUgKHBvcyA8IGxlbikge1xuICAgIGVuZCA9IHBvcyArIGNodW5rU2l6ZTtcbiAgICB5aWVsZCBjaHVuay5zbGljZShwb3MsIGVuZCk7XG4gICAgcG9zID0gZW5kO1xuICB9XG59O1xuXG5jb25zdCByZWFkQnl0ZXMgPSBhc3luYyBmdW5jdGlvbiogKGl0ZXJhYmxlLCBjaHVua1NpemUsIGVuY29kZSkge1xuICBmb3IgYXdhaXQgKGNvbnN0IGNodW5rIG9mIGl0ZXJhYmxlKSB7XG4gICAgeWllbGQqIHN0cmVhbUNodW5rKEFycmF5QnVmZmVyLmlzVmlldyhjaHVuaykgPyBjaHVuayA6IChhd2FpdCBlbmNvZGUoU3RyaW5nKGNodW5rKSkpLCBjaHVua1NpemUpO1xuICB9XG59O1xuXG5jb25zdCB0cmFja1N0cmVhbSA9IChzdHJlYW0sIGNodW5rU2l6ZSwgb25Qcm9ncmVzcywgb25GaW5pc2gsIGVuY29kZSkgPT4ge1xuICBjb25zdCBpdGVyYXRvciA9IHJlYWRCeXRlcyhzdHJlYW0sIGNodW5rU2l6ZSwgZW5jb2RlKTtcblxuICBsZXQgYnl0ZXMgPSAwO1xuICBsZXQgZG9uZTtcbiAgbGV0IF9vbkZpbmlzaCA9IChlKSA9PiB7XG4gICAgaWYgKCFkb25lKSB7XG4gICAgICBkb25lID0gdHJ1ZTtcbiAgICAgIG9uRmluaXNoICYmIG9uRmluaXNoKGUpO1xuICAgIH1cbiAgfTtcblxuICByZXR1cm4gbmV3IFJlYWRhYmxlU3RyZWFtKHtcbiAgICBhc3luYyBwdWxsKGNvbnRyb2xsZXIpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHtkb25lLCB2YWx1ZX0gPSBhd2FpdCBpdGVyYXRvci5uZXh0KCk7XG5cbiAgICAgICAgaWYgKGRvbmUpIHtcbiAgICAgICAgIF9vbkZpbmlzaCgpO1xuICAgICAgICAgIGNvbnRyb2xsZXIuY2xvc2UoKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgbGVuID0gdmFsdWUuYnl0ZUxlbmd0aDtcbiAgICAgICAgaWYgKG9uUHJvZ3Jlc3MpIHtcbiAgICAgICAgICBsZXQgbG9hZGVkQnl0ZXMgPSBieXRlcyArPSBsZW47XG4gICAgICAgICAgb25Qcm9ncmVzcyhsb2FkZWRCeXRlcyk7XG4gICAgICAgIH1cbiAgICAgICAgY29udHJvbGxlci5lbnF1ZXVlKG5ldyBVaW50OEFycmF5KHZhbHVlKSk7XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgX29uRmluaXNoKGVycik7XG4gICAgICAgIHRocm93IGVycjtcbiAgICAgIH1cbiAgICB9LFxuICAgIGNhbmNlbChyZWFzb24pIHtcbiAgICAgIF9vbkZpbmlzaChyZWFzb24pO1xuICAgICAgcmV0dXJuIGl0ZXJhdG9yLnJldHVybigpO1xuICAgIH1cbiAgfSwge1xuICAgIGhpZ2hXYXRlck1hcms6IDJcbiAgfSlcbn07XG5cbmNvbnN0IGlzRmV0Y2hTdXBwb3J0ZWQgPSB0eXBlb2YgZmV0Y2ggPT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIFJlcXVlc3QgPT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIFJlc3BvbnNlID09PSAnZnVuY3Rpb24nO1xuY29uc3QgaXNSZWFkYWJsZVN0cmVhbVN1cHBvcnRlZCA9IGlzRmV0Y2hTdXBwb3J0ZWQgJiYgdHlwZW9mIFJlYWRhYmxlU3RyZWFtID09PSAnZnVuY3Rpb24nO1xuXG4vLyB1c2VkIG9ubHkgaW5zaWRlIHRoZSBmZXRjaCBhZGFwdGVyXG5jb25zdCBlbmNvZGVUZXh0ID0gaXNGZXRjaFN1cHBvcnRlZCAmJiAodHlwZW9mIFRleHRFbmNvZGVyID09PSAnZnVuY3Rpb24nID9cbiAgICAoKGVuY29kZXIpID0+IChzdHIpID0+IGVuY29kZXIuZW5jb2RlKHN0cikpKG5ldyBUZXh0RW5jb2RlcigpKSA6XG4gICAgYXN5bmMgKHN0cikgPT4gbmV3IFVpbnQ4QXJyYXkoYXdhaXQgbmV3IFJlc3BvbnNlKHN0cikuYXJyYXlCdWZmZXIoKSlcbik7XG5cbmNvbnN0IHRlc3QgPSAoZm4sIC4uLmFyZ3MpID0+IHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gISFmbiguLi5hcmdzKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG59O1xuXG5jb25zdCBzdXBwb3J0c1JlcXVlc3RTdHJlYW0gPSBpc1JlYWRhYmxlU3RyZWFtU3VwcG9ydGVkICYmIHRlc3QoKCkgPT4ge1xuICBsZXQgZHVwbGV4QWNjZXNzZWQgPSBmYWxzZTtcblxuICBjb25zdCBoYXNDb250ZW50VHlwZSA9IG5ldyBSZXF1ZXN0KHBsYXRmb3JtLm9yaWdpbiwge1xuICAgIGJvZHk6IG5ldyBSZWFkYWJsZVN0cmVhbSgpLFxuICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgIGdldCBkdXBsZXgoKSB7XG4gICAgICBkdXBsZXhBY2Nlc3NlZCA9IHRydWU7XG4gICAgICByZXR1cm4gJ2hhbGYnO1xuICAgIH0sXG4gIH0pLmhlYWRlcnMuaGFzKCdDb250ZW50LVR5cGUnKTtcblxuICByZXR1cm4gZHVwbGV4QWNjZXNzZWQgJiYgIWhhc0NvbnRlbnRUeXBlO1xufSk7XG5cbmNvbnN0IERFRkFVTFRfQ0hVTktfU0laRSA9IDY0ICogMTAyNDtcblxuY29uc3Qgc3VwcG9ydHNSZXNwb25zZVN0cmVhbSA9IGlzUmVhZGFibGVTdHJlYW1TdXBwb3J0ZWQgJiZcbiAgdGVzdCgoKSA9PiB1dGlscyQxLmlzUmVhZGFibGVTdHJlYW0obmV3IFJlc3BvbnNlKCcnKS5ib2R5KSk7XG5cblxuY29uc3QgcmVzb2x2ZXJzID0ge1xuICBzdHJlYW06IHN1cHBvcnRzUmVzcG9uc2VTdHJlYW0gJiYgKChyZXMpID0+IHJlcy5ib2R5KVxufTtcblxuaXNGZXRjaFN1cHBvcnRlZCAmJiAoKChyZXMpID0+IHtcbiAgWyd0ZXh0JywgJ2FycmF5QnVmZmVyJywgJ2Jsb2InLCAnZm9ybURhdGEnLCAnc3RyZWFtJ10uZm9yRWFjaCh0eXBlID0+IHtcbiAgICAhcmVzb2x2ZXJzW3R5cGVdICYmIChyZXNvbHZlcnNbdHlwZV0gPSB1dGlscyQxLmlzRnVuY3Rpb24ocmVzW3R5cGVdKSA/IChyZXMpID0+IHJlc1t0eXBlXSgpIDpcbiAgICAgIChfLCBjb25maWcpID0+IHtcbiAgICAgICAgdGhyb3cgbmV3IEF4aW9zRXJyb3IoYFJlc3BvbnNlIHR5cGUgJyR7dHlwZX0nIGlzIG5vdCBzdXBwb3J0ZWRgLCBBeGlvc0Vycm9yLkVSUl9OT1RfU1VQUE9SVCwgY29uZmlnKTtcbiAgICAgIH0pO1xuICB9KTtcbn0pKG5ldyBSZXNwb25zZSkpO1xuXG5jb25zdCBnZXRCb2R5TGVuZ3RoID0gYXN5bmMgKGJvZHkpID0+IHtcbiAgaWYgKGJvZHkgPT0gbnVsbCkge1xuICAgIHJldHVybiAwO1xuICB9XG5cbiAgaWYodXRpbHMkMS5pc0Jsb2IoYm9keSkpIHtcbiAgICByZXR1cm4gYm9keS5zaXplO1xuICB9XG5cbiAgaWYodXRpbHMkMS5pc1NwZWNDb21wbGlhbnRGb3JtKGJvZHkpKSB7XG4gICAgcmV0dXJuIChhd2FpdCBuZXcgUmVxdWVzdChib2R5KS5hcnJheUJ1ZmZlcigpKS5ieXRlTGVuZ3RoO1xuICB9XG5cbiAgaWYodXRpbHMkMS5pc0FycmF5QnVmZmVyVmlldyhib2R5KSB8fCB1dGlscyQxLmlzQXJyYXlCdWZmZXIoYm9keSkpIHtcbiAgICByZXR1cm4gYm9keS5ieXRlTGVuZ3RoO1xuICB9XG5cbiAgaWYodXRpbHMkMS5pc1VSTFNlYXJjaFBhcmFtcyhib2R5KSkge1xuICAgIGJvZHkgPSBib2R5ICsgJyc7XG4gIH1cblxuICBpZih1dGlscyQxLmlzU3RyaW5nKGJvZHkpKSB7XG4gICAgcmV0dXJuIChhd2FpdCBlbmNvZGVUZXh0KGJvZHkpKS5ieXRlTGVuZ3RoO1xuICB9XG59O1xuXG5jb25zdCByZXNvbHZlQm9keUxlbmd0aCA9IGFzeW5jIChoZWFkZXJzLCBib2R5KSA9PiB7XG4gIGNvbnN0IGxlbmd0aCA9IHV0aWxzJDEudG9GaW5pdGVOdW1iZXIoaGVhZGVycy5nZXRDb250ZW50TGVuZ3RoKCkpO1xuXG4gIHJldHVybiBsZW5ndGggPT0gbnVsbCA/IGdldEJvZHlMZW5ndGgoYm9keSkgOiBsZW5ndGg7XG59O1xuXG5jb25zdCBmZXRjaEFkYXB0ZXIgPSBpc0ZldGNoU3VwcG9ydGVkICYmIChhc3luYyAoY29uZmlnKSA9PiB7XG4gIGxldCB7XG4gICAgdXJsLFxuICAgIG1ldGhvZCxcbiAgICBkYXRhLFxuICAgIHNpZ25hbCxcbiAgICBjYW5jZWxUb2tlbixcbiAgICB0aW1lb3V0LFxuICAgIG9uRG93bmxvYWRQcm9ncmVzcyxcbiAgICBvblVwbG9hZFByb2dyZXNzLFxuICAgIHJlc3BvbnNlVHlwZSxcbiAgICBoZWFkZXJzLFxuICAgIHdpdGhDcmVkZW50aWFscyA9ICdzYW1lLW9yaWdpbicsXG4gICAgZmV0Y2hPcHRpb25zXG4gIH0gPSByZXNvbHZlQ29uZmlnKGNvbmZpZyk7XG5cbiAgcmVzcG9uc2VUeXBlID0gcmVzcG9uc2VUeXBlID8gKHJlc3BvbnNlVHlwZSArICcnKS50b0xvd2VyQ2FzZSgpIDogJ3RleHQnO1xuXG4gIGxldCBbY29tcG9zZWRTaWduYWwsIHN0b3BUaW1lb3V0XSA9IChzaWduYWwgfHwgY2FuY2VsVG9rZW4gfHwgdGltZW91dCkgP1xuICAgIGNvbXBvc2VTaWduYWxzJDEoW3NpZ25hbCwgY2FuY2VsVG9rZW5dLCB0aW1lb3V0KSA6IFtdO1xuXG4gIGxldCBmaW5pc2hlZCwgcmVxdWVzdDtcblxuICBjb25zdCBvbkZpbmlzaCA9ICgpID0+IHtcbiAgICAhZmluaXNoZWQgJiYgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBjb21wb3NlZFNpZ25hbCAmJiBjb21wb3NlZFNpZ25hbC51bnN1YnNjcmliZSgpO1xuICAgIH0pO1xuXG4gICAgZmluaXNoZWQgPSB0cnVlO1xuICB9O1xuXG4gIGxldCByZXF1ZXN0Q29udGVudExlbmd0aDtcblxuICB0cnkge1xuICAgIGlmIChcbiAgICAgIG9uVXBsb2FkUHJvZ3Jlc3MgJiYgc3VwcG9ydHNSZXF1ZXN0U3RyZWFtICYmIG1ldGhvZCAhPT0gJ2dldCcgJiYgbWV0aG9kICE9PSAnaGVhZCcgJiZcbiAgICAgIChyZXF1ZXN0Q29udGVudExlbmd0aCA9IGF3YWl0IHJlc29sdmVCb2R5TGVuZ3RoKGhlYWRlcnMsIGRhdGEpKSAhPT0gMFxuICAgICkge1xuICAgICAgbGV0IF9yZXF1ZXN0ID0gbmV3IFJlcXVlc3QodXJsLCB7XG4gICAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgICBib2R5OiBkYXRhLFxuICAgICAgICBkdXBsZXg6IFwiaGFsZlwiXG4gICAgICB9KTtcblxuICAgICAgbGV0IGNvbnRlbnRUeXBlSGVhZGVyO1xuXG4gICAgICBpZiAodXRpbHMkMS5pc0Zvcm1EYXRhKGRhdGEpICYmIChjb250ZW50VHlwZUhlYWRlciA9IF9yZXF1ZXN0LmhlYWRlcnMuZ2V0KCdjb250ZW50LXR5cGUnKSkpIHtcbiAgICAgICAgaGVhZGVycy5zZXRDb250ZW50VHlwZShjb250ZW50VHlwZUhlYWRlcik7XG4gICAgICB9XG5cbiAgICAgIGlmIChfcmVxdWVzdC5ib2R5KSB7XG4gICAgICAgIGNvbnN0IFtvblByb2dyZXNzLCBmbHVzaF0gPSBwcm9ncmVzc0V2ZW50RGVjb3JhdG9yKFxuICAgICAgICAgIHJlcXVlc3RDb250ZW50TGVuZ3RoLFxuICAgICAgICAgIHByb2dyZXNzRXZlbnRSZWR1Y2VyKGFzeW5jRGVjb3JhdG9yKG9uVXBsb2FkUHJvZ3Jlc3MpKVxuICAgICAgICApO1xuXG4gICAgICAgIGRhdGEgPSB0cmFja1N0cmVhbShfcmVxdWVzdC5ib2R5LCBERUZBVUxUX0NIVU5LX1NJWkUsIG9uUHJvZ3Jlc3MsIGZsdXNoLCBlbmNvZGVUZXh0KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoIXV0aWxzJDEuaXNTdHJpbmcod2l0aENyZWRlbnRpYWxzKSkge1xuICAgICAgd2l0aENyZWRlbnRpYWxzID0gd2l0aENyZWRlbnRpYWxzID8gJ2luY2x1ZGUnIDogJ29taXQnO1xuICAgIH1cblxuICAgIHJlcXVlc3QgPSBuZXcgUmVxdWVzdCh1cmwsIHtcbiAgICAgIC4uLmZldGNoT3B0aW9ucyxcbiAgICAgIHNpZ25hbDogY29tcG9zZWRTaWduYWwsXG4gICAgICBtZXRob2Q6IG1ldGhvZC50b1VwcGVyQ2FzZSgpLFxuICAgICAgaGVhZGVyczogaGVhZGVycy5ub3JtYWxpemUoKS50b0pTT04oKSxcbiAgICAgIGJvZHk6IGRhdGEsXG4gICAgICBkdXBsZXg6IFwiaGFsZlwiLFxuICAgICAgY3JlZGVudGlhbHM6IHdpdGhDcmVkZW50aWFsc1xuICAgIH0pO1xuXG4gICAgbGV0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2gocmVxdWVzdCk7XG5cbiAgICBjb25zdCBpc1N0cmVhbVJlc3BvbnNlID0gc3VwcG9ydHNSZXNwb25zZVN0cmVhbSAmJiAocmVzcG9uc2VUeXBlID09PSAnc3RyZWFtJyB8fCByZXNwb25zZVR5cGUgPT09ICdyZXNwb25zZScpO1xuXG4gICAgaWYgKHN1cHBvcnRzUmVzcG9uc2VTdHJlYW0gJiYgKG9uRG93bmxvYWRQcm9ncmVzcyB8fCBpc1N0cmVhbVJlc3BvbnNlKSkge1xuICAgICAgY29uc3Qgb3B0aW9ucyA9IHt9O1xuXG4gICAgICBbJ3N0YXR1cycsICdzdGF0dXNUZXh0JywgJ2hlYWRlcnMnXS5mb3JFYWNoKHByb3AgPT4ge1xuICAgICAgICBvcHRpb25zW3Byb3BdID0gcmVzcG9uc2VbcHJvcF07XG4gICAgICB9KTtcblxuICAgICAgY29uc3QgcmVzcG9uc2VDb250ZW50TGVuZ3RoID0gdXRpbHMkMS50b0Zpbml0ZU51bWJlcihyZXNwb25zZS5oZWFkZXJzLmdldCgnY29udGVudC1sZW5ndGgnKSk7XG5cbiAgICAgIGNvbnN0IFtvblByb2dyZXNzLCBmbHVzaF0gPSBvbkRvd25sb2FkUHJvZ3Jlc3MgJiYgcHJvZ3Jlc3NFdmVudERlY29yYXRvcihcbiAgICAgICAgcmVzcG9uc2VDb250ZW50TGVuZ3RoLFxuICAgICAgICBwcm9ncmVzc0V2ZW50UmVkdWNlcihhc3luY0RlY29yYXRvcihvbkRvd25sb2FkUHJvZ3Jlc3MpLCB0cnVlKVxuICAgICAgKSB8fCBbXTtcblxuICAgICAgcmVzcG9uc2UgPSBuZXcgUmVzcG9uc2UoXG4gICAgICAgIHRyYWNrU3RyZWFtKHJlc3BvbnNlLmJvZHksIERFRkFVTFRfQ0hVTktfU0laRSwgb25Qcm9ncmVzcywgKCkgPT4ge1xuICAgICAgICAgIGZsdXNoICYmIGZsdXNoKCk7XG4gICAgICAgICAgaXNTdHJlYW1SZXNwb25zZSAmJiBvbkZpbmlzaCgpO1xuICAgICAgICB9LCBlbmNvZGVUZXh0KSxcbiAgICAgICAgb3B0aW9uc1xuICAgICAgKTtcbiAgICB9XG5cbiAgICByZXNwb25zZVR5cGUgPSByZXNwb25zZVR5cGUgfHwgJ3RleHQnO1xuXG4gICAgbGV0IHJlc3BvbnNlRGF0YSA9IGF3YWl0IHJlc29sdmVyc1t1dGlscyQxLmZpbmRLZXkocmVzb2x2ZXJzLCByZXNwb25zZVR5cGUpIHx8ICd0ZXh0J10ocmVzcG9uc2UsIGNvbmZpZyk7XG5cbiAgICAhaXNTdHJlYW1SZXNwb25zZSAmJiBvbkZpbmlzaCgpO1xuXG4gICAgc3RvcFRpbWVvdXQgJiYgc3RvcFRpbWVvdXQoKTtcblxuICAgIHJldHVybiBhd2FpdCBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBzZXR0bGUocmVzb2x2ZSwgcmVqZWN0LCB7XG4gICAgICAgIGRhdGE6IHJlc3BvbnNlRGF0YSxcbiAgICAgICAgaGVhZGVyczogQXhpb3NIZWFkZXJzJDEuZnJvbShyZXNwb25zZS5oZWFkZXJzKSxcbiAgICAgICAgc3RhdHVzOiByZXNwb25zZS5zdGF0dXMsXG4gICAgICAgIHN0YXR1c1RleHQ6IHJlc3BvbnNlLnN0YXR1c1RleHQsXG4gICAgICAgIGNvbmZpZyxcbiAgICAgICAgcmVxdWVzdFxuICAgICAgfSk7XG4gICAgfSlcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgb25GaW5pc2goKTtcblxuICAgIGlmIChlcnIgJiYgZXJyLm5hbWUgPT09ICdUeXBlRXJyb3InICYmIC9mZXRjaC9pLnRlc3QoZXJyLm1lc3NhZ2UpKSB7XG4gICAgICB0aHJvdyBPYmplY3QuYXNzaWduKFxuICAgICAgICBuZXcgQXhpb3NFcnJvcignTmV0d29yayBFcnJvcicsIEF4aW9zRXJyb3IuRVJSX05FVFdPUkssIGNvbmZpZywgcmVxdWVzdCksXG4gICAgICAgIHtcbiAgICAgICAgICBjYXVzZTogZXJyLmNhdXNlIHx8IGVyclxuICAgICAgICB9XG4gICAgICApXG4gICAgfVxuXG4gICAgdGhyb3cgQXhpb3NFcnJvci5mcm9tKGVyciwgZXJyICYmIGVyci5jb2RlLCBjb25maWcsIHJlcXVlc3QpO1xuICB9XG59KTtcblxuY29uc3Qga25vd25BZGFwdGVycyA9IHtcbiAgaHR0cDogaHR0cEFkYXB0ZXIsXG4gIHhocjogeGhyQWRhcHRlcixcbiAgZmV0Y2g6IGZldGNoQWRhcHRlclxufTtcblxudXRpbHMkMS5mb3JFYWNoKGtub3duQWRhcHRlcnMsIChmbiwgdmFsdWUpID0+IHtcbiAgaWYgKGZuKSB7XG4gICAgdHJ5IHtcbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShmbiwgJ25hbWUnLCB7dmFsdWV9KTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tZW1wdHlcbiAgICB9XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGZuLCAnYWRhcHRlck5hbWUnLCB7dmFsdWV9KTtcbiAgfVxufSk7XG5cbmNvbnN0IHJlbmRlclJlYXNvbiA9IChyZWFzb24pID0+IGAtICR7cmVhc29ufWA7XG5cbmNvbnN0IGlzUmVzb2x2ZWRIYW5kbGUgPSAoYWRhcHRlcikgPT4gdXRpbHMkMS5pc0Z1bmN0aW9uKGFkYXB0ZXIpIHx8IGFkYXB0ZXIgPT09IG51bGwgfHwgYWRhcHRlciA9PT0gZmFsc2U7XG5cbmNvbnN0IGFkYXB0ZXJzID0ge1xuICBnZXRBZGFwdGVyOiAoYWRhcHRlcnMpID0+IHtcbiAgICBhZGFwdGVycyA9IHV0aWxzJDEuaXNBcnJheShhZGFwdGVycykgPyBhZGFwdGVycyA6IFthZGFwdGVyc107XG5cbiAgICBjb25zdCB7bGVuZ3RofSA9IGFkYXB0ZXJzO1xuICAgIGxldCBuYW1lT3JBZGFwdGVyO1xuICAgIGxldCBhZGFwdGVyO1xuXG4gICAgY29uc3QgcmVqZWN0ZWRSZWFzb25zID0ge307XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICBuYW1lT3JBZGFwdGVyID0gYWRhcHRlcnNbaV07XG4gICAgICBsZXQgaWQ7XG5cbiAgICAgIGFkYXB0ZXIgPSBuYW1lT3JBZGFwdGVyO1xuXG4gICAgICBpZiAoIWlzUmVzb2x2ZWRIYW5kbGUobmFtZU9yQWRhcHRlcikpIHtcbiAgICAgICAgYWRhcHRlciA9IGtub3duQWRhcHRlcnNbKGlkID0gU3RyaW5nKG5hbWVPckFkYXB0ZXIpKS50b0xvd2VyQ2FzZSgpXTtcblxuICAgICAgICBpZiAoYWRhcHRlciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEF4aW9zRXJyb3IoYFVua25vd24gYWRhcHRlciAnJHtpZH0nYCk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKGFkYXB0ZXIpIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICAgIHJlamVjdGVkUmVhc29uc1tpZCB8fCAnIycgKyBpXSA9IGFkYXB0ZXI7XG4gICAgfVxuXG4gICAgaWYgKCFhZGFwdGVyKSB7XG5cbiAgICAgIGNvbnN0IHJlYXNvbnMgPSBPYmplY3QuZW50cmllcyhyZWplY3RlZFJlYXNvbnMpXG4gICAgICAgIC5tYXAoKFtpZCwgc3RhdGVdKSA9PiBgYWRhcHRlciAke2lkfSBgICtcbiAgICAgICAgICAoc3RhdGUgPT09IGZhbHNlID8gJ2lzIG5vdCBzdXBwb3J0ZWQgYnkgdGhlIGVudmlyb25tZW50JyA6ICdpcyBub3QgYXZhaWxhYmxlIGluIHRoZSBidWlsZCcpXG4gICAgICAgICk7XG5cbiAgICAgIGxldCBzID0gbGVuZ3RoID9cbiAgICAgICAgKHJlYXNvbnMubGVuZ3RoID4gMSA/ICdzaW5jZSA6XFxuJyArIHJlYXNvbnMubWFwKHJlbmRlclJlYXNvbikuam9pbignXFxuJykgOiAnICcgKyByZW5kZXJSZWFzb24ocmVhc29uc1swXSkpIDpcbiAgICAgICAgJ2FzIG5vIGFkYXB0ZXIgc3BlY2lmaWVkJztcblxuICAgICAgdGhyb3cgbmV3IEF4aW9zRXJyb3IoXG4gICAgICAgIGBUaGVyZSBpcyBubyBzdWl0YWJsZSBhZGFwdGVyIHRvIGRpc3BhdGNoIHRoZSByZXF1ZXN0IGAgKyBzLFxuICAgICAgICAnRVJSX05PVF9TVVBQT1JUJ1xuICAgICAgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gYWRhcHRlcjtcbiAgfSxcbiAgYWRhcHRlcnM6IGtub3duQWRhcHRlcnNcbn07XG5cbi8qKlxuICogVGhyb3dzIGEgYENhbmNlbGVkRXJyb3JgIGlmIGNhbmNlbGxhdGlvbiBoYXMgYmVlbiByZXF1ZXN0ZWQuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGNvbmZpZyBUaGUgY29uZmlnIHRoYXQgaXMgdG8gYmUgdXNlZCBmb3IgdGhlIHJlcXVlc3RcbiAqXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuZnVuY3Rpb24gdGhyb3dJZkNhbmNlbGxhdGlvblJlcXVlc3RlZChjb25maWcpIHtcbiAgaWYgKGNvbmZpZy5jYW5jZWxUb2tlbikge1xuICAgIGNvbmZpZy5jYW5jZWxUb2tlbi50aHJvd0lmUmVxdWVzdGVkKCk7XG4gIH1cblxuICBpZiAoY29uZmlnLnNpZ25hbCAmJiBjb25maWcuc2lnbmFsLmFib3J0ZWQpIHtcbiAgICB0aHJvdyBuZXcgQ2FuY2VsZWRFcnJvcihudWxsLCBjb25maWcpO1xuICB9XG59XG5cbi8qKlxuICogRGlzcGF0Y2ggYSByZXF1ZXN0IHRvIHRoZSBzZXJ2ZXIgdXNpbmcgdGhlIGNvbmZpZ3VyZWQgYWRhcHRlci5cbiAqXG4gKiBAcGFyYW0ge29iamVjdH0gY29uZmlnIFRoZSBjb25maWcgdGhhdCBpcyB0byBiZSB1c2VkIGZvciB0aGUgcmVxdWVzdFxuICpcbiAqIEByZXR1cm5zIHtQcm9taXNlfSBUaGUgUHJvbWlzZSB0byBiZSBmdWxmaWxsZWRcbiAqL1xuZnVuY3Rpb24gZGlzcGF0Y2hSZXF1ZXN0KGNvbmZpZykge1xuICB0aHJvd0lmQ2FuY2VsbGF0aW9uUmVxdWVzdGVkKGNvbmZpZyk7XG5cbiAgY29uZmlnLmhlYWRlcnMgPSBBeGlvc0hlYWRlcnMkMS5mcm9tKGNvbmZpZy5oZWFkZXJzKTtcblxuICAvLyBUcmFuc2Zvcm0gcmVxdWVzdCBkYXRhXG4gIGNvbmZpZy5kYXRhID0gdHJhbnNmb3JtRGF0YS5jYWxsKFxuICAgIGNvbmZpZyxcbiAgICBjb25maWcudHJhbnNmb3JtUmVxdWVzdFxuICApO1xuXG4gIGlmIChbJ3Bvc3QnLCAncHV0JywgJ3BhdGNoJ10uaW5kZXhPZihjb25maWcubWV0aG9kKSAhPT0gLTEpIHtcbiAgICBjb25maWcuaGVhZGVycy5zZXRDb250ZW50VHlwZSgnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJywgZmFsc2UpO1xuICB9XG5cbiAgY29uc3QgYWRhcHRlciA9IGFkYXB0ZXJzLmdldEFkYXB0ZXIoY29uZmlnLmFkYXB0ZXIgfHwgZGVmYXVsdHMkMS5hZGFwdGVyKTtcblxuICByZXR1cm4gYWRhcHRlcihjb25maWcpLnRoZW4oZnVuY3Rpb24gb25BZGFwdGVyUmVzb2x1dGlvbihyZXNwb25zZSkge1xuICAgIHRocm93SWZDYW5jZWxsYXRpb25SZXF1ZXN0ZWQoY29uZmlnKTtcblxuICAgIC8vIFRyYW5zZm9ybSByZXNwb25zZSBkYXRhXG4gICAgcmVzcG9uc2UuZGF0YSA9IHRyYW5zZm9ybURhdGEuY2FsbChcbiAgICAgIGNvbmZpZyxcbiAgICAgIGNvbmZpZy50cmFuc2Zvcm1SZXNwb25zZSxcbiAgICAgIHJlc3BvbnNlXG4gICAgKTtcblxuICAgIHJlc3BvbnNlLmhlYWRlcnMgPSBBeGlvc0hlYWRlcnMkMS5mcm9tKHJlc3BvbnNlLmhlYWRlcnMpO1xuXG4gICAgcmV0dXJuIHJlc3BvbnNlO1xuICB9LCBmdW5jdGlvbiBvbkFkYXB0ZXJSZWplY3Rpb24ocmVhc29uKSB7XG4gICAgaWYgKCFpc0NhbmNlbChyZWFzb24pKSB7XG4gICAgICB0aHJvd0lmQ2FuY2VsbGF0aW9uUmVxdWVzdGVkKGNvbmZpZyk7XG5cbiAgICAgIC8vIFRyYW5zZm9ybSByZXNwb25zZSBkYXRhXG4gICAgICBpZiAocmVhc29uICYmIHJlYXNvbi5yZXNwb25zZSkge1xuICAgICAgICByZWFzb24ucmVzcG9uc2UuZGF0YSA9IHRyYW5zZm9ybURhdGEuY2FsbChcbiAgICAgICAgICBjb25maWcsXG4gICAgICAgICAgY29uZmlnLnRyYW5zZm9ybVJlc3BvbnNlLFxuICAgICAgICAgIHJlYXNvbi5yZXNwb25zZVxuICAgICAgICApO1xuICAgICAgICByZWFzb24ucmVzcG9uc2UuaGVhZGVycyA9IEF4aW9zSGVhZGVycyQxLmZyb20ocmVhc29uLnJlc3BvbnNlLmhlYWRlcnMpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBQcm9taXNlLnJlamVjdChyZWFzb24pO1xuICB9KTtcbn1cblxuY29uc3QgdmFsaWRhdG9ycyQxID0ge307XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBmdW5jLW5hbWVzXG5bJ29iamVjdCcsICdib29sZWFuJywgJ251bWJlcicsICdmdW5jdGlvbicsICdzdHJpbmcnLCAnc3ltYm9sJ10uZm9yRWFjaCgodHlwZSwgaSkgPT4ge1xuICB2YWxpZGF0b3JzJDFbdHlwZV0gPSBmdW5jdGlvbiB2YWxpZGF0b3IodGhpbmcpIHtcbiAgICByZXR1cm4gdHlwZW9mIHRoaW5nID09PSB0eXBlIHx8ICdhJyArIChpIDwgMSA/ICduICcgOiAnICcpICsgdHlwZTtcbiAgfTtcbn0pO1xuXG5jb25zdCBkZXByZWNhdGVkV2FybmluZ3MgPSB7fTtcblxuLyoqXG4gKiBUcmFuc2l0aW9uYWwgb3B0aW9uIHZhbGlkYXRvclxuICpcbiAqIEBwYXJhbSB7ZnVuY3Rpb258Ym9vbGVhbj99IHZhbGlkYXRvciAtIHNldCB0byBmYWxzZSBpZiB0aGUgdHJhbnNpdGlvbmFsIG9wdGlvbiBoYXMgYmVlbiByZW1vdmVkXG4gKiBAcGFyYW0ge3N0cmluZz99IHZlcnNpb24gLSBkZXByZWNhdGVkIHZlcnNpb24gLyByZW1vdmVkIHNpbmNlIHZlcnNpb25cbiAqIEBwYXJhbSB7c3RyaW5nP30gbWVzc2FnZSAtIHNvbWUgbWVzc2FnZSB3aXRoIGFkZGl0aW9uYWwgaW5mb1xuICpcbiAqIEByZXR1cm5zIHtmdW5jdGlvbn1cbiAqL1xudmFsaWRhdG9ycyQxLnRyYW5zaXRpb25hbCA9IGZ1bmN0aW9uIHRyYW5zaXRpb25hbCh2YWxpZGF0b3IsIHZlcnNpb24sIG1lc3NhZ2UpIHtcbiAgZnVuY3Rpb24gZm9ybWF0TWVzc2FnZShvcHQsIGRlc2MpIHtcbiAgICByZXR1cm4gJ1tBeGlvcyB2JyArIFZFUlNJT04gKyAnXSBUcmFuc2l0aW9uYWwgb3B0aW9uIFxcJycgKyBvcHQgKyAnXFwnJyArIGRlc2MgKyAobWVzc2FnZSA/ICcuICcgKyBtZXNzYWdlIDogJycpO1xuICB9XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGZ1bmMtbmFtZXNcbiAgcmV0dXJuICh2YWx1ZSwgb3B0LCBvcHRzKSA9PiB7XG4gICAgaWYgKHZhbGlkYXRvciA9PT0gZmFsc2UpIHtcbiAgICAgIHRocm93IG5ldyBBeGlvc0Vycm9yKFxuICAgICAgICBmb3JtYXRNZXNzYWdlKG9wdCwgJyBoYXMgYmVlbiByZW1vdmVkJyArICh2ZXJzaW9uID8gJyBpbiAnICsgdmVyc2lvbiA6ICcnKSksXG4gICAgICAgIEF4aW9zRXJyb3IuRVJSX0RFUFJFQ0FURURcbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKHZlcnNpb24gJiYgIWRlcHJlY2F0ZWRXYXJuaW5nc1tvcHRdKSB7XG4gICAgICBkZXByZWNhdGVkV2FybmluZ3Nbb3B0XSA9IHRydWU7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICBmb3JtYXRNZXNzYWdlKFxuICAgICAgICAgIG9wdCxcbiAgICAgICAgICAnIGhhcyBiZWVuIGRlcHJlY2F0ZWQgc2luY2UgdicgKyB2ZXJzaW9uICsgJyBhbmQgd2lsbCBiZSByZW1vdmVkIGluIHRoZSBuZWFyIGZ1dHVyZSdcbiAgICAgICAgKVxuICAgICAgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdmFsaWRhdG9yID8gdmFsaWRhdG9yKHZhbHVlLCBvcHQsIG9wdHMpIDogdHJ1ZTtcbiAgfTtcbn07XG5cbi8qKlxuICogQXNzZXJ0IG9iamVjdCdzIHByb3BlcnRpZXMgdHlwZVxuICpcbiAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zXG4gKiBAcGFyYW0ge29iamVjdH0gc2NoZW1hXG4gKiBAcGFyYW0ge2Jvb2xlYW4/fSBhbGxvd1Vua25vd25cbiAqXG4gKiBAcmV0dXJucyB7b2JqZWN0fVxuICovXG5cbmZ1bmN0aW9uIGFzc2VydE9wdGlvbnMob3B0aW9ucywgc2NoZW1hLCBhbGxvd1Vua25vd24pIHtcbiAgaWYgKHR5cGVvZiBvcHRpb25zICE9PSAnb2JqZWN0Jykge1xuICAgIHRocm93IG5ldyBBeGlvc0Vycm9yKCdvcHRpb25zIG11c3QgYmUgYW4gb2JqZWN0JywgQXhpb3NFcnJvci5FUlJfQkFEX09QVElPTl9WQUxVRSk7XG4gIH1cbiAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKG9wdGlvbnMpO1xuICBsZXQgaSA9IGtleXMubGVuZ3RoO1xuICB3aGlsZSAoaS0tID4gMCkge1xuICAgIGNvbnN0IG9wdCA9IGtleXNbaV07XG4gICAgY29uc3QgdmFsaWRhdG9yID0gc2NoZW1hW29wdF07XG4gICAgaWYgKHZhbGlkYXRvcikge1xuICAgICAgY29uc3QgdmFsdWUgPSBvcHRpb25zW29wdF07XG4gICAgICBjb25zdCByZXN1bHQgPSB2YWx1ZSA9PT0gdW5kZWZpbmVkIHx8IHZhbGlkYXRvcih2YWx1ZSwgb3B0LCBvcHRpb25zKTtcbiAgICAgIGlmIChyZXN1bHQgIT09IHRydWUpIHtcbiAgICAgICAgdGhyb3cgbmV3IEF4aW9zRXJyb3IoJ29wdGlvbiAnICsgb3B0ICsgJyBtdXN0IGJlICcgKyByZXN1bHQsIEF4aW9zRXJyb3IuRVJSX0JBRF9PUFRJT05fVkFMVUUpO1xuICAgICAgfVxuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGlmIChhbGxvd1Vua25vd24gIT09IHRydWUpIHtcbiAgICAgIHRocm93IG5ldyBBeGlvc0Vycm9yKCdVbmtub3duIG9wdGlvbiAnICsgb3B0LCBBeGlvc0Vycm9yLkVSUl9CQURfT1BUSU9OKTtcbiAgICB9XG4gIH1cbn1cblxuY29uc3QgdmFsaWRhdG9yID0ge1xuICBhc3NlcnRPcHRpb25zLFxuICB2YWxpZGF0b3JzOiB2YWxpZGF0b3JzJDFcbn07XG5cbmNvbnN0IHZhbGlkYXRvcnMgPSB2YWxpZGF0b3IudmFsaWRhdG9ycztcblxuLyoqXG4gKiBDcmVhdGUgYSBuZXcgaW5zdGFuY2Ugb2YgQXhpb3NcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gaW5zdGFuY2VDb25maWcgVGhlIGRlZmF1bHQgY29uZmlnIGZvciB0aGUgaW5zdGFuY2VcbiAqXG4gKiBAcmV0dXJuIHtBeGlvc30gQSBuZXcgaW5zdGFuY2Ugb2YgQXhpb3NcbiAqL1xuY2xhc3MgQXhpb3Mge1xuICBjb25zdHJ1Y3RvcihpbnN0YW5jZUNvbmZpZykge1xuICAgIHRoaXMuZGVmYXVsdHMgPSBpbnN0YW5jZUNvbmZpZztcbiAgICB0aGlzLmludGVyY2VwdG9ycyA9IHtcbiAgICAgIHJlcXVlc3Q6IG5ldyBJbnRlcmNlcHRvck1hbmFnZXIkMSgpLFxuICAgICAgcmVzcG9uc2U6IG5ldyBJbnRlcmNlcHRvck1hbmFnZXIkMSgpXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEaXNwYXRjaCBhIHJlcXVlc3RcbiAgICpcbiAgICogQHBhcmFtIHtTdHJpbmd8T2JqZWN0fSBjb25maWdPclVybCBUaGUgY29uZmlnIHNwZWNpZmljIGZvciB0aGlzIHJlcXVlc3QgKG1lcmdlZCB3aXRoIHRoaXMuZGVmYXVsdHMpXG4gICAqIEBwYXJhbSB7P09iamVjdH0gY29uZmlnXG4gICAqXG4gICAqIEByZXR1cm5zIHtQcm9taXNlfSBUaGUgUHJvbWlzZSB0byBiZSBmdWxmaWxsZWRcbiAgICovXG4gIGFzeW5jIHJlcXVlc3QoY29uZmlnT3JVcmwsIGNvbmZpZykge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gYXdhaXQgdGhpcy5fcmVxdWVzdChjb25maWdPclVybCwgY29uZmlnKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGlmIChlcnIgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgICBsZXQgZHVtbXk7XG5cbiAgICAgICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UgPyBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZShkdW1teSA9IHt9KSA6IChkdW1teSA9IG5ldyBFcnJvcigpKTtcblxuICAgICAgICAvLyBzbGljZSBvZmYgdGhlIEVycm9yOiAuLi4gbGluZVxuICAgICAgICBjb25zdCBzdGFjayA9IGR1bW15LnN0YWNrID8gZHVtbXkuc3RhY2sucmVwbGFjZSgvXi4rXFxuLywgJycpIDogJyc7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgaWYgKCFlcnIuc3RhY2spIHtcbiAgICAgICAgICAgIGVyci5zdGFjayA9IHN0YWNrO1xuICAgICAgICAgICAgLy8gbWF0Y2ggd2l0aG91dCB0aGUgMiB0b3Agc3RhY2sgbGluZXNcbiAgICAgICAgICB9IGVsc2UgaWYgKHN0YWNrICYmICFTdHJpbmcoZXJyLnN0YWNrKS5lbmRzV2l0aChzdGFjay5yZXBsYWNlKC9eLitcXG4uK1xcbi8sICcnKSkpIHtcbiAgICAgICAgICAgIGVyci5zdGFjayArPSAnXFxuJyArIHN0YWNrO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgIC8vIGlnbm9yZSB0aGUgY2FzZSB3aGVyZSBcInN0YWNrXCIgaXMgYW4gdW4td3JpdGFibGUgcHJvcGVydHlcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB0aHJvdyBlcnI7XG4gICAgfVxuICB9XG5cbiAgX3JlcXVlc3QoY29uZmlnT3JVcmwsIGNvbmZpZykge1xuICAgIC8qZXNsaW50IG5vLXBhcmFtLXJlYXNzaWduOjAqL1xuICAgIC8vIEFsbG93IGZvciBheGlvcygnZXhhbXBsZS91cmwnWywgY29uZmlnXSkgYSBsYSBmZXRjaCBBUElcbiAgICBpZiAodHlwZW9mIGNvbmZpZ09yVXJsID09PSAnc3RyaW5nJykge1xuICAgICAgY29uZmlnID0gY29uZmlnIHx8IHt9O1xuICAgICAgY29uZmlnLnVybCA9IGNvbmZpZ09yVXJsO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25maWcgPSBjb25maWdPclVybCB8fCB7fTtcbiAgICB9XG5cbiAgICBjb25maWcgPSBtZXJnZUNvbmZpZyh0aGlzLmRlZmF1bHRzLCBjb25maWcpO1xuXG4gICAgY29uc3Qge3RyYW5zaXRpb25hbCwgcGFyYW1zU2VyaWFsaXplciwgaGVhZGVyc30gPSBjb25maWc7XG5cbiAgICBpZiAodHJhbnNpdGlvbmFsICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHZhbGlkYXRvci5hc3NlcnRPcHRpb25zKHRyYW5zaXRpb25hbCwge1xuICAgICAgICBzaWxlbnRKU09OUGFyc2luZzogdmFsaWRhdG9ycy50cmFuc2l0aW9uYWwodmFsaWRhdG9ycy5ib29sZWFuKSxcbiAgICAgICAgZm9yY2VkSlNPTlBhcnNpbmc6IHZhbGlkYXRvcnMudHJhbnNpdGlvbmFsKHZhbGlkYXRvcnMuYm9vbGVhbiksXG4gICAgICAgIGNsYXJpZnlUaW1lb3V0RXJyb3I6IHZhbGlkYXRvcnMudHJhbnNpdGlvbmFsKHZhbGlkYXRvcnMuYm9vbGVhbilcbiAgICAgIH0sIGZhbHNlKTtcbiAgICB9XG5cbiAgICBpZiAocGFyYW1zU2VyaWFsaXplciAhPSBudWxsKSB7XG4gICAgICBpZiAodXRpbHMkMS5pc0Z1bmN0aW9uKHBhcmFtc1NlcmlhbGl6ZXIpKSB7XG4gICAgICAgIGNvbmZpZy5wYXJhbXNTZXJpYWxpemVyID0ge1xuICAgICAgICAgIHNlcmlhbGl6ZTogcGFyYW1zU2VyaWFsaXplclxuICAgICAgICB9O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFsaWRhdG9yLmFzc2VydE9wdGlvbnMocGFyYW1zU2VyaWFsaXplciwge1xuICAgICAgICAgIGVuY29kZTogdmFsaWRhdG9ycy5mdW5jdGlvbixcbiAgICAgICAgICBzZXJpYWxpemU6IHZhbGlkYXRvcnMuZnVuY3Rpb25cbiAgICAgICAgfSwgdHJ1ZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gU2V0IGNvbmZpZy5tZXRob2RcbiAgICBjb25maWcubWV0aG9kID0gKGNvbmZpZy5tZXRob2QgfHwgdGhpcy5kZWZhdWx0cy5tZXRob2QgfHwgJ2dldCcpLnRvTG93ZXJDYXNlKCk7XG5cbiAgICAvLyBGbGF0dGVuIGhlYWRlcnNcbiAgICBsZXQgY29udGV4dEhlYWRlcnMgPSBoZWFkZXJzICYmIHV0aWxzJDEubWVyZ2UoXG4gICAgICBoZWFkZXJzLmNvbW1vbixcbiAgICAgIGhlYWRlcnNbY29uZmlnLm1ldGhvZF1cbiAgICApO1xuXG4gICAgaGVhZGVycyAmJiB1dGlscyQxLmZvckVhY2goXG4gICAgICBbJ2RlbGV0ZScsICdnZXQnLCAnaGVhZCcsICdwb3N0JywgJ3B1dCcsICdwYXRjaCcsICdjb21tb24nXSxcbiAgICAgIChtZXRob2QpID0+IHtcbiAgICAgICAgZGVsZXRlIGhlYWRlcnNbbWV0aG9kXTtcbiAgICAgIH1cbiAgICApO1xuXG4gICAgY29uZmlnLmhlYWRlcnMgPSBBeGlvc0hlYWRlcnMkMS5jb25jYXQoY29udGV4dEhlYWRlcnMsIGhlYWRlcnMpO1xuXG4gICAgLy8gZmlsdGVyIG91dCBza2lwcGVkIGludGVyY2VwdG9yc1xuICAgIGNvbnN0IHJlcXVlc3RJbnRlcmNlcHRvckNoYWluID0gW107XG4gICAgbGV0IHN5bmNocm9ub3VzUmVxdWVzdEludGVyY2VwdG9ycyA9IHRydWU7XG4gICAgdGhpcy5pbnRlcmNlcHRvcnMucmVxdWVzdC5mb3JFYWNoKGZ1bmN0aW9uIHVuc2hpZnRSZXF1ZXN0SW50ZXJjZXB0b3JzKGludGVyY2VwdG9yKSB7XG4gICAgICBpZiAodHlwZW9mIGludGVyY2VwdG9yLnJ1bldoZW4gPT09ICdmdW5jdGlvbicgJiYgaW50ZXJjZXB0b3IucnVuV2hlbihjb25maWcpID09PSBmYWxzZSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHN5bmNocm9ub3VzUmVxdWVzdEludGVyY2VwdG9ycyA9IHN5bmNocm9ub3VzUmVxdWVzdEludGVyY2VwdG9ycyAmJiBpbnRlcmNlcHRvci5zeW5jaHJvbm91cztcblxuICAgICAgcmVxdWVzdEludGVyY2VwdG9yQ2hhaW4udW5zaGlmdChpbnRlcmNlcHRvci5mdWxmaWxsZWQsIGludGVyY2VwdG9yLnJlamVjdGVkKTtcbiAgICB9KTtcblxuICAgIGNvbnN0IHJlc3BvbnNlSW50ZXJjZXB0b3JDaGFpbiA9IFtdO1xuICAgIHRoaXMuaW50ZXJjZXB0b3JzLnJlc3BvbnNlLmZvckVhY2goZnVuY3Rpb24gcHVzaFJlc3BvbnNlSW50ZXJjZXB0b3JzKGludGVyY2VwdG9yKSB7XG4gICAgICByZXNwb25zZUludGVyY2VwdG9yQ2hhaW4ucHVzaChpbnRlcmNlcHRvci5mdWxmaWxsZWQsIGludGVyY2VwdG9yLnJlamVjdGVkKTtcbiAgICB9KTtcblxuICAgIGxldCBwcm9taXNlO1xuICAgIGxldCBpID0gMDtcbiAgICBsZXQgbGVuO1xuXG4gICAgaWYgKCFzeW5jaHJvbm91c1JlcXVlc3RJbnRlcmNlcHRvcnMpIHtcbiAgICAgIGNvbnN0IGNoYWluID0gW2Rpc3BhdGNoUmVxdWVzdC5iaW5kKHRoaXMpLCB1bmRlZmluZWRdO1xuICAgICAgY2hhaW4udW5zaGlmdC5hcHBseShjaGFpbiwgcmVxdWVzdEludGVyY2VwdG9yQ2hhaW4pO1xuICAgICAgY2hhaW4ucHVzaC5hcHBseShjaGFpbiwgcmVzcG9uc2VJbnRlcmNlcHRvckNoYWluKTtcbiAgICAgIGxlbiA9IGNoYWluLmxlbmd0aDtcblxuICAgICAgcHJvbWlzZSA9IFByb21pc2UucmVzb2x2ZShjb25maWcpO1xuXG4gICAgICB3aGlsZSAoaSA8IGxlbikge1xuICAgICAgICBwcm9taXNlID0gcHJvbWlzZS50aGVuKGNoYWluW2krK10sIGNoYWluW2krK10pO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gcHJvbWlzZTtcbiAgICB9XG5cbiAgICBsZW4gPSByZXF1ZXN0SW50ZXJjZXB0b3JDaGFpbi5sZW5ndGg7XG5cbiAgICBsZXQgbmV3Q29uZmlnID0gY29uZmlnO1xuXG4gICAgaSA9IDA7XG5cbiAgICB3aGlsZSAoaSA8IGxlbikge1xuICAgICAgY29uc3Qgb25GdWxmaWxsZWQgPSByZXF1ZXN0SW50ZXJjZXB0b3JDaGFpbltpKytdO1xuICAgICAgY29uc3Qgb25SZWplY3RlZCA9IHJlcXVlc3RJbnRlcmNlcHRvckNoYWluW2krK107XG4gICAgICB0cnkge1xuICAgICAgICBuZXdDb25maWcgPSBvbkZ1bGZpbGxlZChuZXdDb25maWcpO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgb25SZWplY3RlZC5jYWxsKHRoaXMsIGVycm9yKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIHByb21pc2UgPSBkaXNwYXRjaFJlcXVlc3QuY2FsbCh0aGlzLCBuZXdDb25maWcpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoZXJyb3IpO1xuICAgIH1cblxuICAgIGkgPSAwO1xuICAgIGxlbiA9IHJlc3BvbnNlSW50ZXJjZXB0b3JDaGFpbi5sZW5ndGg7XG5cbiAgICB3aGlsZSAoaSA8IGxlbikge1xuICAgICAgcHJvbWlzZSA9IHByb21pc2UudGhlbihyZXNwb25zZUludGVyY2VwdG9yQ2hhaW5baSsrXSwgcmVzcG9uc2VJbnRlcmNlcHRvckNoYWluW2krK10pO1xuICAgIH1cblxuICAgIHJldHVybiBwcm9taXNlO1xuICB9XG5cbiAgZ2V0VXJpKGNvbmZpZykge1xuICAgIGNvbmZpZyA9IG1lcmdlQ29uZmlnKHRoaXMuZGVmYXVsdHMsIGNvbmZpZyk7XG4gICAgY29uc3QgZnVsbFBhdGggPSBidWlsZEZ1bGxQYXRoKGNvbmZpZy5iYXNlVVJMLCBjb25maWcudXJsKTtcbiAgICByZXR1cm4gYnVpbGRVUkwoZnVsbFBhdGgsIGNvbmZpZy5wYXJhbXMsIGNvbmZpZy5wYXJhbXNTZXJpYWxpemVyKTtcbiAgfVxufVxuXG4vLyBQcm92aWRlIGFsaWFzZXMgZm9yIHN1cHBvcnRlZCByZXF1ZXN0IG1ldGhvZHNcbnV0aWxzJDEuZm9yRWFjaChbJ2RlbGV0ZScsICdnZXQnLCAnaGVhZCcsICdvcHRpb25zJ10sIGZ1bmN0aW9uIGZvckVhY2hNZXRob2ROb0RhdGEobWV0aG9kKSB7XG4gIC8qZXNsaW50IGZ1bmMtbmFtZXM6MCovXG4gIEF4aW9zLnByb3RvdHlwZVttZXRob2RdID0gZnVuY3Rpb24odXJsLCBjb25maWcpIHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0KG1lcmdlQ29uZmlnKGNvbmZpZyB8fCB7fSwge1xuICAgICAgbWV0aG9kLFxuICAgICAgdXJsLFxuICAgICAgZGF0YTogKGNvbmZpZyB8fCB7fSkuZGF0YVxuICAgIH0pKTtcbiAgfTtcbn0pO1xuXG51dGlscyQxLmZvckVhY2goWydwb3N0JywgJ3B1dCcsICdwYXRjaCddLCBmdW5jdGlvbiBmb3JFYWNoTWV0aG9kV2l0aERhdGEobWV0aG9kKSB7XG4gIC8qZXNsaW50IGZ1bmMtbmFtZXM6MCovXG5cbiAgZnVuY3Rpb24gZ2VuZXJhdGVIVFRQTWV0aG9kKGlzRm9ybSkge1xuICAgIHJldHVybiBmdW5jdGlvbiBodHRwTWV0aG9kKHVybCwgZGF0YSwgY29uZmlnKSB7XG4gICAgICByZXR1cm4gdGhpcy5yZXF1ZXN0KG1lcmdlQ29uZmlnKGNvbmZpZyB8fCB7fSwge1xuICAgICAgICBtZXRob2QsXG4gICAgICAgIGhlYWRlcnM6IGlzRm9ybSA/IHtcbiAgICAgICAgICAnQ29udGVudC1UeXBlJzogJ211bHRpcGFydC9mb3JtLWRhdGEnXG4gICAgICAgIH0gOiB7fSxcbiAgICAgICAgdXJsLFxuICAgICAgICBkYXRhXG4gICAgICB9KSk7XG4gICAgfTtcbiAgfVxuXG4gIEF4aW9zLnByb3RvdHlwZVttZXRob2RdID0gZ2VuZXJhdGVIVFRQTWV0aG9kKCk7XG5cbiAgQXhpb3MucHJvdG90eXBlW21ldGhvZCArICdGb3JtJ10gPSBnZW5lcmF0ZUhUVFBNZXRob2QodHJ1ZSk7XG59KTtcblxuY29uc3QgQXhpb3MkMSA9IEF4aW9zO1xuXG4vKipcbiAqIEEgYENhbmNlbFRva2VuYCBpcyBhbiBvYmplY3QgdGhhdCBjYW4gYmUgdXNlZCB0byByZXF1ZXN0IGNhbmNlbGxhdGlvbiBvZiBhbiBvcGVyYXRpb24uXG4gKlxuICogQHBhcmFtIHtGdW5jdGlvbn0gZXhlY3V0b3IgVGhlIGV4ZWN1dG9yIGZ1bmN0aW9uLlxuICpcbiAqIEByZXR1cm5zIHtDYW5jZWxUb2tlbn1cbiAqL1xuY2xhc3MgQ2FuY2VsVG9rZW4ge1xuICBjb25zdHJ1Y3RvcihleGVjdXRvcikge1xuICAgIGlmICh0eXBlb2YgZXhlY3V0b3IgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ2V4ZWN1dG9yIG11c3QgYmUgYSBmdW5jdGlvbi4nKTtcbiAgICB9XG5cbiAgICBsZXQgcmVzb2x2ZVByb21pc2U7XG5cbiAgICB0aGlzLnByb21pc2UgPSBuZXcgUHJvbWlzZShmdW5jdGlvbiBwcm9taXNlRXhlY3V0b3IocmVzb2x2ZSkge1xuICAgICAgcmVzb2x2ZVByb21pc2UgPSByZXNvbHZlO1xuICAgIH0pO1xuXG4gICAgY29uc3QgdG9rZW4gPSB0aGlzO1xuXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGZ1bmMtbmFtZXNcbiAgICB0aGlzLnByb21pc2UudGhlbihjYW5jZWwgPT4ge1xuICAgICAgaWYgKCF0b2tlbi5fbGlzdGVuZXJzKSByZXR1cm47XG5cbiAgICAgIGxldCBpID0gdG9rZW4uX2xpc3RlbmVycy5sZW5ndGg7XG5cbiAgICAgIHdoaWxlIChpLS0gPiAwKSB7XG4gICAgICAgIHRva2VuLl9saXN0ZW5lcnNbaV0oY2FuY2VsKTtcbiAgICAgIH1cbiAgICAgIHRva2VuLl9saXN0ZW5lcnMgPSBudWxsO1xuICAgIH0pO1xuXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGZ1bmMtbmFtZXNcbiAgICB0aGlzLnByb21pc2UudGhlbiA9IG9uZnVsZmlsbGVkID0+IHtcbiAgICAgIGxldCBfcmVzb2x2ZTtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBmdW5jLW5hbWVzXG4gICAgICBjb25zdCBwcm9taXNlID0gbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XG4gICAgICAgIHRva2VuLnN1YnNjcmliZShyZXNvbHZlKTtcbiAgICAgICAgX3Jlc29sdmUgPSByZXNvbHZlO1xuICAgICAgfSkudGhlbihvbmZ1bGZpbGxlZCk7XG5cbiAgICAgIHByb21pc2UuY2FuY2VsID0gZnVuY3Rpb24gcmVqZWN0KCkge1xuICAgICAgICB0b2tlbi51bnN1YnNjcmliZShfcmVzb2x2ZSk7XG4gICAgICB9O1xuXG4gICAgICByZXR1cm4gcHJvbWlzZTtcbiAgICB9O1xuXG4gICAgZXhlY3V0b3IoZnVuY3Rpb24gY2FuY2VsKG1lc3NhZ2UsIGNvbmZpZywgcmVxdWVzdCkge1xuICAgICAgaWYgKHRva2VuLnJlYXNvbikge1xuICAgICAgICAvLyBDYW5jZWxsYXRpb24gaGFzIGFscmVhZHkgYmVlbiByZXF1ZXN0ZWRcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB0b2tlbi5yZWFzb24gPSBuZXcgQ2FuY2VsZWRFcnJvcihtZXNzYWdlLCBjb25maWcsIHJlcXVlc3QpO1xuICAgICAgcmVzb2x2ZVByb21pc2UodG9rZW4ucmVhc29uKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaHJvd3MgYSBgQ2FuY2VsZWRFcnJvcmAgaWYgY2FuY2VsbGF0aW9uIGhhcyBiZWVuIHJlcXVlc3RlZC5cbiAgICovXG4gIHRocm93SWZSZXF1ZXN0ZWQoKSB7XG4gICAgaWYgKHRoaXMucmVhc29uKSB7XG4gICAgICB0aHJvdyB0aGlzLnJlYXNvbjtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU3Vic2NyaWJlIHRvIHRoZSBjYW5jZWwgc2lnbmFsXG4gICAqL1xuXG4gIHN1YnNjcmliZShsaXN0ZW5lcikge1xuICAgIGlmICh0aGlzLnJlYXNvbikge1xuICAgICAgbGlzdGVuZXIodGhpcy5yZWFzb24pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9saXN0ZW5lcnMpIHtcbiAgICAgIHRoaXMuX2xpc3RlbmVycy5wdXNoKGxpc3RlbmVyKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fbGlzdGVuZXJzID0gW2xpc3RlbmVyXTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVW5zdWJzY3JpYmUgZnJvbSB0aGUgY2FuY2VsIHNpZ25hbFxuICAgKi9cblxuICB1bnN1YnNjcmliZShsaXN0ZW5lcikge1xuICAgIGlmICghdGhpcy5fbGlzdGVuZXJzKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGluZGV4ID0gdGhpcy5fbGlzdGVuZXJzLmluZGV4T2YobGlzdGVuZXIpO1xuICAgIGlmIChpbmRleCAhPT0gLTEpIHtcbiAgICAgIHRoaXMuX2xpc3RlbmVycy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGFuIG9iamVjdCB0aGF0IGNvbnRhaW5zIGEgbmV3IGBDYW5jZWxUb2tlbmAgYW5kIGEgZnVuY3Rpb24gdGhhdCwgd2hlbiBjYWxsZWQsXG4gICAqIGNhbmNlbHMgdGhlIGBDYW5jZWxUb2tlbmAuXG4gICAqL1xuICBzdGF0aWMgc291cmNlKCkge1xuICAgIGxldCBjYW5jZWw7XG4gICAgY29uc3QgdG9rZW4gPSBuZXcgQ2FuY2VsVG9rZW4oZnVuY3Rpb24gZXhlY3V0b3IoYykge1xuICAgICAgY2FuY2VsID0gYztcbiAgICB9KTtcbiAgICByZXR1cm4ge1xuICAgICAgdG9rZW4sXG4gICAgICBjYW5jZWxcbiAgICB9O1xuICB9XG59XG5cbmNvbnN0IENhbmNlbFRva2VuJDEgPSBDYW5jZWxUb2tlbjtcblxuLyoqXG4gKiBTeW50YWN0aWMgc3VnYXIgZm9yIGludm9raW5nIGEgZnVuY3Rpb24gYW5kIGV4cGFuZGluZyBhbiBhcnJheSBmb3IgYXJndW1lbnRzLlxuICpcbiAqIENvbW1vbiB1c2UgY2FzZSB3b3VsZCBiZSB0byB1c2UgYEZ1bmN0aW9uLnByb3RvdHlwZS5hcHBseWAuXG4gKlxuICogIGBgYGpzXG4gKiAgZnVuY3Rpb24gZih4LCB5LCB6KSB7fVxuICogIHZhciBhcmdzID0gWzEsIDIsIDNdO1xuICogIGYuYXBwbHkobnVsbCwgYXJncyk7XG4gKiAgYGBgXG4gKlxuICogV2l0aCBgc3ByZWFkYCB0aGlzIGV4YW1wbGUgY2FuIGJlIHJlLXdyaXR0ZW4uXG4gKlxuICogIGBgYGpzXG4gKiAgc3ByZWFkKGZ1bmN0aW9uKHgsIHksIHopIHt9KShbMSwgMiwgM10pO1xuICogIGBgYFxuICpcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrXG4gKlxuICogQHJldHVybnMge0Z1bmN0aW9ufVxuICovXG5mdW5jdGlvbiBzcHJlYWQoY2FsbGJhY2spIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIHdyYXAoYXJyKSB7XG4gICAgcmV0dXJuIGNhbGxiYWNrLmFwcGx5KG51bGwsIGFycik7XG4gIH07XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSBwYXlsb2FkIGlzIGFuIGVycm9yIHRocm93biBieSBBeGlvc1xuICpcbiAqIEBwYXJhbSB7Kn0gcGF5bG9hZCBUaGUgdmFsdWUgdG8gdGVzdFxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHRoZSBwYXlsb2FkIGlzIGFuIGVycm9yIHRocm93biBieSBBeGlvcywgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzQXhpb3NFcnJvcihwYXlsb2FkKSB7XG4gIHJldHVybiB1dGlscyQxLmlzT2JqZWN0KHBheWxvYWQpICYmIChwYXlsb2FkLmlzQXhpb3NFcnJvciA9PT0gdHJ1ZSk7XG59XG5cbmNvbnN0IEh0dHBTdGF0dXNDb2RlID0ge1xuICBDb250aW51ZTogMTAwLFxuICBTd2l0Y2hpbmdQcm90b2NvbHM6IDEwMSxcbiAgUHJvY2Vzc2luZzogMTAyLFxuICBFYXJseUhpbnRzOiAxMDMsXG4gIE9rOiAyMDAsXG4gIENyZWF0ZWQ6IDIwMSxcbiAgQWNjZXB0ZWQ6IDIwMixcbiAgTm9uQXV0aG9yaXRhdGl2ZUluZm9ybWF0aW9uOiAyMDMsXG4gIE5vQ29udGVudDogMjA0LFxuICBSZXNldENvbnRlbnQ6IDIwNSxcbiAgUGFydGlhbENvbnRlbnQ6IDIwNixcbiAgTXVsdGlTdGF0dXM6IDIwNyxcbiAgQWxyZWFkeVJlcG9ydGVkOiAyMDgsXG4gIEltVXNlZDogMjI2LFxuICBNdWx0aXBsZUNob2ljZXM6IDMwMCxcbiAgTW92ZWRQZXJtYW5lbnRseTogMzAxLFxuICBGb3VuZDogMzAyLFxuICBTZWVPdGhlcjogMzAzLFxuICBOb3RNb2RpZmllZDogMzA0LFxuICBVc2VQcm94eTogMzA1LFxuICBVbnVzZWQ6IDMwNixcbiAgVGVtcG9yYXJ5UmVkaXJlY3Q6IDMwNyxcbiAgUGVybWFuZW50UmVkaXJlY3Q6IDMwOCxcbiAgQmFkUmVxdWVzdDogNDAwLFxuICBVbmF1dGhvcml6ZWQ6IDQwMSxcbiAgUGF5bWVudFJlcXVpcmVkOiA0MDIsXG4gIEZvcmJpZGRlbjogNDAzLFxuICBOb3RGb3VuZDogNDA0LFxuICBNZXRob2ROb3RBbGxvd2VkOiA0MDUsXG4gIE5vdEFjY2VwdGFibGU6IDQwNixcbiAgUHJveHlBdXRoZW50aWNhdGlvblJlcXVpcmVkOiA0MDcsXG4gIFJlcXVlc3RUaW1lb3V0OiA0MDgsXG4gIENvbmZsaWN0OiA0MDksXG4gIEdvbmU6IDQxMCxcbiAgTGVuZ3RoUmVxdWlyZWQ6IDQxMSxcbiAgUHJlY29uZGl0aW9uRmFpbGVkOiA0MTIsXG4gIFBheWxvYWRUb29MYXJnZTogNDEzLFxuICBVcmlUb29Mb25nOiA0MTQsXG4gIFVuc3VwcG9ydGVkTWVkaWFUeXBlOiA0MTUsXG4gIFJhbmdlTm90U2F0aXNmaWFibGU6IDQxNixcbiAgRXhwZWN0YXRpb25GYWlsZWQ6IDQxNyxcbiAgSW1BVGVhcG90OiA0MTgsXG4gIE1pc2RpcmVjdGVkUmVxdWVzdDogNDIxLFxuICBVbnByb2Nlc3NhYmxlRW50aXR5OiA0MjIsXG4gIExvY2tlZDogNDIzLFxuICBGYWlsZWREZXBlbmRlbmN5OiA0MjQsXG4gIFRvb0Vhcmx5OiA0MjUsXG4gIFVwZ3JhZGVSZXF1aXJlZDogNDI2LFxuICBQcmVjb25kaXRpb25SZXF1aXJlZDogNDI4LFxuICBUb29NYW55UmVxdWVzdHM6IDQyOSxcbiAgUmVxdWVzdEhlYWRlckZpZWxkc1Rvb0xhcmdlOiA0MzEsXG4gIFVuYXZhaWxhYmxlRm9yTGVnYWxSZWFzb25zOiA0NTEsXG4gIEludGVybmFsU2VydmVyRXJyb3I6IDUwMCxcbiAgTm90SW1wbGVtZW50ZWQ6IDUwMSxcbiAgQmFkR2F0ZXdheTogNTAyLFxuICBTZXJ2aWNlVW5hdmFpbGFibGU6IDUwMyxcbiAgR2F0ZXdheVRpbWVvdXQ6IDUwNCxcbiAgSHR0cFZlcnNpb25Ob3RTdXBwb3J0ZWQ6IDUwNSxcbiAgVmFyaWFudEFsc29OZWdvdGlhdGVzOiA1MDYsXG4gIEluc3VmZmljaWVudFN0b3JhZ2U6IDUwNyxcbiAgTG9vcERldGVjdGVkOiA1MDgsXG4gIE5vdEV4dGVuZGVkOiA1MTAsXG4gIE5ldHdvcmtBdXRoZW50aWNhdGlvblJlcXVpcmVkOiA1MTEsXG59O1xuXG5PYmplY3QuZW50cmllcyhIdHRwU3RhdHVzQ29kZSkuZm9yRWFjaCgoW2tleSwgdmFsdWVdKSA9PiB7XG4gIEh0dHBTdGF0dXNDb2RlW3ZhbHVlXSA9IGtleTtcbn0pO1xuXG5jb25zdCBIdHRwU3RhdHVzQ29kZSQxID0gSHR0cFN0YXR1c0NvZGU7XG5cbi8qKlxuICogQ3JlYXRlIGFuIGluc3RhbmNlIG9mIEF4aW9zXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGRlZmF1bHRDb25maWcgVGhlIGRlZmF1bHQgY29uZmlnIGZvciB0aGUgaW5zdGFuY2VcbiAqXG4gKiBAcmV0dXJucyB7QXhpb3N9IEEgbmV3IGluc3RhbmNlIG9mIEF4aW9zXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUluc3RhbmNlKGRlZmF1bHRDb25maWcpIHtcbiAgY29uc3QgY29udGV4dCA9IG5ldyBBeGlvcyQxKGRlZmF1bHRDb25maWcpO1xuICBjb25zdCBpbnN0YW5jZSA9IGJpbmQoQXhpb3MkMS5wcm90b3R5cGUucmVxdWVzdCwgY29udGV4dCk7XG5cbiAgLy8gQ29weSBheGlvcy5wcm90b3R5cGUgdG8gaW5zdGFuY2VcbiAgdXRpbHMkMS5leHRlbmQoaW5zdGFuY2UsIEF4aW9zJDEucHJvdG90eXBlLCBjb250ZXh0LCB7YWxsT3duS2V5czogdHJ1ZX0pO1xuXG4gIC8vIENvcHkgY29udGV4dCB0byBpbnN0YW5jZVxuICB1dGlscyQxLmV4dGVuZChpbnN0YW5jZSwgY29udGV4dCwgbnVsbCwge2FsbE93bktleXM6IHRydWV9KTtcblxuICAvLyBGYWN0b3J5IGZvciBjcmVhdGluZyBuZXcgaW5zdGFuY2VzXG4gIGluc3RhbmNlLmNyZWF0ZSA9IGZ1bmN0aW9uIGNyZWF0ZShpbnN0YW5jZUNvbmZpZykge1xuICAgIHJldHVybiBjcmVhdGVJbnN0YW5jZShtZXJnZUNvbmZpZyhkZWZhdWx0Q29uZmlnLCBpbnN0YW5jZUNvbmZpZykpO1xuICB9O1xuXG4gIHJldHVybiBpbnN0YW5jZTtcbn1cblxuLy8gQ3JlYXRlIHRoZSBkZWZhdWx0IGluc3RhbmNlIHRvIGJlIGV4cG9ydGVkXG5jb25zdCBheGlvcyA9IGNyZWF0ZUluc3RhbmNlKGRlZmF1bHRzJDEpO1xuXG4vLyBFeHBvc2UgQXhpb3MgY2xhc3MgdG8gYWxsb3cgY2xhc3MgaW5oZXJpdGFuY2VcbmF4aW9zLkF4aW9zID0gQXhpb3MkMTtcblxuLy8gRXhwb3NlIENhbmNlbCAmIENhbmNlbFRva2VuXG5heGlvcy5DYW5jZWxlZEVycm9yID0gQ2FuY2VsZWRFcnJvcjtcbmF4aW9zLkNhbmNlbFRva2VuID0gQ2FuY2VsVG9rZW4kMTtcbmF4aW9zLmlzQ2FuY2VsID0gaXNDYW5jZWw7XG5heGlvcy5WRVJTSU9OID0gVkVSU0lPTjtcbmF4aW9zLnRvRm9ybURhdGEgPSB0b0Zvcm1EYXRhO1xuXG4vLyBFeHBvc2UgQXhpb3NFcnJvciBjbGFzc1xuYXhpb3MuQXhpb3NFcnJvciA9IEF4aW9zRXJyb3I7XG5cbi8vIGFsaWFzIGZvciBDYW5jZWxlZEVycm9yIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5XG5heGlvcy5DYW5jZWwgPSBheGlvcy5DYW5jZWxlZEVycm9yO1xuXG4vLyBFeHBvc2UgYWxsL3NwcmVhZFxuYXhpb3MuYWxsID0gZnVuY3Rpb24gYWxsKHByb21pc2VzKSB7XG4gIHJldHVybiBQcm9taXNlLmFsbChwcm9taXNlcyk7XG59O1xuXG5heGlvcy5zcHJlYWQgPSBzcHJlYWQ7XG5cbi8vIEV4cG9zZSBpc0F4aW9zRXJyb3JcbmF4aW9zLmlzQXhpb3NFcnJvciA9IGlzQXhpb3NFcnJvcjtcblxuLy8gRXhwb3NlIG1lcmdlQ29uZmlnXG5heGlvcy5tZXJnZUNvbmZpZyA9IG1lcmdlQ29uZmlnO1xuXG5heGlvcy5BeGlvc0hlYWRlcnMgPSBBeGlvc0hlYWRlcnMkMTtcblxuYXhpb3MuZm9ybVRvSlNPTiA9IHRoaW5nID0+IGZvcm1EYXRhVG9KU09OKHV0aWxzJDEuaXNIVE1MRm9ybSh0aGluZykgPyBuZXcgRm9ybURhdGEodGhpbmcpIDogdGhpbmcpO1xuXG5heGlvcy5nZXRBZGFwdGVyID0gYWRhcHRlcnMuZ2V0QWRhcHRlcjtcblxuYXhpb3MuSHR0cFN0YXR1c0NvZGUgPSBIdHRwU3RhdHVzQ29kZSQxO1xuXG5heGlvcy5kZWZhdWx0ID0gYXhpb3M7XG5cbm1vZHVsZS5leHBvcnRzID0gYXhpb3M7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1heGlvcy5janMubWFwXG4iLCIvLyBUaGUgbW9kdWxlIGNhY2hlXG52YXIgX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fID0ge307XG5cbi8vIFRoZSByZXF1aXJlIGZ1bmN0aW9uXG5mdW5jdGlvbiBfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKSB7XG5cdC8vIENoZWNrIGlmIG1vZHVsZSBpcyBpbiBjYWNoZVxuXHR2YXIgY2FjaGVkTW9kdWxlID0gX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fW21vZHVsZUlkXTtcblx0aWYgKGNhY2hlZE1vZHVsZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0cmV0dXJuIGNhY2hlZE1vZHVsZS5leHBvcnRzO1xuXHR9XG5cdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXG5cdHZhciBtb2R1bGUgPSBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX19bbW9kdWxlSWRdID0ge1xuXHRcdC8vIG5vIG1vZHVsZS5pZCBuZWVkZWRcblx0XHQvLyBubyBtb2R1bGUubG9hZGVkIG5lZWRlZFxuXHRcdGV4cG9ydHM6IHt9XG5cdH07XG5cblx0Ly8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uXG5cdF9fd2VicGFja19tb2R1bGVzX19bbW9kdWxlSWRdLmNhbGwobW9kdWxlLmV4cG9ydHMsIG1vZHVsZSwgbW9kdWxlLmV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pO1xuXG5cdC8vIFJldHVybiB0aGUgZXhwb3J0cyBvZiB0aGUgbW9kdWxlXG5cdHJldHVybiBtb2R1bGUuZXhwb3J0cztcbn1cblxuIiwiLy8gc3RhcnR1cFxuLy8gTG9hZCBlbnRyeSBtb2R1bGUgYW5kIHJldHVybiBleHBvcnRzXG4vLyBUaGlzIGVudHJ5IG1vZHVsZSBpcyByZWZlcmVuY2VkIGJ5IG90aGVyIG1vZHVsZXMgc28gaXQgY2FuJ3QgYmUgaW5saW5lZFxudmFyIF9fd2VicGFja19leHBvcnRzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDgzMjEpO1xuIl0sIm5hbWVzIjpbInJvb3QiLCJmYWN0b3J5IiwiZXhwb3J0cyIsIm1vZHVsZSIsImRlZmluZSIsImFtZCIsInRoaXMiLCJwYXJhbGxlbCIsInNlcmlhbCIsInNlcmlhbE9yZGVyZWQiLCJjbGVhbiIsImtleSIsImpvYnMiLCJzdGF0ZSIsIk9iamVjdCIsImtleXMiLCJmb3JFYWNoIiwiYmluZCIsImRlZmVyIiwiY2FsbGJhY2siLCJpc0FzeW5jIiwiZXJyIiwicmVzdWx0IiwiZm4iLCJuZXh0VGljayIsInNldEltbWVkaWF0ZSIsInByb2Nlc3MiLCJzZXRUaW1lb3V0IiwiYXN5bmMiLCJhYm9ydCIsImxpc3QiLCJpdGVyYXRvciIsImluZGV4IiwiaXRlbSIsImxlbmd0aCIsInJ1bkpvYiIsImVycm9yIiwib3V0cHV0IiwicmVzdWx0cyIsInNvcnRNZXRob2QiLCJpc05hbWVkTGlzdCIsIkFycmF5IiwiaXNBcnJheSIsImluaXRTdGF0ZSIsImtleWVkTGlzdCIsInNpemUiLCJzb3J0IiwiYSIsImIiLCJpdGVyYXRlIiwidGVybWluYXRvciIsImFzY2VuZGluZyIsIml0ZXJhdG9ySGFuZGxlciIsImRlc2NlbmRpbmciLCJwYXJhbXMiLCJpc1B1cmVPYmplY3QiLCJFcnJvciIsImluaXQiLCJjbG9uZVBhcmFtcyIsIkNsaWVudCIsInZlcnNpb24iLCJhcGlLZXkiLCJhcGlTZWNyZXQiLCJhcGlUb2tlbiIsImNvbmZpZyIsIm9wdGlvbnMiLCJyZXNvdXJjZSIsInJlcXVlc3RfMSIsIkh0dHBNZXRob2RzXzEiLCJHZXQiLCJQb3N0IiwiUHV0IiwiRGVsZXRlIiwicGFja2FnZUpTT04iLCJzZXRDb25maWciLCJzZXRPcHRpb25zIiwidG9rZW5Db25uZWN0U3RyYXRlZ3kiLCJiYXNpY0Nvbm5lY3RTdHJhdGVneSIsImNsb25lZFBhcmFtcyIsInByb3h5IiwiaGVhZGVycyIsImN1c3RvbUNvbmZpZyIsIl90eXBlb2YiLCJzZXRWYWx1ZUlmTm90TmlsIiwiaG9zdCIsImZyZWV6ZSIsIl9fYXNzaWduIiwicGFja2FnZV9qc29uXzEiLCJpbmRleF8xIiwiaW5kZXhfMiIsIl9fZXh0ZW5kcyIsIk1haWxqZXQiLCJfX2V4cG9ydFN0YXIiLCJIdHRwTWV0aG9kcyIsIkpTT05iIiwic3RvcmVBc1N0cmluZyIsImNsaWVudCIsIm1ldGhvZCIsImNsaWVudF8xIiwidmFsdWVzIiwiaW5jbHVkZXMiLCJ1cmwiLCJ0b0xvd2VyQ2FzZSIsInN1YlBhdGgiLCJidWlsZFN1YlBhdGgiLCJhY3Rpb25QYXRoIiwiUmVxdWVzdCIsImdldFBhY2thZ2VWZXJzaW9uIiwiZ2V0QVBJVG9rZW4iLCJnZXRBUElLZXkiLCJnZXRBUElTZWNyZXQiLCJpbmRleE9mIiwiZGF0YSIsInVuZGVmaW5lZCIsImNsaWVudENvbmZpZyIsImdldENvbmZpZyIsInByb3RvY29sIiwiaXNDb250YWN0TGlzdFdpdGhDU1YiLCJpc0JhdGNoSm9iV2l0aENTViIsImlzU2VuZFJlc291cmNlIiwicmVzb3VyY2VDb250YWluU01TIiwicmVxdWVzdENvbmZpZyIsImdldFJlcXVlc3RCb2R5IiwicmVzcG9uc2VUeXBlIiwiZ2V0VXNlckFnZW50IiwiZ2V0Q29udGVudFR5cGUiLCJ0cmFuc2Zvcm1SZXNwb25zZSIsInJlc3BvbnNlRGF0YSIsImRhdGFJc1N0cmluZyIsImlzSlNPTlJlcXVlc3RlZCIsInBhcnNlVG9KU09OYiIsImlzQnJvd3NlciIsImNyZWRlbnRpYWxzIiwiZ2V0Q3JlZGVudGlhbHMiLCJhdXRoIiwidXNlcm5hbWUiLCJwYXNzd29yZCIsImNsaWVudE9wdGlvbnMiLCJnZXRPcHRpb25zIiwidGltZW91dCIsIm1heEJvZHlMZW5ndGgiLCJtYXhDb250ZW50TGVuZ3RoIiwiYmFzZVVybCIsInZhbHVlIiwidG9TdHJpbmciLCJuYW1lIiwicGVyZm9ybUFQSUNhbGwiLCJidWlsZEZ1bGxVcmwiLCJzZXRCYXNlVVJMIiwiYm9keSIsIm1ha2VSZXF1ZXN0IiwicmVzcG9uc2UiLCJfZyIsImF4aW9zXzEiLCJjb2RlIiwiZXJyXzEiLCJfZiIsInN0YXR1c18xIiwic3RhdHVzVGV4dCIsInN0YXR1c0NvZGUiLCJlcnJvck1lc3NhZ2UiLCJFcnJvck1lc3NhZ2UiLCJtZXNzYWdlIiwib3JpZ2luYWxNZXNzYWdlIiwiZnVsbE1lc3NhZ2UiLCJNZXNzYWdlcyIsIkVycm9ycyIsIkVycm9yQ29kZSIsIkVycm9ySWRlbnRpZmllciIsIkVycm9yUmVsYXRlZFRvIiwidGV4dCIsInBhcnNlIiwiZSIsIndpbmRvdyIsIkRyYWZ0Q2FtcGFpZ24iLCJFZGl0TW9kZSIsIkNhbXBhaWduRHJhZnRTdGF0dXMiLCJDYW1wYWlnbkRyYWZ0U2VuZGluZ1N0YXR1cyIsIlNlbnRDYW1wYWlnbiIsIkNhbXBhaWduVHlwZSIsIkNvbW1vbiIsIlBlcmlvZCIsIkJ1bGtDb250YWN0TWFuYWdlbWVudCIsIk1hbmFnZUNvbnRhY3RzQWN0aW9uIiwiSW1wb3J0TGlzdEFjdGlvbiIsIkltcG9ydENTVk1ldGhvZCIsIkNTVkltcG9ydFN0YXR1cyIsIkpvYlN0YXR1cyIsIkNvbnRhY3RQcm9wZXJ0aWVzIiwiRGF0YVR5cGUiLCJOYW1lU3BhY2UiLCJNZXNzYWdlIiwiTWVzc2FnZVN0YXRlIiwiRnJvbVR5cGUiLCJNZXNzYWdlU3RhdHVzIiwiQ3VycmVudE1lc3NhZ2VTdGF0dXMiLCJFdmVudFR5cGUiLCJTZWdtZW50YXRpb24iLCJTZWdtZW50U3RhdHVzIiwiU2VuZEVtYWlsVjNfMSIsIlRyYWNrT3BlbnMiLCJUcmFja0NsaWNrcyIsIlJlc3BvbnNlU3RhdHVzIiwiU2VuZGVyIiwiRW1haWxUeXBlIiwiU2VuZGVyU3RhdHVzIiwiRE5TIiwiREtJTUNvbmZpZ3VyYXRpb25DaGVja1N0YXR1cyIsIkRLSU1Db25maWd1cmF0aW9uU3RhdHVzIiwiU1BGQ29uZmlndXJhdGlvbkNoZWNrU3RhdHVzIiwiU1BGQ29uZmlndXJhdGlvblN0YXR1cyIsIkFQSUtleUNvbmZpZ3VyYXRpb24iLCJSdW5MZXZlbCIsIlN0YXRpc3RpYyIsIkNhbXBhaWduT3ZlcnZpZXdJRFR5cGUiLCJDYW1wYWlnbk92ZXJ2aWV3RWRpdE1vZGUiLCJDYW1wYWlnbk92ZXJ2aWV3RWRpdFR5cGUiLCJDb3VudGVyU291cmNlIiwiQ291bnRlclJlc29sdXRpb24iLCJDb3VudGVyVGltaW5nIiwiRW1haWxFdmVudCIsIlRlbXBsYXRlIiwiQ2F0ZWdvcmllcyIsIkNhdGVnb3JpZXNTZWxlY3Rpb25NZXRob2QiLCJPd25lclR5cGUiLCJQdXJwb3NlcyIsIlB1cnBvc2VzU2VsZWN0aW9uTWV0aG9kIiwiV2ViaG9vayIsIkV2ZW50VHlwZVZhbHVlIiwiU3RhdHVzIiwiZW51bWVyYWJsZSIsImdldCIsImlzTmlsXzEiLCJpc051bGxfMSIsImlzVW5kZWZpbmVkXzEiLCJpc1B1cmVPYmplY3RfMSIsInNldFZhbHVlSWZOb3ROaWxfMSIsImdldFByb3RvdHlwZU9mIiwicHJvdG90eXBlIiwidGFyZ2V0T2JqZWN0IiwicGF0aCIsImdsb2JhbE9iamVjdCIsIkJpZ051bWJlciIsImlzTnVtZXJpYyIsIm1hdGhjZWlsIiwiTWF0aCIsImNlaWwiLCJtYXRoZmxvb3IiLCJmbG9vciIsImJpZ251bWJlckVycm9yIiwidG9vTWFueURpZ2l0cyIsIkJBU0UiLCJMT0dfQkFTRSIsIk1BWF9TQUZFX0lOVEVHRVIiLCJQT1dTX1RFTiIsIlNRUlRfQkFTRSIsIk1BWCIsImJpdEZsb29yIiwibiIsImkiLCJjb2VmZlRvU3RyaW5nIiwicyIsInoiLCJqIiwiciIsImNoYXJDb2RlQXQiLCJzbGljZSIsImNvbXBhcmUiLCJ4IiwieSIsInhjIiwiYyIsInljIiwiayIsImwiLCJpbnRDaGVjayIsIm1pbiIsIm1heCIsIlN0cmluZyIsImlzT2RkIiwidG9FeHBvbmVudGlhbCIsInN0ciIsImNoYXJBdCIsInRvRml4ZWRQb2ludCIsImxlbiIsInpzIiwiY2xvbmUiLCJjb25maWdPYmplY3QiLCJkaXYiLCJjb252ZXJ0QmFzZSIsInBhcnNlTnVtZXJpYyIsInBvdzJfNTMiLCJyYW5kb201M2JpdEludCIsImJhc2VQcmVmaXgiLCJkb3RBZnRlciIsImRvdEJlZm9yZSIsImlzSW5maW5pdHlPck5hTiIsIndoaXRlc3BhY2VPclBsdXMiLCJQIiwiY29uc3RydWN0b3IiLCJ2YWx1ZU9mIiwiT05FIiwiREVDSU1BTF9QTEFDRVMiLCJST1VORElOR19NT0RFIiwiVE9fRVhQX05FRyIsIlRPX0VYUF9QT1MiLCJNSU5fRVhQIiwiTUFYX0VYUCIsIkNSWVBUTyIsIk1PRFVMT19NT0RFIiwiUE9XX1BSRUNJU0lPTiIsIkZPUk1BVCIsInByZWZpeCIsImdyb3VwU2l6ZSIsInNlY29uZGFyeUdyb3VwU2l6ZSIsImdyb3VwU2VwYXJhdG9yIiwiZGVjaW1hbFNlcGFyYXRvciIsImZyYWN0aW9uR3JvdXBTaXplIiwiZnJhY3Rpb25Hcm91cFNlcGFyYXRvciIsInN1ZmZpeCIsIkFMUEhBQkVUIiwidiIsImFscGhhYmV0IiwiY2FzZUNoYW5nZWQiLCJpc051bSIsIl9pc0JpZ051bWJlciIsInRlc3QiLCJyZXBsYWNlIiwic2VhcmNoIiwic3Vic3RyaW5nIiwicm91bmQiLCJERUJVRyIsInRvVXBwZXJDYXNlIiwicHVzaCIsImZvcm1hdCIsInJtIiwiaWQiLCJjMCIsIm5lIiwibWF4T3JNaW4iLCJhcmdzIiwibSIsImNhbGwiLCJub3JtYWxpc2UiLCJwb3AiLCJzZCIsImQiLCJuaSIsInJkIiwicG93czEwIiwib3V0IiwiUk9VTkRfVVAiLCJST1VORF9ET1dOIiwiUk9VTkRfQ0VJTCIsIlJPVU5EX0ZMT09SIiwiUk9VTkRfSEFMRl9VUCIsIlJPVU5EX0hBTEZfRE9XTiIsIlJPVU5EX0hBTEZfRVZFTiIsIlJPVU5EX0hBTEZfQ0VJTCIsIlJPVU5EX0hBTEZfRkxPT1IiLCJFVUNMSUQiLCJzZXQiLCJvYmoiLCJwIiwiaGFzT3duUHJvcGVydHkiLCJjcnlwdG8iLCJnZXRSYW5kb21WYWx1ZXMiLCJyYW5kb21CeXRlcyIsIkVYUE9ORU5USUFMX0FUIiwiUkFOR0UiLCJpc0JpZ051bWJlciIsIm1heGltdW0iLCJhcmd1bWVudHMiLCJsdCIsIm1pbmltdW0iLCJndCIsInJhbmRvbSIsImRwIiwicmFuZCIsIlVpbnQzMkFycmF5IiwiY29weSIsInNwbGljZSIsInN1bSIsInBsdXMiLCJkZWNpbWFsIiwidG9CYXNlT3V0IiwiYmFzZUluIiwiYmFzZU91dCIsImFyckwiLCJhcnIiLCJyZXZlcnNlIiwic2lnbiIsImNhbGxlcklzVG9TdHJpbmciLCJwb3ciLCJjb25jYXQiLCJtdWx0aXBseSIsImJhc2UiLCJ0ZW1wIiwieGxvIiwieGhpIiwiY2FycnkiLCJrbG8iLCJraGkiLCJhTCIsImJMIiwiY21wIiwic3VidHJhY3QiLCJtb3JlIiwicHJvZCIsInByb2RMIiwicSIsInFjIiwicmVtIiwicmVtTCIsInJlbTAiLCJ4aSIsInhMIiwieWMwIiwieUwiLCJ5eiIsIk5hTiIsImlzTmFOIiwicDEiLCJwMiIsImFic29sdXRlVmFsdWUiLCJhYnMiLCJjb21wYXJlZFRvIiwiZGVjaW1hbFBsYWNlcyIsImRpdmlkZWRCeSIsImRpdmlkZWRUb0ludGVnZXJCeSIsImlkaXYiLCJleHBvbmVudGlhdGVkQnkiLCJoYWxmIiwiaXNNb2RFeHAiLCJuSXNCaWciLCJuSXNOZWciLCJuSXNPZGQiLCJpc0ludGVnZXIiLCJtb2QiLCJ0aW1lcyIsImludGVnZXJWYWx1ZSIsImlzRXF1YWxUbyIsImVxIiwiaXNGaW5pdGUiLCJpc0dyZWF0ZXJUaGFuIiwiaXNHcmVhdGVyVGhhbk9yRXF1YWxUbyIsImd0ZSIsImlzTGVzc1RoYW4iLCJpc0xlc3NUaGFuT3JFcXVhbFRvIiwibHRlIiwiaXNOZWdhdGl2ZSIsImlzUG9zaXRpdmUiLCJpc1plcm8iLCJtaW51cyIsInQiLCJ4TFR5IiwieGUiLCJ5ZSIsIm1vZHVsbyIsIm11bHRpcGxpZWRCeSIsInhjTCIsInljTCIsInlsbyIsInloaSIsInpjIiwic3FydEJhc2UiLCJuZWdhdGVkIiwicHJlY2lzaW9uIiwic2hpZnRlZEJ5Iiwic3F1YXJlUm9vdCIsInNxcnQiLCJyZXAiLCJ0b0ZpeGVkIiwidG9Gb3JtYXQiLCJzcGxpdCIsImcxIiwiZzIiLCJpbnRQYXJ0IiwiZnJhY3Rpb25QYXJ0IiwiaXNOZWciLCJpbnREaWdpdHMiLCJzdWJzdHIiLCJSZWdFeHAiLCJ0b0ZyYWN0aW9uIiwibWQiLCJkMCIsImQxIiwiZDIiLCJleHAiLCJuMCIsIm4xIiwidG9OdW1iZXIiLCJ0b1ByZWNpc2lvbiIsInRvSlNPTiIsInV0aWwiLCJTdHJlYW0iLCJEZWxheWVkU3RyZWFtIiwiQ29tYmluZWRTdHJlYW0iLCJ3cml0YWJsZSIsInJlYWRhYmxlIiwiZGF0YVNpemUiLCJtYXhEYXRhU2l6ZSIsInBhdXNlU3RyZWFtcyIsIl9yZWxlYXNlZCIsIl9zdHJlYW1zIiwiX2N1cnJlbnRTdHJlYW0iLCJfaW5zaWRlTG9vcCIsIl9wZW5kaW5nTmV4dCIsImluaGVyaXRzIiwiY3JlYXRlIiwiY29tYmluZWRTdHJlYW0iLCJvcHRpb24iLCJpc1N0cmVhbUxpa2UiLCJzdHJlYW0iLCJCdWZmZXIiLCJpc0J1ZmZlciIsImFwcGVuZCIsIm5ld1N0cmVhbSIsIkluZmluaXR5IiwicGF1c2VTdHJlYW0iLCJvbiIsIl9jaGVja0RhdGFTaXplIiwiX2hhbmRsZUVycm9ycyIsInBhdXNlIiwicGlwZSIsImRlc3QiLCJyZXN1bWUiLCJfZ2V0TmV4dCIsIl9yZWFsR2V0TmV4dCIsInNoaWZ0IiwiX3BpcGVOZXh0IiwiZW5kIiwid3JpdGUiLCJzZWxmIiwiX2VtaXRFcnJvciIsImVtaXQiLCJfcmVzZXQiLCJkZXN0cm95IiwiX3VwZGF0ZURhdGFTaXplIiwiaCIsInciLCJwbHVyYWwiLCJtcyIsIm1zQWJzIiwiaXNQbHVyYWwiLCJ2YWwiLCJ0eXBlIiwibWF0Y2giLCJleGVjIiwicGFyc2VGbG9hdCIsImxvbmciLCJmbXRTaG9ydCIsIkpTT04iLCJzdHJpbmdpZnkiLCJmb3JtYXRBcmdzIiwidXNlQ29sb3JzIiwibmFtZXNwYWNlIiwiaHVtYW5pemUiLCJkaWZmIiwiY29sb3IiLCJsYXN0QyIsInNhdmUiLCJuYW1lc3BhY2VzIiwic3RvcmFnZSIsInNldEl0ZW0iLCJyZW1vdmVJdGVtIiwibG9hZCIsImdldEl0ZW0iLCJlbnYiLCJfX253anMiLCJuYXZpZ2F0b3IiLCJ1c2VyQWdlbnQiLCJkb2N1bWVudCIsImRvY3VtZW50RWxlbWVudCIsInN0eWxlIiwiV2Via2l0QXBwZWFyYW5jZSIsImNvbnNvbGUiLCJmaXJlYnVnIiwiZXhjZXB0aW9uIiwidGFibGUiLCJwYXJzZUludCIsIiQxIiwibG9jYWxTdG9yYWdlIiwibG9jYWxzdG9yYWdlIiwid2FybmVkIiwid2FybiIsImNvbG9ycyIsImxvZyIsImRlYnVnIiwiZm9ybWF0dGVycyIsImNyZWF0ZURlYnVnIiwicHJldlRpbWUiLCJuYW1lc3BhY2VzQ2FjaGUiLCJlbmFibGVkQ2FjaGUiLCJlbmFibGVPdmVycmlkZSIsImVuYWJsZWQiLCJjdXJyIiwiTnVtYmVyIiwiRGF0ZSIsInByZXYiLCJjb2VyY2UiLCJ1bnNoaWZ0IiwiZm9ybWF0dGVyIiwiYXBwbHkiLCJzZWxlY3RDb2xvciIsImV4dGVuZCIsImRlZmluZVByb3BlcnR5IiwiY29uZmlndXJhYmxlIiwiZGVsaW1pdGVyIiwibmV3RGVidWciLCJ0b05hbWVzcGFjZSIsInJlZ2V4cCIsImRlZmF1bHQiLCJzdGFjayIsImRpc2FibGUiLCJuYW1lcyIsIm1hcCIsInNraXBzIiwiam9pbiIsImVuYWJsZSIsImhhc2giLCJicm93c2VyIiwidHR5IiwiaW5zcGVjdE9wdHMiLCJzdGRlcnIiLCJjb2xvckNvZGUiLCJoaWRlRGF0ZSIsInRvSVNPU3RyaW5nIiwiQm9vbGVhbiIsImlzYXR0eSIsImZkIiwiZGVwcmVjYXRlIiwic3VwcG9ydHNDb2xvciIsImxldmVsIiwiZmlsdGVyIiwicmVkdWNlIiwicHJvcCIsIl8iLCJvIiwiaW5zcGVjdCIsInRyaW0iLCJPIiwic291cmNlIiwiX21heERhdGFTaXplRXhjZWVkZWQiLCJfYnVmZmVyZWRFdmVudHMiLCJkZWxheWVkU3RyZWFtIiwicmVhbEVtaXQiLCJfaGFuZGxlRW1pdCIsInNldEVuY29kaW5nIiwicmVsZWFzZSIsIl9jaGVja0lmTWF4RGF0YVNpemVFeGNlZWRlZCIsIlVSTCIsImh0dHAiLCJodHRwcyIsIldyaXRhYmxlIiwiYXNzZXJ0IiwidXNlTmF0aXZlVVJMIiwicHJlc2VydmVkVXJsRmllbGRzIiwiZXZlbnRzIiwiZXZlbnRIYW5kbGVycyIsImV2ZW50IiwiYXJnMSIsImFyZzIiLCJhcmczIiwiX3JlZGlyZWN0YWJsZSIsIkludmFsaWRVcmxFcnJvciIsImNyZWF0ZUVycm9yVHlwZSIsIlR5cGVFcnJvciIsIlJlZGlyZWN0aW9uRXJyb3IiLCJUb29NYW55UmVkaXJlY3RzRXJyb3IiLCJNYXhCb2R5TGVuZ3RoRXhjZWVkZWRFcnJvciIsIldyaXRlQWZ0ZXJFbmRFcnJvciIsIm5vb3AiLCJSZWRpcmVjdGFibGVSZXF1ZXN0IiwicmVzcG9uc2VDYWxsYmFjayIsIl9zYW5pdGl6ZU9wdGlvbnMiLCJfb3B0aW9ucyIsIl9lbmRlZCIsIl9lbmRpbmciLCJfcmVkaXJlY3RDb3VudCIsIl9yZWRpcmVjdHMiLCJfcmVxdWVzdEJvZHlMZW5ndGgiLCJfcmVxdWVzdEJvZHlCdWZmZXJzIiwiX29uTmF0aXZlUmVzcG9uc2UiLCJfcHJvY2Vzc1Jlc3BvbnNlIiwiY2F1c2UiLCJfcGVyZm9ybVJlcXVlc3QiLCJ3cmFwIiwicHJvdG9jb2xzIiwibWF4UmVkaXJlY3RzIiwibmF0aXZlUHJvdG9jb2xzIiwic2NoZW1lIiwibmF0aXZlUHJvdG9jb2wiLCJ3cmFwcGVkUHJvdG9jb2wiLCJkZWZpbmVQcm9wZXJ0aWVzIiwicmVxdWVzdCIsImlucHV0Iiwic3ByZWFkVXJsT2JqZWN0IiwiaXNTdHJpbmciLCJwYXJzZVVybCIsInZhbGlkYXRlVXJsIiwiaXNGdW5jdGlvbiIsImFzc2lnbiIsImhvc3RuYW1lIiwiZXF1YWwiLCJ3cmFwcGVkUmVxdWVzdCIsInBhcnNlZCIsImhyZWYiLCJ1cmxPYmplY3QiLCJ0YXJnZXQiLCJzcHJlYWQiLCJzdGFydHNXaXRoIiwicG9ydCIsInBhdGhuYW1lIiwicmVtb3ZlTWF0Y2hpbmdIZWFkZXJzIiwicmVnZXgiLCJsYXN0VmFsdWUiLCJoZWFkZXIiLCJiYXNlQ2xhc3MiLCJDdXN0b21FcnJvciIsInByb3BlcnRpZXMiLCJjYXB0dXJlU3RhY2tUcmFjZSIsImRlc3Ryb3lSZXF1ZXN0IiwicmVtb3ZlTGlzdGVuZXIiLCJfY3VycmVudFJlcXVlc3QiLCJlbmNvZGluZyIsImN1cnJlbnRSZXF1ZXN0Iiwic2V0SGVhZGVyIiwicmVtb3ZlSGVhZGVyIiwibXNlY3MiLCJkZXN0cm95T25UaW1lb3V0Iiwic29ja2V0IiwiYWRkTGlzdGVuZXIiLCJzdGFydFRpbWVyIiwiX3RpbWVvdXQiLCJjbGVhclRpbWVvdXQiLCJjbGVhclRpbWVyIiwib25jZSIsInByb3BlcnR5Iiwic2VhcmNoUG9zIiwiYWdlbnRzIiwiYWdlbnQiLCJfY3VycmVudFVybCIsIl9pc1JlZGlyZWN0IiwiYnVmZmVycyIsIndyaXRlTmV4dCIsImJ1ZmZlciIsImZpbmlzaGVkIiwidHJhY2tSZWRpcmVjdHMiLCJyZXF1ZXN0SGVhZGVycyIsImxvY2F0aW9uIiwiZm9sbG93UmVkaXJlY3RzIiwicmVzcG9uc2VVcmwiLCJyZWRpcmVjdHMiLCJiZWZvcmVSZWRpcmVjdCIsIkhvc3QiLCJyZXEiLCJnZXRIZWFkZXIiLCJyZWxhdGl2ZSIsImN1cnJlbnRIb3N0SGVhZGVyIiwiY3VycmVudFVybFBhcnRzIiwiY3VycmVudEhvc3QiLCJjdXJyZW50VXJsIiwicmVkaXJlY3RVcmwiLCJyZXNvbHZlIiwic3ViZG9tYWluIiwiZG9tYWluIiwiZG90IiwiZW5kc1dpdGgiLCJpc1N1YmRvbWFpbiIsInJlc3BvbnNlRGV0YWlscyIsInJlcXVlc3REZXRhaWxzIiwiZnMiLCJtaW1lIiwiYXN5bmNraXQiLCJwb3B1bGF0ZSIsIkZvcm1EYXRhIiwiX292ZXJoZWFkTGVuZ3RoIiwiX3ZhbHVlTGVuZ3RoIiwiX3ZhbHVlc1RvTWVhc3VyZSIsIkxJTkVfQlJFQUsiLCJERUZBVUxUX0NPTlRFTlRfVFlQRSIsImZpZWxkIiwiZmlsZW5hbWUiLCJfZXJyb3IiLCJfbXVsdGlQYXJ0SGVhZGVyIiwiZm9vdGVyIiwiX211bHRpUGFydEZvb3RlciIsIl90cmFja0xlbmd0aCIsInZhbHVlTGVuZ3RoIiwia25vd25MZW5ndGgiLCJieXRlTGVuZ3RoIiwiX2xlbmd0aFJldHJpZXZlciIsInN0YXJ0Iiwic3RhdCIsImZpbGVTaXplIiwiY29udGVudERpc3Bvc2l0aW9uIiwiX2dldENvbnRlbnREaXNwb3NpdGlvbiIsImNvbnRlbnRUeXBlIiwiX2dldENvbnRlbnRUeXBlIiwiY29udGVudHMiLCJnZXRCb3VuZGFyeSIsImZpbGVwYXRoIiwibm9ybWFsaXplIiwiYmFzZW5hbWUiLCJfaHR0cE1lc3NhZ2UiLCJsb29rdXAiLCJuZXh0IiwiX2xhc3RCb3VuZGFyeSIsImdldEhlYWRlcnMiLCJ1c2VySGVhZGVycyIsImZvcm1IZWFkZXJzIiwic2V0Qm91bmRhcnkiLCJib3VuZGFyeSIsIl9ib3VuZGFyeSIsIl9nZW5lcmF0ZUJvdW5kYXJ5IiwiZ2V0QnVmZmVyIiwiZGF0YUJ1ZmZlciIsImFsbG9jIiwiZnJvbSIsImdldExlbmd0aFN5bmMiLCJoYXNLbm93bkxlbmd0aCIsImdldExlbmd0aCIsImNiIiwic3VibWl0IiwiZGVmYXVsdHMiLCJvblJlc3BvbnNlIiwicmVzcG9uY2UiLCJkc3QiLCJzcmMiLCJmbGFnIiwiYXJndiIsInBvcyIsInRlcm1pbmF0b3JQb3MiLCJqc29uX3N0cmluZ2lmeSIsImpzb25fcGFyc2UiLCJzdXNwZWN0UHJvdG9SeCIsInN1c3BlY3RDb25zdHJ1Y3RvclJ4Iiwic3RyaWN0IiwiYWx3YXlzUGFyc2VBc0JpZyIsInVzZU5hdGl2ZUJpZ0ludCIsInByb3RvQWN0aW9uIiwiY29uc3RydWN0b3JBY3Rpb24iLCJhdCIsImNoIiwiZXNjYXBlZSIsImYiLCJudW1iZXIiLCJzdHJpbmciLCJCaWdJbnQiLCJoZXgiLCJ1ZmZmZiIsInN0YXJ0QXQiLCJmcm9tQ2hhckNvZGUiLCJ3aGl0ZSIsIm9iamVjdCIsImFycmF5Iiwid29yZCIsInJldml2ZXIiLCJ3YWxrIiwiaG9sZGVyIiwiZ2FwIiwiaW5kZW50IiwiZXNjYXBhYmxlIiwibWV0YSIsInF1b3RlIiwibGFzdEluZGV4IiwicGFydGlhbCIsIm1pbmQiLCJyZXBsYWNlciIsInNwYWNlIiwiZXh0ZW5zaW9ucyIsInR5cGVzIiwicHJlZmVyZW5jZSIsImRiIiwiZXh0bmFtZSIsIkVYVFJBQ1RfVFlQRV9SRUdFWFAiLCJURVhUX1RZUEVfUkVHRVhQIiwiY2hhcnNldCIsImNoYXJzZXRzIiwiZXh0ZW5zaW9uIiwiZXh0cyIsInRvIiwiREVGQVVMVF9QT1JUUyIsImZ0cCIsImdvcGhlciIsIndzIiwid3NzIiwic3RyaW5nRW5kc1dpdGgiLCJnZXRFbnYiLCJnZXRQcm94eUZvclVybCIsInBhcnNlZFVybCIsInByb3RvIiwiTk9fUFJPWFkiLCJldmVyeSIsInBhcnNlZFByb3h5IiwicGFyc2VkUHJveHlIb3N0bmFtZSIsInBhcnNlZFByb3h5UG9ydCIsInNob3VsZFByb3h5Iiwib3MiLCJoYXNGbGFnIiwiZm9yY2VDb2xvciIsImdldFN1cHBvcnRMZXZlbCIsImlzVFRZIiwicGxhdGZvcm0iLCJvc1JlbGVhc2UiLCJ2ZXJzaW9ucyIsIm5vZGUiLCJzb21lIiwiQ0lfTkFNRSIsIlRFQU1DSVRZX1ZFUlNJT04iLCJDT0xPUlRFUk0iLCJURVJNX1BST0dSQU1fVkVSU0lPTiIsIlRFUk1fUFJPR1JBTSIsIlRFUk0iLCJoYXNCYXNpYyIsImhhczI1NiIsImhhczE2bSIsInRyYW5zbGF0ZUxldmVsIiwiRk9SQ0VfQ09MT1IiLCJzdGRvdXQiLCJzdHJBcnJheSIsInJlc3VsdEFycmF5IiwiZmlyc3QiLCJjb21wb25lbnQiLCJwYXJ0cyIsImRlZmluaXRpb24iLCJyZXF1aXJlIiwiRm9ybURhdGEkMSIsInByb3h5RnJvbUVudiIsInpsaWIiLCJfaW50ZXJvcERlZmF1bHRMZWdhY3kiLCJGb3JtRGF0YV9fZGVmYXVsdCIsInVybF9fZGVmYXVsdCIsImh0dHBfX2RlZmF1bHQiLCJodHRwc19fZGVmYXVsdCIsInV0aWxfX2RlZmF1bHQiLCJmb2xsb3dSZWRpcmVjdHNfX2RlZmF1bHQiLCJ6bGliX19kZWZhdWx0Iiwic3RyZWFtX19kZWZhdWx0IiwidGhpc0FyZyIsImtpbmRPZiIsImNhY2hlIiwidGhpbmciLCJraW5kT2ZUZXN0IiwidHlwZU9mVGVzdCIsImlzVW5kZWZpbmVkIiwiaXNBcnJheUJ1ZmZlciIsImlzTnVtYmVyIiwiaXNPYmplY3QiLCJpc1BsYWluT2JqZWN0IiwiU3ltYm9sIiwidG9TdHJpbmdUYWciLCJpc0RhdGUiLCJpc0ZpbGUiLCJpc0Jsb2IiLCJpc0ZpbGVMaXN0IiwiaXNVUkxTZWFyY2hQYXJhbXMiLCJpc1JlYWRhYmxlU3RyZWFtIiwiaXNSZXF1ZXN0IiwiaXNSZXNwb25zZSIsImlzSGVhZGVycyIsImFsbE93bktleXMiLCJnZXRPd25Qcm9wZXJ0eU5hbWVzIiwiZmluZEtleSIsIl9rZXkiLCJfZ2xvYmFsIiwiZ2xvYmFsVGhpcyIsImdsb2JhbCIsImlzQ29udGV4dERlZmluZWQiLCJjb250ZXh0IiwiaXNUeXBlZEFycmF5IiwiVHlwZWRBcnJheSIsIlVpbnQ4QXJyYXkiLCJpc0hUTUxGb3JtIiwiaXNSZWdFeHAiLCJyZWR1Y2VEZXNjcmlwdG9ycyIsInJlZHVjZXIiLCJkZXNjcmlwdG9ycyIsImdldE93blByb3BlcnR5RGVzY3JpcHRvcnMiLCJyZWR1Y2VkRGVzY3JpcHRvcnMiLCJkZXNjcmlwdG9yIiwicmV0IiwiQUxQSEEiLCJESUdJVCIsIkFMUEhBX0RJR0lUIiwiaXNBc3luY0ZuIiwiX3NldEltbWVkaWF0ZSIsInNldEltbWVkaWF0ZVN1cHBvcnRlZCIsInBvc3RNZXNzYWdlU3VwcG9ydGVkIiwicG9zdE1lc3NhZ2UiLCJ0b2tlbiIsImNhbGxiYWNrcyIsImFkZEV2ZW50TGlzdGVuZXIiLCJhc2FwIiwicXVldWVNaWNyb3Rhc2siLCJ1dGlscyQxIiwiaXNGb3JtRGF0YSIsImtpbmQiLCJpc0FycmF5QnVmZmVyVmlldyIsIkFycmF5QnVmZmVyIiwiaXNWaWV3IiwiaXNCb29sZWFuIiwiaXNTdHJlYW0iLCJtZXJnZSIsImNhc2VsZXNzIiwiYXNzaWduVmFsdWUiLCJ0YXJnZXRLZXkiLCJzdHJpcEJPTSIsImNvbnRlbnQiLCJzdXBlckNvbnN0cnVjdG9yIiwicHJvcHMiLCJ0b0ZsYXRPYmplY3QiLCJzb3VyY2VPYmoiLCJkZXN0T2JqIiwicHJvcEZpbHRlciIsIm1lcmdlZCIsInNlYXJjaFN0cmluZyIsInBvc2l0aW9uIiwidG9BcnJheSIsImZvckVhY2hFbnRyeSIsImRvbmUiLCJwYWlyIiwibWF0Y2hBbGwiLCJyZWdFeHAiLCJtYXRjaGVzIiwiaGFzT3duUHJvcCIsImZyZWV6ZU1ldGhvZHMiLCJ0b09iamVjdFNldCIsImFycmF5T3JTdHJpbmciLCJ0b0NhbWVsQ2FzZSIsInRvRmluaXRlTnVtYmVyIiwiZGVmYXVsdFZhbHVlIiwiZ2VuZXJhdGVTdHJpbmciLCJpc1NwZWNDb21wbGlhbnRGb3JtIiwidG9KU09OT2JqZWN0IiwidmlzaXQiLCJyZWR1Y2VkVmFsdWUiLCJpc1RoZW5hYmxlIiwidGhlbiIsImNhdGNoIiwiQXhpb3NFcnJvciIsImRlc2NyaXB0aW9uIiwiZmlsZU5hbWUiLCJsaW5lTnVtYmVyIiwiY29sdW1uTnVtYmVyIiwic3RhdHVzIiwicHJvdG90eXBlJDEiLCJpc1Zpc2l0YWJsZSIsInJlbW92ZUJyYWNrZXRzIiwicmVuZGVyS2V5IiwiZG90cyIsImN1c3RvbVByb3BzIiwiYXhpb3NFcnJvciIsInByZWRpY2F0ZXMiLCJ0b0Zvcm1EYXRhIiwiZm9ybURhdGEiLCJtZXRhVG9rZW5zIiwiaW5kZXhlcyIsInZpc2l0b3IiLCJkZWZhdWx0VmlzaXRvciIsInVzZUJsb2IiLCJCbG9iIiwiY29udmVydFZhbHVlIiwiaXNGbGF0QXJyYXkiLCJlbCIsImV4cG9zZWRIZWxwZXJzIiwiYnVpbGQiLCJlbmNvZGUkMSIsImNoYXJNYXAiLCJlbmNvZGVVUklDb21wb25lbnQiLCJBeGlvc1VSTFNlYXJjaFBhcmFtcyIsIl9wYWlycyIsImVuY29kZSIsImJ1aWxkVVJMIiwiX2VuY29kZSIsInNlcmlhbGl6ZUZuIiwic2VyaWFsaXplIiwic2VyaWFsaXplZFBhcmFtcyIsImhhc2htYXJrSW5kZXgiLCJlbmNvZGVyIiwiSW50ZXJjZXB0b3JNYW5hZ2VyJDEiLCJJbnRlcmNlcHRvck1hbmFnZXIiLCJoYW5kbGVycyIsInVzZSIsImZ1bGZpbGxlZCIsInJlamVjdGVkIiwic3luY2hyb25vdXMiLCJydW5XaGVuIiwiZWplY3QiLCJjbGVhciIsInRyYW5zaXRpb25hbERlZmF1bHRzIiwic2lsZW50SlNPTlBhcnNpbmciLCJmb3JjZWRKU09OUGFyc2luZyIsImNsYXJpZnlUaW1lb3V0RXJyb3IiLCJwbGF0Zm9ybSQxIiwiaXNOb2RlIiwiY2xhc3NlcyIsIlVSTFNlYXJjaFBhcmFtcyIsImhhc0Jyb3dzZXJFbnYiLCJoYXNTdGFuZGFyZEJyb3dzZXJFbnYiLCJwcm9kdWN0IiwiaGFzU3RhbmRhcmRCcm93c2VyV2ViV29ya2VyRW52IiwiV29ya2VyR2xvYmFsU2NvcGUiLCJpbXBvcnRTY3JpcHRzIiwib3JpZ2luIiwiX19wcm90b19fIiwiZm9ybURhdGFUb0pTT04iLCJidWlsZFBhdGgiLCJpc051bWVyaWNLZXkiLCJpc0xhc3QiLCJhcnJheVRvT2JqZWN0IiwiZW50cmllcyIsInBhcnNlUHJvcFBhdGgiLCJ0cmFuc2l0aW9uYWwiLCJhZGFwdGVyIiwidHJhbnNmb3JtUmVxdWVzdCIsImhhc0pTT05Db250ZW50VHlwZSIsImlzT2JqZWN0UGF5bG9hZCIsInNldENvbnRlbnRUeXBlIiwiaGVscGVycyIsInRvVVJMRW5jb2RlZEZvcm0iLCJmb3JtU2VyaWFsaXplciIsIl9Gb3JtRGF0YSIsInJhd1ZhbHVlIiwicGFyc2VyIiwic3RyaW5naWZ5U2FmZWx5IiwiSlNPTlJlcXVlc3RlZCIsInN0cmljdEpTT05QYXJzaW5nIiwiRVJSX0JBRF9SRVNQT05TRSIsInhzcmZDb29raWVOYW1lIiwieHNyZkhlYWRlck5hbWUiLCJ2YWxpZGF0ZVN0YXR1cyIsImNvbW1vbiIsImRlZmF1bHRzJDEiLCJpZ25vcmVEdXBsaWNhdGVPZiIsIiRpbnRlcm5hbHMiLCJub3JtYWxpemVIZWFkZXIiLCJub3JtYWxpemVWYWx1ZSIsIm1hdGNoSGVhZGVyVmFsdWUiLCJpc0hlYWRlck5hbWVGaWx0ZXIiLCJBeGlvc0hlYWRlcnMiLCJ2YWx1ZU9yUmV3cml0ZSIsInJld3JpdGUiLCJfdmFsdWUiLCJfaGVhZGVyIiwiX3Jld3JpdGUiLCJsSGVhZGVyIiwic2V0SGVhZGVycyIsInJhd0hlYWRlcnMiLCJsaW5lIiwicGFyc2VIZWFkZXJzIiwidG9rZW5zIiwidG9rZW5zUkUiLCJwYXJzZVRva2VucyIsImhhcyIsIm1hdGNoZXIiLCJkZWxldGUiLCJkZWxldGVkIiwiZGVsZXRlSGVhZGVyIiwibm9ybWFsaXplZCIsImNoYXIiLCJmb3JtYXRIZWFkZXIiLCJ0YXJnZXRzIiwiYXNTdHJpbmdzIiwic3RhdGljIiwiY29tcHV0ZWQiLCJhY2Nlc3NvcnMiLCJkZWZpbmVBY2Nlc3NvciIsImFjY2Vzc29yTmFtZSIsIm1ldGhvZE5hbWUiLCJidWlsZEFjY2Vzc29ycyIsImFjY2Vzc29yIiwibWFwcGVkIiwiaGVhZGVyVmFsdWUiLCJBeGlvc0hlYWRlcnMkMSIsInRyYW5zZm9ybURhdGEiLCJmbnMiLCJpc0NhbmNlbCIsIl9fQ0FOQ0VMX18iLCJDYW5jZWxlZEVycm9yIiwiRVJSX0NBTkNFTEVEIiwic2V0dGxlIiwicmVqZWN0IiwiRVJSX0JBRF9SRVFVRVNUIiwiYnVpbGRGdWxsUGF0aCIsImJhc2VVUkwiLCJyZXF1ZXN0ZWRVUkwiLCJpc0Fic29sdXRlVVJMIiwicmVsYXRpdmVVUkwiLCJjb21iaW5lVVJMcyIsIlZFUlNJT04iLCJwYXJzZVByb3RvY29sIiwiREFUQV9VUkxfUEFUVEVSTiIsImtJbnRlcm5hbHMiLCJBeGlvc1RyYW5zZm9ybVN0cmVhbSIsIlRyYW5zZm9ybSIsInN1cGVyIiwicmVhZGFibGVIaWdoV2F0ZXJNYXJrIiwibWF4UmF0ZSIsImNodW5rU2l6ZSIsIm1pbkNodW5rU2l6ZSIsInRpbWVXaW5kb3ciLCJ0aWNrc1JhdGUiLCJzYW1wbGVzQ291bnQiLCJpbnRlcm5hbHMiLCJieXRlc1NlZW4iLCJpc0NhcHR1cmVkIiwibm90aWZpZWRCeXRlc0xvYWRlZCIsInRzIiwibm93IiwiYnl0ZXMiLCJvblJlYWRDYWxsYmFjayIsIl9yZWFkIiwiX3RyYW5zZm9ybSIsImNodW5rIiwiYnl0ZXNUaHJlc2hvbGQiLCJwdXNoQ2h1bmsiLCJfY2h1bmsiLCJfY2FsbGJhY2siLCJ0cmFuc2Zvcm1DaHVuayIsImJ5dGVzTGVmdCIsImNodW5rUmVtYWluZGVyIiwibWF4Q2h1bmtTaXplIiwicGFzc2VkIiwic3ViYXJyYXkiLCJ0cmFuc2Zvcm1OZXh0Q2h1bmsiLCJBeGlvc1RyYW5zZm9ybVN0cmVhbSQxIiwiYXN5bmNJdGVyYXRvciIsInJlYWRCbG9iJDEiLCJibG9iIiwiYXJyYXlCdWZmZXIiLCJCT1VOREFSWV9BTFBIQUJFVCIsInRleHRFbmNvZGVyIiwiVGV4dEVuY29kZXIiLCJDUkxGIiwiQ1JMRl9CWVRFUyIsIkZvcm1EYXRhUGFydCIsImVzY2FwZU5hbWUiLCJpc1N0cmluZ1ZhbHVlIiwiY29udGVudExlbmd0aCIsImZvcm1EYXRhVG9TdHJlYW0kMSIsImZvcm0iLCJoZWFkZXJzSGFuZGxlciIsInRhZyIsImJvdW5kYXJ5Qnl0ZXMiLCJmb290ZXJCeXRlcyIsInBhcnQiLCJjb21wdXRlZEhlYWRlcnMiLCJSZWFkYWJsZSIsIlpsaWJIZWFkZXJUcmFuc2Zvcm1TdHJlYW0iLCJfX3RyYW5zZm9ybSIsIlpsaWJIZWFkZXJUcmFuc2Zvcm1TdHJlYW0kMSIsImNhbGxiYWNraWZ5JDEiLCJwcm9ncmVzc0V2ZW50UmVkdWNlciIsImxpc3RlbmVyIiwiaXNEb3dubG9hZFN0cmVhbSIsImZyZXEiLCJieXRlc05vdGlmaWVkIiwiX3NwZWVkb21ldGVyIiwidGltZXN0YW1wcyIsImZpcnN0U2FtcGxlVFMiLCJoZWFkIiwidGFpbCIsImNodW5rTGVuZ3RoIiwic3RhcnRlZEF0IiwiYnl0ZXNDb3VudCIsInNwZWVkb21ldGVyIiwibGFzdEFyZ3MiLCJ0aW1lciIsInRpbWVzdGFtcCIsInRocmVzaG9sZCIsImludm9rZSIsInRocm90dGxlIiwibG9hZGVkIiwidG90YWwiLCJsZW5ndGhDb21wdXRhYmxlIiwicHJvZ3Jlc3NCeXRlcyIsInJhdGUiLCJwcm9ncmVzcyIsImVzdGltYXRlZCIsInByb2dyZXNzRXZlbnREZWNvcmF0b3IiLCJ0aHJvdHRsZWQiLCJhc3luY0RlY29yYXRvciIsInpsaWJPcHRpb25zIiwiZmx1c2giLCJjb25zdGFudHMiLCJaX1NZTkNfRkxVU0giLCJmaW5pc2hGbHVzaCIsImJyb3RsaU9wdGlvbnMiLCJCUk9UTElfT1BFUkFUSU9OX0ZMVVNIIiwiaXNCcm90bGlTdXBwb3J0ZWQiLCJjcmVhdGVCcm90bGlEZWNvbXByZXNzIiwiaHR0cEZvbGxvdyIsImh0dHBzRm9sbG93IiwiaXNIdHRwcyIsInN1cHBvcnRlZFByb3RvY29scyIsImZsdXNoT25GaW5pc2giLCJkaXNwYXRjaEJlZm9yZVJlZGlyZWN0IiwiYmVmb3JlUmVkaXJlY3RzIiwic2V0UHJveHkiLCJjb25maWdQcm94eSIsInByb3h5VXJsIiwiYmFzZTY0IiwicHJveHlIb3N0IiwicmVkaXJlY3RPcHRpb25zIiwiaXNIdHRwQWRhcHRlclN1cHBvcnRlZCIsImJ1aWxkQWRkcmVzc0VudHJ5IiwiYWRkcmVzcyIsImZhbWlseSIsInJlc29sdmVGYW1pbHkiLCJodHRwQWRhcHRlciIsImFzeW5jRXhlY3V0b3IiLCJvbkRvbmUiLCJyZXNwb25zZUVuY29kaW5nIiwiaXNEb25lIiwiX2xvb2t1cCIsIm9wdCIsImFyZzAiLCJhZGRyZXNzZXMiLCJhZGRyIiwiYWxsIiwiZW1pdHRlciIsIkV2ZW50RW1pdHRlciIsIm9uRmluaXNoZWQiLCJjYW5jZWxUb2tlbiIsInVuc3Vic2NyaWJlIiwic2lnbmFsIiwicmVtb3ZlRXZlbnRMaXN0ZW5lciIsInJlbW92ZUFsbExpc3RlbmVycyIsInJlYXNvbiIsImlzUmVqZWN0ZWQiLCJzdWJzY3JpYmUiLCJhYm9ydGVkIiwiZnVsbFBhdGgiLCJjb252ZXJ0ZWREYXRhIiwidXJpIiwiYXNCbG9iIiwiX0Jsb2IiLCJFUlJfSU5WQUxJRF9VUkwiLCJpc0Jhc2U2NCIsImRlY29kZVVSSUNvbXBvbmVudCIsIkVSUl9OT1RfU1VQUE9SVCIsImZyb21EYXRhVVJJIiwib25VcGxvYWRQcm9ncmVzcyIsIm9uRG93bmxvYWRQcm9ncmVzcyIsIm1heFVwbG9hZFJhdGUiLCJtYXhEb3dubG9hZFJhdGUiLCJ1c2VyQm91bmRhcnkiLCJoYXNDb250ZW50TGVuZ3RoIiwicHJvbWlzaWZ5Iiwic2V0Q29udGVudExlbmd0aCIsImdldENvbnRlbnRMZW5ndGgiLCJvYmplY3RNb2RlIiwicGlwZWxpbmUiLCJwYXJhbXNTZXJpYWxpemVyIiwiY3VzdG9tRXJyIiwiZXhpc3RzIiwiaHR0cEFnZW50IiwiaHR0cHNBZ2VudCIsInRyYW5zcG9ydCIsInNvY2tldFBhdGgiLCJpc0h0dHBzUmVxdWVzdCIsImluc2VjdXJlSFRUUFBhcnNlciIsInJlcyIsImRlc3Ryb3llZCIsInN0cmVhbXMiLCJyZXNwb25zZUxlbmd0aCIsInRyYW5zZm9ybVN0cmVhbSIsInJlc3BvbnNlU3RyZWFtIiwibGFzdFJlcXVlc3QiLCJkZWNvbXByZXNzIiwiY3JlYXRlVW56aXAiLCJvZmZMaXN0ZW5lcnMiLCJzdGF0dXNNZXNzYWdlIiwicmVzcG9uc2VCdWZmZXIiLCJ0b3RhbFJlc3BvbnNlQnl0ZXMiLCJzZXRLZWVwQWxpdmUiLCJFUlJfQkFEX09QVElPTl9WQUxVRSIsInRpbWVvdXRFcnJvck1lc3NhZ2UiLCJFVElNRURPVVQiLCJFQ09OTkFCT1JURUQiLCJlbmRlZCIsImVycm9yZWQiLCJQcm9taXNlIiwiX3JlamVjdCIsIm9uRG9uZUhhbmRsZXIiLCJpc1VSTFNhbWVPcmlnaW4iLCJtc2llIiwidXJsUGFyc2luZ05vZGUiLCJjcmVhdGVFbGVtZW50Iiwib3JpZ2luVVJMIiwicmVzb2x2ZVVSTCIsInNldEF0dHJpYnV0ZSIsInJlcXVlc3RVUkwiLCJjb29raWVzIiwiZXhwaXJlcyIsInNlY3VyZSIsImNvb2tpZSIsInRvR01UU3RyaW5nIiwicmVhZCIsInJlbW92ZSIsImhlYWRlcnNUb09iamVjdCIsIm1lcmdlQ29uZmlnIiwiY29uZmlnMSIsImNvbmZpZzIiLCJnZXRNZXJnZWRWYWx1ZSIsIm1lcmdlRGVlcFByb3BlcnRpZXMiLCJ2YWx1ZUZyb21Db25maWcyIiwiZGVmYXVsdFRvQ29uZmlnMiIsIm1lcmdlRGlyZWN0S2V5cyIsIm1lcmdlTWFwIiwidGltZW91dE1lc3NhZ2UiLCJ3aXRoQ3JlZGVudGlhbHMiLCJ3aXRoWFNSRlRva2VuIiwiY29uZmlnVmFsdWUiLCJyZXNvbHZlQ29uZmlnIiwibmV3Q29uZmlnIiwiYnRvYSIsInVuZXNjYXBlIiwieHNyZlZhbHVlIiwieGhyQWRhcHRlciIsIlhNTEh0dHBSZXF1ZXN0IiwiX2NvbmZpZyIsInJlcXVlc3REYXRhIiwib25DYW5jZWxlZCIsInVwbG9hZFRocm90dGxlZCIsImRvd25sb2FkVGhyb3R0bGVkIiwiZmx1c2hVcGxvYWQiLCJmbHVzaERvd25sb2FkIiwib25sb2FkZW5kIiwicmVzcG9uc2VIZWFkZXJzIiwiZ2V0QWxsUmVzcG9uc2VIZWFkZXJzIiwicmVzcG9uc2VUZXh0Iiwib3BlbiIsIm9ucmVhZHlzdGF0ZWNoYW5nZSIsInJlYWR5U3RhdGUiLCJyZXNwb25zZVVSTCIsIm9uYWJvcnQiLCJvbmVycm9yIiwiRVJSX05FVFdPUksiLCJvbnRpbWVvdXQiLCJzZXRSZXF1ZXN0SGVhZGVyIiwidXBsb2FkIiwiY2FuY2VsIiwic2VuZCIsImNvbXBvc2VTaWduYWxzJDEiLCJzaWduYWxzIiwiY29udHJvbGxlciIsIkFib3J0Q29udHJvbGxlciIsInN0cmVhbUNodW5rIiwidHJhY2tTdHJlYW0iLCJvblByb2dyZXNzIiwib25GaW5pc2giLCJpdGVyYWJsZSIsInJlYWRCeXRlcyIsIl9vbkZpbmlzaCIsIlJlYWRhYmxlU3RyZWFtIiwiY2xvc2UiLCJsb2FkZWRCeXRlcyIsImVucXVldWUiLCJyZXR1cm4iLCJoaWdoV2F0ZXJNYXJrIiwiaXNGZXRjaFN1cHBvcnRlZCIsImZldGNoIiwiUmVzcG9uc2UiLCJpc1JlYWRhYmxlU3RyZWFtU3VwcG9ydGVkIiwiZW5jb2RlVGV4dCIsInN1cHBvcnRzUmVxdWVzdFN0cmVhbSIsImR1cGxleEFjY2Vzc2VkIiwiaGFzQ29udGVudFR5cGUiLCJkdXBsZXgiLCJzdXBwb3J0c1Jlc3BvbnNlU3RyZWFtIiwicmVzb2x2ZXJzIiwicmVzb2x2ZUJvZHlMZW5ndGgiLCJnZXRCb2R5TGVuZ3RoIiwiZmV0Y2hBZGFwdGVyIiwiZmV0Y2hPcHRpb25zIiwiY29tcG9zZWRTaWduYWwiLCJzdG9wVGltZW91dCIsInJlcXVlc3RDb250ZW50TGVuZ3RoIiwiY29udGVudFR5cGVIZWFkZXIiLCJfcmVxdWVzdCIsImlzU3RyZWFtUmVzcG9uc2UiLCJyZXNwb25zZUNvbnRlbnRMZW5ndGgiLCJrbm93bkFkYXB0ZXJzIiwieGhyIiwicmVuZGVyUmVhc29uIiwiaXNSZXNvbHZlZEhhbmRsZSIsImFkYXB0ZXJzIiwibmFtZU9yQWRhcHRlciIsInJlamVjdGVkUmVhc29ucyIsInJlYXNvbnMiLCJ0aHJvd0lmQ2FuY2VsbGF0aW9uUmVxdWVzdGVkIiwidGhyb3dJZlJlcXVlc3RlZCIsImRpc3BhdGNoUmVxdWVzdCIsInZhbGlkYXRvcnMkMSIsImRlcHJlY2F0ZWRXYXJuaW5ncyIsInZhbGlkYXRvciIsImZvcm1hdE1lc3NhZ2UiLCJkZXNjIiwib3B0cyIsIkVSUl9ERVBSRUNBVEVEIiwiYXNzZXJ0T3B0aW9ucyIsInNjaGVtYSIsImFsbG93VW5rbm93biIsIkVSUl9CQURfT1BUSU9OIiwidmFsaWRhdG9ycyIsIkF4aW9zIiwiaW5zdGFuY2VDb25maWciLCJpbnRlcmNlcHRvcnMiLCJjb25maWdPclVybCIsImR1bW15IiwiYm9vbGVhbiIsImZ1bmN0aW9uIiwiY29udGV4dEhlYWRlcnMiLCJyZXF1ZXN0SW50ZXJjZXB0b3JDaGFpbiIsInN5bmNocm9ub3VzUmVxdWVzdEludGVyY2VwdG9ycyIsImludGVyY2VwdG9yIiwicmVzcG9uc2VJbnRlcmNlcHRvckNoYWluIiwicHJvbWlzZSIsImNoYWluIiwib25GdWxmaWxsZWQiLCJvblJlamVjdGVkIiwiZ2V0VXJpIiwiZ2VuZXJhdGVIVFRQTWV0aG9kIiwiaXNGb3JtIiwiQXhpb3MkMSIsIkNhbmNlbFRva2VuIiwiZXhlY3V0b3IiLCJyZXNvbHZlUHJvbWlzZSIsIl9saXN0ZW5lcnMiLCJvbmZ1bGZpbGxlZCIsIl9yZXNvbHZlIiwiQ2FuY2VsVG9rZW4kMSIsIkh0dHBTdGF0dXNDb2RlIiwiQ29udGludWUiLCJTd2l0Y2hpbmdQcm90b2NvbHMiLCJQcm9jZXNzaW5nIiwiRWFybHlIaW50cyIsIk9rIiwiQ3JlYXRlZCIsIkFjY2VwdGVkIiwiTm9uQXV0aG9yaXRhdGl2ZUluZm9ybWF0aW9uIiwiTm9Db250ZW50IiwiUmVzZXRDb250ZW50IiwiUGFydGlhbENvbnRlbnQiLCJNdWx0aVN0YXR1cyIsIkFscmVhZHlSZXBvcnRlZCIsIkltVXNlZCIsIk11bHRpcGxlQ2hvaWNlcyIsIk1vdmVkUGVybWFuZW50bHkiLCJGb3VuZCIsIlNlZU90aGVyIiwiTm90TW9kaWZpZWQiLCJVc2VQcm94eSIsIlVudXNlZCIsIlRlbXBvcmFyeVJlZGlyZWN0IiwiUGVybWFuZW50UmVkaXJlY3QiLCJCYWRSZXF1ZXN0IiwiVW5hdXRob3JpemVkIiwiUGF5bWVudFJlcXVpcmVkIiwiRm9yYmlkZGVuIiwiTm90Rm91bmQiLCJNZXRob2ROb3RBbGxvd2VkIiwiTm90QWNjZXB0YWJsZSIsIlByb3h5QXV0aGVudGljYXRpb25SZXF1aXJlZCIsIlJlcXVlc3RUaW1lb3V0IiwiQ29uZmxpY3QiLCJHb25lIiwiTGVuZ3RoUmVxdWlyZWQiLCJQcmVjb25kaXRpb25GYWlsZWQiLCJQYXlsb2FkVG9vTGFyZ2UiLCJVcmlUb29Mb25nIiwiVW5zdXBwb3J0ZWRNZWRpYVR5cGUiLCJSYW5nZU5vdFNhdGlzZmlhYmxlIiwiRXhwZWN0YXRpb25GYWlsZWQiLCJJbUFUZWFwb3QiLCJNaXNkaXJlY3RlZFJlcXVlc3QiLCJVbnByb2Nlc3NhYmxlRW50aXR5IiwiTG9ja2VkIiwiRmFpbGVkRGVwZW5kZW5jeSIsIlRvb0Vhcmx5IiwiVXBncmFkZVJlcXVpcmVkIiwiUHJlY29uZGl0aW9uUmVxdWlyZWQiLCJUb29NYW55UmVxdWVzdHMiLCJSZXF1ZXN0SGVhZGVyRmllbGRzVG9vTGFyZ2UiLCJVbmF2YWlsYWJsZUZvckxlZ2FsUmVhc29ucyIsIkludGVybmFsU2VydmVyRXJyb3IiLCJOb3RJbXBsZW1lbnRlZCIsIkJhZEdhdGV3YXkiLCJTZXJ2aWNlVW5hdmFpbGFibGUiLCJHYXRld2F5VGltZW91dCIsIkh0dHBWZXJzaW9uTm90U3VwcG9ydGVkIiwiVmFyaWFudEFsc29OZWdvdGlhdGVzIiwiSW5zdWZmaWNpZW50U3RvcmFnZSIsIkxvb3BEZXRlY3RlZCIsIk5vdEV4dGVuZGVkIiwiTmV0d29ya0F1dGhlbnRpY2F0aW9uUmVxdWlyZWQiLCJIdHRwU3RhdHVzQ29kZSQxIiwiYXhpb3MiLCJjcmVhdGVJbnN0YW5jZSIsImRlZmF1bHRDb25maWciLCJpbnN0YW5jZSIsIkNhbmNlbCIsInByb21pc2VzIiwiaXNBeGlvc0Vycm9yIiwicGF5bG9hZCIsImZvcm1Ub0pTT04iLCJnZXRBZGFwdGVyIiwiX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fIiwiX193ZWJwYWNrX2V4cG9ydHNfXyIsIl9fd2VicGFja19yZXF1aXJlX18iLCJtb2R1bGVJZCIsImNhY2hlZE1vZHVsZSIsIl9fd2VicGFja19tb2R1bGVzX18iXSwic291cmNlUm9vdCI6IiJ9 \ No newline at end of file diff --git a/dist/mailjet.node.js.LICENSE.txt b/dist/mailjet.node.js.LICENSE.txt index a846ee2..aae0300 100644 --- a/dist/mailjet.node.js.LICENSE.txt +++ b/dist/mailjet.node.js.LICENSE.txt @@ -12,4 +12,4 @@ * MIT Licensed */ -/*! node-mailjet v6.0.5 */ +/*! node-mailjet v6.0.6 */ diff --git a/dist/mailjet.web.js b/dist/mailjet.web.js index 3a48c10..0ef184f 100644 --- a/dist/mailjet.web.js +++ b/dist/mailjet.web.js @@ -1,3 +1,3 @@ /*! For license information please see mailjet.web.js.LICENSE.txt */ -define((function(){return function(){var e={76:function(e,t,n){"use strict";function r(e){return r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},r(e)}var o=this&&this.__assign||function(){return o=Object.assign||function(e){for(var t,n=1,r=arguments.length;n0&&o[o.length-1])||6!==i[0]&&2!==i[0])){s=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]-1?"text/plain":"application/json"},e.prototype.getRequestBody=function(e){return[m.default.Put,m.default.Post,m.default.Delete].includes(this.method)?e:void 0},e.prototype.buildFullUrl=function(){var t,n,r=this.client.getConfig(),o=null!==(t=this.config.host)&&void 0!==t?t:r.host,i=null!==(n=this.config.version)&&void 0!==n?n:r.version;return(0,f.default)(e.protocol,o,i,this.subPath,this.url)},e.prototype.buildSubPath=function(){if(this.actionPath){var e="contactslist"===this.resource&&"csvdata/text:plain"===this.actionPath,t="batchjob"===this.resource&&"csverror/text:csv"===this.actionPath;return e||t?"DATA":this.subPath}var n="send"===this.resource,r=this.resource.indexOf("sms")>-1;return n||r?"":"REST"},e.prototype.makeRequest=function(t,n,r){var i,s={url:t,params:r,data:this.getRequestBody(n),method:this.method,responseType:"json",headers:{"User-Agent":this.getUserAgent(),"Content-Type":this.getContentType(t)},transformResponse:function(t){var n="string"==typeof t,r="json"===this.responseType;return t&&n&&r?e.parseToJSONb(t):t}};e.isBrowser()&&(s.headers["X-User-Agent"]=s.headers["User-Agent"]);var a=this.getCredentials();a.apiToken?s.headers.Authorization="Bearer ".concat(a.apiToken):s.auth={username:a.apiKey,password:a.apiSecret};var u=this.client.getConfig(),c=this.client.getOptions();c.timeout&&(s.timeout=c.timeout),c.proxy&&(s.proxy=c.proxy),c.headers&&Object.keys(c.headers).length>0&&(s.headers=o(o({},s.headers),c.headers));var l=null!==(i=this.config.output)&&void 0!==i?i:u.output;return l&&(s.responseType=l),c.maxBodyLength&&(s.maxBodyLength=c.maxBodyLength),c.maxContentLength&&(s.maxContentLength=c.maxContentLength),(0,d.default)(s)},e.prototype.setBaseURL=function(e){return this.url=e.toLowerCase(),this},e.prototype.id=function(e){if(!["string","number"].includes(r(e)))throw new Error('Argument "value" must be string or number');return this.url=(0,f.default)(this.url,e.toString()),this},e.prototype.action=function(e){if("string"!=typeof e)throw new Error('Argument "name" must be string');switch(this.actionPath=e.toLowerCase(),this.actionPath){case"csvdata":this.actionPath="csvdata/text:plain";break;case"csverror":this.actionPath="csverror/text:csv"}return this.url=(0,f.default)(this.url,this.actionPath),this.subPath=this.buildSubPath(),this},e.prototype.request=function(e,t,n){var r,o,i,s,a;return void 0===e&&(e={}),void 0===t&&(t={}),void 0===n&&(n=!0),u(this,void 0,void 0,(function(){var u,l,f,p,m,g,y,b,v,w;return c(this,(function(c){switch(c.label){case 0:if(u=this.buildFullUrl(),this.setBaseURL(this.resource),!n)return[2,{body:b=this.getRequestBody(e),params:t,url:u}];c.label=1;case 1:return c.trys.push([1,3,,4]),[4,this.makeRequest(u,e,t)];case 2:return[2,{response:l=c.sent(),body:l.data}];case 3:if((f=c.sent())instanceof d.AxiosError)throw(p=new Error).code=f.code,p.config=f.config,f.response?(m=f.response,g=m.status,y=m.statusText,b=m.data,p.response=f.response,p.statusCode=g,p.statusText=y,v=null!==(r=null==b?void 0:b.ErrorMessage)&&void 0!==r?r:f.message,p.originalMessage=v,p.message='Unsuccessful: Status Code: "'.concat(p.statusCode,'" Message: "').concat(v,'"'),b&&("string"==typeof(w=null===(a=null===(s=null===(i=null===(o=b.Messages)||void 0===o?void 0:o[0])||void 0===i?void 0:i.Errors)||void 0===s?void 0:s[0])||void 0===a?void 0:a.ErrorMessage)&&(p.message+=";\n".concat(w)),(0,h.setValueIfNotNil)(p,"ErrorMessage",b.ErrorMessage),(0,h.setValueIfNotNil)(p,"ErrorCode",b.ErrorCode),(0,h.setValueIfNotNil)(p,"ErrorIdentifier",b.ErrorIdentifier),(0,h.setValueIfNotNil)(p,"ErrorRelatedTo",b.ErrorRelatedTo))):(p.response=null,p.statusCode=null,p.statusText=null,p.originalMessage=f.message,p.message='Unsuccessful: Error Code: "'.concat(p.code,'" Message: "').concat(f.message,'"')),p;throw f;case 4:return[2]}}))}))},e.parseToJSONb=function(e){if("string"!=typeof e)throw new Error('Argument "text" must be string');var t;try{t=y.parse(e)}catch(e){t={}}return t},e.isBrowser=function(){return"object"===("undefined"==typeof window?"undefined":r(window))},e.protocol="https://",e}();t.default=b},917:function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.SentCampaign=t.DraftCampaign=void 0,function(e){!function(e){e.Tool2="tool2",e.HTML2="html2",e.MJML="mjml"}(e.EditMode||(e.EditMode={})),function(e){e[e.AXCanceled=-3]="AXCanceled",e[e.Deleted=-2]="Deleted",e[e.Archived=-1]="Archived",e[e.Draft=0]="Draft",e[e.Programmed=1]="Programmed",e[e.Sent=2]="Sent",e[e.AXTested=3]="AXTested",e[e.AXSelected=4]="AXSelected"}(e.CampaignDraftStatus||(e.CampaignDraftStatus={})),function(e){e.AXCancelled="AXCancelled",e.Deleted="Deleted",e.Archived="Archived",e.Draft="Draft",e.Programmed="Programmed",e.Sent="Sent",e.AXTested="AXTested",e.AXSelected="AXSelected"}(e.CampaignDraftSendingStatus||(e.CampaignDraftSendingStatus={}))}(t.DraftCampaign||(t.DraftCampaign={})),function(e){!function(e){e[e.Transactional=1]="Transactional",e[e.Marketing=2]="Marketing",e[e.Unknown=3]="Unknown"}(e.CampaignType||(e.CampaignType={}))}(t.SentCampaign||(t.SentCampaign={}))},566:function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.Common=void 0,function(e){!function(e){e.Day="Day",e.Week="Week",e.Month="Month",e.Year="Year"}(e.Period||(e.Period={}))}(t.Common||(t.Common={}))},235:function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.ContactProperties=t.BulkContactManagement=void 0,function(e){!function(e){e.AddForce="addforce",e.AddNoForce="addnoforce",e.Remove="remove",e.UnSub="unsub"}(e.ManageContactsAction||(e.ManageContactsAction={})),function(e){e.AddForce="addforce",e.AddNoForce="addnoforce",e.UnSub="unsub",e.DuplicateOverride="duplicate-override",e.DuplicateNoOverride="duplicate-no-override"}(e.ImportListAction||(e.ImportListAction={})),function(e){e.AddForce="addforce",e.AddNoForce="addnoforce",e.Remove="remove",e.UnSub="unsub",e.ExcludeMarketing="excludemarketing",e.IncludeMarketing="includemarketing"}(e.ImportCSVMethod||(e.ImportCSVMethod={})),function(e){e.Upload="Upload",e.Completed="Completed",e.Abort="Abort"}(e.CSVImportStatus||(e.CSVImportStatus={})),function(e){e.Completed="Completed",e.InProgress="In Progress",e.Error="Error"}(e.JobStatus||(e.JobStatus={}))}(t.BulkContactManagement||(t.BulkContactManagement={})),function(e){!function(e){e.Str="str",e.Int="int",e.Float="float",e.Bool="bool",e.DateTime="datetime"}(e.DataType||(e.DataType={})),function(e){e.Static="static",e.Historic="historic"}(e.NameSpace||(e.NameSpace={}))}(t.ContactProperties||(t.ContactProperties={}))},354:function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.Message=void 0,function(e){!function(e){e[e.UserUnknown=1]="UserUnknown",e[e.MailboxInactive=2]="MailboxInactive",e[e.QuotaExceeded=3]="QuotaExceeded",e[e.InvalidDomain=4]="InvalidDomain",e[e.NoMailHost=5]="NoMailHost",e[e.RelayOrAccessDenied=6]="RelayOrAccessDenied",e[e.SenderBlocked=7]="SenderBlocked",e[e.ContentBlocked=8]="ContentBlocked",e[e.PolicyIssue=9]="PolicyIssue",e[e.SystemIssue=10]="SystemIssue",e[e.ProtocolIssue=11]="ProtocolIssue",e[e.ConnectionIssue=12]="ConnectionIssue",e[e.GreyListed=13]="GreyListed",e[e.PreBlocked=14]="PreBlocked",e[e.DuplicateInCampaign=15]="DuplicateInCampaign",e[e.SpamPreBlocked=16]="SpamPreBlocked",e[e.BadOrEmptyTemplate=17]="BadOrEmptyTemplate",e[e.ErrorInTemplateLanguage=18]="ErrorInTemplateLanguage",e[e.TypoFix=19]="TypoFix",e[e.BlackListed=20]="BlackListed",e[e.SpamReporter=21]="SpamReporter"}(e.MessageState||(e.MessageState={})),function(e){e[e.Transactional=1]="Transactional",e[e.Marketing=2]="Marketing",e[e.Unknown=3]="Unknown"}(e.FromType||(e.FromType={})),function(e){e[e.Processed=0]="Processed",e[e.Queued=1]="Queued",e[e.Sent=2]="Sent",e[e.Opened=3]="Opened",e[e.Clicked=4]="Clicked",e[e.Bounce=5]="Bounce",e[e.Spam=6]="Spam",e[e.Unsub=7]="Unsub",e[e.Blocked=8]="Blocked",e[e.SoftBounce=9]="SoftBounce",e[e.HardBounce=10]="HardBounce",e[e.Deferred=11]="Deferred"}(e.MessageStatus||(e.MessageStatus={})),function(e){e.Unknown="unknown",e.Queued="queued",e.Sent="sent",e.Opened="opened",e.Clicked="clicked",e.Bounce="bounce",e.Spam="spam",e.Unsub="unsub",e.Blocked="blocked",e.HardBounced="hardbounced",e.SoftBounced="softbounced",e.Deferred="deferred"}(e.CurrentMessageStatus||(e.CurrentMessageStatus={})),function(e){e.Sent="sent",e.Opened="opened",e.Clicked="clicked",e.Bounced="bounced",e.Blocked="blocked",e.Unsub="unsub",e.Spam="spam"}(e.EventType||(e.EventType={}))}(t.Message||(t.Message={}))},635:function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.Segmentation=void 0,function(e){!function(e){e.Used="used",e.UnUsed="unused",e.Deleted="deleted"}(e.SegmentStatus||(e.SegmentStatus={}))}(t.Segmentation||(t.Segmentation={}))},410:function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.SendEmailV3_1=void 0,function(e){!function(e){e.AccountDefault="account_default",e.Disabled="disabled",e.Enabled="enabled"}(e.TrackOpens||(e.TrackOpens={})),function(e){e.AccountDefault="account_default",e.Disabled="disabled",e.Enabled="enabled"}(e.TrackClicks||(e.TrackClicks={})),function(e){e.Success="success",e.Error="error"}(e.ResponseStatus||(e.ResponseStatus={}))}(t.SendEmailV3_1||(t.SendEmailV3_1={}))},256:function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.DNS=t.Sender=void 0,function(e){!function(e){e.Transactional="transactional",e.Bulk="bulk",e.Unknown="unknown"}(e.EmailType||(e.EmailType={})),function(e){e.Inactive="Inactive",e.Active="Active",e.Deleted="Deleted"}(e.SenderStatus||(e.SenderStatus={}))}(t.Sender||(t.Sender={})),function(e){!function(e){e.OK="OK",e.Error="Error",e.NotChecked="Not checked"}(e.DKIMConfigurationCheckStatus||(e.DKIMConfigurationCheckStatus={})),function(e){e.OK="OK",e.Error="Error"}(e.DKIMConfigurationStatus||(e.DKIMConfigurationStatus={})),function(e){e.OK="OK",e.Error="Error",e.NotChecked="Not checked",e.NotFound="Not found"}(e.SPFConfigurationCheckStatus||(e.SPFConfigurationCheckStatus={})),function(e){e.OK="OK",e.Error="Error"}(e.SPFConfigurationStatus||(e.SPFConfigurationStatus={}))}(t.DNS||(t.DNS={}))},295:function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.APIKeyConfiguration=void 0,function(e){!function(e){e.Normal="Normal",e.SoftLock="Softlock",e.HardLock="Hardlock"}(e.RunLevel||(e.RunLevel={}))}(t.APIKeyConfiguration||(t.APIKeyConfiguration={}))},83:function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.Statistic=void 0,function(e){!function(e){e.SentCampaign="Campaign",e.ABTesting="AX",e.Draft="NL"}(e.CampaignOverviewIDType||(e.CampaignOverviewIDType={})),function(e){e.Tool="tool",e.HTML="html",e.Tool2="tool2",e.HTML2="html2",e.MJML="mjml"}(e.CampaignOverviewEditMode||(e.CampaignOverviewEditMode={})),function(e){e.Full="full",e.Unknown="unknown"}(e.CampaignOverviewEditType||(e.CampaignOverviewEditType={})),function(e){e.Campaign="Campaign",e.APIKey="APIKey",e.List="List",e.Sender="Sender"}(e.CounterSource||(e.CounterSource={})),function(e){e.Highest="Highest",e.Hour="Hour",e.Day="Day",e.Lifetime="Lifetime"}(e.CounterResolution||(e.CounterResolution={})),function(e){e.Message="Message",e.Event="Event"}(e.CounterTiming||(e.CounterTiming={})),function(e){e.Open="open",e.Click="click"}(e.EmailEvent||(e.EmailEvent={}))}(t.Statistic||(t.Statistic={}))},98:function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.Template=void 0,function(e){!function(e){e.Full="full",e.Basic="basic",e.NewsLetter="newsletter",e.ECommerce="e-commerce",e.Events="events",e.Travel="travel",e.Sports="sports",e.Welcome="welcome",e.ContactPropertyUpdate="contact-property-update",e.Support="support",e.Invoice="invoice",e.Anniversary="anniversary",e.Account="account",e.Activation="activation"}(e.Categories||(e.Categories={})),function(e){e.ContainsAny="containsany",e.ContainsAll="containsall",e.IsSubSet="issubset"}(e.CategoriesSelectionMethod||(e.CategoriesSelectionMethod={})),function(e){e[e.DragAndDropBuilder=1]="DragAndDropBuilder",e[e.HTMLBuilder=2]="HTMLBuilder",e[e.SavedSectionBuilder=3]="SavedSectionBuilder",e[e.MJMLBuilder=4]="MJMLBuilder"}(e.EditMode||(e.EditMode={})),function(e){e.ApiKey="apikey",e.User="user",e.Global="global"}(e.OwnerType||(e.OwnerType={})),function(e){e.Marketing="marketing",e.Transactional="transactional",e.Automation="automation"}(e.Purposes||(e.Purposes={})),function(e){e.ContainsAny="containsany",e.ContainsAll="containsall",e.IsSubSet="issubset"}(e.PurposesSelectionMethod||(e.PurposesSelectionMethod={}))}(t.Template||(t.Template={}))},174:function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.Webhook=void 0,function(e){!function(e){e.Open="open",e.Click="click",e.Bounce="bounce",e.Spam="spam",e.Blocked="blocked",e.UnSub="unsub",e.Sent="sent"}(e.EventType||(e.EventType={})),function(e){e[e.Click=1]="Click",e[e.Bounce=2]="Bounce",e[e.Spam=3]="Spam",e[e.Blocked=4]="Blocked",e[e.Unsubscribe=5]="Unsubscribe",e[e.Open=6]="Open",e[e.Sent=7]="Sent"}(e.EventTypeValue||(e.EventTypeValue={})),function(e){e.Dead="dead",e.Alive="alive"}(e.Status||(e.Status={}))}(t.Webhook||(t.Webhook={}))},310:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.APIKeyConfiguration=t.DNS=t.Sender=t.Webhook=t.Statistic=t.Template=t.Segmentation=t.SentCampaign=t.DraftCampaign=t.ContactProperties=t.BulkContactManagement=t.Message=t.SendEmailV3_1=t.Common=void 0;var r=n(566);Object.defineProperty(t,"Common",{enumerable:!0,get:function(){return r.Common}});var o=n(410);Object.defineProperty(t,"SendEmailV3_1",{enumerable:!0,get:function(){return o.SendEmailV3_1}});var i=n(354);Object.defineProperty(t,"Message",{enumerable:!0,get:function(){return i.Message}});var s=n(235);Object.defineProperty(t,"BulkContactManagement",{enumerable:!0,get:function(){return s.BulkContactManagement}}),Object.defineProperty(t,"ContactProperties",{enumerable:!0,get:function(){return s.ContactProperties}});var a=n(917);Object.defineProperty(t,"DraftCampaign",{enumerable:!0,get:function(){return a.DraftCampaign}}),Object.defineProperty(t,"SentCampaign",{enumerable:!0,get:function(){return a.SentCampaign}});var u=n(635);Object.defineProperty(t,"Segmentation",{enumerable:!0,get:function(){return u.Segmentation}});var c=n(98);Object.defineProperty(t,"Template",{enumerable:!0,get:function(){return c.Template}});var l=n(83);Object.defineProperty(t,"Statistic",{enumerable:!0,get:function(){return l.Statistic}});var f=n(174);Object.defineProperty(t,"Webhook",{enumerable:!0,get:function(){return f.Webhook}});var p=n(256);Object.defineProperty(t,"Sender",{enumerable:!0,get:function(){return p.Sender}}),Object.defineProperty(t,"DNS",{enumerable:!0,get:function(){return p.DNS}});var d=n(295);Object.defineProperty(t,"APIKeyConfiguration",{enumerable:!0,get:function(){return d.APIKeyConfiguration}})},6:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.setValueIfNotNil=t.isPureObject=t.isUndefined=t.isNull=t.isNil=void 0;var o=r(n(808));t.isNil=o.default;var i=r(n(376));t.isNull=i.default;var s=r(n(34));t.isUndefined=s.default;var a=r(n(818));t.isPureObject=a.default;var u=r(n(190));t.setValueIfNotNil=u.default},808:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var o=r(n(376)),i=r(n(34));t.default=function(e){return(0,i.default)(e)||(0,o.default)(e)}},376:function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e){return null===e}},818:function(e,t){"use strict";function n(e){return n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},n(e)}Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e){return"object"===n(e)&&null!==e&&(Object.getPrototypeOf(e)===Object.prototype||null===Object.getPrototypeOf(e))}},34:function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e){return void 0===e}},190:function(e,t,n){"use strict";function r(e){return r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},r(e)}var o=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var i=o(n(808)),s=o(n(376));t.default=function(e,t,n){if("object"!==r(e)||(0,s.default)(e))throw Error('Argument "targetObject" is not object');if(!t)throw Error('Argument "path" is required');(0,i.default)(n)||(e[t]=n)}},431:function(e,t,n){var r;!function(o){"use strict";var i,s=/^-?(?:\d+(?:\.\d*)?|\.\d+)(?:e[+-]?\d+)?$/i,a=Math.ceil,u=Math.floor,c="[BigNumber Error] ",l=c+"Number primitive has more than 15 significant digits: ",f=1e14,p=14,d=9007199254740991,h=[1,10,100,1e3,1e4,1e5,1e6,1e7,1e8,1e9,1e10,1e11,1e12,1e13],m=1e7,g=1e9;function y(e){var t=0|e;return e>0||e===t?t:t-1}function b(e){for(var t,n,r=1,o=e.length,i=e[0]+"";rc^n?1:-1;for(a=(u=o.length)<(c=i.length)?u:c,s=0;si[s]^n?1:-1;return u==c?0:u>c^n?1:-1}function w(e,t,n,r){if(en||e!==u(e))throw Error(c+(r||"Argument")+("number"==typeof e?en?" out of range: ":" not an integer: ":" not a primitive number: ")+String(e))}function S(e){var t=e.c.length-1;return y(e.e/p)==t&&e.c[t]%2!=0}function O(e,t){return(e.length>1?e.charAt(0)+"."+e.slice(1):e)+(t<0?"e":"e+")+t}function E(e,t,n){var r,o;if(t<0){for(o=n+".";++t;o+=n);e=o+e}else if(++t>(r=e.length)){for(o=n,t-=r;--t;o+=n);e+=o}else tU?y.c=y.e=null:e.e=10;f/=10,c++);return void(c>U?y.c=y.e=null:(y.e=c,y.c=[e]))}g=String(e)}else{if(!s.test(g=String(e)))return o(y,g,h);y.s=45==g.charCodeAt(0)?(g=g.slice(1),-1):1}(c=g.indexOf("."))>-1&&(g=g.replace(".","")),(f=g.search(/e/i))>0?(c<0&&(c=f),c+=+g.slice(f+1),g=g.substring(0,f)):c<0&&(c=g.length)}else{if(w(t,2,H.length,"Base"),10==t)return G(y=new K(e),x+y.e+1,R);if(g=String(e),h="number"==typeof e){if(0*e!=0)return o(y,g,h,t);if(y.s=1/e<0?(g=g.slice(1),-1):1,K.DEBUG&&g.replace(/^0\.0*|\./,"").length>15)throw Error(l+e)}else y.s=45===g.charCodeAt(0)?(g=g.slice(1),-1):1;for(n=H.slice(0,t),c=f=0,m=g.length;fc){c=m;continue}}else if(!a&&(g==g.toUpperCase()&&(g=g.toLowerCase())||g==g.toLowerCase()&&(g=g.toUpperCase()))){a=!0,f=-1,c=0;continue}return o(y,String(e),h,t)}h=!1,(c=(g=r(g,t,10,y.s)).indexOf("."))>-1?g=g.replace(".",""):c=g.length}for(f=0;48===g.charCodeAt(f);f++);for(m=g.length;48===g.charCodeAt(--m););if(g=g.slice(f,++m)){if(m-=f,h&&K.DEBUG&&m>15&&(e>d||e!==u(e)))throw Error(l+y.s*e);if((c=c-f-1)>U)y.c=y.e=null;else if(c=D)?O(u,s):E(u,s,"0");else if(i=(e=G(new K(e),t,n)).e,a=(u=b(e.c)).length,1==r||2==r&&(t<=i||i<=B)){for(;aa){if(--t>0)for(u+=".";t--;u+="0");}else if((t+=i-a)>0)for(i+1==a&&(u+=".");t--;u+="0");return e.s<0&&o?"-"+u:u}function z(e,t){for(var n,r=1,o=new K(e[0]);r=10;o/=10,r++);return(n=r+n*p-1)>U?e.c=e.e=null:n=10;c/=10,o++);if((i=t-o)<0)i+=p,s=t,m=(l=g[d=0])/y[o-s-1]%10|0;else if((d=a((i+1)/p))>=g.length){if(!r)break e;for(;g.length<=d;g.push(0));l=m=0,o=1,s=(i%=p)-p+1}else{for(l=c=g[d],o=1;c>=10;c/=10,o++);m=(s=(i%=p)-p+o)<0?0:l/y[o-s-1]%10|0}if(r=r||t<0||null!=g[d+1]||(s<0?l:l%y[o-s-1]),r=n<4?(m||r)&&(0==n||n==(e.s<0?3:2)):m>5||5==m&&(4==n||r||6==n&&(i>0?s>0?l/y[o-s]:0:g[d-1])%10&1||n==(e.s<0?8:7)),t<1||!g[0])return g.length=0,r?(t-=e.e+1,g[0]=y[(p-t%p)%p],e.e=-t||0):g[0]=e.e=0,e;if(0==i?(g.length=d,c=1,d--):(g.length=d+1,c=y[p-i],g[d]=s>0?u(l/y[o-s]%y[s])*c:0),r)for(;;){if(0==d){for(i=1,s=g[0];s>=10;s/=10,i++);for(s=g[0]+=c,c=1;s>=10;s/=10,c++);i!=c&&(e.e++,g[0]==f&&(g[0]=1));break}if(g[d]+=c,g[d]!=f)break;g[d--]=0,c=1}for(i=g.length;0===g[--i];g.pop());}e.e>U?e.c=e.e=null:e.e=D?O(t,n):E(t,n,"0"),e.s<0?"-"+t:t)}return K.clone=e,K.ROUND_UP=0,K.ROUND_DOWN=1,K.ROUND_CEIL=2,K.ROUND_FLOOR=3,K.ROUND_HALF_UP=4,K.ROUND_HALF_DOWN=5,K.ROUND_HALF_EVEN=6,K.ROUND_HALF_CEIL=7,K.ROUND_HALF_FLOOR=8,K.EUCLID=9,K.config=K.set=function(e){var t,n;if(null!=e){if("object"!=typeof e)throw Error(c+"Object expected: "+e);if(e.hasOwnProperty(t="DECIMAL_PLACES")&&(w(n=e[t],0,g,t),x=n),e.hasOwnProperty(t="ROUNDING_MODE")&&(w(n=e[t],0,8,t),R=n),e.hasOwnProperty(t="EXPONENTIAL_AT")&&((n=e[t])&&n.pop?(w(n[0],-g,0,t),w(n[1],0,g,t),B=n[0],D=n[1]):(w(n,-g,g,t),B=-(D=n<0?-n:n))),e.hasOwnProperty(t="RANGE"))if((n=e[t])&&n.pop)w(n[0],-g,-1,t),w(n[1],1,g,t),M=n[0],U=n[1];else{if(w(n,-g,g,t),!n)throw Error(c+t+" cannot be zero: "+n);M=-(U=n<0?-n:n)}if(e.hasOwnProperty(t="CRYPTO")){if((n=e[t])!==!!n)throw Error(c+t+" not true or false: "+n);if(n){if("undefined"==typeof crypto||!crypto||!crypto.getRandomValues&&!crypto.randomBytes)throw I=!n,Error(c+"crypto unavailable");I=n}else I=n}if(e.hasOwnProperty(t="MODULO_MODE")&&(w(n=e[t],0,9,t),L=n),e.hasOwnProperty(t="POW_PRECISION")&&(w(n=e[t],0,g,t),F=n),e.hasOwnProperty(t="FORMAT")){if("object"!=typeof(n=e[t]))throw Error(c+t+" not an object: "+n);q=n}if(e.hasOwnProperty(t="ALPHABET")){if("string"!=typeof(n=e[t])||/^.?$|[+\-.\s]|(.).*\1/.test(n))throw Error(c+t+" invalid: "+n);H=n}}return{DECIMAL_PLACES:x,ROUNDING_MODE:R,EXPONENTIAL_AT:[B,D],RANGE:[M,U],CRYPTO:I,MODULO_MODE:L,POW_PRECISION:F,FORMAT:q,ALPHABET:H}},K.isBigNumber=function(e){if(!e||!0!==e._isBigNumber)return!1;if(!K.DEBUG)return!0;var t,n,r=e.c,o=e.e,i=e.s;e:if("[object Array]"=={}.toString.call(r)){if((1===i||-1===i)&&o>=-g&&o<=g&&o===u(o)){if(0===r[0]){if(0===o&&1===r.length)return!0;break e}if((t=(o+1)%p)<1&&(t+=p),String(r[0]).length==t){for(t=0;t=f||n!==u(n))break e;if(0!==n)return!0}}}else if(null===r&&null===o&&(null===i||1===i||-1===i))return!0;throw Error(c+"Invalid BigNumber: "+e)},K.maximum=K.max=function(){return z(arguments,k.lt)},K.minimum=K.min=function(){return z(arguments,k.gt)},K.random=(i=9007199254740992,A=Math.random()*i&2097151?function(){return u(Math.random()*i)}:function(){return 8388608*(1073741824*Math.random()|0)+(8388608*Math.random()|0)},function(e){var t,n,r,o,i,s=0,l=[],f=new K(N);if(null==e?e=x:w(e,0,g),o=a(e/p),I)if(crypto.getRandomValues){for(t=crypto.getRandomValues(new Uint32Array(o*=2));s>>11))>=9e15?(n=crypto.getRandomValues(new Uint32Array(2)),t[s]=n[0],t[s+1]=n[1]):(l.push(i%1e14),s+=2);s=o/2}else{if(!crypto.randomBytes)throw I=!1,Error(c+"crypto unavailable");for(t=crypto.randomBytes(o*=7);s=9e15?crypto.randomBytes(7).copy(t,s):(l.push(i%1e14),s+=7);s=o/7}if(!I)for(;s=10;i/=10,s++);sn-1&&(null==s[o+1]&&(s[o+1]=0),s[o+1]+=s[o]/n|0,s[o]%=n)}return s.reverse()}return function(r,o,i,s,a){var u,c,l,f,p,d,h,m,g=r.indexOf("."),y=x,v=R;for(g>=0&&(f=F,F=0,r=r.replace(".",""),d=(m=new K(o)).pow(r.length-g),F=f,m.c=t(E(b(d.c),d.e,"0"),10,i,e),m.e=m.c.length),l=f=(h=t(r,o,i,a?(u=H,e):(u=e,H))).length;0==h[--f];h.pop());if(!h[0])return u.charAt(0);if(g<0?--l:(d.c=h,d.e=l,d.s=s,h=(d=n(d,m,y,v,i)).c,p=d.r,l=d.e),g=h[c=l+y+1],f=i/2,p=p||c<0||null!=h[c+1],p=v<4?(null!=g||p)&&(0==v||v==(d.s<0?3:2)):g>f||g==f&&(4==v||p||6==v&&1&h[c-1]||v==(d.s<0?8:7)),c<1||!h[0])r=p?E(u.charAt(1),-y,u.charAt(0)):u.charAt(0);else{if(h.length=c,p)for(--i;++h[--c]>i;)h[c]=0,c||(++l,h=[1].concat(h));for(f=h.length;!h[--f];);for(g=0,r="";g<=f;r+=u.charAt(h[g++]));r=E(r,l,u.charAt(0))}return r}}(),n=function(){function e(e,t,n){var r,o,i,s,a=0,u=e.length,c=t%m,l=t/m|0;for(e=e.slice();u--;)a=((o=c*(i=e[u]%m)+(r=l*i+(s=e[u]/m|0)*c)%m*m+a)/n|0)+(r/m|0)+l*s,e[u]=o%n;return a&&(e=[a].concat(e)),e}function t(e,t,n,r){var o,i;if(n!=r)i=n>r?1:-1;else for(o=i=0;ot[o]?1:-1;break}return i}function n(e,t,n,r){for(var o=0;n--;)e[n]-=o,o=e[n]1;e.splice(0,1));}return function(r,o,i,s,a){var c,l,d,h,m,g,b,v,w,S,O,E,A,C,j,P,T,_=r.s==o.s?1:-1,k=r.c,N=o.c;if(!(k&&k[0]&&N&&N[0]))return new K(r.s&&o.s&&(k?!N||k[0]!=N[0]:N)?k&&0==k[0]||!N?0*_:_/0:NaN);for(w=(v=new K(_)).c=[],_=i+(l=r.e-o.e)+1,a||(a=f,l=y(r.e/p)-y(o.e/p),_=_/p|0),d=0;N[d]==(k[d]||0);d++);if(N[d]>(k[d]||0)&&l--,_<0)w.push(1),h=!0;else{for(C=k.length,P=N.length,d=0,_+=2,(m=u(a/(N[0]+1)))>1&&(N=e(N,m,a),k=e(k,m,a),P=N.length,C=k.length),A=P,O=(S=k.slice(0,P)).length;O=a/2&&j++;do{if(m=0,(c=t(N,S,P,O))<0){if(E=S[0],P!=O&&(E=E*a+(S[1]||0)),(m=u(E/j))>1)for(m>=a&&(m=a-1),b=(g=e(N,m,a)).length,O=S.length;1==t(g,S,b,O);)m--,n(g,P=10;_/=10,d++);G(v,i+(v.e=d+l*p-1)+1,s,h)}else v.e=l,v.r=+h;return v}}(),C=/^(-?)0([xbo])(?=\w[\w.]*$)/i,j=/^([^.]+)\.$/,P=/^\.([^.]+)$/,T=/^-?(Infinity|NaN)$/,_=/^\s*\+(?=[\w.])|^\s+|\s+$/g,o=function(e,t,n,r){var o,i=n?t:t.replace(_,"");if(T.test(i))e.s=isNaN(i)?null:i<0?-1:1;else{if(!n&&(i=i.replace(C,(function(e,t,n){return o="x"==(n=n.toLowerCase())?16:"b"==n?2:8,r&&r!=o?e:t})),r&&(o=r,i=i.replace(j,"$1").replace(P,"0.$1")),t!=i))return new K(i,o);if(K.DEBUG)throw Error(c+"Not a"+(r?" base "+r:"")+" number: "+t);e.s=null}e.c=e.e=null},k.absoluteValue=k.abs=function(){var e=new K(this);return e.s<0&&(e.s=1),e},k.comparedTo=function(e,t){return v(this,new K(e,t))},k.decimalPlaces=k.dp=function(e,t){var n,r,o,i=this;if(null!=e)return w(e,0,g),null==t?t=R:w(t,0,8),G(new K(i),e+i.e+1,t);if(!(n=i.c))return null;if(r=((o=n.length-1)-y(this.e/p))*p,o=n[o])for(;o%10==0;o/=10,r--);return r<0&&(r=0),r},k.dividedBy=k.div=function(e,t){return n(this,new K(e,t),x,R)},k.dividedToIntegerBy=k.idiv=function(e,t){return n(this,new K(e,t),0,1)},k.exponentiatedBy=k.pow=function(e,t){var n,r,o,i,s,l,f,d,h=this;if((e=new K(e)).c&&!e.isInteger())throw Error(c+"Exponent not an integer: "+W(e));if(null!=t&&(t=new K(t)),s=e.e>14,!h.c||!h.c[0]||1==h.c[0]&&!h.e&&1==h.c.length||!e.c||!e.c[0])return d=new K(Math.pow(+W(h),s?2-S(e):+W(e))),t?d.mod(t):d;if(l=e.s<0,t){if(t.c?!t.c[0]:!t.s)return new K(NaN);(r=!l&&h.isInteger()&&t.isInteger())&&(h=h.mod(t))}else{if(e.e>9&&(h.e>0||h.e<-1||(0==h.e?h.c[0]>1||s&&h.c[1]>=24e7:h.c[0]<8e13||s&&h.c[0]<=9999975e7)))return i=h.s<0&&S(e)?-0:0,h.e>-1&&(i=1/i),new K(l?1/i:i);F&&(i=a(F/p+2))}for(s?(n=new K(.5),l&&(e.s=1),f=S(e)):f=(o=Math.abs(+W(e)))%2,d=new K(N);;){if(f){if(!(d=d.times(h)).c)break;i?d.c.length>i&&(d.c.length=i):r&&(d=d.mod(t))}if(o){if(0===(o=u(o/2)))break;f=o%2}else if(G(e=e.times(n),e.e+1,1),e.e>14)f=S(e);else{if(0===(o=+W(e)))break;f=o%2}h=h.times(h),i?h.c&&h.c.length>i&&(h.c.length=i):r&&(h=h.mod(t))}return r?d:(l&&(d=N.div(d)),t?d.mod(t):i?G(d,F,R,undefined):d)},k.integerValue=function(e){var t=new K(this);return null==e?e=R:w(e,0,8),G(t,t.e+1,e)},k.isEqualTo=k.eq=function(e,t){return 0===v(this,new K(e,t))},k.isFinite=function(){return!!this.c},k.isGreaterThan=k.gt=function(e,t){return v(this,new K(e,t))>0},k.isGreaterThanOrEqualTo=k.gte=function(e,t){return 1===(t=v(this,new K(e,t)))||0===t},k.isInteger=function(){return!!this.c&&y(this.e/p)>this.c.length-2},k.isLessThan=k.lt=function(e,t){return v(this,new K(e,t))<0},k.isLessThanOrEqualTo=k.lte=function(e,t){return-1===(t=v(this,new K(e,t)))||0===t},k.isNaN=function(){return!this.s},k.isNegative=function(){return this.s<0},k.isPositive=function(){return this.s>0},k.isZero=function(){return!!this.c&&0==this.c[0]},k.minus=function(e,t){var n,r,o,i,s=this,a=s.s;if(t=(e=new K(e,t)).s,!a||!t)return new K(NaN);if(a!=t)return e.s=-t,s.plus(e);var u=s.e/p,c=e.e/p,l=s.c,d=e.c;if(!u||!c){if(!l||!d)return l?(e.s=-t,e):new K(d?s:NaN);if(!l[0]||!d[0])return d[0]?(e.s=-t,e):new K(l[0]?s:3==R?-0:0)}if(u=y(u),c=y(c),l=l.slice(),a=u-c){for((i=a<0)?(a=-a,o=l):(c=u,o=d),o.reverse(),t=a;t--;o.push(0));o.reverse()}else for(r=(i=(a=l.length)<(t=d.length))?a:t,a=t=0;t0)for(;t--;l[n++]=0);for(t=f-1;r>a;){if(l[--r]=0;){for(n=0,h=E[o]%w,g=E[o]/w|0,i=o+(s=u);i>o;)n=((c=h*(c=O[--s]%w)+(a=g*c+(l=O[s]/w|0)*h)%w*w+b[i]+n)/v|0)+(a/w|0)+g*l,b[i--]=c%v;b[i]=n}return n?++r:b.splice(0,1),J(e,b,r)},k.negated=function(){var e=new K(this);return e.s=-e.s||null,e},k.plus=function(e,t){var n,r=this,o=r.s;if(t=(e=new K(e,t)).s,!o||!t)return new K(NaN);if(o!=t)return e.s=-t,r.minus(e);var i=r.e/p,s=e.e/p,a=r.c,u=e.c;if(!i||!s){if(!a||!u)return new K(o/0);if(!a[0]||!u[0])return u[0]?e:new K(a[0]?r:0*o)}if(i=y(i),s=y(s),a=a.slice(),o=i-s){for(o>0?(s=i,n=u):(o=-o,n=a),n.reverse();o--;n.push(0));n.reverse()}for((o=a.length)-(t=u.length)<0&&(n=u,u=a,a=n,t=o),o=0;t;)o=(a[--t]=a[t]+u[t]+o)/f|0,a[t]=f===a[t]?0:a[t]%f;return o&&(a=[o].concat(a),++s),J(e,a,s)},k.precision=k.sd=function(e,t){var n,r,o,i=this;if(null!=e&&e!==!!e)return w(e,1,g),null==t?t=R:w(t,0,8),G(new K(i),e,t);if(!(n=i.c))return null;if(r=(o=n.length-1)*p+1,o=n[o]){for(;o%10==0;o/=10,r--);for(o=n[0];o>=10;o/=10,r++);}return e&&i.e+1>r&&(r=i.e+1),r},k.shiftedBy=function(e){return w(e,-9007199254740991,d),this.times("1e"+e)},k.squareRoot=k.sqrt=function(){var e,t,r,o,i,s=this,a=s.c,u=s.s,c=s.e,l=x+4,f=new K("0.5");if(1!==u||!a||!a[0])return new K(!u||u<0&&(!a||a[0])?NaN:a?s:1/0);if(0==(u=Math.sqrt(+W(s)))||u==1/0?(((t=b(a)).length+c)%2==0&&(t+="0"),u=Math.sqrt(+t),c=y((c+1)/2)-(c<0||c%2),r=new K(t=u==1/0?"5e"+c:(t=u.toExponential()).slice(0,t.indexOf("e")+1)+c)):r=new K(u+""),r.c[0])for((u=(c=r.e)+l)<3&&(u=0);;)if(i=r,r=f.times(i.plus(n(s,i,l,1))),b(i.c).slice(0,u)===(t=b(r.c)).slice(0,u)){if(r.e0&&m>0){for(i=m%a||a,f=h.substr(0,i);i0&&(f+=l+h.slice(i)),d&&(f="-"+f)}r=p?f+(n.decimalSeparator||"")+((u=+n.fractionGroupSize)?p.replace(new RegExp("\\d{"+u+"}\\B","g"),"$&"+(n.fractionGroupSeparator||"")):p):f}return(n.prefix||"")+r+(n.suffix||"")},k.toFraction=function(e){var t,r,o,i,s,a,u,l,f,d,m,g,y=this,v=y.c;if(null!=e&&(!(u=new K(e)).isInteger()&&(u.c||1!==u.s)||u.lt(N)))throw Error(c+"Argument "+(u.isInteger()?"out of range: ":"not an integer: ")+W(u));if(!v)return new K(y);for(t=new K(N),f=r=new K(N),o=l=new K(N),g=b(v),s=t.e=g.length-y.e-1,t.c[0]=h[(a=s%p)<0?p+a:a],e=!e||u.comparedTo(t)>0?s>0?t:f:u,a=U,U=1/0,u=new K(g),l.c[0]=0;d=n(u,t,0,1),1!=(i=r.plus(d.times(o))).comparedTo(e);)r=o,o=i,f=l.plus(d.times(i=f)),l=i,t=u.minus(d.times(i=t)),u=i;return i=n(e.minus(r),o,0,1),l=l.plus(i.times(f)),r=r.plus(i.times(o)),l.s=f.s=y.s,m=n(f,o,s*=2,R).minus(y).abs().comparedTo(n(l,r,s,R).minus(y).abs())<1?[f,o]:[l,r],U=a,m},k.toNumber=function(){return+W(this)},k.toPrecision=function(e,t){return null!=e&&w(e,1,g),V(this,e,t,2)},k.toString=function(e){var t,n=this,o=n.s,i=n.e;return null===i?o?(t="Infinity",o<0&&(t="-"+t)):t="NaN":(null==e?t=i<=B||i>=D?O(b(n.c),i):E(b(n.c),i,"0"):10===e?t=E(b((n=G(new K(n),x+i+1,R)).c),n.e,"0"):(w(e,2,H.length,"Base"),t=r(E(b(n.c),i,"0"),10,e,o,!0)),o<0&&n.c[0]&&(t="-"+t)),t},k.valueOf=k.toJSON=function(){return W(this)},k._isBigNumber=!0,null!=t&&K.set(t),K}(),i.default=i.BigNumber=i,void 0===(r=function(){return i}.call(t,n,t,e))||(e.exports=r)}()},400:function(e,t,n){var r=n(123).stringify,o=n(813);e.exports=function(e){return{parse:o(e),stringify:r}},e.exports.parse=o(),e.exports.stringify=r},813:function(e,t,n){var r=null;const o=/(?:_|\\u005[Ff])(?:_|\\u005[Ff])(?:p|\\u0070)(?:r|\\u0072)(?:o|\\u006[Ff])(?:t|\\u0074)(?:o|\\u006[Ff])(?:_|\\u005[Ff])(?:_|\\u005[Ff])/,i=/(?:c|\\u0063)(?:o|\\u006[Ff])(?:n|\\u006[Ee])(?:s|\\u0073)(?:t|\\u0074)(?:r|\\u0072)(?:u|\\u0075)(?:c|\\u0063)(?:t|\\u0074)(?:o|\\u006[Ff])(?:r|\\u0072)/;e.exports=function(e){"use strict";var t={strict:!1,storeAsString:!1,alwaysParseAsBig:!1,useNativeBigInt:!1,protoAction:"error",constructorAction:"error"};if(null!=e){if(!0===e.strict&&(t.strict=!0),!0===e.storeAsString&&(t.storeAsString=!0),t.alwaysParseAsBig=!0===e.alwaysParseAsBig&&e.alwaysParseAsBig,t.useNativeBigInt=!0===e.useNativeBigInt&&e.useNativeBigInt,void 0!==e.constructorAction){if("error"!==e.constructorAction&&"ignore"!==e.constructorAction&&"preserve"!==e.constructorAction)throw new Error(`Incorrect value for constructorAction option, must be "error", "ignore" or undefined but passed ${e.constructorAction}`);t.constructorAction=e.constructorAction}if(void 0!==e.protoAction){if("error"!==e.protoAction&&"ignore"!==e.protoAction&&"preserve"!==e.protoAction)throw new Error(`Incorrect value for protoAction option, must be "error", "ignore" or undefined but passed ${e.protoAction}`);t.protoAction=e.protoAction}}var s,a,u,c,l={'"':'"',"\\":"\\","/":"/",b:"\b",f:"\f",n:"\n",r:"\r",t:"\t"},f=function(e){throw{name:"SyntaxError",message:e,at:s,text:u}},p=function(e){return e&&e!==a&&f("Expected '"+e+"' instead of '"+a+"'"),a=u.charAt(s),s+=1,a},d=function(){var e,o="";for("-"===a&&(o="-",p("-"));a>="0"&&a<="9";)o+=a,p();if("."===a)for(o+=".";p()&&a>="0"&&a<="9";)o+=a;if("e"===a||"E"===a)for(o+=a,p(),"-"!==a&&"+"!==a||(o+=a,p());a>="0"&&a<="9";)o+=a,p();if(e=+o,isFinite(e))return null==r&&(r=n(431)),o.length>15?t.storeAsString?o:t.useNativeBigInt?BigInt(o):new r(o):t.alwaysParseAsBig?t.useNativeBigInt?BigInt(e):new r(e):e;f("Bad number")},h=function(){var e,t,n,r="";if('"'===a)for(var o=s;p();){if('"'===a)return s-1>o&&(r+=u.substring(o,s-1)),p(),r;if("\\"===a){if(s-1>o&&(r+=u.substring(o,s-1)),p(),"u"===a){for(n=0,t=0;t<4&&(e=parseInt(p(),16),isFinite(e));t+=1)n=16*n+e;r+=String.fromCharCode(n)}else{if("string"!=typeof l[a])break;r+=l[a]}o=s}}f("Bad string")},m=function(){for(;a&&a<=" ";)p()};return c=function(){switch(m(),a){case"{":return function(){var e,n=Object.create(null);if("{"===a){if(p("{"),m(),"}"===a)return p("}"),n;for(;a;){if(e=h(),m(),p(":"),!0===t.strict&&Object.hasOwnProperty.call(n,e)&&f('Duplicate key "'+e+'"'),!0===o.test(e)?"error"===t.protoAction?f("Object contains forbidden prototype property"):"ignore"===t.protoAction?c():n[e]=c():!0===i.test(e)?"error"===t.constructorAction?f("Object contains forbidden constructor property"):"ignore"===t.constructorAction?c():n[e]=c():n[e]=c(),m(),"}"===a)return p("}"),n;p(","),m()}}f("Bad object")}();case"[":return function(){var e=[];if("["===a){if(p("["),m(),"]"===a)return p("]"),e;for(;a;){if(e.push(c()),m(),"]"===a)return p("]"),e;p(","),m()}}f("Bad array")}();case'"':return h();case"-":return d();default:return a>="0"&&a<="9"?d():function(){switch(a){case"t":return p("t"),p("r"),p("u"),p("e"),!0;case"f":return p("f"),p("a"),p("l"),p("s"),p("e"),!1;case"n":return p("n"),p("u"),p("l"),p("l"),null}f("Unexpected '"+a+"'")}()}},function(e,t){var n;return u=e+"",s=0,a=" ",n=c(),m(),a&&f("Syntax error"),"function"==typeof t?function e(n,r){var o,i=n[r];return i&&"object"==typeof i&&Object.keys(i).forEach((function(t){void 0!==(o=e(i,t))?i[t]=o:delete i[t]})),t.call(n,r,i)}({"":n},""):n}}},123:function(e,t,n){var r=n(431),o=e.exports;!function(){"use strict";var e,t,n,i=/[\\\"\x00-\x1f\x7f-\x9f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,s={"\b":"\\b","\t":"\\t","\n":"\\n","\f":"\\f","\r":"\\r",'"':'\\"',"\\":"\\\\"};function a(e){return i.lastIndex=0,i.test(e)?'"'+e.replace(i,(function(e){var t=s[e];return"string"==typeof t?t:"\\u"+("0000"+e.charCodeAt(0).toString(16)).slice(-4)}))+'"':'"'+e+'"'}function u(o,i){var s,c,l,f,p,d=e,h=i[o],m=null!=h&&(h instanceof r||r.isBigNumber(h));switch(h&&"object"==typeof h&&"function"==typeof h.toJSON&&(h=h.toJSON(o)),"function"==typeof n&&(h=n.call(i,o,h)),typeof h){case"string":return m?h:a(h);case"number":return isFinite(h)?String(h):"null";case"boolean":case"null":case"bigint":return String(h);case"object":if(!h)return"null";if(e+=t,p=[],"[object Array]"===Object.prototype.toString.apply(h)){for(f=h.length,s=0;s1){var n=e.shift();e[0]=n+e[0]}e[0].match(/^file:\/\/\//)?e[0]=e[0].replace(/^([^/:]+):\/*/,"$1:///"):e[0]=e[0].replace(/^([^/:]+):\/*/,"$1://");for(var r=0;r0&&(o=o.replace(/^[\/]+/,"")),o=r0?"?":"")+s.join("&")}return function(){return e("object"==typeof arguments[0]?arguments[0]:[].slice.call(arguments))}},e.exports?e.exports=i():void 0===(o="function"==typeof(r=i)?r.call(t,n,t,e):r)||(e.exports=o)},218:function(e,t,n){"use strict";function r(e,t){return function(){return e.apply(t,arguments)}}const{toString:o}=Object.prototype,{getPrototypeOf:i}=Object,s=(a=Object.create(null),e=>{const t=o.call(e);return a[t]||(a[t]=t.slice(8,-1).toLowerCase())});var a;const u=e=>(e=e.toLowerCase(),t=>s(t)===e),c=e=>t=>typeof t===e,{isArray:l}=Array,f=c("undefined");const p=u("ArrayBuffer");const d=c("string"),h=c("function"),m=c("number"),g=e=>null!==e&&"object"==typeof e,y=e=>{if("object"!==s(e))return!1;const t=i(e);return!(null!==t&&t!==Object.prototype&&null!==Object.getPrototypeOf(t)||Symbol.toStringTag in e||Symbol.iterator in e)},b=u("Date"),v=u("File"),w=u("Blob"),S=u("FileList"),O=u("URLSearchParams");function E(e,t,{allOwnKeys:n=!1}={}){if(null==e)return;let r,o;if("object"!=typeof e&&(e=[e]),l(e))for(r=0,o=e.length;r0;)if(r=n[o],t===r.toLowerCase())return r;return null}const C="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:"undefined"!=typeof window?window:n.g,j=e=>!f(e)&&e!==C;const P=(T="undefined"!=typeof Uint8Array&&i(Uint8Array),e=>T&&e instanceof T);var T;const _=u("HTMLFormElement"),k=(({hasOwnProperty:e})=>(t,n)=>e.call(t,n))(Object.prototype),N=u("RegExp"),x=(e,t)=>{const n=Object.getOwnPropertyDescriptors(e),r={};E(n,((n,o)=>{let i;!1!==(i=t(n,o,e))&&(r[o]=i||n)})),Object.defineProperties(e,r)},R="abcdefghijklmnopqrstuvwxyz",B="0123456789",D={DIGIT:B,ALPHA:R,ALPHA_DIGIT:R+R.toUpperCase()+B};const M=u("AsyncFunction");var U={isArray:l,isArrayBuffer:p,isBuffer:function(e){return null!==e&&!f(e)&&null!==e.constructor&&!f(e.constructor)&&h(e.constructor.isBuffer)&&e.constructor.isBuffer(e)},isFormData:e=>{let t;return e&&("function"==typeof FormData&&e instanceof FormData||h(e.append)&&("formdata"===(t=s(e))||"object"===t&&h(e.toString)&&"[object FormData]"===e.toString()))},isArrayBufferView:function(e){let t;return t="undefined"!=typeof ArrayBuffer&&ArrayBuffer.isView?ArrayBuffer.isView(e):e&&e.buffer&&p(e.buffer),t},isString:d,isNumber:m,isBoolean:e=>!0===e||!1===e,isObject:g,isPlainObject:y,isUndefined:f,isDate:b,isFile:v,isBlob:w,isRegExp:N,isFunction:h,isStream:e=>g(e)&&h(e.pipe),isURLSearchParams:O,isTypedArray:P,isFileList:S,forEach:E,merge:function e(){const{caseless:t}=j(this)&&this||{},n={},r=(r,o)=>{const i=t&&A(n,o)||o;y(n[i])&&y(r)?n[i]=e(n[i],r):y(r)?n[i]=e({},r):l(r)?n[i]=r.slice():n[i]=r};for(let e=0,t=arguments.length;e(E(t,((t,o)=>{n&&h(t)?e[o]=r(t,n):e[o]=t}),{allOwnKeys:o}),e),trim:e=>e.trim?e.trim():e.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,""),stripBOM:e=>(65279===e.charCodeAt(0)&&(e=e.slice(1)),e),inherits:(e,t,n,r)=>{e.prototype=Object.create(t.prototype,r),e.prototype.constructor=e,Object.defineProperty(e,"super",{value:t.prototype}),n&&Object.assign(e.prototype,n)},toFlatObject:(e,t,n,r)=>{let o,s,a;const u={};if(t=t||{},null==e)return t;do{for(o=Object.getOwnPropertyNames(e),s=o.length;s-- >0;)a=o[s],r&&!r(a,e,t)||u[a]||(t[a]=e[a],u[a]=!0);e=!1!==n&&i(e)}while(e&&(!n||n(e,t))&&e!==Object.prototype);return t},kindOf:s,kindOfTest:u,endsWith:(e,t,n)=>{e=String(e),(void 0===n||n>e.length)&&(n=e.length),n-=t.length;const r=e.indexOf(t,n);return-1!==r&&r===n},toArray:e=>{if(!e)return null;if(l(e))return e;let t=e.length;if(!m(t))return null;const n=new Array(t);for(;t-- >0;)n[t]=e[t];return n},forEachEntry:(e,t)=>{const n=(e&&e[Symbol.iterator]).call(e);let r;for(;(r=n.next())&&!r.done;){const n=r.value;t.call(e,n[0],n[1])}},matchAll:(e,t)=>{let n;const r=[];for(;null!==(n=e.exec(t));)r.push(n);return r},isHTMLForm:_,hasOwnProperty:k,hasOwnProp:k,reduceDescriptors:x,freezeMethods:e=>{x(e,((t,n)=>{if(h(e)&&-1!==["arguments","caller","callee"].indexOf(n))return!1;const r=e[n];h(r)&&(t.enumerable=!1,"writable"in t?t.writable=!1:t.set||(t.set=()=>{throw Error("Can not rewrite read-only method '"+n+"'")}))}))},toObjectSet:(e,t)=>{const n={},r=e=>{e.forEach((e=>{n[e]=!0}))};return l(e)?r(e):r(String(e).split(t)),n},toCamelCase:e=>e.toLowerCase().replace(/[-_\s]([a-z\d])(\w*)/g,(function(e,t,n){return t.toUpperCase()+n})),noop:()=>{},toFiniteNumber:(e,t)=>(e=+e,Number.isFinite(e)?e:t),findKey:A,global:C,isContextDefined:j,ALPHABET:D,generateString:(e=16,t=D.ALPHA_DIGIT)=>{let n="";const{length:r}=t;for(;e--;)n+=t[Math.random()*r|0];return n},isSpecCompliantForm:function(e){return!!(e&&h(e.append)&&"FormData"===e[Symbol.toStringTag]&&e[Symbol.iterator])},toJSONObject:e=>{const t=new Array(10),n=(e,r)=>{if(g(e)){if(t.indexOf(e)>=0)return;if(!("toJSON"in e)){t[r]=e;const o=l(e)?[]:{};return E(e,((e,t)=>{const i=n(e,r+1);!f(i)&&(o[t]=i)})),t[r]=void 0,o}}return e};return n(e,0)},isAsyncFn:M,isThenable:e=>e&&(g(e)||h(e))&&h(e.then)&&h(e.catch)};function I(e,t,n,r,o){Error.call(this),Error.captureStackTrace?Error.captureStackTrace(this,this.constructor):this.stack=(new Error).stack,this.message=e,this.name="AxiosError",t&&(this.code=t),n&&(this.config=n),r&&(this.request=r),o&&(this.response=o)}U.inherits(I,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:U.toJSONObject(this.config),code:this.code,status:this.response&&this.response.status?this.response.status:null}}});const L=I.prototype,F={};["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((e=>{F[e]={value:e}})),Object.defineProperties(I,F),Object.defineProperty(L,"isAxiosError",{value:!0}),I.from=(e,t,n,r,o,i)=>{const s=Object.create(L);return U.toFlatObject(e,s,(function(e){return e!==Error.prototype}),(e=>"isAxiosError"!==e)),I.call(s,e.message,t,n,r,o),s.cause=e,s.name=e.name,i&&Object.assign(s,i),s};function q(e){return U.isPlainObject(e)||U.isArray(e)}function H(e){return U.endsWith(e,"[]")?e.slice(0,-2):e}function K(e,t,n){return e?e.concat(t).map((function(e,t){return e=H(e),!n&&t?"["+e+"]":e})).join(n?".":""):t}const V=U.toFlatObject(U,{},null,(function(e){return/^is[A-Z]/.test(e)}));function z(e,t,n){if(!U.isObject(e))throw new TypeError("target must be an object");t=t||new FormData;const r=(n=U.toFlatObject(n,{metaTokens:!0,dots:!1,indexes:!1},!1,(function(e,t){return!U.isUndefined(t[e])}))).metaTokens,o=n.visitor||c,i=n.dots,s=n.indexes,a=(n.Blob||"undefined"!=typeof Blob&&Blob)&&U.isSpecCompliantForm(t);if(!U.isFunction(o))throw new TypeError("visitor must be a function");function u(e){if(null===e)return"";if(U.isDate(e))return e.toISOString();if(!a&&U.isBlob(e))throw new I("Blob is not supported. Use a Buffer instead.");return U.isArrayBuffer(e)||U.isTypedArray(e)?a&&"function"==typeof Blob?new Blob([e]):Buffer.from(e):e}function c(e,n,o){let a=e;if(e&&!o&&"object"==typeof e)if(U.endsWith(n,"{}"))n=r?n:n.slice(0,-2),e=JSON.stringify(e);else if(U.isArray(e)&&function(e){return U.isArray(e)&&!e.some(q)}(e)||(U.isFileList(e)||U.endsWith(n,"[]"))&&(a=U.toArray(e)))return n=H(n),a.forEach((function(e,r){!U.isUndefined(e)&&null!==e&&t.append(!0===s?K([n],r,i):null===s?n:n+"[]",u(e))})),!1;return!!q(e)||(t.append(K(o,n,i),u(e)),!1)}const l=[],f=Object.assign(V,{defaultVisitor:c,convertValue:u,isVisitable:q});if(!U.isObject(e))throw new TypeError("data must be an object");return function e(n,r){if(!U.isUndefined(n)){if(-1!==l.indexOf(n))throw Error("Circular reference detected in "+r.join("."));l.push(n),U.forEach(n,(function(n,i){!0===(!(U.isUndefined(n)||null===n)&&o.call(t,n,U.isString(i)?i.trim():i,r,f))&&e(n,r?r.concat(i):[i])})),l.pop()}}(e),t}function J(e){const t={"!":"%21","'":"%27","(":"%28",")":"%29","~":"%7E","%20":"+","%00":"\0"};return encodeURIComponent(e).replace(/[!'()~]|%20|%00/g,(function(e){return t[e]}))}function G(e,t){this._pairs=[],e&&z(e,this,t)}const W=G.prototype;function $(e){return encodeURIComponent(e).replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%20/g,"+").replace(/%5B/gi,"[").replace(/%5D/gi,"]")}function X(e,t,n){if(!t)return e;const r=n&&n.encode||$,o=n&&n.serialize;let i;if(i=o?o(t,n):U.isURLSearchParams(t)?t.toString():new G(t,n).toString(r),i){const t=e.indexOf("#");-1!==t&&(e=e.slice(0,t)),e+=(-1===e.indexOf("?")?"?":"&")+i}return e}W.append=function(e,t){this._pairs.push([e,t])},W.toString=function(e){const t=e?function(t){return e.call(this,t,J)}:J;return this._pairs.map((function(e){return t(e[0])+"="+t(e[1])}),"").join("&")};var Q=class InterceptorManager{constructor(){this.handlers=[]}use(e,t,n){return this.handlers.push({fulfilled:e,rejected:t,synchronous:!!n&&n.synchronous,runWhen:n?n.runWhen:null}),this.handlers.length-1}eject(e){this.handlers[e]&&(this.handlers[e]=null)}clear(){this.handlers&&(this.handlers=[])}forEach(e){U.forEach(this.handlers,(function(t){null!==t&&e(t)}))}},Y={silentJSONParsing:!0,forcedJSONParsing:!0,clarifyTimeoutError:!1},Z={isBrowser:!0,classes:{URLSearchParams:"undefined"!=typeof URLSearchParams?URLSearchParams:G,FormData:"undefined"!=typeof FormData?FormData:null,Blob:"undefined"!=typeof Blob?Blob:null},protocols:["http","https","file","blob","url","data"]};const ee="undefined"!=typeof window&&"undefined"!=typeof document,te=(ne="undefined"!=typeof navigator&&navigator.product,ee&&["ReactNative","NativeScript","NS"].indexOf(ne)<0);var ne;const re="undefined"!=typeof WorkerGlobalScope&&self instanceof WorkerGlobalScope&&"function"==typeof self.importScripts;var oe={...Object.freeze({__proto__:null,hasBrowserEnv:ee,hasStandardBrowserWebWorkerEnv:re,hasStandardBrowserEnv:te}),...Z};function ie(e){function t(e,n,r,o){let i=e[o++];const s=Number.isFinite(+i),a=o>=e.length;if(i=!i&&U.isArray(r)?r.length:i,a)return U.hasOwnProp(r,i)?r[i]=[r[i],n]:r[i]=n,!s;r[i]&&U.isObject(r[i])||(r[i]=[]);return t(e,n,r[i],o)&&U.isArray(r[i])&&(r[i]=function(e){const t={},n=Object.keys(e);let r;const o=n.length;let i;for(r=0;r{t(function(e){return U.matchAll(/\w+|\[(\w*)]/g,e).map((e=>"[]"===e[0]?"":e[1]||e[0]))}(e),r,n,0)})),n}return null}const se={transitional:Y,adapter:["xhr","http"],transformRequest:[function(e,t){const n=t.getContentType()||"",r=n.indexOf("application/json")>-1,o=U.isObject(e);o&&U.isHTMLForm(e)&&(e=new FormData(e));if(U.isFormData(e))return r&&r?JSON.stringify(ie(e)):e;if(U.isArrayBuffer(e)||U.isBuffer(e)||U.isStream(e)||U.isFile(e)||U.isBlob(e))return e;if(U.isArrayBufferView(e))return e.buffer;if(U.isURLSearchParams(e))return t.setContentType("application/x-www-form-urlencoded;charset=utf-8",!1),e.toString();let i;if(o){if(n.indexOf("application/x-www-form-urlencoded")>-1)return function(e,t){return z(e,new oe.classes.URLSearchParams,Object.assign({visitor:function(e,t,n,r){return oe.isNode&&U.isBuffer(e)?(this.append(t,e.toString("base64")),!1):r.defaultVisitor.apply(this,arguments)}},t))}(e,this.formSerializer).toString();if((i=U.isFileList(e))||n.indexOf("multipart/form-data")>-1){const t=this.env&&this.env.FormData;return z(i?{"files[]":e}:e,t&&new t,this.formSerializer)}}return o||r?(t.setContentType("application/json",!1),function(e,t,n){if(U.isString(e))try{return(t||JSON.parse)(e),U.trim(e)}catch(e){if("SyntaxError"!==e.name)throw e}return(n||JSON.stringify)(e)}(e)):e}],transformResponse:[function(e){const t=this.transitional||se.transitional,n=t&&t.forcedJSONParsing,r="json"===this.responseType;if(e&&U.isString(e)&&(n&&!this.responseType||r)){const n=!(t&&t.silentJSONParsing)&&r;try{return JSON.parse(e)}catch(e){if(n){if("SyntaxError"===e.name)throw I.from(e,I.ERR_BAD_RESPONSE,this,null,this.response);throw e}}}return e}],timeout:0,xsrfCookieName:"XSRF-TOKEN",xsrfHeaderName:"X-XSRF-TOKEN",maxContentLength:-1,maxBodyLength:-1,env:{FormData:oe.classes.FormData,Blob:oe.classes.Blob},validateStatus:function(e){return e>=200&&e<300},headers:{common:{Accept:"application/json, text/plain, */*","Content-Type":void 0}}};U.forEach(["delete","get","head","post","put","patch"],(e=>{se.headers[e]={}}));var ae=se;const ue=U.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 ce=Symbol("internals");function le(e){return e&&String(e).trim().toLowerCase()}function fe(e){return!1===e||null==e?e:U.isArray(e)?e.map(fe):String(e)}function pe(e,t,n,r,o){return U.isFunction(r)?r.call(this,t,n):(o&&(t=n),U.isString(t)?U.isString(r)?-1!==t.indexOf(r):U.isRegExp(r)?r.test(t):void 0:void 0)}class AxiosHeaders{constructor(e){e&&this.set(e)}set(e,t,n){const r=this;function o(e,t,n){const o=le(t);if(!o)throw new Error("header name must be a non-empty string");const i=U.findKey(r,o);(!i||void 0===r[i]||!0===n||void 0===n&&!1!==r[i])&&(r[i||t]=fe(e))}const i=(e,t)=>U.forEach(e,((e,n)=>o(e,n,t)));return U.isPlainObject(e)||e instanceof this.constructor?i(e,t):U.isString(e)&&(e=e.trim())&&!/^[-_a-zA-Z0-9^`|~,!#$%&'*+.]+$/.test(e.trim())?i((e=>{const t={};let n,r,o;return e&&e.split("\n").forEach((function(e){o=e.indexOf(":"),n=e.substring(0,o).trim().toLowerCase(),r=e.substring(o+1).trim(),!n||t[n]&&ue[n]||("set-cookie"===n?t[n]?t[n].push(r):t[n]=[r]:t[n]=t[n]?t[n]+", "+r:r)})),t})(e),t):null!=e&&o(t,e,n),this}get(e,t){if(e=le(e)){const n=U.findKey(this,e);if(n){const e=this[n];if(!t)return e;if(!0===t)return function(e){const t=Object.create(null),n=/([^\s,;=]+)\s*(?:=\s*([^,;]+))?/g;let r;for(;r=n.exec(e);)t[r[1]]=r[2];return t}(e);if(U.isFunction(t))return t.call(this,e,n);if(U.isRegExp(t))return t.exec(e);throw new TypeError("parser must be boolean|regexp|function")}}}has(e,t){if(e=le(e)){const n=U.findKey(this,e);return!(!n||void 0===this[n]||t&&!pe(0,this[n],n,t))}return!1}delete(e,t){const n=this;let r=!1;function o(e){if(e=le(e)){const o=U.findKey(n,e);!o||t&&!pe(0,n[o],o,t)||(delete n[o],r=!0)}}return U.isArray(e)?e.forEach(o):o(e),r}clear(e){const t=Object.keys(this);let n=t.length,r=!1;for(;n--;){const o=t[n];e&&!pe(0,this[o],o,e,!0)||(delete this[o],r=!0)}return r}normalize(e){const t=this,n={};return U.forEach(this,((r,o)=>{const i=U.findKey(n,o);if(i)return t[i]=fe(r),void delete t[o];const s=e?function(e){return e.trim().toLowerCase().replace(/([a-z\d])(\w*)/g,((e,t,n)=>t.toUpperCase()+n))}(o):String(o).trim();s!==o&&delete t[o],t[s]=fe(r),n[s]=!0})),this}concat(...e){return this.constructor.concat(this,...e)}toJSON(e){const t=Object.create(null);return U.forEach(this,((n,r)=>{null!=n&&!1!==n&&(t[r]=e&&U.isArray(n)?n.join(", "):n)})),t}[Symbol.iterator](){return Object.entries(this.toJSON())[Symbol.iterator]()}toString(){return Object.entries(this.toJSON()).map((([e,t])=>e+": "+t)).join("\n")}get[Symbol.toStringTag](){return"AxiosHeaders"}static from(e){return e instanceof this?e:new this(e)}static concat(e,...t){const n=new this(e);return t.forEach((e=>n.set(e))),n}static accessor(e){const t=(this[ce]=this[ce]={accessors:{}}).accessors,n=this.prototype;function r(e){const r=le(e);t[r]||(!function(e,t){const n=U.toCamelCase(" "+t);["get","set","has"].forEach((r=>{Object.defineProperty(e,r+n,{value:function(e,n,o){return this[r].call(this,t,e,n,o)},configurable:!0})}))}(n,e),t[r]=!0)}return U.isArray(e)?e.forEach(r):r(e),this}}AxiosHeaders.accessor(["Content-Type","Content-Length","Accept","Accept-Encoding","User-Agent","Authorization"]),U.reduceDescriptors(AxiosHeaders.prototype,(({value:e},t)=>{let n=t[0].toUpperCase()+t.slice(1);return{get:()=>e,set(e){this[n]=e}}})),U.freezeMethods(AxiosHeaders);var de=AxiosHeaders;function he(e,t){const n=this||ae,r=t||n,o=de.from(r.headers);let i=r.data;return U.forEach(e,(function(e){i=e.call(n,i,o.normalize(),t?t.status:void 0)})),o.normalize(),i}function me(e){return!(!e||!e.__CANCEL__)}function ge(e,t,n){I.call(this,null==e?"canceled":e,I.ERR_CANCELED,t,n),this.name="CanceledError"}U.inherits(ge,I,{__CANCEL__:!0});var ye=oe.hasStandardBrowserEnv?{write(e,t,n,r,o,i){const s=[e+"="+encodeURIComponent(t)];U.isNumber(n)&&s.push("expires="+new Date(n).toGMTString()),U.isString(r)&&s.push("path="+r),U.isString(o)&&s.push("domain="+o),!0===i&&s.push("secure"),document.cookie=s.join("; ")},read(e){const t=document.cookie.match(new RegExp("(^|;\\s*)("+e+")=([^;]*)"));return t?decodeURIComponent(t[3]):null},remove(e){this.write(e,"",Date.now()-864e5)}}:{write(){},read:()=>null,remove(){}};function be(e,t){return e&&!/^([a-z][a-z\d+\-.]*:)?\/\//i.test(t)?function(e,t){return t?e.replace(/\/+$/,"")+"/"+t.replace(/^\/+/,""):e}(e,t):t}var ve=oe.hasStandardBrowserEnv?function(){const e=/(msie|trident)/i.test(navigator.userAgent),t=document.createElement("a");let n;function r(n){let r=n;return e&&(t.setAttribute("href",r),r=t.href),t.setAttribute("href",r),{href:t.href,protocol:t.protocol?t.protocol.replace(/:$/,""):"",host:t.host,search:t.search?t.search.replace(/^\?/,""):"",hash:t.hash?t.hash.replace(/^#/,""):"",hostname:t.hostname,port:t.port,pathname:"/"===t.pathname.charAt(0)?t.pathname:"/"+t.pathname}}return n=r(window.location.href),function(e){const t=U.isString(e)?r(e):e;return t.protocol===n.protocol&&t.host===n.host}}():function(){return!0};function we(e,t){let n=0;const r=function(e,t){e=e||10;const n=new Array(e),r=new Array(e);let o,i=0,s=0;return t=void 0!==t?t: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%=e;if(i=(i+1)%e,i===s&&(s=(s+1)%e),u-o{const i=o.loaded,s=o.lengthComputable?o.total:void 0,a=i-n,u=r(a);n=i;const c={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:o};c[t?"download":"upload"]=!0,e(c)}}const Se={http:null,xhr:"undefined"!=typeof XMLHttpRequest&&function(e){return new Promise((function(t,n){let r=e.data;const o=de.from(e.headers).normalize();let i,s,{responseType:a,withXSRFToken:u}=e;function c(){e.cancelToken&&e.cancelToken.unsubscribe(i),e.signal&&e.signal.removeEventListener("abort",i)}if(U.isFormData(r))if(oe.hasStandardBrowserEnv||oe.hasStandardBrowserWebWorkerEnv)o.setContentType(!1);else if(!1!==(s=o.getContentType())){const[e,...t]=s?s.split(";").map((e=>e.trim())).filter(Boolean):[];o.setContentType([e||"multipart/form-data",...t].join("; "))}let l=new XMLHttpRequest;if(e.auth){const t=e.auth.username||"",n=e.auth.password?unescape(encodeURIComponent(e.auth.password)):"";o.set("Authorization","Basic "+btoa(t+":"+n))}const f=be(e.baseURL,e.url);function p(){if(!l)return;const r=de.from("getAllResponseHeaders"in l&&l.getAllResponseHeaders());!function(e,t,n){const r=n.config.validateStatus;n.status&&r&&!r(n.status)?t(new I("Request failed with status code "+n.status,[I.ERR_BAD_REQUEST,I.ERR_BAD_RESPONSE][Math.floor(n.status/100)-4],n.config,n.request,n)):e(n)}((function(e){t(e),c()}),(function(e){n(e),c()}),{data:a&&"text"!==a&&"json"!==a?l.response:l.responseText,status:l.status,statusText:l.statusText,headers:r,config:e,request:l}),l=null}if(l.open(e.method.toUpperCase(),X(f,e.params,e.paramsSerializer),!0),l.timeout=e.timeout,"onloadend"in l?l.onloadend=p:l.onreadystatechange=function(){l&&4===l.readyState&&(0!==l.status||l.responseURL&&0===l.responseURL.indexOf("file:"))&&setTimeout(p)},l.onabort=function(){l&&(n(new I("Request aborted",I.ECONNABORTED,e,l)),l=null)},l.onerror=function(){n(new I("Network Error",I.ERR_NETWORK,e,l)),l=null},l.ontimeout=function(){let t=e.timeout?"timeout of "+e.timeout+"ms exceeded":"timeout exceeded";const r=e.transitional||Y;e.timeoutErrorMessage&&(t=e.timeoutErrorMessage),n(new I(t,r.clarifyTimeoutError?I.ETIMEDOUT:I.ECONNABORTED,e,l)),l=null},oe.hasStandardBrowserEnv&&(u&&U.isFunction(u)&&(u=u(e)),u||!1!==u&&ve(f))){const t=e.xsrfHeaderName&&e.xsrfCookieName&&ye.read(e.xsrfCookieName);t&&o.set(e.xsrfHeaderName,t)}void 0===r&&o.setContentType(null),"setRequestHeader"in l&&U.forEach(o.toJSON(),(function(e,t){l.setRequestHeader(t,e)})),U.isUndefined(e.withCredentials)||(l.withCredentials=!!e.withCredentials),a&&"json"!==a&&(l.responseType=e.responseType),"function"==typeof e.onDownloadProgress&&l.addEventListener("progress",we(e.onDownloadProgress,!0)),"function"==typeof e.onUploadProgress&&l.upload&&l.upload.addEventListener("progress",we(e.onUploadProgress)),(e.cancelToken||e.signal)&&(i=t=>{l&&(n(!t||t.type?new ge(null,e,l):t),l.abort(),l=null)},e.cancelToken&&e.cancelToken.subscribe(i),e.signal&&(e.signal.aborted?i():e.signal.addEventListener("abort",i)));const d=function(e){const t=/^([-+\w]{1,25})(:?\/\/|:)/.exec(e);return t&&t[1]||""}(f);d&&-1===oe.protocols.indexOf(d)?n(new I("Unsupported protocol "+d+":",I.ERR_BAD_REQUEST,e)):l.send(r||null)}))}};U.forEach(Se,((e,t)=>{if(e){try{Object.defineProperty(e,"name",{value:t})}catch(e){}Object.defineProperty(e,"adapterName",{value:t})}}));const Oe=e=>`- ${e}`,Ee=e=>U.isFunction(e)||null===e||!1===e;var Ae=e=>{e=U.isArray(e)?e:[e];const{length:t}=e;let n,r;const o={};for(let i=0;i`adapter ${e} `+(!1===t?"is not supported by the environment":"is not available in the build")));throw new I("There is no suitable adapter to dispatch the request "+(t?e.length>1?"since :\n"+e.map(Oe).join("\n"):" "+Oe(e[0]):"as no adapter specified"),"ERR_NOT_SUPPORT")}return r};function Ce(e){if(e.cancelToken&&e.cancelToken.throwIfRequested(),e.signal&&e.signal.aborted)throw new ge(null,e)}function je(e){Ce(e),e.headers=de.from(e.headers),e.data=he.call(e,e.transformRequest),-1!==["post","put","patch"].indexOf(e.method)&&e.headers.setContentType("application/x-www-form-urlencoded",!1);return Ae(e.adapter||ae.adapter)(e).then((function(t){return Ce(e),t.data=he.call(e,e.transformResponse,t),t.headers=de.from(t.headers),t}),(function(t){return me(t)||(Ce(e),t&&t.response&&(t.response.data=he.call(e,e.transformResponse,t.response),t.response.headers=de.from(t.response.headers))),Promise.reject(t)}))}const Pe=e=>e instanceof de?e.toJSON():e;function Te(e,t){t=t||{};const n={};function r(e,t,n){return U.isPlainObject(e)&&U.isPlainObject(t)?U.merge.call({caseless:n},e,t):U.isPlainObject(t)?U.merge({},t):U.isArray(t)?t.slice():t}function o(e,t,n){return U.isUndefined(t)?U.isUndefined(e)?void 0:r(void 0,e,n):r(e,t,n)}function i(e,t){if(!U.isUndefined(t))return r(void 0,t)}function s(e,t){return U.isUndefined(t)?U.isUndefined(e)?void 0:r(void 0,e):r(void 0,t)}function a(n,o,i){return i in t?r(n,o):i in e?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:(e,t)=>o(Pe(e),Pe(t),!0)};return U.forEach(Object.keys(Object.assign({},e,t)),(function(r){const i=u[r]||o,s=i(e[r],t[r],r);U.isUndefined(s)&&i!==a||(n[r]=s)})),n}const _e="1.6.2",ke={};["object","boolean","number","function","string","symbol"].forEach(((e,t)=>{ke[e]=function(n){return typeof n===e||"a"+(t<1?"n ":" ")+e}}));const Ne={};ke.transitional=function(e,t,n){function r(e,t){return"[Axios v1.6.2] Transitional option '"+e+"'"+t+(n?". "+n:"")}return(n,o,i)=>{if(!1===e)throw new I(r(o," has been removed"+(t?" in "+t:"")),I.ERR_DEPRECATED);return t&&!Ne[o]&&(Ne[o]=!0,console.warn(r(o," has been deprecated since v"+t+" and will be removed in the near future"))),!e||e(n,o,i)}};var xe={assertOptions:function(e,t,n){if("object"!=typeof e)throw new I("options must be an object",I.ERR_BAD_OPTION_VALUE);const r=Object.keys(e);let o=r.length;for(;o-- >0;){const i=r[o],s=t[i];if(s){const t=e[i],n=void 0===t||s(t,i,e);if(!0!==n)throw new I("option "+i+" must be "+n,I.ERR_BAD_OPTION_VALUE)}else if(!0!==n)throw new I("Unknown option "+i,I.ERR_BAD_OPTION)}},validators:ke};const Re=xe.validators;class Axios{constructor(e){this.defaults=e,this.interceptors={request:new Q,response:new Q}}request(e,t){"string"==typeof e?(t=t||{}).url=e:t=e||{},t=Te(this.defaults,t);const{transitional:n,paramsSerializer:r,headers:o}=t;void 0!==n&&xe.assertOptions(n,{silentJSONParsing:Re.transitional(Re.boolean),forcedJSONParsing:Re.transitional(Re.boolean),clarifyTimeoutError:Re.transitional(Re.boolean)},!1),null!=r&&(U.isFunction(r)?t.paramsSerializer={serialize:r}:xe.assertOptions(r,{encode:Re.function,serialize:Re.function},!0)),t.method=(t.method||this.defaults.method||"get").toLowerCase();let i=o&&U.merge(o.common,o[t.method]);o&&U.forEach(["delete","get","head","post","put","patch","common"],(e=>{delete o[e]})),t.headers=de.concat(i,o);const s=[];let a=!0;this.interceptors.request.forEach((function(e){"function"==typeof e.runWhen&&!1===e.runWhen(t)||(a=a&&e.synchronous,s.unshift(e.fulfilled,e.rejected))}));const u=[];let c;this.interceptors.response.forEach((function(e){u.push(e.fulfilled,e.rejected)}));let l,f=0;if(!a){const e=[je.bind(this),void 0];for(e.unshift.apply(e,s),e.push.apply(e,u),l=e.length,c=Promise.resolve(t);f{if(!n._listeners)return;let t=n._listeners.length;for(;t-- >0;)n._listeners[t](e);n._listeners=null})),this.promise.then=e=>{let t;const r=new Promise((e=>{n.subscribe(e),t=e})).then(e);return r.cancel=function(){n.unsubscribe(t)},r},e((function(e,r,o){n.reason||(n.reason=new ge(e,r,o),t(n.reason))}))}throwIfRequested(){if(this.reason)throw this.reason}subscribe(e){this.reason?e(this.reason):this._listeners?this._listeners.push(e):this._listeners=[e]}unsubscribe(e){if(!this._listeners)return;const t=this._listeners.indexOf(e);-1!==t&&this._listeners.splice(t,1)}static source(){let e;return{token:new CancelToken((function(t){e=t})),cancel:e}}}var De=CancelToken;const Me={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(Me).forEach((([e,t])=>{Me[t]=e}));var Ue=Me;const Ie=function e(t){const n=new Be(t),o=r(Be.prototype.request,n);return U.extend(o,Be.prototype,n,{allOwnKeys:!0}),U.extend(o,n,null,{allOwnKeys:!0}),o.create=function(n){return e(Te(t,n))},o}(ae);Ie.Axios=Be,Ie.CanceledError=ge,Ie.CancelToken=De,Ie.isCancel=me,Ie.VERSION=_e,Ie.toFormData=z,Ie.AxiosError=I,Ie.Cancel=Ie.CanceledError,Ie.all=function(e){return Promise.all(e)},Ie.spread=function(e){return function(t){return e.apply(null,t)}},Ie.isAxiosError=function(e){return U.isObject(e)&&!0===e.isAxiosError},Ie.mergeConfig=Te,Ie.AxiosHeaders=de,Ie.formToJSON=e=>ie(U.isHTMLForm(e)?new FormData(e):e),Ie.getAdapter=Ae,Ie.HttpStatusCode=Ue,Ie.default=Ie,e.exports=Ie},147:function(e){"use strict";e.exports=JSON.parse('{"name":"node-mailjet","version":"6.0.5","main":"./dist/mailjet.node.js","browser":"./dist/mailjet.web.js","types":"./dist/declarations/index.d.ts","description":"Mailjet API client","author":"Mailjet","license":"MIT","private":true,"keywords":["email","sms","node","mail","mailjet"],"engines":{"node":">= 12.0.0","npm":">= 6.9.0"},"files":["lib/**","dist/**"],"directories":{"lib":"./lib","docs":"./docs"},"typescript":{"definition":"./dist/declarations/index.d.ts"},"scripts":{"test":"npm run ts:mocha test/","test:int":"npm run ts:mocha test/integration/","test:unit":"npm run ts:mocha test/unit/","test:watch":"mocha --extension ts -r tsconfig-paths/register -r ts-node/register --watch","cover":"npm run cover:expandable npm run test","cover:int":"npm run cover:expandable npm run test:int","cover:unit":"npm run cover:expandable npm run test:unit","cover:expandable":"nyc --reporter=text-summary --reporter=lcov --report-dir=.coverage --temp-dir=./.coverage/.nyc_output","build":"npm run build:release && npm run build:prepublish","build:dev":"webpack --config ./webpack/webpack.dev.config.js --progress --color","build:release":"webpack --config ./webpack/webpack.release.config.js --progress --color","build:prepublish":"node ./scripts/PreparePackage.js","build:watch":"webpack --watch --config ./webpack/webpack.dev.config.js --progress --color","lint":"eslint .","lint:fix":"eslint --fix .","lint:errors":"eslint --quiet .","ts:run":"ts-node --transpileOnly --project ./tsconfig.json -r tsconfig-paths/register","ts:watch":"ts-node-dev --respawn --transpile-only --project ./tsconfig.json -r tsconfig-paths/register","ts:mocha":"mocha --extension ts --recursive -r tsconfig-paths/register -r ts-node/register","ts:patch":"ts-patch install -s","init":"npm install && npm run ts:patch && npm run pkg:prepare","pkg:link":"cd ./dist && npm link && echo \'\\n=== link name: node-mailjet ===\'","pkg:prepare":"husky install","pkg:precommit":"npm audit && npm run lint:errors && npm run test","release":"standard-version -a","release:dry":"standard-version --dry-run","release:quiet":"standard-version --no-verify -a","release:minor":"standard-version -a --release-as minor","release:patch":"standard-version -a --release-as patch","release:major":"standard-version -a --release-as major","docs":"typedoc --tsconfig ./tsconfig.json"},"dependencies":{"axios":"1.6.2","json-bigint":"^1.0.0","url-join":"^4.0.0"},"devDependencies":{"@babel/core":"^7.18.0","@babel/preset-env":"^7.18.0","@commitlint/cli":"^17.0.2","@commitlint/config-conventional":"^17.0.2","@types/chai":"^4.3.1","@types/json-bigint":"^1.0.1","@types/mocha":"^9.1.1","@types/node":"^17.0.34","@types/qs":"^6.9.7","@types/superagent":"^4.1.15","@types/url-join":"^4.0.1","@typescript-eslint/eslint-plugin":"^5.24.0","@typescript-eslint/parser":"^5.24.0","babel-loader":"^8.2.5","chai":"^4.1.0","eslint":"^8.15.0","eslint-config-airbnb-base":"^15.0.0","eslint-import-resolver-typescript":"^2.7.1","eslint-plugin-import":"^2.26.0","eslint-plugin-tsdoc":"^0.2.16","husky":"^8.0.1","mocha":"^9.0.0","nock":"^13.2.4","nyc":"^15.1.0","qs":"^6.5.0","standard-version":"^9.5.0","terser-webpack-plugin":"^5.3.1","ts-loader":"^9.3.0","ts-node":"^10.7.0","ts-node-dev":"^1.1.8","ts-patch":"^2.0.1","tsconfig-paths":"^4.0.0","tsconfig-paths-webpack-plugin":"^3.5.2","typedoc":"^0.22.15","typescript":"^4.6.4","typescript-transform-paths":"^3.3.1","webpack":"^5.76.0","webpack-cli":"^4.9.2","webpack-merge":"^5.8.0"},"homepage":"https://github.com/mailjet/mailjet-apiv3-nodejs#readme","repository":{"type":"git","url":"git+https://github.com/mailjet/mailjet-apiv3-nodejs.git"},"bugs":{"url":"https://github.com/mailjet/mailjet-apiv3-nodejs/issues"},"contributors":["Arnaud Breton (https://github.com/arnaudbreton)","Nicholas Smith (https://github.com/safani)","Jérémie Parker (https://github.com/p-j)"]}')}},t={};function n(r){var o=t[r];if(void 0!==o)return o.exports;var i=t[r]={exports:{}};return e[r].call(i.exports,i,i.exports,n),i.exports}return n.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),n(321)}()})); -//# sourceMappingURL=data:application/json;charset=utf-8;base64,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QUFBQSxrQkFDQUEsRUFBQUEsRUFBQUEsV0FBQUEsSUFBQUEsYUFDQUEsRUFBQUEsRUFBQUEsV0FBQUEsSUFBQUEsYUFDQUEsRUFBQUEsRUFBQUEsb0JBQUFBLElBQUFBLHNCQUNBQSxFQUFBQSxFQUFBQSxlQUFBQSxJQUFBQSxpQkFDQUEsRUFBQUEsRUFBQUEsbUJBQUFBLElBQUFBLHFCQUNBQSxFQUFBQSxFQUFBQSx3QkFBQUEsSUFBQUEsMEJBQ0FBLEVBQUFBLEVBQUFBLFFBQUFBLElBQUFBLFVBQ0FBLEVBQUFBLEVBQUFBLFlBQUFBLElBQUFBLGNBQ0FBLEVBQUFBLEVBQUFBLGFBQUFBLElBQUFBLGNBckJGLEVBQVlELEVBQUFBLGVBQUFBLEVBQUFBLGFBQVksS0F3QnhCLFNBQVlFLEdBQ1ZBLEVBQUFBLEVBQUFBLGNBQUFBLEdBQUFBLGdCQUNBQSxFQUFBQSxFQUFBQSxVQUFBQSxHQUFBQSxZQUNBQSxFQUFBQSxFQUFBQSxRQUFBQSxHQUFBQSxTQUhGLEVBQVlGLEVBQUFBLFdBQUFBLEVBQUFBLFNBQVEsS0FNcEIsU0FBWUcsR0FDVkEsRUFBQUEsRUFBQUEsVUFBQUEsR0FBQUEsWUFDQUEsRUFBQUEsRUFBQUEsT0FBQUEsR0FBQUEsU0FDQUEsRUFBQUEsRUFBQUEsS0FBQUEsR0FBQUEsT0FDQUEsRUFBQUEsRUFBQUEsT0FBQUEsR0FBQUEsU0FDQUEsRUFBQUEsRUFBQUEsUUFBQUEsR0FBQUEsVUFDQUEsRUFBQUEsRUFBQUEsT0FBQUEsR0FBQUEsU0FDQUEsRUFBQUEsRUFBQUEsS0FBQUEsR0FBQUEsT0FDQUEsRUFBQUEsRUFBQUEsTUFBQUEsR0FBQUEsUUFDQUEsRUFBQUEsRUFBQUEsUUFBQUEsR0FBQUEsVUFDQUEsRUFBQUEsRUFBQUEsV0FBQUEsR0FBQUEsYUFDQUEsRUFBQUEsRUFBQUEsV0FBQUEsSUFBQUEsYUFDQUEsRUFBQUEsRUFBQUEsU0FBQUEsSUFBQUEsVUFaRixFQUFZSCxFQUFBQSxnQkFBQUEsRUFBQUEsY0FBYSxLQWV6QixTQUFZSSxHQUNWQSxFQUFBQSxRQUFBQSxVQUNBQSxF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YnBhY2s6Ly9ub2RlLW1haWxqZXQvLi9saWIvY2xpZW50L2luZGV4LnRzIiwid2VicGFjazovL25vZGUtbWFpbGpldC8uL2xpYi9pbmRleC50cyIsIndlYnBhY2s6Ly9ub2RlLW1haWxqZXQvLi9saWIvcmVxdWVzdC9IdHRwTWV0aG9kcy50cyIsIndlYnBhY2s6Ly9ub2RlLW1haWxqZXQvLi9saWIvcmVxdWVzdC9pbmRleC50cyIsIndlYnBhY2s6Ly9ub2RlLW1haWxqZXQvLi9saWIvdHlwZXMvYXBpL0NhbXBhaWduLnRzIiwid2VicGFjazovL25vZGUtbWFpbGpldC8uL2xpYi90eXBlcy9hcGkvQ29tbW9uLnRzIiwid2VicGFjazovL25vZGUtbWFpbGpldC8uL2xpYi90eXBlcy9hcGkvQ29udGFjdC50cyIsIndlYnBhY2s6Ly9ub2RlLW1haWxqZXQvLi9saWIvdHlwZXMvYXBpL01lc3NhZ2UudHMiLCJ3ZWJwYWNrOi8vbm9kZS1tYWlsamV0Ly4vbGliL3R5cGVzL2FwaS9TZWdtZW50YXRpb24udHMiLCJ3ZWJwYWNrOi8vbm9kZS1tYWlsamV0Ly4vbGliL3R5cGVzL2FwaS9TZW5kRW1haWwudHMiLCJ3ZWJwYWNrOi8vbm9kZS1tYWlsamV0Ly4vbGliL3R5cGVzL2FwaS9TZW5kZXJBZGRyZXNzQW5kRG9tYWluLnRzIiwid2VicGFjazovL25vZGUtbWFpbGpldC8uL2xpYi90eXBlcy9hcGkvU2V0dGluZy50cyIsIndlYnBhY2s6Ly9ub2RlLW1haWxqZXQvLi9saWIvdHlwZXMvYXBpL1N0YXRpc3RpYy50cyIsIndlYnBhY2s6Ly9ub2RlLW1haWxqZXQvLi9saWIvdHlwZXMvYXBpL1RlbXBsYXRlLnRzIiwid2VicGFjazovL25vZGUtbWFpbGpldC8uL2xpYi90eXBlcy9hcGkvV2ViaG9vay50cyIsIndlYnBhY2s6Ly9ub2RlLW1haWxqZXQvLi9saWIvdHlwZXMvYXBpL2luZGV4LnRzIiwid2VicGFjazovL25vZGUtbWFpbGpldC8uL2xpYi91dGlscy9pbmRleC50cyIsIndlYnBhY2s6Ly9ub2RlLW1haWxqZXQvLi9saWIvdXRpbHMvaXNOaWwudHMiLCJ3ZWJwYWNrOi8vbm9kZS1tYWlsamV0Ly4vbGliL3V0aWxzL2lzTnVsbC50cyIsIndlYnBhY2s6Ly9ub2RlLW1haWxqZXQvLi9saWIvdXRpbHMvaXNQdXJlT2JqZWN0LnRzIiwid2VicGFjazovL25vZGUtbWFpbGpldC8uL2xpYi91dGlscy9pc1VuZGVmaW5lZC50cyIsIndlYnBhY2s6Ly9ub2RlLW1haWxqZXQvLi9saWIvdXRpbHMvc2V0VmFsdWVJZk5vdE5pbC50cyIsIndlYnBhY2s6Ly9ub2RlLW1haWxqZXQvLi9ub2RlX21vZHVsZXMvYmlnbnVtYmVyLmpzL2JpZ251bWJlci5qcyIsIndlYnBhY2s6Ly9ub2RlLW1haWxqZXQvLi9ub2RlX21vZHVsZXMvanNvbi1iaWdpbnQvaW5kZXguanMiLCJ3ZWJwYWNrOi8vbm9kZS1tYWlsamV0Ly4vbm9kZV9tb2R1bGVzL2pzb24tYmlnaW50L2xpYi9wYXJzZS5qcyIsIndlYnBhY2s6Ly9ub2RlLW1haWxqZXQvLi9ub2RlX21vZHVsZXMvanNvbi1iaWdpbnQvbGliL3N0cmluZ2lmeS5qcyIsIndlYnBhY2s6Ly9ub2RlLW1haWxqZXQvLi9ub2RlX21vZHVsZXMvdXJsLWpvaW4vbGliL3VybC1qb2luLmpzIiwid2VicGFjazovL25vZGUtbWFpbGpldC8uL25vZGVfbW9kdWxlcy9heGlvcy9kaXN0L2Jyb3dzZXIvYXhpb3MuY2pzIiwid2VicGFjazovL25vZGUtbWFpbGpldC93ZWJwYWNrL2Jvb3RzdHJhcCIsIndlYnBhY2s6Ly9ub2RlLW1haWxqZXQvd2VicGFjay9ydW50aW1lL2dsb2JhbCIsIndlYnBhY2s6Ly9ub2RlLW1haWxqZXQvd2VicGFjay9zdGFydHVwIl0sInNvdXJjZXNDb250ZW50IjpbIi8qZXh0ZXJuYWwgbW9kdWxlcyovXG4vKnV0aWxzKi9cbmltcG9ydCB7XG4gIGlzUHVyZU9iamVjdCxcbiAgc2V0VmFsdWVJZk5vdE5pbCxcbn0gZnJvbSAnLi4vdXRpbHMnO1xuLyp0eXBlcyovXG5pbXBvcnQgSHR0cE1ldGhvZHMgZnJvbSAnLi4vcmVxdWVzdC9IdHRwTWV0aG9kcyc7XG5pbXBvcnQgeyBDbGllbnRQYXJhbXMgfSBmcm9tICcuL0NsaWVudCc7XG5pbXBvcnQgeyBSZXF1ZXN0Q29uZmlnLCBSZXF1ZXN0T3B0aW9ucywgUmVxdWVzdENvbnN0cnVjdG9yQ29uZmlnIH0gZnJvbSAnLi4vcmVxdWVzdC9SZXF1ZXN0Jztcbi8qbGliKi9cbmltcG9ydCBSZXF1ZXN0IGZyb20gJy4uL3JlcXVlc3QnO1xuaW1wb3J0IHBhY2thZ2VKU09OIGZyb20gJy4uLy4uL3BhY2thZ2UuanNvbic7XG4vKm90aGVyKi9cblxuZXhwb3J0IHR5cGUgQ2xpZW50Q29ubmVjdFBhcmFtcyA9IFBpY2s8Q2xpZW50UGFyYW1zLCAnY29uZmlnJyB8ICdvcHRpb25zJz47XG5cbmNsYXNzIENsaWVudCB7XG4gIHByaXZhdGUgdmVyc2lvbiE6IHN0cmluZztcblxuICBwcml2YXRlIGNvbmZpZyE6IFJlcXVlc3RDb25maWc7XG4gIHByaXZhdGUgb3B0aW9ucyE6IFJlcXVlc3RPcHRpb25zO1xuXG4gIHByaXZhdGUgYXBpS2V5Pzogc3RyaW5nO1xuICBwcml2YXRlIGFwaVNlY3JldD86IHN0cmluZztcbiAgcHJpdmF0ZSBhcGlUb2tlbj86IHN0cmluZztcblxuICBjb25zdHJ1Y3RvcihwYXJhbXM6IENsaWVudFBhcmFtcykge1xuICAgIGlmICghaXNQdXJlT2JqZWN0KHBhcmFtcykpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQXJndW1lbnQgXCJwYXJhbXNcIiBtdXN0IGJlIG9iamVjdCcpO1xuICAgIH1cblxuICAgIHRoaXMuaW5pdCh0aGlzLmNsb25lUGFyYW1zKHBhcmFtcykpO1xuICB9XG5cbiAgcHVibGljIGdldFBhY2thZ2VWZXJzaW9uKCkge1xuICAgIHJldHVybiB0aGlzLnZlcnNpb247XG4gIH1cblxuICBwdWJsaWMgZ2V0QVBJS2V5KCkge1xuICAgIHJldHVybiB0aGlzLmFwaUtleTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRBUElTZWNyZXQoKSB7XG4gICAgcmV0dXJuIHRoaXMuYXBpU2VjcmV0O1xuICB9XG5cbiAgcHVibGljIGdldEFQSVRva2VuKCkge1xuICAgIHJldHVybiB0aGlzLmFwaVRva2VuO1xuICB9XG5cbiAgcHVibGljIGdldENvbmZpZygpIHtcbiAgICByZXR1cm4geyAuLi50aGlzLmNvbmZpZyB9O1xuICB9XG5cbiAgcHVibGljIGdldE9wdGlvbnMoKTogUmVxdWVzdE9wdGlvbnMge1xuICAgIHJldHVybiB7IC4uLnRoaXMub3B0aW9ucyB9O1xuICB9XG5cbiAgcHVibGljIGdldChyZXNvdXJjZTogc3RyaW5nLCBjb25maWc/OiBSZXF1ZXN0Q29uc3RydWN0b3JDb25maWcpIHtcbiAgICByZXR1cm4gbmV3IFJlcXVlc3QodGhpcywgSHR0cE1ldGhvZHMuR2V0LCByZXNvdXJjZSwgY29uZmlnKTtcbiAgfVxuXG4gIHB1YmxpYyBwb3N0KHJlc291cmNlOiBzdHJpbmcsIGNvbmZpZz86IFJlcXVlc3RDb25zdHJ1Y3RvckNvbmZpZykge1xuICAgIHJldHVybiBuZXcgUmVxdWVzdCh0aGlzLCBIdHRwTWV0aG9kcy5Qb3N0LCByZXNvdXJjZSwgY29uZmlnKTtcbiAgfVxuXG4gIHB1YmxpYyBwdXQocmVzb3VyY2U6IHN0cmluZywgY29uZmlnPzogUmVxdWVzdENvbnN0cnVjdG9yQ29uZmlnKSB7XG4gICAgcmV0dXJuIG5ldyBSZXF1ZXN0KHRoaXMsIEh0dHBNZXRob2RzLlB1dCwgcmVzb3VyY2UsIGNvbmZpZyk7XG4gIH1cblxuICBwdWJsaWMgZGVsZXRlKHJlc291cmNlOiBzdHJpbmcsIGNvbmZpZz86IFJlcXVlc3RDb25zdHJ1Y3RvckNvbmZpZykge1xuICAgIHJldHVybiBuZXcgUmVxdWVzdCh0aGlzLCBIdHRwTWV0aG9kcy5EZWxldGUsIHJlc291cmNlLCBjb25maWcpO1xuICB9XG5cbiAgcHJpdmF0ZSBpbml0KHBhcmFtczogQ2xpZW50UGFyYW1zKSB7XG4gICAgaWYgKCFpc1B1cmVPYmplY3QocGFyYW1zKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdBcmd1bWVudCBcInBhcmFtc1wiIG11c3QgYmUgb2JqZWN0Jyk7XG4gICAgfVxuXG4gICAgY29uc3Qge1xuICAgICAgYXBpVG9rZW4sXG4gICAgICBhcGlLZXksXG4gICAgICBhcGlTZWNyZXQsXG4gICAgICBvcHRpb25zLFxuICAgICAgY29uZmlnLFxuICAgIH0gPSBwYXJhbXM7XG5cbiAgICB0aGlzLnZlcnNpb24gPSBDbGllbnQucGFja2FnZUpTT04udmVyc2lvbjtcblxuICAgIHRoaXMuc2V0Q29uZmlnKGNvbmZpZyA/PyBudWxsKTtcbiAgICB0aGlzLnNldE9wdGlvbnMob3B0aW9ucyA/PyBudWxsKTtcblxuICAgIHJldHVybiAnYXBpVG9rZW4nIGluIHBhcmFtc1xuICAgICAgPyB0aGlzLnRva2VuQ29ubmVjdFN0cmF0ZWd5KGFwaVRva2VuKVxuICAgICAgOiB0aGlzLmJhc2ljQ29ubmVjdFN0cmF0ZWd5KGFwaUtleSwgYXBpU2VjcmV0KTtcbiAgfVxuXG4gIHByaXZhdGUgY2xvbmVQYXJhbXMocGFyYW1zOiBDbGllbnRQYXJhbXMpIHtcbiAgICBpZiAoIWlzUHVyZU9iamVjdChwYXJhbXMpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0FyZ3VtZW50IFwicGFyYW1zXCIgbXVzdCBiZSBvYmplY3QnKTtcbiAgICB9XG5cbiAgICBjb25zdCBjbG9uZWRQYXJhbXMgPSB7IC4uLnBhcmFtcyB9O1xuXG4gICAgaWYgKHBhcmFtcy5jb25maWcpIHtcbiAgICAgIGNsb25lZFBhcmFtcy5jb25maWcgPSB7XG4gICAgICAgIC4uLnBhcmFtcy5jb25maWcsXG4gICAgICB9O1xuICAgIH1cblxuICAgIGlmIChwYXJhbXMub3B0aW9ucykge1xuICAgICAgY2xvbmVkUGFyYW1zLm9wdGlvbnMgPSB7XG4gICAgICAgIC4uLnBhcmFtcy5vcHRpb25zLFxuICAgICAgfTtcblxuICAgICAgaWYgKGNsb25lZFBhcmFtcy5vcHRpb25zLnByb3h5KSB7XG4gICAgICAgIGNsb25lZFBhcmFtcy5vcHRpb25zLnByb3h5ID0ge1xuICAgICAgICAgIC4uLmNsb25lZFBhcmFtcy5vcHRpb25zLnByb3h5LFxuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICBpZiAoY2xvbmVkUGFyYW1zLm9wdGlvbnMuaGVhZGVycykge1xuICAgICAgICBjbG9uZWRQYXJhbXMub3B0aW9ucy5oZWFkZXJzID0ge1xuICAgICAgICAgIC4uLmNsb25lZFBhcmFtcy5vcHRpb25zLmhlYWRlcnMsXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGNsb25lZFBhcmFtcztcbiAgfVxuXG4gIHByaXZhdGUgc2V0Q29uZmlnKGN1c3RvbUNvbmZpZzogUGFydGlhbDxSZXF1ZXN0Q29uZmlnPiB8IG51bGwpIHtcbiAgICBpZiAodHlwZW9mIGN1c3RvbUNvbmZpZyAhPT0gJ29iamVjdCcpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQXJndW1lbnQgXCJjdXN0b21Db25maWdcIiBtdXN0IGJlIG9iamVjdCBvciBudWxsJyk7XG4gICAgfVxuXG4gICAgY29uc3QgY29uZmlnID0geyAuLi5DbGllbnQuY29uZmlnIH07XG5cbiAgICBpZiAoY3VzdG9tQ29uZmlnICE9PSBudWxsKSB7XG4gICAgICBzZXRWYWx1ZUlmTm90TmlsKGNvbmZpZywgJ2hvc3QnLCBjdXN0b21Db25maWcuaG9zdCk7XG4gICAgICBzZXRWYWx1ZUlmTm90TmlsKGNvbmZpZywgJ291dHB1dCcsIGN1c3RvbUNvbmZpZy5vdXRwdXQpO1xuICAgICAgc2V0VmFsdWVJZk5vdE5pbChjb25maWcsICd2ZXJzaW9uJywgY3VzdG9tQ29uZmlnLnZlcnNpb24pO1xuICAgIH1cblxuICAgIHRoaXMuY29uZmlnID0gY29uZmlnO1xuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBwcml2YXRlIHNldE9wdGlvbnMob3B0aW9uczogUmVxdWVzdE9wdGlvbnMgfCBudWxsKSB7XG4gICAgaWYgKHR5cGVvZiBvcHRpb25zICE9PSAnb2JqZWN0Jykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdBcmd1bWVudCBcIm9wdGlvbnNcIiBtdXN0IGJlIG9iamVjdCBvciBudWxsJyk7XG4gICAgfVxuXG4gICAgdGhpcy5vcHRpb25zID0gb3B0aW9ucyA/PyB7fTtcblxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgcHJpdmF0ZSB0b2tlbkNvbm5lY3RTdHJhdGVneShhcGlUb2tlbjogc3RyaW5nIHwgdW5kZWZpbmVkKSB7XG4gICAgaWYgKCFhcGlUb2tlbikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdNYWlsamV0IEFQSV9UT0tFTiBpcyByZXF1aXJlZCcpO1xuICAgIH1cblxuICAgIHRoaXMuYXBpVG9rZW4gPSBhcGlUb2tlbjtcblxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgcHJpdmF0ZSBiYXNpY0Nvbm5lY3RTdHJhdGVneShhcGlLZXk6IHN0cmluZyB8IHVuZGVmaW5lZCwgYXBpU2VjcmV0OiBzdHJpbmcgfCB1bmRlZmluZWQpIHtcbiAgICBpZiAoIWFwaUtleSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdNYWlsamV0IEFQSV9LRVkgaXMgcmVxdWlyZWQnKTtcbiAgICB9XG4gICAgaWYgKCFhcGlTZWNyZXQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignTWFpbGpldCBBUElfU0VDUkVUIGlzIHJlcXVpcmVkJyk7XG4gICAgfVxuXG4gICAgdGhpcy5hcGlLZXkgPSBhcGlLZXk7XG4gICAgdGhpcy5hcGlTZWNyZXQgPSBhcGlTZWNyZXQ7XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIHB1YmxpYyBzdGF0aWMgYXBpQ29ubmVjdChhcGlLZXk6IHN0cmluZywgYXBpU2VjcmV0OiBzdHJpbmcsIHBhcmFtcz86IENsaWVudENvbm5lY3RQYXJhbXMpIHtcbiAgICByZXR1cm4gbmV3IENsaWVudCh7IGFwaUtleSwgYXBpU2VjcmV0LCAuLi5wYXJhbXMgfSk7XG4gIH1cblxuICBwdWJsaWMgc3RhdGljIHNtc0Nvbm5lY3QoYXBpVG9rZW46IHN0cmluZywgcGFyYW1zPzogQ2xpZW50Q29ubmVjdFBhcmFtcykge1xuICAgIHJldHVybiBuZXcgQ2xpZW50KHsgYXBpVG9rZW4sIC4uLnBhcmFtcyB9KTtcbiAgfVxuXG4gIHB1YmxpYyBzdGF0aWMgY29uZmlnOiBSZWFkb25seTxSZXF1ZXN0Q29uZmlnPiA9IE9iamVjdC5mcmVlemUoe1xuICAgIGhvc3Q6ICdhcGkubWFpbGpldC5jb20nLFxuICAgIHZlcnNpb246ICd2MycsXG4gICAgb3V0cHV0OiAnanNvbicsXG4gIH0gYXMgY29uc3QpO1xuXG4gIHB1YmxpYyBzdGF0aWMgcGFja2FnZUpTT04gPSBPYmplY3QuZnJlZXplKHtcbiAgICAuLi5wYWNrYWdlSlNPTixcbiAgfSBhcyBjb25zdCk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IENsaWVudDtcbiIsIi8qZXh0ZXJuYWwgbW9kdWxlcyovXG4vKnV0aWxzKi9cbi8qdHlwZXMqL1xuaW1wb3J0IEh0dHBNZXRob2RzIGZyb20gJy4vcmVxdWVzdC9IdHRwTWV0aG9kcyc7XG4vKmxpYiovXG5pbXBvcnQgUmVxdWVzdCBmcm9tICcuL3JlcXVlc3QvaW5kZXgnO1xuaW1wb3J0IENsaWVudCBmcm9tICcuL2NsaWVudC9pbmRleCc7XG4vKm90aGVyKi9cblxuY2xhc3MgTWFpbGpldCBleHRlbmRzIENsaWVudCB7XG4gIHN0YXRpYyBSZXF1ZXN0ID0gUmVxdWVzdDtcbiAgc3RhdGljIEh0dHBNZXRob2RzID0gSHR0cE1ldGhvZHM7XG4gIHN0YXRpYyBDbGllbnQgPSBDbGllbnQ7XG59XG5cbmV4cG9ydCAqIGZyb20gJy4vdHlwZXMvYXBpJztcbmV4cG9ydCB7IENsaWVudCwgUmVxdWVzdCwgSHR0cE1ldGhvZHMgfTtcbmV4cG9ydCBkZWZhdWx0IE1haWxqZXQ7XG4iLCIvKmV4dGVybmFsIG1vZHVsZXMqL1xuLyp0eXBlcyovXG4vKnV0aWxzKi9cbi8qbGliKi9cbi8qb3RoZXIqL1xuXG5lbnVtIEh0dHBNZXRob2RzIHtcbiAgR2V0ID0gJ2dldCcsXG4gIFBvc3QgPSAncG9zdCcsXG4gIFB1dCA9ICdwdXQnLFxuICBEZWxldGUgPSAnZGVsZXRlJ1xufVxuXG5leHBvcnQgZGVmYXVsdCBIdHRwTWV0aG9kcztcbiIsIi8qZXh0ZXJuYWwgbW9kdWxlcyovXG5pbXBvcnQgdXJsSm9pbiBmcm9tICd1cmwtam9pbic7XG5pbXBvcnQgSlNPTkJpZ0ludCBmcm9tICdqc29uLWJpZ2ludCc7XG5pbXBvcnQgYXhpb3MsIHsgQXhpb3NFcnJvciB9IGZyb20gJ2F4aW9zJztcbi8qdXRpbHMqL1xuaW1wb3J0IHsgc2V0VmFsdWVJZk5vdE5pbCB9IGZyb20gJy4uL3V0aWxzL2luZGV4Jztcbi8qdHlwZXMqL1xuaW1wb3J0IHsgVE9iamVjdCB9IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCB7IExpYnJhcnlSZXNwb25zZSwgTGlicmFyeUxvY2FsUmVzcG9uc2UgfSBmcm9tICcuLi90eXBlcy9hcGknO1xuaW1wb3J0IEh0dHBNZXRob2RzIGZyb20gJy4vSHR0cE1ldGhvZHMnO1xuaW1wb3J0IHtcbiAgUmVxdWVzdENvbmZpZyxcbiAgUmVxdWVzdERhdGEsXG4gIFJlcXVlc3RQYXJhbXMsXG4gIFJlcXVlc3RDb25zdHJ1Y3RvckNvbmZpZyxcbiAgUmVxdWVzdEF4aW9zQ29uZmlnLFxuICBTdWJQYXRoLFxufSBmcm9tICcuL1JlcXVlc3QnO1xuLypsaWIqL1xuaW1wb3J0IENsaWVudCBmcm9tICcuLi9jbGllbnQnO1xuLypvdGhlciovXG5cbnR5cGUgVW5rbm93blJlYyA9IFRPYmplY3QuVW5rbm93blJlY1xuXG5jb25zdCBKU09OYiA9IEpTT05CaWdJbnQoeyBzdG9yZUFzU3RyaW5nOiB0cnVlIH0pO1xuXG5jbGFzcyBSZXF1ZXN0IHtcbiAgcHJpdmF0ZSByZWFkb25seSBjbGllbnQ6IENsaWVudDtcbiAgcHJpdmF0ZSByZWFkb25seSBtZXRob2Q6IEh0dHBNZXRob2RzO1xuICBwcml2YXRlIHJlYWRvbmx5IGNvbmZpZzogUGFydGlhbDxSZXF1ZXN0Q29uZmlnPjtcbiAgcHJpdmF0ZSByZWFkb25seSByZXNvdXJjZTogc3RyaW5nO1xuXG4gIHByaXZhdGUgdXJsOiBzdHJpbmc7XG4gIHByaXZhdGUgc3ViUGF0aDogU3ViUGF0aDtcbiAgcHJpdmF0ZSBhY3Rpb25QYXRoOiBzdHJpbmcgfCBudWxsO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIGNsaWVudDogQ2xpZW50LFxuICAgIG1ldGhvZDogSHR0cE1ldGhvZHMsXG4gICAgcmVzb3VyY2U6IHN0cmluZyxcbiAgICBjb25maWc/OiBSZXF1ZXN0Q29uc3RydWN0b3JDb25maWcsXG4gICkge1xuICAgIGlmICghKGNsaWVudCBpbnN0YW5jZW9mIENsaWVudCkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQXJndW1lbnQgXCJjbGllbnRcIiBtdXN0IGJlIGluc3RhbmNlIG9mIENsaWVudCcpO1xuICAgIH1cblxuICAgIGlmICghT2JqZWN0LnZhbHVlcyhIdHRwTWV0aG9kcykuaW5jbHVkZXMobWV0aG9kKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdBcmd1bWVudCBcIm1ldGhvZFwiIG11c3QgYmUgb25lIG9mIHN1cHBvcnRlZCBtZXRob2RzOiBnZXQsIHBvc3QsIHB1dCwgZGVsZXRlJyk7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiByZXNvdXJjZSAhPT0gJ3N0cmluZycpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQXJndW1lbnQgXCJyZXNvdXJjZVwiIG11c3QgYmUgc3RyaW5nJyk7XG4gICAgfVxuXG4gICAgdGhpcy5jbGllbnQgPSBjbGllbnQ7XG5cbiAgICB0aGlzLm1ldGhvZCA9IG1ldGhvZDtcbiAgICB0aGlzLnVybCA9IHJlc291cmNlLnRvTG93ZXJDYXNlKCk7XG4gICAgdGhpcy5yZXNvdXJjZSA9IHJlc291cmNlLnRvTG93ZXJDYXNlKCk7XG4gICAgdGhpcy5zdWJQYXRoID0gdGhpcy5idWlsZFN1YlBhdGgoKTtcbiAgICB0aGlzLmFjdGlvblBhdGggPSBudWxsO1xuXG4gICAgdGhpcy5jb25maWcgPSB7IC4uLmNvbmZpZyB9O1xuICB9XG5cbiAgcHVibGljIGdldFVzZXJBZ2VudCgpIHtcbiAgICByZXR1cm4gYG1haWxqZXQtYXBpLXYzLW5vZGVqcy8ke3RoaXMuY2xpZW50LmdldFBhY2thZ2VWZXJzaW9uKCl9YDtcbiAgfVxuXG4gIHB1YmxpYyBnZXRDcmVkZW50aWFscygpIHtcbiAgICByZXR1cm4ge1xuICAgICAgYXBpVG9rZW46IHRoaXMuY2xpZW50LmdldEFQSVRva2VuKCksXG4gICAgICBhcGlLZXk6IHRoaXMuY2xpZW50LmdldEFQSUtleSgpLFxuICAgICAgYXBpU2VjcmV0OiB0aGlzLmNsaWVudC5nZXRBUElTZWNyZXQoKSxcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRDb250ZW50VHlwZSh1cmw6IHN0cmluZykge1xuICAgIGlmICh0eXBlb2YgdXJsICE9PSAnc3RyaW5nJykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdBcmd1bWVudCBcInVybFwiIG11c3QgYmUgc3RyaW5nJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHVybC5pbmRleE9mKCd0ZXh0OnBsYWluJykgPiAtMVxuICAgICAgPyAndGV4dC9wbGFpbidcbiAgICAgIDogJ2FwcGxpY2F0aW9uL2pzb24nO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRSZXF1ZXN0Qm9keShkYXRhOiBSZXF1ZXN0RGF0YSkge1xuICAgIHJldHVybiBbXG4gICAgICBIdHRwTWV0aG9kcy5QdXQsXG4gICAgICBIdHRwTWV0aG9kcy5Qb3N0LFxuICAgICAgSHR0cE1ldGhvZHMuRGVsZXRlLFxuICAgIF0uaW5jbHVkZXModGhpcy5tZXRob2QpID8gZGF0YSA6IHVuZGVmaW5lZDtcbiAgfVxuXG4gIHByaXZhdGUgYnVpbGRGdWxsVXJsKCkge1xuICAgIGNvbnN0IGNsaWVudENvbmZpZyA9IHRoaXMuY2xpZW50LmdldENvbmZpZygpO1xuXG4gICAgY29uc3QgaG9zdCA9IHRoaXMuY29uZmlnLmhvc3QgPz8gY2xpZW50Q29uZmlnLmhvc3Q7XG4gICAgY29uc3QgdmVyc2lvbiA9IHRoaXMuY29uZmlnLnZlcnNpb24gPz8gY2xpZW50Q29uZmlnLnZlcnNpb247XG5cbiAgICByZXR1cm4gdXJsSm9pbihSZXF1ZXN0LnByb3RvY29sLCBob3N0LCB2ZXJzaW9uLCB0aGlzLnN1YlBhdGgsIHRoaXMudXJsKTtcbiAgfVxuXG4gIHByaXZhdGUgYnVpbGRTdWJQYXRoKCkge1xuICAgIGlmICh0aGlzLmFjdGlvblBhdGgpIHtcbiAgICAgIGNvbnN0IGlzQ29udGFjdExpc3RXaXRoQ1NWID0gdGhpcy5yZXNvdXJjZSA9PT0gJ2NvbnRhY3RzbGlzdCcgJiYgdGhpcy5hY3Rpb25QYXRoID09PSAnY3N2ZGF0YS90ZXh0OnBsYWluJztcbiAgICAgIGNvbnN0IGlzQmF0Y2hKb2JXaXRoQ1NWID0gdGhpcy5yZXNvdXJjZSA9PT0gJ2JhdGNoam9iJyAmJiB0aGlzLmFjdGlvblBhdGggPT09ICdjc3ZlcnJvci90ZXh0OmNzdic7XG5cbiAgICAgIHJldHVybiAoaXNDb250YWN0TGlzdFdpdGhDU1YgfHwgaXNCYXRjaEpvYldpdGhDU1YpID8gJ0RBVEEnIDogdGhpcy5zdWJQYXRoO1xuICAgIH1cbiAgICBjb25zdCBpc1NlbmRSZXNvdXJjZSA9IHRoaXMucmVzb3VyY2UgPT09ICdzZW5kJztcbiAgICBjb25zdCByZXNvdXJjZUNvbnRhaW5TTVMgPSB0aGlzLnJlc291cmNlLmluZGV4T2YoJ3NtcycpID4gLTE7XG5cbiAgICByZXR1cm4gKCFpc1NlbmRSZXNvdXJjZSAmJiAhcmVzb3VyY2VDb250YWluU01TKSA/ICdSRVNUJyA6ICcnO1xuICB9XG5cbiAgcHJpdmF0ZSBtYWtlUmVxdWVzdCh1cmw6IHN0cmluZywgZGF0YTogUmVxdWVzdERhdGEsIHBhcmFtczogUmVxdWVzdFBhcmFtcykge1xuICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9heGlvcy9heGlvcyNyZXF1ZXN0LWNvbmZpZ1xuICAgIGNvbnN0IHJlcXVlc3RDb25maWc6IFJlcXVlc3RBeGlvc0NvbmZpZyA9IHtcbiAgICAgIHVybCxcbiAgICAgIHBhcmFtcyxcbiAgICAgIGRhdGE6IHRoaXMuZ2V0UmVxdWVzdEJvZHkoZGF0YSksXG4gICAgICBtZXRob2Q6IHRoaXMubWV0aG9kLFxuICAgICAgcmVzcG9uc2VUeXBlOiAnanNvbicsXG4gICAgICBoZWFkZXJzOiB7XG4gICAgICAgICdVc2VyLUFnZW50JzogdGhpcy5nZXRVc2VyQWdlbnQoKSxcbiAgICAgICAgJ0NvbnRlbnQtVHlwZSc6IHRoaXMuZ2V0Q29udGVudFR5cGUodXJsKSxcbiAgICAgIH0sXG4gICAgICB0cmFuc2Zvcm1SZXNwb25zZShyZXNwb25zZURhdGE6IHVua25vd24pIHtcbiAgICAgICAgY29uc3QgZGF0YUlzU3RyaW5nID0gdHlwZW9mIHJlc3BvbnNlRGF0YSA9PT0gJ3N0cmluZyc7XG4gICAgICAgIGNvbnN0IGlzSlNPTlJlcXVlc3RlZCA9IHRoaXMucmVzcG9uc2VUeXBlID09PSAnanNvbic7XG5cbiAgICAgICAgaWYgKHJlc3BvbnNlRGF0YSAmJiBkYXRhSXNTdHJpbmcgJiYgaXNKU09OUmVxdWVzdGVkKSB7XG4gICAgICAgICAgcmV0dXJuIFJlcXVlc3QucGFyc2VUb0pTT05iKHJlc3BvbnNlRGF0YSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcmVzcG9uc2VEYXRhO1xuICAgICAgfSxcbiAgICB9O1xuXG4gICAgLy8gQlJPV1NFUiBTSURFXG4gICAgaWYgKFJlcXVlc3QuaXNCcm93c2VyKCkpIHtcbiAgICAgIHJlcXVlc3RDb25maWcuaGVhZGVyc1snWC1Vc2VyLUFnZW50J10gPSByZXF1ZXN0Q29uZmlnLmhlYWRlcnNbJ1VzZXItQWdlbnQnXTtcbiAgICB9XG5cbiAgICAvLyBBVVRIXG4gICAgY29uc3QgY3JlZGVudGlhbHMgPSB0aGlzLmdldENyZWRlbnRpYWxzKCk7XG5cbiAgICBpZiAoY3JlZGVudGlhbHMuYXBpVG9rZW4pIHtcbiAgICAgIHJlcXVlc3RDb25maWcuaGVhZGVyc1snQXV0aG9yaXphdGlvbiddID0gYEJlYXJlciAke2NyZWRlbnRpYWxzLmFwaVRva2VufWA7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlcXVlc3RDb25maWcuYXV0aCA9IHtcbiAgICAgICAgdXNlcm5hbWU6IGNyZWRlbnRpYWxzLmFwaUtleSBhcyBzdHJpbmcsXG4gICAgICAgIHBhc3N3b3JkOiBjcmVkZW50aWFscy5hcGlTZWNyZXQgYXMgc3RyaW5nLFxuICAgICAgfTtcbiAgICB9XG5cbiAgICAvLyBPUFRJT05TXG4gICAgY29uc3QgY2xpZW50Q29uZmlnID0gdGhpcy5jbGllbnQuZ2V0Q29uZmlnKCk7XG4gICAgY29uc3QgY2xpZW50T3B0aW9ucyA9IHRoaXMuY2xpZW50LmdldE9wdGlvbnMoKTtcblxuICAgIC8vIDEuIFRpbWVvdXRcbiAgICBpZiAoY2xpZW50T3B0aW9ucy50aW1lb3V0KSB7XG4gICAgICByZXF1ZXN0Q29uZmlnLnRpbWVvdXQgPSBjbGllbnRPcHRpb25zLnRpbWVvdXQ7XG4gICAgfVxuXG4gICAgLy8gMi4gUHJveHlcbiAgICBpZiAoY2xpZW50T3B0aW9ucy5wcm94eSkge1xuICAgICAgcmVxdWVzdENvbmZpZy5wcm94eSA9IGNsaWVudE9wdGlvbnMucHJveHk7XG4gICAgfVxuXG4gICAgLy8gMy4gSGVhZGVyc1xuICAgIGlmIChjbGllbnRPcHRpb25zLmhlYWRlcnMgJiYgT2JqZWN0LmtleXMoY2xpZW50T3B0aW9ucy5oZWFkZXJzKS5sZW5ndGggPiAwKSB7XG4gICAgICByZXF1ZXN0Q29uZmlnLmhlYWRlcnMgPSB7XG4gICAgICAgIC4uLnJlcXVlc3RDb25maWcuaGVhZGVycyxcbiAgICAgICAgLi4uY2xpZW50T3B0aW9ucy5oZWFkZXJzLFxuICAgICAgfTtcbiAgICB9XG5cbiAgICAvLyA0LiBPdXRwdXRcbiAgICBjb25zdCBvdXRwdXQgPSB0aGlzLmNvbmZpZy5vdXRwdXQgPz8gY2xpZW50Q29uZmlnLm91dHB1dDtcbiAgICBpZiAob3V0cHV0KSB7XG4gICAgICByZXF1ZXN0Q29uZmlnLnJlc3BvbnNlVHlwZSA9IG91dHB1dDtcbiAgICB9XG5cbiAgICAvLyBOT0RFIFNJREVcbiAgICAvLyA1LiBNYXggcmVxdWVzdCBjb250ZW50IHNpemVcbiAgICBpZiAoY2xpZW50T3B0aW9ucy5tYXhCb2R5TGVuZ3RoKSB7XG4gICAgICByZXF1ZXN0Q29uZmlnLm1heEJvZHlMZW5ndGggPSBjbGllbnRPcHRpb25zLm1heEJvZHlMZW5ndGg7XG4gICAgfVxuXG4gICAgLy8gTk9ERSBTSURFXG4gICAgLy8gNi4gTWF4IHJlc3BvbnNlIGNvbnRlbnQgc2l6ZVxuICAgIGlmIChjbGllbnRPcHRpb25zLm1heENvbnRlbnRMZW5ndGgpIHtcbiAgICAgIHJlcXVlc3RDb25maWcubWF4Q29udGVudExlbmd0aCA9IGNsaWVudE9wdGlvbnMubWF4Q29udGVudExlbmd0aDtcbiAgICB9XG5cbiAgICByZXR1cm4gYXhpb3MocmVxdWVzdENvbmZpZyk7XG4gIH1cblxuICBwcml2YXRlIHNldEJhc2VVUkwoYmFzZVVybDogc3RyaW5nKSB7XG4gICAgdGhpcy51cmwgPSBiYXNlVXJsLnRvTG93ZXJDYXNlKCk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBwdWJsaWMgaWQodmFsdWU6IHN0cmluZyB8IG51bWJlcikge1xuICAgIGlmICghWydzdHJpbmcnLCAnbnVtYmVyJ10uaW5jbHVkZXModHlwZW9mIHZhbHVlKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdBcmd1bWVudCBcInZhbHVlXCIgbXVzdCBiZSBzdHJpbmcgb3IgbnVtYmVyJyk7XG4gICAgfVxuXG4gICAgdGhpcy51cmwgPSB1cmxKb2luKHRoaXMudXJsLCB2YWx1ZS50b1N0cmluZygpKTtcblxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgcHVibGljIGFjdGlvbihuYW1lOiBzdHJpbmcpIHtcbiAgICBpZiAodHlwZW9mIG5hbWUgIT09ICdzdHJpbmcnKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0FyZ3VtZW50IFwibmFtZVwiIG11c3QgYmUgc3RyaW5nJyk7XG4gICAgfVxuXG4gICAgdGhpcy5hY3Rpb25QYXRoID0gbmFtZS50b0xvd2VyQ2FzZSgpO1xuXG4gICAgc3dpdGNoICh0aGlzLmFjdGlvblBhdGgpIHtcbiAgICAgIGNhc2UgJ2NzdmRhdGEnOiB7XG4gICAgICAgIHRoaXMuYWN0aW9uUGF0aCA9ICdjc3ZkYXRhL3RleHQ6cGxhaW4nO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGNhc2UgJ2NzdmVycm9yJzoge1xuICAgICAgICB0aGlzLmFjdGlvblBhdGggPSAnY3N2ZXJyb3IvdGV4dDpjc3YnO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy51cmwgPSB1cmxKb2luKHRoaXMudXJsLCB0aGlzLmFjdGlvblBhdGgpO1xuICAgIHRoaXMuc3ViUGF0aCA9IHRoaXMuYnVpbGRTdWJQYXRoKCk7XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyByZXF1ZXN0PEJvZHkgZXh0ZW5kcyBSZXF1ZXN0RGF0YT4oXG4gICAgZGF0YT86IFJlcXVlc3REYXRhLFxuICAgIHBhcmFtcz86IFJlcXVlc3RQYXJhbXMsXG4gICAgcGVyZm9ybUFQSUNhbGw/OiB0cnVlLFxuICApOiBQcm9taXNlPExpYnJhcnlSZXNwb25zZTxCb2R5Pj5cblxuICBwdWJsaWMgYXN5bmMgcmVxdWVzdDxCb2R5IGV4dGVuZHMgUmVxdWVzdERhdGEsIFBhcmFtcyBleHRlbmRzIFVua25vd25SZWM+KFxuICAgIGRhdGE/OiBCb2R5LFxuICAgIHBhcmFtcz86IFBhcmFtcyxcbiAgICBwZXJmb3JtQVBJQ2FsbD86IGZhbHNlLFxuICApOiBQcm9taXNlPExpYnJhcnlMb2NhbFJlc3BvbnNlPEJvZHksIFBhcmFtcz4+XG5cbiAgcHVibGljIGFzeW5jIHJlcXVlc3Q8Qm9keSBleHRlbmRzIFJlcXVlc3REYXRhLCBQYXJhbXMgZXh0ZW5kcyBVbmtub3duUmVjPihcbiAgICBkYXRhOiBSZXF1ZXN0RGF0YSB8IEJvZHkgPSB7fSxcbiAgICBwYXJhbXM6IFJlcXVlc3RQYXJhbXMgfCBQYXJhbXMgPSB7fSxcbiAgICBwZXJmb3JtQVBJQ2FsbCA9IHRydWUsXG4gICk6IFByb21pc2U8TGlicmFyeVJlc3BvbnNlPEJvZHk+IHwgTGlicmFyeUxvY2FsUmVzcG9uc2U8Qm9keSwgUGFyYW1zPj4ge1xuICAgIGNvbnN0IHVybCA9IHRoaXMuYnVpbGRGdWxsVXJsKCk7XG4gICAgdGhpcy5zZXRCYXNlVVJMKHRoaXMucmVzb3VyY2UpO1xuXG4gICAgaWYgKCFwZXJmb3JtQVBJQ2FsbCkge1xuICAgICAgY29uc3QgYm9keSA9IHRoaXMuZ2V0UmVxdWVzdEJvZHkoZGF0YSk7XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIGJvZHksXG4gICAgICAgIHBhcmFtcyxcbiAgICAgICAgdXJsLFxuICAgICAgfSBhcyBMaWJyYXJ5TG9jYWxSZXNwb25zZTxCb2R5LCBQYXJhbXM+O1xuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMubWFrZVJlcXVlc3QodXJsLCBkYXRhLCBwYXJhbXMpO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgcmVzcG9uc2UsXG4gICAgICAgIGJvZHk6IHJlc3BvbnNlLmRhdGEsXG4gICAgICB9O1xuICAgIH0gY2F0Y2ggKGVycjogdW5rbm93bikge1xuICAgICAgaWYgKGVyciBpbnN0YW5jZW9mIEF4aW9zRXJyb3IpIHtcbiAgICAgICAgY29uc3QgZXJyb3I6IGFueSA9IG5ldyBFcnJvcigpO1xuXG4gICAgICAgIGVycm9yLmNvZGUgPSBlcnIuY29kZTtcbiAgICAgICAgZXJyb3IuY29uZmlnID0gZXJyLmNvbmZpZztcblxuICAgICAgICBpZiAoZXJyLnJlc3BvbnNlKSB7XG4gICAgICAgICAgY29uc3Qge1xuICAgICAgICAgICAgc3RhdHVzLFxuICAgICAgICAgICAgc3RhdHVzVGV4dCxcbiAgICAgICAgICAgIGRhdGE6IGJvZHksXG4gICAgICAgICAgfSA9IGVyci5yZXNwb25zZTtcblxuICAgICAgICAgIGVycm9yLnJlc3BvbnNlID0gZXJyLnJlc3BvbnNlO1xuXG4gICAgICAgICAgZXJyb3Iuc3RhdHVzQ29kZSA9IHN0YXR1cztcbiAgICAgICAgICBlcnJvci5zdGF0dXNUZXh0ID0gc3RhdHVzVGV4dDtcblxuICAgICAgICAgIGNvbnN0IGVycm9yTWVzc2FnZSA9IGJvZHk/LkVycm9yTWVzc2FnZSA/PyBlcnIubWVzc2FnZTtcbiAgICAgICAgICBlcnJvci5vcmlnaW5hbE1lc3NhZ2UgPSBlcnJvck1lc3NhZ2U7XG4gICAgICAgICAgZXJyb3IubWVzc2FnZSA9IGBVbnN1Y2Nlc3NmdWw6IFN0YXR1cyBDb2RlOiBcIiR7ZXJyb3Iuc3RhdHVzQ29kZX1cIiBNZXNzYWdlOiBcIiR7ZXJyb3JNZXNzYWdlfVwiYDtcblxuICAgICAgICAgIGlmIChib2R5KSB7XG4gICAgICAgICAgICAvLyBodHRwczovL2Rldi5tYWlsamV0LmNvbS9lbWFpbC9ndWlkZXMvc2VuZC1hcGktdjMxLyNzZW5kLWluLWJ1bGtcbiAgICAgICAgICAgIGNvbnN0IGZ1bGxNZXNzYWdlID0gYm9keS5NZXNzYWdlcz8uWzBdPy5FcnJvcnM/LlswXT8uRXJyb3JNZXNzYWdlO1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBmdWxsTWVzc2FnZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgZXJyb3IubWVzc2FnZSArPSBgO1xcbiR7ZnVsbE1lc3NhZ2V9YDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gdjMuMSBjYXNlXG4gICAgICAgICAgICAvLyBodHRwczovL2Rldi5tYWlsamV0LmNvbS9lbWFpbC9ndWlkZXMvc2VuZC1hcGktdjMxLyNzYW5kYm94LW1vZGVcbiAgICAgICAgICAgIHNldFZhbHVlSWZOb3ROaWwoZXJyb3IsICdFcnJvck1lc3NhZ2UnLCBib2R5LkVycm9yTWVzc2FnZSk7XG4gICAgICAgICAgICBzZXRWYWx1ZUlmTm90TmlsKGVycm9yLCAnRXJyb3JDb2RlJywgYm9keS5FcnJvckNvZGUpO1xuICAgICAgICAgICAgc2V0VmFsdWVJZk5vdE5pbChlcnJvciwgJ0Vycm9ySWRlbnRpZmllcicsIGJvZHkuRXJyb3JJZGVudGlmaWVyKTtcbiAgICAgICAgICAgIHNldFZhbHVlSWZOb3ROaWwoZXJyb3IsICdFcnJvclJlbGF0ZWRUbycsIGJvZHkuRXJyb3JSZWxhdGVkVG8pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBlcnJvci5yZXNwb25zZSA9IG51bGw7XG5cbiAgICAgICAgICBlcnJvci5zdGF0dXNDb2RlID0gbnVsbDtcbiAgICAgICAgICBlcnJvci5zdGF0dXNUZXh0ID0gbnVsbDtcblxuICAgICAgICAgIGVycm9yLm9yaWdpbmFsTWVzc2FnZSA9IGVyci5tZXNzYWdlO1xuICAgICAgICAgIGVycm9yLm1lc3NhZ2UgPSBgVW5zdWNjZXNzZnVsOiBFcnJvciBDb2RlOiBcIiR7ZXJyb3IuY29kZX1cIiBNZXNzYWdlOiBcIiR7ZXJyLm1lc3NhZ2V9XCJgO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICB9XG5cbiAgICAgIHRocm93IGVycjtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgc3RhdGljIHByb3RvY29sID0gJ2h0dHBzOi8vJyBhcyBjb25zdDtcblxuICBwdWJsaWMgc3RhdGljIHBhcnNlVG9KU09OYih0ZXh0OiBzdHJpbmcpIHtcbiAgICBpZiAodHlwZW9mIHRleHQgIT09ICdzdHJpbmcnKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0FyZ3VtZW50IFwidGV4dFwiIG11c3QgYmUgc3RyaW5nJyk7XG4gICAgfVxuXG4gICAgbGV0IGJvZHk7XG4gICAgdHJ5IHtcbiAgICAgIGJvZHkgPSBKU09OYi5wYXJzZSh0ZXh0KTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBib2R5ID0ge307XG4gICAgfVxuXG4gICAgcmV0dXJuIGJvZHk7XG4gIH1cblxuICBwdWJsaWMgc3RhdGljIGlzQnJvd3NlcigpIHtcbiAgICByZXR1cm4gdHlwZW9mIHdpbmRvdyA9PT0gJ29iamVjdCc7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgUmVxdWVzdDtcbiIsImltcG9ydCB7IENvbW1vbiB9IGZyb20gJy4vQ29tbW9uJztcblxuZXhwb3J0IG5hbWVzcGFjZSBEcmFmdENhbXBhaWduIHtcbiAgZXhwb3J0IGVudW0gRWRpdE1vZGUge1xuICAgIFRvb2wyID0gJ3Rvb2wyJyxcbiAgICBIVE1MMiA9ICdodG1sMicsXG4gICAgTUpNTCA9ICdtam1sJ1xuICB9XG5cbiAgZXhwb3J0IGVudW0gQ2FtcGFpZ25EcmFmdFN0YXR1cyB7XG4gICAgQVhDYW5jZWxlZCA9IC0zLFxuICAgIERlbGV0ZWQgPSAtMixcbiAgICBBcmNoaXZlZCA9IC0xLFxuICAgIERyYWZ0ID0gMCxcbiAgICBQcm9ncmFtbWVkID0gMSxcbiAgICBTZW50ID0gMixcbiAgICBBWFRlc3RlZCA9IDMsXG4gICAgQVhTZWxlY3RlZCA9IDRcbiAgfVxuXG4gIGV4cG9ydCBlbnVtIENhbXBhaWduRHJhZnRTZW5kaW5nU3RhdHVzIHtcbiAgICBBWENhbmNlbGxlZCA9ICdBWENhbmNlbGxlZCcsXG4gICAgRGVsZXRlZCA9ICdEZWxldGVkJyxcbiAgICBBcmNoaXZlZCA9ICdBcmNoaXZlZCcsXG4gICAgRHJhZnQgPSAnRHJhZnQnLFxuICAgIFByb2dyYW1tZWQgPSAnUHJvZ3JhbW1lZCcsXG4gICAgU2VudCA9ICdTZW50JyxcbiAgICBBWFRlc3RlZCA9ICdBWFRlc3RlZCcsXG4gICAgQVhTZWxlY3RlZCA9ICdBWFNlbGVjdGVkJ1xuICB9XG5cbiAgZXhwb3J0IGludGVyZmFjZSBSZWNpcGllbnQge1xuICAgIEVtYWlsOiBzdHJpbmc7XG4gICAgTmFtZT86IHN0cmluZ1xuICB9XG5cbiAgZXhwb3J0IGludGVyZmFjZSBDYW1wYWlnbkRyYWZ0PEFYVGVzdGluZyA9IENvbW1vbi5Vbmtub3duUmVjPiB7XG4gICAgSUQ6IG51bWJlcjtcbiAgICBBWEZyYWN0aW9uOiBudW1iZXI7XG4gICAgQVhGcmFjdGlvbk5hbWU6IHN0cmluZztcbiAgICBBWFRlc3Rpbmc6IEFYVGVzdGluZztcbiAgICBDdXJyZW50OiBudW1iZXI7XG4gICAgRWRpdE1vZGU6IEVkaXRNb2RlO1xuICAgIElzU3RhcnJlZDogYm9vbGVhbjtcbiAgICBJc1RleHRQYXJ0SW5jbHVkZWQ6IGJvb2xlYW47XG4gICAgUmVwbHlFbWFpbDogc3RyaW5nO1xuICAgIFNlbmRlck5hbWU6IHN0cmluZztcbiAgICBUZW1wbGF0ZUlEOiBudW1iZXI7XG4gICAgVGl0bGU6IHN0cmluZztcbiAgICBDYW1wYWlnbklEOiBudW1iZXI7XG4gICAgQ29udGFjdHNMaXN0SUQ6IG51bWJlcjtcbiAgICBDcmVhdGVkQXQ6IHN0cmluZztcbiAgICBEZWxpdmVyZWRBdDogc3RyaW5nO1xuICAgIExvY2FsZTogc3RyaW5nO1xuICAgIE1vZGlmaWVkQXQ6IHN0cmluZztcbiAgICBQcmVzZXQ6IHN0cmluZztcbiAgICBTZWdtZW50YXRpb25JRDogbnVtYmVyO1xuICAgIFNlbmRlcjogc3RyaW5nO1xuICAgIFNlbmRlckVtYWlsOiBzdHJpbmc7XG4gICAgU3RhdHVzOiBDYW1wYWlnbkRyYWZ0U3RhdHVzO1xuICAgIFN1YmplY3Q6IHN0cmluZztcbiAgICBVcmw6IHN0cmluZztcbiAgICBVc2VkOiBib29sZWFuO1xuICB9XG5cbiAgZXhwb3J0IGludGVyZmFjZSBDYW1wYWlnbkRyYWZ0RGV0YWlsQ29udGVudDxIZWFkZXJzID0gQ29tbW9uLlVua25vd25SZWM+IHtcbiAgICBIZWFkZXJzOiBIZWFkZXJzO1xuICAgICdIdG1sLXBhcnQnOiBzdHJpbmc7XG4gICAgJ1RleHQtcGFydCc6IHN0cmluZztcbiAgICBNSk1MQ29udGVudDogc3RyaW5nO1xuICB9XG5cbiAgZXhwb3J0IGludGVyZmFjZSBDYW1wYWlnbkRyYWZ0U2NoZWR1bGUge1xuICAgIERhdGU6IHN0cmluZztcbiAgICBTdGF0dXM6IHN0cmluZztcbiAgfVxuXG4gIC8vIFJFUVVFU1QgUEFSVFxuICBleHBvcnQgdHlwZSBQb3N0Q2FtcGFpZ25EcmFmdEJvZHk8QVhUZXN0aW5nID0gQ29tbW9uLlVua25vd25SZWM+ID0ge1xuICAgIExvY2FsZTogc3RyaW5nO1xuICAgIFN1YmplY3Q6IHN0cmluZztcblxuICAgIEFYRnJhY3Rpb24/OiBudW1iZXI7XG4gICAgQVhGcmFjdGlvbk5hbWU/OiBzdHJpbmc7XG4gICAgQVhUZXN0aW5nPzogQVhUZXN0aW5nO1xuICAgIEN1cnJlbnQ/OiBudW1iZXI7XG4gICAgRWRpdE1vZGU/OiBFZGl0TW9kZTtcbiAgICBJc1N0YXJyZWQ/OiBib29sZWFuO1xuICAgIElzVGV4dFBhcnRJbmNsdWRlZD86IGJvb2xlYW47XG4gICAgUmVwbHlFbWFpbD86IHN0cmluZztcbiAgICBTZW5kZXJOYW1lPzogc3RyaW5nO1xuICAgIFRlbXBsYXRlSUQ/OiBudW1iZXI7XG4gICAgVGl0bGU/OiBzdHJpbmc7XG4gICAgQ29udGFjdHNMaXN0SUQ/OiBudW1iZXI7XG4gICAgQ29udGFjdHNMaXN0QWx0Pzogc3RyaW5nO1xuICAgIFNlZ21lbnRhdGlvbklEPzogbnVtYmVyO1xuICAgIFNlZ21lbnRhdGlvbkFsdD86IHN0cmluZztcbiAgICBTZW5kZXI/OiBzdHJpbmc7XG4gICAgU2VuZGVyRW1haWw/OiBzdHJpbmc7XG4gIH1cblxuICBleHBvcnQgdHlwZSBQdXRDYW1wYWlnbkRyYWZ0Qm9keTxBWFRlc3RpbmcgPSBDb21tb24uVW5rbm93blJlYz4gPVxuICAgIE9taXQ8UGFydGlhbDxQb3N0Q2FtcGFpZ25EcmFmdEJvZHk8QVhUZXN0aW5nPj4sICdDb250YWN0c0xpc3RBbHQnPiAmXG4gIHtcbiAgICBTdGF0dXM/OiBDYW1wYWlnbkRyYWZ0U3RhdHVzXG4gIH1cblxuICBleHBvcnQgdHlwZSBHZXRDYW1wYWlnbkRyYWZ0UXVlcnlQYXJhbXMgPSBQYXJ0aWFsPENvbW1vbi5QYWdpbmF0aW9uPiAmIHtcbiAgICBBWFRlc3Rpbmc/OiBudW1iZXI7XG4gICAgQ2FtcGFpZ24/OiBudW1iZXI7XG4gICAgQ29udGFjdHNMaXN0PzogbnVtYmVyO1xuICAgIERlbGl2ZXJlZEF0Pzogc3RyaW5nO1xuICAgIEVkaXRNb2RlPzogRWRpdE1vZGU7XG4gICAgSXNBcmNoaXZlZD86IGJvb2xlYW47XG4gICAgSXNDYW1wYWlnbj86IGJvb2xlYW47XG4gICAgSXNEZWxldGVkPzogYm9vbGVhbjtcbiAgICBJc0hhbmRsZWQ/OiBib29sZWFuO1xuICAgIElzU3RhcnJlZD86IGJvb2xlYW47XG4gICAgTW9kaWZpZWQ/OiBib29sZWFuO1xuICAgIE5ld3NMZXR0ZXJUZW1wbGF0ZT86IG51bWJlcjtcbiAgICBTdGF0dXM/OiBDYW1wYWlnbkRyYWZ0U3RhdHVzO1xuICAgIFN1YmplY3Q/OiBzdHJpbmc7XG4gICAgVGVtcGxhdGU/OiBudW1iZXI7XG4gIH1cblxuICBleHBvcnQgdHlwZSBQb3N0Q2FtcGFpZ25EcmFmdERldGFpbENvbnRlbnRCb2R5PEhlYWRlcnMgPSBDb21tb24uVW5rbm93blJlYz4gPVxuICAgIFBhcnRpYWw8Q2FtcGFpZ25EcmFmdERldGFpbENvbnRlbnQ8SGVhZGVycz4+XG5cbiAgZXhwb3J0IHR5cGUgUG9zdENhbXBhaWduRHJhZnRTY2hlZHVsZUJvZHkgPSB7XG4gICAgRGF0ZTogc3RyaW5nO1xuICB9XG5cbiAgZXhwb3J0IHR5cGUgUHV0Q2FtcGFpZ25EcmFmdFNjaGVkdWxlQm9keSA9IFBhcnRpYWw8UG9zdENhbXBhaWduRHJhZnRTY2hlZHVsZUJvZHk+XG5cbiAgZXhwb3J0IHR5cGUgUG9zdENhbXBhaWduRHJhZnRUZXN0Qm9keSA9IHtcbiAgICBSZWNpcGllbnRzOiBSZWNpcGllbnRbXVxuICB9XG5cbiAgLy8gUkVTUE9OU0UgUEFSVFxuICB0eXBlIENhbXBhaWduRHJhZnRSZXNwb25zZSA9IENvbW1vbi5SZXNwb25zZTxDYW1wYWlnbkRyYWZ0W10+O1xuICB0eXBlIENhbXBhaWduRHJhZnRTY2hlZHVsZVJlc3BvbnNlID0gQ29tbW9uLlJlc3BvbnNlPENhbXBhaWduRHJhZnRTY2hlZHVsZVtdPjtcbiAgdHlwZSBDYW1wYWlnbkRyYWZ0RGV0YWlsQ29udGVudFJlc3BvbnNlPEhlYWRlcnMgPSBDb21tb24uVW5rbm93blJlYz4gPVxuICAgIENvbW1vbi5SZXNwb25zZTxBcnJheTxDYW1wYWlnbkRyYWZ0RGV0YWlsQ29udGVudDxIZWFkZXJzPj4+O1xuICB0eXBlIENhbXBhaWduRHJhZnRTdGF0dXNSZXNwb25zZSA9XG4gICAgQ29tbW9uLlJlc3BvbnNlPEFycmF5PHsgU3RhdHVzOiBDYW1wYWlnbkRyYWZ0U2VuZGluZ1N0YXR1cyB9Pj47XG5cbiAgZXhwb3J0IHR5cGUgUG9zdENhbXBhaWduRHJhZnRSZXNwb25zZSA9IENhbXBhaWduRHJhZnRSZXNwb25zZVxuICBleHBvcnQgdHlwZSBQdXRDYW1wYWlnbkRyYWZ0UmVzcG9uc2UgPSBDYW1wYWlnbkRyYWZ0UmVzcG9uc2VcbiAgZXhwb3J0IHR5cGUgR2V0Q2FtcGFpZ25EcmFmdFJlc3BvbnNlID0gQ2FtcGFpZ25EcmFmdFJlc3BvbnNlXG5cbiAgZXhwb3J0IHR5cGUgUG9zdENhbXBhaWduRHJhZnRTY2hlZHVsZVJlc3BvbnNlID0gQ2FtcGFpZ25EcmFmdFNjaGVkdWxlUmVzcG9uc2VcbiAgZXhwb3J0IHR5cGUgUHV0Q2FtcGFpZ25EcmFmdFNjaGVkdWxlUmVzcG9uc2UgPSBDYW1wYWlnbkRyYWZ0U2NoZWR1bGVSZXNwb25zZVxuICBleHBvcnQgdHlwZSBHZXRDYW1wYWlnbkRyYWZ0U2NoZWR1bGVSZXNwb25zZSA9IENhbXBhaWduRHJhZnRTY2hlZHVsZVJlc3BvbnNlXG5cbiAgZXhwb3J0IHR5cGUgUG9zdENhbXBhaWduRHJhZnREZXRhaWxDb250ZW50UmVzcG9uc2U8SGVhZGVycyA9IENvbW1vbi5Vbmtub3duUmVjPiA9XG4gICAgQ2FtcGFpZ25EcmFmdERldGFpbENvbnRlbnRSZXNwb25zZTxIZWFkZXJzPlxuICBleHBvcnQgdHlwZSBHZXRDYW1wYWlnbkRyYWZ0RGV0YWlsQ29udGVudFJlc3BvbnNlPEhlYWRlcnMgPSBDb21tb24uVW5rbm93blJlYz4gPVxuICAgIENhbXBhaWduRHJhZnREZXRhaWxDb250ZW50UmVzcG9uc2U8SGVhZGVycz5cblxuICBleHBvcnQgdHlwZSBQb3N0Q2FtcGFpZ25EcmFmdFNlbmQgPSBDYW1wYWlnbkRyYWZ0U3RhdHVzUmVzcG9uc2VcbiAgZXhwb3J0IHR5cGUgUG9zdENhbXBhaWduRHJhZnRUZXN0ID0gQ2FtcGFpZ25EcmFmdFN0YXR1c1Jlc3BvbnNlXG4gIGV4cG9ydCB0eXBlIEdldENhbXBhaWduRHJhZnRTdGF0dXMgPSBDYW1wYWlnbkRyYWZ0U3RhdHVzUmVzcG9uc2Vcbn1cblxuZXhwb3J0IG5hbWVzcGFjZSBTZW50Q2FtcGFpZ24ge1xuICBleHBvcnQgZW51bSBDYW1wYWlnblR5cGUge1xuICAgIFRyYW5zYWN0aW9uYWwgPSAxLFxuICAgIE1hcmtldGluZyA9IDIsXG4gICAgVW5rbm93biA9IDMsXG4gIH1cblxuICBleHBvcnQgaW50ZXJmYWNlIENhbXBhaWduIHtcbiAgICBJRDogbnVtYmVyO1xuICAgIElzRGVsZXRlZDogYm9vbGVhbjtcbiAgICBJc1N0YXJyZWQ6IGJvb2xlYW47XG4gICAgQ2FtcGFpZ25UeXBlOiBDYW1wYWlnblR5cGU7XG4gICAgQ3JlYXRlZEF0OiBzdHJpbmc7XG4gICAgQ3VzdG9tVmFsdWU6IHN0cmluZztcbiAgICBGaXJzdE1lc3NhZ2VJRDogbnVtYmVyO1xuICAgIEZyb21FbWFpbDogc3RyaW5nO1xuICAgIEZyb21JRDogbnVtYmVyO1xuICAgIEZyb21OYW1lOiBzdHJpbmc7XG4gICAgSGFzSHRtbENvdW50OiBudW1iZXI7XG4gICAgSGFzVHh0Q291bnQ6IG51bWJlcjtcbiAgICBMaXN0SUQ6IG51bWJlcjtcbiAgICBOZXdzTGV0dGVySUQ6IG51bWJlcjtcbiAgICBTZWdtZW50YXRpb25JRDogbnVtYmVyO1xuICAgIFNlbmRFbmRBdDogc3RyaW5nO1xuICAgIFNlbmRTdGFydEF0OiBzdHJpbmc7XG4gICAgU3BhbWFzc1Njb3JlOiBudW1iZXI7XG4gICAgU3ViamVjdDogc3RyaW5nO1xuICAgIFdvcmtmbG93SUQ6IG51bWJlcjtcbiAgfVxuXG4gIC8vIFJFUVVFU1QgUEFSVFxuICBleHBvcnQgdHlwZSBQdXRDYW1wYWlnbkJvZHkgPSB7XG4gICAgSXNEZWxldGVkPzogYm9vbGVhbjtcbiAgICBJc1N0YXJyZWQ/OiBib29sZWFuO1xuICB9XG5cbiAgZXhwb3J0IHR5cGUgR2V0Q2FtcGFpZ25RdWVyeVBhcmFtcyA9IFBhcnRpYWw8Q29tbW9uLlRpbWVzdGFtcFBlcmlvZD4gJlxuICAgIFBhcnRpYWw8Q29tbW9uLlBhZ2luYXRpb24+ICZcbiAge1xuICAgIENhbXBhaWduSUQ/OiBudW1iZXI7XG4gICAgQ29udGFjdHNMaXN0SUQ/OiBudW1iZXI7XG4gICAgQ3VzdG9tQ2FtcGFpZ24/OiBzdHJpbmc7XG4gICAgRnJvbT86IHN0cmluZztcbiAgICBGcm9tRG9tYWluPzogc3RyaW5nO1xuICAgIEZyb21JRD86IG51bWJlcjtcbiAgICBGcm9tVHlwZT86IENhbXBhaWduVHlwZTtcbiAgICBJc0RlbGV0ZWQ/OiBib29sZWFuO1xuICAgIElzTmV3c2xldHRlclRvb2w/OiBib29sZWFuO1xuICAgIElzU3RhcnJlZD86IGJvb2xlYW47XG4gICAgUGVyaW9kPzogQ29tbW9uLlBlcmlvZDtcbiAgICBXb3JrZmxvd0lEPzogbnVtYmVyO1xuICB9XG5cbiAgLy8gUkVTUE9OU0UgUEFSVFxuICB0eXBlIENhbXBhaWduUmVzcG9uc2UgPSBDb21tb24uUmVzcG9uc2U8Q2FtcGFpZ25bXT47XG5cbiAgZXhwb3J0IHR5cGUgUHV0Q2FtcGFpZ25SZXNwb25zZSA9IENhbXBhaWduUmVzcG9uc2VcbiAgZXhwb3J0IHR5cGUgR2V0Q2FtcGFpZ25SZXNwb25zZSA9IENhbXBhaWduUmVzcG9uc2Vcbn1cbiIsImV4cG9ydCBuYW1lc3BhY2UgQ29tbW9uIHtcbiAgZXhwb3J0IHR5cGUgVW5rbm93blJlYyA9IFJlY29yZDxzdHJpbmcsIHVua25vd24+XG5cbiAgZXhwb3J0IGludGVyZmFjZSBQYWdpbmF0aW9uIHtcbiAgICBjb3VudE9ubHk6IGJvb2xlYW47XG5cbiAgICBMaW1pdDogbnVtYmVyO1xuICAgIE9mZnNldDogbnVtYmVyO1xuICAgIFNvcnQ6IHN0cmluZztcbiAgfVxuXG4gIGV4cG9ydCBpbnRlcmZhY2UgVGltZXN0YW1wUGVyaW9kIHtcbiAgICBGcm9tVFM6IHN0cmluZyB8IG51bWJlcjtcbiAgICBUb1RTOiBzdHJpbmcgfCBudW1iZXI7XG4gIH1cblxuICBleHBvcnQgdHlwZSBSZXNwb25zZTxFbnRpdHk+ID0ge1xuICAgIENvdW50OiBudW1iZXI7XG4gICAgVG90YWw6IG51bWJlcjtcbiAgICBEYXRhOiBFbnRpdHk7XG4gIH1cblxuICBleHBvcnQgZW51bSBQZXJpb2Qge1xuICAgIERheSA9ICdEYXknLFxuICAgIFdlZWsgPSAnV2VlaycsXG4gICAgTW9udGggPSAnTW9udGgnLFxuICAgIFllYXIgPSAnWWVhcicsXG4gIH1cbn1cbiIsImltcG9ydCB7IENvbW1vbiB9IGZyb20gJy4vQ29tbW9uJztcblxuZXhwb3J0IG5hbWVzcGFjZSBDb250YWN0IHtcbiAgZXhwb3J0IGludGVyZmFjZSBDb250YWN0IHtcbiAgICBJRDogbnVtYmVyO1xuICAgIElzRXhjbHVkZWRGcm9tQ2FtcGFpZ25zOiBib29sZWFuO1xuICAgIE5hbWU6IHN0cmluZztcbiAgICBDcmVhdGVkQXQ6IHN0cmluZztcbiAgICBEZWxpdmVyZWRDb3VudDogbnVtYmVyO1xuICAgIEVtYWlsOiBzdHJpbmc7XG4gICAgRXhjbHVzaW9uRnJvbUNhbXBhaWduc1VwZGF0ZWRBdDogc3RyaW5nO1xuICAgIElzT3B0SW5QZW5kaW5nOiBib29sZWFuO1xuICAgIElzU3BhbUNvbXBsYWluaW5nOiBib29sZWFuO1xuICAgIExhc3RBY3Rpdml0eUF0OiBzdHJpbmc7XG4gICAgTGFzdFVwZGF0ZUF0OiBzdHJpbmc7XG4gIH1cblxuICAvLyBSRVFVRVNUIFBBUlRcbiAgZXhwb3J0IHR5cGUgUG9zdENvbnRhY3RCb2R5ID0ge1xuICAgIEVtYWlsOiBzdHJpbmc7XG4gICAgSXNFeGNsdWRlZEZyb21DYW1wYWlnbnM/OiBib29sZWFuO1xuICAgIE5hbWU/OiBzdHJpbmc7XG4gIH1cblxuICBleHBvcnQgdHlwZSBQdXRDb250YWN0Qm9keSA9IE9taXQ8UG9zdENvbnRhY3RCb2R5LCAnRW1haWwnPlxuXG4gIGV4cG9ydCB0eXBlIEdldENvbnRhY3RRdWVyeVBhcmFtcyA9IFBhcnRpYWw8Q29tbW9uLlBhZ2luYXRpb24+ICYge1xuICAgIENhbXBhaWduPzogbnVtYmVyO1xuICAgIENvbnRhY3RzTGlzdD86IG51bWJlcjtcbiAgICBJc0V4Y2x1ZGVkRnJvbUNhbXBhaWducz86IGJvb2xlYW47XG4gIH1cblxuICAvLyBSRVNQT05TRSBQQVJUXG4gIHR5cGUgQ29udGFjdFJlc3BvbnNlID0ge1xuICAgIENvdW50OiBudW1iZXI7XG4gICAgVG90YWw6IG51bWJlcjtcbiAgICBEYXRhOiBDb250YWN0W107XG4gIH07XG5cbiAgZXhwb3J0IHR5cGUgUG9zdENvbnRhY3RSZXNwb25zZSA9IENvbnRhY3RSZXNwb25zZVxuICBleHBvcnQgdHlwZSBQdXRDb250YWN0UmVzcG9uc2UgPSBDb250YWN0UmVzcG9uc2VcbiAgZXhwb3J0IHR5cGUgR2V0Q29udGFjdFJlc3BvbnNlID0gQ29udGFjdFJlc3BvbnNlXG59XG5cbmV4cG9ydCBuYW1lc3BhY2UgQ29udGFjdExpc3Qge1xuICBleHBvcnQgaW50ZXJmYWNlIENvbnRhY3RMaXN0IHtcbiAgICBJRDogbnVtYmVyO1xuICAgIElzRGVsZXRlZDogYm9vbGVhbjtcbiAgICBOYW1lOiBzdHJpbmc7XG4gICAgQWRkcmVzczogc3RyaW5nO1xuICAgIENyZWF0ZWRBdDogc3RyaW5nO1xuICAgIFN1YnNjcmliZXJDb3VudDogbnVtYmVyO1xuICB9XG5cbiAgLy8gUkVRVUVTVCBQQVJUXG4gIGV4cG9ydCB0eXBlIFBvc3RDb250YWN0TGlzdEJvZHkgPSB7XG4gICAgTmFtZTogc3RyaW5nO1xuICAgIElzRGVsZXRlZD86IGJvb2xlYW47XG4gIH1cblxuICBleHBvcnQgdHlwZSBQdXRDb250YWN0TGlzdEJvZHkgPSBQYXJ0aWFsPFBvc3RDb250YWN0TGlzdEJvZHk+XG5cbiAgZXhwb3J0IHR5cGUgR2V0Q29udGFjdExpc3RRdWVyeVBhcmFtcyA9IFBhcnRpYWw8Q29tbW9uLlBhZ2luYXRpb24+ICYge1xuICAgIEFkZHJlc3M/OiBzdHJpbmc7XG4gICAgRXhjbHVkZUlEPzogbnVtYmVyO1xuICAgIElzRGVsZXRlZD86IGJvb2xlYW47XG4gICAgTmFtZT86IHN0cmluZztcbiAgfVxuXG4gIC8vIFJFU1BPTlNFIFBBUlRcbiAgdHlwZSBDb250YWN0TGlzdFJlc3BvbnNlID0gQ29tbW9uLlJlc3BvbnNlPENvbnRhY3RMaXN0W10+O1xuXG4gIGV4cG9ydCB0eXBlIFBvc3RDb250YWN0TGlzdFJlc3BvbnNlID0gQ29udGFjdExpc3RSZXNwb25zZVxuICBleHBvcnQgdHlwZSBQdXRDb250YWN0TGlzdFJlc3BvbnNlID0gQ29udGFjdExpc3RSZXNwb25zZVxuICBleHBvcnQgdHlwZSBHZXRDb250YWN0TGlzdFJlc3BvbnNlID0gQ29udGFjdExpc3RSZXNwb25zZVxufVxuXG5leHBvcnQgbmFtZXNwYWNlIEJ1bGtDb250YWN0TWFuYWdlbWVudCB7XG4gIGV4cG9ydCBlbnVtIE1hbmFnZUNvbnRhY3RzQWN0aW9uIHtcbiAgICBBZGRGb3JjZSA9ICdhZGRmb3JjZScsXG4gICAgQWRkTm9Gb3JjZSA9ICdhZGRub2ZvcmNlJyxcbiAgICBSZW1vdmUgPSAncmVtb3ZlJyxcbiAgICBVblN1YiA9ICd1bnN1YidcbiAgfVxuXG4gIGV4cG9ydCBlbnVtIEltcG9ydExpc3RBY3Rpb24ge1xuICAgIEFkZEZvcmNlID0gJ2FkZGZvcmNlJyxcbiAgICBBZGROb0ZvcmNlID0gJ2FkZG5vZm9yY2UnLFxuICAgIFVuU3ViID0gJ3Vuc3ViJyxcbiAgICBEdXBsaWNhdGVPdmVycmlkZSA9ICdkdXBsaWNhdGUtb3ZlcnJpZGUnLFxuICAgIER1cGxpY2F0ZU5vT3ZlcnJpZGUgPSAnZHVwbGljYXRlLW5vLW92ZXJyaWRlJ1xuICB9XG5cbiAgZXhwb3J0IGVudW0gSW1wb3J0Q1NWTWV0aG9kIHtcbiAgICBBZGRGb3JjZSA9ICdhZGRmb3JjZScsXG4gICAgQWRkTm9Gb3JjZSA9ICdhZGRub2ZvcmNlJyxcbiAgICBSZW1vdmUgPSAncmVtb3ZlJyxcbiAgICBVblN1YiA9ICd1bnN1YicsXG4gICAgRXhjbHVkZU1hcmtldGluZyA9ICdleGNsdWRlbWFya2V0aW5nJyxcbiAgICBJbmNsdWRlTWFya2V0aW5nID0gJ2luY2x1ZGVtYXJrZXRpbmcnXG4gIH1cblxuICBleHBvcnQgZW51bSBDU1ZJbXBvcnRTdGF0dXMge1xuICAgIFVwbG9hZCA9ICdVcGxvYWQnLFxuICAgIENvbXBsZXRlZCA9ICdDb21wbGV0ZWQnLFxuICAgIEFib3J0ID0gJ0Fib3J0JyxcbiAgfVxuXG4gIGV4cG9ydCBlbnVtIEpvYlN0YXR1cyB7XG4gICAgQ29tcGxldGVkID0gJ0NvbXBsZXRlZCcsXG4gICAgSW5Qcm9ncmVzcyA9ICdJbiBQcm9ncmVzcycsXG4gICAgRXJyb3IgPSAnRXJyb3InXG4gIH1cblxuICBleHBvcnQgaW50ZXJmYWNlIEpvYiB7XG4gICAgSm9iSUQ6IG51bWJlcjtcbiAgfVxuXG4gIGV4cG9ydCBpbnRlcmZhY2UgQ1NWSW1wb3J0IHtcbiAgICBJRDogbnVtYmVyO1xuICAgIEVyclRyZXNob2xkOiBudW1iZXI7XG4gICAgSW1wb3J0T3B0aW9uczogc3RyaW5nO1xuICAgIE1ldGhvZDogSW1wb3J0Q1NWTWV0aG9kO1xuICAgIEFsaXZlQXQ6IHN0cmluZztcbiAgICBDb250YWN0c0xpc3RJRDogbnVtYmVyO1xuICAgIENvdW50OiBudW1iZXI7XG4gICAgQ3VycmVudDogbnVtYmVyO1xuICAgIERhdGFJRDogbnVtYmVyO1xuICAgIEVycmNvdW50OiBudW1iZXI7XG4gICAgSm9iRW5kOiBzdHJpbmc7XG4gICAgSm9iU3RhcnQ6IHN0cmluZztcbiAgICBSZXF1ZXN0QXQ6IHN0cmluZztcbiAgICBTdGF0dXM6IENTVkltcG9ydFN0YXR1cztcbiAgfVxuXG4gIGV4cG9ydCBpbnRlcmZhY2UgQ29udGFjdExpc3Qge1xuICAgIExpc3RJRDogbnVtYmVyO1xuICAgIEFjdGlvbjogTWFuYWdlQ29udGFjdHNBY3Rpb247XG4gIH1cblxuICBleHBvcnQgaW50ZXJmYWNlIENvbnRhY3RNYW5hZ2VNYW55Q29udGFjdHMge1xuICAgIENvbnRhY3RzTGlzdHM6IENvbnRhY3RMaXN0W107XG4gICAgQ291bnQ6IG51bWJlcjtcbiAgICBFcnJvcjogc3RyaW5nO1xuICAgIEVycm9yRmlsZTogc3RyaW5nO1xuICAgIEpvYkVuZDogc3RyaW5nO1xuICAgIEpvYlN0YXJ0OiBzdHJpbmc7XG4gICAgU3RhdHVzOiBKb2JTdGF0dXM7XG4gIH1cblxuICBleHBvcnQgaW50ZXJmYWNlIENvbnRhY3RzTGlzdEltcG9ydExpc3Qge1xuICAgIEpvYklEOiBudW1iZXI7XG4gICAgQWN0aW9uOiBJbXBvcnRMaXN0QWN0aW9uO1xuICAgIExpc3RJRDogbnVtYmVyO1xuICB9XG5cbiAgLy8gUkVRVUVTVCBQQVJUXG4gIGV4cG9ydCB0eXBlIENvbnRhY3RCb2R5PFByb3BlcnRpZXMgPSBDb21tb24uVW5rbm93blJlYz4gPSB7XG4gICAgRW1haWw6IHN0cmluZztcbiAgICBOYW1lPzogc3RyaW5nO1xuICAgIElzRXhjbHVkZWRGcm9tQ2FtcGFpZ25zPzogYm9vbGVhbjtcbiAgICBQcm9wZXJ0aWVzPzogUHJvcGVydGllcztcbiAgfVxuXG4gIGV4cG9ydCB0eXBlIFBvc3RDb250YWN0TWFuYWdlTWFueUNvbnRhY3RzQm9keTxQcm9wZXJ0aWVzID0gQ29tbW9uLlVua25vd25SZWM+ID0ge1xuICAgIENvbnRhY3RzOiBBcnJheTxDb250YWN0Qm9keTxQcm9wZXJ0aWVzPj47XG4gICAgQ29udGFjdHNMaXN0cz86IENvbnRhY3RMaXN0W107XG4gIH1cblxuICBleHBvcnQgdHlwZSBQb3N0Q29udGFjdHNMaXN0SW1wb3J0TGlzdEJvZHkgPSB7XG4gICAgQWN0aW9uOiBJbXBvcnRMaXN0QWN0aW9uO1xuICAgIExpc3RJRDogbnVtYmVyO1xuICB9XG5cbiAgZXhwb3J0IHR5cGUgUG9zdENvbnRhY3RzTGlzdE1hbmFnZU1hbnlDb250YWN0c0JvZHk8UHJvcGVydGllcyA9IENvbW1vbi5Vbmtub3duUmVjPiA9IHtcbiAgICBBY3Rpb246IE1hbmFnZUNvbnRhY3RzQWN0aW9uO1xuICAgIENvbnRhY3RzOiBBcnJheTxDb250YWN0Qm9keTxQcm9wZXJ0aWVzPj47XG4gIH1cblxuICBleHBvcnQgdHlwZSBQb3N0Q1NWSW1wb3J0Qm9keSA9IHtcbiAgICBDb250YWN0c0xpc3RJRDogbnVtYmVyO1xuICAgIERhdGFJRDogbnVtYmVyO1xuICAgIEVyclRyZXNob2xkPzogbnVtYmVyO1xuICAgIEltcG9ydE9wdGlvbnM/OiBzdHJpbmc7XG4gICAgTWV0aG9kPzogSW1wb3J0Q1NWTWV0aG9kO1xuICB9XG5cbiAgZXhwb3J0IHR5cGUgUHV0Q1NWSW1wb3J0Qm9keSA9IFBhcnRpYWw8UG9zdENTVkltcG9ydEJvZHk+ICYge1xuICAgIFN0YXR1cz86IENTVkltcG9ydFN0YXR1cztcbiAgfVxuXG4gIGV4cG9ydCB0eXBlIEdldENTVkltcG9ydFF1ZXJ5UGFyYW1zID0gUGFydGlhbDxDb21tb24uUGFnaW5hdGlvbj5cblxuICAvLyBSRVNQT05TRSBQQVJUXG4gIHR5cGUgSm9iUmVzcG9uc2UgPSBDb21tb24uUmVzcG9uc2U8Sm9iW10+O1xuICB0eXBlIENTVkltcG9ydFJlc3BvbnNlID0gQ29tbW9uLlJlc3BvbnNlPENTVkltcG9ydFtdPjtcbiAgdHlwZSBDb250YWN0TWFuYWdlTWFueUNvbnRhY3RzUmVzcG9uc2UgPSBDb21tb24uUmVzcG9uc2U8Q29udGFjdE1hbmFnZU1hbnlDb250YWN0c1tdPjtcblxuICBleHBvcnQgdHlwZSBQb3N0Q29udGFjdE1hbmFnZU1hbnlDb250YWN0c1Jlc3BvbnNlID0gSm9iUmVzcG9uc2VcbiAgZXhwb3J0IHR5cGUgR2V0Q29udGFjdE1hbmFnZU1hbnlDb250YWN0c1Jlc3BvbnNlID0gQ29udGFjdE1hbmFnZU1hbnlDb250YWN0c1Jlc3BvbnNlXG5cbiAgZXhwb3J0IHR5cGUgUG9zdENvbnRhY3RzTGlzdEltcG9ydExpc3RSZXNwb25zZSA9IEpvYlJlc3BvbnNlXG4gIGV4cG9ydCB0eXBlIEdldENvbnRhY3RzTGlzdEltcG9ydExpc3RSZXNwb25zZSA9IENvbW1vbi5SZXNwb25zZTxDb250YWN0c0xpc3RJbXBvcnRMaXN0W10+O1xuXG4gIGV4cG9ydCB0eXBlIFBvc3RDb250YWN0c0xpc3RNYW5hZ2VNYW55Q29udGFjdHNSZXNwb25zZSA9IEpvYlJlc3BvbnNlXG4gIGV4cG9ydCB0eXBlIEdldENvbnRhY3RzTGlzdE1hbmFnZU1hbnlDb250YWN0c1Jlc3BvbnNlID0gQ29udGFjdE1hbmFnZU1hbnlDb250YWN0c1Jlc3BvbnNlO1xuXG4gIGV4cG9ydCB0eXBlIFBvc3RDU1ZJbXBvcnRSZXNwb25zZSA9IENTVkltcG9ydFJlc3BvbnNlXG4gIGV4cG9ydCB0eXBlIFB1dENTVkltcG9ydFJlc3BvbnNlID0gQ1NWSW1wb3J0UmVzcG9uc2VcbiAgZXhwb3J0IHR5cGUgR2V0Q1NWSW1wb3J0UmVzcG9uc2UgPSBDU1ZJbXBvcnRSZXNwb25zZVxufVxuXG5leHBvcnQgbmFtZXNwYWNlIENvbnRhY3RQcm9wZXJ0aWVzIHtcbiAgZXhwb3J0IGVudW0gRGF0YVR5cGUge1xuICAgIFN0ciA9ICdzdHInLFxuICAgIEludCA9ICdpbnQnLFxuICAgIEZsb2F0ID0gJ2Zsb2F0JyxcbiAgICBCb29sID0gJ2Jvb2wnLFxuICAgIERhdGVUaW1lID0gJ2RhdGV0aW1lJ1xuICB9XG5cbiAgZXhwb3J0IGVudW0gTmFtZVNwYWNlIHtcbiAgICBTdGF0aWMgPSAnc3RhdGljJyxcbiAgICBIaXN0b3JpYyA9ICdoaXN0b3JpYydcbiAgfVxuXG4gIGV4cG9ydCBpbnRlcmZhY2UgQ29udGFjdFByb3BlcnR5IHtcbiAgICBOYW1lOiBzdHJpbmc7XG4gICAgVmFsdWU6IHN0cmluZztcbiAgfVxuXG4gIGV4cG9ydCBpbnRlcmZhY2UgQ29udGFjdERhdGEge1xuICAgIElEOiBudW1iZXI7XG4gICAgQ29udGFjdElEOiBudW1iZXI7XG4gICAgRGF0YTogQ29udGFjdFByb3BlcnR5W107XG4gIH1cblxuICBleHBvcnQgaW50ZXJmYWNlIENvbnRhY3RNZXRhRGF0YSB7XG4gICAgSUQ6IG51bWJlcjtcbiAgICBEYXRhdHlwZTogRGF0YVR5cGU7XG4gICAgTmFtZTogc3RyaW5nO1xuICAgIE5hbWVTcGFjZTogTmFtZVNwYWNlO1xuICB9XG5cbiAgLy8gUkVRVUVTVCBQQVJUXG4gIGV4cG9ydCB0eXBlIFBvc3RDb250YWN0TWV0YURhdGFCb2R5ID0ge1xuICAgIE5hbWU6IHN0cmluZztcbiAgICBEYXRhdHlwZT86IERhdGFUeXBlO1xuICAgIE5hbWVTcGFjZT86IE5hbWVTcGFjZTtcbiAgfVxuXG4gIGV4cG9ydCB0eXBlIFB1dENvbnRhY3RNZXRhRGF0YUJvZHkgPSB7XG4gICAgTmFtZT86IHN0cmluZztcbiAgICBEYXRhdHlwZT86IERhdGFUeXBlO1xuICB9XG5cbiAgZXhwb3J0IHR5cGUgR2V0Q29udGFjdE1ldGFEYXRhUXVlcnlQYXJhbXMgPSBQYXJ0aWFsPENvbW1vbi5QYWdpbmF0aW9uPiAmIHtcbiAgICBEYXRhVHlwZT86IERhdGFUeXBlXG4gICAgTmFtZXNwYWNlPzogTmFtZVNwYWNlO1xuICB9XG5cbiAgZXhwb3J0IHR5cGUgUHV0Q29udGFjdERhdGFCb2R5ID0ge1xuICAgIERhdGE6IENvbnRhY3RQcm9wZXJ0eVtdO1xuICB9XG5cbiAgZXhwb3J0IHR5cGUgR2V0Q29udGFjdERhdGFRdWVyeVBhcmFtcyA9IFBhcnRpYWw8Q29tbW9uLlBhZ2luYXRpb24+ICYge1xuICAgIENhbXBhaWduPzogbnVtYmVyO1xuICAgIENvbnRhY3RFbWFpbD86IHN0cmluZztcbiAgICBDb250YWN0c0xpc3Q/OiBudW1iZXI7XG4gICAgRmllbGRzPzogc3RyaW5nO1xuICAgIExhc3RBY3Rpdml0eUF0Pzogc3RyaW5nO1xuICB9XG5cbiAgLy8gUkVTUE9OU0UgUEFSVFxuICB0eXBlIENvbnRhY3REYXRhUmVzcG9uc2UgPSBDb21tb24uUmVzcG9uc2U8Q29udGFjdERhdGFbXT47XG4gIHR5cGUgQ29udGFjdE1ldGFEYXRhUmVzcG9uc2UgPSBDb21tb24uUmVzcG9uc2U8Q29udGFjdE1ldGFEYXRhW10+O1xuXG4gIGV4cG9ydCB0eXBlIFBvc3RDb250YWN0TWV0YURhdGFSZXNwb25zZSA9IENvbnRhY3RNZXRhRGF0YVJlc3BvbnNlO1xuICBleHBvcnQgdHlwZSBQdXRDb250YWN0TWV0YURhdGFSZXNwb25zZSA9IENvbnRhY3RNZXRhRGF0YVJlc3BvbnNlO1xuICBleHBvcnQgdHlwZSBHZXRDb250YWN0TWV0YURhdGFSZXNwb25zZSA9IENvbnRhY3RNZXRhRGF0YVJlc3BvbnNlO1xuXG4gIGV4cG9ydCB0eXBlIFB1dENvbnRhY3REYXRhUmVzcG9uc2UgPSBDb250YWN0RGF0YVJlc3BvbnNlO1xuICBleHBvcnQgdHlwZSBHZXRDb250YWN0RGF0YVJlc3BvbnNlID0gQ29udGFjdERhdGFSZXNwb25zZTtcbn1cblxuZXhwb3J0IG5hbWVzcGFjZSBDb250YWN0U3Vic2NyaXB0aW9uIHtcbiAgZXhwb3J0IGludGVyZmFjZSBNYW5hZ2VDb250YWN0czxQcm9wZXJ0aWVzID0gQ29tbW9uLlVua25vd25SZWM+IHtcbiAgICBFbWFpbDogc3RyaW5nO1xuICAgIEFjdGlvbjogQnVsa0NvbnRhY3RNYW5hZ2VtZW50Lk1hbmFnZUNvbnRhY3RzQWN0aW9uO1xuICAgIE5hbWU6IHN0cmluZztcbiAgICBQcm9wZXJ0aWVzOiBQcm9wZXJ0aWVzO1xuICB9XG5cbiAgZXhwb3J0IGludGVyZmFjZSBMaXN0UmVjaXBpZW50IHtcbiAgICBJRDogbnVtYmVyO1xuICAgIElzVW5zdWJzY3JpYmVkOiBib29sZWFuO1xuICAgIENvbnRhY3RJRDogbnVtYmVyO1xuICAgIExpc3RJRDogbnVtYmVyO1xuICAgIExpc3ROYW1lOiBzdHJpbmc7XG4gICAgU3Vic2NyaWJlZEF0OiBzdHJpbmc7XG4gICAgVW5zdWJzY3JpYmVkQXQ6IHN0cmluZztcbiAgfVxuXG4gIGV4cG9ydCBpbnRlcmZhY2UgQ29udGFjdHNMaXN0IHtcbiAgICBMaXN0SUQ6IG51bWJlcjtcbiAgICBJc1Vuc3ViOiBib29sZWFuO1xuICAgIFN1YnNjcmliZWRBdDogc3RyaW5nO1xuICB9XG5cbiAgZXhwb3J0IGludGVyZmFjZSBDb250YWN0c0xpc3RTaWdudXAge1xuICAgIElEOiBudW1iZXI7XG4gICAgQ29uZmlybUF0OiBudW1iZXI7XG4gICAgQ29uZmlybUlwOiBzdHJpbmc7XG4gICAgQ29udGFjdElEOiBudW1iZXI7XG4gICAgRW1haWw6IHN0cmluZztcbiAgICBMaXN0SUQ6IG51bWJlcjtcbiAgICBTaWdudXBBdDogbnVtYmVyO1xuICAgIFNpZ251cElwOiBzdHJpbmc7XG4gICAgU2lnbnVwS2V5OiBzdHJpbmc7XG4gICAgU291cmNlSWQ6IG51bWJlcjtcbiAgICBTb3VyY2U6IHN0cmluZztcbiAgfVxuXG4gIC8vIFJFUVVFU1QgUEFSVFxuICBleHBvcnQgdHlwZSBQb3N0Q29udGFjdE1hbmFnZUNvbnRhY3RzTGlzdHNCb2R5ID0ge1xuICAgIENvbnRhY3RzTGlzdHM6IEJ1bGtDb250YWN0TWFuYWdlbWVudC5Db250YWN0TGlzdFtdO1xuICB9XG5cbiAgZXhwb3J0IHR5cGUgUG9zdENvbnRhY3RzTGlzdE1hbmFnZUNvbnRhY3RCb2R5PFByb3BlcnRpZXMgPSBDb21tb24uVW5rbm93blJlYz4gPSB7XG4gICAgRW1haWw6IHN0cmluZztcbiAgICBBY3Rpb246IEJ1bGtDb250YWN0TWFuYWdlbWVudC5NYW5hZ2VDb250YWN0c0FjdGlvbjtcbiAgICBOYW1lPzogc3RyaW5nO1xuICAgIFByb3BlcnRpZXM/OiBQcm9wZXJ0aWVzO1xuICB9XG5cbiAgZXhwb3J0IHR5cGUgUG9zdExpc3RSZWNpcGllbnRCb2R5ID0ge1xuICAgIElzVW5zdWJzY3JpYmVkPzogYm9vbGVhbjtcbiAgICBDb250YWN0SUQ6IG51bWJlcjtcbiAgICBDb250YWN0QWx0Pzogc3RyaW5nO1xuICAgIExpc3RJRDogbnVtYmVyO1xuICAgIExpc3RBbHQ/OiBzdHJpbmc7XG4gIH1cblxuICBleHBvcnQgdHlwZSBQdXRMaXN0UmVjaXBpZW50Qm9keSA9IHtcbiAgICBJc1Vuc3Vic2NyaWJlZD86IGJvb2xlYW47XG4gIH1cblxuICBleHBvcnQgdHlwZSBHZXRMaXN0UmVjaXBpZW50UXVlcnlQYXJhbXMgPSBQYXJ0aWFsPENvbW1vbi5QYWdpbmF0aW9uPiAmIHtcbiAgICBCbG9ja2VkPzogYm9vbGVhbjtcbiAgICBDb250YWN0PzogbnVtYmVyO1xuICAgIENvbnRhY3RFbWFpbD86IHN0cmluZztcbiAgICBDb250YWN0c0xpc3Q/OiBudW1iZXI7XG4gICAgSWdub3JlRGVsZXRlZD86IGJvb2xlYW47XG4gICAgSXNFeGNsdWRlZEZyb21DYW1wYWlnbnM/OiBib29sZWFuO1xuICAgIExhc3RBY3Rpdml0eUF0Pzogc3RyaW5nO1xuICAgIExpc3ROYW1lPzogc3RyaW5nO1xuICAgIE9wZW5lZD86IGJvb2xlYW47XG4gICAgVW5zdWI/OiBib29sZWFuO1xuICB9XG5cbiAgZXhwb3J0IHR5cGUgR2V0Q29udGFjdHNMaXN0U2lnbnVwUXVlcnlQYXJhbXMgPSBQYXJ0aWFsPENvbW1vbi5QYWdpbmF0aW9uPiAmIHtcbiAgICBDb250YWN0PzogbnVtYmVyO1xuICAgIENvbnRhY3RzTGlzdD86IG51bWJlcjtcbiAgICBEb21haW4/OiBzdHJpbmc7XG4gICAgRW1haWw/OiBzdHJpbmc7XG4gICAgTG9jYWxQYXJ0Pzogc3RyaW5nO1xuICAgIE1heENvbmZpcm1BdD86IG51bWJlcjtcbiAgICBNaW5Db25maXJtQXQ/OiBudW1iZXI7XG4gICAgTWF4U2lnbnVwQXQ/OiBudW1iZXI7XG4gICAgTWluU2lnbnVwQXQ/OiBudW1iZXI7XG4gICAgU2lnbnVwSXA/OiBzdHJpbmc7XG4gICAgU291cmNlPzogc3RyaW5nO1xuICAgIFNvdXJjZUlEPzogbnVtYmVyO1xuICB9XG5cbiAgLy8gUkVTUE9OU0UgUEFSVFxuICB0eXBlIExpc3RSZWNpcGllbnRSZXNwb25zZSA9IENvbW1vbi5SZXNwb25zZTxMaXN0UmVjaXBpZW50W10+O1xuXG4gIGV4cG9ydCB0eXBlIFBvc3RDb250YWN0TWFuYWdlQ29udGFjdHNMaXN0c1Jlc3BvbnNlID0gQ29tbW9uLlJlc3BvbnNlPFxuICAgIEFycmF5PHsgQ29udGFjdHNMaXN0czogQnVsa0NvbnRhY3RNYW5hZ2VtZW50LkNvbnRhY3RMaXN0W10gfT5cbiAgICA+O1xuXG4gIGV4cG9ydCB0eXBlIFBvc3RDb250YWN0c0xpc3RNYW5hZ2VDb250YWN0UmVzcG9uc2U8UHJvcGVydGllcyA9IENvbW1vbi5Vbmtub3duUmVjPiA9XG4gICAgICBDb21tb24uUmVzcG9uc2U8QXJyYXk8TWFuYWdlQ29udGFjdHM8UHJvcGVydGllcz4+PjtcblxuICBleHBvcnQgdHlwZSBQb3N0TGlzdFJlY2lwaWVudFJlc3BvbnNlID0gTGlzdFJlY2lwaWVudFJlc3BvbnNlXG4gIGV4cG9ydCB0eXBlIFB1dExpc3RSZWNpcGllbnRSZXNwb25zZSA9IExpc3RSZWNpcGllbnRSZXNwb25zZVxuICBleHBvcnQgdHlwZSBHZXRMaXN0UmVjaXBpZW50UmVzcG9uc2UgPSBMaXN0UmVjaXBpZW50UmVzcG9uc2VcblxuICBleHBvcnQgdHlwZSBHZXRDb250YWN0R2V0Q29udGFjdHNMaXN0c1Jlc3BvbnNlID0gQ29tbW9uLlJlc3BvbnNlPENvbnRhY3RzTGlzdFtdPlxuXG4gIGV4cG9ydCB0eXBlIEdldENvbnRhY3RzTGlzdFNpZ251cFJlc3BvbnNlID0gQ29tbW9uLlJlc3BvbnNlPENvbnRhY3RzTGlzdFNpZ251cFtdPlxufVxuXG5leHBvcnQgbmFtZXNwYWNlIENvbnRhY3RWZXJpZmljYXRpb24ge1xuICBleHBvcnQgaW50ZXJmYWNlIFZlcmlmaWNhdGlvblN1bW1hcnk8UmVzdWx0ID0gQ29tbW9uLlVua25vd25SZWMsIFJpc2sgPSBDb21tb24uVW5rbm93blJlYz4ge1xuICAgIHJlc3VsdDogUmVzdWx0O1xuICAgIHJpc2s6IFJpc2s7XG4gIH1cblxuICBleHBvcnQgaW50ZXJmYWNlIENvbnRhY3RzTGlzdFZlcmlmaWNhdGlvbjxSZXN1bHQgPSBDb21tb24uVW5rbm93blJlYywgUmlzayA9IENvbW1vbi5Vbmtub3duUmVjPiB7XG4gICAgQWtpZDogbnVtYmVyO1xuICAgIENvbnRhY3RMaXN0SUQ6IG51bWJlcjtcbiAgICBDb3VudDogbnVtYmVyO1xuICAgIEVycm9yOiBzdHJpbmc7XG4gICAgSUQ6IG51bWJlcjtcbiAgICBKb2JFbmQ6IHN0cmluZztcbiAgICBKb2JTdGFydDogc3RyaW5nO1xuICAgIE1ldGhvZDogc3RyaW5nO1xuICAgIFJlc3BvbnNlVVJMOiBzdHJpbmc7XG4gICAgU3RhdHVzOiBzdHJpbmc7XG4gICAgU3VtbWFyeTogVmVyaWZpY2F0aW9uU3VtbWFyeTxSZXN1bHQsIFJpc2s+XG4gIH1cblxuICAvLyBSRVFVRVNUIFBBUlRcblxuICAvLyBSRVNQT05TRSBQQVJUXG4gIGV4cG9ydCB0eXBlIEdldENvbnRhY3RzTGlzdFZlcmlmeVJlc3BvbnNlPFJlc3VsdCA9IENvbW1vbi5Vbmtub3duUmVjLCBSaXNrID0gQ29tbW9uLlVua25vd25SZWM+ID1cbiAgICBDb21tb24uUmVzcG9uc2U8QXJyYXk8Q29udGFjdHNMaXN0VmVyaWZpY2F0aW9uPFJlc3VsdCwgUmlzaz4+Pjtcbn1cbiIsImltcG9ydCB7IENvbW1vbiB9IGZyb20gJy4vQ29tbW9uJztcblxuZXhwb3J0IG5hbWVzcGFjZSBNZXNzYWdlIHtcbiAgZXhwb3J0IGVudW0gTWVzc2FnZVN0YXRlIHtcbiAgICBVc2VyVW5rbm93biA9IDEsXG4gICAgTWFpbGJveEluYWN0aXZlID0gMixcbiAgICBRdW90YUV4Y2VlZGVkID0gMyxcbiAgICBJbnZhbGlkRG9tYWluID0gNCxcbiAgICBOb01haWxIb3N0ID0gNSxcbiAgICBSZWxheU9yQWNjZXNzRGVuaWVkID0gNixcbiAgICBTZW5kZXJCbG9ja2VkID0gNyxcbiAgICBDb250ZW50QmxvY2tlZCA9IDgsXG4gICAgUG9saWN5SXNzdWUgPSA5LFxuICAgIFN5c3RlbUlzc3VlID0gMTAsXG4gICAgUHJvdG9jb2xJc3N1ZSA9IDExLFxuICAgIENvbm5lY3Rpb25Jc3N1ZSA9IDEyLFxuICAgIEdyZXlMaXN0ZWQgPSAxMyxcbiAgICBQcmVCbG9ja2VkID0gMTQsXG4gICAgRHVwbGljYXRlSW5DYW1wYWlnbiA9IDE1LFxuICAgIFNwYW1QcmVCbG9ja2VkID0gMTYsXG4gICAgQmFkT3JFbXB0eVRlbXBsYXRlID0gMTcsXG4gICAgRXJyb3JJblRlbXBsYXRlTGFuZ3VhZ2UgPSAxOCxcbiAgICBUeXBvRml4ID0gMTksXG4gICAgQmxhY2tMaXN0ZWQgPSAyMCxcbiAgICBTcGFtUmVwb3J0ZXIgPSAyMVxuICB9XG5cbiAgZXhwb3J0IGVudW0gRnJvbVR5cGUge1xuICAgIFRyYW5zYWN0aW9uYWwgPSAxLFxuICAgIE1hcmtldGluZyA9IDIsXG4gICAgVW5rbm93biA9IDMsXG4gIH1cblxuICBleHBvcnQgZW51bSBNZXNzYWdlU3RhdHVzIHtcbiAgICBQcm9jZXNzZWQgPSAwLFxuICAgIFF1ZXVlZCA9IDEsXG4gICAgU2VudCA9IDIsXG4gICAgT3BlbmVkID0gMyxcbiAgICBDbGlja2VkID0gNCxcbiAgICBCb3VuY2UgPSA1LFxuICAgIFNwYW0gPSA2LFxuICAgIFVuc3ViID0gNyxcbiAgICBCbG9ja2VkID0gOCxcbiAgICBTb2Z0Qm91bmNlID0gOSxcbiAgICBIYXJkQm91bmNlID0gMTAsXG4gICAgRGVmZXJyZWQgPSAxMSxcbiAgfVxuXG4gIGV4cG9ydCBlbnVtIEN1cnJlbnRNZXNzYWdlU3RhdHVzIHtcbiAgICBVbmtub3duID0gJ3Vua25vd24nLFxuICAgIFF1ZXVlZCA9ICdxdWV1ZWQnLFxuICAgIFNlbnQgPSAnc2VudCcsXG4gICAgT3BlbmVkID0gJ29wZW5lZCcsXG4gICAgQ2xpY2tlZCA9ICdjbGlja2VkJyxcbiAgICBCb3VuY2UgPSAnYm91bmNlJyxcbiAgICBTcGFtID0gJ3NwYW0nLFxuICAgIFVuc3ViID0gJ3Vuc3ViJyxcbiAgICBCbG9ja2VkID0gJ2Jsb2NrZWQnLFxuICAgIEhhcmRCb3VuY2VkID0gJ2hhcmRib3VuY2VkJyxcbiAgICBTb2Z0Qm91bmNlZCA9ICdzb2Z0Ym91bmNlZCcsXG4gICAgRGVmZXJyZWQgPSAnZGVmZXJyZWQnLFxuICB9XG5cbiAgZXhwb3J0IGVudW0gRXZlbnRUeXBlIHtcbiAgICBTZW50ID0gJ3NlbnQnLFxuICAgIE9wZW5lZCA9ICdvcGVuZWQnLFxuICAgIENsaWNrZWQgPSAnY2xpY2tlZCcsXG4gICAgQm91bmNlZCA9ICdib3VuY2VkJyxcbiAgICBCbG9ja2VkID0gJ2Jsb2NrZWQnLFxuICAgIFVuc3ViID0gJ3Vuc3ViJyxcbiAgICBTcGFtID0gJ3NwYW0nXG4gIH1cblxuICBleHBvcnQgaW50ZXJmYWNlIE1lc3NhZ2VUcmFja2VkIHtcbiAgICBJc0NsaWNrVHJhY2tlZDogYm9vbGVhbjtcbiAgICBJc0hUTUxQYXJ0SW5jbHVkZWQ6IGJvb2xlYW47XG4gICAgSXNPcGVuVHJhY2tlZDogYm9vbGVhbjtcbiAgICBJc1RleHRQYXJ0SW5jbHVkZWQ6IGJvb2xlYW47XG4gICAgSXNVbnN1YlRyYWNrZWQ6IGJvb2xlYW47XG4gIH1cblxuICBleHBvcnQgaW50ZXJmYWNlIE1lc3NhZ2UgZXh0ZW5kcyBNZXNzYWdlVHJhY2tlZCB7XG4gICAgSUQ6IG51bWJlcjtcbiAgICBBcnJpdmVkQXQ6IHN0cmluZztcbiAgICBBdHRhY2htZW50Q291bnQ6IG51bWJlcjtcbiAgICBBdHRlbXB0Q291bnQ6IG51bWJlcjtcbiAgICBDYW1wYWlnbklEOiBudW1iZXI7XG4gICAgQ29udGFjdEFsdDogc3RyaW5nO1xuICAgIENvbnRhY3RJRDogbnVtYmVyO1xuICAgIERlbGF5OiBudW1iZXI7XG4gICAgRGVzdGluYXRpb25JRDogbnVtYmVyO1xuICAgIEZpbHRlclRpbWU6IG51bWJlcjtcbiAgICBNZXNzYWdlU2l6ZTogbnVtYmVyO1xuICAgIFNlbmRlcklEOiBudW1iZXI7XG4gICAgU3BhbWFzc2Fzc2luU2NvcmU6IG51bWJlcjtcbiAgICBTcGFtYXNzUnVsZXM6IHN0cmluZztcbiAgICBTdGF0ZUlEOiBNZXNzYWdlU3RhdGU7XG4gICAgU3RhdGVQZXJtYW5lbnQ6IGJvb2xlYW47XG4gICAgU3RhdHVzOiBDdXJyZW50TWVzc2FnZVN0YXR1cztcbiAgICBTdWJqZWN0OiBzdHJpbmc7XG4gICAgVVVJRDogc3RyaW5nO1xuICB9XG5cbiAgZXhwb3J0IGludGVyZmFjZSBNZXNzYWdlSGlzdG9yeSB7XG4gICAgQ29tbWVudDogc3RyaW5nO1xuICAgIEV2ZW50QXQ6IG51bWJlcjtcbiAgICBFdmVudFR5cGU6IEV2ZW50VHlwZTtcbiAgICBTdGF0ZTogc3RyaW5nO1xuICAgIFVzZXJhZ2VudDogc3RyaW5nO1xuICAgIFVzZXJhZ2VudElEOiBudW1iZXI7XG4gIH1cblxuICBleHBvcnQgaW50ZXJmYWNlIE1lc3NhZ2VJbmZvcm1hdGlvbjxSdWxlcyA9IENvbW1vbi5Vbmtub3duUmVjPiB7XG4gICAgSUQ6IG51bWJlcjtcbiAgICBDYW1wYWlnbklEOiBudW1iZXI7XG4gICAgQ2xpY2tUcmFja2VkQ291bnQ6IG51bWJlcjtcbiAgICBDb250YWN0SUQ6IG51bWJlcjtcbiAgICBDcmVhdGVkQXQ6IHN0cmluZztcbiAgICBNZXNzYWdlU2l6ZTogbnVtYmVyO1xuICAgIE9wZW5UcmFja2VkQ291bnQ6IG51bWJlcjtcbiAgICBRdWV1ZWRDb3VudDogbnVtYmVyO1xuICAgIFNlbmRFbmRBdDogc3RyaW5nO1xuICAgIFNlbnRDb3VudDogbnVtYmVyO1xuICAgIFNwYW1Bc3Nhc3NpblJ1bGVzOiBSdWxlcztcbiAgICBTcGFtQXNzYXNzaW5TY29yZTogbnVtYmVyO1xuICB9XG5cbiAgLy8gUkVRVUVTVCBQQVJUXG4gIGV4cG9ydCB0eXBlIEdldE1lc3NhZ2VRdWVyeVBhcmFtcyA9IFBhcnRpYWw8Q29tbW9uLlRpbWVzdGFtcFBlcmlvZD4gJlxuICAgIFBhcnRpYWw8Q29tbW9uLlBhZ2luYXRpb24+ICZcbiAge1xuICAgIENhbXBhaWduPzogbnVtYmVyO1xuICAgIENvbnRhY3Q/OiBudW1iZXI7XG4gICAgQ3VzdG9tSUQ/OiBzdHJpbmc7XG4gICAgRGVzdGluYXRpb24/OiBudW1iZXI7XG4gICAgRnJvbVR5cGU/OiBGcm9tVHlwZTtcbiAgICBNZXNzYWdlU3RhdGU/OiBNZXNzYWdlU3RhdGU7XG4gICAgTWVzc2FnZVN0YXR1cz86IE1lc3NhZ2VTdGF0dXM7XG4gICAgUGxhblN1YnNjcmlwdGlvbj86IG51bWJlcjtcbiAgICBTZW5kZXJJRD86IG51bWJlcjtcbiAgICBTaG93Q29udGFjdEFsdD86IGJvb2xlYW47XG4gICAgU2hvd0N1c3RvbUlEPzogYm9vbGVhbjtcbiAgICBTaG93U3ViamVjdD86IGJvb2xlYW47XG4gIH1cblxuICBleHBvcnQgdHlwZSBHZXRNZXNzYWdlSW5mb3JtYXRpb25RdWVyeVBhcmFtcyA9IFBhcnRpYWw8Q29tbW9uLlRpbWVzdGFtcFBlcmlvZD4gJlxuICAgIFBhcnRpYWw8Q29tbW9uLlBhZ2luYXRpb24+ICZcbiAge1xuICAgIENhbXBhaWduSUQ/OiBudW1iZXI7XG4gICAgQ29udGFjdHNMaXN0PzogbnVtYmVyO1xuICAgIEN1c3RvbUNhbXBhaWduPzogc3RyaW5nO1xuICAgIEZyb20/OiBzdHJpbmc7XG4gICAgRnJvbURvbWFpbj86IHN0cmluZztcbiAgICBGcm9tSUQ/OiBudW1iZXI7XG4gICAgRnJvbVR5cGU/OiBGcm9tVHlwZTtcbiAgICBJc0RlbGV0ZWQ/OiBib29sZWFuO1xuICAgIElzTmV3c2xldHRlclRvb2w/OiBib29sZWFuO1xuICAgIElzU3RhcnJlZD86IGJvb2xlYW47XG4gICAgTWVzc2FnZVN0YXR1cz86IE1lc3NhZ2VTdGF0dXM7XG4gICAgUGVyaW9kPzogQ29tbW9uLlBlcmlvZDtcbiAgfVxuXG4gIC8vIFJFU1BPTlNFIFBBUlRcbiAgZXhwb3J0IHR5cGUgR2V0TWVzc2FnZXNSZXNwb25zZSA9IENvbW1vbi5SZXNwb25zZTxNZXNzYWdlW10+XG4gIGV4cG9ydCB0eXBlIEdldE1lc3NhZ2VIaXN0b3J5UmVzcG9uc2UgPSBDb21tb24uUmVzcG9uc2U8TWVzc2FnZUhpc3RvcnlbXT5cbiAgZXhwb3J0IHR5cGUgR2V0TWVzc2FnZUluZm9ybWF0aW9uUmVzcG9uc2U8UnVsZXMgPSBDb21tb24uVW5rbm93blJlYz4gPVxuICAgICAgQ29tbW9uLlJlc3BvbnNlPEFycmF5PE1lc3NhZ2VJbmZvcm1hdGlvbjxSdWxlcz4+PlxufVxuIiwiaW1wb3J0IHsgQ29tbW9uIH0gZnJvbSAnLi9Db21tb24nO1xuXG5leHBvcnQgbmFtZXNwYWNlIFNlZ21lbnRhdGlvbiB7XG4gIGV4cG9ydCBlbnVtIFNlZ21lbnRTdGF0dXMge1xuICAgIFVzZWQgPSAndXNlZCcsXG4gICAgVW5Vc2VkID0gJ3VudXNlZCcsXG4gICAgRGVsZXRlZCA9ICdkZWxldGVkJ1xuICB9XG5cbiAgZXhwb3J0IGludGVyZmFjZSBDb250YWN0RmlsdGVyIHtcbiAgICBJRDogbnVtYmVyO1xuICAgIERlc2NyaXB0aW9uOiBzdHJpbmc7XG4gICAgRXhwcmVzc2lvbjogc3RyaW5nO1xuICAgIE5hbWU6IHN0cmluZztcbiAgICBTdGF0dXM6IFNlZ21lbnRTdGF0dXM7XG4gIH1cblxuICAvLyBSRVFVRVNUIFBBUlRcbiAgZXhwb3J0IHR5cGUgUG9zdENvbnRhY3RGaWx0ZXJCb2R5ID0ge1xuICAgIE5hbWU6IHN0cmluZztcbiAgICBFeHByZXNzaW9uOiBzdHJpbmc7XG4gICAgRGVzY3JpcHRpb24/OiBzdHJpbmc7XG4gIH1cblxuICBleHBvcnQgdHlwZSBQdXRDb250YWN0RmlsdGVyQm9keSA9IFBhcnRpYWw8UG9zdENvbnRhY3RGaWx0ZXJCb2R5PiAmIHtcbiAgICBTdGF0dXM/OiBTZWdtZW50U3RhdHVzO1xuICB9XG5cbiAgZXhwb3J0IHR5cGUgR2V0Q29udGFjdEZpbHRlclF1ZXJ5UGFyYW1zID0gUGFydGlhbDxDb21tb24uUGFnaW5hdGlvbj4gJiB7XG4gICAgU2hvd0RlbGV0ZWQ/OiBib29sZWFuO1xuICAgIFN0YXR1cz86IFNlZ21lbnRTdGF0dXM7XG4gIH1cblxuICAvLyBSRVNQT05TRSBQQVJUXG4gIHR5cGUgQ29udGFjdEZpbHRlclJlc3BvbnNlID0gQ29tbW9uLlJlc3BvbnNlPENvbnRhY3RGaWx0ZXJbXT47XG5cbiAgZXhwb3J0IHR5cGUgUG9zdENvbnRhY3RGaWx0ZXJSZXNwb25zZSA9IENvbnRhY3RGaWx0ZXJSZXNwb25zZTtcbiAgZXhwb3J0IHR5cGUgUHV0Q29udGFjdEZpbHRlclJlc3BvbnNlID0gQ29udGFjdEZpbHRlclJlc3BvbnNlO1xuICBleHBvcnQgdHlwZSBHZXRDb250YWN0RmlsdGVyUmVzcG9uc2UgPSBDb250YWN0RmlsdGVyUmVzcG9uc2U7XG59XG4iLCJpbXBvcnQgeyBDb21tb24gfSBmcm9tICcuL0NvbW1vbic7XG5cbmV4cG9ydCBuYW1lc3BhY2UgU2VuZEVtYWlsVjMge1xuICBleHBvcnQgdHlwZSBNalRlbXBsYXRlRXJyb3JEZWxpdmVyID0gJzAnIHwgJ2RlbGl2ZXInXG4gIGV4cG9ydCB0eXBlIE1qRGVkdXBsaWNhdGVDYW1wYWlnbiA9IDAgfCAxO1xuICBleHBvcnQgdHlwZSBNalRyYWNrT3BlbiA9IDAgfCAxIHwgMjtcblxuICBleHBvcnQgaW50ZXJmYWNlIFJlY2lwaWVudCB7XG4gICAgRW1haWw6IHN0cmluZztcbiAgICBOYW1lPzogc3RyaW5nXG4gICAgVmFycz86IHN0cmluZztcbiAgfVxuXG4gIGV4cG9ydCBpbnRlcmZhY2UgQXR0YWNobWVudCB7XG4gICAgRmlsZW5hbWU6IHN0cmluZztcbiAgICBDb250ZW50OiBzdHJpbmc7XG4gICAgJ0NvbnRlbnQtdHlwZSc6IHN0cmluZztcbiAgfVxuXG4gIGV4cG9ydCB0eXBlIEJvZHlNaiA9IHtcbiAgICAnTWotVGVtcGxhdGVJRCc/OiBudW1iZXI7XG4gICAgJ01qLVRlbXBsYXRlTGFuZ3VhZ2UnPzogYm9vbGVhbjtcbiAgICAnTWotVGVtcGxhdGVFcnJvclJlcG9ydGluZyc/OiBzdHJpbmc7XG4gICAgJ01qLVRlbXBsYXRlRXJyb3JEZWxpdmVyJz86IE1qVGVtcGxhdGVFcnJvckRlbGl2ZXI7XG4gICAgJ01qLXByaW8nPzogbnVtYmVyO1xuICAgICdNai1jYW1wYWlnbic/OiBzdHJpbmc7XG4gICAgJ01qLWRlZHVwbGljYXRlY2FtcGFpZ24nPzogTWpEZWR1cGxpY2F0ZUNhbXBhaWduO1xuICAgICdNai10cmFja29wZW4nPzogTWpUcmFja09wZW47XG4gICAgJ01qLUN1c3RvbUlEJz86IHN0cmluZztcbiAgICAnTWotRXZlbnRQYXlsb2FkJz86IHN0cmluZztcbiAgfVxuXG4gIC8vIFJFUVVFU1QgUEFSVFxuICBleHBvcnQgdHlwZSBCb2R5PFxuICAgIEhlYWRlcnMgPSBDb21tb24uVW5rbm93blJlYyxcbiAgICBWYXJzID0gQ29tbW9uLlVua25vd25SZWNcbiAgICA+ID0gQm9keU1qICYge1xuICAgIEZyb21FbWFpbD86IHN0cmluZztcbiAgICBGcm9tTmFtZT86IHN0cmluZztcbiAgICBSZWNpcGllbnRzPzogUmVjaXBpZW50W107XG4gICAgU2VuZGVyPzogYm9vbGVhbjtcbiAgICBTdWJqZWN0Pzogc3RyaW5nO1xuICAgICdUZXh0LXBhcnQnPzogc3RyaW5nO1xuICAgICdIdG1sLXBhcnQnPzogc3RyaW5nO1xuICAgIFRvPzogc3RyaW5nO1xuICAgIENjPzogc3RyaW5nO1xuICAgIEJjYz86IHN0cmluZztcbiAgICBBdHRhY2htZW50cz86IEF0dGFjaG1lbnRbXTtcbiAgICBJbmxpbmVfYXR0YWNobWVudHM/OiBBdHRhY2htZW50W107XG4gICAgSGVhZGVycz86IEhlYWRlcnM7XG4gICAgVmFycz86IFZhcnM7XG4gIH1cblxuICAvLyBSRVNQT05TRSBQQVJUXG4gIGV4cG9ydCBpbnRlcmZhY2UgUmVzcG9uc2VTZW50IHtcbiAgICBFbWFpbDogc3RyaW5nO1xuICAgIE1lc3NhZ2VJRDogbnVtYmVyO1xuICAgIE1lc3NhZ2VVVUlEOiBzdHJpbmc7XG4gIH1cblxuICBleHBvcnQgdHlwZSBSZXNwb25zZSA9IHtcbiAgICBTZW50OiBSZXNwb25zZVNlbnRbXTtcbiAgfVxufVxuXG5leHBvcnQgbmFtZXNwYWNlIFNlbmRFbWFpbFYzXzEge1xuICBleHBvcnQgZW51bSBUcmFja09wZW5zIHtcbiAgICBBY2NvdW50RGVmYXVsdCA9ICdhY2NvdW50X2RlZmF1bHQnLFxuICAgIERpc2FibGVkID0gJ2Rpc2FibGVkJyxcbiAgICBFbmFibGVkID0gJ2VuYWJsZWQnLFxuICB9XG5cbiAgZXhwb3J0IGVudW0gVHJhY2tDbGlja3Mge1xuICAgIEFjY291bnREZWZhdWx0ID0gJ2FjY291bnRfZGVmYXVsdCcsXG4gICAgRGlzYWJsZWQgPSAnZGlzYWJsZWQnLFxuICAgIEVuYWJsZWQgPSAnZW5hYmxlZCcsXG4gIH1cblxuICBleHBvcnQgaW50ZXJmYWNlIEVtYWlsQWRkcmVzc1RvIHtcbiAgICBFbWFpbDogc3RyaW5nO1xuICAgIE5hbWU/OiBzdHJpbmc7XG4gIH1cblxuICBleHBvcnQgaW50ZXJmYWNlIEF0dGFjaG1lbnQge1xuICAgIEZpbGVuYW1lOiBzdHJpbmc7XG4gICAgQ29udGVudFR5cGU6IHN0cmluZztcbiAgICBCYXNlNjRDb250ZW50OiBzdHJpbmc7XG4gIH1cblxuICBleHBvcnQgaW50ZXJmYWNlIElubGluZWRBdHRhY2htZW50IGV4dGVuZHMgQXR0YWNobWVudCB7XG4gICAgQ29udGVudElEPzogc3RyaW5nO1xuICB9XG5cbiAgZXhwb3J0IGludGVyZmFjZSBNZXNzYWdlPEhlYWRlcnMgPSBDb21tb24uVW5rbm93blJlYywgVmFyaWFibGVzID0gQ29tbW9uLlVua25vd25SZWM+IHtcbiAgICBGcm9tOiBFbWFpbEFkZHJlc3NUbztcbiAgICBTZW5kZXI/OiBFbWFpbEFkZHJlc3NUbztcbiAgICBUbzogRW1haWxBZGRyZXNzVG9bXTtcbiAgICBDYz86IEVtYWlsQWRkcmVzc1RvW107XG4gICAgQmNjPzogRW1haWxBZGRyZXNzVG9bXTtcbiAgICBSZXBseVRvPzogRW1haWxBZGRyZXNzVG87XG4gICAgU3ViamVjdD86IHN0cmluZztcbiAgICBUZXh0UGFydD86IHN0cmluZztcbiAgICBIVE1MUGFydD86IHN0cmluZztcbiAgICBUZW1wbGF0ZUlEPzogbnVtYmVyO1xuICAgIFRlbXBsYXRlTGFuZ3VhZ2U/OiBib29sZWFuO1xuICAgIFRlbXBsYXRlRXJyb3JSZXBvcnRpbmc/OiBFbWFpbEFkZHJlc3NUbztcbiAgICBUZW1wbGF0ZUVycm9yRGVsaXZlcj86IGJvb2xlYW47XG4gICAgQXR0YWNobWVudHM/OiBBdHRhY2htZW50W107XG4gICAgSW5saW5lZEF0dGFjaG1lbnRzPzogSW5saW5lZEF0dGFjaG1lbnRbXTtcbiAgICBQcmlvcml0eT86IG51bWJlcjtcbiAgICBDdXN0b21DYW1wYWlnbj86IHN0cmluZztcbiAgICBEZWR1cGxpY2F0ZUNhbXBhaWduPzogYm9vbGVhbjtcbiAgICBUcmFja09wZW5zPzogVHJhY2tPcGVucztcbiAgICBUcmFja0NsaWNrcz86IFRyYWNrQ2xpY2tzO1xuICAgIEN1c3RvbUlEPzogc3RyaW5nO1xuICAgIEV2ZW50UGF5bG9hZD86IHN0cmluZztcbiAgICBVUkxUYWdzPzogc3RyaW5nO1xuICAgIEhlYWRlcnM/OiBIZWFkZXJzO1xuICAgIFZhcmlhYmxlcz86IFZhcmlhYmxlcztcbiAgfVxuXG4gIGV4cG9ydCBlbnVtIFJlc3BvbnNlU3RhdHVzIHtcbiAgICBTdWNjZXNzID0gJ3N1Y2Nlc3MnLFxuICAgIEVycm9yID0gJ2Vycm9yJyxcbiAgfVxuXG4gIGV4cG9ydCBpbnRlcmZhY2UgUmVzcG9uc2VFcnJvciB7XG4gICAgRXJyb3JJZGVudGlmaWVyOiBzdHJpbmc7XG4gICAgRXJyb3JDb2RlOiBzdHJpbmc7XG4gICAgU3RhdHVzQ29kZTogbnVtYmVyO1xuICAgIEVycm9yTWVzc2FnZTogc3RyaW5nO1xuICAgIEVycm9yUmVsYXRlZFRvOiBBcnJheTxzdHJpbmc+O1xuICB9XG5cbiAgZXhwb3J0IGludGVyZmFjZSBSZXNwb25zZUVtYWlsQWRkcmVzc1RvIHtcbiAgICBFbWFpbDogc3RyaW5nO1xuICAgIE1lc3NhZ2VVVUlEOiBzdHJpbmc7XG4gICAgTWVzc2FnZUlEOiBudW1iZXI7XG4gICAgTWVzc2FnZUhyZWY6IHN0cmluZztcbiAgfVxuXG4gIC8vIFJFUVVFU1QgUEFSVFxuICBleHBvcnQgdHlwZSBCb2R5PFxuICAgIEhlYWRlcnMgPSBDb21tb24uVW5rbm93blJlYyxcbiAgICBWYXJpYWJsZXMgPSBDb21tb24uVW5rbm93blJlYyxcbiAgICBHbG9iYWxzID0gQ29tbW9uLlVua25vd25SZWMsXG4gICAgPiA9IHtcbiAgICBNZXNzYWdlczogQXJyYXk8TWVzc2FnZTxIZWFkZXJzLCBWYXJpYWJsZXM+PjtcbiAgICBTYW5kYm94TW9kZT86IGJvb2xlYW47XG4gICAgQWR2YW5jZUVycm9ySGFuZGxpbmc/OiBib29sZWFuO1xuICAgIEdsb2JhbHM/OiBHbG9iYWxzO1xuICB9IHwge1xuICAgIE1lc3NhZ2VzOiBBcnJheTxPbWl0PE1lc3NhZ2U8SGVhZGVycywgVmFyaWFibGVzPiwgJ0Zyb20nPiAmIHsgRnJvbT86IHN0cmluZyB9PjtcbiAgICBTYW5kYm94TW9kZT86IGJvb2xlYW47XG4gICAgQWR2YW5jZUVycm9ySGFuZGxpbmc/OiBib29sZWFuO1xuICAgIEdsb2JhbHM6IHtcbiAgICAgIEZyb206IEVtYWlsQWRkcmVzc1RvO1xuICAgICAgW2tleTogc3RyaW5nXTogdW5rbm93bjtcbiAgICB9O1xuICB9XG5cbiAgLy8gUkVTUE9OU0UgUEFSVFxuICBleHBvcnQgaW50ZXJmYWNlIFJlc3BvbnNlTWVzc2FnZSB7XG4gICAgU3RhdHVzOiBSZXNwb25zZVN0YXR1cztcbiAgICBFcnJvcnM6IFJlc3BvbnNlRXJyb3JbXTtcbiAgICBDdXN0b21JRDogc3RyaW5nO1xuICAgIFRvOiBSZXNwb25zZUVtYWlsQWRkcmVzc1RvW107XG4gICAgQ2M6IFJlc3BvbnNlRW1haWxBZGRyZXNzVG9bXTtcbiAgICBCY2M6IFJlc3BvbnNlRW1haWxBZGRyZXNzVG9bXTtcbiAgfVxuXG4gIGV4cG9ydCB0eXBlIFJlc3BvbnNlID0ge1xuICAgIE1lc3NhZ2VzOiBSZXNwb25zZU1lc3NhZ2VbXTtcbiAgfVxufVxuIiwiaW1wb3J0IHsgQ29tbW9uIH0gZnJvbSAnLi9Db21tb24nO1xuXG5leHBvcnQgbmFtZXNwYWNlIFNlbmRlciB7XG4gIGV4cG9ydCBlbnVtIEVtYWlsVHlwZSB7XG4gICAgVHJhbnNhY3Rpb25hbCA9ICd0cmFuc2FjdGlvbmFsJyxcbiAgICBCdWxrID0gJ2J1bGsnLFxuICAgIFVua25vd24gPSAndW5rbm93bidcbiAgfVxuXG4gIGV4cG9ydCBlbnVtIFNlbmRlclN0YXR1cyB7XG4gICAgSW5hY3RpdmUgPSAnSW5hY3RpdmUnLFxuICAgIEFjdGl2ZSA9ICdBY3RpdmUnLFxuICAgIERlbGV0ZWQgPSAnRGVsZXRlZCcsXG4gIH1cblxuICBleHBvcnQgaW50ZXJmYWNlIFNlbmRlciB7XG4gICAgSUQ6IG51bWJlcjtcbiAgICBFbWFpbFR5cGU6IEVtYWlsVHlwZTtcbiAgICBJc0RlZmF1bHRTZW5kZXI6IGJvb2xlYW47XG4gICAgTmFtZTogc3RyaW5nO1xuICAgIENyZWF0ZWRBdDogc3RyaW5nO1xuICAgIEROU0lEOiBudW1iZXI7XG4gICAgRW1haWw6IHN0cmluZztcbiAgICBGaWxlbmFtZTogc3RyaW5nO1xuICAgIFN0YXR1czogU2VuZGVyU3RhdHVzO1xuICB9XG5cbiAgZXhwb3J0IGludGVyZmFjZSBTZW5kZXJWYWxpZGF0ZSB7XG4gICAgVmFsaWRhdGlvbk1ldGhvZDogc3RyaW5nO1xuICAgIEVycm9yczogc3RyaW5nO1xuICAgIEdsb2JhbEVycm9yOiBzdHJpbmc7XG4gIH1cblxuICAvLyBSRVFVRVNUIFBBUlRcbiAgZXhwb3J0IHR5cGUgUG9zdFNlbmRlckJvZHkgPSB7XG4gICAgRW1haWw6IHN0cmluZztcbiAgICBFbWFpbFR5cGU/OiBFbWFpbFR5cGU7XG4gICAgSXNEZWZhdWx0U2VuZGVyPzogYm9vbGVhbjtcbiAgICBOYW1lPzogc3RyaW5nO1xuICB9XG5cbiAgZXhwb3J0IHR5cGUgUHV0U2VuZGVyQm9keSA9IE9taXQ8UG9zdFNlbmRlckJvZHksICdFbWFpbCc+XG5cbiAgZXhwb3J0IHR5cGUgR2V0U2VuZGVyUXVlcnlQYXJhbXMgPSBQYXJ0aWFsPENvbW1vbi5QYWdpbmF0aW9uPiAmIHtcbiAgICBEbnNJRD86IG51bWJlcjtcbiAgICBEb21haW4/OiBzdHJpbmc7XG4gICAgRW1haWw/OiBzdHJpbmc7XG4gICAgSXNEb21haW5TZW5kZXI/OiBib29sZWFuO1xuICAgIExvY2FsUGFydD86IHN0cmluZztcbiAgICBTaG93RGVsZXRlZD86IGJvb2xlYW47XG4gICAgU3RhdHVzPzogU2VuZGVyU3RhdHVzO1xuICB9XG5cbiAgLy8gUkVTUE9OU0UgUEFSVFxuICB0eXBlIFNlbmRlclJlc3BvbnNlID0gQ29tbW9uLlJlc3BvbnNlPFNlbmRlcltdPjtcblxuICBleHBvcnQgdHlwZSBQb3N0U2VuZGVyUmVzcG9uc2UgPSBTZW5kZXJSZXNwb25zZVxuICBleHBvcnQgdHlwZSBQdXRTZW5kZXJSZXNwb25zZSA9IFNlbmRlclJlc3BvbnNlXG4gIGV4cG9ydCB0eXBlIEdldFNlbmRlclJlc3BvbnNlID0gU2VuZGVyUmVzcG9uc2VcblxuICBleHBvcnQgdHlwZSBQb3N0U2VuZGVyVmFsaWRhdGVSZXNwb25zZSA9IENvbW1vbi5SZXNwb25zZTxTZW5kZXJWYWxpZGF0ZVtdPjtcbn1cblxuZXhwb3J0IG5hbWVzcGFjZSBNZXRhc2VuZGVyIHtcbiAgZXhwb3J0IGludGVyZmFjZSBNZXRhU2VuZGVyIHtcbiAgICBJRDogbnVtYmVyO1xuICAgIERlc2NyaXB0aW9uOiBzdHJpbmc7XG4gICAgQ3JlYXRlZEF0OiBzdHJpbmc7XG4gICAgRW1haWw6IHN0cmluZztcbiAgICBGaWxlbmFtZTogc3RyaW5nO1xuICAgIElzRW5hYmxlZDogYm9vbGVhbjtcbiAgfVxuXG4gIC8vIFJFUVVFU1QgUEFSVFxuICBleHBvcnQgdHlwZSBQb3N0TWV0YVNlbmRlckJvZHkgPSB7XG4gICAgRW1haWw6IHN0cmluZztcbiAgICBEZXNjcmlwdGlvbj86IHN0cmluZztcbiAgfVxuXG4gIGV4cG9ydCB0eXBlIFB1dE1ldGFTZW5kZXJCb2R5ID0gT21pdDxQb3N0TWV0YVNlbmRlckJvZHksICdFbWFpbCc+XG5cbiAgZXhwb3J0IHR5cGUgR2V0TWV0YVNlbmRlclF1ZXJ5UGFyYW1zID0gUGFydGlhbDxDb21tb24uUGFnaW5hdGlvbj4gJiB7XG4gICAgRE5TPzogbnVtYmVyO1xuICB9XG5cbiAgLy8gUkVTUE9OU0UgUEFSVFxuICB0eXBlIE1ldGFTZW5kZXJSZXNwb25zZSA9IENvbW1vbi5SZXNwb25zZTxNZXRhU2VuZGVyW10+O1xuXG4gIGV4cG9ydCB0eXBlIFBvc3RNZXRhU2VuZGVyUmVzcG9uc2UgPSBNZXRhU2VuZGVyUmVzcG9uc2VcbiAgZXhwb3J0IHR5cGUgUHV0TWV0YVNlbmRlclJlc3BvbnNlID0gTWV0YVNlbmRlclJlc3BvbnNlXG4gIGV4cG9ydCB0eXBlIEdldE1ldGFTZW5kZXJSZXNwb25zZSA9IE1ldGFTZW5kZXJSZXNwb25zZVxufVxuXG5leHBvcnQgbmFtZXNwYWNlIEROUyB7XG4gIGV4cG9ydCBlbnVtIERLSU1Db25maWd1cmF0aW9uQ2hlY2tTdGF0dXMge1xuICAgIE9LID0gJ09LJyxcbiAgICBFcnJvciA9ICdFcnJvcicsXG4gICAgTm90Q2hlY2tlZCA9ICdOb3QgY2hlY2tlZCdcbiAgfVxuXG4gIGV4cG9ydCBlbnVtIERLSU1Db25maWd1cmF0aW9uU3RhdHVzIHtcbiAgICBPSyA9ICdPSycsXG4gICAgRXJyb3IgPSAnRXJyb3InXG4gIH1cblxuICBleHBvcnQgZW51bSBTUEZDb25maWd1cmF0aW9uQ2hlY2tTdGF0dXMge1xuICAgIE9LID0gJ09LJyxcbiAgICBFcnJvciA9ICdFcnJvcicsXG4gICAgTm90Q2hlY2tlZCA9ICdOb3QgY2hlY2tlZCcsXG4gICAgTm90Rm91bmQgPSAnTm90IGZvdW5kJyxcbiAgfVxuXG4gIGV4cG9ydCBlbnVtIFNQRkNvbmZpZ3VyYXRpb25TdGF0dXMge1xuICAgIE9LID0gJ09LJyxcbiAgICBFcnJvciA9ICdFcnJvcidcbiAgfVxuXG4gIGV4cG9ydCBpbnRlcmZhY2UgRE5TIHtcbiAgICBJRDogbnVtYmVyO1xuICAgIERLSU1SZWNvcmROYW1lOiBzdHJpbmc7XG4gICAgREtJTVJlY29yZFZhbHVlOiBzdHJpbmc7XG4gICAgREtJTVN0YXR1czogREtJTUNvbmZpZ3VyYXRpb25DaGVja1N0YXR1cztcbiAgICBEb21haW46IHN0cmluZztcbiAgICBJc0NoZWNrSW5Qcm9ncmVzczogYm9vbGVhbjtcbiAgICBMYXN0Q2hlY2tBdDogc3RyaW5nO1xuICAgIE93bmVyU2hpcFRva2VuOiBzdHJpbmc7XG4gICAgT3duZXJTaGlwVG9rZW5SZWNvcmROYW1lOiBzdHJpbmc7XG4gICAgU1BGUmVjb3JkVmFsdWU6IHN0cmluZztcbiAgICBTUEZTdGF0dXM6IFNQRkNvbmZpZ3VyYXRpb25DaGVja1N0YXR1cztcbiAgfVxuXG4gIGV4cG9ydCBpbnRlcmZhY2UgRE5TQ2hlY2sge1xuICAgIERLSU1FcnJvcnM6IHN0cmluZztcbiAgICBES0lNUmVjb3JkQ3VycmVudFZhbHVlOiBzdHJpbmc7XG4gICAgREtJTVN0YXR1czogREtJTUNvbmZpZ3VyYXRpb25TdGF0dXM7XG4gICAgU1BGRXJyb3JzOiBzdHJpbmc7XG4gICAgU1BGUmVjb3JkQ3VycmVudFZhbHVlOiBzdHJpbmc7XG4gICAgU1BGU3RhdHVzOiBTUEZDb25maWd1cmF0aW9uU3RhdHVzO1xuICB9XG5cbiAgLy8gUkVRVUVTVCBQQVJUXG4gIGV4cG9ydCB0eXBlIEdldEROU1F1ZXJ5UGFyYW1zID0gUGFydGlhbDxDb21tb24uUGFnaW5hdGlvbj4gJiB7XG4gICAgSXNDaGVja0luUHJvZ3Jlc3M/OiBib29sZWFuO1xuICAgIElzU2VuZGVySWRlbnRpZmllZD86IGJvb2xlYW47XG4gICAgSXNZYWhvb0ZCTD86IGJvb2xlYW47XG4gICAgTWF4TGFzdENoZWNrQXQ/OiBzdHJpbmc7XG4gICAgTWluTGFzdENoZWNrQXQ/OiBzdHJpbmc7XG4gICAgU1BGU3RhdHVzPzogU1BGQ29uZmlndXJhdGlvbkNoZWNrU3RhdHVzO1xuICB9XG5cbiAgLy8gUkVTUE9OU0UgUEFSVFxuICBleHBvcnQgdHlwZSBHZXRETlNSZXNwb25zZSA9IENvbW1vbi5SZXNwb25zZTxETlNbXT47XG4gIGV4cG9ydCB0eXBlIFBvc3RETlNDaGVja1Jlc3BvbnNlID0gQ29tbW9uLlJlc3BvbnNlPEROU0NoZWNrW10+O1xufVxuIiwiaW1wb3J0IHsgQ29tbW9uIH0gZnJvbSAnLi9Db21tb24nO1xuXG5leHBvcnQgbmFtZXNwYWNlIEFQSUtleUNvbmZpZ3VyYXRpb24ge1xuICBleHBvcnQgZW51bSBSdW5MZXZlbCB7XG4gICAgTm9ybWFsID0gJ05vcm1hbCcsXG4gICAgU29mdExvY2sgPSAnU29mdGxvY2snLFxuICAgIEhhcmRMb2NrID0gJ0hhcmRsb2NrJ1xuICB9XG5cbiAgZXhwb3J0IGludGVyZmFjZSBBcGlLZXkge1xuICAgIElEOiBudW1iZXI7XG4gICAgQUNMOiBzdHJpbmc7XG4gICAgSXNBY3RpdmU6IGJvb2xlYW47XG4gICAgQVBJS2V5OiBzdHJpbmc7XG4gICAgQ3JlYXRlZEF0OiBzdHJpbmc7XG4gICAgSXNNYXN0ZXI6IGJvb2xlYW47XG4gICAgTmFtZTogc3RyaW5nO1xuICAgIFF1YXJhbnRpbmVWYWx1ZTogbnVtYmVyO1xuICAgIFJ1bmxldmVsOiBSdW5MZXZlbDtcbiAgICBTZWNyZXRLZXk6IHN0cmluZztcbiAgICBUcmFja0hvc3Q6IHN0cmluZztcbiAgICBVc2VySUQ6IG51bWJlcjtcbiAgfVxuXG4gIC8vIFJFUVVFU1QgUEFSVFxuICBleHBvcnQgdHlwZSBQb3N0QXBpS2V5Qm9keSA9IHtcbiAgICBOYW1lOiBzdHJpbmc7XG4gICAgQUNMPzogc3RyaW5nO1xuICAgIElzQWN0aXZlPzogYm9vbGVhbjtcbiAgfVxuXG4gIGV4cG9ydCB0eXBlIFB1dEFwaUtleUJvZHkgPSBQYXJ0aWFsPFBvc3RBcGlLZXlCb2R5PlxuXG4gIGV4cG9ydCB0eXBlIEdldEFwaUtleVF1ZXJ5UGFyYW1zID0gUGFydGlhbDxDb21tb24uUGFnaW5hdGlvbj4gJiB7XG4gICAgQVBJS2V5Pzogc3RyaW5nO1xuICAgIElzQWN0aXZlPzogYm9vbGVhbjtcbiAgICBJc01hc3Rlcj86IGJvb2xlYW47XG4gICAgTmFtZT86IHN0cmluZztcbiAgfVxuXG4gIC8vIFJFU1BPTlNFIFBBUlRcbiAgdHlwZSBBcGlLZXlSZXNwb25zZSA9IENvbW1vbi5SZXNwb25zZTxBcGlLZXlbXT47XG5cbiAgZXhwb3J0IHR5cGUgUG9zdEFwaUtleVJlc3BvbnNlID0gQXBpS2V5UmVzcG9uc2VcbiAgZXhwb3J0IHR5cGUgUHV0QXBpS2V5UmVzcG9uc2UgPSBBcGlLZXlSZXNwb25zZVxuICBleHBvcnQgdHlwZSBHZXRBcGlLZXlSZXNwb25zZSA9QXBpS2V5UmVzcG9uc2Vcbn1cblxuZXhwb3J0IG5hbWVzcGFjZSBBY2NvdW50U2V0dGluZyB7XG4gIGV4cG9ydCBpbnRlcmZhY2UgTXlQcm9maWxlIHtcbiAgICBJRDogbnVtYmVyO1xuICAgIEFkZHJlc3NDaXR5OiBzdHJpbmc7XG4gICAgQWRkcmVzc0NvdW50cnk6IHN0cmluZztcbiAgICBBZGRyZXNzUG9zdGFsQ29kZTogc3RyaW5nO1xuICAgIEFkZHJlc3NTdGF0ZTogc3RyaW5nO1xuICAgIEFkZHJlc3NTdHJlZXQ6IHN0cmluZztcbiAgICBCaWxsaW5nRW1haWw6IHN0cmluZztcbiAgICBCaXJ0aGRheUF0OiBzdHJpbmc7XG4gICAgQ29tcGFueU5hbWU6IHN0cmluZztcbiAgICBDb21wYW55TnVtT2ZFbXBsb3llZXM6IHN0cmluZztcbiAgICBDb250YWN0UGhvbmU6IHN0cmluZztcbiAgICBFc3RpbWF0ZWRWb2x1bWU6IG51bWJlcjtcbiAgICBGZWF0dXJlczogc3RyaW5nO1xuICAgIEZpcnN0bmFtZTogc3RyaW5nO1xuICAgIEluZHVzdHJ5OiBudW1iZXI7XG4gICAgSm9iVGl0bGU6IHN0cmluZztcbiAgICBMYXN0bmFtZTogc3RyaW5nO1xuICAgIFZBVE51bWJlcjogc3RyaW5nO1xuICAgIFdlYnNpdGU6IHN0cmluZztcbiAgICBWQVQ6IG51bWJlcjtcbiAgICBVc2VySUQ6IG51bWJlcjtcbiAgfVxuXG4gIGV4cG9ydCBpbnRlcmZhY2UgVXNlciB7XG4gICAgSUQ6IG51bWJlcjtcbiAgICBBQ0w6IHN0cmluZztcbiAgICBFbWFpbDogc3RyaW5nO1xuICAgIExhc3RMb2dpbkF0OiBzdHJpbmc7XG4gICAgTG9jYWxlOiBzdHJpbmc7XG4gICAgVGltZXpvbmU6IHN0cmluZztcbiAgICBDcmVhdGVkQXQ6IHN0cmluZztcbiAgICBGaXJzdElwOiBzdHJpbmc7XG4gICAgTGFzdElwOiBzdHJpbmc7XG4gICAgTWF4QWxsb3dlZEFQSUtleXM6IG51bWJlcjtcbiAgICBVc2VybmFtZTogc3RyaW5nO1xuICAgIFdhcm5lZFJhdGVsaW1pdEF0OiBzdHJpbmc7XG4gIH1cblxuICAvLyBSRVFVRVNUIFBBUlRcbiAgZXhwb3J0IHR5cGUgUHV0TXlQcm9maWxlQm9keSA9IFBhcnRpYWw8T21pdDxNeVByb2ZpbGUsICdJRCcgfCAnVkFUJyB8ICdVc2VySUQnPj5cblxuICBleHBvcnQgdHlwZSBQdXRVc2VyQm9keSA9XG4gICAgUGFydGlhbDxPbWl0PFVzZXIsICdJRCcgfCAnQ3JlYXRlZEF0JyB8ICdGaXJzdElwJyB8ICdNYXhBbGxvd2VkQVBJS2V5cycgfCAnV2FybmVkUmF0ZWxpbWl0QXQnPj5cblxuICAvLyBSRVNQT05TRSBQQVJUXG4gIHR5cGUgTXlQcm9maWxlUmVzcG9uc2UgPSBDb21tb24uUmVzcG9uc2U8TXlQcm9maWxlW10+O1xuICB0eXBlIFVzZXJSZXNwb25zZSA9IENvbW1vbi5SZXNwb25zZTxVc2VyW10+O1xuXG4gIGV4cG9ydCB0eXBlIFB1dE15UHJvZmlsZVJlc3BvbnNlID0gTXlQcm9maWxlUmVzcG9uc2VcbiAgZXhwb3J0IHR5cGUgR2V0TXlQcm9maWxlUmVzcG9uc2UgPSBNeVByb2ZpbGVSZXNwb25zZVxuXG4gIGV4cG9ydCB0eXBlIFB1dFVzZXJSZXNwb25zZSA9IFVzZXJSZXNwb25zZVxuICBleHBvcnQgdHlwZSBHZXRVc2VyUmVzcG9uc2UgPSBVc2VyUmVzcG9uc2Vcbn1cbiIsImltcG9ydCB7IENvbW1vbiB9IGZyb20gJy4vQ29tbW9uJztcbmltcG9ydCB7IE1lc3NhZ2UgfSBmcm9tICcuL01lc3NhZ2UnO1xuXG5leHBvcnQgbmFtZXNwYWNlIFN0YXRpc3RpYyB7XG4gIGV4cG9ydCBlbnVtIENhbXBhaWduT3ZlcnZpZXdJRFR5cGUge1xuICAgIFNlbnRDYW1wYWlnbiA9ICdDYW1wYWlnbicsXG4gICAgQUJUZXN0aW5nID0gJ0FYJyxcbiAgICBEcmFmdCA9ICdOTCdcbiAgfVxuXG4gIGV4cG9ydCBlbnVtIENhbXBhaWduT3ZlcnZpZXdFZGl0TW9kZSB7XG4gICAgVG9vbCA9ICd0b29sJyxcbiAgICBIVE1MID0gJ2h0bWwnLFxuICAgIFRvb2wyID0gJ3Rvb2wyJyxcbiAgICBIVE1MMiA9ICdodG1sMicsXG4gICAgTUpNTCA9ICdtam1sJyxcbiAgfVxuXG4gIGV4cG9ydCBlbnVtIENhbXBhaWduT3ZlcnZpZXdFZGl0VHlwZSB7XG4gICAgRnVsbCA9ICdmdWxsJyxcbiAgICBVbmtub3duID0gJ3Vua25vd24nXG4gIH1cblxuICBleHBvcnQgZW51bSBDb3VudGVyU291cmNlIHtcbiAgICBDYW1wYWlnbiA9ICdDYW1wYWlnbicsXG4gICAgQVBJS2V5ID0gJ0FQSUtleScsXG4gICAgTGlzdCA9ICdMaXN0JyxcbiAgICBTZW5kZXIgPSAnU2VuZGVyJ1xuICB9XG5cbiAgZXhwb3J0IGVudW0gQ291bnRlclJlc29sdXRpb24ge1xuICAgIEhpZ2hlc3QgPSAnSGlnaGVzdCcsXG4gICAgSG91ciA9ICdIb3VyJyxcbiAgICBEYXkgPSAnRGF5JyxcbiAgICBMaWZldGltZSA9ICdMaWZldGltZSdcbiAgfVxuXG4gIGV4cG9ydCBlbnVtIENvdW50ZXJUaW1pbmcge1xuICAgIE1lc3NhZ2UgPSAnTWVzc2FnZScsXG4gICAgRXZlbnQgPSAnRXZlbnQnXG4gIH1cblxuICBleHBvcnQgZW51bSBFbWFpbEV2ZW50IHtcbiAgICBPcGVuID0gJ29wZW4nLFxuICAgIENsaWNrID0gJ2NsaWNrJ1xuICB9XG5cbiAgZXhwb3J0IGludGVyZmFjZSBDYW1wYWlnbk92ZXJ2aWV3IHtcbiAgICBDbGlja2VkQ291bnQ6IG51bWJlcjtcbiAgICBEZWxpdmVyZWRDb3VudDogbnVtYmVyO1xuICAgIEVkaXRNb2RlOiBDYW1wYWlnbk92ZXJ2aWV3RWRpdE1vZGU7XG4gICAgRWRpdFR5cGU6IENhbXBhaWduT3ZlcnZpZXdFZGl0VHlwZTtcbiAgICBJRDogbnVtYmVyO1xuICAgIElEVHlwZTogQ2FtcGFpZ25PdmVydmlld0lEVHlwZTtcbiAgICBPcGVuZWRDb3VudDogbnVtYmVyO1xuICAgIFByb2Nlc3NlZENvdW50OiBudW1iZXI7XG4gICAgU2VuZFRpbWVTdGFydDogbnVtYmVyO1xuICAgIFN0YXJyZWQ6IGJvb2xlYW47XG4gICAgU3ViamVjdDogc3RyaW5nO1xuICAgIFRpdGxlOiBzdHJpbmc7XG4gIH1cblxuICBleHBvcnQgaW50ZXJmYWNlIENvbnRhY3RTdGF0aXN0aWMge1xuICAgIEJsb2NrZWRDb3VudDogbnVtYmVyO1xuICAgIEJvdW5jZWRDb3VudDogbnVtYmVyO1xuICAgIENsaWNrZWRDb3VudDogbnVtYmVyO1xuICAgIENvbnRhY3RJRDogbnVtYmVyO1xuICAgIERlZmVycmVkQ291bnQ6IG51bWJlcjtcbiAgICBEZWxpdmVyZWRDb3VudDogbnVtYmVyO1xuICAgIEhhcmRib3VuY2VkQ291bnQ6IG51bWJlcjtcbiAgICBMYXN0QWN0aXZpdHlBdDogc3RyaW5nO1xuICAgIE1hcmtldGluZ0NvbnRhY3RzOiBudW1iZXI7XG4gICAgT3BlbmVkQ291bnQ6IG51bWJlcjtcbiAgICBQcm9jZXNzZWRDb3VudDogbnVtYmVyO1xuICAgIFF1ZXVlZENvdW50OiBudW1iZXI7XG4gICAgU29mdGJvdW5jZWRDb3VudDogbnVtYmVyO1xuICAgIFNwYW1Db21wbGFpbnRDb3VudDogbnVtYmVyO1xuICAgIFVuc3Vic2NyaWJlZENvdW50OiBudW1iZXI7XG4gICAgVXNlck1hcmtldGluZ0NvbnRhY3RzOiBudW1iZXI7XG4gICAgV29ya0Zsb3dFeGl0ZWRDb3VudDogbnVtYmVyO1xuICB9XG5cbiAgZXhwb3J0IGludGVyZmFjZSBHRU9TdGF0aXN0aWMge1xuICAgIENsaWNrZWRDb3VudDogbnVtYmVyO1xuICAgIE9wZW5lZENvdW50OiBudW1iZXI7XG4gICAgQ291bnRyeTogc3RyaW5nO1xuICB9XG5cbiAgZXhwb3J0IGludGVyZmFjZSBMaXN0UmVjaXBpZW50U3RhdGlzdGljPERhdGEgPSBBcnJheTx1bmtub3duPj4ge1xuICAgIEJsb2NrZWRDb3VudDogbnVtYmVyO1xuICAgIEJvdW5jZWRDb3VudDogbnVtYmVyO1xuICAgIENsaWNrZWRDb3VudDogbnVtYmVyO1xuICAgIERhdGE6IERhdGE7XG4gICAgRGVmZXJyZWRDb3VudDogbnVtYmVyO1xuICAgIERlbGl2ZXJlZENvdW50OiBudW1iZXI7XG4gICAgSGFyZGJvdW5jZWRDb3VudDogbnVtYmVyO1xuICAgIExhc3RBY3Rpdml0eUF0OiBzdHJpbmc7XG4gICAgTGlzdFJlY2lwaWVudElEOiBudW1iZXI7XG4gICAgT3BlbmVkQ291bnQ6IG51bWJlcjtcbiAgICBQcmVRdWV1ZWRDb3VudDogbnVtYmVyO1xuICAgIFByb2Nlc3NlZENvdW50OiBudW1iZXI7XG4gICAgUXVldWVkQ291bnQ6IG51bWJlcjtcbiAgICBTb2Z0Ym91bmNlZENvdW50OiBudW1iZXI7XG4gICAgU3BhbUNvbXBsYWludENvdW50OiBudW1iZXI7XG4gICAgVW5zdWJzY3JpYmVkQ291bnQ6IG51bWJlcjtcbiAgICBXb3JrRmxvd0V4aXRlZENvdW50OiBudW1iZXI7XG4gIH1cblxuICBleHBvcnQgaW50ZXJmYWNlIFN0YXRDb3VudGVyIHtcbiAgICBBUElLZXlJRDogbnVtYmVyO1xuICAgIEV2ZW50Q2xpY2tEZWxheTogbnVtYmVyO1xuICAgIEV2ZW50Q2xpY2tlZENvdW50OiBudW1iZXI7XG4gICAgRXZlbnRPcGVuRGVsYXk6IG51bWJlcjtcbiAgICBFdmVudE9wZW5lZENvdW50OiBudW1iZXI7XG4gICAgRXZlbnRTcGFtQ291bnQ6IG51bWJlcjtcbiAgICBFdmVudFVuc3Vic2NyaWJlZENvdW50OiBudW1iZXI7XG4gICAgRXZlbnRXb3JrZmxvd0V4aXRlZENvdW50OiBudW1iZXI7XG4gICAgTWVzc2FnZUJsb2NrZWRDb3VudDogbnVtYmVyO1xuICAgIE1lc3NhZ2VDbGlja2VkQ291bnQ6IG51bWJlcjtcbiAgICBNZXNzYWdlRGVmZXJyZWRDb3VudDogbnVtYmVyO1xuICAgIE1lc3NhZ2VIYXJkQm91bmNlZENvdW50OiBudW1iZXI7XG4gICAgTWVzc2FnZU9wZW5lZENvdW50OiBudW1iZXI7XG4gICAgTWVzc2FnZVF1ZXVlZENvdW50OiBudW1iZXI7XG4gICAgTWVzc2FnZVNlbnRDb3VudDogbnVtYmVyO1xuICAgIE1lc3NhZ2VTb2Z0Qm91bmNlZENvdW50OiBudW1iZXI7XG4gICAgTWVzc2FnZVNwYW1Db3VudDogbnVtYmVyO1xuICAgIE1lc3NhZ2VVbnN1YnNjcmliZWRDb3VudDogbnVtYmVyO1xuICAgIE1lc3NhZ2VXb3JrRmxvd0V4aXRlZENvdW50OiBudW1iZXI7XG4gICAgU291cmNlSUQ6IG51bWJlcjtcbiAgICBUaW1lc2xpY2U6IHN0cmluZztcbiAgICBUb3RhbDogbnVtYmVyO1xuICB9XG5cbiAgZXhwb3J0IGludGVyZmFjZSBMaW5rQ2xpY2tTdGF0aXN0aWMge1xuICAgIENsaWNrZWRFdmVudHNDb3VudDogbnVtYmVyO1xuICAgIENsaWNrZWRNZXNzYWdlc0NvdW50OiBudW1iZXI7XG4gICAgUG9zaXRpb25JbmRleDogbnVtYmVyO1xuICAgIFVSTDogc3RyaW5nO1xuICB9XG5cbiAgZXhwb3J0IGludGVyZmFjZSBSZWNpcGllbnRFU1BTdGF0aXN0aWMge1xuICAgIEF0dGVtcHRlZE1lc3NhZ2VzQ291bnQ/OiBudW1iZXI7XG4gICAgQ2xpY2tlZE1lc3NhZ2VzQ291bnQ/OiBudW1iZXI7XG4gICAgRGVmZXJyZWRNZXNzYWdlc0NvdW50PzogbnVtYmVyO1xuICAgIERlbGl2ZXJlZE1lc3NhZ2VzQ291bnQ/OiBudW1iZXI7XG4gICAgSGFyZEJvdW5jZWRNZXNzYWdlc0NvdW50PzogbnVtYmVyO1xuICAgIEVTUE5hbWU/OiBzdHJpbmc7XG4gICAgT3BlbmVkTWVzc2FnZXNDb3VudD86IG51bWJlcjtcbiAgICBTb2Z0Qm91bmNlZE1lc3NhZ2VzQ291bnQ/OiBudW1iZXI7XG4gICAgU3BhbVJlcG9ydHNDb3VudD86IG51bWJlcjtcbiAgICBVbnN1YnNjcmliZWRNZXNzYWdlc0NvdW50PzogbnVtYmVyO1xuICAgIE9wZW5SYXRlPzogbnVtYmVyO1xuICAgIENsaWNrVGhyb3VnaFJhdGU/OiBudW1iZXI7XG4gICAgU29mdEJvdW5jZWRSYXRlPzogbnVtYmVyO1xuICAgIEhhcmRCb3VuY2VkUmF0ZT86IG51bWJlcjtcbiAgICBVbnN1YnNjcmliZWRSYXRlPzogbnVtYmVyO1xuICAgIFNwYW1SZXBvcnRzUmF0ZT86IG51bWJlcjtcbiAgICBEZWZlcnJlZFJhdGU/OiBudW1iZXI7XG4gIH1cblxuICBleHBvcnQgaW50ZXJmYWNlIFRvcExpbmtDbGlja2VkIHtcbiAgICBDbGlja2VkQ291bnQ6IG51bWJlcjtcbiAgICBMaW5rSWQ6IG51bWJlcjtcbiAgICBVcmw6IHN0cmluZztcbiAgfVxuXG4gIGV4cG9ydCBpbnRlcmZhY2UgVXNlckFnZW50U3RhdGlzdGljIHtcbiAgICBDb3VudDogbnVtYmVyO1xuICAgIERpc3RpbmN0Q291bnQ6IG51bWJlcjtcbiAgICBQbGF0Zm9ybTogc3RyaW5nO1xuICAgIFVzZXJBZ2VudDogc3RyaW5nO1xuICB9XG5cbiAgLy8gUkVRVUVTVCBQQVJUXG4gIGV4cG9ydCB0eXBlIEdldENhbXBhaWduT3ZlcnZpZXdRdWVyeVBhcmFtcyA9IFBhcnRpYWw8Q29tbW9uLlBhZ2luYXRpb24+ICYge1xuICAgIEFsbD86IGJvb2xlYW47XG4gICAgQXJjaGl2ZWQ/OiBib29sZWFuO1xuICAgIERyYWZ0cz86IGJvb2xlYW47XG4gICAgSUQ/OiBudW1iZXI7XG4gICAgSURUeXBlPzogQ2FtcGFpZ25PdmVydmlld0lEVHlwZTtcbiAgICBQcm9ncmFtbWVkPzogYm9vbGVhbjtcbiAgICBTZW50PzogYm9vbGVhbjtcbiAgICBTdGFycmVkPzogYm9vbGVhbjtcbiAgICBTdWJqZWN0Pzogc3RyaW5nO1xuICB9XG5cbiAgZXhwb3J0IHR5cGUgR2V0Q29udGFjdFN0YXRpc3RpY3NRdWVyeVBhcmFtcyA9IFBhcnRpYWw8Q29tbW9uLlBhZ2luYXRpb24+ICYge1xuICAgIEJsb2NrZWQ/OiBib29sZWFuO1xuICAgIEJvdW5jZWQ/OiBib29sZWFuO1xuICAgIENsaWNrPzogYm9vbGVhbjtcbiAgICBEZWZlcnJlZD86IGJvb2xlYW47XG4gICAgSGFyZGJvdW5jZWQ/OiBib29sZWFuO1xuICAgIExhc3RBY3Rpdml0eUF0Pzogc3RyaW5nO1xuICAgIE1heExhc3RBY3Rpdml0eUF0Pzogc3RyaW5nO1xuICAgIE1pbkxhc3RBY3Rpdml0eUF0Pzogc3RyaW5nO1xuICAgIE9wZW4/OiBib29sZWFuO1xuICAgIFF1ZXVlZD86IGJvb2xlYW47XG4gICAgU2VudD86IGJvb2xlYW47XG4gICAgU3BhbT86IGJvb2xlYW47XG4gICAgU29mdGJvdW5jZWQ/OiBib29sZWFuO1xuICAgIFVuc3Vic2NyaWJlZD86IGJvb2xlYW47XG4gIH1cblxuICBleHBvcnQgdHlwZSBHZXRHRU9TdGF0aXN0aWNzUXVlcnlQYXJhbXMgPSBQYXJ0aWFsPENvbW1vbi5UaW1lc3RhbXBQZXJpb2Q+ICZcbiAgICBQYXJ0aWFsPENvbW1vbi5QYWdpbmF0aW9uPiAmXG4gIHtcbiAgICBDYW1wYWlnbklEPzogbnVtYmVyO1xuICAgIENvbnRhY3RzTGlzdD86IG51bWJlcjtcbiAgICBDdXN0b21DYW1wYWlnbj86IHN0cmluZztcbiAgICBGcm9tPzogc3RyaW5nO1xuICAgIEZyb21Eb21haW4/OiBzdHJpbmc7XG4gICAgRnJvbUlEPzogbnVtYmVyO1xuICAgIEZyb21UeXBlPzogTWVzc2FnZS5Gcm9tVHlwZTtcbiAgICBJc0RlbGV0ZWQ/OiBib29sZWFuO1xuICAgIElzTmV3c2xldHRlclRvb2w/OiBib29sZWFuO1xuICAgIElzU3RhcnJlZD86IGJvb2xlYW47XG4gICAgTWVzc2FnZVN0YXR1cz86IE1lc3NhZ2UuTWVzc2FnZVN0YXR1cztcbiAgICBQZXJpb2Q/OiBDb21tb24uUGVyaW9kO1xuICB9XG5cbiAgZXhwb3J0IHR5cGUgR2V0TGlzdFJlY2lwaWVudFN0YXRpc3RpY3NRdWVyeVBhcmFtcyA9IFBhcnRpYWw8Q29tbW9uLlBhZ2luYXRpb24+ICYge1xuICAgIEJsb2NrZWQ/OiBib29sZWFuO1xuICAgIEJvdW5jZWQ/OiBib29sZWFuO1xuICAgIENsaWNrPzogYm9vbGVhbjtcbiAgICBDb250YWN0PzogbnVtYmVyO1xuICAgIENvbnRhY3RzTGlzdD86IG51bWJlcjtcbiAgICBJc0V4Y2x1ZGVkRnJvbUNhbXBhaWducz86IGJvb2xlYW47XG4gICAgSXNVbnN1YnNjcmliZWQ/OiBib29sZWFuO1xuICAgIExhc3RBY3Rpdml0eUF0Pzogc3RyaW5nO1xuICAgIE1heExhc3RBY3Rpdml0eUF0Pzogc3RyaW5nO1xuICAgIE1pbkxhc3RBY3Rpdml0eUF0Pzogc3RyaW5nO1xuICAgIE1heFVuc3Vic2NyaWJlZEF0Pzogc3RyaW5nO1xuICAgIE1pblVuc3Vic2NyaWJlZEF0Pzogc3RyaW5nO1xuICAgIE9wZW4/OiBib29sZWFuO1xuICAgIFF1ZXVlZD86IGJvb2xlYW47XG4gICAgU2VudD86IGJvb2xlYW47XG4gICAgU2hvd0V4dHJhRGF0YT86IGJvb2xlYW47XG4gICAgU3BhbT86IGJvb2xlYW47XG4gICAgVGltZVpvbmU/OiBzdHJpbmc7XG4gICAgVW5zdWJzY3JpYmVkPzogYm9vbGVhbjtcbiAgfVxuXG4gIGV4cG9ydCB0eXBlIEdldFN0YXRDb3VudGVyc1F1ZXJ5UGFyYW1zID0gUGFydGlhbDxDb21tb24uVGltZXN0YW1wUGVyaW9kPiAmXG4gICAgUGFydGlhbDxDb21tb24uUGFnaW5hdGlvbj4gJlxuICB7XG4gICAgQ291bnRlclNvdXJjZTogQ291bnRlclNvdXJjZTtcbiAgICBDb3VudGVyUmVzb2x1dGlvbjogQ291bnRlclJlc29sdXRpb247XG4gICAgQ291bnRlclRpbWluZzogQ291bnRlclRpbWluZztcbiAgICBTb3VyY2VJRD86IG51bWJlcjtcbiAgfVxuXG4gIGV4cG9ydCB0eXBlIEdldExpbmtDbGlja1N0YXRpc3RpY3NRdWVyeVBhcmFtcyA9IFBhcnRpYWw8Q29tbW9uLlBhZ2luYXRpb24+ICYge1xuICAgIENhbXBhaWduSUQ6IG51bWJlcjtcbiAgfVxuXG4gIGV4cG9ydCB0eXBlIEdldFJlY2lwaWVudEVTUFN0YXRpc3RpY3NRdWVyeVBhcmFtcyA9IEdldExpbmtDbGlja1N0YXRpc3RpY3NRdWVyeVBhcmFtcyAmXG4gIHtcbiAgICBFU1BfTmFtZT86IG51bWJlcjtcbiAgfVxuXG4gIGV4cG9ydCB0eXBlIEdldFRvcExpbmtDbGlja2VkUXVlcnlQYXJhbXMgPSBQYXJ0aWFsPENvbW1vbi5UaW1lc3RhbXBQZXJpb2Q+ICZcbiAgICBQYXJ0aWFsPENvbW1vbi5QYWdpbmF0aW9uPiAmXG4gIHtcbiAgICBBY3R1YWxDbGlja3M/OiBib29sZWFuO1xuICAgIENhbXBhaWduSUQ/OiBudW1iZXI7XG4gICAgQ29udGFjdD86IG51bWJlcjtcbiAgICBDb250YWN0c0xpc3Q/OiBudW1iZXI7XG4gICAgQ3VzdG9tQ2FtcGFpZ24/OiBzdHJpbmc7XG4gICAgRnJvbT86IHN0cmluZztcbiAgICBGcm9tRG9tYWluPzogc3RyaW5nO1xuICAgIEZyb21JRD86IG51bWJlcjtcbiAgICBGcm9tVHlwZT86IE1lc3NhZ2UuRnJvbVR5cGU7XG4gICAgSXNEZWxldGVkPzogYm9vbGVhbjtcbiAgICBJc05ld3NsZXR0ZXJUb29sPzogYm9vbGVhbjtcbiAgICBJc1N0YXJyZWQ/OiBib29sZWFuO1xuICAgIE1lc3NhZ2U/OiBudW1iZXI7XG4gICAgUGVyaW9kPzogQ29tbW9uLlBlcmlvZDtcbiAgfVxuXG4gIGV4cG9ydCB0eXBlIEdldFVzZXJBZ2VudFN0YXRpc3RpY3NRdWVyeVBhcmFtcyA9IFBhcnRpYWw8Q29tbW9uLlRpbWVzdGFtcFBlcmlvZD4gJlxuICAgIFBhcnRpYWw8Q29tbW9uLlBhZ2luYXRpb24+ICZcbiAge1xuICAgIENhbXBhaWduSUQ/OiBudW1iZXI7XG4gICAgQ29udGFjdHNMaXN0PzogbnVtYmVyO1xuICAgIEN1c3RvbUNhbXBhaWduPzogc3RyaW5nO1xuICAgIEV2ZW50PzogRW1haWxFdmVudDtcbiAgICBFeGNsdWRlUGxhdGZvcm0/OiBzdHJpbmc7XG4gICAgRnJvbT86IHN0cmluZztcbiAgICBGcm9tRG9tYWluPzogc3RyaW5nO1xuICAgIEZyb21JRD86IG51bWJlcjtcbiAgICBGcm9tVHlwZT86IE1lc3NhZ2UuRnJvbVR5cGU7XG4gICAgSXNEZWxldGVkPzogYm9vbGVhbjtcbiAgICBJc05ld3NsZXR0ZXJUb29sPzogYm9vbGVhbjtcbiAgICBJc1N0YXJyZWQ/OiBib29sZWFuO1xuICAgIFBlcmlvZD86IENvbW1vbi5QZXJpb2Q7XG4gICAgUGxhdGZvcm0/OiBzdHJpbmc7XG4gIH1cblxuICAvLyBSRVNQT05TRSBQQVJUXG4gIGV4cG9ydCB0eXBlIEdldENhbXBhaWduT3ZlcnZpZXdSZXNwb25zZSA9IENvbW1vbi5SZXNwb25zZTxDYW1wYWlnbk92ZXJ2aWV3W10+O1xuXG4gIGV4cG9ydCB0eXBlIEdldENvbnRhY3RTdGF0aXN0aWNzUmVzcG9uc2UgPSBDb21tb24uUmVzcG9uc2U8Q29udGFjdFN0YXRpc3RpY1tdPjtcblxuICBleHBvcnQgdHlwZSBHZXRHRU9TdGF0aXN0aWNzUmVzcG9uc2UgPSBDb21tb24uUmVzcG9uc2U8R0VPU3RhdGlzdGljW10+O1xuXG4gIGV4cG9ydCB0eXBlIEdldExpc3RSZWNpcGllbnRTdGF0aXN0aWNzUmVzcG9uc2U8RGF0YSA9IEFycmF5PHVua25vd24+PiA9XG4gICAgQ29tbW9uLlJlc3BvbnNlPEFycmF5PExpc3RSZWNpcGllbnRTdGF0aXN0aWM8RGF0YT4+PjtcblxuICBleHBvcnQgdHlwZSBHZXRTdGF0Q291bnRlcnNSZXNwb25zZSA9IENvbW1vbi5SZXNwb25zZTxTdGF0Q291bnRlcltdPjtcblxuICBleHBvcnQgdHlwZSBHZXRMaW5rQ2xpY2tTdGF0aXN0aWNzUmVzcG9uc2UgPSBDb21tb24uUmVzcG9uc2U8TGlua0NsaWNrU3RhdGlzdGljW10+O1xuXG4gIGV4cG9ydCB0eXBlIEdldFJlY2lwaWVudEVTUFN0YXRpc3RpY3NSZXNwb25zZSA9IENvbW1vbi5SZXNwb25zZTxSZWNpcGllbnRFU1BTdGF0aXN0aWNbXT47XG5cbiAgZXhwb3J0IHR5cGUgR2V0VG9wTGlua0NsaWNrZWRSZXNwb25zZSA9IENvbW1vbi5SZXNwb25zZTxUb3BMaW5rQ2xpY2tlZFtdPjtcblxuICBleHBvcnQgdHlwZSBHZXRVc2VyQWdlbnRTdGF0aXN0aWNzUmVzcG9uc2UgPSBDb21tb24uUmVzcG9uc2U8VXNlckFnZW50U3RhdGlzdGljW10+O1xufVxuIiwiaW1wb3J0IHsgQ29tbW9uIH0gZnJvbSAnLi9Db21tb24nO1xuXG5leHBvcnQgbmFtZXNwYWNlIFRlbXBsYXRlIHtcbiAgZXhwb3J0IGVudW0gQ2F0ZWdvcmllcyB7XG4gICAgRnVsbCA9ICdmdWxsJyxcbiAgICBCYXNpYyA9ICdiYXNpYycsXG4gICAgTmV3c0xldHRlciA9ICduZXdzbGV0dGVyJyxcbiAgICBFQ29tbWVyY2UgPSAnZS1jb21tZXJjZScsXG4gICAgRXZlbnRzID0gJ2V2ZW50cycsXG4gICAgVHJhdmVsID0gJ3RyYXZlbCcsXG4gICAgU3BvcnRzID0gJ3Nwb3J0cycsXG4gICAgV2VsY29tZSA9ICd3ZWxjb21lJyxcbiAgICBDb250YWN0UHJvcGVydHlVcGRhdGUgPSAnY29udGFjdC1wcm9wZXJ0eS11cGRhdGUnLFxuICAgIFN1cHBvcnQgPSAnc3VwcG9ydCcsXG4gICAgSW52b2ljZSA9ICdpbnZvaWNlJyxcbiAgICBBbm5pdmVyc2FyeSA9ICdhbm5pdmVyc2FyeScsXG4gICAgQWNjb3VudCA9ICdhY2NvdW50JyxcbiAgICBBY3RpdmF0aW9uID0gJ2FjdGl2YXRpb24nXG4gIH1cblxuICBleHBvcnQgZW51bSBDYXRlZ29yaWVzU2VsZWN0aW9uTWV0aG9kIHtcbiAgICBDb250YWluc0FueSA9ICdjb250YWluc2FueScsXG4gICAgQ29udGFpbnNBbGwgPSAnY29udGFpbnNhbGwnLFxuICAgIElzU3ViU2V0ID0gJ2lzc3Vic2V0J1xuICB9XG5cbiAgZXhwb3J0IGVudW0gRWRpdE1vZGUge1xuICAgIERyYWdBbmREcm9wQnVpbGRlciA9IDEsXG4gICAgSFRNTEJ1aWxkZXIgPSAyLFxuICAgIFNhdmVkU2VjdGlvbkJ1aWxkZXIgPSAzLFxuICAgIE1KTUxCdWlsZGVyID0gNFxuICB9XG5cbiAgZXhwb3J0IGVudW0gT3duZXJUeXBlIHtcbiAgICBBcGlLZXkgPSAnYXBpa2V5JyxcbiAgICBVc2VyID0gJ3VzZXInLFxuICAgIEdsb2JhbCA9ICdnbG9iYWwnXG4gIH1cblxuICBleHBvcnQgZW51bSBQdXJwb3NlcyB7XG4gICAgTWFya2V0aW5nID0gJ21hcmtldGluZycsXG4gICAgVHJhbnNhY3Rpb25hbCA9ICd0cmFuc2FjdGlvbmFsJyxcbiAgICBBdXRvbWF0aW9uID0gJ2F1dG9tYXRpb24nXG4gIH1cblxuICBleHBvcnQgZW51bSBQdXJwb3Nlc1NlbGVjdGlvbk1ldGhvZCB7XG4gICAgQ29udGFpbnNBbnkgPSAnY29udGFpbnNhbnknLFxuICAgIENvbnRhaW5zQWxsID0gJ2NvbnRhaW5zYWxsJyxcbiAgICBJc1N1YlNldCA9ICdpc3N1YnNldCdcbiAgfVxuXG4gIGV4cG9ydCBpbnRlcmZhY2UgSGVhZGVycyB7XG4gICAgRnJvbTogc3RyaW5nO1xuICAgIFN1YmplY3Q6IHN0cmluZztcbiAgICAnUmVwbHktdG8nOiBzdHJpbmc7XG4gIH1cblxuICBleHBvcnQgaW50ZXJmYWNlIFRlbXBsYXRlIHtcbiAgICBBdXRob3I6IHN0cmluZztcbiAgICBDYXRlZ29yaWVzOiBDYXRlZ29yaWVzO1xuICAgIENvcHlyaWdodDogc3RyaW5nO1xuICAgIERlc2NyaXB0aW9uOiBzdHJpbmc7XG4gICAgRWRpdE1vZGU6IEVkaXRNb2RlO1xuICAgIElzU3RhcnJlZDogYm9vbGVhbjtcbiAgICBJc1RleHRQYXJ0R2VuZXJhdGlvbkVuYWJsZWQ6IGJvb2xlYW47XG4gICAgTG9jYWxlOiBzdHJpbmc7XG4gICAgTmFtZTogc3RyaW5nO1xuICAgIE93bmVyVHlwZTogT3duZXJUeXBlO1xuICAgIFByZXNldHM6IHN0cmluZztcbiAgICBQdXJwb3NlczogUHVycG9zZXM7XG4gICAgSUQ6IG51bWJlcjtcbiAgICBPd25lcklkOiBudW1iZXI7XG4gICAgUHJldmlld3M6IHN0cmluZztcbiAgICBDcmVhdGVkQXQ6IHN0cmluZztcbiAgICBMYXN0VXBkYXRlZEF0OiBzdHJpbmc7XG4gIH1cblxuICBleHBvcnQgdHlwZSBUZW1wbGF0ZURldGFpbENvbnRlbnQgPSB7XG4gICAgSGVhZGVyczogSGVhZGVycztcbiAgICAnSHRtbC1wYXJ0Jzogc3RyaW5nO1xuICAgICdUZXh0LXBhcnQnOiBzdHJpbmc7XG4gICAgTUpNTENvbnRlbnQ6IHN0cmluZztcbiAgfVxuXG4gIC8vIFJFUVVFU1QgUEFSVFxuICBleHBvcnQgdHlwZSBQb3N0VGVtcGxhdGVCb2R5ID1cbiAgICBQYXJ0aWFsPE9taXQ8VGVtcGxhdGUsICdOYW1lJyB8ICdJRCcgfCAnT3duZXJJZCcgfCAnUHJldmlld3MnIHwgJ0NyZWF0ZWRBdCcgfCAnTGFzdFVwZGF0ZWRBdCc+PiAmXG4gIHtcbiAgICBOYW1lOiBzdHJpbmc7XG4gIH1cblxuICBleHBvcnQgdHlwZSBQdXRUZW1wbGF0ZUJvZHkgPSBQYXJ0aWFsPFBvc3RUZW1wbGF0ZUJvZHk+XG5cbiAgZXhwb3J0IHR5cGUgR2V0VGVtcGxhdGVRdWVyeVBhcmFtcyA9IFBhcnRpYWw8Q29tbW9uLlBhZ2luYXRpb24+ICYge1xuICAgIENhdGVnb3JpZXM/OiBzdHJpbmc7XG4gICAgQ2F0ZWdvcmllc1NlbGVjdGlvbk1ldGhvZD86IENhdGVnb3JpZXNTZWxlY3Rpb25NZXRob2Q7XG4gICAgRWRpdE1vZGU/OiBFZGl0TW9kZTtcbiAgICBOYW1lPzogc3RyaW5nO1xuICAgIE93bmVyVHlwZT86IE93bmVyVHlwZTtcbiAgICBQdXJwb3Nlcz86IFB1cnBvc2VzO1xuICAgIFB1cnBvc2VzU2VsZWN0aW9uTWV0aG9kPzogUHVycG9zZXNTZWxlY3Rpb25NZXRob2Q7XG4gIH1cblxuICBleHBvcnQgdHlwZSBQb3N0VGVtcGxhdGVEZXRhaWxDb250ZW50Qm9keSA9XG4gICAgUGFydGlhbDxPbWl0PFRlbXBsYXRlRGV0YWlsQ29udGVudCwgJ0hlYWRlcnMnPj4gJlxuICB7XG4gICAgSGVhZGVycz86IFBhcnRpYWw8SGVhZGVycz47XG4gIH1cblxuICBleHBvcnQgdHlwZSBQdXRUZW1wbGF0ZURldGFpbENvbnRlbnRCb2R5ID0gUG9zdFRlbXBsYXRlRGV0YWlsQ29udGVudEJvZHlcblxuICAvLyBSRVNQT05TRSBQQVJUXG4gIHR5cGUgVGVtcGxhdGVSZXNwb25zZSA9IENvbW1vbi5SZXNwb25zZTxUZW1wbGF0ZVtdPjtcbiAgdHlwZSBUZW1wbGF0ZURldGFpbENvbnRlbnRSZXNwb25zZSA9IENvbW1vbi5SZXNwb25zZTxUZW1wbGF0ZURldGFpbENvbnRlbnRbXT47XG5cbiAgZXhwb3J0IHR5cGUgUG9zdFRlbXBsYXRlUmVzcG9uc2UgPSBUZW1wbGF0ZVJlc3BvbnNlXG4gIGV4cG9ydCB0eXBlIFB1dFRlbXBsYXRlUmVzcG9uc2UgPSBUZW1wbGF0ZVJlc3BvbnNlXG4gIGV4cG9ydCB0eXBlIEdldFRlbXBsYXRlUmVzcG9uc2UgPSBUZW1wbGF0ZVJlc3BvbnNlXG5cbiAgZXhwb3J0IHR5cGUgUG9zdFRlbXBsYXRlRGV0YWlsQ29udGVudFJlc3BvbnNlID0gVGVtcGxhdGVEZXRhaWxDb250ZW50UmVzcG9uc2VcbiAgZXhwb3J0IHR5cGUgUHV0VGVtcGxhdGVEZXRhaWxDb250ZW50UmVzcG9uc2UgPSBUZW1wbGF0ZURldGFpbENvbnRlbnRSZXNwb25zZVxuICBleHBvcnQgdHlwZSBHZXRUZW1wbGF0ZURldGFpbENvbnRlbnRSZXNwb25zZSA9IFRlbXBsYXRlRGV0YWlsQ29udGVudFJlc3BvbnNlXG59XG4iLCJpbXBvcnQgeyBDb21tb24gfSBmcm9tICcuL0NvbW1vbic7XG5cbmV4cG9ydCBuYW1lc3BhY2UgV2ViaG9vayB7XG4gIGV4cG9ydCBlbnVtIEV2ZW50VHlwZSB7XG4gICAgT3BlbiA9ICdvcGVuJyxcbiAgICBDbGljayA9ICdjbGljaycsXG4gICAgQm91bmNlID0gJ2JvdW5jZScsXG4gICAgU3BhbSA9ICdzcGFtJyxcbiAgICBCbG9ja2VkID0gJ2Jsb2NrZWQnLFxuICAgIFVuU3ViID0gJ3Vuc3ViJyxcbiAgICBTZW50ID0gJ3NlbnQnLFxuICB9XG5cbiAgZXhwb3J0IGVudW0gRXZlbnRUeXBlVmFsdWUge1xuICAgIENsaWNrID0gMSxcbiAgICBCb3VuY2UgPSAyLFxuICAgIFNwYW0gPSAzLFxuICAgIEJsb2NrZWQgPSA0LFxuICAgIFVuc3Vic2NyaWJlID0gNSxcbiAgICBPcGVuID0gNixcbiAgICBTZW50ID0gNyxcbiAgfVxuXG4gIGV4cG9ydCBlbnVtIFN0YXR1cyB7XG4gICAgRGVhZCA9ICdkZWFkJyxcbiAgICBBbGl2ZSA9ICdhbGl2ZSdcbiAgfVxuXG4gIGV4cG9ydCB0eXBlIFZlcnNpb24gPSAxIHwgMjtcblxuICBleHBvcnQgaW50ZXJmYWNlIEV2ZW50Q2FsbGJhY2tVcmwge1xuICAgIElEOiBudW1iZXI7XG4gICAgRXZlbnRUeXBlOiBFdmVudFR5cGU7XG4gICAgSXNCYWNrdXA6IGJvb2xlYW47XG4gICAgU3RhdHVzOiBTdGF0dXM7XG4gICAgQVBJS2V5SUQ6IG51bWJlcjtcbiAgICBWZXJzaW9uOiBWZXJzaW9uO1xuICAgIFVybDogc3RyaW5nO1xuICB9XG5cbiAgLy8gUkVRVUVTVCBQQVJUXG4gIGV4cG9ydCB0eXBlIFBvc3RFdmVudENhbGxiYWNrVXJsQm9keSA9IHtcbiAgICBVcmw6IHN0cmluZztcbiAgICBFdmVudFR5cGU/OiBFdmVudFR5cGU7XG4gICAgSXNCYWNrdXA/OiBib29sZWFuO1xuICAgIFN0YXR1cz86IFN0YXR1cztcbiAgfVxuXG4gIGV4cG9ydCB0eXBlIFB1dEV2ZW50Q2FsbGJhY2tVcmxCb2R5ID0gUGFydGlhbDxQb3N0RXZlbnRDYWxsYmFja1VybEJvZHk+XG5cbiAgZXhwb3J0IHR5cGUgR2V0RXZlbnRDYWxsYmFja1VybFF1ZXJ5UGFyYW1zID0gUGFydGlhbDxDb21tb24uUGFnaW5hdGlvbj4gJiB7XG4gICAgQmFja3VwPzogYm9vbGVhbjtcbiAgICBFdmVudFR5cGU/OiBFdmVudFR5cGVWYWx1ZTtcbiAgICBTdGF0dXM/OiBzdHJpbmc7XG4gICAgVmVyc2lvbj86IFZlcnNpb247XG4gIH1cblxuICAvLyBSRVNQT05TRSBQQVJUXG4gIHR5cGUgRXZlbnRDYWxsYmFja1VybFJlc3BvbnNlID0ge1xuICAgIENvdW50OiBudW1iZXI7XG4gICAgVG90YWw6IG51bWJlcjtcbiAgICBEYXRhOiBFdmVudENhbGxiYWNrVXJsW107XG4gIH07XG5cbiAgZXhwb3J0IHR5cGUgUG9zdEV2ZW50Q2FsbGJhY2tVcmxSZXNwb25zZSA9IEV2ZW50Q2FsbGJhY2tVcmxSZXNwb25zZVxuICBleHBvcnQgdHlwZSBQdXRFdmVudENhbGxiYWNrVXJsUmVzcG9uc2UgPSBFdmVudENhbGxiYWNrVXJsUmVzcG9uc2VcbiAgZXhwb3J0IHR5cGUgR2V0RXZlbnRDYWxsYmFja1VybFJlc3BvbnNlID0gRXZlbnRDYWxsYmFja1VybFJlc3BvbnNlXG59XG4iLCIvLyBDT01NT05cbmV4cG9ydCB7IExpYnJhcnlSZXNwb25zZSwgTGlicmFyeUxvY2FsUmVzcG9uc2UgfSBmcm9tICcuL0xpYnJhcnlSZXNwb25zZSc7XG5leHBvcnQgeyBDb21tb24gfSBmcm9tICcuL0NvbW1vbic7XG5cbi8vIFNFTkRcbmV4cG9ydCB7XG4gIFNlbmRFbWFpbFYzLFxuICBTZW5kRW1haWxWM18xLFxufSBmcm9tICcuL1NlbmRFbWFpbCc7XG5cbi8vIEFQSVxuZXhwb3J0IHsgTWVzc2FnZSB9IGZyb20gJy4vTWVzc2FnZSc7XG5leHBvcnQge1xuICBDb250YWN0LFxuICBDb250YWN0TGlzdCxcbiAgQnVsa0NvbnRhY3RNYW5hZ2VtZW50LFxuICBDb250YWN0UHJvcGVydGllcyxcbiAgQ29udGFjdFN1YnNjcmlwdGlvbixcbiAgQ29udGFjdFZlcmlmaWNhdGlvbixcbn0gZnJvbSAnLi9Db250YWN0JztcbmV4cG9ydCB7XG4gIERyYWZ0Q2FtcGFpZ24sXG4gIFNlbnRDYW1wYWlnbixcbn0gZnJvbSAnLi9DYW1wYWlnbic7XG5leHBvcnQgeyBTZWdtZW50YXRpb24gfSBmcm9tICcuL1NlZ21lbnRhdGlvbic7XG5leHBvcnQgeyBUZW1wbGF0ZSB9IGZyb20gJy4vVGVtcGxhdGUnO1xuZXhwb3J0IHsgU3RhdGlzdGljIH0gZnJvbSAnLi9TdGF0aXN0aWMnO1xuZXhwb3J0IHsgTWVzc2FnZUV2ZW50IH0gZnJvbSAnLi9NZXNzYWdlRXZlbnQnO1xuZXhwb3J0IHsgV2ViaG9vayB9IGZyb20gJy4vV2ViaG9vayc7XG5leHBvcnQgeyBQYXJzZSB9IGZyb20gJy4vUGFyc2UnO1xuZXhwb3J0IHtcbiAgU2VuZGVyLFxuICBNZXRhc2VuZGVyLFxuICBETlMsXG59IGZyb20gJy4vU2VuZGVyQWRkcmVzc0FuZERvbWFpbic7XG5leHBvcnQge1xuICBBUElLZXlDb25maWd1cmF0aW9uLFxuICBBY2NvdW50U2V0dGluZyxcbn0gZnJvbSAnLi9TZXR0aW5nJztcblxuLy8gU01TXG5leHBvcnQgeyBTZW5kTWVzc2FnZSB9IGZyb20gJy4vU2VuZE1lc3NhZ2UnO1xuZXhwb3J0IHsgU01TTWVzc2FnZSB9IGZyb20gJy4vU01TTWVzc2FnZSc7XG4iLCJpbXBvcnQgaXNOaWwgZnJvbSAnLi9pc05pbCc7XG5pbXBvcnQgaXNOdWxsIGZyb20gJy4vaXNOdWxsJztcbmltcG9ydCBpc1VuZGVmaW5lZCBmcm9tICcuL2lzVW5kZWZpbmVkJztcbmltcG9ydCBpc1B1cmVPYmplY3QgZnJvbSAnLi9pc1B1cmVPYmplY3QnO1xuaW1wb3J0IHNldFZhbHVlSWZOb3ROaWwgZnJvbSAnLi9zZXRWYWx1ZUlmTm90TmlsJztcblxuZXhwb3J0IHtcbiAgaXNOaWwsXG4gIGlzTnVsbCxcbiAgaXNVbmRlZmluZWQsXG4gIGlzUHVyZU9iamVjdCxcbiAgc2V0VmFsdWVJZk5vdE5pbCxcbn07XG4iLCIvKmV4dGVybmFsIG1vZHVsZXMqL1xuLyp0eXBlcyovXG4vKnV0aWxzKi9cbmltcG9ydCBpc051bGwgZnJvbSAnLi9pc051bGwnO1xuaW1wb3J0IGlzVW5kZWZpbmVkIGZyb20gJy4vaXNVbmRlZmluZWQnO1xuLypsaWIqL1xuLypvdGhlciovXG5cbmZ1bmN0aW9uIGlzTmlsKHZhbHVlOiB1bmtub3duKTogYm9vbGVhbiB7XG4gIHJldHVybiBpc1VuZGVmaW5lZCh2YWx1ZSkgfHwgaXNOdWxsKHZhbHVlKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgaXNOaWw7XG4iLCIvKmV4dGVybmFsIG1vZHVsZXMqL1xuLyp0eXBlcyovXG4vKnV0aWxzKi9cbi8qbGliKi9cbi8qb3RoZXIqL1xuXG5mdW5jdGlvbiBpc051bGwodmFsdWU6IHVua25vd24pOiB2YWx1ZSBpcyBudWxsIHtcbiAgcmV0dXJuIHZhbHVlID09PSBudWxsO1xufVxuXG5leHBvcnQgZGVmYXVsdCBpc051bGw7XG4iLCIvKmV4dGVybmFsIG1vZHVsZXMqL1xuLyp0eXBlcyovXG4vKnV0aWxzKi9cbi8qbGliKi9cbi8qb3RoZXIqL1xuXG5mdW5jdGlvbiBpc1B1cmVPYmplY3QodmFsdWU6IHVua25vd24pOiBib29sZWFuIHtcbiAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCdcbiAgICAmJiB2YWx1ZSAhPT0gbnVsbFxuICAgICYmIChPYmplY3QuZ2V0UHJvdG90eXBlT2YodmFsdWUpID09PSBPYmplY3QucHJvdG90eXBlIHx8IE9iamVjdC5nZXRQcm90b3R5cGVPZih2YWx1ZSkgPT09IG51bGwpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBpc1B1cmVPYmplY3Q7XG4iLCIvKmV4dGVybmFsIG1vZHVsZXMqL1xuLyp0eXBlcyovXG4vKnV0aWxzKi9cbi8qbGliKi9cbi8qb3RoZXIqL1xuXG5mdW5jdGlvbiBpc1VuZGVmaW5lZCh2YWx1ZTogdW5rbm93bik6IHZhbHVlIGlzIHVuZGVmaW5lZCB7XG4gIHJldHVybiB2YWx1ZSA9PT0gdW5kZWZpbmVkO1xufVxuXG5leHBvcnQgZGVmYXVsdCBpc1VuZGVmaW5lZDtcbiIsIi8qZXh0ZXJuYWwgbW9kdWxlcyovXG4vKnR5cGVzKi9cbmltcG9ydCB7IFRPYmplY3QgfSBmcm9tICcuLi90eXBlcyc7XG4vKnV0aWxzKi9cbmltcG9ydCBpc05pbCBmcm9tICcuL2lzTmlsJztcbmltcG9ydCBpc051bGwgZnJvbSAnLi9pc051bGwnO1xuLypsaWIqL1xuLypvdGhlciovXG5cbmZ1bmN0aW9uIHNldFZhbHVlSWZOb3ROaWwoXG4gIHRhcmdldE9iamVjdDogVE9iamVjdC5Vbmtub3duUmVjLFxuICBwYXRoOiBzdHJpbmcsXG4gIHZhbHVlOiB1bmtub3duLFxuKTogdm9pZCB7XG4gIGlmICh0eXBlb2YgdGFyZ2V0T2JqZWN0ICE9PSAnb2JqZWN0JyB8fCBpc051bGwodGFyZ2V0T2JqZWN0KSkge1xuICAgIHRocm93IEVycm9yKCdBcmd1bWVudCBcInRhcmdldE9iamVjdFwiIGlzIG5vdCBvYmplY3QnKTtcbiAgfVxuXG4gIGlmICghcGF0aCkge1xuICAgIHRocm93IEVycm9yKCdBcmd1bWVudCBcInBhdGhcIiBpcyByZXF1aXJlZCcpO1xuICB9XG5cbiAgaWYgKCFpc05pbCh2YWx1ZSkpIHtcbiAgICB0YXJnZXRPYmplY3RbcGF0aF0gPSB2YWx1ZTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBzZXRWYWx1ZUlmTm90TmlsO1xuIiwiOyhmdW5jdGlvbiAoZ2xvYmFsT2JqZWN0KSB7XHJcbiAgJ3VzZSBzdHJpY3QnO1xyXG5cclxuLypcclxuICogICAgICBiaWdudW1iZXIuanMgdjkuMC4xXHJcbiAqICAgICAgQSBKYXZhU2NyaXB0IGxpYnJhcnkgZm9yIGFyYml0cmFyeS1wcmVjaXNpb24gYXJpdGhtZXRpYy5cclxuICogICAgICBodHRwczovL2dpdGh1Yi5jb20vTWlrZU1jbC9iaWdudW1iZXIuanNcclxuICogICAgICBDb3B5cmlnaHQgKGMpIDIwMjAgTWljaGFlbCBNY2xhdWdobGluIDxNOGNoODhsQGdtYWlsLmNvbT5cclxuICogICAgICBNSVQgTGljZW5zZWQuXHJcbiAqXHJcbiAqICAgICAgQmlnTnVtYmVyLnByb3RvdHlwZSBtZXRob2RzICAgICB8ICBCaWdOdW1iZXIgbWV0aG9kc1xyXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxyXG4gKiAgICAgIGFic29sdXRlVmFsdWUgICAgICAgICAgICBhYnMgICAgfCAgY2xvbmVcclxuICogICAgICBjb21wYXJlZFRvICAgICAgICAgICAgICAgICAgICAgIHwgIGNvbmZpZyAgICAgICAgICAgICAgIHNldFxyXG4gKiAgICAgIGRlY2ltYWxQbGFjZXMgICAgICAgICAgICBkcCAgICAgfCAgICAgIERFQ0lNQUxfUExBQ0VTXHJcbiAqICAgICAgZGl2aWRlZEJ5ICAgICAgICAgICAgICAgIGRpdiAgICB8ICAgICAgUk9VTkRJTkdfTU9ERVxyXG4gKiAgICAgIGRpdmlkZWRUb0ludGVnZXJCeSAgICAgICBpZGl2ICAgfCAgICAgIEVYUE9ORU5USUFMX0FUXHJcbiAqICAgICAgZXhwb25lbnRpYXRlZEJ5ICAgICAgICAgIHBvdyAgICB8ICAgICAgUkFOR0VcclxuICogICAgICBpbnRlZ2VyVmFsdWUgICAgICAgICAgICAgICAgICAgIHwgICAgICBDUllQVE9cclxuICogICAgICBpc0VxdWFsVG8gICAgICAgICAgICAgICAgZXEgICAgIHwgICAgICBNT0RVTE9fTU9ERVxyXG4gKiAgICAgIGlzRmluaXRlICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgIFBPV19QUkVDSVNJT05cclxuICogICAgICBpc0dyZWF0ZXJUaGFuICAgICAgICAgICAgZ3QgICAgIHwgICAgICBGT1JNQVRcclxuICogICAgICBpc0dyZWF0ZXJUaGFuT3JFcXVhbFRvICAgZ3RlICAgIHwgICAgICBBTFBIQUJFVFxyXG4gKiAgICAgIGlzSW50ZWdlciAgICAgICAgICAgICAgICAgICAgICAgfCAgaXNCaWdOdW1iZXJcclxuICogICAgICBpc0xlc3NUaGFuICAgICAgICAgICAgICAgbHQgICAgIHwgIG1heGltdW0gICAgICAgICAgICAgIG1heFxyXG4gKiAgICAgIGlzTGVzc1RoYW5PckVxdWFsVG8gICAgICBsdGUgICAgfCAgbWluaW11bSAgICAgICAgICAgICAgbWluXHJcbiAqICAgICAgaXNOYU4gICAgICAgICAgICAgICAgICAgICAgICAgICB8ICByYW5kb21cclxuICogICAgICBpc05lZ2F0aXZlICAgICAgICAgICAgICAgICAgICAgIHwgIHN1bVxyXG4gKiAgICAgIGlzUG9zaXRpdmUgICAgICAgICAgICAgICAgICAgICAgfFxyXG4gKiAgICAgIGlzWmVybyAgICAgICAgICAgICAgICAgICAgICAgICAgfFxyXG4gKiAgICAgIG1pbnVzICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxyXG4gKiAgICAgIG1vZHVsbyAgICAgICAgICAgICAgICAgICBtb2QgICAgfFxyXG4gKiAgICAgIG11bHRpcGxpZWRCeSAgICAgICAgICAgICB0aW1lcyAgfFxyXG4gKiAgICAgIG5lZ2F0ZWQgICAgICAgICAgICAgICAgICAgICAgICAgfFxyXG4gKiAgICAgIHBsdXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxyXG4gKiAgICAgIHByZWNpc2lvbiAgICAgICAgICAgICAgICBzZCAgICAgfFxyXG4gKiAgICAgIHNoaWZ0ZWRCeSAgICAgICAgICAgICAgICAgICAgICAgfFxyXG4gKiAgICAgIHNxdWFyZVJvb3QgICAgICAgICAgICAgICBzcXJ0ICAgfFxyXG4gKiAgICAgIHRvRXhwb25lbnRpYWwgICAgICAgICAgICAgICAgICAgfFxyXG4gKiAgICAgIHRvRml4ZWQgICAgICAgICAgICAgICAgICAgICAgICAgfFxyXG4gKiAgICAgIHRvRm9ybWF0ICAgICAgICAgICAgICAgICAgICAgICAgfFxyXG4gKiAgICAgIHRvRnJhY3Rpb24gICAgICAgICAgICAgICAgICAgICAgfFxyXG4gKiAgICAgIHRvSlNPTiAgICAgICAgICAgICAgICAgICAgICAgICAgfFxyXG4gKiAgICAgIHRvTnVtYmVyICAgICAgICAgICAgICAgICAgICAgICAgfFxyXG4gKiAgICAgIHRvUHJlY2lzaW9uICAgICAgICAgICAgICAgICAgICAgfFxyXG4gKiAgICAgIHRvU3RyaW5nICAgICAgICAgICAgICAgICAgICAgICAgfFxyXG4gKiAgICAgIHZhbHVlT2YgICAgICAgICAgICAgICAgICAgICAgICAgfFxyXG4gKlxyXG4gKi9cclxuXHJcblxyXG4gIHZhciBCaWdOdW1iZXIsXHJcbiAgICBpc051bWVyaWMgPSAvXi0/KD86XFxkKyg/OlxcLlxcZCopP3xcXC5cXGQrKSg/OmVbKy1dP1xcZCspPyQvaSxcclxuICAgIG1hdGhjZWlsID0gTWF0aC5jZWlsLFxyXG4gICAgbWF0aGZsb29yID0gTWF0aC5mbG9vcixcclxuXHJcbiAgICBiaWdudW1iZXJFcnJvciA9ICdbQmlnTnVtYmVyIEVycm9yXSAnLFxyXG4gICAgdG9vTWFueURpZ2l0cyA9IGJpZ251bWJlckVycm9yICsgJ051bWJlciBwcmltaXRpdmUgaGFzIG1vcmUgdGhhbiAxNSBzaWduaWZpY2FudCBkaWdpdHM6ICcsXHJcblxyXG4gICAgQkFTRSA9IDFlMTQsXHJcbiAgICBMT0dfQkFTRSA9IDE0LFxyXG4gICAgTUFYX1NBRkVfSU5URUdFUiA9IDB4MWZmZmZmZmZmZmZmZmYsICAgICAgICAgLy8gMl41MyAtIDFcclxuICAgIC8vIE1BWF9JTlQzMiA9IDB4N2ZmZmZmZmYsICAgICAgICAgICAgICAgICAgIC8vIDJeMzEgLSAxXHJcbiAgICBQT1dTX1RFTiA9IFsxLCAxMCwgMTAwLCAxZTMsIDFlNCwgMWU1LCAxZTYsIDFlNywgMWU4LCAxZTksIDFlMTAsIDFlMTEsIDFlMTIsIDFlMTNdLFxyXG4gICAgU1FSVF9CQVNFID0gMWU3LFxyXG5cclxuICAgIC8vIEVESVRBQkxFXHJcbiAgICAvLyBUaGUgbGltaXQgb24gdGhlIHZhbHVlIG9mIERFQ0lNQUxfUExBQ0VTLCBUT19FWFBfTkVHLCBUT19FWFBfUE9TLCBNSU5fRVhQLCBNQVhfRVhQLCBhbmRcclxuICAgIC8vIHRoZSBhcmd1bWVudHMgdG8gdG9FeHBvbmVudGlhbCwgdG9GaXhlZCwgdG9Gb3JtYXQsIGFuZCB0b1ByZWNpc2lvbi5cclxuICAgIE1BWCA9IDFFOTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIDAgdG8gTUFYX0lOVDMyXHJcblxyXG5cclxuICAvKlxyXG4gICAqIENyZWF0ZSBhbmQgcmV0dXJuIGEgQmlnTnVtYmVyIGNvbnN0cnVjdG9yLlxyXG4gICAqL1xyXG4gIGZ1bmN0aW9uIGNsb25lKGNvbmZpZ09iamVjdCkge1xyXG4gICAgdmFyIGRpdiwgY29udmVydEJhc2UsIHBhcnNlTnVtZXJpYyxcclxuICAgICAgUCA9IEJpZ051bWJlci5wcm90b3R5cGUgPSB7IGNvbnN0cnVjdG9yOiBCaWdOdW1iZXIsIHRvU3RyaW5nOiBudWxsLCB2YWx1ZU9mOiBudWxsIH0sXHJcbiAgICAgIE9ORSA9IG5ldyBCaWdOdW1iZXIoMSksXHJcblxyXG5cclxuICAgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBFRElUQUJMRSBDT05GSUcgREVGQVVMVFMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuXHJcbiAgICAgIC8vIFRoZSBkZWZhdWx0IHZhbHVlcyBiZWxvdyBtdXN0IGJlIGludGVnZXJzIHdpdGhpbiB0aGUgaW5jbHVzaXZlIHJhbmdlcyBzdGF0ZWQuXHJcbiAgICAgIC8vIFRoZSB2YWx1ZXMgY2FuIGFsc28gYmUgY2hhbmdlZCBhdCBydW4tdGltZSB1c2luZyBCaWdOdW1iZXIuc2V0LlxyXG5cclxuICAgICAgLy8gVGhlIG1heGltdW0gbnVtYmVyIG9mIGRlY2ltYWwgcGxhY2VzIGZvciBvcGVyYXRpb25zIGludm9sdmluZyBkaXZpc2lvbi5cclxuICAgICAgREVDSU1BTF9QTEFDRVMgPSAyMCwgICAgICAgICAgICAgICAgICAgICAvLyAwIHRvIE1BWFxyXG5cclxuICAgICAgLy8gVGhlIHJvdW5kaW5nIG1vZGUgdXNlZCB3aGVuIHJvdW5kaW5nIHRvIHRoZSBhYm92ZSBkZWNpbWFsIHBsYWNlcywgYW5kIHdoZW4gdXNpbmdcclxuICAgICAgLy8gdG9FeHBvbmVudGlhbCwgdG9GaXhlZCwgdG9Gb3JtYXQgYW5kIHRvUHJlY2lzaW9uLCBhbmQgcm91bmQgKGRlZmF1bHQgdmFsdWUpLlxyXG4gICAgICAvLyBVUCAgICAgICAgIDAgQXdheSBmcm9tIHplcm8uXHJcbiAgICAgIC8vIERPV04gICAgICAgMSBUb3dhcmRzIHplcm8uXHJcbiAgICAgIC8vIENFSUwgICAgICAgMiBUb3dhcmRzICtJbmZpbml0eS5cclxuICAgICAgLy8gRkxPT1IgICAgICAzIFRvd2FyZHMgLUluZmluaXR5LlxyXG4gICAgICAvLyBIQUxGX1VQICAgIDQgVG93YXJkcyBuZWFyZXN0IG5laWdoYm91ci4gSWYgZXF1aWRpc3RhbnQsIHVwLlxyXG4gICAgICAvLyBIQUxGX0RPV04gIDUgVG93YXJkcyBuZWFyZXN0IG5laWdoYm91ci4gSWYgZXF1aWRpc3RhbnQsIGRvd24uXHJcbiAgICAgIC8vIEhBTEZfRVZFTiAgNiBUb3dhcmRzIG5lYXJlc3QgbmVpZ2hib3VyLiBJZiBlcXVpZGlzdGFudCwgdG93YXJkcyBldmVuIG5laWdoYm91ci5cclxuICAgICAgLy8gSEFMRl9DRUlMICA3IFRvd2FyZHMgbmVhcmVzdCBuZWlnaGJvdXIuIElmIGVxdWlkaXN0YW50LCB0b3dhcmRzICtJbmZpbml0eS5cclxuICAgICAgLy8gSEFMRl9GTE9PUiA4IFRvd2FyZHMgbmVhcmVzdCBuZWlnaGJvdXIuIElmIGVxdWlkaXN0YW50LCB0b3dhcmRzIC1JbmZpbml0eS5cclxuICAgICAgUk9VTkRJTkdfTU9ERSA9IDQsICAgICAgICAgICAgICAgICAgICAgICAvLyAwIHRvIDhcclxuXHJcbiAgICAgIC8vIEVYUE9ORU5USUFMX0FUIDogW1RPX0VYUF9ORUcgLCBUT19FWFBfUE9TXVxyXG5cclxuICAgICAgLy8gVGhlIGV4cG9uZW50IHZhbHVlIGF0IGFuZCBiZW5lYXRoIHdoaWNoIHRvU3RyaW5nIHJldHVybnMgZXhwb25lbnRpYWwgbm90YXRpb24uXHJcbiAgICAgIC8vIE51bWJlciB0eXBlOiAtN1xyXG4gICAgICBUT19FWFBfTkVHID0gLTcsICAgICAgICAgICAgICAgICAgICAgICAgIC8vIDAgdG8gLU1BWFxyXG5cclxuICAgICAgLy8gVGhlIGV4cG9uZW50IHZhbHVlIGF0IGFuZCBhYm92ZSB3aGljaCB0b1N0cmluZyByZXR1cm5zIGV4cG9uZW50aWFsIG5vdGF0aW9uLlxyXG4gICAgICAvLyBOdW1iZXIgdHlwZTogMjFcclxuICAgICAgVE9fRVhQX1BPUyA9IDIxLCAgICAgICAgICAgICAgICAgICAgICAgICAvLyAwIHRvIE1BWFxyXG5cclxuICAgICAgLy8gUkFOR0UgOiBbTUlOX0VYUCwgTUFYX0VYUF1cclxuXHJcbiAgICAgIC8vIFRoZSBtaW5pbXVtIGV4cG9uZW50IHZhbHVlLCBiZW5lYXRoIHdoaWNoIHVuZGVyZmxvdyB0byB6ZXJvIG9jY3Vycy5cclxuICAgICAgLy8gTnVtYmVyIHR5cGU6IC0zMjQgICg1ZS0zMjQpXHJcbiAgICAgIE1JTl9FWFAgPSAtMWU3LCAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gLTEgdG8gLU1BWFxyXG5cclxuICAgICAgLy8gVGhlIG1heGltdW0gZXhwb25lbnQgdmFsdWUsIGFib3ZlIHdoaWNoIG92ZXJmbG93IHRvIEluZmluaXR5IG9jY3Vycy5cclxuICAgICAgLy8gTnVtYmVyIHR5cGU6ICAzMDggICgxLjc5NzY5MzEzNDg2MjMxNTdlKzMwOClcclxuICAgICAgLy8gRm9yIE1BWF9FWFAgPiAxZTcsIGUuZy4gbmV3IEJpZ051bWJlcignMWUxMDAwMDAwMDAnKS5wbHVzKDEpIG1heSBiZSBzbG93LlxyXG4gICAgICBNQVhfRVhQID0gMWU3LCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIDEgdG8gTUFYXHJcblxyXG4gICAgICAvLyBXaGV0aGVyIHRvIHVzZSBjcnlwdG9ncmFwaGljYWxseS1zZWN1cmUgcmFuZG9tIG51bWJlciBnZW5lcmF0aW9uLCBpZiBhdmFpbGFibGUuXHJcbiAgICAgIENSWVBUTyA9IGZhbHNlLCAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdHJ1ZSBvciBmYWxzZVxyXG5cclxuICAgICAgLy8gVGhlIG1vZHVsbyBtb2RlIHVzZWQgd2hlbiBjYWxjdWxhdGluZyB0aGUgbW9kdWx1czogYSBtb2Qgbi5cclxuICAgICAgLy8gVGhlIHF1b3RpZW50IChxID0gYSAvIG4pIGlzIGNhbGN1bGF0ZWQgYWNjb3JkaW5nIHRvIHRoZSBjb3JyZXNwb25kaW5nIHJvdW5kaW5nIG1vZGUuXHJcbiAgICAgIC8vIFRoZSByZW1haW5kZXIgKHIpIGlzIGNhbGN1bGF0ZWQgYXM6IHIgPSBhIC0gbiAqIHEuXHJcbiAgICAgIC8vXHJcbiAgICAgIC8vIFVQICAgICAgICAwIFRoZSByZW1haW5kZXIgaXMgcG9zaXRpdmUgaWYgdGhlIGRpdmlkZW5kIGlzIG5lZ2F0aXZlLCBlbHNlIGlzIG5lZ2F0aXZlLlxyXG4gICAgICAvLyBET1dOICAgICAgMSBUaGUgcmVtYWluZGVyIGhhcyB0aGUgc2FtZSBzaWduIGFzIHRoZSBkaXZpZGVuZC5cclxuICAgICAgLy8gICAgICAgICAgICAgVGhpcyBtb2R1bG8gbW9kZSBpcyBjb21tb25seSBrbm93biBhcyAndHJ1bmNhdGVkIGRpdmlzaW9uJyBhbmQgaXNcclxuICAgICAgLy8gICAgICAgICAgICAgZXF1aXZhbGVudCB0byAoYSAlIG4pIGluIEphdmFTY3JpcHQuXHJcbiAgICAgIC8vIEZMT09SICAgICAzIFRoZSByZW1haW5kZXIgaGFzIHRoZSBzYW1lIHNpZ24gYXMgdGhlIGRpdmlzb3IgKFB5dGhvbiAlKS5cclxuICAgICAgLy8gSEFMRl9FVkVOIDYgVGhpcyBtb2R1bG8gbW9kZSBpbXBsZW1lbnRzIHRoZSBJRUVFIDc1NCByZW1haW5kZXIgZnVuY3Rpb24uXHJcbiAgICAgIC8vIEVVQ0xJRCAgICA5IEV1Y2xpZGlhbiBkaXZpc2lvbi4gcSA9IHNpZ24obikgKiBmbG9vcihhIC8gYWJzKG4pKS5cclxuICAgICAgLy8gICAgICAgICAgICAgVGhlIHJlbWFpbmRlciBpcyBhbHdheXMgcG9zaXRpdmUuXHJcbiAgICAgIC8vXHJcbiAgICAgIC8vIFRoZSB0cnVuY2F0ZWQgZGl2aXNpb24sIGZsb29yZWQgZGl2aXNpb24sIEV1Y2xpZGlhbiBkaXZpc2lvbiBhbmQgSUVFRSA3NTQgcmVtYWluZGVyXHJcbiAgICAgIC8vIG1vZGVzIGFyZSBjb21tb25seSB1c2VkIGZvciB0aGUgbW9kdWx1cyBvcGVyYXRpb24uXHJcbiAgICAgIC8vIEFsdGhvdWdoIHRoZSBvdGhlciByb3VuZGluZyBtb2RlcyBjYW4gYWxzbyBiZSB1c2VkLCB0aGV5IG1heSBub3QgZ2l2ZSB1c2VmdWwgcmVzdWx0cy5cclxuICAgICAgTU9EVUxPX01PREUgPSAxLCAgICAgICAgICAgICAgICAgICAgICAgICAvLyAwIHRvIDlcclxuXHJcbiAgICAgIC8vIFRoZSBtYXhpbXVtIG51bWJlciBvZiBzaWduaWZpY2FudCBkaWdpdHMgb2YgdGhlIHJlc3VsdCBvZiB0aGUgZXhwb25lbnRpYXRlZEJ5IG9wZXJhdGlvbi5cclxuICAgICAgLy8gSWYgUE9XX1BSRUNJU0lPTiBpcyAwLCB0aGVyZSB3aWxsIGJlIHVubGltaXRlZCBzaWduaWZpY2FudCBkaWdpdHMuXHJcbiAgICAgIFBPV19QUkVDSVNJT04gPSAwLCAgICAgICAgICAgICAgICAgICAgLy8gMCB0byBNQVhcclxuXHJcbiAgICAgIC8vIFRoZSBmb3JtYXQgc3BlY2lmaWNhdGlvbiB1c2VkIGJ5IHRoZSBCaWdOdW1iZXIucHJvdG90eXBlLnRvRm9ybWF0IG1ldGhvZC5cclxuICAgICAgRk9STUFUID0ge1xyXG4gICAgICAgIHByZWZpeDogJycsXHJcbiAgICAgICAgZ3JvdXBTaXplOiAzLFxyXG4gICAgICAgIHNlY29uZGFyeUdyb3VwU2l6ZTogMCxcclxuICAgICAgICBncm91cFNlcGFyYXRvcjogJywnLFxyXG4gICAgICAgIGRlY2ltYWxTZXBhcmF0b3I6ICcuJyxcclxuICAgICAgICBmcmFjdGlvbkdyb3VwU2l6ZTogMCxcclxuICAgICAgICBmcmFjdGlvbkdyb3VwU2VwYXJhdG9yOiAnXFx4QTAnLCAgICAgIC8vIG5vbi1icmVha2luZyBzcGFjZVxyXG4gICAgICAgIHN1ZmZpeDogJydcclxuICAgICAgfSxcclxuXHJcbiAgICAgIC8vIFRoZSBhbHBoYWJldCB1c2VkIGZvciBiYXNlIGNvbnZlcnNpb24uIEl0IG11c3QgYmUgYXQgbGVhc3QgMiBjaGFyYWN0ZXJzIGxvbmcsIHdpdGggbm8gJysnLFxyXG4gICAgICAvLyAnLScsICcuJywgd2hpdGVzcGFjZSwgb3IgcmVwZWF0ZWQgY2hhcmFjdGVyLlxyXG4gICAgICAvLyAnMDEyMzQ1Njc4OWFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6QUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVokXydcclxuICAgICAgQUxQSEFCRVQgPSAnMDEyMzQ1Njc4OWFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6JztcclxuXHJcblxyXG4gICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcblxyXG4gICAgLy8gQ09OU1RSVUNUT1JcclxuXHJcblxyXG4gICAgLypcclxuICAgICAqIFRoZSBCaWdOdW1iZXIgY29uc3RydWN0b3IgYW5kIGV4cG9ydGVkIGZ1bmN0aW9uLlxyXG4gICAgICogQ3JlYXRlIGFuZCByZXR1cm4gYSBuZXcgaW5zdGFuY2Ugb2YgYSBCaWdOdW1iZXIgb2JqZWN0LlxyXG4gICAgICpcclxuICAgICAqIHYge251bWJlcnxzdHJpbmd8QmlnTnVtYmVyfSBBIG51bWVyaWMgdmFsdWUuXHJcbiAgICAgKiBbYl0ge251bWJlcn0gVGhlIGJhc2Ugb2Ygdi4gSW50ZWdlciwgMiB0byBBTFBIQUJFVC5sZW5ndGggaW5jbHVzaXZlLlxyXG4gICAgICovXHJcbiAgICBmdW5jdGlvbiBCaWdOdW1iZXIodiwgYikge1xyXG4gICAgICB2YXIgYWxwaGFiZXQsIGMsIGNhc2VDaGFuZ2VkLCBlLCBpLCBpc051bSwgbGVuLCBzdHIsXHJcbiAgICAgICAgeCA9IHRoaXM7XHJcblxyXG4gICAgICAvLyBFbmFibGUgY29uc3RydWN0b3IgY2FsbCB3aXRob3V0IGBuZXdgLlxyXG4gICAgICBpZiAoISh4IGluc3RhbmNlb2YgQmlnTnVtYmVyKSkgcmV0dXJuIG5ldyBCaWdOdW1iZXIodiwgYik7XHJcblxyXG4gICAgICBpZiAoYiA9PSBudWxsKSB7XHJcblxyXG4gICAgICAgIGlmICh2ICYmIHYuX2lzQmlnTnVtYmVyID09PSB0cnVlKSB7XHJcbiAgICAgICAgICB4LnMgPSB2LnM7XHJcblxyXG4gICAgICAgICAgaWYgKCF2LmMgfHwgdi5lID4gTUFYX0VYUCkge1xyXG4gICAgICAgICAgICB4LmMgPSB4LmUgPSBudWxsO1xyXG4gICAgICAgICAgfSBlbHNlIGlmICh2LmUgPCBNSU5fRVhQKSB7XHJcbiAgICAgICAgICAgIHguYyA9IFt4LmUgPSAwXTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHguZSA9IHYuZTtcclxuICAgICAgICAgICAgeC5jID0gdi5jLnNsaWNlKCk7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKChpc051bSA9IHR5cGVvZiB2ID09ICdudW1iZXInKSAmJiB2ICogMCA9PSAwKSB7XHJcblxyXG4gICAgICAgICAgLy8gVXNlIGAxIC8gbmAgdG8gaGFuZGxlIG1pbnVzIHplcm8gYWxzby5cclxuICAgICAgICAgIHgucyA9IDEgLyB2IDwgMCA/ICh2ID0gLXYsIC0xKSA6IDE7XHJcblxyXG4gICAgICAgICAgLy8gRmFzdCBwYXRoIGZvciBpbnRlZ2Vycywgd2hlcmUgbiA8IDIxNDc0ODM2NDggKDIqKjMxKS5cclxuICAgICAgICAgIGlmICh2ID09PSB+fnYpIHtcclxuICAgICAgICAgICAgZm9yIChlID0gMCwgaSA9IHY7IGkgPj0gMTA7IGkgLz0gMTAsIGUrKyk7XHJcblxyXG4gICAgICAgICAgICBpZiAoZSA+IE1BWF9FWFApIHtcclxuICAgICAgICAgICAgICB4LmMgPSB4LmUgPSBudWxsO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIHguZSA9IGU7XHJcbiAgICAgICAgICAgICAgeC5jID0gW3ZdO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgc3RyID0gU3RyaW5nKHYpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcblxyXG4gICAgICAgICAgaWYgKCFpc051bWVyaWMudGVzdChzdHIgPSBTdHJpbmcodikpKSByZXR1cm4gcGFyc2VOdW1lcmljKHgsIHN0ciwgaXNOdW0pO1xyXG5cclxuICAgICAgICAgIHgucyA9IHN0ci5jaGFyQ29kZUF0KDApID09IDQ1ID8gKHN0ciA9IHN0ci5zbGljZSgxKSwgLTEpIDogMTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIERlY2ltYWwgcG9pbnQ/XHJcbiAgICAgICAgaWYgKChlID0gc3RyLmluZGV4T2YoJy4nKSkgPiAtMSkgc3RyID0gc3RyLnJlcGxhY2UoJy4nLCAnJyk7XHJcblxyXG4gICAgICAgIC8vIEV4cG9uZW50aWFsIGZvcm0/XHJcbiAgICAgICAgaWYgKChpID0gc3RyLnNlYXJjaCgvZS9pKSkgPiAwKSB7XHJcblxyXG4gICAgICAgICAgLy8gRGV0ZXJtaW5lIGV4cG9uZW50LlxyXG4gICAgICAgICAgaWYgKGUgPCAwKSBlID0gaTtcclxuICAgICAgICAgIGUgKz0gK3N0ci5zbGljZShpICsgMSk7XHJcbiAgICAgICAgICBzdHIgPSBzdHIuc3Vic3RyaW5nKDAsIGkpO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoZSA8IDApIHtcclxuXHJcbiAgICAgICAgICAvLyBJbnRlZ2VyLlxyXG4gICAgICAgICAgZSA9IHN0ci5sZW5ndGg7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgfSBlbHNlIHtcclxuXHJcbiAgICAgICAgLy8gJ1tCaWdOdW1iZXIgRXJyb3JdIEJhc2Uge25vdCBhIHByaW1pdGl2ZSBudW1iZXJ8bm90IGFuIGludGVnZXJ8b3V0IG9mIHJhbmdlfToge2J9J1xyXG4gICAgICAgIGludENoZWNrKGIsIDIsIEFMUEhBQkVULmxlbmd0aCwgJ0Jhc2UnKTtcclxuXHJcbiAgICAgICAgLy8gQWxsb3cgZXhwb25lbnRpYWwgbm90YXRpb24gdG8gYmUgdXNlZCB3aXRoIGJhc2UgMTAgYXJndW1lbnQsIHdoaWxlXHJcbiAgICAgICAgLy8gYWxzbyByb3VuZGluZyB0byBERUNJTUFMX1BMQUNFUyBhcyB3aXRoIG90aGVyIGJhc2VzLlxyXG4gICAgICAgIGlmIChiID09IDEwKSB7XHJcbiAgICAgICAgICB4ID0gbmV3IEJpZ051bWJlcih2KTtcclxuICAgICAgICAgIHJldHVybiByb3VuZCh4LCBERUNJTUFMX1BMQUNFUyArIHguZSArIDEsIFJPVU5ESU5HX01PREUpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgc3RyID0gU3RyaW5nKHYpO1xyXG5cclxuICAgICAgICBpZiAoaXNOdW0gPSB0eXBlb2YgdiA9PSAnbnVtYmVyJykge1xyXG5cclxuICAgICAgICAgIC8vIEF2b2lkIHBvdGVudGlhbCBpbnRlcnByZXRhdGlvbiBvZiBJbmZpbml0eSBhbmQgTmFOIGFzIGJhc2UgNDQrIHZhbHVlcy5cclxuICAgICAgICAgIGlmICh2ICogMCAhPSAwKSByZXR1cm4gcGFyc2VOdW1lcmljKHgsIHN0ciwgaXNOdW0sIGIpO1xyXG5cclxuICAgICAgICAgIHgucyA9IDEgLyB2IDwgMCA/IChzdHIgPSBzdHIuc2xpY2UoMSksIC0xKSA6IDE7XHJcblxyXG4gICAgICAgICAgLy8gJ1tCaWdOdW1iZXIgRXJyb3JdIE51bWJlciBwcmltaXRpdmUgaGFzIG1vcmUgdGhhbiAxNSBzaWduaWZpY2FudCBkaWdpdHM6IHtufSdcclxuICAgICAgICAgIGlmIChCaWdOdW1iZXIuREVCVUcgJiYgc3RyLnJlcGxhY2UoL14wXFwuMCp8XFwuLywgJycpLmxlbmd0aCA+IDE1KSB7XHJcbiAgICAgICAgICAgIHRocm93IEVycm9yXHJcbiAgICAgICAgICAgICAodG9vTWFueURpZ2l0cyArIHYpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB4LnMgPSBzdHIuY2hhckNvZGVBdCgwKSA9PT0gNDUgPyAoc3RyID0gc3RyLnNsaWNlKDEpLCAtMSkgOiAxO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgYWxwaGFiZXQgPSBBTFBIQUJFVC5zbGljZSgwLCBiKTtcclxuICAgICAgICBlID0gaSA9IDA7XHJcblxyXG4gICAgICAgIC8vIENoZWNrIHRoYXQgc3RyIGlzIGEgdmFsaWQgYmFzZSBiIG51bWJlci5cclxuICAgICAgICAvLyBEb24ndCB1c2UgUmVnRXhwLCBzbyBhbHBoYWJldCBjYW4gY29udGFpbiBzcGVjaWFsIGNoYXJhY3RlcnMuXHJcbiAgICAgICAgZm9yIChsZW4gPSBzdHIubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcclxuICAgICAgICAgIGlmIChhbHBoYWJldC5pbmRleE9mKGMgPSBzdHIuY2hhckF0KGkpKSA8IDApIHtcclxuICAgICAgICAgICAgaWYgKGMgPT0gJy4nKSB7XHJcblxyXG4gICAgICAgICAgICAgIC8vIElmICcuJyBpcyBub3QgdGhlIGZpcnN0IGNoYXJhY3RlciBhbmQgaXQgaGFzIG5vdCBiZSBmb3VuZCBiZWZvcmUuXHJcbiAgICAgICAgICAgICAgaWYgKGkgPiBlKSB7XHJcbiAgICAgICAgICAgICAgICBlID0gbGVuO1xyXG4gICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKCFjYXNlQ2hhbmdlZCkge1xyXG5cclxuICAgICAgICAgICAgICAvLyBBbGxvdyBlLmcuIGhleGFkZWNpbWFsICdGRicgYXMgd2VsbCBhcyAnZmYnLlxyXG4gICAgICAgICAgICAgIGlmIChzdHIgPT0gc3RyLnRvVXBwZXJDYXNlKCkgJiYgKHN0ciA9IHN0ci50b0xvd2VyQ2FzZSgpKSB8fFxyXG4gICAgICAgICAgICAgICAgICBzdHIgPT0gc3RyLnRvTG93ZXJDYXNlKCkgJiYgKHN0ciA9IHN0ci50b1VwcGVyQ2FzZSgpKSkge1xyXG4gICAgICAgICAgICAgICAgY2FzZUNoYW5nZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgaSA9IC0xO1xyXG4gICAgICAgICAgICAgICAgZSA9IDA7XHJcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHJldHVybiBwYXJzZU51bWVyaWMoeCwgU3RyaW5nKHYpLCBpc051bSwgYik7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBQcmV2ZW50IGxhdGVyIGNoZWNrIGZvciBsZW5ndGggb24gY29udmVydGVkIG51bWJlci5cclxuICAgICAgICBpc051bSA9IGZhbHNlO1xyXG4gICAgICAgIHN0ciA9IGNvbnZlcnRCYXNlKHN0ciwgYiwgMTAsIHgucyk7XHJcblxyXG4gICAgICAgIC8vIERlY2ltYWwgcG9pbnQ/XHJcbiAgICAgICAgaWYgKChlID0gc3RyLmluZGV4T2YoJy4nKSkgPiAtMSkgc3RyID0gc3RyLnJlcGxhY2UoJy4nLCAnJyk7XHJcbiAgICAgICAgZWxzZSBlID0gc3RyLmxlbmd0aDtcclxuICAgICAgfVxyXG5cclxuICAgICAgLy8gRGV0ZXJtaW5lIGxlYWRpbmcgemVyb3MuXHJcbiAgICAgIGZvciAoaSA9IDA7IHN0ci5jaGFyQ29kZUF0KGkpID09PSA0ODsgaSsrKTtcclxuXHJcbiAgICAgIC8vIERldGVybWluZSB0cmFpbGluZyB6ZXJvcy5cclxuICAgICAgZm9yIChsZW4gPSBzdHIubGVuZ3RoOyBzdHIuY2hhckNvZGVBdCgtLWxlbikgPT09IDQ4Oyk7XHJcblxyXG4gICAgICBpZiAoc3RyID0gc3RyLnNsaWNlKGksICsrbGVuKSkge1xyXG4gICAgICAgIGxlbiAtPSBpO1xyXG5cclxuICAgICAgICAvLyAnW0JpZ051bWJlciBFcnJvcl0gTnVtYmVyIHByaW1pdGl2ZSBoYXMgbW9yZSB0aGFuIDE1IHNpZ25pZmljYW50IGRpZ2l0czoge259J1xyXG4gICAgICAgIGlmIChpc051bSAmJiBCaWdOdW1iZXIuREVCVUcgJiZcclxuICAgICAgICAgIGxlbiA+IDE1ICYmICh2ID4gTUFYX1NBRkVfSU5URUdFUiB8fCB2ICE9PSBtYXRoZmxvb3IodikpKSB7XHJcbiAgICAgICAgICAgIHRocm93IEVycm9yXHJcbiAgICAgICAgICAgICAodG9vTWFueURpZ2l0cyArICh4LnMgKiB2KSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAgLy8gT3ZlcmZsb3c/XHJcbiAgICAgICAgaWYgKChlID0gZSAtIGkgLSAxKSA+IE1BWF9FWFApIHtcclxuXHJcbiAgICAgICAgICAvLyBJbmZpbml0eS5cclxuICAgICAgICAgIHguYyA9IHguZSA9IG51bGw7XHJcblxyXG4gICAgICAgIC8vIFVuZGVyZmxvdz9cclxuICAgICAgICB9IGVsc2UgaWYgKGUgPCBNSU5fRVhQKSB7XHJcblxyXG4gICAgICAgICAgLy8gWmVyby5cclxuICAgICAgICAgIHguYyA9IFt4LmUgPSAwXTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgeC5lID0gZTtcclxuICAgICAgICAgIHguYyA9IFtdO1xyXG5cclxuICAgICAgICAgIC8vIFRyYW5zZm9ybSBiYXNlXHJcblxyXG4gICAgICAgICAgLy8gZSBpcyB0aGUgYmFzZSAxMCBleHBvbmVudC5cclxuICAgICAgICAgIC8vIGkgaXMgd2hlcmUgdG8gc2xpY2Ugc3RyIHRvIGdldCB0aGUgZmlyc3QgZWxlbWVudCBvZiB0aGUgY29lZmZpY2llbnQgYXJyYXkuXHJcbiAgICAgICAgICBpID0gKGUgKyAxKSAlIExPR19CQVNFO1xyXG4gICAgICAgICAgaWYgKGUgPCAwKSBpICs9IExPR19CQVNFOyAgLy8gaSA8IDFcclxuXHJcbiAgICAgICAgICBpZiAoaSA8IGxlbikge1xyXG4gICAgICAgICAgICBpZiAoaSkgeC5jLnB1c2goK3N0ci5zbGljZSgwLCBpKSk7XHJcblxyXG4gICAgICAgICAgICBmb3IgKGxlbiAtPSBMT0dfQkFTRTsgaSA8IGxlbjspIHtcclxuICAgICAgICAgICAgICB4LmMucHVzaCgrc3RyLnNsaWNlKGksIGkgKz0gTE9HX0JBU0UpKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaSA9IExPR19CQVNFIC0gKHN0ciA9IHN0ci5zbGljZShpKSkubGVuZ3RoO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgaSAtPSBsZW47XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgZm9yICg7IGktLTsgc3RyICs9ICcwJyk7XHJcbiAgICAgICAgICB4LmMucHVzaCgrc3RyKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSB7XHJcblxyXG4gICAgICAgIC8vIFplcm8uXHJcbiAgICAgICAgeC5jID0gW3guZSA9IDBdO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8vIENPTlNUUlVDVE9SIFBST1BFUlRJRVNcclxuXHJcblxyXG4gICAgQmlnTnVtYmVyLmNsb25lID0gY2xvbmU7XHJcblxyXG4gICAgQmlnTnVtYmVyLlJPVU5EX1VQID0gMDtcclxuICAgIEJpZ051bWJlci5ST1VORF9ET1dOID0gMTtcclxuICAgIEJpZ051bWJlci5ST1VORF9DRUlMID0gMjtcclxuICAgIEJpZ051bWJlci5ST1VORF9GTE9PUiA9IDM7XHJcbiAgICBCaWdOdW1iZXIuUk9VTkRfSEFMRl9VUCA9IDQ7XHJcbiAgICBCaWdOdW1iZXIuUk9VTkRfSEFMRl9ET1dOID0gNTtcclxuICAgIEJpZ051bWJlci5ST1VORF9IQUxGX0VWRU4gPSA2O1xyXG4gICAgQmlnTnVtYmVyLlJPVU5EX0hBTEZfQ0VJTCA9IDc7XHJcbiAgICBCaWdOdW1iZXIuUk9VTkRfSEFMRl9GTE9PUiA9IDg7XHJcbiAgICBCaWdOdW1iZXIuRVVDTElEID0gOTtcclxuXHJcblxyXG4gICAgLypcclxuICAgICAqIENvbmZpZ3VyZSBpbmZyZXF1ZW50bHktY2hhbmdpbmcgbGlicmFyeS13aWRlIHNldHRpbmdzLlxyXG4gICAgICpcclxuICAgICAqIEFjY2VwdCBhbiBvYmplY3Qgd2l0aCB0aGUgZm9sbG93aW5nIG9wdGlvbmFsIHByb3BlcnRpZXMgKGlmIHRoZSB2YWx1ZSBvZiBhIHByb3BlcnR5IGlzXHJcbiAgICAgKiBhIG51bWJlciwgaXQgbXVzdCBiZSBhbiBpbnRlZ2VyIHdpdGhpbiB0aGUgaW5jbHVzaXZlIHJhbmdlIHN0YXRlZCk6XHJcbiAgICAgKlxyXG4gICAgICogICBERUNJTUFMX1BMQUNFUyAgIHtudW1iZXJ9ICAgICAgICAgICAwIHRvIE1BWFxyXG4gICAgICogICBST1VORElOR19NT0RFICAgIHtudW1iZXJ9ICAgICAgICAgICAwIHRvIDhcclxuICAgICAqICAgRVhQT05FTlRJQUxfQVQgICB7bnVtYmVyfG51bWJlcltdfSAgLU1BWCB0byBNQVggIG9yICBbLU1BWCB0byAwLCAwIHRvIE1BWF1cclxuICAgICAqICAgUkFOR0UgICAgICAgICAgICB7bnVtYmVyfG51bWJlcltdfSAgLU1BWCB0byBNQVggKG5vdCB6ZXJvKSAgb3IgIFstTUFYIHRvIC0xLCAxIHRvIE1BWF1cclxuICAgICAqICAgQ1JZUFRPICAgICAgICAgICB7Ym9vbGVhbn0gICAgICAgICAgdHJ1ZSBvciBmYWxzZVxyXG4gICAgICogICBNT0RVTE9fTU9ERSAgICAgIHtudW1iZXJ9ICAgICAgICAgICAwIHRvIDlcclxuICAgICAqICAgUE9XX1BSRUNJU0lPTiAgICAgICB7bnVtYmVyfSAgICAgICAgICAgMCB0byBNQVhcclxuICAgICAqICAgQUxQSEFCRVQgICAgICAgICB7c3RyaW5nfSAgICAgICAgICAgQSBzdHJpbmcgb2YgdHdvIG9yIG1vcmUgdW5pcXVlIGNoYXJhY3RlcnMgd2hpY2ggZG9lc1xyXG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub3QgY29udGFpbiAnLicuXHJcbiAgICAgKiAgIEZPUk1BVCAgICAgICAgICAge29iamVjdH0gICAgICAgICAgIEFuIG9iamVjdCB3aXRoIHNvbWUgb2YgdGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzOlxyXG4gICAgICogICAgIHByZWZpeCAgICAgICAgICAgICAgICAge3N0cmluZ31cclxuICAgICAqICAgICBncm91cFNpemUgICAgICAgICAgICAgIHtudW1iZXJ9XHJcbiAgICAgKiAgICAgc2Vjb25kYXJ5R3JvdXBTaXplICAgICB7bnVtYmVyfVxyXG4gICAgICogICAgIGdyb3VwU2VwYXJhdG9yICAgICAgICAge3N0cmluZ31cclxuICAgICAqICAgICBkZWNpbWFsU2VwYXJhdG9yICAgICAgIHtzdHJpbmd9XHJcbiAgICAgKiAgICAgZnJhY3Rpb25Hcm91cFNpemUgICAgICB7bnVtYmVyfVxyXG4gICAgICogICAgIGZyYWN0aW9uR3JvdXBTZXBhcmF0b3Ige3N0cmluZ31cclxuICAgICAqICAgICBzdWZmaXggICAgICAgICAgICAgICAgIHtzdHJpbmd9XHJcbiAgICAgKlxyXG4gICAgICogKFRoZSB2YWx1ZXMgYXNzaWduZWQgdG8gdGhlIGFib3ZlIEZPUk1BVCBvYmplY3QgcHJvcGVydGllcyBhcmUgbm90IGNoZWNrZWQgZm9yIHZhbGlkaXR5LilcclxuICAgICAqXHJcbiAgICAgKiBFLmcuXHJcbiAgICAgKiBCaWdOdW1iZXIuY29uZmlnKHsgREVDSU1BTF9QTEFDRVMgOiAyMCwgUk9VTkRJTkdfTU9ERSA6IDQgfSlcclxuICAgICAqXHJcbiAgICAgKiBJZ25vcmUgcHJvcGVydGllcy9wYXJhbWV0ZXJzIHNldCB0byBudWxsIG9yIHVuZGVmaW5lZCwgZXhjZXB0IGZvciBBTFBIQUJFVC5cclxuICAgICAqXHJcbiAgICAgKiBSZXR1cm4gYW4gb2JqZWN0IHdpdGggdGhlIHByb3BlcnRpZXMgY3VycmVudCB2YWx1ZXMuXHJcbiAgICAgKi9cclxuICAgIEJpZ051bWJlci5jb25maWcgPSBCaWdOdW1iZXIuc2V0ID0gZnVuY3Rpb24gKG9iaikge1xyXG4gICAgICB2YXIgcCwgdjtcclxuXHJcbiAgICAgIGlmIChvYmogIT0gbnVsbCkge1xyXG5cclxuICAgICAgICBpZiAodHlwZW9mIG9iaiA9PSAnb2JqZWN0Jykge1xyXG5cclxuICAgICAgICAgIC8vIERFQ0lNQUxfUExBQ0VTIHtudW1iZXJ9IEludGVnZXIsIDAgdG8gTUFYIGluY2x1c2l2ZS5cclxuICAgICAgICAgIC8vICdbQmlnTnVtYmVyIEVycm9yXSBERUNJTUFMX1BMQUNFUyB7bm90IGEgcHJpbWl0aXZlIG51bWJlcnxub3QgYW4gaW50ZWdlcnxvdXQgb2YgcmFuZ2V9OiB7dn0nXHJcbiAgICAgICAgICBpZiAob2JqLmhhc093blByb3BlcnR5KHAgPSAnREVDSU1BTF9QTEFDRVMnKSkge1xyXG4gICAgICAgICAgICB2ID0gb2JqW3BdO1xyXG4gICAgICAgICAgICBpbnRDaGVjayh2LCAwLCBNQVgsIHApO1xyXG4gICAgICAgICAgICBERUNJTUFMX1BMQUNFUyA9IHY7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgLy8gUk9VTkRJTkdfTU9ERSB7bnVtYmVyfSBJbnRlZ2VyLCAwIHRvIDggaW5jbHVzaXZlLlxyXG4gICAgICAgICAgLy8gJ1tCaWdOdW1iZXIgRXJyb3JdIFJPVU5ESU5HX01PREUge25vdCBhIHByaW1pdGl2ZSBudW1iZXJ8bm90IGFuIGludGVnZXJ8b3V0IG9mIHJhbmdlfToge3Z9J1xyXG4gICAgICAgICAgaWYgKG9iai5oYXNPd25Qcm9wZXJ0eShwID0gJ1JPVU5ESU5HX01PREUnKSkge1xyXG4gICAgICAgICAgICB2ID0gb2JqW3BdO1xyXG4gICAgICAgICAgICBpbnRDaGVjayh2LCAwLCA4LCBwKTtcclxuICAgICAgICAgICAgUk9VTkRJTkdfTU9ERSA9IHY7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgLy8gRVhQT05FTlRJQUxfQVQge251bWJlcnxudW1iZXJbXX1cclxuICAgICAgICAgIC8vIEludGVnZXIsIC1NQVggdG8gTUFYIGluY2x1c2l2ZSBvclxyXG4gICAgICAgICAgLy8gW2ludGVnZXIgLU1BWCB0byAwIGluY2x1c2l2ZSwgMCB0byBNQVggaW5jbHVzaXZlXS5cclxuICAgICAgICAgIC8vICdbQmlnTnVtYmVyIEVycm9yXSBFWFBPTkVOVElBTF9BVCB7bm90IGEgcHJpbWl0aXZlIG51bWJlcnxub3QgYW4gaW50ZWdlcnxvdXQgb2YgcmFuZ2V9OiB7dn0nXHJcbiAgICAgICAgICBpZiAob2JqLmhhc093blByb3BlcnR5KHAgPSAnRVhQT05FTlRJQUxfQVQnKSkge1xyXG4gICAgICAgICAgICB2ID0gb2JqW3BdO1xyXG4gICAgICAgICAgICBpZiAodiAmJiB2LnBvcCkge1xyXG4gICAgICAgICAgICAgIGludENoZWNrKHZbMF0sIC1NQVgsIDAsIHApO1xyXG4gICAgICAgICAgICAgIGludENoZWNrKHZbMV0sIDAsIE1BWCwgcCk7XHJcbiAgICAgICAgICAgICAgVE9fRVhQX05FRyA9IHZbMF07XHJcbiAgICAgICAgICAgICAgVE9fRVhQX1BPUyA9IHZbMV07XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgaW50Q2hlY2sodiwgLU1BWCwgTUFYLCBwKTtcclxuICAgICAgICAgICAgICBUT19FWFBfTkVHID0gLShUT19FWFBfUE9TID0gdiA8IDAgPyAtdiA6IHYpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgLy8gUkFOR0Uge251bWJlcnxudW1iZXJbXX0gTm9uLXplcm8gaW50ZWdlciwgLU1BWCB0byBNQVggaW5jbHVzaXZlIG9yXHJcbiAgICAgICAgICAvLyBbaW50ZWdlciAtTUFYIHRvIC0xIGluY2x1c2l2ZSwgaW50ZWdlciAxIHRvIE1BWCBpbmNsdXNpdmVdLlxyXG4gICAgICAgICAgLy8gJ1tCaWdOdW1iZXIgRXJyb3JdIFJBTkdFIHtub3QgYSBwcmltaXRpdmUgbnVtYmVyfG5vdCBhbiBpbnRlZ2VyfG91dCBvZiByYW5nZXxjYW5ub3QgYmUgemVyb306IHt2fSdcclxuICAgICAgICAgIGlmIChvYmouaGFzT3duUHJvcGVydHkocCA9ICdSQU5HRScpKSB7XHJcbiAgICAgICAgICAgIHYgPSBvYmpbcF07XHJcbiAgICAgICAgICAgIGlmICh2ICYmIHYucG9wKSB7XHJcbiAgICAgICAgICAgICAgaW50Q2hlY2sodlswXSwgLU1BWCwgLTEsIHApO1xyXG4gICAgICAgICAgICAgIGludENoZWNrKHZbMV0sIDEsIE1BWCwgcCk7XHJcbiAgICAgICAgICAgICAgTUlOX0VYUCA9IHZbMF07XHJcbiAgICAgICAgICAgICAgTUFYX0VYUCA9IHZbMV07XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgaW50Q2hlY2sodiwgLU1BWCwgTUFYLCBwKTtcclxuICAgICAgICAgICAgICBpZiAodikge1xyXG4gICAgICAgICAgICAgICAgTUlOX0VYUCA9IC0oTUFYX0VYUCA9IHYgPCAwID8gLXYgOiB2KTtcclxuICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhyb3cgRXJyb3JcclxuICAgICAgICAgICAgICAgICAoYmlnbnVtYmVyRXJyb3IgKyBwICsgJyBjYW5ub3QgYmUgemVybzogJyArIHYpO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIC8vIENSWVBUTyB7Ym9vbGVhbn0gdHJ1ZSBvciBmYWxzZS5cclxuICAgICAgICAgIC8vICdbQmlnTnVtYmVyIEVycm9yXSBDUllQVE8gbm90IHRydWUgb3IgZmFsc2U6IHt2fSdcclxuICAgICAgICAgIC8vICdbQmlnTnVtYmVyIEVycm9yXSBjcnlwdG8gdW5hdmFpbGFibGUnXHJcbiAgICAgICAgICBpZiAob2JqLmhhc093blByb3BlcnR5KHAgPSAnQ1JZUFRPJykpIHtcclxuICAgICAgICAgICAgdiA9IG9ialtwXTtcclxuICAgICAgICAgICAgaWYgKHYgPT09ICEhdikge1xyXG4gICAgICAgICAgICAgIGlmICh2KSB7XHJcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGNyeXB0byAhPSAndW5kZWZpbmVkJyAmJiBjcnlwdG8gJiZcclxuICAgICAgICAgICAgICAgICAoY3J5cHRvLmdldFJhbmRvbVZhbHVlcyB8fCBjcnlwdG8ucmFuZG9tQnl0ZXMpKSB7XHJcbiAgICAgICAgICAgICAgICAgIENSWVBUTyA9IHY7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICBDUllQVE8gPSAhdjtcclxuICAgICAgICAgICAgICAgICAgdGhyb3cgRXJyb3JcclxuICAgICAgICAgICAgICAgICAgIChiaWdudW1iZXJFcnJvciArICdjcnlwdG8gdW5hdmFpbGFibGUnKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgQ1JZUFRPID0gdjtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgdGhyb3cgRXJyb3JcclxuICAgICAgICAgICAgICAgKGJpZ251bWJlckVycm9yICsgcCArICcgbm90IHRydWUgb3IgZmFsc2U6ICcgKyB2KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIC8vIE1PRFVMT19NT0RFIHtudW1iZXJ9IEludGVnZXIsIDAgdG8gOSBpbmNsdXNpdmUuXHJcbiAgICAgICAgICAvLyAnW0JpZ051bWJlciBFcnJvcl0gTU9EVUxPX01PREUge25vdCBhIHByaW1pdGl2ZSBudW1iZXJ8bm90IGFuIGludGVnZXJ8b3V0IG9mIHJhbmdlfToge3Z9J1xyXG4gICAgICAgICAgaWYgKG9iai5oYXNPd25Qcm9wZXJ0eShwID0gJ01PRFVMT19NT0RFJykpIHtcclxuICAgICAgICAgICAgdiA9IG9ialtwXTtcclxuICAgICAgICAgICAgaW50Q2hlY2sodiwgMCwgOSwgcCk7XHJcbiAgICAgICAgICAgIE1PRFVMT19NT0RFID0gdjtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAvLyBQT1dfUFJFQ0lTSU9OIHtudW1iZXJ9IEludGVnZXIsIDAgdG8gTUFYIGluY2x1c2l2ZS5cclxuICAgICAgICAgIC8vICdbQmlnTnVtYmVyIEVycm9yXSBQT1dfUFJFQ0lTSU9OIHtub3QgYSBwcmltaXRpdmUgbnVtYmVyfG5vdCBhbiBpbnRlZ2VyfG91dCBvZiByYW5nZX06IHt2fSdcclxuICAgICAgICAgIGlmIChvYmouaGFzT3duUHJvcGVydHkocCA9ICdQT1dfUFJFQ0lTSU9OJykpIHtcclxuICAgICAgICAgICAgdiA9IG9ialtwXTtcclxuICAgICAgICAgICAgaW50Q2hlY2sodiwgMCwgTUFYLCBwKTtcclxuICAgICAgICAgICAgUE9XX1BSRUNJU0lPTiA9IHY7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgLy8gRk9STUFUIHtvYmplY3R9XHJcbiAgICAgICAgICAvLyAnW0JpZ051bWJlciBFcnJvcl0gRk9STUFUIG5vdCBhbiBvYmplY3Q6IHt2fSdcclxuICAgICAgICAgIGlmIChvYmouaGFzT3duUHJvcGVydHkocCA9ICdGT1JNQVQnKSkge1xyXG4gICAgICAgICAgICB2ID0gb2JqW3BdO1xyXG4gICAgICAgICAgICBpZiAodHlwZW9mIHYgPT0gJ29iamVjdCcpIEZPUk1BVCA9IHY7XHJcbiAgICAgICAgICAgIGVsc2UgdGhyb3cgRXJyb3JcclxuICAgICAgICAgICAgIChiaWdudW1iZXJFcnJvciArIHAgKyAnIG5vdCBhbiBvYmplY3Q6ICcgKyB2KTtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAvLyBBTFBIQUJFVCB7c3RyaW5nfVxyXG4gICAgICAgICAgLy8gJ1tCaWdOdW1iZXIgRXJyb3JdIEFMUEhBQkVUIGludmFsaWQ6IHt2fSdcclxuICAgICAgICAgIGlmIChvYmouaGFzT3duUHJvcGVydHkocCA9ICdBTFBIQUJFVCcpKSB7XHJcbiAgICAgICAgICAgIHYgPSBvYmpbcF07XHJcblxyXG4gICAgICAgICAgICAvLyBEaXNhbGxvdyBpZiBsZXNzIHRoYW4gdHdvIGNoYXJhY3RlcnMsXHJcbiAgICAgICAgICAgIC8vIG9yIGlmIGl0IGNvbnRhaW5zICcrJywgJy0nLCAnLicsIHdoaXRlc3BhY2UsIG9yIGEgcmVwZWF0ZWQgY2hhcmFjdGVyLlxyXG4gICAgICAgICAgICBpZiAodHlwZW9mIHYgPT0gJ3N0cmluZycgJiYgIS9eLj8kfFsrXFwtLlxcc118KC4pLipcXDEvLnRlc3QodikpIHtcclxuICAgICAgICAgICAgICBBTFBIQUJFVCA9IHY7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgdGhyb3cgRXJyb3JcclxuICAgICAgICAgICAgICAgKGJpZ251bWJlckVycm9yICsgcCArICcgaW52YWxpZDogJyArIHYpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgIH0gZWxzZSB7XHJcblxyXG4gICAgICAgICAgLy8gJ1tCaWdOdW1iZXIgRXJyb3JdIE9iamVjdCBleHBlY3RlZDoge3Z9J1xyXG4gICAgICAgICAgdGhyb3cgRXJyb3JcclxuICAgICAgICAgICAoYmlnbnVtYmVyRXJyb3IgKyAnT2JqZWN0IGV4cGVjdGVkOiAnICsgb2JqKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJldHVybiB7XHJcbiAgICAgICAgREVDSU1BTF9QTEFDRVM6IERFQ0lNQUxfUExBQ0VTLFxyXG4gICAgICAgIFJPVU5ESU5HX01PREU6IFJPVU5ESU5HX01PREUsXHJcbiAgICAgICAgRVhQT05FTlRJQUxfQVQ6IFtUT19FWFBfTkVHLCBUT19FWFBfUE9TXSxcclxuICAgICAgICBSQU5HRTogW01JTl9FWFAsIE1BWF9FWFBdLFxyXG4gICAgICAgIENSWVBUTzogQ1JZUFRPLFxyXG4gICAgICAgIE1PRFVMT19NT0RFOiBNT0RVTE9fTU9ERSxcclxuICAgICAgICBQT1dfUFJFQ0lTSU9OOiBQT1dfUFJFQ0lTSU9OLFxyXG4gICAgICAgIEZPUk1BVDogRk9STUFULFxyXG4gICAgICAgIEFMUEhBQkVUOiBBTFBIQUJFVFxyXG4gICAgICB9O1xyXG4gICAgfTtcclxuXHJcblxyXG4gICAgLypcclxuICAgICAqIFJldHVybiB0cnVlIGlmIHYgaXMgYSBCaWdOdW1iZXIgaW5zdGFuY2UsIG90aGVyd2lzZSByZXR1cm4gZmFsc2UuXHJcbiAgICAgKlxyXG4gICAgICogSWYgQmlnTnVtYmVyLkRFQlVHIGlzIHRydWUsIHRocm93IGlmIGEgQmlnTnVtYmVyIGluc3RhbmNlIGlzIG5vdCB3ZWxsLWZvcm1lZC5cclxuICAgICAqXHJcbiAgICAgKiB2IHthbnl9XHJcbiAgICAgKlxyXG4gICAgICogJ1tCaWdOdW1iZXIgRXJyb3JdIEludmFsaWQgQmlnTnVtYmVyOiB7dn0nXHJcbiAgICAgKi9cclxuICAgIEJpZ051bWJlci5pc0JpZ051bWJlciA9IGZ1bmN0aW9uICh2KSB7XHJcbiAgICAgIGlmICghdiB8fCB2Ll9pc0JpZ051bWJlciAhPT0gdHJ1ZSkgcmV0dXJuIGZhbHNlO1xyXG4gICAgICBpZiAoIUJpZ051bWJlci5ERUJVRykgcmV0dXJuIHRydWU7XHJcblxyXG4gICAgICB2YXIgaSwgbixcclxuICAgICAgICBjID0gdi5jLFxyXG4gICAgICAgIGUgPSB2LmUsXHJcbiAgICAgICAgcyA9IHYucztcclxuXHJcbiAgICAgIG91dDogaWYgKHt9LnRvU3RyaW5nLmNhbGwoYykgPT0gJ1tvYmplY3QgQXJyYXldJykge1xyXG5cclxuICAgICAgICBpZiAoKHMgPT09IDEgfHwgcyA9PT0gLTEpICYmIGUgPj0gLU1BWCAmJiBlIDw9IE1BWCAmJiBlID09PSBtYXRoZmxvb3IoZSkpIHtcclxuXHJcbiAgICAgICAgICAvLyBJZiB0aGUgZmlyc3QgZWxlbWVudCBpcyB6ZXJvLCB0aGUgQmlnTnVtYmVyIHZhbHVlIG11c3QgYmUgemVyby5cclxuICAgICAgICAgIGlmIChjWzBdID09PSAwKSB7XHJcbiAgICAgICAgICAgIGlmIChlID09PSAwICYmIGMubGVuZ3RoID09PSAxKSByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAgICAgYnJlYWsgb3V0O1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIC8vIENhbGN1bGF0ZSBudW1iZXIgb2YgZGlnaXRzIHRoYXQgY1swXSBzaG91bGQgaGF2ZSwgYmFzZWQgb24gdGhlIGV4cG9uZW50LlxyXG4gICAgICAgICAgaSA9IChlICsgMSkgJSBMT0dfQkFTRTtcclxuICAgICAgICAgIGlmIChpIDwgMSkgaSArPSBMT0dfQkFTRTtcclxuXHJcbiAgICAgICAgICAvLyBDYWxjdWxhdGUgbnVtYmVyIG9mIGRpZ2l0cyBvZiBjWzBdLlxyXG4gICAgICAgICAgLy9pZiAoTWF0aC5jZWlsKE1hdGgubG9nKGNbMF0gKyAxKSAvIE1hdGguTE4xMCkgPT0gaSkge1xyXG4gICAgICAgICAgaWYgKFN0cmluZyhjWzBdKS5sZW5ndGggPT0gaSkge1xyXG5cclxuICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICBuID0gY1tpXTtcclxuICAgICAgICAgICAgICBpZiAobiA8IDAgfHwgbiA+PSBCQVNFIHx8IG4gIT09IG1hdGhmbG9vcihuKSkgYnJlYWsgb3V0O1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAvLyBMYXN0IGVsZW1lbnQgY2Fubm90IGJlIHplcm8sIHVubGVzcyBpdCBpcyB0aGUgb25seSBlbGVtZW50LlxyXG4gICAgICAgICAgICBpZiAobiAhPT0gMCkgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgLy8gSW5maW5pdHkvTmFOXHJcbiAgICAgIH0gZWxzZSBpZiAoYyA9PT0gbnVsbCAmJiBlID09PSBudWxsICYmIChzID09PSBudWxsIHx8IHMgPT09IDEgfHwgcyA9PT0gLTEpKSB7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHRocm93IEVycm9yXHJcbiAgICAgICAgKGJpZ251bWJlckVycm9yICsgJ0ludmFsaWQgQmlnTnVtYmVyOiAnICsgdik7XHJcbiAgICB9O1xyXG5cclxuXHJcbiAgICAvKlxyXG4gICAgICogUmV0dXJuIGEgbmV3IEJpZ051bWJlciB3aG9zZSB2YWx1ZSBpcyB0aGUgbWF4aW11bSBvZiB0aGUgYXJndW1lbnRzLlxyXG4gICAgICpcclxuICAgICAqIGFyZ3VtZW50cyB7bnVtYmVyfHN0cmluZ3xCaWdOdW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIEJpZ051bWJlci5tYXhpbXVtID0gQmlnTnVtYmVyLm1heCA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgcmV0dXJuIG1heE9yTWluKGFyZ3VtZW50cywgUC5sdCk7XHJcbiAgICB9O1xyXG5cclxuXHJcbiAgICAvKlxyXG4gICAgICogUmV0dXJuIGEgbmV3IEJpZ051bWJlciB3aG9zZSB2YWx1ZSBpcyB0aGUgbWluaW11bSBvZiB0aGUgYXJndW1lbnRzLlxyXG4gICAgICpcclxuICAgICAqIGFyZ3VtZW50cyB7bnVtYmVyfHN0cmluZ3xCaWdOdW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIEJpZ051bWJlci5taW5pbXVtID0gQmlnTnVtYmVyLm1pbiA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgcmV0dXJuIG1heE9yTWluKGFyZ3VtZW50cywgUC5ndCk7XHJcbiAgICB9O1xyXG5cclxuXHJcbiAgICAvKlxyXG4gICAgICogUmV0dXJuIGEgbmV3IEJpZ051bWJlciB3aXRoIGEgcmFuZG9tIHZhbHVlIGVxdWFsIHRvIG9yIGdyZWF0ZXIgdGhhbiAwIGFuZCBsZXNzIHRoYW4gMSxcclxuICAgICAqIGFuZCB3aXRoIGRwLCBvciBERUNJTUFMX1BMQUNFUyBpZiBkcCBpcyBvbWl0dGVkLCBkZWNpbWFsIHBsYWNlcyAob3IgbGVzcyBpZiB0cmFpbGluZ1xyXG4gICAgICogemVyb3MgYXJlIHByb2R1Y2VkKS5cclxuICAgICAqXHJcbiAgICAgKiBbZHBdIHtudW1iZXJ9IERlY2ltYWwgcGxhY2VzLiBJbnRlZ2VyLCAwIHRvIE1BWCBpbmNsdXNpdmUuXHJcbiAgICAgKlxyXG4gICAgICogJ1tCaWdOdW1iZXIgRXJyb3JdIEFyZ3VtZW50IHtub3QgYSBwcmltaXRpdmUgbnVtYmVyfG5vdCBhbiBpbnRlZ2VyfG91dCBvZiByYW5nZX06IHtkcH0nXHJcbiAgICAgKiAnW0JpZ051bWJlciBFcnJvcl0gY3J5cHRvIHVuYXZhaWxhYmxlJ1xyXG4gICAgICovXHJcbiAgICBCaWdOdW1iZXIucmFuZG9tID0gKGZ1bmN0aW9uICgpIHtcclxuICAgICAgdmFyIHBvdzJfNTMgPSAweDIwMDAwMDAwMDAwMDAwO1xyXG5cclxuICAgICAgLy8gUmV0dXJuIGEgNTMgYml0IGludGVnZXIgbiwgd2hlcmUgMCA8PSBuIDwgOTAwNzE5OTI1NDc0MDk5Mi5cclxuICAgICAgLy8gQ2hlY2sgaWYgTWF0aC5yYW5kb20oKSBwcm9kdWNlcyBtb3JlIHRoYW4gMzIgYml0cyBvZiByYW5kb21uZXNzLlxyXG4gICAgICAvLyBJZiBpdCBkb2VzLCBhc3N1bWUgYXQgbGVhc3QgNTMgYml0cyBhcmUgcHJvZHVjZWQsIG90aGVyd2lzZSBhc3N1bWUgYXQgbGVhc3QgMzAgYml0cy5cclxuICAgICAgLy8gMHg0MDAwMDAwMCBpcyAyXjMwLCAweDgwMDAwMCBpcyAyXjIzLCAweDFmZmZmZiBpcyAyXjIxIC0gMS5cclxuICAgICAgdmFyIHJhbmRvbTUzYml0SW50ID0gKE1hdGgucmFuZG9tKCkgKiBwb3cyXzUzKSAmIDB4MWZmZmZmXHJcbiAgICAgICA/IGZ1bmN0aW9uICgpIHsgcmV0dXJuIG1hdGhmbG9vcihNYXRoLnJhbmRvbSgpICogcG93Ml81Myk7IH1cclxuICAgICAgIDogZnVuY3Rpb24gKCkgeyByZXR1cm4gKChNYXRoLnJhbmRvbSgpICogMHg0MDAwMDAwMCB8IDApICogMHg4MDAwMDApICtcclxuICAgICAgICAgKE1hdGgucmFuZG9tKCkgKiAweDgwMDAwMCB8IDApOyB9O1xyXG5cclxuICAgICAgcmV0dXJuIGZ1bmN0aW9uIChkcCkge1xyXG4gICAgICAgIHZhciBhLCBiLCBlLCBrLCB2LFxyXG4gICAgICAgICAgaSA9IDAsXHJcbiAgICAgICAgICBjID0gW10sXHJcbiAgICAgICAgICByYW5kID0gbmV3IEJpZ051bWJlcihPTkUpO1xyXG5cclxuICAgICAgICBpZiAoZHAgPT0gbnVsbCkgZHAgPSBERUNJTUFMX1BMQUNFUztcclxuICAgICAgICBlbHNlIGludENoZWNrKGRwLCAwLCBNQVgpO1xyXG5cclxuICAgICAgICBrID0gbWF0aGNlaWwoZHAgLyBMT0dfQkFTRSk7XHJcblxyXG4gICAgICAgIGlmIChDUllQVE8pIHtcclxuXHJcbiAgICAgICAgICAvLyBCcm93c2VycyBzdXBwb3J0aW5nIGNyeXB0by5nZXRSYW5kb21WYWx1ZXMuXHJcbiAgICAgICAgICBpZiAoY3J5cHRvLmdldFJhbmRvbVZhbHVlcykge1xyXG5cclxuICAgICAgICAgICAgYSA9IGNyeXB0by5nZXRSYW5kb21WYWx1ZXMobmV3IFVpbnQzMkFycmF5KGsgKj0gMikpO1xyXG5cclxuICAgICAgICAgICAgZm9yICg7IGkgPCBrOykge1xyXG5cclxuICAgICAgICAgICAgICAvLyA1MyBiaXRzOlxyXG4gICAgICAgICAgICAgIC8vICgoTWF0aC5wb3coMiwgMzIpIC0gMSkgKiBNYXRoLnBvdygyLCAyMSkpLnRvU3RyaW5nKDIpXHJcbiAgICAgICAgICAgICAgLy8gMTExMTEgMTExMTExMTEgMTExMTExMTEgMTExMTExMTEgMTExMDAwMDAgMDAwMDAwMDAgMDAwMDAwMDBcclxuICAgICAgICAgICAgICAvLyAoKE1hdGgucG93KDIsIDMyKSAtIDEpID4+PiAxMSkudG9TdHJpbmcoMilcclxuICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMTExMSAxMTExMTExMSAxMTExMTExMVxyXG4gICAgICAgICAgICAgIC8vIDB4MjAwMDAgaXMgMl4yMS5cclxuICAgICAgICAgICAgICB2ID0gYVtpXSAqIDB4MjAwMDAgKyAoYVtpICsgMV0gPj4+IDExKTtcclxuXHJcbiAgICAgICAgICAgICAgLy8gUmVqZWN0aW9uIHNhbXBsaW5nOlxyXG4gICAgICAgICAgICAgIC8vIDAgPD0gdiA8IDkwMDcxOTkyNTQ3NDA5OTJcclxuICAgICAgICAgICAgICAvLyBQcm9iYWJpbGl0eSB0aGF0IHYgPj0gOWUxNSwgaXNcclxuICAgICAgICAgICAgICAvLyA3MTk5MjU0NzQwOTkyIC8gOTAwNzE5OTI1NDc0MDk5MiB+PSAwLjAwMDgsIGkuZS4gMSBpbiAxMjUxXHJcbiAgICAgICAgICAgICAgaWYgKHYgPj0gOWUxNSkge1xyXG4gICAgICAgICAgICAgICAgYiA9IGNyeXB0by5nZXRSYW5kb21WYWx1ZXMobmV3IFVpbnQzMkFycmF5KDIpKTtcclxuICAgICAgICAgICAgICAgIGFbaV0gPSBiWzBdO1xyXG4gICAgICAgICAgICAgICAgYVtpICsgMV0gPSBiWzFdO1xyXG4gICAgICAgICAgICAgIH0gZWxzZSB7XHJcblxyXG4gICAgICAgICAgICAgICAgLy8gMCA8PSB2IDw9IDg5OTk5OTk5OTk5OTk5OTlcclxuICAgICAgICAgICAgICAgIC8vIDAgPD0gKHYgJSAxZTE0KSA8PSA5OTk5OTk5OTk5OTk5OVxyXG4gICAgICAgICAgICAgICAgYy5wdXNoKHYgJSAxZTE0KTtcclxuICAgICAgICAgICAgICAgIGkgKz0gMjtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaSA9IGsgLyAyO1xyXG5cclxuICAgICAgICAgIC8vIE5vZGUuanMgc3VwcG9ydGluZyBjcnlwdG8ucmFuZG9tQnl0ZXMuXHJcbiAgICAgICAgICB9IGVsc2UgaWYgKGNyeXB0by5yYW5kb21CeXRlcykge1xyXG5cclxuICAgICAgICAgICAgLy8gYnVmZmVyXHJcbiAgICAgICAgICAgIGEgPSBjcnlwdG8ucmFuZG9tQnl0ZXMoayAqPSA3KTtcclxuXHJcbiAgICAgICAgICAgIGZvciAoOyBpIDwgazspIHtcclxuXHJcbiAgICAgICAgICAgICAgLy8gMHgxMDAwMDAwMDAwMDAwIGlzIDJeNDgsIDB4MTAwMDAwMDAwMDAgaXMgMl40MFxyXG4gICAgICAgICAgICAgIC8vIDB4MTAwMDAwMDAwIGlzIDJeMzIsIDB4MTAwMDAwMCBpcyAyXjI0XHJcbiAgICAgICAgICAgICAgLy8gMTExMTEgMTExMTExMTEgMTExMTExMTEgMTExMTExMTEgMTExMTExMTEgMTExMTExMTEgMTExMTExMTFcclxuICAgICAgICAgICAgICAvLyAwIDw9IHYgPCA5MDA3MTk5MjU0NzQwOTkyXHJcbiAgICAgICAgICAgICAgdiA9ICgoYVtpXSAmIDMxKSAqIDB4MTAwMDAwMDAwMDAwMCkgKyAoYVtpICsgMV0gKiAweDEwMDAwMDAwMDAwKSArXHJcbiAgICAgICAgICAgICAgICAgKGFbaSArIDJdICogMHgxMDAwMDAwMDApICsgKGFbaSArIDNdICogMHgxMDAwMDAwKSArXHJcbiAgICAgICAgICAgICAgICAgKGFbaSArIDRdIDw8IDE2KSArIChhW2kgKyA1XSA8PCA4KSArIGFbaSArIDZdO1xyXG5cclxuICAgICAgICAgICAgICBpZiAodiA+PSA5ZTE1KSB7XHJcbiAgICAgICAgICAgICAgICBjcnlwdG8ucmFuZG9tQnl0ZXMoNykuY29weShhLCBpKTtcclxuICAgICAgICAgICAgICB9IGVsc2Uge1xyXG5cclxuICAgICAgICAgICAgICAgIC8vIDAgPD0gKHYgJSAxZTE0KSA8PSA5OTk5OTk5OTk5OTk5OVxyXG4gICAgICAgICAgICAgICAgYy5wdXNoKHYgJSAxZTE0KTtcclxuICAgICAgICAgICAgICAgIGkgKz0gNztcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaSA9IGsgLyA3O1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgQ1JZUFRPID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHRocm93IEVycm9yXHJcbiAgICAgICAgICAgICAoYmlnbnVtYmVyRXJyb3IgKyAnY3J5cHRvIHVuYXZhaWxhYmxlJyk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBVc2UgTWF0aC5yYW5kb20uXHJcbiAgICAgICAgaWYgKCFDUllQVE8pIHtcclxuXHJcbiAgICAgICAgICBmb3IgKDsgaSA8IGs7KSB7XHJcbiAgICAgICAgICAgIHYgPSByYW5kb201M2JpdEludCgpO1xyXG4gICAgICAgICAgICBpZiAodiA8IDllMTUpIGNbaSsrXSA9IHYgJSAxZTE0O1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgayA9IGNbLS1pXTtcclxuICAgICAgICBkcCAlPSBMT0dfQkFTRTtcclxuXHJcbiAgICAgICAgLy8gQ29udmVydCB0cmFpbGluZyBkaWdpdHMgdG8gemVyb3MgYWNjb3JkaW5nIHRvIGRwLlxyXG4gICAgICAgIGlmIChrICYmIGRwKSB7XHJcbiAgICAgICAgICB2ID0gUE9XU19URU5bTE9HX0JBU0UgLSBkcF07XHJcbiAgICAgICAgICBjW2ldID0gbWF0aGZsb29yKGsgLyB2KSAqIHY7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBSZW1vdmUgdHJhaWxpbmcgZWxlbWVudHMgd2hpY2ggYXJlIHplcm8uXHJcbiAgICAgICAgZm9yICg7IGNbaV0gPT09IDA7IGMucG9wKCksIGktLSk7XHJcblxyXG4gICAgICAgIC8vIFplcm8/XHJcbiAgICAgICAgaWYgKGkgPCAwKSB7XHJcbiAgICAgICAgICBjID0gW2UgPSAwXTtcclxuICAgICAgICB9IGVsc2Uge1xyXG5cclxuICAgICAgICAgIC8vIFJlbW92ZSBsZWFkaW5nIGVsZW1lbnRzIHdoaWNoIGFyZSB6ZXJvIGFuZCBhZGp1c3QgZXhwb25lbnQgYWNjb3JkaW5nbHkuXHJcbiAgICAgICAgICBmb3IgKGUgPSAtMSA7IGNbMF0gPT09IDA7IGMuc3BsaWNlKDAsIDEpLCBlIC09IExPR19CQVNFKTtcclxuXHJcbiAgICAgICAgICAvLyBDb3VudCB0aGUgZGlnaXRzIG9mIHRoZSBmaXJzdCBlbGVtZW50IG9mIGMgdG8gZGV0ZXJtaW5lIGxlYWRpbmcgemVyb3MsIGFuZC4uLlxyXG4gICAgICAgICAgZm9yIChpID0gMSwgdiA9IGNbMF07IHYgPj0gMTA7IHYgLz0gMTAsIGkrKyk7XHJcblxyXG4gICAgICAgICAgLy8gYWRqdXN0IHRoZSBleHBvbmVudCBhY2NvcmRpbmdseS5cclxuICAgICAgICAgIGlmIChpIDwgTE9HX0JBU0UpIGUgLT0gTE9HX0JBU0UgLSBpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmFuZC5lID0gZTtcclxuICAgICAgICByYW5kLmMgPSBjO1xyXG4gICAgICAgIHJldHVybiByYW5kO1xyXG4gICAgICB9O1xyXG4gICAgfSkoKTtcclxuXHJcblxyXG4gICAgLypcclxuICAgICAqIFJldHVybiBhIEJpZ051bWJlciB3aG9zZSB2YWx1ZSBpcyB0aGUgc3VtIG9mIHRoZSBhcmd1bWVudHMuXHJcbiAgICAgKlxyXG4gICAgICogYXJndW1lbnRzIHtudW1iZXJ8c3RyaW5nfEJpZ051bWJlcn1cclxuICAgICAqL1xyXG4gICAgQmlnTnVtYmVyLnN1bSA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgdmFyIGkgPSAxLFxyXG4gICAgICAgIGFyZ3MgPSBhcmd1bWVudHMsXHJcbiAgICAgICAgc3VtID0gbmV3IEJpZ051bWJlcihhcmdzWzBdKTtcclxuICAgICAgZm9yICg7IGkgPCBhcmdzLmxlbmd0aDspIHN1bSA9IHN1bS5wbHVzKGFyZ3NbaSsrXSk7XHJcbiAgICAgIHJldHVybiBzdW07XHJcbiAgICB9O1xyXG5cclxuXHJcbiAgICAvLyBQUklWQVRFIEZVTkNUSU9OU1xyXG5cclxuXHJcbiAgICAvLyBDYWxsZWQgYnkgQmlnTnVtYmVyIGFuZCBCaWdOdW1iZXIucHJvdG90eXBlLnRvU3RyaW5nLlxyXG4gICAgY29udmVydEJhc2UgPSAoZnVuY3Rpb24gKCkge1xyXG4gICAgICB2YXIgZGVjaW1hbCA9ICcwMTIzNDU2Nzg5JztcclxuXHJcbiAgICAgIC8qXHJcbiAgICAgICAqIENvbnZlcnQgc3RyaW5nIG9mIGJhc2VJbiB0byBhbiBhcnJheSBvZiBudW1iZXJzIG9mIGJhc2VPdXQuXHJcbiAgICAgICAqIEVnLiB0b0Jhc2VPdXQoJzI1NScsIDEwLCAxNikgcmV0dXJucyBbMTUsIDE1XS5cclxuICAgICAgICogRWcuIHRvQmFzZU91dCgnZmYnLCAxNiwgMTApIHJldHVybnMgWzIsIDUsIDVdLlxyXG4gICAgICAgKi9cclxuICAgICAgZnVuY3Rpb24gdG9CYXNlT3V0KHN0ciwgYmFzZUluLCBiYXNlT3V0LCBhbHBoYWJldCkge1xyXG4gICAgICAgIHZhciBqLFxyXG4gICAgICAgICAgYXJyID0gWzBdLFxyXG4gICAgICAgICAgYXJyTCxcclxuICAgICAgICAgIGkgPSAwLFxyXG4gICAgICAgICAgbGVuID0gc3RyLmxlbmd0aDtcclxuXHJcbiAgICAgICAgZm9yICg7IGkgPCBsZW47KSB7XHJcbiAgICAgICAgICBmb3IgKGFyckwgPSBhcnIubGVuZ3RoOyBhcnJMLS07IGFyclthcnJMXSAqPSBiYXNlSW4pO1xyXG5cclxuICAgICAgICAgIGFyclswXSArPSBhbHBoYWJldC5pbmRleE9mKHN0ci5jaGFyQXQoaSsrKSk7XHJcblxyXG4gICAgICAgICAgZm9yIChqID0gMDsgaiA8IGFyci5sZW5ndGg7IGorKykge1xyXG5cclxuICAgICAgICAgICAgaWYgKGFycltqXSA+IGJhc2VPdXQgLSAxKSB7XHJcbiAgICAgICAgICAgICAgaWYgKGFycltqICsgMV0gPT0gbnVsbCkgYXJyW2ogKyAxXSA9IDA7XHJcbiAgICAgICAgICAgICAgYXJyW2ogKyAxXSArPSBhcnJbal0gLyBiYXNlT3V0IHwgMDtcclxuICAgICAgICAgICAgICBhcnJbal0gJT0gYmFzZU91dDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGFyci5yZXZlcnNlKCk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vIENvbnZlcnQgYSBudW1lcmljIHN0cmluZyBvZiBiYXNlSW4gdG8gYSBudW1lcmljIHN0cmluZyBvZiBiYXNlT3V0LlxyXG4gICAgICAvLyBJZiB0aGUgY2FsbGVyIGlzIHRvU3RyaW5nLCB3ZSBhcmUgY29udmVydGluZyBmcm9tIGJhc2UgMTAgdG8gYmFzZU91dC5cclxuICAgICAgLy8gSWYgdGhlIGNhbGxlciBpcyBCaWdOdW1iZXIsIHdlIGFyZSBjb252ZXJ0aW5nIGZyb20gYmFzZUluIHRvIGJhc2UgMTAuXHJcbiAgICAgIHJldHVybiBmdW5jdGlvbiAoc3RyLCBiYXNlSW4sIGJhc2VPdXQsIHNpZ24sIGNhbGxlcklzVG9TdHJpbmcpIHtcclxuICAgICAgICB2YXIgYWxwaGFiZXQsIGQsIGUsIGssIHIsIHgsIHhjLCB5LFxyXG4gICAgICAgICAgaSA9IHN0ci5pbmRleE9mKCcuJyksXHJcbiAgICAgICAgICBkcCA9IERFQ0lNQUxfUExBQ0VTLFxyXG4gICAgICAgICAgcm0gPSBST1VORElOR19NT0RFO1xyXG5cclxuICAgICAgICAvLyBOb24taW50ZWdlci5cclxuICAgICAgICBpZiAoaSA+PSAwKSB7XHJcbiAgICAgICAgICBrID0gUE9XX1BSRUNJU0lPTjtcclxuXHJcbiAgICAgICAgICAvLyBVbmxpbWl0ZWQgcHJlY2lzaW9uLlxyXG4gICAgICAgICAgUE9XX1BSRUNJU0lPTiA9IDA7XHJcbiAgICAgICAgICBzdHIgPSBzdHIucmVwbGFjZSgnLicsICcnKTtcclxuICAgICAgICAgIHkgPSBuZXcgQmlnTnVtYmVyKGJhc2VJbik7XHJcbiAgICAgICAgICB4ID0geS5wb3coc3RyLmxlbmd0aCAtIGkpO1xyXG4gICAgICAgICAgUE9XX1BSRUNJU0lPTiA9IGs7XHJcblxyXG4gICAgICAgICAgLy8gQ29udmVydCBzdHIgYXMgaWYgYW4gaW50ZWdlciwgdGhlbiByZXN0b3JlIHRoZSBmcmFjdGlvbiBwYXJ0IGJ5IGRpdmlkaW5nIHRoZVxyXG4gICAgICAgICAgLy8gcmVzdWx0IGJ5IGl0cyBiYXNlIHJhaXNlZCB0byBhIHBvd2VyLlxyXG5cclxuICAgICAgICAgIHkuYyA9IHRvQmFzZU91dCh0b0ZpeGVkUG9pbnQoY29lZmZUb1N0cmluZyh4LmMpLCB4LmUsICcwJyksXHJcbiAgICAgICAgICAgMTAsIGJhc2VPdXQsIGRlY2ltYWwpO1xyXG4gICAgICAgICAgeS5lID0geS5jLmxlbmd0aDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIENvbnZlcnQgdGhlIG51bWJlciBhcyBpbnRlZ2VyLlxyXG5cclxuICAgICAgICB4YyA9IHRvQmFzZU91dChzdHIsIGJhc2VJbiwgYmFzZU91dCwgY2FsbGVySXNUb1N0cmluZ1xyXG4gICAgICAgICA/IChhbHBoYWJldCA9IEFMUEhBQkVULCBkZWNpbWFsKVxyXG4gICAgICAgICA6IChhbHBoYWJldCA9IGRlY2ltYWwsIEFMUEhBQkVUKSk7XHJcblxyXG4gICAgICAgIC8vIHhjIG5vdyByZXByZXNlbnRzIHN0ciBhcyBhbiBpbnRlZ2VyIGFuZCBjb252ZXJ0ZWQgdG8gYmFzZU91dC4gZSBpcyB0aGUgZXhwb25lbnQuXHJcbiAgICAgICAgZSA9IGsgPSB4Yy5sZW5ndGg7XHJcblxyXG4gICAgICAgIC8vIFJlbW92ZSB0cmFpbGluZyB6ZXJvcy5cclxuICAgICAgICBmb3IgKDsgeGNbLS1rXSA9PSAwOyB4Yy5wb3AoKSk7XHJcblxyXG4gICAgICAgIC8vIFplcm8/XHJcbiAgICAgICAgaWYgKCF4Y1swXSkgcmV0dXJuIGFscGhhYmV0LmNoYXJBdCgwKTtcclxuXHJcbiAgICAgICAgLy8gRG9lcyBzdHIgcmVwcmVzZW50IGFuIGludGVnZXI/IElmIHNvLCBubyBuZWVkIGZvciB0aGUgZGl2aXNpb24uXHJcbiAgICAgICAgaWYgKGkgPCAwKSB7XHJcbiAgICAgICAgICAtLWU7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHguYyA9IHhjO1xyXG4gICAgICAgICAgeC5lID0gZTtcclxuXHJcbiAgICAgICAgICAvLyBUaGUgc2lnbiBpcyBuZWVkZWQgZm9yIGNvcnJlY3Qgcm91bmRpbmcuXHJcbiAgICAgICAgICB4LnMgPSBzaWduO1xyXG4gICAgICAgICAgeCA9IGRpdih4LCB5LCBkcCwgcm0sIGJhc2VPdXQpO1xyXG4gICAgICAgICAgeGMgPSB4LmM7XHJcbiAgICAgICAgICByID0geC5yO1xyXG4gICAgICAgICAgZSA9IHguZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIHhjIG5vdyByZXByZXNlbnRzIHN0ciBjb252ZXJ0ZWQgdG8gYmFzZU91dC5cclxuXHJcbiAgICAgICAgLy8gVEhlIGluZGV4IG9mIHRoZSByb3VuZGluZyBkaWdpdC5cclxuICAgICAgICBkID0gZSArIGRwICsgMTtcclxuXHJcbiAgICAgICAgLy8gVGhlIHJvdW5kaW5nIGRpZ2l0OiB0aGUgZGlnaXQgdG8gdGhlIHJpZ2h0IG9mIHRoZSBkaWdpdCB0aGF0IG1heSBiZSByb3VuZGVkIHVwLlxyXG4gICAgICAgIGkgPSB4Y1tkXTtcclxuXHJcbiAgICAgICAgLy8gTG9vayBhdCB0aGUgcm91bmRpbmcgZGlnaXRzIGFuZCBtb2RlIHRvIGRldGVybWluZSB3aGV0aGVyIHRvIHJvdW5kIHVwLlxyXG5cclxuICAgICAgICBrID0gYmFzZU91dCAvIDI7XHJcbiAgICAgICAgciA9IHIgfHwgZCA8IDAgfHwgeGNbZCArIDFdICE9IG51bGw7XHJcblxyXG4gICAgICAgIHIgPSBybSA8IDQgPyAoaSAhPSBudWxsIHx8IHIpICYmIChybSA9PSAwIHx8IHJtID09ICh4LnMgPCAwID8gMyA6IDIpKVxyXG4gICAgICAgICAgICAgIDogaSA+IGsgfHwgaSA9PSBrICYmKHJtID09IDQgfHwgciB8fCBybSA9PSA2ICYmIHhjW2QgLSAxXSAmIDEgfHxcclxuICAgICAgICAgICAgICAgcm0gPT0gKHgucyA8IDAgPyA4IDogNykpO1xyXG5cclxuICAgICAgICAvLyBJZiB0aGUgaW5kZXggb2YgdGhlIHJvdW5kaW5nIGRpZ2l0IGlzIG5vdCBncmVhdGVyIHRoYW4gemVybywgb3IgeGMgcmVwcmVzZW50c1xyXG4gICAgICAgIC8vIHplcm8sIHRoZW4gdGhlIHJlc3VsdCBvZiB0aGUgYmFzZSBjb252ZXJzaW9uIGlzIHplcm8gb3IsIGlmIHJvdW5kaW5nIHVwLCBhIHZhbHVlXHJcbiAgICAgICAgLy8gc3VjaCBhcyAwLjAwMDAxLlxyXG4gICAgICAgIGlmIChkIDwgMSB8fCAheGNbMF0pIHtcclxuXHJcbiAgICAgICAgICAvLyAxXi1kcCBvciAwXHJcbiAgICAgICAgICBzdHIgPSByID8gdG9GaXhlZFBvaW50KGFscGhhYmV0LmNoYXJBdCgxKSwgLWRwLCBhbHBoYWJldC5jaGFyQXQoMCkpIDogYWxwaGFiZXQuY2hhckF0KDApO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcblxyXG4gICAgICAgICAgLy8gVHJ1bmNhdGUgeGMgdG8gdGhlIHJlcXVpcmVkIG51bWJlciBvZiBkZWNpbWFsIHBsYWNlcy5cclxuICAgICAgICAgIHhjLmxlbmd0aCA9IGQ7XHJcblxyXG4gICAgICAgICAgLy8gUm91bmQgdXA/XHJcbiAgICAgICAgICBpZiAocikge1xyXG5cclxuICAgICAgICAgICAgLy8gUm91bmRpbmcgdXAgbWF5IG1lYW4gdGhlIHByZXZpb3VzIGRpZ2l0IGhhcyB0byBiZSByb3VuZGVkIHVwIGFuZCBzbyBvbi5cclxuICAgICAgICAgICAgZm9yICgtLWJhc2VPdXQ7ICsreGNbLS1kXSA+IGJhc2VPdXQ7KSB7XHJcbiAgICAgICAgICAgICAgeGNbZF0gPSAwO1xyXG5cclxuICAgICAgICAgICAgICBpZiAoIWQpIHtcclxuICAgICAgICAgICAgICAgICsrZTtcclxuICAgICAgICAgICAgICAgIHhjID0gWzFdLmNvbmNhdCh4Yyk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgLy8gRGV0ZXJtaW5lIHRyYWlsaW5nIHplcm9zLlxyXG4gICAgICAgICAgZm9yIChrID0geGMubGVuZ3RoOyAheGNbLS1rXTspO1xyXG5cclxuICAgICAgICAgIC8vIEUuZy4gWzQsIDExLCAxNV0gYmVjb21lcyA0YmYuXHJcbiAgICAgICAgICBmb3IgKGkgPSAwLCBzdHIgPSAnJzsgaSA8PSBrOyBzdHIgKz0gYWxwaGFiZXQuY2hhckF0KHhjW2krK10pKTtcclxuXHJcbiAgICAgICAgICAvLyBBZGQgbGVhZGluZyB6ZXJvcywgZGVjaW1hbCBwb2ludCBhbmQgdHJhaWxpbmcgemVyb3MgYXMgcmVxdWlyZWQuXHJcbiAgICAgICAgICBzdHIgPSB0b0ZpeGVkUG9pbnQoc3RyLCBlLCBhbHBoYWJldC5jaGFyQXQoMCkpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gVGhlIGNhbGxlciB3aWxsIGFkZCB0aGUgc2lnbi5cclxuICAgICAgICByZXR1cm4gc3RyO1xyXG4gICAgICB9O1xyXG4gICAgfSkoKTtcclxuXHJcblxyXG4gICAgLy8gUGVyZm9ybSBkaXZpc2lvbiBpbiB0aGUgc3BlY2lmaWVkIGJhc2UuIENhbGxlZCBieSBkaXYgYW5kIGNvbnZlcnRCYXNlLlxyXG4gICAgZGl2ID0gKGZ1bmN0aW9uICgpIHtcclxuXHJcbiAgICAgIC8vIEFzc3VtZSBub24temVybyB4IGFuZCBrLlxyXG4gICAgICBmdW5jdGlvbiBtdWx0aXBseSh4LCBrLCBiYXNlKSB7XHJcbiAgICAgICAgdmFyIG0sIHRlbXAsIHhsbywgeGhpLFxyXG4gICAgICAgICAgY2FycnkgPSAwLFxyXG4gICAgICAgICAgaSA9IHgubGVuZ3RoLFxyXG4gICAgICAgICAga2xvID0gayAlIFNRUlRfQkFTRSxcclxuICAgICAgICAgIGtoaSA9IGsgLyBTUVJUX0JBU0UgfCAwO1xyXG5cclxuICAgICAgICBmb3IgKHggPSB4LnNsaWNlKCk7IGktLTspIHtcclxuICAgICAgICAgIHhsbyA9IHhbaV0gJSBTUVJUX0JBU0U7XHJcbiAgICAgICAgICB4aGkgPSB4W2ldIC8gU1FSVF9CQVNFIHwgMDtcclxuICAgICAgICAgIG0gPSBraGkgKiB4bG8gKyB4aGkgKiBrbG87XHJcbiAgICAgICAgICB0ZW1wID0ga2xvICogeGxvICsgKChtICUgU1FSVF9CQVNFKSAqIFNRUlRfQkFTRSkgKyBjYXJyeTtcclxuICAgICAgICAgIGNhcnJ5ID0gKHRlbXAgLyBiYXNlIHwgMCkgKyAobSAvIFNRUlRfQkFTRSB8IDApICsga2hpICogeGhpO1xyXG4gICAgICAgICAgeFtpXSA9IHRlbXAgJSBiYXNlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGNhcnJ5KSB4ID0gW2NhcnJ5XS5jb25jYXQoeCk7XHJcblxyXG4gICAgICAgIHJldHVybiB4O1xyXG4gICAgICB9XHJcblxyXG4gICAgICBmdW5jdGlvbiBjb21wYXJlKGEsIGIsIGFMLCBiTCkge1xyXG4gICAgICAgIHZhciBpLCBjbXA7XHJcblxyXG4gICAgICAgIGlmIChhTCAhPSBiTCkge1xyXG4gICAgICAgICAgY21wID0gYUwgPiBiTCA/IDEgOiAtMTtcclxuICAgICAgICB9IGVsc2Uge1xyXG5cclxuICAgICAgICAgIGZvciAoaSA9IGNtcCA9IDA7IGkgPCBhTDsgaSsrKSB7XHJcblxyXG4gICAgICAgICAgICBpZiAoYVtpXSAhPSBiW2ldKSB7XHJcbiAgICAgICAgICAgICAgY21wID0gYVtpXSA+IGJbaV0gPyAxIDogLTE7XHJcbiAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBjbXA7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGZ1bmN0aW9uIHN1YnRyYWN0KGEsIGIsIGFMLCBiYXNlKSB7XHJcbiAgICAgICAgdmFyIGkgPSAwO1xyXG5cclxuICAgICAgICAvLyBTdWJ0cmFjdCBiIGZyb20gYS5cclxuICAgICAgICBmb3IgKDsgYUwtLTspIHtcclxuICAgICAgICAgIGFbYUxdIC09IGk7XHJcbiAgICAgICAgICBpID0gYVthTF0gPCBiW2FMXSA/IDEgOiAwO1xyXG4gICAgICAgICAgYVthTF0gPSBpICogYmFzZSArIGFbYUxdIC0gYlthTF07XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBSZW1vdmUgbGVhZGluZyB6ZXJvcy5cclxuICAgICAgICBmb3IgKDsgIWFbMF0gJiYgYS5sZW5ndGggPiAxOyBhLnNwbGljZSgwLCAxKSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vIHg6IGRpdmlkZW5kLCB5OiBkaXZpc29yLlxyXG4gICAgICByZXR1cm4gZnVuY3Rpb24gKHgsIHksIGRwLCBybSwgYmFzZSkge1xyXG4gICAgICAgIHZhciBjbXAsIGUsIGksIG1vcmUsIG4sIHByb2QsIHByb2RMLCBxLCBxYywgcmVtLCByZW1MLCByZW0wLCB4aSwgeEwsIHljMCxcclxuICAgICAgICAgIHlMLCB5eixcclxuICAgICAgICAgIHMgPSB4LnMgPT0geS5zID8gMSA6IC0xLFxyXG4gICAgICAgICAgeGMgPSB4LmMsXHJcbiAgICAgICAgICB5YyA9IHkuYztcclxuXHJcbiAgICAgICAgLy8gRWl0aGVyIE5hTiwgSW5maW5pdHkgb3IgMD9cclxuICAgICAgICBpZiAoIXhjIHx8ICF4Y1swXSB8fCAheWMgfHwgIXljWzBdKSB7XHJcblxyXG4gICAgICAgICAgcmV0dXJuIG5ldyBCaWdOdW1iZXIoXHJcblxyXG4gICAgICAgICAgIC8vIFJldHVybiBOYU4gaWYgZWl0aGVyIE5hTiwgb3IgYm90aCBJbmZpbml0eSBvciAwLlxyXG4gICAgICAgICAgICF4LnMgfHwgIXkucyB8fCAoeGMgPyB5YyAmJiB4Y1swXSA9PSB5Y1swXSA6ICF5YykgPyBOYU4gOlxyXG5cclxuICAgICAgICAgICAgLy8gUmV0dXJuIMKxMCBpZiB4IGlzIMKxMCBvciB5IGlzIMKxSW5maW5pdHksIG9yIHJldHVybiDCsUluZmluaXR5IGFzIHkgaXMgwrEwLlxyXG4gICAgICAgICAgICB4YyAmJiB4Y1swXSA9PSAwIHx8ICF5YyA/IHMgKiAwIDogcyAvIDBcclxuICAgICAgICAgKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHEgPSBuZXcgQmlnTnVtYmVyKHMpO1xyXG4gICAgICAgIHFjID0gcS5jID0gW107XHJcbiAgICAgICAgZSA9IHguZSAtIHkuZTtcclxuICAgICAgICBzID0gZHAgKyBlICsgMTtcclxuXHJcbiAgICAgICAgaWYgKCFiYXNlKSB7XHJcbiAgICAgICAgICBiYXNlID0gQkFTRTtcclxuICAgICAgICAgIGUgPSBiaXRGbG9vcih4LmUgLyBMT0dfQkFTRSkgLSBiaXRGbG9vcih5LmUgLyBMT0dfQkFTRSk7XHJcbiAgICAgICAgICBzID0gcyAvIExPR19CQVNFIHwgMDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIFJlc3VsdCBleHBvbmVudCBtYXkgYmUgb25lIGxlc3MgdGhlbiB0aGUgY3VycmVudCB2YWx1ZSBvZiBlLlxyXG4gICAgICAgIC8vIFRoZSBjb2VmZmljaWVudHMgb2YgdGhlIEJpZ051bWJlcnMgZnJvbSBjb252ZXJ0QmFzZSBtYXkgaGF2ZSB0cmFpbGluZyB6ZXJvcy5cclxuICAgICAgICBmb3IgKGkgPSAwOyB5Y1tpXSA9PSAoeGNbaV0gfHwgMCk7IGkrKyk7XHJcblxyXG4gICAgICAgIGlmICh5Y1tpXSA+ICh4Y1tpXSB8fCAwKSkgZS0tO1xyXG5cclxuICAgICAgICBpZiAocyA8IDApIHtcclxuICAgICAgICAgIHFjLnB1c2goMSk7XHJcbiAgICAgICAgICBtb3JlID0gdHJ1ZTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgeEwgPSB4Yy5sZW5ndGg7XHJcbiAgICAgICAgICB5TCA9IHljLmxlbmd0aDtcclxuICAgICAgICAgIGkgPSAwO1xyXG4gICAgICAgICAgcyArPSAyO1xyXG5cclxuICAgICAgICAgIC8vIE5vcm1hbGlzZSB4YyBhbmQgeWMgc28gaGlnaGVzdCBvcmRlciBkaWdpdCBvZiB5YyBpcyA+PSBiYXNlIC8gMi5cclxuXHJcbiAgICAgICAgICBuID0gbWF0aGZsb29yKGJhc2UgLyAoeWNbMF0gKyAxKSk7XHJcblxyXG4gICAgICAgICAgLy8gTm90IG5lY2Vzc2FyeSwgYnV0IHRvIGhhbmRsZSBvZGQgYmFzZXMgd2hlcmUgeWNbMF0gPT0gKGJhc2UgLyAyKSAtIDEuXHJcbiAgICAgICAgICAvLyBpZiAobiA+IDEgfHwgbisrID09IDEgJiYgeWNbMF0gPCBiYXNlIC8gMikge1xyXG4gICAgICAgICAgaWYgKG4gPiAxKSB7XHJcbiAgICAgICAgICAgIHljID0gbXVsdGlwbHkoeWMsIG4sIGJhc2UpO1xyXG4gICAgICAgICAgICB4YyA9IG11bHRpcGx5KHhjLCBuLCBiYXNlKTtcclxuICAgICAgICAgICAgeUwgPSB5Yy5sZW5ndGg7XHJcbiAgICAgICAgICAgIHhMID0geGMubGVuZ3RoO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIHhpID0geUw7XHJcbiAgICAgICAgICByZW0gPSB4Yy5zbGljZSgwLCB5TCk7XHJcbiAgICAgICAgICByZW1MID0gcmVtLmxlbmd0aDtcclxuXHJcbiAgICAgICAgICAvLyBBZGQgemVyb3MgdG8gbWFrZSByZW1haW5kZXIgYXMgbG9uZyBhcyBkaXZpc29yLlxyXG4gICAgICAgICAgZm9yICg7IHJlbUwgPCB5TDsgcmVtW3JlbUwrK10gPSAwKTtcclxuICAgICAgICAgIHl6ID0geWMuc2xpY2UoKTtcclxuICAgICAgICAgIHl6ID0gWzBdLmNvbmNhdCh5eik7XHJcbiAgICAgICAgICB5YzAgPSB5Y1swXTtcclxuICAgICAgICAgIGlmICh5Y1sxXSA+PSBiYXNlIC8gMikgeWMwKys7XHJcbiAgICAgICAgICAvLyBOb3QgbmVjZXNzYXJ5LCBidXQgdG8gcHJldmVudCB0cmlhbCBkaWdpdCBuID4gYmFzZSwgd2hlbiB1c2luZyBiYXNlIDMuXHJcbiAgICAgICAgICAvLyBlbHNlIGlmIChiYXNlID09IDMgJiYgeWMwID09IDEpIHljMCA9IDEgKyAxZS0xNTtcclxuXHJcbiAgICAgICAgICBkbyB7XHJcbiAgICAgICAgICAgIG4gPSAwO1xyXG5cclxuICAgICAgICAgICAgLy8gQ29tcGFyZSBkaXZpc29yIGFuZCByZW1haW5kZXIuXHJcbiAgICAgICAgICAgIGNtcCA9IGNvbXBhcmUoeWMsIHJlbSwgeUwsIHJlbUwpO1xyXG5cclxuICAgICAgICAgICAgLy8gSWYgZGl2aXNvciA8IHJlbWFpbmRlci5cclxuICAgICAgICAgICAgaWYgKGNtcCA8IDApIHtcclxuXHJcbiAgICAgICAgICAgICAgLy8gQ2FsY3VsYXRlIHRyaWFsIGRpZ2l0LCBuLlxyXG5cclxuICAgICAgICAgICAgICByZW0wID0gcmVtWzBdO1xyXG4gICAgICAgICAgICAgIGlmICh5TCAhPSByZW1MKSByZW0wID0gcmVtMCAqIGJhc2UgKyAocmVtWzFdIHx8IDApO1xyXG5cclxuICAgICAgICAgICAgICAvLyBuIGlzIGhvdyBtYW55IHRpbWVzIHRoZSBkaXZpc29yIGdvZXMgaW50byB0aGUgY3VycmVudCByZW1haW5kZXIuXHJcbiAgICAgICAgICAgICAgbiA9IG1hdGhmbG9vcihyZW0wIC8geWMwKTtcclxuXHJcbiAgICAgICAgICAgICAgLy8gIEFsZ29yaXRobTpcclxuICAgICAgICAgICAgICAvLyAgcHJvZHVjdCA9IGRpdmlzb3IgbXVsdGlwbGllZCBieSB0cmlhbCBkaWdpdCAobikuXHJcbiAgICAgICAgICAgICAgLy8gIENvbXBhcmUgcHJvZHVjdCBhbmQgcmVtYWluZGVyLlxyXG4gICAgICAgICAgICAgIC8vICBJZiBwcm9kdWN0IGlzIGdyZWF0ZXIgdGhhbiByZW1haW5kZXI6XHJcbiAgICAgICAgICAgICAgLy8gICAgU3VidHJhY3QgZGl2aXNvciBmcm9tIHByb2R1Y3QsIGRlY3JlbWVudCB0cmlhbCBkaWdpdC5cclxuICAgICAgICAgICAgICAvLyAgU3VidHJhY3QgcHJvZHVjdCBmcm9tIHJlbWFpbmRlci5cclxuICAgICAgICAgICAgICAvLyAgSWYgcHJvZHVjdCB3YXMgbGVzcyB0aGFuIHJlbWFpbmRlciBhdCB0aGUgbGFzdCBjb21wYXJlOlxyXG4gICAgICAgICAgICAgIC8vICAgIENvbXBhcmUgbmV3IHJlbWFpbmRlciBhbmQgZGl2aXNvci5cclxuICAgICAgICAgICAgICAvLyAgICBJZiByZW1haW5kZXIgaXMgZ3JlYXRlciB0aGFuIGRpdmlzb3I6XHJcbiAgICAgICAgICAgICAgLy8gICAgICBTdWJ0cmFjdCBkaXZpc29yIGZyb20gcmVtYWluZGVyLCBpbmNyZW1lbnQgdHJpYWwgZGlnaXQuXHJcblxyXG4gICAgICAgICAgICAgIGlmIChuID4gMSkge1xyXG5cclxuICAgICAgICAgICAgICAgIC8vIG4gbWF5IGJlID4gYmFzZSBvbmx5IHdoZW4gYmFzZSBpcyAzLlxyXG4gICAgICAgICAgICAgICAgaWYgKG4gPj0gYmFzZSkgbiA9IGJhc2UgLSAxO1xyXG5cclxuICAgICAgICAgICAgICAgIC8vIHByb2R1Y3QgPSBkaXZpc29yICogdHJpYWwgZGlnaXQuXHJcbiAgICAgICAgICAgICAgICBwcm9kID0gbXVsdGlwbHkoeWMsIG4sIGJhc2UpO1xyXG4gICAgICAgICAgICAgICAgcHJvZEwgPSBwcm9kLmxlbmd0aDtcclxuICAgICAgICAgICAgICAgIHJlbUwgPSByZW0ubGVuZ3RoO1xyXG5cclxuICAgICAgICAgICAgICAgIC8vIENvbXBhcmUgcHJvZHVjdCBhbmQgcmVtYWluZGVyLlxyXG4gICAgICAgICAgICAgICAgLy8gSWYgcHJvZHVjdCA+IHJlbWFpbmRlciB0aGVuIHRyaWFsIGRpZ2l0IG4gdG9vIGhpZ2guXHJcbiAgICAgICAgICAgICAgICAvLyBuIGlzIDEgdG9vIGhpZ2ggYWJvdXQgNSUgb2YgdGhlIHRpbWUsIGFuZCBpcyBub3Qga25vd24gdG8gaGF2ZVxyXG4gICAgICAgICAgICAgICAgLy8gZXZlciBiZWVuIG1vcmUgdGhhbiAxIHRvbyBoaWdoLlxyXG4gICAgICAgICAgICAgICAgd2hpbGUgKGNvbXBhcmUocHJvZCwgcmVtLCBwcm9kTCwgcmVtTCkgPT0gMSkge1xyXG4gICAgICAgICAgICAgICAgICBuLS07XHJcblxyXG4gICAgICAgICAgICAgICAgICAvLyBTdWJ0cmFjdCBkaXZpc29yIGZyb20gcHJvZHVjdC5cclxuICAgICAgICAgICAgICAgICAgc3VidHJhY3QocHJvZCwgeUwgPCBwcm9kTCA/IHl6IDogeWMsIHByb2RMLCBiYXNlKTtcclxuICAgICAgICAgICAgICAgICAgcHJvZEwgPSBwcm9kLmxlbmd0aDtcclxuICAgICAgICAgICAgICAgICAgY21wID0gMTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9IGVsc2Uge1xyXG5cclxuICAgICAgICAgICAgICAgIC8vIG4gaXMgMCBvciAxLCBjbXAgaXMgLTEuXHJcbiAgICAgICAgICAgICAgICAvLyBJZiBuIGlzIDAsIHRoZXJlIGlzIG5vIG5lZWQgdG8gY29tcGFyZSB5YyBhbmQgcmVtIGFnYWluIGJlbG93LFxyXG4gICAgICAgICAgICAgICAgLy8gc28gY2hhbmdlIGNtcCB0byAxIHRvIGF2b2lkIGl0LlxyXG4gICAgICAgICAgICAgICAgLy8gSWYgbiBpcyAxLCBsZWF2ZSBjbXAgYXMgLTEsIHNvIHljIGFuZCByZW0gYXJlIGNvbXBhcmVkIGFnYWluLlxyXG4gICAgICAgICAgICAgICAgaWYgKG4gPT0gMCkge1xyXG5cclxuICAgICAgICAgICAgICAgICAgLy8gZGl2aXNvciA8IHJlbWFpbmRlciwgc28gbiBtdXN0IGJlIGF0IGxlYXN0IDEuXHJcbiAgICAgICAgICAgICAgICAgIGNtcCA9IG4gPSAxO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIC8vIHByb2R1Y3QgPSBkaXZpc29yXHJcbiAgICAgICAgICAgICAgICBwcm9kID0geWMuc2xpY2UoKTtcclxuICAgICAgICAgICAgICAgIHByb2RMID0gcHJvZC5sZW5ndGg7XHJcbiAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICBpZiAocHJvZEwgPCByZW1MKSBwcm9kID0gWzBdLmNvbmNhdChwcm9kKTtcclxuXHJcbiAgICAgICAgICAgICAgLy8gU3VidHJhY3QgcHJvZHVjdCBmcm9tIHJlbWFpbmRlci5cclxuICAgICAgICAgICAgICBzdWJ0cmFjdChyZW0sIHByb2QsIHJlbUwsIGJhc2UpO1xyXG4gICAgICAgICAgICAgIHJlbUwgPSByZW0ubGVuZ3RoO1xyXG5cclxuICAgICAgICAgICAgICAgLy8gSWYgcHJvZHVjdCB3YXMgPCByZW1haW5kZXIuXHJcbiAgICAgICAgICAgICAgaWYgKGNtcCA9PSAtMSkge1xyXG5cclxuICAgICAgICAgICAgICAgIC8vIENvbXBhcmUgZGl2aXNvciBhbmQgbmV3IHJlbWFpbmRlci5cclxuICAgICAgICAgICAgICAgIC8vIElmIGRpdmlzb3IgPCBuZXcgcmVtYWluZGVyLCBzdWJ0cmFjdCBkaXZpc29yIGZyb20gcmVtYWluZGVyLlxyXG4gICAgICAgICAgICAgICAgLy8gVHJpYWwgZGlnaXQgbiB0b28gbG93LlxyXG4gICAgICAgICAgICAgICAgLy8gbiBpcyAxIHRvbyBsb3cgYWJvdXQgNSUgb2YgdGhlIHRpbWUsIGFuZCB2ZXJ5IHJhcmVseSAyIHRvbyBsb3cuXHJcbiAgICAgICAgICAgICAgICB3aGlsZSAoY29tcGFyZSh5YywgcmVtLCB5TCwgcmVtTCkgPCAxKSB7XHJcbiAgICAgICAgICAgICAgICAgIG4rKztcclxuXHJcbiAgICAgICAgICAgICAgICAgIC8vIFN1YnRyYWN0IGRpdmlzb3IgZnJvbSByZW1haW5kZXIuXHJcbiAgICAgICAgICAgICAgICAgIHN1YnRyYWN0KHJlbSwgeUwgPCByZW1MID8geXogOiB5YywgcmVtTCwgYmFzZSk7XHJcbiAgICAgICAgICAgICAgICAgIHJlbUwgPSByZW0ubGVuZ3RoO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBlbHNlIGlmIChjbXAgPT09IDApIHtcclxuICAgICAgICAgICAgICBuKys7XHJcbiAgICAgICAgICAgICAgcmVtID0gWzBdO1xyXG4gICAgICAgICAgICB9IC8vIGVsc2UgY21wID09PSAxIGFuZCBuIHdpbGwgYmUgMFxyXG5cclxuICAgICAgICAgICAgLy8gQWRkIHRoZSBuZXh0IGRpZ2l0LCBuLCB0byB0aGUgcmVzdWx0IGFycmF5LlxyXG4gICAgICAgICAgICBxY1tpKytdID0gbjtcclxuXHJcbiAgICAgICAgICAgIC8vIFVwZGF0ZSB0aGUgcmVtYWluZGVyLlxyXG4gICAgICAgICAgICBpZiAocmVtWzBdKSB7XHJcbiAgICAgICAgICAgICAgcmVtW3JlbUwrK10gPSB4Y1t4aV0gfHwgMDtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICByZW0gPSBbeGNbeGldXTtcclxuICAgICAgICAgICAgICByZW1MID0gMTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSB3aGlsZSAoKHhpKysgPCB4TCB8fCByZW1bMF0gIT0gbnVsbCkgJiYgcy0tKTtcclxuXHJcbiAgICAgICAgICBtb3JlID0gcmVtWzBdICE9IG51bGw7XHJcblxyXG4gICAgICAgICAgLy8gTGVhZGluZyB6ZXJvP1xyXG4gICAgICAgICAgaWYgKCFxY1swXSkgcWMuc3BsaWNlKDAsIDEpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGJhc2UgPT0gQkFTRSkge1xyXG5cclxuICAgICAgICAgIC8vIFRvIGNhbGN1bGF0ZSBxLmUsIGZpcnN0IGdldCB0aGUgbnVtYmVyIG9mIGRpZ2l0cyBvZiBxY1swXS5cclxuICAgICAgICAgIGZvciAoaSA9IDEsIHMgPSBxY1swXTsgcyA+PSAxMDsgcyAvPSAxMCwgaSsrKTtcclxuXHJcbiAgICAgICAgICByb3VuZChxLCBkcCArIChxLmUgPSBpICsgZSAqIExPR19CQVNFIC0gMSkgKyAxLCBybSwgbW9yZSk7XHJcblxyXG4gICAgICAgIC8vIENhbGxlciBpcyBjb252ZXJ0QmFzZS5cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgcS5lID0gZTtcclxuICAgICAgICAgIHEuciA9ICttb3JlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHE7XHJcbiAgICAgIH07XHJcbiAgICB9KSgpO1xyXG5cclxuXHJcbiAgICAvKlxyXG4gICAgICogUmV0dXJuIGEgc3RyaW5nIHJlcHJlc2VudGluZyB0aGUgdmFsdWUgb2YgQmlnTnVtYmVyIG4gaW4gZml4ZWQtcG9pbnQgb3IgZXhwb25lbnRpYWxcclxuICAgICAqIG5vdGF0aW9uIHJvdW5kZWQgdG8gdGhlIHNwZWNpZmllZCBkZWNpbWFsIHBsYWNlcyBvciBzaWduaWZpY2FudCBkaWdpdHMuXHJcbiAgICAgKlxyXG4gICAgICogbjogYSBCaWdOdW1iZXIuXHJcbiAgICAgKiBpOiB0aGUgaW5kZXggb2YgdGhlIGxhc3QgZGlnaXQgcmVxdWlyZWQgKGkuZS4gdGhlIGRpZ2l0IHRoYXQgbWF5IGJlIHJvdW5kZWQgdXApLlxyXG4gICAgICogcm06IHRoZSByb3VuZGluZyBtb2RlLlxyXG4gICAgICogaWQ6IDEgKHRvRXhwb25lbnRpYWwpIG9yIDIgKHRvUHJlY2lzaW9uKS5cclxuICAgICAqL1xyXG4gICAgZnVuY3Rpb24gZm9ybWF0KG4sIGksIHJtLCBpZCkge1xyXG4gICAgICB2YXIgYzAsIGUsIG5lLCBsZW4sIHN0cjtcclxuXHJcbiAgICAgIGlmIChybSA9PSBudWxsKSBybSA9IFJPVU5ESU5HX01PREU7XHJcbiAgICAgIGVsc2UgaW50Q2hlY2socm0sIDAsIDgpO1xyXG5cclxuICAgICAgaWYgKCFuLmMpIHJldHVybiBuLnRvU3RyaW5nKCk7XHJcblxyXG4gICAgICBjMCA9IG4uY1swXTtcclxuICAgICAgbmUgPSBuLmU7XHJcblxyXG4gICAgICBpZiAoaSA9PSBudWxsKSB7XHJcbiAgICAgICAgc3RyID0gY29lZmZUb1N0cmluZyhuLmMpO1xyXG4gICAgICAgIHN0ciA9IGlkID09IDEgfHwgaWQgPT0gMiAmJiAobmUgPD0gVE9fRVhQX05FRyB8fCBuZSA+PSBUT19FWFBfUE9TKVxyXG4gICAgICAgICA/IHRvRXhwb25lbnRpYWwoc3RyLCBuZSlcclxuICAgICAgICAgOiB0b0ZpeGVkUG9pbnQoc3RyLCBuZSwgJzAnKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBuID0gcm91bmQobmV3IEJpZ051bWJlcihuKSwgaSwgcm0pO1xyXG5cclxuICAgICAgICAvLyBuLmUgbWF5IGhhdmUgY2hhbmdlZCBpZiB0aGUgdmFsdWUgd2FzIHJvdW5kZWQgdXAuXHJcbiAgICAgICAgZSA9IG4uZTtcclxuXHJcbiAgICAgICAgc3RyID0gY29lZmZUb1N0cmluZyhuLmMpO1xyXG4gICAgICAgIGxlbiA9IHN0ci5sZW5ndGg7XHJcblxyXG4gICAgICAgIC8vIHRvUHJlY2lzaW9uIHJldHVybnMgZXhwb25lbnRpYWwgbm90YXRpb24gaWYgdGhlIG51bWJlciBvZiBzaWduaWZpY2FudCBkaWdpdHNcclxuICAgICAgICAvLyBzcGVjaWZpZWQgaXMgbGVzcyB0aGFuIHRoZSBudW1iZXIgb2YgZGlnaXRzIG5lY2Vzc2FyeSB0byByZXByZXNlbnQgdGhlIGludGVnZXJcclxuICAgICAgICAvLyBwYXJ0IG9mIHRoZSB2YWx1ZSBpbiBmaXhlZC1wb2ludCBub3RhdGlvbi5cclxuXHJcbiAgICAgICAgLy8gRXhwb25lbnRpYWwgbm90YXRpb24uXHJcbiAgICAgICAgaWYgKGlkID09IDEgfHwgaWQgPT0gMiAmJiAoaSA8PSBlIHx8IGUgPD0gVE9fRVhQX05FRykpIHtcclxuXHJcbiAgICAgICAgICAvLyBBcHBlbmQgemVyb3M/XHJcbiAgICAgICAgICBmb3IgKDsgbGVuIDwgaTsgc3RyICs9ICcwJywgbGVuKyspO1xyXG4gICAgICAgICAgc3RyID0gdG9FeHBvbmVudGlhbChzdHIsIGUpO1xyXG5cclxuICAgICAgICAvLyBGaXhlZC1wb2ludCBub3RhdGlvbi5cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgaSAtPSBuZTtcclxuICAgICAgICAgIHN0ciA9IHRvRml4ZWRQb2ludChzdHIsIGUsICcwJyk7XHJcblxyXG4gICAgICAgICAgLy8gQXBwZW5kIHplcm9zP1xyXG4gICAgICAgICAgaWYgKGUgKyAxID4gbGVuKSB7XHJcbiAgICAgICAgICAgIGlmICgtLWkgPiAwKSBmb3IgKHN0ciArPSAnLic7IGktLTsgc3RyICs9ICcwJyk7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBpICs9IGUgLSBsZW47XHJcbiAgICAgICAgICAgIGlmIChpID4gMCkge1xyXG4gICAgICAgICAgICAgIGlmIChlICsgMSA9PSBsZW4pIHN0ciArPSAnLic7XHJcbiAgICAgICAgICAgICAgZm9yICg7IGktLTsgc3RyICs9ICcwJyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJldHVybiBuLnMgPCAwICYmIGMwID8gJy0nICsgc3RyIDogc3RyO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvLyBIYW5kbGUgQmlnTnVtYmVyLm1heCBhbmQgQmlnTnVtYmVyLm1pbi5cclxuICAgIGZ1bmN0aW9uIG1heE9yTWluKGFyZ3MsIG1ldGhvZCkge1xyXG4gICAgICB2YXIgbixcclxuICAgICAgICBpID0gMSxcclxuICAgICAgICBtID0gbmV3IEJpZ051bWJlcihhcmdzWzBdKTtcclxuXHJcbiAgICAgIGZvciAoOyBpIDwgYXJncy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIG4gPSBuZXcgQmlnTnVtYmVyKGFyZ3NbaV0pO1xyXG5cclxuICAgICAgICAvLyBJZiBhbnkgbnVtYmVyIGlzIE5hTiwgcmV0dXJuIE5hTi5cclxuICAgICAgICBpZiAoIW4ucykge1xyXG4gICAgICAgICAgbSA9IG47XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICB9IGVsc2UgaWYgKG1ldGhvZC5jYWxsKG0sIG4pKSB7XHJcbiAgICAgICAgICBtID0gbjtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJldHVybiBtO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvKlxyXG4gICAgICogU3RyaXAgdHJhaWxpbmcgemVyb3MsIGNhbGN1bGF0ZSBiYXNlIDEwIGV4cG9uZW50IGFuZCBjaGVjayBhZ2FpbnN0IE1JTl9FWFAgYW5kIE1BWF9FWFAuXHJcbiAgICAgKiBDYWxsZWQgYnkgbWludXMsIHBsdXMgYW5kIHRpbWVzLlxyXG4gICAgICovXHJcbiAgICBmdW5jdGlvbiBub3JtYWxpc2UobiwgYywgZSkge1xyXG4gICAgICB2YXIgaSA9IDEsXHJcbiAgICAgICAgaiA9IGMubGVuZ3RoO1xyXG5cclxuICAgICAgIC8vIFJlbW92ZSB0cmFpbGluZyB6ZXJvcy5cclxuICAgICAgZm9yICg7ICFjWy0tal07IGMucG9wKCkpO1xyXG5cclxuICAgICAgLy8gQ2FsY3VsYXRlIHRoZSBiYXNlIDEwIGV4cG9uZW50LiBGaXJzdCBnZXQgdGhlIG51bWJlciBvZiBkaWdpdHMgb2YgY1swXS5cclxuICAgICAgZm9yIChqID0gY1swXTsgaiA+PSAxMDsgaiAvPSAxMCwgaSsrKTtcclxuXHJcbiAgICAgIC8vIE92ZXJmbG93P1xyXG4gICAgICBpZiAoKGUgPSBpICsgZSAqIExPR19CQVNFIC0gMSkgPiBNQVhfRVhQKSB7XHJcblxyXG4gICAgICAgIC8vIEluZmluaXR5LlxyXG4gICAgICAgIG4uYyA9IG4uZSA9IG51bGw7XHJcblxyXG4gICAgICAvLyBVbmRlcmZsb3c/XHJcbiAgICAgIH0gZWxzZSBpZiAoZSA8IE1JTl9FWFApIHtcclxuXHJcbiAgICAgICAgLy8gWmVyby5cclxuICAgICAgICBuLmMgPSBbbi5lID0gMF07XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgbi5lID0gZTtcclxuICAgICAgICBuLmMgPSBjO1xyXG4gICAgICB9XHJcblxyXG4gICAgICByZXR1cm4gbjtcclxuICAgIH1cclxuXHJcblxyXG4gICAgLy8gSGFuZGxlIHZhbHVlcyB0aGF0IGZhaWwgdGhlIHZhbGlkaXR5IHRlc3QgaW4gQmlnTnVtYmVyLlxyXG4gICAgcGFyc2VOdW1lcmljID0gKGZ1bmN0aW9uICgpIHtcclxuICAgICAgdmFyIGJhc2VQcmVmaXggPSAvXigtPykwKFt4Ym9dKSg/PVxcd1tcXHcuXSokKS9pLFxyXG4gICAgICAgIGRvdEFmdGVyID0gL14oW14uXSspXFwuJC8sXHJcbiAgICAgICAgZG90QmVmb3JlID0gL15cXC4oW14uXSspJC8sXHJcbiAgICAgICAgaXNJbmZpbml0eU9yTmFOID0gL14tPyhJbmZpbml0eXxOYU4pJC8sXHJcbiAgICAgICAgd2hpdGVzcGFjZU9yUGx1cyA9IC9eXFxzKlxcKyg/PVtcXHcuXSl8Xlxccyt8XFxzKyQvZztcclxuXHJcbiAgICAgIHJldHVybiBmdW5jdGlvbiAoeCwgc3RyLCBpc051bSwgYikge1xyXG4gICAgICAgIHZhciBiYXNlLFxyXG4gICAgICAgICAgcyA9IGlzTnVtID8gc3RyIDogc3RyLnJlcGxhY2Uod2hpdGVzcGFjZU9yUGx1cywgJycpO1xyXG5cclxuICAgICAgICAvLyBObyBleGNlcHRpb24gb24gwrFJbmZpbml0eSBvciBOYU4uXHJcbiAgICAgICAgaWYgKGlzSW5maW5pdHlPck5hTi50ZXN0KHMpKSB7XHJcbiAgICAgICAgICB4LnMgPSBpc05hTihzKSA/IG51bGwgOiBzIDwgMCA/IC0xIDogMTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgaWYgKCFpc051bSkge1xyXG5cclxuICAgICAgICAgICAgLy8gYmFzZVByZWZpeCA9IC9eKC0/KTAoW3hib10pKD89XFx3W1xcdy5dKiQpL2lcclxuICAgICAgICAgICAgcyA9IHMucmVwbGFjZShiYXNlUHJlZml4LCBmdW5jdGlvbiAobSwgcDEsIHAyKSB7XHJcbiAgICAgICAgICAgICAgYmFzZSA9IChwMiA9IHAyLnRvTG93ZXJDYXNlKCkpID09ICd4JyA/IDE2IDogcDIgPT0gJ2InID8gMiA6IDg7XHJcbiAgICAgICAgICAgICAgcmV0dXJuICFiIHx8IGIgPT0gYmFzZSA/IHAxIDogbTtcclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICBpZiAoYikge1xyXG4gICAgICAgICAgICAgIGJhc2UgPSBiO1xyXG5cclxuICAgICAgICAgICAgICAvLyBFLmcuICcxLicgdG8gJzEnLCAnLjEnIHRvICcwLjEnXHJcbiAgICAgICAgICAgICAgcyA9IHMucmVwbGFjZShkb3RBZnRlciwgJyQxJykucmVwbGFjZShkb3RCZWZvcmUsICcwLiQxJyk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmIChzdHIgIT0gcykgcmV0dXJuIG5ldyBCaWdOdW1iZXIocywgYmFzZSk7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgLy8gJ1tCaWdOdW1iZXIgRXJyb3JdIE5vdCBhIG51bWJlcjoge259J1xyXG4gICAgICAgICAgLy8gJ1tCaWdOdW1iZXIgRXJyb3JdIE5vdCBhIGJhc2Uge2J9IG51bWJlcjoge259J1xyXG4gICAgICAgICAgaWYgKEJpZ051bWJlci5ERUJVRykge1xyXG4gICAgICAgICAgICB0aHJvdyBFcnJvclxyXG4gICAgICAgICAgICAgIChiaWdudW1iZXJFcnJvciArICdOb3QgYScgKyAoYiA/ICcgYmFzZSAnICsgYiA6ICcnKSArICcgbnVtYmVyOiAnICsgc3RyKTtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAvLyBOYU5cclxuICAgICAgICAgIHgucyA9IG51bGw7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB4LmMgPSB4LmUgPSBudWxsO1xyXG4gICAgICB9XHJcbiAgICB9KSgpO1xyXG5cclxuXHJcbiAgICAvKlxyXG4gICAgICogUm91bmQgeCB0byBzZCBzaWduaWZpY2FudCBkaWdpdHMgdXNpbmcgcm91bmRpbmcgbW9kZSBybS4gQ2hlY2sgZm9yIG92ZXIvdW5kZXItZmxvdy5cclxuICAgICAqIElmIHIgaXMgdHJ1dGh5LCBpdCBpcyBrbm93biB0aGF0IHRoZXJlIGFyZSBtb3JlIGRpZ2l0cyBhZnRlciB0aGUgcm91bmRpbmcgZGlnaXQuXHJcbiAgICAgKi9cclxuICAgIGZ1bmN0aW9uIHJvdW5kKHgsIHNkLCBybSwgcikge1xyXG4gICAgICB2YXIgZCwgaSwgaiwgaywgbiwgbmksIHJkLFxyXG4gICAgICAgIHhjID0geC5jLFxyXG4gICAgICAgIHBvd3MxMCA9IFBPV1NfVEVOO1xyXG5cclxuICAgICAgLy8gaWYgeCBpcyBub3QgSW5maW5pdHkgb3IgTmFOLi4uXHJcbiAgICAgIGlmICh4Yykge1xyXG5cclxuICAgICAgICAvLyByZCBpcyB0aGUgcm91bmRpbmcgZGlnaXQsIGkuZS4gdGhlIGRpZ2l0IGFmdGVyIHRoZSBkaWdpdCB0aGF0IG1heSBiZSByb3VuZGVkIHVwLlxyXG4gICAgICAgIC8vIG4gaXMgYSBiYXNlIDFlMTQgbnVtYmVyLCB0aGUgdmFsdWUgb2YgdGhlIGVsZW1lbnQgb2YgYXJyYXkgeC5jIGNvbnRhaW5pbmcgcmQuXHJcbiAgICAgICAgLy8gbmkgaXMgdGhlIGluZGV4IG9mIG4gd2l0aGluIHguYy5cclxuICAgICAgICAvLyBkIGlzIHRoZSBudW1iZXIgb2YgZGlnaXRzIG9mIG4uXHJcbiAgICAgICAgLy8gaSBpcyB0aGUgaW5kZXggb2YgcmQgd2l0aGluIG4gaW5jbHVkaW5nIGxlYWRpbmcgemVyb3MuXHJcbiAgICAgICAgLy8gaiBpcyB0aGUgYWN0dWFsIGluZGV4IG9mIHJkIHdpdGhpbiBuIChpZiA8IDAsIHJkIGlzIGEgbGVhZGluZyB6ZXJvKS5cclxuICAgICAgICBvdXQ6IHtcclxuXHJcbiAgICAgICAgICAvLyBHZXQgdGhlIG51bWJlciBvZiBkaWdpdHMgb2YgdGhlIGZpcnN0IGVsZW1lbnQgb2YgeGMuXHJcbiAgICAgICAgICBmb3IgKGQgPSAxLCBrID0geGNbMF07IGsgPj0gMTA7IGsgLz0gMTAsIGQrKyk7XHJcbiAgICAgICAgICBpID0gc2QgLSBkO1xyXG5cclxuICAgICAgICAgIC8vIElmIHRoZSByb3VuZGluZyBkaWdpdCBpcyBpbiB0aGUgZmlyc3QgZWxlbWVudCBvZiB4Yy4uLlxyXG4gICAgICAgICAgaWYgKGkgPCAwKSB7XHJcbiAgICAgICAgICAgIGkgKz0gTE9HX0JBU0U7XHJcbiAgICAgICAgICAgIGogPSBzZDtcclxuICAgICAgICAgICAgbiA9IHhjW25pID0gMF07XHJcblxyXG4gICAgICAgICAgICAvLyBHZXQgdGhlIHJvdW5kaW5nIGRpZ2l0IGF0IGluZGV4IGogb2Ygbi5cclxuICAgICAgICAgICAgcmQgPSBuIC8gcG93czEwW2QgLSBqIC0gMV0gJSAxMCB8IDA7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBuaSA9IG1hdGhjZWlsKChpICsgMSkgLyBMT0dfQkFTRSk7XHJcblxyXG4gICAgICAgICAgICBpZiAobmkgPj0geGMubGVuZ3RoKSB7XHJcblxyXG4gICAgICAgICAgICAgIGlmIChyKSB7XHJcblxyXG4gICAgICAgICAgICAgICAgLy8gTmVlZGVkIGJ5IHNxcnQuXHJcbiAgICAgICAgICAgICAgICBmb3IgKDsgeGMubGVuZ3RoIDw9IG5pOyB4Yy5wdXNoKDApKTtcclxuICAgICAgICAgICAgICAgIG4gPSByZCA9IDA7XHJcbiAgICAgICAgICAgICAgICBkID0gMTtcclxuICAgICAgICAgICAgICAgIGkgJT0gTE9HX0JBU0U7XHJcbiAgICAgICAgICAgICAgICBqID0gaSAtIExPR19CQVNFICsgMTtcclxuICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgYnJlYWsgb3V0O1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICBuID0gayA9IHhjW25pXTtcclxuXHJcbiAgICAgICAgICAgICAgLy8gR2V0IHRoZSBudW1iZXIgb2YgZGlnaXRzIG9mIG4uXHJcbiAgICAgICAgICAgICAgZm9yIChkID0gMTsgayA+PSAxMDsgayAvPSAxMCwgZCsrKTtcclxuXHJcbiAgICAgICAgICAgICAgLy8gR2V0IHRoZSBpbmRleCBvZiByZCB3aXRoaW4gbi5cclxuICAgICAgICAgICAgICBpICU9IExPR19CQVNFO1xyXG5cclxuICAgICAgICAgICAgICAvLyBHZXQgdGhlIGluZGV4IG9mIHJkIHdpdGhpbiBuLCBhZGp1c3RlZCBmb3IgbGVhZGluZyB6ZXJvcy5cclxuICAgICAgICAgICAgICAvLyBUaGUgbnVtYmVyIG9mIGxlYWRpbmcgemVyb3Mgb2YgbiBpcyBnaXZlbiBieSBMT0dfQkFTRSAtIGQuXHJcbiAgICAgICAgICAgICAgaiA9IGkgLSBMT0dfQkFTRSArIGQ7XHJcblxyXG4gICAgICAgICAgICAgIC8vIEdldCB0aGUgcm91bmRpbmcgZGlnaXQgYXQgaW5kZXggaiBvZiBuLlxyXG4gICAgICAgICAgICAgIHJkID0gaiA8IDAgPyAwIDogbiAvIHBvd3MxMFtkIC0gaiAtIDFdICUgMTAgfCAwO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgciA9IHIgfHwgc2QgPCAwIHx8XHJcblxyXG4gICAgICAgICAgLy8gQXJlIHRoZXJlIGFueSBub24temVybyBkaWdpdHMgYWZ0ZXIgdGhlIHJvdW5kaW5nIGRpZ2l0P1xyXG4gICAgICAgICAgLy8gVGhlIGV4cHJlc3Npb24gIG4gJSBwb3dzMTBbZCAtIGogLSAxXSAgcmV0dXJucyBhbGwgZGlnaXRzIG9mIG4gdG8gdGhlIHJpZ2h0XHJcbiAgICAgICAgICAvLyBvZiB0aGUgZGlnaXQgYXQgaiwgZS5nLiBpZiBuIGlzIDkwODcxNCBhbmQgaiBpcyAyLCB0aGUgZXhwcmVzc2lvbiBnaXZlcyA3MTQuXHJcbiAgICAgICAgICAgeGNbbmkgKyAxXSAhPSBudWxsIHx8IChqIDwgMCA/IG4gOiBuICUgcG93czEwW2QgLSBqIC0gMV0pO1xyXG5cclxuICAgICAgICAgIHIgPSBybSA8IDRcclxuICAgICAgICAgICA/IChyZCB8fCByKSAmJiAocm0gPT0gMCB8fCBybSA9PSAoeC5zIDwgMCA/IDMgOiAyKSlcclxuICAgICAgICAgICA6IHJkID4gNSB8fCByZCA9PSA1ICYmIChybSA9PSA0IHx8IHIgfHwgcm0gPT0gNiAmJlxyXG5cclxuICAgICAgICAgICAgLy8gQ2hlY2sgd2hldGhlciB0aGUgZGlnaXQgdG8gdGhlIGxlZnQgb2YgdGhlIHJvdW5kaW5nIGRpZ2l0IGlzIG9kZC5cclxuICAgICAgICAgICAgKChpID4gMCA/IGogPiAwID8gbiAvIHBvd3MxMFtkIC0gal0gOiAwIDogeGNbbmkgLSAxXSkgJSAxMCkgJiAxIHx8XHJcbiAgICAgICAgICAgICBybSA9PSAoeC5zIDwgMCA/IDggOiA3KSk7XHJcblxyXG4gICAgICAgICAgaWYgKHNkIDwgMSB8fCAheGNbMF0pIHtcclxuICAgICAgICAgICAgeGMubGVuZ3RoID0gMDtcclxuXHJcbiAgICAgICAgICAgIGlmIChyKSB7XHJcblxyXG4gICAgICAgICAgICAgIC8vIENvbnZlcnQgc2QgdG8gZGVjaW1hbCBwbGFjZXMuXHJcbiAgICAgICAgICAgICAgc2QgLT0geC5lICsgMTtcclxuXHJcbiAgICAgICAgICAgICAgLy8gMSwgMC4xLCAwLjAxLCAwLjAwMSwgMC4wMDAxIGV0Yy5cclxuICAgICAgICAgICAgICB4Y1swXSA9IHBvd3MxMFsoTE9HX0JBU0UgLSBzZCAlIExPR19CQVNFKSAlIExPR19CQVNFXTtcclxuICAgICAgICAgICAgICB4LmUgPSAtc2QgfHwgMDtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuXHJcbiAgICAgICAgICAgICAgLy8gWmVyby5cclxuICAgICAgICAgICAgICB4Y1swXSA9IHguZSA9IDA7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHJldHVybiB4O1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIC8vIFJlbW92ZSBleGNlc3MgZGlnaXRzLlxyXG4gICAgICAgICAgaWYgKGkgPT0gMCkge1xyXG4gICAgICAgICAgICB4Yy5sZW5ndGggPSBuaTtcclxuICAgICAgICAgICAgayA9IDE7XHJcbiAgICAgICAgICAgIG5pLS07XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB4Yy5sZW5ndGggPSBuaSArIDE7XHJcbiAgICAgICAgICAgIGsgPSBwb3dzMTBbTE9HX0JBU0UgLSBpXTtcclxuXHJcbiAgICAgICAgICAgIC8vIEUuZy4gNTY3MDAgYmVjb21lcyA1NjAwMCBpZiA3IGlzIHRoZSByb3VuZGluZyBkaWdpdC5cclxuICAgICAgICAgICAgLy8gaiA+IDAgbWVhbnMgaSA+IG51bWJlciBvZiBsZWFkaW5nIHplcm9zIG9mIG4uXHJcbiAgICAgICAgICAgIHhjW25pXSA9IGogPiAwID8gbWF0aGZsb29yKG4gLyBwb3dzMTBbZCAtIGpdICUgcG93czEwW2pdKSAqIGsgOiAwO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIC8vIFJvdW5kIHVwP1xyXG4gICAgICAgICAgaWYgKHIpIHtcclxuXHJcbiAgICAgICAgICAgIGZvciAoOyA7KSB7XHJcblxyXG4gICAgICAgICAgICAgIC8vIElmIHRoZSBkaWdpdCB0byBiZSByb3VuZGVkIHVwIGlzIGluIHRoZSBmaXJzdCBlbGVtZW50IG9mIHhjLi4uXHJcbiAgICAgICAgICAgICAgaWYgKG5pID09IDApIHtcclxuXHJcbiAgICAgICAgICAgICAgICAvLyBpIHdpbGwgYmUgdGhlIGxlbmd0aCBvZiB4Y1swXSBiZWZvcmUgayBpcyBhZGRlZC5cclxuICAgICAgICAgICAgICAgIGZvciAoaSA9IDEsIGogPSB4Y1swXTsgaiA+PSAxMDsgaiAvPSAxMCwgaSsrKTtcclxuICAgICAgICAgICAgICAgIGogPSB4Y1swXSArPSBrO1xyXG4gICAgICAgICAgICAgICAgZm9yIChrID0gMTsgaiA+PSAxMDsgaiAvPSAxMCwgaysrKTtcclxuXHJcbiAgICAgICAgICAgICAgICAvLyBpZiBpICE9IGsgdGhlIGxlbmd0aCBoYXMgaW5jcmVhc2VkLlxyXG4gICAgICAgICAgICAgICAgaWYgKGkgIT0gaykge1xyXG4gICAgICAgICAgICAgICAgICB4LmUrKztcclxuICAgICAgICAgICAgICAgICAgaWYgKHhjWzBdID09IEJBU0UpIHhjWzBdID0gMTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgeGNbbmldICs9IGs7XHJcbiAgICAgICAgICAgICAgICBpZiAoeGNbbmldICE9IEJBU0UpIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgeGNbbmktLV0gPSAwO1xyXG4gICAgICAgICAgICAgICAgayA9IDE7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgLy8gUmVtb3ZlIHRyYWlsaW5nIHplcm9zLlxyXG4gICAgICAgICAgZm9yIChpID0geGMubGVuZ3RoOyB4Y1stLWldID09PSAwOyB4Yy5wb3AoKSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBPdmVyZmxvdz8gSW5maW5pdHkuXHJcbiAgICAgICAgaWYgKHguZSA+IE1BWF9FWFApIHtcclxuICAgICAgICAgIHguYyA9IHguZSA9IG51bGw7XHJcblxyXG4gICAgICAgIC8vIFVuZGVyZmxvdz8gWmVyby5cclxuICAgICAgICB9IGVsc2UgaWYgKHguZSA8IE1JTl9FWFApIHtcclxuICAgICAgICAgIHguYyA9IFt4LmUgPSAwXTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJldHVybiB4O1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICBmdW5jdGlvbiB2YWx1ZU9mKG4pIHtcclxuICAgICAgdmFyIHN0cixcclxuICAgICAgICBlID0gbi5lO1xyXG5cclxuICAgICAgaWYgKGUgPT09IG51bGwpIHJldHVybiBuLnRvU3RyaW5nKCk7XHJcblxyXG4gICAgICBzdHIgPSBjb2VmZlRvU3RyaW5nKG4uYyk7XHJcblxyXG4gICAgICBzdHIgPSBlIDw9IFRPX0VYUF9ORUcgfHwgZSA+PSBUT19FWFBfUE9TXHJcbiAgICAgICAgPyB0b0V4cG9uZW50aWFsKHN0ciwgZSlcclxuICAgICAgICA6IHRvRml4ZWRQb2ludChzdHIsIGUsICcwJyk7XHJcblxyXG4gICAgICByZXR1cm4gbi5zIDwgMCA/ICctJyArIHN0ciA6IHN0cjtcclxuICAgIH1cclxuXHJcblxyXG4gICAgLy8gUFJPVE9UWVBFL0lOU1RBTkNFIE1FVEhPRFNcclxuXHJcblxyXG4gICAgLypcclxuICAgICAqIFJldHVybiBhIG5ldyBCaWdOdW1iZXIgd2hvc2UgdmFsdWUgaXMgdGhlIGFic29sdXRlIHZhbHVlIG9mIHRoaXMgQmlnTnVtYmVyLlxyXG4gICAgICovXHJcbiAgICBQLmFic29sdXRlVmFsdWUgPSBQLmFicyA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgdmFyIHggPSBuZXcgQmlnTnVtYmVyKHRoaXMpO1xyXG4gICAgICBpZiAoeC5zIDwgMCkgeC5zID0gMTtcclxuICAgICAgcmV0dXJuIHg7XHJcbiAgICB9O1xyXG5cclxuXHJcbiAgICAvKlxyXG4gICAgICogUmV0dXJuXHJcbiAgICAgKiAgIDEgaWYgdGhlIHZhbHVlIG9mIHRoaXMgQmlnTnVtYmVyIGlzIGdyZWF0ZXIgdGhhbiB0aGUgdmFsdWUgb2YgQmlnTnVtYmVyKHksIGIpLFxyXG4gICAgICogICAtMSBpZiB0aGUgdmFsdWUgb2YgdGhpcyBCaWdOdW1iZXIgaXMgbGVzcyB0aGFuIHRoZSB2YWx1ZSBvZiBCaWdOdW1iZXIoeSwgYiksXHJcbiAgICAgKiAgIDAgaWYgdGhleSBoYXZlIHRoZSBzYW1lIHZhbHVlLFxyXG4gICAgICogICBvciBudWxsIGlmIHRoZSB2YWx1ZSBvZiBlaXRoZXIgaXMgTmFOLlxyXG4gICAgICovXHJcbiAgICBQLmNvbXBhcmVkVG8gPSBmdW5jdGlvbiAoeSwgYikge1xyXG4gICAgICByZXR1cm4gY29tcGFyZSh0aGlzLCBuZXcgQmlnTnVtYmVyKHksIGIpKTtcclxuICAgIH07XHJcblxyXG5cclxuICAgIC8qXHJcbiAgICAgKiBJZiBkcCBpcyB1bmRlZmluZWQgb3IgbnVsbCBvciB0cnVlIG9yIGZhbHNlLCByZXR1cm4gdGhlIG51bWJlciBvZiBkZWNpbWFsIHBsYWNlcyBvZiB0aGVcclxuICAgICAqIHZhbHVlIG9mIHRoaXMgQmlnTnVtYmVyLCBvciBudWxsIGlmIHRoZSB2YWx1ZSBvZiB0aGlzIEJpZ051bWJlciBpcyDCsUluZmluaXR5IG9yIE5hTi5cclxuICAgICAqXHJcbiAgICAgKiBPdGhlcndpc2UsIGlmIGRwIGlzIGEgbnVtYmVyLCByZXR1cm4gYSBuZXcgQmlnTnVtYmVyIHdob3NlIHZhbHVlIGlzIHRoZSB2YWx1ZSBvZiB0aGlzXHJcbiAgICAgKiBCaWdOdW1iZXIgcm91bmRlZCB0byBhIG1heGltdW0gb2YgZHAgZGVjaW1hbCBwbGFjZXMgdXNpbmcgcm91bmRpbmcgbW9kZSBybSwgb3JcclxuICAgICAqIFJPVU5ESU5HX01PREUgaWYgcm0gaXMgb21pdHRlZC5cclxuICAgICAqXHJcbiAgICAgKiBbZHBdIHtudW1iZXJ9IERlY2ltYWwgcGxhY2VzOiBpbnRlZ2VyLCAwIHRvIE1BWCBpbmNsdXNpdmUuXHJcbiAgICAgKiBbcm1dIHtudW1iZXJ9IFJvdW5kaW5nIG1vZGUuIEludGVnZXIsIDAgdG8gOCBpbmNsdXNpdmUuXHJcbiAgICAgKlxyXG4gICAgICogJ1tCaWdOdW1iZXIgRXJyb3JdIEFyZ3VtZW50IHtub3QgYSBwcmltaXRpdmUgbnVtYmVyfG5vdCBhbiBpbnRlZ2VyfG91dCBvZiByYW5nZX06IHtkcHxybX0nXHJcbiAgICAgKi9cclxuICAgIFAuZGVjaW1hbFBsYWNlcyA9IFAuZHAgPSBmdW5jdGlvbiAoZHAsIHJtKSB7XHJcbiAgICAgIHZhciBjLCBuLCB2LFxyXG4gICAgICAgIHggPSB0aGlzO1xyXG5cclxuICAgICAgaWYgKGRwICE9IG51bGwpIHtcclxuICAgICAgICBpbnRDaGVjayhkcCwgMCwgTUFYKTtcclxuICAgICAgICBpZiAocm0gPT0gbnVsbCkgcm0gPSBST1VORElOR19NT0RFO1xyXG4gICAgICAgIGVsc2UgaW50Q2hlY2socm0sIDAsIDgpO1xyXG5cclxuICAgICAgICByZXR1cm4gcm91bmQobmV3IEJpZ051bWJlcih4KSwgZHAgKyB4LmUgKyAxLCBybSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmICghKGMgPSB4LmMpKSByZXR1cm4gbnVsbDtcclxuICAgICAgbiA9ICgodiA9IGMubGVuZ3RoIC0gMSkgLSBiaXRGbG9vcih0aGlzLmUgLyBMT0dfQkFTRSkpICogTE9HX0JBU0U7XHJcblxyXG4gICAgICAvLyBTdWJ0cmFjdCB0aGUgbnVtYmVyIG9mIHRyYWlsaW5nIHplcm9zIG9mIHRoZSBsYXN0IG51bWJlci5cclxuICAgICAgaWYgKHYgPSBjW3ZdKSBmb3IgKDsgdiAlIDEwID09IDA7IHYgLz0gMTAsIG4tLSk7XHJcbiAgICAgIGlmIChuIDwgMCkgbiA9IDA7XHJcblxyXG4gICAgICByZXR1cm4gbjtcclxuICAgIH07XHJcblxyXG5cclxuICAgIC8qXHJcbiAgICAgKiAgbiAvIDAgPSBJXHJcbiAgICAgKiAgbiAvIE4gPSBOXHJcbiAgICAgKiAgbiAvIEkgPSAwXHJcbiAgICAgKiAgMCAvIG4gPSAwXHJcbiAgICAgKiAgMCAvIDAgPSBOXHJcbiAgICAgKiAgMCAvIE4gPSBOXHJcbiAgICAgKiAgMCAvIEkgPSAwXHJcbiAgICAgKiAgTiAvIG4gPSBOXHJcbiAgICAgKiAgTiAvIDAgPSBOXHJcbiAgICAgKiAgTiAvIE4gPSBOXHJcbiAgICAgKiAgTiAvIEkgPSBOXHJcbiAgICAgKiAgSSAvIG4gPSBJXHJcbiAgICAgKiAgSSAvIDAgPSBJXHJcbiAgICAgKiAgSSAvIE4gPSBOXHJcbiAgICAgKiAgSSAvIEkgPSBOXHJcbiAgICAgKlxyXG4gICAgICogUmV0dXJuIGEgbmV3IEJpZ051bWJlciB3aG9zZSB2YWx1ZSBpcyB0aGUgdmFsdWUgb2YgdGhpcyBCaWdOdW1iZXIgZGl2aWRlZCBieSB0aGUgdmFsdWUgb2ZcclxuICAgICAqIEJpZ051bWJlcih5LCBiKSwgcm91bmRlZCBhY2NvcmRpbmcgdG8gREVDSU1BTF9QTEFDRVMgYW5kIFJPVU5ESU5HX01PREUuXHJcbiAgICAgKi9cclxuICAgIFAuZGl2aWRlZEJ5ID0gUC5kaXYgPSBmdW5jdGlvbiAoeSwgYikge1xyXG4gICAgICByZXR1cm4gZGl2KHRoaXMsIG5ldyBCaWdOdW1iZXIoeSwgYiksIERFQ0lNQUxfUExBQ0VTLCBST1VORElOR19NT0RFKTtcclxuICAgIH07XHJcblxyXG5cclxuICAgIC8qXHJcbiAgICAgKiBSZXR1cm4gYSBuZXcgQmlnTnVtYmVyIHdob3NlIHZhbHVlIGlzIHRoZSBpbnRlZ2VyIHBhcnQgb2YgZGl2aWRpbmcgdGhlIHZhbHVlIG9mIHRoaXNcclxuICAgICAqIEJpZ051bWJlciBieSB0aGUgdmFsdWUgb2YgQmlnTnVtYmVyKHksIGIpLlxyXG4gICAgICovXHJcbiAgICBQLmRpdmlkZWRUb0ludGVnZXJCeSA9IFAuaWRpdiA9IGZ1bmN0aW9uICh5LCBiKSB7XHJcbiAgICAgIHJldHVybiBkaXYodGhpcywgbmV3IEJpZ051bWJlcih5LCBiKSwgMCwgMSk7XHJcbiAgICB9O1xyXG5cclxuXHJcbiAgICAvKlxyXG4gICAgICogUmV0dXJuIGEgQmlnTnVtYmVyIHdob3NlIHZhbHVlIGlzIHRoZSB2YWx1ZSBvZiB0aGlzIEJpZ051bWJlciBleHBvbmVudGlhdGVkIGJ5IG4uXHJcbiAgICAgKlxyXG4gICAgICogSWYgbSBpcyBwcmVzZW50LCByZXR1cm4gdGhlIHJlc3VsdCBtb2R1bG8gbS5cclxuICAgICAqIElmIG4gaXMgbmVnYXRpdmUgcm91bmQgYWNjb3JkaW5nIHRvIERFQ0lNQUxfUExBQ0VTIGFuZCBST1VORElOR19NT0RFLlxyXG4gICAgICogSWYgUE9XX1BSRUNJU0lPTiBpcyBub24temVybyBhbmQgbSBpcyBub3QgcHJlc2VudCwgcm91bmQgdG8gUE9XX1BSRUNJU0lPTiB1c2luZyBST1VORElOR19NT0RFLlxyXG4gICAgICpcclxuICAgICAqIFRoZSBtb2R1bGFyIHBvd2VyIG9wZXJhdGlvbiB3b3JrcyBlZmZpY2llbnRseSB3aGVuIHgsIG4sIGFuZCBtIGFyZSBpbnRlZ2Vycywgb3RoZXJ3aXNlIGl0XHJcbiAgICAgKiBpcyBlcXVpdmFsZW50IHRvIGNhbGN1bGF0aW5nIHguZXhwb25lbnRpYXRlZEJ5KG4pLm1vZHVsbyhtKSB3aXRoIGEgUE9XX1BSRUNJU0lPTiBvZiAwLlxyXG4gICAgICpcclxuICAgICAqIG4ge251bWJlcnxzdHJpbmd8QmlnTnVtYmVyfSBUaGUgZXhwb25lbnQuIEFuIGludGVnZXIuXHJcbiAgICAgKiBbbV0ge251bWJlcnxzdHJpbmd8QmlnTnVtYmVyfSBUaGUgbW9kdWx1cy5cclxuICAgICAqXHJcbiAgICAgKiAnW0JpZ051bWJlciBFcnJvcl0gRXhwb25lbnQgbm90IGFuIGludGVnZXI6IHtufSdcclxuICAgICAqL1xyXG4gICAgUC5leHBvbmVudGlhdGVkQnkgPSBQLnBvdyA9IGZ1bmN0aW9uIChuLCBtKSB7XHJcbiAgICAgIHZhciBoYWxmLCBpc01vZEV4cCwgaSwgaywgbW9yZSwgbklzQmlnLCBuSXNOZWcsIG5Jc09kZCwgeSxcclxuICAgICAgICB4ID0gdGhpcztcclxuXHJcbiAgICAgIG4gPSBuZXcgQmlnTnVtYmVyKG4pO1xyXG5cclxuICAgICAgLy8gQWxsb3cgTmFOIGFuZCDCsUluZmluaXR5LCBidXQgbm90IG90aGVyIG5vbi1pbnRlZ2Vycy5cclxuICAgICAgaWYgKG4uYyAmJiAhbi5pc0ludGVnZXIoKSkge1xyXG4gICAgICAgIHRocm93IEVycm9yXHJcbiAgICAgICAgICAoYmlnbnVtYmVyRXJyb3IgKyAnRXhwb25lbnQgbm90IGFuIGludGVnZXI6ICcgKyB2YWx1ZU9mKG4pKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKG0gIT0gbnVsbCkgbSA9IG5ldyBCaWdOdW1iZXIobSk7XHJcblxyXG4gICAgICAvLyBFeHBvbmVudCBvZiBNQVhfU0FGRV9JTlRFR0VSIGlzIDE1LlxyXG4gICAgICBuSXNCaWcgPSBuLmUgPiAxNDtcclxuXHJcbiAgICAgIC8vIElmIHggaXMgTmFOLCDCsUluZmluaXR5LCDCsTAgb3IgwrExLCBvciBuIGlzIMKxSW5maW5pdHksIE5hTiBvciDCsTAuXHJcbiAgICAgIGlmICgheC5jIHx8ICF4LmNbMF0gfHwgeC5jWzBdID09IDEgJiYgIXguZSAmJiB4LmMubGVuZ3RoID09IDEgfHwgIW4uYyB8fCAhbi5jWzBdKSB7XHJcblxyXG4gICAgICAgIC8vIFRoZSBzaWduIG9mIHRoZSByZXN1bHQgb2YgcG93IHdoZW4geCBpcyBuZWdhdGl2ZSBkZXBlbmRzIG9uIHRoZSBldmVubmVzcyBvZiBuLlxyXG4gICAgICAgIC8vIElmICtuIG92ZXJmbG93cyB0byDCsUluZmluaXR5LCB0aGUgZXZlbm5lc3Mgb2YgbiB3b3VsZCBiZSBub3QgYmUga25vd24uXHJcbiAgICAgICAgeSA9IG5ldyBCaWdOdW1iZXIoTWF0aC5wb3coK3ZhbHVlT2YoeCksIG5Jc0JpZyA/IDIgLSBpc09kZChuKSA6ICt2YWx1ZU9mKG4pKSk7XHJcbiAgICAgICAgcmV0dXJuIG0gPyB5Lm1vZChtKSA6IHk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIG5Jc05lZyA9IG4ucyA8IDA7XHJcblxyXG4gICAgICBpZiAobSkge1xyXG5cclxuICAgICAgICAvLyB4ICUgbSByZXR1cm5zIE5hTiBpZiBhYnMobSkgaXMgemVybywgb3IgbSBpcyBOYU4uXHJcbiAgICAgICAgaWYgKG0uYyA/ICFtLmNbMF0gOiAhbS5zKSByZXR1cm4gbmV3IEJpZ051bWJlcihOYU4pO1xyXG5cclxuICAgICAgICBpc01vZEV4cCA9ICFuSXNOZWcgJiYgeC5pc0ludGVnZXIoKSAmJiBtLmlzSW50ZWdlcigpO1xyXG5cclxuICAgICAgICBpZiAoaXNNb2RFeHApIHggPSB4Lm1vZChtKTtcclxuXHJcbiAgICAgIC8vIE92ZXJmbG93IHRvIMKxSW5maW5pdHk6ID49MioqMWUxMCBvciA+PTEuMDAwMDAyNCoqMWUxNS5cclxuICAgICAgLy8gVW5kZXJmbG93IHRvIMKxMDogPD0wLjc5KioxZTEwIG9yIDw9MC45OTk5OTc1KioxZTE1LlxyXG4gICAgICB9IGVsc2UgaWYgKG4uZSA+IDkgJiYgKHguZSA+IDAgfHwgeC5lIDwgLTEgfHwgKHguZSA9PSAwXHJcbiAgICAgICAgLy8gWzEsIDI0MDAwMDAwMF1cclxuICAgICAgICA/IHguY1swXSA+IDEgfHwgbklzQmlnICYmIHguY1sxXSA+PSAyNGU3XHJcbiAgICAgICAgLy8gWzgwMDAwMDAwMDAwMDAwXSAgWzk5OTk5NzUwMDAwMDAwXVxyXG4gICAgICAgIDogeC5jWzBdIDwgOGUxMyB8fCBuSXNCaWcgJiYgeC5jWzBdIDw9IDk5OTk5NzVlNykpKSB7XHJcblxyXG4gICAgICAgIC8vIElmIHggaXMgbmVnYXRpdmUgYW5kIG4gaXMgb2RkLCBrID0gLTAsIGVsc2UgayA9IDAuXHJcbiAgICAgICAgayA9IHgucyA8IDAgJiYgaXNPZGQobikgPyAtMCA6IDA7XHJcblxyXG4gICAgICAgIC8vIElmIHggPj0gMSwgayA9IMKxSW5maW5pdHkuXHJcbiAgICAgICAgaWYgKHguZSA+IC0xKSBrID0gMSAvIGs7XHJcblxyXG4gICAgICAgIC8vIElmIG4gaXMgbmVnYXRpdmUgcmV0dXJuIMKxMCwgZWxzZSByZXR1cm4gwrFJbmZpbml0eS5cclxuICAgICAgICByZXR1cm4gbmV3IEJpZ051bWJlcihuSXNOZWcgPyAxIC8gayA6IGspO1xyXG5cclxuICAgICAgfSBlbHNlIGlmIChQT1dfUFJFQ0lTSU9OKSB7XHJcblxyXG4gICAgICAgIC8vIFRydW5jYXRpbmcgZWFjaCBjb2VmZmljaWVudCBhcnJheSB0byBhIGxlbmd0aCBvZiBrIGFmdGVyIGVhY2ggbXVsdGlwbGljYXRpb25cclxuICAgICAgICAvLyBlcXVhdGVzIHRvIHRydW5jYXRpbmcgc2lnbmlmaWNhbnQgZGlnaXRzIHRvIFBPV19QUkVDSVNJT04gKyBbMjgsIDQxXSxcclxuICAgICAgICAvLyBpLmUuIHRoZXJlIHdpbGwgYmUgYSBtaW5pbXVtIG9mIDI4IGd1YXJkIGRpZ2l0cyByZXRhaW5lZC5cclxuICAgICAgICBrID0gbWF0aGNlaWwoUE9XX1BSRUNJU0lPTiAvIExPR19CQVNFICsgMik7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmIChuSXNCaWcpIHtcclxuICAgICAgICBoYWxmID0gbmV3IEJpZ051bWJlcigwLjUpO1xyXG4gICAgICAgIGlmIChuSXNOZWcpIG4ucyA9IDE7XHJcbiAgICAgICAgbklzT2RkID0gaXNPZGQobik7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgaSA9IE1hdGguYWJzKCt2YWx1ZU9mKG4pKTtcclxuICAgICAgICBuSXNPZGQgPSBpICUgMjtcclxuICAgICAgfVxyXG5cclxuICAgICAgeSA9IG5ldyBCaWdOdW1iZXIoT05FKTtcclxuXHJcbiAgICAgIC8vIFBlcmZvcm1zIDU0IGxvb3AgaXRlcmF0aW9ucyBmb3IgbiBvZiA5MDA3MTk5MjU0NzQwOTkxLlxyXG4gICAgICBmb3IgKDsgOykge1xyXG5cclxuICAgICAgICBpZiAobklzT2RkKSB7XHJcbiAgICAgICAgICB5ID0geS50aW1lcyh4KTtcclxuICAgICAgICAgIGlmICgheS5jKSBicmVhaztcclxuXHJcbiAgICAgICAgICBpZiAoaykge1xyXG4gICAgICAgICAgICBpZiAoeS5jLmxlbmd0aCA+IGspIHkuYy5sZW5ndGggPSBrO1xyXG4gICAgICAgICAgfSBlbHNlIGlmIChpc01vZEV4cCkge1xyXG4gICAgICAgICAgICB5ID0geS5tb2QobSk7ICAgIC8veSA9IHkubWludXMoZGl2KHksIG0sIDAsIE1PRFVMT19NT0RFKS50aW1lcyhtKSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoaSkge1xyXG4gICAgICAgICAgaSA9IG1hdGhmbG9vcihpIC8gMik7XHJcbiAgICAgICAgICBpZiAoaSA9PT0gMCkgYnJlYWs7XHJcbiAgICAgICAgICBuSXNPZGQgPSBpICUgMjtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgbiA9IG4udGltZXMoaGFsZik7XHJcbiAgICAgICAgICByb3VuZChuLCBuLmUgKyAxLCAxKTtcclxuXHJcbiAgICAgICAgICBpZiAobi5lID4gMTQpIHtcclxuICAgICAgICAgICAgbklzT2RkID0gaXNPZGQobik7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBpID0gK3ZhbHVlT2Yobik7XHJcbiAgICAgICAgICAgIGlmIChpID09PSAwKSBicmVhaztcclxuICAgICAgICAgICAgbklzT2RkID0gaSAlIDI7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB4ID0geC50aW1lcyh4KTtcclxuXHJcbiAgICAgICAgaWYgKGspIHtcclxuICAgICAgICAgIGlmICh4LmMgJiYgeC5jLmxlbmd0aCA+IGspIHguYy5sZW5ndGggPSBrO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoaXNNb2RFeHApIHtcclxuICAgICAgICAgIHggPSB4Lm1vZChtKTsgICAgLy94ID0geC5taW51cyhkaXYoeCwgbSwgMCwgTU9EVUxPX01PREUpLnRpbWVzKG0pKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmIChpc01vZEV4cCkgcmV0dXJuIHk7XHJcbiAgICAgIGlmIChuSXNOZWcpIHkgPSBPTkUuZGl2KHkpO1xyXG5cclxuICAgICAgcmV0dXJuIG0gPyB5Lm1vZChtKSA6IGsgPyByb3VuZCh5LCBQT1dfUFJFQ0lTSU9OLCBST1VORElOR19NT0RFLCBtb3JlKSA6IHk7XHJcbiAgICB9O1xyXG5cclxuXHJcbiAgICAvKlxyXG4gICAgICogUmV0dXJuIGEgbmV3IEJpZ051bWJlciB3aG9zZSB2YWx1ZSBpcyB0aGUgdmFsdWUgb2YgdGhpcyBCaWdOdW1iZXIgcm91bmRlZCB0byBhbiBpbnRlZ2VyXHJcbiAgICAgKiB1c2luZyByb3VuZGluZyBtb2RlIHJtLCBvciBST1VORElOR19NT0RFIGlmIHJtIGlzIG9taXR0ZWQuXHJcbiAgICAgKlxyXG4gICAgICogW3JtXSB7bnVtYmVyfSBSb3VuZGluZyBtb2RlLiBJbnRlZ2VyLCAwIHRvIDggaW5jbHVzaXZlLlxyXG4gICAgICpcclxuICAgICAqICdbQmlnTnVtYmVyIEVycm9yXSBBcmd1bWVudCB7bm90IGEgcHJpbWl0aXZlIG51bWJlcnxub3QgYW4gaW50ZWdlcnxvdXQgb2YgcmFuZ2V9OiB7cm19J1xyXG4gICAgICovXHJcbiAgICBQLmludGVnZXJWYWx1ZSA9IGZ1bmN0aW9uIChybSkge1xyXG4gICAgICB2YXIgbiA9IG5ldyBCaWdOdW1iZXIodGhpcyk7XHJcbiAgICAgIGlmIChybSA9PSBudWxsKSBybSA9IFJPVU5ESU5HX01PREU7XHJcbiAgICAgIGVsc2UgaW50Q2hlY2socm0sIDAsIDgpO1xyXG4gICAgICByZXR1cm4gcm91bmQobiwgbi5lICsgMSwgcm0pO1xyXG4gICAgfTtcclxuXHJcblxyXG4gICAgLypcclxuICAgICAqIFJldHVybiB0cnVlIGlmIHRoZSB2YWx1ZSBvZiB0aGlzIEJpZ051bWJlciBpcyBlcXVhbCB0byB0aGUgdmFsdWUgb2YgQmlnTnVtYmVyKHksIGIpLFxyXG4gICAgICogb3RoZXJ3aXNlIHJldHVybiBmYWxzZS5cclxuICAgICAqL1xyXG4gICAgUC5pc0VxdWFsVG8gPSBQLmVxID0gZnVuY3Rpb24gKHksIGIpIHtcclxuICAgICAgcmV0dXJuIGNvbXBhcmUodGhpcywgbmV3IEJpZ051bWJlcih5LCBiKSkgPT09IDA7XHJcbiAgICB9O1xyXG5cclxuXHJcbiAgICAvKlxyXG4gICAgICogUmV0dXJuIHRydWUgaWYgdGhlIHZhbHVlIG9mIHRoaXMgQmlnTnVtYmVyIGlzIGEgZmluaXRlIG51bWJlciwgb3RoZXJ3aXNlIHJldHVybiBmYWxzZS5cclxuICAgICAqL1xyXG4gICAgUC5pc0Zpbml0ZSA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgcmV0dXJuICEhdGhpcy5jO1xyXG4gICAgfTtcclxuXHJcblxyXG4gICAgLypcclxuICAgICAqIFJldHVybiB0cnVlIGlmIHRoZSB2YWx1ZSBvZiB0aGlzIEJpZ051bWJlciBpcyBncmVhdGVyIHRoYW4gdGhlIHZhbHVlIG9mIEJpZ051bWJlcih5LCBiKSxcclxuICAgICAqIG90aGVyd2lzZSByZXR1cm4gZmFsc2UuXHJcbiAgICAgKi9cclxuICAgIFAuaXNHcmVhdGVyVGhhbiA9IFAuZ3QgPSBmdW5jdGlvbiAoeSwgYikge1xyXG4gICAgICByZXR1cm4gY29tcGFyZSh0aGlzLCBuZXcgQmlnTnVtYmVyKHksIGIpKSA+IDA7XHJcbiAgICB9O1xyXG5cclxuXHJcbiAgICAvKlxyXG4gICAgICogUmV0dXJuIHRydWUgaWYgdGhlIHZhbHVlIG9mIHRoaXMgQmlnTnVtYmVyIGlzIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byB0aGUgdmFsdWUgb2ZcclxuICAgICAqIEJpZ051bWJlcih5LCBiKSwgb3RoZXJ3aXNlIHJldHVybiBmYWxzZS5cclxuICAgICAqL1xyXG4gICAgUC5pc0dyZWF0ZXJUaGFuT3JFcXVhbFRvID0gUC5ndGUgPSBmdW5jdGlvbiAoeSwgYikge1xyXG4gICAgICByZXR1cm4gKGIgPSBjb21wYXJlKHRoaXMsIG5ldyBCaWdOdW1iZXIoeSwgYikpKSA9PT0gMSB8fCBiID09PSAwO1xyXG5cclxuICAgIH07XHJcblxyXG5cclxuICAgIC8qXHJcbiAgICAgKiBSZXR1cm4gdHJ1ZSBpZiB0aGUgdmFsdWUgb2YgdGhpcyBCaWdOdW1iZXIgaXMgYW4gaW50ZWdlciwgb3RoZXJ3aXNlIHJldHVybiBmYWxzZS5cclxuICAgICAqL1xyXG4gICAgUC5pc0ludGVnZXIgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgIHJldHVybiAhIXRoaXMuYyAmJiBiaXRGbG9vcih0aGlzLmUgLyBMT0dfQkFTRSkgPiB0aGlzLmMubGVuZ3RoIC0gMjtcclxuICAgIH07XHJcblxyXG5cclxuICAgIC8qXHJcbiAgICAgKiBSZXR1cm4gdHJ1ZSBpZiB0aGUgdmFsdWUgb2YgdGhpcyBCaWdOdW1iZXIgaXMgbGVzcyB0aGFuIHRoZSB2YWx1ZSBvZiBCaWdOdW1iZXIoeSwgYiksXHJcbiAgICAgKiBvdGhlcndpc2UgcmV0dXJuIGZhbHNlLlxyXG4gICAgICovXHJcbiAgICBQLmlzTGVzc1RoYW4gPSBQLmx0ID0gZnVuY3Rpb24gKHksIGIpIHtcclxuICAgICAgcmV0dXJuIGNvbXBhcmUodGhpcywgbmV3IEJpZ051bWJlcih5LCBiKSkgPCAwO1xyXG4gICAgfTtcclxuXHJcblxyXG4gICAgLypcclxuICAgICAqIFJldHVybiB0cnVlIGlmIHRoZSB2YWx1ZSBvZiB0aGlzIEJpZ051bWJlciBpcyBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gdGhlIHZhbHVlIG9mXHJcbiAgICAgKiBCaWdOdW1iZXIoeSwgYiksIG90aGVyd2lzZSByZXR1cm4gZmFsc2UuXHJcbiAgICAgKi9cclxuICAgIFAuaXNMZXNzVGhhbk9yRXF1YWxUbyA9IFAubHRlID0gZnVuY3Rpb24gKHksIGIpIHtcclxuICAgICAgcmV0dXJuIChiID0gY29tcGFyZSh0aGlzLCBuZXcgQmlnTnVtYmVyKHksIGIpKSkgPT09IC0xIHx8IGIgPT09IDA7XHJcbiAgICB9O1xyXG5cclxuXHJcbiAgICAvKlxyXG4gICAgICogUmV0dXJuIHRydWUgaWYgdGhlIHZhbHVlIG9mIHRoaXMgQmlnTnVtYmVyIGlzIE5hTiwgb3RoZXJ3aXNlIHJldHVybiBmYWxzZS5cclxuICAgICAqL1xyXG4gICAgUC5pc05hTiA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgcmV0dXJuICF0aGlzLnM7XHJcbiAgICB9O1xyXG5cclxuXHJcbiAgICAvKlxyXG4gICAgICogUmV0dXJuIHRydWUgaWYgdGhlIHZhbHVlIG9mIHRoaXMgQmlnTnVtYmVyIGlzIG5lZ2F0aXZlLCBvdGhlcndpc2UgcmV0dXJuIGZhbHNlLlxyXG4gICAgICovXHJcbiAgICBQLmlzTmVnYXRpdmUgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLnMgPCAwO1xyXG4gICAgfTtcclxuXHJcblxyXG4gICAgLypcclxuICAgICAqIFJldHVybiB0cnVlIGlmIHRoZSB2YWx1ZSBvZiB0aGlzIEJpZ051bWJlciBpcyBwb3NpdGl2ZSwgb3RoZXJ3aXNlIHJldHVybiBmYWxzZS5cclxuICAgICAqL1xyXG4gICAgUC5pc1Bvc2l0aXZlID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICByZXR1cm4gdGhpcy5zID4gMDtcclxuICAgIH07XHJcblxyXG5cclxuICAgIC8qXHJcbiAgICAgKiBSZXR1cm4gdHJ1ZSBpZiB0aGUgdmFsdWUgb2YgdGhpcyBCaWdOdW1iZXIgaXMgMCBvciAtMCwgb3RoZXJ3aXNlIHJldHVybiBmYWxzZS5cclxuICAgICAqL1xyXG4gICAgUC5pc1plcm8gPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgIHJldHVybiAhIXRoaXMuYyAmJiB0aGlzLmNbMF0gPT0gMDtcclxuICAgIH07XHJcblxyXG5cclxuICAgIC8qXHJcbiAgICAgKiAgbiAtIDAgPSBuXHJcbiAgICAgKiAgbiAtIE4gPSBOXHJcbiAgICAgKiAgbiAtIEkgPSAtSVxyXG4gICAgICogIDAgLSBuID0gLW5cclxuICAgICAqICAwIC0gMCA9IDBcclxuICAgICAqICAwIC0gTiA9IE5cclxuICAgICAqICAwIC0gSSA9IC1JXHJcbiAgICAgKiAgTiAtIG4gPSBOXHJcbiAgICAgKiAgTiAtIDAgPSBOXHJcbiAgICAgKiAgTiAtIE4gPSBOXHJcbiAgICAgKiAgTiAtIEkgPSBOXHJcbiAgICAgKiAgSSAtIG4gPSBJXHJcbiAgICAgKiAgSSAtIDAgPSBJXHJcbiAgICAgKiAgSSAtIE4gPSBOXHJcbiAgICAgKiAgSSAtIEkgPSBOXHJcbiAgICAgKlxyXG4gICAgICogUmV0dXJuIGEgbmV3IEJpZ051bWJlciB3aG9zZSB2YWx1ZSBpcyB0aGUgdmFsdWUgb2YgdGhpcyBCaWdOdW1iZXIgbWludXMgdGhlIHZhbHVlIG9mXHJcbiAgICAgKiBCaWdOdW1iZXIoeSwgYikuXHJcbiAgICAgKi9cclxuICAgIFAubWludXMgPSBmdW5jdGlvbiAoeSwgYikge1xyXG4gICAgICB2YXIgaSwgaiwgdCwgeExUeSxcclxuICAgICAgICB4ID0gdGhpcyxcclxuICAgICAgICBhID0geC5zO1xyXG5cclxuICAgICAgeSA9IG5ldyBCaWdOdW1iZXIoeSwgYik7XHJcbiAgICAgIGIgPSB5LnM7XHJcblxyXG4gICAgICAvLyBFaXRoZXIgTmFOP1xyXG4gICAgICBpZiAoIWEgfHwgIWIpIHJldHVybiBuZXcgQmlnTnVtYmVyKE5hTik7XHJcblxyXG4gICAgICAvLyBTaWducyBkaWZmZXI/XHJcbiAgICAgIGlmIChhICE9IGIpIHtcclxuICAgICAgICB5LnMgPSAtYjtcclxuICAgICAgICByZXR1cm4geC5wbHVzKHkpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICB2YXIgeGUgPSB4LmUgLyBMT0dfQkFTRSxcclxuICAgICAgICB5ZSA9IHkuZSAvIExPR19CQVNFLFxyXG4gICAgICAgIHhjID0geC5jLFxyXG4gICAgICAgIHljID0geS5jO1xyXG5cclxuICAgICAgaWYgKCF4ZSB8fCAheWUpIHtcclxuXHJcbiAgICAgICAgLy8gRWl0aGVyIEluZmluaXR5P1xyXG4gICAgICAgIGlmICgheGMgfHwgIXljKSByZXR1cm4geGMgPyAoeS5zID0gLWIsIHkpIDogbmV3IEJpZ051bWJlcih5YyA/IHggOiBOYU4pO1xyXG5cclxuICAgICAgICAvLyBFaXRoZXIgemVybz9cclxuICAgICAgICBpZiAoIXhjWzBdIHx8ICF5Y1swXSkge1xyXG5cclxuICAgICAgICAgIC8vIFJldHVybiB5IGlmIHkgaXMgbm9uLXplcm8sIHggaWYgeCBpcyBub24temVybywgb3IgemVybyBpZiBib3RoIGFyZSB6ZXJvLlxyXG4gICAgICAgICAgcmV0dXJuIHljWzBdID8gKHkucyA9IC1iLCB5KSA6IG5ldyBCaWdOdW1iZXIoeGNbMF0gPyB4IDpcclxuXHJcbiAgICAgICAgICAgLy8gSUVFRSA3NTQgKDIwMDgpIDYuMzogbiAtIG4gPSAtMCB3aGVuIHJvdW5kaW5nIHRvIC1JbmZpbml0eVxyXG4gICAgICAgICAgIFJPVU5ESU5HX01PREUgPT0gMyA/IC0wIDogMCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICB4ZSA9IGJpdEZsb29yKHhlKTtcclxuICAgICAgeWUgPSBiaXRGbG9vcih5ZSk7XHJcbiAgICAgIHhjID0geGMuc2xpY2UoKTtcclxuXHJcbiAgICAgIC8vIERldGVybWluZSB3aGljaCBpcyB0aGUgYmlnZ2VyIG51bWJlci5cclxuICAgICAgaWYgKGEgPSB4ZSAtIHllKSB7XHJcblxyXG4gICAgICAgIGlmICh4TFR5ID0gYSA8IDApIHtcclxuICAgICAgICAgIGEgPSAtYTtcclxuICAgICAgICAgIHQgPSB4YztcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgeWUgPSB4ZTtcclxuICAgICAgICAgIHQgPSB5YztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHQucmV2ZXJzZSgpO1xyXG5cclxuICAgICAgICAvLyBQcmVwZW5kIHplcm9zIHRvIGVxdWFsaXNlIGV4cG9uZW50cy5cclxuICAgICAgICBmb3IgKGIgPSBhOyBiLS07IHQucHVzaCgwKSk7XHJcbiAgICAgICAgdC5yZXZlcnNlKCk7XHJcbiAgICAgIH0gZWxzZSB7XHJcblxyXG4gICAgICAgIC8vIEV4cG9uZW50cyBlcXVhbC4gQ2hlY2sgZGlnaXQgYnkgZGlnaXQuXHJcbiAgICAgICAgaiA9ICh4TFR5ID0gKGEgPSB4Yy5sZW5ndGgpIDwgKGIgPSB5Yy5sZW5ndGgpKSA/IGEgOiBiO1xyXG5cclxuICAgICAgICBmb3IgKGEgPSBiID0gMDsgYiA8IGo7IGIrKykge1xyXG5cclxuICAgICAgICAgIGlmICh4Y1tiXSAhPSB5Y1tiXSkge1xyXG4gICAgICAgICAgICB4TFR5ID0geGNbYl0gPCB5Y1tiXTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyB4IDwgeT8gUG9pbnQgeGMgdG8gdGhlIGFycmF5IG9mIHRoZSBiaWdnZXIgbnVtYmVyLlxyXG4gICAgICBpZiAoeExUeSkgdCA9IHhjLCB4YyA9IHljLCB5YyA9IHQsIHkucyA9IC15LnM7XHJcblxyXG4gICAgICBiID0gKGogPSB5Yy5sZW5ndGgpIC0gKGkgPSB4Yy5sZW5ndGgpO1xyXG5cclxuICAgICAgLy8gQXBwZW5kIHplcm9zIHRvIHhjIGlmIHNob3J0ZXIuXHJcbiAgICAgIC8vIE5vIG5lZWQgdG8gYWRkIHplcm9zIHRvIHljIGlmIHNob3J0ZXIgYXMgc3VidHJhY3Qgb25seSBuZWVkcyB0byBzdGFydCBhdCB5Yy5sZW5ndGguXHJcbiAgICAgIGlmIChiID4gMCkgZm9yICg7IGItLTsgeGNbaSsrXSA9IDApO1xyXG4gICAgICBiID0gQkFTRSAtIDE7XHJcblxyXG4gICAgICAvLyBTdWJ0cmFjdCB5YyBmcm9tIHhjLlxyXG4gICAgICBmb3IgKDsgaiA+IGE7KSB7XHJcblxyXG4gICAgICAgIGlmICh4Y1stLWpdIDwgeWNbal0pIHtcclxuICAgICAgICAgIGZvciAoaSA9IGo7IGkgJiYgIXhjWy0taV07IHhjW2ldID0gYik7XHJcbiAgICAgICAgICAtLXhjW2ldO1xyXG4gICAgICAgICAgeGNbal0gKz0gQkFTRTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHhjW2pdIC09IHljW2pdO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyBSZW1vdmUgbGVhZGluZyB6ZXJvcyBhbmQgYWRqdXN0IGV4cG9uZW50IGFjY29yZGluZ2x5LlxyXG4gICAgICBmb3IgKDsgeGNbMF0gPT0gMDsgeGMuc3BsaWNlKDAsIDEpLCAtLXllKTtcclxuXHJcbiAgICAgIC8vIFplcm8/XHJcbiAgICAgIGlmICgheGNbMF0pIHtcclxuXHJcbiAgICAgICAgLy8gRm9sbG93aW5nIElFRUUgNzU0ICgyMDA4KSA2LjMsXHJcbiAgICAgICAgLy8gbiAtIG4gPSArMCAgYnV0ICBuIC0gbiA9IC0wICB3aGVuIHJvdW5kaW5nIHRvd2FyZHMgLUluZmluaXR5LlxyXG4gICAgICAgIHkucyA9IFJPVU5ESU5HX01PREUgPT0gMyA/IC0xIDogMTtcclxuICAgICAgICB5LmMgPSBbeS5lID0gMF07XHJcbiAgICAgICAgcmV0dXJuIHk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vIE5vIG5lZWQgdG8gY2hlY2sgZm9yIEluZmluaXR5IGFzICt4IC0gK3kgIT0gSW5maW5pdHkgJiYgLXggLSAteSAhPSBJbmZpbml0eVxyXG4gICAgICAvLyBmb3IgZmluaXRlIHggYW5kIHkuXHJcbiAgICAgIHJldHVybiBub3JtYWxpc2UoeSwgeGMsIHllKTtcclxuICAgIH07XHJcblxyXG5cclxuICAgIC8qXHJcbiAgICAgKiAgIG4gJSAwID0gIE5cclxuICAgICAqICAgbiAlIE4gPSAgTlxyXG4gICAgICogICBuICUgSSA9ICBuXHJcbiAgICAgKiAgIDAgJSBuID0gIDBcclxuICAgICAqICAtMCAlIG4gPSAtMFxyXG4gICAgICogICAwICUgMCA9ICBOXHJcbiAgICAgKiAgIDAgJSBOID0gIE5cclxuICAgICAqICAgMCAlIEkgPSAgMFxyXG4gICAgICogICBOICUgbiA9ICBOXHJcbiAgICAgKiAgIE4gJSAwID0gIE5cclxuICAgICAqICAgTiAlIE4gPSAgTlxyXG4gICAgICogICBOICUgSSA9ICBOXHJcbiAgICAgKiAgIEkgJSBuID0gIE5cclxuICAgICAqICAgSSAlIDAgPSAgTlxyXG4gICAgICogICBJICUgTiA9ICBOXHJcbiAgICAgKiAgIEkgJSBJID0gIE5cclxuICAgICAqXHJcbiAgICAgKiBSZXR1cm4gYSBuZXcgQmlnTnVtYmVyIHdob3NlIHZhbHVlIGlzIHRoZSB2YWx1ZSBvZiB0aGlzIEJpZ051bWJlciBtb2R1bG8gdGhlIHZhbHVlIG9mXHJcbiAgICAgKiBCaWdOdW1iZXIoeSwgYikuIFRoZSByZXN1bHQgZGVwZW5kcyBvbiB0aGUgdmFsdWUgb2YgTU9EVUxPX01PREUuXHJcbiAgICAgKi9cclxuICAgIFAubW9kdWxvID0gUC5tb2QgPSBmdW5jdGlvbiAoeSwgYikge1xyXG4gICAgICB2YXIgcSwgcyxcclxuICAgICAgICB4ID0gdGhpcztcclxuXHJcbiAgICAgIHkgPSBuZXcgQmlnTnVtYmVyKHksIGIpO1xyXG5cclxuICAgICAgLy8gUmV0dXJuIE5hTiBpZiB4IGlzIEluZmluaXR5IG9yIE5hTiwgb3IgeSBpcyBOYU4gb3IgemVyby5cclxuICAgICAgaWYgKCF4LmMgfHwgIXkucyB8fCB5LmMgJiYgIXkuY1swXSkge1xyXG4gICAgICAgIHJldHVybiBuZXcgQmlnTnVtYmVyKE5hTik7XHJcblxyXG4gICAgICAvLyBSZXR1cm4geCBpZiB5IGlzIEluZmluaXR5IG9yIHggaXMgemVyby5cclxuICAgICAgfSBlbHNlIGlmICgheS5jIHx8IHguYyAmJiAheC5jWzBdKSB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBCaWdOdW1iZXIoeCk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmIChNT0RVTE9fTU9ERSA9PSA5KSB7XHJcblxyXG4gICAgICAgIC8vIEV1Y2xpZGlhbiBkaXZpc2lvbjogcSA9IHNpZ24oeSkgKiBmbG9vcih4IC8gYWJzKHkpKVxyXG4gICAgICAgIC8vIHIgPSB4IC0gcXkgICAgd2hlcmUgIDAgPD0gciA8IGFicyh5KVxyXG4gICAgICAgIHMgPSB5LnM7XHJcbiAgICAgICAgeS5zID0gMTtcclxuICAgICAgICBxID0gZGl2KHgsIHksIDAsIDMpO1xyXG4gICAgICAgIHkucyA9IHM7XHJcbiAgICAgICAgcS5zICo9IHM7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcSA9IGRpdih4LCB5LCAwLCBNT0RVTE9fTU9ERSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHkgPSB4Lm1pbnVzKHEudGltZXMoeSkpO1xyXG5cclxuICAgICAgLy8gVG8gbWF0Y2ggSmF2YVNjcmlwdCAlLCBlbnN1cmUgc2lnbiBvZiB6ZXJvIGlzIHNpZ24gb2YgZGl2aWRlbmQuXHJcbiAgICAgIGlmICgheS5jWzBdICYmIE1PRFVMT19NT0RFID09IDEpIHkucyA9IHgucztcclxuXHJcbiAgICAgIHJldHVybiB5O1xyXG4gICAgfTtcclxuXHJcblxyXG4gICAgLypcclxuICAgICAqICBuICogMCA9IDBcclxuICAgICAqICBuICogTiA9IE5cclxuICAgICAqICBuICogSSA9IElcclxuICAgICAqICAwICogbiA9IDBcclxuICAgICAqICAwICogMCA9IDBcclxuICAgICAqICAwICogTiA9IE5cclxuICAgICAqICAwICogSSA9IE5cclxuICAgICAqICBOICogbiA9IE5cclxuICAgICAqICBOICogMCA9IE5cclxuICAgICAqICBOICogTiA9IE5cclxuICAgICAqICBOICogSSA9IE5cclxuICAgICAqICBJICogbiA9IElcclxuICAgICAqICBJICogMCA9IE5cclxuICAgICAqICBJICogTiA9IE5cclxuICAgICAqICBJICogSSA9IElcclxuICAgICAqXHJcbiAgICAgKiBSZXR1cm4gYSBuZXcgQmlnTnVtYmVyIHdob3NlIHZhbHVlIGlzIHRoZSB2YWx1ZSBvZiB0aGlzIEJpZ051bWJlciBtdWx0aXBsaWVkIGJ5IHRoZSB2YWx1ZVxyXG4gICAgICogb2YgQmlnTnVtYmVyKHksIGIpLlxyXG4gICAgICovXHJcbiAgICBQLm11bHRpcGxpZWRCeSA9IFAudGltZXMgPSBmdW5jdGlvbiAoeSwgYikge1xyXG4gICAgICB2YXIgYywgZSwgaSwgaiwgaywgbSwgeGNMLCB4bG8sIHhoaSwgeWNMLCB5bG8sIHloaSwgemMsXHJcbiAgICAgICAgYmFzZSwgc3FydEJhc2UsXHJcbiAgICAgICAgeCA9IHRoaXMsXHJcbiAgICAgICAgeGMgPSB4LmMsXHJcbiAgICAgICAgeWMgPSAoeSA9IG5ldyBCaWdOdW1iZXIoeSwgYikpLmM7XHJcblxyXG4gICAgICAvLyBFaXRoZXIgTmFOLCDCsUluZmluaXR5IG9yIMKxMD9cclxuICAgICAgaWYgKCF4YyB8fCAheWMgfHwgIXhjWzBdIHx8ICF5Y1swXSkge1xyXG5cclxuICAgICAgICAvLyBSZXR1cm4gTmFOIGlmIGVpdGhlciBpcyBOYU4sIG9yIG9uZSBpcyAwIGFuZCB0aGUgb3RoZXIgaXMgSW5maW5pdHkuXHJcbiAgICAgICAgaWYgKCF4LnMgfHwgIXkucyB8fCB4YyAmJiAheGNbMF0gJiYgIXljIHx8IHljICYmICF5Y1swXSAmJiAheGMpIHtcclxuICAgICAgICAgIHkuYyA9IHkuZSA9IHkucyA9IG51bGw7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHkucyAqPSB4LnM7XHJcblxyXG4gICAgICAgICAgLy8gUmV0dXJuIMKxSW5maW5pdHkgaWYgZWl0aGVyIGlzIMKxSW5maW5pdHkuXHJcbiAgICAgICAgICBpZiAoIXhjIHx8ICF5Yykge1xyXG4gICAgICAgICAgICB5LmMgPSB5LmUgPSBudWxsO1xyXG5cclxuICAgICAgICAgIC8vIFJldHVybiDCsTAgaWYgZWl0aGVyIGlzIMKxMC5cclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHkuYyA9IFswXTtcclxuICAgICAgICAgICAgeS5lID0gMDtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB5O1xyXG4gICAgICB9XHJcblxyXG4gICAgICBlID0gYml0Rmxvb3IoeC5lIC8gTE9HX0JBU0UpICsgYml0Rmxvb3IoeS5lIC8gTE9HX0JBU0UpO1xyXG4gICAgICB5LnMgKj0geC5zO1xyXG4gICAgICB4Y0wgPSB4Yy5sZW5ndGg7XHJcbiAgICAgIHljTCA9IHljLmxlbmd0aDtcclxuXHJcbiAgICAgIC8vIEVuc3VyZSB4YyBwb2ludHMgdG8gbG9uZ2VyIGFycmF5IGFuZCB4Y0wgdG8gaXRzIGxlbmd0aC5cclxuICAgICAgaWYgKHhjTCA8IHljTCkgemMgPSB4YywgeGMgPSB5YywgeWMgPSB6YywgaSA9IHhjTCwgeGNMID0geWNMLCB5Y0wgPSBpO1xyXG5cclxuICAgICAgLy8gSW5pdGlhbGlzZSB0aGUgcmVzdWx0IGFycmF5IHdpdGggemVyb3MuXHJcbiAgICAgIGZvciAoaSA9IHhjTCArIHljTCwgemMgPSBbXTsgaS0tOyB6Yy5wdXNoKDApKTtcclxuXHJcbiAgICAgIGJhc2UgPSBCQVNFO1xyXG4gICAgICBzcXJ0QmFzZSA9IFNRUlRfQkFTRTtcclxuXHJcbiAgICAgIGZvciAoaSA9IHljTDsgLS1pID49IDA7KSB7XHJcbiAgICAgICAgYyA9IDA7XHJcbiAgICAgICAgeWxvID0geWNbaV0gJSBzcXJ0QmFzZTtcclxuICAgICAgICB5aGkgPSB5Y1tpXSAvIHNxcnRCYXNlIHwgMDtcclxuXHJcbiAgICAgICAgZm9yIChrID0geGNMLCBqID0gaSArIGs7IGogPiBpOykge1xyXG4gICAgICAgICAgeGxvID0geGNbLS1rXSAlIHNxcnRCYXNlO1xyXG4gICAgICAgICAgeGhpID0geGNba10gLyBzcXJ0QmFzZSB8IDA7XHJcbiAgICAgICAgICBtID0geWhpICogeGxvICsgeGhpICogeWxvO1xyXG4gICAgICAgICAgeGxvID0geWxvICogeGxvICsgKChtICUgc3FydEJhc2UpICogc3FydEJhc2UpICsgemNbal0gKyBjO1xyXG4gICAgICAgICAgYyA9ICh4bG8gLyBiYXNlIHwgMCkgKyAobSAvIHNxcnRCYXNlIHwgMCkgKyB5aGkgKiB4aGk7XHJcbiAgICAgICAgICB6Y1tqLS1dID0geGxvICUgYmFzZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHpjW2pdID0gYztcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKGMpIHtcclxuICAgICAgICArK2U7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgemMuc3BsaWNlKDAsIDEpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICByZXR1cm4gbm9ybWFsaXNlKHksIHpjLCBlKTtcclxuICAgIH07XHJcblxyXG5cclxuICAgIC8qXHJcbiAgICAgKiBSZXR1cm4gYSBuZXcgQmlnTnVtYmVyIHdob3NlIHZhbHVlIGlzIHRoZSB2YWx1ZSBvZiB0aGlzIEJpZ051bWJlciBuZWdhdGVkLFxyXG4gICAgICogaS5lLiBtdWx0aXBsaWVkIGJ5IC0xLlxyXG4gICAgICovXHJcbiAgICBQLm5lZ2F0ZWQgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgIHZhciB4ID0gbmV3IEJpZ051bWJlcih0aGlzKTtcclxuICAgICAgeC5zID0gLXgucyB8fCBudWxsO1xyXG4gICAgICByZXR1cm4geDtcclxuICAgIH07XHJcblxyXG5cclxuICAgIC8qXHJcbiAgICAgKiAgbiArIDAgPSBuXHJcbiAgICAgKiAgbiArIE4gPSBOXHJcbiAgICAgKiAgbiArIEkgPSBJXHJcbiAgICAgKiAgMCArIG4gPSBuXHJcbiAgICAgKiAgMCArIDAgPSAwXHJcbiAgICAgKiAgMCArIE4gPSBOXHJcbiAgICAgKiAgMCArIEkgPSBJXHJcbiAgICAgKiAgTiArIG4gPSBOXHJcbiAgICAgKiAgTiArIDAgPSBOXHJcbiAgICAgKiAgTiArIE4gPSBOXHJcbiAgICAgKiAgTiArIEkgPSBOXHJcbiAgICAgKiAgSSArIG4gPSBJXHJcbiAgICAgKiAgSSArIDAgPSBJXHJcbiAgICAgKiAgSSArIE4gPSBOXHJcbiAgICAgKiAgSSArIEkgPSBJXHJcbiAgICAgKlxyXG4gICAgICogUmV0dXJuIGEgbmV3IEJpZ051bWJlciB3aG9zZSB2YWx1ZSBpcyB0aGUgdmFsdWUgb2YgdGhpcyBCaWdOdW1iZXIgcGx1cyB0aGUgdmFsdWUgb2ZcclxuICAgICAqIEJpZ051bWJlcih5LCBiKS5cclxuICAgICAqL1xyXG4gICAgUC5wbHVzID0gZnVuY3Rpb24gKHksIGIpIHtcclxuICAgICAgdmFyIHQsXHJcbiAgICAgICAgeCA9IHRoaXMsXHJcbiAgICAgICAgYSA9IHgucztcclxuXHJcbiAgICAgIHkgPSBuZXcgQmlnTnVtYmVyKHksIGIpO1xyXG4gICAgICBiID0geS5zO1xyXG5cclxuICAgICAgLy8gRWl0aGVyIE5hTj9cclxuICAgICAgaWYgKCFhIHx8ICFiKSByZXR1cm4gbmV3IEJpZ051bWJlcihOYU4pO1xyXG5cclxuICAgICAgLy8gU2lnbnMgZGlmZmVyP1xyXG4gICAgICAgaWYgKGEgIT0gYikge1xyXG4gICAgICAgIHkucyA9IC1iO1xyXG4gICAgICAgIHJldHVybiB4Lm1pbnVzKHkpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICB2YXIgeGUgPSB4LmUgLyBMT0dfQkFTRSxcclxuICAgICAgICB5ZSA9IHkuZSAvIExPR19CQVNFLFxyXG4gICAgICAgIHhjID0geC5jLFxyXG4gICAgICAgIHljID0geS5jO1xyXG5cclxuICAgICAgaWYgKCF4ZSB8fCAheWUpIHtcclxuXHJcbiAgICAgICAgLy8gUmV0dXJuIMKxSW5maW5pdHkgaWYgZWl0aGVyIMKxSW5maW5pdHkuXHJcbiAgICAgICAgaWYgKCF4YyB8fCAheWMpIHJldHVybiBuZXcgQmlnTnVtYmVyKGEgLyAwKTtcclxuXHJcbiAgICAgICAgLy8gRWl0aGVyIHplcm8/XHJcbiAgICAgICAgLy8gUmV0dXJuIHkgaWYgeSBpcyBub24temVybywgeCBpZiB4IGlzIG5vbi16ZXJvLCBvciB6ZXJvIGlmIGJvdGggYXJlIHplcm8uXHJcbiAgICAgICAgaWYgKCF4Y1swXSB8fCAheWNbMF0pIHJldHVybiB5Y1swXSA/IHkgOiBuZXcgQmlnTnVtYmVyKHhjWzBdID8geCA6IGEgKiAwKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgeGUgPSBiaXRGbG9vcih4ZSk7XHJcbiAgICAgIHllID0gYml0Rmxvb3IoeWUpO1xyXG4gICAgICB4YyA9IHhjLnNsaWNlKCk7XHJcblxyXG4gICAgICAvLyBQcmVwZW5kIHplcm9zIHRvIGVxdWFsaXNlIGV4cG9uZW50cy4gRmFzdGVyIHRvIHVzZSByZXZlcnNlIHRoZW4gZG8gdW5zaGlmdHMuXHJcbiAgICAgIGlmIChhID0geGUgLSB5ZSkge1xyXG4gICAgICAgIGlmIChhID4gMCkge1xyXG4gICAgICAgICAgeWUgPSB4ZTtcclxuICAgICAgICAgIHQgPSB5YztcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgYSA9IC1hO1xyXG4gICAgICAgICAgdCA9IHhjO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdC5yZXZlcnNlKCk7XHJcbiAgICAgICAgZm9yICg7IGEtLTsgdC5wdXNoKDApKTtcclxuICAgICAgICB0LnJldmVyc2UoKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgYSA9IHhjLmxlbmd0aDtcclxuICAgICAgYiA9IHljLmxlbmd0aDtcclxuXHJcbiAgICAgIC8vIFBvaW50IHhjIHRvIHRoZSBsb25nZXIgYXJyYXksIGFuZCBiIHRvIHRoZSBzaG9ydGVyIGxlbmd0aC5cclxuICAgICAgaWYgKGEgLSBiIDwgMCkgdCA9IHljLCB5YyA9IHhjLCB4YyA9IHQsIGIgPSBhO1xyXG5cclxuICAgICAgLy8gT25seSBzdGFydCBhZGRpbmcgYXQgeWMubGVuZ3RoIC0gMSBhcyB0aGUgZnVydGhlciBkaWdpdHMgb2YgeGMgY2FuIGJlIGlnbm9yZWQuXHJcbiAgICAgIGZvciAoYSA9IDA7IGI7KSB7XHJcbiAgICAgICAgYSA9ICh4Y1stLWJdID0geGNbYl0gKyB5Y1tiXSArIGEpIC8gQkFTRSB8IDA7XHJcbiAgICAgICAgeGNbYl0gPSBCQVNFID09PSB4Y1tiXSA/IDAgOiB4Y1tiXSAlIEJBU0U7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmIChhKSB7XHJcbiAgICAgICAgeGMgPSBbYV0uY29uY2F0KHhjKTtcclxuICAgICAgICArK3llO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyBObyBuZWVkIHRvIGNoZWNrIGZvciB6ZXJvLCBhcyAreCArICt5ICE9IDAgJiYgLXggKyAteSAhPSAwXHJcbiAgICAgIC8vIHllID0gTUFYX0VYUCArIDEgcG9zc2libGVcclxuICAgICAgcmV0dXJuIG5vcm1hbGlzZSh5LCB4YywgeWUpO1xyXG4gICAgfTtcclxuXHJcblxyXG4gICAgLypcclxuICAgICAqIElmIHNkIGlzIHVuZGVmaW5lZCBvciBudWxsIG9yIHRydWUgb3IgZmFsc2UsIHJldHVybiB0aGUgbnVtYmVyIG9mIHNpZ25pZmljYW50IGRpZ2l0cyBvZlxyXG4gICAgICogdGhlIHZhbHVlIG9mIHRoaXMgQmlnTnVtYmVyLCBvciBudWxsIGlmIHRoZSB2YWx1ZSBvZiB0aGlzIEJpZ051bWJlciBpcyDCsUluZmluaXR5IG9yIE5hTi5cclxuICAgICAqIElmIHNkIGlzIHRydWUgaW5jbHVkZSBpbnRlZ2VyLXBhcnQgdHJhaWxpbmcgemVyb3MgaW4gdGhlIGNvdW50LlxyXG4gICAgICpcclxuICAgICAqIE90aGVyd2lzZSwgaWYgc2QgaXMgYSBudW1iZXIsIHJldHVybiBhIG5ldyBCaWdOdW1iZXIgd2hvc2UgdmFsdWUgaXMgdGhlIHZhbHVlIG9mIHRoaXNcclxuICAgICAqIEJpZ051bWJlciByb3VuZGVkIHRvIGEgbWF4aW11bSBvZiBzZCBzaWduaWZpY2FudCBkaWdpdHMgdXNpbmcgcm91bmRpbmcgbW9kZSBybSwgb3JcclxuICAgICAqIFJPVU5ESU5HX01PREUgaWYgcm0gaXMgb21pdHRlZC5cclxuICAgICAqXHJcbiAgICAgKiBzZCB7bnVtYmVyfGJvb2xlYW59IG51bWJlcjogc2lnbmlmaWNhbnQgZGlnaXRzOiBpbnRlZ2VyLCAxIHRvIE1BWCBpbmNsdXNpdmUuXHJcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgIGJvb2xlYW46IHdoZXRoZXIgdG8gY291bnQgaW50ZWdlci1wYXJ0IHRyYWlsaW5nIHplcm9zOiB0cnVlIG9yIGZhbHNlLlxyXG4gICAgICogW3JtXSB7bnVtYmVyfSBSb3VuZGluZyBtb2RlLiBJbnRlZ2VyLCAwIHRvIDggaW5jbHVzaXZlLlxyXG4gICAgICpcclxuICAgICAqICdbQmlnTnVtYmVyIEVycm9yXSBBcmd1bWVudCB7bm90IGEgcHJpbWl0aXZlIG51bWJlcnxub3QgYW4gaW50ZWdlcnxvdXQgb2YgcmFuZ2V9OiB7c2R8cm19J1xyXG4gICAgICovXHJcbiAgICBQLnByZWNpc2lvbiA9IFAuc2QgPSBmdW5jdGlvbiAoc2QsIHJtKSB7XHJcbiAgICAgIHZhciBjLCBuLCB2LFxyXG4gICAgICAgIHggPSB0aGlzO1xyXG5cclxuICAgICAgaWYgKHNkICE9IG51bGwgJiYgc2QgIT09ICEhc2QpIHtcclxuICAgICAgICBpbnRDaGVjayhzZCwgMSwgTUFYKTtcclxuICAgICAgICBpZiAocm0gPT0gbnVsbCkgcm0gPSBST1VORElOR19NT0RFO1xyXG4gICAgICAgIGVsc2UgaW50Q2hlY2socm0sIDAsIDgpO1xyXG5cclxuICAgICAgICByZXR1cm4gcm91bmQobmV3IEJpZ051bWJlcih4KSwgc2QsIHJtKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKCEoYyA9IHguYykpIHJldHVybiBudWxsO1xyXG4gICAgICB2ID0gYy5sZW5ndGggLSAxO1xyXG4gICAgICBuID0gdiAqIExPR19CQVNFICsgMTtcclxuXHJcbiAgICAgIGlmICh2ID0gY1t2XSkge1xyXG5cclxuICAgICAgICAvLyBTdWJ0cmFjdCB0aGUgbnVtYmVyIG9mIHRyYWlsaW5nIHplcm9zIG9mIHRoZSBsYXN0IGVsZW1lbnQuXHJcbiAgICAgICAgZm9yICg7IHYgJSAxMCA9PSAwOyB2IC89IDEwLCBuLS0pO1xyXG5cclxuICAgICAgICAvLyBBZGQgdGhlIG51bWJlciBvZiBkaWdpdHMgb2YgdGhlIGZpcnN0IGVsZW1lbnQuXHJcbiAgICAgICAgZm9yICh2ID0gY1swXTsgdiA+PSAxMDsgdiAvPSAxMCwgbisrKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKHNkICYmIHguZSArIDEgPiBuKSBuID0geC5lICsgMTtcclxuXHJcbiAgICAgIHJldHVybiBuO1xyXG4gICAgfTtcclxuXHJcblxyXG4gICAgLypcclxuICAgICAqIFJldHVybiBhIG5ldyBCaWdOdW1iZXIgd2hvc2UgdmFsdWUgaXMgdGhlIHZhbHVlIG9mIHRoaXMgQmlnTnVtYmVyIHNoaWZ0ZWQgYnkgayBwbGFjZXNcclxuICAgICAqIChwb3dlcnMgb2YgMTApLiBTaGlmdCB0byB0aGUgcmlnaHQgaWYgbiA+IDAsIGFuZCB0byB0aGUgbGVmdCBpZiBuIDwgMC5cclxuICAgICAqXHJcbiAgICAgKiBrIHtudW1iZXJ9IEludGVnZXIsIC1NQVhfU0FGRV9JTlRFR0VSIHRvIE1BWF9TQUZFX0lOVEVHRVIgaW5jbHVzaXZlLlxyXG4gICAgICpcclxuICAgICAqICdbQmlnTnVtYmVyIEVycm9yXSBBcmd1bWVudCB7bm90IGEgcHJpbWl0aXZlIG51bWJlcnxub3QgYW4gaW50ZWdlcnxvdXQgb2YgcmFuZ2V9OiB7a30nXHJcbiAgICAgKi9cclxuICAgIFAuc2hpZnRlZEJ5ID0gZnVuY3Rpb24gKGspIHtcclxuICAgICAgaW50Q2hlY2soaywgLU1BWF9TQUZFX0lOVEVHRVIsIE1BWF9TQUZFX0lOVEVHRVIpO1xyXG4gICAgICByZXR1cm4gdGhpcy50aW1lcygnMWUnICsgayk7XHJcbiAgICB9O1xyXG5cclxuXHJcbiAgICAvKlxyXG4gICAgICogIHNxcnQoLW4pID0gIE5cclxuICAgICAqICBzcXJ0KE4pID0gIE5cclxuICAgICAqICBzcXJ0KC1JKSA9ICBOXHJcbiAgICAgKiAgc3FydChJKSA9ICBJXHJcbiAgICAgKiAgc3FydCgwKSA9ICAwXHJcbiAgICAgKiAgc3FydCgtMCkgPSAtMFxyXG4gICAgICpcclxuICAgICAqIFJldHVybiBhIG5ldyBCaWdOdW1iZXIgd2hvc2UgdmFsdWUgaXMgdGhlIHNxdWFyZSByb290IG9mIHRoZSB2YWx1ZSBvZiB0aGlzIEJpZ051bWJlcixcclxuICAgICAqIHJvdW5kZWQgYWNjb3JkaW5nIHRvIERFQ0lNQUxfUExBQ0VTIGFuZCBST1VORElOR19NT0RFLlxyXG4gICAgICovXHJcbiAgICBQLnNxdWFyZVJvb3QgPSBQLnNxcnQgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgIHZhciBtLCBuLCByLCByZXAsIHQsXHJcbiAgICAgICAgeCA9IHRoaXMsXHJcbiAgICAgICAgYyA9IHguYyxcclxuICAgICAgICBzID0geC5zLFxyXG4gICAgICAgIGUgPSB4LmUsXHJcbiAgICAgICAgZHAgPSBERUNJTUFMX1BMQUNFUyArIDQsXHJcbiAgICAgICAgaGFsZiA9IG5ldyBCaWdOdW1iZXIoJzAuNScpO1xyXG5cclxuICAgICAgLy8gTmVnYXRpdmUvTmFOL0luZmluaXR5L3plcm8/XHJcbiAgICAgIGlmIChzICE9PSAxIHx8ICFjIHx8ICFjWzBdKSB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBCaWdOdW1iZXIoIXMgfHwgcyA8IDAgJiYgKCFjIHx8IGNbMF0pID8gTmFOIDogYyA/IHggOiAxIC8gMCk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vIEluaXRpYWwgZXN0aW1hdGUuXHJcbiAgICAgIHMgPSBNYXRoLnNxcnQoK3ZhbHVlT2YoeCkpO1xyXG5cclxuICAgICAgLy8gTWF0aC5zcXJ0IHVuZGVyZmxvdy9vdmVyZmxvdz9cclxuICAgICAgLy8gUGFzcyB4IHRvIE1hdGguc3FydCBhcyBpbnRlZ2VyLCB0aGVuIGFkanVzdCB0aGUgZXhwb25lbnQgb2YgdGhlIHJlc3VsdC5cclxuICAgICAgaWYgKHMgPT0gMCB8fCBzID09IDEgLyAwKSB7XHJcbiAgICAgICAgbiA9IGNvZWZmVG9TdHJpbmcoYyk7XHJcbiAgICAgICAgaWYgKChuLmxlbmd0aCArIGUpICUgMiA9PSAwKSBuICs9ICcwJztcclxuICAgICAgICBzID0gTWF0aC5zcXJ0KCtuKTtcclxuICAgICAgICBlID0gYml0Rmxvb3IoKGUgKyAxKSAvIDIpIC0gKGUgPCAwIHx8IGUgJSAyKTtcclxuXHJcbiAgICAgICAgaWYgKHMgPT0gMSAvIDApIHtcclxuICAgICAgICAgIG4gPSAnNWUnICsgZTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgbiA9IHMudG9FeHBvbmVudGlhbCgpO1xyXG4gICAgICAgICAgbiA9IG4uc2xpY2UoMCwgbi5pbmRleE9mKCdlJykgKyAxKSArIGU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByID0gbmV3IEJpZ051bWJlcihuKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICByID0gbmV3IEJpZ051bWJlcihzICsgJycpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyBDaGVjayBmb3IgemVyby5cclxuICAgICAgLy8gciBjb3VsZCBiZSB6ZXJvIGlmIE1JTl9FWFAgaXMgY2hhbmdlZCBhZnRlciB0aGUgdGhpcyB2YWx1ZSB3YXMgY3JlYXRlZC5cclxuICAgICAgLy8gVGhpcyB3b3VsZCBjYXVzZSBhIGRpdmlzaW9uIGJ5IHplcm8gKHgvdCkgYW5kIGhlbmNlIEluZmluaXR5IGJlbG93LCB3aGljaCB3b3VsZCBjYXVzZVxyXG4gICAgICAvLyBjb2VmZlRvU3RyaW5nIHRvIHRocm93LlxyXG4gICAgICBpZiAoci5jWzBdKSB7XHJcbiAgICAgICAgZSA9IHIuZTtcclxuICAgICAgICBzID0gZSArIGRwO1xyXG4gICAgICAgIGlmIChzIDwgMykgcyA9IDA7XHJcblxyXG4gICAgICAgIC8vIE5ld3Rvbi1SYXBoc29uIGl0ZXJhdGlvbi5cclxuICAgICAgICBmb3IgKDsgOykge1xyXG4gICAgICAgICAgdCA9IHI7XHJcbiAgICAgICAgICByID0gaGFsZi50aW1lcyh0LnBsdXMoZGl2KHgsIHQsIGRwLCAxKSkpO1xyXG5cclxuICAgICAgICAgIGlmIChjb2VmZlRvU3RyaW5nKHQuYykuc2xpY2UoMCwgcykgPT09IChuID0gY29lZmZUb1N0cmluZyhyLmMpKS5zbGljZSgwLCBzKSkge1xyXG5cclxuICAgICAgICAgICAgLy8gVGhlIGV4cG9uZW50IG9mIHIgbWF5IGhlcmUgYmUgb25lIGxlc3MgdGhhbiB0aGUgZmluYWwgcmVzdWx0IGV4cG9uZW50LFxyXG4gICAgICAgICAgICAvLyBlLmcgMC4wMDA5OTk5IChlLTQpIC0tPiAwLjAwMSAoZS0zKSwgc28gYWRqdXN0IHMgc28gdGhlIHJvdW5kaW5nIGRpZ2l0c1xyXG4gICAgICAgICAgICAvLyBhcmUgaW5kZXhlZCBjb3JyZWN0bHkuXHJcbiAgICAgICAgICAgIGlmIChyLmUgPCBlKSAtLXM7XHJcbiAgICAgICAgICAgIG4gPSBuLnNsaWNlKHMgLSAzLCBzICsgMSk7XHJcblxyXG4gICAgICAgICAgICAvLyBUaGUgNHRoIHJvdW5kaW5nIGRpZ2l0IG1heSBiZSBpbiBlcnJvciBieSAtMSBzbyBpZiB0aGUgNCByb3VuZGluZyBkaWdpdHNcclxuICAgICAgICAgICAgLy8gYXJlIDk5OTkgb3IgNDk5OSAoaS5lLiBhcHByb2FjaGluZyBhIHJvdW5kaW5nIGJvdW5kYXJ5KSBjb250aW51ZSB0aGVcclxuICAgICAgICAgICAgLy8gaXRlcmF0aW9uLlxyXG4gICAgICAgICAgICBpZiAobiA9PSAnOTk5OScgfHwgIXJlcCAmJiBuID09ICc0OTk5Jykge1xyXG5cclxuICAgICAgICAgICAgICAvLyBPbiB0aGUgZmlyc3QgaXRlcmF0aW9uIG9ubHksIGNoZWNrIHRvIHNlZSBpZiByb3VuZGluZyB1cCBnaXZlcyB0aGVcclxuICAgICAgICAgICAgICAvLyBleGFjdCByZXN1bHQgYXMgdGhlIG5pbmVzIG1heSBpbmZpbml0ZWx5IHJlcGVhdC5cclxuICAgICAgICAgICAgICBpZiAoIXJlcCkge1xyXG4gICAgICAgICAgICAgICAgcm91bmQodCwgdC5lICsgREVDSU1BTF9QTEFDRVMgKyAyLCAwKTtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAodC50aW1lcyh0KS5lcSh4KSkge1xyXG4gICAgICAgICAgICAgICAgICByID0gdDtcclxuICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICBkcCArPSA0O1xyXG4gICAgICAgICAgICAgIHMgKz0gNDtcclxuICAgICAgICAgICAgICByZXAgPSAxO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG5cclxuICAgICAgICAgICAgICAvLyBJZiByb3VuZGluZyBkaWdpdHMgYXJlIG51bGwsIDB7MCw0fSBvciA1MHswLDN9LCBjaGVjayBmb3IgZXhhY3RcclxuICAgICAgICAgICAgICAvLyByZXN1bHQuIElmIG5vdCwgdGhlbiB0aGVyZSBhcmUgZnVydGhlciBkaWdpdHMgYW5kIG0gd2lsbCBiZSB0cnV0aHkuXHJcbiAgICAgICAgICAgICAgaWYgKCErbiB8fCAhK24uc2xpY2UoMSkgJiYgbi5jaGFyQXQoMCkgPT0gJzUnKSB7XHJcblxyXG4gICAgICAgICAgICAgICAgLy8gVHJ1bmNhdGUgdG8gdGhlIGZpcnN0IHJvdW5kaW5nIGRpZ2l0LlxyXG4gICAgICAgICAgICAgICAgcm91bmQociwgci5lICsgREVDSU1BTF9QTEFDRVMgKyAyLCAxKTtcclxuICAgICAgICAgICAgICAgIG0gPSAhci50aW1lcyhyKS5lcSh4KTtcclxuICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICByZXR1cm4gcm91bmQociwgci5lICsgREVDSU1BTF9QTEFDRVMgKyAxLCBST1VORElOR19NT0RFLCBtKTtcclxuICAgIH07XHJcblxyXG5cclxuICAgIC8qXHJcbiAgICAgKiBSZXR1cm4gYSBzdHJpbmcgcmVwcmVzZW50aW5nIHRoZSB2YWx1ZSBvZiB0aGlzIEJpZ051bWJlciBpbiBleHBvbmVudGlhbCBub3RhdGlvbiBhbmRcclxuICAgICAqIHJvdW5kZWQgdXNpbmcgUk9VTkRJTkdfTU9ERSB0byBkcCBmaXhlZCBkZWNpbWFsIHBsYWNlcy5cclxuICAgICAqXHJcbiAgICAgKiBbZHBdIHtudW1iZXJ9IERlY2ltYWwgcGxhY2VzLiBJbnRlZ2VyLCAwIHRvIE1BWCBpbmNsdXNpdmUuXHJcbiAgICAgKiBbcm1dIHtudW1iZXJ9IFJvdW5kaW5nIG1vZGUuIEludGVnZXIsIDAgdG8gOCBpbmNsdXNpdmUuXHJcbiAgICAgKlxyXG4gICAgICogJ1tCaWdOdW1iZXIgRXJyb3JdIEFyZ3VtZW50IHtub3QgYSBwcmltaXRpdmUgbnVtYmVyfG5vdCBhbiBpbnRlZ2VyfG91dCBvZiByYW5nZX06IHtkcHxybX0nXHJcbiAgICAgKi9cclxuICAgIFAudG9FeHBvbmVudGlhbCA9IGZ1bmN0aW9uIChkcCwgcm0pIHtcclxuICAgICAgaWYgKGRwICE9IG51bGwpIHtcclxuICAgICAgICBpbnRDaGVjayhkcCwgMCwgTUFYKTtcclxuICAgICAgICBkcCsrO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiBmb3JtYXQodGhpcywgZHAsIHJtLCAxKTtcclxuICAgIH07XHJcblxyXG5cclxuICAgIC8qXHJcbiAgICAgKiBSZXR1cm4gYSBzdHJpbmcgcmVwcmVzZW50aW5nIHRoZSB2YWx1ZSBvZiB0aGlzIEJpZ051bWJlciBpbiBmaXhlZC1wb2ludCBub3RhdGlvbiByb3VuZGluZ1xyXG4gICAgICogdG8gZHAgZml4ZWQgZGVjaW1hbCBwbGFjZXMgdXNpbmcgcm91bmRpbmcgbW9kZSBybSwgb3IgUk9VTkRJTkdfTU9ERSBpZiBybSBpcyBvbWl0dGVkLlxyXG4gICAgICpcclxuICAgICAqIE5vdGU6IGFzIHdpdGggSmF2YVNjcmlwdCdzIG51bWJlciB0eXBlLCAoLTApLnRvRml4ZWQoMCkgaXMgJzAnLFxyXG4gICAgICogYnV0IGUuZy4gKC0wLjAwMDAxKS50b0ZpeGVkKDApIGlzICctMCcuXHJcbiAgICAgKlxyXG4gICAgICogW2RwXSB7bnVtYmVyfSBEZWNpbWFsIHBsYWNlcy4gSW50ZWdlciwgMCB0byBNQVggaW5jbHVzaXZlLlxyXG4gICAgICogW3JtXSB7bnVtYmVyfSBSb3VuZGluZyBtb2RlLiBJbnRlZ2VyLCAwIHRvIDggaW5jbHVzaXZlLlxyXG4gICAgICpcclxuICAgICAqICdbQmlnTnVtYmVyIEVycm9yXSBBcmd1bWVudCB7bm90IGEgcHJpbWl0aXZlIG51bWJlcnxub3QgYW4gaW50ZWdlcnxvdXQgb2YgcmFuZ2V9OiB7ZHB8cm19J1xyXG4gICAgICovXHJcbiAgICBQLnRvRml4ZWQgPSBmdW5jdGlvbiAoZHAsIHJtKSB7XHJcbiAgICAgIGlmIChkcCAhPSBudWxsKSB7XHJcbiAgICAgICAgaW50Q2hlY2soZHAsIDAsIE1BWCk7XHJcbiAgICAgICAgZHAgPSBkcCArIHRoaXMuZSArIDE7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIGZvcm1hdCh0aGlzLCBkcCwgcm0pO1xyXG4gICAgfTtcclxuXHJcblxyXG4gICAgLypcclxuICAgICAqIFJldHVybiBhIHN0cmluZyByZXByZXNlbnRpbmcgdGhlIHZhbHVlIG9mIHRoaXMgQmlnTnVtYmVyIGluIGZpeGVkLXBvaW50IG5vdGF0aW9uIHJvdW5kZWRcclxuICAgICAqIHVzaW5nIHJtIG9yIFJPVU5ESU5HX01PREUgdG8gZHAgZGVjaW1hbCBwbGFjZXMsIGFuZCBmb3JtYXR0ZWQgYWNjb3JkaW5nIHRvIHRoZSBwcm9wZXJ0aWVzXHJcbiAgICAgKiBvZiB0aGUgZm9ybWF0IG9yIEZPUk1BVCBvYmplY3QgKHNlZSBCaWdOdW1iZXIuc2V0KS5cclxuICAgICAqXHJcbiAgICAgKiBUaGUgZm9ybWF0dGluZyBvYmplY3QgbWF5IGNvbnRhaW4gc29tZSBvciBhbGwgb2YgdGhlIHByb3BlcnRpZXMgc2hvd24gYmVsb3cuXHJcbiAgICAgKlxyXG4gICAgICogRk9STUFUID0ge1xyXG4gICAgICogICBwcmVmaXg6ICcnLFxyXG4gICAgICogICBncm91cFNpemU6IDMsXHJcbiAgICAgKiAgIHNlY29uZGFyeUdyb3VwU2l6ZTogMCxcclxuICAgICAqICAgZ3JvdXBTZXBhcmF0b3I6ICcsJyxcclxuICAgICAqICAgZGVjaW1hbFNlcGFyYXRvcjogJy4nLFxyXG4gICAgICogICBmcmFjdGlvbkdyb3VwU2l6ZTogMCxcclxuICAgICAqICAgZnJhY3Rpb25Hcm91cFNlcGFyYXRvcjogJ1xceEEwJywgICAgICAvLyBub24tYnJlYWtpbmcgc3BhY2VcclxuICAgICAqICAgc3VmZml4OiAnJ1xyXG4gICAgICogfTtcclxuICAgICAqXHJcbiAgICAgKiBbZHBdIHtudW1iZXJ9IERlY2ltYWwgcGxhY2VzLiBJbnRlZ2VyLCAwIHRvIE1BWCBpbmNsdXNpdmUuXHJcbiAgICAgKiBbcm1dIHtudW1iZXJ9IFJvdW5kaW5nIG1vZGUuIEludGVnZXIsIDAgdG8gOCBpbmNsdXNpdmUuXHJcbiAgICAgKiBbZm9ybWF0XSB7b2JqZWN0fSBGb3JtYXR0aW5nIG9wdGlvbnMuIFNlZSBGT1JNQVQgcGJqZWN0IGFib3ZlLlxyXG4gICAgICpcclxuICAgICAqICdbQmlnTnVtYmVyIEVycm9yXSBBcmd1bWVudCB7bm90IGEgcHJpbWl0aXZlIG51bWJlcnxub3QgYW4gaW50ZWdlcnxvdXQgb2YgcmFuZ2V9OiB7ZHB8cm19J1xyXG4gICAgICogJ1tCaWdOdW1iZXIgRXJyb3JdIEFyZ3VtZW50IG5vdCBhbiBvYmplY3Q6IHtmb3JtYXR9J1xyXG4gICAgICovXHJcbiAgICBQLnRvRm9ybWF0ID0gZnVuY3Rpb24gKGRwLCBybSwgZm9ybWF0KSB7XHJcbiAgICAgIHZhciBzdHIsXHJcbiAgICAgICAgeCA9IHRoaXM7XHJcblxyXG4gICAgICBpZiAoZm9ybWF0ID09IG51bGwpIHtcclxuICAgICAgICBpZiAoZHAgIT0gbnVsbCAmJiBybSAmJiB0eXBlb2Ygcm0gPT0gJ29iamVjdCcpIHtcclxuICAgICAgICAgIGZvcm1hdCA9IHJtO1xyXG4gICAgICAgICAgcm0gPSBudWxsO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoZHAgJiYgdHlwZW9mIGRwID09ICdvYmplY3QnKSB7XHJcbiAgICAgICAgICBmb3JtYXQgPSBkcDtcclxuICAgICAgICAgIGRwID0gcm0gPSBudWxsO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBmb3JtYXQgPSBGT1JNQVQ7XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiBmb3JtYXQgIT0gJ29iamVjdCcpIHtcclxuICAgICAgICB0aHJvdyBFcnJvclxyXG4gICAgICAgICAgKGJpZ251bWJlckVycm9yICsgJ0FyZ3VtZW50IG5vdCBhbiBvYmplY3Q6ICcgKyBmb3JtYXQpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBzdHIgPSB4LnRvRml4ZWQoZHAsIHJtKTtcclxuXHJcbiAgICAgIGlmICh4LmMpIHtcclxuICAgICAgICB2YXIgaSxcclxuICAgICAgICAgIGFyciA9IHN0ci5zcGxpdCgnLicpLFxyXG4gICAgICAgICAgZzEgPSArZm9ybWF0Lmdyb3VwU2l6ZSxcclxuICAgICAgICAgIGcyID0gK2Zvcm1hdC5zZWNvbmRhcnlHcm91cFNpemUsXHJcbiAgICAgICAgICBncm91cFNlcGFyYXRvciA9IGZvcm1hdC5ncm91cFNlcGFyYXRvciB8fCAnJyxcclxuICAgICAgICAgIGludFBhcnQgPSBhcnJbMF0sXHJcbiAgICAgICAgICBmcmFjdGlvblBhcnQgPSBhcnJbMV0sXHJcbiAgICAgICAgICBpc05lZyA9IHgucyA8IDAsXHJcbiAgICAgICAgICBpbnREaWdpdHMgPSBpc05lZyA/IGludFBhcnQuc2xpY2UoMSkgOiBpbnRQYXJ0LFxyXG4gICAgICAgICAgbGVuID0gaW50RGlnaXRzLmxlbmd0aDtcclxuXHJcbiAgICAgICAgaWYgKGcyKSBpID0gZzEsIGcxID0gZzIsIGcyID0gaSwgbGVuIC09IGk7XHJcblxyXG4gICAgICAgIGlmIChnMSA+IDAgJiYgbGVuID4gMCkge1xyXG4gICAgICAgICAgaSA9IGxlbiAlIGcxIHx8IGcxO1xyXG4gICAgICAgICAgaW50UGFydCA9IGludERpZ2l0cy5zdWJzdHIoMCwgaSk7XHJcbiAgICAgICAgICBmb3IgKDsgaSA8IGxlbjsgaSArPSBnMSkgaW50UGFydCArPSBncm91cFNlcGFyYXRvciArIGludERpZ2l0cy5zdWJzdHIoaSwgZzEpO1xyXG4gICAgICAgICAgaWYgKGcyID4gMCkgaW50UGFydCArPSBncm91cFNlcGFyYXRvciArIGludERpZ2l0cy5zbGljZShpKTtcclxuICAgICAgICAgIGlmIChpc05lZykgaW50UGFydCA9ICctJyArIGludFBhcnQ7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBzdHIgPSBmcmFjdGlvblBhcnRcclxuICAgICAgICAgPyBpbnRQYXJ0ICsgKGZvcm1hdC5kZWNpbWFsU2VwYXJhdG9yIHx8ICcnKSArICgoZzIgPSArZm9ybWF0LmZyYWN0aW9uR3JvdXBTaXplKVxyXG4gICAgICAgICAgPyBmcmFjdGlvblBhcnQucmVwbGFjZShuZXcgUmVnRXhwKCdcXFxcZHsnICsgZzIgKyAnfVxcXFxCJywgJ2cnKSxcclxuICAgICAgICAgICAnJCYnICsgKGZvcm1hdC5mcmFjdGlvbkdyb3VwU2VwYXJhdG9yIHx8ICcnKSlcclxuICAgICAgICAgIDogZnJhY3Rpb25QYXJ0KVxyXG4gICAgICAgICA6IGludFBhcnQ7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJldHVybiAoZm9ybWF0LnByZWZpeCB8fCAnJykgKyBzdHIgKyAoZm9ybWF0LnN1ZmZpeCB8fCAnJyk7XHJcbiAgICB9O1xyXG5cclxuXHJcbiAgICAvKlxyXG4gICAgICogUmV0dXJuIGFuIGFycmF5IG9mIHR3byBCaWdOdW1iZXJzIHJlcHJlc2VudGluZyB0aGUgdmFsdWUgb2YgdGhpcyBCaWdOdW1iZXIgYXMgYSBzaW1wbGVcclxuICAgICAqIGZyYWN0aW9uIHdpdGggYW4gaW50ZWdlciBudW1lcmF0b3IgYW5kIGFuIGludGVnZXIgZGVub21pbmF0b3IuXHJcbiAgICAgKiBUaGUgZGVub21pbmF0b3Igd2lsbCBiZSBhIHBvc2l0aXZlIG5vbi16ZXJvIHZhbHVlIGxlc3MgdGhhbiBvciBlcXVhbCB0byB0aGUgc3BlY2lmaWVkXHJcbiAgICAgKiBtYXhpbXVtIGRlbm9taW5hdG9yLiBJZiBhIG1heGltdW0gZGVub21pbmF0b3IgaXMgbm90IHNwZWNpZmllZCwgdGhlIGRlbm9taW5hdG9yIHdpbGwgYmVcclxuICAgICAqIHRoZSBsb3dlc3QgdmFsdWUgbmVjZXNzYXJ5IHRvIHJlcHJlc2VudCB0aGUgbnVtYmVyIGV4YWN0bHkuXHJcbiAgICAgKlxyXG4gICAgICogW21kXSB7bnVtYmVyfHN0cmluZ3xCaWdOdW1iZXJ9IEludGVnZXIgPj0gMSwgb3IgSW5maW5pdHkuIFRoZSBtYXhpbXVtIGRlbm9taW5hdG9yLlxyXG4gICAgICpcclxuICAgICAqICdbQmlnTnVtYmVyIEVycm9yXSBBcmd1bWVudCB7bm90IGFuIGludGVnZXJ8b3V0IG9mIHJhbmdlfSA6IHttZH0nXHJcbiAgICAgKi9cclxuICAgIFAudG9GcmFjdGlvbiA9IGZ1bmN0aW9uIChtZCkge1xyXG4gICAgICB2YXIgZCwgZDAsIGQxLCBkMiwgZSwgZXhwLCBuLCBuMCwgbjEsIHEsIHIsIHMsXHJcbiAgICAgICAgeCA9IHRoaXMsXHJcbiAgICAgICAgeGMgPSB4LmM7XHJcblxyXG4gICAgICBpZiAobWQgIT0gbnVsbCkge1xyXG4gICAgICAgIG4gPSBuZXcgQmlnTnVtYmVyKG1kKTtcclxuXHJcbiAgICAgICAgLy8gVGhyb3cgaWYgbWQgaXMgbGVzcyB0aGFuIG9uZSBvciBpcyBub3QgYW4gaW50ZWdlciwgdW5sZXNzIGl0IGlzIEluZmluaXR5LlxyXG4gICAgICAgIGlmICghbi5pc0ludGVnZXIoKSAmJiAobi5jIHx8IG4ucyAhPT0gMSkgfHwgbi5sdChPTkUpKSB7XHJcbiAgICAgICAgICB0aHJvdyBFcnJvclxyXG4gICAgICAgICAgICAoYmlnbnVtYmVyRXJyb3IgKyAnQXJndW1lbnQgJyArXHJcbiAgICAgICAgICAgICAgKG4uaXNJbnRlZ2VyKCkgPyAnb3V0IG9mIHJhbmdlOiAnIDogJ25vdCBhbiBpbnRlZ2VyOiAnKSArIHZhbHVlT2YobikpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKCF4YykgcmV0dXJuIG5ldyBCaWdOdW1iZXIoeCk7XHJcblxyXG4gICAgICBkID0gbmV3IEJpZ051bWJlcihPTkUpO1xyXG4gICAgICBuMSA9IGQwID0gbmV3IEJpZ051bWJlcihPTkUpO1xyXG4gICAgICBkMSA9IG4wID0gbmV3IEJpZ051bWJlcihPTkUpO1xyXG4gICAgICBzID0gY29lZmZUb1N0cmluZyh4Yyk7XHJcblxyXG4gICAgICAvLyBEZXRlcm1pbmUgaW5pdGlhbCBkZW5vbWluYXRvci5cclxuICAgICAgLy8gZCBpcyBhIHBvd2VyIG9mIDEwIGFuZCB0aGUgbWluaW11bSBtYXggZGVub21pbmF0b3IgdGhhdCBzcGVjaWZpZXMgdGhlIHZhbHVlIGV4YWN0bHkuXHJcbiAgICAgIGUgPSBkLmUgPSBzLmxlbmd0aCAtIHguZSAtIDE7XHJcbiAgICAgIGQuY1swXSA9IFBPV1NfVEVOWyhleHAgPSBlICUgTE9HX0JBU0UpIDwgMCA/IExPR19CQVNFICsgZXhwIDogZXhwXTtcclxuICAgICAgbWQgPSAhbWQgfHwgbi5jb21wYXJlZFRvKGQpID4gMCA/IChlID4gMCA/IGQgOiBuMSkgOiBuO1xyXG5cclxuICAgICAgZXhwID0gTUFYX0VYUDtcclxuICAgICAgTUFYX0VYUCA9IDEgLyAwO1xyXG4gICAgICBuID0gbmV3IEJpZ051bWJlcihzKTtcclxuXHJcbiAgICAgIC8vIG4wID0gZDEgPSAwXHJcbiAgICAgIG4wLmNbMF0gPSAwO1xyXG5cclxuICAgICAgZm9yICg7IDspICB7XHJcbiAgICAgICAgcSA9IGRpdihuLCBkLCAwLCAxKTtcclxuICAgICAgICBkMiA9IGQwLnBsdXMocS50aW1lcyhkMSkpO1xyXG4gICAgICAgIGlmIChkMi5jb21wYXJlZFRvKG1kKSA9PSAxKSBicmVhaztcclxuICAgICAgICBkMCA9IGQxO1xyXG4gICAgICAgIGQxID0gZDI7XHJcbiAgICAgICAgbjEgPSBuMC5wbHVzKHEudGltZXMoZDIgPSBuMSkpO1xyXG4gICAgICAgIG4wID0gZDI7XHJcbiAgICAgICAgZCA9IG4ubWludXMocS50aW1lcyhkMiA9IGQpKTtcclxuICAgICAgICBuID0gZDI7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGQyID0gZGl2KG1kLm1pbnVzKGQwKSwgZDEsIDAsIDEpO1xyXG4gICAgICBuMCA9IG4wLnBsdXMoZDIudGltZXMobjEpKTtcclxuICAgICAgZDAgPSBkMC5wbHVzKGQyLnRpbWVzKGQxKSk7XHJcbiAgICAgIG4wLnMgPSBuMS5zID0geC5zO1xyXG4gICAgICBlID0gZSAqIDI7XHJcblxyXG4gICAgICAvLyBEZXRlcm1pbmUgd2hpY2ggZnJhY3Rpb24gaXMgY2xvc2VyIHRvIHgsIG4wL2QwIG9yIG4xL2QxXHJcbiAgICAgIHIgPSBkaXYobjEsIGQxLCBlLCBST1VORElOR19NT0RFKS5taW51cyh4KS5hYnMoKS5jb21wYXJlZFRvKFxyXG4gICAgICAgICAgZGl2KG4wLCBkMCwgZSwgUk9VTkRJTkdfTU9ERSkubWludXMoeCkuYWJzKCkpIDwgMSA/IFtuMSwgZDFdIDogW24wLCBkMF07XHJcblxyXG4gICAgICBNQVhfRVhQID0gZXhwO1xyXG5cclxuICAgICAgcmV0dXJuIHI7XHJcbiAgICB9O1xyXG5cclxuXHJcbiAgICAvKlxyXG4gICAgICogUmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGlzIEJpZ051bWJlciBjb252ZXJ0ZWQgdG8gYSBudW1iZXIgcHJpbWl0aXZlLlxyXG4gICAgICovXHJcbiAgICBQLnRvTnVtYmVyID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICByZXR1cm4gK3ZhbHVlT2YodGhpcyk7XHJcbiAgICB9O1xyXG5cclxuXHJcbiAgICAvKlxyXG4gICAgICogUmV0dXJuIGEgc3RyaW5nIHJlcHJlc2VudGluZyB0aGUgdmFsdWUgb2YgdGhpcyBCaWdOdW1iZXIgcm91bmRlZCB0byBzZCBzaWduaWZpY2FudCBkaWdpdHNcclxuICAgICAqIHVzaW5nIHJvdW5kaW5nIG1vZGUgcm0gb3IgUk9VTkRJTkdfTU9ERS4gSWYgc2QgaXMgbGVzcyB0aGFuIHRoZSBudW1iZXIgb2YgZGlnaXRzXHJcbiAgICAgKiBuZWNlc3NhcnkgdG8gcmVwcmVzZW50IHRoZSBpbnRlZ2VyIHBhcnQgb2YgdGhlIHZhbHVlIGluIGZpeGVkLXBvaW50IG5vdGF0aW9uLCB0aGVuIHVzZVxyXG4gICAgICogZXhwb25lbnRpYWwgbm90YXRpb24uXHJcbiAgICAgKlxyXG4gICAgICogW3NkXSB7bnVtYmVyfSBTaWduaWZpY2FudCBkaWdpdHMuIEludGVnZXIsIDEgdG8gTUFYIGluY2x1c2l2ZS5cclxuICAgICAqIFtybV0ge251bWJlcn0gUm91bmRpbmcgbW9kZS4gSW50ZWdlciwgMCB0byA4IGluY2x1c2l2ZS5cclxuICAgICAqXHJcbiAgICAgKiAnW0JpZ051bWJlciBFcnJvcl0gQXJndW1lbnQge25vdCBhIHByaW1pdGl2ZSBudW1iZXJ8bm90IGFuIGludGVnZXJ8b3V0IG9mIHJhbmdlfToge3NkfHJtfSdcclxuICAgICAqL1xyXG4gICAgUC50b1ByZWNpc2lvbiA9IGZ1bmN0aW9uIChzZCwgcm0pIHtcclxuICAgICAgaWYgKHNkICE9IG51bGwpIGludENoZWNrKHNkLCAxLCBNQVgpO1xyXG4gICAgICByZXR1cm4gZm9ybWF0KHRoaXMsIHNkLCBybSwgMik7XHJcbiAgICB9O1xyXG5cclxuXHJcbiAgICAvKlxyXG4gICAgICogUmV0dXJuIGEgc3RyaW5nIHJlcHJlc2VudGluZyB0aGUgdmFsdWUgb2YgdGhpcyBCaWdOdW1iZXIgaW4gYmFzZSBiLCBvciBiYXNlIDEwIGlmIGIgaXNcclxuICAgICAqIG9taXR0ZWQuIElmIGEgYmFzZSBpcyBzcGVjaWZpZWQsIGluY2x1ZGluZyBiYXNlIDEwLCByb3VuZCBhY2NvcmRpbmcgdG8gREVDSU1BTF9QTEFDRVMgYW5kXHJcbiAgICAgKiBST1VORElOR19NT0RFLiBJZiBhIGJhc2UgaXMgbm90IHNwZWNpZmllZCwgYW5kIHRoaXMgQmlnTnVtYmVyIGhhcyBhIHBvc2l0aXZlIGV4cG9uZW50XHJcbiAgICAgKiB0aGF0IGlzIGVxdWFsIHRvIG9yIGdyZWF0ZXIgdGhhbiBUT19FWFBfUE9TLCBvciBhIG5lZ2F0aXZlIGV4cG9uZW50IGVxdWFsIHRvIG9yIGxlc3MgdGhhblxyXG4gICAgICogVE9fRVhQX05FRywgcmV0dXJuIGV4cG9uZW50aWFsIG5vdGF0aW9uLlxyXG4gICAgICpcclxuICAgICAqIFtiXSB7bnVtYmVyfSBJbnRlZ2VyLCAyIHRvIEFMUEhBQkVULmxlbmd0aCBpbmNsdXNpdmUuXHJcbiAgICAgKlxyXG4gICAgICogJ1tCaWdOdW1iZXIgRXJyb3JdIEJhc2Uge25vdCBhIHByaW1pdGl2ZSBudW1iZXJ8bm90IGFuIGludGVnZXJ8b3V0IG9mIHJhbmdlfToge2J9J1xyXG4gICAgICovXHJcbiAgICBQLnRvU3RyaW5nID0gZnVuY3Rpb24gKGIpIHtcclxuICAgICAgdmFyIHN0cixcclxuICAgICAgICBuID0gdGhpcyxcclxuICAgICAgICBzID0gbi5zLFxyXG4gICAgICAgIGUgPSBuLmU7XHJcblxyXG4gICAgICAvLyBJbmZpbml0eSBvciBOYU4/XHJcbiAgICAgIGlmIChlID09PSBudWxsKSB7XHJcbiAgICAgICAgaWYgKHMpIHtcclxuICAgICAgICAgIHN0ciA9ICdJbmZpbml0eSc7XHJcbiAgICAgICAgICBpZiAocyA8IDApIHN0ciA9ICctJyArIHN0cjtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgc3RyID0gJ05hTic7XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGlmIChiID09IG51bGwpIHtcclxuICAgICAgICAgIHN0ciA9IGUgPD0gVE9fRVhQX05FRyB8fCBlID49IFRPX0VYUF9QT1NcclxuICAgICAgICAgICA/IHRvRXhwb25lbnRpYWwoY29lZmZUb1N0cmluZyhuLmMpLCBlKVxyXG4gICAgICAgICAgIDogdG9GaXhlZFBvaW50KGNvZWZmVG9TdHJpbmcobi5jKSwgZSwgJzAnKTtcclxuICAgICAgICB9IGVsc2UgaWYgKGIgPT09IDEwKSB7XHJcbiAgICAgICAgICBuID0gcm91bmQobmV3IEJpZ051bWJlcihuKSwgREVDSU1BTF9QTEFDRVMgKyBlICsgMSwgUk9VTkRJTkdfTU9ERSk7XHJcbiAgICAgICAgICBzdHIgPSB0b0ZpeGVkUG9pbnQoY29lZmZUb1N0cmluZyhuLmMpLCBuLmUsICcwJyk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGludENoZWNrKGIsIDIsIEFMUEhBQkVULmxlbmd0aCwgJ0Jhc2UnKTtcclxuICAgICAgICAgIHN0ciA9IGNvbnZlcnRCYXNlKHRvRml4ZWRQb2ludChjb2VmZlRvU3RyaW5nKG4uYyksIGUsICcwJyksIDEwLCBiLCBzLCB0cnVlKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChzIDwgMCAmJiBuLmNbMF0pIHN0ciA9ICctJyArIHN0cjtcclxuICAgICAgfVxyXG5cclxuICAgICAgcmV0dXJuIHN0cjtcclxuICAgIH07XHJcblxyXG5cclxuICAgIC8qXHJcbiAgICAgKiBSZXR1cm4gYXMgdG9TdHJpbmcsIGJ1dCBkbyBub3QgYWNjZXB0IGEgYmFzZSBhcmd1bWVudCwgYW5kIGluY2x1ZGUgdGhlIG1pbnVzIHNpZ24gZm9yXHJcbiAgICAgKiBuZWdhdGl2ZSB6ZXJvLlxyXG4gICAgICovXHJcbiAgICBQLnZhbHVlT2YgPSBQLnRvSlNPTiA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgcmV0dXJuIHZhbHVlT2YodGhpcyk7XHJcbiAgICB9O1xyXG5cclxuXHJcbiAgICBQLl9pc0JpZ051bWJlciA9IHRydWU7XHJcblxyXG4gICAgaWYgKGNvbmZpZ09iamVjdCAhPSBudWxsKSBCaWdOdW1iZXIuc2V0KGNvbmZpZ09iamVjdCk7XHJcblxyXG4gICAgcmV0dXJuIEJpZ051bWJlcjtcclxuICB9XHJcblxyXG5cclxuICAvLyBQUklWQVRFIEhFTFBFUiBGVU5DVElPTlNcclxuXHJcbiAgLy8gVGhlc2UgZnVuY3Rpb25zIGRvbid0IG5lZWQgYWNjZXNzIHRvIHZhcmlhYmxlcyxcclxuICAvLyBlLmcuIERFQ0lNQUxfUExBQ0VTLCBpbiB0aGUgc2NvcGUgb2YgdGhlIGBjbG9uZWAgZnVuY3Rpb24gYWJvdmUuXHJcblxyXG5cclxuICBmdW5jdGlvbiBiaXRGbG9vcihuKSB7XHJcbiAgICB2YXIgaSA9IG4gfCAwO1xyXG4gICAgcmV0dXJuIG4gPiAwIHx8IG4gPT09IGkgPyBpIDogaSAtIDE7XHJcbiAgfVxyXG5cclxuXHJcbiAgLy8gUmV0dXJuIGEgY29lZmZpY2llbnQgYXJyYXkgYXMgYSBzdHJpbmcgb2YgYmFzZSAxMCBkaWdpdHMuXHJcbiAgZnVuY3Rpb24gY29lZmZUb1N0cmluZyhhKSB7XHJcbiAgICB2YXIgcywgeixcclxuICAgICAgaSA9IDEsXHJcbiAgICAgIGogPSBhLmxlbmd0aCxcclxuICAgICAgciA9IGFbMF0gKyAnJztcclxuXHJcbiAgICBmb3IgKDsgaSA8IGo7KSB7XHJcbiAgICAgIHMgPSBhW2krK10gKyAnJztcclxuICAgICAgeiA9IExPR19CQVNFIC0gcy5sZW5ndGg7XHJcbiAgICAgIGZvciAoOyB6LS07IHMgPSAnMCcgKyBzKTtcclxuICAgICAgciArPSBzO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIERldGVybWluZSB0cmFpbGluZyB6ZXJvcy5cclxuICAgIGZvciAoaiA9IHIubGVuZ3RoOyByLmNoYXJDb2RlQXQoLS1qKSA9PT0gNDg7KTtcclxuXHJcbiAgICByZXR1cm4gci5zbGljZSgwLCBqICsgMSB8fCAxKTtcclxuICB9XHJcblxyXG5cclxuICAvLyBDb21wYXJlIHRoZSB2YWx1ZSBvZiBCaWdOdW1iZXJzIHggYW5kIHkuXHJcbiAgZnVuY3Rpb24gY29tcGFyZSh4LCB5KSB7XHJcbiAgICB2YXIgYSwgYixcclxuICAgICAgeGMgPSB4LmMsXHJcbiAgICAgIHljID0geS5jLFxyXG4gICAgICBpID0geC5zLFxyXG4gICAgICBqID0geS5zLFxyXG4gICAgICBrID0geC5lLFxyXG4gICAgICBsID0geS5lO1xyXG5cclxuICAgIC8vIEVpdGhlciBOYU4/XHJcbiAgICBpZiAoIWkgfHwgIWopIHJldHVybiBudWxsO1xyXG5cclxuICAgIGEgPSB4YyAmJiAheGNbMF07XHJcbiAgICBiID0geWMgJiYgIXljWzBdO1xyXG5cclxuICAgIC8vIEVpdGhlciB6ZXJvP1xyXG4gICAgaWYgKGEgfHwgYikgcmV0dXJuIGEgPyBiID8gMCA6IC1qIDogaTtcclxuXHJcbiAgICAvLyBTaWducyBkaWZmZXI/XHJcbiAgICBpZiAoaSAhPSBqKSByZXR1cm4gaTtcclxuXHJcbiAgICBhID0gaSA8IDA7XHJcbiAgICBiID0gayA9PSBsO1xyXG5cclxuICAgIC8vIEVpdGhlciBJbmZpbml0eT9cclxuICAgIGlmICgheGMgfHwgIXljKSByZXR1cm4gYiA/IDAgOiAheGMgXiBhID8gMSA6IC0xO1xyXG5cclxuICAgIC8vIENvbXBhcmUgZXhwb25lbnRzLlxyXG4gICAgaWYgKCFiKSByZXR1cm4gayA+IGwgXiBhID8gMSA6IC0xO1xyXG5cclxuICAgIGogPSAoayA9IHhjLmxlbmd0aCkgPCAobCA9IHljLmxlbmd0aCkgPyBrIDogbDtcclxuXHJcbiAgICAvLyBDb21wYXJlIGRpZ2l0IGJ5IGRpZ2l0LlxyXG4gICAgZm9yIChpID0gMDsgaSA8IGo7IGkrKykgaWYgKHhjW2ldICE9IHljW2ldKSByZXR1cm4geGNbaV0gPiB5Y1tpXSBeIGEgPyAxIDogLTE7XHJcblxyXG4gICAgLy8gQ29tcGFyZSBsZW5ndGhzLlxyXG4gICAgcmV0dXJuIGsgPT0gbCA/IDAgOiBrID4gbCBeIGEgPyAxIDogLTE7XHJcbiAgfVxyXG5cclxuXHJcbiAgLypcclxuICAgKiBDaGVjayB0aGF0IG4gaXMgYSBwcmltaXRpdmUgbnVtYmVyLCBhbiBpbnRlZ2VyLCBhbmQgaW4gcmFuZ2UsIG90aGVyd2lzZSB0aHJvdy5cclxuICAgKi9cclxuICBmdW5jdGlvbiBpbnRDaGVjayhuLCBtaW4sIG1heCwgbmFtZSkge1xyXG4gICAgaWYgKG4gPCBtaW4gfHwgbiA+IG1heCB8fCBuICE9PSBtYXRoZmxvb3IobikpIHtcclxuICAgICAgdGhyb3cgRXJyb3JcclxuICAgICAgIChiaWdudW1iZXJFcnJvciArIChuYW1lIHx8ICdBcmd1bWVudCcpICsgKHR5cGVvZiBuID09ICdudW1iZXInXHJcbiAgICAgICAgID8gbiA8IG1pbiB8fCBuID4gbWF4ID8gJyBvdXQgb2YgcmFuZ2U6ICcgOiAnIG5vdCBhbiBpbnRlZ2VyOiAnXHJcbiAgICAgICAgIDogJyBub3QgYSBwcmltaXRpdmUgbnVtYmVyOiAnKSArIFN0cmluZyhuKSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuXHJcbiAgLy8gQXNzdW1lcyBmaW5pdGUgbi5cclxuICBmdW5jdGlvbiBpc09kZChuKSB7XHJcbiAgICB2YXIgayA9IG4uYy5sZW5ndGggLSAxO1xyXG4gICAgcmV0dXJuIGJpdEZsb29yKG4uZSAvIExPR19CQVNFKSA9PSBrICYmIG4uY1trXSAlIDIgIT0gMDtcclxuICB9XHJcblxyXG5cclxuICBmdW5jdGlvbiB0b0V4cG9uZW50aWFsKHN0ciwgZSkge1xyXG4gICAgcmV0dXJuIChzdHIubGVuZ3RoID4gMSA/IHN0ci5jaGFyQXQoMCkgKyAnLicgKyBzdHIuc2xpY2UoMSkgOiBzdHIpICtcclxuICAgICAoZSA8IDAgPyAnZScgOiAnZSsnKSArIGU7XHJcbiAgfVxyXG5cclxuXHJcbiAgZnVuY3Rpb24gdG9GaXhlZFBvaW50KHN0ciwgZSwgeikge1xyXG4gICAgdmFyIGxlbiwgenM7XHJcblxyXG4gICAgLy8gTmVnYXRpdmUgZXhwb25lbnQ/XHJcbiAgICBpZiAoZSA8IDApIHtcclxuXHJcbiAgICAgIC8vIFByZXBlbmQgemVyb3MuXHJcbiAgICAgIGZvciAoenMgPSB6ICsgJy4nOyArK2U7IHpzICs9IHopO1xyXG4gICAgICBzdHIgPSB6cyArIHN0cjtcclxuXHJcbiAgICAvLyBQb3NpdGl2ZSBleHBvbmVudFxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgbGVuID0gc3RyLmxlbmd0aDtcclxuXHJcbiAgICAgIC8vIEFwcGVuZCB6ZXJvcy5cclxuICAgICAgaWYgKCsrZSA+IGxlbikge1xyXG4gICAgICAgIGZvciAoenMgPSB6LCBlIC09IGxlbjsgLS1lOyB6cyArPSB6KTtcclxuICAgICAgICBzdHIgKz0genM7XHJcbiAgICAgIH0gZWxzZSBpZiAoZSA8IGxlbikge1xyXG4gICAgICAgIHN0ciA9IHN0ci5zbGljZSgwLCBlKSArICcuJyArIHN0ci5zbGljZShlKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBzdHI7XHJcbiAgfVxyXG5cclxuXHJcbiAgLy8gRVhQT1JUXHJcblxyXG5cclxuICBCaWdOdW1iZXIgPSBjbG9uZSgpO1xyXG4gIEJpZ051bWJlclsnZGVmYXVsdCddID0gQmlnTnVtYmVyLkJpZ051bWJlciA9IEJpZ051bWJlcjtcclxuXHJcbiAgLy8gQU1ELlxyXG4gIGlmICh0eXBlb2YgZGVmaW5lID09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCkge1xyXG4gICAgZGVmaW5lKGZ1bmN0aW9uICgpIHsgcmV0dXJuIEJpZ051bWJlcjsgfSk7XHJcblxyXG4gIC8vIE5vZGUuanMgYW5kIG90aGVyIGVudmlyb25tZW50cyB0aGF0IHN1cHBvcnQgbW9kdWxlLmV4cG9ydHMuXHJcbiAgfSBlbHNlIGlmICh0eXBlb2YgbW9kdWxlICE9ICd1bmRlZmluZWQnICYmIG1vZHVsZS5leHBvcnRzKSB7XHJcbiAgICBtb2R1bGUuZXhwb3J0cyA9IEJpZ051bWJlcjtcclxuXHJcbiAgLy8gQnJvd3Nlci5cclxuICB9IGVsc2Uge1xyXG4gICAgaWYgKCFnbG9iYWxPYmplY3QpIHtcclxuICAgICAgZ2xvYmFsT2JqZWN0ID0gdHlwZW9mIHNlbGYgIT0gJ3VuZGVmaW5lZCcgJiYgc2VsZiA/IHNlbGYgOiB3aW5kb3c7XHJcbiAgICB9XHJcblxyXG4gICAgZ2xvYmFsT2JqZWN0LkJpZ051bWJlciA9IEJpZ051bWJlcjtcclxuICB9XHJcbn0pKHRoaXMpO1xyXG4iLCJ2YXIganNvbl9zdHJpbmdpZnkgPSByZXF1aXJlKCcuL2xpYi9zdHJpbmdpZnkuanMnKS5zdHJpbmdpZnk7XG52YXIganNvbl9wYXJzZSAgICAgPSByZXF1aXJlKCcuL2xpYi9wYXJzZS5qcycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKG9wdGlvbnMpIHtcbiAgICByZXR1cm4gIHtcbiAgICAgICAgcGFyc2U6IGpzb25fcGFyc2Uob3B0aW9ucyksXG4gICAgICAgIHN0cmluZ2lmeToganNvbl9zdHJpbmdpZnlcbiAgICB9XG59O1xuLy9jcmVhdGUgdGhlIGRlZmF1bHQgbWV0aG9kIG1lbWJlcnMgd2l0aCBubyBvcHRpb25zIGFwcGxpZWQgZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5XG5tb2R1bGUuZXhwb3J0cy5wYXJzZSA9IGpzb25fcGFyc2UoKTtcbm1vZHVsZS5leHBvcnRzLnN0cmluZ2lmeSA9IGpzb25fc3RyaW5naWZ5O1xuIiwidmFyIEJpZ051bWJlciA9IG51bGw7XG5cbi8vIHJlZ2V4cHhzIGV4dHJhY3RlZCBmcm9tXG4vLyAoYykgQlNELTMtQ2xhdXNlXG4vLyBodHRwczovL2dpdGh1Yi5jb20vZmFzdGlmeS9zZWN1cmUtanNvbi1wYXJzZS9ncmFwaHMvY29udHJpYnV0b3JzIGFuZCBodHRwczovL2dpdGh1Yi5jb20vaGFwaWpzL2JvdXJuZS9ncmFwaHMvY29udHJpYnV0b3JzXG5cbmNvbnN0IHN1c3BlY3RQcm90b1J4ID0gLyg/Ol98XFxcXHUwMDVbRmZdKSg/Ol98XFxcXHUwMDVbRmZdKSg/OnB8XFxcXHUwMDcwKSg/OnJ8XFxcXHUwMDcyKSg/Om98XFxcXHUwMDZbRmZdKSg/OnR8XFxcXHUwMDc0KSg/Om98XFxcXHUwMDZbRmZdKSg/Ol98XFxcXHUwMDVbRmZdKSg/Ol98XFxcXHUwMDVbRmZdKS87XG5jb25zdCBzdXNwZWN0Q29uc3RydWN0b3JSeCA9IC8oPzpjfFxcXFx1MDA2MykoPzpvfFxcXFx1MDA2W0ZmXSkoPzpufFxcXFx1MDA2W0VlXSkoPzpzfFxcXFx1MDA3MykoPzp0fFxcXFx1MDA3NCkoPzpyfFxcXFx1MDA3MikoPzp1fFxcXFx1MDA3NSkoPzpjfFxcXFx1MDA2MykoPzp0fFxcXFx1MDA3NCkoPzpvfFxcXFx1MDA2W0ZmXSkoPzpyfFxcXFx1MDA3MikvO1xuXG4vKlxuICAgIGpzb25fcGFyc2UuanNcbiAgICAyMDEyLTA2LTIwXG5cbiAgICBQdWJsaWMgRG9tYWluLlxuXG4gICAgTk8gV0FSUkFOVFkgRVhQUkVTU0VEIE9SIElNUExJRUQuIFVTRSBBVCBZT1VSIE9XTiBSSVNLLlxuXG4gICAgVGhpcyBmaWxlIGNyZWF0ZXMgYSBqc29uX3BhcnNlIGZ1bmN0aW9uLlxuICAgIER1cmluZyBjcmVhdGUgeW91IGNhbiAob3B0aW9uYWxseSkgc3BlY2lmeSBzb21lIGJlaGF2aW91cmFsIHN3aXRjaGVzXG5cbiAgICAgICAgcmVxdWlyZSgnanNvbi1iaWdpbnQnKShvcHRpb25zKVxuXG4gICAgICAgICAgICBUaGUgb3B0aW9uYWwgb3B0aW9ucyBwYXJhbWV0ZXIgaG9sZHMgc3dpdGNoZXMgdGhhdCBkcml2ZSBjZXJ0YWluXG4gICAgICAgICAgICBhc3BlY3RzIG9mIHRoZSBwYXJzaW5nIHByb2Nlc3M6XG4gICAgICAgICAgICAqIG9wdGlvbnMuc3RyaWN0ID0gdHJ1ZSB3aWxsIHdhcm4gYWJvdXQgZHVwbGljYXRlLWtleSB1c2FnZSBpbiB0aGUganNvbi5cbiAgICAgICAgICAgICAgVGhlIGRlZmF1bHQgKHN0cmljdCA9IGZhbHNlKSB3aWxsIHNpbGVudGx5IGlnbm9yZSB0aG9zZSBhbmQgb3ZlcndyaXRlXG4gICAgICAgICAgICAgIHZhbHVlcyBmb3Iga2V5cyB0aGF0IGFyZSBpbiBkdXBsaWNhdGUgdXNlLlxuXG4gICAgVGhlIHJlc3VsdGluZyBmdW5jdGlvbiBmb2xsb3dzIHRoaXMgc2lnbmF0dXJlOlxuICAgICAgICBqc29uX3BhcnNlKHRleHQsIHJldml2ZXIpXG4gICAgICAgICAgICBUaGlzIG1ldGhvZCBwYXJzZXMgYSBKU09OIHRleHQgdG8gcHJvZHVjZSBhbiBvYmplY3Qgb3IgYXJyYXkuXG4gICAgICAgICAgICBJdCBjYW4gdGhyb3cgYSBTeW50YXhFcnJvciBleGNlcHRpb24uXG5cbiAgICAgICAgICAgIFRoZSBvcHRpb25hbCByZXZpdmVyIHBhcmFtZXRlciBpcyBhIGZ1bmN0aW9uIHRoYXQgY2FuIGZpbHRlciBhbmRcbiAgICAgICAgICAgIHRyYW5zZm9ybSB0aGUgcmVzdWx0cy4gSXQgcmVjZWl2ZXMgZWFjaCBvZiB0aGUga2V5cyBhbmQgdmFsdWVzLFxuICAgICAgICAgICAgYW5kIGl0cyByZXR1cm4gdmFsdWUgaXMgdXNlZCBpbnN0ZWFkIG9mIHRoZSBvcmlnaW5hbCB2YWx1ZS5cbiAgICAgICAgICAgIElmIGl0IHJldHVybnMgd2hhdCBpdCByZWNlaXZlZCwgdGhlbiB0aGUgc3RydWN0dXJlIGlzIG5vdCBtb2RpZmllZC5cbiAgICAgICAgICAgIElmIGl0IHJldHVybnMgdW5kZWZpbmVkIHRoZW4gdGhlIG1lbWJlciBpcyBkZWxldGVkLlxuXG4gICAgICAgICAgICBFeGFtcGxlOlxuXG4gICAgICAgICAgICAvLyBQYXJzZSB0aGUgdGV4dC4gVmFsdWVzIHRoYXQgbG9vayBsaWtlIElTTyBkYXRlIHN0cmluZ3Mgd2lsbFxuICAgICAgICAgICAgLy8gYmUgY29udmVydGVkIHRvIERhdGUgb2JqZWN0cy5cblxuICAgICAgICAgICAgbXlEYXRhID0ganNvbl9wYXJzZSh0ZXh0LCBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkge1xuICAgICAgICAgICAgICAgIHZhciBhO1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgICAgIGEgPVxuL14oXFxkezR9KS0oXFxkezJ9KS0oXFxkezJ9KVQoXFxkezJ9KTooXFxkezJ9KTooXFxkezJ9KD86XFwuXFxkKik/KVokLy5leGVjKHZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgRGF0ZShEYXRlLlVUQygrYVsxXSwgK2FbMl0gLSAxLCArYVszXSwgK2FbNF0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgK2FbNV0sICthWzZdKSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICAgICAgfSk7XG5cbiAgICBUaGlzIGlzIGEgcmVmZXJlbmNlIGltcGxlbWVudGF0aW9uLiBZb3UgYXJlIGZyZWUgdG8gY29weSwgbW9kaWZ5LCBvclxuICAgIHJlZGlzdHJpYnV0ZS5cblxuICAgIFRoaXMgY29kZSBzaG91bGQgYmUgbWluaWZpZWQgYmVmb3JlIGRlcGxveW1lbnQuXG4gICAgU2VlIGh0dHA6Ly9qYXZhc2NyaXB0LmNyb2NrZm9yZC5jb20vanNtaW4uaHRtbFxuXG4gICAgVVNFIFlPVVIgT1dOIENPUFkuIElUIElTIEVYVFJFTUVMWSBVTldJU0UgVE8gTE9BRCBDT0RFIEZST00gU0VSVkVSUyBZT1UgRE9cbiAgICBOT1QgQ09OVFJPTC5cbiovXG5cbi8qbWVtYmVycyBcIlwiLCBcIlxcXCJcIiwgXCJcXC9cIiwgXCJcXFxcXCIsIGF0LCBiLCBjYWxsLCBjaGFyQXQsIGYsIGZyb21DaGFyQ29kZSxcbiAgICBoYXNPd25Qcm9wZXJ0eSwgbWVzc2FnZSwgbiwgbmFtZSwgcHJvdG90eXBlLCBwdXNoLCByLCB0LCB0ZXh0XG4qL1xuXG52YXIganNvbl9wYXJzZSA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gICd1c2Ugc3RyaWN0JztcblxuICAvLyBUaGlzIGlzIGEgZnVuY3Rpb24gdGhhdCBjYW4gcGFyc2UgYSBKU09OIHRleHQsIHByb2R1Y2luZyBhIEphdmFTY3JpcHRcbiAgLy8gZGF0YSBzdHJ1Y3R1cmUuIEl0IGlzIGEgc2ltcGxlLCByZWN1cnNpdmUgZGVzY2VudCBwYXJzZXIuIEl0IGRvZXMgbm90IHVzZVxuICAvLyBldmFsIG9yIHJlZ3VsYXIgZXhwcmVzc2lvbnMsIHNvIGl0IGNhbiBiZSB1c2VkIGFzIGEgbW9kZWwgZm9yIGltcGxlbWVudGluZ1xuICAvLyBhIEpTT04gcGFyc2VyIGluIG90aGVyIGxhbmd1YWdlcy5cblxuICAvLyBXZSBhcmUgZGVmaW5pbmcgdGhlIGZ1bmN0aW9uIGluc2lkZSBvZiBhbm90aGVyIGZ1bmN0aW9uIHRvIGF2b2lkIGNyZWF0aW5nXG4gIC8vIGdsb2JhbCB2YXJpYWJsZXMuXG5cbiAgLy8gRGVmYXVsdCBvcHRpb25zIG9uZSBjYW4gb3ZlcnJpZGUgYnkgcGFzc2luZyBvcHRpb25zIHRvIHRoZSBwYXJzZSgpXG4gIHZhciBfb3B0aW9ucyA9IHtcbiAgICBzdHJpY3Q6IGZhbHNlLCAvLyBub3QgYmVpbmcgc3RyaWN0IG1lYW5zIGRvIG5vdCBnZW5lcmF0ZSBzeW50YXggZXJyb3JzIGZvciBcImR1cGxpY2F0ZSBrZXlcIlxuICAgIHN0b3JlQXNTdHJpbmc6IGZhbHNlLCAvLyB0b2dnbGVzIHdoZXRoZXIgdGhlIHZhbHVlcyBzaG91bGQgYmUgc3RvcmVkIGFzIEJpZ051bWJlciAoZGVmYXVsdCkgb3IgYSBzdHJpbmdcbiAgICBhbHdheXNQYXJzZUFzQmlnOiBmYWxzZSwgLy8gdG9nZ2xlcyB3aGV0aGVyIGFsbCBudW1iZXJzIHNob3VsZCBiZSBCaWdcbiAgICB1c2VOYXRpdmVCaWdJbnQ6IGZhbHNlLCAvLyB0b2dnbGVzIHdoZXRoZXIgdG8gdXNlIG5hdGl2ZSBCaWdJbnQgaW5zdGVhZCBvZiBiaWdudW1iZXIuanNcbiAgICBwcm90b0FjdGlvbjogJ2Vycm9yJyxcbiAgICBjb25zdHJ1Y3RvckFjdGlvbjogJ2Vycm9yJyxcbiAgfTtcblxuICAvLyBJZiB0aGVyZSBhcmUgb3B0aW9ucywgdGhlbiB1c2UgdGhlbSB0byBvdmVycmlkZSB0aGUgZGVmYXVsdCBfb3B0aW9uc1xuICBpZiAob3B0aW9ucyAhPT0gdW5kZWZpbmVkICYmIG9wdGlvbnMgIT09IG51bGwpIHtcbiAgICBpZiAob3B0aW9ucy5zdHJpY3QgPT09IHRydWUpIHtcbiAgICAgIF9vcHRpb25zLnN0cmljdCA9IHRydWU7XG4gICAgfVxuICAgIGlmIChvcHRpb25zLnN0b3JlQXNTdHJpbmcgPT09IHRydWUpIHtcbiAgICAgIF9vcHRpb25zLnN0b3JlQXNTdHJpbmcgPSB0cnVlO1xuICAgIH1cbiAgICBfb3B0aW9ucy5hbHdheXNQYXJzZUFzQmlnID1cbiAgICAgIG9wdGlvbnMuYWx3YXlzUGFyc2VBc0JpZyA9PT0gdHJ1ZSA/IG9wdGlvbnMuYWx3YXlzUGFyc2VBc0JpZyA6IGZhbHNlO1xuICAgIF9vcHRpb25zLnVzZU5hdGl2ZUJpZ0ludCA9XG4gICAgICBvcHRpb25zLnVzZU5hdGl2ZUJpZ0ludCA9PT0gdHJ1ZSA/IG9wdGlvbnMudXNlTmF0aXZlQmlnSW50IDogZmFsc2U7XG5cbiAgICBpZiAodHlwZW9mIG9wdGlvbnMuY29uc3RydWN0b3JBY3Rpb24gIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBpZiAoXG4gICAgICAgIG9wdGlvbnMuY29uc3RydWN0b3JBY3Rpb24gPT09ICdlcnJvcicgfHxcbiAgICAgICAgb3B0aW9ucy5jb25zdHJ1Y3RvckFjdGlvbiA9PT0gJ2lnbm9yZScgfHxcbiAgICAgICAgb3B0aW9ucy5jb25zdHJ1Y3RvckFjdGlvbiA9PT0gJ3ByZXNlcnZlJ1xuICAgICAgKSB7XG4gICAgICAgIF9vcHRpb25zLmNvbnN0cnVjdG9yQWN0aW9uID0gb3B0aW9ucy5jb25zdHJ1Y3RvckFjdGlvbjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBgSW5jb3JyZWN0IHZhbHVlIGZvciBjb25zdHJ1Y3RvckFjdGlvbiBvcHRpb24sIG11c3QgYmUgXCJlcnJvclwiLCBcImlnbm9yZVwiIG9yIHVuZGVmaW5lZCBidXQgcGFzc2VkICR7b3B0aW9ucy5jb25zdHJ1Y3RvckFjdGlvbn1gXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBvcHRpb25zLnByb3RvQWN0aW9uICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgaWYgKFxuICAgICAgICBvcHRpb25zLnByb3RvQWN0aW9uID09PSAnZXJyb3InIHx8XG4gICAgICAgIG9wdGlvbnMucHJvdG9BY3Rpb24gPT09ICdpZ25vcmUnIHx8XG4gICAgICAgIG9wdGlvbnMucHJvdG9BY3Rpb24gPT09ICdwcmVzZXJ2ZSdcbiAgICAgICkge1xuICAgICAgICBfb3B0aW9ucy5wcm90b0FjdGlvbiA9IG9wdGlvbnMucHJvdG9BY3Rpb247XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgYEluY29ycmVjdCB2YWx1ZSBmb3IgcHJvdG9BY3Rpb24gb3B0aW9uLCBtdXN0IGJlIFwiZXJyb3JcIiwgXCJpZ25vcmVcIiBvciB1bmRlZmluZWQgYnV0IHBhc3NlZCAke29wdGlvbnMucHJvdG9BY3Rpb259YFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHZhciBhdCwgLy8gVGhlIGluZGV4IG9mIHRoZSBjdXJyZW50IGNoYXJhY3RlclxuICAgIGNoLCAvLyBUaGUgY3VycmVudCBjaGFyYWN0ZXJcbiAgICBlc2NhcGVlID0ge1xuICAgICAgJ1wiJzogJ1wiJyxcbiAgICAgICdcXFxcJzogJ1xcXFwnLFxuICAgICAgJy8nOiAnLycsXG4gICAgICBiOiAnXFxiJyxcbiAgICAgIGY6ICdcXGYnLFxuICAgICAgbjogJ1xcbicsXG4gICAgICByOiAnXFxyJyxcbiAgICAgIHQ6ICdcXHQnLFxuICAgIH0sXG4gICAgdGV4dCxcbiAgICBlcnJvciA9IGZ1bmN0aW9uIChtKSB7XG4gICAgICAvLyBDYWxsIGVycm9yIHdoZW4gc29tZXRoaW5nIGlzIHdyb25nLlxuXG4gICAgICB0aHJvdyB7XG4gICAgICAgIG5hbWU6ICdTeW50YXhFcnJvcicsXG4gICAgICAgIG1lc3NhZ2U6IG0sXG4gICAgICAgIGF0OiBhdCxcbiAgICAgICAgdGV4dDogdGV4dCxcbiAgICAgIH07XG4gICAgfSxcbiAgICBuZXh0ID0gZnVuY3Rpb24gKGMpIHtcbiAgICAgIC8vIElmIGEgYyBwYXJhbWV0ZXIgaXMgcHJvdmlkZWQsIHZlcmlmeSB0aGF0IGl0IG1hdGNoZXMgdGhlIGN1cnJlbnQgY2hhcmFjdGVyLlxuXG4gICAgICBpZiAoYyAmJiBjICE9PSBjaCkge1xuICAgICAgICBlcnJvcihcIkV4cGVjdGVkICdcIiArIGMgKyBcIicgaW5zdGVhZCBvZiAnXCIgKyBjaCArIFwiJ1wiKTtcbiAgICAgIH1cblxuICAgICAgLy8gR2V0IHRoZSBuZXh0IGNoYXJhY3Rlci4gV2hlbiB0aGVyZSBhcmUgbm8gbW9yZSBjaGFyYWN0ZXJzLFxuICAgICAgLy8gcmV0dXJuIHRoZSBlbXB0eSBzdHJpbmcuXG5cbiAgICAgIGNoID0gdGV4dC5jaGFyQXQoYXQpO1xuICAgICAgYXQgKz0gMTtcbiAgICAgIHJldHVybiBjaDtcbiAgICB9LFxuICAgIG51bWJlciA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIC8vIFBhcnNlIGEgbnVtYmVyIHZhbHVlLlxuXG4gICAgICB2YXIgbnVtYmVyLFxuICAgICAgICBzdHJpbmcgPSAnJztcblxuICAgICAgaWYgKGNoID09PSAnLScpIHtcbiAgICAgICAgc3RyaW5nID0gJy0nO1xuICAgICAgICBuZXh0KCctJyk7XG4gICAgICB9XG4gICAgICB3aGlsZSAoY2ggPj0gJzAnICYmIGNoIDw9ICc5Jykge1xuICAgICAgICBzdHJpbmcgKz0gY2g7XG4gICAgICAgIG5leHQoKTtcbiAgICAgIH1cbiAgICAgIGlmIChjaCA9PT0gJy4nKSB7XG4gICAgICAgIHN0cmluZyArPSAnLic7XG4gICAgICAgIHdoaWxlIChuZXh0KCkgJiYgY2ggPj0gJzAnICYmIGNoIDw9ICc5Jykge1xuICAgICAgICAgIHN0cmluZyArPSBjaDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKGNoID09PSAnZScgfHwgY2ggPT09ICdFJykge1xuICAgICAgICBzdHJpbmcgKz0gY2g7XG4gICAgICAgIG5leHQoKTtcbiAgICAgICAgaWYgKGNoID09PSAnLScgfHwgY2ggPT09ICcrJykge1xuICAgICAgICAgIHN0cmluZyArPSBjaDtcbiAgICAgICAgICBuZXh0KCk7XG4gICAgICAgIH1cbiAgICAgICAgd2hpbGUgKGNoID49ICcwJyAmJiBjaCA8PSAnOScpIHtcbiAgICAgICAgICBzdHJpbmcgKz0gY2g7XG4gICAgICAgICAgbmV4dCgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBudW1iZXIgPSArc3RyaW5nO1xuICAgICAgaWYgKCFpc0Zpbml0ZShudW1iZXIpKSB7XG4gICAgICAgIGVycm9yKCdCYWQgbnVtYmVyJyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoQmlnTnVtYmVyID09IG51bGwpIEJpZ051bWJlciA9IHJlcXVpcmUoJ2JpZ251bWJlci5qcycpO1xuICAgICAgICAvL2lmIChudW1iZXIgPiA5MDA3MTk5MjU0NzQwOTkyIHx8IG51bWJlciA8IC05MDA3MTk5MjU0NzQwOTkyKVxuICAgICAgICAvLyBCaWdudW1iZXIgaGFzIHN0cmljdGVyIGNoZWNrOiBldmVyeXRoaW5nIHdpdGggbGVuZ3RoID4gMTUgZGlnaXRzIGRpc2FsbG93ZWRcbiAgICAgICAgaWYgKHN0cmluZy5sZW5ndGggPiAxNSlcbiAgICAgICAgICByZXR1cm4gX29wdGlvbnMuc3RvcmVBc1N0cmluZ1xuICAgICAgICAgICAgPyBzdHJpbmdcbiAgICAgICAgICAgIDogX29wdGlvbnMudXNlTmF0aXZlQmlnSW50XG4gICAgICAgICAgICA/IEJpZ0ludChzdHJpbmcpXG4gICAgICAgICAgICA6IG5ldyBCaWdOdW1iZXIoc3RyaW5nKTtcbiAgICAgICAgZWxzZVxuICAgICAgICAgIHJldHVybiAhX29wdGlvbnMuYWx3YXlzUGFyc2VBc0JpZ1xuICAgICAgICAgICAgPyBudW1iZXJcbiAgICAgICAgICAgIDogX29wdGlvbnMudXNlTmF0aXZlQmlnSW50XG4gICAgICAgICAgICA/IEJpZ0ludChudW1iZXIpXG4gICAgICAgICAgICA6IG5ldyBCaWdOdW1iZXIobnVtYmVyKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIHN0cmluZyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIC8vIFBhcnNlIGEgc3RyaW5nIHZhbHVlLlxuXG4gICAgICB2YXIgaGV4LFxuICAgICAgICBpLFxuICAgICAgICBzdHJpbmcgPSAnJyxcbiAgICAgICAgdWZmZmY7XG5cbiAgICAgIC8vIFdoZW4gcGFyc2luZyBmb3Igc3RyaW5nIHZhbHVlcywgd2UgbXVzdCBsb29rIGZvciBcIiBhbmQgXFwgY2hhcmFjdGVycy5cblxuICAgICAgaWYgKGNoID09PSAnXCInKSB7XG4gICAgICAgIHZhciBzdGFydEF0ID0gYXQ7XG4gICAgICAgIHdoaWxlIChuZXh0KCkpIHtcbiAgICAgICAgICBpZiAoY2ggPT09ICdcIicpIHtcbiAgICAgICAgICAgIGlmIChhdCAtIDEgPiBzdGFydEF0KSBzdHJpbmcgKz0gdGV4dC5zdWJzdHJpbmcoc3RhcnRBdCwgYXQgLSAxKTtcbiAgICAgICAgICAgIG5leHQoKTtcbiAgICAgICAgICAgIHJldHVybiBzdHJpbmc7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChjaCA9PT0gJ1xcXFwnKSB7XG4gICAgICAgICAgICBpZiAoYXQgLSAxID4gc3RhcnRBdCkgc3RyaW5nICs9IHRleHQuc3Vic3RyaW5nKHN0YXJ0QXQsIGF0IC0gMSk7XG4gICAgICAgICAgICBuZXh0KCk7XG4gICAgICAgICAgICBpZiAoY2ggPT09ICd1Jykge1xuICAgICAgICAgICAgICB1ZmZmZiA9IDA7XG4gICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCA0OyBpICs9IDEpIHtcbiAgICAgICAgICAgICAgICBoZXggPSBwYXJzZUludChuZXh0KCksIDE2KTtcbiAgICAgICAgICAgICAgICBpZiAoIWlzRmluaXRlKGhleCkpIHtcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB1ZmZmZiA9IHVmZmZmICogMTYgKyBoZXg7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgc3RyaW5nICs9IFN0cmluZy5mcm9tQ2hhckNvZGUodWZmZmYpO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgZXNjYXBlZVtjaF0gPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgIHN0cmluZyArPSBlc2NhcGVlW2NoXTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc3RhcnRBdCA9IGF0O1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgZXJyb3IoJ0JhZCBzdHJpbmcnKTtcbiAgICB9LFxuICAgIHdoaXRlID0gZnVuY3Rpb24gKCkge1xuICAgICAgLy8gU2tpcCB3aGl0ZXNwYWNlLlxuXG4gICAgICB3aGlsZSAoY2ggJiYgY2ggPD0gJyAnKSB7XG4gICAgICAgIG5leHQoKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIHdvcmQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAvLyB0cnVlLCBmYWxzZSwgb3IgbnVsbC5cblxuICAgICAgc3dpdGNoIChjaCkge1xuICAgICAgICBjYXNlICd0JzpcbiAgICAgICAgICBuZXh0KCd0Jyk7XG4gICAgICAgICAgbmV4dCgncicpO1xuICAgICAgICAgIG5leHQoJ3UnKTtcbiAgICAgICAgICBuZXh0KCdlJyk7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIGNhc2UgJ2YnOlxuICAgICAgICAgIG5leHQoJ2YnKTtcbiAgICAgICAgICBuZXh0KCdhJyk7XG4gICAgICAgICAgbmV4dCgnbCcpO1xuICAgICAgICAgIG5leHQoJ3MnKTtcbiAgICAgICAgICBuZXh0KCdlJyk7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICBjYXNlICduJzpcbiAgICAgICAgICBuZXh0KCduJyk7XG4gICAgICAgICAgbmV4dCgndScpO1xuICAgICAgICAgIG5leHQoJ2wnKTtcbiAgICAgICAgICBuZXh0KCdsJyk7XG4gICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG4gICAgICBlcnJvcihcIlVuZXhwZWN0ZWQgJ1wiICsgY2ggKyBcIidcIik7XG4gICAgfSxcbiAgICB2YWx1ZSwgLy8gUGxhY2UgaG9sZGVyIGZvciB0aGUgdmFsdWUgZnVuY3Rpb24uXG4gICAgYXJyYXkgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAvLyBQYXJzZSBhbiBhcnJheSB2YWx1ZS5cblxuICAgICAgdmFyIGFycmF5ID0gW107XG5cbiAgICAgIGlmIChjaCA9PT0gJ1snKSB7XG4gICAgICAgIG5leHQoJ1snKTtcbiAgICAgICAgd2hpdGUoKTtcbiAgICAgICAgaWYgKGNoID09PSAnXScpIHtcbiAgICAgICAgICBuZXh0KCddJyk7XG4gICAgICAgICAgcmV0dXJuIGFycmF5OyAvLyBlbXB0eSBhcnJheVxuICAgICAgICB9XG4gICAgICAgIHdoaWxlIChjaCkge1xuICAgICAgICAgIGFycmF5LnB1c2godmFsdWUoKSk7XG4gICAgICAgICAgd2hpdGUoKTtcbiAgICAgICAgICBpZiAoY2ggPT09ICddJykge1xuICAgICAgICAgICAgbmV4dCgnXScpO1xuICAgICAgICAgICAgcmV0dXJuIGFycmF5O1xuICAgICAgICAgIH1cbiAgICAgICAgICBuZXh0KCcsJyk7XG4gICAgICAgICAgd2hpdGUoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgZXJyb3IoJ0JhZCBhcnJheScpO1xuICAgIH0sXG4gICAgb2JqZWN0ID0gZnVuY3Rpb24gKCkge1xuICAgICAgLy8gUGFyc2UgYW4gb2JqZWN0IHZhbHVlLlxuXG4gICAgICB2YXIga2V5LFxuICAgICAgICBvYmplY3QgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuXG4gICAgICBpZiAoY2ggPT09ICd7Jykge1xuICAgICAgICBuZXh0KCd7Jyk7XG4gICAgICAgIHdoaXRlKCk7XG4gICAgICAgIGlmIChjaCA9PT0gJ30nKSB7XG4gICAgICAgICAgbmV4dCgnfScpO1xuICAgICAgICAgIHJldHVybiBvYmplY3Q7IC8vIGVtcHR5IG9iamVjdFxuICAgICAgICB9XG4gICAgICAgIHdoaWxlIChjaCkge1xuICAgICAgICAgIGtleSA9IHN0cmluZygpO1xuICAgICAgICAgIHdoaXRlKCk7XG4gICAgICAgICAgbmV4dCgnOicpO1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIF9vcHRpb25zLnN0cmljdCA9PT0gdHJ1ZSAmJlxuICAgICAgICAgICAgT2JqZWN0Lmhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBrZXkpXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICBlcnJvcignRHVwbGljYXRlIGtleSBcIicgKyBrZXkgKyAnXCInKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoc3VzcGVjdFByb3RvUngudGVzdChrZXkpID09PSB0cnVlKSB7XG4gICAgICAgICAgICBpZiAoX29wdGlvbnMucHJvdG9BY3Rpb24gPT09ICdlcnJvcicpIHtcbiAgICAgICAgICAgICAgZXJyb3IoJ09iamVjdCBjb250YWlucyBmb3JiaWRkZW4gcHJvdG90eXBlIHByb3BlcnR5Jyk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKF9vcHRpb25zLnByb3RvQWN0aW9uID09PSAnaWdub3JlJykge1xuICAgICAgICAgICAgICB2YWx1ZSgpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgb2JqZWN0W2tleV0gPSB2YWx1ZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSBpZiAoc3VzcGVjdENvbnN0cnVjdG9yUngudGVzdChrZXkpID09PSB0cnVlKSB7XG4gICAgICAgICAgICBpZiAoX29wdGlvbnMuY29uc3RydWN0b3JBY3Rpb24gPT09ICdlcnJvcicpIHtcbiAgICAgICAgICAgICAgZXJyb3IoJ09iamVjdCBjb250YWlucyBmb3JiaWRkZW4gY29uc3RydWN0b3IgcHJvcGVydHknKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoX29wdGlvbnMuY29uc3RydWN0b3JBY3Rpb24gPT09ICdpZ25vcmUnKSB7XG4gICAgICAgICAgICAgIHZhbHVlKCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBvYmplY3Rba2V5XSA9IHZhbHVlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG9iamVjdFtrZXldID0gdmFsdWUoKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB3aGl0ZSgpO1xuICAgICAgICAgIGlmIChjaCA9PT0gJ30nKSB7XG4gICAgICAgICAgICBuZXh0KCd9Jyk7XG4gICAgICAgICAgICByZXR1cm4gb2JqZWN0O1xuICAgICAgICAgIH1cbiAgICAgICAgICBuZXh0KCcsJyk7XG4gICAgICAgICAgd2hpdGUoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgZXJyb3IoJ0JhZCBvYmplY3QnKTtcbiAgICB9O1xuXG4gIHZhbHVlID0gZnVuY3Rpb24gKCkge1xuICAgIC8vIFBhcnNlIGEgSlNPTiB2YWx1ZS4gSXQgY291bGQgYmUgYW4gb2JqZWN0LCBhbiBhcnJheSwgYSBzdHJpbmcsIGEgbnVtYmVyLFxuICAgIC8vIG9yIGEgd29yZC5cblxuICAgIHdoaXRlKCk7XG4gICAgc3dpdGNoIChjaCkge1xuICAgICAgY2FzZSAneyc6XG4gICAgICAgIHJldHVybiBvYmplY3QoKTtcbiAgICAgIGNhc2UgJ1snOlxuICAgICAgICByZXR1cm4gYXJyYXkoKTtcbiAgICAgIGNhc2UgJ1wiJzpcbiAgICAgICAgcmV0dXJuIHN0cmluZygpO1xuICAgICAgY2FzZSAnLSc6XG4gICAgICAgIHJldHVybiBudW1iZXIoKTtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBjaCA+PSAnMCcgJiYgY2ggPD0gJzknID8gbnVtYmVyKCkgOiB3b3JkKCk7XG4gICAgfVxuICB9O1xuXG4gIC8vIFJldHVybiB0aGUganNvbl9wYXJzZSBmdW5jdGlvbi4gSXQgd2lsbCBoYXZlIGFjY2VzcyB0byBhbGwgb2YgdGhlIGFib3ZlXG4gIC8vIGZ1bmN0aW9ucyBhbmQgdmFyaWFibGVzLlxuXG4gIHJldHVybiBmdW5jdGlvbiAoc291cmNlLCByZXZpdmVyKSB7XG4gICAgdmFyIHJlc3VsdDtcblxuICAgIHRleHQgPSBzb3VyY2UgKyAnJztcbiAgICBhdCA9IDA7XG4gICAgY2ggPSAnICc7XG4gICAgcmVzdWx0ID0gdmFsdWUoKTtcbiAgICB3aGl0ZSgpO1xuICAgIGlmIChjaCkge1xuICAgICAgZXJyb3IoJ1N5bnRheCBlcnJvcicpO1xuICAgIH1cblxuICAgIC8vIElmIHRoZXJlIGlzIGEgcmV2aXZlciBmdW5jdGlvbiwgd2UgcmVjdXJzaXZlbHkgd2FsayB0aGUgbmV3IHN0cnVjdHVyZSxcbiAgICAvLyBwYXNzaW5nIGVhY2ggbmFtZS92YWx1ZSBwYWlyIHRvIHRoZSByZXZpdmVyIGZ1bmN0aW9uIGZvciBwb3NzaWJsZVxuICAgIC8vIHRyYW5zZm9ybWF0aW9uLCBzdGFydGluZyB3aXRoIGEgdGVtcG9yYXJ5IHJvb3Qgb2JqZWN0IHRoYXQgaG9sZHMgdGhlIHJlc3VsdFxuICAgIC8vIGluIGFuIGVtcHR5IGtleS4gSWYgdGhlcmUgaXMgbm90IGEgcmV2aXZlciBmdW5jdGlvbiwgd2Ugc2ltcGx5IHJldHVybiB0aGVcbiAgICAvLyByZXN1bHQuXG5cbiAgICByZXR1cm4gdHlwZW9mIHJldml2ZXIgPT09ICdmdW5jdGlvbidcbiAgICAgID8gKGZ1bmN0aW9uIHdhbGsoaG9sZGVyLCBrZXkpIHtcbiAgICAgICAgICB2YXIgayxcbiAgICAgICAgICAgIHYsXG4gICAgICAgICAgICB2YWx1ZSA9IGhvbGRlcltrZXldO1xuICAgICAgICAgIGlmICh2YWx1ZSAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICBPYmplY3Qua2V5cyh2YWx1ZSkuZm9yRWFjaChmdW5jdGlvbiAoaykge1xuICAgICAgICAgICAgICB2ID0gd2Fsayh2YWx1ZSwgayk7XG4gICAgICAgICAgICAgIGlmICh2ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICB2YWx1ZVtrXSA9IHY7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgZGVsZXRlIHZhbHVlW2tdO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHJldml2ZXIuY2FsbChob2xkZXIsIGtleSwgdmFsdWUpO1xuICAgICAgICB9KSh7ICcnOiByZXN1bHQgfSwgJycpXG4gICAgICA6IHJlc3VsdDtcbiAgfTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0ganNvbl9wYXJzZTtcbiIsInZhciBCaWdOdW1iZXIgPSByZXF1aXJlKCdiaWdudW1iZXIuanMnKTtcblxuLypcbiAgICBqc29uMi5qc1xuICAgIDIwMTMtMDUtMjZcblxuICAgIFB1YmxpYyBEb21haW4uXG5cbiAgICBOTyBXQVJSQU5UWSBFWFBSRVNTRUQgT1IgSU1QTElFRC4gVVNFIEFUIFlPVVIgT1dOIFJJU0suXG5cbiAgICBTZWUgaHR0cDovL3d3dy5KU09OLm9yZy9qcy5odG1sXG5cblxuICAgIFRoaXMgY29kZSBzaG91bGQgYmUgbWluaWZpZWQgYmVmb3JlIGRlcGxveW1lbnQuXG4gICAgU2VlIGh0dHA6Ly9qYXZhc2NyaXB0LmNyb2NrZm9yZC5jb20vanNtaW4uaHRtbFxuXG4gICAgVVNFIFlPVVIgT1dOIENPUFkuIElUIElTIEVYVFJFTUVMWSBVTldJU0UgVE8gTE9BRCBDT0RFIEZST00gU0VSVkVSUyBZT1UgRE9cbiAgICBOT1QgQ09OVFJPTC5cblxuXG4gICAgVGhpcyBmaWxlIGNyZWF0ZXMgYSBnbG9iYWwgSlNPTiBvYmplY3QgY29udGFpbmluZyB0d28gbWV0aG9kczogc3RyaW5naWZ5XG4gICAgYW5kIHBhcnNlLlxuXG4gICAgICAgIEpTT04uc3RyaW5naWZ5KHZhbHVlLCByZXBsYWNlciwgc3BhY2UpXG4gICAgICAgICAgICB2YWx1ZSAgICAgICBhbnkgSmF2YVNjcmlwdCB2YWx1ZSwgdXN1YWxseSBhbiBvYmplY3Qgb3IgYXJyYXkuXG5cbiAgICAgICAgICAgIHJlcGxhY2VyICAgIGFuIG9wdGlvbmFsIHBhcmFtZXRlciB0aGF0IGRldGVybWluZXMgaG93IG9iamVjdFxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVzIGFyZSBzdHJpbmdpZmllZCBmb3Igb2JqZWN0cy4gSXQgY2FuIGJlIGFcbiAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIG9yIGFuIGFycmF5IG9mIHN0cmluZ3MuXG5cbiAgICAgICAgICAgIHNwYWNlICAgICAgIGFuIG9wdGlvbmFsIHBhcmFtZXRlciB0aGF0IHNwZWNpZmllcyB0aGUgaW5kZW50YXRpb25cbiAgICAgICAgICAgICAgICAgICAgICAgIG9mIG5lc3RlZCBzdHJ1Y3R1cmVzLiBJZiBpdCBpcyBvbWl0dGVkLCB0aGUgdGV4dCB3aWxsXG4gICAgICAgICAgICAgICAgICAgICAgICBiZSBwYWNrZWQgd2l0aG91dCBleHRyYSB3aGl0ZXNwYWNlLiBJZiBpdCBpcyBhIG51bWJlcixcbiAgICAgICAgICAgICAgICAgICAgICAgIGl0IHdpbGwgc3BlY2lmeSB0aGUgbnVtYmVyIG9mIHNwYWNlcyB0byBpbmRlbnQgYXQgZWFjaFxuICAgICAgICAgICAgICAgICAgICAgICAgbGV2ZWwuIElmIGl0IGlzIGEgc3RyaW5nIChzdWNoIGFzICdcXHQnIG9yICcmbmJzcDsnKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGl0IGNvbnRhaW5zIHRoZSBjaGFyYWN0ZXJzIHVzZWQgdG8gaW5kZW50IGF0IGVhY2ggbGV2ZWwuXG5cbiAgICAgICAgICAgIFRoaXMgbWV0aG9kIHByb2R1Y2VzIGEgSlNPTiB0ZXh0IGZyb20gYSBKYXZhU2NyaXB0IHZhbHVlLlxuXG4gICAgICAgICAgICBXaGVuIGFuIG9iamVjdCB2YWx1ZSBpcyBmb3VuZCwgaWYgdGhlIG9iamVjdCBjb250YWlucyBhIHRvSlNPTlxuICAgICAgICAgICAgbWV0aG9kLCBpdHMgdG9KU09OIG1ldGhvZCB3aWxsIGJlIGNhbGxlZCBhbmQgdGhlIHJlc3VsdCB3aWxsIGJlXG4gICAgICAgICAgICBzdHJpbmdpZmllZC4gQSB0b0pTT04gbWV0aG9kIGRvZXMgbm90IHNlcmlhbGl6ZTogaXQgcmV0dXJucyB0aGVcbiAgICAgICAgICAgIHZhbHVlIHJlcHJlc2VudGVkIGJ5IHRoZSBuYW1lL3ZhbHVlIHBhaXIgdGhhdCBzaG91bGQgYmUgc2VyaWFsaXplZCxcbiAgICAgICAgICAgIG9yIHVuZGVmaW5lZCBpZiBub3RoaW5nIHNob3VsZCBiZSBzZXJpYWxpemVkLiBUaGUgdG9KU09OIG1ldGhvZFxuICAgICAgICAgICAgd2lsbCBiZSBwYXNzZWQgdGhlIGtleSBhc3NvY2lhdGVkIHdpdGggdGhlIHZhbHVlLCBhbmQgdGhpcyB3aWxsIGJlXG4gICAgICAgICAgICBib3VuZCB0byB0aGUgdmFsdWVcblxuICAgICAgICAgICAgRm9yIGV4YW1wbGUsIHRoaXMgd291bGQgc2VyaWFsaXplIERhdGVzIGFzIElTTyBzdHJpbmdzLlxuXG4gICAgICAgICAgICAgICAgRGF0ZS5wcm90b3R5cGUudG9KU09OID0gZnVuY3Rpb24gKGtleSkge1xuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBmKG4pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIEZvcm1hdCBpbnRlZ2VycyB0byBoYXZlIGF0IGxlYXN0IHR3byBkaWdpdHMuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbiA8IDEwID8gJzAnICsgbiA6IG47XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRVVENGdWxsWWVhcigpICAgKyAnLScgK1xuICAgICAgICAgICAgICAgICAgICAgICAgIGYodGhpcy5nZXRVVENNb250aCgpICsgMSkgKyAnLScgK1xuICAgICAgICAgICAgICAgICAgICAgICAgIGYodGhpcy5nZXRVVENEYXRlKCkpICAgICAgKyAnVCcgK1xuICAgICAgICAgICAgICAgICAgICAgICAgIGYodGhpcy5nZXRVVENIb3VycygpKSAgICAgKyAnOicgK1xuICAgICAgICAgICAgICAgICAgICAgICAgIGYodGhpcy5nZXRVVENNaW51dGVzKCkpICAgKyAnOicgK1xuICAgICAgICAgICAgICAgICAgICAgICAgIGYodGhpcy5nZXRVVENTZWNvbmRzKCkpICAgKyAnWic7XG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgWW91IGNhbiBwcm92aWRlIGFuIG9wdGlvbmFsIHJlcGxhY2VyIG1ldGhvZC4gSXQgd2lsbCBiZSBwYXNzZWQgdGhlXG4gICAgICAgICAgICBrZXkgYW5kIHZhbHVlIG9mIGVhY2ggbWVtYmVyLCB3aXRoIHRoaXMgYm91bmQgdG8gdGhlIGNvbnRhaW5pbmdcbiAgICAgICAgICAgIG9iamVjdC4gVGhlIHZhbHVlIHRoYXQgaXMgcmV0dXJuZWQgZnJvbSB5b3VyIG1ldGhvZCB3aWxsIGJlXG4gICAgICAgICAgICBzZXJpYWxpemVkLiBJZiB5b3VyIG1ldGhvZCByZXR1cm5zIHVuZGVmaW5lZCwgdGhlbiB0aGUgbWVtYmVyIHdpbGxcbiAgICAgICAgICAgIGJlIGV4Y2x1ZGVkIGZyb20gdGhlIHNlcmlhbGl6YXRpb24uXG5cbiAgICAgICAgICAgIElmIHRoZSByZXBsYWNlciBwYXJhbWV0ZXIgaXMgYW4gYXJyYXkgb2Ygc3RyaW5ncywgdGhlbiBpdCB3aWxsIGJlXG4gICAgICAgICAgICB1c2VkIHRvIHNlbGVjdCB0aGUgbWVtYmVycyB0byBiZSBzZXJpYWxpemVkLiBJdCBmaWx0ZXJzIHRoZSByZXN1bHRzXG4gICAgICAgICAgICBzdWNoIHRoYXQgb25seSBtZW1iZXJzIHdpdGgga2V5cyBsaXN0ZWQgaW4gdGhlIHJlcGxhY2VyIGFycmF5IGFyZVxuICAgICAgICAgICAgc3RyaW5naWZpZWQuXG5cbiAgICAgICAgICAgIFZhbHVlcyB0aGF0IGRvIG5vdCBoYXZlIEpTT04gcmVwcmVzZW50YXRpb25zLCBzdWNoIGFzIHVuZGVmaW5lZCBvclxuICAgICAgICAgICAgZnVuY3Rpb25zLCB3aWxsIG5vdCBiZSBzZXJpYWxpemVkLiBTdWNoIHZhbHVlcyBpbiBvYmplY3RzIHdpbGwgYmVcbiAgICAgICAgICAgIGRyb3BwZWQ7IGluIGFycmF5cyB0aGV5IHdpbGwgYmUgcmVwbGFjZWQgd2l0aCBudWxsLiBZb3UgY2FuIHVzZVxuICAgICAgICAgICAgYSByZXBsYWNlciBmdW5jdGlvbiB0byByZXBsYWNlIHRob3NlIHdpdGggSlNPTiB2YWx1ZXMuXG4gICAgICAgICAgICBKU09OLnN0cmluZ2lmeSh1bmRlZmluZWQpIHJldHVybnMgdW5kZWZpbmVkLlxuXG4gICAgICAgICAgICBUaGUgb3B0aW9uYWwgc3BhY2UgcGFyYW1ldGVyIHByb2R1Y2VzIGEgc3RyaW5naWZpY2F0aW9uIG9mIHRoZVxuICAgICAgICAgICAgdmFsdWUgdGhhdCBpcyBmaWxsZWQgd2l0aCBsaW5lIGJyZWFrcyBhbmQgaW5kZW50YXRpb24gdG8gbWFrZSBpdFxuICAgICAgICAgICAgZWFzaWVyIHRvIHJlYWQuXG5cbiAgICAgICAgICAgIElmIHRoZSBzcGFjZSBwYXJhbWV0ZXIgaXMgYSBub24tZW1wdHkgc3RyaW5nLCB0aGVuIHRoYXQgc3RyaW5nIHdpbGxcbiAgICAgICAgICAgIGJlIHVzZWQgZm9yIGluZGVudGF0aW9uLiBJZiB0aGUgc3BhY2UgcGFyYW1ldGVyIGlzIGEgbnVtYmVyLCB0aGVuXG4gICAgICAgICAgICB0aGUgaW5kZW50YXRpb24gd2lsbCBiZSB0aGF0IG1hbnkgc3BhY2VzLlxuXG4gICAgICAgICAgICBFeGFtcGxlOlxuXG4gICAgICAgICAgICB0ZXh0ID0gSlNPTi5zdHJpbmdpZnkoWydlJywge3BsdXJpYnVzOiAndW51bSd9XSk7XG4gICAgICAgICAgICAvLyB0ZXh0IGlzICdbXCJlXCIse1wicGx1cmlidXNcIjpcInVudW1cIn1dJ1xuXG5cbiAgICAgICAgICAgIHRleHQgPSBKU09OLnN0cmluZ2lmeShbJ2UnLCB7cGx1cmlidXM6ICd1bnVtJ31dLCBudWxsLCAnXFx0Jyk7XG4gICAgICAgICAgICAvLyB0ZXh0IGlzICdbXFxuXFx0XCJlXCIsXFxuXFx0e1xcblxcdFxcdFwicGx1cmlidXNcIjogXCJ1bnVtXCJcXG5cXHR9XFxuXSdcblxuICAgICAgICAgICAgdGV4dCA9IEpTT04uc3RyaW5naWZ5KFtuZXcgRGF0ZSgpXSwgZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpc1trZXldIGluc3RhbmNlb2YgRGF0ZSA/XG4gICAgICAgICAgICAgICAgICAgICdEYXRlKCcgKyB0aGlzW2tleV0gKyAnKScgOiB2YWx1ZTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgLy8gdGV4dCBpcyAnW1wiRGF0ZSgtLS1jdXJyZW50IHRpbWUtLS0pXCJdJ1xuXG5cbiAgICAgICAgSlNPTi5wYXJzZSh0ZXh0LCByZXZpdmVyKVxuICAgICAgICAgICAgVGhpcyBtZXRob2QgcGFyc2VzIGEgSlNPTiB0ZXh0IHRvIHByb2R1Y2UgYW4gb2JqZWN0IG9yIGFycmF5LlxuICAgICAgICAgICAgSXQgY2FuIHRocm93IGEgU3ludGF4RXJyb3IgZXhjZXB0aW9uLlxuXG4gICAgICAgICAgICBUaGUgb3B0aW9uYWwgcmV2aXZlciBwYXJhbWV0ZXIgaXMgYSBmdW5jdGlvbiB0aGF0IGNhbiBmaWx0ZXIgYW5kXG4gICAgICAgICAgICB0cmFuc2Zvcm0gdGhlIHJlc3VsdHMuIEl0IHJlY2VpdmVzIGVhY2ggb2YgdGhlIGtleXMgYW5kIHZhbHVlcyxcbiAgICAgICAgICAgIGFuZCBpdHMgcmV0dXJuIHZhbHVlIGlzIHVzZWQgaW5zdGVhZCBvZiB0aGUgb3JpZ2luYWwgdmFsdWUuXG4gICAgICAgICAgICBJZiBpdCByZXR1cm5zIHdoYXQgaXQgcmVjZWl2ZWQsIHRoZW4gdGhlIHN0cnVjdHVyZSBpcyBub3QgbW9kaWZpZWQuXG4gICAgICAgICAgICBJZiBpdCByZXR1cm5zIHVuZGVmaW5lZCB0aGVuIHRoZSBtZW1iZXIgaXMgZGVsZXRlZC5cblxuICAgICAgICAgICAgRXhhbXBsZTpcblxuICAgICAgICAgICAgLy8gUGFyc2UgdGhlIHRleHQuIFZhbHVlcyB0aGF0IGxvb2sgbGlrZSBJU08gZGF0ZSBzdHJpbmdzIHdpbGxcbiAgICAgICAgICAgIC8vIGJlIGNvbnZlcnRlZCB0byBEYXRlIG9iamVjdHMuXG5cbiAgICAgICAgICAgIG15RGF0YSA9IEpTT04ucGFyc2UodGV4dCwgZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcbiAgICAgICAgICAgICAgICB2YXIgYTtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgICAgICBhID1cbi9eKFxcZHs0fSktKFxcZHsyfSktKFxcZHsyfSlUKFxcZHsyfSk6KFxcZHsyfSk6KFxcZHsyfSg/OlxcLlxcZCopPylaJC8uZXhlYyh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChhKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IERhdGUoRGF0ZS5VVEMoK2FbMV0sICthWzJdIC0gMSwgK2FbM10sICthWzRdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICthWzVdLCArYVs2XSkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBteURhdGEgPSBKU09OLnBhcnNlKCdbXCJEYXRlKDA5LzA5LzIwMDEpXCJdJywgZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcbiAgICAgICAgICAgICAgICB2YXIgZDtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUuc2xpY2UoMCwgNSkgPT09ICdEYXRlKCcgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlLnNsaWNlKC0xKSA9PT0gJyknKSB7XG4gICAgICAgICAgICAgICAgICAgIGQgPSBuZXcgRGF0ZSh2YWx1ZS5zbGljZSg1LCAtMSkpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGQ7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICAgICAgfSk7XG5cblxuICAgIFRoaXMgaXMgYSByZWZlcmVuY2UgaW1wbGVtZW50YXRpb24uIFlvdSBhcmUgZnJlZSB0byBjb3B5LCBtb2RpZnksIG9yXG4gICAgcmVkaXN0cmlidXRlLlxuKi9cblxuLypqc2xpbnQgZXZpbDogdHJ1ZSwgcmVnZXhwOiB0cnVlICovXG5cbi8qbWVtYmVycyBcIlwiLCBcIlxcYlwiLCBcIlxcdFwiLCBcIlxcblwiLCBcIlxcZlwiLCBcIlxcclwiLCBcIlxcXCJcIiwgSlNPTiwgXCJcXFxcXCIsIGFwcGx5LFxuICAgIGNhbGwsIGNoYXJDb2RlQXQsIGdldFVUQ0RhdGUsIGdldFVUQ0Z1bGxZZWFyLCBnZXRVVENIb3VycyxcbiAgICBnZXRVVENNaW51dGVzLCBnZXRVVENNb250aCwgZ2V0VVRDU2Vjb25kcywgaGFzT3duUHJvcGVydHksIGpvaW4sXG4gICAgbGFzdEluZGV4LCBsZW5ndGgsIHBhcnNlLCBwcm90b3R5cGUsIHB1c2gsIHJlcGxhY2UsIHNsaWNlLCBzdHJpbmdpZnksXG4gICAgdGVzdCwgdG9KU09OLCB0b1N0cmluZywgdmFsdWVPZlxuKi9cblxuXG4vLyBDcmVhdGUgYSBKU09OIG9iamVjdCBvbmx5IGlmIG9uZSBkb2VzIG5vdCBhbHJlYWR5IGV4aXN0LiBXZSBjcmVhdGUgdGhlXG4vLyBtZXRob2RzIGluIGEgY2xvc3VyZSB0byBhdm9pZCBjcmVhdGluZyBnbG9iYWwgdmFyaWFibGVzLlxuXG52YXIgSlNPTiA9IG1vZHVsZS5leHBvcnRzO1xuXG4oZnVuY3Rpb24gKCkge1xuICAgICd1c2Ugc3RyaWN0JztcblxuICAgIGZ1bmN0aW9uIGYobikge1xuICAgICAgICAvLyBGb3JtYXQgaW50ZWdlcnMgdG8gaGF2ZSBhdCBsZWFzdCB0d28gZGlnaXRzLlxuICAgICAgICByZXR1cm4gbiA8IDEwID8gJzAnICsgbiA6IG47XG4gICAgfVxuXG4gICAgdmFyIGN4ID0gL1tcXHUwMDAwXFx1MDBhZFxcdTA2MDAtXFx1MDYwNFxcdTA3MGZcXHUxN2I0XFx1MTdiNVxcdTIwMGMtXFx1MjAwZlxcdTIwMjgtXFx1MjAyZlxcdTIwNjAtXFx1MjA2ZlxcdWZlZmZcXHVmZmYwLVxcdWZmZmZdL2csXG4gICAgICAgIGVzY2FwYWJsZSA9IC9bXFxcXFxcXCJcXHgwMC1cXHgxZlxceDdmLVxceDlmXFx1MDBhZFxcdTA2MDAtXFx1MDYwNFxcdTA3MGZcXHUxN2I0XFx1MTdiNVxcdTIwMGMtXFx1MjAwZlxcdTIwMjgtXFx1MjAyZlxcdTIwNjAtXFx1MjA2ZlxcdWZlZmZcXHVmZmYwLVxcdWZmZmZdL2csXG4gICAgICAgIGdhcCxcbiAgICAgICAgaW5kZW50LFxuICAgICAgICBtZXRhID0geyAgICAvLyB0YWJsZSBvZiBjaGFyYWN0ZXIgc3Vic3RpdHV0aW9uc1xuICAgICAgICAgICAgJ1xcYic6ICdcXFxcYicsXG4gICAgICAgICAgICAnXFx0JzogJ1xcXFx0JyxcbiAgICAgICAgICAgICdcXG4nOiAnXFxcXG4nLFxuICAgICAgICAgICAgJ1xcZic6ICdcXFxcZicsXG4gICAgICAgICAgICAnXFxyJzogJ1xcXFxyJyxcbiAgICAgICAgICAgICdcIicgOiAnXFxcXFwiJyxcbiAgICAgICAgICAgICdcXFxcJzogJ1xcXFxcXFxcJ1xuICAgICAgICB9LFxuICAgICAgICByZXA7XG5cblxuICAgIGZ1bmN0aW9uIHF1b3RlKHN0cmluZykge1xuXG4vLyBJZiB0aGUgc3RyaW5nIGNvbnRhaW5zIG5vIGNvbnRyb2wgY2hhcmFjdGVycywgbm8gcXVvdGUgY2hhcmFjdGVycywgYW5kIG5vXG4vLyBiYWNrc2xhc2ggY2hhcmFjdGVycywgdGhlbiB3ZSBjYW4gc2FmZWx5IHNsYXAgc29tZSBxdW90ZXMgYXJvdW5kIGl0LlxuLy8gT3RoZXJ3aXNlIHdlIG11c3QgYWxzbyByZXBsYWNlIHRoZSBvZmZlbmRpbmcgY2hhcmFjdGVycyB3aXRoIHNhZmUgZXNjYXBlXG4vLyBzZXF1ZW5jZXMuXG5cbiAgICAgICAgZXNjYXBhYmxlLmxhc3RJbmRleCA9IDA7XG4gICAgICAgIHJldHVybiBlc2NhcGFibGUudGVzdChzdHJpbmcpID8gJ1wiJyArIHN0cmluZy5yZXBsYWNlKGVzY2FwYWJsZSwgZnVuY3Rpb24gKGEpIHtcbiAgICAgICAgICAgIHZhciBjID0gbWV0YVthXTtcbiAgICAgICAgICAgIHJldHVybiB0eXBlb2YgYyA9PT0gJ3N0cmluZydcbiAgICAgICAgICAgICAgICA/IGNcbiAgICAgICAgICAgICAgICA6ICdcXFxcdScgKyAoJzAwMDAnICsgYS5jaGFyQ29kZUF0KDApLnRvU3RyaW5nKDE2KSkuc2xpY2UoLTQpO1xuICAgICAgICB9KSArICdcIicgOiAnXCInICsgc3RyaW5nICsgJ1wiJztcbiAgICB9XG5cblxuICAgIGZ1bmN0aW9uIHN0cihrZXksIGhvbGRlcikge1xuXG4vLyBQcm9kdWNlIGEgc3RyaW5nIGZyb20gaG9sZGVyW2tleV0uXG5cbiAgICAgICAgdmFyIGksICAgICAgICAgIC8vIFRoZSBsb29wIGNvdW50ZXIuXG4gICAgICAgICAgICBrLCAgICAgICAgICAvLyBUaGUgbWVtYmVyIGtleS5cbiAgICAgICAgICAgIHYsICAgICAgICAgIC8vIFRoZSBtZW1iZXIgdmFsdWUuXG4gICAgICAgICAgICBsZW5ndGgsXG4gICAgICAgICAgICBtaW5kID0gZ2FwLFxuICAgICAgICAgICAgcGFydGlhbCxcbiAgICAgICAgICAgIHZhbHVlID0gaG9sZGVyW2tleV0sXG4gICAgICAgICAgICBpc0JpZ051bWJlciA9IHZhbHVlICE9IG51bGwgJiYgKHZhbHVlIGluc3RhbmNlb2YgQmlnTnVtYmVyIHx8IEJpZ051bWJlci5pc0JpZ051bWJlcih2YWx1ZSkpO1xuXG4vLyBJZiB0aGUgdmFsdWUgaGFzIGEgdG9KU09OIG1ldGhvZCwgY2FsbCBpdCB0byBvYnRhaW4gYSByZXBsYWNlbWVudCB2YWx1ZS5cblxuICAgICAgICBpZiAodmFsdWUgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJlxuICAgICAgICAgICAgICAgIHR5cGVvZiB2YWx1ZS50b0pTT04gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHZhbHVlID0gdmFsdWUudG9KU09OKGtleSk7XG4gICAgICAgIH1cblxuLy8gSWYgd2Ugd2VyZSBjYWxsZWQgd2l0aCBhIHJlcGxhY2VyIGZ1bmN0aW9uLCB0aGVuIGNhbGwgdGhlIHJlcGxhY2VyIHRvXG4vLyBvYnRhaW4gYSByZXBsYWNlbWVudCB2YWx1ZS5cblxuICAgICAgICBpZiAodHlwZW9mIHJlcCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgdmFsdWUgPSByZXAuY2FsbChob2xkZXIsIGtleSwgdmFsdWUpO1xuICAgICAgICB9XG5cbi8vIFdoYXQgaGFwcGVucyBuZXh0IGRlcGVuZHMgb24gdGhlIHZhbHVlJ3MgdHlwZS5cblxuICAgICAgICBzd2l0Y2ggKHR5cGVvZiB2YWx1ZSkge1xuICAgICAgICBjYXNlICdzdHJpbmcnOlxuICAgICAgICAgICAgaWYgKGlzQmlnTnVtYmVyKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcXVvdGUodmFsdWUpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgIGNhc2UgJ251bWJlcic6XG5cbi8vIEpTT04gbnVtYmVycyBtdXN0IGJlIGZpbml0ZS4gRW5jb2RlIG5vbi1maW5pdGUgbnVtYmVycyBhcyBudWxsLlxuXG4gICAgICAgICAgICByZXR1cm4gaXNGaW5pdGUodmFsdWUpID8gU3RyaW5nKHZhbHVlKSA6ICdudWxsJztcblxuICAgICAgICBjYXNlICdib29sZWFuJzpcbiAgICAgICAgY2FzZSAnbnVsbCc6XG4gICAgICAgIGNhc2UgJ2JpZ2ludCc6XG5cbi8vIElmIHRoZSB2YWx1ZSBpcyBhIGJvb2xlYW4gb3IgbnVsbCwgY29udmVydCBpdCB0byBhIHN0cmluZy4gTm90ZTpcbi8vIHR5cGVvZiBudWxsIGRvZXMgbm90IHByb2R1Y2UgJ251bGwnLiBUaGUgY2FzZSBpcyBpbmNsdWRlZCBoZXJlIGluXG4vLyB0aGUgcmVtb3RlIGNoYW5jZSB0aGF0IHRoaXMgZ2V0cyBmaXhlZCBzb21lZGF5LlxuXG4gICAgICAgICAgICByZXR1cm4gU3RyaW5nKHZhbHVlKTtcblxuLy8gSWYgdGhlIHR5cGUgaXMgJ29iamVjdCcsIHdlIG1pZ2h0IGJlIGRlYWxpbmcgd2l0aCBhbiBvYmplY3Qgb3IgYW4gYXJyYXkgb3Jcbi8vIG51bGwuXG5cbiAgICAgICAgY2FzZSAnb2JqZWN0JzpcblxuLy8gRHVlIHRvIGEgc3BlY2lmaWNhdGlvbiBibHVuZGVyIGluIEVDTUFTY3JpcHQsIHR5cGVvZiBudWxsIGlzICdvYmplY3QnLFxuLy8gc28gd2F0Y2ggb3V0IGZvciB0aGF0IGNhc2UuXG5cbiAgICAgICAgICAgIGlmICghdmFsdWUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ251bGwnO1xuICAgICAgICAgICAgfVxuXG4vLyBNYWtlIGFuIGFycmF5IHRvIGhvbGQgdGhlIHBhcnRpYWwgcmVzdWx0cyBvZiBzdHJpbmdpZnlpbmcgdGhpcyBvYmplY3QgdmFsdWUuXG5cbiAgICAgICAgICAgIGdhcCArPSBpbmRlbnQ7XG4gICAgICAgICAgICBwYXJ0aWFsID0gW107XG5cbi8vIElzIHRoZSB2YWx1ZSBhbiBhcnJheT9cblxuICAgICAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuYXBwbHkodmFsdWUpID09PSAnW29iamVjdCBBcnJheV0nKSB7XG5cbi8vIFRoZSB2YWx1ZSBpcyBhbiBhcnJheS4gU3RyaW5naWZ5IGV2ZXJ5IGVsZW1lbnQuIFVzZSBudWxsIGFzIGEgcGxhY2Vob2xkZXJcbi8vIGZvciBub24tSlNPTiB2YWx1ZXMuXG5cbiAgICAgICAgICAgICAgICBsZW5ndGggPSB2YWx1ZS5sZW5ndGg7XG4gICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGxlbmd0aDsgaSArPSAxKSB7XG4gICAgICAgICAgICAgICAgICAgIHBhcnRpYWxbaV0gPSBzdHIoaSwgdmFsdWUpIHx8ICdudWxsJztcbiAgICAgICAgICAgICAgICB9XG5cbi8vIEpvaW4gYWxsIG9mIHRoZSBlbGVtZW50cyB0b2dldGhlciwgc2VwYXJhdGVkIHdpdGggY29tbWFzLCBhbmQgd3JhcCB0aGVtIGluXG4vLyBicmFja2V0cy5cblxuICAgICAgICAgICAgICAgIHYgPSBwYXJ0aWFsLmxlbmd0aCA9PT0gMFxuICAgICAgICAgICAgICAgICAgICA/ICdbXSdcbiAgICAgICAgICAgICAgICAgICAgOiBnYXBcbiAgICAgICAgICAgICAgICAgICAgPyAnW1xcbicgKyBnYXAgKyBwYXJ0aWFsLmpvaW4oJyxcXG4nICsgZ2FwKSArICdcXG4nICsgbWluZCArICddJ1xuICAgICAgICAgICAgICAgICAgICA6ICdbJyArIHBhcnRpYWwuam9pbignLCcpICsgJ10nO1xuICAgICAgICAgICAgICAgIGdhcCA9IG1pbmQ7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHY7XG4gICAgICAgICAgICB9XG5cbi8vIElmIHRoZSByZXBsYWNlciBpcyBhbiBhcnJheSwgdXNlIGl0IHRvIHNlbGVjdCB0aGUgbWVtYmVycyB0byBiZSBzdHJpbmdpZmllZC5cblxuICAgICAgICAgICAgaWYgKHJlcCAmJiB0eXBlb2YgcmVwID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgICAgIGxlbmd0aCA9IHJlcC5sZW5ndGg7XG4gICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGxlbmd0aDsgaSArPSAxKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgcmVwW2ldID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgayA9IHJlcFtpXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHYgPSBzdHIoaywgdmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHYpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJ0aWFsLnB1c2gocXVvdGUoaykgKyAoZ2FwID8gJzogJyA6ICc6JykgKyB2KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG5cbi8vIE90aGVyd2lzZSwgaXRlcmF0ZSB0aHJvdWdoIGFsbCBvZiB0aGUga2V5cyBpbiB0aGUgb2JqZWN0LlxuXG4gICAgICAgICAgICAgICAgT2JqZWN0LmtleXModmFsdWUpLmZvckVhY2goZnVuY3Rpb24oaykge1xuICAgICAgICAgICAgICAgICAgICB2YXIgdiA9IHN0cihrLCB2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgIGlmICh2KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJ0aWFsLnB1c2gocXVvdGUoaykgKyAoZ2FwID8gJzogJyA6ICc6JykgKyB2KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuXG4vLyBKb2luIGFsbCBvZiB0aGUgbWVtYmVyIHRleHRzIHRvZ2V0aGVyLCBzZXBhcmF0ZWQgd2l0aCBjb21tYXMsXG4vLyBhbmQgd3JhcCB0aGVtIGluIGJyYWNlcy5cblxuICAgICAgICAgICAgdiA9IHBhcnRpYWwubGVuZ3RoID09PSAwXG4gICAgICAgICAgICAgICAgPyAne30nXG4gICAgICAgICAgICAgICAgOiBnYXBcbiAgICAgICAgICAgICAgICA/ICd7XFxuJyArIGdhcCArIHBhcnRpYWwuam9pbignLFxcbicgKyBnYXApICsgJ1xcbicgKyBtaW5kICsgJ30nXG4gICAgICAgICAgICAgICAgOiAneycgKyBwYXJ0aWFsLmpvaW4oJywnKSArICd9JztcbiAgICAgICAgICAgIGdhcCA9IG1pbmQ7XG4gICAgICAgICAgICByZXR1cm4gdjtcbiAgICAgICAgfVxuICAgIH1cblxuLy8gSWYgdGhlIEpTT04gb2JqZWN0IGRvZXMgbm90IHlldCBoYXZlIGEgc3RyaW5naWZ5IG1ldGhvZCwgZ2l2ZSBpdCBvbmUuXG5cbiAgICBpZiAodHlwZW9mIEpTT04uc3RyaW5naWZ5ICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIEpTT04uc3RyaW5naWZ5ID0gZnVuY3Rpb24gKHZhbHVlLCByZXBsYWNlciwgc3BhY2UpIHtcblxuLy8gVGhlIHN0cmluZ2lmeSBtZXRob2QgdGFrZXMgYSB2YWx1ZSBhbmQgYW4gb3B0aW9uYWwgcmVwbGFjZXIsIGFuZCBhbiBvcHRpb25hbFxuLy8gc3BhY2UgcGFyYW1ldGVyLCBhbmQgcmV0dXJucyBhIEpTT04gdGV4dC4gVGhlIHJlcGxhY2VyIGNhbiBiZSBhIGZ1bmN0aW9uXG4vLyB0aGF0IGNhbiByZXBsYWNlIHZhbHVlcywgb3IgYW4gYXJyYXkgb2Ygc3RyaW5ncyB0aGF0IHdpbGwgc2VsZWN0IHRoZSBrZXlzLlxuLy8gQSBkZWZhdWx0IHJlcGxhY2VyIG1ldGhvZCBjYW4gYmUgcHJvdmlkZWQuIFVzZSBvZiB0aGUgc3BhY2UgcGFyYW1ldGVyIGNhblxuLy8gcHJvZHVjZSB0ZXh0IHRoYXQgaXMgbW9yZSBlYXNpbHkgcmVhZGFibGUuXG5cbiAgICAgICAgICAgIHZhciBpO1xuICAgICAgICAgICAgZ2FwID0gJyc7XG4gICAgICAgICAgICBpbmRlbnQgPSAnJztcblxuLy8gSWYgdGhlIHNwYWNlIHBhcmFtZXRlciBpcyBhIG51bWJlciwgbWFrZSBhbiBpbmRlbnQgc3RyaW5nIGNvbnRhaW5pbmcgdGhhdFxuLy8gbWFueSBzcGFjZXMuXG5cbiAgICAgICAgICAgIGlmICh0eXBlb2Ygc3BhY2UgPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IHNwYWNlOyBpICs9IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgaW5kZW50ICs9ICcgJztcbiAgICAgICAgICAgICAgICB9XG5cbi8vIElmIHRoZSBzcGFjZSBwYXJhbWV0ZXIgaXMgYSBzdHJpbmcsIGl0IHdpbGwgYmUgdXNlZCBhcyB0aGUgaW5kZW50IHN0cmluZy5cblxuICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlb2Ygc3BhY2UgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgaW5kZW50ID0gc3BhY2U7XG4gICAgICAgICAgICB9XG5cbi8vIElmIHRoZXJlIGlzIGEgcmVwbGFjZXIsIGl0IG11c3QgYmUgYSBmdW5jdGlvbiBvciBhbiBhcnJheS5cbi8vIE90aGVyd2lzZSwgdGhyb3cgYW4gZXJyb3IuXG5cbiAgICAgICAgICAgIHJlcCA9IHJlcGxhY2VyO1xuICAgICAgICAgICAgaWYgKHJlcGxhY2VyICYmIHR5cGVvZiByZXBsYWNlciAhPT0gJ2Z1bmN0aW9uJyAmJlxuICAgICAgICAgICAgICAgICAgICAodHlwZW9mIHJlcGxhY2VyICE9PSAnb2JqZWN0JyB8fFxuICAgICAgICAgICAgICAgICAgICB0eXBlb2YgcmVwbGFjZXIubGVuZ3RoICE9PSAnbnVtYmVyJykpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0pTT04uc3RyaW5naWZ5Jyk7XG4gICAgICAgICAgICB9XG5cbi8vIE1ha2UgYSBmYWtlIHJvb3Qgb2JqZWN0IGNvbnRhaW5pbmcgb3VyIHZhbHVlIHVuZGVyIHRoZSBrZXkgb2YgJycuXG4vLyBSZXR1cm4gdGhlIHJlc3VsdCBvZiBzdHJpbmdpZnlpbmcgdGhlIHZhbHVlLlxuXG4gICAgICAgICAgICByZXR1cm4gc3RyKCcnLCB7Jyc6IHZhbHVlfSk7XG4gICAgICAgIH07XG4gICAgfVxufSgpKTtcbiIsIihmdW5jdGlvbiAobmFtZSwgY29udGV4dCwgZGVmaW5pdGlvbikge1xuICBpZiAodHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCcgJiYgbW9kdWxlLmV4cG9ydHMpIG1vZHVsZS5leHBvcnRzID0gZGVmaW5pdGlvbigpO1xuICBlbHNlIGlmICh0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQpIGRlZmluZShkZWZpbml0aW9uKTtcbiAgZWxzZSBjb250ZXh0W25hbWVdID0gZGVmaW5pdGlvbigpO1xufSkoJ3VybGpvaW4nLCB0aGlzLCBmdW5jdGlvbiAoKSB7XG5cbiAgZnVuY3Rpb24gbm9ybWFsaXplIChzdHJBcnJheSkge1xuICAgIHZhciByZXN1bHRBcnJheSA9IFtdO1xuICAgIGlmIChzdHJBcnJheS5sZW5ndGggPT09IDApIHsgcmV0dXJuICcnOyB9XG5cbiAgICBpZiAodHlwZW9mIHN0ckFycmF5WzBdICE9PSAnc3RyaW5nJykge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVXJsIG11c3QgYmUgYSBzdHJpbmcuIFJlY2VpdmVkICcgKyBzdHJBcnJheVswXSk7XG4gICAgfVxuXG4gICAgLy8gSWYgdGhlIGZpcnN0IHBhcnQgaXMgYSBwbGFpbiBwcm90b2NvbCwgd2UgY29tYmluZSBpdCB3aXRoIHRoZSBuZXh0IHBhcnQuXG4gICAgaWYgKHN0ckFycmF5WzBdLm1hdGNoKC9eW14vOl0rOlxcLyokLykgJiYgc3RyQXJyYXkubGVuZ3RoID4gMSkge1xuICAgICAgdmFyIGZpcnN0ID0gc3RyQXJyYXkuc2hpZnQoKTtcbiAgICAgIHN0ckFycmF5WzBdID0gZmlyc3QgKyBzdHJBcnJheVswXTtcbiAgICB9XG5cbiAgICAvLyBUaGVyZSBtdXN0IGJlIHR3byBvciB0aHJlZSBzbGFzaGVzIGluIHRoZSBmaWxlIHByb3RvY29sLCB0d28gc2xhc2hlcyBpbiBhbnl0aGluZyBlbHNlLlxuICAgIGlmIChzdHJBcnJheVswXS5tYXRjaCgvXmZpbGU6XFwvXFwvXFwvLykpIHtcbiAgICAgIHN0ckFycmF5WzBdID0gc3RyQXJyYXlbMF0ucmVwbGFjZSgvXihbXi86XSspOlxcLyovLCAnJDE6Ly8vJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHN0ckFycmF5WzBdID0gc3RyQXJyYXlbMF0ucmVwbGFjZSgvXihbXi86XSspOlxcLyovLCAnJDE6Ly8nKTtcbiAgICB9XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHN0ckFycmF5Lmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgY29tcG9uZW50ID0gc3RyQXJyYXlbaV07XG5cbiAgICAgIGlmICh0eXBlb2YgY29tcG9uZW50ICE9PSAnc3RyaW5nJykge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdVcmwgbXVzdCBiZSBhIHN0cmluZy4gUmVjZWl2ZWQgJyArIGNvbXBvbmVudCk7XG4gICAgICB9XG5cbiAgICAgIGlmIChjb21wb25lbnQgPT09ICcnKSB7IGNvbnRpbnVlOyB9XG5cbiAgICAgIGlmIChpID4gMCkge1xuICAgICAgICAvLyBSZW1vdmluZyB0aGUgc3RhcnRpbmcgc2xhc2hlcyBmb3IgZWFjaCBjb21wb25lbnQgYnV0IHRoZSBmaXJzdC5cbiAgICAgICAgY29tcG9uZW50ID0gY29tcG9uZW50LnJlcGxhY2UoL15bXFwvXSsvLCAnJyk7XG4gICAgICB9XG4gICAgICBpZiAoaSA8IHN0ckFycmF5Lmxlbmd0aCAtIDEpIHtcbiAgICAgICAgLy8gUmVtb3ZpbmcgdGhlIGVuZGluZyBzbGFzaGVzIGZvciBlYWNoIGNvbXBvbmVudCBidXQgdGhlIGxhc3QuXG4gICAgICAgIGNvbXBvbmVudCA9IGNvbXBvbmVudC5yZXBsYWNlKC9bXFwvXSskLywgJycpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gRm9yIHRoZSBsYXN0IGNvbXBvbmVudCB3ZSB3aWxsIGNvbWJpbmUgbXVsdGlwbGUgc2xhc2hlcyB0byBhIHNpbmdsZSBvbmUuXG4gICAgICAgIGNvbXBvbmVudCA9IGNvbXBvbmVudC5yZXBsYWNlKC9bXFwvXSskLywgJy8nKTtcbiAgICAgIH1cblxuICAgICAgcmVzdWx0QXJyYXkucHVzaChjb21wb25lbnQpO1xuXG4gICAgfVxuXG4gICAgdmFyIHN0ciA9IHJlc3VsdEFycmF5LmpvaW4oJy8nKTtcbiAgICAvLyBFYWNoIGlucHV0IGNvbXBvbmVudCBpcyBub3cgc2VwYXJhdGVkIGJ5IGEgc2luZ2xlIHNsYXNoIGV4Y2VwdCB0aGUgcG9zc2libGUgZmlyc3QgcGxhaW4gcHJvdG9jb2wgcGFydC5cblxuICAgIC8vIHJlbW92ZSB0cmFpbGluZyBzbGFzaCBiZWZvcmUgcGFyYW1ldGVycyBvciBoYXNoXG4gICAgc3RyID0gc3RyLnJlcGxhY2UoL1xcLyhcXD98JnwjW14hXSkvZywgJyQxJyk7XG5cbiAgICAvLyByZXBsYWNlID8gaW4gcGFyYW1ldGVycyB3aXRoICZcbiAgICB2YXIgcGFydHMgPSBzdHIuc3BsaXQoJz8nKTtcbiAgICBzdHIgPSBwYXJ0cy5zaGlmdCgpICsgKHBhcnRzLmxlbmd0aCA+IDAgPyAnPyc6ICcnKSArIHBhcnRzLmpvaW4oJyYnKTtcblxuICAgIHJldHVybiBzdHI7XG4gIH1cblxuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIHZhciBpbnB1dDtcblxuICAgIGlmICh0eXBlb2YgYXJndW1lbnRzWzBdID09PSAnb2JqZWN0Jykge1xuICAgICAgaW5wdXQgPSBhcmd1bWVudHNbMF07XG4gICAgfSBlbHNlIHtcbiAgICAgIGlucHV0ID0gW10uc2xpY2UuY2FsbChhcmd1bWVudHMpO1xuICAgIH1cblxuICAgIHJldHVybiBub3JtYWxpemUoaW5wdXQpO1xuICB9O1xuXG59KTtcbiIsIi8vIEF4aW9zIHYxLjYuMiBDb3B5cmlnaHQgKGMpIDIwMjMgTWF0dCBaYWJyaXNraWUgYW5kIGNvbnRyaWJ1dG9yc1xuJ3VzZSBzdHJpY3QnO1xuXG5mdW5jdGlvbiBiaW5kKGZuLCB0aGlzQXJnKSB7XG4gIHJldHVybiBmdW5jdGlvbiB3cmFwKCkge1xuICAgIHJldHVybiBmbi5hcHBseSh0aGlzQXJnLCBhcmd1bWVudHMpO1xuICB9O1xufVxuXG4vLyB1dGlscyBpcyBhIGxpYnJhcnkgb2YgZ2VuZXJpYyBoZWxwZXIgZnVuY3Rpb25zIG5vbi1zcGVjaWZpYyB0byBheGlvc1xuXG5jb25zdCB7dG9TdHJpbmd9ID0gT2JqZWN0LnByb3RvdHlwZTtcbmNvbnN0IHtnZXRQcm90b3R5cGVPZn0gPSBPYmplY3Q7XG5cbmNvbnN0IGtpbmRPZiA9IChjYWNoZSA9PiB0aGluZyA9PiB7XG4gICAgY29uc3Qgc3RyID0gdG9TdHJpbmcuY2FsbCh0aGluZyk7XG4gICAgcmV0dXJuIGNhY2hlW3N0cl0gfHwgKGNhY2hlW3N0cl0gPSBzdHIuc2xpY2UoOCwgLTEpLnRvTG93ZXJDYXNlKCkpO1xufSkoT2JqZWN0LmNyZWF0ZShudWxsKSk7XG5cbmNvbnN0IGtpbmRPZlRlc3QgPSAodHlwZSkgPT4ge1xuICB0eXBlID0gdHlwZS50b0xvd2VyQ2FzZSgpO1xuICByZXR1cm4gKHRoaW5nKSA9PiBraW5kT2YodGhpbmcpID09PSB0eXBlXG59O1xuXG5jb25zdCB0eXBlT2ZUZXN0ID0gdHlwZSA9PiB0aGluZyA9PiB0eXBlb2YgdGhpbmcgPT09IHR5cGU7XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYW4gQXJyYXlcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYW4gQXJyYXksIG90aGVyd2lzZSBmYWxzZVxuICovXG5jb25zdCB7aXNBcnJheX0gPSBBcnJheTtcblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyB1bmRlZmluZWRcbiAqXG4gKiBAcGFyYW0geyp9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHRoZSB2YWx1ZSBpcyB1bmRlZmluZWQsIG90aGVyd2lzZSBmYWxzZVxuICovXG5jb25zdCBpc1VuZGVmaW5lZCA9IHR5cGVPZlRlc3QoJ3VuZGVmaW5lZCcpO1xuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgQnVmZmVyXG4gKlxuICogQHBhcmFtIHsqfSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIEJ1ZmZlciwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzQnVmZmVyKHZhbCkge1xuICByZXR1cm4gdmFsICE9PSBudWxsICYmICFpc1VuZGVmaW5lZCh2YWwpICYmIHZhbC5jb25zdHJ1Y3RvciAhPT0gbnVsbCAmJiAhaXNVbmRlZmluZWQodmFsLmNvbnN0cnVjdG9yKVxuICAgICYmIGlzRnVuY3Rpb24odmFsLmNvbnN0cnVjdG9yLmlzQnVmZmVyKSAmJiB2YWwuY29uc3RydWN0b3IuaXNCdWZmZXIodmFsKTtcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhbiBBcnJheUJ1ZmZlclxuICpcbiAqIEBwYXJhbSB7Kn0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYW4gQXJyYXlCdWZmZXIsIG90aGVyd2lzZSBmYWxzZVxuICovXG5jb25zdCBpc0FycmF5QnVmZmVyID0ga2luZE9mVGVzdCgnQXJyYXlCdWZmZXInKTtcblxuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgdmlldyBvbiBhbiBBcnJheUJ1ZmZlclxuICpcbiAqIEBwYXJhbSB7Kn0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSB2aWV3IG9uIGFuIEFycmF5QnVmZmVyLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNBcnJheUJ1ZmZlclZpZXcodmFsKSB7XG4gIGxldCByZXN1bHQ7XG4gIGlmICgodHlwZW9mIEFycmF5QnVmZmVyICE9PSAndW5kZWZpbmVkJykgJiYgKEFycmF5QnVmZmVyLmlzVmlldykpIHtcbiAgICByZXN1bHQgPSBBcnJheUJ1ZmZlci5pc1ZpZXcodmFsKTtcbiAgfSBlbHNlIHtcbiAgICByZXN1bHQgPSAodmFsKSAmJiAodmFsLmJ1ZmZlcikgJiYgKGlzQXJyYXlCdWZmZXIodmFsLmJ1ZmZlcikpO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBTdHJpbmdcbiAqXG4gKiBAcGFyYW0geyp9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgU3RyaW5nLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuY29uc3QgaXNTdHJpbmcgPSB0eXBlT2ZUZXN0KCdzdHJpbmcnKTtcblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIEZ1bmN0aW9uXG4gKlxuICogQHBhcmFtIHsqfSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgRnVuY3Rpb24sIG90aGVyd2lzZSBmYWxzZVxuICovXG5jb25zdCBpc0Z1bmN0aW9uID0gdHlwZU9mVGVzdCgnZnVuY3Rpb24nKTtcblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIE51bWJlclxuICpcbiAqIEBwYXJhbSB7Kn0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBOdW1iZXIsIG90aGVyd2lzZSBmYWxzZVxuICovXG5jb25zdCBpc051bWJlciA9IHR5cGVPZlRlc3QoJ251bWJlcicpO1xuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGFuIE9iamVjdFxuICpcbiAqIEBwYXJhbSB7Kn0gdGhpbmcgVGhlIHZhbHVlIHRvIHRlc3RcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhbiBPYmplY3QsIG90aGVyd2lzZSBmYWxzZVxuICovXG5jb25zdCBpc09iamVjdCA9ICh0aGluZykgPT4gdGhpbmcgIT09IG51bGwgJiYgdHlwZW9mIHRoaW5nID09PSAnb2JqZWN0JztcblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIEJvb2xlYW5cbiAqXG4gKiBAcGFyYW0geyp9IHRoaW5nIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIEJvb2xlYW4sIG90aGVyd2lzZSBmYWxzZVxuICovXG5jb25zdCBpc0Jvb2xlYW4gPSB0aGluZyA9PiB0aGluZyA9PT0gdHJ1ZSB8fCB0aGluZyA9PT0gZmFsc2U7XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBwbGFpbiBPYmplY3RcbiAqXG4gKiBAcGFyYW0geyp9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgcGxhaW4gT2JqZWN0LCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuY29uc3QgaXNQbGFpbk9iamVjdCA9ICh2YWwpID0+IHtcbiAgaWYgKGtpbmRPZih2YWwpICE9PSAnb2JqZWN0Jykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGNvbnN0IHByb3RvdHlwZSA9IGdldFByb3RvdHlwZU9mKHZhbCk7XG4gIHJldHVybiAocHJvdG90eXBlID09PSBudWxsIHx8IHByb3RvdHlwZSA9PT0gT2JqZWN0LnByb3RvdHlwZSB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2YocHJvdG90eXBlKSA9PT0gbnVsbCkgJiYgIShTeW1ib2wudG9TdHJpbmdUYWcgaW4gdmFsKSAmJiAhKFN5bWJvbC5pdGVyYXRvciBpbiB2YWwpO1xufTtcblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIERhdGVcbiAqXG4gKiBAcGFyYW0geyp9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgRGF0ZSwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmNvbnN0IGlzRGF0ZSA9IGtpbmRPZlRlc3QoJ0RhdGUnKTtcblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIEZpbGVcbiAqXG4gKiBAcGFyYW0geyp9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgRmlsZSwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmNvbnN0IGlzRmlsZSA9IGtpbmRPZlRlc3QoJ0ZpbGUnKTtcblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIEJsb2JcbiAqXG4gKiBAcGFyYW0geyp9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgQmxvYiwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmNvbnN0IGlzQmxvYiA9IGtpbmRPZlRlc3QoJ0Jsb2InKTtcblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIEZpbGVMaXN0XG4gKlxuICogQHBhcmFtIHsqfSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIEZpbGUsIG90aGVyd2lzZSBmYWxzZVxuICovXG5jb25zdCBpc0ZpbGVMaXN0ID0ga2luZE9mVGVzdCgnRmlsZUxpc3QnKTtcblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIFN0cmVhbVxuICpcbiAqIEBwYXJhbSB7Kn0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBTdHJlYW0sIG90aGVyd2lzZSBmYWxzZVxuICovXG5jb25zdCBpc1N0cmVhbSA9ICh2YWwpID0+IGlzT2JqZWN0KHZhbCkgJiYgaXNGdW5jdGlvbih2YWwucGlwZSk7XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBGb3JtRGF0YVxuICpcbiAqIEBwYXJhbSB7Kn0gdGhpbmcgVGhlIHZhbHVlIHRvIHRlc3RcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhbiBGb3JtRGF0YSwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmNvbnN0IGlzRm9ybURhdGEgPSAodGhpbmcpID0+IHtcbiAgbGV0IGtpbmQ7XG4gIHJldHVybiB0aGluZyAmJiAoXG4gICAgKHR5cGVvZiBGb3JtRGF0YSA9PT0gJ2Z1bmN0aW9uJyAmJiB0aGluZyBpbnN0YW5jZW9mIEZvcm1EYXRhKSB8fCAoXG4gICAgICBpc0Z1bmN0aW9uKHRoaW5nLmFwcGVuZCkgJiYgKFxuICAgICAgICAoa2luZCA9IGtpbmRPZih0aGluZykpID09PSAnZm9ybWRhdGEnIHx8XG4gICAgICAgIC8vIGRldGVjdCBmb3JtLWRhdGEgaW5zdGFuY2VcbiAgICAgICAgKGtpbmQgPT09ICdvYmplY3QnICYmIGlzRnVuY3Rpb24odGhpbmcudG9TdHJpbmcpICYmIHRoaW5nLnRvU3RyaW5nKCkgPT09ICdbb2JqZWN0IEZvcm1EYXRhXScpXG4gICAgICApXG4gICAgKVxuICApXG59O1xuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgVVJMU2VhcmNoUGFyYW1zIG9iamVjdFxuICpcbiAqIEBwYXJhbSB7Kn0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBVUkxTZWFyY2hQYXJhbXMgb2JqZWN0LCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuY29uc3QgaXNVUkxTZWFyY2hQYXJhbXMgPSBraW5kT2ZUZXN0KCdVUkxTZWFyY2hQYXJhbXMnKTtcblxuLyoqXG4gKiBUcmltIGV4Y2VzcyB3aGl0ZXNwYWNlIG9mZiB0aGUgYmVnaW5uaW5nIGFuZCBlbmQgb2YgYSBzdHJpbmdcbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gc3RyIFRoZSBTdHJpbmcgdG8gdHJpbVxuICpcbiAqIEByZXR1cm5zIHtTdHJpbmd9IFRoZSBTdHJpbmcgZnJlZWQgb2YgZXhjZXNzIHdoaXRlc3BhY2VcbiAqL1xuY29uc3QgdHJpbSA9IChzdHIpID0+IHN0ci50cmltID9cbiAgc3RyLnRyaW0oKSA6IHN0ci5yZXBsYWNlKC9eW1xcc1xcdUZFRkZcXHhBMF0rfFtcXHNcXHVGRUZGXFx4QTBdKyQvZywgJycpO1xuXG4vKipcbiAqIEl0ZXJhdGUgb3ZlciBhbiBBcnJheSBvciBhbiBPYmplY3QgaW52b2tpbmcgYSBmdW5jdGlvbiBmb3IgZWFjaCBpdGVtLlxuICpcbiAqIElmIGBvYmpgIGlzIGFuIEFycmF5IGNhbGxiYWNrIHdpbGwgYmUgY2FsbGVkIHBhc3NpbmdcbiAqIHRoZSB2YWx1ZSwgaW5kZXgsIGFuZCBjb21wbGV0ZSBhcnJheSBmb3IgZWFjaCBpdGVtLlxuICpcbiAqIElmICdvYmonIGlzIGFuIE9iamVjdCBjYWxsYmFjayB3aWxsIGJlIGNhbGxlZCBwYXNzaW5nXG4gKiB0aGUgdmFsdWUsIGtleSwgYW5kIGNvbXBsZXRlIG9iamVjdCBmb3IgZWFjaCBwcm9wZXJ0eS5cbiAqXG4gKiBAcGFyYW0ge09iamVjdHxBcnJheX0gb2JqIFRoZSBvYmplY3QgdG8gaXRlcmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZm4gVGhlIGNhbGxiYWNrIHRvIGludm9rZSBmb3IgZWFjaCBpdGVtXG4gKlxuICogQHBhcmFtIHtCb29sZWFufSBbYWxsT3duS2V5cyA9IGZhbHNlXVxuICogQHJldHVybnMge2FueX1cbiAqL1xuZnVuY3Rpb24gZm9yRWFjaChvYmosIGZuLCB7YWxsT3duS2V5cyA9IGZhbHNlfSA9IHt9KSB7XG4gIC8vIERvbid0IGJvdGhlciBpZiBubyB2YWx1ZSBwcm92aWRlZFxuICBpZiAob2JqID09PSBudWxsIHx8IHR5cGVvZiBvYmogPT09ICd1bmRlZmluZWQnKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgbGV0IGk7XG4gIGxldCBsO1xuXG4gIC8vIEZvcmNlIGFuIGFycmF5IGlmIG5vdCBhbHJlYWR5IHNvbWV0aGluZyBpdGVyYWJsZVxuICBpZiAodHlwZW9mIG9iaiAhPT0gJ29iamVjdCcpIHtcbiAgICAvKmVzbGludCBuby1wYXJhbS1yZWFzc2lnbjowKi9cbiAgICBvYmogPSBbb2JqXTtcbiAgfVxuXG4gIGlmIChpc0FycmF5KG9iaikpIHtcbiAgICAvLyBJdGVyYXRlIG92ZXIgYXJyYXkgdmFsdWVzXG4gICAgZm9yIChpID0gMCwgbCA9IG9iai5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgIGZuLmNhbGwobnVsbCwgb2JqW2ldLCBpLCBvYmopO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICAvLyBJdGVyYXRlIG92ZXIgb2JqZWN0IGtleXNcbiAgICBjb25zdCBrZXlzID0gYWxsT3duS2V5cyA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKG9iaikgOiBPYmplY3Qua2V5cyhvYmopO1xuICAgIGNvbnN0IGxlbiA9IGtleXMubGVuZ3RoO1xuICAgIGxldCBrZXk7XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgIGtleSA9IGtleXNbaV07XG4gICAgICBmbi5jYWxsKG51bGwsIG9ialtrZXldLCBrZXksIG9iaik7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGZpbmRLZXkob2JqLCBrZXkpIHtcbiAga2V5ID0ga2V5LnRvTG93ZXJDYXNlKCk7XG4gIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhvYmopO1xuICBsZXQgaSA9IGtleXMubGVuZ3RoO1xuICBsZXQgX2tleTtcbiAgd2hpbGUgKGktLSA+IDApIHtcbiAgICBfa2V5ID0ga2V5c1tpXTtcbiAgICBpZiAoa2V5ID09PSBfa2V5LnRvTG93ZXJDYXNlKCkpIHtcbiAgICAgIHJldHVybiBfa2V5O1xuICAgIH1cbiAgfVxuICByZXR1cm4gbnVsbDtcbn1cblxuY29uc3QgX2dsb2JhbCA9ICgoKSA9PiB7XG4gIC8qZXNsaW50IG5vLXVuZGVmOjAqL1xuICBpZiAodHlwZW9mIGdsb2JhbFRoaXMgIT09IFwidW5kZWZpbmVkXCIpIHJldHVybiBnbG9iYWxUaGlzO1xuICByZXR1cm4gdHlwZW9mIHNlbGYgIT09IFwidW5kZWZpbmVkXCIgPyBzZWxmIDogKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnID8gd2luZG93IDogZ2xvYmFsKVxufSkoKTtcblxuY29uc3QgaXNDb250ZXh0RGVmaW5lZCA9IChjb250ZXh0KSA9PiAhaXNVbmRlZmluZWQoY29udGV4dCkgJiYgY29udGV4dCAhPT0gX2dsb2JhbDtcblxuLyoqXG4gKiBBY2NlcHRzIHZhcmFyZ3MgZXhwZWN0aW5nIGVhY2ggYXJndW1lbnQgdG8gYmUgYW4gb2JqZWN0LCB0aGVuXG4gKiBpbW11dGFibHkgbWVyZ2VzIHRoZSBwcm9wZXJ0aWVzIG9mIGVhY2ggb2JqZWN0IGFuZCByZXR1cm5zIHJlc3VsdC5cbiAqXG4gKiBXaGVuIG11bHRpcGxlIG9iamVjdHMgY29udGFpbiB0aGUgc2FtZSBrZXkgdGhlIGxhdGVyIG9iamVjdCBpblxuICogdGhlIGFyZ3VtZW50cyBsaXN0IHdpbGwgdGFrZSBwcmVjZWRlbmNlLlxuICpcbiAqIEV4YW1wbGU6XG4gKlxuICogYGBganNcbiAqIHZhciByZXN1bHQgPSBtZXJnZSh7Zm9vOiAxMjN9LCB7Zm9vOiA0NTZ9KTtcbiAqIGNvbnNvbGUubG9nKHJlc3VsdC5mb28pOyAvLyBvdXRwdXRzIDQ1NlxuICogYGBgXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IG9iajEgT2JqZWN0IHRvIG1lcmdlXG4gKlxuICogQHJldHVybnMge09iamVjdH0gUmVzdWx0IG9mIGFsbCBtZXJnZSBwcm9wZXJ0aWVzXG4gKi9cbmZ1bmN0aW9uIG1lcmdlKC8qIG9iajEsIG9iajIsIG9iajMsIC4uLiAqLykge1xuICBjb25zdCB7Y2FzZWxlc3N9ID0gaXNDb250ZXh0RGVmaW5lZCh0aGlzKSAmJiB0aGlzIHx8IHt9O1xuICBjb25zdCByZXN1bHQgPSB7fTtcbiAgY29uc3QgYXNzaWduVmFsdWUgPSAodmFsLCBrZXkpID0+IHtcbiAgICBjb25zdCB0YXJnZXRLZXkgPSBjYXNlbGVzcyAmJiBmaW5kS2V5KHJlc3VsdCwga2V5KSB8fCBrZXk7XG4gICAgaWYgKGlzUGxhaW5PYmplY3QocmVzdWx0W3RhcmdldEtleV0pICYmIGlzUGxhaW5PYmplY3QodmFsKSkge1xuICAgICAgcmVzdWx0W3RhcmdldEtleV0gPSBtZXJnZShyZXN1bHRbdGFyZ2V0S2V5XSwgdmFsKTtcbiAgICB9IGVsc2UgaWYgKGlzUGxhaW5PYmplY3QodmFsKSkge1xuICAgICAgcmVzdWx0W3RhcmdldEtleV0gPSBtZXJnZSh7fSwgdmFsKTtcbiAgICB9IGVsc2UgaWYgKGlzQXJyYXkodmFsKSkge1xuICAgICAgcmVzdWx0W3RhcmdldEtleV0gPSB2YWwuc2xpY2UoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVzdWx0W3RhcmdldEtleV0gPSB2YWw7XG4gICAgfVxuICB9O1xuXG4gIGZvciAobGV0IGkgPSAwLCBsID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgIGFyZ3VtZW50c1tpXSAmJiBmb3JFYWNoKGFyZ3VtZW50c1tpXSwgYXNzaWduVmFsdWUpO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbi8qKlxuICogRXh0ZW5kcyBvYmplY3QgYSBieSBtdXRhYmx5IGFkZGluZyB0byBpdCB0aGUgcHJvcGVydGllcyBvZiBvYmplY3QgYi5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gYSBUaGUgb2JqZWN0IHRvIGJlIGV4dGVuZGVkXG4gKiBAcGFyYW0ge09iamVjdH0gYiBUaGUgb2JqZWN0IHRvIGNvcHkgcHJvcGVydGllcyBmcm9tXG4gKiBAcGFyYW0ge09iamVjdH0gdGhpc0FyZyBUaGUgb2JqZWN0IHRvIGJpbmQgZnVuY3Rpb24gdG9cbiAqXG4gKiBAcGFyYW0ge0Jvb2xlYW59IFthbGxPd25LZXlzXVxuICogQHJldHVybnMge09iamVjdH0gVGhlIHJlc3VsdGluZyB2YWx1ZSBvZiBvYmplY3QgYVxuICovXG5jb25zdCBleHRlbmQgPSAoYSwgYiwgdGhpc0FyZywge2FsbE93bktleXN9PSB7fSkgPT4ge1xuICBmb3JFYWNoKGIsICh2YWwsIGtleSkgPT4ge1xuICAgIGlmICh0aGlzQXJnICYmIGlzRnVuY3Rpb24odmFsKSkge1xuICAgICAgYVtrZXldID0gYmluZCh2YWwsIHRoaXNBcmcpO1xuICAgIH0gZWxzZSB7XG4gICAgICBhW2tleV0gPSB2YWw7XG4gICAgfVxuICB9LCB7YWxsT3duS2V5c30pO1xuICByZXR1cm4gYTtcbn07XG5cbi8qKlxuICogUmVtb3ZlIGJ5dGUgb3JkZXIgbWFya2VyLiBUaGlzIGNhdGNoZXMgRUYgQkIgQkYgKHRoZSBVVEYtOCBCT00pXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGNvbnRlbnQgd2l0aCBCT01cbiAqXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBjb250ZW50IHZhbHVlIHdpdGhvdXQgQk9NXG4gKi9cbmNvbnN0IHN0cmlwQk9NID0gKGNvbnRlbnQpID0+IHtcbiAgaWYgKGNvbnRlbnQuY2hhckNvZGVBdCgwKSA9PT0gMHhGRUZGKSB7XG4gICAgY29udGVudCA9IGNvbnRlbnQuc2xpY2UoMSk7XG4gIH1cbiAgcmV0dXJuIGNvbnRlbnQ7XG59O1xuXG4vKipcbiAqIEluaGVyaXQgdGhlIHByb3RvdHlwZSBtZXRob2RzIGZyb20gb25lIGNvbnN0cnVjdG9yIGludG8gYW5vdGhlclxuICogQHBhcmFtIHtmdW5jdGlvbn0gY29uc3RydWN0b3JcbiAqIEBwYXJhbSB7ZnVuY3Rpb259IHN1cGVyQ29uc3RydWN0b3JcbiAqIEBwYXJhbSB7b2JqZWN0fSBbcHJvcHNdXG4gKiBAcGFyYW0ge29iamVjdH0gW2Rlc2NyaXB0b3JzXVxuICpcbiAqIEByZXR1cm5zIHt2b2lkfVxuICovXG5jb25zdCBpbmhlcml0cyA9IChjb25zdHJ1Y3Rvciwgc3VwZXJDb25zdHJ1Y3RvciwgcHJvcHMsIGRlc2NyaXB0b3JzKSA9PiB7XG4gIGNvbnN0cnVjdG9yLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIGRlc2NyaXB0b3JzKTtcbiAgY29uc3RydWN0b3IucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gY29uc3RydWN0b3I7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShjb25zdHJ1Y3RvciwgJ3N1cGVyJywge1xuICAgIHZhbHVlOiBzdXBlckNvbnN0cnVjdG9yLnByb3RvdHlwZVxuICB9KTtcbiAgcHJvcHMgJiYgT2JqZWN0LmFzc2lnbihjb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3BzKTtcbn07XG5cbi8qKlxuICogUmVzb2x2ZSBvYmplY3Qgd2l0aCBkZWVwIHByb3RvdHlwZSBjaGFpbiB0byBhIGZsYXQgb2JqZWN0XG4gKiBAcGFyYW0ge09iamVjdH0gc291cmNlT2JqIHNvdXJjZSBvYmplY3RcbiAqIEBwYXJhbSB7T2JqZWN0fSBbZGVzdE9ial1cbiAqIEBwYXJhbSB7RnVuY3Rpb258Qm9vbGVhbn0gW2ZpbHRlcl1cbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtwcm9wRmlsdGVyXVxuICpcbiAqIEByZXR1cm5zIHtPYmplY3R9XG4gKi9cbmNvbnN0IHRvRmxhdE9iamVjdCA9IChzb3VyY2VPYmosIGRlc3RPYmosIGZpbHRlciwgcHJvcEZpbHRlcikgPT4ge1xuICBsZXQgcHJvcHM7XG4gIGxldCBpO1xuICBsZXQgcHJvcDtcbiAgY29uc3QgbWVyZ2VkID0ge307XG5cbiAgZGVzdE9iaiA9IGRlc3RPYmogfHwge307XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1lcS1udWxsLGVxZXFlcVxuICBpZiAoc291cmNlT2JqID09IG51bGwpIHJldHVybiBkZXN0T2JqO1xuXG4gIGRvIHtcbiAgICBwcm9wcyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHNvdXJjZU9iaik7XG4gICAgaSA9IHByb3BzLmxlbmd0aDtcbiAgICB3aGlsZSAoaS0tID4gMCkge1xuICAgICAgcHJvcCA9IHByb3BzW2ldO1xuICAgICAgaWYgKCghcHJvcEZpbHRlciB8fCBwcm9wRmlsdGVyKHByb3AsIHNvdXJjZU9iaiwgZGVzdE9iaikpICYmICFtZXJnZWRbcHJvcF0pIHtcbiAgICAgICAgZGVzdE9ialtwcm9wXSA9IHNvdXJjZU9ialtwcm9wXTtcbiAgICAgICAgbWVyZ2VkW3Byb3BdID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gICAgc291cmNlT2JqID0gZmlsdGVyICE9PSBmYWxzZSAmJiBnZXRQcm90b3R5cGVPZihzb3VyY2VPYmopO1xuICB9IHdoaWxlIChzb3VyY2VPYmogJiYgKCFmaWx0ZXIgfHwgZmlsdGVyKHNvdXJjZU9iaiwgZGVzdE9iaikpICYmIHNvdXJjZU9iaiAhPT0gT2JqZWN0LnByb3RvdHlwZSk7XG5cbiAgcmV0dXJuIGRlc3RPYmo7XG59O1xuXG4vKipcbiAqIERldGVybWluZXMgd2hldGhlciBhIHN0cmluZyBlbmRzIHdpdGggdGhlIGNoYXJhY3RlcnMgb2YgYSBzcGVjaWZpZWQgc3RyaW5nXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IHN0clxuICogQHBhcmFtIHtTdHJpbmd9IHNlYXJjaFN0cmluZ1xuICogQHBhcmFtIHtOdW1iZXJ9IFtwb3NpdGlvbj0gMF1cbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqL1xuY29uc3QgZW5kc1dpdGggPSAoc3RyLCBzZWFyY2hTdHJpbmcsIHBvc2l0aW9uKSA9PiB7XG4gIHN0ciA9IFN0cmluZyhzdHIpO1xuICBpZiAocG9zaXRpb24gPT09IHVuZGVmaW5lZCB8fCBwb3NpdGlvbiA+IHN0ci5sZW5ndGgpIHtcbiAgICBwb3NpdGlvbiA9IHN0ci5sZW5ndGg7XG4gIH1cbiAgcG9zaXRpb24gLT0gc2VhcmNoU3RyaW5nLmxlbmd0aDtcbiAgY29uc3QgbGFzdEluZGV4ID0gc3RyLmluZGV4T2Yoc2VhcmNoU3RyaW5nLCBwb3NpdGlvbik7XG4gIHJldHVybiBsYXN0SW5kZXggIT09IC0xICYmIGxhc3RJbmRleCA9PT0gcG9zaXRpb247XG59O1xuXG5cbi8qKlxuICogUmV0dXJucyBuZXcgYXJyYXkgZnJvbSBhcnJheSBsaWtlIG9iamVjdCBvciBudWxsIGlmIGZhaWxlZFxuICpcbiAqIEBwYXJhbSB7Kn0gW3RoaW5nXVxuICpcbiAqIEByZXR1cm5zIHs/QXJyYXl9XG4gKi9cbmNvbnN0IHRvQXJyYXkgPSAodGhpbmcpID0+IHtcbiAgaWYgKCF0aGluZykgcmV0dXJuIG51bGw7XG4gIGlmIChpc0FycmF5KHRoaW5nKSkgcmV0dXJuIHRoaW5nO1xuICBsZXQgaSA9IHRoaW5nLmxlbmd0aDtcbiAgaWYgKCFpc051bWJlcihpKSkgcmV0dXJuIG51bGw7XG4gIGNvbnN0IGFyciA9IG5ldyBBcnJheShpKTtcbiAgd2hpbGUgKGktLSA+IDApIHtcbiAgICBhcnJbaV0gPSB0aGluZ1tpXTtcbiAgfVxuICByZXR1cm4gYXJyO1xufTtcblxuLyoqXG4gKiBDaGVja2luZyBpZiB0aGUgVWludDhBcnJheSBleGlzdHMgYW5kIGlmIGl0IGRvZXMsIGl0IHJldHVybnMgYSBmdW5jdGlvbiB0aGF0IGNoZWNrcyBpZiB0aGVcbiAqIHRoaW5nIHBhc3NlZCBpbiBpcyBhbiBpbnN0YW5jZSBvZiBVaW50OEFycmF5XG4gKlxuICogQHBhcmFtIHtUeXBlZEFycmF5fVxuICpcbiAqIEByZXR1cm5zIHtBcnJheX1cbiAqL1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGZ1bmMtbmFtZXNcbmNvbnN0IGlzVHlwZWRBcnJheSA9IChUeXBlZEFycmF5ID0+IHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGZ1bmMtbmFtZXNcbiAgcmV0dXJuIHRoaW5nID0+IHtcbiAgICByZXR1cm4gVHlwZWRBcnJheSAmJiB0aGluZyBpbnN0YW5jZW9mIFR5cGVkQXJyYXk7XG4gIH07XG59KSh0eXBlb2YgVWludDhBcnJheSAhPT0gJ3VuZGVmaW5lZCcgJiYgZ2V0UHJvdG90eXBlT2YoVWludDhBcnJheSkpO1xuXG4vKipcbiAqIEZvciBlYWNoIGVudHJ5IGluIHRoZSBvYmplY3QsIGNhbGwgdGhlIGZ1bmN0aW9uIHdpdGggdGhlIGtleSBhbmQgdmFsdWUuXG4gKlxuICogQHBhcmFtIHtPYmplY3Q8YW55LCBhbnk+fSBvYmogLSBUaGUgb2JqZWN0IHRvIGl0ZXJhdGUgb3Zlci5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuIC0gVGhlIGZ1bmN0aW9uIHRvIGNhbGwgZm9yIGVhY2ggZW50cnkuXG4gKlxuICogQHJldHVybnMge3ZvaWR9XG4gKi9cbmNvbnN0IGZvckVhY2hFbnRyeSA9IChvYmosIGZuKSA9PiB7XG4gIGNvbnN0IGdlbmVyYXRvciA9IG9iaiAmJiBvYmpbU3ltYm9sLml0ZXJhdG9yXTtcblxuICBjb25zdCBpdGVyYXRvciA9IGdlbmVyYXRvci5jYWxsKG9iaik7XG5cbiAgbGV0IHJlc3VsdDtcblxuICB3aGlsZSAoKHJlc3VsdCA9IGl0ZXJhdG9yLm5leHQoKSkgJiYgIXJlc3VsdC5kb25lKSB7XG4gICAgY29uc3QgcGFpciA9IHJlc3VsdC52YWx1ZTtcbiAgICBmbi5jYWxsKG9iaiwgcGFpclswXSwgcGFpclsxXSk7XG4gIH1cbn07XG5cbi8qKlxuICogSXQgdGFrZXMgYSByZWd1bGFyIGV4cHJlc3Npb24gYW5kIGEgc3RyaW5nLCBhbmQgcmV0dXJucyBhbiBhcnJheSBvZiBhbGwgdGhlIG1hdGNoZXNcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gcmVnRXhwIC0gVGhlIHJlZ3VsYXIgZXhwcmVzc2lvbiB0byBtYXRjaCBhZ2FpbnN0LlxuICogQHBhcmFtIHtzdHJpbmd9IHN0ciAtIFRoZSBzdHJpbmcgdG8gc2VhcmNoLlxuICpcbiAqIEByZXR1cm5zIHtBcnJheTxib29sZWFuPn1cbiAqL1xuY29uc3QgbWF0Y2hBbGwgPSAocmVnRXhwLCBzdHIpID0+IHtcbiAgbGV0IG1hdGNoZXM7XG4gIGNvbnN0IGFyciA9IFtdO1xuXG4gIHdoaWxlICgobWF0Y2hlcyA9IHJlZ0V4cC5leGVjKHN0cikpICE9PSBudWxsKSB7XG4gICAgYXJyLnB1c2gobWF0Y2hlcyk7XG4gIH1cblxuICByZXR1cm4gYXJyO1xufTtcblxuLyogQ2hlY2tpbmcgaWYgdGhlIGtpbmRPZlRlc3QgZnVuY3Rpb24gcmV0dXJucyB0cnVlIHdoZW4gcGFzc2VkIGFuIEhUTUxGb3JtRWxlbWVudC4gKi9cbmNvbnN0IGlzSFRNTEZvcm0gPSBraW5kT2ZUZXN0KCdIVE1MRm9ybUVsZW1lbnQnKTtcblxuY29uc3QgdG9DYW1lbENhc2UgPSBzdHIgPT4ge1xuICByZXR1cm4gc3RyLnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvWy1fXFxzXShbYS16XFxkXSkoXFx3KikvZyxcbiAgICBmdW5jdGlvbiByZXBsYWNlcihtLCBwMSwgcDIpIHtcbiAgICAgIHJldHVybiBwMS50b1VwcGVyQ2FzZSgpICsgcDI7XG4gICAgfVxuICApO1xufTtcblxuLyogQ3JlYXRpbmcgYSBmdW5jdGlvbiB0aGF0IHdpbGwgY2hlY2sgaWYgYW4gb2JqZWN0IGhhcyBhIHByb3BlcnR5LiAqL1xuY29uc3QgaGFzT3duUHJvcGVydHkgPSAoKHtoYXNPd25Qcm9wZXJ0eX0pID0+IChvYmosIHByb3ApID0+IGhhc093blByb3BlcnR5LmNhbGwob2JqLCBwcm9wKSkoT2JqZWN0LnByb3RvdHlwZSk7XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBSZWdFeHAgb2JqZWN0XG4gKlxuICogQHBhcmFtIHsqfSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIFJlZ0V4cCBvYmplY3QsIG90aGVyd2lzZSBmYWxzZVxuICovXG5jb25zdCBpc1JlZ0V4cCA9IGtpbmRPZlRlc3QoJ1JlZ0V4cCcpO1xuXG5jb25zdCByZWR1Y2VEZXNjcmlwdG9ycyA9IChvYmosIHJlZHVjZXIpID0+IHtcbiAgY29uc3QgZGVzY3JpcHRvcnMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhvYmopO1xuICBjb25zdCByZWR1Y2VkRGVzY3JpcHRvcnMgPSB7fTtcblxuICBmb3JFYWNoKGRlc2NyaXB0b3JzLCAoZGVzY3JpcHRvciwgbmFtZSkgPT4ge1xuICAgIGxldCByZXQ7XG4gICAgaWYgKChyZXQgPSByZWR1Y2VyKGRlc2NyaXB0b3IsIG5hbWUsIG9iaikpICE9PSBmYWxzZSkge1xuICAgICAgcmVkdWNlZERlc2NyaXB0b3JzW25hbWVdID0gcmV0IHx8IGRlc2NyaXB0b3I7XG4gICAgfVxuICB9KTtcblxuICBPYmplY3QuZGVmaW5lUHJvcGVydGllcyhvYmosIHJlZHVjZWREZXNjcmlwdG9ycyk7XG59O1xuXG4vKipcbiAqIE1ha2VzIGFsbCBtZXRob2RzIHJlYWQtb25seVxuICogQHBhcmFtIHtPYmplY3R9IG9ialxuICovXG5cbmNvbnN0IGZyZWV6ZU1ldGhvZHMgPSAob2JqKSA9PiB7XG4gIHJlZHVjZURlc2NyaXB0b3JzKG9iaiwgKGRlc2NyaXB0b3IsIG5hbWUpID0+IHtcbiAgICAvLyBza2lwIHJlc3RyaWN0ZWQgcHJvcHMgaW4gc3RyaWN0IG1vZGVcbiAgICBpZiAoaXNGdW5jdGlvbihvYmopICYmIFsnYXJndW1lbnRzJywgJ2NhbGxlcicsICdjYWxsZWUnXS5pbmRleE9mKG5hbWUpICE9PSAtMSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGNvbnN0IHZhbHVlID0gb2JqW25hbWVdO1xuXG4gICAgaWYgKCFpc0Z1bmN0aW9uKHZhbHVlKSkgcmV0dXJuO1xuXG4gICAgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gZmFsc2U7XG5cbiAgICBpZiAoJ3dyaXRhYmxlJyBpbiBkZXNjcmlwdG9yKSB7XG4gICAgICBkZXNjcmlwdG9yLndyaXRhYmxlID0gZmFsc2U7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKCFkZXNjcmlwdG9yLnNldCkge1xuICAgICAgZGVzY3JpcHRvci5zZXQgPSAoKSA9PiB7XG4gICAgICAgIHRocm93IEVycm9yKCdDYW4gbm90IHJld3JpdGUgcmVhZC1vbmx5IG1ldGhvZCBcXCcnICsgbmFtZSArICdcXCcnKTtcbiAgICAgIH07XG4gICAgfVxuICB9KTtcbn07XG5cbmNvbnN0IHRvT2JqZWN0U2V0ID0gKGFycmF5T3JTdHJpbmcsIGRlbGltaXRlcikgPT4ge1xuICBjb25zdCBvYmogPSB7fTtcblxuICBjb25zdCBkZWZpbmUgPSAoYXJyKSA9PiB7XG4gICAgYXJyLmZvckVhY2godmFsdWUgPT4ge1xuICAgICAgb2JqW3ZhbHVlXSA9IHRydWU7XG4gICAgfSk7XG4gIH07XG5cbiAgaXNBcnJheShhcnJheU9yU3RyaW5nKSA/IGRlZmluZShhcnJheU9yU3RyaW5nKSA6IGRlZmluZShTdHJpbmcoYXJyYXlPclN0cmluZykuc3BsaXQoZGVsaW1pdGVyKSk7XG5cbiAgcmV0dXJuIG9iajtcbn07XG5cbmNvbnN0IG5vb3AgPSAoKSA9PiB7fTtcblxuY29uc3QgdG9GaW5pdGVOdW1iZXIgPSAodmFsdWUsIGRlZmF1bHRWYWx1ZSkgPT4ge1xuICB2YWx1ZSA9ICt2YWx1ZTtcbiAgcmV0dXJuIE51bWJlci5pc0Zpbml0ZSh2YWx1ZSkgPyB2YWx1ZSA6IGRlZmF1bHRWYWx1ZTtcbn07XG5cbmNvbnN0IEFMUEhBID0gJ2FiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6JztcblxuY29uc3QgRElHSVQgPSAnMDEyMzQ1Njc4OSc7XG5cbmNvbnN0IEFMUEhBQkVUID0ge1xuICBESUdJVCxcbiAgQUxQSEEsXG4gIEFMUEhBX0RJR0lUOiBBTFBIQSArIEFMUEhBLnRvVXBwZXJDYXNlKCkgKyBESUdJVFxufTtcblxuY29uc3QgZ2VuZXJhdGVTdHJpbmcgPSAoc2l6ZSA9IDE2LCBhbHBoYWJldCA9IEFMUEhBQkVULkFMUEhBX0RJR0lUKSA9PiB7XG4gIGxldCBzdHIgPSAnJztcbiAgY29uc3Qge2xlbmd0aH0gPSBhbHBoYWJldDtcbiAgd2hpbGUgKHNpemUtLSkge1xuICAgIHN0ciArPSBhbHBoYWJldFtNYXRoLnJhbmRvbSgpICogbGVuZ3RofDBdO1xuICB9XG5cbiAgcmV0dXJuIHN0cjtcbn07XG5cbi8qKlxuICogSWYgdGhlIHRoaW5nIGlzIGEgRm9ybURhdGEgb2JqZWN0LCByZXR1cm4gdHJ1ZSwgb3RoZXJ3aXNlIHJldHVybiBmYWxzZS5cbiAqXG4gKiBAcGFyYW0ge3Vua25vd259IHRoaW5nIC0gVGhlIHRoaW5nIHRvIGNoZWNrLlxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5mdW5jdGlvbiBpc1NwZWNDb21wbGlhbnRGb3JtKHRoaW5nKSB7XG4gIHJldHVybiAhISh0aGluZyAmJiBpc0Z1bmN0aW9uKHRoaW5nLmFwcGVuZCkgJiYgdGhpbmdbU3ltYm9sLnRvU3RyaW5nVGFnXSA9PT0gJ0Zvcm1EYXRhJyAmJiB0aGluZ1tTeW1ib2wuaXRlcmF0b3JdKTtcbn1cblxuY29uc3QgdG9KU09OT2JqZWN0ID0gKG9iaikgPT4ge1xuICBjb25zdCBzdGFjayA9IG5ldyBBcnJheSgxMCk7XG5cbiAgY29uc3QgdmlzaXQgPSAoc291cmNlLCBpKSA9PiB7XG5cbiAgICBpZiAoaXNPYmplY3Qoc291cmNlKSkge1xuICAgICAgaWYgKHN0YWNrLmluZGV4T2Yoc291cmNlKSA+PSAwKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYoISgndG9KU09OJyBpbiBzb3VyY2UpKSB7XG4gICAgICAgIHN0YWNrW2ldID0gc291cmNlO1xuICAgICAgICBjb25zdCB0YXJnZXQgPSBpc0FycmF5KHNvdXJjZSkgPyBbXSA6IHt9O1xuXG4gICAgICAgIGZvckVhY2goc291cmNlLCAodmFsdWUsIGtleSkgPT4ge1xuICAgICAgICAgIGNvbnN0IHJlZHVjZWRWYWx1ZSA9IHZpc2l0KHZhbHVlLCBpICsgMSk7XG4gICAgICAgICAgIWlzVW5kZWZpbmVkKHJlZHVjZWRWYWx1ZSkgJiYgKHRhcmdldFtrZXldID0gcmVkdWNlZFZhbHVlKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgc3RhY2tbaV0gPSB1bmRlZmluZWQ7XG5cbiAgICAgICAgcmV0dXJuIHRhcmdldDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gc291cmNlO1xuICB9O1xuXG4gIHJldHVybiB2aXNpdChvYmosIDApO1xufTtcblxuY29uc3QgaXNBc3luY0ZuID0ga2luZE9mVGVzdCgnQXN5bmNGdW5jdGlvbicpO1xuXG5jb25zdCBpc1RoZW5hYmxlID0gKHRoaW5nKSA9PlxuICB0aGluZyAmJiAoaXNPYmplY3QodGhpbmcpIHx8IGlzRnVuY3Rpb24odGhpbmcpKSAmJiBpc0Z1bmN0aW9uKHRoaW5nLnRoZW4pICYmIGlzRnVuY3Rpb24odGhpbmcuY2F0Y2gpO1xuXG52YXIgdXRpbHMkMSA9IHtcbiAgaXNBcnJheSxcbiAgaXNBcnJheUJ1ZmZlcixcbiAgaXNCdWZmZXIsXG4gIGlzRm9ybURhdGEsXG4gIGlzQXJyYXlCdWZmZXJWaWV3LFxuICBpc1N0cmluZyxcbiAgaXNOdW1iZXIsXG4gIGlzQm9vbGVhbixcbiAgaXNPYmplY3QsXG4gIGlzUGxhaW5PYmplY3QsXG4gIGlzVW5kZWZpbmVkLFxuICBpc0RhdGUsXG4gIGlzRmlsZSxcbiAgaXNCbG9iLFxuICBpc1JlZ0V4cCxcbiAgaXNGdW5jdGlvbixcbiAgaXNTdHJlYW0sXG4gIGlzVVJMU2VhcmNoUGFyYW1zLFxuICBpc1R5cGVkQXJyYXksXG4gIGlzRmlsZUxpc3QsXG4gIGZvckVhY2gsXG4gIG1lcmdlLFxuICBleHRlbmQsXG4gIHRyaW0sXG4gIHN0cmlwQk9NLFxuICBpbmhlcml0cyxcbiAgdG9GbGF0T2JqZWN0LFxuICBraW5kT2YsXG4gIGtpbmRPZlRlc3QsXG4gIGVuZHNXaXRoLFxuICB0b0FycmF5LFxuICBmb3JFYWNoRW50cnksXG4gIG1hdGNoQWxsLFxuICBpc0hUTUxGb3JtLFxuICBoYXNPd25Qcm9wZXJ0eSxcbiAgaGFzT3duUHJvcDogaGFzT3duUHJvcGVydHksIC8vIGFuIGFsaWFzIHRvIGF2b2lkIEVTTGludCBuby1wcm90b3R5cGUtYnVpbHRpbnMgZGV0ZWN0aW9uXG4gIHJlZHVjZURlc2NyaXB0b3JzLFxuICBmcmVlemVNZXRob2RzLFxuICB0b09iamVjdFNldCxcbiAgdG9DYW1lbENhc2UsXG4gIG5vb3AsXG4gIHRvRmluaXRlTnVtYmVyLFxuICBmaW5kS2V5LFxuICBnbG9iYWw6IF9nbG9iYWwsXG4gIGlzQ29udGV4dERlZmluZWQsXG4gIEFMUEhBQkVULFxuICBnZW5lcmF0ZVN0cmluZyxcbiAgaXNTcGVjQ29tcGxpYW50Rm9ybSxcbiAgdG9KU09OT2JqZWN0LFxuICBpc0FzeW5jRm4sXG4gIGlzVGhlbmFibGVcbn07XG5cbi8qKlxuICogQ3JlYXRlIGFuIEVycm9yIHdpdGggdGhlIHNwZWNpZmllZCBtZXNzYWdlLCBjb25maWcsIGVycm9yIGNvZGUsIHJlcXVlc3QgYW5kIHJlc3BvbnNlLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBtZXNzYWdlIFRoZSBlcnJvciBtZXNzYWdlLlxuICogQHBhcmFtIHtzdHJpbmd9IFtjb2RlXSBUaGUgZXJyb3IgY29kZSAoZm9yIGV4YW1wbGUsICdFQ09OTkFCT1JURUQnKS5cbiAqIEBwYXJhbSB7T2JqZWN0fSBbY29uZmlnXSBUaGUgY29uZmlnLlxuICogQHBhcmFtIHtPYmplY3R9IFtyZXF1ZXN0XSBUaGUgcmVxdWVzdC5cbiAqIEBwYXJhbSB7T2JqZWN0fSBbcmVzcG9uc2VdIFRoZSByZXNwb25zZS5cbiAqXG4gKiBAcmV0dXJucyB7RXJyb3J9IFRoZSBjcmVhdGVkIGVycm9yLlxuICovXG5mdW5jdGlvbiBBeGlvc0Vycm9yKG1lc3NhZ2UsIGNvZGUsIGNvbmZpZywgcmVxdWVzdCwgcmVzcG9uc2UpIHtcbiAgRXJyb3IuY2FsbCh0aGlzKTtcblxuICBpZiAoRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UpIHtcbiAgICBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSh0aGlzLCB0aGlzLmNvbnN0cnVjdG9yKTtcbiAgfSBlbHNlIHtcbiAgICB0aGlzLnN0YWNrID0gKG5ldyBFcnJvcigpKS5zdGFjaztcbiAgfVxuXG4gIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2U7XG4gIHRoaXMubmFtZSA9ICdBeGlvc0Vycm9yJztcbiAgY29kZSAmJiAodGhpcy5jb2RlID0gY29kZSk7XG4gIGNvbmZpZyAmJiAodGhpcy5jb25maWcgPSBjb25maWcpO1xuICByZXF1ZXN0ICYmICh0aGlzLnJlcXVlc3QgPSByZXF1ZXN0KTtcbiAgcmVzcG9uc2UgJiYgKHRoaXMucmVzcG9uc2UgPSByZXNwb25zZSk7XG59XG5cbnV0aWxzJDEuaW5oZXJpdHMoQXhpb3NFcnJvciwgRXJyb3IsIHtcbiAgdG9KU09OOiBmdW5jdGlvbiB0b0pTT04oKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC8vIFN0YW5kYXJkXG4gICAgICBtZXNzYWdlOiB0aGlzLm1lc3NhZ2UsXG4gICAgICBuYW1lOiB0aGlzLm5hbWUsXG4gICAgICAvLyBNaWNyb3NvZnRcbiAgICAgIGRlc2NyaXB0aW9uOiB0aGlzLmRlc2NyaXB0aW9uLFxuICAgICAgbnVtYmVyOiB0aGlzLm51bWJlcixcbiAgICAgIC8vIE1vemlsbGFcbiAgICAgIGZpbGVOYW1lOiB0aGlzLmZpbGVOYW1lLFxuICAgICAgbGluZU51bWJlcjogdGhpcy5saW5lTnVtYmVyLFxuICAgICAgY29sdW1uTnVtYmVyOiB0aGlzLmNvbHVtbk51bWJlcixcbiAgICAgIHN0YWNrOiB0aGlzLnN0YWNrLFxuICAgICAgLy8gQXhpb3NcbiAgICAgIGNvbmZpZzogdXRpbHMkMS50b0pTT05PYmplY3QodGhpcy5jb25maWcpLFxuICAgICAgY29kZTogdGhpcy5jb2RlLFxuICAgICAgc3RhdHVzOiB0aGlzLnJlc3BvbnNlICYmIHRoaXMucmVzcG9uc2Uuc3RhdHVzID8gdGhpcy5yZXNwb25zZS5zdGF0dXMgOiBudWxsXG4gICAgfTtcbiAgfVxufSk7XG5cbmNvbnN0IHByb3RvdHlwZSQxID0gQXhpb3NFcnJvci5wcm90b3R5cGU7XG5jb25zdCBkZXNjcmlwdG9ycyA9IHt9O1xuXG5bXG4gICdFUlJfQkFEX09QVElPTl9WQUxVRScsXG4gICdFUlJfQkFEX09QVElPTicsXG4gICdFQ09OTkFCT1JURUQnLFxuICAnRVRJTUVET1VUJyxcbiAgJ0VSUl9ORVRXT1JLJyxcbiAgJ0VSUl9GUl9UT09fTUFOWV9SRURJUkVDVFMnLFxuICAnRVJSX0RFUFJFQ0FURUQnLFxuICAnRVJSX0JBRF9SRVNQT05TRScsXG4gICdFUlJfQkFEX1JFUVVFU1QnLFxuICAnRVJSX0NBTkNFTEVEJyxcbiAgJ0VSUl9OT1RfU1VQUE9SVCcsXG4gICdFUlJfSU5WQUxJRF9VUkwnXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZnVuYy1uYW1lc1xuXS5mb3JFYWNoKGNvZGUgPT4ge1xuICBkZXNjcmlwdG9yc1tjb2RlXSA9IHt2YWx1ZTogY29kZX07XG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQXhpb3NFcnJvciwgZGVzY3JpcHRvcnMpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KHByb3RvdHlwZSQxLCAnaXNBeGlvc0Vycm9yJywge3ZhbHVlOiB0cnVlfSk7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBmdW5jLW5hbWVzXG5BeGlvc0Vycm9yLmZyb20gPSAoZXJyb3IsIGNvZGUsIGNvbmZpZywgcmVxdWVzdCwgcmVzcG9uc2UsIGN1c3RvbVByb3BzKSA9PiB7XG4gIGNvbnN0IGF4aW9zRXJyb3IgPSBPYmplY3QuY3JlYXRlKHByb3RvdHlwZSQxKTtcblxuICB1dGlscyQxLnRvRmxhdE9iamVjdChlcnJvciwgYXhpb3NFcnJvciwgZnVuY3Rpb24gZmlsdGVyKG9iaikge1xuICAgIHJldHVybiBvYmogIT09IEVycm9yLnByb3RvdHlwZTtcbiAgfSwgcHJvcCA9PiB7XG4gICAgcmV0dXJuIHByb3AgIT09ICdpc0F4aW9zRXJyb3InO1xuICB9KTtcblxuICBBeGlvc0Vycm9yLmNhbGwoYXhpb3NFcnJvciwgZXJyb3IubWVzc2FnZSwgY29kZSwgY29uZmlnLCByZXF1ZXN0LCByZXNwb25zZSk7XG5cbiAgYXhpb3NFcnJvci5jYXVzZSA9IGVycm9yO1xuXG4gIGF4aW9zRXJyb3IubmFtZSA9IGVycm9yLm5hbWU7XG5cbiAgY3VzdG9tUHJvcHMgJiYgT2JqZWN0LmFzc2lnbihheGlvc0Vycm9yLCBjdXN0b21Qcm9wcyk7XG5cbiAgcmV0dXJuIGF4aW9zRXJyb3I7XG59O1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgc3RyaWN0XG52YXIgaHR0cEFkYXB0ZXIgPSBudWxsO1xuXG4vKipcbiAqIERldGVybWluZXMgaWYgdGhlIGdpdmVuIHRoaW5nIGlzIGEgYXJyYXkgb3IganMgb2JqZWN0LlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSB0aGluZyAtIFRoZSBvYmplY3Qgb3IgYXJyYXkgdG8gYmUgdmlzaXRlZC5cbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqL1xuZnVuY3Rpb24gaXNWaXNpdGFibGUodGhpbmcpIHtcbiAgcmV0dXJuIHV0aWxzJDEuaXNQbGFpbk9iamVjdCh0aGluZykgfHwgdXRpbHMkMS5pc0FycmF5KHRoaW5nKTtcbn1cblxuLyoqXG4gKiBJdCByZW1vdmVzIHRoZSBicmFja2V0cyBmcm9tIHRoZSBlbmQgb2YgYSBzdHJpbmdcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IC0gVGhlIGtleSBvZiB0aGUgcGFyYW1ldGVyLlxuICpcbiAqIEByZXR1cm5zIHtzdHJpbmd9IHRoZSBrZXkgd2l0aG91dCB0aGUgYnJhY2tldHMuXG4gKi9cbmZ1bmN0aW9uIHJlbW92ZUJyYWNrZXRzKGtleSkge1xuICByZXR1cm4gdXRpbHMkMS5lbmRzV2l0aChrZXksICdbXScpID8ga2V5LnNsaWNlKDAsIC0yKSA6IGtleTtcbn1cblxuLyoqXG4gKiBJdCB0YWtlcyBhIHBhdGgsIGEga2V5LCBhbmQgYSBib29sZWFuLCBhbmQgcmV0dXJucyBhIHN0cmluZ1xuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBwYXRoIC0gVGhlIHBhdGggdG8gdGhlIGN1cnJlbnQga2V5LlxuICogQHBhcmFtIHtzdHJpbmd9IGtleSAtIFRoZSBrZXkgb2YgdGhlIGN1cnJlbnQgb2JqZWN0IGJlaW5nIGl0ZXJhdGVkIG92ZXIuXG4gKiBAcGFyYW0ge3N0cmluZ30gZG90cyAtIElmIHRydWUsIHRoZSBrZXkgd2lsbCBiZSByZW5kZXJlZCB3aXRoIGRvdHMgaW5zdGVhZCBvZiBicmFja2V0cy5cbiAqXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgcGF0aCB0byB0aGUgY3VycmVudCBrZXkuXG4gKi9cbmZ1bmN0aW9uIHJlbmRlcktleShwYXRoLCBrZXksIGRvdHMpIHtcbiAgaWYgKCFwYXRoKSByZXR1cm4ga2V5O1xuICByZXR1cm4gcGF0aC5jb25jYXQoa2V5KS5tYXAoZnVuY3Rpb24gZWFjaCh0b2tlbiwgaSkge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuICAgIHRva2VuID0gcmVtb3ZlQnJhY2tldHModG9rZW4pO1xuICAgIHJldHVybiAhZG90cyAmJiBpID8gJ1snICsgdG9rZW4gKyAnXScgOiB0b2tlbjtcbiAgfSkuam9pbihkb3RzID8gJy4nIDogJycpO1xufVxuXG4vKipcbiAqIElmIHRoZSBhcnJheSBpcyBhbiBhcnJheSBhbmQgbm9uZSBvZiBpdHMgZWxlbWVudHMgYXJlIHZpc2l0YWJsZSwgdGhlbiBpdCdzIGEgZmxhdCBhcnJheS5cbiAqXG4gKiBAcGFyYW0ge0FycmF5PGFueT59IGFyciAtIFRoZSBhcnJheSB0byBjaGVja1xuICpcbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5mdW5jdGlvbiBpc0ZsYXRBcnJheShhcnIpIHtcbiAgcmV0dXJuIHV0aWxzJDEuaXNBcnJheShhcnIpICYmICFhcnIuc29tZShpc1Zpc2l0YWJsZSk7XG59XG5cbmNvbnN0IHByZWRpY2F0ZXMgPSB1dGlscyQxLnRvRmxhdE9iamVjdCh1dGlscyQxLCB7fSwgbnVsbCwgZnVuY3Rpb24gZmlsdGVyKHByb3ApIHtcbiAgcmV0dXJuIC9eaXNbQS1aXS8udGVzdChwcm9wKTtcbn0pO1xuXG4vKipcbiAqIENvbnZlcnQgYSBkYXRhIG9iamVjdCB0byBGb3JtRGF0YVxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmpcbiAqIEBwYXJhbSB7P09iamVjdH0gW2Zvcm1EYXRhXVxuICogQHBhcmFtIHs/T2JqZWN0fSBbb3B0aW9uc11cbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtvcHRpb25zLnZpc2l0b3JdXG4gKiBAcGFyYW0ge0Jvb2xlYW59IFtvcHRpb25zLm1ldGFUb2tlbnMgPSB0cnVlXVxuICogQHBhcmFtIHtCb29sZWFufSBbb3B0aW9ucy5kb3RzID0gZmFsc2VdXG4gKiBAcGFyYW0gez9Cb29sZWFufSBbb3B0aW9ucy5pbmRleGVzID0gZmFsc2VdXG4gKlxuICogQHJldHVybnMge09iamVjdH1cbiAqKi9cblxuLyoqXG4gKiBJdCBjb252ZXJ0cyBhbiBvYmplY3QgaW50byBhIEZvcm1EYXRhIG9iamVjdFxuICpcbiAqIEBwYXJhbSB7T2JqZWN0PGFueSwgYW55Pn0gb2JqIC0gVGhlIG9iamVjdCB0byBjb252ZXJ0IHRvIGZvcm0gZGF0YS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBmb3JtRGF0YSAtIFRoZSBGb3JtRGF0YSBvYmplY3QgdG8gYXBwZW5kIHRvLlxuICogQHBhcmFtIHtPYmplY3Q8c3RyaW5nLCBhbnk+fSBvcHRpb25zXG4gKlxuICogQHJldHVybnNcbiAqL1xuZnVuY3Rpb24gdG9Gb3JtRGF0YShvYmosIGZvcm1EYXRhLCBvcHRpb25zKSB7XG4gIGlmICghdXRpbHMkMS5pc09iamVjdChvYmopKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcigndGFyZ2V0IG11c3QgYmUgYW4gb2JqZWN0Jyk7XG4gIH1cblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcGFyYW0tcmVhc3NpZ25cbiAgZm9ybURhdGEgPSBmb3JtRGF0YSB8fCBuZXcgKEZvcm1EYXRhKSgpO1xuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuICBvcHRpb25zID0gdXRpbHMkMS50b0ZsYXRPYmplY3Qob3B0aW9ucywge1xuICAgIG1ldGFUb2tlbnM6IHRydWUsXG4gICAgZG90czogZmFsc2UsXG4gICAgaW5kZXhlczogZmFsc2VcbiAgfSwgZmFsc2UsIGZ1bmN0aW9uIGRlZmluZWQob3B0aW9uLCBzb3VyY2UpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tZXEtbnVsbCxlcWVxZXFcbiAgICByZXR1cm4gIXV0aWxzJDEuaXNVbmRlZmluZWQoc291cmNlW29wdGlvbl0pO1xuICB9KTtcblxuICBjb25zdCBtZXRhVG9rZW5zID0gb3B0aW9ucy5tZXRhVG9rZW5zO1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdXNlLWJlZm9yZS1kZWZpbmVcbiAgY29uc3QgdmlzaXRvciA9IG9wdGlvbnMudmlzaXRvciB8fCBkZWZhdWx0VmlzaXRvcjtcbiAgY29uc3QgZG90cyA9IG9wdGlvbnMuZG90cztcbiAgY29uc3QgaW5kZXhlcyA9IG9wdGlvbnMuaW5kZXhlcztcbiAgY29uc3QgX0Jsb2IgPSBvcHRpb25zLkJsb2IgfHwgdHlwZW9mIEJsb2IgIT09ICd1bmRlZmluZWQnICYmIEJsb2I7XG4gIGNvbnN0IHVzZUJsb2IgPSBfQmxvYiAmJiB1dGlscyQxLmlzU3BlY0NvbXBsaWFudEZvcm0oZm9ybURhdGEpO1xuXG4gIGlmICghdXRpbHMkMS5pc0Z1bmN0aW9uKHZpc2l0b3IpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcigndmlzaXRvciBtdXN0IGJlIGEgZnVuY3Rpb24nKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNvbnZlcnRWYWx1ZSh2YWx1ZSkge1xuICAgIGlmICh2YWx1ZSA9PT0gbnVsbCkgcmV0dXJuICcnO1xuXG4gICAgaWYgKHV0aWxzJDEuaXNEYXRlKHZhbHVlKSkge1xuICAgICAgcmV0dXJuIHZhbHVlLnRvSVNPU3RyaW5nKCk7XG4gICAgfVxuXG4gICAgaWYgKCF1c2VCbG9iICYmIHV0aWxzJDEuaXNCbG9iKHZhbHVlKSkge1xuICAgICAgdGhyb3cgbmV3IEF4aW9zRXJyb3IoJ0Jsb2IgaXMgbm90IHN1cHBvcnRlZC4gVXNlIGEgQnVmZmVyIGluc3RlYWQuJyk7XG4gICAgfVxuXG4gICAgaWYgKHV0aWxzJDEuaXNBcnJheUJ1ZmZlcih2YWx1ZSkgfHwgdXRpbHMkMS5pc1R5cGVkQXJyYXkodmFsdWUpKSB7XG4gICAgICByZXR1cm4gdXNlQmxvYiAmJiB0eXBlb2YgQmxvYiA9PT0gJ2Z1bmN0aW9uJyA/IG5ldyBCbG9iKFt2YWx1ZV0pIDogQnVmZmVyLmZyb20odmFsdWUpO1xuICAgIH1cblxuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWZhdWx0IHZpc2l0b3IuXG4gICAqXG4gICAqIEBwYXJhbSB7Kn0gdmFsdWVcbiAgICogQHBhcmFtIHtTdHJpbmd8TnVtYmVyfSBrZXlcbiAgICogQHBhcmFtIHtBcnJheTxTdHJpbmd8TnVtYmVyPn0gcGF0aFxuICAgKiBAdGhpcyB7Rm9ybURhdGF9XG4gICAqXG4gICAqIEByZXR1cm5zIHtib29sZWFufSByZXR1cm4gdHJ1ZSB0byB2aXNpdCB0aGUgZWFjaCBwcm9wIG9mIHRoZSB2YWx1ZSByZWN1cnNpdmVseVxuICAgKi9cbiAgZnVuY3Rpb24gZGVmYXVsdFZpc2l0b3IodmFsdWUsIGtleSwgcGF0aCkge1xuICAgIGxldCBhcnIgPSB2YWx1ZTtcblxuICAgIGlmICh2YWx1ZSAmJiAhcGF0aCAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnKSB7XG4gICAgICBpZiAodXRpbHMkMS5lbmRzV2l0aChrZXksICd7fScpKSB7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuICAgICAgICBrZXkgPSBtZXRhVG9rZW5zID8ga2V5IDoga2V5LnNsaWNlKDAsIC0yKTtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXBhcmFtLXJlYXNzaWduXG4gICAgICAgIHZhbHVlID0gSlNPTi5zdHJpbmdpZnkodmFsdWUpO1xuICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgKHV0aWxzJDEuaXNBcnJheSh2YWx1ZSkgJiYgaXNGbGF0QXJyYXkodmFsdWUpKSB8fFxuICAgICAgICAoKHV0aWxzJDEuaXNGaWxlTGlzdCh2YWx1ZSkgfHwgdXRpbHMkMS5lbmRzV2l0aChrZXksICdbXScpKSAmJiAoYXJyID0gdXRpbHMkMS50b0FycmF5KHZhbHVlKSlcbiAgICAgICAgKSkge1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcGFyYW0tcmVhc3NpZ25cbiAgICAgICAga2V5ID0gcmVtb3ZlQnJhY2tldHMoa2V5KTtcblxuICAgICAgICBhcnIuZm9yRWFjaChmdW5jdGlvbiBlYWNoKGVsLCBpbmRleCkge1xuICAgICAgICAgICEodXRpbHMkMS5pc1VuZGVmaW5lZChlbCkgfHwgZWwgPT09IG51bGwpICYmIGZvcm1EYXRhLmFwcGVuZChcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1uZXN0ZWQtdGVybmFyeVxuICAgICAgICAgICAgaW5kZXhlcyA9PT0gdHJ1ZSA/IHJlbmRlcktleShba2V5XSwgaW5kZXgsIGRvdHMpIDogKGluZGV4ZXMgPT09IG51bGwgPyBrZXkgOiBrZXkgKyAnW10nKSxcbiAgICAgICAgICAgIGNvbnZlcnRWYWx1ZShlbClcbiAgICAgICAgICApO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChpc1Zpc2l0YWJsZSh2YWx1ZSkpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGZvcm1EYXRhLmFwcGVuZChyZW5kZXJLZXkocGF0aCwga2V5LCBkb3RzKSwgY29udmVydFZhbHVlKHZhbHVlKSk7XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBjb25zdCBzdGFjayA9IFtdO1xuXG4gIGNvbnN0IGV4cG9zZWRIZWxwZXJzID0gT2JqZWN0LmFzc2lnbihwcmVkaWNhdGVzLCB7XG4gICAgZGVmYXVsdFZpc2l0b3IsXG4gICAgY29udmVydFZhbHVlLFxuICAgIGlzVmlzaXRhYmxlXG4gIH0pO1xuXG4gIGZ1bmN0aW9uIGJ1aWxkKHZhbHVlLCBwYXRoKSB7XG4gICAgaWYgKHV0aWxzJDEuaXNVbmRlZmluZWQodmFsdWUpKSByZXR1cm47XG5cbiAgICBpZiAoc3RhY2suaW5kZXhPZih2YWx1ZSkgIT09IC0xKSB7XG4gICAgICB0aHJvdyBFcnJvcignQ2lyY3VsYXIgcmVmZXJlbmNlIGRldGVjdGVkIGluICcgKyBwYXRoLmpvaW4oJy4nKSk7XG4gICAgfVxuXG4gICAgc3RhY2sucHVzaCh2YWx1ZSk7XG5cbiAgICB1dGlscyQxLmZvckVhY2godmFsdWUsIGZ1bmN0aW9uIGVhY2goZWwsIGtleSkge1xuICAgICAgY29uc3QgcmVzdWx0ID0gISh1dGlscyQxLmlzVW5kZWZpbmVkKGVsKSB8fCBlbCA9PT0gbnVsbCkgJiYgdmlzaXRvci5jYWxsKFxuICAgICAgICBmb3JtRGF0YSwgZWwsIHV0aWxzJDEuaXNTdHJpbmcoa2V5KSA/IGtleS50cmltKCkgOiBrZXksIHBhdGgsIGV4cG9zZWRIZWxwZXJzXG4gICAgICApO1xuXG4gICAgICBpZiAocmVzdWx0ID09PSB0cnVlKSB7XG4gICAgICAgIGJ1aWxkKGVsLCBwYXRoID8gcGF0aC5jb25jYXQoa2V5KSA6IFtrZXldKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHN0YWNrLnBvcCgpO1xuICB9XG5cbiAgaWYgKCF1dGlscyQxLmlzT2JqZWN0KG9iaikpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdkYXRhIG11c3QgYmUgYW4gb2JqZWN0Jyk7XG4gIH1cblxuICBidWlsZChvYmopO1xuXG4gIHJldHVybiBmb3JtRGF0YTtcbn1cblxuLyoqXG4gKiBJdCBlbmNvZGVzIGEgc3RyaW5nIGJ5IHJlcGxhY2luZyBhbGwgY2hhcmFjdGVycyB0aGF0IGFyZSBub3QgaW4gdGhlIHVucmVzZXJ2ZWQgc2V0IHdpdGhcbiAqIHRoZWlyIHBlcmNlbnQtZW5jb2RlZCBlcXVpdmFsZW50c1xuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBzdHIgLSBUaGUgc3RyaW5nIHRvIGVuY29kZS5cbiAqXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgZW5jb2RlZCBzdHJpbmcuXG4gKi9cbmZ1bmN0aW9uIGVuY29kZSQxKHN0cikge1xuICBjb25zdCBjaGFyTWFwID0ge1xuICAgICchJzogJyUyMScsXG4gICAgXCInXCI6ICclMjcnLFxuICAgICcoJzogJyUyOCcsXG4gICAgJyknOiAnJTI5JyxcbiAgICAnfic6ICclN0UnLFxuICAgICclMjAnOiAnKycsXG4gICAgJyUwMCc6ICdcXHgwMCdcbiAgfTtcbiAgcmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudChzdHIpLnJlcGxhY2UoL1shJygpfl18JTIwfCUwMC9nLCBmdW5jdGlvbiByZXBsYWNlcihtYXRjaCkge1xuICAgIHJldHVybiBjaGFyTWFwW21hdGNoXTtcbiAgfSk7XG59XG5cbi8qKlxuICogSXQgdGFrZXMgYSBwYXJhbXMgb2JqZWN0IGFuZCBjb252ZXJ0cyBpdCB0byBhIEZvcm1EYXRhIG9iamVjdFxuICpcbiAqIEBwYXJhbSB7T2JqZWN0PHN0cmluZywgYW55Pn0gcGFyYW1zIC0gVGhlIHBhcmFtZXRlcnMgdG8gYmUgY29udmVydGVkIHRvIGEgRm9ybURhdGEgb2JqZWN0LlxuICogQHBhcmFtIHtPYmplY3Q8c3RyaW5nLCBhbnk+fSBvcHRpb25zIC0gVGhlIG9wdGlvbnMgb2JqZWN0IHBhc3NlZCB0byB0aGUgQXhpb3MgY29uc3RydWN0b3IuXG4gKlxuICogQHJldHVybnMge3ZvaWR9XG4gKi9cbmZ1bmN0aW9uIEF4aW9zVVJMU2VhcmNoUGFyYW1zKHBhcmFtcywgb3B0aW9ucykge1xuICB0aGlzLl9wYWlycyA9IFtdO1xuXG4gIHBhcmFtcyAmJiB0b0Zvcm1EYXRhKHBhcmFtcywgdGhpcywgb3B0aW9ucyk7XG59XG5cbmNvbnN0IHByb3RvdHlwZSA9IEF4aW9zVVJMU2VhcmNoUGFyYW1zLnByb3RvdHlwZTtcblxucHJvdG90eXBlLmFwcGVuZCA9IGZ1bmN0aW9uIGFwcGVuZChuYW1lLCB2YWx1ZSkge1xuICB0aGlzLl9wYWlycy5wdXNoKFtuYW1lLCB2YWx1ZV0pO1xufTtcblxucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24gdG9TdHJpbmcoZW5jb2Rlcikge1xuICBjb25zdCBfZW5jb2RlID0gZW5jb2RlciA/IGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgcmV0dXJuIGVuY29kZXIuY2FsbCh0aGlzLCB2YWx1ZSwgZW5jb2RlJDEpO1xuICB9IDogZW5jb2RlJDE7XG5cbiAgcmV0dXJuIHRoaXMuX3BhaXJzLm1hcChmdW5jdGlvbiBlYWNoKHBhaXIpIHtcbiAgICByZXR1cm4gX2VuY29kZShwYWlyWzBdKSArICc9JyArIF9lbmNvZGUocGFpclsxXSk7XG4gIH0sICcnKS5qb2luKCcmJyk7XG59O1xuXG4vKipcbiAqIEl0IHJlcGxhY2VzIGFsbCBpbnN0YW5jZXMgb2YgdGhlIGNoYXJhY3RlcnMgYDpgLCBgJGAsIGAsYCwgYCtgLCBgW2AsIGFuZCBgXWAgd2l0aCB0aGVpclxuICogVVJJIGVuY29kZWQgY291bnRlcnBhcnRzXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbCBUaGUgdmFsdWUgdG8gYmUgZW5jb2RlZC5cbiAqXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgZW5jb2RlZCB2YWx1ZS5cbiAqL1xuZnVuY3Rpb24gZW5jb2RlKHZhbCkge1xuICByZXR1cm4gZW5jb2RlVVJJQ29tcG9uZW50KHZhbCkuXG4gICAgcmVwbGFjZSgvJTNBL2dpLCAnOicpLlxuICAgIHJlcGxhY2UoLyUyNC9nLCAnJCcpLlxuICAgIHJlcGxhY2UoLyUyQy9naSwgJywnKS5cbiAgICByZXBsYWNlKC8lMjAvZywgJysnKS5cbiAgICByZXBsYWNlKC8lNUIvZ2ksICdbJykuXG4gICAgcmVwbGFjZSgvJTVEL2dpLCAnXScpO1xufVxuXG4vKipcbiAqIEJ1aWxkIGEgVVJMIGJ5IGFwcGVuZGluZyBwYXJhbXMgdG8gdGhlIGVuZFxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSB1cmwgVGhlIGJhc2Ugb2YgdGhlIHVybCAoZS5nLiwgaHR0cDovL3d3dy5nb29nbGUuY29tKVxuICogQHBhcmFtIHtvYmplY3R9IFtwYXJhbXNdIFRoZSBwYXJhbXMgdG8gYmUgYXBwZW5kZWRcbiAqIEBwYXJhbSB7P29iamVjdH0gb3B0aW9uc1xuICpcbiAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSBmb3JtYXR0ZWQgdXJsXG4gKi9cbmZ1bmN0aW9uIGJ1aWxkVVJMKHVybCwgcGFyYW1zLCBvcHRpb25zKSB7XG4gIC8qZXNsaW50IG5vLXBhcmFtLXJlYXNzaWduOjAqL1xuICBpZiAoIXBhcmFtcykge1xuICAgIHJldHVybiB1cmw7XG4gIH1cbiAgXG4gIGNvbnN0IF9lbmNvZGUgPSBvcHRpb25zICYmIG9wdGlvbnMuZW5jb2RlIHx8IGVuY29kZTtcblxuICBjb25zdCBzZXJpYWxpemVGbiA9IG9wdGlvbnMgJiYgb3B0aW9ucy5zZXJpYWxpemU7XG5cbiAgbGV0IHNlcmlhbGl6ZWRQYXJhbXM7XG5cbiAgaWYgKHNlcmlhbGl6ZUZuKSB7XG4gICAgc2VyaWFsaXplZFBhcmFtcyA9IHNlcmlhbGl6ZUZuKHBhcmFtcywgb3B0aW9ucyk7XG4gIH0gZWxzZSB7XG4gICAgc2VyaWFsaXplZFBhcmFtcyA9IHV0aWxzJDEuaXNVUkxTZWFyY2hQYXJhbXMocGFyYW1zKSA/XG4gICAgICBwYXJhbXMudG9TdHJpbmcoKSA6XG4gICAgICBuZXcgQXhpb3NVUkxTZWFyY2hQYXJhbXMocGFyYW1zLCBvcHRpb25zKS50b1N0cmluZyhfZW5jb2RlKTtcbiAgfVxuXG4gIGlmIChzZXJpYWxpemVkUGFyYW1zKSB7XG4gICAgY29uc3QgaGFzaG1hcmtJbmRleCA9IHVybC5pbmRleE9mKFwiI1wiKTtcblxuICAgIGlmIChoYXNobWFya0luZGV4ICE9PSAtMSkge1xuICAgICAgdXJsID0gdXJsLnNsaWNlKDAsIGhhc2htYXJrSW5kZXgpO1xuICAgIH1cbiAgICB1cmwgKz0gKHVybC5pbmRleE9mKCc/JykgPT09IC0xID8gJz8nIDogJyYnKSArIHNlcmlhbGl6ZWRQYXJhbXM7XG4gIH1cblxuICByZXR1cm4gdXJsO1xufVxuXG5jbGFzcyBJbnRlcmNlcHRvck1hbmFnZXIge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLmhhbmRsZXJzID0gW107XG4gIH1cblxuICAvKipcbiAgICogQWRkIGEgbmV3IGludGVyY2VwdG9yIHRvIHRoZSBzdGFja1xuICAgKlxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdWxmaWxsZWQgVGhlIGZ1bmN0aW9uIHRvIGhhbmRsZSBgdGhlbmAgZm9yIGEgYFByb21pc2VgXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IHJlamVjdGVkIFRoZSBmdW5jdGlvbiB0byBoYW5kbGUgYHJlamVjdGAgZm9yIGEgYFByb21pc2VgXG4gICAqXG4gICAqIEByZXR1cm4ge051bWJlcn0gQW4gSUQgdXNlZCB0byByZW1vdmUgaW50ZXJjZXB0b3IgbGF0ZXJcbiAgICovXG4gIHVzZShmdWxmaWxsZWQsIHJlamVjdGVkLCBvcHRpb25zKSB7XG4gICAgdGhpcy5oYW5kbGVycy5wdXNoKHtcbiAgICAgIGZ1bGZpbGxlZCxcbiAgICAgIHJlamVjdGVkLFxuICAgICAgc3luY2hyb25vdXM6IG9wdGlvbnMgPyBvcHRpb25zLnN5bmNocm9ub3VzIDogZmFsc2UsXG4gICAgICBydW5XaGVuOiBvcHRpb25zID8gb3B0aW9ucy5ydW5XaGVuIDogbnVsbFxuICAgIH0pO1xuICAgIHJldHVybiB0aGlzLmhhbmRsZXJzLmxlbmd0aCAtIDE7XG4gIH1cblxuICAvKipcbiAgICogUmVtb3ZlIGFuIGludGVyY2VwdG9yIGZyb20gdGhlIHN0YWNrXG4gICAqXG4gICAqIEBwYXJhbSB7TnVtYmVyfSBpZCBUaGUgSUQgdGhhdCB3YXMgcmV0dXJuZWQgYnkgYHVzZWBcbiAgICpcbiAgICogQHJldHVybnMge0Jvb2xlYW59IGB0cnVlYCBpZiB0aGUgaW50ZXJjZXB0b3Igd2FzIHJlbW92ZWQsIGBmYWxzZWAgb3RoZXJ3aXNlXG4gICAqL1xuICBlamVjdChpZCkge1xuICAgIGlmICh0aGlzLmhhbmRsZXJzW2lkXSkge1xuICAgICAgdGhpcy5oYW5kbGVyc1tpZF0gPSBudWxsO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDbGVhciBhbGwgaW50ZXJjZXB0b3JzIGZyb20gdGhlIHN0YWNrXG4gICAqXG4gICAqIEByZXR1cm5zIHt2b2lkfVxuICAgKi9cbiAgY2xlYXIoKSB7XG4gICAgaWYgKHRoaXMuaGFuZGxlcnMpIHtcbiAgICAgIHRoaXMuaGFuZGxlcnMgPSBbXTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogSXRlcmF0ZSBvdmVyIGFsbCB0aGUgcmVnaXN0ZXJlZCBpbnRlcmNlcHRvcnNcbiAgICpcbiAgICogVGhpcyBtZXRob2QgaXMgcGFydGljdWxhcmx5IHVzZWZ1bCBmb3Igc2tpcHBpbmcgb3ZlciBhbnlcbiAgICogaW50ZXJjZXB0b3JzIHRoYXQgbWF5IGhhdmUgYmVjb21lIGBudWxsYCBjYWxsaW5nIGBlamVjdGAuXG4gICAqXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IGZuIFRoZSBmdW5jdGlvbiB0byBjYWxsIGZvciBlYWNoIGludGVyY2VwdG9yXG4gICAqXG4gICAqIEByZXR1cm5zIHt2b2lkfVxuICAgKi9cbiAgZm9yRWFjaChmbikge1xuICAgIHV0aWxzJDEuZm9yRWFjaCh0aGlzLmhhbmRsZXJzLCBmdW5jdGlvbiBmb3JFYWNoSGFuZGxlcihoKSB7XG4gICAgICBpZiAoaCAhPT0gbnVsbCkge1xuICAgICAgICBmbihoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxufVxuXG52YXIgSW50ZXJjZXB0b3JNYW5hZ2VyJDEgPSBJbnRlcmNlcHRvck1hbmFnZXI7XG5cbnZhciB0cmFuc2l0aW9uYWxEZWZhdWx0cyA9IHtcbiAgc2lsZW50SlNPTlBhcnNpbmc6IHRydWUsXG4gIGZvcmNlZEpTT05QYXJzaW5nOiB0cnVlLFxuICBjbGFyaWZ5VGltZW91dEVycm9yOiBmYWxzZVxufTtcblxudmFyIFVSTFNlYXJjaFBhcmFtcyQxID0gdHlwZW9mIFVSTFNlYXJjaFBhcmFtcyAhPT0gJ3VuZGVmaW5lZCcgPyBVUkxTZWFyY2hQYXJhbXMgOiBBeGlvc1VSTFNlYXJjaFBhcmFtcztcblxudmFyIEZvcm1EYXRhJDEgPSB0eXBlb2YgRm9ybURhdGEgIT09ICd1bmRlZmluZWQnID8gRm9ybURhdGEgOiBudWxsO1xuXG52YXIgQmxvYiQxID0gdHlwZW9mIEJsb2IgIT09ICd1bmRlZmluZWQnID8gQmxvYiA6IG51bGw7XG5cbnZhciBwbGF0Zm9ybSQxID0ge1xuICBpc0Jyb3dzZXI6IHRydWUsXG4gIGNsYXNzZXM6IHtcbiAgICBVUkxTZWFyY2hQYXJhbXM6IFVSTFNlYXJjaFBhcmFtcyQxLFxuICAgIEZvcm1EYXRhOiBGb3JtRGF0YSQxLFxuICAgIEJsb2I6IEJsb2IkMVxuICB9LFxuICBwcm90b2NvbHM6IFsnaHR0cCcsICdodHRwcycsICdmaWxlJywgJ2Jsb2InLCAndXJsJywgJ2RhdGEnXVxufTtcblxuY29uc3QgaGFzQnJvd3NlckVudiA9IHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIHR5cGVvZiBkb2N1bWVudCAhPT0gJ3VuZGVmaW5lZCc7XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIHdlJ3JlIHJ1bm5pbmcgaW4gYSBzdGFuZGFyZCBicm93c2VyIGVudmlyb25tZW50XG4gKlxuICogVGhpcyBhbGxvd3MgYXhpb3MgdG8gcnVuIGluIGEgd2ViIHdvcmtlciwgYW5kIHJlYWN0LW5hdGl2ZS5cbiAqIEJvdGggZW52aXJvbm1lbnRzIHN1cHBvcnQgWE1MSHR0cFJlcXVlc3QsIGJ1dCBub3QgZnVsbHkgc3RhbmRhcmQgZ2xvYmFscy5cbiAqXG4gKiB3ZWIgd29ya2VyczpcbiAqICB0eXBlb2Ygd2luZG93IC0+IHVuZGVmaW5lZFxuICogIHR5cGVvZiBkb2N1bWVudCAtPiB1bmRlZmluZWRcbiAqXG4gKiByZWFjdC1uYXRpdmU6XG4gKiAgbmF2aWdhdG9yLnByb2R1Y3QgLT4gJ1JlYWN0TmF0aXZlJ1xuICogbmF0aXZlc2NyaXB0XG4gKiAgbmF2aWdhdG9yLnByb2R1Y3QgLT4gJ05hdGl2ZVNjcmlwdCcgb3IgJ05TJ1xuICpcbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5jb25zdCBoYXNTdGFuZGFyZEJyb3dzZXJFbnYgPSAoXG4gIChwcm9kdWN0KSA9PiB7XG4gICAgcmV0dXJuIGhhc0Jyb3dzZXJFbnYgJiYgWydSZWFjdE5hdGl2ZScsICdOYXRpdmVTY3JpcHQnLCAnTlMnXS5pbmRleE9mKHByb2R1Y3QpIDwgMFxuICB9KSh0eXBlb2YgbmF2aWdhdG9yICE9PSAndW5kZWZpbmVkJyAmJiBuYXZpZ2F0b3IucHJvZHVjdCk7XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIHdlJ3JlIHJ1bm5pbmcgaW4gYSBzdGFuZGFyZCBicm93c2VyIHdlYldvcmtlciBlbnZpcm9ubWVudFxuICpcbiAqIEFsdGhvdWdoIHRoZSBgaXNTdGFuZGFyZEJyb3dzZXJFbnZgIG1ldGhvZCBpbmRpY2F0ZXMgdGhhdFxuICogYGFsbG93cyBheGlvcyB0byBydW4gaW4gYSB3ZWIgd29ya2VyYCwgdGhlIFdlYldvcmtlciB3aWxsIHN0aWxsIGJlXG4gKiBmaWx0ZXJlZCBvdXQgZHVlIHRvIGl0cyBqdWRnbWVudCBzdGFuZGFyZFxuICogYHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIHR5cGVvZiBkb2N1bWVudCAhPT0gJ3VuZGVmaW5lZCdgLlxuICogVGhpcyBsZWFkcyB0byBhIHByb2JsZW0gd2hlbiBheGlvcyBwb3N0IGBGb3JtRGF0YWAgaW4gd2ViV29ya2VyXG4gKi9cbmNvbnN0IGhhc1N0YW5kYXJkQnJvd3NlcldlYldvcmtlckVudiA9ICgoKSA9PiB7XG4gIHJldHVybiAoXG4gICAgdHlwZW9mIFdvcmtlckdsb2JhbFNjb3BlICE9PSAndW5kZWZpbmVkJyAmJlxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bmRlZlxuICAgIHNlbGYgaW5zdGFuY2VvZiBXb3JrZXJHbG9iYWxTY29wZSAmJlxuICAgIHR5cGVvZiBzZWxmLmltcG9ydFNjcmlwdHMgPT09ICdmdW5jdGlvbidcbiAgKTtcbn0pKCk7XG5cbnZhciB1dGlscyA9IC8qI19fUFVSRV9fKi9PYmplY3QuZnJlZXplKHtcbiAgX19wcm90b19fOiBudWxsLFxuICBoYXNCcm93c2VyRW52OiBoYXNCcm93c2VyRW52LFxuICBoYXNTdGFuZGFyZEJyb3dzZXJXZWJXb3JrZXJFbnY6IGhhc1N0YW5kYXJkQnJvd3NlcldlYldvcmtlckVudixcbiAgaGFzU3RhbmRhcmRCcm93c2VyRW52OiBoYXNTdGFuZGFyZEJyb3dzZXJFbnZcbn0pO1xuXG52YXIgcGxhdGZvcm0gPSB7XG4gIC4uLnV0aWxzLFxuICAuLi5wbGF0Zm9ybSQxXG59O1xuXG5mdW5jdGlvbiB0b1VSTEVuY29kZWRGb3JtKGRhdGEsIG9wdGlvbnMpIHtcbiAgcmV0dXJuIHRvRm9ybURhdGEoZGF0YSwgbmV3IHBsYXRmb3JtLmNsYXNzZXMuVVJMU2VhcmNoUGFyYW1zKCksIE9iamVjdC5hc3NpZ24oe1xuICAgIHZpc2l0b3I6IGZ1bmN0aW9uKHZhbHVlLCBrZXksIHBhdGgsIGhlbHBlcnMpIHtcbiAgICAgIGlmIChwbGF0Zm9ybS5pc05vZGUgJiYgdXRpbHMkMS5pc0J1ZmZlcih2YWx1ZSkpIHtcbiAgICAgICAgdGhpcy5hcHBlbmQoa2V5LCB2YWx1ZS50b1N0cmluZygnYmFzZTY0JykpO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBoZWxwZXJzLmRlZmF1bHRWaXNpdG9yLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgfVxuICB9LCBvcHRpb25zKSk7XG59XG5cbi8qKlxuICogSXQgdGFrZXMgYSBzdHJpbmcgbGlrZSBgZm9vW3hdW3ldW3pdYCBhbmQgcmV0dXJucyBhbiBhcnJheSBsaWtlIGBbJ2ZvbycsICd4JywgJ3knLCAneiddXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgLSBUaGUgbmFtZSBvZiB0aGUgcHJvcGVydHkgdG8gZ2V0LlxuICpcbiAqIEByZXR1cm5zIEFuIGFycmF5IG9mIHN0cmluZ3MuXG4gKi9cbmZ1bmN0aW9uIHBhcnNlUHJvcFBhdGgobmFtZSkge1xuICAvLyBmb29beF1beV1bel1cbiAgLy8gZm9vLngueS56XG4gIC8vIGZvby14LXktelxuICAvLyBmb28geCB5IHpcbiAgcmV0dXJuIHV0aWxzJDEubWF0Y2hBbGwoL1xcdyt8XFxbKFxcdyopXS9nLCBuYW1lKS5tYXAobWF0Y2ggPT4ge1xuICAgIHJldHVybiBtYXRjaFswXSA9PT0gJ1tdJyA/ICcnIDogbWF0Y2hbMV0gfHwgbWF0Y2hbMF07XG4gIH0pO1xufVxuXG4vKipcbiAqIENvbnZlcnQgYW4gYXJyYXkgdG8gYW4gb2JqZWN0LlxuICpcbiAqIEBwYXJhbSB7QXJyYXk8YW55Pn0gYXJyIC0gVGhlIGFycmF5IHRvIGNvbnZlcnQgdG8gYW4gb2JqZWN0LlxuICpcbiAqIEByZXR1cm5zIEFuIG9iamVjdCB3aXRoIHRoZSBzYW1lIGtleXMgYW5kIHZhbHVlcyBhcyB0aGUgYXJyYXkuXG4gKi9cbmZ1bmN0aW9uIGFycmF5VG9PYmplY3QoYXJyKSB7XG4gIGNvbnN0IG9iaiA9IHt9O1xuICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMoYXJyKTtcbiAgbGV0IGk7XG4gIGNvbnN0IGxlbiA9IGtleXMubGVuZ3RoO1xuICBsZXQga2V5O1xuICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcbiAgICBrZXkgPSBrZXlzW2ldO1xuICAgIG9ialtrZXldID0gYXJyW2tleV07XG4gIH1cbiAgcmV0dXJuIG9iajtcbn1cblxuLyoqXG4gKiBJdCB0YWtlcyBhIEZvcm1EYXRhIG9iamVjdCBhbmQgcmV0dXJucyBhIEphdmFTY3JpcHQgb2JqZWN0XG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGZvcm1EYXRhIFRoZSBGb3JtRGF0YSBvYmplY3QgdG8gY29udmVydCB0byBKU09OLlxuICpcbiAqIEByZXR1cm5zIHtPYmplY3Q8c3RyaW5nLCBhbnk+IHwgbnVsbH0gVGhlIGNvbnZlcnRlZCBvYmplY3QuXG4gKi9cbmZ1bmN0aW9uIGZvcm1EYXRhVG9KU09OKGZvcm1EYXRhKSB7XG4gIGZ1bmN0aW9uIGJ1aWxkUGF0aChwYXRoLCB2YWx1ZSwgdGFyZ2V0LCBpbmRleCkge1xuICAgIGxldCBuYW1lID0gcGF0aFtpbmRleCsrXTtcbiAgICBjb25zdCBpc051bWVyaWNLZXkgPSBOdW1iZXIuaXNGaW5pdGUoK25hbWUpO1xuICAgIGNvbnN0IGlzTGFzdCA9IGluZGV4ID49IHBhdGgubGVuZ3RoO1xuICAgIG5hbWUgPSAhbmFtZSAmJiB1dGlscyQxLmlzQXJyYXkodGFyZ2V0KSA/IHRhcmdldC5sZW5ndGggOiBuYW1lO1xuXG4gICAgaWYgKGlzTGFzdCkge1xuICAgICAgaWYgKHV0aWxzJDEuaGFzT3duUHJvcCh0YXJnZXQsIG5hbWUpKSB7XG4gICAgICAgIHRhcmdldFtuYW1lXSA9IFt0YXJnZXRbbmFtZV0sIHZhbHVlXTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRhcmdldFtuYW1lXSA9IHZhbHVlO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gIWlzTnVtZXJpY0tleTtcbiAgICB9XG5cbiAgICBpZiAoIXRhcmdldFtuYW1lXSB8fCAhdXRpbHMkMS5pc09iamVjdCh0YXJnZXRbbmFtZV0pKSB7XG4gICAgICB0YXJnZXRbbmFtZV0gPSBbXTtcbiAgICB9XG5cbiAgICBjb25zdCByZXN1bHQgPSBidWlsZFBhdGgocGF0aCwgdmFsdWUsIHRhcmdldFtuYW1lXSwgaW5kZXgpO1xuXG4gICAgaWYgKHJlc3VsdCAmJiB1dGlscyQxLmlzQXJyYXkodGFyZ2V0W25hbWVdKSkge1xuICAgICAgdGFyZ2V0W25hbWVdID0gYXJyYXlUb09iamVjdCh0YXJnZXRbbmFtZV0pO1xuICAgIH1cblxuICAgIHJldHVybiAhaXNOdW1lcmljS2V5O1xuICB9XG5cbiAgaWYgKHV0aWxzJDEuaXNGb3JtRGF0YShmb3JtRGF0YSkgJiYgdXRpbHMkMS5pc0Z1bmN0aW9uKGZvcm1EYXRhLmVudHJpZXMpKSB7XG4gICAgY29uc3Qgb2JqID0ge307XG5cbiAgICB1dGlscyQxLmZvckVhY2hFbnRyeShmb3JtRGF0YSwgKG5hbWUsIHZhbHVlKSA9PiB7XG4gICAgICBidWlsZFBhdGgocGFyc2VQcm9wUGF0aChuYW1lKSwgdmFsdWUsIG9iaiwgMCk7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gb2JqO1xuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59XG5cbi8qKlxuICogSXQgdGFrZXMgYSBzdHJpbmcsIHRyaWVzIHRvIHBhcnNlIGl0LCBhbmQgaWYgaXQgZmFpbHMsIGl0IHJldHVybnMgdGhlIHN0cmluZ2lmaWVkIHZlcnNpb25cbiAqIG9mIHRoZSBpbnB1dFxuICpcbiAqIEBwYXJhbSB7YW55fSByYXdWYWx1ZSAtIFRoZSB2YWx1ZSB0byBiZSBzdHJpbmdpZmllZC5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IHBhcnNlciAtIEEgZnVuY3Rpb24gdGhhdCBwYXJzZXMgYSBzdHJpbmcgaW50byBhIEphdmFTY3JpcHQgb2JqZWN0LlxuICogQHBhcmFtIHtGdW5jdGlvbn0gZW5jb2RlciAtIEEgZnVuY3Rpb24gdGhhdCB0YWtlcyBhIHZhbHVlIGFuZCByZXR1cm5zIGEgc3RyaW5nLlxuICpcbiAqIEByZXR1cm5zIHtzdHJpbmd9IEEgc3RyaW5naWZpZWQgdmVyc2lvbiBvZiB0aGUgcmF3VmFsdWUuXG4gKi9cbmZ1bmN0aW9uIHN0cmluZ2lmeVNhZmVseShyYXdWYWx1ZSwgcGFyc2VyLCBlbmNvZGVyKSB7XG4gIGlmICh1dGlscyQxLmlzU3RyaW5nKHJhd1ZhbHVlKSkge1xuICAgIHRyeSB7XG4gICAgICAocGFyc2VyIHx8IEpTT04ucGFyc2UpKHJhd1ZhbHVlKTtcbiAgICAgIHJldHVybiB1dGlscyQxLnRyaW0ocmF3VmFsdWUpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGlmIChlLm5hbWUgIT09ICdTeW50YXhFcnJvcicpIHtcbiAgICAgICAgdGhyb3cgZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gKGVuY29kZXIgfHwgSlNPTi5zdHJpbmdpZnkpKHJhd1ZhbHVlKTtcbn1cblxuY29uc3QgZGVmYXVsdHMgPSB7XG5cbiAgdHJhbnNpdGlvbmFsOiB0cmFuc2l0aW9uYWxEZWZhdWx0cyxcblxuICBhZGFwdGVyOiBbJ3hocicsICdodHRwJ10sXG5cbiAgdHJhbnNmb3JtUmVxdWVzdDogW2Z1bmN0aW9uIHRyYW5zZm9ybVJlcXVlc3QoZGF0YSwgaGVhZGVycykge1xuICAgIGNvbnN0IGNvbnRlbnRUeXBlID0gaGVhZGVycy5nZXRDb250ZW50VHlwZSgpIHx8ICcnO1xuICAgIGNvbnN0IGhhc0pTT05Db250ZW50VHlwZSA9IGNvbnRlbnRUeXBlLmluZGV4T2YoJ2FwcGxpY2F0aW9uL2pzb24nKSA+IC0xO1xuICAgIGNvbnN0IGlzT2JqZWN0UGF5bG9hZCA9IHV0aWxzJDEuaXNPYmplY3QoZGF0YSk7XG5cbiAgICBpZiAoaXNPYmplY3RQYXlsb2FkICYmIHV0aWxzJDEuaXNIVE1MRm9ybShkYXRhKSkge1xuICAgICAgZGF0YSA9IG5ldyBGb3JtRGF0YShkYXRhKTtcbiAgICB9XG5cbiAgICBjb25zdCBpc0Zvcm1EYXRhID0gdXRpbHMkMS5pc0Zvcm1EYXRhKGRhdGEpO1xuXG4gICAgaWYgKGlzRm9ybURhdGEpIHtcbiAgICAgIGlmICghaGFzSlNPTkNvbnRlbnRUeXBlKSB7XG4gICAgICAgIHJldHVybiBkYXRhO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGhhc0pTT05Db250ZW50VHlwZSA/IEpTT04uc3RyaW5naWZ5KGZvcm1EYXRhVG9KU09OKGRhdGEpKSA6IGRhdGE7XG4gICAgfVxuXG4gICAgaWYgKHV0aWxzJDEuaXNBcnJheUJ1ZmZlcihkYXRhKSB8fFxuICAgICAgdXRpbHMkMS5pc0J1ZmZlcihkYXRhKSB8fFxuICAgICAgdXRpbHMkMS5pc1N0cmVhbShkYXRhKSB8fFxuICAgICAgdXRpbHMkMS5pc0ZpbGUoZGF0YSkgfHxcbiAgICAgIHV0aWxzJDEuaXNCbG9iKGRhdGEpXG4gICAgKSB7XG4gICAgICByZXR1cm4gZGF0YTtcbiAgICB9XG4gICAgaWYgKHV0aWxzJDEuaXNBcnJheUJ1ZmZlclZpZXcoZGF0YSkpIHtcbiAgICAgIHJldHVybiBkYXRhLmJ1ZmZlcjtcbiAgICB9XG4gICAgaWYgKHV0aWxzJDEuaXNVUkxTZWFyY2hQYXJhbXMoZGF0YSkpIHtcbiAgICAgIGhlYWRlcnMuc2V0Q29udGVudFR5cGUoJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZDtjaGFyc2V0PXV0Zi04JywgZmFsc2UpO1xuICAgICAgcmV0dXJuIGRhdGEudG9TdHJpbmcoKTtcbiAgICB9XG5cbiAgICBsZXQgaXNGaWxlTGlzdDtcblxuICAgIGlmIChpc09iamVjdFBheWxvYWQpIHtcbiAgICAgIGlmIChjb250ZW50VHlwZS5pbmRleE9mKCdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQnKSA+IC0xKSB7XG4gICAgICAgIHJldHVybiB0b1VSTEVuY29kZWRGb3JtKGRhdGEsIHRoaXMuZm9ybVNlcmlhbGl6ZXIpLnRvU3RyaW5nKCk7XG4gICAgICB9XG5cbiAgICAgIGlmICgoaXNGaWxlTGlzdCA9IHV0aWxzJDEuaXNGaWxlTGlzdChkYXRhKSkgfHwgY29udGVudFR5cGUuaW5kZXhPZignbXVsdGlwYXJ0L2Zvcm0tZGF0YScpID4gLTEpIHtcbiAgICAgICAgY29uc3QgX0Zvcm1EYXRhID0gdGhpcy5lbnYgJiYgdGhpcy5lbnYuRm9ybURhdGE7XG5cbiAgICAgICAgcmV0dXJuIHRvRm9ybURhdGEoXG4gICAgICAgICAgaXNGaWxlTGlzdCA/IHsnZmlsZXNbXSc6IGRhdGF9IDogZGF0YSxcbiAgICAgICAgICBfRm9ybURhdGEgJiYgbmV3IF9Gb3JtRGF0YSgpLFxuICAgICAgICAgIHRoaXMuZm9ybVNlcmlhbGl6ZXJcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoaXNPYmplY3RQYXlsb2FkIHx8IGhhc0pTT05Db250ZW50VHlwZSApIHtcbiAgICAgIGhlYWRlcnMuc2V0Q29udGVudFR5cGUoJ2FwcGxpY2F0aW9uL2pzb24nLCBmYWxzZSk7XG4gICAgICByZXR1cm4gc3RyaW5naWZ5U2FmZWx5KGRhdGEpO1xuICAgIH1cblxuICAgIHJldHVybiBkYXRhO1xuICB9XSxcblxuICB0cmFuc2Zvcm1SZXNwb25zZTogW2Z1bmN0aW9uIHRyYW5zZm9ybVJlc3BvbnNlKGRhdGEpIHtcbiAgICBjb25zdCB0cmFuc2l0aW9uYWwgPSB0aGlzLnRyYW5zaXRpb25hbCB8fCBkZWZhdWx0cy50cmFuc2l0aW9uYWw7XG4gICAgY29uc3QgZm9yY2VkSlNPTlBhcnNpbmcgPSB0cmFuc2l0aW9uYWwgJiYgdHJhbnNpdGlvbmFsLmZvcmNlZEpTT05QYXJzaW5nO1xuICAgIGNvbnN0IEpTT05SZXF1ZXN0ZWQgPSB0aGlzLnJlc3BvbnNlVHlwZSA9PT0gJ2pzb24nO1xuXG4gICAgaWYgKGRhdGEgJiYgdXRpbHMkMS5pc1N0cmluZyhkYXRhKSAmJiAoKGZvcmNlZEpTT05QYXJzaW5nICYmICF0aGlzLnJlc3BvbnNlVHlwZSkgfHwgSlNPTlJlcXVlc3RlZCkpIHtcbiAgICAgIGNvbnN0IHNpbGVudEpTT05QYXJzaW5nID0gdHJhbnNpdGlvbmFsICYmIHRyYW5zaXRpb25hbC5zaWxlbnRKU09OUGFyc2luZztcbiAgICAgIGNvbnN0IHN0cmljdEpTT05QYXJzaW5nID0gIXNpbGVudEpTT05QYXJzaW5nICYmIEpTT05SZXF1ZXN0ZWQ7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiBKU09OLnBhcnNlKGRhdGEpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBpZiAoc3RyaWN0SlNPTlBhcnNpbmcpIHtcbiAgICAgICAgICBpZiAoZS5uYW1lID09PSAnU3ludGF4RXJyb3InKSB7XG4gICAgICAgICAgICB0aHJvdyBBeGlvc0Vycm9yLmZyb20oZSwgQXhpb3NFcnJvci5FUlJfQkFEX1JFU1BPTlNFLCB0aGlzLCBudWxsLCB0aGlzLnJlc3BvbnNlKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBkYXRhO1xuICB9XSxcblxuICAvKipcbiAgICogQSB0aW1lb3V0IGluIG1pbGxpc2Vjb25kcyB0byBhYm9ydCBhIHJlcXVlc3QuIElmIHNldCB0byAwIChkZWZhdWx0KSBhXG4gICAqIHRpbWVvdXQgaXMgbm90IGNyZWF0ZWQuXG4gICAqL1xuICB0aW1lb3V0OiAwLFxuXG4gIHhzcmZDb29raWVOYW1lOiAnWFNSRi1UT0tFTicsXG4gIHhzcmZIZWFkZXJOYW1lOiAnWC1YU1JGLVRPS0VOJyxcblxuICBtYXhDb250ZW50TGVuZ3RoOiAtMSxcbiAgbWF4Qm9keUxlbmd0aDogLTEsXG5cbiAgZW52OiB7XG4gICAgRm9ybURhdGE6IHBsYXRmb3JtLmNsYXNzZXMuRm9ybURhdGEsXG4gICAgQmxvYjogcGxhdGZvcm0uY2xhc3Nlcy5CbG9iXG4gIH0sXG5cbiAgdmFsaWRhdGVTdGF0dXM6IGZ1bmN0aW9uIHZhbGlkYXRlU3RhdHVzKHN0YXR1cykge1xuICAgIHJldHVybiBzdGF0dXMgPj0gMjAwICYmIHN0YXR1cyA8IDMwMDtcbiAgfSxcblxuICBoZWFkZXJzOiB7XG4gICAgY29tbW9uOiB7XG4gICAgICAnQWNjZXB0JzogJ2FwcGxpY2F0aW9uL2pzb24sIHRleHQvcGxhaW4sICovKicsXG4gICAgICAnQ29udGVudC1UeXBlJzogdW5kZWZpbmVkXG4gICAgfVxuICB9XG59O1xuXG51dGlscyQxLmZvckVhY2goWydkZWxldGUnLCAnZ2V0JywgJ2hlYWQnLCAncG9zdCcsICdwdXQnLCAncGF0Y2gnXSwgKG1ldGhvZCkgPT4ge1xuICBkZWZhdWx0cy5oZWFkZXJzW21ldGhvZF0gPSB7fTtcbn0pO1xuXG52YXIgZGVmYXVsdHMkMSA9IGRlZmF1bHRzO1xuXG4vLyBSYXdBeGlvc0hlYWRlcnMgd2hvc2UgZHVwbGljYXRlcyBhcmUgaWdub3JlZCBieSBub2RlXG4vLyBjLmYuIGh0dHBzOi8vbm9kZWpzLm9yZy9hcGkvaHR0cC5odG1sI2h0dHBfbWVzc2FnZV9oZWFkZXJzXG5jb25zdCBpZ25vcmVEdXBsaWNhdGVPZiA9IHV0aWxzJDEudG9PYmplY3RTZXQoW1xuICAnYWdlJywgJ2F1dGhvcml6YXRpb24nLCAnY29udGVudC1sZW5ndGgnLCAnY29udGVudC10eXBlJywgJ2V0YWcnLFxuICAnZXhwaXJlcycsICdmcm9tJywgJ2hvc3QnLCAnaWYtbW9kaWZpZWQtc2luY2UnLCAnaWYtdW5tb2RpZmllZC1zaW5jZScsXG4gICdsYXN0LW1vZGlmaWVkJywgJ2xvY2F0aW9uJywgJ21heC1mb3J3YXJkcycsICdwcm94eS1hdXRob3JpemF0aW9uJyxcbiAgJ3JlZmVyZXInLCAncmV0cnktYWZ0ZXInLCAndXNlci1hZ2VudCdcbl0pO1xuXG4vKipcbiAqIFBhcnNlIGhlYWRlcnMgaW50byBhbiBvYmplY3RcbiAqXG4gKiBgYGBcbiAqIERhdGU6IFdlZCwgMjcgQXVnIDIwMTQgMDg6NTg6NDkgR01UXG4gKiBDb250ZW50LVR5cGU6IGFwcGxpY2F0aW9uL2pzb25cbiAqIENvbm5lY3Rpb246IGtlZXAtYWxpdmVcbiAqIFRyYW5zZmVyLUVuY29kaW5nOiBjaHVua2VkXG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gcmF3SGVhZGVycyBIZWFkZXJzIG5lZWRpbmcgdG8gYmUgcGFyc2VkXG4gKlxuICogQHJldHVybnMge09iamVjdH0gSGVhZGVycyBwYXJzZWQgaW50byBhbiBvYmplY3RcbiAqL1xudmFyIHBhcnNlSGVhZGVycyA9IHJhd0hlYWRlcnMgPT4ge1xuICBjb25zdCBwYXJzZWQgPSB7fTtcbiAgbGV0IGtleTtcbiAgbGV0IHZhbDtcbiAgbGV0IGk7XG5cbiAgcmF3SGVhZGVycyAmJiByYXdIZWFkZXJzLnNwbGl0KCdcXG4nKS5mb3JFYWNoKGZ1bmN0aW9uIHBhcnNlcihsaW5lKSB7XG4gICAgaSA9IGxpbmUuaW5kZXhPZignOicpO1xuICAgIGtleSA9IGxpbmUuc3Vic3RyaW5nKDAsIGkpLnRyaW0oKS50b0xvd2VyQ2FzZSgpO1xuICAgIHZhbCA9IGxpbmUuc3Vic3RyaW5nKGkgKyAxKS50cmltKCk7XG5cbiAgICBpZiAoIWtleSB8fCAocGFyc2VkW2tleV0gJiYgaWdub3JlRHVwbGljYXRlT2Zba2V5XSkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoa2V5ID09PSAnc2V0LWNvb2tpZScpIHtcbiAgICAgIGlmIChwYXJzZWRba2V5XSkge1xuICAgICAgICBwYXJzZWRba2V5XS5wdXNoKHZhbCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwYXJzZWRba2V5XSA9IFt2YWxdO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBwYXJzZWRba2V5XSA9IHBhcnNlZFtrZXldID8gcGFyc2VkW2tleV0gKyAnLCAnICsgdmFsIDogdmFsO1xuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIHBhcnNlZDtcbn07XG5cbmNvbnN0ICRpbnRlcm5hbHMgPSBTeW1ib2woJ2ludGVybmFscycpO1xuXG5mdW5jdGlvbiBub3JtYWxpemVIZWFkZXIoaGVhZGVyKSB7XG4gIHJldHVybiBoZWFkZXIgJiYgU3RyaW5nKGhlYWRlcikudHJpbSgpLnRvTG93ZXJDYXNlKCk7XG59XG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZVZhbHVlKHZhbHVlKSB7XG4gIGlmICh2YWx1ZSA9PT0gZmFsc2UgfHwgdmFsdWUgPT0gbnVsbCkge1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuXG4gIHJldHVybiB1dGlscyQxLmlzQXJyYXkodmFsdWUpID8gdmFsdWUubWFwKG5vcm1hbGl6ZVZhbHVlKSA6IFN0cmluZyh2YWx1ZSk7XG59XG5cbmZ1bmN0aW9uIHBhcnNlVG9rZW5zKHN0cikge1xuICBjb25zdCB0b2tlbnMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICBjb25zdCB0b2tlbnNSRSA9IC8oW15cXHMsOz1dKylcXHMqKD86PVxccyooW14sO10rKSk/L2c7XG4gIGxldCBtYXRjaDtcblxuICB3aGlsZSAoKG1hdGNoID0gdG9rZW5zUkUuZXhlYyhzdHIpKSkge1xuICAgIHRva2Vuc1ttYXRjaFsxXV0gPSBtYXRjaFsyXTtcbiAgfVxuXG4gIHJldHVybiB0b2tlbnM7XG59XG5cbmNvbnN0IGlzVmFsaWRIZWFkZXJOYW1lID0gKHN0cikgPT4gL15bLV9hLXpBLVowLTleYHx+LCEjJCUmJyorLl0rJC8udGVzdChzdHIudHJpbSgpKTtcblxuZnVuY3Rpb24gbWF0Y2hIZWFkZXJWYWx1ZShjb250ZXh0LCB2YWx1ZSwgaGVhZGVyLCBmaWx0ZXIsIGlzSGVhZGVyTmFtZUZpbHRlcikge1xuICBpZiAodXRpbHMkMS5pc0Z1bmN0aW9uKGZpbHRlcikpIHtcbiAgICByZXR1cm4gZmlsdGVyLmNhbGwodGhpcywgdmFsdWUsIGhlYWRlcik7XG4gIH1cblxuICBpZiAoaXNIZWFkZXJOYW1lRmlsdGVyKSB7XG4gICAgdmFsdWUgPSBoZWFkZXI7XG4gIH1cblxuICBpZiAoIXV0aWxzJDEuaXNTdHJpbmcodmFsdWUpKSByZXR1cm47XG5cbiAgaWYgKHV0aWxzJDEuaXNTdHJpbmcoZmlsdGVyKSkge1xuICAgIHJldHVybiB2YWx1ZS5pbmRleE9mKGZpbHRlcikgIT09IC0xO1xuICB9XG5cbiAgaWYgKHV0aWxzJDEuaXNSZWdFeHAoZmlsdGVyKSkge1xuICAgIHJldHVybiBmaWx0ZXIudGVzdCh2YWx1ZSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gZm9ybWF0SGVhZGVyKGhlYWRlcikge1xuICByZXR1cm4gaGVhZGVyLnRyaW0oKVxuICAgIC50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoLyhbYS16XFxkXSkoXFx3KikvZywgKHcsIGNoYXIsIHN0cikgPT4ge1xuICAgICAgcmV0dXJuIGNoYXIudG9VcHBlckNhc2UoKSArIHN0cjtcbiAgICB9KTtcbn1cblxuZnVuY3Rpb24gYnVpbGRBY2Nlc3NvcnMob2JqLCBoZWFkZXIpIHtcbiAgY29uc3QgYWNjZXNzb3JOYW1lID0gdXRpbHMkMS50b0NhbWVsQ2FzZSgnICcgKyBoZWFkZXIpO1xuXG4gIFsnZ2V0JywgJ3NldCcsICdoYXMnXS5mb3JFYWNoKG1ldGhvZE5hbWUgPT4ge1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIG1ldGhvZE5hbWUgKyBhY2Nlc3Nvck5hbWUsIHtcbiAgICAgIHZhbHVlOiBmdW5jdGlvbihhcmcxLCBhcmcyLCBhcmczKSB7XG4gICAgICAgIHJldHVybiB0aGlzW21ldGhvZE5hbWVdLmNhbGwodGhpcywgaGVhZGVyLCBhcmcxLCBhcmcyLCBhcmczKTtcbiAgICAgIH0sXG4gICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgfSk7XG59XG5cbmNsYXNzIEF4aW9zSGVhZGVycyB7XG4gIGNvbnN0cnVjdG9yKGhlYWRlcnMpIHtcbiAgICBoZWFkZXJzICYmIHRoaXMuc2V0KGhlYWRlcnMpO1xuICB9XG5cbiAgc2V0KGhlYWRlciwgdmFsdWVPclJld3JpdGUsIHJld3JpdGUpIHtcbiAgICBjb25zdCBzZWxmID0gdGhpcztcblxuICAgIGZ1bmN0aW9uIHNldEhlYWRlcihfdmFsdWUsIF9oZWFkZXIsIF9yZXdyaXRlKSB7XG4gICAgICBjb25zdCBsSGVhZGVyID0gbm9ybWFsaXplSGVhZGVyKF9oZWFkZXIpO1xuXG4gICAgICBpZiAoIWxIZWFkZXIpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdoZWFkZXIgbmFtZSBtdXN0IGJlIGEgbm9uLWVtcHR5IHN0cmluZycpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBrZXkgPSB1dGlscyQxLmZpbmRLZXkoc2VsZiwgbEhlYWRlcik7XG5cbiAgICAgIGlmKCFrZXkgfHwgc2VsZltrZXldID09PSB1bmRlZmluZWQgfHwgX3Jld3JpdGUgPT09IHRydWUgfHwgKF9yZXdyaXRlID09PSB1bmRlZmluZWQgJiYgc2VsZltrZXldICE9PSBmYWxzZSkpIHtcbiAgICAgICAgc2VsZltrZXkgfHwgX2hlYWRlcl0gPSBub3JtYWxpemVWYWx1ZShfdmFsdWUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IHNldEhlYWRlcnMgPSAoaGVhZGVycywgX3Jld3JpdGUpID0+XG4gICAgICB1dGlscyQxLmZvckVhY2goaGVhZGVycywgKF92YWx1ZSwgX2hlYWRlcikgPT4gc2V0SGVhZGVyKF92YWx1ZSwgX2hlYWRlciwgX3Jld3JpdGUpKTtcblxuICAgIGlmICh1dGlscyQxLmlzUGxhaW5PYmplY3QoaGVhZGVyKSB8fCBoZWFkZXIgaW5zdGFuY2VvZiB0aGlzLmNvbnN0cnVjdG9yKSB7XG4gICAgICBzZXRIZWFkZXJzKGhlYWRlciwgdmFsdWVPclJld3JpdGUpO1xuICAgIH0gZWxzZSBpZih1dGlscyQxLmlzU3RyaW5nKGhlYWRlcikgJiYgKGhlYWRlciA9IGhlYWRlci50cmltKCkpICYmICFpc1ZhbGlkSGVhZGVyTmFtZShoZWFkZXIpKSB7XG4gICAgICBzZXRIZWFkZXJzKHBhcnNlSGVhZGVycyhoZWFkZXIpLCB2YWx1ZU9yUmV3cml0ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGhlYWRlciAhPSBudWxsICYmIHNldEhlYWRlcih2YWx1ZU9yUmV3cml0ZSwgaGVhZGVyLCByZXdyaXRlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIGdldChoZWFkZXIsIHBhcnNlcikge1xuICAgIGhlYWRlciA9IG5vcm1hbGl6ZUhlYWRlcihoZWFkZXIpO1xuXG4gICAgaWYgKGhlYWRlcikge1xuICAgICAgY29uc3Qga2V5ID0gdXRpbHMkMS5maW5kS2V5KHRoaXMsIGhlYWRlcik7XG5cbiAgICAgIGlmIChrZXkpIHtcbiAgICAgICAgY29uc3QgdmFsdWUgPSB0aGlzW2tleV07XG5cbiAgICAgICAgaWYgKCFwYXJzZXIpIHtcbiAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocGFyc2VyID09PSB0cnVlKSB7XG4gICAgICAgICAgcmV0dXJuIHBhcnNlVG9rZW5zKHZhbHVlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh1dGlscyQxLmlzRnVuY3Rpb24ocGFyc2VyKSkge1xuICAgICAgICAgIHJldHVybiBwYXJzZXIuY2FsbCh0aGlzLCB2YWx1ZSwga2V5KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh1dGlscyQxLmlzUmVnRXhwKHBhcnNlcikpIHtcbiAgICAgICAgICByZXR1cm4gcGFyc2VyLmV4ZWModmFsdWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcigncGFyc2VyIG11c3QgYmUgYm9vbGVhbnxyZWdleHB8ZnVuY3Rpb24nKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBoYXMoaGVhZGVyLCBtYXRjaGVyKSB7XG4gICAgaGVhZGVyID0gbm9ybWFsaXplSGVhZGVyKGhlYWRlcik7XG5cbiAgICBpZiAoaGVhZGVyKSB7XG4gICAgICBjb25zdCBrZXkgPSB1dGlscyQxLmZpbmRLZXkodGhpcywgaGVhZGVyKTtcblxuICAgICAgcmV0dXJuICEhKGtleSAmJiB0aGlzW2tleV0gIT09IHVuZGVmaW5lZCAmJiAoIW1hdGNoZXIgfHwgbWF0Y2hIZWFkZXJWYWx1ZSh0aGlzLCB0aGlzW2tleV0sIGtleSwgbWF0Y2hlcikpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBkZWxldGUoaGVhZGVyLCBtYXRjaGVyKSB7XG4gICAgY29uc3Qgc2VsZiA9IHRoaXM7XG4gICAgbGV0IGRlbGV0ZWQgPSBmYWxzZTtcblxuICAgIGZ1bmN0aW9uIGRlbGV0ZUhlYWRlcihfaGVhZGVyKSB7XG4gICAgICBfaGVhZGVyID0gbm9ybWFsaXplSGVhZGVyKF9oZWFkZXIpO1xuXG4gICAgICBpZiAoX2hlYWRlcikge1xuICAgICAgICBjb25zdCBrZXkgPSB1dGlscyQxLmZpbmRLZXkoc2VsZiwgX2hlYWRlcik7XG5cbiAgICAgICAgaWYgKGtleSAmJiAoIW1hdGNoZXIgfHwgbWF0Y2hIZWFkZXJWYWx1ZShzZWxmLCBzZWxmW2tleV0sIGtleSwgbWF0Y2hlcikpKSB7XG4gICAgICAgICAgZGVsZXRlIHNlbGZba2V5XTtcblxuICAgICAgICAgIGRlbGV0ZWQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHV0aWxzJDEuaXNBcnJheShoZWFkZXIpKSB7XG4gICAgICBoZWFkZXIuZm9yRWFjaChkZWxldGVIZWFkZXIpO1xuICAgIH0gZWxzZSB7XG4gICAgICBkZWxldGVIZWFkZXIoaGVhZGVyKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZGVsZXRlZDtcbiAgfVxuXG4gIGNsZWFyKG1hdGNoZXIpIHtcbiAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXModGhpcyk7XG4gICAgbGV0IGkgPSBrZXlzLmxlbmd0aDtcbiAgICBsZXQgZGVsZXRlZCA9IGZhbHNlO1xuXG4gICAgd2hpbGUgKGktLSkge1xuICAgICAgY29uc3Qga2V5ID0ga2V5c1tpXTtcbiAgICAgIGlmKCFtYXRjaGVyIHx8IG1hdGNoSGVhZGVyVmFsdWUodGhpcywgdGhpc1trZXldLCBrZXksIG1hdGNoZXIsIHRydWUpKSB7XG4gICAgICAgIGRlbGV0ZSB0aGlzW2tleV07XG4gICAgICAgIGRlbGV0ZWQgPSB0cnVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBkZWxldGVkO1xuICB9XG5cbiAgbm9ybWFsaXplKGZvcm1hdCkge1xuICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xuICAgIGNvbnN0IGhlYWRlcnMgPSB7fTtcblxuICAgIHV0aWxzJDEuZm9yRWFjaCh0aGlzLCAodmFsdWUsIGhlYWRlcikgPT4ge1xuICAgICAgY29uc3Qga2V5ID0gdXRpbHMkMS5maW5kS2V5KGhlYWRlcnMsIGhlYWRlcik7XG5cbiAgICAgIGlmIChrZXkpIHtcbiAgICAgICAgc2VsZltrZXldID0gbm9ybWFsaXplVmFsdWUodmFsdWUpO1xuICAgICAgICBkZWxldGUgc2VsZltoZWFkZXJdO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IG5vcm1hbGl6ZWQgPSBmb3JtYXQgPyBmb3JtYXRIZWFkZXIoaGVhZGVyKSA6IFN0cmluZyhoZWFkZXIpLnRyaW0oKTtcblxuICAgICAgaWYgKG5vcm1hbGl6ZWQgIT09IGhlYWRlcikge1xuICAgICAgICBkZWxldGUgc2VsZltoZWFkZXJdO1xuICAgICAgfVxuXG4gICAgICBzZWxmW25vcm1hbGl6ZWRdID0gbm9ybWFsaXplVmFsdWUodmFsdWUpO1xuXG4gICAgICBoZWFkZXJzW25vcm1hbGl6ZWRdID0gdHJ1ZTtcbiAgICB9KTtcblxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgY29uY2F0KC4uLnRhcmdldHMpIHtcbiAgICByZXR1cm4gdGhpcy5jb25zdHJ1Y3Rvci5jb25jYXQodGhpcywgLi4udGFyZ2V0cyk7XG4gIH1cblxuICB0b0pTT04oYXNTdHJpbmdzKSB7XG4gICAgY29uc3Qgb2JqID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcblxuICAgIHV0aWxzJDEuZm9yRWFjaCh0aGlzLCAodmFsdWUsIGhlYWRlcikgPT4ge1xuICAgICAgdmFsdWUgIT0gbnVsbCAmJiB2YWx1ZSAhPT0gZmFsc2UgJiYgKG9ialtoZWFkZXJdID0gYXNTdHJpbmdzICYmIHV0aWxzJDEuaXNBcnJheSh2YWx1ZSkgPyB2YWx1ZS5qb2luKCcsICcpIDogdmFsdWUpO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIG9iajtcbiAgfVxuXG4gIFtTeW1ib2wuaXRlcmF0b3JdKCkge1xuICAgIHJldHVybiBPYmplY3QuZW50cmllcyh0aGlzLnRvSlNPTigpKVtTeW1ib2wuaXRlcmF0b3JdKCk7XG4gIH1cblxuICB0b1N0cmluZygpIHtcbiAgICByZXR1cm4gT2JqZWN0LmVudHJpZXModGhpcy50b0pTT04oKSkubWFwKChbaGVhZGVyLCB2YWx1ZV0pID0+IGhlYWRlciArICc6ICcgKyB2YWx1ZSkuam9pbignXFxuJyk7XG4gIH1cblxuICBnZXQgW1N5bWJvbC50b1N0cmluZ1RhZ10oKSB7XG4gICAgcmV0dXJuICdBeGlvc0hlYWRlcnMnO1xuICB9XG5cbiAgc3RhdGljIGZyb20odGhpbmcpIHtcbiAgICByZXR1cm4gdGhpbmcgaW5zdGFuY2VvZiB0aGlzID8gdGhpbmcgOiBuZXcgdGhpcyh0aGluZyk7XG4gIH1cblxuICBzdGF0aWMgY29uY2F0KGZpcnN0LCAuLi50YXJnZXRzKSB7XG4gICAgY29uc3QgY29tcHV0ZWQgPSBuZXcgdGhpcyhmaXJzdCk7XG5cbiAgICB0YXJnZXRzLmZvckVhY2goKHRhcmdldCkgPT4gY29tcHV0ZWQuc2V0KHRhcmdldCkpO1xuXG4gICAgcmV0dXJuIGNvbXB1dGVkO1xuICB9XG5cbiAgc3RhdGljIGFjY2Vzc29yKGhlYWRlcikge1xuICAgIGNvbnN0IGludGVybmFscyA9IHRoaXNbJGludGVybmFsc10gPSAodGhpc1skaW50ZXJuYWxzXSA9IHtcbiAgICAgIGFjY2Vzc29yczoge31cbiAgICB9KTtcblxuICAgIGNvbnN0IGFjY2Vzc29ycyA9IGludGVybmFscy5hY2Nlc3NvcnM7XG4gICAgY29uc3QgcHJvdG90eXBlID0gdGhpcy5wcm90b3R5cGU7XG5cbiAgICBmdW5jdGlvbiBkZWZpbmVBY2Nlc3NvcihfaGVhZGVyKSB7XG4gICAgICBjb25zdCBsSGVhZGVyID0gbm9ybWFsaXplSGVhZGVyKF9oZWFkZXIpO1xuXG4gICAgICBpZiAoIWFjY2Vzc29yc1tsSGVhZGVyXSkge1xuICAgICAgICBidWlsZEFjY2Vzc29ycyhwcm90b3R5cGUsIF9oZWFkZXIpO1xuICAgICAgICBhY2Nlc3NvcnNbbEhlYWRlcl0gPSB0cnVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIHV0aWxzJDEuaXNBcnJheShoZWFkZXIpID8gaGVhZGVyLmZvckVhY2goZGVmaW5lQWNjZXNzb3IpIDogZGVmaW5lQWNjZXNzb3IoaGVhZGVyKTtcblxuICAgIHJldHVybiB0aGlzO1xuICB9XG59XG5cbkF4aW9zSGVhZGVycy5hY2Nlc3NvcihbJ0NvbnRlbnQtVHlwZScsICdDb250ZW50LUxlbmd0aCcsICdBY2NlcHQnLCAnQWNjZXB0LUVuY29kaW5nJywgJ1VzZXItQWdlbnQnLCAnQXV0aG9yaXphdGlvbiddKTtcblxuLy8gcmVzZXJ2ZWQgbmFtZXMgaG90Zml4XG51dGlscyQxLnJlZHVjZURlc2NyaXB0b3JzKEF4aW9zSGVhZGVycy5wcm90b3R5cGUsICh7dmFsdWV9LCBrZXkpID0+IHtcbiAgbGV0IG1hcHBlZCA9IGtleVswXS50b1VwcGVyQ2FzZSgpICsga2V5LnNsaWNlKDEpOyAvLyBtYXAgYHNldGAgPT4gYFNldGBcbiAgcmV0dXJuIHtcbiAgICBnZXQ6ICgpID0+IHZhbHVlLFxuICAgIHNldChoZWFkZXJWYWx1ZSkge1xuICAgICAgdGhpc1ttYXBwZWRdID0gaGVhZGVyVmFsdWU7XG4gICAgfVxuICB9XG59KTtcblxudXRpbHMkMS5mcmVlemVNZXRob2RzKEF4aW9zSGVhZGVycyk7XG5cbnZhciBBeGlvc0hlYWRlcnMkMSA9IEF4aW9zSGVhZGVycztcblxuLyoqXG4gKiBUcmFuc2Zvcm0gdGhlIGRhdGEgZm9yIGEgcmVxdWVzdCBvciBhIHJlc3BvbnNlXG4gKlxuICogQHBhcmFtIHtBcnJheXxGdW5jdGlvbn0gZm5zIEEgc2luZ2xlIGZ1bmN0aW9uIG9yIEFycmF5IG9mIGZ1bmN0aW9uc1xuICogQHBhcmFtIHs/T2JqZWN0fSByZXNwb25zZSBUaGUgcmVzcG9uc2Ugb2JqZWN0XG4gKlxuICogQHJldHVybnMgeyp9IFRoZSByZXN1bHRpbmcgdHJhbnNmb3JtZWQgZGF0YVxuICovXG5mdW5jdGlvbiB0cmFuc2Zvcm1EYXRhKGZucywgcmVzcG9uc2UpIHtcbiAgY29uc3QgY29uZmlnID0gdGhpcyB8fCBkZWZhdWx0cyQxO1xuICBjb25zdCBjb250ZXh0ID0gcmVzcG9uc2UgfHwgY29uZmlnO1xuICBjb25zdCBoZWFkZXJzID0gQXhpb3NIZWFkZXJzJDEuZnJvbShjb250ZXh0LmhlYWRlcnMpO1xuICBsZXQgZGF0YSA9IGNvbnRleHQuZGF0YTtcblxuICB1dGlscyQxLmZvckVhY2goZm5zLCBmdW5jdGlvbiB0cmFuc2Zvcm0oZm4pIHtcbiAgICBkYXRhID0gZm4uY2FsbChjb25maWcsIGRhdGEsIGhlYWRlcnMubm9ybWFsaXplKCksIHJlc3BvbnNlID8gcmVzcG9uc2Uuc3RhdHVzIDogdW5kZWZpbmVkKTtcbiAgfSk7XG5cbiAgaGVhZGVycy5ub3JtYWxpemUoKTtcblxuICByZXR1cm4gZGF0YTtcbn1cblxuZnVuY3Rpb24gaXNDYW5jZWwodmFsdWUpIHtcbiAgcmV0dXJuICEhKHZhbHVlICYmIHZhbHVlLl9fQ0FOQ0VMX18pO1xufVxuXG4vKipcbiAqIEEgYENhbmNlbGVkRXJyb3JgIGlzIGFuIG9iamVjdCB0aGF0IGlzIHRocm93biB3aGVuIGFuIG9wZXJhdGlvbiBpcyBjYW5jZWxlZC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZz19IG1lc3NhZ2UgVGhlIG1lc3NhZ2UuXG4gKiBAcGFyYW0ge09iamVjdD19IGNvbmZpZyBUaGUgY29uZmlnLlxuICogQHBhcmFtIHtPYmplY3Q9fSByZXF1ZXN0IFRoZSByZXF1ZXN0LlxuICpcbiAqIEByZXR1cm5zIHtDYW5jZWxlZEVycm9yfSBUaGUgY3JlYXRlZCBlcnJvci5cbiAqL1xuZnVuY3Rpb24gQ2FuY2VsZWRFcnJvcihtZXNzYWdlLCBjb25maWcsIHJlcXVlc3QpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWVxLW51bGwsZXFlcWVxXG4gIEF4aW9zRXJyb3IuY2FsbCh0aGlzLCBtZXNzYWdlID09IG51bGwgPyAnY2FuY2VsZWQnIDogbWVzc2FnZSwgQXhpb3NFcnJvci5FUlJfQ0FOQ0VMRUQsIGNvbmZpZywgcmVxdWVzdCk7XG4gIHRoaXMubmFtZSA9ICdDYW5jZWxlZEVycm9yJztcbn1cblxudXRpbHMkMS5pbmhlcml0cyhDYW5jZWxlZEVycm9yLCBBeGlvc0Vycm9yLCB7XG4gIF9fQ0FOQ0VMX186IHRydWVcbn0pO1xuXG4vKipcbiAqIFJlc29sdmUgb3IgcmVqZWN0IGEgUHJvbWlzZSBiYXNlZCBvbiByZXNwb25zZSBzdGF0dXMuXG4gKlxuICogQHBhcmFtIHtGdW5jdGlvbn0gcmVzb2x2ZSBBIGZ1bmN0aW9uIHRoYXQgcmVzb2x2ZXMgdGhlIHByb21pc2UuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSByZWplY3QgQSBmdW5jdGlvbiB0aGF0IHJlamVjdHMgdGhlIHByb21pc2UuXG4gKiBAcGFyYW0ge29iamVjdH0gcmVzcG9uc2UgVGhlIHJlc3BvbnNlLlxuICpcbiAqIEByZXR1cm5zIHtvYmplY3R9IFRoZSByZXNwb25zZS5cbiAqL1xuZnVuY3Rpb24gc2V0dGxlKHJlc29sdmUsIHJlamVjdCwgcmVzcG9uc2UpIHtcbiAgY29uc3QgdmFsaWRhdGVTdGF0dXMgPSByZXNwb25zZS5jb25maWcudmFsaWRhdGVTdGF0dXM7XG4gIGlmICghcmVzcG9uc2Uuc3RhdHVzIHx8ICF2YWxpZGF0ZVN0YXR1cyB8fCB2YWxpZGF0ZVN0YXR1cyhyZXNwb25zZS5zdGF0dXMpKSB7XG4gICAgcmVzb2x2ZShyZXNwb25zZSk7XG4gIH0gZWxzZSB7XG4gICAgcmVqZWN0KG5ldyBBeGlvc0Vycm9yKFxuICAgICAgJ1JlcXVlc3QgZmFpbGVkIHdpdGggc3RhdHVzIGNvZGUgJyArIHJlc3BvbnNlLnN0YXR1cyxcbiAgICAgIFtBeGlvc0Vycm9yLkVSUl9CQURfUkVRVUVTVCwgQXhpb3NFcnJvci5FUlJfQkFEX1JFU1BPTlNFXVtNYXRoLmZsb29yKHJlc3BvbnNlLnN0YXR1cyAvIDEwMCkgLSA0XSxcbiAgICAgIHJlc3BvbnNlLmNvbmZpZyxcbiAgICAgIHJlc3BvbnNlLnJlcXVlc3QsXG4gICAgICByZXNwb25zZVxuICAgICkpO1xuICB9XG59XG5cbnZhciBjb29raWVzID0gcGxhdGZvcm0uaGFzU3RhbmRhcmRCcm93c2VyRW52ID9cblxuICAvLyBTdGFuZGFyZCBicm93c2VyIGVudnMgc3VwcG9ydCBkb2N1bWVudC5jb29raWVcbiAge1xuICAgIHdyaXRlKG5hbWUsIHZhbHVlLCBleHBpcmVzLCBwYXRoLCBkb21haW4sIHNlY3VyZSkge1xuICAgICAgY29uc3QgY29va2llID0gW25hbWUgKyAnPScgKyBlbmNvZGVVUklDb21wb25lbnQodmFsdWUpXTtcblxuICAgICAgdXRpbHMkMS5pc051bWJlcihleHBpcmVzKSAmJiBjb29raWUucHVzaCgnZXhwaXJlcz0nICsgbmV3IERhdGUoZXhwaXJlcykudG9HTVRTdHJpbmcoKSk7XG5cbiAgICAgIHV0aWxzJDEuaXNTdHJpbmcocGF0aCkgJiYgY29va2llLnB1c2goJ3BhdGg9JyArIHBhdGgpO1xuXG4gICAgICB1dGlscyQxLmlzU3RyaW5nKGRvbWFpbikgJiYgY29va2llLnB1c2goJ2RvbWFpbj0nICsgZG9tYWluKTtcblxuICAgICAgc2VjdXJlID09PSB0cnVlICYmIGNvb2tpZS5wdXNoKCdzZWN1cmUnKTtcblxuICAgICAgZG9jdW1lbnQuY29va2llID0gY29va2llLmpvaW4oJzsgJyk7XG4gICAgfSxcblxuICAgIHJlYWQobmFtZSkge1xuICAgICAgY29uc3QgbWF0Y2ggPSBkb2N1bWVudC5jb29raWUubWF0Y2gobmV3IFJlZ0V4cCgnKF58O1xcXFxzKikoJyArIG5hbWUgKyAnKT0oW147XSopJykpO1xuICAgICAgcmV0dXJuIChtYXRjaCA/IGRlY29kZVVSSUNvbXBvbmVudChtYXRjaFszXSkgOiBudWxsKTtcbiAgICB9LFxuXG4gICAgcmVtb3ZlKG5hbWUpIHtcbiAgICAgIHRoaXMud3JpdGUobmFtZSwgJycsIERhdGUubm93KCkgLSA4NjQwMDAwMCk7XG4gICAgfVxuICB9XG5cbiAgOlxuXG4gIC8vIE5vbi1zdGFuZGFyZCBicm93c2VyIGVudiAod2ViIHdvcmtlcnMsIHJlYWN0LW5hdGl2ZSkgbGFjayBuZWVkZWQgc3VwcG9ydC5cbiAge1xuICAgIHdyaXRlKCkge30sXG4gICAgcmVhZCgpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH0sXG4gICAgcmVtb3ZlKCkge31cbiAgfTtcblxuLyoqXG4gKiBEZXRlcm1pbmVzIHdoZXRoZXIgdGhlIHNwZWNpZmllZCBVUkwgaXMgYWJzb2x1dGVcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gdXJsIFRoZSBVUkwgdG8gdGVzdFxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHRoZSBzcGVjaWZpZWQgVVJMIGlzIGFic29sdXRlLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNBYnNvbHV0ZVVSTCh1cmwpIHtcbiAgLy8gQSBVUkwgaXMgY29uc2lkZXJlZCBhYnNvbHV0ZSBpZiBpdCBiZWdpbnMgd2l0aCBcIjxzY2hlbWU+Oi8vXCIgb3IgXCIvL1wiIChwcm90b2NvbC1yZWxhdGl2ZSBVUkwpLlxuICAvLyBSRkMgMzk4NiBkZWZpbmVzIHNjaGVtZSBuYW1lIGFzIGEgc2VxdWVuY2Ugb2YgY2hhcmFjdGVycyBiZWdpbm5pbmcgd2l0aCBhIGxldHRlciBhbmQgZm9sbG93ZWRcbiAgLy8gYnkgYW55IGNvbWJpbmF0aW9uIG9mIGxldHRlcnMsIGRpZ2l0cywgcGx1cywgcGVyaW9kLCBvciBoeXBoZW4uXG4gIHJldHVybiAvXihbYS16XVthLXpcXGQrXFwtLl0qOik/XFwvXFwvL2kudGVzdCh1cmwpO1xufVxuXG4vKipcbiAqIENyZWF0ZXMgYSBuZXcgVVJMIGJ5IGNvbWJpbmluZyB0aGUgc3BlY2lmaWVkIFVSTHNcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gYmFzZVVSTCBUaGUgYmFzZSBVUkxcbiAqIEBwYXJhbSB7c3RyaW5nfSByZWxhdGl2ZVVSTCBUaGUgcmVsYXRpdmUgVVJMXG4gKlxuICogQHJldHVybnMge3N0cmluZ30gVGhlIGNvbWJpbmVkIFVSTFxuICovXG5mdW5jdGlvbiBjb21iaW5lVVJMcyhiYXNlVVJMLCByZWxhdGl2ZVVSTCkge1xuICByZXR1cm4gcmVsYXRpdmVVUkxcbiAgICA/IGJhc2VVUkwucmVwbGFjZSgvXFwvKyQvLCAnJykgKyAnLycgKyByZWxhdGl2ZVVSTC5yZXBsYWNlKC9eXFwvKy8sICcnKVxuICAgIDogYmFzZVVSTDtcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEgbmV3IFVSTCBieSBjb21iaW5pbmcgdGhlIGJhc2VVUkwgd2l0aCB0aGUgcmVxdWVzdGVkVVJMLFxuICogb25seSB3aGVuIHRoZSByZXF1ZXN0ZWRVUkwgaXMgbm90IGFscmVhZHkgYW4gYWJzb2x1dGUgVVJMLlxuICogSWYgdGhlIHJlcXVlc3RVUkwgaXMgYWJzb2x1dGUsIHRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgcmVxdWVzdGVkVVJMIHVudG91Y2hlZC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gYmFzZVVSTCBUaGUgYmFzZSBVUkxcbiAqIEBwYXJhbSB7c3RyaW5nfSByZXF1ZXN0ZWRVUkwgQWJzb2x1dGUgb3IgcmVsYXRpdmUgVVJMIHRvIGNvbWJpbmVcbiAqXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgY29tYmluZWQgZnVsbCBwYXRoXG4gKi9cbmZ1bmN0aW9uIGJ1aWxkRnVsbFBhdGgoYmFzZVVSTCwgcmVxdWVzdGVkVVJMKSB7XG4gIGlmIChiYXNlVVJMICYmICFpc0Fic29sdXRlVVJMKHJlcXVlc3RlZFVSTCkpIHtcbiAgICByZXR1cm4gY29tYmluZVVSTHMoYmFzZVVSTCwgcmVxdWVzdGVkVVJMKTtcbiAgfVxuICByZXR1cm4gcmVxdWVzdGVkVVJMO1xufVxuXG52YXIgaXNVUkxTYW1lT3JpZ2luID0gcGxhdGZvcm0uaGFzU3RhbmRhcmRCcm93c2VyRW52ID9cblxuLy8gU3RhbmRhcmQgYnJvd3NlciBlbnZzIGhhdmUgZnVsbCBzdXBwb3J0IG9mIHRoZSBBUElzIG5lZWRlZCB0byB0ZXN0XG4vLyB3aGV0aGVyIHRoZSByZXF1ZXN0IFVSTCBpcyBvZiB0aGUgc2FtZSBvcmlnaW4gYXMgY3VycmVudCBsb2NhdGlvbi5cbiAgKGZ1bmN0aW9uIHN0YW5kYXJkQnJvd3NlckVudigpIHtcbiAgICBjb25zdCBtc2llID0gLyhtc2llfHRyaWRlbnQpL2kudGVzdChuYXZpZ2F0b3IudXNlckFnZW50KTtcbiAgICBjb25zdCB1cmxQYXJzaW5nTm9kZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKTtcbiAgICBsZXQgb3JpZ2luVVJMO1xuXG4gICAgLyoqXG4gICAgKiBQYXJzZSBhIFVSTCB0byBkaXNjb3ZlciBpdHMgY29tcG9uZW50c1xuICAgICpcbiAgICAqIEBwYXJhbSB7U3RyaW5nfSB1cmwgVGhlIFVSTCB0byBiZSBwYXJzZWRcbiAgICAqIEByZXR1cm5zIHtPYmplY3R9XG4gICAgKi9cbiAgICBmdW5jdGlvbiByZXNvbHZlVVJMKHVybCkge1xuICAgICAgbGV0IGhyZWYgPSB1cmw7XG5cbiAgICAgIGlmIChtc2llKSB7XG4gICAgICAgIC8vIElFIG5lZWRzIGF0dHJpYnV0ZSBzZXQgdHdpY2UgdG8gbm9ybWFsaXplIHByb3BlcnRpZXNcbiAgICAgICAgdXJsUGFyc2luZ05vZGUuc2V0QXR0cmlidXRlKCdocmVmJywgaHJlZik7XG4gICAgICAgIGhyZWYgPSB1cmxQYXJzaW5nTm9kZS5ocmVmO1xuICAgICAgfVxuXG4gICAgICB1cmxQYXJzaW5nTm9kZS5zZXRBdHRyaWJ1dGUoJ2hyZWYnLCBocmVmKTtcblxuICAgICAgLy8gdXJsUGFyc2luZ05vZGUgcHJvdmlkZXMgdGhlIFVybFV0aWxzIGludGVyZmFjZSAtIGh0dHA6Ly91cmwuc3BlYy53aGF0d2cub3JnLyN1cmx1dGlsc1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgaHJlZjogdXJsUGFyc2luZ05vZGUuaHJlZixcbiAgICAgICAgcHJvdG9jb2w6IHVybFBhcnNpbmdOb2RlLnByb3RvY29sID8gdXJsUGFyc2luZ05vZGUucHJvdG9jb2wucmVwbGFjZSgvOiQvLCAnJykgOiAnJyxcbiAgICAgICAgaG9zdDogdXJsUGFyc2luZ05vZGUuaG9zdCxcbiAgICAgICAgc2VhcmNoOiB1cmxQYXJzaW5nTm9kZS5zZWFyY2ggPyB1cmxQYXJzaW5nTm9kZS5zZWFyY2gucmVwbGFjZSgvXlxcPy8sICcnKSA6ICcnLFxuICAgICAgICBoYXNoOiB1cmxQYXJzaW5nTm9kZS5oYXNoID8gdXJsUGFyc2luZ05vZGUuaGFzaC5yZXBsYWNlKC9eIy8sICcnKSA6ICcnLFxuICAgICAgICBob3N0bmFtZTogdXJsUGFyc2luZ05vZGUuaG9zdG5hbWUsXG4gICAgICAgIHBvcnQ6IHVybFBhcnNpbmdOb2RlLnBvcnQsXG4gICAgICAgIHBhdGhuYW1lOiAodXJsUGFyc2luZ05vZGUucGF0aG5hbWUuY2hhckF0KDApID09PSAnLycpID9cbiAgICAgICAgICB1cmxQYXJzaW5nTm9kZS5wYXRobmFtZSA6XG4gICAgICAgICAgJy8nICsgdXJsUGFyc2luZ05vZGUucGF0aG5hbWVcbiAgICAgIH07XG4gICAgfVxuXG4gICAgb3JpZ2luVVJMID0gcmVzb2x2ZVVSTCh3aW5kb3cubG9jYXRpb24uaHJlZik7XG5cbiAgICAvKipcbiAgICAqIERldGVybWluZSBpZiBhIFVSTCBzaGFyZXMgdGhlIHNhbWUgb3JpZ2luIGFzIHRoZSBjdXJyZW50IGxvY2F0aW9uXG4gICAgKlxuICAgICogQHBhcmFtIHtTdHJpbmd9IHJlcXVlc3RVUkwgVGhlIFVSTCB0byB0ZXN0XG4gICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiBVUkwgc2hhcmVzIHRoZSBzYW1lIG9yaWdpbiwgb3RoZXJ3aXNlIGZhbHNlXG4gICAgKi9cbiAgICByZXR1cm4gZnVuY3Rpb24gaXNVUkxTYW1lT3JpZ2luKHJlcXVlc3RVUkwpIHtcbiAgICAgIGNvbnN0IHBhcnNlZCA9ICh1dGlscyQxLmlzU3RyaW5nKHJlcXVlc3RVUkwpKSA/IHJlc29sdmVVUkwocmVxdWVzdFVSTCkgOiByZXF1ZXN0VVJMO1xuICAgICAgcmV0dXJuIChwYXJzZWQucHJvdG9jb2wgPT09IG9yaWdpblVSTC5wcm90b2NvbCAmJlxuICAgICAgICAgIHBhcnNlZC5ob3N0ID09PSBvcmlnaW5VUkwuaG9zdCk7XG4gICAgfTtcbiAgfSkoKSA6XG5cbiAgLy8gTm9uIHN0YW5kYXJkIGJyb3dzZXIgZW52cyAod2ViIHdvcmtlcnMsIHJlYWN0LW5hdGl2ZSkgbGFjayBuZWVkZWQgc3VwcG9ydC5cbiAgKGZ1bmN0aW9uIG5vblN0YW5kYXJkQnJvd3NlckVudigpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gaXNVUkxTYW1lT3JpZ2luKCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfTtcbiAgfSkoKTtcblxuZnVuY3Rpb24gcGFyc2VQcm90b2NvbCh1cmwpIHtcbiAgY29uc3QgbWF0Y2ggPSAvXihbLStcXHddezEsMjV9KSg6P1xcL1xcL3w6KS8uZXhlYyh1cmwpO1xuICByZXR1cm4gbWF0Y2ggJiYgbWF0Y2hbMV0gfHwgJyc7XG59XG5cbi8qKlxuICogQ2FsY3VsYXRlIGRhdGEgbWF4UmF0ZVxuICogQHBhcmFtIHtOdW1iZXJ9IFtzYW1wbGVzQ291bnQ9IDEwXVxuICogQHBhcmFtIHtOdW1iZXJ9IFttaW49IDEwMDBdXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259XG4gKi9cbmZ1bmN0aW9uIHNwZWVkb21ldGVyKHNhbXBsZXNDb3VudCwgbWluKSB7XG4gIHNhbXBsZXNDb3VudCA9IHNhbXBsZXNDb3VudCB8fCAxMDtcbiAgY29uc3QgYnl0ZXMgPSBuZXcgQXJyYXkoc2FtcGxlc0NvdW50KTtcbiAgY29uc3QgdGltZXN0YW1wcyA9IG5ldyBBcnJheShzYW1wbGVzQ291bnQpO1xuICBsZXQgaGVhZCA9IDA7XG4gIGxldCB0YWlsID0gMDtcbiAgbGV0IGZpcnN0U2FtcGxlVFM7XG5cbiAgbWluID0gbWluICE9PSB1bmRlZmluZWQgPyBtaW4gOiAxMDAwO1xuXG4gIHJldHVybiBmdW5jdGlvbiBwdXNoKGNodW5rTGVuZ3RoKSB7XG4gICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcblxuICAgIGNvbnN0IHN0YXJ0ZWRBdCA9IHRpbWVzdGFtcHNbdGFpbF07XG5cbiAgICBpZiAoIWZpcnN0U2FtcGxlVFMpIHtcbiAgICAgIGZpcnN0U2FtcGxlVFMgPSBub3c7XG4gICAgfVxuXG4gICAgYnl0ZXNbaGVhZF0gPSBjaHVua0xlbmd0aDtcbiAgICB0aW1lc3RhbXBzW2hlYWRdID0gbm93O1xuXG4gICAgbGV0IGkgPSB0YWlsO1xuICAgIGxldCBieXRlc0NvdW50ID0gMDtcblxuICAgIHdoaWxlIChpICE9PSBoZWFkKSB7XG4gICAgICBieXRlc0NvdW50ICs9IGJ5dGVzW2krK107XG4gICAgICBpID0gaSAlIHNhbXBsZXNDb3VudDtcbiAgICB9XG5cbiAgICBoZWFkID0gKGhlYWQgKyAxKSAlIHNhbXBsZXNDb3VudDtcblxuICAgIGlmIChoZWFkID09PSB0YWlsKSB7XG4gICAgICB0YWlsID0gKHRhaWwgKyAxKSAlIHNhbXBsZXNDb3VudDtcbiAgICB9XG5cbiAgICBpZiAobm93IC0gZmlyc3RTYW1wbGVUUyA8IG1pbikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHBhc3NlZCA9IHN0YXJ0ZWRBdCAmJiBub3cgLSBzdGFydGVkQXQ7XG5cbiAgICByZXR1cm4gcGFzc2VkID8gTWF0aC5yb3VuZChieXRlc0NvdW50ICogMTAwMCAvIHBhc3NlZCkgOiB1bmRlZmluZWQ7XG4gIH07XG59XG5cbmZ1bmN0aW9uIHByb2dyZXNzRXZlbnRSZWR1Y2VyKGxpc3RlbmVyLCBpc0Rvd25sb2FkU3RyZWFtKSB7XG4gIGxldCBieXRlc05vdGlmaWVkID0gMDtcbiAgY29uc3QgX3NwZWVkb21ldGVyID0gc3BlZWRvbWV0ZXIoNTAsIDI1MCk7XG5cbiAgcmV0dXJuIGUgPT4ge1xuICAgIGNvbnN0IGxvYWRlZCA9IGUubG9hZGVkO1xuICAgIGNvbnN0IHRvdGFsID0gZS5sZW5ndGhDb21wdXRhYmxlID8gZS50b3RhbCA6IHVuZGVmaW5lZDtcbiAgICBjb25zdCBwcm9ncmVzc0J5dGVzID0gbG9hZGVkIC0gYnl0ZXNOb3RpZmllZDtcbiAgICBjb25zdCByYXRlID0gX3NwZWVkb21ldGVyKHByb2dyZXNzQnl0ZXMpO1xuICAgIGNvbnN0IGluUmFuZ2UgPSBsb2FkZWQgPD0gdG90YWw7XG5cbiAgICBieXRlc05vdGlmaWVkID0gbG9hZGVkO1xuXG4gICAgY29uc3QgZGF0YSA9IHtcbiAgICAgIGxvYWRlZCxcbiAgICAgIHRvdGFsLFxuICAgICAgcHJvZ3Jlc3M6IHRvdGFsID8gKGxvYWRlZCAvIHRvdGFsKSA6IHVuZGVmaW5lZCxcbiAgICAgIGJ5dGVzOiBwcm9ncmVzc0J5dGVzLFxuICAgICAgcmF0ZTogcmF0ZSA/IHJhdGUgOiB1bmRlZmluZWQsXG4gICAgICBlc3RpbWF0ZWQ6IHJhdGUgJiYgdG90YWwgJiYgaW5SYW5nZSA/ICh0b3RhbCAtIGxvYWRlZCkgLyByYXRlIDogdW5kZWZpbmVkLFxuICAgICAgZXZlbnQ6IGVcbiAgICB9O1xuXG4gICAgZGF0YVtpc0Rvd25sb2FkU3RyZWFtID8gJ2Rvd25sb2FkJyA6ICd1cGxvYWQnXSA9IHRydWU7XG5cbiAgICBsaXN0ZW5lcihkYXRhKTtcbiAgfTtcbn1cblxuY29uc3QgaXNYSFJBZGFwdGVyU3VwcG9ydGVkID0gdHlwZW9mIFhNTEh0dHBSZXF1ZXN0ICE9PSAndW5kZWZpbmVkJztcblxudmFyIHhockFkYXB0ZXIgPSBpc1hIUkFkYXB0ZXJTdXBwb3J0ZWQgJiYgZnVuY3Rpb24gKGNvbmZpZykge1xuICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gZGlzcGF0Y2hYaHJSZXF1ZXN0KHJlc29sdmUsIHJlamVjdCkge1xuICAgIGxldCByZXF1ZXN0RGF0YSA9IGNvbmZpZy5kYXRhO1xuICAgIGNvbnN0IHJlcXVlc3RIZWFkZXJzID0gQXhpb3NIZWFkZXJzJDEuZnJvbShjb25maWcuaGVhZGVycykubm9ybWFsaXplKCk7XG4gICAgbGV0IHtyZXNwb25zZVR5cGUsIHdpdGhYU1JGVG9rZW59ID0gY29uZmlnO1xuICAgIGxldCBvbkNhbmNlbGVkO1xuICAgIGZ1bmN0aW9uIGRvbmUoKSB7XG4gICAgICBpZiAoY29uZmlnLmNhbmNlbFRva2VuKSB7XG4gICAgICAgIGNvbmZpZy5jYW5jZWxUb2tlbi51bnN1YnNjcmliZShvbkNhbmNlbGVkKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGNvbmZpZy5zaWduYWwpIHtcbiAgICAgICAgY29uZmlnLnNpZ25hbC5yZW1vdmVFdmVudExpc3RlbmVyKCdhYm9ydCcsIG9uQ2FuY2VsZWQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGxldCBjb250ZW50VHlwZTtcblxuICAgIGlmICh1dGlscyQxLmlzRm9ybURhdGEocmVxdWVzdERhdGEpKSB7XG4gICAgICBpZiAocGxhdGZvcm0uaGFzU3RhbmRhcmRCcm93c2VyRW52IHx8IHBsYXRmb3JtLmhhc1N0YW5kYXJkQnJvd3NlcldlYldvcmtlckVudikge1xuICAgICAgICByZXF1ZXN0SGVhZGVycy5zZXRDb250ZW50VHlwZShmYWxzZSk7IC8vIExldCB0aGUgYnJvd3NlciBzZXQgaXRcbiAgICAgIH0gZWxzZSBpZiAoKGNvbnRlbnRUeXBlID0gcmVxdWVzdEhlYWRlcnMuZ2V0Q29udGVudFR5cGUoKSkgIT09IGZhbHNlKSB7XG4gICAgICAgIC8vIGZpeCBzZW1pY29sb24gZHVwbGljYXRpb24gaXNzdWUgZm9yIFJlYWN0TmF0aXZlIEZvcm1EYXRhIGltcGxlbWVudGF0aW9uXG4gICAgICAgIGNvbnN0IFt0eXBlLCAuLi50b2tlbnNdID0gY29udGVudFR5cGUgPyBjb250ZW50VHlwZS5zcGxpdCgnOycpLm1hcCh0b2tlbiA9PiB0b2tlbi50cmltKCkpLmZpbHRlcihCb29sZWFuKSA6IFtdO1xuICAgICAgICByZXF1ZXN0SGVhZGVycy5zZXRDb250ZW50VHlwZShbdHlwZSB8fCAnbXVsdGlwYXJ0L2Zvcm0tZGF0YScsIC4uLnRva2Vuc10uam9pbignOyAnKSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgbGV0IHJlcXVlc3QgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcblxuICAgIC8vIEhUVFAgYmFzaWMgYXV0aGVudGljYXRpb25cbiAgICBpZiAoY29uZmlnLmF1dGgpIHtcbiAgICAgIGNvbnN0IHVzZXJuYW1lID0gY29uZmlnLmF1dGgudXNlcm5hbWUgfHwgJyc7XG4gICAgICBjb25zdCBwYXNzd29yZCA9IGNvbmZpZy5hdXRoLnBhc3N3b3JkID8gdW5lc2NhcGUoZW5jb2RlVVJJQ29tcG9uZW50KGNvbmZpZy5hdXRoLnBhc3N3b3JkKSkgOiAnJztcbiAgICAgIHJlcXVlc3RIZWFkZXJzLnNldCgnQXV0aG9yaXphdGlvbicsICdCYXNpYyAnICsgYnRvYSh1c2VybmFtZSArICc6JyArIHBhc3N3b3JkKSk7XG4gICAgfVxuXG4gICAgY29uc3QgZnVsbFBhdGggPSBidWlsZEZ1bGxQYXRoKGNvbmZpZy5iYXNlVVJMLCBjb25maWcudXJsKTtcblxuICAgIHJlcXVlc3Qub3Blbihjb25maWcubWV0aG9kLnRvVXBwZXJDYXNlKCksIGJ1aWxkVVJMKGZ1bGxQYXRoLCBjb25maWcucGFyYW1zLCBjb25maWcucGFyYW1zU2VyaWFsaXplciksIHRydWUpO1xuXG4gICAgLy8gU2V0IHRoZSByZXF1ZXN0IHRpbWVvdXQgaW4gTVNcbiAgICByZXF1ZXN0LnRpbWVvdXQgPSBjb25maWcudGltZW91dDtcblxuICAgIGZ1bmN0aW9uIG9ubG9hZGVuZCgpIHtcbiAgICAgIGlmICghcmVxdWVzdCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICAvLyBQcmVwYXJlIHRoZSByZXNwb25zZVxuICAgICAgY29uc3QgcmVzcG9uc2VIZWFkZXJzID0gQXhpb3NIZWFkZXJzJDEuZnJvbShcbiAgICAgICAgJ2dldEFsbFJlc3BvbnNlSGVhZGVycycgaW4gcmVxdWVzdCAmJiByZXF1ZXN0LmdldEFsbFJlc3BvbnNlSGVhZGVycygpXG4gICAgICApO1xuICAgICAgY29uc3QgcmVzcG9uc2VEYXRhID0gIXJlc3BvbnNlVHlwZSB8fCByZXNwb25zZVR5cGUgPT09ICd0ZXh0JyB8fCByZXNwb25zZVR5cGUgPT09ICdqc29uJyA/XG4gICAgICAgIHJlcXVlc3QucmVzcG9uc2VUZXh0IDogcmVxdWVzdC5yZXNwb25zZTtcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0ge1xuICAgICAgICBkYXRhOiByZXNwb25zZURhdGEsXG4gICAgICAgIHN0YXR1czogcmVxdWVzdC5zdGF0dXMsXG4gICAgICAgIHN0YXR1c1RleHQ6IHJlcXVlc3Quc3RhdHVzVGV4dCxcbiAgICAgICAgaGVhZGVyczogcmVzcG9uc2VIZWFkZXJzLFxuICAgICAgICBjb25maWcsXG4gICAgICAgIHJlcXVlc3RcbiAgICAgIH07XG5cbiAgICAgIHNldHRsZShmdW5jdGlvbiBfcmVzb2x2ZSh2YWx1ZSkge1xuICAgICAgICByZXNvbHZlKHZhbHVlKTtcbiAgICAgICAgZG9uZSgpO1xuICAgICAgfSwgZnVuY3Rpb24gX3JlamVjdChlcnIpIHtcbiAgICAgICAgcmVqZWN0KGVycik7XG4gICAgICAgIGRvbmUoKTtcbiAgICAgIH0sIHJlc3BvbnNlKTtcblxuICAgICAgLy8gQ2xlYW4gdXAgcmVxdWVzdFxuICAgICAgcmVxdWVzdCA9IG51bGw7XG4gICAgfVxuXG4gICAgaWYgKCdvbmxvYWRlbmQnIGluIHJlcXVlc3QpIHtcbiAgICAgIC8vIFVzZSBvbmxvYWRlbmQgaWYgYXZhaWxhYmxlXG4gICAgICByZXF1ZXN0Lm9ubG9hZGVuZCA9IG9ubG9hZGVuZDtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gTGlzdGVuIGZvciByZWFkeSBzdGF0ZSB0byBlbXVsYXRlIG9ubG9hZGVuZFxuICAgICAgcmVxdWVzdC5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBmdW5jdGlvbiBoYW5kbGVMb2FkKCkge1xuICAgICAgICBpZiAoIXJlcXVlc3QgfHwgcmVxdWVzdC5yZWFkeVN0YXRlICE9PSA0KSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gVGhlIHJlcXVlc3QgZXJyb3JlZCBvdXQgYW5kIHdlIGRpZG4ndCBnZXQgYSByZXNwb25zZSwgdGhpcyB3aWxsIGJlXG4gICAgICAgIC8vIGhhbmRsZWQgYnkgb25lcnJvciBpbnN0ZWFkXG4gICAgICAgIC8vIFdpdGggb25lIGV4Y2VwdGlvbjogcmVxdWVzdCB0aGF0IHVzaW5nIGZpbGU6IHByb3RvY29sLCBtb3N0IGJyb3dzZXJzXG4gICAgICAgIC8vIHdpbGwgcmV0dXJuIHN0YXR1cyBhcyAwIGV2ZW4gdGhvdWdoIGl0J3MgYSBzdWNjZXNzZnVsIHJlcXVlc3RcbiAgICAgICAgaWYgKHJlcXVlc3Quc3RhdHVzID09PSAwICYmICEocmVxdWVzdC5yZXNwb25zZVVSTCAmJiByZXF1ZXN0LnJlc3BvbnNlVVJMLmluZGV4T2YoJ2ZpbGU6JykgPT09IDApKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIC8vIHJlYWR5c3RhdGUgaGFuZGxlciBpcyBjYWxsaW5nIGJlZm9yZSBvbmVycm9yIG9yIG9udGltZW91dCBoYW5kbGVycyxcbiAgICAgICAgLy8gc28gd2Ugc2hvdWxkIGNhbGwgb25sb2FkZW5kIG9uIHRoZSBuZXh0ICd0aWNrJ1xuICAgICAgICBzZXRUaW1lb3V0KG9ubG9hZGVuZCk7XG4gICAgICB9O1xuICAgIH1cblxuICAgIC8vIEhhbmRsZSBicm93c2VyIHJlcXVlc3QgY2FuY2VsbGF0aW9uIChhcyBvcHBvc2VkIHRvIGEgbWFudWFsIGNhbmNlbGxhdGlvbilcbiAgICByZXF1ZXN0Lm9uYWJvcnQgPSBmdW5jdGlvbiBoYW5kbGVBYm9ydCgpIHtcbiAgICAgIGlmICghcmVxdWVzdCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHJlamVjdChuZXcgQXhpb3NFcnJvcignUmVxdWVzdCBhYm9ydGVkJywgQXhpb3NFcnJvci5FQ09OTkFCT1JURUQsIGNvbmZpZywgcmVxdWVzdCkpO1xuXG4gICAgICAvLyBDbGVhbiB1cCByZXF1ZXN0XG4gICAgICByZXF1ZXN0ID0gbnVsbDtcbiAgICB9O1xuXG4gICAgLy8gSGFuZGxlIGxvdyBsZXZlbCBuZXR3b3JrIGVycm9yc1xuICAgIHJlcXVlc3Qub25lcnJvciA9IGZ1bmN0aW9uIGhhbmRsZUVycm9yKCkge1xuICAgICAgLy8gUmVhbCBlcnJvcnMgYXJlIGhpZGRlbiBmcm9tIHVzIGJ5IHRoZSBicm93c2VyXG4gICAgICAvLyBvbmVycm9yIHNob3VsZCBvbmx5IGZpcmUgaWYgaXQncyBhIG5ldHdvcmsgZXJyb3JcbiAgICAgIHJlamVjdChuZXcgQXhpb3NFcnJvcignTmV0d29yayBFcnJvcicsIEF4aW9zRXJyb3IuRVJSX05FVFdPUkssIGNvbmZpZywgcmVxdWVzdCkpO1xuXG4gICAgICAvLyBDbGVhbiB1cCByZXF1ZXN0XG4gICAgICByZXF1ZXN0ID0gbnVsbDtcbiAgICB9O1xuXG4gICAgLy8gSGFuZGxlIHRpbWVvdXRcbiAgICByZXF1ZXN0Lm9udGltZW91dCA9IGZ1bmN0aW9uIGhhbmRsZVRpbWVvdXQoKSB7XG4gICAgICBsZXQgdGltZW91dEVycm9yTWVzc2FnZSA9IGNvbmZpZy50aW1lb3V0ID8gJ3RpbWVvdXQgb2YgJyArIGNvbmZpZy50aW1lb3V0ICsgJ21zIGV4Y2VlZGVkJyA6ICd0aW1lb3V0IGV4Y2VlZGVkJztcbiAgICAgIGNvbnN0IHRyYW5zaXRpb25hbCA9IGNvbmZpZy50cmFuc2l0aW9uYWwgfHwgdHJhbnNpdGlvbmFsRGVmYXVsdHM7XG4gICAgICBpZiAoY29uZmlnLnRpbWVvdXRFcnJvck1lc3NhZ2UpIHtcbiAgICAgICAgdGltZW91dEVycm9yTWVzc2FnZSA9IGNvbmZpZy50aW1lb3V0RXJyb3JNZXNzYWdlO1xuICAgICAgfVxuICAgICAgcmVqZWN0KG5ldyBBeGlvc0Vycm9yKFxuICAgICAgICB0aW1lb3V0RXJyb3JNZXNzYWdlLFxuICAgICAgICB0cmFuc2l0aW9uYWwuY2xhcmlmeVRpbWVvdXRFcnJvciA/IEF4aW9zRXJyb3IuRVRJTUVET1VUIDogQXhpb3NFcnJvci5FQ09OTkFCT1JURUQsXG4gICAgICAgIGNvbmZpZyxcbiAgICAgICAgcmVxdWVzdCkpO1xuXG4gICAgICAvLyBDbGVhbiB1cCByZXF1ZXN0XG4gICAgICByZXF1ZXN0ID0gbnVsbDtcbiAgICB9O1xuXG4gICAgLy8gQWRkIHhzcmYgaGVhZGVyXG4gICAgLy8gVGhpcyBpcyBvbmx5IGRvbmUgaWYgcnVubmluZyBpbiBhIHN0YW5kYXJkIGJyb3dzZXIgZW52aXJvbm1lbnQuXG4gICAgLy8gU3BlY2lmaWNhbGx5IG5vdCBpZiB3ZSdyZSBpbiBhIHdlYiB3b3JrZXIsIG9yIHJlYWN0LW5hdGl2ZS5cbiAgICBpZihwbGF0Zm9ybS5oYXNTdGFuZGFyZEJyb3dzZXJFbnYpIHtcbiAgICAgIHdpdGhYU1JGVG9rZW4gJiYgdXRpbHMkMS5pc0Z1bmN0aW9uKHdpdGhYU1JGVG9rZW4pICYmICh3aXRoWFNSRlRva2VuID0gd2l0aFhTUkZUb2tlbihjb25maWcpKTtcblxuICAgICAgaWYgKHdpdGhYU1JGVG9rZW4gfHwgKHdpdGhYU1JGVG9rZW4gIT09IGZhbHNlICYmIGlzVVJMU2FtZU9yaWdpbihmdWxsUGF0aCkpKSB7XG4gICAgICAgIC8vIEFkZCB4c3JmIGhlYWRlclxuICAgICAgICBjb25zdCB4c3JmVmFsdWUgPSBjb25maWcueHNyZkhlYWRlck5hbWUgJiYgY29uZmlnLnhzcmZDb29raWVOYW1lICYmIGNvb2tpZXMucmVhZChjb25maWcueHNyZkNvb2tpZU5hbWUpO1xuXG4gICAgICAgIGlmICh4c3JmVmFsdWUpIHtcbiAgICAgICAgICByZXF1ZXN0SGVhZGVycy5zZXQoY29uZmlnLnhzcmZIZWFkZXJOYW1lLCB4c3JmVmFsdWUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gUmVtb3ZlIENvbnRlbnQtVHlwZSBpZiBkYXRhIGlzIHVuZGVmaW5lZFxuICAgIHJlcXVlc3REYXRhID09PSB1bmRlZmluZWQgJiYgcmVxdWVzdEhlYWRlcnMuc2V0Q29udGVudFR5cGUobnVsbCk7XG5cbiAgICAvLyBBZGQgaGVhZGVycyB0byB0aGUgcmVxdWVzdFxuICAgIGlmICgnc2V0UmVxdWVzdEhlYWRlcicgaW4gcmVxdWVzdCkge1xuICAgICAgdXRpbHMkMS5mb3JFYWNoKHJlcXVlc3RIZWFkZXJzLnRvSlNPTigpLCBmdW5jdGlvbiBzZXRSZXF1ZXN0SGVhZGVyKHZhbCwga2V5KSB7XG4gICAgICAgIHJlcXVlc3Quc2V0UmVxdWVzdEhlYWRlcihrZXksIHZhbCk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyBBZGQgd2l0aENyZWRlbnRpYWxzIHRvIHJlcXVlc3QgaWYgbmVlZGVkXG4gICAgaWYgKCF1dGlscyQxLmlzVW5kZWZpbmVkKGNvbmZpZy53aXRoQ3JlZGVudGlhbHMpKSB7XG4gICAgICByZXF1ZXN0LndpdGhDcmVkZW50aWFscyA9ICEhY29uZmlnLndpdGhDcmVkZW50aWFscztcbiAgICB9XG5cbiAgICAvLyBBZGQgcmVzcG9uc2VUeXBlIHRvIHJlcXVlc3QgaWYgbmVlZGVkXG4gICAgaWYgKHJlc3BvbnNlVHlwZSAmJiByZXNwb25zZVR5cGUgIT09ICdqc29uJykge1xuICAgICAgcmVxdWVzdC5yZXNwb25zZVR5cGUgPSBjb25maWcucmVzcG9uc2VUeXBlO1xuICAgIH1cblxuICAgIC8vIEhhbmRsZSBwcm9ncmVzcyBpZiBuZWVkZWRcbiAgICBpZiAodHlwZW9mIGNvbmZpZy5vbkRvd25sb2FkUHJvZ3Jlc3MgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHJlcXVlc3QuYWRkRXZlbnRMaXN0ZW5lcigncHJvZ3Jlc3MnLCBwcm9ncmVzc0V2ZW50UmVkdWNlcihjb25maWcub25Eb3dubG9hZFByb2dyZXNzLCB0cnVlKSk7XG4gICAgfVxuXG4gICAgLy8gTm90IGFsbCBicm93c2VycyBzdXBwb3J0IHVwbG9hZCBldmVudHNcbiAgICBpZiAodHlwZW9mIGNvbmZpZy5vblVwbG9hZFByb2dyZXNzID09PSAnZnVuY3Rpb24nICYmIHJlcXVlc3QudXBsb2FkKSB7XG4gICAgICByZXF1ZXN0LnVwbG9hZC5hZGRFdmVudExpc3RlbmVyKCdwcm9ncmVzcycsIHByb2dyZXNzRXZlbnRSZWR1Y2VyKGNvbmZpZy5vblVwbG9hZFByb2dyZXNzKSk7XG4gICAgfVxuXG4gICAgaWYgKGNvbmZpZy5jYW5jZWxUb2tlbiB8fCBjb25maWcuc2lnbmFsKSB7XG4gICAgICAvLyBIYW5kbGUgY2FuY2VsbGF0aW9uXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZnVuYy1uYW1lc1xuICAgICAgb25DYW5jZWxlZCA9IGNhbmNlbCA9PiB7XG4gICAgICAgIGlmICghcmVxdWVzdCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICByZWplY3QoIWNhbmNlbCB8fCBjYW5jZWwudHlwZSA/IG5ldyBDYW5jZWxlZEVycm9yKG51bGwsIGNvbmZpZywgcmVxdWVzdCkgOiBjYW5jZWwpO1xuICAgICAgICByZXF1ZXN0LmFib3J0KCk7XG4gICAgICAgIHJlcXVlc3QgPSBudWxsO1xuICAgICAgfTtcblxuICAgICAgY29uZmlnLmNhbmNlbFRva2VuICYmIGNvbmZpZy5jYW5jZWxUb2tlbi5zdWJzY3JpYmUob25DYW5jZWxlZCk7XG4gICAgICBpZiAoY29uZmlnLnNpZ25hbCkge1xuICAgICAgICBjb25maWcuc2lnbmFsLmFib3J0ZWQgPyBvbkNhbmNlbGVkKCkgOiBjb25maWcuc2lnbmFsLmFkZEV2ZW50TGlzdGVuZXIoJ2Fib3J0Jywgb25DYW5jZWxlZCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgcHJvdG9jb2wgPSBwYXJzZVByb3RvY29sKGZ1bGxQYXRoKTtcblxuICAgIGlmIChwcm90b2NvbCAmJiBwbGF0Zm9ybS5wcm90b2NvbHMuaW5kZXhPZihwcm90b2NvbCkgPT09IC0xKSB7XG4gICAgICByZWplY3QobmV3IEF4aW9zRXJyb3IoJ1Vuc3VwcG9ydGVkIHByb3RvY29sICcgKyBwcm90b2NvbCArICc6JywgQXhpb3NFcnJvci5FUlJfQkFEX1JFUVVFU1QsIGNvbmZpZykpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuXG4gICAgLy8gU2VuZCB0aGUgcmVxdWVzdFxuICAgIHJlcXVlc3Quc2VuZChyZXF1ZXN0RGF0YSB8fCBudWxsKTtcbiAgfSk7XG59O1xuXG5jb25zdCBrbm93bkFkYXB0ZXJzID0ge1xuICBodHRwOiBodHRwQWRhcHRlcixcbiAgeGhyOiB4aHJBZGFwdGVyXG59O1xuXG51dGlscyQxLmZvckVhY2goa25vd25BZGFwdGVycywgKGZuLCB2YWx1ZSkgPT4ge1xuICBpZiAoZm4pIHtcbiAgICB0cnkge1xuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGZuLCAnbmFtZScsIHt2YWx1ZX0pO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1lbXB0eVxuICAgIH1cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZm4sICdhZGFwdGVyTmFtZScsIHt2YWx1ZX0pO1xuICB9XG59KTtcblxuY29uc3QgcmVuZGVyUmVhc29uID0gKHJlYXNvbikgPT4gYC0gJHtyZWFzb259YDtcblxuY29uc3QgaXNSZXNvbHZlZEhhbmRsZSA9IChhZGFwdGVyKSA9PiB1dGlscyQxLmlzRnVuY3Rpb24oYWRhcHRlcikgfHwgYWRhcHRlciA9PT0gbnVsbCB8fCBhZGFwdGVyID09PSBmYWxzZTtcblxudmFyIGFkYXB0ZXJzID0ge1xuICBnZXRBZGFwdGVyOiAoYWRhcHRlcnMpID0+IHtcbiAgICBhZGFwdGVycyA9IHV0aWxzJDEuaXNBcnJheShhZGFwdGVycykgPyBhZGFwdGVycyA6IFthZGFwdGVyc107XG5cbiAgICBjb25zdCB7bGVuZ3RofSA9IGFkYXB0ZXJzO1xuICAgIGxldCBuYW1lT3JBZGFwdGVyO1xuICAgIGxldCBhZGFwdGVyO1xuXG4gICAgY29uc3QgcmVqZWN0ZWRSZWFzb25zID0ge307XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICBuYW1lT3JBZGFwdGVyID0gYWRhcHRlcnNbaV07XG4gICAgICBsZXQgaWQ7XG5cbiAgICAgIGFkYXB0ZXIgPSBuYW1lT3JBZGFwdGVyO1xuXG4gICAgICBpZiAoIWlzUmVzb2x2ZWRIYW5kbGUobmFtZU9yQWRhcHRlcikpIHtcbiAgICAgICAgYWRhcHRlciA9IGtub3duQWRhcHRlcnNbKGlkID0gU3RyaW5nKG5hbWVPckFkYXB0ZXIpKS50b0xvd2VyQ2FzZSgpXTtcblxuICAgICAgICBpZiAoYWRhcHRlciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEF4aW9zRXJyb3IoYFVua25vd24gYWRhcHRlciAnJHtpZH0nYCk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKGFkYXB0ZXIpIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICAgIHJlamVjdGVkUmVhc29uc1tpZCB8fCAnIycgKyBpXSA9IGFkYXB0ZXI7XG4gICAgfVxuXG4gICAgaWYgKCFhZGFwdGVyKSB7XG5cbiAgICAgIGNvbnN0IHJlYXNvbnMgPSBPYmplY3QuZW50cmllcyhyZWplY3RlZFJlYXNvbnMpXG4gICAgICAgIC5tYXAoKFtpZCwgc3RhdGVdKSA9PiBgYWRhcHRlciAke2lkfSBgICtcbiAgICAgICAgICAoc3RhdGUgPT09IGZhbHNlID8gJ2lzIG5vdCBzdXBwb3J0ZWQgYnkgdGhlIGVudmlyb25tZW50JyA6ICdpcyBub3QgYXZhaWxhYmxlIGluIHRoZSBidWlsZCcpXG4gICAgICAgICk7XG5cbiAgICAgIGxldCBzID0gbGVuZ3RoID9cbiAgICAgICAgKHJlYXNvbnMubGVuZ3RoID4gMSA/ICdzaW5jZSA6XFxuJyArIHJlYXNvbnMubWFwKHJlbmRlclJlYXNvbikuam9pbignXFxuJykgOiAnICcgKyByZW5kZXJSZWFzb24ocmVhc29uc1swXSkpIDpcbiAgICAgICAgJ2FzIG5vIGFkYXB0ZXIgc3BlY2lmaWVkJztcblxuICAgICAgdGhyb3cgbmV3IEF4aW9zRXJyb3IoXG4gICAgICAgIGBUaGVyZSBpcyBubyBzdWl0YWJsZSBhZGFwdGVyIHRvIGRpc3BhdGNoIHRoZSByZXF1ZXN0IGAgKyBzLFxuICAgICAgICAnRVJSX05PVF9TVVBQT1JUJ1xuICAgICAgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gYWRhcHRlcjtcbiAgfSxcbiAgYWRhcHRlcnM6IGtub3duQWRhcHRlcnNcbn07XG5cbi8qKlxuICogVGhyb3dzIGEgYENhbmNlbGVkRXJyb3JgIGlmIGNhbmNlbGxhdGlvbiBoYXMgYmVlbiByZXF1ZXN0ZWQuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGNvbmZpZyBUaGUgY29uZmlnIHRoYXQgaXMgdG8gYmUgdXNlZCBmb3IgdGhlIHJlcXVlc3RcbiAqXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuZnVuY3Rpb24gdGhyb3dJZkNhbmNlbGxhdGlvblJlcXVlc3RlZChjb25maWcpIHtcbiAgaWYgKGNvbmZpZy5jYW5jZWxUb2tlbikge1xuICAgIGNvbmZpZy5jYW5jZWxUb2tlbi50aHJvd0lmUmVxdWVzdGVkKCk7XG4gIH1cblxuICBpZiAoY29uZmlnLnNpZ25hbCAmJiBjb25maWcuc2lnbmFsLmFib3J0ZWQpIHtcbiAgICB0aHJvdyBuZXcgQ2FuY2VsZWRFcnJvcihudWxsLCBjb25maWcpO1xuICB9XG59XG5cbi8qKlxuICogRGlzcGF0Y2ggYSByZXF1ZXN0IHRvIHRoZSBzZXJ2ZXIgdXNpbmcgdGhlIGNvbmZpZ3VyZWQgYWRhcHRlci5cbiAqXG4gKiBAcGFyYW0ge29iamVjdH0gY29uZmlnIFRoZSBjb25maWcgdGhhdCBpcyB0byBiZSB1c2VkIGZvciB0aGUgcmVxdWVzdFxuICpcbiAqIEByZXR1cm5zIHtQcm9taXNlfSBUaGUgUHJvbWlzZSB0byBiZSBmdWxmaWxsZWRcbiAqL1xuZnVuY3Rpb24gZGlzcGF0Y2hSZXF1ZXN0KGNvbmZpZykge1xuICB0aHJvd0lmQ2FuY2VsbGF0aW9uUmVxdWVzdGVkKGNvbmZpZyk7XG5cbiAgY29uZmlnLmhlYWRlcnMgPSBBeGlvc0hlYWRlcnMkMS5mcm9tKGNvbmZpZy5oZWFkZXJzKTtcblxuICAvLyBUcmFuc2Zvcm0gcmVxdWVzdCBkYXRhXG4gIGNvbmZpZy5kYXRhID0gdHJhbnNmb3JtRGF0YS5jYWxsKFxuICAgIGNvbmZpZyxcbiAgICBjb25maWcudHJhbnNmb3JtUmVxdWVzdFxuICApO1xuXG4gIGlmIChbJ3Bvc3QnLCAncHV0JywgJ3BhdGNoJ10uaW5kZXhPZihjb25maWcubWV0aG9kKSAhPT0gLTEpIHtcbiAgICBjb25maWcuaGVhZGVycy5zZXRDb250ZW50VHlwZSgnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJywgZmFsc2UpO1xuICB9XG5cbiAgY29uc3QgYWRhcHRlciA9IGFkYXB0ZXJzLmdldEFkYXB0ZXIoY29uZmlnLmFkYXB0ZXIgfHwgZGVmYXVsdHMkMS5hZGFwdGVyKTtcblxuICByZXR1cm4gYWRhcHRlcihjb25maWcpLnRoZW4oZnVuY3Rpb24gb25BZGFwdGVyUmVzb2x1dGlvbihyZXNwb25zZSkge1xuICAgIHRocm93SWZDYW5jZWxsYXRpb25SZXF1ZXN0ZWQoY29uZmlnKTtcblxuICAgIC8vIFRyYW5zZm9ybSByZXNwb25zZSBkYXRhXG4gICAgcmVzcG9uc2UuZGF0YSA9IHRyYW5zZm9ybURhdGEuY2FsbChcbiAgICAgIGNvbmZpZyxcbiAgICAgIGNvbmZpZy50cmFuc2Zvcm1SZXNwb25zZSxcbiAgICAgIHJlc3BvbnNlXG4gICAgKTtcblxuICAgIHJlc3BvbnNlLmhlYWRlcnMgPSBBeGlvc0hlYWRlcnMkMS5mcm9tKHJlc3BvbnNlLmhlYWRlcnMpO1xuXG4gICAgcmV0dXJuIHJlc3BvbnNlO1xuICB9LCBmdW5jdGlvbiBvbkFkYXB0ZXJSZWplY3Rpb24ocmVhc29uKSB7XG4gICAgaWYgKCFpc0NhbmNlbChyZWFzb24pKSB7XG4gICAgICB0aHJvd0lmQ2FuY2VsbGF0aW9uUmVxdWVzdGVkKGNvbmZpZyk7XG5cbiAgICAgIC8vIFRyYW5zZm9ybSByZXNwb25zZSBkYXRhXG4gICAgICBpZiAocmVhc29uICYmIHJlYXNvbi5yZXNwb25zZSkge1xuICAgICAgICByZWFzb24ucmVzcG9uc2UuZGF0YSA9IHRyYW5zZm9ybURhdGEuY2FsbChcbiAgICAgICAgICBjb25maWcsXG4gICAgICAgICAgY29uZmlnLnRyYW5zZm9ybVJlc3BvbnNlLFxuICAgICAgICAgIHJlYXNvbi5yZXNwb25zZVxuICAgICAgICApO1xuICAgICAgICByZWFzb24ucmVzcG9uc2UuaGVhZGVycyA9IEF4aW9zSGVhZGVycyQxLmZyb20ocmVhc29uLnJlc3BvbnNlLmhlYWRlcnMpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBQcm9taXNlLnJlamVjdChyZWFzb24pO1xuICB9KTtcbn1cblxuY29uc3QgaGVhZGVyc1RvT2JqZWN0ID0gKHRoaW5nKSA9PiB0aGluZyBpbnN0YW5jZW9mIEF4aW9zSGVhZGVycyQxID8gdGhpbmcudG9KU09OKCkgOiB0aGluZztcblxuLyoqXG4gKiBDb25maWctc3BlY2lmaWMgbWVyZ2UtZnVuY3Rpb24gd2hpY2ggY3JlYXRlcyBhIG5ldyBjb25maWctb2JqZWN0XG4gKiBieSBtZXJnaW5nIHR3byBjb25maWd1cmF0aW9uIG9iamVjdHMgdG9nZXRoZXIuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGNvbmZpZzFcbiAqIEBwYXJhbSB7T2JqZWN0fSBjb25maWcyXG4gKlxuICogQHJldHVybnMge09iamVjdH0gTmV3IG9iamVjdCByZXN1bHRpbmcgZnJvbSBtZXJnaW5nIGNvbmZpZzIgdG8gY29uZmlnMVxuICovXG5mdW5jdGlvbiBtZXJnZUNvbmZpZyhjb25maWcxLCBjb25maWcyKSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuICBjb25maWcyID0gY29uZmlnMiB8fCB7fTtcbiAgY29uc3QgY29uZmlnID0ge307XG5cbiAgZnVuY3Rpb24gZ2V0TWVyZ2VkVmFsdWUodGFyZ2V0LCBzb3VyY2UsIGNhc2VsZXNzKSB7XG4gICAgaWYgKHV0aWxzJDEuaXNQbGFpbk9iamVjdCh0YXJnZXQpICYmIHV0aWxzJDEuaXNQbGFpbk9iamVjdChzb3VyY2UpKSB7XG4gICAgICByZXR1cm4gdXRpbHMkMS5tZXJnZS5jYWxsKHtjYXNlbGVzc30sIHRhcmdldCwgc291cmNlKTtcbiAgICB9IGVsc2UgaWYgKHV0aWxzJDEuaXNQbGFpbk9iamVjdChzb3VyY2UpKSB7XG4gICAgICByZXR1cm4gdXRpbHMkMS5tZXJnZSh7fSwgc291cmNlKTtcbiAgICB9IGVsc2UgaWYgKHV0aWxzJDEuaXNBcnJheShzb3VyY2UpKSB7XG4gICAgICByZXR1cm4gc291cmNlLnNsaWNlKCk7XG4gICAgfVxuICAgIHJldHVybiBzb3VyY2U7XG4gIH1cblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY29uc2lzdGVudC1yZXR1cm5cbiAgZnVuY3Rpb24gbWVyZ2VEZWVwUHJvcGVydGllcyhhLCBiLCBjYXNlbGVzcykge1xuICAgIGlmICghdXRpbHMkMS5pc1VuZGVmaW5lZChiKSkge1xuICAgICAgcmV0dXJuIGdldE1lcmdlZFZhbHVlKGEsIGIsIGNhc2VsZXNzKTtcbiAgICB9IGVsc2UgaWYgKCF1dGlscyQxLmlzVW5kZWZpbmVkKGEpKSB7XG4gICAgICByZXR1cm4gZ2V0TWVyZ2VkVmFsdWUodW5kZWZpbmVkLCBhLCBjYXNlbGVzcyk7XG4gICAgfVxuICB9XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGNvbnNpc3RlbnQtcmV0dXJuXG4gIGZ1bmN0aW9uIHZhbHVlRnJvbUNvbmZpZzIoYSwgYikge1xuICAgIGlmICghdXRpbHMkMS5pc1VuZGVmaW5lZChiKSkge1xuICAgICAgcmV0dXJuIGdldE1lcmdlZFZhbHVlKHVuZGVmaW5lZCwgYik7XG4gICAgfVxuICB9XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGNvbnNpc3RlbnQtcmV0dXJuXG4gIGZ1bmN0aW9uIGRlZmF1bHRUb0NvbmZpZzIoYSwgYikge1xuICAgIGlmICghdXRpbHMkMS5pc1VuZGVmaW5lZChiKSkge1xuICAgICAgcmV0dXJuIGdldE1lcmdlZFZhbHVlKHVuZGVmaW5lZCwgYik7XG4gICAgfSBlbHNlIGlmICghdXRpbHMkMS5pc1VuZGVmaW5lZChhKSkge1xuICAgICAgcmV0dXJuIGdldE1lcmdlZFZhbHVlKHVuZGVmaW5lZCwgYSk7XG4gICAgfVxuICB9XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGNvbnNpc3RlbnQtcmV0dXJuXG4gIGZ1bmN0aW9uIG1lcmdlRGlyZWN0S2V5cyhhLCBiLCBwcm9wKSB7XG4gICAgaWYgKHByb3AgaW4gY29uZmlnMikge1xuICAgICAgcmV0dXJuIGdldE1lcmdlZFZhbHVlKGEsIGIpO1xuICAgIH0gZWxzZSBpZiAocHJvcCBpbiBjb25maWcxKSB7XG4gICAgICByZXR1cm4gZ2V0TWVyZ2VkVmFsdWUodW5kZWZpbmVkLCBhKTtcbiAgICB9XG4gIH1cblxuICBjb25zdCBtZXJnZU1hcCA9IHtcbiAgICB1cmw6IHZhbHVlRnJvbUNvbmZpZzIsXG4gICAgbWV0aG9kOiB2YWx1ZUZyb21Db25maWcyLFxuICAgIGRhdGE6IHZhbHVlRnJvbUNvbmZpZzIsXG4gICAgYmFzZVVSTDogZGVmYXVsdFRvQ29uZmlnMixcbiAgICB0cmFuc2Zvcm1SZXF1ZXN0OiBkZWZhdWx0VG9Db25maWcyLFxuICAgIHRyYW5zZm9ybVJlc3BvbnNlOiBkZWZhdWx0VG9Db25maWcyLFxuICAgIHBhcmFtc1NlcmlhbGl6ZXI6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgdGltZW91dDogZGVmYXVsdFRvQ29uZmlnMixcbiAgICB0aW1lb3V0TWVzc2FnZTogZGVmYXVsdFRvQ29uZmlnMixcbiAgICB3aXRoQ3JlZGVudGlhbHM6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgd2l0aFhTUkZUb2tlbjogZGVmYXVsdFRvQ29uZmlnMixcbiAgICBhZGFwdGVyOiBkZWZhdWx0VG9Db25maWcyLFxuICAgIHJlc3BvbnNlVHlwZTogZGVmYXVsdFRvQ29uZmlnMixcbiAgICB4c3JmQ29va2llTmFtZTogZGVmYXVsdFRvQ29uZmlnMixcbiAgICB4c3JmSGVhZGVyTmFtZTogZGVmYXVsdFRvQ29uZmlnMixcbiAgICBvblVwbG9hZFByb2dyZXNzOiBkZWZhdWx0VG9Db25maWcyLFxuICAgIG9uRG93bmxvYWRQcm9ncmVzczogZGVmYXVsdFRvQ29uZmlnMixcbiAgICBkZWNvbXByZXNzOiBkZWZhdWx0VG9Db25maWcyLFxuICAgIG1heENvbnRlbnRMZW5ndGg6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgbWF4Qm9keUxlbmd0aDogZGVmYXVsdFRvQ29uZmlnMixcbiAgICBiZWZvcmVSZWRpcmVjdDogZGVmYXVsdFRvQ29uZmlnMixcbiAgICB0cmFuc3BvcnQ6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgaHR0cEFnZW50OiBkZWZhdWx0VG9Db25maWcyLFxuICAgIGh0dHBzQWdlbnQ6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgY2FuY2VsVG9rZW46IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgc29ja2V0UGF0aDogZGVmYXVsdFRvQ29uZmlnMixcbiAgICByZXNwb25zZUVuY29kaW5nOiBkZWZhdWx0VG9Db25maWcyLFxuICAgIHZhbGlkYXRlU3RhdHVzOiBtZXJnZURpcmVjdEtleXMsXG4gICAgaGVhZGVyczogKGEsIGIpID0+IG1lcmdlRGVlcFByb3BlcnRpZXMoaGVhZGVyc1RvT2JqZWN0KGEpLCBoZWFkZXJzVG9PYmplY3QoYiksIHRydWUpXG4gIH07XG5cbiAgdXRpbHMkMS5mb3JFYWNoKE9iamVjdC5rZXlzKE9iamVjdC5hc3NpZ24oe30sIGNvbmZpZzEsIGNvbmZpZzIpKSwgZnVuY3Rpb24gY29tcHV0ZUNvbmZpZ1ZhbHVlKHByb3ApIHtcbiAgICBjb25zdCBtZXJnZSA9IG1lcmdlTWFwW3Byb3BdIHx8IG1lcmdlRGVlcFByb3BlcnRpZXM7XG4gICAgY29uc3QgY29uZmlnVmFsdWUgPSBtZXJnZShjb25maWcxW3Byb3BdLCBjb25maWcyW3Byb3BdLCBwcm9wKTtcbiAgICAodXRpbHMkMS5pc1VuZGVmaW5lZChjb25maWdWYWx1ZSkgJiYgbWVyZ2UgIT09IG1lcmdlRGlyZWN0S2V5cykgfHwgKGNvbmZpZ1twcm9wXSA9IGNvbmZpZ1ZhbHVlKTtcbiAgfSk7XG5cbiAgcmV0dXJuIGNvbmZpZztcbn1cblxuY29uc3QgVkVSU0lPTiA9IFwiMS42LjJcIjtcblxuY29uc3QgdmFsaWRhdG9ycyQxID0ge307XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBmdW5jLW5hbWVzXG5bJ29iamVjdCcsICdib29sZWFuJywgJ251bWJlcicsICdmdW5jdGlvbicsICdzdHJpbmcnLCAnc3ltYm9sJ10uZm9yRWFjaCgodHlwZSwgaSkgPT4ge1xuICB2YWxpZGF0b3JzJDFbdHlwZV0gPSBmdW5jdGlvbiB2YWxpZGF0b3IodGhpbmcpIHtcbiAgICByZXR1cm4gdHlwZW9mIHRoaW5nID09PSB0eXBlIHx8ICdhJyArIChpIDwgMSA/ICduICcgOiAnICcpICsgdHlwZTtcbiAgfTtcbn0pO1xuXG5jb25zdCBkZXByZWNhdGVkV2FybmluZ3MgPSB7fTtcblxuLyoqXG4gKiBUcmFuc2l0aW9uYWwgb3B0aW9uIHZhbGlkYXRvclxuICpcbiAqIEBwYXJhbSB7ZnVuY3Rpb258Ym9vbGVhbj99IHZhbGlkYXRvciAtIHNldCB0byBmYWxzZSBpZiB0aGUgdHJhbnNpdGlvbmFsIG9wdGlvbiBoYXMgYmVlbiByZW1vdmVkXG4gKiBAcGFyYW0ge3N0cmluZz99IHZlcnNpb24gLSBkZXByZWNhdGVkIHZlcnNpb24gLyByZW1vdmVkIHNpbmNlIHZlcnNpb25cbiAqIEBwYXJhbSB7c3RyaW5nP30gbWVzc2FnZSAtIHNvbWUgbWVzc2FnZSB3aXRoIGFkZGl0aW9uYWwgaW5mb1xuICpcbiAqIEByZXR1cm5zIHtmdW5jdGlvbn1cbiAqL1xudmFsaWRhdG9ycyQxLnRyYW5zaXRpb25hbCA9IGZ1bmN0aW9uIHRyYW5zaXRpb25hbCh2YWxpZGF0b3IsIHZlcnNpb24sIG1lc3NhZ2UpIHtcbiAgZnVuY3Rpb24gZm9ybWF0TWVzc2FnZShvcHQsIGRlc2MpIHtcbiAgICByZXR1cm4gJ1tBeGlvcyB2JyArIFZFUlNJT04gKyAnXSBUcmFuc2l0aW9uYWwgb3B0aW9uIFxcJycgKyBvcHQgKyAnXFwnJyArIGRlc2MgKyAobWVzc2FnZSA/ICcuICcgKyBtZXNzYWdlIDogJycpO1xuICB9XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGZ1bmMtbmFtZXNcbiAgcmV0dXJuICh2YWx1ZSwgb3B0LCBvcHRzKSA9PiB7XG4gICAgaWYgKHZhbGlkYXRvciA9PT0gZmFsc2UpIHtcbiAgICAgIHRocm93IG5ldyBBeGlvc0Vycm9yKFxuICAgICAgICBmb3JtYXRNZXNzYWdlKG9wdCwgJyBoYXMgYmVlbiByZW1vdmVkJyArICh2ZXJzaW9uID8gJyBpbiAnICsgdmVyc2lvbiA6ICcnKSksXG4gICAgICAgIEF4aW9zRXJyb3IuRVJSX0RFUFJFQ0FURURcbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKHZlcnNpb24gJiYgIWRlcHJlY2F0ZWRXYXJuaW5nc1tvcHRdKSB7XG4gICAgICBkZXByZWNhdGVkV2FybmluZ3Nbb3B0XSA9IHRydWU7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICBmb3JtYXRNZXNzYWdlKFxuICAgICAgICAgIG9wdCxcbiAgICAgICAgICAnIGhhcyBiZWVuIGRlcHJlY2F0ZWQgc2luY2UgdicgKyB2ZXJzaW9uICsgJyBhbmQgd2lsbCBiZSByZW1vdmVkIGluIHRoZSBuZWFyIGZ1dHVyZSdcbiAgICAgICAgKVxuICAgICAgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdmFsaWRhdG9yID8gdmFsaWRhdG9yKHZhbHVlLCBvcHQsIG9wdHMpIDogdHJ1ZTtcbiAgfTtcbn07XG5cbi8qKlxuICogQXNzZXJ0IG9iamVjdCdzIHByb3BlcnRpZXMgdHlwZVxuICpcbiAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zXG4gKiBAcGFyYW0ge29iamVjdH0gc2NoZW1hXG4gKiBAcGFyYW0ge2Jvb2xlYW4/fSBhbGxvd1Vua25vd25cbiAqXG4gKiBAcmV0dXJucyB7b2JqZWN0fVxuICovXG5cbmZ1bmN0aW9uIGFzc2VydE9wdGlvbnMob3B0aW9ucywgc2NoZW1hLCBhbGxvd1Vua25vd24pIHtcbiAgaWYgKHR5cGVvZiBvcHRpb25zICE9PSAnb2JqZWN0Jykge1xuICAgIHRocm93IG5ldyBBeGlvc0Vycm9yKCdvcHRpb25zIG11c3QgYmUgYW4gb2JqZWN0JywgQXhpb3NFcnJvci5FUlJfQkFEX09QVElPTl9WQUxVRSk7XG4gIH1cbiAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKG9wdGlvbnMpO1xuICBsZXQgaSA9IGtleXMubGVuZ3RoO1xuICB3aGlsZSAoaS0tID4gMCkge1xuICAgIGNvbnN0IG9wdCA9IGtleXNbaV07XG4gICAgY29uc3QgdmFsaWRhdG9yID0gc2NoZW1hW29wdF07XG4gICAgaWYgKHZhbGlkYXRvcikge1xuICAgICAgY29uc3QgdmFsdWUgPSBvcHRpb25zW29wdF07XG4gICAgICBjb25zdCByZXN1bHQgPSB2YWx1ZSA9PT0gdW5kZWZpbmVkIHx8IHZhbGlkYXRvcih2YWx1ZSwgb3B0LCBvcHRpb25zKTtcbiAgICAgIGlmIChyZXN1bHQgIT09IHRydWUpIHtcbiAgICAgICAgdGhyb3cgbmV3IEF4aW9zRXJyb3IoJ29wdGlvbiAnICsgb3B0ICsgJyBtdXN0IGJlICcgKyByZXN1bHQsIEF4aW9zRXJyb3IuRVJSX0JBRF9PUFRJT05fVkFMVUUpO1xuICAgICAgfVxuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGlmIChhbGxvd1Vua25vd24gIT09IHRydWUpIHtcbiAgICAgIHRocm93IG5ldyBBeGlvc0Vycm9yKCdVbmtub3duIG9wdGlvbiAnICsgb3B0LCBBeGlvc0Vycm9yLkVSUl9CQURfT1BUSU9OKTtcbiAgICB9XG4gIH1cbn1cblxudmFyIHZhbGlkYXRvciA9IHtcbiAgYXNzZXJ0T3B0aW9ucyxcbiAgdmFsaWRhdG9yczogdmFsaWRhdG9ycyQxXG59O1xuXG5jb25zdCB2YWxpZGF0b3JzID0gdmFsaWRhdG9yLnZhbGlkYXRvcnM7XG5cbi8qKlxuICogQ3JlYXRlIGEgbmV3IGluc3RhbmNlIG9mIEF4aW9zXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGluc3RhbmNlQ29uZmlnIFRoZSBkZWZhdWx0IGNvbmZpZyBmb3IgdGhlIGluc3RhbmNlXG4gKlxuICogQHJldHVybiB7QXhpb3N9IEEgbmV3IGluc3RhbmNlIG9mIEF4aW9zXG4gKi9cbmNsYXNzIEF4aW9zIHtcbiAgY29uc3RydWN0b3IoaW5zdGFuY2VDb25maWcpIHtcbiAgICB0aGlzLmRlZmF1bHRzID0gaW5zdGFuY2VDb25maWc7XG4gICAgdGhpcy5pbnRlcmNlcHRvcnMgPSB7XG4gICAgICByZXF1ZXN0OiBuZXcgSW50ZXJjZXB0b3JNYW5hZ2VyJDEoKSxcbiAgICAgIHJlc3BvbnNlOiBuZXcgSW50ZXJjZXB0b3JNYW5hZ2VyJDEoKVxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogRGlzcGF0Y2ggYSByZXF1ZXN0XG4gICAqXG4gICAqIEBwYXJhbSB7U3RyaW5nfE9iamVjdH0gY29uZmlnT3JVcmwgVGhlIGNvbmZpZyBzcGVjaWZpYyBmb3IgdGhpcyByZXF1ZXN0IChtZXJnZWQgd2l0aCB0aGlzLmRlZmF1bHRzKVxuICAgKiBAcGFyYW0gez9PYmplY3R9IGNvbmZpZ1xuICAgKlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZX0gVGhlIFByb21pc2UgdG8gYmUgZnVsZmlsbGVkXG4gICAqL1xuICByZXF1ZXN0KGNvbmZpZ09yVXJsLCBjb25maWcpIHtcbiAgICAvKmVzbGludCBuby1wYXJhbS1yZWFzc2lnbjowKi9cbiAgICAvLyBBbGxvdyBmb3IgYXhpb3MoJ2V4YW1wbGUvdXJsJ1ssIGNvbmZpZ10pIGEgbGEgZmV0Y2ggQVBJXG4gICAgaWYgKHR5cGVvZiBjb25maWdPclVybCA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGNvbmZpZyA9IGNvbmZpZyB8fCB7fTtcbiAgICAgIGNvbmZpZy51cmwgPSBjb25maWdPclVybDtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uZmlnID0gY29uZmlnT3JVcmwgfHwge307XG4gICAgfVxuXG4gICAgY29uZmlnID0gbWVyZ2VDb25maWcodGhpcy5kZWZhdWx0cywgY29uZmlnKTtcblxuICAgIGNvbnN0IHt0cmFuc2l0aW9uYWwsIHBhcmFtc1NlcmlhbGl6ZXIsIGhlYWRlcnN9ID0gY29uZmlnO1xuXG4gICAgaWYgKHRyYW5zaXRpb25hbCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB2YWxpZGF0b3IuYXNzZXJ0T3B0aW9ucyh0cmFuc2l0aW9uYWwsIHtcbiAgICAgICAgc2lsZW50SlNPTlBhcnNpbmc6IHZhbGlkYXRvcnMudHJhbnNpdGlvbmFsKHZhbGlkYXRvcnMuYm9vbGVhbiksXG4gICAgICAgIGZvcmNlZEpTT05QYXJzaW5nOiB2YWxpZGF0b3JzLnRyYW5zaXRpb25hbCh2YWxpZGF0b3JzLmJvb2xlYW4pLFxuICAgICAgICBjbGFyaWZ5VGltZW91dEVycm9yOiB2YWxpZGF0b3JzLnRyYW5zaXRpb25hbCh2YWxpZGF0b3JzLmJvb2xlYW4pXG4gICAgICB9LCBmYWxzZSk7XG4gICAgfVxuXG4gICAgaWYgKHBhcmFtc1NlcmlhbGl6ZXIgIT0gbnVsbCkge1xuICAgICAgaWYgKHV0aWxzJDEuaXNGdW5jdGlvbihwYXJhbXNTZXJpYWxpemVyKSkge1xuICAgICAgICBjb25maWcucGFyYW1zU2VyaWFsaXplciA9IHtcbiAgICAgICAgICBzZXJpYWxpemU6IHBhcmFtc1NlcmlhbGl6ZXJcbiAgICAgICAgfTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhbGlkYXRvci5hc3NlcnRPcHRpb25zKHBhcmFtc1NlcmlhbGl6ZXIsIHtcbiAgICAgICAgICBlbmNvZGU6IHZhbGlkYXRvcnMuZnVuY3Rpb24sXG4gICAgICAgICAgc2VyaWFsaXplOiB2YWxpZGF0b3JzLmZ1bmN0aW9uXG4gICAgICAgIH0sIHRydWUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFNldCBjb25maWcubWV0aG9kXG4gICAgY29uZmlnLm1ldGhvZCA9IChjb25maWcubWV0aG9kIHx8IHRoaXMuZGVmYXVsdHMubWV0aG9kIHx8ICdnZXQnKS50b0xvd2VyQ2FzZSgpO1xuXG4gICAgLy8gRmxhdHRlbiBoZWFkZXJzXG4gICAgbGV0IGNvbnRleHRIZWFkZXJzID0gaGVhZGVycyAmJiB1dGlscyQxLm1lcmdlKFxuICAgICAgaGVhZGVycy5jb21tb24sXG4gICAgICBoZWFkZXJzW2NvbmZpZy5tZXRob2RdXG4gICAgKTtcblxuICAgIGhlYWRlcnMgJiYgdXRpbHMkMS5mb3JFYWNoKFxuICAgICAgWydkZWxldGUnLCAnZ2V0JywgJ2hlYWQnLCAncG9zdCcsICdwdXQnLCAncGF0Y2gnLCAnY29tbW9uJ10sXG4gICAgICAobWV0aG9kKSA9PiB7XG4gICAgICAgIGRlbGV0ZSBoZWFkZXJzW21ldGhvZF07XG4gICAgICB9XG4gICAgKTtcblxuICAgIGNvbmZpZy5oZWFkZXJzID0gQXhpb3NIZWFkZXJzJDEuY29uY2F0KGNvbnRleHRIZWFkZXJzLCBoZWFkZXJzKTtcblxuICAgIC8vIGZpbHRlciBvdXQgc2tpcHBlZCBpbnRlcmNlcHRvcnNcbiAgICBjb25zdCByZXF1ZXN0SW50ZXJjZXB0b3JDaGFpbiA9IFtdO1xuICAgIGxldCBzeW5jaHJvbm91c1JlcXVlc3RJbnRlcmNlcHRvcnMgPSB0cnVlO1xuICAgIHRoaXMuaW50ZXJjZXB0b3JzLnJlcXVlc3QuZm9yRWFjaChmdW5jdGlvbiB1bnNoaWZ0UmVxdWVzdEludGVyY2VwdG9ycyhpbnRlcmNlcHRvcikge1xuICAgICAgaWYgKHR5cGVvZiBpbnRlcmNlcHRvci5ydW5XaGVuID09PSAnZnVuY3Rpb24nICYmIGludGVyY2VwdG9yLnJ1bldoZW4oY29uZmlnKSA9PT0gZmFsc2UpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBzeW5jaHJvbm91c1JlcXVlc3RJbnRlcmNlcHRvcnMgPSBzeW5jaHJvbm91c1JlcXVlc3RJbnRlcmNlcHRvcnMgJiYgaW50ZXJjZXB0b3Iuc3luY2hyb25vdXM7XG5cbiAgICAgIHJlcXVlc3RJbnRlcmNlcHRvckNoYWluLnVuc2hpZnQoaW50ZXJjZXB0b3IuZnVsZmlsbGVkLCBpbnRlcmNlcHRvci5yZWplY3RlZCk7XG4gICAgfSk7XG5cbiAgICBjb25zdCByZXNwb25zZUludGVyY2VwdG9yQ2hhaW4gPSBbXTtcbiAgICB0aGlzLmludGVyY2VwdG9ycy5yZXNwb25zZS5mb3JFYWNoKGZ1bmN0aW9uIHB1c2hSZXNwb25zZUludGVyY2VwdG9ycyhpbnRlcmNlcHRvcikge1xuICAgICAgcmVzcG9uc2VJbnRlcmNlcHRvckNoYWluLnB1c2goaW50ZXJjZXB0b3IuZnVsZmlsbGVkLCBpbnRlcmNlcHRvci5yZWplY3RlZCk7XG4gICAgfSk7XG5cbiAgICBsZXQgcHJvbWlzZTtcbiAgICBsZXQgaSA9IDA7XG4gICAgbGV0IGxlbjtcblxuICAgIGlmICghc3luY2hyb25vdXNSZXF1ZXN0SW50ZXJjZXB0b3JzKSB7XG4gICAgICBjb25zdCBjaGFpbiA9IFtkaXNwYXRjaFJlcXVlc3QuYmluZCh0aGlzKSwgdW5kZWZpbmVkXTtcbiAgICAgIGNoYWluLnVuc2hpZnQuYXBwbHkoY2hhaW4sIHJlcXVlc3RJbnRlcmNlcHRvckNoYWluKTtcbiAgICAgIGNoYWluLnB1c2guYXBwbHkoY2hhaW4sIHJlc3BvbnNlSW50ZXJjZXB0b3JDaGFpbik7XG4gICAgICBsZW4gPSBjaGFpbi5sZW5ndGg7XG5cbiAgICAgIHByb21pc2UgPSBQcm9taXNlLnJlc29sdmUoY29uZmlnKTtcblxuICAgICAgd2hpbGUgKGkgPCBsZW4pIHtcbiAgICAgICAgcHJvbWlzZSA9IHByb21pc2UudGhlbihjaGFpbltpKytdLCBjaGFpbltpKytdKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHByb21pc2U7XG4gICAgfVxuXG4gICAgbGVuID0gcmVxdWVzdEludGVyY2VwdG9yQ2hhaW4ubGVuZ3RoO1xuXG4gICAgbGV0IG5ld0NvbmZpZyA9IGNvbmZpZztcblxuICAgIGkgPSAwO1xuXG4gICAgd2hpbGUgKGkgPCBsZW4pIHtcbiAgICAgIGNvbnN0IG9uRnVsZmlsbGVkID0gcmVxdWVzdEludGVyY2VwdG9yQ2hhaW5baSsrXTtcbiAgICAgIGNvbnN0IG9uUmVqZWN0ZWQgPSByZXF1ZXN0SW50ZXJjZXB0b3JDaGFpbltpKytdO1xuICAgICAgdHJ5IHtcbiAgICAgICAgbmV3Q29uZmlnID0gb25GdWxmaWxsZWQobmV3Q29uZmlnKTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIG9uUmVqZWN0ZWQuY2FsbCh0aGlzLCBlcnJvcik7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICBwcm9taXNlID0gZGlzcGF0Y2hSZXF1ZXN0LmNhbGwodGhpcywgbmV3Q29uZmlnKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KGVycm9yKTtcbiAgICB9XG5cbiAgICBpID0gMDtcbiAgICBsZW4gPSByZXNwb25zZUludGVyY2VwdG9yQ2hhaW4ubGVuZ3RoO1xuXG4gICAgd2hpbGUgKGkgPCBsZW4pIHtcbiAgICAgIHByb21pc2UgPSBwcm9taXNlLnRoZW4ocmVzcG9uc2VJbnRlcmNlcHRvckNoYWluW2krK10sIHJlc3BvbnNlSW50ZXJjZXB0b3JDaGFpbltpKytdKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcHJvbWlzZTtcbiAgfVxuXG4gIGdldFVyaShjb25maWcpIHtcbiAgICBjb25maWcgPSBtZXJnZUNvbmZpZyh0aGlzLmRlZmF1bHRzLCBjb25maWcpO1xuICAgIGNvbnN0IGZ1bGxQYXRoID0gYnVpbGRGdWxsUGF0aChjb25maWcuYmFzZVVSTCwgY29uZmlnLnVybCk7XG4gICAgcmV0dXJuIGJ1aWxkVVJMKGZ1bGxQYXRoLCBjb25maWcucGFyYW1zLCBjb25maWcucGFyYW1zU2VyaWFsaXplcik7XG4gIH1cbn1cblxuLy8gUHJvdmlkZSBhbGlhc2VzIGZvciBzdXBwb3J0ZWQgcmVxdWVzdCBtZXRob2RzXG51dGlscyQxLmZvckVhY2goWydkZWxldGUnLCAnZ2V0JywgJ2hlYWQnLCAnb3B0aW9ucyddLCBmdW5jdGlvbiBmb3JFYWNoTWV0aG9kTm9EYXRhKG1ldGhvZCkge1xuICAvKmVzbGludCBmdW5jLW5hbWVzOjAqL1xuICBBeGlvcy5wcm90b3R5cGVbbWV0aG9kXSA9IGZ1bmN0aW9uKHVybCwgY29uZmlnKSB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdChtZXJnZUNvbmZpZyhjb25maWcgfHwge30sIHtcbiAgICAgIG1ldGhvZCxcbiAgICAgIHVybCxcbiAgICAgIGRhdGE6IChjb25maWcgfHwge30pLmRhdGFcbiAgICB9KSk7XG4gIH07XG59KTtcblxudXRpbHMkMS5mb3JFYWNoKFsncG9zdCcsICdwdXQnLCAncGF0Y2gnXSwgZnVuY3Rpb24gZm9yRWFjaE1ldGhvZFdpdGhEYXRhKG1ldGhvZCkge1xuICAvKmVzbGludCBmdW5jLW5hbWVzOjAqL1xuXG4gIGZ1bmN0aW9uIGdlbmVyYXRlSFRUUE1ldGhvZChpc0Zvcm0pIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gaHR0cE1ldGhvZCh1cmwsIGRhdGEsIGNvbmZpZykge1xuICAgICAgcmV0dXJuIHRoaXMucmVxdWVzdChtZXJnZUNvbmZpZyhjb25maWcgfHwge30sIHtcbiAgICAgICAgbWV0aG9kLFxuICAgICAgICBoZWFkZXJzOiBpc0Zvcm0gPyB7XG4gICAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdtdWx0aXBhcnQvZm9ybS1kYXRhJ1xuICAgICAgICB9IDoge30sXG4gICAgICAgIHVybCxcbiAgICAgICAgZGF0YVxuICAgICAgfSkpO1xuICAgIH07XG4gIH1cblxuICBBeGlvcy5wcm90b3R5cGVbbWV0aG9kXSA9IGdlbmVyYXRlSFRUUE1ldGhvZCgpO1xuXG4gIEF4aW9zLnByb3RvdHlwZVttZXRob2QgKyAnRm9ybSddID0gZ2VuZXJhdGVIVFRQTWV0aG9kKHRydWUpO1xufSk7XG5cbnZhciBBeGlvcyQxID0gQXhpb3M7XG5cbi8qKlxuICogQSBgQ2FuY2VsVG9rZW5gIGlzIGFuIG9iamVjdCB0aGF0IGNhbiBiZSB1c2VkIHRvIHJlcXVlc3QgY2FuY2VsbGF0aW9uIG9mIGFuIG9wZXJhdGlvbi5cbiAqXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBleGVjdXRvciBUaGUgZXhlY3V0b3IgZnVuY3Rpb24uXG4gKlxuICogQHJldHVybnMge0NhbmNlbFRva2VufVxuICovXG5jbGFzcyBDYW5jZWxUb2tlbiB7XG4gIGNvbnN0cnVjdG9yKGV4ZWN1dG9yKSB7XG4gICAgaWYgKHR5cGVvZiBleGVjdXRvciAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignZXhlY3V0b3IgbXVzdCBiZSBhIGZ1bmN0aW9uLicpO1xuICAgIH1cblxuICAgIGxldCByZXNvbHZlUHJvbWlzZTtcblxuICAgIHRoaXMucHJvbWlzZSA9IG5ldyBQcm9taXNlKGZ1bmN0aW9uIHByb21pc2VFeGVjdXRvcihyZXNvbHZlKSB7XG4gICAgICByZXNvbHZlUHJvbWlzZSA9IHJlc29sdmU7XG4gICAgfSk7XG5cbiAgICBjb25zdCB0b2tlbiA9IHRoaXM7XG5cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZnVuYy1uYW1lc1xuICAgIHRoaXMucHJvbWlzZS50aGVuKGNhbmNlbCA9PiB7XG4gICAgICBpZiAoIXRva2VuLl9saXN0ZW5lcnMpIHJldHVybjtcblxuICAgICAgbGV0IGkgPSB0b2tlbi5fbGlzdGVuZXJzLmxlbmd0aDtcblxuICAgICAgd2hpbGUgKGktLSA+IDApIHtcbiAgICAgICAgdG9rZW4uX2xpc3RlbmVyc1tpXShjYW5jZWwpO1xuICAgICAgfVxuICAgICAgdG9rZW4uX2xpc3RlbmVycyA9IG51bGw7XG4gICAgfSk7XG5cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZnVuYy1uYW1lc1xuICAgIHRoaXMucHJvbWlzZS50aGVuID0gb25mdWxmaWxsZWQgPT4ge1xuICAgICAgbGV0IF9yZXNvbHZlO1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGZ1bmMtbmFtZXNcbiAgICAgIGNvbnN0IHByb21pc2UgPSBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHtcbiAgICAgICAgdG9rZW4uc3Vic2NyaWJlKHJlc29sdmUpO1xuICAgICAgICBfcmVzb2x2ZSA9IHJlc29sdmU7XG4gICAgICB9KS50aGVuKG9uZnVsZmlsbGVkKTtcblxuICAgICAgcHJvbWlzZS5jYW5jZWwgPSBmdW5jdGlvbiByZWplY3QoKSB7XG4gICAgICAgIHRva2VuLnVuc3Vic2NyaWJlKF9yZXNvbHZlKTtcbiAgICAgIH07XG5cbiAgICAgIHJldHVybiBwcm9taXNlO1xuICAgIH07XG5cbiAgICBleGVjdXRvcihmdW5jdGlvbiBjYW5jZWwobWVzc2FnZSwgY29uZmlnLCByZXF1ZXN0KSB7XG4gICAgICBpZiAodG9rZW4ucmVhc29uKSB7XG4gICAgICAgIC8vIENhbmNlbGxhdGlvbiBoYXMgYWxyZWFkeSBiZWVuIHJlcXVlc3RlZFxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHRva2VuLnJlYXNvbiA9IG5ldyBDYW5jZWxlZEVycm9yKG1lc3NhZ2UsIGNvbmZpZywgcmVxdWVzdCk7XG4gICAgICByZXNvbHZlUHJvbWlzZSh0b2tlbi5yZWFzb24pO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFRocm93cyBhIGBDYW5jZWxlZEVycm9yYCBpZiBjYW5jZWxsYXRpb24gaGFzIGJlZW4gcmVxdWVzdGVkLlxuICAgKi9cbiAgdGhyb3dJZlJlcXVlc3RlZCgpIHtcbiAgICBpZiAodGhpcy5yZWFzb24pIHtcbiAgICAgIHRocm93IHRoaXMucmVhc29uO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBTdWJzY3JpYmUgdG8gdGhlIGNhbmNlbCBzaWduYWxcbiAgICovXG5cbiAgc3Vic2NyaWJlKGxpc3RlbmVyKSB7XG4gICAgaWYgKHRoaXMucmVhc29uKSB7XG4gICAgICBsaXN0ZW5lcih0aGlzLnJlYXNvbik7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX2xpc3RlbmVycykge1xuICAgICAgdGhpcy5fbGlzdGVuZXJzLnB1c2gobGlzdGVuZXIpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9saXN0ZW5lcnMgPSBbbGlzdGVuZXJdO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBVbnN1YnNjcmliZSBmcm9tIHRoZSBjYW5jZWwgc2lnbmFsXG4gICAqL1xuXG4gIHVuc3Vic2NyaWJlKGxpc3RlbmVyKSB7XG4gICAgaWYgKCF0aGlzLl9saXN0ZW5lcnMpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgaW5kZXggPSB0aGlzLl9saXN0ZW5lcnMuaW5kZXhPZihsaXN0ZW5lcik7XG4gICAgaWYgKGluZGV4ICE9PSAtMSkge1xuICAgICAgdGhpcy5fbGlzdGVuZXJzLnNwbGljZShpbmRleCwgMSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYW4gb2JqZWN0IHRoYXQgY29udGFpbnMgYSBuZXcgYENhbmNlbFRva2VuYCBhbmQgYSBmdW5jdGlvbiB0aGF0LCB3aGVuIGNhbGxlZCxcbiAgICogY2FuY2VscyB0aGUgYENhbmNlbFRva2VuYC5cbiAgICovXG4gIHN0YXRpYyBzb3VyY2UoKSB7XG4gICAgbGV0IGNhbmNlbDtcbiAgICBjb25zdCB0b2tlbiA9IG5ldyBDYW5jZWxUb2tlbihmdW5jdGlvbiBleGVjdXRvcihjKSB7XG4gICAgICBjYW5jZWwgPSBjO1xuICAgIH0pO1xuICAgIHJldHVybiB7XG4gICAgICB0b2tlbixcbiAgICAgIGNhbmNlbFxuICAgIH07XG4gIH1cbn1cblxudmFyIENhbmNlbFRva2VuJDEgPSBDYW5jZWxUb2tlbjtcblxuLyoqXG4gKiBTeW50YWN0aWMgc3VnYXIgZm9yIGludm9raW5nIGEgZnVuY3Rpb24gYW5kIGV4cGFuZGluZyBhbiBhcnJheSBmb3IgYXJndW1lbnRzLlxuICpcbiAqIENvbW1vbiB1c2UgY2FzZSB3b3VsZCBiZSB0byB1c2UgYEZ1bmN0aW9uLnByb3RvdHlwZS5hcHBseWAuXG4gKlxuICogIGBgYGpzXG4gKiAgZnVuY3Rpb24gZih4LCB5LCB6KSB7fVxuICogIHZhciBhcmdzID0gWzEsIDIsIDNdO1xuICogIGYuYXBwbHkobnVsbCwgYXJncyk7XG4gKiAgYGBgXG4gKlxuICogV2l0aCBgc3ByZWFkYCB0aGlzIGV4YW1wbGUgY2FuIGJlIHJlLXdyaXR0ZW4uXG4gKlxuICogIGBgYGpzXG4gKiAgc3ByZWFkKGZ1bmN0aW9uKHgsIHksIHopIHt9KShbMSwgMiwgM10pO1xuICogIGBgYFxuICpcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrXG4gKlxuICogQHJldHVybnMge0Z1bmN0aW9ufVxuICovXG5mdW5jdGlvbiBzcHJlYWQoY2FsbGJhY2spIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIHdyYXAoYXJyKSB7XG4gICAgcmV0dXJuIGNhbGxiYWNrLmFwcGx5KG51bGwsIGFycik7XG4gIH07XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSBwYXlsb2FkIGlzIGFuIGVycm9yIHRocm93biBieSBBeGlvc1xuICpcbiAqIEBwYXJhbSB7Kn0gcGF5bG9hZCBUaGUgdmFsdWUgdG8gdGVzdFxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHRoZSBwYXlsb2FkIGlzIGFuIGVycm9yIHRocm93biBieSBBeGlvcywgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzQXhpb3NFcnJvcihwYXlsb2FkKSB7XG4gIHJldHVybiB1dGlscyQxLmlzT2JqZWN0KHBheWxvYWQpICYmIChwYXlsb2FkLmlzQXhpb3NFcnJvciA9PT0gdHJ1ZSk7XG59XG5cbmNvbnN0IEh0dHBTdGF0dXNDb2RlID0ge1xuICBDb250aW51ZTogMTAwLFxuICBTd2l0Y2hpbmdQcm90b2NvbHM6IDEwMSxcbiAgUHJvY2Vzc2luZzogMTAyLFxuICBFYXJseUhpbnRzOiAxMDMsXG4gIE9rOiAyMDAsXG4gIENyZWF0ZWQ6IDIwMSxcbiAgQWNjZXB0ZWQ6IDIwMixcbiAgTm9uQXV0aG9yaXRhdGl2ZUluZm9ybWF0aW9uOiAyMDMsXG4gIE5vQ29udGVudDogMjA0LFxuICBSZXNldENvbnRlbnQ6IDIwNSxcbiAgUGFydGlhbENvbnRlbnQ6IDIwNixcbiAgTXVsdGlTdGF0dXM6IDIwNyxcbiAgQWxyZWFkeVJlcG9ydGVkOiAyMDgsXG4gIEltVXNlZDogMjI2LFxuICBNdWx0aXBsZUNob2ljZXM6IDMwMCxcbiAgTW92ZWRQZXJtYW5lbnRseTogMzAxLFxuICBGb3VuZDogMzAyLFxuICBTZWVPdGhlcjogMzAzLFxuICBOb3RNb2RpZmllZDogMzA0LFxuICBVc2VQcm94eTogMzA1LFxuICBVbnVzZWQ6IDMwNixcbiAgVGVtcG9yYXJ5UmVkaXJlY3Q6IDMwNyxcbiAgUGVybWFuZW50UmVkaXJlY3Q6IDMwOCxcbiAgQmFkUmVxdWVzdDogNDAwLFxuICBVbmF1dGhvcml6ZWQ6IDQwMSxcbiAgUGF5bWVudFJlcXVpcmVkOiA0MDIsXG4gIEZvcmJpZGRlbjogNDAzLFxuICBOb3RGb3VuZDogNDA0LFxuICBNZXRob2ROb3RBbGxvd2VkOiA0MDUsXG4gIE5vdEFjY2VwdGFibGU6IDQwNixcbiAgUHJveHlBdXRoZW50aWNhdGlvblJlcXVpcmVkOiA0MDcsXG4gIFJlcXVlc3RUaW1lb3V0OiA0MDgsXG4gIENvbmZsaWN0OiA0MDksXG4gIEdvbmU6IDQxMCxcbiAgTGVuZ3RoUmVxdWlyZWQ6IDQxMSxcbiAgUHJlY29uZGl0aW9uRmFpbGVkOiA0MTIsXG4gIFBheWxvYWRUb29MYXJnZTogNDEzLFxuICBVcmlUb29Mb25nOiA0MTQsXG4gIFVuc3VwcG9ydGVkTWVkaWFUeXBlOiA0MTUsXG4gIFJhbmdlTm90U2F0aXNmaWFibGU6IDQxNixcbiAgRXhwZWN0YXRpb25GYWlsZWQ6IDQxNyxcbiAgSW1BVGVhcG90OiA0MTgsXG4gIE1pc2RpcmVjdGVkUmVxdWVzdDogNDIxLFxuICBVbnByb2Nlc3NhYmxlRW50aXR5OiA0MjIsXG4gIExvY2tlZDogNDIzLFxuICBGYWlsZWREZXBlbmRlbmN5OiA0MjQsXG4gIFRvb0Vhcmx5OiA0MjUsXG4gIFVwZ3JhZGVSZXF1aXJlZDogNDI2LFxuICBQcmVjb25kaXRpb25SZXF1aXJlZDogNDI4LFxuICBUb29NYW55UmVxdWVzdHM6IDQyOSxcbiAgUmVxdWVzdEhlYWRlckZpZWxkc1Rvb0xhcmdlOiA0MzEsXG4gIFVuYXZhaWxhYmxlRm9yTGVnYWxSZWFzb25zOiA0NTEsXG4gIEludGVybmFsU2VydmVyRXJyb3I6IDUwMCxcbiAgTm90SW1wbGVtZW50ZWQ6IDUwMSxcbiAgQmFkR2F0ZXdheTogNTAyLFxuICBTZXJ2aWNlVW5hdmFpbGFibGU6IDUwMyxcbiAgR2F0ZXdheVRpbWVvdXQ6IDUwNCxcbiAgSHR0cFZlcnNpb25Ob3RTdXBwb3J0ZWQ6IDUwNSxcbiAgVmFyaWFudEFsc29OZWdvdGlhdGVzOiA1MDYsXG4gIEluc3VmZmljaWVudFN0b3JhZ2U6IDUwNyxcbiAgTG9vcERldGVjdGVkOiA1MDgsXG4gIE5vdEV4dGVuZGVkOiA1MTAsXG4gIE5ldHdvcmtBdXRoZW50aWNhdGlvblJlcXVpcmVkOiA1MTEsXG59O1xuXG5PYmplY3QuZW50cmllcyhIdHRwU3RhdHVzQ29kZSkuZm9yRWFjaCgoW2tleSwgdmFsdWVdKSA9PiB7XG4gIEh0dHBTdGF0dXNDb2RlW3ZhbHVlXSA9IGtleTtcbn0pO1xuXG52YXIgSHR0cFN0YXR1c0NvZGUkMSA9IEh0dHBTdGF0dXNDb2RlO1xuXG4vKipcbiAqIENyZWF0ZSBhbiBpbnN0YW5jZSBvZiBBeGlvc1xuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBkZWZhdWx0Q29uZmlnIFRoZSBkZWZhdWx0IGNvbmZpZyBmb3IgdGhlIGluc3RhbmNlXG4gKlxuICogQHJldHVybnMge0F4aW9zfSBBIG5ldyBpbnN0YW5jZSBvZiBBeGlvc1xuICovXG5mdW5jdGlvbiBjcmVhdGVJbnN0YW5jZShkZWZhdWx0Q29uZmlnKSB7XG4gIGNvbnN0IGNvbnRleHQgPSBuZXcgQXhpb3MkMShkZWZhdWx0Q29uZmlnKTtcbiAgY29uc3QgaW5zdGFuY2UgPSBiaW5kKEF4aW9zJDEucHJvdG90eXBlLnJlcXVlc3QsIGNvbnRleHQpO1xuXG4gIC8vIENvcHkgYXhpb3MucHJvdG90eXBlIHRvIGluc3RhbmNlXG4gIHV0aWxzJDEuZXh0ZW5kKGluc3RhbmNlLCBBeGlvcyQxLnByb3RvdHlwZSwgY29udGV4dCwge2FsbE93bktleXM6IHRydWV9KTtcblxuICAvLyBDb3B5IGNvbnRleHQgdG8gaW5zdGFuY2VcbiAgdXRpbHMkMS5leHRlbmQoaW5zdGFuY2UsIGNvbnRleHQsIG51bGwsIHthbGxPd25LZXlzOiB0cnVlfSk7XG5cbiAgLy8gRmFjdG9yeSBmb3IgY3JlYXRpbmcgbmV3IGluc3RhbmNlc1xuICBpbnN0YW5jZS5jcmVhdGUgPSBmdW5jdGlvbiBjcmVhdGUoaW5zdGFuY2VDb25maWcpIHtcbiAgICByZXR1cm4gY3JlYXRlSW5zdGFuY2UobWVyZ2VDb25maWcoZGVmYXVsdENvbmZpZywgaW5zdGFuY2VDb25maWcpKTtcbiAgfTtcblxuICByZXR1cm4gaW5zdGFuY2U7XG59XG5cbi8vIENyZWF0ZSB0aGUgZGVmYXVsdCBpbnN0YW5jZSB0byBiZSBleHBvcnRlZFxuY29uc3QgYXhpb3MgPSBjcmVhdGVJbnN0YW5jZShkZWZhdWx0cyQxKTtcblxuLy8gRXhwb3NlIEF4aW9zIGNsYXNzIHRvIGFsbG93IGNsYXNzIGluaGVyaXRhbmNlXG5heGlvcy5BeGlvcyA9IEF4aW9zJDE7XG5cbi8vIEV4cG9zZSBDYW5jZWwgJiBDYW5jZWxUb2tlblxuYXhpb3MuQ2FuY2VsZWRFcnJvciA9IENhbmNlbGVkRXJyb3I7XG5heGlvcy5DYW5jZWxUb2tlbiA9IENhbmNlbFRva2VuJDE7XG5heGlvcy5pc0NhbmNlbCA9IGlzQ2FuY2VsO1xuYXhpb3MuVkVSU0lPTiA9IFZFUlNJT047XG5heGlvcy50b0Zvcm1EYXRhID0gdG9Gb3JtRGF0YTtcblxuLy8gRXhwb3NlIEF4aW9zRXJyb3IgY2xhc3NcbmF4aW9zLkF4aW9zRXJyb3IgPSBBeGlvc0Vycm9yO1xuXG4vLyBhbGlhcyBmb3IgQ2FuY2VsZWRFcnJvciBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eVxuYXhpb3MuQ2FuY2VsID0gYXhpb3MuQ2FuY2VsZWRFcnJvcjtcblxuLy8gRXhwb3NlIGFsbC9zcHJlYWRcbmF4aW9zLmFsbCA9IGZ1bmN0aW9uIGFsbChwcm9taXNlcykge1xuICByZXR1cm4gUHJvbWlzZS5hbGwocHJvbWlzZXMpO1xufTtcblxuYXhpb3Muc3ByZWFkID0gc3ByZWFkO1xuXG4vLyBFeHBvc2UgaXNBeGlvc0Vycm9yXG5heGlvcy5pc0F4aW9zRXJyb3IgPSBpc0F4aW9zRXJyb3I7XG5cbi8vIEV4cG9zZSBtZXJnZUNvbmZpZ1xuYXhpb3MubWVyZ2VDb25maWcgPSBtZXJnZUNvbmZpZztcblxuYXhpb3MuQXhpb3NIZWFkZXJzID0gQXhpb3NIZWFkZXJzJDE7XG5cbmF4aW9zLmZvcm1Ub0pTT04gPSB0aGluZyA9PiBmb3JtRGF0YVRvSlNPTih1dGlscyQxLmlzSFRNTEZvcm0odGhpbmcpID8gbmV3IEZvcm1EYXRhKHRoaW5nKSA6IHRoaW5nKTtcblxuYXhpb3MuZ2V0QWRhcHRlciA9IGFkYXB0ZXJzLmdldEFkYXB0ZXI7XG5cbmF4aW9zLkh0dHBTdGF0dXNDb2RlID0gSHR0cFN0YXR1c0NvZGUkMTtcblxuYXhpb3MuZGVmYXVsdCA9IGF4aW9zO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGF4aW9zO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9YXhpb3MuY2pzLm1hcFxuIiwiLy8gVGhlIG1vZHVsZSBjYWNoZVxudmFyIF9fd2VicGFja19tb2R1bGVfY2FjaGVfXyA9IHt9O1xuXG4vLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuXHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcblx0dmFyIGNhY2hlZE1vZHVsZSA9IF9fd2VicGFja19tb2R1bGVfY2FjaGVfX1ttb2R1bGVJZF07XG5cdGlmIChjYWNoZWRNb2R1bGUgIT09IHVuZGVmaW5lZCkge1xuXHRcdHJldHVybiBjYWNoZWRNb2R1bGUuZXhwb3J0cztcblx0fVxuXHQvLyBDcmVhdGUgYSBuZXcgbW9kdWxlIChhbmQgcHV0IGl0IGludG8gdGhlIGNhY2hlKVxuXHR2YXIgbW9kdWxlID0gX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fW21vZHVsZUlkXSA9IHtcblx0XHQvLyBubyBtb2R1bGUuaWQgbmVlZGVkXG5cdFx0Ly8gbm8gbW9kdWxlLmxvYWRlZCBuZWVkZWRcblx0XHRleHBvcnRzOiB7fVxuXHR9O1xuXG5cdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxuXHRfX3dlYnBhY2tfbW9kdWxlc19fW21vZHVsZUlkXS5jYWxsKG1vZHVsZS5leHBvcnRzLCBtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTtcblxuXHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuXHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG59XG5cbiIsIl9fd2VicGFja19yZXF1aXJlX18uZyA9IChmdW5jdGlvbigpIHtcblx0aWYgKHR5cGVvZiBnbG9iYWxUaGlzID09PSAnb2JqZWN0JykgcmV0dXJuIGdsb2JhbFRoaXM7XG5cdHRyeSB7XG5cdFx0cmV0dXJuIHRoaXMgfHwgbmV3IEZ1bmN0aW9uKCdyZXR1cm4gdGhpcycpKCk7XG5cdH0gY2F0Y2ggKGUpIHtcblx0XHRpZiAodHlwZW9mIHdpbmRvdyA9PT0gJ29iamVjdCcpIHJldHVybiB3aW5kb3c7XG5cdH1cbn0pKCk7IiwiLy8gc3RhcnR1cFxuLy8gTG9hZCBlbnRyeSBtb2R1bGUgYW5kIHJldHVybiBleHBvcnRzXG4vLyBUaGlzIGVudHJ5IG1vZHVsZSBpcyByZWZlcmVuY2VkIGJ5IG90aGVyIG1vZHVsZXMgc28gaXQgY2FuJ3QgYmUgaW5saW5lZFxudmFyIF9fd2VicGFja19leHBvcnRzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDMyMSk7XG4iXSwibmFtZXMiOlsicGFyYW1zIiwiaXNQdXJlT2JqZWN0IiwiRXJyb3IiLCJ0aGlzIiwiaW5pdCIsImNsb25lUGFyYW1zIiwiQ2xpZW50IiwidmVyc2lvbiIsImFwaUtleSIsImFwaVNlY3JldCIsImFwaVRva2VuIiwiY29uZmlnIiwib3B0aW9ucyIsInJlc291cmNlIiwicmVxdWVzdF8xIiwiSHR0cE1ldGhvZHNfMSIsIkdldCIsIlBvc3QiLCJQdXQiLCJEZWxldGUiLCJwYWNrYWdlSlNPTiIsInNldENvbmZpZyIsInNldE9wdGlvbnMiLCJ0b2tlbkNvbm5lY3RTdHJhdGVneSIsImJhc2ljQ29ubmVjdFN0cmF0ZWd5IiwiY2xvbmVkUGFyYW1zIiwicHJveHkiLCJoZWFkZXJzIiwiY3VzdG9tQ29uZmlnIiwiX3R5cGVvZiIsInNldFZhbHVlSWZOb3ROaWwiLCJob3N0Iiwib3V0cHV0IiwiT2JqZWN0IiwiZnJlZXplIiwiX19hc3NpZ24iLCJwYWNrYWdlX2pzb25fMSIsImV4cG9ydHMiLCJpbmRleF8xIiwiaW5kZXhfMiIsIl9fZXh0ZW5kcyIsIk1haWxqZXQiLCJfX2V4cG9ydFN0YXIiLCJIdHRwTWV0aG9kcyIsIkpTT05iIiwic3RvcmVBc1N0cmluZyIsImNsaWVudCIsIm1ldGhvZCIsImNsaWVudF8xIiwidmFsdWVzIiwiaW5jbHVkZXMiLCJ1cmwiLCJ0b0xvd2VyQ2FzZSIsInN1YlBhdGgiLCJidWlsZFN1YlBhdGgiLCJhY3Rpb25QYXRoIiwiUmVxdWVzdCIsImdldFBhY2thZ2VWZXJzaW9uIiwiZ2V0QVBJVG9rZW4iLCJnZXRBUElLZXkiLCJnZXRBUElTZWNyZXQiLCJpbmRleE9mIiwiZGF0YSIsInVuZGVmaW5lZCIsImNsaWVudENvbmZpZyIsImdldENvbmZpZyIsIl9hIiwiX2IiLCJwcm90b2NvbCIsImlzQ29udGFjdExpc3RXaXRoQ1NWIiwiaXNCYXRjaEpvYldpdGhDU1YiLCJpc1NlbmRSZXNvdXJjZSIsInJlc291cmNlQ29udGFpblNNUyIsInJlcXVlc3RDb25maWciLCJnZXRSZXF1ZXN0Qm9keSIsInJlc3BvbnNlVHlwZSIsImdldFVzZXJBZ2VudCIsImdldENvbnRlbnRUeXBlIiwidHJhbnNmb3JtUmVzcG9uc2UiLCJyZXNwb25zZURhdGEiLCJkYXRhSXNTdHJpbmciLCJpc0pTT05SZXF1ZXN0ZWQiLCJwYXJzZVRvSlNPTmIiLCJpc0Jyb3dzZXIiLCJjcmVkZW50aWFscyIsImdldENyZWRlbnRpYWxzIiwiYXV0aCIsInVzZXJuYW1lIiwicGFzc3dvcmQiLCJjbGllbnRPcHRpb25zIiwiZ2V0T3B0aW9ucyIsInRpbWVvdXQiLCJrZXlzIiwibGVuZ3RoIiwibWF4Qm9keUxlbmd0aCIsIm1heENvbnRlbnRMZW5ndGgiLCJiYXNlVXJsIiwidmFsdWUiLCJ0b1N0cmluZyIsIm5hbWUiLCJwZXJmb3JtQVBJQ2FsbCIsImJ1aWxkRnVsbFVybCIsInNldEJhc2VVUkwiLCJib2R5IiwibWFrZVJlcXVlc3QiLCJyZXNwb25zZSIsIl9nIiwiYXhpb3NfMSIsImVycm9yIiwiY29kZSIsImVycl8xIiwiX2YiLCJzdGF0dXNfMSIsInN0YXR1c1RleHQiLCJzdGF0dXNDb2RlIiwiZXJyb3JNZXNzYWdlIiwiRXJyb3JNZXNzYWdlIiwibWVzc2FnZSIsIm9yaWdpbmFsTWVzc2FnZSIsImNvbmNhdCIsImZ1bGxNZXNzYWdlIiwiTWVzc2FnZXMiLCJfYyIsIkVycm9ycyIsIl9kIiwiX2UiLCJFcnJvckNvZGUiLCJFcnJvcklkZW50aWZpZXIiLCJFcnJvclJlbGF0ZWRUbyIsInRleHQiLCJwYXJzZSIsImUiLCJ3aW5kb3ciLCJEcmFmdENhbXBhaWduIiwiRWRpdE1vZGUiLCJDYW1wYWlnbkRyYWZ0U3RhdHVzIiwiQ2FtcGFpZ25EcmFmdFNlbmRpbmdTdGF0dXMiLCJTZW50Q2FtcGFpZ24iLCJDYW1wYWlnblR5cGUiLCJDb21tb24iLCJQZXJpb2QiLCJCdWxrQ29udGFjdE1hbmFnZW1lbnQiLCJNYW5hZ2VDb250YWN0c0FjdGlvbiIsIkltcG9ydExpc3RBY3Rpb24iLCJJbXBvcnRDU1ZNZXRob2QiLCJDU1ZJbXBvcnRTdGF0dXMiLCJKb2JTdGF0dXMiLCJDb250YWN0UHJvcGVydGllcyIsIkRhdGFUeXBlIiwiTmFtZVNwYWNlIiwiTWVzc2FnZSIsIk1lc3NhZ2VTdGF0ZSIsIkZyb21UeXBlIiwiTWVzc2FnZVN0YXR1cyIsIkN1cnJlbnRNZXNzYWdlU3RhdHVzIiwiRXZlbnRUeXBlIiwiU2VnbWVudGF0aW9uIiwiU2VnbWVudFN0YXR1cyIsIlNlbmRFbWFpbFYzXzEiLCJUcmFja09wZW5zIiwiVHJhY2tDbGlja3MiLCJSZXNwb25zZVN0YXR1cyIsIlNlbmRlciIsIkVtYWlsVHlwZSIsIlNlbmRlclN0YXR1cyIsIkROUyIsIkRLSU1Db25maWd1cmF0aW9uQ2hlY2tTdGF0dXMiLCJES0lNQ29uZmlndXJhdGlvblN0YXR1cyIsIlNQRkNvbmZpZ3VyYXRpb25DaGVja1N0YXR1cyIsIlNQRkNvbmZpZ3VyYXRpb25TdGF0dXMiLCJBUElLZXlDb25maWd1cmF0aW9uIiwiUnVuTGV2ZWwiLCJTdGF0aXN0aWMiLCJDYW1wYWlnbk92ZXJ2aWV3SURUeXBlIiwiQ2FtcGFpZ25PdmVydmlld0VkaXRNb2RlIiwiQ2FtcGFpZ25PdmVydmlld0VkaXRUeXBlIiwiQ291bnRlclNvdXJjZSIsIkNvdW50ZXJSZXNvbHV0aW9uIiwiQ291bnRlclRpbWluZyIsIkVtYWlsRXZlbnQiLCJUZW1wbGF0ZSIsIkNhdGVnb3JpZXMiLCJDYXRlZ29yaWVzU2VsZWN0aW9uTWV0aG9kIiwiT3duZXJUeXBlIiwiUHVycG9zZXMiLCJQdXJwb3Nlc1NlbGVjdGlvbk1ldGhvZCIsIldlYmhvb2siLCJFdmVudFR5cGVWYWx1ZSIsIlN0YXR1cyIsImVudW1lcmFibGUiLCJnZXQiLCJpc05pbF8xIiwiaXNOdWxsXzEiLCJpc1VuZGVmaW5lZF8xIiwiaXNQdXJlT2JqZWN0XzEiLCJzZXRWYWx1ZUlmTm90TmlsXzEiLCJnZXRQcm90b3R5cGVPZiIsInByb3RvdHlwZSIsInRhcmdldE9iamVjdCIsInBhdGgiLCJnbG9iYWxPYmplY3QiLCJCaWdOdW1iZXIiLCJpc051bWVyaWMiLCJtYXRoY2VpbCIsIk1hdGgiLCJjZWlsIiwibWF0aGZsb29yIiwiZmxvb3IiLCJiaWdudW1iZXJFcnJvciIsInRvb01hbnlEaWdpdHMiLCJCQVNFIiwiTE9HX0JBU0UiLCJNQVhfU0FGRV9JTlRFR0VSIiwiUE9XU19URU4iLCJTUVJUX0JBU0UiLCJNQVgiLCJiaXRGbG9vciIsIm4iLCJpIiwiY29lZmZUb1N0cmluZyIsImEiLCJzIiwieiIsImoiLCJyIiwiY2hhckNvZGVBdCIsInNsaWNlIiwiY29tcGFyZSIsIngiLCJ5IiwiYiIsInhjIiwiYyIsInljIiwiayIsImwiLCJpbnRDaGVjayIsIm1pbiIsIm1heCIsIlN0cmluZyIsImlzT2RkIiwidG9FeHBvbmVudGlhbCIsInN0ciIsImNoYXJBdCIsInRvRml4ZWRQb2ludCIsImxlbiIsInpzIiwiY2xvbmUiLCJjb25maWdPYmplY3QiLCJkaXYiLCJjb252ZXJ0QmFzZSIsInBhcnNlTnVtZXJpYyIsInBvdzJfNTMiLCJyYW5kb201M2JpdEludCIsImJhc2VQcmVmaXgiLCJkb3RBZnRlciIsImRvdEJlZm9yZSIsImlzSW5maW5pdHlPck5hTiIsIndoaXRlc3BhY2VPclBsdXMiLCJQIiwiY29uc3RydWN0b3IiLCJ2YWx1ZU9mIiwiT05FIiwiREVDSU1BTF9QTEFDRVMiLCJST1VORElOR19NT0RFIiwiVE9fRVhQX05FRyIsIlRPX0VYUF9QT1MiLCJNSU5fRVhQIiwiTUFYX0VYUCIsIkNSWVBUTyIsIk1PRFVMT19NT0RFIiwiUE9XX1BSRUNJU0lPTiIsIkZPUk1BVCIsInByZWZpeCIsImdyb3VwU2l6ZSIsInNlY29uZGFyeUdyb3VwU2l6ZSIsImdyb3VwU2VwYXJhdG9yIiwiZGVjaW1hbFNlcGFyYXRvciIsImZyYWN0aW9uR3JvdXBTaXplIiwiZnJhY3Rpb25Hcm91cFNlcGFyYXRvciIsInN1ZmZpeCIsIkFMUEhBQkVUIiwidiIsImFscGhhYmV0IiwiY2FzZUNoYW5nZWQiLCJpc051bSIsIl9pc0JpZ051bWJlciIsInRlc3QiLCJyZXBsYWNlIiwic2VhcmNoIiwic3Vic3RyaW5nIiwicm91bmQiLCJERUJVRyIsInRvVXBwZXJDYXNlIiwicHVzaCIsImZvcm1hdCIsInJtIiwiaWQiLCJjMCIsIm5lIiwibWF4T3JNaW4iLCJhcmdzIiwibSIsImNhbGwiLCJub3JtYWxpc2UiLCJwb3AiLCJzZCIsImQiLCJuaSIsInJkIiwicG93czEwIiwib3V0IiwiUk9VTkRfVVAiLCJST1VORF9ET1dOIiwiUk9VTkRfQ0VJTCIsIlJPVU5EX0ZMT09SIiwiUk9VTkRfSEFMRl9VUCIsIlJPVU5EX0hBTEZfRE9XTiIsIlJPVU5EX0hBTEZfRVZFTiIsIlJPVU5EX0hBTEZfQ0VJTCIsIlJPVU5EX0hBTEZfRkxPT1IiLCJFVUNMSUQiLCJzZXQiLCJvYmoiLCJwIiwiaGFzT3duUHJvcGVydHkiLCJjcnlwdG8iLCJnZXRSYW5kb21WYWx1ZXMiLCJyYW5kb21CeXRlcyIsIkVYUE9ORU5USUFMX0FUIiwiUkFOR0UiLCJpc0JpZ051bWJlciIsIm1heGltdW0iLCJhcmd1bWVudHMiLCJsdCIsIm1pbmltdW0iLCJndCIsInJhbmRvbSIsImRwIiwicmFuZCIsIlVpbnQzMkFycmF5IiwiY29weSIsInNwbGljZSIsInN1bSIsInBsdXMiLCJkZWNpbWFsIiwidG9CYXNlT3V0IiwiYmFzZUluIiwiYmFzZU91dCIsImFyckwiLCJhcnIiLCJyZXZlcnNlIiwic2lnbiIsImNhbGxlcklzVG9TdHJpbmciLCJwb3ciLCJtdWx0aXBseSIsImJhc2UiLCJ0ZW1wIiwieGxvIiwieGhpIiwiY2FycnkiLCJrbG8iLCJraGkiLCJhTCIsImJMIiwiY21wIiwic3VidHJhY3QiLCJtb3JlIiwicHJvZCIsInByb2RMIiwicSIsInFjIiwicmVtIiwicmVtTCIsInJlbTAiLCJ4aSIsInhMIiwieWMwIiwieUwiLCJ5eiIsIk5hTiIsImlzTmFOIiwicDEiLCJwMiIsImFic29sdXRlVmFsdWUiLCJhYnMiLCJjb21wYXJlZFRvIiwiZGVjaW1hbFBsYWNlcyIsImRpdmlkZWRCeSIsImRpdmlkZWRUb0ludGVnZXJCeSIsImlkaXYiLCJleHBvbmVudGlhdGVkQnkiLCJoYWxmIiwiaXNNb2RFeHAiLCJuSXNCaWciLCJuSXNOZWciLCJuSXNPZGQiLCJpc0ludGVnZXIiLCJtb2QiLCJ0aW1lcyIsImludGVnZXJWYWx1ZSIsImlzRXF1YWxUbyIsImVxIiwiaXNGaW5pdGUiLCJpc0dyZWF0ZXJUaGFuIiwiaXNHcmVhdGVyVGhhbk9yRXF1YWxUbyIsImd0ZSIsImlzTGVzc1RoYW4iLCJpc0xlc3NUaGFuT3JFcXVhbFRvIiwibHRlIiwiaXNOZWdhdGl2ZSIsImlzUG9zaXRpdmUiLCJpc1plcm8iLCJtaW51cyIsInQiLCJ4TFR5IiwieGUiLCJ5ZSIsIm1vZHVsbyIsIm11bHRpcGxpZWRCeSIsInhjTCIsInljTCIsInlsbyIsInloaSIsInpjIiwic3FydEJhc2UiLCJuZWdhdGVkIiwicHJlY2lzaW9uIiwic2hpZnRlZEJ5Iiwic3F1YXJlUm9vdCIsInNxcnQiLCJyZXAiLCJ0b0ZpeGVkIiwidG9Gb3JtYXQiLCJzcGxpdCIsImcxIiwiZzIiLCJpbnRQYXJ0IiwiZnJhY3Rpb25QYXJ0IiwiaXNOZWciLCJpbnREaWdpdHMiLCJzdWJzdHIiLCJSZWdFeHAiLCJ0b0ZyYWN0aW9uIiwibWQiLCJkMCIsImQxIiwiZDIiLCJleHAiLCJuMCIsIm4xIiwidG9OdW1iZXIiLCJ0b1ByZWNpc2lvbiIsInRvSlNPTiIsImpzb25fc3RyaW5naWZ5IiwianNvbl9wYXJzZSIsIm1vZHVsZSIsInN0cmluZ2lmeSIsInN1c3BlY3RQcm90b1J4Iiwic3VzcGVjdENvbnN0cnVjdG9yUngiLCJfb3B0aW9ucyIsInN0cmljdCIsImFsd2F5c1BhcnNlQXNCaWciLCJ1c2VOYXRpdmVCaWdJbnQiLCJwcm90b0FjdGlvbiIsImNvbnN0cnVjdG9yQWN0aW9uIiwiYXQiLCJjaCIsImVzY2FwZWUiLCJmIiwibmV4dCIsIm51bWJlciIsInN0cmluZyIsIkJpZ0ludCIsImhleCIsInVmZmZmIiwic3RhcnRBdCIsInBhcnNlSW50IiwiZnJvbUNoYXJDb2RlIiwid2hpdGUiLCJrZXkiLCJvYmplY3QiLCJjcmVhdGUiLCJhcnJheSIsIndvcmQiLCJzb3VyY2UiLCJyZXZpdmVyIiwicmVzdWx0Iiwid2FsayIsImhvbGRlciIsImZvckVhY2giLCJKU09OIiwiZ2FwIiwiaW5kZW50IiwiZXNjYXBhYmxlIiwibWV0YSIsInF1b3RlIiwibGFzdEluZGV4IiwicGFydGlhbCIsIm1pbmQiLCJhcHBseSIsImpvaW4iLCJyZXBsYWNlciIsInNwYWNlIiwibm9ybWFsaXplIiwic3RyQXJyYXkiLCJyZXN1bHRBcnJheSIsIlR5cGVFcnJvciIsIm1hdGNoIiwiZmlyc3QiLCJzaGlmdCIsImNvbXBvbmVudCIsInBhcnRzIiwiZGVmaW5pdGlvbiIsImJpbmQiLCJmbiIsInRoaXNBcmciLCJraW5kT2YiLCJjYWNoZSIsInRoaW5nIiwia2luZE9mVGVzdCIsInR5cGUiLCJ0eXBlT2ZUZXN0IiwiaXNBcnJheSIsIkFycmF5IiwiaXNVbmRlZmluZWQiLCJpc0FycmF5QnVmZmVyIiwiaXNTdHJpbmciLCJpc0Z1bmN0aW9uIiwiaXNOdW1iZXIiLCJpc09iamVjdCIsImlzUGxhaW5PYmplY3QiLCJ2YWwiLCJTeW1ib2wiLCJ0b1N0cmluZ1RhZyIsIml0ZXJhdG9yIiwiaXNEYXRlIiwiaXNGaWxlIiwiaXNCbG9iIiwiaXNGaWxlTGlzdCIsImlzVVJMU2VhcmNoUGFyYW1zIiwiYWxsT3duS2V5cyIsImdldE93blByb3BlcnR5TmFtZXMiLCJmaW5kS2V5IiwiX2tleSIsIl9nbG9iYWwiLCJnbG9iYWxUaGlzIiwic2VsZiIsImciLCJpc0NvbnRleHREZWZpbmVkIiwiY29udGV4dCIsImlzVHlwZWRBcnJheSIsIlR5cGVkQXJyYXkiLCJVaW50OEFycmF5IiwiaXNIVE1MRm9ybSIsInByb3AiLCJpc1JlZ0V4cCIsInJlZHVjZURlc2NyaXB0b3JzIiwicmVkdWNlciIsImRlc2NyaXB0b3JzIiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyIsInJlZHVjZWREZXNjcmlwdG9ycyIsImRlc2NyaXB0b3IiLCJyZXQiLCJkZWZpbmVQcm9wZXJ0aWVzIiwiQUxQSEEiLCJESUdJVCIsIkFMUEhBX0RJR0lUIiwiaXNBc3luY0ZuIiwidXRpbHMkMSIsImlzQnVmZmVyIiwiaXNGb3JtRGF0YSIsImtpbmQiLCJGb3JtRGF0YSIsImFwcGVuZCIsImlzQXJyYXlCdWZmZXJWaWV3IiwiQXJyYXlCdWZmZXIiLCJpc1ZpZXciLCJidWZmZXIiLCJpc0Jvb2xlYW4iLCJpc1N0cmVhbSIsInBpcGUiLCJtZXJnZSIsImNhc2VsZXNzIiwiYXNzaWduVmFsdWUiLCJ0YXJnZXRLZXkiLCJleHRlbmQiLCJ0cmltIiwic3RyaXBCT00iLCJjb250ZW50IiwiaW5oZXJpdHMiLCJzdXBlckNvbnN0cnVjdG9yIiwicHJvcHMiLCJkZWZpbmVQcm9wZXJ0eSIsImFzc2lnbiIsInRvRmxhdE9iamVjdCIsInNvdXJjZU9iaiIsImRlc3RPYmoiLCJmaWx0ZXIiLCJwcm9wRmlsdGVyIiwibWVyZ2VkIiwiZW5kc1dpdGgiLCJzZWFyY2hTdHJpbmciLCJwb3NpdGlvbiIsInRvQXJyYXkiLCJmb3JFYWNoRW50cnkiLCJkb25lIiwicGFpciIsIm1hdGNoQWxsIiwicmVnRXhwIiwibWF0Y2hlcyIsImV4ZWMiLCJoYXNPd25Qcm9wIiwiZnJlZXplTWV0aG9kcyIsIndyaXRhYmxlIiwidG9PYmplY3RTZXQiLCJhcnJheU9yU3RyaW5nIiwiZGVsaW1pdGVyIiwiZGVmaW5lIiwidG9DYW1lbENhc2UiLCJub29wIiwidG9GaW5pdGVOdW1iZXIiLCJkZWZhdWx0VmFsdWUiLCJOdW1iZXIiLCJnbG9iYWwiLCJnZW5lcmF0ZVN0cmluZyIsInNpemUiLCJpc1NwZWNDb21wbGlhbnRGb3JtIiwidG9KU09OT2JqZWN0Iiwic3RhY2siLCJ2aXNpdCIsInRhcmdldCIsInJlZHVjZWRWYWx1ZSIsImlzVGhlbmFibGUiLCJ0aGVuIiwiY2F0Y2giLCJBeGlvc0Vycm9yIiwicmVxdWVzdCIsImNhcHR1cmVTdGFja1RyYWNlIiwiZGVzY3JpcHRpb24iLCJmaWxlTmFtZSIsImxpbmVOdW1iZXIiLCJjb2x1bW5OdW1iZXIiLCJzdGF0dXMiLCJwcm90b3R5cGUkMSIsImZyb20iLCJjdXN0b21Qcm9wcyIsImF4aW9zRXJyb3IiLCJjYXVzZSIsImlzVmlzaXRhYmxlIiwicmVtb3ZlQnJhY2tldHMiLCJyZW5kZXJLZXkiLCJkb3RzIiwibWFwIiwidG9rZW4iLCJwcmVkaWNhdGVzIiwidG9Gb3JtRGF0YSIsImZvcm1EYXRhIiwibWV0YVRva2VucyIsImluZGV4ZXMiLCJvcHRpb24iLCJ2aXNpdG9yIiwiZGVmYXVsdFZpc2l0b3IiLCJ1c2VCbG9iIiwiQmxvYiIsImNvbnZlcnRWYWx1ZSIsInRvSVNPU3RyaW5nIiwiQnVmZmVyIiwic29tZSIsImlzRmxhdEFycmF5IiwiZWwiLCJpbmRleCIsImV4cG9zZWRIZWxwZXJzIiwiYnVpbGQiLCJlbmNvZGUkMSIsImNoYXJNYXAiLCJlbmNvZGVVUklDb21wb25lbnQiLCJBeGlvc1VSTFNlYXJjaFBhcmFtcyIsIl9wYWlycyIsImVuY29kZSIsImJ1aWxkVVJMIiwiX2VuY29kZSIsInNlcmlhbGl6ZUZuIiwic2VyaWFsaXplIiwic2VyaWFsaXplZFBhcmFtcyIsImhhc2htYXJrSW5kZXgiLCJlbmNvZGVyIiwiSW50ZXJjZXB0b3JNYW5hZ2VyJDEiLCJJbnRlcmNlcHRvck1hbmFnZXIiLCJoYW5kbGVycyIsInVzZSIsImZ1bGZpbGxlZCIsInJlamVjdGVkIiwic3luY2hyb25vdXMiLCJydW5XaGVuIiwiZWplY3QiLCJjbGVhciIsImgiLCJ0cmFuc2l0aW9uYWxEZWZhdWx0cyIsInNpbGVudEpTT05QYXJzaW5nIiwiZm9yY2VkSlNPTlBhcnNpbmciLCJjbGFyaWZ5VGltZW91dEVycm9yIiwicGxhdGZvcm0kMSIsImNsYXNzZXMiLCJVUkxTZWFyY2hQYXJhbXMiLCJwcm90b2NvbHMiLCJoYXNCcm93c2VyRW52IiwiZG9jdW1lbnQiLCJoYXNTdGFuZGFyZEJyb3dzZXJFbnYiLCJwcm9kdWN0IiwibmF2aWdhdG9yIiwiaGFzU3RhbmRhcmRCcm93c2VyV2ViV29ya2VyRW52IiwiV29ya2VyR2xvYmFsU2NvcGUiLCJpbXBvcnRTY3JpcHRzIiwicGxhdGZvcm0iLCJfX3Byb3RvX18iLCJmb3JtRGF0YVRvSlNPTiIsImJ1aWxkUGF0aCIsImlzTnVtZXJpY0tleSIsImlzTGFzdCIsImFycmF5VG9PYmplY3QiLCJlbnRyaWVzIiwicGFyc2VQcm9wUGF0aCIsImRlZmF1bHRzIiwidHJhbnNpdGlvbmFsIiwiYWRhcHRlciIsInRyYW5zZm9ybVJlcXVlc3QiLCJjb250ZW50VHlwZSIsImhhc0pTT05Db250ZW50VHlwZSIsImlzT2JqZWN0UGF5bG9hZCIsInNldENvbnRlbnRUeXBlIiwiaGVscGVycyIsImlzTm9kZSIsInRvVVJMRW5jb2RlZEZvcm0iLCJmb3JtU2VyaWFsaXplciIsIl9Gb3JtRGF0YSIsImVudiIsInJhd1ZhbHVlIiwicGFyc2VyIiwic3RyaW5naWZ5U2FmZWx5IiwiSlNPTlJlcXVlc3RlZCIsInN0cmljdEpTT05QYXJzaW5nIiwiRVJSX0JBRF9SRVNQT05TRSIsInhzcmZDb29raWVOYW1lIiwieHNyZkhlYWRlck5hbWUiLCJ2YWxpZGF0ZVN0YXR1cyIsImNvbW1vbiIsImRlZmF1bHRzJDEiLCJpZ25vcmVEdXBsaWNhdGVPZiIsIiRpbnRlcm5hbHMiLCJub3JtYWxpemVIZWFkZXIiLCJoZWFkZXIiLCJub3JtYWxpemVWYWx1ZSIsIm1hdGNoSGVhZGVyVmFsdWUiLCJpc0hlYWRlck5hbWVGaWx0ZXIiLCJBeGlvc0hlYWRlcnMiLCJ2YWx1ZU9yUmV3cml0ZSIsInJld3JpdGUiLCJzZXRIZWFkZXIiLCJfdmFsdWUiLCJfaGVhZGVyIiwiX3Jld3JpdGUiLCJsSGVhZGVyIiwic2V0SGVhZGVycyIsInJhd0hlYWRlcnMiLCJwYXJzZWQiLCJsaW5lIiwicGFyc2VIZWFkZXJzIiwidG9rZW5zIiwidG9rZW5zUkUiLCJwYXJzZVRva2VucyIsImhhcyIsIm1hdGNoZXIiLCJkZWxldGUiLCJkZWxldGVkIiwiZGVsZXRlSGVhZGVyIiwibm9ybWFsaXplZCIsInciLCJjaGFyIiwiZm9ybWF0SGVhZGVyIiwidGFyZ2V0cyIsImFzU3RyaW5ncyIsInN0YXRpYyIsImNvbXB1dGVkIiwiYWNjZXNzb3JzIiwiZGVmaW5lQWNjZXNzb3IiLCJhY2Nlc3Nvck5hbWUiLCJtZXRob2ROYW1lIiwiYXJnMSIsImFyZzIiLCJhcmczIiwiY29uZmlndXJhYmxlIiwiYnVpbGRBY2Nlc3NvcnMiLCJhY2Nlc3NvciIsIm1hcHBlZCIsImhlYWRlclZhbHVlIiwiQXhpb3NIZWFkZXJzJDEiLCJ0cmFuc2Zvcm1EYXRhIiwiZm5zIiwiaXNDYW5jZWwiLCJfX0NBTkNFTF9fIiwiQ2FuY2VsZWRFcnJvciIsIkVSUl9DQU5DRUxFRCIsImNvb2tpZXMiLCJ3cml0ZSIsImV4cGlyZXMiLCJkb21haW4iLCJzZWN1cmUiLCJjb29raWUiLCJEYXRlIiwidG9HTVRTdHJpbmciLCJyZWFkIiwiZGVjb2RlVVJJQ29tcG9uZW50IiwicmVtb3ZlIiwibm93IiwiYnVpbGRGdWxsUGF0aCIsImJhc2VVUkwiLCJyZXF1ZXN0ZWRVUkwiLCJyZWxhdGl2ZVVSTCIsImNvbWJpbmVVUkxzIiwiaXNVUkxTYW1lT3JpZ2luIiwibXNpZSIsInVzZXJBZ2VudCIsInVybFBhcnNpbmdOb2RlIiwiY3JlYXRlRWxlbWVudCIsIm9yaWdpblVSTCIsInJlc29sdmVVUkwiLCJocmVmIiwic2V0QXR0cmlidXRlIiwiaGFzaCIsImhvc3RuYW1lIiwicG9ydCIsInBhdGhuYW1lIiwibG9jYXRpb24iLCJyZXF1ZXN0VVJMIiwicHJvZ3Jlc3NFdmVudFJlZHVjZXIiLCJsaXN0ZW5lciIsImlzRG93bmxvYWRTdHJlYW0iLCJieXRlc05vdGlmaWVkIiwiX3NwZWVkb21ldGVyIiwic2FtcGxlc0NvdW50IiwiYnl0ZXMiLCJ0aW1lc3RhbXBzIiwiZmlyc3RTYW1wbGVUUyIsImhlYWQiLCJ0YWlsIiwiY2h1bmtMZW5ndGgiLCJzdGFydGVkQXQiLCJieXRlc0NvdW50IiwicGFzc2VkIiwic3BlZWRvbWV0ZXIiLCJsb2FkZWQiLCJ0b3RhbCIsImxlbmd0aENvbXB1dGFibGUiLCJwcm9ncmVzc0J5dGVzIiwicmF0ZSIsInByb2dyZXNzIiwiZXN0aW1hdGVkIiwiZXZlbnQiLCJrbm93bkFkYXB0ZXJzIiwiaHR0cCIsInhociIsIlhNTEh0dHBSZXF1ZXN0IiwiUHJvbWlzZSIsInJlc29sdmUiLCJyZWplY3QiLCJyZXF1ZXN0RGF0YSIsInJlcXVlc3RIZWFkZXJzIiwib25DYW5jZWxlZCIsIndpdGhYU1JGVG9rZW4iLCJjYW5jZWxUb2tlbiIsInVuc3Vic2NyaWJlIiwic2lnbmFsIiwicmVtb3ZlRXZlbnRMaXN0ZW5lciIsIkJvb2xlYW4iLCJ1bmVzY2FwZSIsImJ0b2EiLCJmdWxsUGF0aCIsIm9ubG9hZGVuZCIsInJlc3BvbnNlSGVhZGVycyIsImdldEFsbFJlc3BvbnNlSGVhZGVycyIsIkVSUl9CQURfUkVRVUVTVCIsInNldHRsZSIsImVyciIsInJlc3BvbnNlVGV4dCIsIm9wZW4iLCJwYXJhbXNTZXJpYWxpemVyIiwib25yZWFkeXN0YXRlY2hhbmdlIiwicmVhZHlTdGF0ZSIsInJlc3BvbnNlVVJMIiwic2V0VGltZW91dCIsIm9uYWJvcnQiLCJFQ09OTkFCT1JURUQiLCJvbmVycm9yIiwiRVJSX05FVFdPUksiLCJvbnRpbWVvdXQiLCJ0aW1lb3V0RXJyb3JNZXNzYWdlIiwiRVRJTUVET1VUIiwieHNyZlZhbHVlIiwic2V0UmVxdWVzdEhlYWRlciIsIndpdGhDcmVkZW50aWFscyIsIm9uRG93bmxvYWRQcm9ncmVzcyIsImFkZEV2ZW50TGlzdGVuZXIiLCJvblVwbG9hZFByb2dyZXNzIiwidXBsb2FkIiwiY2FuY2VsIiwiYWJvcnQiLCJzdWJzY3JpYmUiLCJhYm9ydGVkIiwicGFyc2VQcm90b2NvbCIsInNlbmQiLCJyZW5kZXJSZWFzb24iLCJyZWFzb24iLCJpc1Jlc29sdmVkSGFuZGxlIiwiYWRhcHRlcnMiLCJuYW1lT3JBZGFwdGVyIiwicmVqZWN0ZWRSZWFzb25zIiwicmVhc29ucyIsInN0YXRlIiwidGhyb3dJZkNhbmNlbGxhdGlvblJlcXVlc3RlZCIsInRocm93SWZSZXF1ZXN0ZWQiLCJkaXNwYXRjaFJlcXVlc3QiLCJoZWFkZXJzVG9PYmplY3QiLCJtZXJnZUNvbmZpZyIsImNvbmZpZzEiLCJjb25maWcyIiwiZ2V0TWVyZ2VkVmFsdWUiLCJtZXJnZURlZXBQcm9wZXJ0aWVzIiwidmFsdWVGcm9tQ29uZmlnMiIsImRlZmF1bHRUb0NvbmZpZzIiLCJtZXJnZURpcmVjdEtleXMiLCJtZXJnZU1hcCIsInRpbWVvdXRNZXNzYWdlIiwiZGVjb21wcmVzcyIsImJlZm9yZVJlZGlyZWN0IiwidHJhbnNwb3J0IiwiaHR0cEFnZW50IiwiaHR0cHNBZ2VudCIsInNvY2tldFBhdGgiLCJyZXNwb25zZUVuY29kaW5nIiwiY29uZmlnVmFsdWUiLCJWRVJTSU9OIiwidmFsaWRhdG9ycyQxIiwiZGVwcmVjYXRlZFdhcm5pbmdzIiwidmFsaWRhdG9yIiwiZm9ybWF0TWVzc2FnZSIsIm9wdCIsImRlc2MiLCJvcHRzIiwiRVJSX0RFUFJFQ0FURUQiLCJjb25zb2xlIiwid2FybiIsImFzc2VydE9wdGlvbnMiLCJzY2hlbWEiLCJhbGxvd1Vua25vd24iLCJFUlJfQkFEX09QVElPTl9WQUxVRSIsIkVSUl9CQURfT1BUSU9OIiwidmFsaWRhdG9ycyIsIkF4aW9zIiwiaW5zdGFuY2VDb25maWciLCJpbnRlcmNlcHRvcnMiLCJjb25maWdPclVybCIsImJvb2xlYW4iLCJmdW5jdGlvbiIsImNvbnRleHRIZWFkZXJzIiwicmVxdWVzdEludGVyY2VwdG9yQ2hhaW4iLCJzeW5jaHJvbm91c1JlcXVlc3RJbnRlcmNlcHRvcnMiLCJpbnRlcmNlcHRvciIsInVuc2hpZnQiLCJyZXNwb25zZUludGVyY2VwdG9yQ2hhaW4iLCJwcm9taXNlIiwiY2hhaW4iLCJuZXdDb25maWciLCJvbkZ1bGZpbGxlZCIsIm9uUmVqZWN0ZWQiLCJnZXRVcmkiLCJnZW5lcmF0ZUhUVFBNZXRob2QiLCJpc0Zvcm0iLCJBeGlvcyQxIiwiQ2FuY2VsVG9rZW4iLCJleGVjdXRvciIsInJlc29sdmVQcm9taXNlIiwiX2xpc3RlbmVycyIsIm9uZnVsZmlsbGVkIiwiX3Jlc29sdmUiLCJDYW5jZWxUb2tlbiQxIiwiSHR0cFN0YXR1c0NvZGUiLCJDb250aW51ZSIsIlN3aXRjaGluZ1Byb3RvY29scyIsIlByb2Nlc3NpbmciLCJFYXJseUhpbnRzIiwiT2siLCJDcmVhdGVkIiwiQWNjZXB0ZWQiLCJOb25BdXRob3JpdGF0aXZlSW5mb3JtYXRpb24iLCJOb0NvbnRlbnQiLCJSZXNldENvbnRlbnQiLCJQYXJ0aWFsQ29udGVudCIsIk11bHRpU3RhdHVzIiwiQWxyZWFkeVJlcG9ydGVkIiwiSW1Vc2VkIiwiTXVsdGlwbGVDaG9pY2VzIiwiTW92ZWRQZXJtYW5lbnRseSIsIkZvdW5kIiwiU2VlT3RoZXIiLCJOb3RNb2RpZmllZCIsIlVzZVByb3h5IiwiVW51c2VkIiwiVGVtcG9yYXJ5UmVkaXJlY3QiLCJQZXJtYW5lbnRSZWRpcmVjdCIsIkJhZFJlcXVlc3QiLCJVbmF1dGhvcml6ZWQiLCJQYXltZW50UmVxdWlyZWQiLCJGb3JiaWRkZW4iLCJOb3RGb3VuZCIsIk1ldGhvZE5vdEFsbG93ZWQiLCJOb3RBY2NlcHRhYmxlIiwiUHJveHlBdXRoZW50aWNhdGlvblJlcXVpcmVkIiwiUmVxdWVzdFRpbWVvdXQiLCJDb25mbGljdCIsIkdvbmUiLCJMZW5ndGhSZXF1aXJlZCIsIlByZWNvbmRpdGlvbkZhaWxlZCIsIlBheWxvYWRUb29MYXJnZSIsIlVyaVRvb0xvbmciLCJVbnN1cHBvcnRlZE1lZGlhVHlwZSIsIlJhbmdlTm90U2F0aXNmaWFibGUiLCJFeHBlY3RhdGlvbkZhaWxlZCIsIkltQVRlYXBvdCIsIk1pc2RpcmVjdGVkUmVxdWVzdCIsIlVucHJvY2Vzc2FibGVFbnRpdHkiLCJMb2NrZWQiLCJGYWlsZWREZXBlbmRlbmN5IiwiVG9vRWFybHkiLCJVcGdyYWRlUmVxdWlyZWQiLCJQcmVjb25kaXRpb25SZXF1aXJlZCIsIlRvb01hbnlSZXF1ZXN0cyIsIlJlcXVlc3RIZWFkZXJGaWVsZHNUb29MYXJnZSIsIlVuYXZhaWxhYmxlRm9yTGVnYWxSZWFzb25zIiwiSW50ZXJuYWxTZXJ2ZXJFcnJvciIsIk5vdEltcGxlbWVudGVkIiwiQmFkR2F0ZXdheSIsIlNlcnZpY2VVbmF2YWlsYWJsZSIsIkdhdGV3YXlUaW1lb3V0IiwiSHR0cFZlcnNpb25Ob3RTdXBwb3J0ZWQiLCJWYXJpYW50QWxzb05lZ290aWF0ZXMiLCJJbnN1ZmZpY2llbnRTdG9yYWdlIiwiTG9vcERldGVjdGVkIiwiTm90RXh0ZW5kZWQiLCJOZXR3b3JrQXV0aGVudGljYXRpb25SZXF1aXJlZCIsIkh0dHBTdGF0dXNDb2RlJDEiLCJheGlvcyIsImNyZWF0ZUluc3RhbmNlIiwiZGVmYXVsdENvbmZpZyIsImluc3RhbmNlIiwiQ2FuY2VsIiwiYWxsIiwicHJvbWlzZXMiLCJzcHJlYWQiLCJjYWxsYmFjayIsImlzQXhpb3NFcnJvciIsInBheWxvYWQiLCJmb3JtVG9KU09OIiwiZ2V0QWRhcHRlciIsImRlZmF1bHQiLCJfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX18iLCJfX3dlYnBhY2tfcmVxdWlyZV9fIiwibW9kdWxlSWQiLCJjYWNoZWRNb2R1bGUiLCJfX3dlYnBhY2tfbW9kdWxlc19fIiwiRnVuY3Rpb24iXSwic291cmNlUm9vdCI6IiJ9 \ No newline at end of file +define((function(){return function(){var e={76:function(e,t,n){"use strict";function r(e){return r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},r(e)}var o=this&&this.__assign||function(){return o=Object.assign||function(e){for(var t,n=1,r=arguments.length;n0&&o[o.length-1])||6!==i[0]&&2!==i[0])){s=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]-1?"text/plain":"application/json"},e.prototype.getRequestBody=function(e){return[m.default.Put,m.default.Post,m.default.Delete].includes(this.method)?e:void 0},e.prototype.buildFullUrl=function(){var t,n,r=this.client.getConfig(),o=null!==(t=this.config.host)&&void 0!==t?t:r.host,i=null!==(n=this.config.version)&&void 0!==n?n:r.version;return(0,f.default)(e.protocol,o,i,this.subPath,this.url)},e.prototype.buildSubPath=function(){if(this.actionPath){var e="contactslist"===this.resource&&"csvdata/text:plain"===this.actionPath,t="batchjob"===this.resource&&"csverror/text:csv"===this.actionPath;return e||t?"DATA":this.subPath}var n="send"===this.resource,r=this.resource.indexOf("sms")>-1;return n||r?"":"REST"},e.prototype.makeRequest=function(t,n,r){var i,s={url:t,params:r,data:this.getRequestBody(n),method:this.method,responseType:"json",headers:{"User-Agent":this.getUserAgent(),"Content-Type":this.getContentType(t)},transformResponse:function(t){var n="string"==typeof t,r="json"===this.responseType;return t&&n&&r?e.parseToJSONb(t):t}};e.isBrowser()&&(s.headers["X-User-Agent"]=s.headers["User-Agent"]);var a=this.getCredentials();a.apiToken?s.headers.Authorization="Bearer ".concat(a.apiToken):s.auth={username:a.apiKey,password:a.apiSecret};var u=this.client.getConfig(),c=this.client.getOptions();c.timeout&&(s.timeout=c.timeout),c.proxy&&(s.proxy=c.proxy),c.headers&&Object.keys(c.headers).length>0&&(s.headers=o(o({},s.headers),c.headers));var l=null!==(i=this.config.output)&&void 0!==i?i:u.output;return l&&(s.responseType=l),c.maxBodyLength&&(s.maxBodyLength=c.maxBodyLength),c.maxContentLength&&(s.maxContentLength=c.maxContentLength),(0,d.default)(s)},e.prototype.setBaseURL=function(e){return this.url=e.toLowerCase(),this},e.prototype.id=function(e){if(!["string","number"].includes(r(e)))throw new Error('Argument "value" must be string or number');return this.url=(0,f.default)(this.url,e.toString()),this},e.prototype.action=function(e){if("string"!=typeof e)throw new Error('Argument "name" must be string');switch(this.actionPath=e.toLowerCase(),this.actionPath){case"csvdata":this.actionPath="csvdata/text:plain";break;case"csverror":this.actionPath="csverror/text:csv"}return this.url=(0,f.default)(this.url,this.actionPath),this.subPath=this.buildSubPath(),this},e.prototype.request=function(e,t,n){var r,o,i,s,a;return void 0===e&&(e={}),void 0===t&&(t={}),void 0===n&&(n=!0),u(this,void 0,void 0,(function(){var u,l,f,p,m,g,y,b,v,w;return c(this,(function(c){switch(c.label){case 0:if(u=this.buildFullUrl(),this.setBaseURL(this.resource),!n)return[2,{body:b=this.getRequestBody(e),params:t,url:u}];c.label=1;case 1:return c.trys.push([1,3,,4]),[4,this.makeRequest(u,e,t)];case 2:return[2,{response:l=c.sent(),body:l.data}];case 3:if((f=c.sent())instanceof d.AxiosError)throw(p=new Error).code=f.code,p.config=f.config,f.response?(m=f.response,g=m.status,y=m.statusText,b=m.data,p.response=f.response,p.statusCode=g,p.statusText=y,v=null!==(r=null==b?void 0:b.ErrorMessage)&&void 0!==r?r:f.message,p.originalMessage=v,p.message='Unsuccessful: Status Code: "'.concat(p.statusCode,'" Message: "').concat(v,'"'),b&&("string"==typeof(w=null===(a=null===(s=null===(i=null===(o=b.Messages)||void 0===o?void 0:o[0])||void 0===i?void 0:i.Errors)||void 0===s?void 0:s[0])||void 0===a?void 0:a.ErrorMessage)&&(p.message+=";\n".concat(w)),(0,h.setValueIfNotNil)(p,"ErrorMessage",b.ErrorMessage),(0,h.setValueIfNotNil)(p,"ErrorCode",b.ErrorCode),(0,h.setValueIfNotNil)(p,"ErrorIdentifier",b.ErrorIdentifier),(0,h.setValueIfNotNil)(p,"ErrorRelatedTo",b.ErrorRelatedTo))):(p.response=null,p.statusCode=null,p.statusText=null,p.originalMessage=f.message,p.message='Unsuccessful: Error Code: "'.concat(p.code,'" Message: "').concat(f.message,'"')),p;throw f;case 4:return[2]}}))}))},e.parseToJSONb=function(e){if("string"!=typeof e)throw new Error('Argument "text" must be string');var t;try{t=y.parse(e)}catch(e){t={}}return t},e.isBrowser=function(){return"object"===("undefined"==typeof window?"undefined":r(window))},e.protocol="https://",e}();t.default=b},917:function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.SentCampaign=t.DraftCampaign=void 0,function(e){!function(e){e.Tool2="tool2",e.HTML2="html2",e.MJML="mjml"}(e.EditMode||(e.EditMode={})),function(e){e[e.AXCanceled=-3]="AXCanceled",e[e.Deleted=-2]="Deleted",e[e.Archived=-1]="Archived",e[e.Draft=0]="Draft",e[e.Programmed=1]="Programmed",e[e.Sent=2]="Sent",e[e.AXTested=3]="AXTested",e[e.AXSelected=4]="AXSelected"}(e.CampaignDraftStatus||(e.CampaignDraftStatus={})),function(e){e.AXCancelled="AXCancelled",e.Deleted="Deleted",e.Archived="Archived",e.Draft="Draft",e.Programmed="Programmed",e.Sent="Sent",e.AXTested="AXTested",e.AXSelected="AXSelected"}(e.CampaignDraftSendingStatus||(e.CampaignDraftSendingStatus={}))}(t.DraftCampaign||(t.DraftCampaign={})),function(e){!function(e){e[e.Transactional=1]="Transactional",e[e.Marketing=2]="Marketing",e[e.Unknown=3]="Unknown"}(e.CampaignType||(e.CampaignType={}))}(t.SentCampaign||(t.SentCampaign={}))},566:function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.Common=void 0,function(e){!function(e){e.Day="Day",e.Week="Week",e.Month="Month",e.Year="Year"}(e.Period||(e.Period={}))}(t.Common||(t.Common={}))},235:function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.ContactProperties=t.BulkContactManagement=void 0,function(e){!function(e){e.AddForce="addforce",e.AddNoForce="addnoforce",e.Remove="remove",e.UnSub="unsub"}(e.ManageContactsAction||(e.ManageContactsAction={})),function(e){e.AddForce="addforce",e.AddNoForce="addnoforce",e.UnSub="unsub",e.DuplicateOverride="duplicate-override",e.DuplicateNoOverride="duplicate-no-override"}(e.ImportListAction||(e.ImportListAction={})),function(e){e.AddForce="addforce",e.AddNoForce="addnoforce",e.Remove="remove",e.UnSub="unsub",e.ExcludeMarketing="excludemarketing",e.IncludeMarketing="includemarketing"}(e.ImportCSVMethod||(e.ImportCSVMethod={})),function(e){e.Upload="Upload",e.Completed="Completed",e.Abort="Abort"}(e.CSVImportStatus||(e.CSVImportStatus={})),function(e){e.Completed="Completed",e.InProgress="In Progress",e.Error="Error"}(e.JobStatus||(e.JobStatus={}))}(t.BulkContactManagement||(t.BulkContactManagement={})),function(e){!function(e){e.Str="str",e.Int="int",e.Float="float",e.Bool="bool",e.DateTime="datetime"}(e.DataType||(e.DataType={})),function(e){e.Static="static",e.Historic="historic"}(e.NameSpace||(e.NameSpace={}))}(t.ContactProperties||(t.ContactProperties={}))},354:function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.Message=void 0,function(e){!function(e){e[e.UserUnknown=1]="UserUnknown",e[e.MailboxInactive=2]="MailboxInactive",e[e.QuotaExceeded=3]="QuotaExceeded",e[e.InvalidDomain=4]="InvalidDomain",e[e.NoMailHost=5]="NoMailHost",e[e.RelayOrAccessDenied=6]="RelayOrAccessDenied",e[e.SenderBlocked=7]="SenderBlocked",e[e.ContentBlocked=8]="ContentBlocked",e[e.PolicyIssue=9]="PolicyIssue",e[e.SystemIssue=10]="SystemIssue",e[e.ProtocolIssue=11]="ProtocolIssue",e[e.ConnectionIssue=12]="ConnectionIssue",e[e.GreyListed=13]="GreyListed",e[e.PreBlocked=14]="PreBlocked",e[e.DuplicateInCampaign=15]="DuplicateInCampaign",e[e.SpamPreBlocked=16]="SpamPreBlocked",e[e.BadOrEmptyTemplate=17]="BadOrEmptyTemplate",e[e.ErrorInTemplateLanguage=18]="ErrorInTemplateLanguage",e[e.TypoFix=19]="TypoFix",e[e.BlackListed=20]="BlackListed",e[e.SpamReporter=21]="SpamReporter"}(e.MessageState||(e.MessageState={})),function(e){e[e.Transactional=1]="Transactional",e[e.Marketing=2]="Marketing",e[e.Unknown=3]="Unknown"}(e.FromType||(e.FromType={})),function(e){e[e.Processed=0]="Processed",e[e.Queued=1]="Queued",e[e.Sent=2]="Sent",e[e.Opened=3]="Opened",e[e.Clicked=4]="Clicked",e[e.Bounce=5]="Bounce",e[e.Spam=6]="Spam",e[e.Unsub=7]="Unsub",e[e.Blocked=8]="Blocked",e[e.SoftBounce=9]="SoftBounce",e[e.HardBounce=10]="HardBounce",e[e.Deferred=11]="Deferred"}(e.MessageStatus||(e.MessageStatus={})),function(e){e.Unknown="unknown",e.Queued="queued",e.Sent="sent",e.Opened="opened",e.Clicked="clicked",e.Bounce="bounce",e.Spam="spam",e.Unsub="unsub",e.Blocked="blocked",e.HardBounced="hardbounced",e.SoftBounced="softbounced",e.Deferred="deferred"}(e.CurrentMessageStatus||(e.CurrentMessageStatus={})),function(e){e.Sent="sent",e.Opened="opened",e.Clicked="clicked",e.Bounced="bounced",e.Blocked="blocked",e.Unsub="unsub",e.Spam="spam"}(e.EventType||(e.EventType={}))}(t.Message||(t.Message={}))},635:function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.Segmentation=void 0,function(e){!function(e){e.Used="used",e.UnUsed="unused",e.Deleted="deleted"}(e.SegmentStatus||(e.SegmentStatus={}))}(t.Segmentation||(t.Segmentation={}))},410:function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.SendEmailV3_1=void 0,function(e){!function(e){e.AccountDefault="account_default",e.Disabled="disabled",e.Enabled="enabled"}(e.TrackOpens||(e.TrackOpens={})),function(e){e.AccountDefault="account_default",e.Disabled="disabled",e.Enabled="enabled"}(e.TrackClicks||(e.TrackClicks={})),function(e){e.Success="success",e.Error="error"}(e.ResponseStatus||(e.ResponseStatus={}))}(t.SendEmailV3_1||(t.SendEmailV3_1={}))},256:function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.DNS=t.Sender=void 0,function(e){!function(e){e.Transactional="transactional",e.Bulk="bulk",e.Unknown="unknown"}(e.EmailType||(e.EmailType={})),function(e){e.Inactive="Inactive",e.Active="Active",e.Deleted="Deleted"}(e.SenderStatus||(e.SenderStatus={}))}(t.Sender||(t.Sender={})),function(e){!function(e){e.OK="OK",e.Error="Error",e.NotChecked="Not checked"}(e.DKIMConfigurationCheckStatus||(e.DKIMConfigurationCheckStatus={})),function(e){e.OK="OK",e.Error="Error"}(e.DKIMConfigurationStatus||(e.DKIMConfigurationStatus={})),function(e){e.OK="OK",e.Error="Error",e.NotChecked="Not checked",e.NotFound="Not found"}(e.SPFConfigurationCheckStatus||(e.SPFConfigurationCheckStatus={})),function(e){e.OK="OK",e.Error="Error"}(e.SPFConfigurationStatus||(e.SPFConfigurationStatus={}))}(t.DNS||(t.DNS={}))},295:function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.APIKeyConfiguration=void 0,function(e){!function(e){e.Normal="Normal",e.SoftLock="Softlock",e.HardLock="Hardlock"}(e.RunLevel||(e.RunLevel={}))}(t.APIKeyConfiguration||(t.APIKeyConfiguration={}))},83:function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.Statistic=void 0,function(e){!function(e){e.SentCampaign="Campaign",e.ABTesting="AX",e.Draft="NL"}(e.CampaignOverviewIDType||(e.CampaignOverviewIDType={})),function(e){e.Tool="tool",e.HTML="html",e.Tool2="tool2",e.HTML2="html2",e.MJML="mjml"}(e.CampaignOverviewEditMode||(e.CampaignOverviewEditMode={})),function(e){e.Full="full",e.Unknown="unknown"}(e.CampaignOverviewEditType||(e.CampaignOverviewEditType={})),function(e){e.Campaign="Campaign",e.APIKey="APIKey",e.List="List",e.Sender="Sender"}(e.CounterSource||(e.CounterSource={})),function(e){e.Highest="Highest",e.Hour="Hour",e.Day="Day",e.Lifetime="Lifetime"}(e.CounterResolution||(e.CounterResolution={})),function(e){e.Message="Message",e.Event="Event"}(e.CounterTiming||(e.CounterTiming={})),function(e){e.Open="open",e.Click="click"}(e.EmailEvent||(e.EmailEvent={}))}(t.Statistic||(t.Statistic={}))},98:function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.Template=void 0,function(e){!function(e){e.Full="full",e.Basic="basic",e.NewsLetter="newsletter",e.ECommerce="e-commerce",e.Events="events",e.Travel="travel",e.Sports="sports",e.Welcome="welcome",e.ContactPropertyUpdate="contact-property-update",e.Support="support",e.Invoice="invoice",e.Anniversary="anniversary",e.Account="account",e.Activation="activation"}(e.Categories||(e.Categories={})),function(e){e.ContainsAny="containsany",e.ContainsAll="containsall",e.IsSubSet="issubset"}(e.CategoriesSelectionMethod||(e.CategoriesSelectionMethod={})),function(e){e[e.DragAndDropBuilder=1]="DragAndDropBuilder",e[e.HTMLBuilder=2]="HTMLBuilder",e[e.SavedSectionBuilder=3]="SavedSectionBuilder",e[e.MJMLBuilder=4]="MJMLBuilder"}(e.EditMode||(e.EditMode={})),function(e){e.ApiKey="apikey",e.User="user",e.Global="global"}(e.OwnerType||(e.OwnerType={})),function(e){e.Marketing="marketing",e.Transactional="transactional",e.Automation="automation"}(e.Purposes||(e.Purposes={})),function(e){e.ContainsAny="containsany",e.ContainsAll="containsall",e.IsSubSet="issubset"}(e.PurposesSelectionMethod||(e.PurposesSelectionMethod={}))}(t.Template||(t.Template={}))},174:function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.Webhook=void 0,function(e){!function(e){e.Open="open",e.Click="click",e.Bounce="bounce",e.Spam="spam",e.Blocked="blocked",e.UnSub="unsub",e.Sent="sent"}(e.EventType||(e.EventType={})),function(e){e[e.Click=1]="Click",e[e.Bounce=2]="Bounce",e[e.Spam=3]="Spam",e[e.Blocked=4]="Blocked",e[e.Unsubscribe=5]="Unsubscribe",e[e.Open=6]="Open",e[e.Sent=7]="Sent"}(e.EventTypeValue||(e.EventTypeValue={})),function(e){e.Dead="dead",e.Alive="alive"}(e.Status||(e.Status={}))}(t.Webhook||(t.Webhook={}))},310:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.APIKeyConfiguration=t.DNS=t.Sender=t.Webhook=t.Statistic=t.Template=t.Segmentation=t.SentCampaign=t.DraftCampaign=t.ContactProperties=t.BulkContactManagement=t.Message=t.SendEmailV3_1=t.Common=void 0;var r=n(566);Object.defineProperty(t,"Common",{enumerable:!0,get:function(){return r.Common}});var o=n(410);Object.defineProperty(t,"SendEmailV3_1",{enumerable:!0,get:function(){return o.SendEmailV3_1}});var i=n(354);Object.defineProperty(t,"Message",{enumerable:!0,get:function(){return i.Message}});var s=n(235);Object.defineProperty(t,"BulkContactManagement",{enumerable:!0,get:function(){return s.BulkContactManagement}}),Object.defineProperty(t,"ContactProperties",{enumerable:!0,get:function(){return s.ContactProperties}});var a=n(917);Object.defineProperty(t,"DraftCampaign",{enumerable:!0,get:function(){return a.DraftCampaign}}),Object.defineProperty(t,"SentCampaign",{enumerable:!0,get:function(){return a.SentCampaign}});var u=n(635);Object.defineProperty(t,"Segmentation",{enumerable:!0,get:function(){return u.Segmentation}});var c=n(98);Object.defineProperty(t,"Template",{enumerable:!0,get:function(){return c.Template}});var l=n(83);Object.defineProperty(t,"Statistic",{enumerable:!0,get:function(){return l.Statistic}});var f=n(174);Object.defineProperty(t,"Webhook",{enumerable:!0,get:function(){return f.Webhook}});var p=n(256);Object.defineProperty(t,"Sender",{enumerable:!0,get:function(){return p.Sender}}),Object.defineProperty(t,"DNS",{enumerable:!0,get:function(){return p.DNS}});var d=n(295);Object.defineProperty(t,"APIKeyConfiguration",{enumerable:!0,get:function(){return d.APIKeyConfiguration}})},6:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.setValueIfNotNil=t.isPureObject=t.isUndefined=t.isNull=t.isNil=void 0;var o=r(n(808));t.isNil=o.default;var i=r(n(376));t.isNull=i.default;var s=r(n(34));t.isUndefined=s.default;var a=r(n(818));t.isPureObject=a.default;var u=r(n(190));t.setValueIfNotNil=u.default},808:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var o=r(n(376)),i=r(n(34));t.default=function(e){return(0,i.default)(e)||(0,o.default)(e)}},376:function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e){return null===e}},818:function(e,t){"use strict";function n(e){return n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},n(e)}Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e){return"object"===n(e)&&null!==e&&(Object.getPrototypeOf(e)===Object.prototype||null===Object.getPrototypeOf(e))}},34:function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e){return void 0===e}},190:function(e,t,n){"use strict";function r(e){return r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},r(e)}var o=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var i=o(n(808)),s=o(n(376));t.default=function(e,t,n){if("object"!==r(e)||(0,s.default)(e))throw Error('Argument "targetObject" is not object');if(!t)throw Error('Argument "path" is required');(0,i.default)(n)||(e[t]=n)}},431:function(e,t,n){var r;!function(o){"use strict";var i,s=/^-?(?:\d+(?:\.\d*)?|\.\d+)(?:e[+-]?\d+)?$/i,a=Math.ceil,u=Math.floor,c="[BigNumber Error] ",l=c+"Number primitive has more than 15 significant digits: ",f=1e14,p=14,d=9007199254740991,h=[1,10,100,1e3,1e4,1e5,1e6,1e7,1e8,1e9,1e10,1e11,1e12,1e13],m=1e7,g=1e9;function y(e){var t=0|e;return e>0||e===t?t:t-1}function b(e){for(var t,n,r=1,o=e.length,i=e[0]+"";rc^n?1:-1;for(a=(u=o.length)<(c=i.length)?u:c,s=0;si[s]^n?1:-1;return u==c?0:u>c^n?1:-1}function w(e,t,n,r){if(en||e!==u(e))throw Error(c+(r||"Argument")+("number"==typeof e?en?" out of range: ":" not an integer: ":" not a primitive number: ")+String(e))}function S(e){var t=e.c.length-1;return y(e.e/p)==t&&e.c[t]%2!=0}function O(e,t){return(e.length>1?e.charAt(0)+"."+e.slice(1):e)+(t<0?"e":"e+")+t}function E(e,t,n){var r,o;if(t<0){for(o=n+".";++t;o+=n);e=o+e}else if(++t>(r=e.length)){for(o=n,t-=r;--t;o+=n);e+=o}else tU?y.c=y.e=null:e.e=10;f/=10,c++);return void(c>U?y.c=y.e=null:(y.e=c,y.c=[e]))}g=String(e)}else{if(!s.test(g=String(e)))return o(y,g,h);y.s=45==g.charCodeAt(0)?(g=g.slice(1),-1):1}(c=g.indexOf("."))>-1&&(g=g.replace(".","")),(f=g.search(/e/i))>0?(c<0&&(c=f),c+=+g.slice(f+1),g=g.substring(0,f)):c<0&&(c=g.length)}else{if(w(t,2,H.length,"Base"),10==t)return W(y=new K(e),N+y.e+1,x);if(g=String(e),h="number"==typeof e){if(0*e!=0)return o(y,g,h,t);if(y.s=1/e<0?(g=g.slice(1),-1):1,K.DEBUG&&g.replace(/^0\.0*|\./,"").length>15)throw Error(l+e)}else y.s=45===g.charCodeAt(0)?(g=g.slice(1),-1):1;for(n=H.slice(0,t),c=f=0,m=g.length;fc){c=m;continue}}else if(!a&&(g==g.toUpperCase()&&(g=g.toLowerCase())||g==g.toLowerCase()&&(g=g.toUpperCase()))){a=!0,f=-1,c=0;continue}return o(y,String(e),h,t)}h=!1,(c=(g=r(g,t,10,y.s)).indexOf("."))>-1?g=g.replace(".",""):c=g.length}for(f=0;48===g.charCodeAt(f);f++);for(m=g.length;48===g.charCodeAt(--m););if(g=g.slice(f,++m)){if(m-=f,h&&K.DEBUG&&m>15&&(e>d||e!==u(e)))throw Error(l+y.s*e);if((c=c-f-1)>U)y.c=y.e=null;else if(c=M)?O(u,s):E(u,s,"0");else if(i=(e=W(new K(e),t,n)).e,a=(u=b(e.c)).length,1==r||2==r&&(t<=i||i<=B)){for(;aa){if(--t>0)for(u+=".";t--;u+="0");}else if((t+=i-a)>0)for(i+1==a&&(u+=".");t--;u+="0");return e.s<0&&o?"-"+u:u}function z(e,t){for(var n,r=1,o=new K(e[0]);r=10;o/=10,r++);return(n=r+n*p-1)>U?e.c=e.e=null:n=10;c/=10,o++);if((i=t-o)<0)i+=p,s=t,m=(l=g[d=0])/y[o-s-1]%10|0;else if((d=a((i+1)/p))>=g.length){if(!r)break e;for(;g.length<=d;g.push(0));l=m=0,o=1,s=(i%=p)-p+1}else{for(l=c=g[d],o=1;c>=10;c/=10,o++);m=(s=(i%=p)-p+o)<0?0:l/y[o-s-1]%10|0}if(r=r||t<0||null!=g[d+1]||(s<0?l:l%y[o-s-1]),r=n<4?(m||r)&&(0==n||n==(e.s<0?3:2)):m>5||5==m&&(4==n||r||6==n&&(i>0?s>0?l/y[o-s]:0:g[d-1])%10&1||n==(e.s<0?8:7)),t<1||!g[0])return g.length=0,r?(t-=e.e+1,g[0]=y[(p-t%p)%p],e.e=-t||0):g[0]=e.e=0,e;if(0==i?(g.length=d,c=1,d--):(g.length=d+1,c=y[p-i],g[d]=s>0?u(l/y[o-s]%y[s])*c:0),r)for(;;){if(0==d){for(i=1,s=g[0];s>=10;s/=10,i++);for(s=g[0]+=c,c=1;s>=10;s/=10,c++);i!=c&&(e.e++,g[0]==f&&(g[0]=1));break}if(g[d]+=c,g[d]!=f)break;g[d--]=0,c=1}for(i=g.length;0===g[--i];g.pop());}e.e>U?e.c=e.e=null:e.e=M?O(t,n):E(t,n,"0"),e.s<0?"-"+t:t)}return K.clone=e,K.ROUND_UP=0,K.ROUND_DOWN=1,K.ROUND_CEIL=2,K.ROUND_FLOOR=3,K.ROUND_HALF_UP=4,K.ROUND_HALF_DOWN=5,K.ROUND_HALF_EVEN=6,K.ROUND_HALF_CEIL=7,K.ROUND_HALF_FLOOR=8,K.EUCLID=9,K.config=K.set=function(e){var t,n;if(null!=e){if("object"!=typeof e)throw Error(c+"Object expected: "+e);if(e.hasOwnProperty(t="DECIMAL_PLACES")&&(w(n=e[t],0,g,t),N=n),e.hasOwnProperty(t="ROUNDING_MODE")&&(w(n=e[t],0,8,t),x=n),e.hasOwnProperty(t="EXPONENTIAL_AT")&&((n=e[t])&&n.pop?(w(n[0],-g,0,t),w(n[1],0,g,t),B=n[0],M=n[1]):(w(n,-g,g,t),B=-(M=n<0?-n:n))),e.hasOwnProperty(t="RANGE"))if((n=e[t])&&n.pop)w(n[0],-g,-1,t),w(n[1],1,g,t),D=n[0],U=n[1];else{if(w(n,-g,g,t),!n)throw Error(c+t+" cannot be zero: "+n);D=-(U=n<0?-n:n)}if(e.hasOwnProperty(t="CRYPTO")){if((n=e[t])!==!!n)throw Error(c+t+" not true or false: "+n);if(n){if("undefined"==typeof crypto||!crypto||!crypto.getRandomValues&&!crypto.randomBytes)throw L=!n,Error(c+"crypto unavailable");L=n}else L=n}if(e.hasOwnProperty(t="MODULO_MODE")&&(w(n=e[t],0,9,t),I=n),e.hasOwnProperty(t="POW_PRECISION")&&(w(n=e[t],0,g,t),F=n),e.hasOwnProperty(t="FORMAT")){if("object"!=typeof(n=e[t]))throw Error(c+t+" not an object: "+n);q=n}if(e.hasOwnProperty(t="ALPHABET")){if("string"!=typeof(n=e[t])||/^.?$|[+\-.\s]|(.).*\1/.test(n))throw Error(c+t+" invalid: "+n);H=n}}return{DECIMAL_PLACES:N,ROUNDING_MODE:x,EXPONENTIAL_AT:[B,M],RANGE:[D,U],CRYPTO:L,MODULO_MODE:I,POW_PRECISION:F,FORMAT:q,ALPHABET:H}},K.isBigNumber=function(e){if(!e||!0!==e._isBigNumber)return!1;if(!K.DEBUG)return!0;var t,n,r=e.c,o=e.e,i=e.s;e:if("[object Array]"=={}.toString.call(r)){if((1===i||-1===i)&&o>=-g&&o<=g&&o===u(o)){if(0===r[0]){if(0===o&&1===r.length)return!0;break e}if((t=(o+1)%p)<1&&(t+=p),String(r[0]).length==t){for(t=0;t=f||n!==u(n))break e;if(0!==n)return!0}}}else if(null===r&&null===o&&(null===i||1===i||-1===i))return!0;throw Error(c+"Invalid BigNumber: "+e)},K.maximum=K.max=function(){return z(arguments,_.lt)},K.minimum=K.min=function(){return z(arguments,_.gt)},K.random=(i=9007199254740992,A=Math.random()*i&2097151?function(){return u(Math.random()*i)}:function(){return 8388608*(1073741824*Math.random()|0)+(8388608*Math.random()|0)},function(e){var t,n,r,o,i,s=0,l=[],f=new K(R);if(null==e?e=N:w(e,0,g),o=a(e/p),L)if(crypto.getRandomValues){for(t=crypto.getRandomValues(new Uint32Array(o*=2));s>>11))>=9e15?(n=crypto.getRandomValues(new Uint32Array(2)),t[s]=n[0],t[s+1]=n[1]):(l.push(i%1e14),s+=2);s=o/2}else{if(!crypto.randomBytes)throw L=!1,Error(c+"crypto unavailable");for(t=crypto.randomBytes(o*=7);s=9e15?crypto.randomBytes(7).copy(t,s):(l.push(i%1e14),s+=7);s=o/7}if(!L)for(;s=10;i/=10,s++);sn-1&&(null==s[o+1]&&(s[o+1]=0),s[o+1]+=s[o]/n|0,s[o]%=n)}return s.reverse()}return function(r,o,i,s,a){var u,c,l,f,p,d,h,m,g=r.indexOf("."),y=N,v=x;for(g>=0&&(f=F,F=0,r=r.replace(".",""),d=(m=new K(o)).pow(r.length-g),F=f,m.c=t(E(b(d.c),d.e,"0"),10,i,e),m.e=m.c.length),l=f=(h=t(r,o,i,a?(u=H,e):(u=e,H))).length;0==h[--f];h.pop());if(!h[0])return u.charAt(0);if(g<0?--l:(d.c=h,d.e=l,d.s=s,h=(d=n(d,m,y,v,i)).c,p=d.r,l=d.e),g=h[c=l+y+1],f=i/2,p=p||c<0||null!=h[c+1],p=v<4?(null!=g||p)&&(0==v||v==(d.s<0?3:2)):g>f||g==f&&(4==v||p||6==v&&1&h[c-1]||v==(d.s<0?8:7)),c<1||!h[0])r=p?E(u.charAt(1),-y,u.charAt(0)):u.charAt(0);else{if(h.length=c,p)for(--i;++h[--c]>i;)h[c]=0,c||(++l,h=[1].concat(h));for(f=h.length;!h[--f];);for(g=0,r="";g<=f;r+=u.charAt(h[g++]));r=E(r,l,u.charAt(0))}return r}}(),n=function(){function e(e,t,n){var r,o,i,s,a=0,u=e.length,c=t%m,l=t/m|0;for(e=e.slice();u--;)a=((o=c*(i=e[u]%m)+(r=l*i+(s=e[u]/m|0)*c)%m*m+a)/n|0)+(r/m|0)+l*s,e[u]=o%n;return a&&(e=[a].concat(e)),e}function t(e,t,n,r){var o,i;if(n!=r)i=n>r?1:-1;else for(o=i=0;ot[o]?1:-1;break}return i}function n(e,t,n,r){for(var o=0;n--;)e[n]-=o,o=e[n]1;e.splice(0,1));}return function(r,o,i,s,a){var c,l,d,h,m,g,b,v,w,S,O,E,A,C,P,j,T,k=r.s==o.s?1:-1,_=r.c,R=o.c;if(!(_&&_[0]&&R&&R[0]))return new K(r.s&&o.s&&(_?!R||_[0]!=R[0]:R)?_&&0==_[0]||!R?0*k:k/0:NaN);for(w=(v=new K(k)).c=[],k=i+(l=r.e-o.e)+1,a||(a=f,l=y(r.e/p)-y(o.e/p),k=k/p|0),d=0;R[d]==(_[d]||0);d++);if(R[d]>(_[d]||0)&&l--,k<0)w.push(1),h=!0;else{for(C=_.length,j=R.length,d=0,k+=2,(m=u(a/(R[0]+1)))>1&&(R=e(R,m,a),_=e(_,m,a),j=R.length,C=_.length),A=j,O=(S=_.slice(0,j)).length;O=a/2&&P++;do{if(m=0,(c=t(R,S,j,O))<0){if(E=S[0],j!=O&&(E=E*a+(S[1]||0)),(m=u(E/P))>1)for(m>=a&&(m=a-1),b=(g=e(R,m,a)).length,O=S.length;1==t(g,S,b,O);)m--,n(g,j=10;k/=10,d++);W(v,i+(v.e=d+l*p-1)+1,s,h)}else v.e=l,v.r=+h;return v}}(),C=/^(-?)0([xbo])(?=\w[\w.]*$)/i,P=/^([^.]+)\.$/,j=/^\.([^.]+)$/,T=/^-?(Infinity|NaN)$/,k=/^\s*\+(?=[\w.])|^\s+|\s+$/g,o=function(e,t,n,r){var o,i=n?t:t.replace(k,"");if(T.test(i))e.s=isNaN(i)?null:i<0?-1:1;else{if(!n&&(i=i.replace(C,(function(e,t,n){return o="x"==(n=n.toLowerCase())?16:"b"==n?2:8,r&&r!=o?e:t})),r&&(o=r,i=i.replace(P,"$1").replace(j,"0.$1")),t!=i))return new K(i,o);if(K.DEBUG)throw Error(c+"Not a"+(r?" base "+r:"")+" number: "+t);e.s=null}e.c=e.e=null},_.absoluteValue=_.abs=function(){var e=new K(this);return e.s<0&&(e.s=1),e},_.comparedTo=function(e,t){return v(this,new K(e,t))},_.decimalPlaces=_.dp=function(e,t){var n,r,o,i=this;if(null!=e)return w(e,0,g),null==t?t=x:w(t,0,8),W(new K(i),e+i.e+1,t);if(!(n=i.c))return null;if(r=((o=n.length-1)-y(this.e/p))*p,o=n[o])for(;o%10==0;o/=10,r--);return r<0&&(r=0),r},_.dividedBy=_.div=function(e,t){return n(this,new K(e,t),N,x)},_.dividedToIntegerBy=_.idiv=function(e,t){return n(this,new K(e,t),0,1)},_.exponentiatedBy=_.pow=function(e,t){var n,r,o,i,s,l,f,d,h=this;if((e=new K(e)).c&&!e.isInteger())throw Error(c+"Exponent not an integer: "+G(e));if(null!=t&&(t=new K(t)),s=e.e>14,!h.c||!h.c[0]||1==h.c[0]&&!h.e&&1==h.c.length||!e.c||!e.c[0])return d=new K(Math.pow(+G(h),s?2-S(e):+G(e))),t?d.mod(t):d;if(l=e.s<0,t){if(t.c?!t.c[0]:!t.s)return new K(NaN);(r=!l&&h.isInteger()&&t.isInteger())&&(h=h.mod(t))}else{if(e.e>9&&(h.e>0||h.e<-1||(0==h.e?h.c[0]>1||s&&h.c[1]>=24e7:h.c[0]<8e13||s&&h.c[0]<=9999975e7)))return i=h.s<0&&S(e)?-0:0,h.e>-1&&(i=1/i),new K(l?1/i:i);F&&(i=a(F/p+2))}for(s?(n=new K(.5),l&&(e.s=1),f=S(e)):f=(o=Math.abs(+G(e)))%2,d=new K(R);;){if(f){if(!(d=d.times(h)).c)break;i?d.c.length>i&&(d.c.length=i):r&&(d=d.mod(t))}if(o){if(0===(o=u(o/2)))break;f=o%2}else if(W(e=e.times(n),e.e+1,1),e.e>14)f=S(e);else{if(0===(o=+G(e)))break;f=o%2}h=h.times(h),i?h.c&&h.c.length>i&&(h.c.length=i):r&&(h=h.mod(t))}return r?d:(l&&(d=R.div(d)),t?d.mod(t):i?W(d,F,x,undefined):d)},_.integerValue=function(e){var t=new K(this);return null==e?e=x:w(e,0,8),W(t,t.e+1,e)},_.isEqualTo=_.eq=function(e,t){return 0===v(this,new K(e,t))},_.isFinite=function(){return!!this.c},_.isGreaterThan=_.gt=function(e,t){return v(this,new K(e,t))>0},_.isGreaterThanOrEqualTo=_.gte=function(e,t){return 1===(t=v(this,new K(e,t)))||0===t},_.isInteger=function(){return!!this.c&&y(this.e/p)>this.c.length-2},_.isLessThan=_.lt=function(e,t){return v(this,new K(e,t))<0},_.isLessThanOrEqualTo=_.lte=function(e,t){return-1===(t=v(this,new K(e,t)))||0===t},_.isNaN=function(){return!this.s},_.isNegative=function(){return this.s<0},_.isPositive=function(){return this.s>0},_.isZero=function(){return!!this.c&&0==this.c[0]},_.minus=function(e,t){var n,r,o,i,s=this,a=s.s;if(t=(e=new K(e,t)).s,!a||!t)return new K(NaN);if(a!=t)return e.s=-t,s.plus(e);var u=s.e/p,c=e.e/p,l=s.c,d=e.c;if(!u||!c){if(!l||!d)return l?(e.s=-t,e):new K(d?s:NaN);if(!l[0]||!d[0])return d[0]?(e.s=-t,e):new K(l[0]?s:3==x?-0:0)}if(u=y(u),c=y(c),l=l.slice(),a=u-c){for((i=a<0)?(a=-a,o=l):(c=u,o=d),o.reverse(),t=a;t--;o.push(0));o.reverse()}else for(r=(i=(a=l.length)<(t=d.length))?a:t,a=t=0;t0)for(;t--;l[n++]=0);for(t=f-1;r>a;){if(l[--r]=0;){for(n=0,h=E[o]%w,g=E[o]/w|0,i=o+(s=u);i>o;)n=((c=h*(c=O[--s]%w)+(a=g*c+(l=O[s]/w|0)*h)%w*w+b[i]+n)/v|0)+(a/w|0)+g*l,b[i--]=c%v;b[i]=n}return n?++r:b.splice(0,1),J(e,b,r)},_.negated=function(){var e=new K(this);return e.s=-e.s||null,e},_.plus=function(e,t){var n,r=this,o=r.s;if(t=(e=new K(e,t)).s,!o||!t)return new K(NaN);if(o!=t)return e.s=-t,r.minus(e);var i=r.e/p,s=e.e/p,a=r.c,u=e.c;if(!i||!s){if(!a||!u)return new K(o/0);if(!a[0]||!u[0])return u[0]?e:new K(a[0]?r:0*o)}if(i=y(i),s=y(s),a=a.slice(),o=i-s){for(o>0?(s=i,n=u):(o=-o,n=a),n.reverse();o--;n.push(0));n.reverse()}for((o=a.length)-(t=u.length)<0&&(n=u,u=a,a=n,t=o),o=0;t;)o=(a[--t]=a[t]+u[t]+o)/f|0,a[t]=f===a[t]?0:a[t]%f;return o&&(a=[o].concat(a),++s),J(e,a,s)},_.precision=_.sd=function(e,t){var n,r,o,i=this;if(null!=e&&e!==!!e)return w(e,1,g),null==t?t=x:w(t,0,8),W(new K(i),e,t);if(!(n=i.c))return null;if(r=(o=n.length-1)*p+1,o=n[o]){for(;o%10==0;o/=10,r--);for(o=n[0];o>=10;o/=10,r++);}return e&&i.e+1>r&&(r=i.e+1),r},_.shiftedBy=function(e){return w(e,-9007199254740991,d),this.times("1e"+e)},_.squareRoot=_.sqrt=function(){var e,t,r,o,i,s=this,a=s.c,u=s.s,c=s.e,l=N+4,f=new K("0.5");if(1!==u||!a||!a[0])return new K(!u||u<0&&(!a||a[0])?NaN:a?s:1/0);if(0==(u=Math.sqrt(+G(s)))||u==1/0?(((t=b(a)).length+c)%2==0&&(t+="0"),u=Math.sqrt(+t),c=y((c+1)/2)-(c<0||c%2),r=new K(t=u==1/0?"5e"+c:(t=u.toExponential()).slice(0,t.indexOf("e")+1)+c)):r=new K(u+""),r.c[0])for((u=(c=r.e)+l)<3&&(u=0);;)if(i=r,r=f.times(i.plus(n(s,i,l,1))),b(i.c).slice(0,u)===(t=b(r.c)).slice(0,u)){if(r.e0&&m>0){for(i=m%a||a,f=h.substr(0,i);i0&&(f+=l+h.slice(i)),d&&(f="-"+f)}r=p?f+(n.decimalSeparator||"")+((u=+n.fractionGroupSize)?p.replace(new RegExp("\\d{"+u+"}\\B","g"),"$&"+(n.fractionGroupSeparator||"")):p):f}return(n.prefix||"")+r+(n.suffix||"")},_.toFraction=function(e){var t,r,o,i,s,a,u,l,f,d,m,g,y=this,v=y.c;if(null!=e&&(!(u=new K(e)).isInteger()&&(u.c||1!==u.s)||u.lt(R)))throw Error(c+"Argument "+(u.isInteger()?"out of range: ":"not an integer: ")+G(u));if(!v)return new K(y);for(t=new K(R),f=r=new K(R),o=l=new K(R),g=b(v),s=t.e=g.length-y.e-1,t.c[0]=h[(a=s%p)<0?p+a:a],e=!e||u.comparedTo(t)>0?s>0?t:f:u,a=U,U=1/0,u=new K(g),l.c[0]=0;d=n(u,t,0,1),1!=(i=r.plus(d.times(o))).comparedTo(e);)r=o,o=i,f=l.plus(d.times(i=f)),l=i,t=u.minus(d.times(i=t)),u=i;return i=n(e.minus(r),o,0,1),l=l.plus(i.times(f)),r=r.plus(i.times(o)),l.s=f.s=y.s,m=n(f,o,s*=2,x).minus(y).abs().comparedTo(n(l,r,s,x).minus(y).abs())<1?[f,o]:[l,r],U=a,m},_.toNumber=function(){return+G(this)},_.toPrecision=function(e,t){return null!=e&&w(e,1,g),V(this,e,t,2)},_.toString=function(e){var t,n=this,o=n.s,i=n.e;return null===i?o?(t="Infinity",o<0&&(t="-"+t)):t="NaN":(null==e?t=i<=B||i>=M?O(b(n.c),i):E(b(n.c),i,"0"):10===e?t=E(b((n=W(new K(n),N+i+1,x)).c),n.e,"0"):(w(e,2,H.length,"Base"),t=r(E(b(n.c),i,"0"),10,e,o,!0)),o<0&&n.c[0]&&(t="-"+t)),t},_.valueOf=_.toJSON=function(){return G(this)},_._isBigNumber=!0,null!=t&&K.set(t),K}(),i.default=i.BigNumber=i,void 0===(r=function(){return i}.call(t,n,t,e))||(e.exports=r)}()},400:function(e,t,n){var r=n(123).stringify,o=n(813);e.exports=function(e){return{parse:o(e),stringify:r}},e.exports.parse=o(),e.exports.stringify=r},813:function(e,t,n){var r=null;const o=/(?:_|\\u005[Ff])(?:_|\\u005[Ff])(?:p|\\u0070)(?:r|\\u0072)(?:o|\\u006[Ff])(?:t|\\u0074)(?:o|\\u006[Ff])(?:_|\\u005[Ff])(?:_|\\u005[Ff])/,i=/(?:c|\\u0063)(?:o|\\u006[Ff])(?:n|\\u006[Ee])(?:s|\\u0073)(?:t|\\u0074)(?:r|\\u0072)(?:u|\\u0075)(?:c|\\u0063)(?:t|\\u0074)(?:o|\\u006[Ff])(?:r|\\u0072)/;e.exports=function(e){"use strict";var t={strict:!1,storeAsString:!1,alwaysParseAsBig:!1,useNativeBigInt:!1,protoAction:"error",constructorAction:"error"};if(null!=e){if(!0===e.strict&&(t.strict=!0),!0===e.storeAsString&&(t.storeAsString=!0),t.alwaysParseAsBig=!0===e.alwaysParseAsBig&&e.alwaysParseAsBig,t.useNativeBigInt=!0===e.useNativeBigInt&&e.useNativeBigInt,void 0!==e.constructorAction){if("error"!==e.constructorAction&&"ignore"!==e.constructorAction&&"preserve"!==e.constructorAction)throw new Error(`Incorrect value for constructorAction option, must be "error", "ignore" or undefined but passed ${e.constructorAction}`);t.constructorAction=e.constructorAction}if(void 0!==e.protoAction){if("error"!==e.protoAction&&"ignore"!==e.protoAction&&"preserve"!==e.protoAction)throw new Error(`Incorrect value for protoAction option, must be "error", "ignore" or undefined but passed ${e.protoAction}`);t.protoAction=e.protoAction}}var s,a,u,c,l={'"':'"',"\\":"\\","/":"/",b:"\b",f:"\f",n:"\n",r:"\r",t:"\t"},f=function(e){throw{name:"SyntaxError",message:e,at:s,text:u}},p=function(e){return e&&e!==a&&f("Expected '"+e+"' instead of '"+a+"'"),a=u.charAt(s),s+=1,a},d=function(){var e,o="";for("-"===a&&(o="-",p("-"));a>="0"&&a<="9";)o+=a,p();if("."===a)for(o+=".";p()&&a>="0"&&a<="9";)o+=a;if("e"===a||"E"===a)for(o+=a,p(),"-"!==a&&"+"!==a||(o+=a,p());a>="0"&&a<="9";)o+=a,p();if(e=+o,isFinite(e))return null==r&&(r=n(431)),o.length>15?t.storeAsString?o:t.useNativeBigInt?BigInt(o):new r(o):t.alwaysParseAsBig?t.useNativeBigInt?BigInt(e):new r(e):e;f("Bad number")},h=function(){var e,t,n,r="";if('"'===a)for(var o=s;p();){if('"'===a)return s-1>o&&(r+=u.substring(o,s-1)),p(),r;if("\\"===a){if(s-1>o&&(r+=u.substring(o,s-1)),p(),"u"===a){for(n=0,t=0;t<4&&(e=parseInt(p(),16),isFinite(e));t+=1)n=16*n+e;r+=String.fromCharCode(n)}else{if("string"!=typeof l[a])break;r+=l[a]}o=s}}f("Bad string")},m=function(){for(;a&&a<=" ";)p()};return c=function(){switch(m(),a){case"{":return function(){var e,n=Object.create(null);if("{"===a){if(p("{"),m(),"}"===a)return p("}"),n;for(;a;){if(e=h(),m(),p(":"),!0===t.strict&&Object.hasOwnProperty.call(n,e)&&f('Duplicate key "'+e+'"'),!0===o.test(e)?"error"===t.protoAction?f("Object contains forbidden prototype property"):"ignore"===t.protoAction?c():n[e]=c():!0===i.test(e)?"error"===t.constructorAction?f("Object contains forbidden constructor property"):"ignore"===t.constructorAction?c():n[e]=c():n[e]=c(),m(),"}"===a)return p("}"),n;p(","),m()}}f("Bad object")}();case"[":return function(){var e=[];if("["===a){if(p("["),m(),"]"===a)return p("]"),e;for(;a;){if(e.push(c()),m(),"]"===a)return p("]"),e;p(","),m()}}f("Bad array")}();case'"':return h();case"-":return d();default:return a>="0"&&a<="9"?d():function(){switch(a){case"t":return p("t"),p("r"),p("u"),p("e"),!0;case"f":return p("f"),p("a"),p("l"),p("s"),p("e"),!1;case"n":return p("n"),p("u"),p("l"),p("l"),null}f("Unexpected '"+a+"'")}()}},function(e,t){var n;return u=e+"",s=0,a=" ",n=c(),m(),a&&f("Syntax error"),"function"==typeof t?function e(n,r){var o,i=n[r];return i&&"object"==typeof i&&Object.keys(i).forEach((function(t){void 0!==(o=e(i,t))?i[t]=o:delete i[t]})),t.call(n,r,i)}({"":n},""):n}}},123:function(e,t,n){var r=n(431),o=e.exports;!function(){"use strict";var e,t,n,i=/[\\\"\x00-\x1f\x7f-\x9f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,s={"\b":"\\b","\t":"\\t","\n":"\\n","\f":"\\f","\r":"\\r",'"':'\\"',"\\":"\\\\"};function a(e){return i.lastIndex=0,i.test(e)?'"'+e.replace(i,(function(e){var t=s[e];return"string"==typeof t?t:"\\u"+("0000"+e.charCodeAt(0).toString(16)).slice(-4)}))+'"':'"'+e+'"'}function u(o,i){var s,c,l,f,p,d=e,h=i[o],m=null!=h&&(h instanceof r||r.isBigNumber(h));switch(h&&"object"==typeof h&&"function"==typeof h.toJSON&&(h=h.toJSON(o)),"function"==typeof n&&(h=n.call(i,o,h)),typeof h){case"string":return m?h:a(h);case"number":return isFinite(h)?String(h):"null";case"boolean":case"null":case"bigint":return String(h);case"object":if(!h)return"null";if(e+=t,p=[],"[object Array]"===Object.prototype.toString.apply(h)){for(f=h.length,s=0;s1){var n=e.shift();e[0]=n+e[0]}e[0].match(/^file:\/\/\//)?e[0]=e[0].replace(/^([^/:]+):\/*/,"$1:///"):e[0]=e[0].replace(/^([^/:]+):\/*/,"$1://");for(var r=0;r0&&(o=o.replace(/^[\/]+/,"")),o=r0?"?":"")+s.join("&")}return function(){return e("object"==typeof arguments[0]?arguments[0]:[].slice.call(arguments))}},e.exports?e.exports=i():void 0===(o="function"==typeof(r=i)?r.call(t,n,t,e):r)||(e.exports=o)},218:function(e,t,n){"use strict";function r(e,t){return function(){return e.apply(t,arguments)}}const{toString:o}=Object.prototype,{getPrototypeOf:i}=Object,s=(a=Object.create(null),e=>{const t=o.call(e);return a[t]||(a[t]=t.slice(8,-1).toLowerCase())});var a;const u=e=>(e=e.toLowerCase(),t=>s(t)===e),c=e=>t=>typeof t===e,{isArray:l}=Array,f=c("undefined");const p=u("ArrayBuffer");const d=c("string"),h=c("function"),m=c("number"),g=e=>null!==e&&"object"==typeof e,y=e=>{if("object"!==s(e))return!1;const t=i(e);return!(null!==t&&t!==Object.prototype&&null!==Object.getPrototypeOf(t)||Symbol.toStringTag in e||Symbol.iterator in e)},b=u("Date"),v=u("File"),w=u("Blob"),S=u("FileList"),O=u("URLSearchParams"),[E,A,C,P]=["ReadableStream","Request","Response","Headers"].map(u);function j(e,t,{allOwnKeys:n=!1}={}){if(null==e)return;let r,o;if("object"!=typeof e&&(e=[e]),l(e))for(r=0,o=e.length;r0;)if(r=n[o],t===r.toLowerCase())return r;return null}const k="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:"undefined"!=typeof window?window:n.g,_=e=>!f(e)&&e!==k;const R=(N="undefined"!=typeof Uint8Array&&i(Uint8Array),e=>N&&e instanceof N);var N;const x=u("HTMLFormElement"),B=(({hasOwnProperty:e})=>(t,n)=>e.call(t,n))(Object.prototype),M=u("RegExp"),D=(e,t)=>{const n=Object.getOwnPropertyDescriptors(e),r={};j(n,((n,o)=>{let i;!1!==(i=t(n,o,e))&&(r[o]=i||n)})),Object.defineProperties(e,r)},U="abcdefghijklmnopqrstuvwxyz",L="0123456789",I={DIGIT:L,ALPHA:U,ALPHA_DIGIT:U+U.toUpperCase()+L};const F=u("AsyncFunction"),q=(H="function"==typeof setImmediate,K=h(k.postMessage),H?setImmediate:K?(V=`axios@${Math.random()}`,z=[],k.addEventListener("message",(({source:e,data:t})=>{e===k&&t===V&&z.length&&z.shift()()}),!1),e=>{z.push(e),k.postMessage(V,"*")}):e=>setTimeout(e));var H,K,V,z;const J="undefined"!=typeof queueMicrotask?queueMicrotask.bind(k):"undefined"!=typeof process&&process.nextTick||q;var W={isArray:l,isArrayBuffer:p,isBuffer:function(e){return null!==e&&!f(e)&&null!==e.constructor&&!f(e.constructor)&&h(e.constructor.isBuffer)&&e.constructor.isBuffer(e)},isFormData:e=>{let t;return e&&("function"==typeof FormData&&e instanceof FormData||h(e.append)&&("formdata"===(t=s(e))||"object"===t&&h(e.toString)&&"[object FormData]"===e.toString()))},isArrayBufferView:function(e){let t;return t="undefined"!=typeof ArrayBuffer&&ArrayBuffer.isView?ArrayBuffer.isView(e):e&&e.buffer&&p(e.buffer),t},isString:d,isNumber:m,isBoolean:e=>!0===e||!1===e,isObject:g,isPlainObject:y,isReadableStream:E,isRequest:A,isResponse:C,isHeaders:P,isUndefined:f,isDate:b,isFile:v,isBlob:w,isRegExp:M,isFunction:h,isStream:e=>g(e)&&h(e.pipe),isURLSearchParams:O,isTypedArray:R,isFileList:S,forEach:j,merge:function e(){const{caseless:t}=_(this)&&this||{},n={},r=(r,o)=>{const i=t&&T(n,o)||o;y(n[i])&&y(r)?n[i]=e(n[i],r):y(r)?n[i]=e({},r):l(r)?n[i]=r.slice():n[i]=r};for(let e=0,t=arguments.length;e(j(t,((t,o)=>{n&&h(t)?e[o]=r(t,n):e[o]=t}),{allOwnKeys:o}),e),trim:e=>e.trim?e.trim():e.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,""),stripBOM:e=>(65279===e.charCodeAt(0)&&(e=e.slice(1)),e),inherits:(e,t,n,r)=>{e.prototype=Object.create(t.prototype,r),e.prototype.constructor=e,Object.defineProperty(e,"super",{value:t.prototype}),n&&Object.assign(e.prototype,n)},toFlatObject:(e,t,n,r)=>{let o,s,a;const u={};if(t=t||{},null==e)return t;do{for(o=Object.getOwnPropertyNames(e),s=o.length;s-- >0;)a=o[s],r&&!r(a,e,t)||u[a]||(t[a]=e[a],u[a]=!0);e=!1!==n&&i(e)}while(e&&(!n||n(e,t))&&e!==Object.prototype);return t},kindOf:s,kindOfTest:u,endsWith:(e,t,n)=>{e=String(e),(void 0===n||n>e.length)&&(n=e.length),n-=t.length;const r=e.indexOf(t,n);return-1!==r&&r===n},toArray:e=>{if(!e)return null;if(l(e))return e;let t=e.length;if(!m(t))return null;const n=new Array(t);for(;t-- >0;)n[t]=e[t];return n},forEachEntry:(e,t)=>{const n=(e&&e[Symbol.iterator]).call(e);let r;for(;(r=n.next())&&!r.done;){const n=r.value;t.call(e,n[0],n[1])}},matchAll:(e,t)=>{let n;const r=[];for(;null!==(n=e.exec(t));)r.push(n);return r},isHTMLForm:x,hasOwnProperty:B,hasOwnProp:B,reduceDescriptors:D,freezeMethods:e=>{D(e,((t,n)=>{if(h(e)&&-1!==["arguments","caller","callee"].indexOf(n))return!1;const r=e[n];h(r)&&(t.enumerable=!1,"writable"in t?t.writable=!1:t.set||(t.set=()=>{throw Error("Can not rewrite read-only method '"+n+"'")}))}))},toObjectSet:(e,t)=>{const n={},r=e=>{e.forEach((e=>{n[e]=!0}))};return l(e)?r(e):r(String(e).split(t)),n},toCamelCase:e=>e.toLowerCase().replace(/[-_\s]([a-z\d])(\w*)/g,(function(e,t,n){return t.toUpperCase()+n})),noop:()=>{},toFiniteNumber:(e,t)=>null!=e&&Number.isFinite(e=+e)?e:t,findKey:T,global:k,isContextDefined:_,ALPHABET:I,generateString:(e=16,t=I.ALPHA_DIGIT)=>{let n="";const{length:r}=t;for(;e--;)n+=t[Math.random()*r|0];return n},isSpecCompliantForm:function(e){return!!(e&&h(e.append)&&"FormData"===e[Symbol.toStringTag]&&e[Symbol.iterator])},toJSONObject:e=>{const t=new Array(10),n=(e,r)=>{if(g(e)){if(t.indexOf(e)>=0)return;if(!("toJSON"in e)){t[r]=e;const o=l(e)?[]:{};return j(e,((e,t)=>{const i=n(e,r+1);!f(i)&&(o[t]=i)})),t[r]=void 0,o}}return e};return n(e,0)},isAsyncFn:F,isThenable:e=>e&&(g(e)||h(e))&&h(e.then)&&h(e.catch),setImmediate:q,asap:J};function G(e,t,n,r,o){Error.call(this),Error.captureStackTrace?Error.captureStackTrace(this,this.constructor):this.stack=(new Error).stack,this.message=e,this.name="AxiosError",t&&(this.code=t),n&&(this.config=n),r&&(this.request=r),o&&(this.response=o)}W.inherits(G,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:W.toJSONObject(this.config),code:this.code,status:this.response&&this.response.status?this.response.status:null}}});const $=G.prototype,X={};["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((e=>{X[e]={value:e}})),Object.defineProperties(G,X),Object.defineProperty($,"isAxiosError",{value:!0}),G.from=(e,t,n,r,o,i)=>{const s=Object.create($);return W.toFlatObject(e,s,(function(e){return e!==Error.prototype}),(e=>"isAxiosError"!==e)),G.call(s,e.message,t,n,r,o),s.cause=e,s.name=e.name,i&&Object.assign(s,i),s};function Q(e){return W.isPlainObject(e)||W.isArray(e)}function Y(e){return W.endsWith(e,"[]")?e.slice(0,-2):e}function Z(e,t,n){return e?e.concat(t).map((function(e,t){return e=Y(e),!n&&t?"["+e+"]":e})).join(n?".":""):t}const ee=W.toFlatObject(W,{},null,(function(e){return/^is[A-Z]/.test(e)}));function te(e,t,n){if(!W.isObject(e))throw new TypeError("target must be an object");t=t||new FormData;const r=(n=W.toFlatObject(n,{metaTokens:!0,dots:!1,indexes:!1},!1,(function(e,t){return!W.isUndefined(t[e])}))).metaTokens,o=n.visitor||c,i=n.dots,s=n.indexes,a=(n.Blob||"undefined"!=typeof Blob&&Blob)&&W.isSpecCompliantForm(t);if(!W.isFunction(o))throw new TypeError("visitor must be a function");function u(e){if(null===e)return"";if(W.isDate(e))return e.toISOString();if(!a&&W.isBlob(e))throw new G("Blob is not supported. Use a Buffer instead.");return W.isArrayBuffer(e)||W.isTypedArray(e)?a&&"function"==typeof Blob?new Blob([e]):Buffer.from(e):e}function c(e,n,o){let a=e;if(e&&!o&&"object"==typeof e)if(W.endsWith(n,"{}"))n=r?n:n.slice(0,-2),e=JSON.stringify(e);else if(W.isArray(e)&&function(e){return W.isArray(e)&&!e.some(Q)}(e)||(W.isFileList(e)||W.endsWith(n,"[]"))&&(a=W.toArray(e)))return n=Y(n),a.forEach((function(e,r){!W.isUndefined(e)&&null!==e&&t.append(!0===s?Z([n],r,i):null===s?n:n+"[]",u(e))})),!1;return!!Q(e)||(t.append(Z(o,n,i),u(e)),!1)}const l=[],f=Object.assign(ee,{defaultVisitor:c,convertValue:u,isVisitable:Q});if(!W.isObject(e))throw new TypeError("data must be an object");return function e(n,r){if(!W.isUndefined(n)){if(-1!==l.indexOf(n))throw Error("Circular reference detected in "+r.join("."));l.push(n),W.forEach(n,(function(n,i){!0===(!(W.isUndefined(n)||null===n)&&o.call(t,n,W.isString(i)?i.trim():i,r,f))&&e(n,r?r.concat(i):[i])})),l.pop()}}(e),t}function ne(e){const t={"!":"%21","'":"%27","(":"%28",")":"%29","~":"%7E","%20":"+","%00":"\0"};return encodeURIComponent(e).replace(/[!'()~]|%20|%00/g,(function(e){return t[e]}))}function re(e,t){this._pairs=[],e&&te(e,this,t)}const oe=re.prototype;function ie(e){return encodeURIComponent(e).replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%20/g,"+").replace(/%5B/gi,"[").replace(/%5D/gi,"]")}function se(e,t,n){if(!t)return e;const r=n&&n.encode||ie,o=n&&n.serialize;let i;if(i=o?o(t,n):W.isURLSearchParams(t)?t.toString():new re(t,n).toString(r),i){const t=e.indexOf("#");-1!==t&&(e=e.slice(0,t)),e+=(-1===e.indexOf("?")?"?":"&")+i}return e}oe.append=function(e,t){this._pairs.push([e,t])},oe.toString=function(e){const t=e?function(t){return e.call(this,t,ne)}:ne;return this._pairs.map((function(e){return t(e[0])+"="+t(e[1])}),"").join("&")};var ae=class InterceptorManager{constructor(){this.handlers=[]}use(e,t,n){return this.handlers.push({fulfilled:e,rejected:t,synchronous:!!n&&n.synchronous,runWhen:n?n.runWhen:null}),this.handlers.length-1}eject(e){this.handlers[e]&&(this.handlers[e]=null)}clear(){this.handlers&&(this.handlers=[])}forEach(e){W.forEach(this.handlers,(function(t){null!==t&&e(t)}))}},ue={silentJSONParsing:!0,forcedJSONParsing:!0,clarifyTimeoutError:!1},ce={isBrowser:!0,classes:{URLSearchParams:"undefined"!=typeof URLSearchParams?URLSearchParams:re,FormData:"undefined"!=typeof FormData?FormData:null,Blob:"undefined"!=typeof Blob?Blob:null},protocols:["http","https","file","blob","url","data"]};const le="undefined"!=typeof window&&"undefined"!=typeof document,fe=(pe="undefined"!=typeof navigator&&navigator.product,le&&["ReactNative","NativeScript","NS"].indexOf(pe)<0);var pe;const de="undefined"!=typeof WorkerGlobalScope&&self instanceof WorkerGlobalScope&&"function"==typeof self.importScripts,he=le&&window.location.href||"http://localhost";var me={...Object.freeze({__proto__:null,hasBrowserEnv:le,hasStandardBrowserWebWorkerEnv:de,hasStandardBrowserEnv:fe,origin:he}),...ce};function ge(e){function t(e,n,r,o){let i=e[o++];if("__proto__"===i)return!0;const s=Number.isFinite(+i),a=o>=e.length;if(i=!i&&W.isArray(r)?r.length:i,a)return W.hasOwnProp(r,i)?r[i]=[r[i],n]:r[i]=n,!s;r[i]&&W.isObject(r[i])||(r[i]=[]);return t(e,n,r[i],o)&&W.isArray(r[i])&&(r[i]=function(e){const t={},n=Object.keys(e);let r;const o=n.length;let i;for(r=0;r{t(function(e){return W.matchAll(/\w+|\[(\w*)]/g,e).map((e=>"[]"===e[0]?"":e[1]||e[0]))}(e),r,n,0)})),n}return null}const ye={transitional:ue,adapter:["xhr","http","fetch"],transformRequest:[function(e,t){const n=t.getContentType()||"",r=n.indexOf("application/json")>-1,o=W.isObject(e);o&&W.isHTMLForm(e)&&(e=new FormData(e));if(W.isFormData(e))return r?JSON.stringify(ge(e)):e;if(W.isArrayBuffer(e)||W.isBuffer(e)||W.isStream(e)||W.isFile(e)||W.isBlob(e)||W.isReadableStream(e))return e;if(W.isArrayBufferView(e))return e.buffer;if(W.isURLSearchParams(e))return t.setContentType("application/x-www-form-urlencoded;charset=utf-8",!1),e.toString();let i;if(o){if(n.indexOf("application/x-www-form-urlencoded")>-1)return function(e,t){return te(e,new me.classes.URLSearchParams,Object.assign({visitor:function(e,t,n,r){return me.isNode&&W.isBuffer(e)?(this.append(t,e.toString("base64")),!1):r.defaultVisitor.apply(this,arguments)}},t))}(e,this.formSerializer).toString();if((i=W.isFileList(e))||n.indexOf("multipart/form-data")>-1){const t=this.env&&this.env.FormData;return te(i?{"files[]":e}:e,t&&new t,this.formSerializer)}}return o||r?(t.setContentType("application/json",!1),function(e,t,n){if(W.isString(e))try{return(t||JSON.parse)(e),W.trim(e)}catch(e){if("SyntaxError"!==e.name)throw e}return(n||JSON.stringify)(e)}(e)):e}],transformResponse:[function(e){const t=this.transitional||ye.transitional,n=t&&t.forcedJSONParsing,r="json"===this.responseType;if(W.isResponse(e)||W.isReadableStream(e))return e;if(e&&W.isString(e)&&(n&&!this.responseType||r)){const n=!(t&&t.silentJSONParsing)&&r;try{return JSON.parse(e)}catch(e){if(n){if("SyntaxError"===e.name)throw G.from(e,G.ERR_BAD_RESPONSE,this,null,this.response);throw e}}}return e}],timeout:0,xsrfCookieName:"XSRF-TOKEN",xsrfHeaderName:"X-XSRF-TOKEN",maxContentLength:-1,maxBodyLength:-1,env:{FormData:me.classes.FormData,Blob:me.classes.Blob},validateStatus:function(e){return e>=200&&e<300},headers:{common:{Accept:"application/json, text/plain, */*","Content-Type":void 0}}};W.forEach(["delete","get","head","post","put","patch"],(e=>{ye.headers[e]={}}));var be=ye;const ve=W.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 we=Symbol("internals");function Se(e){return e&&String(e).trim().toLowerCase()}function Oe(e){return!1===e||null==e?e:W.isArray(e)?e.map(Oe):String(e)}function Ee(e,t,n,r,o){return W.isFunction(r)?r.call(this,t,n):(o&&(t=n),W.isString(t)?W.isString(r)?-1!==t.indexOf(r):W.isRegExp(r)?r.test(t):void 0:void 0)}class AxiosHeaders{constructor(e){e&&this.set(e)}set(e,t,n){const r=this;function o(e,t,n){const o=Se(t);if(!o)throw new Error("header name must be a non-empty string");const i=W.findKey(r,o);(!i||void 0===r[i]||!0===n||void 0===n&&!1!==r[i])&&(r[i||t]=Oe(e))}const i=(e,t)=>W.forEach(e,((e,n)=>o(e,n,t)));if(W.isPlainObject(e)||e instanceof this.constructor)i(e,t);else if(W.isString(e)&&(e=e.trim())&&!/^[-_a-zA-Z0-9^`|~,!#$%&'*+.]+$/.test(e.trim()))i((e=>{const t={};let n,r,o;return e&&e.split("\n").forEach((function(e){o=e.indexOf(":"),n=e.substring(0,o).trim().toLowerCase(),r=e.substring(o+1).trim(),!n||t[n]&&ve[n]||("set-cookie"===n?t[n]?t[n].push(r):t[n]=[r]:t[n]=t[n]?t[n]+", "+r:r)})),t})(e),t);else if(W.isHeaders(e))for(const[t,r]of e.entries())o(r,t,n);else null!=e&&o(t,e,n);return this}get(e,t){if(e=Se(e)){const n=W.findKey(this,e);if(n){const e=this[n];if(!t)return e;if(!0===t)return function(e){const t=Object.create(null),n=/([^\s,;=]+)\s*(?:=\s*([^,;]+))?/g;let r;for(;r=n.exec(e);)t[r[1]]=r[2];return t}(e);if(W.isFunction(t))return t.call(this,e,n);if(W.isRegExp(t))return t.exec(e);throw new TypeError("parser must be boolean|regexp|function")}}}has(e,t){if(e=Se(e)){const n=W.findKey(this,e);return!(!n||void 0===this[n]||t&&!Ee(0,this[n],n,t))}return!1}delete(e,t){const n=this;let r=!1;function o(e){if(e=Se(e)){const o=W.findKey(n,e);!o||t&&!Ee(0,n[o],o,t)||(delete n[o],r=!0)}}return W.isArray(e)?e.forEach(o):o(e),r}clear(e){const t=Object.keys(this);let n=t.length,r=!1;for(;n--;){const o=t[n];e&&!Ee(0,this[o],o,e,!0)||(delete this[o],r=!0)}return r}normalize(e){const t=this,n={};return W.forEach(this,((r,o)=>{const i=W.findKey(n,o);if(i)return t[i]=Oe(r),void delete t[o];const s=e?function(e){return e.trim().toLowerCase().replace(/([a-z\d])(\w*)/g,((e,t,n)=>t.toUpperCase()+n))}(o):String(o).trim();s!==o&&delete t[o],t[s]=Oe(r),n[s]=!0})),this}concat(...e){return this.constructor.concat(this,...e)}toJSON(e){const t=Object.create(null);return W.forEach(this,((n,r)=>{null!=n&&!1!==n&&(t[r]=e&&W.isArray(n)?n.join(", "):n)})),t}[Symbol.iterator](){return Object.entries(this.toJSON())[Symbol.iterator]()}toString(){return Object.entries(this.toJSON()).map((([e,t])=>e+": "+t)).join("\n")}get[Symbol.toStringTag](){return"AxiosHeaders"}static from(e){return e instanceof this?e:new this(e)}static concat(e,...t){const n=new this(e);return t.forEach((e=>n.set(e))),n}static accessor(e){const t=(this[we]=this[we]={accessors:{}}).accessors,n=this.prototype;function r(e){const r=Se(e);t[r]||(!function(e,t){const n=W.toCamelCase(" "+t);["get","set","has"].forEach((r=>{Object.defineProperty(e,r+n,{value:function(e,n,o){return this[r].call(this,t,e,n,o)},configurable:!0})}))}(n,e),t[r]=!0)}return W.isArray(e)?e.forEach(r):r(e),this}}AxiosHeaders.accessor(["Content-Type","Content-Length","Accept","Accept-Encoding","User-Agent","Authorization"]),W.reduceDescriptors(AxiosHeaders.prototype,(({value:e},t)=>{let n=t[0].toUpperCase()+t.slice(1);return{get:()=>e,set(e){this[n]=e}}})),W.freezeMethods(AxiosHeaders);var Ae=AxiosHeaders;function Ce(e,t){const n=this||be,r=t||n,o=Ae.from(r.headers);let i=r.data;return W.forEach(e,(function(e){i=e.call(n,i,o.normalize(),t?t.status:void 0)})),o.normalize(),i}function Pe(e){return!(!e||!e.__CANCEL__)}function je(e,t,n){G.call(this,null==e?"canceled":e,G.ERR_CANCELED,t,n),this.name="CanceledError"}function Te(e,t,n){const r=n.config.validateStatus;n.status&&r&&!r(n.status)?t(new G("Request failed with status code "+n.status,[G.ERR_BAD_REQUEST,G.ERR_BAD_RESPONSE][Math.floor(n.status/100)-4],n.config,n.request,n)):e(n)}W.inherits(je,G,{__CANCEL__:!0});const ke=(e,t,n=3)=>{let r=0;const o=function(e,t){e=e||10;const n=new Array(e),r=new Array(e);let o,i=0,s=0;return t=void 0!==t?t: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%=e;if(i=(i+1)%e,i===s&&(s=(s+1)%e),u-o{o=i,n=null,r&&(clearTimeout(r),r=null),e.apply(null,t)};return[(...e)=>{const t=Date.now(),a=t-o;a>=i?s(e,t):(n=e,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;e({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,[t?"download":"upload"]:!0})}),n)},_e=(e,t)=>{const n=null!=e;return[r=>t[0]({lengthComputable:n,total:e,loaded:r}),t[1]]},Re=e=>(...t)=>W.asap((()=>e(...t)));var Ne=me.hasStandardBrowserEnv?function(){const e=/(msie|trident)/i.test(navigator.userAgent),t=document.createElement("a");let n;function r(n){let r=n;return e&&(t.setAttribute("href",r),r=t.href),t.setAttribute("href",r),{href:t.href,protocol:t.protocol?t.protocol.replace(/:$/,""):"",host:t.host,search:t.search?t.search.replace(/^\?/,""):"",hash:t.hash?t.hash.replace(/^#/,""):"",hostname:t.hostname,port:t.port,pathname:"/"===t.pathname.charAt(0)?t.pathname:"/"+t.pathname}}return n=r(window.location.href),function(e){const t=W.isString(e)?r(e):e;return t.protocol===n.protocol&&t.host===n.host}}():function(){return!0},xe=me.hasStandardBrowserEnv?{write(e,t,n,r,o,i){const s=[e+"="+encodeURIComponent(t)];W.isNumber(n)&&s.push("expires="+new Date(n).toGMTString()),W.isString(r)&&s.push("path="+r),W.isString(o)&&s.push("domain="+o),!0===i&&s.push("secure"),document.cookie=s.join("; ")},read(e){const t=document.cookie.match(new RegExp("(^|;\\s*)("+e+")=([^;]*)"));return t?decodeURIComponent(t[3]):null},remove(e){this.write(e,"",Date.now()-864e5)}}:{write(){},read:()=>null,remove(){}};function Be(e,t){return e&&!/^([a-z][a-z\d+\-.]*:)?\/\//i.test(t)?function(e,t){return t?e.replace(/\/?\/$/,"")+"/"+t.replace(/^\/+/,""):e}(e,t):t}const Me=e=>e instanceof Ae?{...e}:e;function De(e,t){t=t||{};const n={};function r(e,t,n){return W.isPlainObject(e)&&W.isPlainObject(t)?W.merge.call({caseless:n},e,t):W.isPlainObject(t)?W.merge({},t):W.isArray(t)?t.slice():t}function o(e,t,n){return W.isUndefined(t)?W.isUndefined(e)?void 0:r(void 0,e,n):r(e,t,n)}function i(e,t){if(!W.isUndefined(t))return r(void 0,t)}function s(e,t){return W.isUndefined(t)?W.isUndefined(e)?void 0:r(void 0,e):r(void 0,t)}function a(n,o,i){return i in t?r(n,o):i in e?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:(e,t)=>o(Me(e),Me(t),!0)};return W.forEach(Object.keys(Object.assign({},e,t)),(function(r){const i=u[r]||o,s=i(e[r],t[r],r);W.isUndefined(s)&&i!==a||(n[r]=s)})),n}var Ue=e=>{const t=De({},e);let n,{data:r,withXSRFToken:o,xsrfHeaderName:i,xsrfCookieName:s,headers:a,auth:u}=t;if(t.headers=a=Ae.from(a),t.url=se(Be(t.baseURL,t.url),e.params,e.paramsSerializer),u&&a.set("Authorization","Basic "+btoa((u.username||"")+":"+(u.password?unescape(encodeURIComponent(u.password)):""))),W.isFormData(r))if(me.hasStandardBrowserEnv||me.hasStandardBrowserWebWorkerEnv)a.setContentType(void 0);else if(!1!==(n=a.getContentType())){const[e,...t]=n?n.split(";").map((e=>e.trim())).filter(Boolean):[];a.setContentType([e||"multipart/form-data",...t].join("; "))}if(me.hasStandardBrowserEnv&&(o&&W.isFunction(o)&&(o=o(t)),o||!1!==o&&Ne(t.url))){const e=i&&s&&xe.read(s);e&&a.set(i,e)}return t};var Le="undefined"!=typeof XMLHttpRequest&&function(e){return new Promise((function(t,n){const r=Ue(e);let o=r.data;const i=Ae.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 m=new XMLHttpRequest;function g(){if(!m)return;const r=Ae.from("getAllResponseHeaders"in m&&m.getAllResponseHeaders());Te((function(e){t(e),h()}),(function(e){n(e),h()}),{data:f&&"text"!==f&&"json"!==f?m.response:m.responseText,status:m.status,statusText:m.statusText,headers:r,config:e,request:m}),m=null}m.open(r.method.toUpperCase(),r.url,!0),m.timeout=r.timeout,"onloadend"in m?m.onloadend=g:m.onreadystatechange=function(){m&&4===m.readyState&&(0!==m.status||m.responseURL&&0===m.responseURL.indexOf("file:"))&&setTimeout(g)},m.onabort=function(){m&&(n(new G("Request aborted",G.ECONNABORTED,e,m)),m=null)},m.onerror=function(){n(new G("Network Error",G.ERR_NETWORK,e,m)),m=null},m.ontimeout=function(){let t=r.timeout?"timeout of "+r.timeout+"ms exceeded":"timeout exceeded";const o=r.transitional||ue;r.timeoutErrorMessage&&(t=r.timeoutErrorMessage),n(new G(t,o.clarifyTimeoutError?G.ETIMEDOUT:G.ECONNABORTED,e,m)),m=null},void 0===o&&i.setContentType(null),"setRequestHeader"in m&&W.forEach(i.toJSON(),(function(e,t){m.setRequestHeader(t,e)})),W.isUndefined(r.withCredentials)||(m.withCredentials=!!r.withCredentials),f&&"json"!==f&&(m.responseType=r.responseType),d&&([u,l]=ke(d,!0),m.addEventListener("progress",u)),p&&m.upload&&([a,c]=ke(p),m.upload.addEventListener("progress",a),m.upload.addEventListener("loadend",c)),(r.cancelToken||r.signal)&&(s=t=>{m&&(n(!t||t.type?new je(null,e,m):t),m.abort(),m=null)},r.cancelToken&&r.cancelToken.subscribe(s),r.signal&&(r.signal.aborted?s():r.signal.addEventListener("abort",s)));const y=function(e){const t=/^([-+\w]{1,25})(:?\/\/|:)/.exec(e);return t&&t[1]||""}(r.url);y&&-1===me.protocols.indexOf(y)?n(new G("Unsupported protocol "+y+":",G.ERR_BAD_REQUEST,e)):m.send(o||null)}))};var Ie=(e,t)=>{let n,r=new AbortController;const o=function(e){if(!n){n=!0,s();const t=e instanceof Error?e:this.reason;r.abort(t instanceof G?t:new je(t instanceof Error?t.message:t))}};let i=t&&setTimeout((()=>{o(new G(`timeout ${t} of ms exceeded`,G.ETIMEDOUT))}),t);const s=()=>{e&&(i&&clearTimeout(i),i=null,e.forEach((e=>{e&&(e.removeEventListener?e.removeEventListener("abort",o):e.unsubscribe(o))})),e=null)};e.forEach((e=>e&&e.addEventListener&&e.addEventListener("abort",o)));const{signal:a}=r;return a.unsubscribe=s,[a,()=>{i&&clearTimeout(i),i=null}]};const Fe=function*(e,t){let n=e.byteLength;if(!t||n{const i=async function*(e,t,n){for await(const r of e)yield*Fe(ArrayBuffer.isView(r)?r:await n(String(r)),t)}(e,t,o);let s,a=0,u=e=>{s||(s=!0,r&&r(e))};return new ReadableStream({async pull(e){try{const{done:t,value:r}=await i.next();if(t)return u(),void e.close();let o=r.byteLength;if(n){let e=a+=o;n(e)}e.enqueue(new Uint8Array(r))}catch(e){throw u(e),e}},cancel:e=>(u(e),i.return())},{highWaterMark:2})},He="function"==typeof fetch&&"function"==typeof Request&&"function"==typeof Response,Ke=He&&"function"==typeof ReadableStream,Ve=He&&("function"==typeof TextEncoder?(ze=new TextEncoder,e=>ze.encode(e)):async e=>new Uint8Array(await new Response(e).arrayBuffer()));var ze;const Je=(e,...t)=>{try{return!!e(...t)}catch(e){return!1}},We=Ke&&Je((()=>{let e=!1;const t=new Request(me.origin,{body:new ReadableStream,method:"POST",get duplex(){return e=!0,"half"}}).headers.has("Content-Type");return e&&!t})),Ge=Ke&&Je((()=>W.isReadableStream(new Response("").body))),$e={stream:Ge&&(e=>e.body)};var Xe;He&&(Xe=new Response,["text","arrayBuffer","blob","formData","stream"].forEach((e=>{!$e[e]&&($e[e]=W.isFunction(Xe[e])?t=>t[e]():(t,n)=>{throw new G(`Response type '${e}' is not supported`,G.ERR_NOT_SUPPORT,n)})})));const Qe=async(e,t)=>{const n=W.toFiniteNumber(e.getContentLength());return null==n?(async e=>null==e?0:W.isBlob(e)?e.size:W.isSpecCompliantForm(e)?(await new Request(e).arrayBuffer()).byteLength:W.isArrayBufferView(e)||W.isArrayBuffer(e)?e.byteLength:(W.isURLSearchParams(e)&&(e+=""),W.isString(e)?(await Ve(e)).byteLength:void 0))(t):n};const Ye={http:null,xhr:Le,fetch:He&&(async e=>{let{url:t,method:n,data:r,signal:o,cancelToken:i,timeout:s,onDownloadProgress:a,onUploadProgress:u,responseType:c,headers:l,withCredentials:f="same-origin",fetchOptions:p}=Ue(e);c=c?(c+"").toLowerCase():"text";let d,h,[m,g]=o||i||s?Ie([o,i],s):[];const y=()=>{!d&&setTimeout((()=>{m&&m.unsubscribe()})),d=!0};let b;try{if(u&&We&&"get"!==n&&"head"!==n&&0!==(b=await Qe(l,r))){let e,n=new Request(t,{method:"POST",body:r,duplex:"half"});if(W.isFormData(r)&&(e=n.headers.get("content-type"))&&l.setContentType(e),n.body){const[e,t]=_e(b,ke(Re(u)));r=qe(n.body,65536,e,t,Ve)}}W.isString(f)||(f=f?"include":"omit"),h=new Request(t,{...p,signal:m,method:n.toUpperCase(),headers:l.normalize().toJSON(),body:r,duplex:"half",credentials:f});let o=await fetch(h);const i=Ge&&("stream"===c||"response"===c);if(Ge&&(a||i)){const e={};["status","statusText","headers"].forEach((t=>{e[t]=o[t]}));const t=W.toFiniteNumber(o.headers.get("content-length")),[n,r]=a&&_e(t,ke(Re(a),!0))||[];o=new Response(qe(o.body,65536,n,(()=>{r&&r(),i&&y()}),Ve),e)}c=c||"text";let s=await $e[W.findKey($e,c)||"text"](o,e);return!i&&y(),g&&g(),await new Promise(((t,n)=>{Te(t,n,{data:s,headers:Ae.from(o.headers),status:o.status,statusText:o.statusText,config:e,request:h})}))}catch(t){if(y(),t&&"TypeError"===t.name&&/fetch/i.test(t.message))throw Object.assign(new G("Network Error",G.ERR_NETWORK,e,h),{cause:t.cause||t});throw G.from(t,t&&t.code,e,h)}})};W.forEach(Ye,((e,t)=>{if(e){try{Object.defineProperty(e,"name",{value:t})}catch(e){}Object.defineProperty(e,"adapterName",{value:t})}}));const Ze=e=>`- ${e}`,et=e=>W.isFunction(e)||null===e||!1===e;var tt=e=>{e=W.isArray(e)?e:[e];const{length:t}=e;let n,r;const o={};for(let i=0;i`adapter ${e} `+(!1===t?"is not supported by the environment":"is not available in the build")));throw new G("There is no suitable adapter to dispatch the request "+(t?e.length>1?"since :\n"+e.map(Ze).join("\n"):" "+Ze(e[0]):"as no adapter specified"),"ERR_NOT_SUPPORT")}return r};function nt(e){if(e.cancelToken&&e.cancelToken.throwIfRequested(),e.signal&&e.signal.aborted)throw new je(null,e)}function rt(e){nt(e),e.headers=Ae.from(e.headers),e.data=Ce.call(e,e.transformRequest),-1!==["post","put","patch"].indexOf(e.method)&&e.headers.setContentType("application/x-www-form-urlencoded",!1);return tt(e.adapter||be.adapter)(e).then((function(t){return nt(e),t.data=Ce.call(e,e.transformResponse,t),t.headers=Ae.from(t.headers),t}),(function(t){return Pe(t)||(nt(e),t&&t.response&&(t.response.data=Ce.call(e,e.transformResponse,t.response),t.response.headers=Ae.from(t.response.headers))),Promise.reject(t)}))}const ot="1.7.4",it={};["object","boolean","number","function","string","symbol"].forEach(((e,t)=>{it[e]=function(n){return typeof n===e||"a"+(t<1?"n ":" ")+e}}));const st={};it.transitional=function(e,t,n){function r(e,t){return"[Axios v1.7.4] Transitional option '"+e+"'"+t+(n?". "+n:"")}return(n,o,i)=>{if(!1===e)throw new G(r(o," has been removed"+(t?" in "+t:"")),G.ERR_DEPRECATED);return t&&!st[o]&&(st[o]=!0,console.warn(r(o," has been deprecated since v"+t+" and will be removed in the near future"))),!e||e(n,o,i)}};var at={assertOptions:function(e,t,n){if("object"!=typeof e)throw new G("options must be an object",G.ERR_BAD_OPTION_VALUE);const r=Object.keys(e);let o=r.length;for(;o-- >0;){const i=r[o],s=t[i];if(s){const t=e[i],n=void 0===t||s(t,i,e);if(!0!==n)throw new G("option "+i+" must be "+n,G.ERR_BAD_OPTION_VALUE)}else if(!0!==n)throw new G("Unknown option "+i,G.ERR_BAD_OPTION)}},validators:it};const ut=at.validators;class Axios{constructor(e){this.defaults=e,this.interceptors={request:new ae,response:new ae}}async request(e,t){try{return await this._request(e,t)}catch(e){if(e instanceof Error){let t;Error.captureStackTrace?Error.captureStackTrace(t={}):t=new Error;const n=t.stack?t.stack.replace(/^.+\n/,""):"";try{e.stack?n&&!String(e.stack).endsWith(n.replace(/^.+\n.+\n/,""))&&(e.stack+="\n"+n):e.stack=n}catch(e){}}throw e}}_request(e,t){"string"==typeof e?(t=t||{}).url=e:t=e||{},t=De(this.defaults,t);const{transitional:n,paramsSerializer:r,headers:o}=t;void 0!==n&&at.assertOptions(n,{silentJSONParsing:ut.transitional(ut.boolean),forcedJSONParsing:ut.transitional(ut.boolean),clarifyTimeoutError:ut.transitional(ut.boolean)},!1),null!=r&&(W.isFunction(r)?t.paramsSerializer={serialize:r}:at.assertOptions(r,{encode:ut.function,serialize:ut.function},!0)),t.method=(t.method||this.defaults.method||"get").toLowerCase();let i=o&&W.merge(o.common,o[t.method]);o&&W.forEach(["delete","get","head","post","put","patch","common"],(e=>{delete o[e]})),t.headers=Ae.concat(i,o);const s=[];let a=!0;this.interceptors.request.forEach((function(e){"function"==typeof e.runWhen&&!1===e.runWhen(t)||(a=a&&e.synchronous,s.unshift(e.fulfilled,e.rejected))}));const u=[];let c;this.interceptors.response.forEach((function(e){u.push(e.fulfilled,e.rejected)}));let l,f=0;if(!a){const e=[rt.bind(this),void 0];for(e.unshift.apply(e,s),e.push.apply(e,u),l=e.length,c=Promise.resolve(t);f{if(!n._listeners)return;let t=n._listeners.length;for(;t-- >0;)n._listeners[t](e);n._listeners=null})),this.promise.then=e=>{let t;const r=new Promise((e=>{n.subscribe(e),t=e})).then(e);return r.cancel=function(){n.unsubscribe(t)},r},e((function(e,r,o){n.reason||(n.reason=new je(e,r,o),t(n.reason))}))}throwIfRequested(){if(this.reason)throw this.reason}subscribe(e){this.reason?e(this.reason):this._listeners?this._listeners.push(e):this._listeners=[e]}unsubscribe(e){if(!this._listeners)return;const t=this._listeners.indexOf(e);-1!==t&&this._listeners.splice(t,1)}static source(){let e;return{token:new CancelToken((function(t){e=t})),cancel:e}}}var lt=CancelToken;const ft={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(ft).forEach((([e,t])=>{ft[t]=e}));var pt=ft;const dt=function e(t){const n=new ct(t),o=r(ct.prototype.request,n);return W.extend(o,ct.prototype,n,{allOwnKeys:!0}),W.extend(o,n,null,{allOwnKeys:!0}),o.create=function(n){return e(De(t,n))},o}(be);dt.Axios=ct,dt.CanceledError=je,dt.CancelToken=lt,dt.isCancel=Pe,dt.VERSION=ot,dt.toFormData=te,dt.AxiosError=G,dt.Cancel=dt.CanceledError,dt.all=function(e){return Promise.all(e)},dt.spread=function(e){return function(t){return e.apply(null,t)}},dt.isAxiosError=function(e){return W.isObject(e)&&!0===e.isAxiosError},dt.mergeConfig=De,dt.AxiosHeaders=Ae,dt.formToJSON=e=>ge(W.isHTMLForm(e)?new FormData(e):e),dt.getAdapter=tt,dt.HttpStatusCode=pt,dt.default=dt,e.exports=dt},147:function(e){"use strict";e.exports=JSON.parse('{"name":"node-mailjet","version":"6.0.6","main":"./dist/mailjet.node.js","browser":"./dist/mailjet.web.js","types":"./dist/declarations/index.d.ts","description":"Mailjet API client","author":"Mailjet","license":"MIT","private":true,"keywords":["email","sms","node","mail","mailjet"],"engines":{"node":">= 12.0.0","npm":">= 6.9.0"},"files":["lib/**","dist/**"],"directories":{"lib":"./lib","docs":"./docs"},"typescript":{"definition":"./dist/declarations/index.d.ts"},"scripts":{"test":"npm run ts:mocha test/","test:int":"npm run ts:mocha test/integration/","test:unit":"npm run ts:mocha test/unit/","test:watch":"mocha --extension ts -r tsconfig-paths/register -r ts-node/register --watch","cover":"npm run cover:expandable npm run test","cover:int":"npm run cover:expandable npm run test:int","cover:unit":"npm run cover:expandable npm run test:unit","cover:expandable":"nyc --reporter=text-summary --reporter=lcov --report-dir=.coverage --temp-dir=./.coverage/.nyc_output","build":"npm run build:release && npm run build:prepublish","build:dev":"webpack --config ./webpack/webpack.dev.config.js --progress --color","build:release":"webpack --config ./webpack/webpack.release.config.js --progress --color","build:prepublish":"node ./scripts/PreparePackage.js","build:watch":"webpack --watch --config ./webpack/webpack.dev.config.js --progress --color","lint":"eslint .","lint:fix":"eslint --fix .","lint:errors":"eslint --quiet .","ts:run":"ts-node --transpileOnly --project ./tsconfig.json -r tsconfig-paths/register","ts:watch":"ts-node-dev --respawn --transpile-only --project ./tsconfig.json -r tsconfig-paths/register","ts:mocha":"mocha --extension ts --recursive -r tsconfig-paths/register -r ts-node/register","ts:patch":"ts-patch install -s","init":"npm install && npm run ts:patch && npm run pkg:prepare","pkg:link":"cd ./dist && npm link && echo \'\\n=== link name: node-mailjet ===\'","pkg:prepare":"husky install","pkg:precommit":"npm audit && npm run lint:errors && npm run test","release":"standard-version -a","release:dry":"standard-version --dry-run","release:quiet":"standard-version --no-verify -a","release:minor":"standard-version -a --release-as minor","release:patch":"standard-version -a --release-as patch","release:major":"standard-version -a --release-as major","docs":"typedoc --tsconfig ./tsconfig.json"},"dependencies":{"axios":"1.7.4","json-bigint":"^1.0.0","url-join":"^4.0.0"},"devDependencies":{"@babel/core":"^7.18.0","@babel/preset-env":"^7.18.0","@commitlint/cli":"^17.0.2","@commitlint/config-conventional":"^17.0.2","@types/chai":"^4.3.1","@types/json-bigint":"^1.0.1","@types/mocha":"^9.1.1","@types/node":"^17.0.34","@types/qs":"^6.9.7","@types/superagent":"^4.1.15","@types/url-join":"^4.0.1","@typescript-eslint/eslint-plugin":"^5.24.0","@typescript-eslint/parser":"^5.24.0","babel-loader":"^8.2.5","chai":"^4.1.0","eslint":"^8.15.0","eslint-config-airbnb-base":"^15.0.0","eslint-import-resolver-typescript":"^2.7.1","eslint-plugin-import":"^2.26.0","eslint-plugin-tsdoc":"^0.2.16","husky":"^8.0.1","mocha":"^9.0.0","nock":"^13.2.4","nyc":"^15.1.0","qs":"^6.5.0","standard-version":"^9.5.0","terser-webpack-plugin":"^5.3.1","ts-loader":"^9.3.0","ts-node":"^10.7.0","ts-node-dev":"^1.1.8","ts-patch":"^2.0.1","tsconfig-paths":"^4.0.0","tsconfig-paths-webpack-plugin":"^3.5.2","typedoc":"^0.22.15","typescript":"^4.6.4","typescript-transform-paths":"^3.3.1","webpack":"^5.76.0","webpack-cli":"^4.9.2","webpack-merge":"^5.8.0"},"homepage":"https://github.com/mailjet/mailjet-apiv3-nodejs#readme","repository":{"type":"git","url":"git+https://github.com/mailjet/mailjet-apiv3-nodejs.git"},"bugs":{"url":"https://github.com/mailjet/mailjet-apiv3-nodejs/issues"},"contributors":["Arnaud Breton (https://github.com/arnaudbreton)","Nicholas Smith (https://github.com/safani)","Jérémie Parker (https://github.com/p-j)"]}')}},t={};function n(r){var o=t[r];if(void 0!==o)return o.exports;var i=t[r]={exports:{}};return e[r].call(i.exports,i,i.exports,n),i.exports}return n.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),n(321)}()})); +//# sourceMappingURL=data:application/json;charset=utf-8;base64,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QUFBLGVBQUFBLElBQUFBLGlCQUNBQSxFQUFBQSxFQUFBQSxtQkFBQUEsSUFBQUEscUJBQ0FBLEVBQUFBLEVBQUFBLHdCQUFBQSxJQUFBQSwwQkFDQUEsRUFBQUEsRUFBQUEsUUFBQUEsSUFBQUEsVUFDQUEsRUFBQUEsRUFBQUEsWUFBQUEsSUFBQUEsY0FDQUEsRUFBQUEsRUFBQUEsYUFBQUEsSUFBQUEsY0FDRCxDQXRCRCxDQUFZRCxFQUFBQSxlQUFBQSxFQUFBQSxhQUFZLEtBd0J4QixTQUFZRSxHQUNWQSxFQUFBQSxFQUFBQSxjQUFBQSxHQUFBQSxnQkFDQUEsRUFBQUEsRUFBQUEsVUFBQUEsR0FBQUEsWUFDQUEsRUFBQUEsRUFBQUEsUUFBQUEsR0FBQUEsU0FDRCxDQUpELENBQVlGLEVBQUFBLFdBQUFBLEVBQUFBLFNBQVEsS0FNcEIsU0FBWUcsR0FDVkEsRUFBQUEsRUFBQUEsVUFBQUEsR0FBQUEsWUFDQUEsRUFBQUEsRUFBQUEsT0FBQUEsR0FBQUEsU0FDQUEsRUFBQUEsRUFBQUEsS0FBQUEsR0FBQUEsT0FDQUEsRUFBQUEsRUFBQUEsT0FBQUEsR0FBQUEsU0FDQUEsRUFBQUEsRUFBQUEsUUFBQUEsR0FBQUEsVUFDQUEsRUFBQUEsRUFBQUEsT0FBQUEsR0FBQUEsU0FDQUEsRUFBQUEsRUFBQUEsS0FBQUEsR0FBQUEsT0FDQUEsRUFBQUEsRUFBQUEsTUFBQUEsR0FBQUEsUUFDQUEsRUFBQUEsRUFBQUEsUUFBQUEsR0FBQUEsVUFDQUEsRUFBQUEsRUFBQUEsV0FBQUEsR0FBQUEsYUFDQUEsRUFBQUEsRUFBQUEsV0FBQUEsSUFBQUEsYUFDQUEsRUFBQUEsRUFBQUEsU0FBQUEsSUFBQUEsVUFDRCxDQWJELENBQVlILEVBQUFBLGdCQUFBQSxFQUFBQSxjQUFhLEtBZXpCLFNBQVlJLEdBQ1ZBLEVBQUFBLFFBQUFBLFVBQ0FBLEVBQUFBLE9BQUFBLFNBQ0FBLEVBQUFBLEtBQUFBLE9BQ0FBLEVBQUFBLE9BQUFBLFNBQ0FBLEVBQUFBLFFBQUFBLFVBQ0FBLEVBQUFBLE9BQUFBLFNBQ0FBLEVBQUFBLEtB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bWFpbGpldC8uL2xpYi9jbGllbnQvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vbm9kZS1tYWlsamV0Ly4vbGliL2luZGV4LnRzIiwid2VicGFjazovL25vZGUtbWFpbGpldC8uL2xpYi9yZXF1ZXN0L0h0dHBNZXRob2RzLnRzIiwid2VicGFjazovL25vZGUtbWFpbGpldC8uL2xpYi9yZXF1ZXN0L2luZGV4LnRzIiwid2VicGFjazovL25vZGUtbWFpbGpldC8uL2xpYi90eXBlcy9hcGkvQ2FtcGFpZ24udHMiLCJ3ZWJwYWNrOi8vbm9kZS1tYWlsamV0Ly4vbGliL3R5cGVzL2FwaS9Db21tb24udHMiLCJ3ZWJwYWNrOi8vbm9kZS1tYWlsamV0Ly4vbGliL3R5cGVzL2FwaS9Db250YWN0LnRzIiwid2VicGFjazovL25vZGUtbWFpbGpldC8uL2xpYi90eXBlcy9hcGkvTWVzc2FnZS50cyIsIndlYnBhY2s6Ly9ub2RlLW1haWxqZXQvLi9saWIvdHlwZXMvYXBpL1NlZ21lbnRhdGlvbi50cyIsIndlYnBhY2s6Ly9ub2RlLW1haWxqZXQvLi9saWIvdHlwZXMvYXBpL1NlbmRFbWFpbC50cyIsIndlYnBhY2s6Ly9ub2RlLW1haWxqZXQvLi9saWIvdHlwZXMvYXBpL1NlbmRlckFkZHJlc3NBbmREb21haW4udHMiLCJ3ZWJwYWNrOi8vbm9kZS1tYWlsamV0Ly4vbGliL3R5cGVzL2FwaS9TZXR0aW5nLnRzIiwid2VicGFjazovL25vZGUtbWFpbGpldC8uL2xpYi90eXBlcy9hcGkvU3RhdGlzdGljLnRzIiwid2VicGFjazovL25vZGUtbWFpbGpldC8uL2xpYi90eXBlcy9hcGkvVGVtcGxhdGUudHMiLCJ3ZWJwYWNrOi8vbm9kZS1tYWlsamV0Ly4vbGliL3R5cGVzL2FwaS9XZWJob29rLnRzIiwid2VicGFjazovL25vZGUtbWFpbGpldC8uL2xpYi90eXBlcy9hcGkvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vbm9kZS1tYWlsamV0Ly4vbGliL3V0aWxzL2luZGV4LnRzIiwid2VicGFjazovL25vZGUtbWFpbGpldC8uL2xpYi91dGlscy9pc05pbC50cyIsIndlYnBhY2s6Ly9ub2RlLW1haWxqZXQvLi9saWIvdXRpbHMvaXNOdWxsLnRzIiwid2VicGFjazovL25vZGUtbWFpbGpldC8uL2xpYi91dGlscy9pc1B1cmVPYmplY3QudHMiLCJ3ZWJwYWNrOi8vbm9kZS1tYWlsamV0Ly4vbGliL3V0aWxzL2lzVW5kZWZpbmVkLnRzIiwid2VicGFjazovL25vZGUtbWFpbGpldC8uL2xpYi91dGlscy9zZXRWYWx1ZUlmTm90TmlsLnRzIiwid2VicGFjazovL25vZGUtbWFpbGpldC8uL25vZGVfbW9kdWxlcy9iaWdudW1iZXIuanMvYmlnbnVtYmVyLmpzIiwid2VicGFjazovL25vZGUtbWFpbGpldC8uL25vZGVfbW9kdWxlcy9qc29uLWJpZ2ludC9pbmRleC5qcyIsIndlYnBhY2s6Ly9ub2RlLW1haWxqZXQvLi9ub2RlX21vZHVsZXMvanNvbi1iaWdpbnQvbGliL3BhcnNlLmpzIiwid2VicGFjazovL25vZGUtbWFpbGpldC8uL25vZGVfbW9kdWxlcy9qc29uLWJpZ2ludC9saWIvc3RyaW5naWZ5LmpzIiwid2VicGFjazovL25vZGUtbWFpbGpldC8uL25vZGVfbW9kdWxlcy91cmwtam9pbi9saWIvdXJsLWpvaW4uanMiLCJ3ZWJwYWNrOi8vbm9kZS1tYWlsamV0Ly4vbm9kZV9tb2R1bGVzL2F4aW9zL2Rpc3QvYnJvd3Nlci9heGlvcy5janMiLCJ3ZWJwYWNrOi8vbm9kZS1tYWlsamV0L3dlYnBhY2svYm9vdHN0cmFwIiwid2VicGFjazovL25vZGUtbWFpbGpldC93ZWJwYWNrL3J1bnRpbWUvZ2xvYmFsIiwid2VicGFjazovL25vZGUtbWFpbGpldC93ZWJwYWNrL3N0YXJ0dXAiXSwic291cmNlc0NvbnRlbnQiOlsiLypleHRlcm5hbCBtb2R1bGVzKi9cbi8qdXRpbHMqL1xuaW1wb3J0IHtcbiAgaXNQdXJlT2JqZWN0LFxuICBzZXRWYWx1ZUlmTm90TmlsLFxufSBmcm9tICcuLi91dGlscyc7XG4vKnR5cGVzKi9cbmltcG9ydCBIdHRwTWV0aG9kcyBmcm9tICcuLi9yZXF1ZXN0L0h0dHBNZXRob2RzJztcbmltcG9ydCB7IENsaWVudFBhcmFtcyB9IGZyb20gJy4vQ2xpZW50JztcbmltcG9ydCB7IFJlcXVlc3RDb25maWcsIFJlcXVlc3RPcHRpb25zLCBSZXF1ZXN0Q29uc3RydWN0b3JDb25maWcgfSBmcm9tICcuLi9yZXF1ZXN0L1JlcXVlc3QnO1xuLypsaWIqL1xuaW1wb3J0IFJlcXVlc3QgZnJvbSAnLi4vcmVxdWVzdCc7XG5pbXBvcnQgcGFja2FnZUpTT04gZnJvbSAnLi4vLi4vcGFja2FnZS5qc29uJztcbi8qb3RoZXIqL1xuXG5leHBvcnQgdHlwZSBDbGllbnRDb25uZWN0UGFyYW1zID0gUGljazxDbGllbnRQYXJhbXMsICdjb25maWcnIHwgJ29wdGlvbnMnPjtcblxuY2xhc3MgQ2xpZW50IHtcbiAgcHJpdmF0ZSB2ZXJzaW9uITogc3RyaW5nO1xuXG4gIHByaXZhdGUgY29uZmlnITogUmVxdWVzdENvbmZpZztcbiAgcHJpdmF0ZSBvcHRpb25zITogUmVxdWVzdE9wdGlvbnM7XG5cbiAgcHJpdmF0ZSBhcGlLZXk/OiBzdHJpbmc7XG4gIHByaXZhdGUgYXBpU2VjcmV0Pzogc3RyaW5nO1xuICBwcml2YXRlIGFwaVRva2VuPzogc3RyaW5nO1xuXG4gIGNvbnN0cnVjdG9yKHBhcmFtczogQ2xpZW50UGFyYW1zKSB7XG4gICAgaWYgKCFpc1B1cmVPYmplY3QocGFyYW1zKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdBcmd1bWVudCBcInBhcmFtc1wiIG11c3QgYmUgb2JqZWN0Jyk7XG4gICAgfVxuXG4gICAgdGhpcy5pbml0KHRoaXMuY2xvbmVQYXJhbXMocGFyYW1zKSk7XG4gIH1cblxuICBwdWJsaWMgZ2V0UGFja2FnZVZlcnNpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMudmVyc2lvbjtcbiAgfVxuXG4gIHB1YmxpYyBnZXRBUElLZXkoKSB7XG4gICAgcmV0dXJuIHRoaXMuYXBpS2V5O1xuICB9XG5cbiAgcHVibGljIGdldEFQSVNlY3JldCgpIHtcbiAgICByZXR1cm4gdGhpcy5hcGlTZWNyZXQ7XG4gIH1cblxuICBwdWJsaWMgZ2V0QVBJVG9rZW4oKSB7XG4gICAgcmV0dXJuIHRoaXMuYXBpVG9rZW47XG4gIH1cblxuICBwdWJsaWMgZ2V0Q29uZmlnKCkge1xuICAgIHJldHVybiB7IC4uLnRoaXMuY29uZmlnIH07XG4gIH1cblxuICBwdWJsaWMgZ2V0T3B0aW9ucygpOiBSZXF1ZXN0T3B0aW9ucyB7XG4gICAgcmV0dXJuIHsgLi4udGhpcy5vcHRpb25zIH07XG4gIH1cblxuICBwdWJsaWMgZ2V0KHJlc291cmNlOiBzdHJpbmcsIGNvbmZpZz86IFJlcXVlc3RDb25zdHJ1Y3RvckNvbmZpZykge1xuICAgIHJldHVybiBuZXcgUmVxdWVzdCh0aGlzLCBIdHRwTWV0aG9kcy5HZXQsIHJlc291cmNlLCBjb25maWcpO1xuICB9XG5cbiAgcHVibGljIHBvc3QocmVzb3VyY2U6IHN0cmluZywgY29uZmlnPzogUmVxdWVzdENvbnN0cnVjdG9yQ29uZmlnKSB7XG4gICAgcmV0dXJuIG5ldyBSZXF1ZXN0KHRoaXMsIEh0dHBNZXRob2RzLlBvc3QsIHJlc291cmNlLCBjb25maWcpO1xuICB9XG5cbiAgcHVibGljIHB1dChyZXNvdXJjZTogc3RyaW5nLCBjb25maWc/OiBSZXF1ZXN0Q29uc3RydWN0b3JDb25maWcpIHtcbiAgICByZXR1cm4gbmV3IFJlcXVlc3QodGhpcywgSHR0cE1ldGhvZHMuUHV0LCByZXNvdXJjZSwgY29uZmlnKTtcbiAgfVxuXG4gIHB1YmxpYyBkZWxldGUocmVzb3VyY2U6IHN0cmluZywgY29uZmlnPzogUmVxdWVzdENvbnN0cnVjdG9yQ29uZmlnKSB7XG4gICAgcmV0dXJuIG5ldyBSZXF1ZXN0KHRoaXMsIEh0dHBNZXRob2RzLkRlbGV0ZSwgcmVzb3VyY2UsIGNvbmZpZyk7XG4gIH1cblxuICBwcml2YXRlIGluaXQocGFyYW1zOiBDbGllbnRQYXJhbXMpIHtcbiAgICBpZiAoIWlzUHVyZU9iamVjdChwYXJhbXMpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0FyZ3VtZW50IFwicGFyYW1zXCIgbXVzdCBiZSBvYmplY3QnKTtcbiAgICB9XG5cbiAgICBjb25zdCB7XG4gICAgICBhcGlUb2tlbixcbiAgICAgIGFwaUtleSxcbiAgICAgIGFwaVNlY3JldCxcbiAgICAgIG9wdGlvbnMsXG4gICAgICBjb25maWcsXG4gICAgfSA9IHBhcmFtcztcblxuICAgIHRoaXMudmVyc2lvbiA9IENsaWVudC5wYWNrYWdlSlNPTi52ZXJzaW9uO1xuXG4gICAgdGhpcy5zZXRDb25maWcoY29uZmlnID8/IG51bGwpO1xuICAgIHRoaXMuc2V0T3B0aW9ucyhvcHRpb25zID8/IG51bGwpO1xuXG4gICAgcmV0dXJuICdhcGlUb2tlbicgaW4gcGFyYW1zXG4gICAgICA/IHRoaXMudG9rZW5Db25uZWN0U3RyYXRlZ3koYXBpVG9rZW4pXG4gICAgICA6IHRoaXMuYmFzaWNDb25uZWN0U3RyYXRlZ3koYXBpS2V5LCBhcGlTZWNyZXQpO1xuICB9XG5cbiAgcHJpdmF0ZSBjbG9uZVBhcmFtcyhwYXJhbXM6IENsaWVudFBhcmFtcykge1xuICAgIGlmICghaXNQdXJlT2JqZWN0KHBhcmFtcykpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQXJndW1lbnQgXCJwYXJhbXNcIiBtdXN0IGJlIG9iamVjdCcpO1xuICAgIH1cblxuICAgIGNvbnN0IGNsb25lZFBhcmFtcyA9IHsgLi4ucGFyYW1zIH07XG5cbiAgICBpZiAocGFyYW1zLmNvbmZpZykge1xuICAgICAgY2xvbmVkUGFyYW1zLmNvbmZpZyA9IHtcbiAgICAgICAgLi4ucGFyYW1zLmNvbmZpZyxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgaWYgKHBhcmFtcy5vcHRpb25zKSB7XG4gICAgICBjbG9uZWRQYXJhbXMub3B0aW9ucyA9IHtcbiAgICAgICAgLi4ucGFyYW1zLm9wdGlvbnMsXG4gICAgICB9O1xuXG4gICAgICBpZiAoY2xvbmVkUGFyYW1zLm9wdGlvbnMucHJveHkpIHtcbiAgICAgICAgY2xvbmVkUGFyYW1zLm9wdGlvbnMucHJveHkgPSB7XG4gICAgICAgICAgLi4uY2xvbmVkUGFyYW1zLm9wdGlvbnMucHJveHksXG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIGlmIChjbG9uZWRQYXJhbXMub3B0aW9ucy5oZWFkZXJzKSB7XG4gICAgICAgIGNsb25lZFBhcmFtcy5vcHRpb25zLmhlYWRlcnMgPSB7XG4gICAgICAgICAgLi4uY2xvbmVkUGFyYW1zLm9wdGlvbnMuaGVhZGVycyxcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gY2xvbmVkUGFyYW1zO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRDb25maWcoY3VzdG9tQ29uZmlnOiBQYXJ0aWFsPFJlcXVlc3RDb25maWc+IHwgbnVsbCkge1xuICAgIGlmICh0eXBlb2YgY3VzdG9tQ29uZmlnICE9PSAnb2JqZWN0Jykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdBcmd1bWVudCBcImN1c3RvbUNvbmZpZ1wiIG11c3QgYmUgb2JqZWN0IG9yIG51bGwnKTtcbiAgICB9XG5cbiAgICBjb25zdCBjb25maWcgPSB7IC4uLkNsaWVudC5jb25maWcgfTtcblxuICAgIGlmIChjdXN0b21Db25maWcgIT09IG51bGwpIHtcbiAgICAgIHNldFZhbHVlSWZOb3ROaWwoY29uZmlnLCAnaG9zdCcsIGN1c3RvbUNvbmZpZy5ob3N0KTtcbiAgICAgIHNldFZhbHVlSWZOb3ROaWwoY29uZmlnLCAnb3V0cHV0JywgY3VzdG9tQ29uZmlnLm91dHB1dCk7XG4gICAgICBzZXRWYWx1ZUlmTm90TmlsKGNvbmZpZywgJ3ZlcnNpb24nLCBjdXN0b21Db25maWcudmVyc2lvbik7XG4gICAgfVxuXG4gICAgdGhpcy5jb25maWcgPSBjb25maWc7XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIHByaXZhdGUgc2V0T3B0aW9ucyhvcHRpb25zOiBSZXF1ZXN0T3B0aW9ucyB8IG51bGwpIHtcbiAgICBpZiAodHlwZW9mIG9wdGlvbnMgIT09ICdvYmplY3QnKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0FyZ3VtZW50IFwib3B0aW9uc1wiIG11c3QgYmUgb2JqZWN0IG9yIG51bGwnKTtcbiAgICB9XG5cbiAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zID8/IHt9O1xuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBwcml2YXRlIHRva2VuQ29ubmVjdFN0cmF0ZWd5KGFwaVRva2VuOiBzdHJpbmcgfCB1bmRlZmluZWQpIHtcbiAgICBpZiAoIWFwaVRva2VuKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ01haWxqZXQgQVBJX1RPS0VOIGlzIHJlcXVpcmVkJyk7XG4gICAgfVxuXG4gICAgdGhpcy5hcGlUb2tlbiA9IGFwaVRva2VuO1xuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBwcml2YXRlIGJhc2ljQ29ubmVjdFN0cmF0ZWd5KGFwaUtleTogc3RyaW5nIHwgdW5kZWZpbmVkLCBhcGlTZWNyZXQ6IHN0cmluZyB8IHVuZGVmaW5lZCkge1xuICAgIGlmICghYXBpS2V5KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ01haWxqZXQgQVBJX0tFWSBpcyByZXF1aXJlZCcpO1xuICAgIH1cbiAgICBpZiAoIWFwaVNlY3JldCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdNYWlsamV0IEFQSV9TRUNSRVQgaXMgcmVxdWlyZWQnKTtcbiAgICB9XG5cbiAgICB0aGlzLmFwaUtleSA9IGFwaUtleTtcbiAgICB0aGlzLmFwaVNlY3JldCA9IGFwaVNlY3JldDtcblxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgcHVibGljIHN0YXRpYyBhcGlDb25uZWN0KGFwaUtleTogc3RyaW5nLCBhcGlTZWNyZXQ6IHN0cmluZywgcGFyYW1zPzogQ2xpZW50Q29ubmVjdFBhcmFtcykge1xuICAgIHJldHVybiBuZXcgQ2xpZW50KHsgYXBpS2V5LCBhcGlTZWNyZXQsIC4uLnBhcmFtcyB9KTtcbiAgfVxuXG4gIHB1YmxpYyBzdGF0aWMgc21zQ29ubmVjdChhcGlUb2tlbjogc3RyaW5nLCBwYXJhbXM/OiBDbGllbnRDb25uZWN0UGFyYW1zKSB7XG4gICAgcmV0dXJuIG5ldyBDbGllbnQoeyBhcGlUb2tlbiwgLi4ucGFyYW1zIH0pO1xuICB9XG5cbiAgcHVibGljIHN0YXRpYyBjb25maWc6IFJlYWRvbmx5PFJlcXVlc3RDb25maWc+ID0gT2JqZWN0LmZyZWV6ZSh7XG4gICAgaG9zdDogJ2FwaS5tYWlsamV0LmNvbScsXG4gICAgdmVyc2lvbjogJ3YzJyxcbiAgICBvdXRwdXQ6ICdqc29uJyxcbiAgfSBhcyBjb25zdCk7XG5cbiAgcHVibGljIHN0YXRpYyBwYWNrYWdlSlNPTiA9IE9iamVjdC5mcmVlemUoe1xuICAgIC4uLnBhY2thZ2VKU09OLFxuICB9IGFzIGNvbnN0KTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgQ2xpZW50O1xuIiwiLypleHRlcm5hbCBtb2R1bGVzKi9cbi8qdXRpbHMqL1xuLyp0eXBlcyovXG5pbXBvcnQgSHR0cE1ldGhvZHMgZnJvbSAnLi9yZXF1ZXN0L0h0dHBNZXRob2RzJztcbi8qbGliKi9cbmltcG9ydCBSZXF1ZXN0IGZyb20gJy4vcmVxdWVzdC9pbmRleCc7XG5pbXBvcnQgQ2xpZW50IGZyb20gJy4vY2xpZW50L2luZGV4Jztcbi8qb3RoZXIqL1xuXG5jbGFzcyBNYWlsamV0IGV4dGVuZHMgQ2xpZW50IHtcbiAgc3RhdGljIFJlcXVlc3QgPSBSZXF1ZXN0O1xuICBzdGF0aWMgSHR0cE1ldGhvZHMgPSBIdHRwTWV0aG9kcztcbiAgc3RhdGljIENsaWVudCA9IENsaWVudDtcbn1cblxuZXhwb3J0ICogZnJvbSAnLi90eXBlcy9hcGknO1xuZXhwb3J0IHsgQ2xpZW50LCBSZXF1ZXN0LCBIdHRwTWV0aG9kcyB9O1xuZXhwb3J0IGRlZmF1bHQgTWFpbGpldDtcbiIsIi8qZXh0ZXJuYWwgbW9kdWxlcyovXG4vKnR5cGVzKi9cbi8qdXRpbHMqL1xuLypsaWIqL1xuLypvdGhlciovXG5cbmVudW0gSHR0cE1ldGhvZHMge1xuICBHZXQgPSAnZ2V0JyxcbiAgUG9zdCA9ICdwb3N0JyxcbiAgUHV0ID0gJ3B1dCcsXG4gIERlbGV0ZSA9ICdkZWxldGUnXG59XG5cbmV4cG9ydCBkZWZhdWx0IEh0dHBNZXRob2RzO1xuIiwiLypleHRlcm5hbCBtb2R1bGVzKi9cbmltcG9ydCB1cmxKb2luIGZyb20gJ3VybC1qb2luJztcbmltcG9ydCBKU09OQmlnSW50IGZyb20gJ2pzb24tYmlnaW50JztcbmltcG9ydCBheGlvcywgeyBBeGlvc0Vycm9yIH0gZnJvbSAnYXhpb3MnO1xuLyp1dGlscyovXG5pbXBvcnQgeyBzZXRWYWx1ZUlmTm90TmlsIH0gZnJvbSAnLi4vdXRpbHMvaW5kZXgnO1xuLyp0eXBlcyovXG5pbXBvcnQgeyBUT2JqZWN0IH0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHsgTGlicmFyeVJlc3BvbnNlLCBMaWJyYXJ5TG9jYWxSZXNwb25zZSB9IGZyb20gJy4uL3R5cGVzL2FwaSc7XG5pbXBvcnQgSHR0cE1ldGhvZHMgZnJvbSAnLi9IdHRwTWV0aG9kcyc7XG5pbXBvcnQge1xuICBSZXF1ZXN0Q29uZmlnLFxuICBSZXF1ZXN0RGF0YSxcbiAgUmVxdWVzdFBhcmFtcyxcbiAgUmVxdWVzdENvbnN0cnVjdG9yQ29uZmlnLFxuICBSZXF1ZXN0QXhpb3NDb25maWcsXG4gIFN1YlBhdGgsXG59IGZyb20gJy4vUmVxdWVzdCc7XG4vKmxpYiovXG5pbXBvcnQgQ2xpZW50IGZyb20gJy4uL2NsaWVudCc7XG4vKm90aGVyKi9cblxudHlwZSBVbmtub3duUmVjID0gVE9iamVjdC5Vbmtub3duUmVjXG5cbmNvbnN0IEpTT05iID0gSlNPTkJpZ0ludCh7IHN0b3JlQXNTdHJpbmc6IHRydWUgfSk7XG5cbmNsYXNzIFJlcXVlc3Qge1xuICBwcml2YXRlIHJlYWRvbmx5IGNsaWVudDogQ2xpZW50O1xuICBwcml2YXRlIHJlYWRvbmx5IG1ldGhvZDogSHR0cE1ldGhvZHM7XG4gIHByaXZhdGUgcmVhZG9ubHkgY29uZmlnOiBQYXJ0aWFsPFJlcXVlc3RDb25maWc+O1xuICBwcml2YXRlIHJlYWRvbmx5IHJlc291cmNlOiBzdHJpbmc7XG5cbiAgcHJpdmF0ZSB1cmw6IHN0cmluZztcbiAgcHJpdmF0ZSBzdWJQYXRoOiBTdWJQYXRoO1xuICBwcml2YXRlIGFjdGlvblBhdGg6IHN0cmluZyB8IG51bGw7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgY2xpZW50OiBDbGllbnQsXG4gICAgbWV0aG9kOiBIdHRwTWV0aG9kcyxcbiAgICByZXNvdXJjZTogc3RyaW5nLFxuICAgIGNvbmZpZz86IFJlcXVlc3RDb25zdHJ1Y3RvckNvbmZpZyxcbiAgKSB7XG4gICAgaWYgKCEoY2xpZW50IGluc3RhbmNlb2YgQ2xpZW50KSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdBcmd1bWVudCBcImNsaWVudFwiIG11c3QgYmUgaW5zdGFuY2Ugb2YgQ2xpZW50Jyk7XG4gICAgfVxuXG4gICAgaWYgKCFPYmplY3QudmFsdWVzKEh0dHBNZXRob2RzKS5pbmNsdWRlcyhtZXRob2QpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0FyZ3VtZW50IFwibWV0aG9kXCIgbXVzdCBiZSBvbmUgb2Ygc3VwcG9ydGVkIG1ldGhvZHM6IGdldCwgcG9zdCwgcHV0LCBkZWxldGUnKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIHJlc291cmNlICE9PSAnc3RyaW5nJykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdBcmd1bWVudCBcInJlc291cmNlXCIgbXVzdCBiZSBzdHJpbmcnKTtcbiAgICB9XG5cbiAgICB0aGlzLmNsaWVudCA9IGNsaWVudDtcblxuICAgIHRoaXMubWV0aG9kID0gbWV0aG9kO1xuICAgIHRoaXMudXJsID0gcmVzb3VyY2UudG9Mb3dlckNhc2UoKTtcbiAgICB0aGlzLnJlc291cmNlID0gcmVzb3VyY2UudG9Mb3dlckNhc2UoKTtcbiAgICB0aGlzLnN1YlBhdGggPSB0aGlzLmJ1aWxkU3ViUGF0aCgpO1xuICAgIHRoaXMuYWN0aW9uUGF0aCA9IG51bGw7XG5cbiAgICB0aGlzLmNvbmZpZyA9IHsgLi4uY29uZmlnIH07XG4gIH1cblxuICBwdWJsaWMgZ2V0VXNlckFnZW50KCkge1xuICAgIHJldHVybiBgbWFpbGpldC1hcGktdjMtbm9kZWpzLyR7dGhpcy5jbGllbnQuZ2V0UGFja2FnZVZlcnNpb24oKX1gO1xuICB9XG5cbiAgcHVibGljIGdldENyZWRlbnRpYWxzKCkge1xuICAgIHJldHVybiB7XG4gICAgICBhcGlUb2tlbjogdGhpcy5jbGllbnQuZ2V0QVBJVG9rZW4oKSxcbiAgICAgIGFwaUtleTogdGhpcy5jbGllbnQuZ2V0QVBJS2V5KCksXG4gICAgICBhcGlTZWNyZXQ6IHRoaXMuY2xpZW50LmdldEFQSVNlY3JldCgpLFxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIGdldENvbnRlbnRUeXBlKHVybDogc3RyaW5nKSB7XG4gICAgaWYgKHR5cGVvZiB1cmwgIT09ICdzdHJpbmcnKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0FyZ3VtZW50IFwidXJsXCIgbXVzdCBiZSBzdHJpbmcnKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdXJsLmluZGV4T2YoJ3RleHQ6cGxhaW4nKSA+IC0xXG4gICAgICA/ICd0ZXh0L3BsYWluJ1xuICAgICAgOiAnYXBwbGljYXRpb24vanNvbic7XG4gIH1cblxuICBwcml2YXRlIGdldFJlcXVlc3RCb2R5KGRhdGE6IFJlcXVlc3REYXRhKSB7XG4gICAgcmV0dXJuIFtcbiAgICAgIEh0dHBNZXRob2RzLlB1dCxcbiAgICAgIEh0dHBNZXRob2RzLlBvc3QsXG4gICAgICBIdHRwTWV0aG9kcy5EZWxldGUsXG4gICAgXS5pbmNsdWRlcyh0aGlzLm1ldGhvZCkgPyBkYXRhIDogdW5kZWZpbmVkO1xuICB9XG5cbiAgcHJpdmF0ZSBidWlsZEZ1bGxVcmwoKSB7XG4gICAgY29uc3QgY2xpZW50Q29uZmlnID0gdGhpcy5jbGllbnQuZ2V0Q29uZmlnKCk7XG5cbiAgICBjb25zdCBob3N0ID0gdGhpcy5jb25maWcuaG9zdCA/PyBjbGllbnRDb25maWcuaG9zdDtcbiAgICBjb25zdCB2ZXJzaW9uID0gdGhpcy5jb25maWcudmVyc2lvbiA/PyBjbGllbnRDb25maWcudmVyc2lvbjtcblxuICAgIHJldHVybiB1cmxKb2luKFJlcXVlc3QucHJvdG9jb2wsIGhvc3QsIHZlcnNpb24sIHRoaXMuc3ViUGF0aCwgdGhpcy51cmwpO1xuICB9XG5cbiAgcHJpdmF0ZSBidWlsZFN1YlBhdGgoKSB7XG4gICAgaWYgKHRoaXMuYWN0aW9uUGF0aCkge1xuICAgICAgY29uc3QgaXNDb250YWN0TGlzdFdpdGhDU1YgPSB0aGlzLnJlc291cmNlID09PSAnY29udGFjdHNsaXN0JyAmJiB0aGlzLmFjdGlvblBhdGggPT09ICdjc3ZkYXRhL3RleHQ6cGxhaW4nO1xuICAgICAgY29uc3QgaXNCYXRjaEpvYldpdGhDU1YgPSB0aGlzLnJlc291cmNlID09PSAnYmF0Y2hqb2InICYmIHRoaXMuYWN0aW9uUGF0aCA9PT0gJ2NzdmVycm9yL3RleHQ6Y3N2JztcblxuICAgICAgcmV0dXJuIChpc0NvbnRhY3RMaXN0V2l0aENTViB8fCBpc0JhdGNoSm9iV2l0aENTVikgPyAnREFUQScgOiB0aGlzLnN1YlBhdGg7XG4gICAgfVxuICAgIGNvbnN0IGlzU2VuZFJlc291cmNlID0gdGhpcy5yZXNvdXJjZSA9PT0gJ3NlbmQnO1xuICAgIGNvbnN0IHJlc291cmNlQ29udGFpblNNUyA9IHRoaXMucmVzb3VyY2UuaW5kZXhPZignc21zJykgPiAtMTtcblxuICAgIHJldHVybiAoIWlzU2VuZFJlc291cmNlICYmICFyZXNvdXJjZUNvbnRhaW5TTVMpID8gJ1JFU1QnIDogJyc7XG4gIH1cblxuICBwcml2YXRlIG1ha2VSZXF1ZXN0KHVybDogc3RyaW5nLCBkYXRhOiBSZXF1ZXN0RGF0YSwgcGFyYW1zOiBSZXF1ZXN0UGFyYW1zKSB7XG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2F4aW9zL2F4aW9zI3JlcXVlc3QtY29uZmlnXG4gICAgY29uc3QgcmVxdWVzdENvbmZpZzogUmVxdWVzdEF4aW9zQ29uZmlnID0ge1xuICAgICAgdXJsLFxuICAgICAgcGFyYW1zLFxuICAgICAgZGF0YTogdGhpcy5nZXRSZXF1ZXN0Qm9keShkYXRhKSxcbiAgICAgIG1ldGhvZDogdGhpcy5tZXRob2QsXG4gICAgICByZXNwb25zZVR5cGU6ICdqc29uJyxcbiAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgJ1VzZXItQWdlbnQnOiB0aGlzLmdldFVzZXJBZ2VudCgpLFxuICAgICAgICAnQ29udGVudC1UeXBlJzogdGhpcy5nZXRDb250ZW50VHlwZSh1cmwpLFxuICAgICAgfSxcbiAgICAgIHRyYW5zZm9ybVJlc3BvbnNlKHJlc3BvbnNlRGF0YTogdW5rbm93bikge1xuICAgICAgICBjb25zdCBkYXRhSXNTdHJpbmcgPSB0eXBlb2YgcmVzcG9uc2VEYXRhID09PSAnc3RyaW5nJztcbiAgICAgICAgY29uc3QgaXNKU09OUmVxdWVzdGVkID0gdGhpcy5yZXNwb25zZVR5cGUgPT09ICdqc29uJztcblxuICAgICAgICBpZiAocmVzcG9uc2VEYXRhICYmIGRhdGFJc1N0cmluZyAmJiBpc0pTT05SZXF1ZXN0ZWQpIHtcbiAgICAgICAgICByZXR1cm4gUmVxdWVzdC5wYXJzZVRvSlNPTmIocmVzcG9uc2VEYXRhKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiByZXNwb25zZURhdGE7XG4gICAgICB9LFxuICAgIH07XG5cbiAgICAvLyBCUk9XU0VSIFNJREVcbiAgICBpZiAoUmVxdWVzdC5pc0Jyb3dzZXIoKSkge1xuICAgICAgcmVxdWVzdENvbmZpZy5oZWFkZXJzWydYLVVzZXItQWdlbnQnXSA9IHJlcXVlc3RDb25maWcuaGVhZGVyc1snVXNlci1BZ2VudCddO1xuICAgIH1cblxuICAgIC8vIEFVVEhcbiAgICBjb25zdCBjcmVkZW50aWFscyA9IHRoaXMuZ2V0Q3JlZGVudGlhbHMoKTtcblxuICAgIGlmIChjcmVkZW50aWFscy5hcGlUb2tlbikge1xuICAgICAgcmVxdWVzdENvbmZpZy5oZWFkZXJzWydBdXRob3JpemF0aW9uJ10gPSBgQmVhcmVyICR7Y3JlZGVudGlhbHMuYXBpVG9rZW59YDtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVxdWVzdENvbmZpZy5hdXRoID0ge1xuICAgICAgICB1c2VybmFtZTogY3JlZGVudGlhbHMuYXBpS2V5IGFzIHN0cmluZyxcbiAgICAgICAgcGFzc3dvcmQ6IGNyZWRlbnRpYWxzLmFwaVNlY3JldCBhcyBzdHJpbmcsXG4gICAgICB9O1xuICAgIH1cblxuICAgIC8vIE9QVElPTlNcbiAgICBjb25zdCBjbGllbnRDb25maWcgPSB0aGlzLmNsaWVudC5nZXRDb25maWcoKTtcbiAgICBjb25zdCBjbGllbnRPcHRpb25zID0gdGhpcy5jbGllbnQuZ2V0T3B0aW9ucygpO1xuXG4gICAgLy8gMS4gVGltZW91dFxuICAgIGlmIChjbGllbnRPcHRpb25zLnRpbWVvdXQpIHtcbiAgICAgIHJlcXVlc3RDb25maWcudGltZW91dCA9IGNsaWVudE9wdGlvbnMudGltZW91dDtcbiAgICB9XG5cbiAgICAvLyAyLiBQcm94eVxuICAgIGlmIChjbGllbnRPcHRpb25zLnByb3h5KSB7XG4gICAgICByZXF1ZXN0Q29uZmlnLnByb3h5ID0gY2xpZW50T3B0aW9ucy5wcm94eTtcbiAgICB9XG5cbiAgICAvLyAzLiBIZWFkZXJzXG4gICAgaWYgKGNsaWVudE9wdGlvbnMuaGVhZGVycyAmJiBPYmplY3Qua2V5cyhjbGllbnRPcHRpb25zLmhlYWRlcnMpLmxlbmd0aCA+IDApIHtcbiAgICAgIHJlcXVlc3RDb25maWcuaGVhZGVycyA9IHtcbiAgICAgICAgLi4ucmVxdWVzdENvbmZpZy5oZWFkZXJzLFxuICAgICAgICAuLi5jbGllbnRPcHRpb25zLmhlYWRlcnMsXG4gICAgICB9O1xuICAgIH1cblxuICAgIC8vIDQuIE91dHB1dFxuICAgIGNvbnN0IG91dHB1dCA9IHRoaXMuY29uZmlnLm91dHB1dCA/PyBjbGllbnRDb25maWcub3V0cHV0O1xuICAgIGlmIChvdXRwdXQpIHtcbiAgICAgIHJlcXVlc3RDb25maWcucmVzcG9uc2VUeXBlID0gb3V0cHV0O1xuICAgIH1cblxuICAgIC8vIE5PREUgU0lERVxuICAgIC8vIDUuIE1heCByZXF1ZXN0IGNvbnRlbnQgc2l6ZVxuICAgIGlmIChjbGllbnRPcHRpb25zLm1heEJvZHlMZW5ndGgpIHtcbiAgICAgIHJlcXVlc3RDb25maWcubWF4Qm9keUxlbmd0aCA9IGNsaWVudE9wdGlvbnMubWF4Qm9keUxlbmd0aDtcbiAgICB9XG5cbiAgICAvLyBOT0RFIFNJREVcbiAgICAvLyA2LiBNYXggcmVzcG9uc2UgY29udGVudCBzaXplXG4gICAgaWYgKGNsaWVudE9wdGlvbnMubWF4Q29udGVudExlbmd0aCkge1xuICAgICAgcmVxdWVzdENvbmZpZy5tYXhDb250ZW50TGVuZ3RoID0gY2xpZW50T3B0aW9ucy5tYXhDb250ZW50TGVuZ3RoO1xuICAgIH1cblxuICAgIHJldHVybiBheGlvcyhyZXF1ZXN0Q29uZmlnKTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0QmFzZVVSTChiYXNlVXJsOiBzdHJpbmcpIHtcbiAgICB0aGlzLnVybCA9IGJhc2VVcmwudG9Mb3dlckNhc2UoKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIHB1YmxpYyBpZCh2YWx1ZTogc3RyaW5nIHwgbnVtYmVyKSB7XG4gICAgaWYgKCFbJ3N0cmluZycsICdudW1iZXInXS5pbmNsdWRlcyh0eXBlb2YgdmFsdWUpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0FyZ3VtZW50IFwidmFsdWVcIiBtdXN0IGJlIHN0cmluZyBvciBudW1iZXInKTtcbiAgICB9XG5cbiAgICB0aGlzLnVybCA9IHVybEpvaW4odGhpcy51cmwsIHZhbHVlLnRvU3RyaW5nKCkpO1xuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBwdWJsaWMgYWN0aW9uKG5hbWU6IHN0cmluZykge1xuICAgIGlmICh0eXBlb2YgbmFtZSAhPT0gJ3N0cmluZycpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQXJndW1lbnQgXCJuYW1lXCIgbXVzdCBiZSBzdHJpbmcnKTtcbiAgICB9XG5cbiAgICB0aGlzLmFjdGlvblBhdGggPSBuYW1lLnRvTG93ZXJDYXNlKCk7XG5cbiAgICBzd2l0Y2ggKHRoaXMuYWN0aW9uUGF0aCkge1xuICAgICAgY2FzZSAnY3N2ZGF0YSc6IHtcbiAgICAgICAgdGhpcy5hY3Rpb25QYXRoID0gJ2NzdmRhdGEvdGV4dDpwbGFpbic7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgY2FzZSAnY3N2ZXJyb3InOiB7XG4gICAgICAgIHRoaXMuYWN0aW9uUGF0aCA9ICdjc3ZlcnJvci90ZXh0OmNzdic7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgZGVmYXVsdDoge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLnVybCA9IHVybEpvaW4odGhpcy51cmwsIHRoaXMuYWN0aW9uUGF0aCk7XG4gICAgdGhpcy5zdWJQYXRoID0gdGhpcy5idWlsZFN1YlBhdGgoKTtcblxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIHJlcXVlc3Q8Qm9keSBleHRlbmRzIFJlcXVlc3REYXRhPihcbiAgICBkYXRhPzogUmVxdWVzdERhdGEsXG4gICAgcGFyYW1zPzogUmVxdWVzdFBhcmFtcyxcbiAgICBwZXJmb3JtQVBJQ2FsbD86IHRydWUsXG4gICk6IFByb21pc2U8TGlicmFyeVJlc3BvbnNlPEJvZHk+PlxuXG4gIHB1YmxpYyBhc3luYyByZXF1ZXN0PEJvZHkgZXh0ZW5kcyBSZXF1ZXN0RGF0YSwgUGFyYW1zIGV4dGVuZHMgVW5rbm93blJlYz4oXG4gICAgZGF0YT86IEJvZHksXG4gICAgcGFyYW1zPzogUGFyYW1zLFxuICAgIHBlcmZvcm1BUElDYWxsPzogZmFsc2UsXG4gICk6IFByb21pc2U8TGlicmFyeUxvY2FsUmVzcG9uc2U8Qm9keSwgUGFyYW1zPj5cblxuICBwdWJsaWMgYXN5bmMgcmVxdWVzdDxCb2R5IGV4dGVuZHMgUmVxdWVzdERhdGEsIFBhcmFtcyBleHRlbmRzIFVua25vd25SZWM+KFxuICAgIGRhdGE6IFJlcXVlc3REYXRhIHwgQm9keSA9IHt9LFxuICAgIHBhcmFtczogUmVxdWVzdFBhcmFtcyB8IFBhcmFtcyA9IHt9LFxuICAgIHBlcmZvcm1BUElDYWxsID0gdHJ1ZSxcbiAgKTogUHJvbWlzZTxMaWJyYXJ5UmVzcG9uc2U8Qm9keT4gfCBMaWJyYXJ5TG9jYWxSZXNwb25zZTxCb2R5LCBQYXJhbXM+PiB7XG4gICAgY29uc3QgdXJsID0gdGhpcy5idWlsZEZ1bGxVcmwoKTtcbiAgICB0aGlzLnNldEJhc2VVUkwodGhpcy5yZXNvdXJjZSk7XG5cbiAgICBpZiAoIXBlcmZvcm1BUElDYWxsKSB7XG4gICAgICBjb25zdCBib2R5ID0gdGhpcy5nZXRSZXF1ZXN0Qm9keShkYXRhKTtcblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgYm9keSxcbiAgICAgICAgcGFyYW1zLFxuICAgICAgICB1cmwsXG4gICAgICB9IGFzIExpYnJhcnlMb2NhbFJlc3BvbnNlPEJvZHksIFBhcmFtcz47XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5tYWtlUmVxdWVzdCh1cmwsIGRhdGEsIHBhcmFtcyk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICByZXNwb25zZSxcbiAgICAgICAgYm9keTogcmVzcG9uc2UuZGF0YSxcbiAgICAgIH07XG4gICAgfSBjYXRjaCAoZXJyOiB1bmtub3duKSB7XG4gICAgICBpZiAoZXJyIGluc3RhbmNlb2YgQXhpb3NFcnJvcikge1xuICAgICAgICBjb25zdCBlcnJvcjogYW55ID0gbmV3IEVycm9yKCk7XG5cbiAgICAgICAgZXJyb3IuY29kZSA9IGVyci5jb2RlO1xuICAgICAgICBlcnJvci5jb25maWcgPSBlcnIuY29uZmlnO1xuXG4gICAgICAgIGlmIChlcnIucmVzcG9uc2UpIHtcbiAgICAgICAgICBjb25zdCB7XG4gICAgICAgICAgICBzdGF0dXMsXG4gICAgICAgICAgICBzdGF0dXNUZXh0LFxuICAgICAgICAgICAgZGF0YTogYm9keSxcbiAgICAgICAgICB9ID0gZXJyLnJlc3BvbnNlO1xuXG4gICAgICAgICAgZXJyb3IucmVzcG9uc2UgPSBlcnIucmVzcG9uc2U7XG5cbiAgICAgICAgICBlcnJvci5zdGF0dXNDb2RlID0gc3RhdHVzO1xuICAgICAgICAgIGVycm9yLnN0YXR1c1RleHQgPSBzdGF0dXNUZXh0O1xuXG4gICAgICAgICAgY29uc3QgZXJyb3JNZXNzYWdlID0gYm9keT8uRXJyb3JNZXNzYWdlID8/IGVyci5tZXNzYWdlO1xuICAgICAgICAgIGVycm9yLm9yaWdpbmFsTWVzc2FnZSA9IGVycm9yTWVzc2FnZTtcbiAgICAgICAgICBlcnJvci5tZXNzYWdlID0gYFVuc3VjY2Vzc2Z1bDogU3RhdHVzIENvZGU6IFwiJHtlcnJvci5zdGF0dXNDb2RlfVwiIE1lc3NhZ2U6IFwiJHtlcnJvck1lc3NhZ2V9XCJgO1xuXG4gICAgICAgICAgaWYgKGJvZHkpIHtcbiAgICAgICAgICAgIC8vIGh0dHBzOi8vZGV2Lm1haWxqZXQuY29tL2VtYWlsL2d1aWRlcy9zZW5kLWFwaS12MzEvI3NlbmQtaW4tYnVsa1xuICAgICAgICAgICAgY29uc3QgZnVsbE1lc3NhZ2UgPSBib2R5Lk1lc3NhZ2VzPy5bMF0/LkVycm9ycz8uWzBdPy5FcnJvck1lc3NhZ2U7XG4gICAgICAgICAgICBpZiAodHlwZW9mIGZ1bGxNZXNzYWdlID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICBlcnJvci5tZXNzYWdlICs9IGA7XFxuJHtmdWxsTWVzc2FnZX1gO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyB2My4xIGNhc2VcbiAgICAgICAgICAgIC8vIGh0dHBzOi8vZGV2Lm1haWxqZXQuY29tL2VtYWlsL2d1aWRlcy9zZW5kLWFwaS12MzEvI3NhbmRib3gtbW9kZVxuICAgICAgICAgICAgc2V0VmFsdWVJZk5vdE5pbChlcnJvciwgJ0Vycm9yTWVzc2FnZScsIGJvZHkuRXJyb3JNZXNzYWdlKTtcbiAgICAgICAgICAgIHNldFZhbHVlSWZOb3ROaWwoZXJyb3IsICdFcnJvckNvZGUnLCBib2R5LkVycm9yQ29kZSk7XG4gICAgICAgICAgICBzZXRWYWx1ZUlmTm90TmlsKGVycm9yLCAnRXJyb3JJZGVudGlmaWVyJywgYm9keS5FcnJvcklkZW50aWZpZXIpO1xuICAgICAgICAgICAgc2V0VmFsdWVJZk5vdE5pbChlcnJvciwgJ0Vycm9yUmVsYXRlZFRvJywgYm9keS5FcnJvclJlbGF0ZWRUbyk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGVycm9yLnJlc3BvbnNlID0gbnVsbDtcblxuICAgICAgICAgIGVycm9yLnN0YXR1c0NvZGUgPSBudWxsO1xuICAgICAgICAgIGVycm9yLnN0YXR1c1RleHQgPSBudWxsO1xuXG4gICAgICAgICAgZXJyb3Iub3JpZ2luYWxNZXNzYWdlID0gZXJyLm1lc3NhZ2U7XG4gICAgICAgICAgZXJyb3IubWVzc2FnZSA9IGBVbnN1Y2Nlc3NmdWw6IEVycm9yIENvZGU6IFwiJHtlcnJvci5jb2RlfVwiIE1lc3NhZ2U6IFwiJHtlcnIubWVzc2FnZX1cImA7XG4gICAgICAgIH1cblxuICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgIH1cblxuICAgICAgdGhyb3cgZXJyO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBzdGF0aWMgcHJvdG9jb2wgPSAnaHR0cHM6Ly8nIGFzIGNvbnN0O1xuXG4gIHB1YmxpYyBzdGF0aWMgcGFyc2VUb0pTT05iKHRleHQ6IHN0cmluZykge1xuICAgIGlmICh0eXBlb2YgdGV4dCAhPT0gJ3N0cmluZycpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQXJndW1lbnQgXCJ0ZXh0XCIgbXVzdCBiZSBzdHJpbmcnKTtcbiAgICB9XG5cbiAgICBsZXQgYm9keTtcbiAgICB0cnkge1xuICAgICAgYm9keSA9IEpTT05iLnBhcnNlKHRleHQpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGJvZHkgPSB7fTtcbiAgICB9XG5cbiAgICByZXR1cm4gYm9keTtcbiAgfVxuXG4gIHB1YmxpYyBzdGF0aWMgaXNCcm93c2VyKCkge1xuICAgIHJldHVybiB0eXBlb2Ygd2luZG93ID09PSAnb2JqZWN0JztcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBSZXF1ZXN0O1xuIiwiaW1wb3J0IHsgQ29tbW9uIH0gZnJvbSAnLi9Db21tb24nO1xuXG5leHBvcnQgbmFtZXNwYWNlIERyYWZ0Q2FtcGFpZ24ge1xuICBleHBvcnQgZW51bSBFZGl0TW9kZSB7XG4gICAgVG9vbDIgPSAndG9vbDInLFxuICAgIEhUTUwyID0gJ2h0bWwyJyxcbiAgICBNSk1MID0gJ21qbWwnXG4gIH1cblxuICBleHBvcnQgZW51bSBDYW1wYWlnbkRyYWZ0U3RhdHVzIHtcbiAgICBBWENhbmNlbGVkID0gLTMsXG4gICAgRGVsZXRlZCA9IC0yLFxuICAgIEFyY2hpdmVkID0gLTEsXG4gICAgRHJhZnQgPSAwLFxuICAgIFByb2dyYW1tZWQgPSAxLFxuICAgIFNlbnQgPSAyLFxuICAgIEFYVGVzdGVkID0gMyxcbiAgICBBWFNlbGVjdGVkID0gNFxuICB9XG5cbiAgZXhwb3J0IGVudW0gQ2FtcGFpZ25EcmFmdFNlbmRpbmdTdGF0dXMge1xuICAgIEFYQ2FuY2VsbGVkID0gJ0FYQ2FuY2VsbGVkJyxcbiAgICBEZWxldGVkID0gJ0RlbGV0ZWQnLFxuICAgIEFyY2hpdmVkID0gJ0FyY2hpdmVkJyxcbiAgICBEcmFmdCA9ICdEcmFmdCcsXG4gICAgUHJvZ3JhbW1lZCA9ICdQcm9ncmFtbWVkJyxcbiAgICBTZW50ID0gJ1NlbnQnLFxuICAgIEFYVGVzdGVkID0gJ0FYVGVzdGVkJyxcbiAgICBBWFNlbGVjdGVkID0gJ0FYU2VsZWN0ZWQnXG4gIH1cblxuICBleHBvcnQgaW50ZXJmYWNlIFJlY2lwaWVudCB7XG4gICAgRW1haWw6IHN0cmluZztcbiAgICBOYW1lPzogc3RyaW5nXG4gIH1cblxuICBleHBvcnQgaW50ZXJmYWNlIENhbXBhaWduRHJhZnQ8QVhUZXN0aW5nID0gQ29tbW9uLlVua25vd25SZWM+IHtcbiAgICBJRDogbnVtYmVyO1xuICAgIEFYRnJhY3Rpb246IG51bWJlcjtcbiAgICBBWEZyYWN0aW9uTmFtZTogc3RyaW5nO1xuICAgIEFYVGVzdGluZzogQVhUZXN0aW5nO1xuICAgIEN1cnJlbnQ6IG51bWJlcjtcbiAgICBFZGl0TW9kZTogRWRpdE1vZGU7XG4gICAgSXNTdGFycmVkOiBib29sZWFuO1xuICAgIElzVGV4dFBhcnRJbmNsdWRlZDogYm9vbGVhbjtcbiAgICBSZXBseUVtYWlsOiBzdHJpbmc7XG4gICAgU2VuZGVyTmFtZTogc3RyaW5nO1xuICAgIFRlbXBsYXRlSUQ6IG51bWJlcjtcbiAgICBUaXRsZTogc3RyaW5nO1xuICAgIENhbXBhaWduSUQ6IG51bWJlcjtcbiAgICBDb250YWN0c0xpc3RJRDogbnVtYmVyO1xuICAgIENyZWF0ZWRBdDogc3RyaW5nO1xuICAgIERlbGl2ZXJlZEF0OiBzdHJpbmc7XG4gICAgTG9jYWxlOiBzdHJpbmc7XG4gICAgTW9kaWZpZWRBdDogc3RyaW5nO1xuICAgIFByZXNldDogc3RyaW5nO1xuICAgIFNlZ21lbnRhdGlvbklEOiBudW1iZXI7XG4gICAgU2VuZGVyOiBzdHJpbmc7XG4gICAgU2VuZGVyRW1haWw6IHN0cmluZztcbiAgICBTdGF0dXM6IENhbXBhaWduRHJhZnRTdGF0dXM7XG4gICAgU3ViamVjdDogc3RyaW5nO1xuICAgIFVybDogc3RyaW5nO1xuICAgIFVzZWQ6IGJvb2xlYW47XG4gIH1cblxuICBleHBvcnQgaW50ZXJmYWNlIENhbXBhaWduRHJhZnREZXRhaWxDb250ZW50PEhlYWRlcnMgPSBDb21tb24uVW5rbm93blJlYz4ge1xuICAgIEhlYWRlcnM6IEhlYWRlcnM7XG4gICAgJ0h0bWwtcGFydCc6IHN0cmluZztcbiAgICAnVGV4dC1wYXJ0Jzogc3RyaW5nO1xuICAgIE1KTUxDb250ZW50OiBzdHJpbmc7XG4gIH1cblxuICBleHBvcnQgaW50ZXJmYWNlIENhbXBhaWduRHJhZnRTY2hlZHVsZSB7XG4gICAgRGF0ZTogc3RyaW5nO1xuICAgIFN0YXR1czogc3RyaW5nO1xuICB9XG5cbiAgLy8gUkVRVUVTVCBQQVJUXG4gIGV4cG9ydCB0eXBlIFBvc3RDYW1wYWlnbkRyYWZ0Qm9keTxBWFRlc3RpbmcgPSBDb21tb24uVW5rbm93blJlYz4gPSB7XG4gICAgTG9jYWxlOiBzdHJpbmc7XG4gICAgU3ViamVjdDogc3RyaW5nO1xuXG4gICAgQVhGcmFjdGlvbj86IG51bWJlcjtcbiAgICBBWEZyYWN0aW9uTmFtZT86IHN0cmluZztcbiAgICBBWFRlc3Rpbmc/OiBBWFRlc3Rpbmc7XG4gICAgQ3VycmVudD86IG51bWJlcjtcbiAgICBFZGl0TW9kZT86IEVkaXRNb2RlO1xuICAgIElzU3RhcnJlZD86IGJvb2xlYW47XG4gICAgSXNUZXh0UGFydEluY2x1ZGVkPzogYm9vbGVhbjtcbiAgICBSZXBseUVtYWlsPzogc3RyaW5nO1xuICAgIFNlbmRlck5hbWU/OiBzdHJpbmc7XG4gICAgVGVtcGxhdGVJRD86IG51bWJlcjtcbiAgICBUaXRsZT86IHN0cmluZztcbiAgICBDb250YWN0c0xpc3RJRD86IG51bWJlcjtcbiAgICBDb250YWN0c0xpc3RBbHQ/OiBzdHJpbmc7XG4gICAgU2VnbWVudGF0aW9uSUQ/OiBudW1iZXI7XG4gICAgU2VnbWVudGF0aW9uQWx0Pzogc3RyaW5nO1xuICAgIFNlbmRlcj86IHN0cmluZztcbiAgICBTZW5kZXJFbWFpbD86IHN0cmluZztcbiAgfVxuXG4gIGV4cG9ydCB0eXBlIFB1dENhbXBhaWduRHJhZnRCb2R5PEFYVGVzdGluZyA9IENvbW1vbi5Vbmtub3duUmVjPiA9XG4gICAgT21pdDxQYXJ0aWFsPFBvc3RDYW1wYWlnbkRyYWZ0Qm9keTxBWFRlc3Rpbmc+PiwgJ0NvbnRhY3RzTGlzdEFsdCc+ICZcbiAge1xuICAgIFN0YXR1cz86IENhbXBhaWduRHJhZnRTdGF0dXNcbiAgfVxuXG4gIGV4cG9ydCB0eXBlIEdldENhbXBhaWduRHJhZnRRdWVyeVBhcmFtcyA9IFBhcnRpYWw8Q29tbW9uLlBhZ2luYXRpb24+ICYge1xuICAgIEFYVGVzdGluZz86IG51bWJlcjtcbiAgICBDYW1wYWlnbj86IG51bWJlcjtcbiAgICBDb250YWN0c0xpc3Q/OiBudW1iZXI7XG4gICAgRGVsaXZlcmVkQXQ/OiBzdHJpbmc7XG4gICAgRWRpdE1vZGU/OiBFZGl0TW9kZTtcbiAgICBJc0FyY2hpdmVkPzogYm9vbGVhbjtcbiAgICBJc0NhbXBhaWduPzogYm9vbGVhbjtcbiAgICBJc0RlbGV0ZWQ/OiBib29sZWFuO1xuICAgIElzSGFuZGxlZD86IGJvb2xlYW47XG4gICAgSXNTdGFycmVkPzogYm9vbGVhbjtcbiAgICBNb2RpZmllZD86IGJvb2xlYW47XG4gICAgTmV3c0xldHRlclRlbXBsYXRlPzogbnVtYmVyO1xuICAgIFN0YXR1cz86IENhbXBhaWduRHJhZnRTdGF0dXM7XG4gICAgU3ViamVjdD86IHN0cmluZztcbiAgICBUZW1wbGF0ZT86IG51bWJlcjtcbiAgfVxuXG4gIGV4cG9ydCB0eXBlIFBvc3RDYW1wYWlnbkRyYWZ0RGV0YWlsQ29udGVudEJvZHk8SGVhZGVycyA9IENvbW1vbi5Vbmtub3duUmVjPiA9XG4gICAgUGFydGlhbDxDYW1wYWlnbkRyYWZ0RGV0YWlsQ29udGVudDxIZWFkZXJzPj5cblxuICBleHBvcnQgdHlwZSBQb3N0Q2FtcGFpZ25EcmFmdFNjaGVkdWxlQm9keSA9IHtcbiAgICBEYXRlOiBzdHJpbmc7XG4gIH1cblxuICBleHBvcnQgdHlwZSBQdXRDYW1wYWlnbkRyYWZ0U2NoZWR1bGVCb2R5ID0gUGFydGlhbDxQb3N0Q2FtcGFpZ25EcmFmdFNjaGVkdWxlQm9keT5cblxuICBleHBvcnQgdHlwZSBQb3N0Q2FtcGFpZ25EcmFmdFRlc3RCb2R5ID0ge1xuICAgIFJlY2lwaWVudHM6IFJlY2lwaWVudFtdXG4gIH1cblxuICAvLyBSRVNQT05TRSBQQVJUXG4gIHR5cGUgQ2FtcGFpZ25EcmFmdFJlc3BvbnNlID0gQ29tbW9uLlJlc3BvbnNlPENhbXBhaWduRHJhZnRbXT47XG4gIHR5cGUgQ2FtcGFpZ25EcmFmdFNjaGVkdWxlUmVzcG9uc2UgPSBDb21tb24uUmVzcG9uc2U8Q2FtcGFpZ25EcmFmdFNjaGVkdWxlW10+O1xuICB0eXBlIENhbXBhaWduRHJhZnREZXRhaWxDb250ZW50UmVzcG9uc2U8SGVhZGVycyA9IENvbW1vbi5Vbmtub3duUmVjPiA9XG4gICAgQ29tbW9uLlJlc3BvbnNlPEFycmF5PENhbXBhaWduRHJhZnREZXRhaWxDb250ZW50PEhlYWRlcnM+Pj47XG4gIHR5cGUgQ2FtcGFpZ25EcmFmdFN0YXR1c1Jlc3BvbnNlID1cbiAgICBDb21tb24uUmVzcG9uc2U8QXJyYXk8eyBTdGF0dXM6IENhbXBhaWduRHJhZnRTZW5kaW5nU3RhdHVzIH0+PjtcblxuICBleHBvcnQgdHlwZSBQb3N0Q2FtcGFpZ25EcmFmdFJlc3BvbnNlID0gQ2FtcGFpZ25EcmFmdFJlc3BvbnNlXG4gIGV4cG9ydCB0eXBlIFB1dENhbXBhaWduRHJhZnRSZXNwb25zZSA9IENhbXBhaWduRHJhZnRSZXNwb25zZVxuICBleHBvcnQgdHlwZSBHZXRDYW1wYWlnbkRyYWZ0UmVzcG9uc2UgPSBDYW1wYWlnbkRyYWZ0UmVzcG9uc2VcblxuICBleHBvcnQgdHlwZSBQb3N0Q2FtcGFpZ25EcmFmdFNjaGVkdWxlUmVzcG9uc2UgPSBDYW1wYWlnbkRyYWZ0U2NoZWR1bGVSZXNwb25zZVxuICBleHBvcnQgdHlwZSBQdXRDYW1wYWlnbkRyYWZ0U2NoZWR1bGVSZXNwb25zZSA9IENhbXBhaWduRHJhZnRTY2hlZHVsZVJlc3BvbnNlXG4gIGV4cG9ydCB0eXBlIEdldENhbXBhaWduRHJhZnRTY2hlZHVsZVJlc3BvbnNlID0gQ2FtcGFpZ25EcmFmdFNjaGVkdWxlUmVzcG9uc2VcblxuICBleHBvcnQgdHlwZSBQb3N0Q2FtcGFpZ25EcmFmdERldGFpbENvbnRlbnRSZXNwb25zZTxIZWFkZXJzID0gQ29tbW9uLlVua25vd25SZWM+ID1cbiAgICBDYW1wYWlnbkRyYWZ0RGV0YWlsQ29udGVudFJlc3BvbnNlPEhlYWRlcnM+XG4gIGV4cG9ydCB0eXBlIEdldENhbXBhaWduRHJhZnREZXRhaWxDb250ZW50UmVzcG9uc2U8SGVhZGVycyA9IENvbW1vbi5Vbmtub3duUmVjPiA9XG4gICAgQ2FtcGFpZ25EcmFmdERldGFpbENvbnRlbnRSZXNwb25zZTxIZWFkZXJzPlxuXG4gIGV4cG9ydCB0eXBlIFBvc3RDYW1wYWlnbkRyYWZ0U2VuZCA9IENhbXBhaWduRHJhZnRTdGF0dXNSZXNwb25zZVxuICBleHBvcnQgdHlwZSBQb3N0Q2FtcGFpZ25EcmFmdFRlc3QgPSBDYW1wYWlnbkRyYWZ0U3RhdHVzUmVzcG9uc2VcbiAgZXhwb3J0IHR5cGUgR2V0Q2FtcGFpZ25EcmFmdFN0YXR1cyA9IENhbXBhaWduRHJhZnRTdGF0dXNSZXNwb25zZVxufVxuXG5leHBvcnQgbmFtZXNwYWNlIFNlbnRDYW1wYWlnbiB7XG4gIGV4cG9ydCBlbnVtIENhbXBhaWduVHlwZSB7XG4gICAgVHJhbnNhY3Rpb25hbCA9IDEsXG4gICAgTWFya2V0aW5nID0gMixcbiAgICBVbmtub3duID0gMyxcbiAgfVxuXG4gIGV4cG9ydCBpbnRlcmZhY2UgQ2FtcGFpZ24ge1xuICAgIElEOiBudW1iZXI7XG4gICAgSXNEZWxldGVkOiBib29sZWFuO1xuICAgIElzU3RhcnJlZDogYm9vbGVhbjtcbiAgICBDYW1wYWlnblR5cGU6IENhbXBhaWduVHlwZTtcbiAgICBDcmVhdGVkQXQ6IHN0cmluZztcbiAgICBDdXN0b21WYWx1ZTogc3RyaW5nO1xuICAgIEZpcnN0TWVzc2FnZUlEOiBudW1iZXI7XG4gICAgRnJvbUVtYWlsOiBzdHJpbmc7XG4gICAgRnJvbUlEOiBudW1iZXI7XG4gICAgRnJvbU5hbWU6IHN0cmluZztcbiAgICBIYXNIdG1sQ291bnQ6IG51bWJlcjtcbiAgICBIYXNUeHRDb3VudDogbnVtYmVyO1xuICAgIExpc3RJRDogbnVtYmVyO1xuICAgIE5ld3NMZXR0ZXJJRDogbnVtYmVyO1xuICAgIFNlZ21lbnRhdGlvbklEOiBudW1iZXI7XG4gICAgU2VuZEVuZEF0OiBzdHJpbmc7XG4gICAgU2VuZFN0YXJ0QXQ6IHN0cmluZztcbiAgICBTcGFtYXNzU2NvcmU6IG51bWJlcjtcbiAgICBTdWJqZWN0OiBzdHJpbmc7XG4gICAgV29ya2Zsb3dJRDogbnVtYmVyO1xuICB9XG5cbiAgLy8gUkVRVUVTVCBQQVJUXG4gIGV4cG9ydCB0eXBlIFB1dENhbXBhaWduQm9keSA9IHtcbiAgICBJc0RlbGV0ZWQ/OiBib29sZWFuO1xuICAgIElzU3RhcnJlZD86IGJvb2xlYW47XG4gIH1cblxuICBleHBvcnQgdHlwZSBHZXRDYW1wYWlnblF1ZXJ5UGFyYW1zID0gUGFydGlhbDxDb21tb24uVGltZXN0YW1wUGVyaW9kPiAmXG4gICAgUGFydGlhbDxDb21tb24uUGFnaW5hdGlvbj4gJlxuICB7XG4gICAgQ2FtcGFpZ25JRD86IG51bWJlcjtcbiAgICBDb250YWN0c0xpc3RJRD86IG51bWJlcjtcbiAgICBDdXN0b21DYW1wYWlnbj86IHN0cmluZztcbiAgICBGcm9tPzogc3RyaW5nO1xuICAgIEZyb21Eb21haW4/OiBzdHJpbmc7XG4gICAgRnJvbUlEPzogbnVtYmVyO1xuICAgIEZyb21UeXBlPzogQ2FtcGFpZ25UeXBlO1xuICAgIElzRGVsZXRlZD86IGJvb2xlYW47XG4gICAgSXNOZXdzbGV0dGVyVG9vbD86IGJvb2xlYW47XG4gICAgSXNTdGFycmVkPzogYm9vbGVhbjtcbiAgICBQZXJpb2Q/OiBDb21tb24uUGVyaW9kO1xuICAgIFdvcmtmbG93SUQ/OiBudW1iZXI7XG4gIH1cblxuICAvLyBSRVNQT05TRSBQQVJUXG4gIHR5cGUgQ2FtcGFpZ25SZXNwb25zZSA9IENvbW1vbi5SZXNwb25zZTxDYW1wYWlnbltdPjtcblxuICBleHBvcnQgdHlwZSBQdXRDYW1wYWlnblJlc3BvbnNlID0gQ2FtcGFpZ25SZXNwb25zZVxuICBleHBvcnQgdHlwZSBHZXRDYW1wYWlnblJlc3BvbnNlID0gQ2FtcGFpZ25SZXNwb25zZVxufVxuIiwiZXhwb3J0IG5hbWVzcGFjZSBDb21tb24ge1xuICBleHBvcnQgdHlwZSBVbmtub3duUmVjID0gUmVjb3JkPHN0cmluZywgdW5rbm93bj5cblxuICBleHBvcnQgaW50ZXJmYWNlIFBhZ2luYXRpb24ge1xuICAgIGNvdW50T25seTogYm9vbGVhbjtcblxuICAgIExpbWl0OiBudW1iZXI7XG4gICAgT2Zmc2V0OiBudW1iZXI7XG4gICAgU29ydDogc3RyaW5nO1xuICB9XG5cbiAgZXhwb3J0IGludGVyZmFjZSBUaW1lc3RhbXBQZXJpb2Qge1xuICAgIEZyb21UUzogc3RyaW5nIHwgbnVtYmVyO1xuICAgIFRvVFM6IHN0cmluZyB8IG51bWJlcjtcbiAgfVxuXG4gIGV4cG9ydCB0eXBlIFJlc3BvbnNlPEVudGl0eT4gPSB7XG4gICAgQ291bnQ6IG51bWJlcjtcbiAgICBUb3RhbDogbnVtYmVyO1xuICAgIERhdGE6IEVudGl0eTtcbiAgfVxuXG4gIGV4cG9ydCBlbnVtIFBlcmlvZCB7XG4gICAgRGF5ID0gJ0RheScsXG4gICAgV2VlayA9ICdXZWVrJyxcbiAgICBNb250aCA9ICdNb250aCcsXG4gICAgWWVhciA9ICdZZWFyJyxcbiAgfVxufVxuIiwiaW1wb3J0IHsgQ29tbW9uIH0gZnJvbSAnLi9Db21tb24nO1xuXG5leHBvcnQgbmFtZXNwYWNlIENvbnRhY3Qge1xuICBleHBvcnQgaW50ZXJmYWNlIENvbnRhY3Qge1xuICAgIElEOiBudW1iZXI7XG4gICAgSXNFeGNsdWRlZEZyb21DYW1wYWlnbnM6IGJvb2xlYW47XG4gICAgTmFtZTogc3RyaW5nO1xuICAgIENyZWF0ZWRBdDogc3RyaW5nO1xuICAgIERlbGl2ZXJlZENvdW50OiBudW1iZXI7XG4gICAgRW1haWw6IHN0cmluZztcbiAgICBFeGNsdXNpb25Gcm9tQ2FtcGFpZ25zVXBkYXRlZEF0OiBzdHJpbmc7XG4gICAgSXNPcHRJblBlbmRpbmc6IGJvb2xlYW47XG4gICAgSXNTcGFtQ29tcGxhaW5pbmc6IGJvb2xlYW47XG4gICAgTGFzdEFjdGl2aXR5QXQ6IHN0cmluZztcbiAgICBMYXN0VXBkYXRlQXQ6IHN0cmluZztcbiAgfVxuXG4gIC8vIFJFUVVFU1QgUEFSVFxuICBleHBvcnQgdHlwZSBQb3N0Q29udGFjdEJvZHkgPSB7XG4gICAgRW1haWw6IHN0cmluZztcbiAgICBJc0V4Y2x1ZGVkRnJvbUNhbXBhaWducz86IGJvb2xlYW47XG4gICAgTmFtZT86IHN0cmluZztcbiAgfVxuXG4gIGV4cG9ydCB0eXBlIFB1dENvbnRhY3RCb2R5ID0gT21pdDxQb3N0Q29udGFjdEJvZHksICdFbWFpbCc+XG5cbiAgZXhwb3J0IHR5cGUgR2V0Q29udGFjdFF1ZXJ5UGFyYW1zID0gUGFydGlhbDxDb21tb24uUGFnaW5hdGlvbj4gJiB7XG4gICAgQ2FtcGFpZ24/OiBudW1iZXI7XG4gICAgQ29udGFjdHNMaXN0PzogbnVtYmVyO1xuICAgIElzRXhjbHVkZWRGcm9tQ2FtcGFpZ25zPzogYm9vbGVhbjtcbiAgfVxuXG4gIC8vIFJFU1BPTlNFIFBBUlRcbiAgdHlwZSBDb250YWN0UmVzcG9uc2UgPSB7XG4gICAgQ291bnQ6IG51bWJlcjtcbiAgICBUb3RhbDogbnVtYmVyO1xuICAgIERhdGE6IENvbnRhY3RbXTtcbiAgfTtcblxuICBleHBvcnQgdHlwZSBQb3N0Q29udGFjdFJlc3BvbnNlID0gQ29udGFjdFJlc3BvbnNlXG4gIGV4cG9ydCB0eXBlIFB1dENvbnRhY3RSZXNwb25zZSA9IENvbnRhY3RSZXNwb25zZVxuICBleHBvcnQgdHlwZSBHZXRDb250YWN0UmVzcG9uc2UgPSBDb250YWN0UmVzcG9uc2Vcbn1cblxuZXhwb3J0IG5hbWVzcGFjZSBDb250YWN0TGlzdCB7XG4gIGV4cG9ydCBpbnRlcmZhY2UgQ29udGFjdExpc3Qge1xuICAgIElEOiBudW1iZXI7XG4gICAgSXNEZWxldGVkOiBib29sZWFuO1xuICAgIE5hbWU6IHN0cmluZztcbiAgICBBZGRyZXNzOiBzdHJpbmc7XG4gICAgQ3JlYXRlZEF0OiBzdHJpbmc7XG4gICAgU3Vic2NyaWJlckNvdW50OiBudW1iZXI7XG4gIH1cblxuICAvLyBSRVFVRVNUIFBBUlRcbiAgZXhwb3J0IHR5cGUgUG9zdENvbnRhY3RMaXN0Qm9keSA9IHtcbiAgICBOYW1lOiBzdHJpbmc7XG4gICAgSXNEZWxldGVkPzogYm9vbGVhbjtcbiAgfVxuXG4gIGV4cG9ydCB0eXBlIFB1dENvbnRhY3RMaXN0Qm9keSA9IFBhcnRpYWw8UG9zdENvbnRhY3RMaXN0Qm9keT5cblxuICBleHBvcnQgdHlwZSBHZXRDb250YWN0TGlzdFF1ZXJ5UGFyYW1zID0gUGFydGlhbDxDb21tb24uUGFnaW5hdGlvbj4gJiB7XG4gICAgQWRkcmVzcz86IHN0cmluZztcbiAgICBFeGNsdWRlSUQ/OiBudW1iZXI7XG4gICAgSXNEZWxldGVkPzogYm9vbGVhbjtcbiAgICBOYW1lPzogc3RyaW5nO1xuICB9XG5cbiAgLy8gUkVTUE9OU0UgUEFSVFxuICB0eXBlIENvbnRhY3RMaXN0UmVzcG9uc2UgPSBDb21tb24uUmVzcG9uc2U8Q29udGFjdExpc3RbXT47XG5cbiAgZXhwb3J0IHR5cGUgUG9zdENvbnRhY3RMaXN0UmVzcG9uc2UgPSBDb250YWN0TGlzdFJlc3BvbnNlXG4gIGV4cG9ydCB0eXBlIFB1dENvbnRhY3RMaXN0UmVzcG9uc2UgPSBDb250YWN0TGlzdFJlc3BvbnNlXG4gIGV4cG9ydCB0eXBlIEdldENvbnRhY3RMaXN0UmVzcG9uc2UgPSBDb250YWN0TGlzdFJlc3BvbnNlXG59XG5cbmV4cG9ydCBuYW1lc3BhY2UgQnVsa0NvbnRhY3RNYW5hZ2VtZW50IHtcbiAgZXhwb3J0IGVudW0gTWFuYWdlQ29udGFjdHNBY3Rpb24ge1xuICAgIEFkZEZvcmNlID0gJ2FkZGZvcmNlJyxcbiAgICBBZGROb0ZvcmNlID0gJ2FkZG5vZm9yY2UnLFxuICAgIFJlbW92ZSA9ICdyZW1vdmUnLFxuICAgIFVuU3ViID0gJ3Vuc3ViJ1xuICB9XG5cbiAgZXhwb3J0IGVudW0gSW1wb3J0TGlzdEFjdGlvbiB7XG4gICAgQWRkRm9yY2UgPSAnYWRkZm9yY2UnLFxuICAgIEFkZE5vRm9yY2UgPSAnYWRkbm9mb3JjZScsXG4gICAgVW5TdWIgPSAndW5zdWInLFxuICAgIER1cGxpY2F0ZU92ZXJyaWRlID0gJ2R1cGxpY2F0ZS1vdmVycmlkZScsXG4gICAgRHVwbGljYXRlTm9PdmVycmlkZSA9ICdkdXBsaWNhdGUtbm8tb3ZlcnJpZGUnXG4gIH1cblxuICBleHBvcnQgZW51bSBJbXBvcnRDU1ZNZXRob2Qge1xuICAgIEFkZEZvcmNlID0gJ2FkZGZvcmNlJyxcbiAgICBBZGROb0ZvcmNlID0gJ2FkZG5vZm9yY2UnLFxuICAgIFJlbW92ZSA9ICdyZW1vdmUnLFxuICAgIFVuU3ViID0gJ3Vuc3ViJyxcbiAgICBFeGNsdWRlTWFya2V0aW5nID0gJ2V4Y2x1ZGVtYXJrZXRpbmcnLFxuICAgIEluY2x1ZGVNYXJrZXRpbmcgPSAnaW5jbHVkZW1hcmtldGluZydcbiAgfVxuXG4gIGV4cG9ydCBlbnVtIENTVkltcG9ydFN0YXR1cyB7XG4gICAgVXBsb2FkID0gJ1VwbG9hZCcsXG4gICAgQ29tcGxldGVkID0gJ0NvbXBsZXRlZCcsXG4gICAgQWJvcnQgPSAnQWJvcnQnLFxuICB9XG5cbiAgZXhwb3J0IGVudW0gSm9iU3RhdHVzIHtcbiAgICBDb21wbGV0ZWQgPSAnQ29tcGxldGVkJyxcbiAgICBJblByb2dyZXNzID0gJ0luIFByb2dyZXNzJyxcbiAgICBFcnJvciA9ICdFcnJvcidcbiAgfVxuXG4gIGV4cG9ydCBpbnRlcmZhY2UgSm9iIHtcbiAgICBKb2JJRDogbnVtYmVyO1xuICB9XG5cbiAgZXhwb3J0IGludGVyZmFjZSBDU1ZJbXBvcnQge1xuICAgIElEOiBudW1iZXI7XG4gICAgRXJyVHJlc2hvbGQ6IG51bWJlcjtcbiAgICBJbXBvcnRPcHRpb25zOiBzdHJpbmc7XG4gICAgTWV0aG9kOiBJbXBvcnRDU1ZNZXRob2Q7XG4gICAgQWxpdmVBdDogc3RyaW5nO1xuICAgIENvbnRhY3RzTGlzdElEOiBudW1iZXI7XG4gICAgQ291bnQ6IG51bWJlcjtcbiAgICBDdXJyZW50OiBudW1iZXI7XG4gICAgRGF0YUlEOiBudW1iZXI7XG4gICAgRXJyY291bnQ6IG51bWJlcjtcbiAgICBKb2JFbmQ6IHN0cmluZztcbiAgICBKb2JTdGFydDogc3RyaW5nO1xuICAgIFJlcXVlc3RBdDogc3RyaW5nO1xuICAgIFN0YXR1czogQ1NWSW1wb3J0U3RhdHVzO1xuICB9XG5cbiAgZXhwb3J0IGludGVyZmFjZSBDb250YWN0TGlzdCB7XG4gICAgTGlzdElEOiBudW1iZXI7XG4gICAgQWN0aW9uOiBNYW5hZ2VDb250YWN0c0FjdGlvbjtcbiAgfVxuXG4gIGV4cG9ydCBpbnRlcmZhY2UgQ29udGFjdE1hbmFnZU1hbnlDb250YWN0cyB7XG4gICAgQ29udGFjdHNMaXN0czogQ29udGFjdExpc3RbXTtcbiAgICBDb3VudDogbnVtYmVyO1xuICAgIEVycm9yOiBzdHJpbmc7XG4gICAgRXJyb3JGaWxlOiBzdHJpbmc7XG4gICAgSm9iRW5kOiBzdHJpbmc7XG4gICAgSm9iU3RhcnQ6IHN0cmluZztcbiAgICBTdGF0dXM6IEpvYlN0YXR1cztcbiAgfVxuXG4gIGV4cG9ydCBpbnRlcmZhY2UgQ29udGFjdHNMaXN0SW1wb3J0TGlzdCB7XG4gICAgSm9iSUQ6IG51bWJlcjtcbiAgICBBY3Rpb246IEltcG9ydExpc3RBY3Rpb247XG4gICAgTGlzdElEOiBudW1iZXI7XG4gIH1cblxuICAvLyBSRVFVRVNUIFBBUlRcbiAgZXhwb3J0IHR5cGUgQ29udGFjdEJvZHk8UHJvcGVydGllcyA9IENvbW1vbi5Vbmtub3duUmVjPiA9IHtcbiAgICBFbWFpbDogc3RyaW5nO1xuICAgIE5hbWU/OiBzdHJpbmc7XG4gICAgSXNFeGNsdWRlZEZyb21DYW1wYWlnbnM/OiBib29sZWFuO1xuICAgIFByb3BlcnRpZXM/OiBQcm9wZXJ0aWVzO1xuICB9XG5cbiAgZXhwb3J0IHR5cGUgUG9zdENvbnRhY3RNYW5hZ2VNYW55Q29udGFjdHNCb2R5PFByb3BlcnRpZXMgPSBDb21tb24uVW5rbm93blJlYz4gPSB7XG4gICAgQ29udGFjdHM6IEFycmF5PENvbnRhY3RCb2R5PFByb3BlcnRpZXM+PjtcbiAgICBDb250YWN0c0xpc3RzPzogQ29udGFjdExpc3RbXTtcbiAgfVxuXG4gIGV4cG9ydCB0eXBlIFBvc3RDb250YWN0c0xpc3RJbXBvcnRMaXN0Qm9keSA9IHtcbiAgICBBY3Rpb246IEltcG9ydExpc3RBY3Rpb247XG4gICAgTGlzdElEOiBudW1iZXI7XG4gIH1cblxuICBleHBvcnQgdHlwZSBQb3N0Q29udGFjdHNMaXN0TWFuYWdlTWFueUNvbnRhY3RzQm9keTxQcm9wZXJ0aWVzID0gQ29tbW9uLlVua25vd25SZWM+ID0ge1xuICAgIEFjdGlvbjogTWFuYWdlQ29udGFjdHNBY3Rpb247XG4gICAgQ29udGFjdHM6IEFycmF5PENvbnRhY3RCb2R5PFByb3BlcnRpZXM+PjtcbiAgfVxuXG4gIGV4cG9ydCB0eXBlIFBvc3RDU1ZJbXBvcnRCb2R5ID0ge1xuICAgIENvbnRhY3RzTGlzdElEOiBudW1iZXI7XG4gICAgRGF0YUlEOiBudW1iZXI7XG4gICAgRXJyVHJlc2hvbGQ/OiBudW1iZXI7XG4gICAgSW1wb3J0T3B0aW9ucz86IHN0cmluZztcbiAgICBNZXRob2Q/OiBJbXBvcnRDU1ZNZXRob2Q7XG4gIH1cblxuICBleHBvcnQgdHlwZSBQdXRDU1ZJbXBvcnRCb2R5ID0gUGFydGlhbDxQb3N0Q1NWSW1wb3J0Qm9keT4gJiB7XG4gICAgU3RhdHVzPzogQ1NWSW1wb3J0U3RhdHVzO1xuICB9XG5cbiAgZXhwb3J0IHR5cGUgR2V0Q1NWSW1wb3J0UXVlcnlQYXJhbXMgPSBQYXJ0aWFsPENvbW1vbi5QYWdpbmF0aW9uPlxuXG4gIC8vIFJFU1BPTlNFIFBBUlRcbiAgdHlwZSBKb2JSZXNwb25zZSA9IENvbW1vbi5SZXNwb25zZTxKb2JbXT47XG4gIHR5cGUgQ1NWSW1wb3J0UmVzcG9uc2UgPSBDb21tb24uUmVzcG9uc2U8Q1NWSW1wb3J0W10+O1xuICB0eXBlIENvbnRhY3RNYW5hZ2VNYW55Q29udGFjdHNSZXNwb25zZSA9IENvbW1vbi5SZXNwb25zZTxDb250YWN0TWFuYWdlTWFueUNvbnRhY3RzW10+O1xuXG4gIGV4cG9ydCB0eXBlIFBvc3RDb250YWN0TWFuYWdlTWFueUNvbnRhY3RzUmVzcG9uc2UgPSBKb2JSZXNwb25zZVxuICBleHBvcnQgdHlwZSBHZXRDb250YWN0TWFuYWdlTWFueUNvbnRhY3RzUmVzcG9uc2UgPSBDb250YWN0TWFuYWdlTWFueUNvbnRhY3RzUmVzcG9uc2VcblxuICBleHBvcnQgdHlwZSBQb3N0Q29udGFjdHNMaXN0SW1wb3J0TGlzdFJlc3BvbnNlID0gSm9iUmVzcG9uc2VcbiAgZXhwb3J0IHR5cGUgR2V0Q29udGFjdHNMaXN0SW1wb3J0TGlzdFJlc3BvbnNlID0gQ29tbW9uLlJlc3BvbnNlPENvbnRhY3RzTGlzdEltcG9ydExpc3RbXT47XG5cbiAgZXhwb3J0IHR5cGUgUG9zdENvbnRhY3RzTGlzdE1hbmFnZU1hbnlDb250YWN0c1Jlc3BvbnNlID0gSm9iUmVzcG9uc2VcbiAgZXhwb3J0IHR5cGUgR2V0Q29udGFjdHNMaXN0TWFuYWdlTWFueUNvbnRhY3RzUmVzcG9uc2UgPSBDb250YWN0TWFuYWdlTWFueUNvbnRhY3RzUmVzcG9uc2U7XG5cbiAgZXhwb3J0IHR5cGUgUG9zdENTVkltcG9ydFJlc3BvbnNlID0gQ1NWSW1wb3J0UmVzcG9uc2VcbiAgZXhwb3J0IHR5cGUgUHV0Q1NWSW1wb3J0UmVzcG9uc2UgPSBDU1ZJbXBvcnRSZXNwb25zZVxuICBleHBvcnQgdHlwZSBHZXRDU1ZJbXBvcnRSZXNwb25zZSA9IENTVkltcG9ydFJlc3BvbnNlXG59XG5cbmV4cG9ydCBuYW1lc3BhY2UgQ29udGFjdFByb3BlcnRpZXMge1xuICBleHBvcnQgZW51bSBEYXRhVHlwZSB7XG4gICAgU3RyID0gJ3N0cicsXG4gICAgSW50ID0gJ2ludCcsXG4gICAgRmxvYXQgPSAnZmxvYXQnLFxuICAgIEJvb2wgPSAnYm9vbCcsXG4gICAgRGF0ZVRpbWUgPSAnZGF0ZXRpbWUnXG4gIH1cblxuICBleHBvcnQgZW51bSBOYW1lU3BhY2Uge1xuICAgIFN0YXRpYyA9ICdzdGF0aWMnLFxuICAgIEhpc3RvcmljID0gJ2hpc3RvcmljJ1xuICB9XG5cbiAgZXhwb3J0IGludGVyZmFjZSBDb250YWN0UHJvcGVydHkge1xuICAgIE5hbWU6IHN0cmluZztcbiAgICBWYWx1ZTogc3RyaW5nO1xuICB9XG5cbiAgZXhwb3J0IGludGVyZmFjZSBDb250YWN0RGF0YSB7XG4gICAgSUQ6IG51bWJlcjtcbiAgICBDb250YWN0SUQ6IG51bWJlcjtcbiAgICBEYXRhOiBDb250YWN0UHJvcGVydHlbXTtcbiAgfVxuXG4gIGV4cG9ydCBpbnRlcmZhY2UgQ29udGFjdE1ldGFEYXRhIHtcbiAgICBJRDogbnVtYmVyO1xuICAgIERhdGF0eXBlOiBEYXRhVHlwZTtcbiAgICBOYW1lOiBzdHJpbmc7XG4gICAgTmFtZVNwYWNlOiBOYW1lU3BhY2U7XG4gIH1cblxuICAvLyBSRVFVRVNUIFBBUlRcbiAgZXhwb3J0IHR5cGUgUG9zdENvbnRhY3RNZXRhRGF0YUJvZHkgPSB7XG4gICAgTmFtZTogc3RyaW5nO1xuICAgIERhdGF0eXBlPzogRGF0YVR5cGU7XG4gICAgTmFtZVNwYWNlPzogTmFtZVNwYWNlO1xuICB9XG5cbiAgZXhwb3J0IHR5cGUgUHV0Q29udGFjdE1ldGFEYXRhQm9keSA9IHtcbiAgICBOYW1lPzogc3RyaW5nO1xuICAgIERhdGF0eXBlPzogRGF0YVR5cGU7XG4gIH1cblxuICBleHBvcnQgdHlwZSBHZXRDb250YWN0TWV0YURhdGFRdWVyeVBhcmFtcyA9IFBhcnRpYWw8Q29tbW9uLlBhZ2luYXRpb24+ICYge1xuICAgIERhdGFUeXBlPzogRGF0YVR5cGVcbiAgICBOYW1lc3BhY2U/OiBOYW1lU3BhY2U7XG4gIH1cblxuICBleHBvcnQgdHlwZSBQdXRDb250YWN0RGF0YUJvZHkgPSB7XG4gICAgRGF0YTogQ29udGFjdFByb3BlcnR5W107XG4gIH1cblxuICBleHBvcnQgdHlwZSBHZXRDb250YWN0RGF0YVF1ZXJ5UGFyYW1zID0gUGFydGlhbDxDb21tb24uUGFnaW5hdGlvbj4gJiB7XG4gICAgQ2FtcGFpZ24/OiBudW1iZXI7XG4gICAgQ29udGFjdEVtYWlsPzogc3RyaW5nO1xuICAgIENvbnRhY3RzTGlzdD86IG51bWJlcjtcbiAgICBGaWVsZHM/OiBzdHJpbmc7XG4gICAgTGFzdEFjdGl2aXR5QXQ/OiBzdHJpbmc7XG4gIH1cblxuICAvLyBSRVNQT05TRSBQQVJUXG4gIHR5cGUgQ29udGFjdERhdGFSZXNwb25zZSA9IENvbW1vbi5SZXNwb25zZTxDb250YWN0RGF0YVtdPjtcbiAgdHlwZSBDb250YWN0TWV0YURhdGFSZXNwb25zZSA9IENvbW1vbi5SZXNwb25zZTxDb250YWN0TWV0YURhdGFbXT47XG5cbiAgZXhwb3J0IHR5cGUgUG9zdENvbnRhY3RNZXRhRGF0YVJlc3BvbnNlID0gQ29udGFjdE1ldGFEYXRhUmVzcG9uc2U7XG4gIGV4cG9ydCB0eXBlIFB1dENvbnRhY3RNZXRhRGF0YVJlc3BvbnNlID0gQ29udGFjdE1ldGFEYXRhUmVzcG9uc2U7XG4gIGV4cG9ydCB0eXBlIEdldENvbnRhY3RNZXRhRGF0YVJlc3BvbnNlID0gQ29udGFjdE1ldGFEYXRhUmVzcG9uc2U7XG5cbiAgZXhwb3J0IHR5cGUgUHV0Q29udGFjdERhdGFSZXNwb25zZSA9IENvbnRhY3REYXRhUmVzcG9uc2U7XG4gIGV4cG9ydCB0eXBlIEdldENvbnRhY3REYXRhUmVzcG9uc2UgPSBDb250YWN0RGF0YVJlc3BvbnNlO1xufVxuXG5leHBvcnQgbmFtZXNwYWNlIENvbnRhY3RTdWJzY3JpcHRpb24ge1xuICBleHBvcnQgaW50ZXJmYWNlIE1hbmFnZUNvbnRhY3RzPFByb3BlcnRpZXMgPSBDb21tb24uVW5rbm93blJlYz4ge1xuICAgIEVtYWlsOiBzdHJpbmc7XG4gICAgQWN0aW9uOiBCdWxrQ29udGFjdE1hbmFnZW1lbnQuTWFuYWdlQ29udGFjdHNBY3Rpb247XG4gICAgTmFtZTogc3RyaW5nO1xuICAgIFByb3BlcnRpZXM6IFByb3BlcnRpZXM7XG4gIH1cblxuICBleHBvcnQgaW50ZXJmYWNlIExpc3RSZWNpcGllbnQge1xuICAgIElEOiBudW1iZXI7XG4gICAgSXNVbnN1YnNjcmliZWQ6IGJvb2xlYW47XG4gICAgQ29udGFjdElEOiBudW1iZXI7XG4gICAgTGlzdElEOiBudW1iZXI7XG4gICAgTGlzdE5hbWU6IHN0cmluZztcbiAgICBTdWJzY3JpYmVkQXQ6IHN0cmluZztcbiAgICBVbnN1YnNjcmliZWRBdDogc3RyaW5nO1xuICB9XG5cbiAgZXhwb3J0IGludGVyZmFjZSBDb250YWN0c0xpc3Qge1xuICAgIExpc3RJRDogbnVtYmVyO1xuICAgIElzVW5zdWI6IGJvb2xlYW47XG4gICAgU3Vic2NyaWJlZEF0OiBzdHJpbmc7XG4gIH1cblxuICBleHBvcnQgaW50ZXJmYWNlIENvbnRhY3RzTGlzdFNpZ251cCB7XG4gICAgSUQ6IG51bWJlcjtcbiAgICBDb25maXJtQXQ6IG51bWJlcjtcbiAgICBDb25maXJtSXA6IHN0cmluZztcbiAgICBDb250YWN0SUQ6IG51bWJlcjtcbiAgICBFbWFpbDogc3RyaW5nO1xuICAgIExpc3RJRDogbnVtYmVyO1xuICAgIFNpZ251cEF0OiBudW1iZXI7XG4gICAgU2lnbnVwSXA6IHN0cmluZztcbiAgICBTaWdudXBLZXk6IHN0cmluZztcbiAgICBTb3VyY2VJZDogbnVtYmVyO1xuICAgIFNvdXJjZTogc3RyaW5nO1xuICB9XG5cbiAgLy8gUkVRVUVTVCBQQVJUXG4gIGV4cG9ydCB0eXBlIFBvc3RDb250YWN0TWFuYWdlQ29udGFjdHNMaXN0c0JvZHkgPSB7XG4gICAgQ29udGFjdHNMaXN0czogQnVsa0NvbnRhY3RNYW5hZ2VtZW50LkNvbnRhY3RMaXN0W107XG4gIH1cblxuICBleHBvcnQgdHlwZSBQb3N0Q29udGFjdHNMaXN0TWFuYWdlQ29udGFjdEJvZHk8UHJvcGVydGllcyA9IENvbW1vbi5Vbmtub3duUmVjPiA9IHtcbiAgICBFbWFpbDogc3RyaW5nO1xuICAgIEFjdGlvbjogQnVsa0NvbnRhY3RNYW5hZ2VtZW50Lk1hbmFnZUNvbnRhY3RzQWN0aW9uO1xuICAgIE5hbWU/OiBzdHJpbmc7XG4gICAgUHJvcGVydGllcz86IFByb3BlcnRpZXM7XG4gIH1cblxuICBleHBvcnQgdHlwZSBQb3N0TGlzdFJlY2lwaWVudEJvZHkgPSB7XG4gICAgSXNVbnN1YnNjcmliZWQ/OiBib29sZWFuO1xuICAgIENvbnRhY3RJRDogbnVtYmVyO1xuICAgIENvbnRhY3RBbHQ/OiBzdHJpbmc7XG4gICAgTGlzdElEOiBudW1iZXI7XG4gICAgTGlzdEFsdD86IHN0cmluZztcbiAgfVxuXG4gIGV4cG9ydCB0eXBlIFB1dExpc3RSZWNpcGllbnRCb2R5ID0ge1xuICAgIElzVW5zdWJzY3JpYmVkPzogYm9vbGVhbjtcbiAgfVxuXG4gIGV4cG9ydCB0eXBlIEdldExpc3RSZWNpcGllbnRRdWVyeVBhcmFtcyA9IFBhcnRpYWw8Q29tbW9uLlBhZ2luYXRpb24+ICYge1xuICAgIEJsb2NrZWQ/OiBib29sZWFuO1xuICAgIENvbnRhY3Q/OiBudW1iZXI7XG4gICAgQ29udGFjdEVtYWlsPzogc3RyaW5nO1xuICAgIENvbnRhY3RzTGlzdD86IG51bWJlcjtcbiAgICBJZ25vcmVEZWxldGVkPzogYm9vbGVhbjtcbiAgICBJc0V4Y2x1ZGVkRnJvbUNhbXBhaWducz86IGJvb2xlYW47XG4gICAgTGFzdEFjdGl2aXR5QXQ/OiBzdHJpbmc7XG4gICAgTGlzdE5hbWU/OiBzdHJpbmc7XG4gICAgT3BlbmVkPzogYm9vbGVhbjtcbiAgICBVbnN1Yj86IGJvb2xlYW47XG4gIH1cblxuICBleHBvcnQgdHlwZSBHZXRDb250YWN0c0xpc3RTaWdudXBRdWVyeVBhcmFtcyA9IFBhcnRpYWw8Q29tbW9uLlBhZ2luYXRpb24+ICYge1xuICAgIENvbnRhY3Q/OiBudW1iZXI7XG4gICAgQ29udGFjdHNMaXN0PzogbnVtYmVyO1xuICAgIERvbWFpbj86IHN0cmluZztcbiAgICBFbWFpbD86IHN0cmluZztcbiAgICBMb2NhbFBhcnQ/OiBzdHJpbmc7XG4gICAgTWF4Q29uZmlybUF0PzogbnVtYmVyO1xuICAgIE1pbkNvbmZpcm1BdD86IG51bWJlcjtcbiAgICBNYXhTaWdudXBBdD86IG51bWJlcjtcbiAgICBNaW5TaWdudXBBdD86IG51bWJlcjtcbiAgICBTaWdudXBJcD86IHN0cmluZztcbiAgICBTb3VyY2U/OiBzdHJpbmc7XG4gICAgU291cmNlSUQ/OiBudW1iZXI7XG4gIH1cblxuICAvLyBSRVNQT05TRSBQQVJUXG4gIHR5cGUgTGlzdFJlY2lwaWVudFJlc3BvbnNlID0gQ29tbW9uLlJlc3BvbnNlPExpc3RSZWNpcGllbnRbXT47XG5cbiAgZXhwb3J0IHR5cGUgUG9zdENvbnRhY3RNYW5hZ2VDb250YWN0c0xpc3RzUmVzcG9uc2UgPSBDb21tb24uUmVzcG9uc2U8XG4gICAgQXJyYXk8eyBDb250YWN0c0xpc3RzOiBCdWxrQ29udGFjdE1hbmFnZW1lbnQuQ29udGFjdExpc3RbXSB9PlxuICAgID47XG5cbiAgZXhwb3J0IHR5cGUgUG9zdENvbnRhY3RzTGlzdE1hbmFnZUNvbnRhY3RSZXNwb25zZTxQcm9wZXJ0aWVzID0gQ29tbW9uLlVua25vd25SZWM+ID1cbiAgICAgIENvbW1vbi5SZXNwb25zZTxBcnJheTxNYW5hZ2VDb250YWN0czxQcm9wZXJ0aWVzPj4+O1xuXG4gIGV4cG9ydCB0eXBlIFBvc3RMaXN0UmVjaXBpZW50UmVzcG9uc2UgPSBMaXN0UmVjaXBpZW50UmVzcG9uc2VcbiAgZXhwb3J0IHR5cGUgUHV0TGlzdFJlY2lwaWVudFJlc3BvbnNlID0gTGlzdFJlY2lwaWVudFJlc3BvbnNlXG4gIGV4cG9ydCB0eXBlIEdldExpc3RSZWNpcGllbnRSZXNwb25zZSA9IExpc3RSZWNpcGllbnRSZXNwb25zZVxuXG4gIGV4cG9ydCB0eXBlIEdldENvbnRhY3RHZXRDb250YWN0c0xpc3RzUmVzcG9uc2UgPSBDb21tb24uUmVzcG9uc2U8Q29udGFjdHNMaXN0W10+XG5cbiAgZXhwb3J0IHR5cGUgR2V0Q29udGFjdHNMaXN0U2lnbnVwUmVzcG9uc2UgPSBDb21tb24uUmVzcG9uc2U8Q29udGFjdHNMaXN0U2lnbnVwW10+XG59XG5cbmV4cG9ydCBuYW1lc3BhY2UgQ29udGFjdFZlcmlmaWNhdGlvbiB7XG4gIGV4cG9ydCBpbnRlcmZhY2UgVmVyaWZpY2F0aW9uU3VtbWFyeTxSZXN1bHQgPSBDb21tb24uVW5rbm93blJlYywgUmlzayA9IENvbW1vbi5Vbmtub3duUmVjPiB7XG4gICAgcmVzdWx0OiBSZXN1bHQ7XG4gICAgcmlzazogUmlzaztcbiAgfVxuXG4gIGV4cG9ydCBpbnRlcmZhY2UgQ29udGFjdHNMaXN0VmVyaWZpY2F0aW9uPFJlc3VsdCA9IENvbW1vbi5Vbmtub3duUmVjLCBSaXNrID0gQ29tbW9uLlVua25vd25SZWM+IHtcbiAgICBBa2lkOiBudW1iZXI7XG4gICAgQ29udGFjdExpc3RJRDogbnVtYmVyO1xuICAgIENvdW50OiBudW1iZXI7XG4gICAgRXJyb3I6IHN0cmluZztcbiAgICBJRDogbnVtYmVyO1xuICAgIEpvYkVuZDogc3RyaW5nO1xuICAgIEpvYlN0YXJ0OiBzdHJpbmc7XG4gICAgTWV0aG9kOiBzdHJpbmc7XG4gICAgUmVzcG9uc2VVUkw6IHN0cmluZztcbiAgICBTdGF0dXM6IHN0cmluZztcbiAgICBTdW1tYXJ5OiBWZXJpZmljYXRpb25TdW1tYXJ5PFJlc3VsdCwgUmlzaz5cbiAgfVxuXG4gIC8vIFJFUVVFU1QgUEFSVFxuXG4gIC8vIFJFU1BPTlNFIFBBUlRcbiAgZXhwb3J0IHR5cGUgR2V0Q29udGFjdHNMaXN0VmVyaWZ5UmVzcG9uc2U8UmVzdWx0ID0gQ29tbW9uLlVua25vd25SZWMsIFJpc2sgPSBDb21tb24uVW5rbm93blJlYz4gPVxuICAgIENvbW1vbi5SZXNwb25zZTxBcnJheTxDb250YWN0c0xpc3RWZXJpZmljYXRpb248UmVzdWx0LCBSaXNrPj4+O1xufVxuIiwiaW1wb3J0IHsgQ29tbW9uIH0gZnJvbSAnLi9Db21tb24nO1xuXG5leHBvcnQgbmFtZXNwYWNlIE1lc3NhZ2Uge1xuICBleHBvcnQgZW51bSBNZXNzYWdlU3RhdGUge1xuICAgIFVzZXJVbmtub3duID0gMSxcbiAgICBNYWlsYm94SW5hY3RpdmUgPSAyLFxuICAgIFF1b3RhRXhjZWVkZWQgPSAzLFxuICAgIEludmFsaWREb21haW4gPSA0LFxuICAgIE5vTWFpbEhvc3QgPSA1LFxuICAgIFJlbGF5T3JBY2Nlc3NEZW5pZWQgPSA2LFxuICAgIFNlbmRlckJsb2NrZWQgPSA3LFxuICAgIENvbnRlbnRCbG9ja2VkID0gOCxcbiAgICBQb2xpY3lJc3N1ZSA9IDksXG4gICAgU3lzdGVtSXNzdWUgPSAxMCxcbiAgICBQcm90b2NvbElzc3VlID0gMTEsXG4gICAgQ29ubmVjdGlvbklzc3VlID0gMTIsXG4gICAgR3JleUxpc3RlZCA9IDEzLFxuICAgIFByZUJsb2NrZWQgPSAxNCxcbiAgICBEdXBsaWNhdGVJbkNhbXBhaWduID0gMTUsXG4gICAgU3BhbVByZUJsb2NrZWQgPSAxNixcbiAgICBCYWRPckVtcHR5VGVtcGxhdGUgPSAxNyxcbiAgICBFcnJvckluVGVtcGxhdGVMYW5ndWFnZSA9IDE4LFxuICAgIFR5cG9GaXggPSAxOSxcbiAgICBCbGFja0xpc3RlZCA9IDIwLFxuICAgIFNwYW1SZXBvcnRlciA9IDIxXG4gIH1cblxuICBleHBvcnQgZW51bSBGcm9tVHlwZSB7XG4gICAgVHJhbnNhY3Rpb25hbCA9IDEsXG4gICAgTWFya2V0aW5nID0gMixcbiAgICBVbmtub3duID0gMyxcbiAgfVxuXG4gIGV4cG9ydCBlbnVtIE1lc3NhZ2VTdGF0dXMge1xuICAgIFByb2Nlc3NlZCA9IDAsXG4gICAgUXVldWVkID0gMSxcbiAgICBTZW50ID0gMixcbiAgICBPcGVuZWQgPSAzLFxuICAgIENsaWNrZWQgPSA0LFxuICAgIEJvdW5jZSA9IDUsXG4gICAgU3BhbSA9IDYsXG4gICAgVW5zdWIgPSA3LFxuICAgIEJsb2NrZWQgPSA4LFxuICAgIFNvZnRCb3VuY2UgPSA5LFxuICAgIEhhcmRCb3VuY2UgPSAxMCxcbiAgICBEZWZlcnJlZCA9IDExLFxuICB9XG5cbiAgZXhwb3J0IGVudW0gQ3VycmVudE1lc3NhZ2VTdGF0dXMge1xuICAgIFVua25vd24gPSAndW5rbm93bicsXG4gICAgUXVldWVkID0gJ3F1ZXVlZCcsXG4gICAgU2VudCA9ICdzZW50JyxcbiAgICBPcGVuZWQgPSAnb3BlbmVkJyxcbiAgICBDbGlja2VkID0gJ2NsaWNrZWQnLFxuICAgIEJvdW5jZSA9ICdib3VuY2UnLFxuICAgIFNwYW0gPSAnc3BhbScsXG4gICAgVW5zdWIgPSAndW5zdWInLFxuICAgIEJsb2NrZWQgPSAnYmxvY2tlZCcsXG4gICAgSGFyZEJvdW5jZWQgPSAnaGFyZGJvdW5jZWQnLFxuICAgIFNvZnRCb3VuY2VkID0gJ3NvZnRib3VuY2VkJyxcbiAgICBEZWZlcnJlZCA9ICdkZWZlcnJlZCcsXG4gIH1cblxuICBleHBvcnQgZW51bSBFdmVudFR5cGUge1xuICAgIFNlbnQgPSAnc2VudCcsXG4gICAgT3BlbmVkID0gJ29wZW5lZCcsXG4gICAgQ2xpY2tlZCA9ICdjbGlja2VkJyxcbiAgICBCb3VuY2VkID0gJ2JvdW5jZWQnLFxuICAgIEJsb2NrZWQgPSAnYmxvY2tlZCcsXG4gICAgVW5zdWIgPSAndW5zdWInLFxuICAgIFNwYW0gPSAnc3BhbSdcbiAgfVxuXG4gIGV4cG9ydCBpbnRlcmZhY2UgTWVzc2FnZVRyYWNrZWQge1xuICAgIElzQ2xpY2tUcmFja2VkOiBib29sZWFuO1xuICAgIElzSFRNTFBhcnRJbmNsdWRlZDogYm9vbGVhbjtcbiAgICBJc09wZW5UcmFja2VkOiBib29sZWFuO1xuICAgIElzVGV4dFBhcnRJbmNsdWRlZDogYm9vbGVhbjtcbiAgICBJc1Vuc3ViVHJhY2tlZDogYm9vbGVhbjtcbiAgfVxuXG4gIGV4cG9ydCBpbnRlcmZhY2UgTWVzc2FnZSBleHRlbmRzIE1lc3NhZ2VUcmFja2VkIHtcbiAgICBJRDogbnVtYmVyO1xuICAgIEFycml2ZWRBdDogc3RyaW5nO1xuICAgIEF0dGFjaG1lbnRDb3VudDogbnVtYmVyO1xuICAgIEF0dGVtcHRDb3VudDogbnVtYmVyO1xuICAgIENhbXBhaWduSUQ6IG51bWJlcjtcbiAgICBDb250YWN0QWx0OiBzdHJpbmc7XG4gICAgQ29udGFjdElEOiBudW1iZXI7XG4gICAgRGVsYXk6IG51bWJlcjtcbiAgICBEZXN0aW5hdGlvbklEOiBudW1iZXI7XG4gICAgRmlsdGVyVGltZTogbnVtYmVyO1xuICAgIE1lc3NhZ2VTaXplOiBudW1iZXI7XG4gICAgU2VuZGVySUQ6IG51bWJlcjtcbiAgICBTcGFtYXNzYXNzaW5TY29yZTogbnVtYmVyO1xuICAgIFNwYW1hc3NSdWxlczogc3RyaW5nO1xuICAgIFN0YXRlSUQ6IE1lc3NhZ2VTdGF0ZTtcbiAgICBTdGF0ZVBlcm1hbmVudDogYm9vbGVhbjtcbiAgICBTdGF0dXM6IEN1cnJlbnRNZXNzYWdlU3RhdHVzO1xuICAgIFN1YmplY3Q6IHN0cmluZztcbiAgICBVVUlEOiBzdHJpbmc7XG4gIH1cblxuICBleHBvcnQgaW50ZXJmYWNlIE1lc3NhZ2VIaXN0b3J5IHtcbiAgICBDb21tZW50OiBzdHJpbmc7XG4gICAgRXZlbnRBdDogbnVtYmVyO1xuICAgIEV2ZW50VHlwZTogRXZlbnRUeXBlO1xuICAgIFN0YXRlOiBzdHJpbmc7XG4gICAgVXNlcmFnZW50OiBzdHJpbmc7XG4gICAgVXNlcmFnZW50SUQ6IG51bWJlcjtcbiAgfVxuXG4gIGV4cG9ydCBpbnRlcmZhY2UgTWVzc2FnZUluZm9ybWF0aW9uPFJ1bGVzID0gQ29tbW9uLlVua25vd25SZWM+IHtcbiAgICBJRDogbnVtYmVyO1xuICAgIENhbXBhaWduSUQ6IG51bWJlcjtcbiAgICBDbGlja1RyYWNrZWRDb3VudDogbnVtYmVyO1xuICAgIENvbnRhY3RJRDogbnVtYmVyO1xuICAgIENyZWF0ZWRBdDogc3RyaW5nO1xuICAgIE1lc3NhZ2VTaXplOiBudW1iZXI7XG4gICAgT3BlblRyYWNrZWRDb3VudDogbnVtYmVyO1xuICAgIFF1ZXVlZENvdW50OiBudW1iZXI7XG4gICAgU2VuZEVuZEF0OiBzdHJpbmc7XG4gICAgU2VudENvdW50OiBudW1iZXI7XG4gICAgU3BhbUFzc2Fzc2luUnVsZXM6IFJ1bGVzO1xuICAgIFNwYW1Bc3Nhc3NpblNjb3JlOiBudW1iZXI7XG4gIH1cblxuICAvLyBSRVFVRVNUIFBBUlRcbiAgZXhwb3J0IHR5cGUgR2V0TWVzc2FnZVF1ZXJ5UGFyYW1zID0gUGFydGlhbDxDb21tb24uVGltZXN0YW1wUGVyaW9kPiAmXG4gICAgUGFydGlhbDxDb21tb24uUGFnaW5hdGlvbj4gJlxuICB7XG4gICAgQ2FtcGFpZ24/OiBudW1iZXI7XG4gICAgQ29udGFjdD86IG51bWJlcjtcbiAgICBDdXN0b21JRD86IHN0cmluZztcbiAgICBEZXN0aW5hdGlvbj86IG51bWJlcjtcbiAgICBGcm9tVHlwZT86IEZyb21UeXBlO1xuICAgIE1lc3NhZ2VTdGF0ZT86IE1lc3NhZ2VTdGF0ZTtcbiAgICBNZXNzYWdlU3RhdHVzPzogTWVzc2FnZVN0YXR1cztcbiAgICBQbGFuU3Vic2NyaXB0aW9uPzogbnVtYmVyO1xuICAgIFNlbmRlcklEPzogbnVtYmVyO1xuICAgIFNob3dDb250YWN0QWx0PzogYm9vbGVhbjtcbiAgICBTaG93Q3VzdG9tSUQ/OiBib29sZWFuO1xuICAgIFNob3dTdWJqZWN0PzogYm9vbGVhbjtcbiAgfVxuXG4gIGV4cG9ydCB0eXBlIEdldE1lc3NhZ2VJbmZvcm1hdGlvblF1ZXJ5UGFyYW1zID0gUGFydGlhbDxDb21tb24uVGltZXN0YW1wUGVyaW9kPiAmXG4gICAgUGFydGlhbDxDb21tb24uUGFnaW5hdGlvbj4gJlxuICB7XG4gICAgQ2FtcGFpZ25JRD86IG51bWJlcjtcbiAgICBDb250YWN0c0xpc3Q/OiBudW1iZXI7XG4gICAgQ3VzdG9tQ2FtcGFpZ24/OiBzdHJpbmc7XG4gICAgRnJvbT86IHN0cmluZztcbiAgICBGcm9tRG9tYWluPzogc3RyaW5nO1xuICAgIEZyb21JRD86IG51bWJlcjtcbiAgICBGcm9tVHlwZT86IEZyb21UeXBlO1xuICAgIElzRGVsZXRlZD86IGJvb2xlYW47XG4gICAgSXNOZXdzbGV0dGVyVG9vbD86IGJvb2xlYW47XG4gICAgSXNTdGFycmVkPzogYm9vbGVhbjtcbiAgICBNZXNzYWdlU3RhdHVzPzogTWVzc2FnZVN0YXR1cztcbiAgICBQZXJpb2Q/OiBDb21tb24uUGVyaW9kO1xuICB9XG5cbiAgLy8gUkVTUE9OU0UgUEFSVFxuICBleHBvcnQgdHlwZSBHZXRNZXNzYWdlc1Jlc3BvbnNlID0gQ29tbW9uLlJlc3BvbnNlPE1lc3NhZ2VbXT5cbiAgZXhwb3J0IHR5cGUgR2V0TWVzc2FnZUhpc3RvcnlSZXNwb25zZSA9IENvbW1vbi5SZXNwb25zZTxNZXNzYWdlSGlzdG9yeVtdPlxuICBleHBvcnQgdHlwZSBHZXRNZXNzYWdlSW5mb3JtYXRpb25SZXNwb25zZTxSdWxlcyA9IENvbW1vbi5Vbmtub3duUmVjPiA9XG4gICAgICBDb21tb24uUmVzcG9uc2U8QXJyYXk8TWVzc2FnZUluZm9ybWF0aW9uPFJ1bGVzPj4+XG59XG4iLCJpbXBvcnQgeyBDb21tb24gfSBmcm9tICcuL0NvbW1vbic7XG5cbmV4cG9ydCBuYW1lc3BhY2UgU2VnbWVudGF0aW9uIHtcbiAgZXhwb3J0IGVudW0gU2VnbWVudFN0YXR1cyB7XG4gICAgVXNlZCA9ICd1c2VkJyxcbiAgICBVblVzZWQgPSAndW51c2VkJyxcbiAgICBEZWxldGVkID0gJ2RlbGV0ZWQnXG4gIH1cblxuICBleHBvcnQgaW50ZXJmYWNlIENvbnRhY3RGaWx0ZXIge1xuICAgIElEOiBudW1iZXI7XG4gICAgRGVzY3JpcHRpb246IHN0cmluZztcbiAgICBFeHByZXNzaW9uOiBzdHJpbmc7XG4gICAgTmFtZTogc3RyaW5nO1xuICAgIFN0YXR1czogU2VnbWVudFN0YXR1cztcbiAgfVxuXG4gIC8vIFJFUVVFU1QgUEFSVFxuICBleHBvcnQgdHlwZSBQb3N0Q29udGFjdEZpbHRlckJvZHkgPSB7XG4gICAgTmFtZTogc3RyaW5nO1xuICAgIEV4cHJlc3Npb246IHN0cmluZztcbiAgICBEZXNjcmlwdGlvbj86IHN0cmluZztcbiAgfVxuXG4gIGV4cG9ydCB0eXBlIFB1dENvbnRhY3RGaWx0ZXJCb2R5ID0gUGFydGlhbDxQb3N0Q29udGFjdEZpbHRlckJvZHk+ICYge1xuICAgIFN0YXR1cz86IFNlZ21lbnRTdGF0dXM7XG4gIH1cblxuICBleHBvcnQgdHlwZSBHZXRDb250YWN0RmlsdGVyUXVlcnlQYXJhbXMgPSBQYXJ0aWFsPENvbW1vbi5QYWdpbmF0aW9uPiAmIHtcbiAgICBTaG93RGVsZXRlZD86IGJvb2xlYW47XG4gICAgU3RhdHVzPzogU2VnbWVudFN0YXR1cztcbiAgfVxuXG4gIC8vIFJFU1BPTlNFIFBBUlRcbiAgdHlwZSBDb250YWN0RmlsdGVyUmVzcG9uc2UgPSBDb21tb24uUmVzcG9uc2U8Q29udGFjdEZpbHRlcltdPjtcblxuICBleHBvcnQgdHlwZSBQb3N0Q29udGFjdEZpbHRlclJlc3BvbnNlID0gQ29udGFjdEZpbHRlclJlc3BvbnNlO1xuICBleHBvcnQgdHlwZSBQdXRDb250YWN0RmlsdGVyUmVzcG9uc2UgPSBDb250YWN0RmlsdGVyUmVzcG9uc2U7XG4gIGV4cG9ydCB0eXBlIEdldENvbnRhY3RGaWx0ZXJSZXNwb25zZSA9IENvbnRhY3RGaWx0ZXJSZXNwb25zZTtcbn1cbiIsImltcG9ydCB7IENvbW1vbiB9IGZyb20gJy4vQ29tbW9uJztcblxuZXhwb3J0IG5hbWVzcGFjZSBTZW5kRW1haWxWMyB7XG4gIGV4cG9ydCB0eXBlIE1qVGVtcGxhdGVFcnJvckRlbGl2ZXIgPSAnMCcgfCAnZGVsaXZlcidcbiAgZXhwb3J0IHR5cGUgTWpEZWR1cGxpY2F0ZUNhbXBhaWduID0gMCB8IDE7XG4gIGV4cG9ydCB0eXBlIE1qVHJhY2tPcGVuID0gMCB8IDEgfCAyO1xuXG4gIGV4cG9ydCBpbnRlcmZhY2UgUmVjaXBpZW50IHtcbiAgICBFbWFpbDogc3RyaW5nO1xuICAgIE5hbWU/OiBzdHJpbmdcbiAgICBWYXJzPzogc3RyaW5nO1xuICB9XG5cbiAgZXhwb3J0IGludGVyZmFjZSBBdHRhY2htZW50IHtcbiAgICBGaWxlbmFtZTogc3RyaW5nO1xuICAgIENvbnRlbnQ6IHN0cmluZztcbiAgICAnQ29udGVudC10eXBlJzogc3RyaW5nO1xuICB9XG5cbiAgZXhwb3J0IHR5cGUgQm9keU1qID0ge1xuICAgICdNai1UZW1wbGF0ZUlEJz86IG51bWJlcjtcbiAgICAnTWotVGVtcGxhdGVMYW5ndWFnZSc/OiBib29sZWFuO1xuICAgICdNai1UZW1wbGF0ZUVycm9yUmVwb3J0aW5nJz86IHN0cmluZztcbiAgICAnTWotVGVtcGxhdGVFcnJvckRlbGl2ZXInPzogTWpUZW1wbGF0ZUVycm9yRGVsaXZlcjtcbiAgICAnTWotcHJpbyc/OiBudW1iZXI7XG4gICAgJ01qLWNhbXBhaWduJz86IHN0cmluZztcbiAgICAnTWotZGVkdXBsaWNhdGVjYW1wYWlnbic/OiBNakRlZHVwbGljYXRlQ2FtcGFpZ247XG4gICAgJ01qLXRyYWNrb3Blbic/OiBNalRyYWNrT3BlbjtcbiAgICAnTWotQ3VzdG9tSUQnPzogc3RyaW5nO1xuICAgICdNai1FdmVudFBheWxvYWQnPzogc3RyaW5nO1xuICB9XG5cbiAgLy8gUkVRVUVTVCBQQVJUXG4gIGV4cG9ydCB0eXBlIEJvZHk8XG4gICAgSGVhZGVycyA9IENvbW1vbi5Vbmtub3duUmVjLFxuICAgIFZhcnMgPSBDb21tb24uVW5rbm93blJlY1xuICAgID4gPSBCb2R5TWogJiB7XG4gICAgRnJvbUVtYWlsPzogc3RyaW5nO1xuICAgIEZyb21OYW1lPzogc3RyaW5nO1xuICAgIFJlY2lwaWVudHM/OiBSZWNpcGllbnRbXTtcbiAgICBTZW5kZXI/OiBib29sZWFuO1xuICAgIFN1YmplY3Q/OiBzdHJpbmc7XG4gICAgJ1RleHQtcGFydCc/OiBzdHJpbmc7XG4gICAgJ0h0bWwtcGFydCc/OiBzdHJpbmc7XG4gICAgVG8/OiBzdHJpbmc7XG4gICAgQ2M/OiBzdHJpbmc7XG4gICAgQmNjPzogc3RyaW5nO1xuICAgIEF0dGFjaG1lbnRzPzogQXR0YWNobWVudFtdO1xuICAgIElubGluZV9hdHRhY2htZW50cz86IEF0dGFjaG1lbnRbXTtcbiAgICBIZWFkZXJzPzogSGVhZGVycztcbiAgICBWYXJzPzogVmFycztcbiAgfVxuXG4gIC8vIFJFU1BPTlNFIFBBUlRcbiAgZXhwb3J0IGludGVyZmFjZSBSZXNwb25zZVNlbnQge1xuICAgIEVtYWlsOiBzdHJpbmc7XG4gICAgTWVzc2FnZUlEOiBudW1iZXI7XG4gICAgTWVzc2FnZVVVSUQ6IHN0cmluZztcbiAgfVxuXG4gIGV4cG9ydCB0eXBlIFJlc3BvbnNlID0ge1xuICAgIFNlbnQ6IFJlc3BvbnNlU2VudFtdO1xuICB9XG59XG5cbmV4cG9ydCBuYW1lc3BhY2UgU2VuZEVtYWlsVjNfMSB7XG4gIGV4cG9ydCBlbnVtIFRyYWNrT3BlbnMge1xuICAgIEFjY291bnREZWZhdWx0ID0gJ2FjY291bnRfZGVmYXVsdCcsXG4gICAgRGlzYWJsZWQgPSAnZGlzYWJsZWQnLFxuICAgIEVuYWJsZWQgPSAnZW5hYmxlZCcsXG4gIH1cblxuICBleHBvcnQgZW51bSBUcmFja0NsaWNrcyB7XG4gICAgQWNjb3VudERlZmF1bHQgPSAnYWNjb3VudF9kZWZhdWx0JyxcbiAgICBEaXNhYmxlZCA9ICdkaXNhYmxlZCcsXG4gICAgRW5hYmxlZCA9ICdlbmFibGVkJyxcbiAgfVxuXG4gIGV4cG9ydCBpbnRlcmZhY2UgRW1haWxBZGRyZXNzVG8ge1xuICAgIEVtYWlsOiBzdHJpbmc7XG4gICAgTmFtZT86IHN0cmluZztcbiAgfVxuXG4gIGV4cG9ydCBpbnRlcmZhY2UgQXR0YWNobWVudCB7XG4gICAgRmlsZW5hbWU6IHN0cmluZztcbiAgICBDb250ZW50VHlwZTogc3RyaW5nO1xuICAgIEJhc2U2NENvbnRlbnQ6IHN0cmluZztcbiAgfVxuXG4gIGV4cG9ydCBpbnRlcmZhY2UgSW5saW5lZEF0dGFjaG1lbnQgZXh0ZW5kcyBBdHRhY2htZW50IHtcbiAgICBDb250ZW50SUQ/OiBzdHJpbmc7XG4gIH1cblxuICBleHBvcnQgaW50ZXJmYWNlIE1lc3NhZ2U8SGVhZGVycyA9IENvbW1vbi5Vbmtub3duUmVjLCBWYXJpYWJsZXMgPSBDb21tb24uVW5rbm93blJlYz4ge1xuICAgIEZyb206IEVtYWlsQWRkcmVzc1RvO1xuICAgIFNlbmRlcj86IEVtYWlsQWRkcmVzc1RvO1xuICAgIFRvOiBFbWFpbEFkZHJlc3NUb1tdO1xuICAgIENjPzogRW1haWxBZGRyZXNzVG9bXTtcbiAgICBCY2M/OiBFbWFpbEFkZHJlc3NUb1tdO1xuICAgIFJlcGx5VG8/OiBFbWFpbEFkZHJlc3NUbztcbiAgICBTdWJqZWN0Pzogc3RyaW5nO1xuICAgIFRleHRQYXJ0Pzogc3RyaW5nO1xuICAgIEhUTUxQYXJ0Pzogc3RyaW5nO1xuICAgIFRlbXBsYXRlSUQ/OiBudW1iZXI7XG4gICAgVGVtcGxhdGVMYW5ndWFnZT86IGJvb2xlYW47XG4gICAgVGVtcGxhdGVFcnJvclJlcG9ydGluZz86IEVtYWlsQWRkcmVzc1RvO1xuICAgIFRlbXBsYXRlRXJyb3JEZWxpdmVyPzogYm9vbGVhbjtcbiAgICBBdHRhY2htZW50cz86IEF0dGFjaG1lbnRbXTtcbiAgICBJbmxpbmVkQXR0YWNobWVudHM/OiBJbmxpbmVkQXR0YWNobWVudFtdO1xuICAgIFByaW9yaXR5PzogbnVtYmVyO1xuICAgIEN1c3RvbUNhbXBhaWduPzogc3RyaW5nO1xuICAgIERlZHVwbGljYXRlQ2FtcGFpZ24/OiBib29sZWFuO1xuICAgIFRyYWNrT3BlbnM/OiBUcmFja09wZW5zO1xuICAgIFRyYWNrQ2xpY2tzPzogVHJhY2tDbGlja3M7XG4gICAgQ3VzdG9tSUQ/OiBzdHJpbmc7XG4gICAgRXZlbnRQYXlsb2FkPzogc3RyaW5nO1xuICAgIFVSTFRhZ3M/OiBzdHJpbmc7XG4gICAgSGVhZGVycz86IEhlYWRlcnM7XG4gICAgVmFyaWFibGVzPzogVmFyaWFibGVzO1xuICB9XG5cbiAgZXhwb3J0IGVudW0gUmVzcG9uc2VTdGF0dXMge1xuICAgIFN1Y2Nlc3MgPSAnc3VjY2VzcycsXG4gICAgRXJyb3IgPSAnZXJyb3InLFxuICB9XG5cbiAgZXhwb3J0IGludGVyZmFjZSBSZXNwb25zZUVycm9yIHtcbiAgICBFcnJvcklkZW50aWZpZXI6IHN0cmluZztcbiAgICBFcnJvckNvZGU6IHN0cmluZztcbiAgICBTdGF0dXNDb2RlOiBudW1iZXI7XG4gICAgRXJyb3JNZXNzYWdlOiBzdHJpbmc7XG4gICAgRXJyb3JSZWxhdGVkVG86IEFycmF5PHN0cmluZz47XG4gIH1cblxuICBleHBvcnQgaW50ZXJmYWNlIFJlc3BvbnNlRW1haWxBZGRyZXNzVG8ge1xuICAgIEVtYWlsOiBzdHJpbmc7XG4gICAgTWVzc2FnZVVVSUQ6IHN0cmluZztcbiAgICBNZXNzYWdlSUQ6IG51bWJlcjtcbiAgICBNZXNzYWdlSHJlZjogc3RyaW5nO1xuICB9XG5cbiAgLy8gUkVRVUVTVCBQQVJUXG4gIGV4cG9ydCB0eXBlIEJvZHk8XG4gICAgSGVhZGVycyA9IENvbW1vbi5Vbmtub3duUmVjLFxuICAgIFZhcmlhYmxlcyA9IENvbW1vbi5Vbmtub3duUmVjLFxuICAgIEdsb2JhbHMgPSBDb21tb24uVW5rbm93blJlYyxcbiAgICA+ID0ge1xuICAgIE1lc3NhZ2VzOiBBcnJheTxNZXNzYWdlPEhlYWRlcnMsIFZhcmlhYmxlcz4+O1xuICAgIFNhbmRib3hNb2RlPzogYm9vbGVhbjtcbiAgICBBZHZhbmNlRXJyb3JIYW5kbGluZz86IGJvb2xlYW47XG4gICAgR2xvYmFscz86IEdsb2JhbHM7XG4gIH0gfCB7XG4gICAgTWVzc2FnZXM6IEFycmF5PE9taXQ8TWVzc2FnZTxIZWFkZXJzLCBWYXJpYWJsZXM+LCAnRnJvbSc+ICYgeyBGcm9tPzogc3RyaW5nIH0+O1xuICAgIFNhbmRib3hNb2RlPzogYm9vbGVhbjtcbiAgICBBZHZhbmNlRXJyb3JIYW5kbGluZz86IGJvb2xlYW47XG4gICAgR2xvYmFsczoge1xuICAgICAgRnJvbTogRW1haWxBZGRyZXNzVG87XG4gICAgICBba2V5OiBzdHJpbmddOiB1bmtub3duO1xuICAgIH07XG4gIH1cblxuICAvLyBSRVNQT05TRSBQQVJUXG4gIGV4cG9ydCBpbnRlcmZhY2UgUmVzcG9uc2VNZXNzYWdlIHtcbiAgICBTdGF0dXM6IFJlc3BvbnNlU3RhdHVzO1xuICAgIEVycm9yczogUmVzcG9uc2VFcnJvcltdO1xuICAgIEN1c3RvbUlEOiBzdHJpbmc7XG4gICAgVG86IFJlc3BvbnNlRW1haWxBZGRyZXNzVG9bXTtcbiAgICBDYzogUmVzcG9uc2VFbWFpbEFkZHJlc3NUb1tdO1xuICAgIEJjYzogUmVzcG9uc2VFbWFpbEFkZHJlc3NUb1tdO1xuICB9XG5cbiAgZXhwb3J0IHR5cGUgUmVzcG9uc2UgPSB7XG4gICAgTWVzc2FnZXM6IFJlc3BvbnNlTWVzc2FnZVtdO1xuICB9XG59XG4iLCJpbXBvcnQgeyBDb21tb24gfSBmcm9tICcuL0NvbW1vbic7XG5cbmV4cG9ydCBuYW1lc3BhY2UgU2VuZGVyIHtcbiAgZXhwb3J0IGVudW0gRW1haWxUeXBlIHtcbiAgICBUcmFuc2FjdGlvbmFsID0gJ3RyYW5zYWN0aW9uYWwnLFxuICAgIEJ1bGsgPSAnYnVsaycsXG4gICAgVW5rbm93biA9ICd1bmtub3duJ1xuICB9XG5cbiAgZXhwb3J0IGVudW0gU2VuZGVyU3RhdHVzIHtcbiAgICBJbmFjdGl2ZSA9ICdJbmFjdGl2ZScsXG4gICAgQWN0aXZlID0gJ0FjdGl2ZScsXG4gICAgRGVsZXRlZCA9ICdEZWxldGVkJyxcbiAgfVxuXG4gIGV4cG9ydCBpbnRlcmZhY2UgU2VuZGVyIHtcbiAgICBJRDogbnVtYmVyO1xuICAgIEVtYWlsVHlwZTogRW1haWxUeXBlO1xuICAgIElzRGVmYXVsdFNlbmRlcjogYm9vbGVhbjtcbiAgICBOYW1lOiBzdHJpbmc7XG4gICAgQ3JlYXRlZEF0OiBzdHJpbmc7XG4gICAgRE5TSUQ6IG51bWJlcjtcbiAgICBFbWFpbDogc3RyaW5nO1xuICAgIEZpbGVuYW1lOiBzdHJpbmc7XG4gICAgU3RhdHVzOiBTZW5kZXJTdGF0dXM7XG4gIH1cblxuICBleHBvcnQgaW50ZXJmYWNlIFNlbmRlclZhbGlkYXRlIHtcbiAgICBWYWxpZGF0aW9uTWV0aG9kOiBzdHJpbmc7XG4gICAgRXJyb3JzOiBzdHJpbmc7XG4gICAgR2xvYmFsRXJyb3I6IHN0cmluZztcbiAgfVxuXG4gIC8vIFJFUVVFU1QgUEFSVFxuICBleHBvcnQgdHlwZSBQb3N0U2VuZGVyQm9keSA9IHtcbiAgICBFbWFpbDogc3RyaW5nO1xuICAgIEVtYWlsVHlwZT86IEVtYWlsVHlwZTtcbiAgICBJc0RlZmF1bHRTZW5kZXI/OiBib29sZWFuO1xuICAgIE5hbWU/OiBzdHJpbmc7XG4gIH1cblxuICBleHBvcnQgdHlwZSBQdXRTZW5kZXJCb2R5ID0gT21pdDxQb3N0U2VuZGVyQm9keSwgJ0VtYWlsJz5cblxuICBleHBvcnQgdHlwZSBHZXRTZW5kZXJRdWVyeVBhcmFtcyA9IFBhcnRpYWw8Q29tbW9uLlBhZ2luYXRpb24+ICYge1xuICAgIERuc0lEPzogbnVtYmVyO1xuICAgIERvbWFpbj86IHN0cmluZztcbiAgICBFbWFpbD86IHN0cmluZztcbiAgICBJc0RvbWFpblNlbmRlcj86IGJvb2xlYW47XG4gICAgTG9jYWxQYXJ0Pzogc3RyaW5nO1xuICAgIFNob3dEZWxldGVkPzogYm9vbGVhbjtcbiAgICBTdGF0dXM/OiBTZW5kZXJTdGF0dXM7XG4gIH1cblxuICAvLyBSRVNQT05TRSBQQVJUXG4gIHR5cGUgU2VuZGVyUmVzcG9uc2UgPSBDb21tb24uUmVzcG9uc2U8U2VuZGVyW10+O1xuXG4gIGV4cG9ydCB0eXBlIFBvc3RTZW5kZXJSZXNwb25zZSA9IFNlbmRlclJlc3BvbnNlXG4gIGV4cG9ydCB0eXBlIFB1dFNlbmRlclJlc3BvbnNlID0gU2VuZGVyUmVzcG9uc2VcbiAgZXhwb3J0IHR5cGUgR2V0U2VuZGVyUmVzcG9uc2UgPSBTZW5kZXJSZXNwb25zZVxuXG4gIGV4cG9ydCB0eXBlIFBvc3RTZW5kZXJWYWxpZGF0ZVJlc3BvbnNlID0gQ29tbW9uLlJlc3BvbnNlPFNlbmRlclZhbGlkYXRlW10+O1xufVxuXG5leHBvcnQgbmFtZXNwYWNlIE1ldGFzZW5kZXIge1xuICBleHBvcnQgaW50ZXJmYWNlIE1ldGFTZW5kZXIge1xuICAgIElEOiBudW1iZXI7XG4gICAgRGVzY3JpcHRpb246IHN0cmluZztcbiAgICBDcmVhdGVkQXQ6IHN0cmluZztcbiAgICBFbWFpbDogc3RyaW5nO1xuICAgIEZpbGVuYW1lOiBzdHJpbmc7XG4gICAgSXNFbmFibGVkOiBib29sZWFuO1xuICB9XG5cbiAgLy8gUkVRVUVTVCBQQVJUXG4gIGV4cG9ydCB0eXBlIFBvc3RNZXRhU2VuZGVyQm9keSA9IHtcbiAgICBFbWFpbDogc3RyaW5nO1xuICAgIERlc2NyaXB0aW9uPzogc3RyaW5nO1xuICB9XG5cbiAgZXhwb3J0IHR5cGUgUHV0TWV0YVNlbmRlckJvZHkgPSBPbWl0PFBvc3RNZXRhU2VuZGVyQm9keSwgJ0VtYWlsJz5cblxuICBleHBvcnQgdHlwZSBHZXRNZXRhU2VuZGVyUXVlcnlQYXJhbXMgPSBQYXJ0aWFsPENvbW1vbi5QYWdpbmF0aW9uPiAmIHtcbiAgICBETlM/OiBudW1iZXI7XG4gIH1cblxuICAvLyBSRVNQT05TRSBQQVJUXG4gIHR5cGUgTWV0YVNlbmRlclJlc3BvbnNlID0gQ29tbW9uLlJlc3BvbnNlPE1ldGFTZW5kZXJbXT47XG5cbiAgZXhwb3J0IHR5cGUgUG9zdE1ldGFTZW5kZXJSZXNwb25zZSA9IE1ldGFTZW5kZXJSZXNwb25zZVxuICBleHBvcnQgdHlwZSBQdXRNZXRhU2VuZGVyUmVzcG9uc2UgPSBNZXRhU2VuZGVyUmVzcG9uc2VcbiAgZXhwb3J0IHR5cGUgR2V0TWV0YVNlbmRlclJlc3BvbnNlID0gTWV0YVNlbmRlclJlc3BvbnNlXG59XG5cbmV4cG9ydCBuYW1lc3BhY2UgRE5TIHtcbiAgZXhwb3J0IGVudW0gREtJTUNvbmZpZ3VyYXRpb25DaGVja1N0YXR1cyB7XG4gICAgT0sgPSAnT0snLFxuICAgIEVycm9yID0gJ0Vycm9yJyxcbiAgICBOb3RDaGVja2VkID0gJ05vdCBjaGVja2VkJ1xuICB9XG5cbiAgZXhwb3J0IGVudW0gREtJTUNvbmZpZ3VyYXRpb25TdGF0dXMge1xuICAgIE9LID0gJ09LJyxcbiAgICBFcnJvciA9ICdFcnJvcidcbiAgfVxuXG4gIGV4cG9ydCBlbnVtIFNQRkNvbmZpZ3VyYXRpb25DaGVja1N0YXR1cyB7XG4gICAgT0sgPSAnT0snLFxuICAgIEVycm9yID0gJ0Vycm9yJyxcbiAgICBOb3RDaGVja2VkID0gJ05vdCBjaGVja2VkJyxcbiAgICBOb3RGb3VuZCA9ICdOb3QgZm91bmQnLFxuICB9XG5cbiAgZXhwb3J0IGVudW0gU1BGQ29uZmlndXJhdGlvblN0YXR1cyB7XG4gICAgT0sgPSAnT0snLFxuICAgIEVycm9yID0gJ0Vycm9yJ1xuICB9XG5cbiAgZXhwb3J0IGludGVyZmFjZSBETlMge1xuICAgIElEOiBudW1iZXI7XG4gICAgREtJTVJlY29yZE5hbWU6IHN0cmluZztcbiAgICBES0lNUmVjb3JkVmFsdWU6IHN0cmluZztcbiAgICBES0lNU3RhdHVzOiBES0lNQ29uZmlndXJhdGlvbkNoZWNrU3RhdHVzO1xuICAgIERvbWFpbjogc3RyaW5nO1xuICAgIElzQ2hlY2tJblByb2dyZXNzOiBib29sZWFuO1xuICAgIExhc3RDaGVja0F0OiBzdHJpbmc7XG4gICAgT3duZXJTaGlwVG9rZW46IHN0cmluZztcbiAgICBPd25lclNoaXBUb2tlblJlY29yZE5hbWU6IHN0cmluZztcbiAgICBTUEZSZWNvcmRWYWx1ZTogc3RyaW5nO1xuICAgIFNQRlN0YXR1czogU1BGQ29uZmlndXJhdGlvbkNoZWNrU3RhdHVzO1xuICB9XG5cbiAgZXhwb3J0IGludGVyZmFjZSBETlNDaGVjayB7XG4gICAgREtJTUVycm9yczogc3RyaW5nO1xuICAgIERLSU1SZWNvcmRDdXJyZW50VmFsdWU6IHN0cmluZztcbiAgICBES0lNU3RhdHVzOiBES0lNQ29uZmlndXJhdGlvblN0YXR1cztcbiAgICBTUEZFcnJvcnM6IHN0cmluZztcbiAgICBTUEZSZWNvcmRDdXJyZW50VmFsdWU6IHN0cmluZztcbiAgICBTUEZTdGF0dXM6IFNQRkNvbmZpZ3VyYXRpb25TdGF0dXM7XG4gIH1cblxuICAvLyBSRVFVRVNUIFBBUlRcbiAgZXhwb3J0IHR5cGUgR2V0RE5TUXVlcnlQYXJhbXMgPSBQYXJ0aWFsPENvbW1vbi5QYWdpbmF0aW9uPiAmIHtcbiAgICBJc0NoZWNrSW5Qcm9ncmVzcz86IGJvb2xlYW47XG4gICAgSXNTZW5kZXJJZGVudGlmaWVkPzogYm9vbGVhbjtcbiAgICBJc1lhaG9vRkJMPzogYm9vbGVhbjtcbiAgICBNYXhMYXN0Q2hlY2tBdD86IHN0cmluZztcbiAgICBNaW5MYXN0Q2hlY2tBdD86IHN0cmluZztcbiAgICBTUEZTdGF0dXM/OiBTUEZDb25maWd1cmF0aW9uQ2hlY2tTdGF0dXM7XG4gIH1cblxuICAvLyBSRVNQT05TRSBQQVJUXG4gIGV4cG9ydCB0eXBlIEdldEROU1Jlc3BvbnNlID0gQ29tbW9uLlJlc3BvbnNlPEROU1tdPjtcbiAgZXhwb3J0IHR5cGUgUG9zdEROU0NoZWNrUmVzcG9uc2UgPSBDb21tb24uUmVzcG9uc2U8RE5TQ2hlY2tbXT47XG59XG4iLCJpbXBvcnQgeyBDb21tb24gfSBmcm9tICcuL0NvbW1vbic7XG5cbmV4cG9ydCBuYW1lc3BhY2UgQVBJS2V5Q29uZmlndXJhdGlvbiB7XG4gIGV4cG9ydCBlbnVtIFJ1bkxldmVsIHtcbiAgICBOb3JtYWwgPSAnTm9ybWFsJyxcbiAgICBTb2Z0TG9jayA9ICdTb2Z0bG9jaycsXG4gICAgSGFyZExvY2sgPSAnSGFyZGxvY2snXG4gIH1cblxuICBleHBvcnQgaW50ZXJmYWNlIEFwaUtleSB7XG4gICAgSUQ6IG51bWJlcjtcbiAgICBBQ0w6IHN0cmluZztcbiAgICBJc0FjdGl2ZTogYm9vbGVhbjtcbiAgICBBUElLZXk6IHN0cmluZztcbiAgICBDcmVhdGVkQXQ6IHN0cmluZztcbiAgICBJc01hc3RlcjogYm9vbGVhbjtcbiAgICBOYW1lOiBzdHJpbmc7XG4gICAgUXVhcmFudGluZVZhbHVlOiBudW1iZXI7XG4gICAgUnVubGV2ZWw6IFJ1bkxldmVsO1xuICAgIFNlY3JldEtleTogc3RyaW5nO1xuICAgIFRyYWNrSG9zdDogc3RyaW5nO1xuICAgIFVzZXJJRDogbnVtYmVyO1xuICB9XG5cbiAgLy8gUkVRVUVTVCBQQVJUXG4gIGV4cG9ydCB0eXBlIFBvc3RBcGlLZXlCb2R5ID0ge1xuICAgIE5hbWU6IHN0cmluZztcbiAgICBBQ0w/OiBzdHJpbmc7XG4gICAgSXNBY3RpdmU/OiBib29sZWFuO1xuICB9XG5cbiAgZXhwb3J0IHR5cGUgUHV0QXBpS2V5Qm9keSA9IFBhcnRpYWw8UG9zdEFwaUtleUJvZHk+XG5cbiAgZXhwb3J0IHR5cGUgR2V0QXBpS2V5UXVlcnlQYXJhbXMgPSBQYXJ0aWFsPENvbW1vbi5QYWdpbmF0aW9uPiAmIHtcbiAgICBBUElLZXk/OiBzdHJpbmc7XG4gICAgSXNBY3RpdmU/OiBib29sZWFuO1xuICAgIElzTWFzdGVyPzogYm9vbGVhbjtcbiAgICBOYW1lPzogc3RyaW5nO1xuICB9XG5cbiAgLy8gUkVTUE9OU0UgUEFSVFxuICB0eXBlIEFwaUtleVJlc3BvbnNlID0gQ29tbW9uLlJlc3BvbnNlPEFwaUtleVtdPjtcblxuICBleHBvcnQgdHlwZSBQb3N0QXBpS2V5UmVzcG9uc2UgPSBBcGlLZXlSZXNwb25zZVxuICBleHBvcnQgdHlwZSBQdXRBcGlLZXlSZXNwb25zZSA9IEFwaUtleVJlc3BvbnNlXG4gIGV4cG9ydCB0eXBlIEdldEFwaUtleVJlc3BvbnNlID1BcGlLZXlSZXNwb25zZVxufVxuXG5leHBvcnQgbmFtZXNwYWNlIEFjY291bnRTZXR0aW5nIHtcbiAgZXhwb3J0IGludGVyZmFjZSBNeVByb2ZpbGUge1xuICAgIElEOiBudW1iZXI7XG4gICAgQWRkcmVzc0NpdHk6IHN0cmluZztcbiAgICBBZGRyZXNzQ291bnRyeTogc3RyaW5nO1xuICAgIEFkZHJlc3NQb3N0YWxDb2RlOiBzdHJpbmc7XG4gICAgQWRkcmVzc1N0YXRlOiBzdHJpbmc7XG4gICAgQWRkcmVzc1N0cmVldDogc3RyaW5nO1xuICAgIEJpbGxpbmdFbWFpbDogc3RyaW5nO1xuICAgIEJpcnRoZGF5QXQ6IHN0cmluZztcbiAgICBDb21wYW55TmFtZTogc3RyaW5nO1xuICAgIENvbXBhbnlOdW1PZkVtcGxveWVlczogc3RyaW5nO1xuICAgIENvbnRhY3RQaG9uZTogc3RyaW5nO1xuICAgIEVzdGltYXRlZFZvbHVtZTogbnVtYmVyO1xuICAgIEZlYXR1cmVzOiBzdHJpbmc7XG4gICAgRmlyc3RuYW1lOiBzdHJpbmc7XG4gICAgSW5kdXN0cnk6IG51bWJlcjtcbiAgICBKb2JUaXRsZTogc3RyaW5nO1xuICAgIExhc3RuYW1lOiBzdHJpbmc7XG4gICAgVkFUTnVtYmVyOiBzdHJpbmc7XG4gICAgV2Vic2l0ZTogc3RyaW5nO1xuICAgIFZBVDogbnVtYmVyO1xuICAgIFVzZXJJRDogbnVtYmVyO1xuICB9XG5cbiAgZXhwb3J0IGludGVyZmFjZSBVc2VyIHtcbiAgICBJRDogbnVtYmVyO1xuICAgIEFDTDogc3RyaW5nO1xuICAgIEVtYWlsOiBzdHJpbmc7XG4gICAgTGFzdExvZ2luQXQ6IHN0cmluZztcbiAgICBMb2NhbGU6IHN0cmluZztcbiAgICBUaW1lem9uZTogc3RyaW5nO1xuICAgIENyZWF0ZWRBdDogc3RyaW5nO1xuICAgIEZpcnN0SXA6IHN0cmluZztcbiAgICBMYXN0SXA6IHN0cmluZztcbiAgICBNYXhBbGxvd2VkQVBJS2V5czogbnVtYmVyO1xuICAgIFVzZXJuYW1lOiBzdHJpbmc7XG4gICAgV2FybmVkUmF0ZWxpbWl0QXQ6IHN0cmluZztcbiAgfVxuXG4gIC8vIFJFUVVFU1QgUEFSVFxuICBleHBvcnQgdHlwZSBQdXRNeVByb2ZpbGVCb2R5ID0gUGFydGlhbDxPbWl0PE15UHJvZmlsZSwgJ0lEJyB8ICdWQVQnIHwgJ1VzZXJJRCc+PlxuXG4gIGV4cG9ydCB0eXBlIFB1dFVzZXJCb2R5ID1cbiAgICBQYXJ0aWFsPE9taXQ8VXNlciwgJ0lEJyB8ICdDcmVhdGVkQXQnIHwgJ0ZpcnN0SXAnIHwgJ01heEFsbG93ZWRBUElLZXlzJyB8ICdXYXJuZWRSYXRlbGltaXRBdCc+PlxuXG4gIC8vIFJFU1BPTlNFIFBBUlRcbiAgdHlwZSBNeVByb2ZpbGVSZXNwb25zZSA9IENvbW1vbi5SZXNwb25zZTxNeVByb2ZpbGVbXT47XG4gIHR5cGUgVXNlclJlc3BvbnNlID0gQ29tbW9uLlJlc3BvbnNlPFVzZXJbXT47XG5cbiAgZXhwb3J0IHR5cGUgUHV0TXlQcm9maWxlUmVzcG9uc2UgPSBNeVByb2ZpbGVSZXNwb25zZVxuICBleHBvcnQgdHlwZSBHZXRNeVByb2ZpbGVSZXNwb25zZSA9IE15UHJvZmlsZVJlc3BvbnNlXG5cbiAgZXhwb3J0IHR5cGUgUHV0VXNlclJlc3BvbnNlID0gVXNlclJlc3BvbnNlXG4gIGV4cG9ydCB0eXBlIEdldFVzZXJSZXNwb25zZSA9IFVzZXJSZXNwb25zZVxufVxuIiwiaW1wb3J0IHsgQ29tbW9uIH0gZnJvbSAnLi9Db21tb24nO1xuaW1wb3J0IHsgTWVzc2FnZSB9IGZyb20gJy4vTWVzc2FnZSc7XG5cbmV4cG9ydCBuYW1lc3BhY2UgU3RhdGlzdGljIHtcbiAgZXhwb3J0IGVudW0gQ2FtcGFpZ25PdmVydmlld0lEVHlwZSB7XG4gICAgU2VudENhbXBhaWduID0gJ0NhbXBhaWduJyxcbiAgICBBQlRlc3RpbmcgPSAnQVgnLFxuICAgIERyYWZ0ID0gJ05MJ1xuICB9XG5cbiAgZXhwb3J0IGVudW0gQ2FtcGFpZ25PdmVydmlld0VkaXRNb2RlIHtcbiAgICBUb29sID0gJ3Rvb2wnLFxuICAgIEhUTUwgPSAnaHRtbCcsXG4gICAgVG9vbDIgPSAndG9vbDInLFxuICAgIEhUTUwyID0gJ2h0bWwyJyxcbiAgICBNSk1MID0gJ21qbWwnLFxuICB9XG5cbiAgZXhwb3J0IGVudW0gQ2FtcGFpZ25PdmVydmlld0VkaXRUeXBlIHtcbiAgICBGdWxsID0gJ2Z1bGwnLFxuICAgIFVua25vd24gPSAndW5rbm93bidcbiAgfVxuXG4gIGV4cG9ydCBlbnVtIENvdW50ZXJTb3VyY2Uge1xuICAgIENhbXBhaWduID0gJ0NhbXBhaWduJyxcbiAgICBBUElLZXkgPSAnQVBJS2V5JyxcbiAgICBMaXN0ID0gJ0xpc3QnLFxuICAgIFNlbmRlciA9ICdTZW5kZXInXG4gIH1cblxuICBleHBvcnQgZW51bSBDb3VudGVyUmVzb2x1dGlvbiB7XG4gICAgSGlnaGVzdCA9ICdIaWdoZXN0JyxcbiAgICBIb3VyID0gJ0hvdXInLFxuICAgIERheSA9ICdEYXknLFxuICAgIExpZmV0aW1lID0gJ0xpZmV0aW1lJ1xuICB9XG5cbiAgZXhwb3J0IGVudW0gQ291bnRlclRpbWluZyB7XG4gICAgTWVzc2FnZSA9ICdNZXNzYWdlJyxcbiAgICBFdmVudCA9ICdFdmVudCdcbiAgfVxuXG4gIGV4cG9ydCBlbnVtIEVtYWlsRXZlbnQge1xuICAgIE9wZW4gPSAnb3BlbicsXG4gICAgQ2xpY2sgPSAnY2xpY2snXG4gIH1cblxuICBleHBvcnQgaW50ZXJmYWNlIENhbXBhaWduT3ZlcnZpZXcge1xuICAgIENsaWNrZWRDb3VudDogbnVtYmVyO1xuICAgIERlbGl2ZXJlZENvdW50OiBudW1iZXI7XG4gICAgRWRpdE1vZGU6IENhbXBhaWduT3ZlcnZpZXdFZGl0TW9kZTtcbiAgICBFZGl0VHlwZTogQ2FtcGFpZ25PdmVydmlld0VkaXRUeXBlO1xuICAgIElEOiBudW1iZXI7XG4gICAgSURUeXBlOiBDYW1wYWlnbk92ZXJ2aWV3SURUeXBlO1xuICAgIE9wZW5lZENvdW50OiBudW1iZXI7XG4gICAgUHJvY2Vzc2VkQ291bnQ6IG51bWJlcjtcbiAgICBTZW5kVGltZVN0YXJ0OiBudW1iZXI7XG4gICAgU3RhcnJlZDogYm9vbGVhbjtcbiAgICBTdWJqZWN0OiBzdHJpbmc7XG4gICAgVGl0bGU6IHN0cmluZztcbiAgfVxuXG4gIGV4cG9ydCBpbnRlcmZhY2UgQ29udGFjdFN0YXRpc3RpYyB7XG4gICAgQmxvY2tlZENvdW50OiBudW1iZXI7XG4gICAgQm91bmNlZENvdW50OiBudW1iZXI7XG4gICAgQ2xpY2tlZENvdW50OiBudW1iZXI7XG4gICAgQ29udGFjdElEOiBudW1iZXI7XG4gICAgRGVmZXJyZWRDb3VudDogbnVtYmVyO1xuICAgIERlbGl2ZXJlZENvdW50OiBudW1iZXI7XG4gICAgSGFyZGJvdW5jZWRDb3VudDogbnVtYmVyO1xuICAgIExhc3RBY3Rpdml0eUF0OiBzdHJpbmc7XG4gICAgTWFya2V0aW5nQ29udGFjdHM6IG51bWJlcjtcbiAgICBPcGVuZWRDb3VudDogbnVtYmVyO1xuICAgIFByb2Nlc3NlZENvdW50OiBudW1iZXI7XG4gICAgUXVldWVkQ291bnQ6IG51bWJlcjtcbiAgICBTb2Z0Ym91bmNlZENvdW50OiBudW1iZXI7XG4gICAgU3BhbUNvbXBsYWludENvdW50OiBudW1iZXI7XG4gICAgVW5zdWJzY3JpYmVkQ291bnQ6IG51bWJlcjtcbiAgICBVc2VyTWFya2V0aW5nQ29udGFjdHM6IG51bWJlcjtcbiAgICBXb3JrRmxvd0V4aXRlZENvdW50OiBudW1iZXI7XG4gIH1cblxuICBleHBvcnQgaW50ZXJmYWNlIEdFT1N0YXRpc3RpYyB7XG4gICAgQ2xpY2tlZENvdW50OiBudW1iZXI7XG4gICAgT3BlbmVkQ291bnQ6IG51bWJlcjtcbiAgICBDb3VudHJ5OiBzdHJpbmc7XG4gIH1cblxuICBleHBvcnQgaW50ZXJmYWNlIExpc3RSZWNpcGllbnRTdGF0aXN0aWM8RGF0YSA9IEFycmF5PHVua25vd24+PiB7XG4gICAgQmxvY2tlZENvdW50OiBudW1iZXI7XG4gICAgQm91bmNlZENvdW50OiBudW1iZXI7XG4gICAgQ2xpY2tlZENvdW50OiBudW1iZXI7XG4gICAgRGF0YTogRGF0YTtcbiAgICBEZWZlcnJlZENvdW50OiBudW1iZXI7XG4gICAgRGVsaXZlcmVkQ291bnQ6IG51bWJlcjtcbiAgICBIYXJkYm91bmNlZENvdW50OiBudW1iZXI7XG4gICAgTGFzdEFjdGl2aXR5QXQ6IHN0cmluZztcbiAgICBMaXN0UmVjaXBpZW50SUQ6IG51bWJlcjtcbiAgICBPcGVuZWRDb3VudDogbnVtYmVyO1xuICAgIFByZVF1ZXVlZENvdW50OiBudW1iZXI7XG4gICAgUHJvY2Vzc2VkQ291bnQ6IG51bWJlcjtcbiAgICBRdWV1ZWRDb3VudDogbnVtYmVyO1xuICAgIFNvZnRib3VuY2VkQ291bnQ6IG51bWJlcjtcbiAgICBTcGFtQ29tcGxhaW50Q291bnQ6IG51bWJlcjtcbiAgICBVbnN1YnNjcmliZWRDb3VudDogbnVtYmVyO1xuICAgIFdvcmtGbG93RXhpdGVkQ291bnQ6IG51bWJlcjtcbiAgfVxuXG4gIGV4cG9ydCBpbnRlcmZhY2UgU3RhdENvdW50ZXIge1xuICAgIEFQSUtleUlEOiBudW1iZXI7XG4gICAgRXZlbnRDbGlja0RlbGF5OiBudW1iZXI7XG4gICAgRXZlbnRDbGlja2VkQ291bnQ6IG51bWJlcjtcbiAgICBFdmVudE9wZW5EZWxheTogbnVtYmVyO1xuICAgIEV2ZW50T3BlbmVkQ291bnQ6IG51bWJlcjtcbiAgICBFdmVudFNwYW1Db3VudDogbnVtYmVyO1xuICAgIEV2ZW50VW5zdWJzY3JpYmVkQ291bnQ6IG51bWJlcjtcbiAgICBFdmVudFdvcmtmbG93RXhpdGVkQ291bnQ6IG51bWJlcjtcbiAgICBNZXNzYWdlQmxvY2tlZENvdW50OiBudW1iZXI7XG4gICAgTWVzc2FnZUNsaWNrZWRDb3VudDogbnVtYmVyO1xuICAgIE1lc3NhZ2VEZWZlcnJlZENvdW50OiBudW1iZXI7XG4gICAgTWVzc2FnZUhhcmRCb3VuY2VkQ291bnQ6IG51bWJlcjtcbiAgICBNZXNzYWdlT3BlbmVkQ291bnQ6IG51bWJlcjtcbiAgICBNZXNzYWdlUXVldWVkQ291bnQ6IG51bWJlcjtcbiAgICBNZXNzYWdlU2VudENvdW50OiBudW1iZXI7XG4gICAgTWVzc2FnZVNvZnRCb3VuY2VkQ291bnQ6IG51bWJlcjtcbiAgICBNZXNzYWdlU3BhbUNvdW50OiBudW1iZXI7XG4gICAgTWVzc2FnZVVuc3Vic2NyaWJlZENvdW50OiBudW1iZXI7XG4gICAgTWVzc2FnZVdvcmtGbG93RXhpdGVkQ291bnQ6IG51bWJlcjtcbiAgICBTb3VyY2VJRDogbnVtYmVyO1xuICAgIFRpbWVzbGljZTogc3RyaW5nO1xuICAgIFRvdGFsOiBudW1iZXI7XG4gIH1cblxuICBleHBvcnQgaW50ZXJmYWNlIExpbmtDbGlja1N0YXRpc3RpYyB7XG4gICAgQ2xpY2tlZEV2ZW50c0NvdW50OiBudW1iZXI7XG4gICAgQ2xpY2tlZE1lc3NhZ2VzQ291bnQ6IG51bWJlcjtcbiAgICBQb3NpdGlvbkluZGV4OiBudW1iZXI7XG4gICAgVVJMOiBzdHJpbmc7XG4gIH1cblxuICBleHBvcnQgaW50ZXJmYWNlIFJlY2lwaWVudEVTUFN0YXRpc3RpYyB7XG4gICAgQXR0ZW1wdGVkTWVzc2FnZXNDb3VudD86IG51bWJlcjtcbiAgICBDbGlja2VkTWVzc2FnZXNDb3VudD86IG51bWJlcjtcbiAgICBEZWZlcnJlZE1lc3NhZ2VzQ291bnQ/OiBudW1iZXI7XG4gICAgRGVsaXZlcmVkTWVzc2FnZXNDb3VudD86IG51bWJlcjtcbiAgICBIYXJkQm91bmNlZE1lc3NhZ2VzQ291bnQ/OiBudW1iZXI7XG4gICAgRVNQTmFtZT86IHN0cmluZztcbiAgICBPcGVuZWRNZXNzYWdlc0NvdW50PzogbnVtYmVyO1xuICAgIFNvZnRCb3VuY2VkTWVzc2FnZXNDb3VudD86IG51bWJlcjtcbiAgICBTcGFtUmVwb3J0c0NvdW50PzogbnVtYmVyO1xuICAgIFVuc3Vic2NyaWJlZE1lc3NhZ2VzQ291bnQ/OiBudW1iZXI7XG4gICAgT3BlblJhdGU/OiBudW1iZXI7XG4gICAgQ2xpY2tUaHJvdWdoUmF0ZT86IG51bWJlcjtcbiAgICBTb2Z0Qm91bmNlZFJhdGU/OiBudW1iZXI7XG4gICAgSGFyZEJvdW5jZWRSYXRlPzogbnVtYmVyO1xuICAgIFVuc3Vic2NyaWJlZFJhdGU/OiBudW1iZXI7XG4gICAgU3BhbVJlcG9ydHNSYXRlPzogbnVtYmVyO1xuICAgIERlZmVycmVkUmF0ZT86IG51bWJlcjtcbiAgfVxuXG4gIGV4cG9ydCBpbnRlcmZhY2UgVG9wTGlua0NsaWNrZWQge1xuICAgIENsaWNrZWRDb3VudDogbnVtYmVyO1xuICAgIExpbmtJZDogbnVtYmVyO1xuICAgIFVybDogc3RyaW5nO1xuICB9XG5cbiAgZXhwb3J0IGludGVyZmFjZSBVc2VyQWdlbnRTdGF0aXN0aWMge1xuICAgIENvdW50OiBudW1iZXI7XG4gICAgRGlzdGluY3RDb3VudDogbnVtYmVyO1xuICAgIFBsYXRmb3JtOiBzdHJpbmc7XG4gICAgVXNlckFnZW50OiBzdHJpbmc7XG4gIH1cblxuICAvLyBSRVFVRVNUIFBBUlRcbiAgZXhwb3J0IHR5cGUgR2V0Q2FtcGFpZ25PdmVydmlld1F1ZXJ5UGFyYW1zID0gUGFydGlhbDxDb21tb24uUGFnaW5hdGlvbj4gJiB7XG4gICAgQWxsPzogYm9vbGVhbjtcbiAgICBBcmNoaXZlZD86IGJvb2xlYW47XG4gICAgRHJhZnRzPzogYm9vbGVhbjtcbiAgICBJRD86IG51bWJlcjtcbiAgICBJRFR5cGU/OiBDYW1wYWlnbk92ZXJ2aWV3SURUeXBlO1xuICAgIFByb2dyYW1tZWQ/OiBib29sZWFuO1xuICAgIFNlbnQ/OiBib29sZWFuO1xuICAgIFN0YXJyZWQ/OiBib29sZWFuO1xuICAgIFN1YmplY3Q/OiBzdHJpbmc7XG4gIH1cblxuICBleHBvcnQgdHlwZSBHZXRDb250YWN0U3RhdGlzdGljc1F1ZXJ5UGFyYW1zID0gUGFydGlhbDxDb21tb24uUGFnaW5hdGlvbj4gJiB7XG4gICAgQmxvY2tlZD86IGJvb2xlYW47XG4gICAgQm91bmNlZD86IGJvb2xlYW47XG4gICAgQ2xpY2s/OiBib29sZWFuO1xuICAgIERlZmVycmVkPzogYm9vbGVhbjtcbiAgICBIYXJkYm91bmNlZD86IGJvb2xlYW47XG4gICAgTGFzdEFjdGl2aXR5QXQ/OiBzdHJpbmc7XG4gICAgTWF4TGFzdEFjdGl2aXR5QXQ/OiBzdHJpbmc7XG4gICAgTWluTGFzdEFjdGl2aXR5QXQ/OiBzdHJpbmc7XG4gICAgT3Blbj86IGJvb2xlYW47XG4gICAgUXVldWVkPzogYm9vbGVhbjtcbiAgICBTZW50PzogYm9vbGVhbjtcbiAgICBTcGFtPzogYm9vbGVhbjtcbiAgICBTb2Z0Ym91bmNlZD86IGJvb2xlYW47XG4gICAgVW5zdWJzY3JpYmVkPzogYm9vbGVhbjtcbiAgfVxuXG4gIGV4cG9ydCB0eXBlIEdldEdFT1N0YXRpc3RpY3NRdWVyeVBhcmFtcyA9IFBhcnRpYWw8Q29tbW9uLlRpbWVzdGFtcFBlcmlvZD4gJlxuICAgIFBhcnRpYWw8Q29tbW9uLlBhZ2luYXRpb24+ICZcbiAge1xuICAgIENhbXBhaWduSUQ/OiBudW1iZXI7XG4gICAgQ29udGFjdHNMaXN0PzogbnVtYmVyO1xuICAgIEN1c3RvbUNhbXBhaWduPzogc3RyaW5nO1xuICAgIEZyb20/OiBzdHJpbmc7XG4gICAgRnJvbURvbWFpbj86IHN0cmluZztcbiAgICBGcm9tSUQ/OiBudW1iZXI7XG4gICAgRnJvbVR5cGU/OiBNZXNzYWdlLkZyb21UeXBlO1xuICAgIElzRGVsZXRlZD86IGJvb2xlYW47XG4gICAgSXNOZXdzbGV0dGVyVG9vbD86IGJvb2xlYW47XG4gICAgSXNTdGFycmVkPzogYm9vbGVhbjtcbiAgICBNZXNzYWdlU3RhdHVzPzogTWVzc2FnZS5NZXNzYWdlU3RhdHVzO1xuICAgIFBlcmlvZD86IENvbW1vbi5QZXJpb2Q7XG4gIH1cblxuICBleHBvcnQgdHlwZSBHZXRMaXN0UmVjaXBpZW50U3RhdGlzdGljc1F1ZXJ5UGFyYW1zID0gUGFydGlhbDxDb21tb24uUGFnaW5hdGlvbj4gJiB7XG4gICAgQmxvY2tlZD86IGJvb2xlYW47XG4gICAgQm91bmNlZD86IGJvb2xlYW47XG4gICAgQ2xpY2s/OiBib29sZWFuO1xuICAgIENvbnRhY3Q/OiBudW1iZXI7XG4gICAgQ29udGFjdHNMaXN0PzogbnVtYmVyO1xuICAgIElzRXhjbHVkZWRGcm9tQ2FtcGFpZ25zPzogYm9vbGVhbjtcbiAgICBJc1Vuc3Vic2NyaWJlZD86IGJvb2xlYW47XG4gICAgTGFzdEFjdGl2aXR5QXQ/OiBzdHJpbmc7XG4gICAgTWF4TGFzdEFjdGl2aXR5QXQ/OiBzdHJpbmc7XG4gICAgTWluTGFzdEFjdGl2aXR5QXQ/OiBzdHJpbmc7XG4gICAgTWF4VW5zdWJzY3JpYmVkQXQ/OiBzdHJpbmc7XG4gICAgTWluVW5zdWJzY3JpYmVkQXQ/OiBzdHJpbmc7XG4gICAgT3Blbj86IGJvb2xlYW47XG4gICAgUXVldWVkPzogYm9vbGVhbjtcbiAgICBTZW50PzogYm9vbGVhbjtcbiAgICBTaG93RXh0cmFEYXRhPzogYm9vbGVhbjtcbiAgICBTcGFtPzogYm9vbGVhbjtcbiAgICBUaW1lWm9uZT86IHN0cmluZztcbiAgICBVbnN1YnNjcmliZWQ/OiBib29sZWFuO1xuICB9XG5cbiAgZXhwb3J0IHR5cGUgR2V0U3RhdENvdW50ZXJzUXVlcnlQYXJhbXMgPSBQYXJ0aWFsPENvbW1vbi5UaW1lc3RhbXBQZXJpb2Q+ICZcbiAgICBQYXJ0aWFsPENvbW1vbi5QYWdpbmF0aW9uPiAmXG4gIHtcbiAgICBDb3VudGVyU291cmNlOiBDb3VudGVyU291cmNlO1xuICAgIENvdW50ZXJSZXNvbHV0aW9uOiBDb3VudGVyUmVzb2x1dGlvbjtcbiAgICBDb3VudGVyVGltaW5nOiBDb3VudGVyVGltaW5nO1xuICAgIFNvdXJjZUlEPzogbnVtYmVyO1xuICB9XG5cbiAgZXhwb3J0IHR5cGUgR2V0TGlua0NsaWNrU3RhdGlzdGljc1F1ZXJ5UGFyYW1zID0gUGFydGlhbDxDb21tb24uUGFnaW5hdGlvbj4gJiB7XG4gICAgQ2FtcGFpZ25JRDogbnVtYmVyO1xuICB9XG5cbiAgZXhwb3J0IHR5cGUgR2V0UmVjaXBpZW50RVNQU3RhdGlzdGljc1F1ZXJ5UGFyYW1zID0gR2V0TGlua0NsaWNrU3RhdGlzdGljc1F1ZXJ5UGFyYW1zICZcbiAge1xuICAgIEVTUF9OYW1lPzogbnVtYmVyO1xuICB9XG5cbiAgZXhwb3J0IHR5cGUgR2V0VG9wTGlua0NsaWNrZWRRdWVyeVBhcmFtcyA9IFBhcnRpYWw8Q29tbW9uLlRpbWVzdGFtcFBlcmlvZD4gJlxuICAgIFBhcnRpYWw8Q29tbW9uLlBhZ2luYXRpb24+ICZcbiAge1xuICAgIEFjdHVhbENsaWNrcz86IGJvb2xlYW47XG4gICAgQ2FtcGFpZ25JRD86IG51bWJlcjtcbiAgICBDb250YWN0PzogbnVtYmVyO1xuICAgIENvbnRhY3RzTGlzdD86IG51bWJlcjtcbiAgICBDdXN0b21DYW1wYWlnbj86IHN0cmluZztcbiAgICBGcm9tPzogc3RyaW5nO1xuICAgIEZyb21Eb21haW4/OiBzdHJpbmc7XG4gICAgRnJvbUlEPzogbnVtYmVyO1xuICAgIEZyb21UeXBlPzogTWVzc2FnZS5Gcm9tVHlwZTtcbiAgICBJc0RlbGV0ZWQ/OiBib29sZWFuO1xuICAgIElzTmV3c2xldHRlclRvb2w/OiBib29sZWFuO1xuICAgIElzU3RhcnJlZD86IGJvb2xlYW47XG4gICAgTWVzc2FnZT86IG51bWJlcjtcbiAgICBQZXJpb2Q/OiBDb21tb24uUGVyaW9kO1xuICB9XG5cbiAgZXhwb3J0IHR5cGUgR2V0VXNlckFnZW50U3RhdGlzdGljc1F1ZXJ5UGFyYW1zID0gUGFydGlhbDxDb21tb24uVGltZXN0YW1wUGVyaW9kPiAmXG4gICAgUGFydGlhbDxDb21tb24uUGFnaW5hdGlvbj4gJlxuICB7XG4gICAgQ2FtcGFpZ25JRD86IG51bWJlcjtcbiAgICBDb250YWN0c0xpc3Q/OiBudW1iZXI7XG4gICAgQ3VzdG9tQ2FtcGFpZ24/OiBzdHJpbmc7XG4gICAgRXZlbnQ/OiBFbWFpbEV2ZW50O1xuICAgIEV4Y2x1ZGVQbGF0Zm9ybT86IHN0cmluZztcbiAgICBGcm9tPzogc3RyaW5nO1xuICAgIEZyb21Eb21haW4/OiBzdHJpbmc7XG4gICAgRnJvbUlEPzogbnVtYmVyO1xuICAgIEZyb21UeXBlPzogTWVzc2FnZS5Gcm9tVHlwZTtcbiAgICBJc0RlbGV0ZWQ/OiBib29sZWFuO1xuICAgIElzTmV3c2xldHRlclRvb2w/OiBib29sZWFuO1xuICAgIElzU3RhcnJlZD86IGJvb2xlYW47XG4gICAgUGVyaW9kPzogQ29tbW9uLlBlcmlvZDtcbiAgICBQbGF0Zm9ybT86IHN0cmluZztcbiAgfVxuXG4gIC8vIFJFU1BPTlNFIFBBUlRcbiAgZXhwb3J0IHR5cGUgR2V0Q2FtcGFpZ25PdmVydmlld1Jlc3BvbnNlID0gQ29tbW9uLlJlc3BvbnNlPENhbXBhaWduT3ZlcnZpZXdbXT47XG5cbiAgZXhwb3J0IHR5cGUgR2V0Q29udGFjdFN0YXRpc3RpY3NSZXNwb25zZSA9IENvbW1vbi5SZXNwb25zZTxDb250YWN0U3RhdGlzdGljW10+O1xuXG4gIGV4cG9ydCB0eXBlIEdldEdFT1N0YXRpc3RpY3NSZXNwb25zZSA9IENvbW1vbi5SZXNwb25zZTxHRU9TdGF0aXN0aWNbXT47XG5cbiAgZXhwb3J0IHR5cGUgR2V0TGlzdFJlY2lwaWVudFN0YXRpc3RpY3NSZXNwb25zZTxEYXRhID0gQXJyYXk8dW5rbm93bj4+ID1cbiAgICBDb21tb24uUmVzcG9uc2U8QXJyYXk8TGlzdFJlY2lwaWVudFN0YXRpc3RpYzxEYXRhPj4+O1xuXG4gIGV4cG9ydCB0eXBlIEdldFN0YXRDb3VudGVyc1Jlc3BvbnNlID0gQ29tbW9uLlJlc3BvbnNlPFN0YXRDb3VudGVyW10+O1xuXG4gIGV4cG9ydCB0eXBlIEdldExpbmtDbGlja1N0YXRpc3RpY3NSZXNwb25zZSA9IENvbW1vbi5SZXNwb25zZTxMaW5rQ2xpY2tTdGF0aXN0aWNbXT47XG5cbiAgZXhwb3J0IHR5cGUgR2V0UmVjaXBpZW50RVNQU3RhdGlzdGljc1Jlc3BvbnNlID0gQ29tbW9uLlJlc3BvbnNlPFJlY2lwaWVudEVTUFN0YXRpc3RpY1tdPjtcblxuICBleHBvcnQgdHlwZSBHZXRUb3BMaW5rQ2xpY2tlZFJlc3BvbnNlID0gQ29tbW9uLlJlc3BvbnNlPFRvcExpbmtDbGlja2VkW10+O1xuXG4gIGV4cG9ydCB0eXBlIEdldFVzZXJBZ2VudFN0YXRpc3RpY3NSZXNwb25zZSA9IENvbW1vbi5SZXNwb25zZTxVc2VyQWdlbnRTdGF0aXN0aWNbXT47XG59XG4iLCJpbXBvcnQgeyBDb21tb24gfSBmcm9tICcuL0NvbW1vbic7XG5cbmV4cG9ydCBuYW1lc3BhY2UgVGVtcGxhdGUge1xuICBleHBvcnQgZW51bSBDYXRlZ29yaWVzIHtcbiAgICBGdWxsID0gJ2Z1bGwnLFxuICAgIEJhc2ljID0gJ2Jhc2ljJyxcbiAgICBOZXdzTGV0dGVyID0gJ25ld3NsZXR0ZXInLFxuICAgIEVDb21tZXJjZSA9ICdlLWNvbW1lcmNlJyxcbiAgICBFdmVudHMgPSAnZXZlbnRzJyxcbiAgICBUcmF2ZWwgPSAndHJhdmVsJyxcbiAgICBTcG9ydHMgPSAnc3BvcnRzJyxcbiAgICBXZWxjb21lID0gJ3dlbGNvbWUnLFxuICAgIENvbnRhY3RQcm9wZXJ0eVVwZGF0ZSA9ICdjb250YWN0LXByb3BlcnR5LXVwZGF0ZScsXG4gICAgU3VwcG9ydCA9ICdzdXBwb3J0JyxcbiAgICBJbnZvaWNlID0gJ2ludm9pY2UnLFxuICAgIEFubml2ZXJzYXJ5ID0gJ2Fubml2ZXJzYXJ5JyxcbiAgICBBY2NvdW50ID0gJ2FjY291bnQnLFxuICAgIEFjdGl2YXRpb24gPSAnYWN0aXZhdGlvbidcbiAgfVxuXG4gIGV4cG9ydCBlbnVtIENhdGVnb3JpZXNTZWxlY3Rpb25NZXRob2Qge1xuICAgIENvbnRhaW5zQW55ID0gJ2NvbnRhaW5zYW55JyxcbiAgICBDb250YWluc0FsbCA9ICdjb250YWluc2FsbCcsXG4gICAgSXNTdWJTZXQgPSAnaXNzdWJzZXQnXG4gIH1cblxuICBleHBvcnQgZW51bSBFZGl0TW9kZSB7XG4gICAgRHJhZ0FuZERyb3BCdWlsZGVyID0gMSxcbiAgICBIVE1MQnVpbGRlciA9IDIsXG4gICAgU2F2ZWRTZWN0aW9uQnVpbGRlciA9IDMsXG4gICAgTUpNTEJ1aWxkZXIgPSA0XG4gIH1cblxuICBleHBvcnQgZW51bSBPd25lclR5cGUge1xuICAgIEFwaUtleSA9ICdhcGlrZXknLFxuICAgIFVzZXIgPSAndXNlcicsXG4gICAgR2xvYmFsID0gJ2dsb2JhbCdcbiAgfVxuXG4gIGV4cG9ydCBlbnVtIFB1cnBvc2VzIHtcbiAgICBNYXJrZXRpbmcgPSAnbWFya2V0aW5nJyxcbiAgICBUcmFuc2FjdGlvbmFsID0gJ3RyYW5zYWN0aW9uYWwnLFxuICAgIEF1dG9tYXRpb24gPSAnYXV0b21hdGlvbidcbiAgfVxuXG4gIGV4cG9ydCBlbnVtIFB1cnBvc2VzU2VsZWN0aW9uTWV0aG9kIHtcbiAgICBDb250YWluc0FueSA9ICdjb250YWluc2FueScsXG4gICAgQ29udGFpbnNBbGwgPSAnY29udGFpbnNhbGwnLFxuICAgIElzU3ViU2V0ID0gJ2lzc3Vic2V0J1xuICB9XG5cbiAgZXhwb3J0IGludGVyZmFjZSBIZWFkZXJzIHtcbiAgICBGcm9tOiBzdHJpbmc7XG4gICAgU3ViamVjdDogc3RyaW5nO1xuICAgICdSZXBseS10byc6IHN0cmluZztcbiAgfVxuXG4gIGV4cG9ydCBpbnRlcmZhY2UgVGVtcGxhdGUge1xuICAgIEF1dGhvcjogc3RyaW5nO1xuICAgIENhdGVnb3JpZXM6IENhdGVnb3JpZXM7XG4gICAgQ29weXJpZ2h0OiBzdHJpbmc7XG4gICAgRGVzY3JpcHRpb246IHN0cmluZztcbiAgICBFZGl0TW9kZTogRWRpdE1vZGU7XG4gICAgSXNTdGFycmVkOiBib29sZWFuO1xuICAgIElzVGV4dFBhcnRHZW5lcmF0aW9uRW5hYmxlZDogYm9vbGVhbjtcbiAgICBMb2NhbGU6IHN0cmluZztcbiAgICBOYW1lOiBzdHJpbmc7XG4gICAgT3duZXJUeXBlOiBPd25lclR5cGU7XG4gICAgUHJlc2V0czogc3RyaW5nO1xuICAgIFB1cnBvc2VzOiBQdXJwb3NlcztcbiAgICBJRDogbnVtYmVyO1xuICAgIE93bmVySWQ6IG51bWJlcjtcbiAgICBQcmV2aWV3czogc3RyaW5nO1xuICAgIENyZWF0ZWRBdDogc3RyaW5nO1xuICAgIExhc3RVcGRhdGVkQXQ6IHN0cmluZztcbiAgfVxuXG4gIGV4cG9ydCB0eXBlIFRlbXBsYXRlRGV0YWlsQ29udGVudCA9IHtcbiAgICBIZWFkZXJzOiBIZWFkZXJzO1xuICAgICdIdG1sLXBhcnQnOiBzdHJpbmc7XG4gICAgJ1RleHQtcGFydCc6IHN0cmluZztcbiAgICBNSk1MQ29udGVudDogc3RyaW5nO1xuICB9XG5cbiAgLy8gUkVRVUVTVCBQQVJUXG4gIGV4cG9ydCB0eXBlIFBvc3RUZW1wbGF0ZUJvZHkgPVxuICAgIFBhcnRpYWw8T21pdDxUZW1wbGF0ZSwgJ05hbWUnIHwgJ0lEJyB8ICdPd25lcklkJyB8ICdQcmV2aWV3cycgfCAnQ3JlYXRlZEF0JyB8ICdMYXN0VXBkYXRlZEF0Jz4+ICZcbiAge1xuICAgIE5hbWU6IHN0cmluZztcbiAgfVxuXG4gIGV4cG9ydCB0eXBlIFB1dFRlbXBsYXRlQm9keSA9IFBhcnRpYWw8UG9zdFRlbXBsYXRlQm9keT5cblxuICBleHBvcnQgdHlwZSBHZXRUZW1wbGF0ZVF1ZXJ5UGFyYW1zID0gUGFydGlhbDxDb21tb24uUGFnaW5hdGlvbj4gJiB7XG4gICAgQ2F0ZWdvcmllcz86IHN0cmluZztcbiAgICBDYXRlZ29yaWVzU2VsZWN0aW9uTWV0aG9kPzogQ2F0ZWdvcmllc1NlbGVjdGlvbk1ldGhvZDtcbiAgICBFZGl0TW9kZT86IEVkaXRNb2RlO1xuICAgIE5hbWU/OiBzdHJpbmc7XG4gICAgT3duZXJUeXBlPzogT3duZXJUeXBlO1xuICAgIFB1cnBvc2VzPzogUHVycG9zZXM7XG4gICAgUHVycG9zZXNTZWxlY3Rpb25NZXRob2Q/OiBQdXJwb3Nlc1NlbGVjdGlvbk1ldGhvZDtcbiAgfVxuXG4gIGV4cG9ydCB0eXBlIFBvc3RUZW1wbGF0ZURldGFpbENvbnRlbnRCb2R5ID1cbiAgICBQYXJ0aWFsPE9taXQ8VGVtcGxhdGVEZXRhaWxDb250ZW50LCAnSGVhZGVycyc+PiAmXG4gIHtcbiAgICBIZWFkZXJzPzogUGFydGlhbDxIZWFkZXJzPjtcbiAgfVxuXG4gIGV4cG9ydCB0eXBlIFB1dFRlbXBsYXRlRGV0YWlsQ29udGVudEJvZHkgPSBQb3N0VGVtcGxhdGVEZXRhaWxDb250ZW50Qm9keVxuXG4gIC8vIFJFU1BPTlNFIFBBUlRcbiAgdHlwZSBUZW1wbGF0ZVJlc3BvbnNlID0gQ29tbW9uLlJlc3BvbnNlPFRlbXBsYXRlW10+O1xuICB0eXBlIFRlbXBsYXRlRGV0YWlsQ29udGVudFJlc3BvbnNlID0gQ29tbW9uLlJlc3BvbnNlPFRlbXBsYXRlRGV0YWlsQ29udGVudFtdPjtcblxuICBleHBvcnQgdHlwZSBQb3N0VGVtcGxhdGVSZXNwb25zZSA9IFRlbXBsYXRlUmVzcG9uc2VcbiAgZXhwb3J0IHR5cGUgUHV0VGVtcGxhdGVSZXNwb25zZSA9IFRlbXBsYXRlUmVzcG9uc2VcbiAgZXhwb3J0IHR5cGUgR2V0VGVtcGxhdGVSZXNwb25zZSA9IFRlbXBsYXRlUmVzcG9uc2VcblxuICBleHBvcnQgdHlwZSBQb3N0VGVtcGxhdGVEZXRhaWxDb250ZW50UmVzcG9uc2UgPSBUZW1wbGF0ZURldGFpbENvbnRlbnRSZXNwb25zZVxuICBleHBvcnQgdHlwZSBQdXRUZW1wbGF0ZURldGFpbENvbnRlbnRSZXNwb25zZSA9IFRlbXBsYXRlRGV0YWlsQ29udGVudFJlc3BvbnNlXG4gIGV4cG9ydCB0eXBlIEdldFRlbXBsYXRlRGV0YWlsQ29udGVudFJlc3BvbnNlID0gVGVtcGxhdGVEZXRhaWxDb250ZW50UmVzcG9uc2Vcbn1cbiIsImltcG9ydCB7IENvbW1vbiB9IGZyb20gJy4vQ29tbW9uJztcblxuZXhwb3J0IG5hbWVzcGFjZSBXZWJob29rIHtcbiAgZXhwb3J0IGVudW0gRXZlbnRUeXBlIHtcbiAgICBPcGVuID0gJ29wZW4nLFxuICAgIENsaWNrID0gJ2NsaWNrJyxcbiAgICBCb3VuY2UgPSAnYm91bmNlJyxcbiAgICBTcGFtID0gJ3NwYW0nLFxuICAgIEJsb2NrZWQgPSAnYmxvY2tlZCcsXG4gICAgVW5TdWIgPSAndW5zdWInLFxuICAgIFNlbnQgPSAnc2VudCcsXG4gIH1cblxuICBleHBvcnQgZW51bSBFdmVudFR5cGVWYWx1ZSB7XG4gICAgQ2xpY2sgPSAxLFxuICAgIEJvdW5jZSA9IDIsXG4gICAgU3BhbSA9IDMsXG4gICAgQmxvY2tlZCA9IDQsXG4gICAgVW5zdWJzY3JpYmUgPSA1LFxuICAgIE9wZW4gPSA2LFxuICAgIFNlbnQgPSA3LFxuICB9XG5cbiAgZXhwb3J0IGVudW0gU3RhdHVzIHtcbiAgICBEZWFkID0gJ2RlYWQnLFxuICAgIEFsaXZlID0gJ2FsaXZlJ1xuICB9XG5cbiAgZXhwb3J0IHR5cGUgVmVyc2lvbiA9IDEgfCAyO1xuXG4gIGV4cG9ydCBpbnRlcmZhY2UgRXZlbnRDYWxsYmFja1VybCB7XG4gICAgSUQ6IG51bWJlcjtcbiAgICBFdmVudFR5cGU6IEV2ZW50VHlwZTtcbiAgICBJc0JhY2t1cDogYm9vbGVhbjtcbiAgICBTdGF0dXM6IFN0YXR1cztcbiAgICBBUElLZXlJRDogbnVtYmVyO1xuICAgIFZlcnNpb246IFZlcnNpb247XG4gICAgVXJsOiBzdHJpbmc7XG4gIH1cblxuICAvLyBSRVFVRVNUIFBBUlRcbiAgZXhwb3J0IHR5cGUgUG9zdEV2ZW50Q2FsbGJhY2tVcmxCb2R5ID0ge1xuICAgIFVybDogc3RyaW5nO1xuICAgIEV2ZW50VHlwZT86IEV2ZW50VHlwZTtcbiAgICBJc0JhY2t1cD86IGJvb2xlYW47XG4gICAgU3RhdHVzPzogU3RhdHVzO1xuICB9XG5cbiAgZXhwb3J0IHR5cGUgUHV0RXZlbnRDYWxsYmFja1VybEJvZHkgPSBQYXJ0aWFsPFBvc3RFdmVudENhbGxiYWNrVXJsQm9keT5cblxuICBleHBvcnQgdHlwZSBHZXRFdmVudENhbGxiYWNrVXJsUXVlcnlQYXJhbXMgPSBQYXJ0aWFsPENvbW1vbi5QYWdpbmF0aW9uPiAmIHtcbiAgICBCYWNrdXA/OiBib29sZWFuO1xuICAgIEV2ZW50VHlwZT86IEV2ZW50VHlwZVZhbHVlO1xuICAgIFN0YXR1cz86IHN0cmluZztcbiAgICBWZXJzaW9uPzogVmVyc2lvbjtcbiAgfVxuXG4gIC8vIFJFU1BPTlNFIFBBUlRcbiAgdHlwZSBFdmVudENhbGxiYWNrVXJsUmVzcG9uc2UgPSB7XG4gICAgQ291bnQ6IG51bWJlcjtcbiAgICBUb3RhbDogbnVtYmVyO1xuICAgIERhdGE6IEV2ZW50Q2FsbGJhY2tVcmxbXTtcbiAgfTtcblxuICBleHBvcnQgdHlwZSBQb3N0RXZlbnRDYWxsYmFja1VybFJlc3BvbnNlID0gRXZlbnRDYWxsYmFja1VybFJlc3BvbnNlXG4gIGV4cG9ydCB0eXBlIFB1dEV2ZW50Q2FsbGJhY2tVcmxSZXNwb25zZSA9IEV2ZW50Q2FsbGJhY2tVcmxSZXNwb25zZVxuICBleHBvcnQgdHlwZSBHZXRFdmVudENhbGxiYWNrVXJsUmVzcG9uc2UgPSBFdmVudENhbGxiYWNrVXJsUmVzcG9uc2Vcbn1cbiIsIi8vIENPTU1PTlxuZXhwb3J0IHsgTGlicmFyeVJlc3BvbnNlLCBMaWJyYXJ5TG9jYWxSZXNwb25zZSB9IGZyb20gJy4vTGlicmFyeVJlc3BvbnNlJztcbmV4cG9ydCB7IENvbW1vbiB9IGZyb20gJy4vQ29tbW9uJztcblxuLy8gU0VORFxuZXhwb3J0IHtcbiAgU2VuZEVtYWlsVjMsXG4gIFNlbmRFbWFpbFYzXzEsXG59IGZyb20gJy4vU2VuZEVtYWlsJztcblxuLy8gQVBJXG5leHBvcnQgeyBNZXNzYWdlIH0gZnJvbSAnLi9NZXNzYWdlJztcbmV4cG9ydCB7XG4gIENvbnRhY3QsXG4gIENvbnRhY3RMaXN0LFxuICBCdWxrQ29udGFjdE1hbmFnZW1lbnQsXG4gIENvbnRhY3RQcm9wZXJ0aWVzLFxuICBDb250YWN0U3Vic2NyaXB0aW9uLFxuICBDb250YWN0VmVyaWZpY2F0aW9uLFxufSBmcm9tICcuL0NvbnRhY3QnO1xuZXhwb3J0IHtcbiAgRHJhZnRDYW1wYWlnbixcbiAgU2VudENhbXBhaWduLFxufSBmcm9tICcuL0NhbXBhaWduJztcbmV4cG9ydCB7IFNlZ21lbnRhdGlvbiB9IGZyb20gJy4vU2VnbWVudGF0aW9uJztcbmV4cG9ydCB7IFRlbXBsYXRlIH0gZnJvbSAnLi9UZW1wbGF0ZSc7XG5leHBvcnQgeyBTdGF0aXN0aWMgfSBmcm9tICcuL1N0YXRpc3RpYyc7XG5leHBvcnQgeyBNZXNzYWdlRXZlbnQgfSBmcm9tICcuL01lc3NhZ2VFdmVudCc7XG5leHBvcnQgeyBXZWJob29rIH0gZnJvbSAnLi9XZWJob29rJztcbmV4cG9ydCB7IFBhcnNlIH0gZnJvbSAnLi9QYXJzZSc7XG5leHBvcnQge1xuICBTZW5kZXIsXG4gIE1ldGFzZW5kZXIsXG4gIEROUyxcbn0gZnJvbSAnLi9TZW5kZXJBZGRyZXNzQW5kRG9tYWluJztcbmV4cG9ydCB7XG4gIEFQSUtleUNvbmZpZ3VyYXRpb24sXG4gIEFjY291bnRTZXR0aW5nLFxufSBmcm9tICcuL1NldHRpbmcnO1xuXG4vLyBTTVNcbmV4cG9ydCB7IFNlbmRNZXNzYWdlIH0gZnJvbSAnLi9TZW5kTWVzc2FnZSc7XG5leHBvcnQgeyBTTVNNZXNzYWdlIH0gZnJvbSAnLi9TTVNNZXNzYWdlJztcbiIsImltcG9ydCBpc05pbCBmcm9tICcuL2lzTmlsJztcbmltcG9ydCBpc051bGwgZnJvbSAnLi9pc051bGwnO1xuaW1wb3J0IGlzVW5kZWZpbmVkIGZyb20gJy4vaXNVbmRlZmluZWQnO1xuaW1wb3J0IGlzUHVyZU9iamVjdCBmcm9tICcuL2lzUHVyZU9iamVjdCc7XG5pbXBvcnQgc2V0VmFsdWVJZk5vdE5pbCBmcm9tICcuL3NldFZhbHVlSWZOb3ROaWwnO1xuXG5leHBvcnQge1xuICBpc05pbCxcbiAgaXNOdWxsLFxuICBpc1VuZGVmaW5lZCxcbiAgaXNQdXJlT2JqZWN0LFxuICBzZXRWYWx1ZUlmTm90TmlsLFxufTtcbiIsIi8qZXh0ZXJuYWwgbW9kdWxlcyovXG4vKnR5cGVzKi9cbi8qdXRpbHMqL1xuaW1wb3J0IGlzTnVsbCBmcm9tICcuL2lzTnVsbCc7XG5pbXBvcnQgaXNVbmRlZmluZWQgZnJvbSAnLi9pc1VuZGVmaW5lZCc7XG4vKmxpYiovXG4vKm90aGVyKi9cblxuZnVuY3Rpb24gaXNOaWwodmFsdWU6IHVua25vd24pOiBib29sZWFuIHtcbiAgcmV0dXJuIGlzVW5kZWZpbmVkKHZhbHVlKSB8fCBpc051bGwodmFsdWUpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBpc05pbDtcbiIsIi8qZXh0ZXJuYWwgbW9kdWxlcyovXG4vKnR5cGVzKi9cbi8qdXRpbHMqL1xuLypsaWIqL1xuLypvdGhlciovXG5cbmZ1bmN0aW9uIGlzTnVsbCh2YWx1ZTogdW5rbm93bik6IHZhbHVlIGlzIG51bGwge1xuICByZXR1cm4gdmFsdWUgPT09IG51bGw7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGlzTnVsbDtcbiIsIi8qZXh0ZXJuYWwgbW9kdWxlcyovXG4vKnR5cGVzKi9cbi8qdXRpbHMqL1xuLypsaWIqL1xuLypvdGhlciovXG5cbmZ1bmN0aW9uIGlzUHVyZU9iamVjdCh2YWx1ZTogdW5rbm93bik6IGJvb2xlYW4ge1xuICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0J1xuICAgICYmIHZhbHVlICE9PSBudWxsXG4gICAgJiYgKE9iamVjdC5nZXRQcm90b3R5cGVPZih2YWx1ZSkgPT09IE9iamVjdC5wcm90b3R5cGUgfHwgT2JqZWN0LmdldFByb3RvdHlwZU9mKHZhbHVlKSA9PT0gbnVsbCk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGlzUHVyZU9iamVjdDtcbiIsIi8qZXh0ZXJuYWwgbW9kdWxlcyovXG4vKnR5cGVzKi9cbi8qdXRpbHMqL1xuLypsaWIqL1xuLypvdGhlciovXG5cbmZ1bmN0aW9uIGlzVW5kZWZpbmVkKHZhbHVlOiB1bmtub3duKTogdmFsdWUgaXMgdW5kZWZpbmVkIHtcbiAgcmV0dXJuIHZhbHVlID09PSB1bmRlZmluZWQ7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGlzVW5kZWZpbmVkO1xuIiwiLypleHRlcm5hbCBtb2R1bGVzKi9cbi8qdHlwZXMqL1xuaW1wb3J0IHsgVE9iamVjdCB9IGZyb20gJy4uL3R5cGVzJztcbi8qdXRpbHMqL1xuaW1wb3J0IGlzTmlsIGZyb20gJy4vaXNOaWwnO1xuaW1wb3J0IGlzTnVsbCBmcm9tICcuL2lzTnVsbCc7XG4vKmxpYiovXG4vKm90aGVyKi9cblxuZnVuY3Rpb24gc2V0VmFsdWVJZk5vdE5pbChcbiAgdGFyZ2V0T2JqZWN0OiBUT2JqZWN0LlVua25vd25SZWMsXG4gIHBhdGg6IHN0cmluZyxcbiAgdmFsdWU6IHVua25vd24sXG4pOiB2b2lkIHtcbiAgaWYgKHR5cGVvZiB0YXJnZXRPYmplY3QgIT09ICdvYmplY3QnIHx8IGlzTnVsbCh0YXJnZXRPYmplY3QpKSB7XG4gICAgdGhyb3cgRXJyb3IoJ0FyZ3VtZW50IFwidGFyZ2V0T2JqZWN0XCIgaXMgbm90IG9iamVjdCcpO1xuICB9XG5cbiAgaWYgKCFwYXRoKSB7XG4gICAgdGhyb3cgRXJyb3IoJ0FyZ3VtZW50IFwicGF0aFwiIGlzIHJlcXVpcmVkJyk7XG4gIH1cblxuICBpZiAoIWlzTmlsKHZhbHVlKSkge1xuICAgIHRhcmdldE9iamVjdFtwYXRoXSA9IHZhbHVlO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IHNldFZhbHVlSWZOb3ROaWw7XG4iLCI7KGZ1bmN0aW9uIChnbG9iYWxPYmplY3QpIHtcclxuICAndXNlIHN0cmljdCc7XHJcblxyXG4vKlxyXG4gKiAgICAgIGJpZ251bWJlci5qcyB2OS4wLjFcclxuICogICAgICBBIEphdmFTY3JpcHQgbGlicmFyeSBmb3IgYXJiaXRyYXJ5LXByZWNpc2lvbiBhcml0aG1ldGljLlxyXG4gKiAgICAgIGh0dHBzOi8vZ2l0aHViLmNvbS9NaWtlTWNsL2JpZ251bWJlci5qc1xyXG4gKiAgICAgIENvcHlyaWdodCAoYykgMjAyMCBNaWNoYWVsIE1jbGF1Z2hsaW4gPE04Y2g4OGxAZ21haWwuY29tPlxyXG4gKiAgICAgIE1JVCBMaWNlbnNlZC5cclxuICpcclxuICogICAgICBCaWdOdW1iZXIucHJvdG90eXBlIG1ldGhvZHMgICAgIHwgIEJpZ051bWJlciBtZXRob2RzXHJcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XHJcbiAqICAgICAgYWJzb2x1dGVWYWx1ZSAgICAgICAgICAgIGFicyAgICB8ICBjbG9uZVxyXG4gKiAgICAgIGNvbXBhcmVkVG8gICAgICAgICAgICAgICAgICAgICAgfCAgY29uZmlnICAgICAgICAgICAgICAgc2V0XHJcbiAqICAgICAgZGVjaW1hbFBsYWNlcyAgICAgICAgICAgIGRwICAgICB8ICAgICAgREVDSU1BTF9QTEFDRVNcclxuICogICAgICBkaXZpZGVkQnkgICAgICAgICAgICAgICAgZGl2ICAgIHwgICAgICBST1VORElOR19NT0RFXHJcbiAqICAgICAgZGl2aWRlZFRvSW50ZWdlckJ5ICAgICAgIGlkaXYgICB8ICAgICAgRVhQT05FTlRJQUxfQVRcclxuICogICAgICBleHBvbmVudGlhdGVkQnkgICAgICAgICAgcG93ICAgIHwgICAgICBSQU5HRVxyXG4gKiAgICAgIGludGVnZXJWYWx1ZSAgICAgICAgICAgICAgICAgICAgfCAgICAgIENSWVBUT1xyXG4gKiAgICAgIGlzRXF1YWxUbyAgICAgICAgICAgICAgICBlcSAgICAgfCAgICAgIE1PRFVMT19NT0RFXHJcbiAqICAgICAgaXNGaW5pdGUgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgUE9XX1BSRUNJU0lPTlxyXG4gKiAgICAgIGlzR3JlYXRlclRoYW4gICAgICAgICAgICBndCAgICAgfCAgICAgIEZPUk1BVFxyXG4gKiAgICAgIGlzR3JlYXRlclRoYW5PckVxdWFsVG8gICBndGUgICAgfCAgICAgIEFMUEhBQkVUXHJcbiAqICAgICAgaXNJbnRlZ2VyICAgICAgICAgICAgICAgICAgICAgICB8ICBpc0JpZ051bWJlclxyXG4gKiAgICAgIGlzTGVzc1RoYW4gICAgICAgICAgICAgICBsdCAgICAgfCAgbWF4aW11bSAgICAgICAgICAgICAgbWF4XHJcbiAqICAgICAgaXNMZXNzVGhhbk9yRXF1YWxUbyAgICAgIGx0ZSAgICB8ICBtaW5pbXVtICAgICAgICAgICAgICBtaW5cclxuICogICAgICBpc05hTiAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIHJhbmRvbVxyXG4gKiAgICAgIGlzTmVnYXRpdmUgICAgICAgICAgICAgICAgICAgICAgfCAgc3VtXHJcbiAqICAgICAgaXNQb3NpdGl2ZSAgICAgICAgICAgICAgICAgICAgICB8XHJcbiAqICAgICAgaXNaZXJvICAgICAgICAgICAgICAgICAgICAgICAgICB8XHJcbiAqICAgICAgbWludXMgICAgICAgICAgICAgICAgICAgICAgICAgICB8XHJcbiAqICAgICAgbW9kdWxvICAgICAgICAgICAgICAgICAgIG1vZCAgICB8XHJcbiAqICAgICAgbXVsdGlwbGllZEJ5ICAgICAgICAgICAgIHRpbWVzICB8XHJcbiAqICAgICAgbmVnYXRlZCAgICAgICAgICAgICAgICAgICAgICAgICB8XHJcbiAqICAgICAgcGx1cyAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XHJcbiAqICAgICAgcHJlY2lzaW9uICAgICAgICAgICAgICAgIHNkICAgICB8XHJcbiAqICAgICAgc2hpZnRlZEJ5ICAgICAgICAgICAgICAgICAgICAgICB8XHJcbiAqICAgICAgc3F1YXJlUm9vdCAgICAgICAgICAgICAgIHNxcnQgICB8XHJcbiAqICAgICAgdG9FeHBvbmVudGlhbCAgICAgICAgICAgICAgICAgICB8XHJcbiAqICAgICAgdG9GaXhlZCAgICAgICAgICAgICAgICAgICAgICAgICB8XHJcbiAqICAgICAgdG9Gb3JtYXQgICAgICAgICAgICAgICAgICAgICAgICB8XHJcbiAqICAgICAgdG9GcmFjdGlvbiAgICAgICAgICAgICAgICAgICAgICB8XHJcbiAqICAgICAgdG9KU09OICAgICAgICAgICAgICAgICAgICAgICAgICB8XHJcbiAqICAgICAgdG9OdW1iZXIgICAgICAgICAgICAgICAgICAgICAgICB8XHJcbiAqICAgICAgdG9QcmVjaXNpb24gICAgICAgICAgICAgICAgICAgICB8XHJcbiAqICAgICAgdG9TdHJpbmcgICAgICAgICAgICAgICAgICAgICAgICB8XHJcbiAqICAgICAgdmFsdWVPZiAgICAgICAgICAgICAgICAgICAgICAgICB8XHJcbiAqXHJcbiAqL1xyXG5cclxuXHJcbiAgdmFyIEJpZ051bWJlcixcclxuICAgIGlzTnVtZXJpYyA9IC9eLT8oPzpcXGQrKD86XFwuXFxkKik/fFxcLlxcZCspKD86ZVsrLV0/XFxkKyk/JC9pLFxyXG4gICAgbWF0aGNlaWwgPSBNYXRoLmNlaWwsXHJcbiAgICBtYXRoZmxvb3IgPSBNYXRoLmZsb29yLFxyXG5cclxuICAgIGJpZ251bWJlckVycm9yID0gJ1tCaWdOdW1iZXIgRXJyb3JdICcsXHJcbiAgICB0b29NYW55RGlnaXRzID0gYmlnbnVtYmVyRXJyb3IgKyAnTnVtYmVyIHByaW1pdGl2ZSBoYXMgbW9yZSB0aGFuIDE1IHNpZ25pZmljYW50IGRpZ2l0czogJyxcclxuXHJcbiAgICBCQVNFID0gMWUxNCxcclxuICAgIExPR19CQVNFID0gMTQsXHJcbiAgICBNQVhfU0FGRV9JTlRFR0VSID0gMHgxZmZmZmZmZmZmZmZmZiwgICAgICAgICAvLyAyXjUzIC0gMVxyXG4gICAgLy8gTUFYX0lOVDMyID0gMHg3ZmZmZmZmZiwgICAgICAgICAgICAgICAgICAgLy8gMl4zMSAtIDFcclxuICAgIFBPV1NfVEVOID0gWzEsIDEwLCAxMDAsIDFlMywgMWU0LCAxZTUsIDFlNiwgMWU3LCAxZTgsIDFlOSwgMWUxMCwgMWUxMSwgMWUxMiwgMWUxM10sXHJcbiAgICBTUVJUX0JBU0UgPSAxZTcsXHJcblxyXG4gICAgLy8gRURJVEFCTEVcclxuICAgIC8vIFRoZSBsaW1pdCBvbiB0aGUgdmFsdWUgb2YgREVDSU1BTF9QTEFDRVMsIFRPX0VYUF9ORUcsIFRPX0VYUF9QT1MsIE1JTl9FWFAsIE1BWF9FWFAsIGFuZFxyXG4gICAgLy8gdGhlIGFyZ3VtZW50cyB0byB0b0V4cG9uZW50aWFsLCB0b0ZpeGVkLCB0b0Zvcm1hdCwgYW5kIHRvUHJlY2lzaW9uLlxyXG4gICAgTUFYID0gMUU5OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gMCB0byBNQVhfSU5UMzJcclxuXHJcblxyXG4gIC8qXHJcbiAgICogQ3JlYXRlIGFuZCByZXR1cm4gYSBCaWdOdW1iZXIgY29uc3RydWN0b3IuXHJcbiAgICovXHJcbiAgZnVuY3Rpb24gY2xvbmUoY29uZmlnT2JqZWN0KSB7XHJcbiAgICB2YXIgZGl2LCBjb252ZXJ0QmFzZSwgcGFyc2VOdW1lcmljLFxyXG4gICAgICBQID0gQmlnTnVtYmVyLnByb3RvdHlwZSA9IHsgY29uc3RydWN0b3I6IEJpZ051bWJlciwgdG9TdHJpbmc6IG51bGwsIHZhbHVlT2Y6IG51bGwgfSxcclxuICAgICAgT05FID0gbmV3IEJpZ051bWJlcigxKSxcclxuXHJcblxyXG4gICAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEVESVRBQkxFIENPTkZJRyBERUZBVUxUUyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG5cclxuICAgICAgLy8gVGhlIGRlZmF1bHQgdmFsdWVzIGJlbG93IG11c3QgYmUgaW50ZWdlcnMgd2l0aGluIHRoZSBpbmNsdXNpdmUgcmFuZ2VzIHN0YXRlZC5cclxuICAgICAgLy8gVGhlIHZhbHVlcyBjYW4gYWxzbyBiZSBjaGFuZ2VkIGF0IHJ1bi10aW1lIHVzaW5nIEJpZ051bWJlci5zZXQuXHJcblxyXG4gICAgICAvLyBUaGUgbWF4aW11bSBudW1iZXIgb2YgZGVjaW1hbCBwbGFjZXMgZm9yIG9wZXJhdGlvbnMgaW52b2x2aW5nIGRpdmlzaW9uLlxyXG4gICAgICBERUNJTUFMX1BMQUNFUyA9IDIwLCAgICAgICAgICAgICAgICAgICAgIC8vIDAgdG8gTUFYXHJcblxyXG4gICAgICAvLyBUaGUgcm91bmRpbmcgbW9kZSB1c2VkIHdoZW4gcm91bmRpbmcgdG8gdGhlIGFib3ZlIGRlY2ltYWwgcGxhY2VzLCBhbmQgd2hlbiB1c2luZ1xyXG4gICAgICAvLyB0b0V4cG9uZW50aWFsLCB0b0ZpeGVkLCB0b0Zvcm1hdCBhbmQgdG9QcmVjaXNpb24sIGFuZCByb3VuZCAoZGVmYXVsdCB2YWx1ZSkuXHJcbiAgICAgIC8vIFVQICAgICAgICAgMCBBd2F5IGZyb20gemVyby5cclxuICAgICAgLy8gRE9XTiAgICAgICAxIFRvd2FyZHMgemVyby5cclxuICAgICAgLy8gQ0VJTCAgICAgICAyIFRvd2FyZHMgK0luZmluaXR5LlxyXG4gICAgICAvLyBGTE9PUiAgICAgIDMgVG93YXJkcyAtSW5maW5pdHkuXHJcbiAgICAgIC8vIEhBTEZfVVAgICAgNCBUb3dhcmRzIG5lYXJlc3QgbmVpZ2hib3VyLiBJZiBlcXVpZGlzdGFudCwgdXAuXHJcbiAgICAgIC8vIEhBTEZfRE9XTiAgNSBUb3dhcmRzIG5lYXJlc3QgbmVpZ2hib3VyLiBJZiBlcXVpZGlzdGFudCwgZG93bi5cclxuICAgICAgLy8gSEFMRl9FVkVOICA2IFRvd2FyZHMgbmVhcmVzdCBuZWlnaGJvdXIuIElmIGVxdWlkaXN0YW50LCB0b3dhcmRzIGV2ZW4gbmVpZ2hib3VyLlxyXG4gICAgICAvLyBIQUxGX0NFSUwgIDcgVG93YXJkcyBuZWFyZXN0IG5laWdoYm91ci4gSWYgZXF1aWRpc3RhbnQsIHRvd2FyZHMgK0luZmluaXR5LlxyXG4gICAgICAvLyBIQUxGX0ZMT09SIDggVG93YXJkcyBuZWFyZXN0IG5laWdoYm91ci4gSWYgZXF1aWRpc3RhbnQsIHRvd2FyZHMgLUluZmluaXR5LlxyXG4gICAgICBST1VORElOR19NT0RFID0gNCwgICAgICAgICAgICAgICAgICAgICAgIC8vIDAgdG8gOFxyXG5cclxuICAgICAgLy8gRVhQT05FTlRJQUxfQVQgOiBbVE9fRVhQX05FRyAsIFRPX0VYUF9QT1NdXHJcblxyXG4gICAgICAvLyBUaGUgZXhwb25lbnQgdmFsdWUgYXQgYW5kIGJlbmVhdGggd2hpY2ggdG9TdHJpbmcgcmV0dXJucyBleHBvbmVudGlhbCBub3RhdGlvbi5cclxuICAgICAgLy8gTnVtYmVyIHR5cGU6IC03XHJcbiAgICAgIFRPX0VYUF9ORUcgPSAtNywgICAgICAgICAgICAgICAgICAgICAgICAgLy8gMCB0byAtTUFYXHJcblxyXG4gICAgICAvLyBUaGUgZXhwb25lbnQgdmFsdWUgYXQgYW5kIGFib3ZlIHdoaWNoIHRvU3RyaW5nIHJldHVybnMgZXhwb25lbnRpYWwgbm90YXRpb24uXHJcbiAgICAgIC8vIE51bWJlciB0eXBlOiAyMVxyXG4gICAgICBUT19FWFBfUE9TID0gMjEsICAgICAgICAgICAgICAgICAgICAgICAgIC8vIDAgdG8gTUFYXHJcblxyXG4gICAgICAvLyBSQU5HRSA6IFtNSU5fRVhQLCBNQVhfRVhQXVxyXG5cclxuICAgICAgLy8gVGhlIG1pbmltdW0gZXhwb25lbnQgdmFsdWUsIGJlbmVhdGggd2hpY2ggdW5kZXJmbG93IHRvIHplcm8gb2NjdXJzLlxyXG4gICAgICAvLyBOdW1iZXIgdHlwZTogLTMyNCAgKDVlLTMyNClcclxuICAgICAgTUlOX0VYUCA9IC0xZTcsICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAtMSB0byAtTUFYXHJcblxyXG4gICAgICAvLyBUaGUgbWF4aW11bSBleHBvbmVudCB2YWx1ZSwgYWJvdmUgd2hpY2ggb3ZlcmZsb3cgdG8gSW5maW5pdHkgb2NjdXJzLlxyXG4gICAgICAvLyBOdW1iZXIgdHlwZTogIDMwOCAgKDEuNzk3NjkzMTM0ODYyMzE1N2UrMzA4KVxyXG4gICAgICAvLyBGb3IgTUFYX0VYUCA+IDFlNywgZS5nLiBuZXcgQmlnTnVtYmVyKCcxZTEwMDAwMDAwMCcpLnBsdXMoMSkgbWF5IGJlIHNsb3cuXHJcbiAgICAgIE1BWF9FWFAgPSAxZTcsICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gMSB0byBNQVhcclxuXHJcbiAgICAgIC8vIFdoZXRoZXIgdG8gdXNlIGNyeXB0b2dyYXBoaWNhbGx5LXNlY3VyZSByYW5kb20gbnVtYmVyIGdlbmVyYXRpb24sIGlmIGF2YWlsYWJsZS5cclxuICAgICAgQ1JZUFRPID0gZmFsc2UsICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB0cnVlIG9yIGZhbHNlXHJcblxyXG4gICAgICAvLyBUaGUgbW9kdWxvIG1vZGUgdXNlZCB3aGVuIGNhbGN1bGF0aW5nIHRoZSBtb2R1bHVzOiBhIG1vZCBuLlxyXG4gICAgICAvLyBUaGUgcXVvdGllbnQgKHEgPSBhIC8gbikgaXMgY2FsY3VsYXRlZCBhY2NvcmRpbmcgdG8gdGhlIGNvcnJlc3BvbmRpbmcgcm91bmRpbmcgbW9kZS5cclxuICAgICAgLy8gVGhlIHJlbWFpbmRlciAocikgaXMgY2FsY3VsYXRlZCBhczogciA9IGEgLSBuICogcS5cclxuICAgICAgLy9cclxuICAgICAgLy8gVVAgICAgICAgIDAgVGhlIHJlbWFpbmRlciBpcyBwb3NpdGl2ZSBpZiB0aGUgZGl2aWRlbmQgaXMgbmVnYXRpdmUsIGVsc2UgaXMgbmVnYXRpdmUuXHJcbiAgICAgIC8vIERPV04gICAgICAxIFRoZSByZW1haW5kZXIgaGFzIHRoZSBzYW1lIHNpZ24gYXMgdGhlIGRpdmlkZW5kLlxyXG4gICAgICAvLyAgICAgICAgICAgICBUaGlzIG1vZHVsbyBtb2RlIGlzIGNvbW1vbmx5IGtub3duIGFzICd0cnVuY2F0ZWQgZGl2aXNpb24nIGFuZCBpc1xyXG4gICAgICAvLyAgICAgICAgICAgICBlcXVpdmFsZW50IHRvIChhICUgbikgaW4gSmF2YVNjcmlwdC5cclxuICAgICAgLy8gRkxPT1IgICAgIDMgVGhlIHJlbWFpbmRlciBoYXMgdGhlIHNhbWUgc2lnbiBhcyB0aGUgZGl2aXNvciAoUHl0aG9uICUpLlxyXG4gICAgICAvLyBIQUxGX0VWRU4gNiBUaGlzIG1vZHVsbyBtb2RlIGltcGxlbWVudHMgdGhlIElFRUUgNzU0IHJlbWFpbmRlciBmdW5jdGlvbi5cclxuICAgICAgLy8gRVVDTElEICAgIDkgRXVjbGlkaWFuIGRpdmlzaW9uLiBxID0gc2lnbihuKSAqIGZsb29yKGEgLyBhYnMobikpLlxyXG4gICAgICAvLyAgICAgICAgICAgICBUaGUgcmVtYWluZGVyIGlzIGFsd2F5cyBwb3NpdGl2ZS5cclxuICAgICAgLy9cclxuICAgICAgLy8gVGhlIHRydW5jYXRlZCBkaXZpc2lvbiwgZmxvb3JlZCBkaXZpc2lvbiwgRXVjbGlkaWFuIGRpdmlzaW9uIGFuZCBJRUVFIDc1NCByZW1haW5kZXJcclxuICAgICAgLy8gbW9kZXMgYXJlIGNvbW1vbmx5IHVzZWQgZm9yIHRoZSBtb2R1bHVzIG9wZXJhdGlvbi5cclxuICAgICAgLy8gQWx0aG91Z2ggdGhlIG90aGVyIHJvdW5kaW5nIG1vZGVzIGNhbiBhbHNvIGJlIHVzZWQsIHRoZXkgbWF5IG5vdCBnaXZlIHVzZWZ1bCByZXN1bHRzLlxyXG4gICAgICBNT0RVTE9fTU9ERSA9IDEsICAgICAgICAgICAgICAgICAgICAgICAgIC8vIDAgdG8gOVxyXG5cclxuICAgICAgLy8gVGhlIG1heGltdW0gbnVtYmVyIG9mIHNpZ25pZmljYW50IGRpZ2l0cyBvZiB0aGUgcmVzdWx0IG9mIHRoZSBleHBvbmVudGlhdGVkQnkgb3BlcmF0aW9uLlxyXG4gICAgICAvLyBJZiBQT1dfUFJFQ0lTSU9OIGlzIDAsIHRoZXJlIHdpbGwgYmUgdW5saW1pdGVkIHNpZ25pZmljYW50IGRpZ2l0cy5cclxuICAgICAgUE9XX1BSRUNJU0lPTiA9IDAsICAgICAgICAgICAgICAgICAgICAvLyAwIHRvIE1BWFxyXG5cclxuICAgICAgLy8gVGhlIGZvcm1hdCBzcGVjaWZpY2F0aW9uIHVzZWQgYnkgdGhlIEJpZ051bWJlci5wcm90b3R5cGUudG9Gb3JtYXQgbWV0aG9kLlxyXG4gICAgICBGT1JNQVQgPSB7XHJcbiAgICAgICAgcHJlZml4OiAnJyxcclxuICAgICAgICBncm91cFNpemU6IDMsXHJcbiAgICAgICAgc2Vjb25kYXJ5R3JvdXBTaXplOiAwLFxyXG4gICAgICAgIGdyb3VwU2VwYXJhdG9yOiAnLCcsXHJcbiAgICAgICAgZGVjaW1hbFNlcGFyYXRvcjogJy4nLFxyXG4gICAgICAgIGZyYWN0aW9uR3JvdXBTaXplOiAwLFxyXG4gICAgICAgIGZyYWN0aW9uR3JvdXBTZXBhcmF0b3I6ICdcXHhBMCcsICAgICAgLy8gbm9uLWJyZWFraW5nIHNwYWNlXHJcbiAgICAgICAgc3VmZml4OiAnJ1xyXG4gICAgICB9LFxyXG5cclxuICAgICAgLy8gVGhlIGFscGhhYmV0IHVzZWQgZm9yIGJhc2UgY29udmVyc2lvbi4gSXQgbXVzdCBiZSBhdCBsZWFzdCAyIGNoYXJhY3RlcnMgbG9uZywgd2l0aCBubyAnKycsXHJcbiAgICAgIC8vICctJywgJy4nLCB3aGl0ZXNwYWNlLCBvciByZXBlYXRlZCBjaGFyYWN0ZXIuXHJcbiAgICAgIC8vICcwMTIzNDU2Nzg5YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXpBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWiRfJ1xyXG4gICAgICBBTFBIQUJFVCA9ICcwMTIzNDU2Nzg5YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXonO1xyXG5cclxuXHJcbiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuXHJcbiAgICAvLyBDT05TVFJVQ1RPUlxyXG5cclxuXHJcbiAgICAvKlxyXG4gICAgICogVGhlIEJpZ051bWJlciBjb25zdHJ1Y3RvciBhbmQgZXhwb3J0ZWQgZnVuY3Rpb24uXHJcbiAgICAgKiBDcmVhdGUgYW5kIHJldHVybiBhIG5ldyBpbnN0YW5jZSBvZiBhIEJpZ051bWJlciBvYmplY3QuXHJcbiAgICAgKlxyXG4gICAgICogdiB7bnVtYmVyfHN0cmluZ3xCaWdOdW1iZXJ9IEEgbnVtZXJpYyB2YWx1ZS5cclxuICAgICAqIFtiXSB7bnVtYmVyfSBUaGUgYmFzZSBvZiB2LiBJbnRlZ2VyLCAyIHRvIEFMUEhBQkVULmxlbmd0aCBpbmNsdXNpdmUuXHJcbiAgICAgKi9cclxuICAgIGZ1bmN0aW9uIEJpZ051bWJlcih2LCBiKSB7XHJcbiAgICAgIHZhciBhbHBoYWJldCwgYywgY2FzZUNoYW5nZWQsIGUsIGksIGlzTnVtLCBsZW4sIHN0cixcclxuICAgICAgICB4ID0gdGhpcztcclxuXHJcbiAgICAgIC8vIEVuYWJsZSBjb25zdHJ1Y3RvciBjYWxsIHdpdGhvdXQgYG5ld2AuXHJcbiAgICAgIGlmICghKHggaW5zdGFuY2VvZiBCaWdOdW1iZXIpKSByZXR1cm4gbmV3IEJpZ051bWJlcih2LCBiKTtcclxuXHJcbiAgICAgIGlmIChiID09IG51bGwpIHtcclxuXHJcbiAgICAgICAgaWYgKHYgJiYgdi5faXNCaWdOdW1iZXIgPT09IHRydWUpIHtcclxuICAgICAgICAgIHgucyA9IHYucztcclxuXHJcbiAgICAgICAgICBpZiAoIXYuYyB8fCB2LmUgPiBNQVhfRVhQKSB7XHJcbiAgICAgICAgICAgIHguYyA9IHguZSA9IG51bGw7XHJcbiAgICAgICAgICB9IGVsc2UgaWYgKHYuZSA8IE1JTl9FWFApIHtcclxuICAgICAgICAgICAgeC5jID0gW3guZSA9IDBdO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgeC5lID0gdi5lO1xyXG4gICAgICAgICAgICB4LmMgPSB2LmMuc2xpY2UoKTtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoKGlzTnVtID0gdHlwZW9mIHYgPT0gJ251bWJlcicpICYmIHYgKiAwID09IDApIHtcclxuXHJcbiAgICAgICAgICAvLyBVc2UgYDEgLyBuYCB0byBoYW5kbGUgbWludXMgemVybyBhbHNvLlxyXG4gICAgICAgICAgeC5zID0gMSAvIHYgPCAwID8gKHYgPSAtdiwgLTEpIDogMTtcclxuXHJcbiAgICAgICAgICAvLyBGYXN0IHBhdGggZm9yIGludGVnZXJzLCB3aGVyZSBuIDwgMjE0NzQ4MzY0OCAoMioqMzEpLlxyXG4gICAgICAgICAgaWYgKHYgPT09IH5+dikge1xyXG4gICAgICAgICAgICBmb3IgKGUgPSAwLCBpID0gdjsgaSA+PSAxMDsgaSAvPSAxMCwgZSsrKTtcclxuXHJcbiAgICAgICAgICAgIGlmIChlID4gTUFYX0VYUCkge1xyXG4gICAgICAgICAgICAgIHguYyA9IHguZSA9IG51bGw7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgeC5lID0gZTtcclxuICAgICAgICAgICAgICB4LmMgPSBbdl07XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICBzdHIgPSBTdHJpbmcodik7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuXHJcbiAgICAgICAgICBpZiAoIWlzTnVtZXJpYy50ZXN0KHN0ciA9IFN0cmluZyh2KSkpIHJldHVybiBwYXJzZU51bWVyaWMoeCwgc3RyLCBpc051bSk7XHJcblxyXG4gICAgICAgICAgeC5zID0gc3RyLmNoYXJDb2RlQXQoMCkgPT0gNDUgPyAoc3RyID0gc3RyLnNsaWNlKDEpLCAtMSkgOiAxO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gRGVjaW1hbCBwb2ludD9cclxuICAgICAgICBpZiAoKGUgPSBzdHIuaW5kZXhPZignLicpKSA+IC0xKSBzdHIgPSBzdHIucmVwbGFjZSgnLicsICcnKTtcclxuXHJcbiAgICAgICAgLy8gRXhwb25lbnRpYWwgZm9ybT9cclxuICAgICAgICBpZiAoKGkgPSBzdHIuc2VhcmNoKC9lL2kpKSA+IDApIHtcclxuXHJcbiAgICAgICAgICAvLyBEZXRlcm1pbmUgZXhwb25lbnQuXHJcbiAgICAgICAgICBpZiAoZSA8IDApIGUgPSBpO1xyXG4gICAgICAgICAgZSArPSArc3RyLnNsaWNlKGkgKyAxKTtcclxuICAgICAgICAgIHN0ciA9IHN0ci5zdWJzdHJpbmcoMCwgaSk7XHJcbiAgICAgICAgfSBlbHNlIGlmIChlIDwgMCkge1xyXG5cclxuICAgICAgICAgIC8vIEludGVnZXIuXHJcbiAgICAgICAgICBlID0gc3RyLmxlbmd0aDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICB9IGVsc2Uge1xyXG5cclxuICAgICAgICAvLyAnW0JpZ051bWJlciBFcnJvcl0gQmFzZSB7bm90IGEgcHJpbWl0aXZlIG51bWJlcnxub3QgYW4gaW50ZWdlcnxvdXQgb2YgcmFuZ2V9OiB7Yn0nXHJcbiAgICAgICAgaW50Q2hlY2soYiwgMiwgQUxQSEFCRVQubGVuZ3RoLCAnQmFzZScpO1xyXG5cclxuICAgICAgICAvLyBBbGxvdyBleHBvbmVudGlhbCBub3RhdGlvbiB0byBiZSB1c2VkIHdpdGggYmFzZSAxMCBhcmd1bWVudCwgd2hpbGVcclxuICAgICAgICAvLyBhbHNvIHJvdW5kaW5nIHRvIERFQ0lNQUxfUExBQ0VTIGFzIHdpdGggb3RoZXIgYmFzZXMuXHJcbiAgICAgICAgaWYgKGIgPT0gMTApIHtcclxuICAgICAgICAgIHggPSBuZXcgQmlnTnVtYmVyKHYpO1xyXG4gICAgICAgICAgcmV0dXJuIHJvdW5kKHgsIERFQ0lNQUxfUExBQ0VTICsgeC5lICsgMSwgUk9VTkRJTkdfTU9ERSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBzdHIgPSBTdHJpbmcodik7XHJcblxyXG4gICAgICAgIGlmIChpc051bSA9IHR5cGVvZiB2ID09ICdudW1iZXInKSB7XHJcblxyXG4gICAgICAgICAgLy8gQXZvaWQgcG90ZW50aWFsIGludGVycHJldGF0aW9uIG9mIEluZmluaXR5IGFuZCBOYU4gYXMgYmFzZSA0NCsgdmFsdWVzLlxyXG4gICAgICAgICAgaWYgKHYgKiAwICE9IDApIHJldHVybiBwYXJzZU51bWVyaWMoeCwgc3RyLCBpc051bSwgYik7XHJcblxyXG4gICAgICAgICAgeC5zID0gMSAvIHYgPCAwID8gKHN0ciA9IHN0ci5zbGljZSgxKSwgLTEpIDogMTtcclxuXHJcbiAgICAgICAgICAvLyAnW0JpZ051bWJlciBFcnJvcl0gTnVtYmVyIHByaW1pdGl2ZSBoYXMgbW9yZSB0aGFuIDE1IHNpZ25pZmljYW50IGRpZ2l0czoge259J1xyXG4gICAgICAgICAgaWYgKEJpZ051bWJlci5ERUJVRyAmJiBzdHIucmVwbGFjZSgvXjBcXC4wKnxcXC4vLCAnJykubGVuZ3RoID4gMTUpIHtcclxuICAgICAgICAgICAgdGhyb3cgRXJyb3JcclxuICAgICAgICAgICAgICh0b29NYW55RGlnaXRzICsgdik7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHgucyA9IHN0ci5jaGFyQ29kZUF0KDApID09PSA0NSA/IChzdHIgPSBzdHIuc2xpY2UoMSksIC0xKSA6IDE7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBhbHBoYWJldCA9IEFMUEhBQkVULnNsaWNlKDAsIGIpO1xyXG4gICAgICAgIGUgPSBpID0gMDtcclxuXHJcbiAgICAgICAgLy8gQ2hlY2sgdGhhdCBzdHIgaXMgYSB2YWxpZCBiYXNlIGIgbnVtYmVyLlxyXG4gICAgICAgIC8vIERvbid0IHVzZSBSZWdFeHAsIHNvIGFscGhhYmV0IGNhbiBjb250YWluIHNwZWNpYWwgY2hhcmFjdGVycy5cclxuICAgICAgICBmb3IgKGxlbiA9IHN0ci5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xyXG4gICAgICAgICAgaWYgKGFscGhhYmV0LmluZGV4T2YoYyA9IHN0ci5jaGFyQXQoaSkpIDwgMCkge1xyXG4gICAgICAgICAgICBpZiAoYyA9PSAnLicpIHtcclxuXHJcbiAgICAgICAgICAgICAgLy8gSWYgJy4nIGlzIG5vdCB0aGUgZmlyc3QgY2hhcmFjdGVyIGFuZCBpdCBoYXMgbm90IGJlIGZvdW5kIGJlZm9yZS5cclxuICAgICAgICAgICAgICBpZiAoaSA+IGUpIHtcclxuICAgICAgICAgICAgICAgIGUgPSBsZW47XHJcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoIWNhc2VDaGFuZ2VkKSB7XHJcblxyXG4gICAgICAgICAgICAgIC8vIEFsbG93IGUuZy4gaGV4YWRlY2ltYWwgJ0ZGJyBhcyB3ZWxsIGFzICdmZicuXHJcbiAgICAgICAgICAgICAgaWYgKHN0ciA9PSBzdHIudG9VcHBlckNhc2UoKSAmJiAoc3RyID0gc3RyLnRvTG93ZXJDYXNlKCkpIHx8XHJcbiAgICAgICAgICAgICAgICAgIHN0ciA9PSBzdHIudG9Mb3dlckNhc2UoKSAmJiAoc3RyID0gc3RyLnRvVXBwZXJDYXNlKCkpKSB7XHJcbiAgICAgICAgICAgICAgICBjYXNlQ2hhbmdlZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICBpID0gLTE7XHJcbiAgICAgICAgICAgICAgICBlID0gMDtcclxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgcmV0dXJuIHBhcnNlTnVtZXJpYyh4LCBTdHJpbmcodiksIGlzTnVtLCBiKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIFByZXZlbnQgbGF0ZXIgY2hlY2sgZm9yIGxlbmd0aCBvbiBjb252ZXJ0ZWQgbnVtYmVyLlxyXG4gICAgICAgIGlzTnVtID0gZmFsc2U7XHJcbiAgICAgICAgc3RyID0gY29udmVydEJhc2Uoc3RyLCBiLCAxMCwgeC5zKTtcclxuXHJcbiAgICAgICAgLy8gRGVjaW1hbCBwb2ludD9cclxuICAgICAgICBpZiAoKGUgPSBzdHIuaW5kZXhPZignLicpKSA+IC0xKSBzdHIgPSBzdHIucmVwbGFjZSgnLicsICcnKTtcclxuICAgICAgICBlbHNlIGUgPSBzdHIubGVuZ3RoO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyBEZXRlcm1pbmUgbGVhZGluZyB6ZXJvcy5cclxuICAgICAgZm9yIChpID0gMDsgc3RyLmNoYXJDb2RlQXQoaSkgPT09IDQ4OyBpKyspO1xyXG5cclxuICAgICAgLy8gRGV0ZXJtaW5lIHRyYWlsaW5nIHplcm9zLlxyXG4gICAgICBmb3IgKGxlbiA9IHN0ci5sZW5ndGg7IHN0ci5jaGFyQ29kZUF0KC0tbGVuKSA9PT0gNDg7KTtcclxuXHJcbiAgICAgIGlmIChzdHIgPSBzdHIuc2xpY2UoaSwgKytsZW4pKSB7XHJcbiAgICAgICAgbGVuIC09IGk7XHJcblxyXG4gICAgICAgIC8vICdbQmlnTnVtYmVyIEVycm9yXSBOdW1iZXIgcHJpbWl0aXZlIGhhcyBtb3JlIHRoYW4gMTUgc2lnbmlmaWNhbnQgZGlnaXRzOiB7bn0nXHJcbiAgICAgICAgaWYgKGlzTnVtICYmIEJpZ051bWJlci5ERUJVRyAmJlxyXG4gICAgICAgICAgbGVuID4gMTUgJiYgKHYgPiBNQVhfU0FGRV9JTlRFR0VSIHx8IHYgIT09IG1hdGhmbG9vcih2KSkpIHtcclxuICAgICAgICAgICAgdGhyb3cgRXJyb3JcclxuICAgICAgICAgICAgICh0b29NYW55RGlnaXRzICsgKHgucyAqIHYpKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgICAvLyBPdmVyZmxvdz9cclxuICAgICAgICBpZiAoKGUgPSBlIC0gaSAtIDEpID4gTUFYX0VYUCkge1xyXG5cclxuICAgICAgICAgIC8vIEluZmluaXR5LlxyXG4gICAgICAgICAgeC5jID0geC5lID0gbnVsbDtcclxuXHJcbiAgICAgICAgLy8gVW5kZXJmbG93P1xyXG4gICAgICAgIH0gZWxzZSBpZiAoZSA8IE1JTl9FWFApIHtcclxuXHJcbiAgICAgICAgICAvLyBaZXJvLlxyXG4gICAgICAgICAgeC5jID0gW3guZSA9IDBdO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB4LmUgPSBlO1xyXG4gICAgICAgICAgeC5jID0gW107XHJcblxyXG4gICAgICAgICAgLy8gVHJhbnNmb3JtIGJhc2VcclxuXHJcbiAgICAgICAgICAvLyBlIGlzIHRoZSBiYXNlIDEwIGV4cG9uZW50LlxyXG4gICAgICAgICAgLy8gaSBpcyB3aGVyZSB0byBzbGljZSBzdHIgdG8gZ2V0IHRoZSBmaXJzdCBlbGVtZW50IG9mIHRoZSBjb2VmZmljaWVudCBhcnJheS5cclxuICAgICAgICAgIGkgPSAoZSArIDEpICUgTE9HX0JBU0U7XHJcbiAgICAgICAgICBpZiAoZSA8IDApIGkgKz0gTE9HX0JBU0U7ICAvLyBpIDwgMVxyXG5cclxuICAgICAgICAgIGlmIChpIDwgbGVuKSB7XHJcbiAgICAgICAgICAgIGlmIChpKSB4LmMucHVzaCgrc3RyLnNsaWNlKDAsIGkpKTtcclxuXHJcbiAgICAgICAgICAgIGZvciAobGVuIC09IExPR19CQVNFOyBpIDwgbGVuOykge1xyXG4gICAgICAgICAgICAgIHguYy5wdXNoKCtzdHIuc2xpY2UoaSwgaSArPSBMT0dfQkFTRSkpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpID0gTE9HX0JBU0UgLSAoc3RyID0gc3RyLnNsaWNlKGkpKS5sZW5ndGg7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBpIC09IGxlbjtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICBmb3IgKDsgaS0tOyBzdHIgKz0gJzAnKTtcclxuICAgICAgICAgIHguYy5wdXNoKCtzdHIpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIHtcclxuXHJcbiAgICAgICAgLy8gWmVyby5cclxuICAgICAgICB4LmMgPSBbeC5lID0gMF07XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcblxyXG4gICAgLy8gQ09OU1RSVUNUT1IgUFJPUEVSVElFU1xyXG5cclxuXHJcbiAgICBCaWdOdW1iZXIuY2xvbmUgPSBjbG9uZTtcclxuXHJcbiAgICBCaWdOdW1iZXIuUk9VTkRfVVAgPSAwO1xyXG4gICAgQmlnTnVtYmVyLlJPVU5EX0RPV04gPSAxO1xyXG4gICAgQmlnTnVtYmVyLlJPVU5EX0NFSUwgPSAyO1xyXG4gICAgQmlnTnVtYmVyLlJPVU5EX0ZMT09SID0gMztcclxuICAgIEJpZ051bWJlci5ST1VORF9IQUxGX1VQID0gNDtcclxuICAgIEJpZ051bWJlci5ST1VORF9IQUxGX0RPV04gPSA1O1xyXG4gICAgQmlnTnVtYmVyLlJPVU5EX0hBTEZfRVZFTiA9IDY7XHJcbiAgICBCaWdOdW1iZXIuUk9VTkRfSEFMRl9DRUlMID0gNztcclxuICAgIEJpZ051bWJlci5ST1VORF9IQUxGX0ZMT09SID0gODtcclxuICAgIEJpZ051bWJlci5FVUNMSUQgPSA5O1xyXG5cclxuXHJcbiAgICAvKlxyXG4gICAgICogQ29uZmlndXJlIGluZnJlcXVlbnRseS1jaGFuZ2luZyBsaWJyYXJ5LXdpZGUgc2V0dGluZ3MuXHJcbiAgICAgKlxyXG4gICAgICogQWNjZXB0IGFuIG9iamVjdCB3aXRoIHRoZSBmb2xsb3dpbmcgb3B0aW9uYWwgcHJvcGVydGllcyAoaWYgdGhlIHZhbHVlIG9mIGEgcHJvcGVydHkgaXNcclxuICAgICAqIGEgbnVtYmVyLCBpdCBtdXN0IGJlIGFuIGludGVnZXIgd2l0aGluIHRoZSBpbmNsdXNpdmUgcmFuZ2Ugc3RhdGVkKTpcclxuICAgICAqXHJcbiAgICAgKiAgIERFQ0lNQUxfUExBQ0VTICAge251bWJlcn0gICAgICAgICAgIDAgdG8gTUFYXHJcbiAgICAgKiAgIFJPVU5ESU5HX01PREUgICAge251bWJlcn0gICAgICAgICAgIDAgdG8gOFxyXG4gICAgICogICBFWFBPTkVOVElBTF9BVCAgIHtudW1iZXJ8bnVtYmVyW119ICAtTUFYIHRvIE1BWCAgb3IgIFstTUFYIHRvIDAsIDAgdG8gTUFYXVxyXG4gICAgICogICBSQU5HRSAgICAgICAgICAgIHtudW1iZXJ8bnVtYmVyW119ICAtTUFYIHRvIE1BWCAobm90IHplcm8pICBvciAgWy1NQVggdG8gLTEsIDEgdG8gTUFYXVxyXG4gICAgICogICBDUllQVE8gICAgICAgICAgIHtib29sZWFufSAgICAgICAgICB0cnVlIG9yIGZhbHNlXHJcbiAgICAgKiAgIE1PRFVMT19NT0RFICAgICAge251bWJlcn0gICAgICAgICAgIDAgdG8gOVxyXG4gICAgICogICBQT1dfUFJFQ0lTSU9OICAgICAgIHtudW1iZXJ9ICAgICAgICAgICAwIHRvIE1BWFxyXG4gICAgICogICBBTFBIQUJFVCAgICAgICAgIHtzdHJpbmd9ICAgICAgICAgICBBIHN0cmluZyBvZiB0d28gb3IgbW9yZSB1bmlxdWUgY2hhcmFjdGVycyB3aGljaCBkb2VzXHJcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vdCBjb250YWluICcuJy5cclxuICAgICAqICAgRk9STUFUICAgICAgICAgICB7b2JqZWN0fSAgICAgICAgICAgQW4gb2JqZWN0IHdpdGggc29tZSBvZiB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXM6XHJcbiAgICAgKiAgICAgcHJlZml4ICAgICAgICAgICAgICAgICB7c3RyaW5nfVxyXG4gICAgICogICAgIGdyb3VwU2l6ZSAgICAgICAgICAgICAge251bWJlcn1cclxuICAgICAqICAgICBzZWNvbmRhcnlHcm91cFNpemUgICAgIHtudW1iZXJ9XHJcbiAgICAgKiAgICAgZ3JvdXBTZXBhcmF0b3IgICAgICAgICB7c3RyaW5nfVxyXG4gICAgICogICAgIGRlY2ltYWxTZXBhcmF0b3IgICAgICAge3N0cmluZ31cclxuICAgICAqICAgICBmcmFjdGlvbkdyb3VwU2l6ZSAgICAgIHtudW1iZXJ9XHJcbiAgICAgKiAgICAgZnJhY3Rpb25Hcm91cFNlcGFyYXRvciB7c3RyaW5nfVxyXG4gICAgICogICAgIHN1ZmZpeCAgICAgICAgICAgICAgICAge3N0cmluZ31cclxuICAgICAqXHJcbiAgICAgKiAoVGhlIHZhbHVlcyBhc3NpZ25lZCB0byB0aGUgYWJvdmUgRk9STUFUIG9iamVjdCBwcm9wZXJ0aWVzIGFyZSBub3QgY2hlY2tlZCBmb3IgdmFsaWRpdHkuKVxyXG4gICAgICpcclxuICAgICAqIEUuZy5cclxuICAgICAqIEJpZ051bWJlci5jb25maWcoeyBERUNJTUFMX1BMQUNFUyA6IDIwLCBST1VORElOR19NT0RFIDogNCB9KVxyXG4gICAgICpcclxuICAgICAqIElnbm9yZSBwcm9wZXJ0aWVzL3BhcmFtZXRlcnMgc2V0IHRvIG51bGwgb3IgdW5kZWZpbmVkLCBleGNlcHQgZm9yIEFMUEhBQkVULlxyXG4gICAgICpcclxuICAgICAqIFJldHVybiBhbiBvYmplY3Qgd2l0aCB0aGUgcHJvcGVydGllcyBjdXJyZW50IHZhbHVlcy5cclxuICAgICAqL1xyXG4gICAgQmlnTnVtYmVyLmNvbmZpZyA9IEJpZ051bWJlci5zZXQgPSBmdW5jdGlvbiAob2JqKSB7XHJcbiAgICAgIHZhciBwLCB2O1xyXG5cclxuICAgICAgaWYgKG9iaiAhPSBudWxsKSB7XHJcblxyXG4gICAgICAgIGlmICh0eXBlb2Ygb2JqID09ICdvYmplY3QnKSB7XHJcblxyXG4gICAgICAgICAgLy8gREVDSU1BTF9QTEFDRVMge251bWJlcn0gSW50ZWdlciwgMCB0byBNQVggaW5jbHVzaXZlLlxyXG4gICAgICAgICAgLy8gJ1tCaWdOdW1iZXIgRXJyb3JdIERFQ0lNQUxfUExBQ0VTIHtub3QgYSBwcmltaXRpdmUgbnVtYmVyfG5vdCBhbiBpbnRlZ2VyfG91dCBvZiByYW5nZX06IHt2fSdcclxuICAgICAgICAgIGlmIChvYmouaGFzT3duUHJvcGVydHkocCA9ICdERUNJTUFMX1BMQUNFUycpKSB7XHJcbiAgICAgICAgICAgIHYgPSBvYmpbcF07XHJcbiAgICAgICAgICAgIGludENoZWNrKHYsIDAsIE1BWCwgcCk7XHJcbiAgICAgICAgICAgIERFQ0lNQUxfUExBQ0VTID0gdjtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAvLyBST1VORElOR19NT0RFIHtudW1iZXJ9IEludGVnZXIsIDAgdG8gOCBpbmNsdXNpdmUuXHJcbiAgICAgICAgICAvLyAnW0JpZ051bWJlciBFcnJvcl0gUk9VTkRJTkdfTU9ERSB7bm90IGEgcHJpbWl0aXZlIG51bWJlcnxub3QgYW4gaW50ZWdlcnxvdXQgb2YgcmFuZ2V9OiB7dn0nXHJcbiAgICAgICAgICBpZiAob2JqLmhhc093blByb3BlcnR5KHAgPSAnUk9VTkRJTkdfTU9ERScpKSB7XHJcbiAgICAgICAgICAgIHYgPSBvYmpbcF07XHJcbiAgICAgICAgICAgIGludENoZWNrKHYsIDAsIDgsIHApO1xyXG4gICAgICAgICAgICBST1VORElOR19NT0RFID0gdjtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAvLyBFWFBPTkVOVElBTF9BVCB7bnVtYmVyfG51bWJlcltdfVxyXG4gICAgICAgICAgLy8gSW50ZWdlciwgLU1BWCB0byBNQVggaW5jbHVzaXZlIG9yXHJcbiAgICAgICAgICAvLyBbaW50ZWdlciAtTUFYIHRvIDAgaW5jbHVzaXZlLCAwIHRvIE1BWCBpbmNsdXNpdmVdLlxyXG4gICAgICAgICAgLy8gJ1tCaWdOdW1iZXIgRXJyb3JdIEVYUE9ORU5USUFMX0FUIHtub3QgYSBwcmltaXRpdmUgbnVtYmVyfG5vdCBhbiBpbnRlZ2VyfG91dCBvZiByYW5nZX06IHt2fSdcclxuICAgICAgICAgIGlmIChvYmouaGFzT3duUHJvcGVydHkocCA9ICdFWFBPTkVOVElBTF9BVCcpKSB7XHJcbiAgICAgICAgICAgIHYgPSBvYmpbcF07XHJcbiAgICAgICAgICAgIGlmICh2ICYmIHYucG9wKSB7XHJcbiAgICAgICAgICAgICAgaW50Q2hlY2sodlswXSwgLU1BWCwgMCwgcCk7XHJcbiAgICAgICAgICAgICAgaW50Q2hlY2sodlsxXSwgMCwgTUFYLCBwKTtcclxuICAgICAgICAgICAgICBUT19FWFBfTkVHID0gdlswXTtcclxuICAgICAgICAgICAgICBUT19FWFBfUE9TID0gdlsxXTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICBpbnRDaGVjayh2LCAtTUFYLCBNQVgsIHApO1xyXG4gICAgICAgICAgICAgIFRPX0VYUF9ORUcgPSAtKFRPX0VYUF9QT1MgPSB2IDwgMCA/IC12IDogdik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAvLyBSQU5HRSB7bnVtYmVyfG51bWJlcltdfSBOb24temVybyBpbnRlZ2VyLCAtTUFYIHRvIE1BWCBpbmNsdXNpdmUgb3JcclxuICAgICAgICAgIC8vIFtpbnRlZ2VyIC1NQVggdG8gLTEgaW5jbHVzaXZlLCBpbnRlZ2VyIDEgdG8gTUFYIGluY2x1c2l2ZV0uXHJcbiAgICAgICAgICAvLyAnW0JpZ051bWJlciBFcnJvcl0gUkFOR0Uge25vdCBhIHByaW1pdGl2ZSBudW1iZXJ8bm90IGFuIGludGVnZXJ8b3V0IG9mIHJhbmdlfGNhbm5vdCBiZSB6ZXJvfToge3Z9J1xyXG4gICAgICAgICAgaWYgKG9iai5oYXNPd25Qcm9wZXJ0eShwID0gJ1JBTkdFJykpIHtcclxuICAgICAgICAgICAgdiA9IG9ialtwXTtcclxuICAgICAgICAgICAgaWYgKHYgJiYgdi5wb3ApIHtcclxuICAgICAgICAgICAgICBpbnRDaGVjayh2WzBdLCAtTUFYLCAtMSwgcCk7XHJcbiAgICAgICAgICAgICAgaW50Q2hlY2sodlsxXSwgMSwgTUFYLCBwKTtcclxuICAgICAgICAgICAgICBNSU5fRVhQID0gdlswXTtcclxuICAgICAgICAgICAgICBNQVhfRVhQID0gdlsxXTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICBpbnRDaGVjayh2LCAtTUFYLCBNQVgsIHApO1xyXG4gICAgICAgICAgICAgIGlmICh2KSB7XHJcbiAgICAgICAgICAgICAgICBNSU5fRVhQID0gLShNQVhfRVhQID0gdiA8IDAgPyAtdiA6IHYpO1xyXG4gICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aHJvdyBFcnJvclxyXG4gICAgICAgICAgICAgICAgIChiaWdudW1iZXJFcnJvciArIHAgKyAnIGNhbm5vdCBiZSB6ZXJvOiAnICsgdik7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgLy8gQ1JZUFRPIHtib29sZWFufSB0cnVlIG9yIGZhbHNlLlxyXG4gICAgICAgICAgLy8gJ1tCaWdOdW1iZXIgRXJyb3JdIENSWVBUTyBub3QgdHJ1ZSBvciBmYWxzZToge3Z9J1xyXG4gICAgICAgICAgLy8gJ1tCaWdOdW1iZXIgRXJyb3JdIGNyeXB0byB1bmF2YWlsYWJsZSdcclxuICAgICAgICAgIGlmIChvYmouaGFzT3duUHJvcGVydHkocCA9ICdDUllQVE8nKSkge1xyXG4gICAgICAgICAgICB2ID0gb2JqW3BdO1xyXG4gICAgICAgICAgICBpZiAodiA9PT0gISF2KSB7XHJcbiAgICAgICAgICAgICAgaWYgKHYpIHtcclxuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgY3J5cHRvICE9ICd1bmRlZmluZWQnICYmIGNyeXB0byAmJlxyXG4gICAgICAgICAgICAgICAgIChjcnlwdG8uZ2V0UmFuZG9tVmFsdWVzIHx8IGNyeXB0by5yYW5kb21CeXRlcykpIHtcclxuICAgICAgICAgICAgICAgICAgQ1JZUFRPID0gdjtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgIENSWVBUTyA9ICF2O1xyXG4gICAgICAgICAgICAgICAgICB0aHJvdyBFcnJvclxyXG4gICAgICAgICAgICAgICAgICAgKGJpZ251bWJlckVycm9yICsgJ2NyeXB0byB1bmF2YWlsYWJsZScpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBDUllQVE8gPSB2O1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICB0aHJvdyBFcnJvclxyXG4gICAgICAgICAgICAgICAoYmlnbnVtYmVyRXJyb3IgKyBwICsgJyBub3QgdHJ1ZSBvciBmYWxzZTogJyArIHYpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgLy8gTU9EVUxPX01PREUge251bWJlcn0gSW50ZWdlciwgMCB0byA5IGluY2x1c2l2ZS5cclxuICAgICAgICAgIC8vICdbQmlnTnVtYmVyIEVycm9yXSBNT0RVTE9fTU9ERSB7bm90IGEgcHJpbWl0aXZlIG51bWJlcnxub3QgYW4gaW50ZWdlcnxvdXQgb2YgcmFuZ2V9OiB7dn0nXHJcbiAgICAgICAgICBpZiAob2JqLmhhc093blByb3BlcnR5KHAgPSAnTU9EVUxPX01PREUnKSkge1xyXG4gICAgICAgICAgICB2ID0gb2JqW3BdO1xyXG4gICAgICAgICAgICBpbnRDaGVjayh2LCAwLCA5LCBwKTtcclxuICAgICAgICAgICAgTU9EVUxPX01PREUgPSB2O1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIC8vIFBPV19QUkVDSVNJT04ge251bWJlcn0gSW50ZWdlciwgMCB0byBNQVggaW5jbHVzaXZlLlxyXG4gICAgICAgICAgLy8gJ1tCaWdOdW1iZXIgRXJyb3JdIFBPV19QUkVDSVNJT04ge25vdCBhIHByaW1pdGl2ZSBudW1iZXJ8bm90IGFuIGludGVnZXJ8b3V0IG9mIHJhbmdlfToge3Z9J1xyXG4gICAgICAgICAgaWYgKG9iai5oYXNPd25Qcm9wZXJ0eShwID0gJ1BPV19QUkVDSVNJT04nKSkge1xyXG4gICAgICAgICAgICB2ID0gb2JqW3BdO1xyXG4gICAgICAgICAgICBpbnRDaGVjayh2LCAwLCBNQVgsIHApO1xyXG4gICAgICAgICAgICBQT1dfUFJFQ0lTSU9OID0gdjtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAvLyBGT1JNQVQge29iamVjdH1cclxuICAgICAgICAgIC8vICdbQmlnTnVtYmVyIEVycm9yXSBGT1JNQVQgbm90IGFuIG9iamVjdDoge3Z9J1xyXG4gICAgICAgICAgaWYgKG9iai5oYXNPd25Qcm9wZXJ0eShwID0gJ0ZPUk1BVCcpKSB7XHJcbiAgICAgICAgICAgIHYgPSBvYmpbcF07XHJcbiAgICAgICAgICAgIGlmICh0eXBlb2YgdiA9PSAnb2JqZWN0JykgRk9STUFUID0gdjtcclxuICAgICAgICAgICAgZWxzZSB0aHJvdyBFcnJvclxyXG4gICAgICAgICAgICAgKGJpZ251bWJlckVycm9yICsgcCArICcgbm90IGFuIG9iamVjdDogJyArIHYpO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIC8vIEFMUEhBQkVUIHtzdHJpbmd9XHJcbiAgICAgICAgICAvLyAnW0JpZ051bWJlciBFcnJvcl0gQUxQSEFCRVQgaW52YWxpZDoge3Z9J1xyXG4gICAgICAgICAgaWYgKG9iai5oYXNPd25Qcm9wZXJ0eShwID0gJ0FMUEhBQkVUJykpIHtcclxuICAgICAgICAgICAgdiA9IG9ialtwXTtcclxuXHJcbiAgICAgICAgICAgIC8vIERpc2FsbG93IGlmIGxlc3MgdGhhbiB0d28gY2hhcmFjdGVycyxcclxuICAgICAgICAgICAgLy8gb3IgaWYgaXQgY29udGFpbnMgJysnLCAnLScsICcuJywgd2hpdGVzcGFjZSwgb3IgYSByZXBlYXRlZCBjaGFyYWN0ZXIuXHJcbiAgICAgICAgICAgIGlmICh0eXBlb2YgdiA9PSAnc3RyaW5nJyAmJiAhL14uPyR8WytcXC0uXFxzXXwoLikuKlxcMS8udGVzdCh2KSkge1xyXG4gICAgICAgICAgICAgIEFMUEhBQkVUID0gdjtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICB0aHJvdyBFcnJvclxyXG4gICAgICAgICAgICAgICAoYmlnbnVtYmVyRXJyb3IgKyBwICsgJyBpbnZhbGlkOiAnICsgdik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgfSBlbHNlIHtcclxuXHJcbiAgICAgICAgICAvLyAnW0JpZ051bWJlciBFcnJvcl0gT2JqZWN0IGV4cGVjdGVkOiB7dn0nXHJcbiAgICAgICAgICB0aHJvdyBFcnJvclxyXG4gICAgICAgICAgIChiaWdudW1iZXJFcnJvciArICdPYmplY3QgZXhwZWN0ZWQ6ICcgKyBvYmopO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgcmV0dXJuIHtcclxuICAgICAgICBERUNJTUFMX1BMQUNFUzogREVDSU1BTF9QTEFDRVMsXHJcbiAgICAgICAgUk9VTkRJTkdfTU9ERTogUk9VTkRJTkdfTU9ERSxcclxuICAgICAgICBFWFBPTkVOVElBTF9BVDogW1RPX0VYUF9ORUcsIFRPX0VYUF9QT1NdLFxyXG4gICAgICAgIFJBTkdFOiBbTUlOX0VYUCwgTUFYX0VYUF0sXHJcbiAgICAgICAgQ1JZUFRPOiBDUllQVE8sXHJcbiAgICAgICAgTU9EVUxPX01PREU6IE1PRFVMT19NT0RFLFxyXG4gICAgICAgIFBPV19QUkVDSVNJT046IFBPV19QUkVDSVNJT04sXHJcbiAgICAgICAgRk9STUFUOiBGT1JNQVQsXHJcbiAgICAgICAgQUxQSEFCRVQ6IEFMUEhBQkVUXHJcbiAgICAgIH07XHJcbiAgICB9O1xyXG5cclxuXHJcbiAgICAvKlxyXG4gICAgICogUmV0dXJuIHRydWUgaWYgdiBpcyBhIEJpZ051bWJlciBpbnN0YW5jZSwgb3RoZXJ3aXNlIHJldHVybiBmYWxzZS5cclxuICAgICAqXHJcbiAgICAgKiBJZiBCaWdOdW1iZXIuREVCVUcgaXMgdHJ1ZSwgdGhyb3cgaWYgYSBCaWdOdW1iZXIgaW5zdGFuY2UgaXMgbm90IHdlbGwtZm9ybWVkLlxyXG4gICAgICpcclxuICAgICAqIHYge2FueX1cclxuICAgICAqXHJcbiAgICAgKiAnW0JpZ051bWJlciBFcnJvcl0gSW52YWxpZCBCaWdOdW1iZXI6IHt2fSdcclxuICAgICAqL1xyXG4gICAgQmlnTnVtYmVyLmlzQmlnTnVtYmVyID0gZnVuY3Rpb24gKHYpIHtcclxuICAgICAgaWYgKCF2IHx8IHYuX2lzQmlnTnVtYmVyICE9PSB0cnVlKSByZXR1cm4gZmFsc2U7XHJcbiAgICAgIGlmICghQmlnTnVtYmVyLkRFQlVHKSByZXR1cm4gdHJ1ZTtcclxuXHJcbiAgICAgIHZhciBpLCBuLFxyXG4gICAgICAgIGMgPSB2LmMsXHJcbiAgICAgICAgZSA9IHYuZSxcclxuICAgICAgICBzID0gdi5zO1xyXG5cclxuICAgICAgb3V0OiBpZiAoe30udG9TdHJpbmcuY2FsbChjKSA9PSAnW29iamVjdCBBcnJheV0nKSB7XHJcblxyXG4gICAgICAgIGlmICgocyA9PT0gMSB8fCBzID09PSAtMSkgJiYgZSA+PSAtTUFYICYmIGUgPD0gTUFYICYmIGUgPT09IG1hdGhmbG9vcihlKSkge1xyXG5cclxuICAgICAgICAgIC8vIElmIHRoZSBmaXJzdCBlbGVtZW50IGlzIHplcm8sIHRoZSBCaWdOdW1iZXIgdmFsdWUgbXVzdCBiZSB6ZXJvLlxyXG4gICAgICAgICAgaWYgKGNbMF0gPT09IDApIHtcclxuICAgICAgICAgICAgaWYgKGUgPT09IDAgJiYgYy5sZW5ndGggPT09IDEpIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgICBicmVhayBvdXQ7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgLy8gQ2FsY3VsYXRlIG51bWJlciBvZiBkaWdpdHMgdGhhdCBjWzBdIHNob3VsZCBoYXZlLCBiYXNlZCBvbiB0aGUgZXhwb25lbnQuXHJcbiAgICAgICAgICBpID0gKGUgKyAxKSAlIExPR19CQVNFO1xyXG4gICAgICAgICAgaWYgKGkgPCAxKSBpICs9IExPR19CQVNFO1xyXG5cclxuICAgICAgICAgIC8vIENhbGN1bGF0ZSBudW1iZXIgb2YgZGlnaXRzIG9mIGNbMF0uXHJcbiAgICAgICAgICAvL2lmIChNYXRoLmNlaWwoTWF0aC5sb2coY1swXSArIDEpIC8gTWF0aC5MTjEwKSA9PSBpKSB7XHJcbiAgICAgICAgICBpZiAoU3RyaW5nKGNbMF0pLmxlbmd0aCA9PSBpKSB7XHJcblxyXG4gICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgYy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgIG4gPSBjW2ldO1xyXG4gICAgICAgICAgICAgIGlmIChuIDwgMCB8fCBuID49IEJBU0UgfHwgbiAhPT0gbWF0aGZsb29yKG4pKSBicmVhayBvdXQ7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIC8vIExhc3QgZWxlbWVudCBjYW5ub3QgYmUgemVybywgdW5sZXNzIGl0IGlzIHRoZSBvbmx5IGVsZW1lbnQuXHJcbiAgICAgICAgICAgIGlmIChuICE9PSAwKSByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAvLyBJbmZpbml0eS9OYU5cclxuICAgICAgfSBlbHNlIGlmIChjID09PSBudWxsICYmIGUgPT09IG51bGwgJiYgKHMgPT09IG51bGwgfHwgcyA9PT0gMSB8fCBzID09PSAtMSkpIHtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgfVxyXG5cclxuICAgICAgdGhyb3cgRXJyb3JcclxuICAgICAgICAoYmlnbnVtYmVyRXJyb3IgKyAnSW52YWxpZCBCaWdOdW1iZXI6ICcgKyB2KTtcclxuICAgIH07XHJcblxyXG5cclxuICAgIC8qXHJcbiAgICAgKiBSZXR1cm4gYSBuZXcgQmlnTnVtYmVyIHdob3NlIHZhbHVlIGlzIHRoZSBtYXhpbXVtIG9mIHRoZSBhcmd1bWVudHMuXHJcbiAgICAgKlxyXG4gICAgICogYXJndW1lbnRzIHtudW1iZXJ8c3RyaW5nfEJpZ051bWJlcn1cclxuICAgICAqL1xyXG4gICAgQmlnTnVtYmVyLm1heGltdW0gPSBCaWdOdW1iZXIubWF4ID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICByZXR1cm4gbWF4T3JNaW4oYXJndW1lbnRzLCBQLmx0KTtcclxuICAgIH07XHJcblxyXG5cclxuICAgIC8qXHJcbiAgICAgKiBSZXR1cm4gYSBuZXcgQmlnTnVtYmVyIHdob3NlIHZhbHVlIGlzIHRoZSBtaW5pbXVtIG9mIHRoZSBhcmd1bWVudHMuXHJcbiAgICAgKlxyXG4gICAgICogYXJndW1lbnRzIHtudW1iZXJ8c3RyaW5nfEJpZ051bWJlcn1cclxuICAgICAqL1xyXG4gICAgQmlnTnVtYmVyLm1pbmltdW0gPSBCaWdOdW1iZXIubWluID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICByZXR1cm4gbWF4T3JNaW4oYXJndW1lbnRzLCBQLmd0KTtcclxuICAgIH07XHJcblxyXG5cclxuICAgIC8qXHJcbiAgICAgKiBSZXR1cm4gYSBuZXcgQmlnTnVtYmVyIHdpdGggYSByYW5kb20gdmFsdWUgZXF1YWwgdG8gb3IgZ3JlYXRlciB0aGFuIDAgYW5kIGxlc3MgdGhhbiAxLFxyXG4gICAgICogYW5kIHdpdGggZHAsIG9yIERFQ0lNQUxfUExBQ0VTIGlmIGRwIGlzIG9taXR0ZWQsIGRlY2ltYWwgcGxhY2VzIChvciBsZXNzIGlmIHRyYWlsaW5nXHJcbiAgICAgKiB6ZXJvcyBhcmUgcHJvZHVjZWQpLlxyXG4gICAgICpcclxuICAgICAqIFtkcF0ge251bWJlcn0gRGVjaW1hbCBwbGFjZXMuIEludGVnZXIsIDAgdG8gTUFYIGluY2x1c2l2ZS5cclxuICAgICAqXHJcbiAgICAgKiAnW0JpZ051bWJlciBFcnJvcl0gQXJndW1lbnQge25vdCBhIHByaW1pdGl2ZSBudW1iZXJ8bm90IGFuIGludGVnZXJ8b3V0IG9mIHJhbmdlfToge2RwfSdcclxuICAgICAqICdbQmlnTnVtYmVyIEVycm9yXSBjcnlwdG8gdW5hdmFpbGFibGUnXHJcbiAgICAgKi9cclxuICAgIEJpZ051bWJlci5yYW5kb20gPSAoZnVuY3Rpb24gKCkge1xyXG4gICAgICB2YXIgcG93Ml81MyA9IDB4MjAwMDAwMDAwMDAwMDA7XHJcblxyXG4gICAgICAvLyBSZXR1cm4gYSA1MyBiaXQgaW50ZWdlciBuLCB3aGVyZSAwIDw9IG4gPCA5MDA3MTk5MjU0NzQwOTkyLlxyXG4gICAgICAvLyBDaGVjayBpZiBNYXRoLnJhbmRvbSgpIHByb2R1Y2VzIG1vcmUgdGhhbiAzMiBiaXRzIG9mIHJhbmRvbW5lc3MuXHJcbiAgICAgIC8vIElmIGl0IGRvZXMsIGFzc3VtZSBhdCBsZWFzdCA1MyBiaXRzIGFyZSBwcm9kdWNlZCwgb3RoZXJ3aXNlIGFzc3VtZSBhdCBsZWFzdCAzMCBiaXRzLlxyXG4gICAgICAvLyAweDQwMDAwMDAwIGlzIDJeMzAsIDB4ODAwMDAwIGlzIDJeMjMsIDB4MWZmZmZmIGlzIDJeMjEgLSAxLlxyXG4gICAgICB2YXIgcmFuZG9tNTNiaXRJbnQgPSAoTWF0aC5yYW5kb20oKSAqIHBvdzJfNTMpICYgMHgxZmZmZmZcclxuICAgICAgID8gZnVuY3Rpb24gKCkgeyByZXR1cm4gbWF0aGZsb29yKE1hdGgucmFuZG9tKCkgKiBwb3cyXzUzKTsgfVxyXG4gICAgICAgOiBmdW5jdGlvbiAoKSB7IHJldHVybiAoKE1hdGgucmFuZG9tKCkgKiAweDQwMDAwMDAwIHwgMCkgKiAweDgwMDAwMCkgK1xyXG4gICAgICAgICAoTWF0aC5yYW5kb20oKSAqIDB4ODAwMDAwIHwgMCk7IH07XHJcblxyXG4gICAgICByZXR1cm4gZnVuY3Rpb24gKGRwKSB7XHJcbiAgICAgICAgdmFyIGEsIGIsIGUsIGssIHYsXHJcbiAgICAgICAgICBpID0gMCxcclxuICAgICAgICAgIGMgPSBbXSxcclxuICAgICAgICAgIHJhbmQgPSBuZXcgQmlnTnVtYmVyKE9ORSk7XHJcblxyXG4gICAgICAgIGlmIChkcCA9PSBudWxsKSBkcCA9IERFQ0lNQUxfUExBQ0VTO1xyXG4gICAgICAgIGVsc2UgaW50Q2hlY2soZHAsIDAsIE1BWCk7XHJcblxyXG4gICAgICAgIGsgPSBtYXRoY2VpbChkcCAvIExPR19CQVNFKTtcclxuXHJcbiAgICAgICAgaWYgKENSWVBUTykge1xyXG5cclxuICAgICAgICAgIC8vIEJyb3dzZXJzIHN1cHBvcnRpbmcgY3J5cHRvLmdldFJhbmRvbVZhbHVlcy5cclxuICAgICAgICAgIGlmIChjcnlwdG8uZ2V0UmFuZG9tVmFsdWVzKSB7XHJcblxyXG4gICAgICAgICAgICBhID0gY3J5cHRvLmdldFJhbmRvbVZhbHVlcyhuZXcgVWludDMyQXJyYXkoayAqPSAyKSk7XHJcblxyXG4gICAgICAgICAgICBmb3IgKDsgaSA8IGs7KSB7XHJcblxyXG4gICAgICAgICAgICAgIC8vIDUzIGJpdHM6XHJcbiAgICAgICAgICAgICAgLy8gKChNYXRoLnBvdygyLCAzMikgLSAxKSAqIE1hdGgucG93KDIsIDIxKSkudG9TdHJpbmcoMilcclxuICAgICAgICAgICAgICAvLyAxMTExMSAxMTExMTExMSAxMTExMTExMSAxMTExMTExMSAxMTEwMDAwMCAwMDAwMDAwMCAwMDAwMDAwMFxyXG4gICAgICAgICAgICAgIC8vICgoTWF0aC5wb3coMiwgMzIpIC0gMSkgPj4+IDExKS50b1N0cmluZygyKVxyXG4gICAgICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDExMTExIDExMTExMTExIDExMTExMTExXHJcbiAgICAgICAgICAgICAgLy8gMHgyMDAwMCBpcyAyXjIxLlxyXG4gICAgICAgICAgICAgIHYgPSBhW2ldICogMHgyMDAwMCArIChhW2kgKyAxXSA+Pj4gMTEpO1xyXG5cclxuICAgICAgICAgICAgICAvLyBSZWplY3Rpb24gc2FtcGxpbmc6XHJcbiAgICAgICAgICAgICAgLy8gMCA8PSB2IDwgOTAwNzE5OTI1NDc0MDk5MlxyXG4gICAgICAgICAgICAgIC8vIFByb2JhYmlsaXR5IHRoYXQgdiA+PSA5ZTE1LCBpc1xyXG4gICAgICAgICAgICAgIC8vIDcxOTkyNTQ3NDA5OTIgLyA5MDA3MTk5MjU0NzQwOTkyIH49IDAuMDAwOCwgaS5lLiAxIGluIDEyNTFcclxuICAgICAgICAgICAgICBpZiAodiA+PSA5ZTE1KSB7XHJcbiAgICAgICAgICAgICAgICBiID0gY3J5cHRvLmdldFJhbmRvbVZhbHVlcyhuZXcgVWludDMyQXJyYXkoMikpO1xyXG4gICAgICAgICAgICAgICAgYVtpXSA9IGJbMF07XHJcbiAgICAgICAgICAgICAgICBhW2kgKyAxXSA9IGJbMV07XHJcbiAgICAgICAgICAgICAgfSBlbHNlIHtcclxuXHJcbiAgICAgICAgICAgICAgICAvLyAwIDw9IHYgPD0gODk5OTk5OTk5OTk5OTk5OVxyXG4gICAgICAgICAgICAgICAgLy8gMCA8PSAodiAlIDFlMTQpIDw9IDk5OTk5OTk5OTk5OTk5XHJcbiAgICAgICAgICAgICAgICBjLnB1c2godiAlIDFlMTQpO1xyXG4gICAgICAgICAgICAgICAgaSArPSAyO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpID0gayAvIDI7XHJcblxyXG4gICAgICAgICAgLy8gTm9kZS5qcyBzdXBwb3J0aW5nIGNyeXB0by5yYW5kb21CeXRlcy5cclxuICAgICAgICAgIH0gZWxzZSBpZiAoY3J5cHRvLnJhbmRvbUJ5dGVzKSB7XHJcblxyXG4gICAgICAgICAgICAvLyBidWZmZXJcclxuICAgICAgICAgICAgYSA9IGNyeXB0by5yYW5kb21CeXRlcyhrICo9IDcpO1xyXG5cclxuICAgICAgICAgICAgZm9yICg7IGkgPCBrOykge1xyXG5cclxuICAgICAgICAgICAgICAvLyAweDEwMDAwMDAwMDAwMDAgaXMgMl40OCwgMHgxMDAwMDAwMDAwMCBpcyAyXjQwXHJcbiAgICAgICAgICAgICAgLy8gMHgxMDAwMDAwMDAgaXMgMl4zMiwgMHgxMDAwMDAwIGlzIDJeMjRcclxuICAgICAgICAgICAgICAvLyAxMTExMSAxMTExMTExMSAxMTExMTExMSAxMTExMTExMSAxMTExMTExMSAxMTExMTExMSAxMTExMTExMVxyXG4gICAgICAgICAgICAgIC8vIDAgPD0gdiA8IDkwMDcxOTkyNTQ3NDA5OTJcclxuICAgICAgICAgICAgICB2ID0gKChhW2ldICYgMzEpICogMHgxMDAwMDAwMDAwMDAwKSArIChhW2kgKyAxXSAqIDB4MTAwMDAwMDAwMDApICtcclxuICAgICAgICAgICAgICAgICAoYVtpICsgMl0gKiAweDEwMDAwMDAwMCkgKyAoYVtpICsgM10gKiAweDEwMDAwMDApICtcclxuICAgICAgICAgICAgICAgICAoYVtpICsgNF0gPDwgMTYpICsgKGFbaSArIDVdIDw8IDgpICsgYVtpICsgNl07XHJcblxyXG4gICAgICAgICAgICAgIGlmICh2ID49IDllMTUpIHtcclxuICAgICAgICAgICAgICAgIGNyeXB0by5yYW5kb21CeXRlcyg3KS5jb3B5KGEsIGkpO1xyXG4gICAgICAgICAgICAgIH0gZWxzZSB7XHJcblxyXG4gICAgICAgICAgICAgICAgLy8gMCA8PSAodiAlIDFlMTQpIDw9IDk5OTk5OTk5OTk5OTk5XHJcbiAgICAgICAgICAgICAgICBjLnB1c2godiAlIDFlMTQpO1xyXG4gICAgICAgICAgICAgICAgaSArPSA3O1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpID0gayAvIDc7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBDUllQVE8gPSBmYWxzZTtcclxuICAgICAgICAgICAgdGhyb3cgRXJyb3JcclxuICAgICAgICAgICAgIChiaWdudW1iZXJFcnJvciArICdjcnlwdG8gdW5hdmFpbGFibGUnKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIFVzZSBNYXRoLnJhbmRvbS5cclxuICAgICAgICBpZiAoIUNSWVBUTykge1xyXG5cclxuICAgICAgICAgIGZvciAoOyBpIDwgazspIHtcclxuICAgICAgICAgICAgdiA9IHJhbmRvbTUzYml0SW50KCk7XHJcbiAgICAgICAgICAgIGlmICh2IDwgOWUxNSkgY1tpKytdID0gdiAlIDFlMTQ7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBrID0gY1stLWldO1xyXG4gICAgICAgIGRwICU9IExPR19CQVNFO1xyXG5cclxuICAgICAgICAvLyBDb252ZXJ0IHRyYWlsaW5nIGRpZ2l0cyB0byB6ZXJvcyBhY2NvcmRpbmcgdG8gZHAuXHJcbiAgICAgICAgaWYgKGsgJiYgZHApIHtcclxuICAgICAgICAgIHYgPSBQT1dTX1RFTltMT0dfQkFTRSAtIGRwXTtcclxuICAgICAgICAgIGNbaV0gPSBtYXRoZmxvb3IoayAvIHYpICogdjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIFJlbW92ZSB0cmFpbGluZyBlbGVtZW50cyB3aGljaCBhcmUgemVyby5cclxuICAgICAgICBmb3IgKDsgY1tpXSA9PT0gMDsgYy5wb3AoKSwgaS0tKTtcclxuXHJcbiAgICAgICAgLy8gWmVybz9cclxuICAgICAgICBpZiAoaSA8IDApIHtcclxuICAgICAgICAgIGMgPSBbZSA9IDBdO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcblxyXG4gICAgICAgICAgLy8gUmVtb3ZlIGxlYWRpbmcgZWxlbWVudHMgd2hpY2ggYXJlIHplcm8gYW5kIGFkanVzdCBleHBvbmVudCBhY2NvcmRpbmdseS5cclxuICAgICAgICAgIGZvciAoZSA9IC0xIDsgY1swXSA9PT0gMDsgYy5zcGxpY2UoMCwgMSksIGUgLT0gTE9HX0JBU0UpO1xyXG5cclxuICAgICAgICAgIC8vIENvdW50IHRoZSBkaWdpdHMgb2YgdGhlIGZpcnN0IGVsZW1lbnQgb2YgYyB0byBkZXRlcm1pbmUgbGVhZGluZyB6ZXJvcywgYW5kLi4uXHJcbiAgICAgICAgICBmb3IgKGkgPSAxLCB2ID0gY1swXTsgdiA+PSAxMDsgdiAvPSAxMCwgaSsrKTtcclxuXHJcbiAgICAgICAgICAvLyBhZGp1c3QgdGhlIGV4cG9uZW50IGFjY29yZGluZ2x5LlxyXG4gICAgICAgICAgaWYgKGkgPCBMT0dfQkFTRSkgZSAtPSBMT0dfQkFTRSAtIGk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByYW5kLmUgPSBlO1xyXG4gICAgICAgIHJhbmQuYyA9IGM7XHJcbiAgICAgICAgcmV0dXJuIHJhbmQ7XHJcbiAgICAgIH07XHJcbiAgICB9KSgpO1xyXG5cclxuXHJcbiAgICAvKlxyXG4gICAgICogUmV0dXJuIGEgQmlnTnVtYmVyIHdob3NlIHZhbHVlIGlzIHRoZSBzdW0gb2YgdGhlIGFyZ3VtZW50cy5cclxuICAgICAqXHJcbiAgICAgKiBhcmd1bWVudHMge251bWJlcnxzdHJpbmd8QmlnTnVtYmVyfVxyXG4gICAgICovXHJcbiAgICBCaWdOdW1iZXIuc3VtID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICB2YXIgaSA9IDEsXHJcbiAgICAgICAgYXJncyA9IGFyZ3VtZW50cyxcclxuICAgICAgICBzdW0gPSBuZXcgQmlnTnVtYmVyKGFyZ3NbMF0pO1xyXG4gICAgICBmb3IgKDsgaSA8IGFyZ3MubGVuZ3RoOykgc3VtID0gc3VtLnBsdXMoYXJnc1tpKytdKTtcclxuICAgICAgcmV0dXJuIHN1bTtcclxuICAgIH07XHJcblxyXG5cclxuICAgIC8vIFBSSVZBVEUgRlVOQ1RJT05TXHJcblxyXG5cclxuICAgIC8vIENhbGxlZCBieSBCaWdOdW1iZXIgYW5kIEJpZ051bWJlci5wcm90b3R5cGUudG9TdHJpbmcuXHJcbiAgICBjb252ZXJ0QmFzZSA9IChmdW5jdGlvbiAoKSB7XHJcbiAgICAgIHZhciBkZWNpbWFsID0gJzAxMjM0NTY3ODknO1xyXG5cclxuICAgICAgLypcclxuICAgICAgICogQ29udmVydCBzdHJpbmcgb2YgYmFzZUluIHRvIGFuIGFycmF5IG9mIG51bWJlcnMgb2YgYmFzZU91dC5cclxuICAgICAgICogRWcuIHRvQmFzZU91dCgnMjU1JywgMTAsIDE2KSByZXR1cm5zIFsxNSwgMTVdLlxyXG4gICAgICAgKiBFZy4gdG9CYXNlT3V0KCdmZicsIDE2LCAxMCkgcmV0dXJucyBbMiwgNSwgNV0uXHJcbiAgICAgICAqL1xyXG4gICAgICBmdW5jdGlvbiB0b0Jhc2VPdXQoc3RyLCBiYXNlSW4sIGJhc2VPdXQsIGFscGhhYmV0KSB7XHJcbiAgICAgICAgdmFyIGosXHJcbiAgICAgICAgICBhcnIgPSBbMF0sXHJcbiAgICAgICAgICBhcnJMLFxyXG4gICAgICAgICAgaSA9IDAsXHJcbiAgICAgICAgICBsZW4gPSBzdHIubGVuZ3RoO1xyXG5cclxuICAgICAgICBmb3IgKDsgaSA8IGxlbjspIHtcclxuICAgICAgICAgIGZvciAoYXJyTCA9IGFyci5sZW5ndGg7IGFyckwtLTsgYXJyW2FyckxdICo9IGJhc2VJbik7XHJcblxyXG4gICAgICAgICAgYXJyWzBdICs9IGFscGhhYmV0LmluZGV4T2Yoc3RyLmNoYXJBdChpKyspKTtcclxuXHJcbiAgICAgICAgICBmb3IgKGogPSAwOyBqIDwgYXJyLmxlbmd0aDsgaisrKSB7XHJcblxyXG4gICAgICAgICAgICBpZiAoYXJyW2pdID4gYmFzZU91dCAtIDEpIHtcclxuICAgICAgICAgICAgICBpZiAoYXJyW2ogKyAxXSA9PSBudWxsKSBhcnJbaiArIDFdID0gMDtcclxuICAgICAgICAgICAgICBhcnJbaiArIDFdICs9IGFycltqXSAvIGJhc2VPdXQgfCAwO1xyXG4gICAgICAgICAgICAgIGFycltqXSAlPSBiYXNlT3V0O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gYXJyLnJldmVyc2UoKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgLy8gQ29udmVydCBhIG51bWVyaWMgc3RyaW5nIG9mIGJhc2VJbiB0byBhIG51bWVyaWMgc3RyaW5nIG9mIGJhc2VPdXQuXHJcbiAgICAgIC8vIElmIHRoZSBjYWxsZXIgaXMgdG9TdHJpbmcsIHdlIGFyZSBjb252ZXJ0aW5nIGZyb20gYmFzZSAxMCB0byBiYXNlT3V0LlxyXG4gICAgICAvLyBJZiB0aGUgY2FsbGVyIGlzIEJpZ051bWJlciwgd2UgYXJlIGNvbnZlcnRpbmcgZnJvbSBiYXNlSW4gdG8gYmFzZSAxMC5cclxuICAgICAgcmV0dXJuIGZ1bmN0aW9uIChzdHIsIGJhc2VJbiwgYmFzZU91dCwgc2lnbiwgY2FsbGVySXNUb1N0cmluZykge1xyXG4gICAgICAgIHZhciBhbHBoYWJldCwgZCwgZSwgaywgciwgeCwgeGMsIHksXHJcbiAgICAgICAgICBpID0gc3RyLmluZGV4T2YoJy4nKSxcclxuICAgICAgICAgIGRwID0gREVDSU1BTF9QTEFDRVMsXHJcbiAgICAgICAgICBybSA9IFJPVU5ESU5HX01PREU7XHJcblxyXG4gICAgICAgIC8vIE5vbi1pbnRlZ2VyLlxyXG4gICAgICAgIGlmIChpID49IDApIHtcclxuICAgICAgICAgIGsgPSBQT1dfUFJFQ0lTSU9OO1xyXG5cclxuICAgICAgICAgIC8vIFVubGltaXRlZCBwcmVjaXNpb24uXHJcbiAgICAgICAgICBQT1dfUFJFQ0lTSU9OID0gMDtcclxuICAgICAgICAgIHN0ciA9IHN0ci5yZXBsYWNlKCcuJywgJycpO1xyXG4gICAgICAgICAgeSA9IG5ldyBCaWdOdW1iZXIoYmFzZUluKTtcclxuICAgICAgICAgIHggPSB5LnBvdyhzdHIubGVuZ3RoIC0gaSk7XHJcbiAgICAgICAgICBQT1dfUFJFQ0lTSU9OID0gaztcclxuXHJcbiAgICAgICAgICAvLyBDb252ZXJ0IHN0ciBhcyBpZiBhbiBpbnRlZ2VyLCB0aGVuIHJlc3RvcmUgdGhlIGZyYWN0aW9uIHBhcnQgYnkgZGl2aWRpbmcgdGhlXHJcbiAgICAgICAgICAvLyByZXN1bHQgYnkgaXRzIGJhc2UgcmFpc2VkIHRvIGEgcG93ZXIuXHJcblxyXG4gICAgICAgICAgeS5jID0gdG9CYXNlT3V0KHRvRml4ZWRQb2ludChjb2VmZlRvU3RyaW5nKHguYyksIHguZSwgJzAnKSxcclxuICAgICAgICAgICAxMCwgYmFzZU91dCwgZGVjaW1hbCk7XHJcbiAgICAgICAgICB5LmUgPSB5LmMubGVuZ3RoO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gQ29udmVydCB0aGUgbnVtYmVyIGFzIGludGVnZXIuXHJcblxyXG4gICAgICAgIHhjID0gdG9CYXNlT3V0KHN0ciwgYmFzZUluLCBiYXNlT3V0LCBjYWxsZXJJc1RvU3RyaW5nXHJcbiAgICAgICAgID8gKGFscGhhYmV0ID0gQUxQSEFCRVQsIGRlY2ltYWwpXHJcbiAgICAgICAgIDogKGFscGhhYmV0ID0gZGVjaW1hbCwgQUxQSEFCRVQpKTtcclxuXHJcbiAgICAgICAgLy8geGMgbm93IHJlcHJlc2VudHMgc3RyIGFzIGFuIGludGVnZXIgYW5kIGNvbnZlcnRlZCB0byBiYXNlT3V0LiBlIGlzIHRoZSBleHBvbmVudC5cclxuICAgICAgICBlID0gayA9IHhjLmxlbmd0aDtcclxuXHJcbiAgICAgICAgLy8gUmVtb3ZlIHRyYWlsaW5nIHplcm9zLlxyXG4gICAgICAgIGZvciAoOyB4Y1stLWtdID09IDA7IHhjLnBvcCgpKTtcclxuXHJcbiAgICAgICAgLy8gWmVybz9cclxuICAgICAgICBpZiAoIXhjWzBdKSByZXR1cm4gYWxwaGFiZXQuY2hhckF0KDApO1xyXG5cclxuICAgICAgICAvLyBEb2VzIHN0ciByZXByZXNlbnQgYW4gaW50ZWdlcj8gSWYgc28sIG5vIG5lZWQgZm9yIHRoZSBkaXZpc2lvbi5cclxuICAgICAgICBpZiAoaSA8IDApIHtcclxuICAgICAgICAgIC0tZTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgeC5jID0geGM7XHJcbiAgICAgICAgICB4LmUgPSBlO1xyXG5cclxuICAgICAgICAgIC8vIFRoZSBzaWduIGlzIG5lZWRlZCBmb3IgY29ycmVjdCByb3VuZGluZy5cclxuICAgICAgICAgIHgucyA9IHNpZ247XHJcbiAgICAgICAgICB4ID0gZGl2KHgsIHksIGRwLCBybSwgYmFzZU91dCk7XHJcbiAgICAgICAgICB4YyA9IHguYztcclxuICAgICAgICAgIHIgPSB4LnI7XHJcbiAgICAgICAgICBlID0geC5lO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8geGMgbm93IHJlcHJlc2VudHMgc3RyIGNvbnZlcnRlZCB0byBiYXNlT3V0LlxyXG5cclxuICAgICAgICAvLyBUSGUgaW5kZXggb2YgdGhlIHJvdW5kaW5nIGRpZ2l0LlxyXG4gICAgICAgIGQgPSBlICsgZHAgKyAxO1xyXG5cclxuICAgICAgICAvLyBUaGUgcm91bmRpbmcgZGlnaXQ6IHRoZSBkaWdpdCB0byB0aGUgcmlnaHQgb2YgdGhlIGRpZ2l0IHRoYXQgbWF5IGJlIHJvdW5kZWQgdXAuXHJcbiAgICAgICAgaSA9IHhjW2RdO1xyXG5cclxuICAgICAgICAvLyBMb29rIGF0IHRoZSByb3VuZGluZyBkaWdpdHMgYW5kIG1vZGUgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgdG8gcm91bmQgdXAuXHJcblxyXG4gICAgICAgIGsgPSBiYXNlT3V0IC8gMjtcclxuICAgICAgICByID0gciB8fCBkIDwgMCB8fCB4Y1tkICsgMV0gIT0gbnVsbDtcclxuXHJcbiAgICAgICAgciA9IHJtIDwgNCA/IChpICE9IG51bGwgfHwgcikgJiYgKHJtID09IDAgfHwgcm0gPT0gKHgucyA8IDAgPyAzIDogMikpXHJcbiAgICAgICAgICAgICAgOiBpID4gayB8fCBpID09IGsgJiYocm0gPT0gNCB8fCByIHx8IHJtID09IDYgJiYgeGNbZCAtIDFdICYgMSB8fFxyXG4gICAgICAgICAgICAgICBybSA9PSAoeC5zIDwgMCA/IDggOiA3KSk7XHJcblxyXG4gICAgICAgIC8vIElmIHRoZSBpbmRleCBvZiB0aGUgcm91bmRpbmcgZGlnaXQgaXMgbm90IGdyZWF0ZXIgdGhhbiB6ZXJvLCBvciB4YyByZXByZXNlbnRzXHJcbiAgICAgICAgLy8gemVybywgdGhlbiB0aGUgcmVzdWx0IG9mIHRoZSBiYXNlIGNvbnZlcnNpb24gaXMgemVybyBvciwgaWYgcm91bmRpbmcgdXAsIGEgdmFsdWVcclxuICAgICAgICAvLyBzdWNoIGFzIDAuMDAwMDEuXHJcbiAgICAgICAgaWYgKGQgPCAxIHx8ICF4Y1swXSkge1xyXG5cclxuICAgICAgICAgIC8vIDFeLWRwIG9yIDBcclxuICAgICAgICAgIHN0ciA9IHIgPyB0b0ZpeGVkUG9pbnQoYWxwaGFiZXQuY2hhckF0KDEpLCAtZHAsIGFscGhhYmV0LmNoYXJBdCgwKSkgOiBhbHBoYWJldC5jaGFyQXQoMCk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuXHJcbiAgICAgICAgICAvLyBUcnVuY2F0ZSB4YyB0byB0aGUgcmVxdWlyZWQgbnVtYmVyIG9mIGRlY2ltYWwgcGxhY2VzLlxyXG4gICAgICAgICAgeGMubGVuZ3RoID0gZDtcclxuXHJcbiAgICAgICAgICAvLyBSb3VuZCB1cD9cclxuICAgICAgICAgIGlmIChyKSB7XHJcblxyXG4gICAgICAgICAgICAvLyBSb3VuZGluZyB1cCBtYXkgbWVhbiB0aGUgcHJldmlvdXMgZGlnaXQgaGFzIHRvIGJlIHJvdW5kZWQgdXAgYW5kIHNvIG9uLlxyXG4gICAgICAgICAgICBmb3IgKC0tYmFzZU91dDsgKyt4Y1stLWRdID4gYmFzZU91dDspIHtcclxuICAgICAgICAgICAgICB4Y1tkXSA9IDA7XHJcblxyXG4gICAgICAgICAgICAgIGlmICghZCkge1xyXG4gICAgICAgICAgICAgICAgKytlO1xyXG4gICAgICAgICAgICAgICAgeGMgPSBbMV0uY29uY2F0KHhjKTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAvLyBEZXRlcm1pbmUgdHJhaWxpbmcgemVyb3MuXHJcbiAgICAgICAgICBmb3IgKGsgPSB4Yy5sZW5ndGg7ICF4Y1stLWtdOyk7XHJcblxyXG4gICAgICAgICAgLy8gRS5nLiBbNCwgMTEsIDE1XSBiZWNvbWVzIDRiZi5cclxuICAgICAgICAgIGZvciAoaSA9IDAsIHN0ciA9ICcnOyBpIDw9IGs7IHN0ciArPSBhbHBoYWJldC5jaGFyQXQoeGNbaSsrXSkpO1xyXG5cclxuICAgICAgICAgIC8vIEFkZCBsZWFkaW5nIHplcm9zLCBkZWNpbWFsIHBvaW50IGFuZCB0cmFpbGluZyB6ZXJvcyBhcyByZXF1aXJlZC5cclxuICAgICAgICAgIHN0ciA9IHRvRml4ZWRQb2ludChzdHIsIGUsIGFscGhhYmV0LmNoYXJBdCgwKSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBUaGUgY2FsbGVyIHdpbGwgYWRkIHRoZSBzaWduLlxyXG4gICAgICAgIHJldHVybiBzdHI7XHJcbiAgICAgIH07XHJcbiAgICB9KSgpO1xyXG5cclxuXHJcbiAgICAvLyBQZXJmb3JtIGRpdmlzaW9uIGluIHRoZSBzcGVjaWZpZWQgYmFzZS4gQ2FsbGVkIGJ5IGRpdiBhbmQgY29udmVydEJhc2UuXHJcbiAgICBkaXYgPSAoZnVuY3Rpb24gKCkge1xyXG5cclxuICAgICAgLy8gQXNzdW1lIG5vbi16ZXJvIHggYW5kIGsuXHJcbiAgICAgIGZ1bmN0aW9uIG11bHRpcGx5KHgsIGssIGJhc2UpIHtcclxuICAgICAgICB2YXIgbSwgdGVtcCwgeGxvLCB4aGksXHJcbiAgICAgICAgICBjYXJyeSA9IDAsXHJcbiAgICAgICAgICBpID0geC5sZW5ndGgsXHJcbiAgICAgICAgICBrbG8gPSBrICUgU1FSVF9CQVNFLFxyXG4gICAgICAgICAga2hpID0gayAvIFNRUlRfQkFTRSB8IDA7XHJcblxyXG4gICAgICAgIGZvciAoeCA9IHguc2xpY2UoKTsgaS0tOykge1xyXG4gICAgICAgICAgeGxvID0geFtpXSAlIFNRUlRfQkFTRTtcclxuICAgICAgICAgIHhoaSA9IHhbaV0gLyBTUVJUX0JBU0UgfCAwO1xyXG4gICAgICAgICAgbSA9IGtoaSAqIHhsbyArIHhoaSAqIGtsbztcclxuICAgICAgICAgIHRlbXAgPSBrbG8gKiB4bG8gKyAoKG0gJSBTUVJUX0JBU0UpICogU1FSVF9CQVNFKSArIGNhcnJ5O1xyXG4gICAgICAgICAgY2FycnkgPSAodGVtcCAvIGJhc2UgfCAwKSArIChtIC8gU1FSVF9CQVNFIHwgMCkgKyBraGkgKiB4aGk7XHJcbiAgICAgICAgICB4W2ldID0gdGVtcCAlIGJhc2U7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoY2FycnkpIHggPSBbY2FycnldLmNvbmNhdCh4KTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHg7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGZ1bmN0aW9uIGNvbXBhcmUoYSwgYiwgYUwsIGJMKSB7XHJcbiAgICAgICAgdmFyIGksIGNtcDtcclxuXHJcbiAgICAgICAgaWYgKGFMICE9IGJMKSB7XHJcbiAgICAgICAgICBjbXAgPSBhTCA+IGJMID8gMSA6IC0xO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcblxyXG4gICAgICAgICAgZm9yIChpID0gY21wID0gMDsgaSA8IGFMOyBpKyspIHtcclxuXHJcbiAgICAgICAgICAgIGlmIChhW2ldICE9IGJbaV0pIHtcclxuICAgICAgICAgICAgICBjbXAgPSBhW2ldID4gYltpXSA/IDEgOiAtMTtcclxuICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGNtcDtcclxuICAgICAgfVxyXG5cclxuICAgICAgZnVuY3Rpb24gc3VidHJhY3QoYSwgYiwgYUwsIGJhc2UpIHtcclxuICAgICAgICB2YXIgaSA9IDA7XHJcblxyXG4gICAgICAgIC8vIFN1YnRyYWN0IGIgZnJvbSBhLlxyXG4gICAgICAgIGZvciAoOyBhTC0tOykge1xyXG4gICAgICAgICAgYVthTF0gLT0gaTtcclxuICAgICAgICAgIGkgPSBhW2FMXSA8IGJbYUxdID8gMSA6IDA7XHJcbiAgICAgICAgICBhW2FMXSA9IGkgKiBiYXNlICsgYVthTF0gLSBiW2FMXTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIFJlbW92ZSBsZWFkaW5nIHplcm9zLlxyXG4gICAgICAgIGZvciAoOyAhYVswXSAmJiBhLmxlbmd0aCA+IDE7IGEuc3BsaWNlKDAsIDEpKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgLy8geDogZGl2aWRlbmQsIHk6IGRpdmlzb3IuXHJcbiAgICAgIHJldHVybiBmdW5jdGlvbiAoeCwgeSwgZHAsIHJtLCBiYXNlKSB7XHJcbiAgICAgICAgdmFyIGNtcCwgZSwgaSwgbW9yZSwgbiwgcHJvZCwgcHJvZEwsIHEsIHFjLCByZW0sIHJlbUwsIHJlbTAsIHhpLCB4TCwgeWMwLFxyXG4gICAgICAgICAgeUwsIHl6LFxyXG4gICAgICAgICAgcyA9IHgucyA9PSB5LnMgPyAxIDogLTEsXHJcbiAgICAgICAgICB4YyA9IHguYyxcclxuICAgICAgICAgIHljID0geS5jO1xyXG5cclxuICAgICAgICAvLyBFaXRoZXIgTmFOLCBJbmZpbml0eSBvciAwP1xyXG4gICAgICAgIGlmICgheGMgfHwgIXhjWzBdIHx8ICF5YyB8fCAheWNbMF0pIHtcclxuXHJcbiAgICAgICAgICByZXR1cm4gbmV3IEJpZ051bWJlcihcclxuXHJcbiAgICAgICAgICAgLy8gUmV0dXJuIE5hTiBpZiBlaXRoZXIgTmFOLCBvciBib3RoIEluZmluaXR5IG9yIDAuXHJcbiAgICAgICAgICAgIXgucyB8fCAheS5zIHx8ICh4YyA/IHljICYmIHhjWzBdID09IHljWzBdIDogIXljKSA/IE5hTiA6XHJcblxyXG4gICAgICAgICAgICAvLyBSZXR1cm4gwrEwIGlmIHggaXMgwrEwIG9yIHkgaXMgwrFJbmZpbml0eSwgb3IgcmV0dXJuIMKxSW5maW5pdHkgYXMgeSBpcyDCsTAuXHJcbiAgICAgICAgICAgIHhjICYmIHhjWzBdID09IDAgfHwgIXljID8gcyAqIDAgOiBzIC8gMFxyXG4gICAgICAgICApO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcSA9IG5ldyBCaWdOdW1iZXIocyk7XHJcbiAgICAgICAgcWMgPSBxLmMgPSBbXTtcclxuICAgICAgICBlID0geC5lIC0geS5lO1xyXG4gICAgICAgIHMgPSBkcCArIGUgKyAxO1xyXG5cclxuICAgICAgICBpZiAoIWJhc2UpIHtcclxuICAgICAgICAgIGJhc2UgPSBCQVNFO1xyXG4gICAgICAgICAgZSA9IGJpdEZsb29yKHguZSAvIExPR19CQVNFKSAtIGJpdEZsb29yKHkuZSAvIExPR19CQVNFKTtcclxuICAgICAgICAgIHMgPSBzIC8gTE9HX0JBU0UgfCAwO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gUmVzdWx0IGV4cG9uZW50IG1heSBiZSBvbmUgbGVzcyB0aGVuIHRoZSBjdXJyZW50IHZhbHVlIG9mIGUuXHJcbiAgICAgICAgLy8gVGhlIGNvZWZmaWNpZW50cyBvZiB0aGUgQmlnTnVtYmVycyBmcm9tIGNvbnZlcnRCYXNlIG1heSBoYXZlIHRyYWlsaW5nIHplcm9zLlxyXG4gICAgICAgIGZvciAoaSA9IDA7IHljW2ldID09ICh4Y1tpXSB8fCAwKTsgaSsrKTtcclxuXHJcbiAgICAgICAgaWYgKHljW2ldID4gKHhjW2ldIHx8IDApKSBlLS07XHJcblxyXG4gICAgICAgIGlmIChzIDwgMCkge1xyXG4gICAgICAgICAgcWMucHVzaCgxKTtcclxuICAgICAgICAgIG1vcmUgPSB0cnVlO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB4TCA9IHhjLmxlbmd0aDtcclxuICAgICAgICAgIHlMID0geWMubGVuZ3RoO1xyXG4gICAgICAgICAgaSA9IDA7XHJcbiAgICAgICAgICBzICs9IDI7XHJcblxyXG4gICAgICAgICAgLy8gTm9ybWFsaXNlIHhjIGFuZCB5YyBzbyBoaWdoZXN0IG9yZGVyIGRpZ2l0IG9mIHljIGlzID49IGJhc2UgLyAyLlxyXG5cclxuICAgICAgICAgIG4gPSBtYXRoZmxvb3IoYmFzZSAvICh5Y1swXSArIDEpKTtcclxuXHJcbiAgICAgICAgICAvLyBOb3QgbmVjZXNzYXJ5LCBidXQgdG8gaGFuZGxlIG9kZCBiYXNlcyB3aGVyZSB5Y1swXSA9PSAoYmFzZSAvIDIpIC0gMS5cclxuICAgICAgICAgIC8vIGlmIChuID4gMSB8fCBuKysgPT0gMSAmJiB5Y1swXSA8IGJhc2UgLyAyKSB7XHJcbiAgICAgICAgICBpZiAobiA+IDEpIHtcclxuICAgICAgICAgICAgeWMgPSBtdWx0aXBseSh5YywgbiwgYmFzZSk7XHJcbiAgICAgICAgICAgIHhjID0gbXVsdGlwbHkoeGMsIG4sIGJhc2UpO1xyXG4gICAgICAgICAgICB5TCA9IHljLmxlbmd0aDtcclxuICAgICAgICAgICAgeEwgPSB4Yy5sZW5ndGg7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgeGkgPSB5TDtcclxuICAgICAgICAgIHJlbSA9IHhjLnNsaWNlKDAsIHlMKTtcclxuICAgICAgICAgIHJlbUwgPSByZW0ubGVuZ3RoO1xyXG5cclxuICAgICAgICAgIC8vIEFkZCB6ZXJvcyB0byBtYWtlIHJlbWFpbmRlciBhcyBsb25nIGFzIGRpdmlzb3IuXHJcbiAgICAgICAgICBmb3IgKDsgcmVtTCA8IHlMOyByZW1bcmVtTCsrXSA9IDApO1xyXG4gICAgICAgICAgeXogPSB5Yy5zbGljZSgpO1xyXG4gICAgICAgICAgeXogPSBbMF0uY29uY2F0KHl6KTtcclxuICAgICAgICAgIHljMCA9IHljWzBdO1xyXG4gICAgICAgICAgaWYgKHljWzFdID49IGJhc2UgLyAyKSB5YzArKztcclxuICAgICAgICAgIC8vIE5vdCBuZWNlc3NhcnksIGJ1dCB0byBwcmV2ZW50IHRyaWFsIGRpZ2l0IG4gPiBiYXNlLCB3aGVuIHVzaW5nIGJhc2UgMy5cclxuICAgICAgICAgIC8vIGVsc2UgaWYgKGJhc2UgPT0gMyAmJiB5YzAgPT0gMSkgeWMwID0gMSArIDFlLTE1O1xyXG5cclxuICAgICAgICAgIGRvIHtcclxuICAgICAgICAgICAgbiA9IDA7XHJcblxyXG4gICAgICAgICAgICAvLyBDb21wYXJlIGRpdmlzb3IgYW5kIHJlbWFpbmRlci5cclxuICAgICAgICAgICAgY21wID0gY29tcGFyZSh5YywgcmVtLCB5TCwgcmVtTCk7XHJcblxyXG4gICAgICAgICAgICAvLyBJZiBkaXZpc29yIDwgcmVtYWluZGVyLlxyXG4gICAgICAgICAgICBpZiAoY21wIDwgMCkge1xyXG5cclxuICAgICAgICAgICAgICAvLyBDYWxjdWxhdGUgdHJpYWwgZGlnaXQsIG4uXHJcblxyXG4gICAgICAgICAgICAgIHJlbTAgPSByZW1bMF07XHJcbiAgICAgICAgICAgICAgaWYgKHlMICE9IHJlbUwpIHJlbTAgPSByZW0wICogYmFzZSArIChyZW1bMV0gfHwgMCk7XHJcblxyXG4gICAgICAgICAgICAgIC8vIG4gaXMgaG93IG1hbnkgdGltZXMgdGhlIGRpdmlzb3IgZ29lcyBpbnRvIHRoZSBjdXJyZW50IHJlbWFpbmRlci5cclxuICAgICAgICAgICAgICBuID0gbWF0aGZsb29yKHJlbTAgLyB5YzApO1xyXG5cclxuICAgICAgICAgICAgICAvLyAgQWxnb3JpdGhtOlxyXG4gICAgICAgICAgICAgIC8vICBwcm9kdWN0ID0gZGl2aXNvciBtdWx0aXBsaWVkIGJ5IHRyaWFsIGRpZ2l0IChuKS5cclxuICAgICAgICAgICAgICAvLyAgQ29tcGFyZSBwcm9kdWN0IGFuZCByZW1haW5kZXIuXHJcbiAgICAgICAgICAgICAgLy8gIElmIHByb2R1Y3QgaXMgZ3JlYXRlciB0aGFuIHJlbWFpbmRlcjpcclxuICAgICAgICAgICAgICAvLyAgICBTdWJ0cmFjdCBkaXZpc29yIGZyb20gcHJvZHVjdCwgZGVjcmVtZW50IHRyaWFsIGRpZ2l0LlxyXG4gICAgICAgICAgICAgIC8vICBTdWJ0cmFjdCBwcm9kdWN0IGZyb20gcmVtYWluZGVyLlxyXG4gICAgICAgICAgICAgIC8vICBJZiBwcm9kdWN0IHdhcyBsZXNzIHRoYW4gcmVtYWluZGVyIGF0IHRoZSBsYXN0IGNvbXBhcmU6XHJcbiAgICAgICAgICAgICAgLy8gICAgQ29tcGFyZSBuZXcgcmVtYWluZGVyIGFuZCBkaXZpc29yLlxyXG4gICAgICAgICAgICAgIC8vICAgIElmIHJlbWFpbmRlciBpcyBncmVhdGVyIHRoYW4gZGl2aXNvcjpcclxuICAgICAgICAgICAgICAvLyAgICAgIFN1YnRyYWN0IGRpdmlzb3IgZnJvbSByZW1haW5kZXIsIGluY3JlbWVudCB0cmlhbCBkaWdpdC5cclxuXHJcbiAgICAgICAgICAgICAgaWYgKG4gPiAxKSB7XHJcblxyXG4gICAgICAgICAgICAgICAgLy8gbiBtYXkgYmUgPiBiYXNlIG9ubHkgd2hlbiBiYXNlIGlzIDMuXHJcbiAgICAgICAgICAgICAgICBpZiAobiA+PSBiYXNlKSBuID0gYmFzZSAtIDE7XHJcblxyXG4gICAgICAgICAgICAgICAgLy8gcHJvZHVjdCA9IGRpdmlzb3IgKiB0cmlhbCBkaWdpdC5cclxuICAgICAgICAgICAgICAgIHByb2QgPSBtdWx0aXBseSh5YywgbiwgYmFzZSk7XHJcbiAgICAgICAgICAgICAgICBwcm9kTCA9IHByb2QubGVuZ3RoO1xyXG4gICAgICAgICAgICAgICAgcmVtTCA9IHJlbS5sZW5ndGg7XHJcblxyXG4gICAgICAgICAgICAgICAgLy8gQ29tcGFyZSBwcm9kdWN0IGFuZCByZW1haW5kZXIuXHJcbiAgICAgICAgICAgICAgICAvLyBJZiBwcm9kdWN0ID4gcmVtYWluZGVyIHRoZW4gdHJpYWwgZGlnaXQgbiB0b28gaGlnaC5cclxuICAgICAgICAgICAgICAgIC8vIG4gaXMgMSB0b28gaGlnaCBhYm91dCA1JSBvZiB0aGUgdGltZSwgYW5kIGlzIG5vdCBrbm93biB0byBoYXZlXHJcbiAgICAgICAgICAgICAgICAvLyBldmVyIGJlZW4gbW9yZSB0aGFuIDEgdG9vIGhpZ2guXHJcbiAgICAgICAgICAgICAgICB3aGlsZSAoY29tcGFyZShwcm9kLCByZW0sIHByb2RMLCByZW1MKSA9PSAxKSB7XHJcbiAgICAgICAgICAgICAgICAgIG4tLTtcclxuXHJcbiAgICAgICAgICAgICAgICAgIC8vIFN1YnRyYWN0IGRpdmlzb3IgZnJvbSBwcm9kdWN0LlxyXG4gICAgICAgICAgICAgICAgICBzdWJ0cmFjdChwcm9kLCB5TCA8IHByb2RMID8geXogOiB5YywgcHJvZEwsIGJhc2UpO1xyXG4gICAgICAgICAgICAgICAgICBwcm9kTCA9IHByb2QubGVuZ3RoO1xyXG4gICAgICAgICAgICAgICAgICBjbXAgPSAxO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH0gZWxzZSB7XHJcblxyXG4gICAgICAgICAgICAgICAgLy8gbiBpcyAwIG9yIDEsIGNtcCBpcyAtMS5cclxuICAgICAgICAgICAgICAgIC8vIElmIG4gaXMgMCwgdGhlcmUgaXMgbm8gbmVlZCB0byBjb21wYXJlIHljIGFuZCByZW0gYWdhaW4gYmVsb3csXHJcbiAgICAgICAgICAgICAgICAvLyBzbyBjaGFuZ2UgY21wIHRvIDEgdG8gYXZvaWQgaXQuXHJcbiAgICAgICAgICAgICAgICAvLyBJZiBuIGlzIDEsIGxlYXZlIGNtcCBhcyAtMSwgc28geWMgYW5kIHJlbSBhcmUgY29tcGFyZWQgYWdhaW4uXHJcbiAgICAgICAgICAgICAgICBpZiAobiA9PSAwKSB7XHJcblxyXG4gICAgICAgICAgICAgICAgICAvLyBkaXZpc29yIDwgcmVtYWluZGVyLCBzbyBuIG11c3QgYmUgYXQgbGVhc3QgMS5cclxuICAgICAgICAgICAgICAgICAgY21wID0gbiA9IDE7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgLy8gcHJvZHVjdCA9IGRpdmlzb3JcclxuICAgICAgICAgICAgICAgIHByb2QgPSB5Yy5zbGljZSgpO1xyXG4gICAgICAgICAgICAgICAgcHJvZEwgPSBwcm9kLmxlbmd0aDtcclxuICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgIGlmIChwcm9kTCA8IHJlbUwpIHByb2QgPSBbMF0uY29uY2F0KHByb2QpO1xyXG5cclxuICAgICAgICAgICAgICAvLyBTdWJ0cmFjdCBwcm9kdWN0IGZyb20gcmVtYWluZGVyLlxyXG4gICAgICAgICAgICAgIHN1YnRyYWN0KHJlbSwgcHJvZCwgcmVtTCwgYmFzZSk7XHJcbiAgICAgICAgICAgICAgcmVtTCA9IHJlbS5sZW5ndGg7XHJcblxyXG4gICAgICAgICAgICAgICAvLyBJZiBwcm9kdWN0IHdhcyA8IHJlbWFpbmRlci5cclxuICAgICAgICAgICAgICBpZiAoY21wID09IC0xKSB7XHJcblxyXG4gICAgICAgICAgICAgICAgLy8gQ29tcGFyZSBkaXZpc29yIGFuZCBuZXcgcmVtYWluZGVyLlxyXG4gICAgICAgICAgICAgICAgLy8gSWYgZGl2aXNvciA8IG5ldyByZW1haW5kZXIsIHN1YnRyYWN0IGRpdmlzb3IgZnJvbSByZW1haW5kZXIuXHJcbiAgICAgICAgICAgICAgICAvLyBUcmlhbCBkaWdpdCBuIHRvbyBsb3cuXHJcbiAgICAgICAgICAgICAgICAvLyBuIGlzIDEgdG9vIGxvdyBhYm91dCA1JSBvZiB0aGUgdGltZSwgYW5kIHZlcnkgcmFyZWx5IDIgdG9vIGxvdy5cclxuICAgICAgICAgICAgICAgIHdoaWxlIChjb21wYXJlKHljLCByZW0sIHlMLCByZW1MKSA8IDEpIHtcclxuICAgICAgICAgICAgICAgICAgbisrO1xyXG5cclxuICAgICAgICAgICAgICAgICAgLy8gU3VidHJhY3QgZGl2aXNvciBmcm9tIHJlbWFpbmRlci5cclxuICAgICAgICAgICAgICAgICAgc3VidHJhY3QocmVtLCB5TCA8IHJlbUwgPyB5eiA6IHljLCByZW1MLCBiYXNlKTtcclxuICAgICAgICAgICAgICAgICAgcmVtTCA9IHJlbS5sZW5ndGg7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKGNtcCA9PT0gMCkge1xyXG4gICAgICAgICAgICAgIG4rKztcclxuICAgICAgICAgICAgICByZW0gPSBbMF07XHJcbiAgICAgICAgICAgIH0gLy8gZWxzZSBjbXAgPT09IDEgYW5kIG4gd2lsbCBiZSAwXHJcblxyXG4gICAgICAgICAgICAvLyBBZGQgdGhlIG5leHQgZGlnaXQsIG4sIHRvIHRoZSByZXN1bHQgYXJyYXkuXHJcbiAgICAgICAgICAgIHFjW2krK10gPSBuO1xyXG5cclxuICAgICAgICAgICAgLy8gVXBkYXRlIHRoZSByZW1haW5kZXIuXHJcbiAgICAgICAgICAgIGlmIChyZW1bMF0pIHtcclxuICAgICAgICAgICAgICByZW1bcmVtTCsrXSA9IHhjW3hpXSB8fCAwO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIHJlbSA9IFt4Y1t4aV1dO1xyXG4gICAgICAgICAgICAgIHJlbUwgPSAxO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9IHdoaWxlICgoeGkrKyA8IHhMIHx8IHJlbVswXSAhPSBudWxsKSAmJiBzLS0pO1xyXG5cclxuICAgICAgICAgIG1vcmUgPSByZW1bMF0gIT0gbnVsbDtcclxuXHJcbiAgICAgICAgICAvLyBMZWFkaW5nIHplcm8/XHJcbiAgICAgICAgICBpZiAoIXFjWzBdKSBxYy5zcGxpY2UoMCwgMSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoYmFzZSA9PSBCQVNFKSB7XHJcblxyXG4gICAgICAgICAgLy8gVG8gY2FsY3VsYXRlIHEuZSwgZmlyc3QgZ2V0IHRoZSBudW1iZXIgb2YgZGlnaXRzIG9mIHFjWzBdLlxyXG4gICAgICAgICAgZm9yIChpID0gMSwgcyA9IHFjWzBdOyBzID49IDEwOyBzIC89IDEwLCBpKyspO1xyXG5cclxuICAgICAgICAgIHJvdW5kKHEsIGRwICsgKHEuZSA9IGkgKyBlICogTE9HX0JBU0UgLSAxKSArIDEsIHJtLCBtb3JlKTtcclxuXHJcbiAgICAgICAgLy8gQ2FsbGVyIGlzIGNvbnZlcnRCYXNlLlxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBxLmUgPSBlO1xyXG4gICAgICAgICAgcS5yID0gK21vcmU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gcTtcclxuICAgICAgfTtcclxuICAgIH0pKCk7XHJcblxyXG5cclxuICAgIC8qXHJcbiAgICAgKiBSZXR1cm4gYSBzdHJpbmcgcmVwcmVzZW50aW5nIHRoZSB2YWx1ZSBvZiBCaWdOdW1iZXIgbiBpbiBmaXhlZC1wb2ludCBvciBleHBvbmVudGlhbFxyXG4gICAgICogbm90YXRpb24gcm91bmRlZCB0byB0aGUgc3BlY2lmaWVkIGRlY2ltYWwgcGxhY2VzIG9yIHNpZ25pZmljYW50IGRpZ2l0cy5cclxuICAgICAqXHJcbiAgICAgKiBuOiBhIEJpZ051bWJlci5cclxuICAgICAqIGk6IHRoZSBpbmRleCBvZiB0aGUgbGFzdCBkaWdpdCByZXF1aXJlZCAoaS5lLiB0aGUgZGlnaXQgdGhhdCBtYXkgYmUgcm91bmRlZCB1cCkuXHJcbiAgICAgKiBybTogdGhlIHJvdW5kaW5nIG1vZGUuXHJcbiAgICAgKiBpZDogMSAodG9FeHBvbmVudGlhbCkgb3IgMiAodG9QcmVjaXNpb24pLlxyXG4gICAgICovXHJcbiAgICBmdW5jdGlvbiBmb3JtYXQobiwgaSwgcm0sIGlkKSB7XHJcbiAgICAgIHZhciBjMCwgZSwgbmUsIGxlbiwgc3RyO1xyXG5cclxuICAgICAgaWYgKHJtID09IG51bGwpIHJtID0gUk9VTkRJTkdfTU9ERTtcclxuICAgICAgZWxzZSBpbnRDaGVjayhybSwgMCwgOCk7XHJcblxyXG4gICAgICBpZiAoIW4uYykgcmV0dXJuIG4udG9TdHJpbmcoKTtcclxuXHJcbiAgICAgIGMwID0gbi5jWzBdO1xyXG4gICAgICBuZSA9IG4uZTtcclxuXHJcbiAgICAgIGlmIChpID09IG51bGwpIHtcclxuICAgICAgICBzdHIgPSBjb2VmZlRvU3RyaW5nKG4uYyk7XHJcbiAgICAgICAgc3RyID0gaWQgPT0gMSB8fCBpZCA9PSAyICYmIChuZSA8PSBUT19FWFBfTkVHIHx8IG5lID49IFRPX0VYUF9QT1MpXHJcbiAgICAgICAgID8gdG9FeHBvbmVudGlhbChzdHIsIG5lKVxyXG4gICAgICAgICA6IHRvRml4ZWRQb2ludChzdHIsIG5lLCAnMCcpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIG4gPSByb3VuZChuZXcgQmlnTnVtYmVyKG4pLCBpLCBybSk7XHJcblxyXG4gICAgICAgIC8vIG4uZSBtYXkgaGF2ZSBjaGFuZ2VkIGlmIHRoZSB2YWx1ZSB3YXMgcm91bmRlZCB1cC5cclxuICAgICAgICBlID0gbi5lO1xyXG5cclxuICAgICAgICBzdHIgPSBjb2VmZlRvU3RyaW5nKG4uYyk7XHJcbiAgICAgICAgbGVuID0gc3RyLmxlbmd0aDtcclxuXHJcbiAgICAgICAgLy8gdG9QcmVjaXNpb24gcmV0dXJucyBleHBvbmVudGlhbCBub3RhdGlvbiBpZiB0aGUgbnVtYmVyIG9mIHNpZ25pZmljYW50IGRpZ2l0c1xyXG4gICAgICAgIC8vIHNwZWNpZmllZCBpcyBsZXNzIHRoYW4gdGhlIG51bWJlciBvZiBkaWdpdHMgbmVjZXNzYXJ5IHRvIHJlcHJlc2VudCB0aGUgaW50ZWdlclxyXG4gICAgICAgIC8vIHBhcnQgb2YgdGhlIHZhbHVlIGluIGZpeGVkLXBvaW50IG5vdGF0aW9uLlxyXG5cclxuICAgICAgICAvLyBFeHBvbmVudGlhbCBub3RhdGlvbi5cclxuICAgICAgICBpZiAoaWQgPT0gMSB8fCBpZCA9PSAyICYmIChpIDw9IGUgfHwgZSA8PSBUT19FWFBfTkVHKSkge1xyXG5cclxuICAgICAgICAgIC8vIEFwcGVuZCB6ZXJvcz9cclxuICAgICAgICAgIGZvciAoOyBsZW4gPCBpOyBzdHIgKz0gJzAnLCBsZW4rKyk7XHJcbiAgICAgICAgICBzdHIgPSB0b0V4cG9uZW50aWFsKHN0ciwgZSk7XHJcblxyXG4gICAgICAgIC8vIEZpeGVkLXBvaW50IG5vdGF0aW9uLlxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBpIC09IG5lO1xyXG4gICAgICAgICAgc3RyID0gdG9GaXhlZFBvaW50KHN0ciwgZSwgJzAnKTtcclxuXHJcbiAgICAgICAgICAvLyBBcHBlbmQgemVyb3M/XHJcbiAgICAgICAgICBpZiAoZSArIDEgPiBsZW4pIHtcclxuICAgICAgICAgICAgaWYgKC0taSA+IDApIGZvciAoc3RyICs9ICcuJzsgaS0tOyBzdHIgKz0gJzAnKTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGkgKz0gZSAtIGxlbjtcclxuICAgICAgICAgICAgaWYgKGkgPiAwKSB7XHJcbiAgICAgICAgICAgICAgaWYgKGUgKyAxID09IGxlbikgc3RyICs9ICcuJztcclxuICAgICAgICAgICAgICBmb3IgKDsgaS0tOyBzdHIgKz0gJzAnKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgcmV0dXJuIG4ucyA8IDAgJiYgYzAgPyAnLScgKyBzdHIgOiBzdHI7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8vIEhhbmRsZSBCaWdOdW1iZXIubWF4IGFuZCBCaWdOdW1iZXIubWluLlxyXG4gICAgZnVuY3Rpb24gbWF4T3JNaW4oYXJncywgbWV0aG9kKSB7XHJcbiAgICAgIHZhciBuLFxyXG4gICAgICAgIGkgPSAxLFxyXG4gICAgICAgIG0gPSBuZXcgQmlnTnVtYmVyKGFyZ3NbMF0pO1xyXG5cclxuICAgICAgZm9yICg7IGkgPCBhcmdzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgbiA9IG5ldyBCaWdOdW1iZXIoYXJnc1tpXSk7XHJcblxyXG4gICAgICAgIC8vIElmIGFueSBudW1iZXIgaXMgTmFOLCByZXR1cm4gTmFOLlxyXG4gICAgICAgIGlmICghbi5zKSB7XHJcbiAgICAgICAgICBtID0gbjtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH0gZWxzZSBpZiAobWV0aG9kLmNhbGwobSwgbikpIHtcclxuICAgICAgICAgIG0gPSBuO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgcmV0dXJuIG07XHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8qXHJcbiAgICAgKiBTdHJpcCB0cmFpbGluZyB6ZXJvcywgY2FsY3VsYXRlIGJhc2UgMTAgZXhwb25lbnQgYW5kIGNoZWNrIGFnYWluc3QgTUlOX0VYUCBhbmQgTUFYX0VYUC5cclxuICAgICAqIENhbGxlZCBieSBtaW51cywgcGx1cyBhbmQgdGltZXMuXHJcbiAgICAgKi9cclxuICAgIGZ1bmN0aW9uIG5vcm1hbGlzZShuLCBjLCBlKSB7XHJcbiAgICAgIHZhciBpID0gMSxcclxuICAgICAgICBqID0gYy5sZW5ndGg7XHJcblxyXG4gICAgICAgLy8gUmVtb3ZlIHRyYWlsaW5nIHplcm9zLlxyXG4gICAgICBmb3IgKDsgIWNbLS1qXTsgYy5wb3AoKSk7XHJcblxyXG4gICAgICAvLyBDYWxjdWxhdGUgdGhlIGJhc2UgMTAgZXhwb25lbnQuIEZpcnN0IGdldCB0aGUgbnVtYmVyIG9mIGRpZ2l0cyBvZiBjWzBdLlxyXG4gICAgICBmb3IgKGogPSBjWzBdOyBqID49IDEwOyBqIC89IDEwLCBpKyspO1xyXG5cclxuICAgICAgLy8gT3ZlcmZsb3c/XHJcbiAgICAgIGlmICgoZSA9IGkgKyBlICogTE9HX0JBU0UgLSAxKSA+IE1BWF9FWFApIHtcclxuXHJcbiAgICAgICAgLy8gSW5maW5pdHkuXHJcbiAgICAgICAgbi5jID0gbi5lID0gbnVsbDtcclxuXHJcbiAgICAgIC8vIFVuZGVyZmxvdz9cclxuICAgICAgfSBlbHNlIGlmIChlIDwgTUlOX0VYUCkge1xyXG5cclxuICAgICAgICAvLyBaZXJvLlxyXG4gICAgICAgIG4uYyA9IFtuLmUgPSAwXTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBuLmUgPSBlO1xyXG4gICAgICAgIG4uYyA9IGM7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJldHVybiBuO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvLyBIYW5kbGUgdmFsdWVzIHRoYXQgZmFpbCB0aGUgdmFsaWRpdHkgdGVzdCBpbiBCaWdOdW1iZXIuXHJcbiAgICBwYXJzZU51bWVyaWMgPSAoZnVuY3Rpb24gKCkge1xyXG4gICAgICB2YXIgYmFzZVByZWZpeCA9IC9eKC0/KTAoW3hib10pKD89XFx3W1xcdy5dKiQpL2ksXHJcbiAgICAgICAgZG90QWZ0ZXIgPSAvXihbXi5dKylcXC4kLyxcclxuICAgICAgICBkb3RCZWZvcmUgPSAvXlxcLihbXi5dKykkLyxcclxuICAgICAgICBpc0luZmluaXR5T3JOYU4gPSAvXi0/KEluZmluaXR5fE5hTikkLyxcclxuICAgICAgICB3aGl0ZXNwYWNlT3JQbHVzID0gL15cXHMqXFwrKD89W1xcdy5dKXxeXFxzK3xcXHMrJC9nO1xyXG5cclxuICAgICAgcmV0dXJuIGZ1bmN0aW9uICh4LCBzdHIsIGlzTnVtLCBiKSB7XHJcbiAgICAgICAgdmFyIGJhc2UsXHJcbiAgICAgICAgICBzID0gaXNOdW0gPyBzdHIgOiBzdHIucmVwbGFjZSh3aGl0ZXNwYWNlT3JQbHVzLCAnJyk7XHJcblxyXG4gICAgICAgIC8vIE5vIGV4Y2VwdGlvbiBvbiDCsUluZmluaXR5IG9yIE5hTi5cclxuICAgICAgICBpZiAoaXNJbmZpbml0eU9yTmFOLnRlc3QocykpIHtcclxuICAgICAgICAgIHgucyA9IGlzTmFOKHMpID8gbnVsbCA6IHMgPCAwID8gLTEgOiAxO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBpZiAoIWlzTnVtKSB7XHJcblxyXG4gICAgICAgICAgICAvLyBiYXNlUHJlZml4ID0gL14oLT8pMChbeGJvXSkoPz1cXHdbXFx3Ll0qJCkvaVxyXG4gICAgICAgICAgICBzID0gcy5yZXBsYWNlKGJhc2VQcmVmaXgsIGZ1bmN0aW9uIChtLCBwMSwgcDIpIHtcclxuICAgICAgICAgICAgICBiYXNlID0gKHAyID0gcDIudG9Mb3dlckNhc2UoKSkgPT0gJ3gnID8gMTYgOiBwMiA9PSAnYicgPyAyIDogODtcclxuICAgICAgICAgICAgICByZXR1cm4gIWIgfHwgYiA9PSBiYXNlID8gcDEgOiBtO1xyXG4gICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgIGlmIChiKSB7XHJcbiAgICAgICAgICAgICAgYmFzZSA9IGI7XHJcblxyXG4gICAgICAgICAgICAgIC8vIEUuZy4gJzEuJyB0byAnMScsICcuMScgdG8gJzAuMSdcclxuICAgICAgICAgICAgICBzID0gcy5yZXBsYWNlKGRvdEFmdGVyLCAnJDEnKS5yZXBsYWNlKGRvdEJlZm9yZSwgJzAuJDEnKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKHN0ciAhPSBzKSByZXR1cm4gbmV3IEJpZ051bWJlcihzLCBiYXNlKTtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAvLyAnW0JpZ051bWJlciBFcnJvcl0gTm90IGEgbnVtYmVyOiB7bn0nXHJcbiAgICAgICAgICAvLyAnW0JpZ051bWJlciBFcnJvcl0gTm90IGEgYmFzZSB7Yn0gbnVtYmVyOiB7bn0nXHJcbiAgICAgICAgICBpZiAoQmlnTnVtYmVyLkRFQlVHKSB7XHJcbiAgICAgICAgICAgIHRocm93IEVycm9yXHJcbiAgICAgICAgICAgICAgKGJpZ251bWJlckVycm9yICsgJ05vdCBhJyArIChiID8gJyBiYXNlICcgKyBiIDogJycpICsgJyBudW1iZXI6ICcgKyBzdHIpO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIC8vIE5hTlxyXG4gICAgICAgICAgeC5zID0gbnVsbDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHguYyA9IHguZSA9IG51bGw7XHJcbiAgICAgIH1cclxuICAgIH0pKCk7XHJcblxyXG5cclxuICAgIC8qXHJcbiAgICAgKiBSb3VuZCB4IHRvIHNkIHNpZ25pZmljYW50IGRpZ2l0cyB1c2luZyByb3VuZGluZyBtb2RlIHJtLiBDaGVjayBmb3Igb3Zlci91bmRlci1mbG93LlxyXG4gICAgICogSWYgciBpcyB0cnV0aHksIGl0IGlzIGtub3duIHRoYXQgdGhlcmUgYXJlIG1vcmUgZGlnaXRzIGFmdGVyIHRoZSByb3VuZGluZyBkaWdpdC5cclxuICAgICAqL1xyXG4gICAgZnVuY3Rpb24gcm91bmQoeCwgc2QsIHJtLCByKSB7XHJcbiAgICAgIHZhciBkLCBpLCBqLCBrLCBuLCBuaSwgcmQsXHJcbiAgICAgICAgeGMgPSB4LmMsXHJcbiAgICAgICAgcG93czEwID0gUE9XU19URU47XHJcblxyXG4gICAgICAvLyBpZiB4IGlzIG5vdCBJbmZpbml0eSBvciBOYU4uLi5cclxuICAgICAgaWYgKHhjKSB7XHJcblxyXG4gICAgICAgIC8vIHJkIGlzIHRoZSByb3VuZGluZyBkaWdpdCwgaS5lLiB0aGUgZGlnaXQgYWZ0ZXIgdGhlIGRpZ2l0IHRoYXQgbWF5IGJlIHJvdW5kZWQgdXAuXHJcbiAgICAgICAgLy8gbiBpcyBhIGJhc2UgMWUxNCBudW1iZXIsIHRoZSB2YWx1ZSBvZiB0aGUgZWxlbWVudCBvZiBhcnJheSB4LmMgY29udGFpbmluZyByZC5cclxuICAgICAgICAvLyBuaSBpcyB0aGUgaW5kZXggb2YgbiB3aXRoaW4geC5jLlxyXG4gICAgICAgIC8vIGQgaXMgdGhlIG51bWJlciBvZiBkaWdpdHMgb2Ygbi5cclxuICAgICAgICAvLyBpIGlzIHRoZSBpbmRleCBvZiByZCB3aXRoaW4gbiBpbmNsdWRpbmcgbGVhZGluZyB6ZXJvcy5cclxuICAgICAgICAvLyBqIGlzIHRoZSBhY3R1YWwgaW5kZXggb2YgcmQgd2l0aGluIG4gKGlmIDwgMCwgcmQgaXMgYSBsZWFkaW5nIHplcm8pLlxyXG4gICAgICAgIG91dDoge1xyXG5cclxuICAgICAgICAgIC8vIEdldCB0aGUgbnVtYmVyIG9mIGRpZ2l0cyBvZiB0aGUgZmlyc3QgZWxlbWVudCBvZiB4Yy5cclxuICAgICAgICAgIGZvciAoZCA9IDEsIGsgPSB4Y1swXTsgayA+PSAxMDsgayAvPSAxMCwgZCsrKTtcclxuICAgICAgICAgIGkgPSBzZCAtIGQ7XHJcblxyXG4gICAgICAgICAgLy8gSWYgdGhlIHJvdW5kaW5nIGRpZ2l0IGlzIGluIHRoZSBmaXJzdCBlbGVtZW50IG9mIHhjLi4uXHJcbiAgICAgICAgICBpZiAoaSA8IDApIHtcclxuICAgICAgICAgICAgaSArPSBMT0dfQkFTRTtcclxuICAgICAgICAgICAgaiA9IHNkO1xyXG4gICAgICAgICAgICBuID0geGNbbmkgPSAwXTtcclxuXHJcbiAgICAgICAgICAgIC8vIEdldCB0aGUgcm91bmRpbmcgZGlnaXQgYXQgaW5kZXggaiBvZiBuLlxyXG4gICAgICAgICAgICByZCA9IG4gLyBwb3dzMTBbZCAtIGogLSAxXSAlIDEwIHwgMDtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIG5pID0gbWF0aGNlaWwoKGkgKyAxKSAvIExPR19CQVNFKTtcclxuXHJcbiAgICAgICAgICAgIGlmIChuaSA+PSB4Yy5sZW5ndGgpIHtcclxuXHJcbiAgICAgICAgICAgICAgaWYgKHIpIHtcclxuXHJcbiAgICAgICAgICAgICAgICAvLyBOZWVkZWQgYnkgc3FydC5cclxuICAgICAgICAgICAgICAgIGZvciAoOyB4Yy5sZW5ndGggPD0gbmk7IHhjLnB1c2goMCkpO1xyXG4gICAgICAgICAgICAgICAgbiA9IHJkID0gMDtcclxuICAgICAgICAgICAgICAgIGQgPSAxO1xyXG4gICAgICAgICAgICAgICAgaSAlPSBMT0dfQkFTRTtcclxuICAgICAgICAgICAgICAgIGogPSBpIC0gTE9HX0JBU0UgKyAxO1xyXG4gICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBicmVhayBvdXQ7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIG4gPSBrID0geGNbbmldO1xyXG5cclxuICAgICAgICAgICAgICAvLyBHZXQgdGhlIG51bWJlciBvZiBkaWdpdHMgb2Ygbi5cclxuICAgICAgICAgICAgICBmb3IgKGQgPSAxOyBrID49IDEwOyBrIC89IDEwLCBkKyspO1xyXG5cclxuICAgICAgICAgICAgICAvLyBHZXQgdGhlIGluZGV4IG9mIHJkIHdpdGhpbiBuLlxyXG4gICAgICAgICAgICAgIGkgJT0gTE9HX0JBU0U7XHJcblxyXG4gICAgICAgICAgICAgIC8vIEdldCB0aGUgaW5kZXggb2YgcmQgd2l0aGluIG4sIGFkanVzdGVkIGZvciBsZWFkaW5nIHplcm9zLlxyXG4gICAgICAgICAgICAgIC8vIFRoZSBudW1iZXIgb2YgbGVhZGluZyB6ZXJvcyBvZiBuIGlzIGdpdmVuIGJ5IExPR19CQVNFIC0gZC5cclxuICAgICAgICAgICAgICBqID0gaSAtIExPR19CQVNFICsgZDtcclxuXHJcbiAgICAgICAgICAgICAgLy8gR2V0IHRoZSByb3VuZGluZyBkaWdpdCBhdCBpbmRleCBqIG9mIG4uXHJcbiAgICAgICAgICAgICAgcmQgPSBqIDwgMCA/IDAgOiBuIC8gcG93czEwW2QgLSBqIC0gMV0gJSAxMCB8IDA7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICByID0gciB8fCBzZCA8IDAgfHxcclxuXHJcbiAgICAgICAgICAvLyBBcmUgdGhlcmUgYW55IG5vbi16ZXJvIGRpZ2l0cyBhZnRlciB0aGUgcm91bmRpbmcgZGlnaXQ/XHJcbiAgICAgICAgICAvLyBUaGUgZXhwcmVzc2lvbiAgbiAlIHBvd3MxMFtkIC0gaiAtIDFdICByZXR1cm5zIGFsbCBkaWdpdHMgb2YgbiB0byB0aGUgcmlnaHRcclxuICAgICAgICAgIC8vIG9mIHRoZSBkaWdpdCBhdCBqLCBlLmcuIGlmIG4gaXMgOTA4NzE0IGFuZCBqIGlzIDIsIHRoZSBleHByZXNzaW9uIGdpdmVzIDcxNC5cclxuICAgICAgICAgICB4Y1tuaSArIDFdICE9IG51bGwgfHwgKGogPCAwID8gbiA6IG4gJSBwb3dzMTBbZCAtIGogLSAxXSk7XHJcblxyXG4gICAgICAgICAgciA9IHJtIDwgNFxyXG4gICAgICAgICAgID8gKHJkIHx8IHIpICYmIChybSA9PSAwIHx8IHJtID09ICh4LnMgPCAwID8gMyA6IDIpKVxyXG4gICAgICAgICAgIDogcmQgPiA1IHx8IHJkID09IDUgJiYgKHJtID09IDQgfHwgciB8fCBybSA9PSA2ICYmXHJcblxyXG4gICAgICAgICAgICAvLyBDaGVjayB3aGV0aGVyIHRoZSBkaWdpdCB0byB0aGUgbGVmdCBvZiB0aGUgcm91bmRpbmcgZGlnaXQgaXMgb2RkLlxyXG4gICAgICAgICAgICAoKGkgPiAwID8gaiA+IDAgPyBuIC8gcG93czEwW2QgLSBqXSA6IDAgOiB4Y1tuaSAtIDFdKSAlIDEwKSAmIDEgfHxcclxuICAgICAgICAgICAgIHJtID09ICh4LnMgPCAwID8gOCA6IDcpKTtcclxuXHJcbiAgICAgICAgICBpZiAoc2QgPCAxIHx8ICF4Y1swXSkge1xyXG4gICAgICAgICAgICB4Yy5sZW5ndGggPSAwO1xyXG5cclxuICAgICAgICAgICAgaWYgKHIpIHtcclxuXHJcbiAgICAgICAgICAgICAgLy8gQ29udmVydCBzZCB0byBkZWNpbWFsIHBsYWNlcy5cclxuICAgICAgICAgICAgICBzZCAtPSB4LmUgKyAxO1xyXG5cclxuICAgICAgICAgICAgICAvLyAxLCAwLjEsIDAuMDEsIDAuMDAxLCAwLjAwMDEgZXRjLlxyXG4gICAgICAgICAgICAgIHhjWzBdID0gcG93czEwWyhMT0dfQkFTRSAtIHNkICUgTE9HX0JBU0UpICUgTE9HX0JBU0VdO1xyXG4gICAgICAgICAgICAgIHguZSA9IC1zZCB8fCAwO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG5cclxuICAgICAgICAgICAgICAvLyBaZXJvLlxyXG4gICAgICAgICAgICAgIHhjWzBdID0geC5lID0gMDtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgcmV0dXJuIHg7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgLy8gUmVtb3ZlIGV4Y2VzcyBkaWdpdHMuXHJcbiAgICAgICAgICBpZiAoaSA9PSAwKSB7XHJcbiAgICAgICAgICAgIHhjLmxlbmd0aCA9IG5pO1xyXG4gICAgICAgICAgICBrID0gMTtcclxuICAgICAgICAgICAgbmktLTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHhjLmxlbmd0aCA9IG5pICsgMTtcclxuICAgICAgICAgICAgayA9IHBvd3MxMFtMT0dfQkFTRSAtIGldO1xyXG5cclxuICAgICAgICAgICAgLy8gRS5nLiA1NjcwMCBiZWNvbWVzIDU2MDAwIGlmIDcgaXMgdGhlIHJvdW5kaW5nIGRpZ2l0LlxyXG4gICAgICAgICAgICAvLyBqID4gMCBtZWFucyBpID4gbnVtYmVyIG9mIGxlYWRpbmcgemVyb3Mgb2Ygbi5cclxuICAgICAgICAgICAgeGNbbmldID0gaiA+IDAgPyBtYXRoZmxvb3IobiAvIHBvd3MxMFtkIC0gal0gJSBwb3dzMTBbal0pICogayA6IDA7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgLy8gUm91bmQgdXA/XHJcbiAgICAgICAgICBpZiAocikge1xyXG5cclxuICAgICAgICAgICAgZm9yICg7IDspIHtcclxuXHJcbiAgICAgICAgICAgICAgLy8gSWYgdGhlIGRpZ2l0IHRvIGJlIHJvdW5kZWQgdXAgaXMgaW4gdGhlIGZpcnN0IGVsZW1lbnQgb2YgeGMuLi5cclxuICAgICAgICAgICAgICBpZiAobmkgPT0gMCkge1xyXG5cclxuICAgICAgICAgICAgICAgIC8vIGkgd2lsbCBiZSB0aGUgbGVuZ3RoIG9mIHhjWzBdIGJlZm9yZSBrIGlzIGFkZGVkLlxyXG4gICAgICAgICAgICAgICAgZm9yIChpID0gMSwgaiA9IHhjWzBdOyBqID49IDEwOyBqIC89IDEwLCBpKyspO1xyXG4gICAgICAgICAgICAgICAgaiA9IHhjWzBdICs9IGs7XHJcbiAgICAgICAgICAgICAgICBmb3IgKGsgPSAxOyBqID49IDEwOyBqIC89IDEwLCBrKyspO1xyXG5cclxuICAgICAgICAgICAgICAgIC8vIGlmIGkgIT0gayB0aGUgbGVuZ3RoIGhhcyBpbmNyZWFzZWQuXHJcbiAgICAgICAgICAgICAgICBpZiAoaSAhPSBrKSB7XHJcbiAgICAgICAgICAgICAgICAgIHguZSsrO1xyXG4gICAgICAgICAgICAgICAgICBpZiAoeGNbMF0gPT0gQkFTRSkgeGNbMF0gPSAxO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB4Y1tuaV0gKz0gaztcclxuICAgICAgICAgICAgICAgIGlmICh4Y1tuaV0gIT0gQkFTRSkgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICB4Y1tuaS0tXSA9IDA7XHJcbiAgICAgICAgICAgICAgICBrID0gMTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAvLyBSZW1vdmUgdHJhaWxpbmcgemVyb3MuXHJcbiAgICAgICAgICBmb3IgKGkgPSB4Yy5sZW5ndGg7IHhjWy0taV0gPT09IDA7IHhjLnBvcCgpKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIE92ZXJmbG93PyBJbmZpbml0eS5cclxuICAgICAgICBpZiAoeC5lID4gTUFYX0VYUCkge1xyXG4gICAgICAgICAgeC5jID0geC5lID0gbnVsbDtcclxuXHJcbiAgICAgICAgLy8gVW5kZXJmbG93PyBaZXJvLlxyXG4gICAgICAgIH0gZWxzZSBpZiAoeC5lIDwgTUlOX0VYUCkge1xyXG4gICAgICAgICAgeC5jID0gW3guZSA9IDBdO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgcmV0dXJuIHg7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIGZ1bmN0aW9uIHZhbHVlT2Yobikge1xyXG4gICAgICB2YXIgc3RyLFxyXG4gICAgICAgIGUgPSBuLmU7XHJcblxyXG4gICAgICBpZiAoZSA9PT0gbnVsbCkgcmV0dXJuIG4udG9TdHJpbmcoKTtcclxuXHJcbiAgICAgIHN0ciA9IGNvZWZmVG9TdHJpbmcobi5jKTtcclxuXHJcbiAgICAgIHN0ciA9IGUgPD0gVE9fRVhQX05FRyB8fCBlID49IFRPX0VYUF9QT1NcclxuICAgICAgICA/IHRvRXhwb25lbnRpYWwoc3RyLCBlKVxyXG4gICAgICAgIDogdG9GaXhlZFBvaW50KHN0ciwgZSwgJzAnKTtcclxuXHJcbiAgICAgIHJldHVybiBuLnMgPCAwID8gJy0nICsgc3RyIDogc3RyO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvLyBQUk9UT1RZUEUvSU5TVEFOQ0UgTUVUSE9EU1xyXG5cclxuXHJcbiAgICAvKlxyXG4gICAgICogUmV0dXJuIGEgbmV3IEJpZ051bWJlciB3aG9zZSB2YWx1ZSBpcyB0aGUgYWJzb2x1dGUgdmFsdWUgb2YgdGhpcyBCaWdOdW1iZXIuXHJcbiAgICAgKi9cclxuICAgIFAuYWJzb2x1dGVWYWx1ZSA9IFAuYWJzID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICB2YXIgeCA9IG5ldyBCaWdOdW1iZXIodGhpcyk7XHJcbiAgICAgIGlmICh4LnMgPCAwKSB4LnMgPSAxO1xyXG4gICAgICByZXR1cm4geDtcclxuICAgIH07XHJcblxyXG5cclxuICAgIC8qXHJcbiAgICAgKiBSZXR1cm5cclxuICAgICAqICAgMSBpZiB0aGUgdmFsdWUgb2YgdGhpcyBCaWdOdW1iZXIgaXMgZ3JlYXRlciB0aGFuIHRoZSB2YWx1ZSBvZiBCaWdOdW1iZXIoeSwgYiksXHJcbiAgICAgKiAgIC0xIGlmIHRoZSB2YWx1ZSBvZiB0aGlzIEJpZ051bWJlciBpcyBsZXNzIHRoYW4gdGhlIHZhbHVlIG9mIEJpZ051bWJlcih5LCBiKSxcclxuICAgICAqICAgMCBpZiB0aGV5IGhhdmUgdGhlIHNhbWUgdmFsdWUsXHJcbiAgICAgKiAgIG9yIG51bGwgaWYgdGhlIHZhbHVlIG9mIGVpdGhlciBpcyBOYU4uXHJcbiAgICAgKi9cclxuICAgIFAuY29tcGFyZWRUbyA9IGZ1bmN0aW9uICh5LCBiKSB7XHJcbiAgICAgIHJldHVybiBjb21wYXJlKHRoaXMsIG5ldyBCaWdOdW1iZXIoeSwgYikpO1xyXG4gICAgfTtcclxuXHJcblxyXG4gICAgLypcclxuICAgICAqIElmIGRwIGlzIHVuZGVmaW5lZCBvciBudWxsIG9yIHRydWUgb3IgZmFsc2UsIHJldHVybiB0aGUgbnVtYmVyIG9mIGRlY2ltYWwgcGxhY2VzIG9mIHRoZVxyXG4gICAgICogdmFsdWUgb2YgdGhpcyBCaWdOdW1iZXIsIG9yIG51bGwgaWYgdGhlIHZhbHVlIG9mIHRoaXMgQmlnTnVtYmVyIGlzIMKxSW5maW5pdHkgb3IgTmFOLlxyXG4gICAgICpcclxuICAgICAqIE90aGVyd2lzZSwgaWYgZHAgaXMgYSBudW1iZXIsIHJldHVybiBhIG5ldyBCaWdOdW1iZXIgd2hvc2UgdmFsdWUgaXMgdGhlIHZhbHVlIG9mIHRoaXNcclxuICAgICAqIEJpZ051bWJlciByb3VuZGVkIHRvIGEgbWF4aW11bSBvZiBkcCBkZWNpbWFsIHBsYWNlcyB1c2luZyByb3VuZGluZyBtb2RlIHJtLCBvclxyXG4gICAgICogUk9VTkRJTkdfTU9ERSBpZiBybSBpcyBvbWl0dGVkLlxyXG4gICAgICpcclxuICAgICAqIFtkcF0ge251bWJlcn0gRGVjaW1hbCBwbGFjZXM6IGludGVnZXIsIDAgdG8gTUFYIGluY2x1c2l2ZS5cclxuICAgICAqIFtybV0ge251bWJlcn0gUm91bmRpbmcgbW9kZS4gSW50ZWdlciwgMCB0byA4IGluY2x1c2l2ZS5cclxuICAgICAqXHJcbiAgICAgKiAnW0JpZ051bWJlciBFcnJvcl0gQXJndW1lbnQge25vdCBhIHByaW1pdGl2ZSBudW1iZXJ8bm90IGFuIGludGVnZXJ8b3V0IG9mIHJhbmdlfToge2RwfHJtfSdcclxuICAgICAqL1xyXG4gICAgUC5kZWNpbWFsUGxhY2VzID0gUC5kcCA9IGZ1bmN0aW9uIChkcCwgcm0pIHtcclxuICAgICAgdmFyIGMsIG4sIHYsXHJcbiAgICAgICAgeCA9IHRoaXM7XHJcblxyXG4gICAgICBpZiAoZHAgIT0gbnVsbCkge1xyXG4gICAgICAgIGludENoZWNrKGRwLCAwLCBNQVgpO1xyXG4gICAgICAgIGlmIChybSA9PSBudWxsKSBybSA9IFJPVU5ESU5HX01PREU7XHJcbiAgICAgICAgZWxzZSBpbnRDaGVjayhybSwgMCwgOCk7XHJcblxyXG4gICAgICAgIHJldHVybiByb3VuZChuZXcgQmlnTnVtYmVyKHgpLCBkcCArIHguZSArIDEsIHJtKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKCEoYyA9IHguYykpIHJldHVybiBudWxsO1xyXG4gICAgICBuID0gKCh2ID0gYy5sZW5ndGggLSAxKSAtIGJpdEZsb29yKHRoaXMuZSAvIExPR19CQVNFKSkgKiBMT0dfQkFTRTtcclxuXHJcbiAgICAgIC8vIFN1YnRyYWN0IHRoZSBudW1iZXIgb2YgdHJhaWxpbmcgemVyb3Mgb2YgdGhlIGxhc3QgbnVtYmVyLlxyXG4gICAgICBpZiAodiA9IGNbdl0pIGZvciAoOyB2ICUgMTAgPT0gMDsgdiAvPSAxMCwgbi0tKTtcclxuICAgICAgaWYgKG4gPCAwKSBuID0gMDtcclxuXHJcbiAgICAgIHJldHVybiBuO1xyXG4gICAgfTtcclxuXHJcblxyXG4gICAgLypcclxuICAgICAqICBuIC8gMCA9IElcclxuICAgICAqICBuIC8gTiA9IE5cclxuICAgICAqICBuIC8gSSA9IDBcclxuICAgICAqICAwIC8gbiA9IDBcclxuICAgICAqICAwIC8gMCA9IE5cclxuICAgICAqICAwIC8gTiA9IE5cclxuICAgICAqICAwIC8gSSA9IDBcclxuICAgICAqICBOIC8gbiA9IE5cclxuICAgICAqICBOIC8gMCA9IE5cclxuICAgICAqICBOIC8gTiA9IE5cclxuICAgICAqICBOIC8gSSA9IE5cclxuICAgICAqICBJIC8gbiA9IElcclxuICAgICAqICBJIC8gMCA9IElcclxuICAgICAqICBJIC8gTiA9IE5cclxuICAgICAqICBJIC8gSSA9IE5cclxuICAgICAqXHJcbiAgICAgKiBSZXR1cm4gYSBuZXcgQmlnTnVtYmVyIHdob3NlIHZhbHVlIGlzIHRoZSB2YWx1ZSBvZiB0aGlzIEJpZ051bWJlciBkaXZpZGVkIGJ5IHRoZSB2YWx1ZSBvZlxyXG4gICAgICogQmlnTnVtYmVyKHksIGIpLCByb3VuZGVkIGFjY29yZGluZyB0byBERUNJTUFMX1BMQUNFUyBhbmQgUk9VTkRJTkdfTU9ERS5cclxuICAgICAqL1xyXG4gICAgUC5kaXZpZGVkQnkgPSBQLmRpdiA9IGZ1bmN0aW9uICh5LCBiKSB7XHJcbiAgICAgIHJldHVybiBkaXYodGhpcywgbmV3IEJpZ051bWJlcih5LCBiKSwgREVDSU1BTF9QTEFDRVMsIFJPVU5ESU5HX01PREUpO1xyXG4gICAgfTtcclxuXHJcblxyXG4gICAgLypcclxuICAgICAqIFJldHVybiBhIG5ldyBCaWdOdW1iZXIgd2hvc2UgdmFsdWUgaXMgdGhlIGludGVnZXIgcGFydCBvZiBkaXZpZGluZyB0aGUgdmFsdWUgb2YgdGhpc1xyXG4gICAgICogQmlnTnVtYmVyIGJ5IHRoZSB2YWx1ZSBvZiBCaWdOdW1iZXIoeSwgYikuXHJcbiAgICAgKi9cclxuICAgIFAuZGl2aWRlZFRvSW50ZWdlckJ5ID0gUC5pZGl2ID0gZnVuY3Rpb24gKHksIGIpIHtcclxuICAgICAgcmV0dXJuIGRpdih0aGlzLCBuZXcgQmlnTnVtYmVyKHksIGIpLCAwLCAxKTtcclxuICAgIH07XHJcblxyXG5cclxuICAgIC8qXHJcbiAgICAgKiBSZXR1cm4gYSBCaWdOdW1iZXIgd2hvc2UgdmFsdWUgaXMgdGhlIHZhbHVlIG9mIHRoaXMgQmlnTnVtYmVyIGV4cG9uZW50aWF0ZWQgYnkgbi5cclxuICAgICAqXHJcbiAgICAgKiBJZiBtIGlzIHByZXNlbnQsIHJldHVybiB0aGUgcmVzdWx0IG1vZHVsbyBtLlxyXG4gICAgICogSWYgbiBpcyBuZWdhdGl2ZSByb3VuZCBhY2NvcmRpbmcgdG8gREVDSU1BTF9QTEFDRVMgYW5kIFJPVU5ESU5HX01PREUuXHJcbiAgICAgKiBJZiBQT1dfUFJFQ0lTSU9OIGlzIG5vbi16ZXJvIGFuZCBtIGlzIG5vdCBwcmVzZW50LCByb3VuZCB0byBQT1dfUFJFQ0lTSU9OIHVzaW5nIFJPVU5ESU5HX01PREUuXHJcbiAgICAgKlxyXG4gICAgICogVGhlIG1vZHVsYXIgcG93ZXIgb3BlcmF0aW9uIHdvcmtzIGVmZmljaWVudGx5IHdoZW4geCwgbiwgYW5kIG0gYXJlIGludGVnZXJzLCBvdGhlcndpc2UgaXRcclxuICAgICAqIGlzIGVxdWl2YWxlbnQgdG8gY2FsY3VsYXRpbmcgeC5leHBvbmVudGlhdGVkQnkobikubW9kdWxvKG0pIHdpdGggYSBQT1dfUFJFQ0lTSU9OIG9mIDAuXHJcbiAgICAgKlxyXG4gICAgICogbiB7bnVtYmVyfHN0cmluZ3xCaWdOdW1iZXJ9IFRoZSBleHBvbmVudC4gQW4gaW50ZWdlci5cclxuICAgICAqIFttXSB7bnVtYmVyfHN0cmluZ3xCaWdOdW1iZXJ9IFRoZSBtb2R1bHVzLlxyXG4gICAgICpcclxuICAgICAqICdbQmlnTnVtYmVyIEVycm9yXSBFeHBvbmVudCBub3QgYW4gaW50ZWdlcjoge259J1xyXG4gICAgICovXHJcbiAgICBQLmV4cG9uZW50aWF0ZWRCeSA9IFAucG93ID0gZnVuY3Rpb24gKG4sIG0pIHtcclxuICAgICAgdmFyIGhhbGYsIGlzTW9kRXhwLCBpLCBrLCBtb3JlLCBuSXNCaWcsIG5Jc05lZywgbklzT2RkLCB5LFxyXG4gICAgICAgIHggPSB0aGlzO1xyXG5cclxuICAgICAgbiA9IG5ldyBCaWdOdW1iZXIobik7XHJcblxyXG4gICAgICAvLyBBbGxvdyBOYU4gYW5kIMKxSW5maW5pdHksIGJ1dCBub3Qgb3RoZXIgbm9uLWludGVnZXJzLlxyXG4gICAgICBpZiAobi5jICYmICFuLmlzSW50ZWdlcigpKSB7XHJcbiAgICAgICAgdGhyb3cgRXJyb3JcclxuICAgICAgICAgIChiaWdudW1iZXJFcnJvciArICdFeHBvbmVudCBub3QgYW4gaW50ZWdlcjogJyArIHZhbHVlT2YobikpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAobSAhPSBudWxsKSBtID0gbmV3IEJpZ051bWJlcihtKTtcclxuXHJcbiAgICAgIC8vIEV4cG9uZW50IG9mIE1BWF9TQUZFX0lOVEVHRVIgaXMgMTUuXHJcbiAgICAgIG5Jc0JpZyA9IG4uZSA+IDE0O1xyXG5cclxuICAgICAgLy8gSWYgeCBpcyBOYU4sIMKxSW5maW5pdHksIMKxMCBvciDCsTEsIG9yIG4gaXMgwrFJbmZpbml0eSwgTmFOIG9yIMKxMC5cclxuICAgICAgaWYgKCF4LmMgfHwgIXguY1swXSB8fCB4LmNbMF0gPT0gMSAmJiAheC5lICYmIHguYy5sZW5ndGggPT0gMSB8fCAhbi5jIHx8ICFuLmNbMF0pIHtcclxuXHJcbiAgICAgICAgLy8gVGhlIHNpZ24gb2YgdGhlIHJlc3VsdCBvZiBwb3cgd2hlbiB4IGlzIG5lZ2F0aXZlIGRlcGVuZHMgb24gdGhlIGV2ZW5uZXNzIG9mIG4uXHJcbiAgICAgICAgLy8gSWYgK24gb3ZlcmZsb3dzIHRvIMKxSW5maW5pdHksIHRoZSBldmVubmVzcyBvZiBuIHdvdWxkIGJlIG5vdCBiZSBrbm93bi5cclxuICAgICAgICB5ID0gbmV3IEJpZ051bWJlcihNYXRoLnBvdygrdmFsdWVPZih4KSwgbklzQmlnID8gMiAtIGlzT2RkKG4pIDogK3ZhbHVlT2YobikpKTtcclxuICAgICAgICByZXR1cm4gbSA/IHkubW9kKG0pIDogeTtcclxuICAgICAgfVxyXG5cclxuICAgICAgbklzTmVnID0gbi5zIDwgMDtcclxuXHJcbiAgICAgIGlmIChtKSB7XHJcblxyXG4gICAgICAgIC8vIHggJSBtIHJldHVybnMgTmFOIGlmIGFicyhtKSBpcyB6ZXJvLCBvciBtIGlzIE5hTi5cclxuICAgICAgICBpZiAobS5jID8gIW0uY1swXSA6ICFtLnMpIHJldHVybiBuZXcgQmlnTnVtYmVyKE5hTik7XHJcblxyXG4gICAgICAgIGlzTW9kRXhwID0gIW5Jc05lZyAmJiB4LmlzSW50ZWdlcigpICYmIG0uaXNJbnRlZ2VyKCk7XHJcblxyXG4gICAgICAgIGlmIChpc01vZEV4cCkgeCA9IHgubW9kKG0pO1xyXG5cclxuICAgICAgLy8gT3ZlcmZsb3cgdG8gwrFJbmZpbml0eTogPj0yKioxZTEwIG9yID49MS4wMDAwMDI0KioxZTE1LlxyXG4gICAgICAvLyBVbmRlcmZsb3cgdG8gwrEwOiA8PTAuNzkqKjFlMTAgb3IgPD0wLjk5OTk5NzUqKjFlMTUuXHJcbiAgICAgIH0gZWxzZSBpZiAobi5lID4gOSAmJiAoeC5lID4gMCB8fCB4LmUgPCAtMSB8fCAoeC5lID09IDBcclxuICAgICAgICAvLyBbMSwgMjQwMDAwMDAwXVxyXG4gICAgICAgID8geC5jWzBdID4gMSB8fCBuSXNCaWcgJiYgeC5jWzFdID49IDI0ZTdcclxuICAgICAgICAvLyBbODAwMDAwMDAwMDAwMDBdICBbOTk5OTk3NTAwMDAwMDBdXHJcbiAgICAgICAgOiB4LmNbMF0gPCA4ZTEzIHx8IG5Jc0JpZyAmJiB4LmNbMF0gPD0gOTk5OTk3NWU3KSkpIHtcclxuXHJcbiAgICAgICAgLy8gSWYgeCBpcyBuZWdhdGl2ZSBhbmQgbiBpcyBvZGQsIGsgPSAtMCwgZWxzZSBrID0gMC5cclxuICAgICAgICBrID0geC5zIDwgMCAmJiBpc09kZChuKSA/IC0wIDogMDtcclxuXHJcbiAgICAgICAgLy8gSWYgeCA+PSAxLCBrID0gwrFJbmZpbml0eS5cclxuICAgICAgICBpZiAoeC5lID4gLTEpIGsgPSAxIC8gaztcclxuXHJcbiAgICAgICAgLy8gSWYgbiBpcyBuZWdhdGl2ZSByZXR1cm4gwrEwLCBlbHNlIHJldHVybiDCsUluZmluaXR5LlxyXG4gICAgICAgIHJldHVybiBuZXcgQmlnTnVtYmVyKG5Jc05lZyA/IDEgLyBrIDogayk7XHJcblxyXG4gICAgICB9IGVsc2UgaWYgKFBPV19QUkVDSVNJT04pIHtcclxuXHJcbiAgICAgICAgLy8gVHJ1bmNhdGluZyBlYWNoIGNvZWZmaWNpZW50IGFycmF5IHRvIGEgbGVuZ3RoIG9mIGsgYWZ0ZXIgZWFjaCBtdWx0aXBsaWNhdGlvblxyXG4gICAgICAgIC8vIGVxdWF0ZXMgdG8gdHJ1bmNhdGluZyBzaWduaWZpY2FudCBkaWdpdHMgdG8gUE9XX1BSRUNJU0lPTiArIFsyOCwgNDFdLFxyXG4gICAgICAgIC8vIGkuZS4gdGhlcmUgd2lsbCBiZSBhIG1pbmltdW0gb2YgMjggZ3VhcmQgZGlnaXRzIHJldGFpbmVkLlxyXG4gICAgICAgIGsgPSBtYXRoY2VpbChQT1dfUFJFQ0lTSU9OIC8gTE9HX0JBU0UgKyAyKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKG5Jc0JpZykge1xyXG4gICAgICAgIGhhbGYgPSBuZXcgQmlnTnVtYmVyKDAuNSk7XHJcbiAgICAgICAgaWYgKG5Jc05lZykgbi5zID0gMTtcclxuICAgICAgICBuSXNPZGQgPSBpc09kZChuKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBpID0gTWF0aC5hYnMoK3ZhbHVlT2YobikpO1xyXG4gICAgICAgIG5Jc09kZCA9IGkgJSAyO1xyXG4gICAgICB9XHJcblxyXG4gICAgICB5ID0gbmV3IEJpZ051bWJlcihPTkUpO1xyXG5cclxuICAgICAgLy8gUGVyZm9ybXMgNTQgbG9vcCBpdGVyYXRpb25zIGZvciBuIG9mIDkwMDcxOTkyNTQ3NDA5OTEuXHJcbiAgICAgIGZvciAoOyA7KSB7XHJcblxyXG4gICAgICAgIGlmIChuSXNPZGQpIHtcclxuICAgICAgICAgIHkgPSB5LnRpbWVzKHgpO1xyXG4gICAgICAgICAgaWYgKCF5LmMpIGJyZWFrO1xyXG5cclxuICAgICAgICAgIGlmIChrKSB7XHJcbiAgICAgICAgICAgIGlmICh5LmMubGVuZ3RoID4gaykgeS5jLmxlbmd0aCA9IGs7XHJcbiAgICAgICAgICB9IGVsc2UgaWYgKGlzTW9kRXhwKSB7XHJcbiAgICAgICAgICAgIHkgPSB5Lm1vZChtKTsgICAgLy95ID0geS5taW51cyhkaXYoeSwgbSwgMCwgTU9EVUxPX01PREUpLnRpbWVzKG0pKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChpKSB7XHJcbiAgICAgICAgICBpID0gbWF0aGZsb29yKGkgLyAyKTtcclxuICAgICAgICAgIGlmIChpID09PSAwKSBicmVhaztcclxuICAgICAgICAgIG5Jc09kZCA9IGkgJSAyO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBuID0gbi50aW1lcyhoYWxmKTtcclxuICAgICAgICAgIHJvdW5kKG4sIG4uZSArIDEsIDEpO1xyXG5cclxuICAgICAgICAgIGlmIChuLmUgPiAxNCkge1xyXG4gICAgICAgICAgICBuSXNPZGQgPSBpc09kZChuKTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGkgPSArdmFsdWVPZihuKTtcclxuICAgICAgICAgICAgaWYgKGkgPT09IDApIGJyZWFrO1xyXG4gICAgICAgICAgICBuSXNPZGQgPSBpICUgMjtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHggPSB4LnRpbWVzKHgpO1xyXG5cclxuICAgICAgICBpZiAoaykge1xyXG4gICAgICAgICAgaWYgKHguYyAmJiB4LmMubGVuZ3RoID4gaykgeC5jLmxlbmd0aCA9IGs7XHJcbiAgICAgICAgfSBlbHNlIGlmIChpc01vZEV4cCkge1xyXG4gICAgICAgICAgeCA9IHgubW9kKG0pOyAgICAvL3ggPSB4Lm1pbnVzKGRpdih4LCBtLCAwLCBNT0RVTE9fTU9ERSkudGltZXMobSkpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKGlzTW9kRXhwKSByZXR1cm4geTtcclxuICAgICAgaWYgKG5Jc05lZykgeSA9IE9ORS5kaXYoeSk7XHJcblxyXG4gICAgICByZXR1cm4gbSA/IHkubW9kKG0pIDogayA/IHJvdW5kKHksIFBPV19QUkVDSVNJT04sIFJPVU5ESU5HX01PREUsIG1vcmUpIDogeTtcclxuICAgIH07XHJcblxyXG5cclxuICAgIC8qXHJcbiAgICAgKiBSZXR1cm4gYSBuZXcgQmlnTnVtYmVyIHdob3NlIHZhbHVlIGlzIHRoZSB2YWx1ZSBvZiB0aGlzIEJpZ051bWJlciByb3VuZGVkIHRvIGFuIGludGVnZXJcclxuICAgICAqIHVzaW5nIHJvdW5kaW5nIG1vZGUgcm0sIG9yIFJPVU5ESU5HX01PREUgaWYgcm0gaXMgb21pdHRlZC5cclxuICAgICAqXHJcbiAgICAgKiBbcm1dIHtudW1iZXJ9IFJvdW5kaW5nIG1vZGUuIEludGVnZXIsIDAgdG8gOCBpbmNsdXNpdmUuXHJcbiAgICAgKlxyXG4gICAgICogJ1tCaWdOdW1iZXIgRXJyb3JdIEFyZ3VtZW50IHtub3QgYSBwcmltaXRpdmUgbnVtYmVyfG5vdCBhbiBpbnRlZ2VyfG91dCBvZiByYW5nZX06IHtybX0nXHJcbiAgICAgKi9cclxuICAgIFAuaW50ZWdlclZhbHVlID0gZnVuY3Rpb24gKHJtKSB7XHJcbiAgICAgIHZhciBuID0gbmV3IEJpZ051bWJlcih0aGlzKTtcclxuICAgICAgaWYgKHJtID09IG51bGwpIHJtID0gUk9VTkRJTkdfTU9ERTtcclxuICAgICAgZWxzZSBpbnRDaGVjayhybSwgMCwgOCk7XHJcbiAgICAgIHJldHVybiByb3VuZChuLCBuLmUgKyAxLCBybSk7XHJcbiAgICB9O1xyXG5cclxuXHJcbiAgICAvKlxyXG4gICAgICogUmV0dXJuIHRydWUgaWYgdGhlIHZhbHVlIG9mIHRoaXMgQmlnTnVtYmVyIGlzIGVxdWFsIHRvIHRoZSB2YWx1ZSBvZiBCaWdOdW1iZXIoeSwgYiksXHJcbiAgICAgKiBvdGhlcndpc2UgcmV0dXJuIGZhbHNlLlxyXG4gICAgICovXHJcbiAgICBQLmlzRXF1YWxUbyA9IFAuZXEgPSBmdW5jdGlvbiAoeSwgYikge1xyXG4gICAgICByZXR1cm4gY29tcGFyZSh0aGlzLCBuZXcgQmlnTnVtYmVyKHksIGIpKSA9PT0gMDtcclxuICAgIH07XHJcblxyXG5cclxuICAgIC8qXHJcbiAgICAgKiBSZXR1cm4gdHJ1ZSBpZiB0aGUgdmFsdWUgb2YgdGhpcyBCaWdOdW1iZXIgaXMgYSBmaW5pdGUgbnVtYmVyLCBvdGhlcndpc2UgcmV0dXJuIGZhbHNlLlxyXG4gICAgICovXHJcbiAgICBQLmlzRmluaXRlID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICByZXR1cm4gISF0aGlzLmM7XHJcbiAgICB9O1xyXG5cclxuXHJcbiAgICAvKlxyXG4gICAgICogUmV0dXJuIHRydWUgaWYgdGhlIHZhbHVlIG9mIHRoaXMgQmlnTnVtYmVyIGlzIGdyZWF0ZXIgdGhhbiB0aGUgdmFsdWUgb2YgQmlnTnVtYmVyKHksIGIpLFxyXG4gICAgICogb3RoZXJ3aXNlIHJldHVybiBmYWxzZS5cclxuICAgICAqL1xyXG4gICAgUC5pc0dyZWF0ZXJUaGFuID0gUC5ndCA9IGZ1bmN0aW9uICh5LCBiKSB7XHJcbiAgICAgIHJldHVybiBjb21wYXJlKHRoaXMsIG5ldyBCaWdOdW1iZXIoeSwgYikpID4gMDtcclxuICAgIH07XHJcblxyXG5cclxuICAgIC8qXHJcbiAgICAgKiBSZXR1cm4gdHJ1ZSBpZiB0aGUgdmFsdWUgb2YgdGhpcyBCaWdOdW1iZXIgaXMgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIHRoZSB2YWx1ZSBvZlxyXG4gICAgICogQmlnTnVtYmVyKHksIGIpLCBvdGhlcndpc2UgcmV0dXJuIGZhbHNlLlxyXG4gICAgICovXHJcbiAgICBQLmlzR3JlYXRlclRoYW5PckVxdWFsVG8gPSBQLmd0ZSA9IGZ1bmN0aW9uICh5LCBiKSB7XHJcbiAgICAgIHJldHVybiAoYiA9IGNvbXBhcmUodGhpcywgbmV3IEJpZ051bWJlcih5LCBiKSkpID09PSAxIHx8IGIgPT09IDA7XHJcblxyXG4gICAgfTtcclxuXHJcblxyXG4gICAgLypcclxuICAgICAqIFJldHVybiB0cnVlIGlmIHRoZSB2YWx1ZSBvZiB0aGlzIEJpZ051bWJlciBpcyBhbiBpbnRlZ2VyLCBvdGhlcndpc2UgcmV0dXJuIGZhbHNlLlxyXG4gICAgICovXHJcbiAgICBQLmlzSW50ZWdlciA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgcmV0dXJuICEhdGhpcy5jICYmIGJpdEZsb29yKHRoaXMuZSAvIExPR19CQVNFKSA+IHRoaXMuYy5sZW5ndGggLSAyO1xyXG4gICAgfTtcclxuXHJcblxyXG4gICAgLypcclxuICAgICAqIFJldHVybiB0cnVlIGlmIHRoZSB2YWx1ZSBvZiB0aGlzIEJpZ051bWJlciBpcyBsZXNzIHRoYW4gdGhlIHZhbHVlIG9mIEJpZ051bWJlcih5LCBiKSxcclxuICAgICAqIG90aGVyd2lzZSByZXR1cm4gZmFsc2UuXHJcbiAgICAgKi9cclxuICAgIFAuaXNMZXNzVGhhbiA9IFAubHQgPSBmdW5jdGlvbiAoeSwgYikge1xyXG4gICAgICByZXR1cm4gY29tcGFyZSh0aGlzLCBuZXcgQmlnTnVtYmVyKHksIGIpKSA8IDA7XHJcbiAgICB9O1xyXG5cclxuXHJcbiAgICAvKlxyXG4gICAgICogUmV0dXJuIHRydWUgaWYgdGhlIHZhbHVlIG9mIHRoaXMgQmlnTnVtYmVyIGlzIGxlc3MgdGhhbiBvciBlcXVhbCB0byB0aGUgdmFsdWUgb2ZcclxuICAgICAqIEJpZ051bWJlcih5LCBiKSwgb3RoZXJ3aXNlIHJldHVybiBmYWxzZS5cclxuICAgICAqL1xyXG4gICAgUC5pc0xlc3NUaGFuT3JFcXVhbFRvID0gUC5sdGUgPSBmdW5jdGlvbiAoeSwgYikge1xyXG4gICAgICByZXR1cm4gKGIgPSBjb21wYXJlKHRoaXMsIG5ldyBCaWdOdW1iZXIoeSwgYikpKSA9PT0gLTEgfHwgYiA9PT0gMDtcclxuICAgIH07XHJcblxyXG5cclxuICAgIC8qXHJcbiAgICAgKiBSZXR1cm4gdHJ1ZSBpZiB0aGUgdmFsdWUgb2YgdGhpcyBCaWdOdW1iZXIgaXMgTmFOLCBvdGhlcndpc2UgcmV0dXJuIGZhbHNlLlxyXG4gICAgICovXHJcbiAgICBQLmlzTmFOID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICByZXR1cm4gIXRoaXMucztcclxuICAgIH07XHJcblxyXG5cclxuICAgIC8qXHJcbiAgICAgKiBSZXR1cm4gdHJ1ZSBpZiB0aGUgdmFsdWUgb2YgdGhpcyBCaWdOdW1iZXIgaXMgbmVnYXRpdmUsIG90aGVyd2lzZSByZXR1cm4gZmFsc2UuXHJcbiAgICAgKi9cclxuICAgIFAuaXNOZWdhdGl2ZSA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgcmV0dXJuIHRoaXMucyA8IDA7XHJcbiAgICB9O1xyXG5cclxuXHJcbiAgICAvKlxyXG4gICAgICogUmV0dXJuIHRydWUgaWYgdGhlIHZhbHVlIG9mIHRoaXMgQmlnTnVtYmVyIGlzIHBvc2l0aXZlLCBvdGhlcndpc2UgcmV0dXJuIGZhbHNlLlxyXG4gICAgICovXHJcbiAgICBQLmlzUG9zaXRpdmUgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLnMgPiAwO1xyXG4gICAgfTtcclxuXHJcblxyXG4gICAgLypcclxuICAgICAqIFJldHVybiB0cnVlIGlmIHRoZSB2YWx1ZSBvZiB0aGlzIEJpZ051bWJlciBpcyAwIG9yIC0wLCBvdGhlcndpc2UgcmV0dXJuIGZhbHNlLlxyXG4gICAgICovXHJcbiAgICBQLmlzWmVybyA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgcmV0dXJuICEhdGhpcy5jICYmIHRoaXMuY1swXSA9PSAwO1xyXG4gICAgfTtcclxuXHJcblxyXG4gICAgLypcclxuICAgICAqICBuIC0gMCA9IG5cclxuICAgICAqICBuIC0gTiA9IE5cclxuICAgICAqICBuIC0gSSA9IC1JXHJcbiAgICAgKiAgMCAtIG4gPSAtblxyXG4gICAgICogIDAgLSAwID0gMFxyXG4gICAgICogIDAgLSBOID0gTlxyXG4gICAgICogIDAgLSBJID0gLUlcclxuICAgICAqICBOIC0gbiA9IE5cclxuICAgICAqICBOIC0gMCA9IE5cclxuICAgICAqICBOIC0gTiA9IE5cclxuICAgICAqICBOIC0gSSA9IE5cclxuICAgICAqICBJIC0gbiA9IElcclxuICAgICAqICBJIC0gMCA9IElcclxuICAgICAqICBJIC0gTiA9IE5cclxuICAgICAqICBJIC0gSSA9IE5cclxuICAgICAqXHJcbiAgICAgKiBSZXR1cm4gYSBuZXcgQmlnTnVtYmVyIHdob3NlIHZhbHVlIGlzIHRoZSB2YWx1ZSBvZiB0aGlzIEJpZ051bWJlciBtaW51cyB0aGUgdmFsdWUgb2ZcclxuICAgICAqIEJpZ051bWJlcih5LCBiKS5cclxuICAgICAqL1xyXG4gICAgUC5taW51cyA9IGZ1bmN0aW9uICh5LCBiKSB7XHJcbiAgICAgIHZhciBpLCBqLCB0LCB4TFR5LFxyXG4gICAgICAgIHggPSB0aGlzLFxyXG4gICAgICAgIGEgPSB4LnM7XHJcblxyXG4gICAgICB5ID0gbmV3IEJpZ051bWJlcih5LCBiKTtcclxuICAgICAgYiA9IHkucztcclxuXHJcbiAgICAgIC8vIEVpdGhlciBOYU4/XHJcbiAgICAgIGlmICghYSB8fCAhYikgcmV0dXJuIG5ldyBCaWdOdW1iZXIoTmFOKTtcclxuXHJcbiAgICAgIC8vIFNpZ25zIGRpZmZlcj9cclxuICAgICAgaWYgKGEgIT0gYikge1xyXG4gICAgICAgIHkucyA9IC1iO1xyXG4gICAgICAgIHJldHVybiB4LnBsdXMoeSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHZhciB4ZSA9IHguZSAvIExPR19CQVNFLFxyXG4gICAgICAgIHllID0geS5lIC8gTE9HX0JBU0UsXHJcbiAgICAgICAgeGMgPSB4LmMsXHJcbiAgICAgICAgeWMgPSB5LmM7XHJcblxyXG4gICAgICBpZiAoIXhlIHx8ICF5ZSkge1xyXG5cclxuICAgICAgICAvLyBFaXRoZXIgSW5maW5pdHk/XHJcbiAgICAgICAgaWYgKCF4YyB8fCAheWMpIHJldHVybiB4YyA/ICh5LnMgPSAtYiwgeSkgOiBuZXcgQmlnTnVtYmVyKHljID8geCA6IE5hTik7XHJcblxyXG4gICAgICAgIC8vIEVpdGhlciB6ZXJvP1xyXG4gICAgICAgIGlmICgheGNbMF0gfHwgIXljWzBdKSB7XHJcblxyXG4gICAgICAgICAgLy8gUmV0dXJuIHkgaWYgeSBpcyBub24temVybywgeCBpZiB4IGlzIG5vbi16ZXJvLCBvciB6ZXJvIGlmIGJvdGggYXJlIHplcm8uXHJcbiAgICAgICAgICByZXR1cm4geWNbMF0gPyAoeS5zID0gLWIsIHkpIDogbmV3IEJpZ051bWJlcih4Y1swXSA/IHggOlxyXG5cclxuICAgICAgICAgICAvLyBJRUVFIDc1NCAoMjAwOCkgNi4zOiBuIC0gbiA9IC0wIHdoZW4gcm91bmRpbmcgdG8gLUluZmluaXR5XHJcbiAgICAgICAgICAgUk9VTkRJTkdfTU9ERSA9PSAzID8gLTAgOiAwKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHhlID0gYml0Rmxvb3IoeGUpO1xyXG4gICAgICB5ZSA9IGJpdEZsb29yKHllKTtcclxuICAgICAgeGMgPSB4Yy5zbGljZSgpO1xyXG5cclxuICAgICAgLy8gRGV0ZXJtaW5lIHdoaWNoIGlzIHRoZSBiaWdnZXIgbnVtYmVyLlxyXG4gICAgICBpZiAoYSA9IHhlIC0geWUpIHtcclxuXHJcbiAgICAgICAgaWYgKHhMVHkgPSBhIDwgMCkge1xyXG4gICAgICAgICAgYSA9IC1hO1xyXG4gICAgICAgICAgdCA9IHhjO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB5ZSA9IHhlO1xyXG4gICAgICAgICAgdCA9IHljO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdC5yZXZlcnNlKCk7XHJcblxyXG4gICAgICAgIC8vIFByZXBlbmQgemVyb3MgdG8gZXF1YWxpc2UgZXhwb25lbnRzLlxyXG4gICAgICAgIGZvciAoYiA9IGE7IGItLTsgdC5wdXNoKDApKTtcclxuICAgICAgICB0LnJldmVyc2UoKTtcclxuICAgICAgfSBlbHNlIHtcclxuXHJcbiAgICAgICAgLy8gRXhwb25lbnRzIGVxdWFsLiBDaGVjayBkaWdpdCBieSBkaWdpdC5cclxuICAgICAgICBqID0gKHhMVHkgPSAoYSA9IHhjLmxlbmd0aCkgPCAoYiA9IHljLmxlbmd0aCkpID8gYSA6IGI7XHJcblxyXG4gICAgICAgIGZvciAoYSA9IGIgPSAwOyBiIDwgajsgYisrKSB7XHJcblxyXG4gICAgICAgICAgaWYgKHhjW2JdICE9IHljW2JdKSB7XHJcbiAgICAgICAgICAgIHhMVHkgPSB4Y1tiXSA8IHljW2JdO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vIHggPCB5PyBQb2ludCB4YyB0byB0aGUgYXJyYXkgb2YgdGhlIGJpZ2dlciBudW1iZXIuXHJcbiAgICAgIGlmICh4TFR5KSB0ID0geGMsIHhjID0geWMsIHljID0gdCwgeS5zID0gLXkucztcclxuXHJcbiAgICAgIGIgPSAoaiA9IHljLmxlbmd0aCkgLSAoaSA9IHhjLmxlbmd0aCk7XHJcblxyXG4gICAgICAvLyBBcHBlbmQgemVyb3MgdG8geGMgaWYgc2hvcnRlci5cclxuICAgICAgLy8gTm8gbmVlZCB0byBhZGQgemVyb3MgdG8geWMgaWYgc2hvcnRlciBhcyBzdWJ0cmFjdCBvbmx5IG5lZWRzIHRvIHN0YXJ0IGF0IHljLmxlbmd0aC5cclxuICAgICAgaWYgKGIgPiAwKSBmb3IgKDsgYi0tOyB4Y1tpKytdID0gMCk7XHJcbiAgICAgIGIgPSBCQVNFIC0gMTtcclxuXHJcbiAgICAgIC8vIFN1YnRyYWN0IHljIGZyb20geGMuXHJcbiAgICAgIGZvciAoOyBqID4gYTspIHtcclxuXHJcbiAgICAgICAgaWYgKHhjWy0tal0gPCB5Y1tqXSkge1xyXG4gICAgICAgICAgZm9yIChpID0gajsgaSAmJiAheGNbLS1pXTsgeGNbaV0gPSBiKTtcclxuICAgICAgICAgIC0teGNbaV07XHJcbiAgICAgICAgICB4Y1tqXSArPSBCQVNFO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgeGNbal0gLT0geWNbal07XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vIFJlbW92ZSBsZWFkaW5nIHplcm9zIGFuZCBhZGp1c3QgZXhwb25lbnQgYWNjb3JkaW5nbHkuXHJcbiAgICAgIGZvciAoOyB4Y1swXSA9PSAwOyB4Yy5zcGxpY2UoMCwgMSksIC0teWUpO1xyXG5cclxuICAgICAgLy8gWmVybz9cclxuICAgICAgaWYgKCF4Y1swXSkge1xyXG5cclxuICAgICAgICAvLyBGb2xsb3dpbmcgSUVFRSA3NTQgKDIwMDgpIDYuMyxcclxuICAgICAgICAvLyBuIC0gbiA9ICswICBidXQgIG4gLSBuID0gLTAgIHdoZW4gcm91bmRpbmcgdG93YXJkcyAtSW5maW5pdHkuXHJcbiAgICAgICAgeS5zID0gUk9VTkRJTkdfTU9ERSA9PSAzID8gLTEgOiAxO1xyXG4gICAgICAgIHkuYyA9IFt5LmUgPSAwXTtcclxuICAgICAgICByZXR1cm4geTtcclxuICAgICAgfVxyXG5cclxuICAgICAgLy8gTm8gbmVlZCB0byBjaGVjayBmb3IgSW5maW5pdHkgYXMgK3ggLSAreSAhPSBJbmZpbml0eSAmJiAteCAtIC15ICE9IEluZmluaXR5XHJcbiAgICAgIC8vIGZvciBmaW5pdGUgeCBhbmQgeS5cclxuICAgICAgcmV0dXJuIG5vcm1hbGlzZSh5LCB4YywgeWUpO1xyXG4gICAgfTtcclxuXHJcblxyXG4gICAgLypcclxuICAgICAqICAgbiAlIDAgPSAgTlxyXG4gICAgICogICBuICUgTiA9ICBOXHJcbiAgICAgKiAgIG4gJSBJID0gIG5cclxuICAgICAqICAgMCAlIG4gPSAgMFxyXG4gICAgICogIC0wICUgbiA9IC0wXHJcbiAgICAgKiAgIDAgJSAwID0gIE5cclxuICAgICAqICAgMCAlIE4gPSAgTlxyXG4gICAgICogICAwICUgSSA9ICAwXHJcbiAgICAgKiAgIE4gJSBuID0gIE5cclxuICAgICAqICAgTiAlIDAgPSAgTlxyXG4gICAgICogICBOICUgTiA9ICBOXHJcbiAgICAgKiAgIE4gJSBJID0gIE5cclxuICAgICAqICAgSSAlIG4gPSAgTlxyXG4gICAgICogICBJICUgMCA9ICBOXHJcbiAgICAgKiAgIEkgJSBOID0gIE5cclxuICAgICAqICAgSSAlIEkgPSAgTlxyXG4gICAgICpcclxuICAgICAqIFJldHVybiBhIG5ldyBCaWdOdW1iZXIgd2hvc2UgdmFsdWUgaXMgdGhlIHZhbHVlIG9mIHRoaXMgQmlnTnVtYmVyIG1vZHVsbyB0aGUgdmFsdWUgb2ZcclxuICAgICAqIEJpZ051bWJlcih5LCBiKS4gVGhlIHJlc3VsdCBkZXBlbmRzIG9uIHRoZSB2YWx1ZSBvZiBNT0RVTE9fTU9ERS5cclxuICAgICAqL1xyXG4gICAgUC5tb2R1bG8gPSBQLm1vZCA9IGZ1bmN0aW9uICh5LCBiKSB7XHJcbiAgICAgIHZhciBxLCBzLFxyXG4gICAgICAgIHggPSB0aGlzO1xyXG5cclxuICAgICAgeSA9IG5ldyBCaWdOdW1iZXIoeSwgYik7XHJcblxyXG4gICAgICAvLyBSZXR1cm4gTmFOIGlmIHggaXMgSW5maW5pdHkgb3IgTmFOLCBvciB5IGlzIE5hTiBvciB6ZXJvLlxyXG4gICAgICBpZiAoIXguYyB8fCAheS5zIHx8IHkuYyAmJiAheS5jWzBdKSB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBCaWdOdW1iZXIoTmFOKTtcclxuXHJcbiAgICAgIC8vIFJldHVybiB4IGlmIHkgaXMgSW5maW5pdHkgb3IgeCBpcyB6ZXJvLlxyXG4gICAgICB9IGVsc2UgaWYgKCF5LmMgfHwgeC5jICYmICF4LmNbMF0pIHtcclxuICAgICAgICByZXR1cm4gbmV3IEJpZ051bWJlcih4KTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKE1PRFVMT19NT0RFID09IDkpIHtcclxuXHJcbiAgICAgICAgLy8gRXVjbGlkaWFuIGRpdmlzaW9uOiBxID0gc2lnbih5KSAqIGZsb29yKHggLyBhYnMoeSkpXHJcbiAgICAgICAgLy8gciA9IHggLSBxeSAgICB3aGVyZSAgMCA8PSByIDwgYWJzKHkpXHJcbiAgICAgICAgcyA9IHkucztcclxuICAgICAgICB5LnMgPSAxO1xyXG4gICAgICAgIHEgPSBkaXYoeCwgeSwgMCwgMyk7XHJcbiAgICAgICAgeS5zID0gcztcclxuICAgICAgICBxLnMgKj0gcztcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBxID0gZGl2KHgsIHksIDAsIE1PRFVMT19NT0RFKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgeSA9IHgubWludXMocS50aW1lcyh5KSk7XHJcblxyXG4gICAgICAvLyBUbyBtYXRjaCBKYXZhU2NyaXB0ICUsIGVuc3VyZSBzaWduIG9mIHplcm8gaXMgc2lnbiBvZiBkaXZpZGVuZC5cclxuICAgICAgaWYgKCF5LmNbMF0gJiYgTU9EVUxPX01PREUgPT0gMSkgeS5zID0geC5zO1xyXG5cclxuICAgICAgcmV0dXJuIHk7XHJcbiAgICB9O1xyXG5cclxuXHJcbiAgICAvKlxyXG4gICAgICogIG4gKiAwID0gMFxyXG4gICAgICogIG4gKiBOID0gTlxyXG4gICAgICogIG4gKiBJID0gSVxyXG4gICAgICogIDAgKiBuID0gMFxyXG4gICAgICogIDAgKiAwID0gMFxyXG4gICAgICogIDAgKiBOID0gTlxyXG4gICAgICogIDAgKiBJID0gTlxyXG4gICAgICogIE4gKiBuID0gTlxyXG4gICAgICogIE4gKiAwID0gTlxyXG4gICAgICogIE4gKiBOID0gTlxyXG4gICAgICogIE4gKiBJID0gTlxyXG4gICAgICogIEkgKiBuID0gSVxyXG4gICAgICogIEkgKiAwID0gTlxyXG4gICAgICogIEkgKiBOID0gTlxyXG4gICAgICogIEkgKiBJID0gSVxyXG4gICAgICpcclxuICAgICAqIFJldHVybiBhIG5ldyBCaWdOdW1iZXIgd2hvc2UgdmFsdWUgaXMgdGhlIHZhbHVlIG9mIHRoaXMgQmlnTnVtYmVyIG11bHRpcGxpZWQgYnkgdGhlIHZhbHVlXHJcbiAgICAgKiBvZiBCaWdOdW1iZXIoeSwgYikuXHJcbiAgICAgKi9cclxuICAgIFAubXVsdGlwbGllZEJ5ID0gUC50aW1lcyA9IGZ1bmN0aW9uICh5LCBiKSB7XHJcbiAgICAgIHZhciBjLCBlLCBpLCBqLCBrLCBtLCB4Y0wsIHhsbywgeGhpLCB5Y0wsIHlsbywgeWhpLCB6YyxcclxuICAgICAgICBiYXNlLCBzcXJ0QmFzZSxcclxuICAgICAgICB4ID0gdGhpcyxcclxuICAgICAgICB4YyA9IHguYyxcclxuICAgICAgICB5YyA9ICh5ID0gbmV3IEJpZ051bWJlcih5LCBiKSkuYztcclxuXHJcbiAgICAgIC8vIEVpdGhlciBOYU4sIMKxSW5maW5pdHkgb3IgwrEwP1xyXG4gICAgICBpZiAoIXhjIHx8ICF5YyB8fCAheGNbMF0gfHwgIXljWzBdKSB7XHJcblxyXG4gICAgICAgIC8vIFJldHVybiBOYU4gaWYgZWl0aGVyIGlzIE5hTiwgb3Igb25lIGlzIDAgYW5kIHRoZSBvdGhlciBpcyBJbmZpbml0eS5cclxuICAgICAgICBpZiAoIXgucyB8fCAheS5zIHx8IHhjICYmICF4Y1swXSAmJiAheWMgfHwgeWMgJiYgIXljWzBdICYmICF4Yykge1xyXG4gICAgICAgICAgeS5jID0geS5lID0geS5zID0gbnVsbDtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgeS5zICo9IHgucztcclxuXHJcbiAgICAgICAgICAvLyBSZXR1cm4gwrFJbmZpbml0eSBpZiBlaXRoZXIgaXMgwrFJbmZpbml0eS5cclxuICAgICAgICAgIGlmICgheGMgfHwgIXljKSB7XHJcbiAgICAgICAgICAgIHkuYyA9IHkuZSA9IG51bGw7XHJcblxyXG4gICAgICAgICAgLy8gUmV0dXJuIMKxMCBpZiBlaXRoZXIgaXMgwrEwLlxyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgeS5jID0gWzBdO1xyXG4gICAgICAgICAgICB5LmUgPSAwO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGUgPSBiaXRGbG9vcih4LmUgLyBMT0dfQkFTRSkgKyBiaXRGbG9vcih5LmUgLyBMT0dfQkFTRSk7XHJcbiAgICAgIHkucyAqPSB4LnM7XHJcbiAgICAgIHhjTCA9IHhjLmxlbmd0aDtcclxuICAgICAgeWNMID0geWMubGVuZ3RoO1xyXG5cclxuICAgICAgLy8gRW5zdXJlIHhjIHBvaW50cyB0byBsb25nZXIgYXJyYXkgYW5kIHhjTCB0byBpdHMgbGVuZ3RoLlxyXG4gICAgICBpZiAoeGNMIDwgeWNMKSB6YyA9IHhjLCB4YyA9IHljLCB5YyA9IHpjLCBpID0geGNMLCB4Y0wgPSB5Y0wsIHljTCA9IGk7XHJcblxyXG4gICAgICAvLyBJbml0aWFsaXNlIHRoZSByZXN1bHQgYXJyYXkgd2l0aCB6ZXJvcy5cclxuICAgICAgZm9yIChpID0geGNMICsgeWNMLCB6YyA9IFtdOyBpLS07IHpjLnB1c2goMCkpO1xyXG5cclxuICAgICAgYmFzZSA9IEJBU0U7XHJcbiAgICAgIHNxcnRCYXNlID0gU1FSVF9CQVNFO1xyXG5cclxuICAgICAgZm9yIChpID0geWNMOyAtLWkgPj0gMDspIHtcclxuICAgICAgICBjID0gMDtcclxuICAgICAgICB5bG8gPSB5Y1tpXSAlIHNxcnRCYXNlO1xyXG4gICAgICAgIHloaSA9IHljW2ldIC8gc3FydEJhc2UgfCAwO1xyXG5cclxuICAgICAgICBmb3IgKGsgPSB4Y0wsIGogPSBpICsgazsgaiA+IGk7KSB7XHJcbiAgICAgICAgICB4bG8gPSB4Y1stLWtdICUgc3FydEJhc2U7XHJcbiAgICAgICAgICB4aGkgPSB4Y1trXSAvIHNxcnRCYXNlIHwgMDtcclxuICAgICAgICAgIG0gPSB5aGkgKiB4bG8gKyB4aGkgKiB5bG87XHJcbiAgICAgICAgICB4bG8gPSB5bG8gKiB4bG8gKyAoKG0gJSBzcXJ0QmFzZSkgKiBzcXJ0QmFzZSkgKyB6Y1tqXSArIGM7XHJcbiAgICAgICAgICBjID0gKHhsbyAvIGJhc2UgfCAwKSArIChtIC8gc3FydEJhc2UgfCAwKSArIHloaSAqIHhoaTtcclxuICAgICAgICAgIHpjW2otLV0gPSB4bG8gJSBiYXNlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgemNbal0gPSBjO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoYykge1xyXG4gICAgICAgICsrZTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB6Yy5zcGxpY2UoMCwgMSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJldHVybiBub3JtYWxpc2UoeSwgemMsIGUpO1xyXG4gICAgfTtcclxuXHJcblxyXG4gICAgLypcclxuICAgICAqIFJldHVybiBhIG5ldyBCaWdOdW1iZXIgd2hvc2UgdmFsdWUgaXMgdGhlIHZhbHVlIG9mIHRoaXMgQmlnTnVtYmVyIG5lZ2F0ZWQsXHJcbiAgICAgKiBpLmUuIG11bHRpcGxpZWQgYnkgLTEuXHJcbiAgICAgKi9cclxuICAgIFAubmVnYXRlZCA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgdmFyIHggPSBuZXcgQmlnTnVtYmVyKHRoaXMpO1xyXG4gICAgICB4LnMgPSAteC5zIHx8IG51bGw7XHJcbiAgICAgIHJldHVybiB4O1xyXG4gICAgfTtcclxuXHJcblxyXG4gICAgLypcclxuICAgICAqICBuICsgMCA9IG5cclxuICAgICAqICBuICsgTiA9IE5cclxuICAgICAqICBuICsgSSA9IElcclxuICAgICAqICAwICsgbiA9IG5cclxuICAgICAqICAwICsgMCA9IDBcclxuICAgICAqICAwICsgTiA9IE5cclxuICAgICAqICAwICsgSSA9IElcclxuICAgICAqICBOICsgbiA9IE5cclxuICAgICAqICBOICsgMCA9IE5cclxuICAgICAqICBOICsgTiA9IE5cclxuICAgICAqICBOICsgSSA9IE5cclxuICAgICAqICBJICsgbiA9IElcclxuICAgICAqICBJICsgMCA9IElcclxuICAgICAqICBJICsgTiA9IE5cclxuICAgICAqICBJICsgSSA9IElcclxuICAgICAqXHJcbiAgICAgKiBSZXR1cm4gYSBuZXcgQmlnTnVtYmVyIHdob3NlIHZhbHVlIGlzIHRoZSB2YWx1ZSBvZiB0aGlzIEJpZ051bWJlciBwbHVzIHRoZSB2YWx1ZSBvZlxyXG4gICAgICogQmlnTnVtYmVyKHksIGIpLlxyXG4gICAgICovXHJcbiAgICBQLnBsdXMgPSBmdW5jdGlvbiAoeSwgYikge1xyXG4gICAgICB2YXIgdCxcclxuICAgICAgICB4ID0gdGhpcyxcclxuICAgICAgICBhID0geC5zO1xyXG5cclxuICAgICAgeSA9IG5ldyBCaWdOdW1iZXIoeSwgYik7XHJcbiAgICAgIGIgPSB5LnM7XHJcblxyXG4gICAgICAvLyBFaXRoZXIgTmFOP1xyXG4gICAgICBpZiAoIWEgfHwgIWIpIHJldHVybiBuZXcgQmlnTnVtYmVyKE5hTik7XHJcblxyXG4gICAgICAvLyBTaWducyBkaWZmZXI/XHJcbiAgICAgICBpZiAoYSAhPSBiKSB7XHJcbiAgICAgICAgeS5zID0gLWI7XHJcbiAgICAgICAgcmV0dXJuIHgubWludXMoeSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHZhciB4ZSA9IHguZSAvIExPR19CQVNFLFxyXG4gICAgICAgIHllID0geS5lIC8gTE9HX0JBU0UsXHJcbiAgICAgICAgeGMgPSB4LmMsXHJcbiAgICAgICAgeWMgPSB5LmM7XHJcblxyXG4gICAgICBpZiAoIXhlIHx8ICF5ZSkge1xyXG5cclxuICAgICAgICAvLyBSZXR1cm4gwrFJbmZpbml0eSBpZiBlaXRoZXIgwrFJbmZpbml0eS5cclxuICAgICAgICBpZiAoIXhjIHx8ICF5YykgcmV0dXJuIG5ldyBCaWdOdW1iZXIoYSAvIDApO1xyXG5cclxuICAgICAgICAvLyBFaXRoZXIgemVybz9cclxuICAgICAgICAvLyBSZXR1cm4geSBpZiB5IGlzIG5vbi16ZXJvLCB4IGlmIHggaXMgbm9uLXplcm8sIG9yIHplcm8gaWYgYm90aCBhcmUgemVyby5cclxuICAgICAgICBpZiAoIXhjWzBdIHx8ICF5Y1swXSkgcmV0dXJuIHljWzBdID8geSA6IG5ldyBCaWdOdW1iZXIoeGNbMF0gPyB4IDogYSAqIDApO1xyXG4gICAgICB9XHJcblxyXG4gICAgICB4ZSA9IGJpdEZsb29yKHhlKTtcclxuICAgICAgeWUgPSBiaXRGbG9vcih5ZSk7XHJcbiAgICAgIHhjID0geGMuc2xpY2UoKTtcclxuXHJcbiAgICAgIC8vIFByZXBlbmQgemVyb3MgdG8gZXF1YWxpc2UgZXhwb25lbnRzLiBGYXN0ZXIgdG8gdXNlIHJldmVyc2UgdGhlbiBkbyB1bnNoaWZ0cy5cclxuICAgICAgaWYgKGEgPSB4ZSAtIHllKSB7XHJcbiAgICAgICAgaWYgKGEgPiAwKSB7XHJcbiAgICAgICAgICB5ZSA9IHhlO1xyXG4gICAgICAgICAgdCA9IHljO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBhID0gLWE7XHJcbiAgICAgICAgICB0ID0geGM7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0LnJldmVyc2UoKTtcclxuICAgICAgICBmb3IgKDsgYS0tOyB0LnB1c2goMCkpO1xyXG4gICAgICAgIHQucmV2ZXJzZSgpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBhID0geGMubGVuZ3RoO1xyXG4gICAgICBiID0geWMubGVuZ3RoO1xyXG5cclxuICAgICAgLy8gUG9pbnQgeGMgdG8gdGhlIGxvbmdlciBhcnJheSwgYW5kIGIgdG8gdGhlIHNob3J0ZXIgbGVuZ3RoLlxyXG4gICAgICBpZiAoYSAtIGIgPCAwKSB0ID0geWMsIHljID0geGMsIHhjID0gdCwgYiA9IGE7XHJcblxyXG4gICAgICAvLyBPbmx5IHN0YXJ0IGFkZGluZyBhdCB5Yy5sZW5ndGggLSAxIGFzIHRoZSBmdXJ0aGVyIGRpZ2l0cyBvZiB4YyBjYW4gYmUgaWdub3JlZC5cclxuICAgICAgZm9yIChhID0gMDsgYjspIHtcclxuICAgICAgICBhID0gKHhjWy0tYl0gPSB4Y1tiXSArIHljW2JdICsgYSkgLyBCQVNFIHwgMDtcclxuICAgICAgICB4Y1tiXSA9IEJBU0UgPT09IHhjW2JdID8gMCA6IHhjW2JdICUgQkFTRTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKGEpIHtcclxuICAgICAgICB4YyA9IFthXS5jb25jYXQoeGMpO1xyXG4gICAgICAgICsreWU7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vIE5vIG5lZWQgdG8gY2hlY2sgZm9yIHplcm8sIGFzICt4ICsgK3kgIT0gMCAmJiAteCArIC15ICE9IDBcclxuICAgICAgLy8geWUgPSBNQVhfRVhQICsgMSBwb3NzaWJsZVxyXG4gICAgICByZXR1cm4gbm9ybWFsaXNlKHksIHhjLCB5ZSk7XHJcbiAgICB9O1xyXG5cclxuXHJcbiAgICAvKlxyXG4gICAgICogSWYgc2QgaXMgdW5kZWZpbmVkIG9yIG51bGwgb3IgdHJ1ZSBvciBmYWxzZSwgcmV0dXJuIHRoZSBudW1iZXIgb2Ygc2lnbmlmaWNhbnQgZGlnaXRzIG9mXHJcbiAgICAgKiB0aGUgdmFsdWUgb2YgdGhpcyBCaWdOdW1iZXIsIG9yIG51bGwgaWYgdGhlIHZhbHVlIG9mIHRoaXMgQmlnTnVtYmVyIGlzIMKxSW5maW5pdHkgb3IgTmFOLlxyXG4gICAgICogSWYgc2QgaXMgdHJ1ZSBpbmNsdWRlIGludGVnZXItcGFydCB0cmFpbGluZyB6ZXJvcyBpbiB0aGUgY291bnQuXHJcbiAgICAgKlxyXG4gICAgICogT3RoZXJ3aXNlLCBpZiBzZCBpcyBhIG51bWJlciwgcmV0dXJuIGEgbmV3IEJpZ051bWJlciB3aG9zZSB2YWx1ZSBpcyB0aGUgdmFsdWUgb2YgdGhpc1xyXG4gICAgICogQmlnTnVtYmVyIHJvdW5kZWQgdG8gYSBtYXhpbXVtIG9mIHNkIHNpZ25pZmljYW50IGRpZ2l0cyB1c2luZyByb3VuZGluZyBtb2RlIHJtLCBvclxyXG4gICAgICogUk9VTkRJTkdfTU9ERSBpZiBybSBpcyBvbWl0dGVkLlxyXG4gICAgICpcclxuICAgICAqIHNkIHtudW1iZXJ8Ym9vbGVhbn0gbnVtYmVyOiBzaWduaWZpY2FudCBkaWdpdHM6IGludGVnZXIsIDEgdG8gTUFYIGluY2x1c2l2ZS5cclxuICAgICAqICAgICAgICAgICAgICAgICAgICAgYm9vbGVhbjogd2hldGhlciB0byBjb3VudCBpbnRlZ2VyLXBhcnQgdHJhaWxpbmcgemVyb3M6IHRydWUgb3IgZmFsc2UuXHJcbiAgICAgKiBbcm1dIHtudW1iZXJ9IFJvdW5kaW5nIG1vZGUuIEludGVnZXIsIDAgdG8gOCBpbmNsdXNpdmUuXHJcbiAgICAgKlxyXG4gICAgICogJ1tCaWdOdW1iZXIgRXJyb3JdIEFyZ3VtZW50IHtub3QgYSBwcmltaXRpdmUgbnVtYmVyfG5vdCBhbiBpbnRlZ2VyfG91dCBvZiByYW5nZX06IHtzZHxybX0nXHJcbiAgICAgKi9cclxuICAgIFAucHJlY2lzaW9uID0gUC5zZCA9IGZ1bmN0aW9uIChzZCwgcm0pIHtcclxuICAgICAgdmFyIGMsIG4sIHYsXHJcbiAgICAgICAgeCA9IHRoaXM7XHJcblxyXG4gICAgICBpZiAoc2QgIT0gbnVsbCAmJiBzZCAhPT0gISFzZCkge1xyXG4gICAgICAgIGludENoZWNrKHNkLCAxLCBNQVgpO1xyXG4gICAgICAgIGlmIChybSA9PSBudWxsKSBybSA9IFJPVU5ESU5HX01PREU7XHJcbiAgICAgICAgZWxzZSBpbnRDaGVjayhybSwgMCwgOCk7XHJcblxyXG4gICAgICAgIHJldHVybiByb3VuZChuZXcgQmlnTnVtYmVyKHgpLCBzZCwgcm0pO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoIShjID0geC5jKSkgcmV0dXJuIG51bGw7XHJcbiAgICAgIHYgPSBjLmxlbmd0aCAtIDE7XHJcbiAgICAgIG4gPSB2ICogTE9HX0JBU0UgKyAxO1xyXG5cclxuICAgICAgaWYgKHYgPSBjW3ZdKSB7XHJcblxyXG4gICAgICAgIC8vIFN1YnRyYWN0IHRoZSBudW1iZXIgb2YgdHJhaWxpbmcgemVyb3Mgb2YgdGhlIGxhc3QgZWxlbWVudC5cclxuICAgICAgICBmb3IgKDsgdiAlIDEwID09IDA7IHYgLz0gMTAsIG4tLSk7XHJcblxyXG4gICAgICAgIC8vIEFkZCB0aGUgbnVtYmVyIG9mIGRpZ2l0cyBvZiB0aGUgZmlyc3QgZWxlbWVudC5cclxuICAgICAgICBmb3IgKHYgPSBjWzBdOyB2ID49IDEwOyB2IC89IDEwLCBuKyspO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoc2QgJiYgeC5lICsgMSA+IG4pIG4gPSB4LmUgKyAxO1xyXG5cclxuICAgICAgcmV0dXJuIG47XHJcbiAgICB9O1xyXG5cclxuXHJcbiAgICAvKlxyXG4gICAgICogUmV0dXJuIGEgbmV3IEJpZ051bWJlciB3aG9zZSB2YWx1ZSBpcyB0aGUgdmFsdWUgb2YgdGhpcyBCaWdOdW1iZXIgc2hpZnRlZCBieSBrIHBsYWNlc1xyXG4gICAgICogKHBvd2VycyBvZiAxMCkuIFNoaWZ0IHRvIHRoZSByaWdodCBpZiBuID4gMCwgYW5kIHRvIHRoZSBsZWZ0IGlmIG4gPCAwLlxyXG4gICAgICpcclxuICAgICAqIGsge251bWJlcn0gSW50ZWdlciwgLU1BWF9TQUZFX0lOVEVHRVIgdG8gTUFYX1NBRkVfSU5URUdFUiBpbmNsdXNpdmUuXHJcbiAgICAgKlxyXG4gICAgICogJ1tCaWdOdW1iZXIgRXJyb3JdIEFyZ3VtZW50IHtub3QgYSBwcmltaXRpdmUgbnVtYmVyfG5vdCBhbiBpbnRlZ2VyfG91dCBvZiByYW5nZX06IHtrfSdcclxuICAgICAqL1xyXG4gICAgUC5zaGlmdGVkQnkgPSBmdW5jdGlvbiAoaykge1xyXG4gICAgICBpbnRDaGVjayhrLCAtTUFYX1NBRkVfSU5URUdFUiwgTUFYX1NBRkVfSU5URUdFUik7XHJcbiAgICAgIHJldHVybiB0aGlzLnRpbWVzKCcxZScgKyBrKTtcclxuICAgIH07XHJcblxyXG5cclxuICAgIC8qXHJcbiAgICAgKiAgc3FydCgtbikgPSAgTlxyXG4gICAgICogIHNxcnQoTikgPSAgTlxyXG4gICAgICogIHNxcnQoLUkpID0gIE5cclxuICAgICAqICBzcXJ0KEkpID0gIElcclxuICAgICAqICBzcXJ0KDApID0gIDBcclxuICAgICAqICBzcXJ0KC0wKSA9IC0wXHJcbiAgICAgKlxyXG4gICAgICogUmV0dXJuIGEgbmV3IEJpZ051bWJlciB3aG9zZSB2YWx1ZSBpcyB0aGUgc3F1YXJlIHJvb3Qgb2YgdGhlIHZhbHVlIG9mIHRoaXMgQmlnTnVtYmVyLFxyXG4gICAgICogcm91bmRlZCBhY2NvcmRpbmcgdG8gREVDSU1BTF9QTEFDRVMgYW5kIFJPVU5ESU5HX01PREUuXHJcbiAgICAgKi9cclxuICAgIFAuc3F1YXJlUm9vdCA9IFAuc3FydCA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgdmFyIG0sIG4sIHIsIHJlcCwgdCxcclxuICAgICAgICB4ID0gdGhpcyxcclxuICAgICAgICBjID0geC5jLFxyXG4gICAgICAgIHMgPSB4LnMsXHJcbiAgICAgICAgZSA9IHguZSxcclxuICAgICAgICBkcCA9IERFQ0lNQUxfUExBQ0VTICsgNCxcclxuICAgICAgICBoYWxmID0gbmV3IEJpZ051bWJlcignMC41Jyk7XHJcblxyXG4gICAgICAvLyBOZWdhdGl2ZS9OYU4vSW5maW5pdHkvemVybz9cclxuICAgICAgaWYgKHMgIT09IDEgfHwgIWMgfHwgIWNbMF0pIHtcclxuICAgICAgICByZXR1cm4gbmV3IEJpZ051bWJlcighcyB8fCBzIDwgMCAmJiAoIWMgfHwgY1swXSkgPyBOYU4gOiBjID8geCA6IDEgLyAwKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgLy8gSW5pdGlhbCBlc3RpbWF0ZS5cclxuICAgICAgcyA9IE1hdGguc3FydCgrdmFsdWVPZih4KSk7XHJcblxyXG4gICAgICAvLyBNYXRoLnNxcnQgdW5kZXJmbG93L292ZXJmbG93P1xyXG4gICAgICAvLyBQYXNzIHggdG8gTWF0aC5zcXJ0IGFzIGludGVnZXIsIHRoZW4gYWRqdXN0IHRoZSBleHBvbmVudCBvZiB0aGUgcmVzdWx0LlxyXG4gICAgICBpZiAocyA9PSAwIHx8IHMgPT0gMSAvIDApIHtcclxuICAgICAgICBuID0gY29lZmZUb1N0cmluZyhjKTtcclxuICAgICAgICBpZiAoKG4ubGVuZ3RoICsgZSkgJSAyID09IDApIG4gKz0gJzAnO1xyXG4gICAgICAgIHMgPSBNYXRoLnNxcnQoK24pO1xyXG4gICAgICAgIGUgPSBiaXRGbG9vcigoZSArIDEpIC8gMikgLSAoZSA8IDAgfHwgZSAlIDIpO1xyXG5cclxuICAgICAgICBpZiAocyA9PSAxIC8gMCkge1xyXG4gICAgICAgICAgbiA9ICc1ZScgKyBlO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBuID0gcy50b0V4cG9uZW50aWFsKCk7XHJcbiAgICAgICAgICBuID0gbi5zbGljZSgwLCBuLmluZGV4T2YoJ2UnKSArIDEpICsgZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHIgPSBuZXcgQmlnTnVtYmVyKG4pO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHIgPSBuZXcgQmlnTnVtYmVyKHMgKyAnJyk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vIENoZWNrIGZvciB6ZXJvLlxyXG4gICAgICAvLyByIGNvdWxkIGJlIHplcm8gaWYgTUlOX0VYUCBpcyBjaGFuZ2VkIGFmdGVyIHRoZSB0aGlzIHZhbHVlIHdhcyBjcmVhdGVkLlxyXG4gICAgICAvLyBUaGlzIHdvdWxkIGNhdXNlIGEgZGl2aXNpb24gYnkgemVybyAoeC90KSBhbmQgaGVuY2UgSW5maW5pdHkgYmVsb3csIHdoaWNoIHdvdWxkIGNhdXNlXHJcbiAgICAgIC8vIGNvZWZmVG9TdHJpbmcgdG8gdGhyb3cuXHJcbiAgICAgIGlmIChyLmNbMF0pIHtcclxuICAgICAgICBlID0gci5lO1xyXG4gICAgICAgIHMgPSBlICsgZHA7XHJcbiAgICAgICAgaWYgKHMgPCAzKSBzID0gMDtcclxuXHJcbiAgICAgICAgLy8gTmV3dG9uLVJhcGhzb24gaXRlcmF0aW9uLlxyXG4gICAgICAgIGZvciAoOyA7KSB7XHJcbiAgICAgICAgICB0ID0gcjtcclxuICAgICAgICAgIHIgPSBoYWxmLnRpbWVzKHQucGx1cyhkaXYoeCwgdCwgZHAsIDEpKSk7XHJcblxyXG4gICAgICAgICAgaWYgKGNvZWZmVG9TdHJpbmcodC5jKS5zbGljZSgwLCBzKSA9PT0gKG4gPSBjb2VmZlRvU3RyaW5nKHIuYykpLnNsaWNlKDAsIHMpKSB7XHJcblxyXG4gICAgICAgICAgICAvLyBUaGUgZXhwb25lbnQgb2YgciBtYXkgaGVyZSBiZSBvbmUgbGVzcyB0aGFuIHRoZSBmaW5hbCByZXN1bHQgZXhwb25lbnQsXHJcbiAgICAgICAgICAgIC8vIGUuZyAwLjAwMDk5OTkgKGUtNCkgLS0+IDAuMDAxIChlLTMpLCBzbyBhZGp1c3QgcyBzbyB0aGUgcm91bmRpbmcgZGlnaXRzXHJcbiAgICAgICAgICAgIC8vIGFyZSBpbmRleGVkIGNvcnJlY3RseS5cclxuICAgICAgICAgICAgaWYgKHIuZSA8IGUpIC0tcztcclxuICAgICAgICAgICAgbiA9IG4uc2xpY2UocyAtIDMsIHMgKyAxKTtcclxuXHJcbiAgICAgICAgICAgIC8vIFRoZSA0dGggcm91bmRpbmcgZGlnaXQgbWF5IGJlIGluIGVycm9yIGJ5IC0xIHNvIGlmIHRoZSA0IHJvdW5kaW5nIGRpZ2l0c1xyXG4gICAgICAgICAgICAvLyBhcmUgOTk5OSBvciA0OTk5IChpLmUuIGFwcHJvYWNoaW5nIGEgcm91bmRpbmcgYm91bmRhcnkpIGNvbnRpbnVlIHRoZVxyXG4gICAgICAgICAgICAvLyBpdGVyYXRpb24uXHJcbiAgICAgICAgICAgIGlmIChuID09ICc5OTk5JyB8fCAhcmVwICYmIG4gPT0gJzQ5OTknKSB7XHJcblxyXG4gICAgICAgICAgICAgIC8vIE9uIHRoZSBmaXJzdCBpdGVyYXRpb24gb25seSwgY2hlY2sgdG8gc2VlIGlmIHJvdW5kaW5nIHVwIGdpdmVzIHRoZVxyXG4gICAgICAgICAgICAgIC8vIGV4YWN0IHJlc3VsdCBhcyB0aGUgbmluZXMgbWF5IGluZmluaXRlbHkgcmVwZWF0LlxyXG4gICAgICAgICAgICAgIGlmICghcmVwKSB7XHJcbiAgICAgICAgICAgICAgICByb3VuZCh0LCB0LmUgKyBERUNJTUFMX1BMQUNFUyArIDIsIDApO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmICh0LnRpbWVzKHQpLmVxKHgpKSB7XHJcbiAgICAgICAgICAgICAgICAgIHIgPSB0O1xyXG4gICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgIGRwICs9IDQ7XHJcbiAgICAgICAgICAgICAgcyArPSA0O1xyXG4gICAgICAgICAgICAgIHJlcCA9IDE7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcblxyXG4gICAgICAgICAgICAgIC8vIElmIHJvdW5kaW5nIGRpZ2l0cyBhcmUgbnVsbCwgMHswLDR9IG9yIDUwezAsM30sIGNoZWNrIGZvciBleGFjdFxyXG4gICAgICAgICAgICAgIC8vIHJlc3VsdC4gSWYgbm90LCB0aGVuIHRoZXJlIGFyZSBmdXJ0aGVyIGRpZ2l0cyBhbmQgbSB3aWxsIGJlIHRydXRoeS5cclxuICAgICAgICAgICAgICBpZiAoIStuIHx8ICErbi5zbGljZSgxKSAmJiBuLmNoYXJBdCgwKSA9PSAnNScpIHtcclxuXHJcbiAgICAgICAgICAgICAgICAvLyBUcnVuY2F0ZSB0byB0aGUgZmlyc3Qgcm91bmRpbmcgZGlnaXQuXHJcbiAgICAgICAgICAgICAgICByb3VuZChyLCByLmUgKyBERUNJTUFMX1BMQUNFUyArIDIsIDEpO1xyXG4gICAgICAgICAgICAgICAgbSA9ICFyLnRpbWVzKHIpLmVxKHgpO1xyXG4gICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJldHVybiByb3VuZChyLCByLmUgKyBERUNJTUFMX1BMQUNFUyArIDEsIFJPVU5ESU5HX01PREUsIG0pO1xyXG4gICAgfTtcclxuXHJcblxyXG4gICAgLypcclxuICAgICAqIFJldHVybiBhIHN0cmluZyByZXByZXNlbnRpbmcgdGhlIHZhbHVlIG9mIHRoaXMgQmlnTnVtYmVyIGluIGV4cG9uZW50aWFsIG5vdGF0aW9uIGFuZFxyXG4gICAgICogcm91bmRlZCB1c2luZyBST1VORElOR19NT0RFIHRvIGRwIGZpeGVkIGRlY2ltYWwgcGxhY2VzLlxyXG4gICAgICpcclxuICAgICAqIFtkcF0ge251bWJlcn0gRGVjaW1hbCBwbGFjZXMuIEludGVnZXIsIDAgdG8gTUFYIGluY2x1c2l2ZS5cclxuICAgICAqIFtybV0ge251bWJlcn0gUm91bmRpbmcgbW9kZS4gSW50ZWdlciwgMCB0byA4IGluY2x1c2l2ZS5cclxuICAgICAqXHJcbiAgICAgKiAnW0JpZ051bWJlciBFcnJvcl0gQXJndW1lbnQge25vdCBhIHByaW1pdGl2ZSBudW1iZXJ8bm90IGFuIGludGVnZXJ8b3V0IG9mIHJhbmdlfToge2RwfHJtfSdcclxuICAgICAqL1xyXG4gICAgUC50b0V4cG9uZW50aWFsID0gZnVuY3Rpb24gKGRwLCBybSkge1xyXG4gICAgICBpZiAoZHAgIT0gbnVsbCkge1xyXG4gICAgICAgIGludENoZWNrKGRwLCAwLCBNQVgpO1xyXG4gICAgICAgIGRwKys7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIGZvcm1hdCh0aGlzLCBkcCwgcm0sIDEpO1xyXG4gICAgfTtcclxuXHJcblxyXG4gICAgLypcclxuICAgICAqIFJldHVybiBhIHN0cmluZyByZXByZXNlbnRpbmcgdGhlIHZhbHVlIG9mIHRoaXMgQmlnTnVtYmVyIGluIGZpeGVkLXBvaW50IG5vdGF0aW9uIHJvdW5kaW5nXHJcbiAgICAgKiB0byBkcCBmaXhlZCBkZWNpbWFsIHBsYWNlcyB1c2luZyByb3VuZGluZyBtb2RlIHJtLCBvciBST1VORElOR19NT0RFIGlmIHJtIGlzIG9taXR0ZWQuXHJcbiAgICAgKlxyXG4gICAgICogTm90ZTogYXMgd2l0aCBKYXZhU2NyaXB0J3MgbnVtYmVyIHR5cGUsICgtMCkudG9GaXhlZCgwKSBpcyAnMCcsXHJcbiAgICAgKiBidXQgZS5nLiAoLTAuMDAwMDEpLnRvRml4ZWQoMCkgaXMgJy0wJy5cclxuICAgICAqXHJcbiAgICAgKiBbZHBdIHtudW1iZXJ9IERlY2ltYWwgcGxhY2VzLiBJbnRlZ2VyLCAwIHRvIE1BWCBpbmNsdXNpdmUuXHJcbiAgICAgKiBbcm1dIHtudW1iZXJ9IFJvdW5kaW5nIG1vZGUuIEludGVnZXIsIDAgdG8gOCBpbmNsdXNpdmUuXHJcbiAgICAgKlxyXG4gICAgICogJ1tCaWdOdW1iZXIgRXJyb3JdIEFyZ3VtZW50IHtub3QgYSBwcmltaXRpdmUgbnVtYmVyfG5vdCBhbiBpbnRlZ2VyfG91dCBvZiByYW5nZX06IHtkcHxybX0nXHJcbiAgICAgKi9cclxuICAgIFAudG9GaXhlZCA9IGZ1bmN0aW9uIChkcCwgcm0pIHtcclxuICAgICAgaWYgKGRwICE9IG51bGwpIHtcclxuICAgICAgICBpbnRDaGVjayhkcCwgMCwgTUFYKTtcclxuICAgICAgICBkcCA9IGRwICsgdGhpcy5lICsgMTtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gZm9ybWF0KHRoaXMsIGRwLCBybSk7XHJcbiAgICB9O1xyXG5cclxuXHJcbiAgICAvKlxyXG4gICAgICogUmV0dXJuIGEgc3RyaW5nIHJlcHJlc2VudGluZyB0aGUgdmFsdWUgb2YgdGhpcyBCaWdOdW1iZXIgaW4gZml4ZWQtcG9pbnQgbm90YXRpb24gcm91bmRlZFxyXG4gICAgICogdXNpbmcgcm0gb3IgUk9VTkRJTkdfTU9ERSB0byBkcCBkZWNpbWFsIHBsYWNlcywgYW5kIGZvcm1hdHRlZCBhY2NvcmRpbmcgdG8gdGhlIHByb3BlcnRpZXNcclxuICAgICAqIG9mIHRoZSBmb3JtYXQgb3IgRk9STUFUIG9iamVjdCAoc2VlIEJpZ051bWJlci5zZXQpLlxyXG4gICAgICpcclxuICAgICAqIFRoZSBmb3JtYXR0aW5nIG9iamVjdCBtYXkgY29udGFpbiBzb21lIG9yIGFsbCBvZiB0aGUgcHJvcGVydGllcyBzaG93biBiZWxvdy5cclxuICAgICAqXHJcbiAgICAgKiBGT1JNQVQgPSB7XHJcbiAgICAgKiAgIHByZWZpeDogJycsXHJcbiAgICAgKiAgIGdyb3VwU2l6ZTogMyxcclxuICAgICAqICAgc2Vjb25kYXJ5R3JvdXBTaXplOiAwLFxyXG4gICAgICogICBncm91cFNlcGFyYXRvcjogJywnLFxyXG4gICAgICogICBkZWNpbWFsU2VwYXJhdG9yOiAnLicsXHJcbiAgICAgKiAgIGZyYWN0aW9uR3JvdXBTaXplOiAwLFxyXG4gICAgICogICBmcmFjdGlvbkdyb3VwU2VwYXJhdG9yOiAnXFx4QTAnLCAgICAgIC8vIG5vbi1icmVha2luZyBzcGFjZVxyXG4gICAgICogICBzdWZmaXg6ICcnXHJcbiAgICAgKiB9O1xyXG4gICAgICpcclxuICAgICAqIFtkcF0ge251bWJlcn0gRGVjaW1hbCBwbGFjZXMuIEludGVnZXIsIDAgdG8gTUFYIGluY2x1c2l2ZS5cclxuICAgICAqIFtybV0ge251bWJlcn0gUm91bmRpbmcgbW9kZS4gSW50ZWdlciwgMCB0byA4IGluY2x1c2l2ZS5cclxuICAgICAqIFtmb3JtYXRdIHtvYmplY3R9IEZvcm1hdHRpbmcgb3B0aW9ucy4gU2VlIEZPUk1BVCBwYmplY3QgYWJvdmUuXHJcbiAgICAgKlxyXG4gICAgICogJ1tCaWdOdW1iZXIgRXJyb3JdIEFyZ3VtZW50IHtub3QgYSBwcmltaXRpdmUgbnVtYmVyfG5vdCBhbiBpbnRlZ2VyfG91dCBvZiByYW5nZX06IHtkcHxybX0nXHJcbiAgICAgKiAnW0JpZ051bWJlciBFcnJvcl0gQXJndW1lbnQgbm90IGFuIG9iamVjdDoge2Zvcm1hdH0nXHJcbiAgICAgKi9cclxuICAgIFAudG9Gb3JtYXQgPSBmdW5jdGlvbiAoZHAsIHJtLCBmb3JtYXQpIHtcclxuICAgICAgdmFyIHN0cixcclxuICAgICAgICB4ID0gdGhpcztcclxuXHJcbiAgICAgIGlmIChmb3JtYXQgPT0gbnVsbCkge1xyXG4gICAgICAgIGlmIChkcCAhPSBudWxsICYmIHJtICYmIHR5cGVvZiBybSA9PSAnb2JqZWN0Jykge1xyXG4gICAgICAgICAgZm9ybWF0ID0gcm07XHJcbiAgICAgICAgICBybSA9IG51bGw7XHJcbiAgICAgICAgfSBlbHNlIGlmIChkcCAmJiB0eXBlb2YgZHAgPT0gJ29iamVjdCcpIHtcclxuICAgICAgICAgIGZvcm1hdCA9IGRwO1xyXG4gICAgICAgICAgZHAgPSBybSA9IG51bGw7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGZvcm1hdCA9IEZPUk1BVDtcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGZvcm1hdCAhPSAnb2JqZWN0Jykge1xyXG4gICAgICAgIHRocm93IEVycm9yXHJcbiAgICAgICAgICAoYmlnbnVtYmVyRXJyb3IgKyAnQXJndW1lbnQgbm90IGFuIG9iamVjdDogJyArIGZvcm1hdCk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHN0ciA9IHgudG9GaXhlZChkcCwgcm0pO1xyXG5cclxuICAgICAgaWYgKHguYykge1xyXG4gICAgICAgIHZhciBpLFxyXG4gICAgICAgICAgYXJyID0gc3RyLnNwbGl0KCcuJyksXHJcbiAgICAgICAgICBnMSA9ICtmb3JtYXQuZ3JvdXBTaXplLFxyXG4gICAgICAgICAgZzIgPSArZm9ybWF0LnNlY29uZGFyeUdyb3VwU2l6ZSxcclxuICAgICAgICAgIGdyb3VwU2VwYXJhdG9yID0gZm9ybWF0Lmdyb3VwU2VwYXJhdG9yIHx8ICcnLFxyXG4gICAgICAgICAgaW50UGFydCA9IGFyclswXSxcclxuICAgICAgICAgIGZyYWN0aW9uUGFydCA9IGFyclsxXSxcclxuICAgICAgICAgIGlzTmVnID0geC5zIDwgMCxcclxuICAgICAgICAgIGludERpZ2l0cyA9IGlzTmVnID8gaW50UGFydC5zbGljZSgxKSA6IGludFBhcnQsXHJcbiAgICAgICAgICBsZW4gPSBpbnREaWdpdHMubGVuZ3RoO1xyXG5cclxuICAgICAgICBpZiAoZzIpIGkgPSBnMSwgZzEgPSBnMiwgZzIgPSBpLCBsZW4gLT0gaTtcclxuXHJcbiAgICAgICAgaWYgKGcxID4gMCAmJiBsZW4gPiAwKSB7XHJcbiAgICAgICAgICBpID0gbGVuICUgZzEgfHwgZzE7XHJcbiAgICAgICAgICBpbnRQYXJ0ID0gaW50RGlnaXRzLnN1YnN0cigwLCBpKTtcclxuICAgICAgICAgIGZvciAoOyBpIDwgbGVuOyBpICs9IGcxKSBpbnRQYXJ0ICs9IGdyb3VwU2VwYXJhdG9yICsgaW50RGlnaXRzLnN1YnN0cihpLCBnMSk7XHJcbiAgICAgICAgICBpZiAoZzIgPiAwKSBpbnRQYXJ0ICs9IGdyb3VwU2VwYXJhdG9yICsgaW50RGlnaXRzLnNsaWNlKGkpO1xyXG4gICAgICAgICAgaWYgKGlzTmVnKSBpbnRQYXJ0ID0gJy0nICsgaW50UGFydDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHN0ciA9IGZyYWN0aW9uUGFydFxyXG4gICAgICAgICA/IGludFBhcnQgKyAoZm9ybWF0LmRlY2ltYWxTZXBhcmF0b3IgfHwgJycpICsgKChnMiA9ICtmb3JtYXQuZnJhY3Rpb25Hcm91cFNpemUpXHJcbiAgICAgICAgICA/IGZyYWN0aW9uUGFydC5yZXBsYWNlKG5ldyBSZWdFeHAoJ1xcXFxkeycgKyBnMiArICd9XFxcXEInLCAnZycpLFxyXG4gICAgICAgICAgICckJicgKyAoZm9ybWF0LmZyYWN0aW9uR3JvdXBTZXBhcmF0b3IgfHwgJycpKVxyXG4gICAgICAgICAgOiBmcmFjdGlvblBhcnQpXHJcbiAgICAgICAgIDogaW50UGFydDtcclxuICAgICAgfVxyXG5cclxuICAgICAgcmV0dXJuIChmb3JtYXQucHJlZml4IHx8ICcnKSArIHN0ciArIChmb3JtYXQuc3VmZml4IHx8ICcnKTtcclxuICAgIH07XHJcblxyXG5cclxuICAgIC8qXHJcbiAgICAgKiBSZXR1cm4gYW4gYXJyYXkgb2YgdHdvIEJpZ051bWJlcnMgcmVwcmVzZW50aW5nIHRoZSB2YWx1ZSBvZiB0aGlzIEJpZ051bWJlciBhcyBhIHNpbXBsZVxyXG4gICAgICogZnJhY3Rpb24gd2l0aCBhbiBpbnRlZ2VyIG51bWVyYXRvciBhbmQgYW4gaW50ZWdlciBkZW5vbWluYXRvci5cclxuICAgICAqIFRoZSBkZW5vbWluYXRvciB3aWxsIGJlIGEgcG9zaXRpdmUgbm9uLXplcm8gdmFsdWUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIHRoZSBzcGVjaWZpZWRcclxuICAgICAqIG1heGltdW0gZGVub21pbmF0b3IuIElmIGEgbWF4aW11bSBkZW5vbWluYXRvciBpcyBub3Qgc3BlY2lmaWVkLCB0aGUgZGVub21pbmF0b3Igd2lsbCBiZVxyXG4gICAgICogdGhlIGxvd2VzdCB2YWx1ZSBuZWNlc3NhcnkgdG8gcmVwcmVzZW50IHRoZSBudW1iZXIgZXhhY3RseS5cclxuICAgICAqXHJcbiAgICAgKiBbbWRdIHtudW1iZXJ8c3RyaW5nfEJpZ051bWJlcn0gSW50ZWdlciA+PSAxLCBvciBJbmZpbml0eS4gVGhlIG1heGltdW0gZGVub21pbmF0b3IuXHJcbiAgICAgKlxyXG4gICAgICogJ1tCaWdOdW1iZXIgRXJyb3JdIEFyZ3VtZW50IHtub3QgYW4gaW50ZWdlcnxvdXQgb2YgcmFuZ2V9IDoge21kfSdcclxuICAgICAqL1xyXG4gICAgUC50b0ZyYWN0aW9uID0gZnVuY3Rpb24gKG1kKSB7XHJcbiAgICAgIHZhciBkLCBkMCwgZDEsIGQyLCBlLCBleHAsIG4sIG4wLCBuMSwgcSwgciwgcyxcclxuICAgICAgICB4ID0gdGhpcyxcclxuICAgICAgICB4YyA9IHguYztcclxuXHJcbiAgICAgIGlmIChtZCAhPSBudWxsKSB7XHJcbiAgICAgICAgbiA9IG5ldyBCaWdOdW1iZXIobWQpO1xyXG5cclxuICAgICAgICAvLyBUaHJvdyBpZiBtZCBpcyBsZXNzIHRoYW4gb25lIG9yIGlzIG5vdCBhbiBpbnRlZ2VyLCB1bmxlc3MgaXQgaXMgSW5maW5pdHkuXHJcbiAgICAgICAgaWYgKCFuLmlzSW50ZWdlcigpICYmIChuLmMgfHwgbi5zICE9PSAxKSB8fCBuLmx0KE9ORSkpIHtcclxuICAgICAgICAgIHRocm93IEVycm9yXHJcbiAgICAgICAgICAgIChiaWdudW1iZXJFcnJvciArICdBcmd1bWVudCAnICtcclxuICAgICAgICAgICAgICAobi5pc0ludGVnZXIoKSA/ICdvdXQgb2YgcmFuZ2U6ICcgOiAnbm90IGFuIGludGVnZXI6ICcpICsgdmFsdWVPZihuKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoIXhjKSByZXR1cm4gbmV3IEJpZ051bWJlcih4KTtcclxuXHJcbiAgICAgIGQgPSBuZXcgQmlnTnVtYmVyKE9ORSk7XHJcbiAgICAgIG4xID0gZDAgPSBuZXcgQmlnTnVtYmVyKE9ORSk7XHJcbiAgICAgIGQxID0gbjAgPSBuZXcgQmlnTnVtYmVyKE9ORSk7XHJcbiAgICAgIHMgPSBjb2VmZlRvU3RyaW5nKHhjKTtcclxuXHJcbiAgICAgIC8vIERldGVybWluZSBpbml0aWFsIGRlbm9taW5hdG9yLlxyXG4gICAgICAvLyBkIGlzIGEgcG93ZXIgb2YgMTAgYW5kIHRoZSBtaW5pbXVtIG1heCBkZW5vbWluYXRvciB0aGF0IHNwZWNpZmllcyB0aGUgdmFsdWUgZXhhY3RseS5cclxuICAgICAgZSA9IGQuZSA9IHMubGVuZ3RoIC0geC5lIC0gMTtcclxuICAgICAgZC5jWzBdID0gUE9XU19URU5bKGV4cCA9IGUgJSBMT0dfQkFTRSkgPCAwID8gTE9HX0JBU0UgKyBleHAgOiBleHBdO1xyXG4gICAgICBtZCA9ICFtZCB8fCBuLmNvbXBhcmVkVG8oZCkgPiAwID8gKGUgPiAwID8gZCA6IG4xKSA6IG47XHJcblxyXG4gICAgICBleHAgPSBNQVhfRVhQO1xyXG4gICAgICBNQVhfRVhQID0gMSAvIDA7XHJcbiAgICAgIG4gPSBuZXcgQmlnTnVtYmVyKHMpO1xyXG5cclxuICAgICAgLy8gbjAgPSBkMSA9IDBcclxuICAgICAgbjAuY1swXSA9IDA7XHJcblxyXG4gICAgICBmb3IgKDsgOykgIHtcclxuICAgICAgICBxID0gZGl2KG4sIGQsIDAsIDEpO1xyXG4gICAgICAgIGQyID0gZDAucGx1cyhxLnRpbWVzKGQxKSk7XHJcbiAgICAgICAgaWYgKGQyLmNvbXBhcmVkVG8obWQpID09IDEpIGJyZWFrO1xyXG4gICAgICAgIGQwID0gZDE7XHJcbiAgICAgICAgZDEgPSBkMjtcclxuICAgICAgICBuMSA9IG4wLnBsdXMocS50aW1lcyhkMiA9IG4xKSk7XHJcbiAgICAgICAgbjAgPSBkMjtcclxuICAgICAgICBkID0gbi5taW51cyhxLnRpbWVzKGQyID0gZCkpO1xyXG4gICAgICAgIG4gPSBkMjtcclxuICAgICAgfVxyXG5cclxuICAgICAgZDIgPSBkaXYobWQubWludXMoZDApLCBkMSwgMCwgMSk7XHJcbiAgICAgIG4wID0gbjAucGx1cyhkMi50aW1lcyhuMSkpO1xyXG4gICAgICBkMCA9IGQwLnBsdXMoZDIudGltZXMoZDEpKTtcclxuICAgICAgbjAucyA9IG4xLnMgPSB4LnM7XHJcbiAgICAgIGUgPSBlICogMjtcclxuXHJcbiAgICAgIC8vIERldGVybWluZSB3aGljaCBmcmFjdGlvbiBpcyBjbG9zZXIgdG8geCwgbjAvZDAgb3IgbjEvZDFcclxuICAgICAgciA9IGRpdihuMSwgZDEsIGUsIFJPVU5ESU5HX01PREUpLm1pbnVzKHgpLmFicygpLmNvbXBhcmVkVG8oXHJcbiAgICAgICAgICBkaXYobjAsIGQwLCBlLCBST1VORElOR19NT0RFKS5taW51cyh4KS5hYnMoKSkgPCAxID8gW24xLCBkMV0gOiBbbjAsIGQwXTtcclxuXHJcbiAgICAgIE1BWF9FWFAgPSBleHA7XHJcblxyXG4gICAgICByZXR1cm4gcjtcclxuICAgIH07XHJcblxyXG5cclxuICAgIC8qXHJcbiAgICAgKiBSZXR1cm4gdGhlIHZhbHVlIG9mIHRoaXMgQmlnTnVtYmVyIGNvbnZlcnRlZCB0byBhIG51bWJlciBwcmltaXRpdmUuXHJcbiAgICAgKi9cclxuICAgIFAudG9OdW1iZXIgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgIHJldHVybiArdmFsdWVPZih0aGlzKTtcclxuICAgIH07XHJcblxyXG5cclxuICAgIC8qXHJcbiAgICAgKiBSZXR1cm4gYSBzdHJpbmcgcmVwcmVzZW50aW5nIHRoZSB2YWx1ZSBvZiB0aGlzIEJpZ051bWJlciByb3VuZGVkIHRvIHNkIHNpZ25pZmljYW50IGRpZ2l0c1xyXG4gICAgICogdXNpbmcgcm91bmRpbmcgbW9kZSBybSBvciBST1VORElOR19NT0RFLiBJZiBzZCBpcyBsZXNzIHRoYW4gdGhlIG51bWJlciBvZiBkaWdpdHNcclxuICAgICAqIG5lY2Vzc2FyeSB0byByZXByZXNlbnQgdGhlIGludGVnZXIgcGFydCBvZiB0aGUgdmFsdWUgaW4gZml4ZWQtcG9pbnQgbm90YXRpb24sIHRoZW4gdXNlXHJcbiAgICAgKiBleHBvbmVudGlhbCBub3RhdGlvbi5cclxuICAgICAqXHJcbiAgICAgKiBbc2RdIHtudW1iZXJ9IFNpZ25pZmljYW50IGRpZ2l0cy4gSW50ZWdlciwgMSB0byBNQVggaW5jbHVzaXZlLlxyXG4gICAgICogW3JtXSB7bnVtYmVyfSBSb3VuZGluZyBtb2RlLiBJbnRlZ2VyLCAwIHRvIDggaW5jbHVzaXZlLlxyXG4gICAgICpcclxuICAgICAqICdbQmlnTnVtYmVyIEVycm9yXSBBcmd1bWVudCB7bm90IGEgcHJpbWl0aXZlIG51bWJlcnxub3QgYW4gaW50ZWdlcnxvdXQgb2YgcmFuZ2V9OiB7c2R8cm19J1xyXG4gICAgICovXHJcbiAgICBQLnRvUHJlY2lzaW9uID0gZnVuY3Rpb24gKHNkLCBybSkge1xyXG4gICAgICBpZiAoc2QgIT0gbnVsbCkgaW50Q2hlY2soc2QsIDEsIE1BWCk7XHJcbiAgICAgIHJldHVybiBmb3JtYXQodGhpcywgc2QsIHJtLCAyKTtcclxuICAgIH07XHJcblxyXG5cclxuICAgIC8qXHJcbiAgICAgKiBSZXR1cm4gYSBzdHJpbmcgcmVwcmVzZW50aW5nIHRoZSB2YWx1ZSBvZiB0aGlzIEJpZ051bWJlciBpbiBiYXNlIGIsIG9yIGJhc2UgMTAgaWYgYiBpc1xyXG4gICAgICogb21pdHRlZC4gSWYgYSBiYXNlIGlzIHNwZWNpZmllZCwgaW5jbHVkaW5nIGJhc2UgMTAsIHJvdW5kIGFjY29yZGluZyB0byBERUNJTUFMX1BMQUNFUyBhbmRcclxuICAgICAqIFJPVU5ESU5HX01PREUuIElmIGEgYmFzZSBpcyBub3Qgc3BlY2lmaWVkLCBhbmQgdGhpcyBCaWdOdW1iZXIgaGFzIGEgcG9zaXRpdmUgZXhwb25lbnRcclxuICAgICAqIHRoYXQgaXMgZXF1YWwgdG8gb3IgZ3JlYXRlciB0aGFuIFRPX0VYUF9QT1MsIG9yIGEgbmVnYXRpdmUgZXhwb25lbnQgZXF1YWwgdG8gb3IgbGVzcyB0aGFuXHJcbiAgICAgKiBUT19FWFBfTkVHLCByZXR1cm4gZXhwb25lbnRpYWwgbm90YXRpb24uXHJcbiAgICAgKlxyXG4gICAgICogW2JdIHtudW1iZXJ9IEludGVnZXIsIDIgdG8gQUxQSEFCRVQubGVuZ3RoIGluY2x1c2l2ZS5cclxuICAgICAqXHJcbiAgICAgKiAnW0JpZ051bWJlciBFcnJvcl0gQmFzZSB7bm90IGEgcHJpbWl0aXZlIG51bWJlcnxub3QgYW4gaW50ZWdlcnxvdXQgb2YgcmFuZ2V9OiB7Yn0nXHJcbiAgICAgKi9cclxuICAgIFAudG9TdHJpbmcgPSBmdW5jdGlvbiAoYikge1xyXG4gICAgICB2YXIgc3RyLFxyXG4gICAgICAgIG4gPSB0aGlzLFxyXG4gICAgICAgIHMgPSBuLnMsXHJcbiAgICAgICAgZSA9IG4uZTtcclxuXHJcbiAgICAgIC8vIEluZmluaXR5IG9yIE5hTj9cclxuICAgICAgaWYgKGUgPT09IG51bGwpIHtcclxuICAgICAgICBpZiAocykge1xyXG4gICAgICAgICAgc3RyID0gJ0luZmluaXR5JztcclxuICAgICAgICAgIGlmIChzIDwgMCkgc3RyID0gJy0nICsgc3RyO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBzdHIgPSAnTmFOJztcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgaWYgKGIgPT0gbnVsbCkge1xyXG4gICAgICAgICAgc3RyID0gZSA8PSBUT19FWFBfTkVHIHx8IGUgPj0gVE9fRVhQX1BPU1xyXG4gICAgICAgICAgID8gdG9FeHBvbmVudGlhbChjb2VmZlRvU3RyaW5nKG4uYyksIGUpXHJcbiAgICAgICAgICAgOiB0b0ZpeGVkUG9pbnQoY29lZmZUb1N0cmluZyhuLmMpLCBlLCAnMCcpO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoYiA9PT0gMTApIHtcclxuICAgICAgICAgIG4gPSByb3VuZChuZXcgQmlnTnVtYmVyKG4pLCBERUNJTUFMX1BMQUNFUyArIGUgKyAxLCBST1VORElOR19NT0RFKTtcclxuICAgICAgICAgIHN0ciA9IHRvRml4ZWRQb2ludChjb2VmZlRvU3RyaW5nKG4uYyksIG4uZSwgJzAnKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgaW50Q2hlY2soYiwgMiwgQUxQSEFCRVQubGVuZ3RoLCAnQmFzZScpO1xyXG4gICAgICAgICAgc3RyID0gY29udmVydEJhc2UodG9GaXhlZFBvaW50KGNvZWZmVG9TdHJpbmcobi5jKSwgZSwgJzAnKSwgMTAsIGIsIHMsIHRydWUpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHMgPCAwICYmIG4uY1swXSkgc3RyID0gJy0nICsgc3RyO1xyXG4gICAgICB9XHJcblxyXG4gICAgICByZXR1cm4gc3RyO1xyXG4gICAgfTtcclxuXHJcblxyXG4gICAgLypcclxuICAgICAqIFJldHVybiBhcyB0b1N0cmluZywgYnV0IGRvIG5vdCBhY2NlcHQgYSBiYXNlIGFyZ3VtZW50LCBhbmQgaW5jbHVkZSB0aGUgbWludXMgc2lnbiBmb3JcclxuICAgICAqIG5lZ2F0aXZlIHplcm8uXHJcbiAgICAgKi9cclxuICAgIFAudmFsdWVPZiA9IFAudG9KU09OID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICByZXR1cm4gdmFsdWVPZih0aGlzKTtcclxuICAgIH07XHJcblxyXG5cclxuICAgIFAuX2lzQmlnTnVtYmVyID0gdHJ1ZTtcclxuXHJcbiAgICBpZiAoY29uZmlnT2JqZWN0ICE9IG51bGwpIEJpZ051bWJlci5zZXQoY29uZmlnT2JqZWN0KTtcclxuXHJcbiAgICByZXR1cm4gQmlnTnVtYmVyO1xyXG4gIH1cclxuXHJcblxyXG4gIC8vIFBSSVZBVEUgSEVMUEVSIEZVTkNUSU9OU1xyXG5cclxuICAvLyBUaGVzZSBmdW5jdGlvbnMgZG9uJ3QgbmVlZCBhY2Nlc3MgdG8gdmFyaWFibGVzLFxyXG4gIC8vIGUuZy4gREVDSU1BTF9QTEFDRVMsIGluIHRoZSBzY29wZSBvZiB0aGUgYGNsb25lYCBmdW5jdGlvbiBhYm92ZS5cclxuXHJcblxyXG4gIGZ1bmN0aW9uIGJpdEZsb29yKG4pIHtcclxuICAgIHZhciBpID0gbiB8IDA7XHJcbiAgICByZXR1cm4gbiA+IDAgfHwgbiA9PT0gaSA/IGkgOiBpIC0gMTtcclxuICB9XHJcblxyXG5cclxuICAvLyBSZXR1cm4gYSBjb2VmZmljaWVudCBhcnJheSBhcyBhIHN0cmluZyBvZiBiYXNlIDEwIGRpZ2l0cy5cclxuICBmdW5jdGlvbiBjb2VmZlRvU3RyaW5nKGEpIHtcclxuICAgIHZhciBzLCB6LFxyXG4gICAgICBpID0gMSxcclxuICAgICAgaiA9IGEubGVuZ3RoLFxyXG4gICAgICByID0gYVswXSArICcnO1xyXG5cclxuICAgIGZvciAoOyBpIDwgajspIHtcclxuICAgICAgcyA9IGFbaSsrXSArICcnO1xyXG4gICAgICB6ID0gTE9HX0JBU0UgLSBzLmxlbmd0aDtcclxuICAgICAgZm9yICg7IHotLTsgcyA9ICcwJyArIHMpO1xyXG4gICAgICByICs9IHM7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gRGV0ZXJtaW5lIHRyYWlsaW5nIHplcm9zLlxyXG4gICAgZm9yIChqID0gci5sZW5ndGg7IHIuY2hhckNvZGVBdCgtLWopID09PSA0ODspO1xyXG5cclxuICAgIHJldHVybiByLnNsaWNlKDAsIGogKyAxIHx8IDEpO1xyXG4gIH1cclxuXHJcblxyXG4gIC8vIENvbXBhcmUgdGhlIHZhbHVlIG9mIEJpZ051bWJlcnMgeCBhbmQgeS5cclxuICBmdW5jdGlvbiBjb21wYXJlKHgsIHkpIHtcclxuICAgIHZhciBhLCBiLFxyXG4gICAgICB4YyA9IHguYyxcclxuICAgICAgeWMgPSB5LmMsXHJcbiAgICAgIGkgPSB4LnMsXHJcbiAgICAgIGogPSB5LnMsXHJcbiAgICAgIGsgPSB4LmUsXHJcbiAgICAgIGwgPSB5LmU7XHJcblxyXG4gICAgLy8gRWl0aGVyIE5hTj9cclxuICAgIGlmICghaSB8fCAhaikgcmV0dXJuIG51bGw7XHJcblxyXG4gICAgYSA9IHhjICYmICF4Y1swXTtcclxuICAgIGIgPSB5YyAmJiAheWNbMF07XHJcblxyXG4gICAgLy8gRWl0aGVyIHplcm8/XHJcbiAgICBpZiAoYSB8fCBiKSByZXR1cm4gYSA/IGIgPyAwIDogLWogOiBpO1xyXG5cclxuICAgIC8vIFNpZ25zIGRpZmZlcj9cclxuICAgIGlmIChpICE9IGopIHJldHVybiBpO1xyXG5cclxuICAgIGEgPSBpIDwgMDtcclxuICAgIGIgPSBrID09IGw7XHJcblxyXG4gICAgLy8gRWl0aGVyIEluZmluaXR5P1xyXG4gICAgaWYgKCF4YyB8fCAheWMpIHJldHVybiBiID8gMCA6ICF4YyBeIGEgPyAxIDogLTE7XHJcblxyXG4gICAgLy8gQ29tcGFyZSBleHBvbmVudHMuXHJcbiAgICBpZiAoIWIpIHJldHVybiBrID4gbCBeIGEgPyAxIDogLTE7XHJcblxyXG4gICAgaiA9IChrID0geGMubGVuZ3RoKSA8IChsID0geWMubGVuZ3RoKSA/IGsgOiBsO1xyXG5cclxuICAgIC8vIENvbXBhcmUgZGlnaXQgYnkgZGlnaXQuXHJcbiAgICBmb3IgKGkgPSAwOyBpIDwgajsgaSsrKSBpZiAoeGNbaV0gIT0geWNbaV0pIHJldHVybiB4Y1tpXSA+IHljW2ldIF4gYSA/IDEgOiAtMTtcclxuXHJcbiAgICAvLyBDb21wYXJlIGxlbmd0aHMuXHJcbiAgICByZXR1cm4gayA9PSBsID8gMCA6IGsgPiBsIF4gYSA/IDEgOiAtMTtcclxuICB9XHJcblxyXG5cclxuICAvKlxyXG4gICAqIENoZWNrIHRoYXQgbiBpcyBhIHByaW1pdGl2ZSBudW1iZXIsIGFuIGludGVnZXIsIGFuZCBpbiByYW5nZSwgb3RoZXJ3aXNlIHRocm93LlxyXG4gICAqL1xyXG4gIGZ1bmN0aW9uIGludENoZWNrKG4sIG1pbiwgbWF4LCBuYW1lKSB7XHJcbiAgICBpZiAobiA8IG1pbiB8fCBuID4gbWF4IHx8IG4gIT09IG1hdGhmbG9vcihuKSkge1xyXG4gICAgICB0aHJvdyBFcnJvclxyXG4gICAgICAgKGJpZ251bWJlckVycm9yICsgKG5hbWUgfHwgJ0FyZ3VtZW50JykgKyAodHlwZW9mIG4gPT0gJ251bWJlcidcclxuICAgICAgICAgPyBuIDwgbWluIHx8IG4gPiBtYXggPyAnIG91dCBvZiByYW5nZTogJyA6ICcgbm90IGFuIGludGVnZXI6ICdcclxuICAgICAgICAgOiAnIG5vdCBhIHByaW1pdGl2ZSBudW1iZXI6ICcpICsgU3RyaW5nKG4pKTtcclxuICAgIH1cclxuICB9XHJcblxyXG5cclxuICAvLyBBc3N1bWVzIGZpbml0ZSBuLlxyXG4gIGZ1bmN0aW9uIGlzT2RkKG4pIHtcclxuICAgIHZhciBrID0gbi5jLmxlbmd0aCAtIDE7XHJcbiAgICByZXR1cm4gYml0Rmxvb3Iobi5lIC8gTE9HX0JBU0UpID09IGsgJiYgbi5jW2tdICUgMiAhPSAwO1xyXG4gIH1cclxuXHJcblxyXG4gIGZ1bmN0aW9uIHRvRXhwb25lbnRpYWwoc3RyLCBlKSB7XHJcbiAgICByZXR1cm4gKHN0ci5sZW5ndGggPiAxID8gc3RyLmNoYXJBdCgwKSArICcuJyArIHN0ci5zbGljZSgxKSA6IHN0cikgK1xyXG4gICAgIChlIDwgMCA/ICdlJyA6ICdlKycpICsgZTtcclxuICB9XHJcblxyXG5cclxuICBmdW5jdGlvbiB0b0ZpeGVkUG9pbnQoc3RyLCBlLCB6KSB7XHJcbiAgICB2YXIgbGVuLCB6cztcclxuXHJcbiAgICAvLyBOZWdhdGl2ZSBleHBvbmVudD9cclxuICAgIGlmIChlIDwgMCkge1xyXG5cclxuICAgICAgLy8gUHJlcGVuZCB6ZXJvcy5cclxuICAgICAgZm9yICh6cyA9IHogKyAnLic7ICsrZTsgenMgKz0geik7XHJcbiAgICAgIHN0ciA9IHpzICsgc3RyO1xyXG5cclxuICAgIC8vIFBvc2l0aXZlIGV4cG9uZW50XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBsZW4gPSBzdHIubGVuZ3RoO1xyXG5cclxuICAgICAgLy8gQXBwZW5kIHplcm9zLlxyXG4gICAgICBpZiAoKytlID4gbGVuKSB7XHJcbiAgICAgICAgZm9yICh6cyA9IHosIGUgLT0gbGVuOyAtLWU7IHpzICs9IHopO1xyXG4gICAgICAgIHN0ciArPSB6cztcclxuICAgICAgfSBlbHNlIGlmIChlIDwgbGVuKSB7XHJcbiAgICAgICAgc3RyID0gc3RyLnNsaWNlKDAsIGUpICsgJy4nICsgc3RyLnNsaWNlKGUpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHN0cjtcclxuICB9XHJcblxyXG5cclxuICAvLyBFWFBPUlRcclxuXHJcblxyXG4gIEJpZ051bWJlciA9IGNsb25lKCk7XHJcbiAgQmlnTnVtYmVyWydkZWZhdWx0J10gPSBCaWdOdW1iZXIuQmlnTnVtYmVyID0gQmlnTnVtYmVyO1xyXG5cclxuICAvLyBBTUQuXHJcbiAgaWYgKHR5cGVvZiBkZWZpbmUgPT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kKSB7XHJcbiAgICBkZWZpbmUoZnVuY3Rpb24gKCkgeyByZXR1cm4gQmlnTnVtYmVyOyB9KTtcclxuXHJcbiAgLy8gTm9kZS5qcyBhbmQgb3RoZXIgZW52aXJvbm1lbnRzIHRoYXQgc3VwcG9ydCBtb2R1bGUuZXhwb3J0cy5cclxuICB9IGVsc2UgaWYgKHR5cGVvZiBtb2R1bGUgIT0gJ3VuZGVmaW5lZCcgJiYgbW9kdWxlLmV4cG9ydHMpIHtcclxuICAgIG1vZHVsZS5leHBvcnRzID0gQmlnTnVtYmVyO1xyXG5cclxuICAvLyBCcm93c2VyLlxyXG4gIH0gZWxzZSB7XHJcbiAgICBpZiAoIWdsb2JhbE9iamVjdCkge1xyXG4gICAgICBnbG9iYWxPYmplY3QgPSB0eXBlb2Ygc2VsZiAhPSAndW5kZWZpbmVkJyAmJiBzZWxmID8gc2VsZiA6IHdpbmRvdztcclxuICAgIH1cclxuXHJcbiAgICBnbG9iYWxPYmplY3QuQmlnTnVtYmVyID0gQmlnTnVtYmVyO1xyXG4gIH1cclxufSkodGhpcyk7XHJcbiIsInZhciBqc29uX3N0cmluZ2lmeSA9IHJlcXVpcmUoJy4vbGliL3N0cmluZ2lmeS5qcycpLnN0cmluZ2lmeTtcbnZhciBqc29uX3BhcnNlICAgICA9IHJlcXVpcmUoJy4vbGliL3BhcnNlLmpzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24ob3B0aW9ucykge1xuICAgIHJldHVybiAge1xuICAgICAgICBwYXJzZToganNvbl9wYXJzZShvcHRpb25zKSxcbiAgICAgICAgc3RyaW5naWZ5OiBqc29uX3N0cmluZ2lmeVxuICAgIH1cbn07XG4vL2NyZWF0ZSB0aGUgZGVmYXVsdCBtZXRob2QgbWVtYmVycyB3aXRoIG5vIG9wdGlvbnMgYXBwbGllZCBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHlcbm1vZHVsZS5leHBvcnRzLnBhcnNlID0ganNvbl9wYXJzZSgpO1xubW9kdWxlLmV4cG9ydHMuc3RyaW5naWZ5ID0ganNvbl9zdHJpbmdpZnk7XG4iLCJ2YXIgQmlnTnVtYmVyID0gbnVsbDtcblxuLy8gcmVnZXhweHMgZXh0cmFjdGVkIGZyb21cbi8vIChjKSBCU0QtMy1DbGF1c2Vcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9mYXN0aWZ5L3NlY3VyZS1qc29uLXBhcnNlL2dyYXBocy9jb250cmlidXRvcnMgYW5kIGh0dHBzOi8vZ2l0aHViLmNvbS9oYXBpanMvYm91cm5lL2dyYXBocy9jb250cmlidXRvcnNcblxuY29uc3Qgc3VzcGVjdFByb3RvUnggPSAvKD86X3xcXFxcdTAwNVtGZl0pKD86X3xcXFxcdTAwNVtGZl0pKD86cHxcXFxcdTAwNzApKD86cnxcXFxcdTAwNzIpKD86b3xcXFxcdTAwNltGZl0pKD86dHxcXFxcdTAwNzQpKD86b3xcXFxcdTAwNltGZl0pKD86X3xcXFxcdTAwNVtGZl0pKD86X3xcXFxcdTAwNVtGZl0pLztcbmNvbnN0IHN1c3BlY3RDb25zdHJ1Y3RvclJ4ID0gLyg/OmN8XFxcXHUwMDYzKSg/Om98XFxcXHUwMDZbRmZdKSg/Om58XFxcXHUwMDZbRWVdKSg/OnN8XFxcXHUwMDczKSg/OnR8XFxcXHUwMDc0KSg/OnJ8XFxcXHUwMDcyKSg/OnV8XFxcXHUwMDc1KSg/OmN8XFxcXHUwMDYzKSg/OnR8XFxcXHUwMDc0KSg/Om98XFxcXHUwMDZbRmZdKSg/OnJ8XFxcXHUwMDcyKS87XG5cbi8qXG4gICAganNvbl9wYXJzZS5qc1xuICAgIDIwMTItMDYtMjBcblxuICAgIFB1YmxpYyBEb21haW4uXG5cbiAgICBOTyBXQVJSQU5UWSBFWFBSRVNTRUQgT1IgSU1QTElFRC4gVVNFIEFUIFlPVVIgT1dOIFJJU0suXG5cbiAgICBUaGlzIGZpbGUgY3JlYXRlcyBhIGpzb25fcGFyc2UgZnVuY3Rpb24uXG4gICAgRHVyaW5nIGNyZWF0ZSB5b3UgY2FuIChvcHRpb25hbGx5KSBzcGVjaWZ5IHNvbWUgYmVoYXZpb3VyYWwgc3dpdGNoZXNcblxuICAgICAgICByZXF1aXJlKCdqc29uLWJpZ2ludCcpKG9wdGlvbnMpXG5cbiAgICAgICAgICAgIFRoZSBvcHRpb25hbCBvcHRpb25zIHBhcmFtZXRlciBob2xkcyBzd2l0Y2hlcyB0aGF0IGRyaXZlIGNlcnRhaW5cbiAgICAgICAgICAgIGFzcGVjdHMgb2YgdGhlIHBhcnNpbmcgcHJvY2VzczpcbiAgICAgICAgICAgICogb3B0aW9ucy5zdHJpY3QgPSB0cnVlIHdpbGwgd2FybiBhYm91dCBkdXBsaWNhdGUta2V5IHVzYWdlIGluIHRoZSBqc29uLlxuICAgICAgICAgICAgICBUaGUgZGVmYXVsdCAoc3RyaWN0ID0gZmFsc2UpIHdpbGwgc2lsZW50bHkgaWdub3JlIHRob3NlIGFuZCBvdmVyd3JpdGVcbiAgICAgICAgICAgICAgdmFsdWVzIGZvciBrZXlzIHRoYXQgYXJlIGluIGR1cGxpY2F0ZSB1c2UuXG5cbiAgICBUaGUgcmVzdWx0aW5nIGZ1bmN0aW9uIGZvbGxvd3MgdGhpcyBzaWduYXR1cmU6XG4gICAgICAgIGpzb25fcGFyc2UodGV4dCwgcmV2aXZlcilcbiAgICAgICAgICAgIFRoaXMgbWV0aG9kIHBhcnNlcyBhIEpTT04gdGV4dCB0byBwcm9kdWNlIGFuIG9iamVjdCBvciBhcnJheS5cbiAgICAgICAgICAgIEl0IGNhbiB0aHJvdyBhIFN5bnRheEVycm9yIGV4Y2VwdGlvbi5cblxuICAgICAgICAgICAgVGhlIG9wdGlvbmFsIHJldml2ZXIgcGFyYW1ldGVyIGlzIGEgZnVuY3Rpb24gdGhhdCBjYW4gZmlsdGVyIGFuZFxuICAgICAgICAgICAgdHJhbnNmb3JtIHRoZSByZXN1bHRzLiBJdCByZWNlaXZlcyBlYWNoIG9mIHRoZSBrZXlzIGFuZCB2YWx1ZXMsXG4gICAgICAgICAgICBhbmQgaXRzIHJldHVybiB2YWx1ZSBpcyB1c2VkIGluc3RlYWQgb2YgdGhlIG9yaWdpbmFsIHZhbHVlLlxuICAgICAgICAgICAgSWYgaXQgcmV0dXJucyB3aGF0IGl0IHJlY2VpdmVkLCB0aGVuIHRoZSBzdHJ1Y3R1cmUgaXMgbm90IG1vZGlmaWVkLlxuICAgICAgICAgICAgSWYgaXQgcmV0dXJucyB1bmRlZmluZWQgdGhlbiB0aGUgbWVtYmVyIGlzIGRlbGV0ZWQuXG5cbiAgICAgICAgICAgIEV4YW1wbGU6XG5cbiAgICAgICAgICAgIC8vIFBhcnNlIHRoZSB0ZXh0LiBWYWx1ZXMgdGhhdCBsb29rIGxpa2UgSVNPIGRhdGUgc3RyaW5ncyB3aWxsXG4gICAgICAgICAgICAvLyBiZSBjb252ZXJ0ZWQgdG8gRGF0ZSBvYmplY3RzLlxuXG4gICAgICAgICAgICBteURhdGEgPSBqc29uX3BhcnNlKHRleHQsIGZ1bmN0aW9uIChrZXksIHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgdmFyIGE7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICAgICAgYSA9XG4vXihcXGR7NH0pLShcXGR7Mn0pLShcXGR7Mn0pVChcXGR7Mn0pOihcXGR7Mn0pOihcXGR7Mn0oPzpcXC5cXGQqKT8pWiQvLmV4ZWModmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoYSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBEYXRlKERhdGUuVVRDKCthWzFdLCArYVsyXSAtIDEsICthWzNdLCArYVs0XSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICArYVs1XSwgK2FbNl0pKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgICAgICB9KTtcblxuICAgIFRoaXMgaXMgYSByZWZlcmVuY2UgaW1wbGVtZW50YXRpb24uIFlvdSBhcmUgZnJlZSB0byBjb3B5LCBtb2RpZnksIG9yXG4gICAgcmVkaXN0cmlidXRlLlxuXG4gICAgVGhpcyBjb2RlIHNob3VsZCBiZSBtaW5pZmllZCBiZWZvcmUgZGVwbG95bWVudC5cbiAgICBTZWUgaHR0cDovL2phdmFzY3JpcHQuY3JvY2tmb3JkLmNvbS9qc21pbi5odG1sXG5cbiAgICBVU0UgWU9VUiBPV04gQ09QWS4gSVQgSVMgRVhUUkVNRUxZIFVOV0lTRSBUTyBMT0FEIENPREUgRlJPTSBTRVJWRVJTIFlPVSBET1xuICAgIE5PVCBDT05UUk9MLlxuKi9cblxuLyptZW1iZXJzIFwiXCIsIFwiXFxcIlwiLCBcIlxcL1wiLCBcIlxcXFxcIiwgYXQsIGIsIGNhbGwsIGNoYXJBdCwgZiwgZnJvbUNoYXJDb2RlLFxuICAgIGhhc093blByb3BlcnR5LCBtZXNzYWdlLCBuLCBuYW1lLCBwcm90b3R5cGUsIHB1c2gsIHIsIHQsIHRleHRcbiovXG5cbnZhciBqc29uX3BhcnNlID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgJ3VzZSBzdHJpY3QnO1xuXG4gIC8vIFRoaXMgaXMgYSBmdW5jdGlvbiB0aGF0IGNhbiBwYXJzZSBhIEpTT04gdGV4dCwgcHJvZHVjaW5nIGEgSmF2YVNjcmlwdFxuICAvLyBkYXRhIHN0cnVjdHVyZS4gSXQgaXMgYSBzaW1wbGUsIHJlY3Vyc2l2ZSBkZXNjZW50IHBhcnNlci4gSXQgZG9lcyBub3QgdXNlXG4gIC8vIGV2YWwgb3IgcmVndWxhciBleHByZXNzaW9ucywgc28gaXQgY2FuIGJlIHVzZWQgYXMgYSBtb2RlbCBmb3IgaW1wbGVtZW50aW5nXG4gIC8vIGEgSlNPTiBwYXJzZXIgaW4gb3RoZXIgbGFuZ3VhZ2VzLlxuXG4gIC8vIFdlIGFyZSBkZWZpbmluZyB0aGUgZnVuY3Rpb24gaW5zaWRlIG9mIGFub3RoZXIgZnVuY3Rpb24gdG8gYXZvaWQgY3JlYXRpbmdcbiAgLy8gZ2xvYmFsIHZhcmlhYmxlcy5cblxuICAvLyBEZWZhdWx0IG9wdGlvbnMgb25lIGNhbiBvdmVycmlkZSBieSBwYXNzaW5nIG9wdGlvbnMgdG8gdGhlIHBhcnNlKClcbiAgdmFyIF9vcHRpb25zID0ge1xuICAgIHN0cmljdDogZmFsc2UsIC8vIG5vdCBiZWluZyBzdHJpY3QgbWVhbnMgZG8gbm90IGdlbmVyYXRlIHN5bnRheCBlcnJvcnMgZm9yIFwiZHVwbGljYXRlIGtleVwiXG4gICAgc3RvcmVBc1N0cmluZzogZmFsc2UsIC8vIHRvZ2dsZXMgd2hldGhlciB0aGUgdmFsdWVzIHNob3VsZCBiZSBzdG9yZWQgYXMgQmlnTnVtYmVyIChkZWZhdWx0KSBvciBhIHN0cmluZ1xuICAgIGFsd2F5c1BhcnNlQXNCaWc6IGZhbHNlLCAvLyB0b2dnbGVzIHdoZXRoZXIgYWxsIG51bWJlcnMgc2hvdWxkIGJlIEJpZ1xuICAgIHVzZU5hdGl2ZUJpZ0ludDogZmFsc2UsIC8vIHRvZ2dsZXMgd2hldGhlciB0byB1c2UgbmF0aXZlIEJpZ0ludCBpbnN0ZWFkIG9mIGJpZ251bWJlci5qc1xuICAgIHByb3RvQWN0aW9uOiAnZXJyb3InLFxuICAgIGNvbnN0cnVjdG9yQWN0aW9uOiAnZXJyb3InLFxuICB9O1xuXG4gIC8vIElmIHRoZXJlIGFyZSBvcHRpb25zLCB0aGVuIHVzZSB0aGVtIHRvIG92ZXJyaWRlIHRoZSBkZWZhdWx0IF9vcHRpb25zXG4gIGlmIChvcHRpb25zICE9PSB1bmRlZmluZWQgJiYgb3B0aW9ucyAhPT0gbnVsbCkge1xuICAgIGlmIChvcHRpb25zLnN0cmljdCA9PT0gdHJ1ZSkge1xuICAgICAgX29wdGlvbnMuc3RyaWN0ID0gdHJ1ZTtcbiAgICB9XG4gICAgaWYgKG9wdGlvbnMuc3RvcmVBc1N0cmluZyA9PT0gdHJ1ZSkge1xuICAgICAgX29wdGlvbnMuc3RvcmVBc1N0cmluZyA9IHRydWU7XG4gICAgfVxuICAgIF9vcHRpb25zLmFsd2F5c1BhcnNlQXNCaWcgPVxuICAgICAgb3B0aW9ucy5hbHdheXNQYXJzZUFzQmlnID09PSB0cnVlID8gb3B0aW9ucy5hbHdheXNQYXJzZUFzQmlnIDogZmFsc2U7XG4gICAgX29wdGlvbnMudXNlTmF0aXZlQmlnSW50ID1cbiAgICAgIG9wdGlvbnMudXNlTmF0aXZlQmlnSW50ID09PSB0cnVlID8gb3B0aW9ucy51c2VOYXRpdmVCaWdJbnQgOiBmYWxzZTtcblxuICAgIGlmICh0eXBlb2Ygb3B0aW9ucy5jb25zdHJ1Y3RvckFjdGlvbiAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIGlmIChcbiAgICAgICAgb3B0aW9ucy5jb25zdHJ1Y3RvckFjdGlvbiA9PT0gJ2Vycm9yJyB8fFxuICAgICAgICBvcHRpb25zLmNvbnN0cnVjdG9yQWN0aW9uID09PSAnaWdub3JlJyB8fFxuICAgICAgICBvcHRpb25zLmNvbnN0cnVjdG9yQWN0aW9uID09PSAncHJlc2VydmUnXG4gICAgICApIHtcbiAgICAgICAgX29wdGlvbnMuY29uc3RydWN0b3JBY3Rpb24gPSBvcHRpb25zLmNvbnN0cnVjdG9yQWN0aW9uO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIGBJbmNvcnJlY3QgdmFsdWUgZm9yIGNvbnN0cnVjdG9yQWN0aW9uIG9wdGlvbiwgbXVzdCBiZSBcImVycm9yXCIsIFwiaWdub3JlXCIgb3IgdW5kZWZpbmVkIGJ1dCBwYXNzZWQgJHtvcHRpb25zLmNvbnN0cnVjdG9yQWN0aW9ufWBcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIG9wdGlvbnMucHJvdG9BY3Rpb24gIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBpZiAoXG4gICAgICAgIG9wdGlvbnMucHJvdG9BY3Rpb24gPT09ICdlcnJvcicgfHxcbiAgICAgICAgb3B0aW9ucy5wcm90b0FjdGlvbiA9PT0gJ2lnbm9yZScgfHxcbiAgICAgICAgb3B0aW9ucy5wcm90b0FjdGlvbiA9PT0gJ3ByZXNlcnZlJ1xuICAgICAgKSB7XG4gICAgICAgIF9vcHRpb25zLnByb3RvQWN0aW9uID0gb3B0aW9ucy5wcm90b0FjdGlvbjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBgSW5jb3JyZWN0IHZhbHVlIGZvciBwcm90b0FjdGlvbiBvcHRpb24sIG11c3QgYmUgXCJlcnJvclwiLCBcImlnbm9yZVwiIG9yIHVuZGVmaW5lZCBidXQgcGFzc2VkICR7b3B0aW9ucy5wcm90b0FjdGlvbn1gXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgdmFyIGF0LCAvLyBUaGUgaW5kZXggb2YgdGhlIGN1cnJlbnQgY2hhcmFjdGVyXG4gICAgY2gsIC8vIFRoZSBjdXJyZW50IGNoYXJhY3RlclxuICAgIGVzY2FwZWUgPSB7XG4gICAgICAnXCInOiAnXCInLFxuICAgICAgJ1xcXFwnOiAnXFxcXCcsXG4gICAgICAnLyc6ICcvJyxcbiAgICAgIGI6ICdcXGInLFxuICAgICAgZjogJ1xcZicsXG4gICAgICBuOiAnXFxuJyxcbiAgICAgIHI6ICdcXHInLFxuICAgICAgdDogJ1xcdCcsXG4gICAgfSxcbiAgICB0ZXh0LFxuICAgIGVycm9yID0gZnVuY3Rpb24gKG0pIHtcbiAgICAgIC8vIENhbGwgZXJyb3Igd2hlbiBzb21ldGhpbmcgaXMgd3JvbmcuXG5cbiAgICAgIHRocm93IHtcbiAgICAgICAgbmFtZTogJ1N5bnRheEVycm9yJyxcbiAgICAgICAgbWVzc2FnZTogbSxcbiAgICAgICAgYXQ6IGF0LFxuICAgICAgICB0ZXh0OiB0ZXh0LFxuICAgICAgfTtcbiAgICB9LFxuICAgIG5leHQgPSBmdW5jdGlvbiAoYykge1xuICAgICAgLy8gSWYgYSBjIHBhcmFtZXRlciBpcyBwcm92aWRlZCwgdmVyaWZ5IHRoYXQgaXQgbWF0Y2hlcyB0aGUgY3VycmVudCBjaGFyYWN0ZXIuXG5cbiAgICAgIGlmIChjICYmIGMgIT09IGNoKSB7XG4gICAgICAgIGVycm9yKFwiRXhwZWN0ZWQgJ1wiICsgYyArIFwiJyBpbnN0ZWFkIG9mICdcIiArIGNoICsgXCInXCIpO1xuICAgICAgfVxuXG4gICAgICAvLyBHZXQgdGhlIG5leHQgY2hhcmFjdGVyLiBXaGVuIHRoZXJlIGFyZSBubyBtb3JlIGNoYXJhY3RlcnMsXG4gICAgICAvLyByZXR1cm4gdGhlIGVtcHR5IHN0cmluZy5cblxuICAgICAgY2ggPSB0ZXh0LmNoYXJBdChhdCk7XG4gICAgICBhdCArPSAxO1xuICAgICAgcmV0dXJuIGNoO1xuICAgIH0sXG4gICAgbnVtYmVyID0gZnVuY3Rpb24gKCkge1xuICAgICAgLy8gUGFyc2UgYSBudW1iZXIgdmFsdWUuXG5cbiAgICAgIHZhciBudW1iZXIsXG4gICAgICAgIHN0cmluZyA9ICcnO1xuXG4gICAgICBpZiAoY2ggPT09ICctJykge1xuICAgICAgICBzdHJpbmcgPSAnLSc7XG4gICAgICAgIG5leHQoJy0nKTtcbiAgICAgIH1cbiAgICAgIHdoaWxlIChjaCA+PSAnMCcgJiYgY2ggPD0gJzknKSB7XG4gICAgICAgIHN0cmluZyArPSBjaDtcbiAgICAgICAgbmV4dCgpO1xuICAgICAgfVxuICAgICAgaWYgKGNoID09PSAnLicpIHtcbiAgICAgICAgc3RyaW5nICs9ICcuJztcbiAgICAgICAgd2hpbGUgKG5leHQoKSAmJiBjaCA+PSAnMCcgJiYgY2ggPD0gJzknKSB7XG4gICAgICAgICAgc3RyaW5nICs9IGNoO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoY2ggPT09ICdlJyB8fCBjaCA9PT0gJ0UnKSB7XG4gICAgICAgIHN0cmluZyArPSBjaDtcbiAgICAgICAgbmV4dCgpO1xuICAgICAgICBpZiAoY2ggPT09ICctJyB8fCBjaCA9PT0gJysnKSB7XG4gICAgICAgICAgc3RyaW5nICs9IGNoO1xuICAgICAgICAgIG5leHQoKTtcbiAgICAgICAgfVxuICAgICAgICB3aGlsZSAoY2ggPj0gJzAnICYmIGNoIDw9ICc5Jykge1xuICAgICAgICAgIHN0cmluZyArPSBjaDtcbiAgICAgICAgICBuZXh0KCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIG51bWJlciA9ICtzdHJpbmc7XG4gICAgICBpZiAoIWlzRmluaXRlKG51bWJlcikpIHtcbiAgICAgICAgZXJyb3IoJ0JhZCBudW1iZXInKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChCaWdOdW1iZXIgPT0gbnVsbCkgQmlnTnVtYmVyID0gcmVxdWlyZSgnYmlnbnVtYmVyLmpzJyk7XG4gICAgICAgIC8vaWYgKG51bWJlciA+IDkwMDcxOTkyNTQ3NDA5OTIgfHwgbnVtYmVyIDwgLTkwMDcxOTkyNTQ3NDA5OTIpXG4gICAgICAgIC8vIEJpZ251bWJlciBoYXMgc3RyaWN0ZXIgY2hlY2s6IGV2ZXJ5dGhpbmcgd2l0aCBsZW5ndGggPiAxNSBkaWdpdHMgZGlzYWxsb3dlZFxuICAgICAgICBpZiAoc3RyaW5nLmxlbmd0aCA+IDE1KVxuICAgICAgICAgIHJldHVybiBfb3B0aW9ucy5zdG9yZUFzU3RyaW5nXG4gICAgICAgICAgICA/IHN0cmluZ1xuICAgICAgICAgICAgOiBfb3B0aW9ucy51c2VOYXRpdmVCaWdJbnRcbiAgICAgICAgICAgID8gQmlnSW50KHN0cmluZylcbiAgICAgICAgICAgIDogbmV3IEJpZ051bWJlcihzdHJpbmcpO1xuICAgICAgICBlbHNlXG4gICAgICAgICAgcmV0dXJuICFfb3B0aW9ucy5hbHdheXNQYXJzZUFzQmlnXG4gICAgICAgICAgICA/IG51bWJlclxuICAgICAgICAgICAgOiBfb3B0aW9ucy51c2VOYXRpdmVCaWdJbnRcbiAgICAgICAgICAgID8gQmlnSW50KG51bWJlcilcbiAgICAgICAgICAgIDogbmV3IEJpZ051bWJlcihudW1iZXIpO1xuICAgICAgfVxuICAgIH0sXG4gICAgc3RyaW5nID0gZnVuY3Rpb24gKCkge1xuICAgICAgLy8gUGFyc2UgYSBzdHJpbmcgdmFsdWUuXG5cbiAgICAgIHZhciBoZXgsXG4gICAgICAgIGksXG4gICAgICAgIHN0cmluZyA9ICcnLFxuICAgICAgICB1ZmZmZjtcblxuICAgICAgLy8gV2hlbiBwYXJzaW5nIGZvciBzdHJpbmcgdmFsdWVzLCB3ZSBtdXN0IGxvb2sgZm9yIFwiIGFuZCBcXCBjaGFyYWN0ZXJzLlxuXG4gICAgICBpZiAoY2ggPT09ICdcIicpIHtcbiAgICAgICAgdmFyIHN0YXJ0QXQgPSBhdDtcbiAgICAgICAgd2hpbGUgKG5leHQoKSkge1xuICAgICAgICAgIGlmIChjaCA9PT0gJ1wiJykge1xuICAgICAgICAgICAgaWYgKGF0IC0gMSA+IHN0YXJ0QXQpIHN0cmluZyArPSB0ZXh0LnN1YnN0cmluZyhzdGFydEF0LCBhdCAtIDEpO1xuICAgICAgICAgICAgbmV4dCgpO1xuICAgICAgICAgICAgcmV0dXJuIHN0cmluZztcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGNoID09PSAnXFxcXCcpIHtcbiAgICAgICAgICAgIGlmIChhdCAtIDEgPiBzdGFydEF0KSBzdHJpbmcgKz0gdGV4dC5zdWJzdHJpbmcoc3RhcnRBdCwgYXQgLSAxKTtcbiAgICAgICAgICAgIG5leHQoKTtcbiAgICAgICAgICAgIGlmIChjaCA9PT0gJ3UnKSB7XG4gICAgICAgICAgICAgIHVmZmZmID0gMDtcbiAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IDQ7IGkgKz0gMSkge1xuICAgICAgICAgICAgICAgIGhleCA9IHBhcnNlSW50KG5leHQoKSwgMTYpO1xuICAgICAgICAgICAgICAgIGlmICghaXNGaW5pdGUoaGV4KSkge1xuICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHVmZmZmID0gdWZmZmYgKiAxNiArIGhleDtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBzdHJpbmcgKz0gU3RyaW5nLmZyb21DaGFyQ29kZSh1ZmZmZik7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBlc2NhcGVlW2NoXSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgc3RyaW5nICs9IGVzY2FwZWVbY2hdO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzdGFydEF0ID0gYXQ7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBlcnJvcignQmFkIHN0cmluZycpO1xuICAgIH0sXG4gICAgd2hpdGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAvLyBTa2lwIHdoaXRlc3BhY2UuXG5cbiAgICAgIHdoaWxlIChjaCAmJiBjaCA8PSAnICcpIHtcbiAgICAgICAgbmV4dCgpO1xuICAgICAgfVxuICAgIH0sXG4gICAgd29yZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIC8vIHRydWUsIGZhbHNlLCBvciBudWxsLlxuXG4gICAgICBzd2l0Y2ggKGNoKSB7XG4gICAgICAgIGNhc2UgJ3QnOlxuICAgICAgICAgIG5leHQoJ3QnKTtcbiAgICAgICAgICBuZXh0KCdyJyk7XG4gICAgICAgICAgbmV4dCgndScpO1xuICAgICAgICAgIG5leHQoJ2UnKTtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgY2FzZSAnZic6XG4gICAgICAgICAgbmV4dCgnZicpO1xuICAgICAgICAgIG5leHQoJ2EnKTtcbiAgICAgICAgICBuZXh0KCdsJyk7XG4gICAgICAgICAgbmV4dCgncycpO1xuICAgICAgICAgIG5leHQoJ2UnKTtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIGNhc2UgJ24nOlxuICAgICAgICAgIG5leHQoJ24nKTtcbiAgICAgICAgICBuZXh0KCd1Jyk7XG4gICAgICAgICAgbmV4dCgnbCcpO1xuICAgICAgICAgIG5leHQoJ2wnKTtcbiAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICAgIGVycm9yKFwiVW5leHBlY3RlZCAnXCIgKyBjaCArIFwiJ1wiKTtcbiAgICB9LFxuICAgIHZhbHVlLCAvLyBQbGFjZSBob2xkZXIgZm9yIHRoZSB2YWx1ZSBmdW5jdGlvbi5cbiAgICBhcnJheSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIC8vIFBhcnNlIGFuIGFycmF5IHZhbHVlLlxuXG4gICAgICB2YXIgYXJyYXkgPSBbXTtcblxuICAgICAgaWYgKGNoID09PSAnWycpIHtcbiAgICAgICAgbmV4dCgnWycpO1xuICAgICAgICB3aGl0ZSgpO1xuICAgICAgICBpZiAoY2ggPT09ICddJykge1xuICAgICAgICAgIG5leHQoJ10nKTtcbiAgICAgICAgICByZXR1cm4gYXJyYXk7IC8vIGVtcHR5IGFycmF5XG4gICAgICAgIH1cbiAgICAgICAgd2hpbGUgKGNoKSB7XG4gICAgICAgICAgYXJyYXkucHVzaCh2YWx1ZSgpKTtcbiAgICAgICAgICB3aGl0ZSgpO1xuICAgICAgICAgIGlmIChjaCA9PT0gJ10nKSB7XG4gICAgICAgICAgICBuZXh0KCddJyk7XG4gICAgICAgICAgICByZXR1cm4gYXJyYXk7XG4gICAgICAgICAgfVxuICAgICAgICAgIG5leHQoJywnKTtcbiAgICAgICAgICB3aGl0ZSgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBlcnJvcignQmFkIGFycmF5Jyk7XG4gICAgfSxcbiAgICBvYmplY3QgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAvLyBQYXJzZSBhbiBvYmplY3QgdmFsdWUuXG5cbiAgICAgIHZhciBrZXksXG4gICAgICAgIG9iamVjdCA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG5cbiAgICAgIGlmIChjaCA9PT0gJ3snKSB7XG4gICAgICAgIG5leHQoJ3snKTtcbiAgICAgICAgd2hpdGUoKTtcbiAgICAgICAgaWYgKGNoID09PSAnfScpIHtcbiAgICAgICAgICBuZXh0KCd9Jyk7XG4gICAgICAgICAgcmV0dXJuIG9iamVjdDsgLy8gZW1wdHkgb2JqZWN0XG4gICAgICAgIH1cbiAgICAgICAgd2hpbGUgKGNoKSB7XG4gICAgICAgICAga2V5ID0gc3RyaW5nKCk7XG4gICAgICAgICAgd2hpdGUoKTtcbiAgICAgICAgICBuZXh0KCc6Jyk7XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgX29wdGlvbnMuc3RyaWN0ID09PSB0cnVlICYmXG4gICAgICAgICAgICBPYmplY3QuaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIGtleSlcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIGVycm9yKCdEdXBsaWNhdGUga2V5IFwiJyArIGtleSArICdcIicpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChzdXNwZWN0UHJvdG9SeC50ZXN0KGtleSkgPT09IHRydWUpIHtcbiAgICAgICAgICAgIGlmIChfb3B0aW9ucy5wcm90b0FjdGlvbiA9PT0gJ2Vycm9yJykge1xuICAgICAgICAgICAgICBlcnJvcignT2JqZWN0IGNvbnRhaW5zIGZvcmJpZGRlbiBwcm90b3R5cGUgcHJvcGVydHknKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoX29wdGlvbnMucHJvdG9BY3Rpb24gPT09ICdpZ25vcmUnKSB7XG4gICAgICAgICAgICAgIHZhbHVlKCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBvYmplY3Rba2V5XSA9IHZhbHVlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIGlmIChzdXNwZWN0Q29uc3RydWN0b3JSeC50ZXN0KGtleSkgPT09IHRydWUpIHtcbiAgICAgICAgICAgIGlmIChfb3B0aW9ucy5jb25zdHJ1Y3RvckFjdGlvbiA9PT0gJ2Vycm9yJykge1xuICAgICAgICAgICAgICBlcnJvcignT2JqZWN0IGNvbnRhaW5zIGZvcmJpZGRlbiBjb25zdHJ1Y3RvciBwcm9wZXJ0eScpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChfb3B0aW9ucy5jb25zdHJ1Y3RvckFjdGlvbiA9PT0gJ2lnbm9yZScpIHtcbiAgICAgICAgICAgICAgdmFsdWUoKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIG9iamVjdFtrZXldID0gdmFsdWUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgb2JqZWN0W2tleV0gPSB2YWx1ZSgpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHdoaXRlKCk7XG4gICAgICAgICAgaWYgKGNoID09PSAnfScpIHtcbiAgICAgICAgICAgIG5leHQoJ30nKTtcbiAgICAgICAgICAgIHJldHVybiBvYmplY3Q7XG4gICAgICAgICAgfVxuICAgICAgICAgIG5leHQoJywnKTtcbiAgICAgICAgICB3aGl0ZSgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBlcnJvcignQmFkIG9iamVjdCcpO1xuICAgIH07XG5cbiAgdmFsdWUgPSBmdW5jdGlvbiAoKSB7XG4gICAgLy8gUGFyc2UgYSBKU09OIHZhbHVlLiBJdCBjb3VsZCBiZSBhbiBvYmplY3QsIGFuIGFycmF5LCBhIHN0cmluZywgYSBudW1iZXIsXG4gICAgLy8gb3IgYSB3b3JkLlxuXG4gICAgd2hpdGUoKTtcbiAgICBzd2l0Y2ggKGNoKSB7XG4gICAgICBjYXNlICd7JzpcbiAgICAgICAgcmV0dXJuIG9iamVjdCgpO1xuICAgICAgY2FzZSAnWyc6XG4gICAgICAgIHJldHVybiBhcnJheSgpO1xuICAgICAgY2FzZSAnXCInOlxuICAgICAgICByZXR1cm4gc3RyaW5nKCk7XG4gICAgICBjYXNlICctJzpcbiAgICAgICAgcmV0dXJuIG51bWJlcigpO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIGNoID49ICcwJyAmJiBjaCA8PSAnOScgPyBudW1iZXIoKSA6IHdvcmQoKTtcbiAgICB9XG4gIH07XG5cbiAgLy8gUmV0dXJuIHRoZSBqc29uX3BhcnNlIGZ1bmN0aW9uLiBJdCB3aWxsIGhhdmUgYWNjZXNzIHRvIGFsbCBvZiB0aGUgYWJvdmVcbiAgLy8gZnVuY3Rpb25zIGFuZCB2YXJpYWJsZXMuXG5cbiAgcmV0dXJuIGZ1bmN0aW9uIChzb3VyY2UsIHJldml2ZXIpIHtcbiAgICB2YXIgcmVzdWx0O1xuXG4gICAgdGV4dCA9IHNvdXJjZSArICcnO1xuICAgIGF0ID0gMDtcbiAgICBjaCA9ICcgJztcbiAgICByZXN1bHQgPSB2YWx1ZSgpO1xuICAgIHdoaXRlKCk7XG4gICAgaWYgKGNoKSB7XG4gICAgICBlcnJvcignU3ludGF4IGVycm9yJyk7XG4gICAgfVxuXG4gICAgLy8gSWYgdGhlcmUgaXMgYSByZXZpdmVyIGZ1bmN0aW9uLCB3ZSByZWN1cnNpdmVseSB3YWxrIHRoZSBuZXcgc3RydWN0dXJlLFxuICAgIC8vIHBhc3NpbmcgZWFjaCBuYW1lL3ZhbHVlIHBhaXIgdG8gdGhlIHJldml2ZXIgZnVuY3Rpb24gZm9yIHBvc3NpYmxlXG4gICAgLy8gdHJhbnNmb3JtYXRpb24sIHN0YXJ0aW5nIHdpdGggYSB0ZW1wb3Jhcnkgcm9vdCBvYmplY3QgdGhhdCBob2xkcyB0aGUgcmVzdWx0XG4gICAgLy8gaW4gYW4gZW1wdHkga2V5LiBJZiB0aGVyZSBpcyBub3QgYSByZXZpdmVyIGZ1bmN0aW9uLCB3ZSBzaW1wbHkgcmV0dXJuIHRoZVxuICAgIC8vIHJlc3VsdC5cblxuICAgIHJldHVybiB0eXBlb2YgcmV2aXZlciA9PT0gJ2Z1bmN0aW9uJ1xuICAgICAgPyAoZnVuY3Rpb24gd2Fsayhob2xkZXIsIGtleSkge1xuICAgICAgICAgIHZhciBrLFxuICAgICAgICAgICAgdixcbiAgICAgICAgICAgIHZhbHVlID0gaG9sZGVyW2tleV07XG4gICAgICAgICAgaWYgKHZhbHVlICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgIE9iamVjdC5rZXlzKHZhbHVlKS5mb3JFYWNoKGZ1bmN0aW9uIChrKSB7XG4gICAgICAgICAgICAgIHYgPSB3YWxrKHZhbHVlLCBrKTtcbiAgICAgICAgICAgICAgaWYgKHYgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIHZhbHVlW2tdID0gdjtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBkZWxldGUgdmFsdWVba107XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gcmV2aXZlci5jYWxsKGhvbGRlciwga2V5LCB2YWx1ZSk7XG4gICAgICAgIH0pKHsgJyc6IHJlc3VsdCB9LCAnJylcbiAgICAgIDogcmVzdWx0O1xuICB9O1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBqc29uX3BhcnNlO1xuIiwidmFyIEJpZ051bWJlciA9IHJlcXVpcmUoJ2JpZ251bWJlci5qcycpO1xuXG4vKlxuICAgIGpzb24yLmpzXG4gICAgMjAxMy0wNS0yNlxuXG4gICAgUHVibGljIERvbWFpbi5cblxuICAgIE5PIFdBUlJBTlRZIEVYUFJFU1NFRCBPUiBJTVBMSUVELiBVU0UgQVQgWU9VUiBPV04gUklTSy5cblxuICAgIFNlZSBodHRwOi8vd3d3LkpTT04ub3JnL2pzLmh0bWxcblxuXG4gICAgVGhpcyBjb2RlIHNob3VsZCBiZSBtaW5pZmllZCBiZWZvcmUgZGVwbG95bWVudC5cbiAgICBTZWUgaHR0cDovL2phdmFzY3JpcHQuY3JvY2tmb3JkLmNvbS9qc21pbi5odG1sXG5cbiAgICBVU0UgWU9VUiBPV04gQ09QWS4gSVQgSVMgRVhUUkVNRUxZIFVOV0lTRSBUTyBMT0FEIENPREUgRlJPTSBTRVJWRVJTIFlPVSBET1xuICAgIE5PVCBDT05UUk9MLlxuXG5cbiAgICBUaGlzIGZpbGUgY3JlYXRlcyBhIGdsb2JhbCBKU09OIG9iamVjdCBjb250YWluaW5nIHR3byBtZXRob2RzOiBzdHJpbmdpZnlcbiAgICBhbmQgcGFyc2UuXG5cbiAgICAgICAgSlNPTi5zdHJpbmdpZnkodmFsdWUsIHJlcGxhY2VyLCBzcGFjZSlcbiAgICAgICAgICAgIHZhbHVlICAgICAgIGFueSBKYXZhU2NyaXB0IHZhbHVlLCB1c3VhbGx5IGFuIG9iamVjdCBvciBhcnJheS5cblxuICAgICAgICAgICAgcmVwbGFjZXIgICAgYW4gb3B0aW9uYWwgcGFyYW1ldGVyIHRoYXQgZGV0ZXJtaW5lcyBob3cgb2JqZWN0XG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZXMgYXJlIHN0cmluZ2lmaWVkIGZvciBvYmplY3RzLiBJdCBjYW4gYmUgYVxuICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gb3IgYW4gYXJyYXkgb2Ygc3RyaW5ncy5cblxuICAgICAgICAgICAgc3BhY2UgICAgICAgYW4gb3B0aW9uYWwgcGFyYW1ldGVyIHRoYXQgc3BlY2lmaWVzIHRoZSBpbmRlbnRhdGlvblxuICAgICAgICAgICAgICAgICAgICAgICAgb2YgbmVzdGVkIHN0cnVjdHVyZXMuIElmIGl0IGlzIG9taXR0ZWQsIHRoZSB0ZXh0IHdpbGxcbiAgICAgICAgICAgICAgICAgICAgICAgIGJlIHBhY2tlZCB3aXRob3V0IGV4dHJhIHdoaXRlc3BhY2UuIElmIGl0IGlzIGEgbnVtYmVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgaXQgd2lsbCBzcGVjaWZ5IHRoZSBudW1iZXIgb2Ygc3BhY2VzIHRvIGluZGVudCBhdCBlYWNoXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXZlbC4gSWYgaXQgaXMgYSBzdHJpbmcgKHN1Y2ggYXMgJ1xcdCcgb3IgJyZuYnNwOycpLFxuICAgICAgICAgICAgICAgICAgICAgICAgaXQgY29udGFpbnMgdGhlIGNoYXJhY3RlcnMgdXNlZCB0byBpbmRlbnQgYXQgZWFjaCBsZXZlbC5cblxuICAgICAgICAgICAgVGhpcyBtZXRob2QgcHJvZHVjZXMgYSBKU09OIHRleHQgZnJvbSBhIEphdmFTY3JpcHQgdmFsdWUuXG5cbiAgICAgICAgICAgIFdoZW4gYW4gb2JqZWN0IHZhbHVlIGlzIGZvdW5kLCBpZiB0aGUgb2JqZWN0IGNvbnRhaW5zIGEgdG9KU09OXG4gICAgICAgICAgICBtZXRob2QsIGl0cyB0b0pTT04gbWV0aG9kIHdpbGwgYmUgY2FsbGVkIGFuZCB0aGUgcmVzdWx0IHdpbGwgYmVcbiAgICAgICAgICAgIHN0cmluZ2lmaWVkLiBBIHRvSlNPTiBtZXRob2QgZG9lcyBub3Qgc2VyaWFsaXplOiBpdCByZXR1cm5zIHRoZVxuICAgICAgICAgICAgdmFsdWUgcmVwcmVzZW50ZWQgYnkgdGhlIG5hbWUvdmFsdWUgcGFpciB0aGF0IHNob3VsZCBiZSBzZXJpYWxpemVkLFxuICAgICAgICAgICAgb3IgdW5kZWZpbmVkIGlmIG5vdGhpbmcgc2hvdWxkIGJlIHNlcmlhbGl6ZWQuIFRoZSB0b0pTT04gbWV0aG9kXG4gICAgICAgICAgICB3aWxsIGJlIHBhc3NlZCB0aGUga2V5IGFzc29jaWF0ZWQgd2l0aCB0aGUgdmFsdWUsIGFuZCB0aGlzIHdpbGwgYmVcbiAgICAgICAgICAgIGJvdW5kIHRvIHRoZSB2YWx1ZVxuXG4gICAgICAgICAgICBGb3IgZXhhbXBsZSwgdGhpcyB3b3VsZCBzZXJpYWxpemUgRGF0ZXMgYXMgSVNPIHN0cmluZ3MuXG5cbiAgICAgICAgICAgICAgICBEYXRlLnByb3RvdHlwZS50b0pTT04gPSBmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGYobikge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gRm9ybWF0IGludGVnZXJzIHRvIGhhdmUgYXQgbGVhc3QgdHdvIGRpZ2l0cy5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuIDwgMTAgPyAnMCcgKyBuIDogbjtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmdldFVUQ0Z1bGxZZWFyKCkgICArICctJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgZih0aGlzLmdldFVUQ01vbnRoKCkgKyAxKSArICctJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgZih0aGlzLmdldFVUQ0RhdGUoKSkgICAgICArICdUJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgZih0aGlzLmdldFVUQ0hvdXJzKCkpICAgICArICc6JyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgZih0aGlzLmdldFVUQ01pbnV0ZXMoKSkgICArICc6JyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgZih0aGlzLmdldFVUQ1NlY29uZHMoKSkgICArICdaJztcbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBZb3UgY2FuIHByb3ZpZGUgYW4gb3B0aW9uYWwgcmVwbGFjZXIgbWV0aG9kLiBJdCB3aWxsIGJlIHBhc3NlZCB0aGVcbiAgICAgICAgICAgIGtleSBhbmQgdmFsdWUgb2YgZWFjaCBtZW1iZXIsIHdpdGggdGhpcyBib3VuZCB0byB0aGUgY29udGFpbmluZ1xuICAgICAgICAgICAgb2JqZWN0LiBUaGUgdmFsdWUgdGhhdCBpcyByZXR1cm5lZCBmcm9tIHlvdXIgbWV0aG9kIHdpbGwgYmVcbiAgICAgICAgICAgIHNlcmlhbGl6ZWQuIElmIHlvdXIgbWV0aG9kIHJldHVybnMgdW5kZWZpbmVkLCB0aGVuIHRoZSBtZW1iZXIgd2lsbFxuICAgICAgICAgICAgYmUgZXhjbHVkZWQgZnJvbSB0aGUgc2VyaWFsaXphdGlvbi5cblxuICAgICAgICAgICAgSWYgdGhlIHJlcGxhY2VyIHBhcmFtZXRlciBpcyBhbiBhcnJheSBvZiBzdHJpbmdzLCB0aGVuIGl0IHdpbGwgYmVcbiAgICAgICAgICAgIHVzZWQgdG8gc2VsZWN0IHRoZSBtZW1iZXJzIHRvIGJlIHNlcmlhbGl6ZWQuIEl0IGZpbHRlcnMgdGhlIHJlc3VsdHNcbiAgICAgICAgICAgIHN1Y2ggdGhhdCBvbmx5IG1lbWJlcnMgd2l0aCBrZXlzIGxpc3RlZCBpbiB0aGUgcmVwbGFjZXIgYXJyYXkgYXJlXG4gICAgICAgICAgICBzdHJpbmdpZmllZC5cblxuICAgICAgICAgICAgVmFsdWVzIHRoYXQgZG8gbm90IGhhdmUgSlNPTiByZXByZXNlbnRhdGlvbnMsIHN1Y2ggYXMgdW5kZWZpbmVkIG9yXG4gICAgICAgICAgICBmdW5jdGlvbnMsIHdpbGwgbm90IGJlIHNlcmlhbGl6ZWQuIFN1Y2ggdmFsdWVzIGluIG9iamVjdHMgd2lsbCBiZVxuICAgICAgICAgICAgZHJvcHBlZDsgaW4gYXJyYXlzIHRoZXkgd2lsbCBiZSByZXBsYWNlZCB3aXRoIG51bGwuIFlvdSBjYW4gdXNlXG4gICAgICAgICAgICBhIHJlcGxhY2VyIGZ1bmN0aW9uIHRvIHJlcGxhY2UgdGhvc2Ugd2l0aCBKU09OIHZhbHVlcy5cbiAgICAgICAgICAgIEpTT04uc3RyaW5naWZ5KHVuZGVmaW5lZCkgcmV0dXJucyB1bmRlZmluZWQuXG5cbiAgICAgICAgICAgIFRoZSBvcHRpb25hbCBzcGFjZSBwYXJhbWV0ZXIgcHJvZHVjZXMgYSBzdHJpbmdpZmljYXRpb24gb2YgdGhlXG4gICAgICAgICAgICB2YWx1ZSB0aGF0IGlzIGZpbGxlZCB3aXRoIGxpbmUgYnJlYWtzIGFuZCBpbmRlbnRhdGlvbiB0byBtYWtlIGl0XG4gICAgICAgICAgICBlYXNpZXIgdG8gcmVhZC5cblxuICAgICAgICAgICAgSWYgdGhlIHNwYWNlIHBhcmFtZXRlciBpcyBhIG5vbi1lbXB0eSBzdHJpbmcsIHRoZW4gdGhhdCBzdHJpbmcgd2lsbFxuICAgICAgICAgICAgYmUgdXNlZCBmb3IgaW5kZW50YXRpb24uIElmIHRoZSBzcGFjZSBwYXJhbWV0ZXIgaXMgYSBudW1iZXIsIHRoZW5cbiAgICAgICAgICAgIHRoZSBpbmRlbnRhdGlvbiB3aWxsIGJlIHRoYXQgbWFueSBzcGFjZXMuXG5cbiAgICAgICAgICAgIEV4YW1wbGU6XG5cbiAgICAgICAgICAgIHRleHQgPSBKU09OLnN0cmluZ2lmeShbJ2UnLCB7cGx1cmlidXM6ICd1bnVtJ31dKTtcbiAgICAgICAgICAgIC8vIHRleHQgaXMgJ1tcImVcIix7XCJwbHVyaWJ1c1wiOlwidW51bVwifV0nXG5cblxuICAgICAgICAgICAgdGV4dCA9IEpTT04uc3RyaW5naWZ5KFsnZScsIHtwbHVyaWJ1czogJ3VudW0nfV0sIG51bGwsICdcXHQnKTtcbiAgICAgICAgICAgIC8vIHRleHQgaXMgJ1tcXG5cXHRcImVcIixcXG5cXHR7XFxuXFx0XFx0XCJwbHVyaWJ1c1wiOiBcInVudW1cIlxcblxcdH1cXG5dJ1xuXG4gICAgICAgICAgICB0ZXh0ID0gSlNPTi5zdHJpbmdpZnkoW25ldyBEYXRlKCldLCBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzW2tleV0gaW5zdGFuY2VvZiBEYXRlID9cbiAgICAgICAgICAgICAgICAgICAgJ0RhdGUoJyArIHRoaXNba2V5XSArICcpJyA6IHZhbHVlO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAvLyB0ZXh0IGlzICdbXCJEYXRlKC0tLWN1cnJlbnQgdGltZS0tLSlcIl0nXG5cblxuICAgICAgICBKU09OLnBhcnNlKHRleHQsIHJldml2ZXIpXG4gICAgICAgICAgICBUaGlzIG1ldGhvZCBwYXJzZXMgYSBKU09OIHRleHQgdG8gcHJvZHVjZSBhbiBvYmplY3Qgb3IgYXJyYXkuXG4gICAgICAgICAgICBJdCBjYW4gdGhyb3cgYSBTeW50YXhFcnJvciBleGNlcHRpb24uXG5cbiAgICAgICAgICAgIFRoZSBvcHRpb25hbCByZXZpdmVyIHBhcmFtZXRlciBpcyBhIGZ1bmN0aW9uIHRoYXQgY2FuIGZpbHRlciBhbmRcbiAgICAgICAgICAgIHRyYW5zZm9ybSB0aGUgcmVzdWx0cy4gSXQgcmVjZWl2ZXMgZWFjaCBvZiB0aGUga2V5cyBhbmQgdmFsdWVzLFxuICAgICAgICAgICAgYW5kIGl0cyByZXR1cm4gdmFsdWUgaXMgdXNlZCBpbnN0ZWFkIG9mIHRoZSBvcmlnaW5hbCB2YWx1ZS5cbiAgICAgICAgICAgIElmIGl0IHJldHVybnMgd2hhdCBpdCByZWNlaXZlZCwgdGhlbiB0aGUgc3RydWN0dXJlIGlzIG5vdCBtb2RpZmllZC5cbiAgICAgICAgICAgIElmIGl0IHJldHVybnMgdW5kZWZpbmVkIHRoZW4gdGhlIG1lbWJlciBpcyBkZWxldGVkLlxuXG4gICAgICAgICAgICBFeGFtcGxlOlxuXG4gICAgICAgICAgICAvLyBQYXJzZSB0aGUgdGV4dC4gVmFsdWVzIHRoYXQgbG9vayBsaWtlIElTTyBkYXRlIHN0cmluZ3Mgd2lsbFxuICAgICAgICAgICAgLy8gYmUgY29udmVydGVkIHRvIERhdGUgb2JqZWN0cy5cblxuICAgICAgICAgICAgbXlEYXRhID0gSlNPTi5wYXJzZSh0ZXh0LCBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkge1xuICAgICAgICAgICAgICAgIHZhciBhO1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgICAgIGEgPVxuL14oXFxkezR9KS0oXFxkezJ9KS0oXFxkezJ9KVQoXFxkezJ9KTooXFxkezJ9KTooXFxkezJ9KD86XFwuXFxkKik/KVokLy5leGVjKHZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgRGF0ZShEYXRlLlVUQygrYVsxXSwgK2FbMl0gLSAxLCArYVszXSwgK2FbNF0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgK2FbNV0sICthWzZdKSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIG15RGF0YSA9IEpTT04ucGFyc2UoJ1tcIkRhdGUoMDkvMDkvMjAwMSlcIl0nLCBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkge1xuICAgICAgICAgICAgICAgIHZhciBkO1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnICYmXG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZS5zbGljZSgwLCA1KSA9PT0gJ0RhdGUoJyAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUuc2xpY2UoLTEpID09PSAnKScpIHtcbiAgICAgICAgICAgICAgICAgICAgZCA9IG5ldyBEYXRlKHZhbHVlLnNsaWNlKDUsIC0xKSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgICAgICB9KTtcblxuXG4gICAgVGhpcyBpcyBhIHJlZmVyZW5jZSBpbXBsZW1lbnRhdGlvbi4gWW91IGFyZSBmcmVlIHRvIGNvcHksIG1vZGlmeSwgb3JcbiAgICByZWRpc3RyaWJ1dGUuXG4qL1xuXG4vKmpzbGludCBldmlsOiB0cnVlLCByZWdleHA6IHRydWUgKi9cblxuLyptZW1iZXJzIFwiXCIsIFwiXFxiXCIsIFwiXFx0XCIsIFwiXFxuXCIsIFwiXFxmXCIsIFwiXFxyXCIsIFwiXFxcIlwiLCBKU09OLCBcIlxcXFxcIiwgYXBwbHksXG4gICAgY2FsbCwgY2hhckNvZGVBdCwgZ2V0VVRDRGF0ZSwgZ2V0VVRDRnVsbFllYXIsIGdldFVUQ0hvdXJzLFxuICAgIGdldFVUQ01pbnV0ZXMsIGdldFVUQ01vbnRoLCBnZXRVVENTZWNvbmRzLCBoYXNPd25Qcm9wZXJ0eSwgam9pbixcbiAgICBsYXN0SW5kZXgsIGxlbmd0aCwgcGFyc2UsIHByb3RvdHlwZSwgcHVzaCwgcmVwbGFjZSwgc2xpY2UsIHN0cmluZ2lmeSxcbiAgICB0ZXN0LCB0b0pTT04sIHRvU3RyaW5nLCB2YWx1ZU9mXG4qL1xuXG5cbi8vIENyZWF0ZSBhIEpTT04gb2JqZWN0IG9ubHkgaWYgb25lIGRvZXMgbm90IGFscmVhZHkgZXhpc3QuIFdlIGNyZWF0ZSB0aGVcbi8vIG1ldGhvZHMgaW4gYSBjbG9zdXJlIHRvIGF2b2lkIGNyZWF0aW5nIGdsb2JhbCB2YXJpYWJsZXMuXG5cbnZhciBKU09OID0gbW9kdWxlLmV4cG9ydHM7XG5cbihmdW5jdGlvbiAoKSB7XG4gICAgJ3VzZSBzdHJpY3QnO1xuXG4gICAgZnVuY3Rpb24gZihuKSB7XG4gICAgICAgIC8vIEZvcm1hdCBpbnRlZ2VycyB0byBoYXZlIGF0IGxlYXN0IHR3byBkaWdpdHMuXG4gICAgICAgIHJldHVybiBuIDwgMTAgPyAnMCcgKyBuIDogbjtcbiAgICB9XG5cbiAgICB2YXIgY3ggPSAvW1xcdTAwMDBcXHUwMGFkXFx1MDYwMC1cXHUwNjA0XFx1MDcwZlxcdTE3YjRcXHUxN2I1XFx1MjAwYy1cXHUyMDBmXFx1MjAyOC1cXHUyMDJmXFx1MjA2MC1cXHUyMDZmXFx1ZmVmZlxcdWZmZjAtXFx1ZmZmZl0vZyxcbiAgICAgICAgZXNjYXBhYmxlID0gL1tcXFxcXFxcIlxceDAwLVxceDFmXFx4N2YtXFx4OWZcXHUwMGFkXFx1MDYwMC1cXHUwNjA0XFx1MDcwZlxcdTE3YjRcXHUxN2I1XFx1MjAwYy1cXHUyMDBmXFx1MjAyOC1cXHUyMDJmXFx1MjA2MC1cXHUyMDZmXFx1ZmVmZlxcdWZmZjAtXFx1ZmZmZl0vZyxcbiAgICAgICAgZ2FwLFxuICAgICAgICBpbmRlbnQsXG4gICAgICAgIG1ldGEgPSB7ICAgIC8vIHRhYmxlIG9mIGNoYXJhY3RlciBzdWJzdGl0dXRpb25zXG4gICAgICAgICAgICAnXFxiJzogJ1xcXFxiJyxcbiAgICAgICAgICAgICdcXHQnOiAnXFxcXHQnLFxuICAgICAgICAgICAgJ1xcbic6ICdcXFxcbicsXG4gICAgICAgICAgICAnXFxmJzogJ1xcXFxmJyxcbiAgICAgICAgICAgICdcXHInOiAnXFxcXHInLFxuICAgICAgICAgICAgJ1wiJyA6ICdcXFxcXCInLFxuICAgICAgICAgICAgJ1xcXFwnOiAnXFxcXFxcXFwnXG4gICAgICAgIH0sXG4gICAgICAgIHJlcDtcblxuXG4gICAgZnVuY3Rpb24gcXVvdGUoc3RyaW5nKSB7XG5cbi8vIElmIHRoZSBzdHJpbmcgY29udGFpbnMgbm8gY29udHJvbCBjaGFyYWN0ZXJzLCBubyBxdW90ZSBjaGFyYWN0ZXJzLCBhbmQgbm9cbi8vIGJhY2tzbGFzaCBjaGFyYWN0ZXJzLCB0aGVuIHdlIGNhbiBzYWZlbHkgc2xhcCBzb21lIHF1b3RlcyBhcm91bmQgaXQuXG4vLyBPdGhlcndpc2Ugd2UgbXVzdCBhbHNvIHJlcGxhY2UgdGhlIG9mZmVuZGluZyBjaGFyYWN0ZXJzIHdpdGggc2FmZSBlc2NhcGVcbi8vIHNlcXVlbmNlcy5cblxuICAgICAgICBlc2NhcGFibGUubGFzdEluZGV4ID0gMDtcbiAgICAgICAgcmV0dXJuIGVzY2FwYWJsZS50ZXN0KHN0cmluZykgPyAnXCInICsgc3RyaW5nLnJlcGxhY2UoZXNjYXBhYmxlLCBmdW5jdGlvbiAoYSkge1xuICAgICAgICAgICAgdmFyIGMgPSBtZXRhW2FdO1xuICAgICAgICAgICAgcmV0dXJuIHR5cGVvZiBjID09PSAnc3RyaW5nJ1xuICAgICAgICAgICAgICAgID8gY1xuICAgICAgICAgICAgICAgIDogJ1xcXFx1JyArICgnMDAwMCcgKyBhLmNoYXJDb2RlQXQoMCkudG9TdHJpbmcoMTYpKS5zbGljZSgtNCk7XG4gICAgICAgIH0pICsgJ1wiJyA6ICdcIicgKyBzdHJpbmcgKyAnXCInO1xuICAgIH1cblxuXG4gICAgZnVuY3Rpb24gc3RyKGtleSwgaG9sZGVyKSB7XG5cbi8vIFByb2R1Y2UgYSBzdHJpbmcgZnJvbSBob2xkZXJba2V5XS5cblxuICAgICAgICB2YXIgaSwgICAgICAgICAgLy8gVGhlIGxvb3AgY291bnRlci5cbiAgICAgICAgICAgIGssICAgICAgICAgIC8vIFRoZSBtZW1iZXIga2V5LlxuICAgICAgICAgICAgdiwgICAgICAgICAgLy8gVGhlIG1lbWJlciB2YWx1ZS5cbiAgICAgICAgICAgIGxlbmd0aCxcbiAgICAgICAgICAgIG1pbmQgPSBnYXAsXG4gICAgICAgICAgICBwYXJ0aWFsLFxuICAgICAgICAgICAgdmFsdWUgPSBob2xkZXJba2V5XSxcbiAgICAgICAgICAgIGlzQmlnTnVtYmVyID0gdmFsdWUgIT0gbnVsbCAmJiAodmFsdWUgaW5zdGFuY2VvZiBCaWdOdW1iZXIgfHwgQmlnTnVtYmVyLmlzQmlnTnVtYmVyKHZhbHVlKSk7XG5cbi8vIElmIHRoZSB2YWx1ZSBoYXMgYSB0b0pTT04gbWV0aG9kLCBjYWxsIGl0IHRvIG9idGFpbiBhIHJlcGxhY2VtZW50IHZhbHVlLlxuXG4gICAgICAgIGlmICh2YWx1ZSAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmXG4gICAgICAgICAgICAgICAgdHlwZW9mIHZhbHVlLnRvSlNPTiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZS50b0pTT04oa2V5KTtcbiAgICAgICAgfVxuXG4vLyBJZiB3ZSB3ZXJlIGNhbGxlZCB3aXRoIGEgcmVwbGFjZXIgZnVuY3Rpb24sIHRoZW4gY2FsbCB0aGUgcmVwbGFjZXIgdG9cbi8vIG9idGFpbiBhIHJlcGxhY2VtZW50IHZhbHVlLlxuXG4gICAgICAgIGlmICh0eXBlb2YgcmVwID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICB2YWx1ZSA9IHJlcC5jYWxsKGhvbGRlciwga2V5LCB2YWx1ZSk7XG4gICAgICAgIH1cblxuLy8gV2hhdCBoYXBwZW5zIG5leHQgZGVwZW5kcyBvbiB0aGUgdmFsdWUncyB0eXBlLlxuXG4gICAgICAgIHN3aXRjaCAodHlwZW9mIHZhbHVlKSB7XG4gICAgICAgIGNhc2UgJ3N0cmluZyc6XG4gICAgICAgICAgICBpZiAoaXNCaWdOdW1iZXIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiBxdW90ZSh2YWx1ZSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgY2FzZSAnbnVtYmVyJzpcblxuLy8gSlNPTiBudW1iZXJzIG11c3QgYmUgZmluaXRlLiBFbmNvZGUgbm9uLWZpbml0ZSBudW1iZXJzIGFzIG51bGwuXG5cbiAgICAgICAgICAgIHJldHVybiBpc0Zpbml0ZSh2YWx1ZSkgPyBTdHJpbmcodmFsdWUpIDogJ251bGwnO1xuXG4gICAgICAgIGNhc2UgJ2Jvb2xlYW4nOlxuICAgICAgICBjYXNlICdudWxsJzpcbiAgICAgICAgY2FzZSAnYmlnaW50JzpcblxuLy8gSWYgdGhlIHZhbHVlIGlzIGEgYm9vbGVhbiBvciBudWxsLCBjb252ZXJ0IGl0IHRvIGEgc3RyaW5nLiBOb3RlOlxuLy8gdHlwZW9mIG51bGwgZG9lcyBub3QgcHJvZHVjZSAnbnVsbCcuIFRoZSBjYXNlIGlzIGluY2x1ZGVkIGhlcmUgaW5cbi8vIHRoZSByZW1vdGUgY2hhbmNlIHRoYXQgdGhpcyBnZXRzIGZpeGVkIHNvbWVkYXkuXG5cbiAgICAgICAgICAgIHJldHVybiBTdHJpbmcodmFsdWUpO1xuXG4vLyBJZiB0aGUgdHlwZSBpcyAnb2JqZWN0Jywgd2UgbWlnaHQgYmUgZGVhbGluZyB3aXRoIGFuIG9iamVjdCBvciBhbiBhcnJheSBvclxuLy8gbnVsbC5cblxuICAgICAgICBjYXNlICdvYmplY3QnOlxuXG4vLyBEdWUgdG8gYSBzcGVjaWZpY2F0aW9uIGJsdW5kZXIgaW4gRUNNQVNjcmlwdCwgdHlwZW9mIG51bGwgaXMgJ29iamVjdCcsXG4vLyBzbyB3YXRjaCBvdXQgZm9yIHRoYXQgY2FzZS5cblxuICAgICAgICAgICAgaWYgKCF2YWx1ZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiAnbnVsbCc7XG4gICAgICAgICAgICB9XG5cbi8vIE1ha2UgYW4gYXJyYXkgdG8gaG9sZCB0aGUgcGFydGlhbCByZXN1bHRzIG9mIHN0cmluZ2lmeWluZyB0aGlzIG9iamVjdCB2YWx1ZS5cblxuICAgICAgICAgICAgZ2FwICs9IGluZGVudDtcbiAgICAgICAgICAgIHBhcnRpYWwgPSBbXTtcblxuLy8gSXMgdGhlIHZhbHVlIGFuIGFycmF5P1xuXG4gICAgICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5hcHBseSh2YWx1ZSkgPT09ICdbb2JqZWN0IEFycmF5XScpIHtcblxuLy8gVGhlIHZhbHVlIGlzIGFuIGFycmF5LiBTdHJpbmdpZnkgZXZlcnkgZWxlbWVudC4gVXNlIG51bGwgYXMgYSBwbGFjZWhvbGRlclxuLy8gZm9yIG5vbi1KU09OIHZhbHVlcy5cblxuICAgICAgICAgICAgICAgIGxlbmd0aCA9IHZhbHVlLmxlbmd0aDtcbiAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbGVuZ3RoOyBpICs9IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgcGFydGlhbFtpXSA9IHN0cihpLCB2YWx1ZSkgfHwgJ251bGwnO1xuICAgICAgICAgICAgICAgIH1cblxuLy8gSm9pbiBhbGwgb2YgdGhlIGVsZW1lbnRzIHRvZ2V0aGVyLCBzZXBhcmF0ZWQgd2l0aCBjb21tYXMsIGFuZCB3cmFwIHRoZW0gaW5cbi8vIGJyYWNrZXRzLlxuXG4gICAgICAgICAgICAgICAgdiA9IHBhcnRpYWwubGVuZ3RoID09PSAwXG4gICAgICAgICAgICAgICAgICAgID8gJ1tdJ1xuICAgICAgICAgICAgICAgICAgICA6IGdhcFxuICAgICAgICAgICAgICAgICAgICA/ICdbXFxuJyArIGdhcCArIHBhcnRpYWwuam9pbignLFxcbicgKyBnYXApICsgJ1xcbicgKyBtaW5kICsgJ10nXG4gICAgICAgICAgICAgICAgICAgIDogJ1snICsgcGFydGlhbC5qb2luKCcsJykgKyAnXSc7XG4gICAgICAgICAgICAgICAgZ2FwID0gbWluZDtcbiAgICAgICAgICAgICAgICByZXR1cm4gdjtcbiAgICAgICAgICAgIH1cblxuLy8gSWYgdGhlIHJlcGxhY2VyIGlzIGFuIGFycmF5LCB1c2UgaXQgdG8gc2VsZWN0IHRoZSBtZW1iZXJzIHRvIGJlIHN0cmluZ2lmaWVkLlxuXG4gICAgICAgICAgICBpZiAocmVwICYmIHR5cGVvZiByZXAgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICAgICAgbGVuZ3RoID0gcmVwLmxlbmd0aDtcbiAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbGVuZ3RoOyBpICs9IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiByZXBbaV0gPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBrID0gcmVwW2ldO1xuICAgICAgICAgICAgICAgICAgICAgICAgdiA9IHN0cihrLCB2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnRpYWwucHVzaChxdW90ZShrKSArIChnYXAgPyAnOiAnIDogJzonKSArIHYpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcblxuLy8gT3RoZXJ3aXNlLCBpdGVyYXRlIHRocm91Z2ggYWxsIG9mIHRoZSBrZXlzIGluIHRoZSBvYmplY3QuXG5cbiAgICAgICAgICAgICAgICBPYmplY3Qua2V5cyh2YWx1ZSkuZm9yRWFjaChmdW5jdGlvbihrKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciB2ID0gc3RyKGssIHZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHYpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcnRpYWwucHVzaChxdW90ZShrKSArIChnYXAgPyAnOiAnIDogJzonKSArIHYpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG5cbi8vIEpvaW4gYWxsIG9mIHRoZSBtZW1iZXIgdGV4dHMgdG9nZXRoZXIsIHNlcGFyYXRlZCB3aXRoIGNvbW1hcyxcbi8vIGFuZCB3cmFwIHRoZW0gaW4gYnJhY2VzLlxuXG4gICAgICAgICAgICB2ID0gcGFydGlhbC5sZW5ndGggPT09IDBcbiAgICAgICAgICAgICAgICA/ICd7fSdcbiAgICAgICAgICAgICAgICA6IGdhcFxuICAgICAgICAgICAgICAgID8gJ3tcXG4nICsgZ2FwICsgcGFydGlhbC5qb2luKCcsXFxuJyArIGdhcCkgKyAnXFxuJyArIG1pbmQgKyAnfSdcbiAgICAgICAgICAgICAgICA6ICd7JyArIHBhcnRpYWwuam9pbignLCcpICsgJ30nO1xuICAgICAgICAgICAgZ2FwID0gbWluZDtcbiAgICAgICAgICAgIHJldHVybiB2O1xuICAgICAgICB9XG4gICAgfVxuXG4vLyBJZiB0aGUgSlNPTiBvYmplY3QgZG9lcyBub3QgeWV0IGhhdmUgYSBzdHJpbmdpZnkgbWV0aG9kLCBnaXZlIGl0IG9uZS5cblxuICAgIGlmICh0eXBlb2YgSlNPTi5zdHJpbmdpZnkgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgSlNPTi5zdHJpbmdpZnkgPSBmdW5jdGlvbiAodmFsdWUsIHJlcGxhY2VyLCBzcGFjZSkge1xuXG4vLyBUaGUgc3RyaW5naWZ5IG1ldGhvZCB0YWtlcyBhIHZhbHVlIGFuZCBhbiBvcHRpb25hbCByZXBsYWNlciwgYW5kIGFuIG9wdGlvbmFsXG4vLyBzcGFjZSBwYXJhbWV0ZXIsIGFuZCByZXR1cm5zIGEgSlNPTiB0ZXh0LiBUaGUgcmVwbGFjZXIgY2FuIGJlIGEgZnVuY3Rpb25cbi8vIHRoYXQgY2FuIHJlcGxhY2UgdmFsdWVzLCBvciBhbiBhcnJheSBvZiBzdHJpbmdzIHRoYXQgd2lsbCBzZWxlY3QgdGhlIGtleXMuXG4vLyBBIGRlZmF1bHQgcmVwbGFjZXIgbWV0aG9kIGNhbiBiZSBwcm92aWRlZC4gVXNlIG9mIHRoZSBzcGFjZSBwYXJhbWV0ZXIgY2FuXG4vLyBwcm9kdWNlIHRleHQgdGhhdCBpcyBtb3JlIGVhc2lseSByZWFkYWJsZS5cblxuICAgICAgICAgICAgdmFyIGk7XG4gICAgICAgICAgICBnYXAgPSAnJztcbiAgICAgICAgICAgIGluZGVudCA9ICcnO1xuXG4vLyBJZiB0aGUgc3BhY2UgcGFyYW1ldGVyIGlzIGEgbnVtYmVyLCBtYWtlIGFuIGluZGVudCBzdHJpbmcgY29udGFpbmluZyB0aGF0XG4vLyBtYW55IHNwYWNlcy5cblxuICAgICAgICAgICAgaWYgKHR5cGVvZiBzcGFjZSA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgc3BhY2U7IGkgKz0gMSkge1xuICAgICAgICAgICAgICAgICAgICBpbmRlbnQgKz0gJyAnO1xuICAgICAgICAgICAgICAgIH1cblxuLy8gSWYgdGhlIHNwYWNlIHBhcmFtZXRlciBpcyBhIHN0cmluZywgaXQgd2lsbCBiZSB1c2VkIGFzIHRoZSBpbmRlbnQgc3RyaW5nLlxuXG4gICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBzcGFjZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICBpbmRlbnQgPSBzcGFjZTtcbiAgICAgICAgICAgIH1cblxuLy8gSWYgdGhlcmUgaXMgYSByZXBsYWNlciwgaXQgbXVzdCBiZSBhIGZ1bmN0aW9uIG9yIGFuIGFycmF5LlxuLy8gT3RoZXJ3aXNlLCB0aHJvdyBhbiBlcnJvci5cblxuICAgICAgICAgICAgcmVwID0gcmVwbGFjZXI7XG4gICAgICAgICAgICBpZiAocmVwbGFjZXIgJiYgdHlwZW9mIHJlcGxhY2VyICE9PSAnZnVuY3Rpb24nICYmXG4gICAgICAgICAgICAgICAgICAgICh0eXBlb2YgcmVwbGFjZXIgIT09ICdvYmplY3QnIHx8XG4gICAgICAgICAgICAgICAgICAgIHR5cGVvZiByZXBsYWNlci5sZW5ndGggIT09ICdudW1iZXInKSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignSlNPTi5zdHJpbmdpZnknKTtcbiAgICAgICAgICAgIH1cblxuLy8gTWFrZSBhIGZha2Ugcm9vdCBvYmplY3QgY29udGFpbmluZyBvdXIgdmFsdWUgdW5kZXIgdGhlIGtleSBvZiAnJy5cbi8vIFJldHVybiB0aGUgcmVzdWx0IG9mIHN0cmluZ2lmeWluZyB0aGUgdmFsdWUuXG5cbiAgICAgICAgICAgIHJldHVybiBzdHIoJycsIHsnJzogdmFsdWV9KTtcbiAgICAgICAgfTtcbiAgICB9XG59KCkpO1xuIiwiKGZ1bmN0aW9uIChuYW1lLCBjb250ZXh0LCBkZWZpbml0aW9uKSB7XG4gIGlmICh0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJyAmJiBtb2R1bGUuZXhwb3J0cykgbW9kdWxlLmV4cG9ydHMgPSBkZWZpbml0aW9uKCk7XG4gIGVsc2UgaWYgKHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCkgZGVmaW5lKGRlZmluaXRpb24pO1xuICBlbHNlIGNvbnRleHRbbmFtZV0gPSBkZWZpbml0aW9uKCk7XG59KSgndXJsam9pbicsIHRoaXMsIGZ1bmN0aW9uICgpIHtcblxuICBmdW5jdGlvbiBub3JtYWxpemUgKHN0ckFycmF5KSB7XG4gICAgdmFyIHJlc3VsdEFycmF5ID0gW107XG4gICAgaWYgKHN0ckFycmF5Lmxlbmd0aCA9PT0gMCkgeyByZXR1cm4gJyc7IH1cblxuICAgIGlmICh0eXBlb2Ygc3RyQXJyYXlbMF0gIT09ICdzdHJpbmcnKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdVcmwgbXVzdCBiZSBhIHN0cmluZy4gUmVjZWl2ZWQgJyArIHN0ckFycmF5WzBdKTtcbiAgICB9XG5cbiAgICAvLyBJZiB0aGUgZmlyc3QgcGFydCBpcyBhIHBsYWluIHByb3RvY29sLCB3ZSBjb21iaW5lIGl0IHdpdGggdGhlIG5leHQgcGFydC5cbiAgICBpZiAoc3RyQXJyYXlbMF0ubWF0Y2goL15bXi86XSs6XFwvKiQvKSAmJiBzdHJBcnJheS5sZW5ndGggPiAxKSB7XG4gICAgICB2YXIgZmlyc3QgPSBzdHJBcnJheS5zaGlmdCgpO1xuICAgICAgc3RyQXJyYXlbMF0gPSBmaXJzdCArIHN0ckFycmF5WzBdO1xuICAgIH1cblxuICAgIC8vIFRoZXJlIG11c3QgYmUgdHdvIG9yIHRocmVlIHNsYXNoZXMgaW4gdGhlIGZpbGUgcHJvdG9jb2wsIHR3byBzbGFzaGVzIGluIGFueXRoaW5nIGVsc2UuXG4gICAgaWYgKHN0ckFycmF5WzBdLm1hdGNoKC9eZmlsZTpcXC9cXC9cXC8vKSkge1xuICAgICAgc3RyQXJyYXlbMF0gPSBzdHJBcnJheVswXS5yZXBsYWNlKC9eKFteLzpdKyk6XFwvKi8sICckMTovLy8nKTtcbiAgICB9IGVsc2Uge1xuICAgICAgc3RyQXJyYXlbMF0gPSBzdHJBcnJheVswXS5yZXBsYWNlKC9eKFteLzpdKyk6XFwvKi8sICckMTovLycpO1xuICAgIH1cblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc3RyQXJyYXkubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBjb21wb25lbnQgPSBzdHJBcnJheVtpXTtcblxuICAgICAgaWYgKHR5cGVvZiBjb21wb25lbnQgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1VybCBtdXN0IGJlIGEgc3RyaW5nLiBSZWNlaXZlZCAnICsgY29tcG9uZW50KTtcbiAgICAgIH1cblxuICAgICAgaWYgKGNvbXBvbmVudCA9PT0gJycpIHsgY29udGludWU7IH1cblxuICAgICAgaWYgKGkgPiAwKSB7XG4gICAgICAgIC8vIFJlbW92aW5nIHRoZSBzdGFydGluZyBzbGFzaGVzIGZvciBlYWNoIGNvbXBvbmVudCBidXQgdGhlIGZpcnN0LlxuICAgICAgICBjb21wb25lbnQgPSBjb21wb25lbnQucmVwbGFjZSgvXltcXC9dKy8sICcnKTtcbiAgICAgIH1cbiAgICAgIGlmIChpIDwgc3RyQXJyYXkubGVuZ3RoIC0gMSkge1xuICAgICAgICAvLyBSZW1vdmluZyB0aGUgZW5kaW5nIHNsYXNoZXMgZm9yIGVhY2ggY29tcG9uZW50IGJ1dCB0aGUgbGFzdC5cbiAgICAgICAgY29tcG9uZW50ID0gY29tcG9uZW50LnJlcGxhY2UoL1tcXC9dKyQvLCAnJyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBGb3IgdGhlIGxhc3QgY29tcG9uZW50IHdlIHdpbGwgY29tYmluZSBtdWx0aXBsZSBzbGFzaGVzIHRvIGEgc2luZ2xlIG9uZS5cbiAgICAgICAgY29tcG9uZW50ID0gY29tcG9uZW50LnJlcGxhY2UoL1tcXC9dKyQvLCAnLycpO1xuICAgICAgfVxuXG4gICAgICByZXN1bHRBcnJheS5wdXNoKGNvbXBvbmVudCk7XG5cbiAgICB9XG5cbiAgICB2YXIgc3RyID0gcmVzdWx0QXJyYXkuam9pbignLycpO1xuICAgIC8vIEVhY2ggaW5wdXQgY29tcG9uZW50IGlzIG5vdyBzZXBhcmF0ZWQgYnkgYSBzaW5nbGUgc2xhc2ggZXhjZXB0IHRoZSBwb3NzaWJsZSBmaXJzdCBwbGFpbiBwcm90b2NvbCBwYXJ0LlxuXG4gICAgLy8gcmVtb3ZlIHRyYWlsaW5nIHNsYXNoIGJlZm9yZSBwYXJhbWV0ZXJzIG9yIGhhc2hcbiAgICBzdHIgPSBzdHIucmVwbGFjZSgvXFwvKFxcP3wmfCNbXiFdKS9nLCAnJDEnKTtcblxuICAgIC8vIHJlcGxhY2UgPyBpbiBwYXJhbWV0ZXJzIHdpdGggJlxuICAgIHZhciBwYXJ0cyA9IHN0ci5zcGxpdCgnPycpO1xuICAgIHN0ciA9IHBhcnRzLnNoaWZ0KCkgKyAocGFydHMubGVuZ3RoID4gMCA/ICc/JzogJycpICsgcGFydHMuam9pbignJicpO1xuXG4gICAgcmV0dXJuIHN0cjtcbiAgfVxuXG4gIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGlucHV0O1xuXG4gICAgaWYgKHR5cGVvZiBhcmd1bWVudHNbMF0gPT09ICdvYmplY3QnKSB7XG4gICAgICBpbnB1dCA9IGFyZ3VtZW50c1swXTtcbiAgICB9IGVsc2Uge1xuICAgICAgaW5wdXQgPSBbXS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5vcm1hbGl6ZShpbnB1dCk7XG4gIH07XG5cbn0pO1xuIiwiLy8gQXhpb3MgdjEuNy40IENvcHlyaWdodCAoYykgMjAyNCBNYXR0IFphYnJpc2tpZSBhbmQgY29udHJpYnV0b3JzXG4ndXNlIHN0cmljdCc7XG5cbmZ1bmN0aW9uIGJpbmQoZm4sIHRoaXNBcmcpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIHdyYXAoKSB7XG4gICAgcmV0dXJuIGZuLmFwcGx5KHRoaXNBcmcsIGFyZ3VtZW50cyk7XG4gIH07XG59XG5cbi8vIHV0aWxzIGlzIGEgbGlicmFyeSBvZiBnZW5lcmljIGhlbHBlciBmdW5jdGlvbnMgbm9uLXNwZWNpZmljIHRvIGF4aW9zXG5cbmNvbnN0IHt0b1N0cmluZ30gPSBPYmplY3QucHJvdG90eXBlO1xuY29uc3Qge2dldFByb3RvdHlwZU9mfSA9IE9iamVjdDtcblxuY29uc3Qga2luZE9mID0gKGNhY2hlID0+IHRoaW5nID0+IHtcbiAgICBjb25zdCBzdHIgPSB0b1N0cmluZy5jYWxsKHRoaW5nKTtcbiAgICByZXR1cm4gY2FjaGVbc3RyXSB8fCAoY2FjaGVbc3RyXSA9IHN0ci5zbGljZSg4LCAtMSkudG9Mb3dlckNhc2UoKSk7XG59KShPYmplY3QuY3JlYXRlKG51bGwpKTtcblxuY29uc3Qga2luZE9mVGVzdCA9ICh0eXBlKSA9PiB7XG4gIHR5cGUgPSB0eXBlLnRvTG93ZXJDYXNlKCk7XG4gIHJldHVybiAodGhpbmcpID0+IGtpbmRPZih0aGluZykgPT09IHR5cGVcbn07XG5cbmNvbnN0IHR5cGVPZlRlc3QgPSB0eXBlID0+IHRoaW5nID0+IHR5cGVvZiB0aGluZyA9PT0gdHlwZTtcblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhbiBBcnJheVxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhbiBBcnJheSwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmNvbnN0IHtpc0FycmF5fSA9IEFycmF5O1xuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIHVuZGVmaW5lZFxuICpcbiAqIEBwYXJhbSB7Kn0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdGhlIHZhbHVlIGlzIHVuZGVmaW5lZCwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmNvbnN0IGlzVW5kZWZpbmVkID0gdHlwZU9mVGVzdCgndW5kZWZpbmVkJyk7XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBCdWZmZXJcbiAqXG4gKiBAcGFyYW0geyp9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgQnVmZmVyLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNCdWZmZXIodmFsKSB7XG4gIHJldHVybiB2YWwgIT09IG51bGwgJiYgIWlzVW5kZWZpbmVkKHZhbCkgJiYgdmFsLmNvbnN0cnVjdG9yICE9PSBudWxsICYmICFpc1VuZGVmaW5lZCh2YWwuY29uc3RydWN0b3IpXG4gICAgJiYgaXNGdW5jdGlvbih2YWwuY29uc3RydWN0b3IuaXNCdWZmZXIpICYmIHZhbC5jb25zdHJ1Y3Rvci5pc0J1ZmZlcih2YWwpO1xufVxuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGFuIEFycmF5QnVmZmVyXG4gKlxuICogQHBhcmFtIHsqfSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhbiBBcnJheUJ1ZmZlciwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmNvbnN0IGlzQXJyYXlCdWZmZXIgPSBraW5kT2ZUZXN0KCdBcnJheUJ1ZmZlcicpO1xuXG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSB2aWV3IG9uIGFuIEFycmF5QnVmZmVyXG4gKlxuICogQHBhcmFtIHsqfSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIHZpZXcgb24gYW4gQXJyYXlCdWZmZXIsIG90aGVyd2lzZSBmYWxzZVxuICovXG5mdW5jdGlvbiBpc0FycmF5QnVmZmVyVmlldyh2YWwpIHtcbiAgbGV0IHJlc3VsdDtcbiAgaWYgKCh0eXBlb2YgQXJyYXlCdWZmZXIgIT09ICd1bmRlZmluZWQnKSAmJiAoQXJyYXlCdWZmZXIuaXNWaWV3KSkge1xuICAgIHJlc3VsdCA9IEFycmF5QnVmZmVyLmlzVmlldyh2YWwpO1xuICB9IGVsc2Uge1xuICAgIHJlc3VsdCA9ICh2YWwpICYmICh2YWwuYnVmZmVyKSAmJiAoaXNBcnJheUJ1ZmZlcih2YWwuYnVmZmVyKSk7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIFN0cmluZ1xuICpcbiAqIEBwYXJhbSB7Kn0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBTdHJpbmcsIG90aGVyd2lzZSBmYWxzZVxuICovXG5jb25zdCBpc1N0cmluZyA9IHR5cGVPZlRlc3QoJ3N0cmluZycpO1xuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgRnVuY3Rpb25cbiAqXG4gKiBAcGFyYW0geyp9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBGdW5jdGlvbiwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmNvbnN0IGlzRnVuY3Rpb24gPSB0eXBlT2ZUZXN0KCdmdW5jdGlvbicpO1xuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgTnVtYmVyXG4gKlxuICogQHBhcmFtIHsqfSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIE51bWJlciwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmNvbnN0IGlzTnVtYmVyID0gdHlwZU9mVGVzdCgnbnVtYmVyJyk7XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYW4gT2JqZWN0XG4gKlxuICogQHBhcmFtIHsqfSB0aGluZyBUaGUgdmFsdWUgdG8gdGVzdFxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGFuIE9iamVjdCwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmNvbnN0IGlzT2JqZWN0ID0gKHRoaW5nKSA9PiB0aGluZyAhPT0gbnVsbCAmJiB0eXBlb2YgdGhpbmcgPT09ICdvYmplY3QnO1xuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgQm9vbGVhblxuICpcbiAqIEBwYXJhbSB7Kn0gdGhpbmcgVGhlIHZhbHVlIHRvIHRlc3RcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgQm9vbGVhbiwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmNvbnN0IGlzQm9vbGVhbiA9IHRoaW5nID0+IHRoaW5nID09PSB0cnVlIHx8IHRoaW5nID09PSBmYWxzZTtcblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIHBsYWluIE9iamVjdFxuICpcbiAqIEBwYXJhbSB7Kn0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBwbGFpbiBPYmplY3QsIG90aGVyd2lzZSBmYWxzZVxuICovXG5jb25zdCBpc1BsYWluT2JqZWN0ID0gKHZhbCkgPT4ge1xuICBpZiAoa2luZE9mKHZhbCkgIT09ICdvYmplY3QnKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgY29uc3QgcHJvdG90eXBlID0gZ2V0UHJvdG90eXBlT2YodmFsKTtcbiAgcmV0dXJuIChwcm90b3R5cGUgPT09IG51bGwgfHwgcHJvdG90eXBlID09PSBPYmplY3QucHJvdG90eXBlIHx8IE9iamVjdC5nZXRQcm90b3R5cGVPZihwcm90b3R5cGUpID09PSBudWxsKSAmJiAhKFN5bWJvbC50b1N0cmluZ1RhZyBpbiB2YWwpICYmICEoU3ltYm9sLml0ZXJhdG9yIGluIHZhbCk7XG59O1xuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgRGF0ZVxuICpcbiAqIEBwYXJhbSB7Kn0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBEYXRlLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuY29uc3QgaXNEYXRlID0ga2luZE9mVGVzdCgnRGF0ZScpO1xuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgRmlsZVxuICpcbiAqIEBwYXJhbSB7Kn0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBGaWxlLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuY29uc3QgaXNGaWxlID0ga2luZE9mVGVzdCgnRmlsZScpO1xuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgQmxvYlxuICpcbiAqIEBwYXJhbSB7Kn0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBCbG9iLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuY29uc3QgaXNCbG9iID0ga2luZE9mVGVzdCgnQmxvYicpO1xuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgRmlsZUxpc3RcbiAqXG4gKiBAcGFyYW0geyp9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgRmlsZSwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmNvbnN0IGlzRmlsZUxpc3QgPSBraW5kT2ZUZXN0KCdGaWxlTGlzdCcpO1xuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgU3RyZWFtXG4gKlxuICogQHBhcmFtIHsqfSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIFN0cmVhbSwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmNvbnN0IGlzU3RyZWFtID0gKHZhbCkgPT4gaXNPYmplY3QodmFsKSAmJiBpc0Z1bmN0aW9uKHZhbC5waXBlKTtcblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIEZvcm1EYXRhXG4gKlxuICogQHBhcmFtIHsqfSB0aGluZyBUaGUgdmFsdWUgdG8gdGVzdFxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGFuIEZvcm1EYXRhLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuY29uc3QgaXNGb3JtRGF0YSA9ICh0aGluZykgPT4ge1xuICBsZXQga2luZDtcbiAgcmV0dXJuIHRoaW5nICYmIChcbiAgICAodHlwZW9mIEZvcm1EYXRhID09PSAnZnVuY3Rpb24nICYmIHRoaW5nIGluc3RhbmNlb2YgRm9ybURhdGEpIHx8IChcbiAgICAgIGlzRnVuY3Rpb24odGhpbmcuYXBwZW5kKSAmJiAoXG4gICAgICAgIChraW5kID0ga2luZE9mKHRoaW5nKSkgPT09ICdmb3JtZGF0YScgfHxcbiAgICAgICAgLy8gZGV0ZWN0IGZvcm0tZGF0YSBpbnN0YW5jZVxuICAgICAgICAoa2luZCA9PT0gJ29iamVjdCcgJiYgaXNGdW5jdGlvbih0aGluZy50b1N0cmluZykgJiYgdGhpbmcudG9TdHJpbmcoKSA9PT0gJ1tvYmplY3QgRm9ybURhdGFdJylcbiAgICAgIClcbiAgICApXG4gIClcbn07XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBVUkxTZWFyY2hQYXJhbXMgb2JqZWN0XG4gKlxuICogQHBhcmFtIHsqfSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIFVSTFNlYXJjaFBhcmFtcyBvYmplY3QsIG90aGVyd2lzZSBmYWxzZVxuICovXG5jb25zdCBpc1VSTFNlYXJjaFBhcmFtcyA9IGtpbmRPZlRlc3QoJ1VSTFNlYXJjaFBhcmFtcycpO1xuXG5jb25zdCBbaXNSZWFkYWJsZVN0cmVhbSwgaXNSZXF1ZXN0LCBpc1Jlc3BvbnNlLCBpc0hlYWRlcnNdID0gWydSZWFkYWJsZVN0cmVhbScsICdSZXF1ZXN0JywgJ1Jlc3BvbnNlJywgJ0hlYWRlcnMnXS5tYXAoa2luZE9mVGVzdCk7XG5cbi8qKlxuICogVHJpbSBleGNlc3Mgd2hpdGVzcGFjZSBvZmYgdGhlIGJlZ2lubmluZyBhbmQgZW5kIG9mIGEgc3RyaW5nXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IHN0ciBUaGUgU3RyaW5nIHRvIHRyaW1cbiAqXG4gKiBAcmV0dXJucyB7U3RyaW5nfSBUaGUgU3RyaW5nIGZyZWVkIG9mIGV4Y2VzcyB3aGl0ZXNwYWNlXG4gKi9cbmNvbnN0IHRyaW0gPSAoc3RyKSA9PiBzdHIudHJpbSA/XG4gIHN0ci50cmltKCkgOiBzdHIucmVwbGFjZSgvXltcXHNcXHVGRUZGXFx4QTBdK3xbXFxzXFx1RkVGRlxceEEwXSskL2csICcnKTtcblxuLyoqXG4gKiBJdGVyYXRlIG92ZXIgYW4gQXJyYXkgb3IgYW4gT2JqZWN0IGludm9raW5nIGEgZnVuY3Rpb24gZm9yIGVhY2ggaXRlbS5cbiAqXG4gKiBJZiBgb2JqYCBpcyBhbiBBcnJheSBjYWxsYmFjayB3aWxsIGJlIGNhbGxlZCBwYXNzaW5nXG4gKiB0aGUgdmFsdWUsIGluZGV4LCBhbmQgY29tcGxldGUgYXJyYXkgZm9yIGVhY2ggaXRlbS5cbiAqXG4gKiBJZiAnb2JqJyBpcyBhbiBPYmplY3QgY2FsbGJhY2sgd2lsbCBiZSBjYWxsZWQgcGFzc2luZ1xuICogdGhlIHZhbHVlLCBrZXksIGFuZCBjb21wbGV0ZSBvYmplY3QgZm9yIGVhY2ggcHJvcGVydHkuXG4gKlxuICogQHBhcmFtIHtPYmplY3R8QXJyYXl9IG9iaiBUaGUgb2JqZWN0IHRvIGl0ZXJhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuIFRoZSBjYWxsYmFjayB0byBpbnZva2UgZm9yIGVhY2ggaXRlbVxuICpcbiAqIEBwYXJhbSB7Qm9vbGVhbn0gW2FsbE93bktleXMgPSBmYWxzZV1cbiAqIEByZXR1cm5zIHthbnl9XG4gKi9cbmZ1bmN0aW9uIGZvckVhY2gob2JqLCBmbiwge2FsbE93bktleXMgPSBmYWxzZX0gPSB7fSkge1xuICAvLyBEb24ndCBib3RoZXIgaWYgbm8gdmFsdWUgcHJvdmlkZWRcbiAgaWYgKG9iaiA9PT0gbnVsbCB8fCB0eXBlb2Ygb2JqID09PSAndW5kZWZpbmVkJykge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGxldCBpO1xuICBsZXQgbDtcblxuICAvLyBGb3JjZSBhbiBhcnJheSBpZiBub3QgYWxyZWFkeSBzb21ldGhpbmcgaXRlcmFibGVcbiAgaWYgKHR5cGVvZiBvYmogIT09ICdvYmplY3QnKSB7XG4gICAgLyplc2xpbnQgbm8tcGFyYW0tcmVhc3NpZ246MCovXG4gICAgb2JqID0gW29ial07XG4gIH1cblxuICBpZiAoaXNBcnJheShvYmopKSB7XG4gICAgLy8gSXRlcmF0ZSBvdmVyIGFycmF5IHZhbHVlc1xuICAgIGZvciAoaSA9IDAsIGwgPSBvYmoubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICBmbi5jYWxsKG51bGwsIG9ialtpXSwgaSwgb2JqKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgLy8gSXRlcmF0ZSBvdmVyIG9iamVjdCBrZXlzXG4gICAgY29uc3Qga2V5cyA9IGFsbE93bktleXMgPyBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhvYmopIDogT2JqZWN0LmtleXMob2JqKTtcbiAgICBjb25zdCBsZW4gPSBrZXlzLmxlbmd0aDtcbiAgICBsZXQga2V5O1xuXG4gICAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICBrZXkgPSBrZXlzW2ldO1xuICAgICAgZm4uY2FsbChudWxsLCBvYmpba2V5XSwga2V5LCBvYmopO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBmaW5kS2V5KG9iaiwga2V5KSB7XG4gIGtleSA9IGtleS50b0xvd2VyQ2FzZSgpO1xuICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMob2JqKTtcbiAgbGV0IGkgPSBrZXlzLmxlbmd0aDtcbiAgbGV0IF9rZXk7XG4gIHdoaWxlIChpLS0gPiAwKSB7XG4gICAgX2tleSA9IGtleXNbaV07XG4gICAgaWYgKGtleSA9PT0gX2tleS50b0xvd2VyQ2FzZSgpKSB7XG4gICAgICByZXR1cm4gX2tleTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG51bGw7XG59XG5cbmNvbnN0IF9nbG9iYWwgPSAoKCkgPT4ge1xuICAvKmVzbGludCBuby11bmRlZjowKi9cbiAgaWYgKHR5cGVvZiBnbG9iYWxUaGlzICE9PSBcInVuZGVmaW5lZFwiKSByZXR1cm4gZ2xvYmFsVGhpcztcbiAgcmV0dXJuIHR5cGVvZiBzZWxmICE9PSBcInVuZGVmaW5lZFwiID8gc2VsZiA6ICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyA/IHdpbmRvdyA6IGdsb2JhbClcbn0pKCk7XG5cbmNvbnN0IGlzQ29udGV4dERlZmluZWQgPSAoY29udGV4dCkgPT4gIWlzVW5kZWZpbmVkKGNvbnRleHQpICYmIGNvbnRleHQgIT09IF9nbG9iYWw7XG5cbi8qKlxuICogQWNjZXB0cyB2YXJhcmdzIGV4cGVjdGluZyBlYWNoIGFyZ3VtZW50IHRvIGJlIGFuIG9iamVjdCwgdGhlblxuICogaW1tdXRhYmx5IG1lcmdlcyB0aGUgcHJvcGVydGllcyBvZiBlYWNoIG9iamVjdCBhbmQgcmV0dXJucyByZXN1bHQuXG4gKlxuICogV2hlbiBtdWx0aXBsZSBvYmplY3RzIGNvbnRhaW4gdGhlIHNhbWUga2V5IHRoZSBsYXRlciBvYmplY3QgaW5cbiAqIHRoZSBhcmd1bWVudHMgbGlzdCB3aWxsIHRha2UgcHJlY2VkZW5jZS5cbiAqXG4gKiBFeGFtcGxlOlxuICpcbiAqIGBgYGpzXG4gKiB2YXIgcmVzdWx0ID0gbWVyZ2Uoe2ZvbzogMTIzfSwge2ZvbzogNDU2fSk7XG4gKiBjb25zb2xlLmxvZyhyZXN1bHQuZm9vKTsgLy8gb3V0cHV0cyA0NTZcbiAqIGBgYFxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmoxIE9iamVjdCB0byBtZXJnZVxuICpcbiAqIEByZXR1cm5zIHtPYmplY3R9IFJlc3VsdCBvZiBhbGwgbWVyZ2UgcHJvcGVydGllc1xuICovXG5mdW5jdGlvbiBtZXJnZSgvKiBvYmoxLCBvYmoyLCBvYmozLCAuLi4gKi8pIHtcbiAgY29uc3Qge2Nhc2VsZXNzfSA9IGlzQ29udGV4dERlZmluZWQodGhpcykgJiYgdGhpcyB8fCB7fTtcbiAgY29uc3QgcmVzdWx0ID0ge307XG4gIGNvbnN0IGFzc2lnblZhbHVlID0gKHZhbCwga2V5KSA9PiB7XG4gICAgY29uc3QgdGFyZ2V0S2V5ID0gY2FzZWxlc3MgJiYgZmluZEtleShyZXN1bHQsIGtleSkgfHwga2V5O1xuICAgIGlmIChpc1BsYWluT2JqZWN0KHJlc3VsdFt0YXJnZXRLZXldKSAmJiBpc1BsYWluT2JqZWN0KHZhbCkpIHtcbiAgICAgIHJlc3VsdFt0YXJnZXRLZXldID0gbWVyZ2UocmVzdWx0W3RhcmdldEtleV0sIHZhbCk7XG4gICAgfSBlbHNlIGlmIChpc1BsYWluT2JqZWN0KHZhbCkpIHtcbiAgICAgIHJlc3VsdFt0YXJnZXRLZXldID0gbWVyZ2Uoe30sIHZhbCk7XG4gICAgfSBlbHNlIGlmIChpc0FycmF5KHZhbCkpIHtcbiAgICAgIHJlc3VsdFt0YXJnZXRLZXldID0gdmFsLnNsaWNlKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlc3VsdFt0YXJnZXRLZXldID0gdmFsO1xuICAgIH1cbiAgfTtcblxuICBmb3IgKGxldCBpID0gMCwgbCA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICBhcmd1bWVudHNbaV0gJiYgZm9yRWFjaChhcmd1bWVudHNbaV0sIGFzc2lnblZhbHVlKTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG4vKipcbiAqIEV4dGVuZHMgb2JqZWN0IGEgYnkgbXV0YWJseSBhZGRpbmcgdG8gaXQgdGhlIHByb3BlcnRpZXMgb2Ygb2JqZWN0IGIuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGEgVGhlIG9iamVjdCB0byBiZSBleHRlbmRlZFxuICogQHBhcmFtIHtPYmplY3R9IGIgVGhlIG9iamVjdCB0byBjb3B5IHByb3BlcnRpZXMgZnJvbVxuICogQHBhcmFtIHtPYmplY3R9IHRoaXNBcmcgVGhlIG9iamVjdCB0byBiaW5kIGZ1bmN0aW9uIHRvXG4gKlxuICogQHBhcmFtIHtCb29sZWFufSBbYWxsT3duS2V5c11cbiAqIEByZXR1cm5zIHtPYmplY3R9IFRoZSByZXN1bHRpbmcgdmFsdWUgb2Ygb2JqZWN0IGFcbiAqL1xuY29uc3QgZXh0ZW5kID0gKGEsIGIsIHRoaXNBcmcsIHthbGxPd25LZXlzfT0ge30pID0+IHtcbiAgZm9yRWFjaChiLCAodmFsLCBrZXkpID0+IHtcbiAgICBpZiAodGhpc0FyZyAmJiBpc0Z1bmN0aW9uKHZhbCkpIHtcbiAgICAgIGFba2V5XSA9IGJpbmQodmFsLCB0aGlzQXJnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgYVtrZXldID0gdmFsO1xuICAgIH1cbiAgfSwge2FsbE93bktleXN9KTtcbiAgcmV0dXJuIGE7XG59O1xuXG4vKipcbiAqIFJlbW92ZSBieXRlIG9yZGVyIG1hcmtlci4gVGhpcyBjYXRjaGVzIEVGIEJCIEJGICh0aGUgVVRGLTggQk9NKVxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBjb250ZW50IHdpdGggQk9NXG4gKlxuICogQHJldHVybnMge3N0cmluZ30gY29udGVudCB2YWx1ZSB3aXRob3V0IEJPTVxuICovXG5jb25zdCBzdHJpcEJPTSA9IChjb250ZW50KSA9PiB7XG4gIGlmIChjb250ZW50LmNoYXJDb2RlQXQoMCkgPT09IDB4RkVGRikge1xuICAgIGNvbnRlbnQgPSBjb250ZW50LnNsaWNlKDEpO1xuICB9XG4gIHJldHVybiBjb250ZW50O1xufTtcblxuLyoqXG4gKiBJbmhlcml0IHRoZSBwcm90b3R5cGUgbWV0aG9kcyBmcm9tIG9uZSBjb25zdHJ1Y3RvciBpbnRvIGFub3RoZXJcbiAqIEBwYXJhbSB7ZnVuY3Rpb259IGNvbnN0cnVjdG9yXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBzdXBlckNvbnN0cnVjdG9yXG4gKiBAcGFyYW0ge29iamVjdH0gW3Byb3BzXVxuICogQHBhcmFtIHtvYmplY3R9IFtkZXNjcmlwdG9yc11cbiAqXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuY29uc3QgaW5oZXJpdHMgPSAoY29uc3RydWN0b3IsIHN1cGVyQ29uc3RydWN0b3IsIHByb3BzLCBkZXNjcmlwdG9ycykgPT4ge1xuICBjb25zdHJ1Y3Rvci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ29uc3RydWN0b3IucHJvdG90eXBlLCBkZXNjcmlwdG9ycyk7XG4gIGNvbnN0cnVjdG9yLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IGNvbnN0cnVjdG9yO1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoY29uc3RydWN0b3IsICdzdXBlcicsIHtcbiAgICB2YWx1ZTogc3VwZXJDb25zdHJ1Y3Rvci5wcm90b3R5cGVcbiAgfSk7XG4gIHByb3BzICYmIE9iamVjdC5hc3NpZ24oY29uc3RydWN0b3IucHJvdG90eXBlLCBwcm9wcyk7XG59O1xuXG4vKipcbiAqIFJlc29sdmUgb2JqZWN0IHdpdGggZGVlcCBwcm90b3R5cGUgY2hhaW4gdG8gYSBmbGF0IG9iamVjdFxuICogQHBhcmFtIHtPYmplY3R9IHNvdXJjZU9iaiBzb3VyY2Ugb2JqZWN0XG4gKiBAcGFyYW0ge09iamVjdH0gW2Rlc3RPYmpdXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufEJvb2xlYW59IFtmaWx0ZXJdXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbcHJvcEZpbHRlcl1cbiAqXG4gKiBAcmV0dXJucyB7T2JqZWN0fVxuICovXG5jb25zdCB0b0ZsYXRPYmplY3QgPSAoc291cmNlT2JqLCBkZXN0T2JqLCBmaWx0ZXIsIHByb3BGaWx0ZXIpID0+IHtcbiAgbGV0IHByb3BzO1xuICBsZXQgaTtcbiAgbGV0IHByb3A7XG4gIGNvbnN0IG1lcmdlZCA9IHt9O1xuXG4gIGRlc3RPYmogPSBkZXN0T2JqIHx8IHt9O1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tZXEtbnVsbCxlcWVxZXFcbiAgaWYgKHNvdXJjZU9iaiA9PSBudWxsKSByZXR1cm4gZGVzdE9iajtcblxuICBkbyB7XG4gICAgcHJvcHMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhzb3VyY2VPYmopO1xuICAgIGkgPSBwcm9wcy5sZW5ndGg7XG4gICAgd2hpbGUgKGktLSA+IDApIHtcbiAgICAgIHByb3AgPSBwcm9wc1tpXTtcbiAgICAgIGlmICgoIXByb3BGaWx0ZXIgfHwgcHJvcEZpbHRlcihwcm9wLCBzb3VyY2VPYmosIGRlc3RPYmopKSAmJiAhbWVyZ2VkW3Byb3BdKSB7XG4gICAgICAgIGRlc3RPYmpbcHJvcF0gPSBzb3VyY2VPYmpbcHJvcF07XG4gICAgICAgIG1lcmdlZFtwcm9wXSA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuICAgIHNvdXJjZU9iaiA9IGZpbHRlciAhPT0gZmFsc2UgJiYgZ2V0UHJvdG90eXBlT2Yoc291cmNlT2JqKTtcbiAgfSB3aGlsZSAoc291cmNlT2JqICYmICghZmlsdGVyIHx8IGZpbHRlcihzb3VyY2VPYmosIGRlc3RPYmopKSAmJiBzb3VyY2VPYmogIT09IE9iamVjdC5wcm90b3R5cGUpO1xuXG4gIHJldHVybiBkZXN0T2JqO1xufTtcblxuLyoqXG4gKiBEZXRlcm1pbmVzIHdoZXRoZXIgYSBzdHJpbmcgZW5kcyB3aXRoIHRoZSBjaGFyYWN0ZXJzIG9mIGEgc3BlY2lmaWVkIHN0cmluZ1xuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBzdHJcbiAqIEBwYXJhbSB7U3RyaW5nfSBzZWFyY2hTdHJpbmdcbiAqIEBwYXJhbSB7TnVtYmVyfSBbcG9zaXRpb249IDBdXG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKi9cbmNvbnN0IGVuZHNXaXRoID0gKHN0ciwgc2VhcmNoU3RyaW5nLCBwb3NpdGlvbikgPT4ge1xuICBzdHIgPSBTdHJpbmcoc3RyKTtcbiAgaWYgKHBvc2l0aW9uID09PSB1bmRlZmluZWQgfHwgcG9zaXRpb24gPiBzdHIubGVuZ3RoKSB7XG4gICAgcG9zaXRpb24gPSBzdHIubGVuZ3RoO1xuICB9XG4gIHBvc2l0aW9uIC09IHNlYXJjaFN0cmluZy5sZW5ndGg7XG4gIGNvbnN0IGxhc3RJbmRleCA9IHN0ci5pbmRleE9mKHNlYXJjaFN0cmluZywgcG9zaXRpb24pO1xuICByZXR1cm4gbGFzdEluZGV4ICE9PSAtMSAmJiBsYXN0SW5kZXggPT09IHBvc2l0aW9uO1xufTtcblxuXG4vKipcbiAqIFJldHVybnMgbmV3IGFycmF5IGZyb20gYXJyYXkgbGlrZSBvYmplY3Qgb3IgbnVsbCBpZiBmYWlsZWRcbiAqXG4gKiBAcGFyYW0geyp9IFt0aGluZ11cbiAqXG4gKiBAcmV0dXJucyB7P0FycmF5fVxuICovXG5jb25zdCB0b0FycmF5ID0gKHRoaW5nKSA9PiB7XG4gIGlmICghdGhpbmcpIHJldHVybiBudWxsO1xuICBpZiAoaXNBcnJheSh0aGluZykpIHJldHVybiB0aGluZztcbiAgbGV0IGkgPSB0aGluZy5sZW5ndGg7XG4gIGlmICghaXNOdW1iZXIoaSkpIHJldHVybiBudWxsO1xuICBjb25zdCBhcnIgPSBuZXcgQXJyYXkoaSk7XG4gIHdoaWxlIChpLS0gPiAwKSB7XG4gICAgYXJyW2ldID0gdGhpbmdbaV07XG4gIH1cbiAgcmV0dXJuIGFycjtcbn07XG5cbi8qKlxuICogQ2hlY2tpbmcgaWYgdGhlIFVpbnQ4QXJyYXkgZXhpc3RzIGFuZCBpZiBpdCBkb2VzLCBpdCByZXR1cm5zIGEgZnVuY3Rpb24gdGhhdCBjaGVja3MgaWYgdGhlXG4gKiB0aGluZyBwYXNzZWQgaW4gaXMgYW4gaW5zdGFuY2Ugb2YgVWludDhBcnJheVxuICpcbiAqIEBwYXJhbSB7VHlwZWRBcnJheX1cbiAqXG4gKiBAcmV0dXJucyB7QXJyYXl9XG4gKi9cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBmdW5jLW5hbWVzXG5jb25zdCBpc1R5cGVkQXJyYXkgPSAoVHlwZWRBcnJheSA9PiB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBmdW5jLW5hbWVzXG4gIHJldHVybiB0aGluZyA9PiB7XG4gICAgcmV0dXJuIFR5cGVkQXJyYXkgJiYgdGhpbmcgaW5zdGFuY2VvZiBUeXBlZEFycmF5O1xuICB9O1xufSkodHlwZW9mIFVpbnQ4QXJyYXkgIT09ICd1bmRlZmluZWQnICYmIGdldFByb3RvdHlwZU9mKFVpbnQ4QXJyYXkpKTtcblxuLyoqXG4gKiBGb3IgZWFjaCBlbnRyeSBpbiB0aGUgb2JqZWN0LCBjYWxsIHRoZSBmdW5jdGlvbiB3aXRoIHRoZSBrZXkgYW5kIHZhbHVlLlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0PGFueSwgYW55Pn0gb2JqIC0gVGhlIG9iamVjdCB0byBpdGVyYXRlIG92ZXIuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmbiAtIFRoZSBmdW5jdGlvbiB0byBjYWxsIGZvciBlYWNoIGVudHJ5LlxuICpcbiAqIEByZXR1cm5zIHt2b2lkfVxuICovXG5jb25zdCBmb3JFYWNoRW50cnkgPSAob2JqLCBmbikgPT4ge1xuICBjb25zdCBnZW5lcmF0b3IgPSBvYmogJiYgb2JqW1N5bWJvbC5pdGVyYXRvcl07XG5cbiAgY29uc3QgaXRlcmF0b3IgPSBnZW5lcmF0b3IuY2FsbChvYmopO1xuXG4gIGxldCByZXN1bHQ7XG5cbiAgd2hpbGUgKChyZXN1bHQgPSBpdGVyYXRvci5uZXh0KCkpICYmICFyZXN1bHQuZG9uZSkge1xuICAgIGNvbnN0IHBhaXIgPSByZXN1bHQudmFsdWU7XG4gICAgZm4uY2FsbChvYmosIHBhaXJbMF0sIHBhaXJbMV0pO1xuICB9XG59O1xuXG4vKipcbiAqIEl0IHRha2VzIGEgcmVndWxhciBleHByZXNzaW9uIGFuZCBhIHN0cmluZywgYW5kIHJldHVybnMgYW4gYXJyYXkgb2YgYWxsIHRoZSBtYXRjaGVzXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHJlZ0V4cCAtIFRoZSByZWd1bGFyIGV4cHJlc3Npb24gdG8gbWF0Y2ggYWdhaW5zdC5cbiAqIEBwYXJhbSB7c3RyaW5nfSBzdHIgLSBUaGUgc3RyaW5nIHRvIHNlYXJjaC5cbiAqXG4gKiBAcmV0dXJucyB7QXJyYXk8Ym9vbGVhbj59XG4gKi9cbmNvbnN0IG1hdGNoQWxsID0gKHJlZ0V4cCwgc3RyKSA9PiB7XG4gIGxldCBtYXRjaGVzO1xuICBjb25zdCBhcnIgPSBbXTtcblxuICB3aGlsZSAoKG1hdGNoZXMgPSByZWdFeHAuZXhlYyhzdHIpKSAhPT0gbnVsbCkge1xuICAgIGFyci5wdXNoKG1hdGNoZXMpO1xuICB9XG5cbiAgcmV0dXJuIGFycjtcbn07XG5cbi8qIENoZWNraW5nIGlmIHRoZSBraW5kT2ZUZXN0IGZ1bmN0aW9uIHJldHVybnMgdHJ1ZSB3aGVuIHBhc3NlZCBhbiBIVE1MRm9ybUVsZW1lbnQuICovXG5jb25zdCBpc0hUTUxGb3JtID0ga2luZE9mVGVzdCgnSFRNTEZvcm1FbGVtZW50Jyk7XG5cbmNvbnN0IHRvQ2FtZWxDYXNlID0gc3RyID0+IHtcbiAgcmV0dXJuIHN0ci50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoL1stX1xcc10oW2EtelxcZF0pKFxcdyopL2csXG4gICAgZnVuY3Rpb24gcmVwbGFjZXIobSwgcDEsIHAyKSB7XG4gICAgICByZXR1cm4gcDEudG9VcHBlckNhc2UoKSArIHAyO1xuICAgIH1cbiAgKTtcbn07XG5cbi8qIENyZWF0aW5nIGEgZnVuY3Rpb24gdGhhdCB3aWxsIGNoZWNrIGlmIGFuIG9iamVjdCBoYXMgYSBwcm9wZXJ0eS4gKi9cbmNvbnN0IGhhc093blByb3BlcnR5ID0gKCh7aGFzT3duUHJvcGVydHl9KSA9PiAob2JqLCBwcm9wKSA9PiBoYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwgcHJvcCkpKE9iamVjdC5wcm90b3R5cGUpO1xuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgUmVnRXhwIG9iamVjdFxuICpcbiAqIEBwYXJhbSB7Kn0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBSZWdFeHAgb2JqZWN0LCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuY29uc3QgaXNSZWdFeHAgPSBraW5kT2ZUZXN0KCdSZWdFeHAnKTtcblxuY29uc3QgcmVkdWNlRGVzY3JpcHRvcnMgPSAob2JqLCByZWR1Y2VyKSA9PiB7XG4gIGNvbnN0IGRlc2NyaXB0b3JzID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMob2JqKTtcbiAgY29uc3QgcmVkdWNlZERlc2NyaXB0b3JzID0ge307XG5cbiAgZm9yRWFjaChkZXNjcmlwdG9ycywgKGRlc2NyaXB0b3IsIG5hbWUpID0+IHtcbiAgICBsZXQgcmV0O1xuICAgIGlmICgocmV0ID0gcmVkdWNlcihkZXNjcmlwdG9yLCBuYW1lLCBvYmopKSAhPT0gZmFsc2UpIHtcbiAgICAgIHJlZHVjZWREZXNjcmlwdG9yc1tuYW1lXSA9IHJldCB8fCBkZXNjcmlwdG9yO1xuICAgIH1cbiAgfSk7XG5cbiAgT2JqZWN0LmRlZmluZVByb3BlcnRpZXMob2JqLCByZWR1Y2VkRGVzY3JpcHRvcnMpO1xufTtcblxuLyoqXG4gKiBNYWtlcyBhbGwgbWV0aG9kcyByZWFkLW9ubHlcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmpcbiAqL1xuXG5jb25zdCBmcmVlemVNZXRob2RzID0gKG9iaikgPT4ge1xuICByZWR1Y2VEZXNjcmlwdG9ycyhvYmosIChkZXNjcmlwdG9yLCBuYW1lKSA9PiB7XG4gICAgLy8gc2tpcCByZXN0cmljdGVkIHByb3BzIGluIHN0cmljdCBtb2RlXG4gICAgaWYgKGlzRnVuY3Rpb24ob2JqKSAmJiBbJ2FyZ3VtZW50cycsICdjYWxsZXInLCAnY2FsbGVlJ10uaW5kZXhPZihuYW1lKSAhPT0gLTEpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBjb25zdCB2YWx1ZSA9IG9ialtuYW1lXTtcblxuICAgIGlmICghaXNGdW5jdGlvbih2YWx1ZSkpIHJldHVybjtcblxuICAgIGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IGZhbHNlO1xuXG4gICAgaWYgKCd3cml0YWJsZScgaW4gZGVzY3JpcHRvcikge1xuICAgICAgZGVzY3JpcHRvci53cml0YWJsZSA9IGZhbHNlO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICghZGVzY3JpcHRvci5zZXQpIHtcbiAgICAgIGRlc2NyaXB0b3Iuc2V0ID0gKCkgPT4ge1xuICAgICAgICB0aHJvdyBFcnJvcignQ2FuIG5vdCByZXdyaXRlIHJlYWQtb25seSBtZXRob2QgXFwnJyArIG5hbWUgKyAnXFwnJyk7XG4gICAgICB9O1xuICAgIH1cbiAgfSk7XG59O1xuXG5jb25zdCB0b09iamVjdFNldCA9IChhcnJheU9yU3RyaW5nLCBkZWxpbWl0ZXIpID0+IHtcbiAgY29uc3Qgb2JqID0ge307XG5cbiAgY29uc3QgZGVmaW5lID0gKGFycikgPT4ge1xuICAgIGFyci5mb3JFYWNoKHZhbHVlID0+IHtcbiAgICAgIG9ialt2YWx1ZV0gPSB0cnVlO1xuICAgIH0pO1xuICB9O1xuXG4gIGlzQXJyYXkoYXJyYXlPclN0cmluZykgPyBkZWZpbmUoYXJyYXlPclN0cmluZykgOiBkZWZpbmUoU3RyaW5nKGFycmF5T3JTdHJpbmcpLnNwbGl0KGRlbGltaXRlcikpO1xuXG4gIHJldHVybiBvYmo7XG59O1xuXG5jb25zdCBub29wID0gKCkgPT4ge307XG5cbmNvbnN0IHRvRmluaXRlTnVtYmVyID0gKHZhbHVlLCBkZWZhdWx0VmFsdWUpID0+IHtcbiAgcmV0dXJuIHZhbHVlICE9IG51bGwgJiYgTnVtYmVyLmlzRmluaXRlKHZhbHVlID0gK3ZhbHVlKSA/IHZhbHVlIDogZGVmYXVsdFZhbHVlO1xufTtcblxuY29uc3QgQUxQSEEgPSAnYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXonO1xuXG5jb25zdCBESUdJVCA9ICcwMTIzNDU2Nzg5JztcblxuY29uc3QgQUxQSEFCRVQgPSB7XG4gIERJR0lULFxuICBBTFBIQSxcbiAgQUxQSEFfRElHSVQ6IEFMUEhBICsgQUxQSEEudG9VcHBlckNhc2UoKSArIERJR0lUXG59O1xuXG5jb25zdCBnZW5lcmF0ZVN0cmluZyA9IChzaXplID0gMTYsIGFscGhhYmV0ID0gQUxQSEFCRVQuQUxQSEFfRElHSVQpID0+IHtcbiAgbGV0IHN0ciA9ICcnO1xuICBjb25zdCB7bGVuZ3RofSA9IGFscGhhYmV0O1xuICB3aGlsZSAoc2l6ZS0tKSB7XG4gICAgc3RyICs9IGFscGhhYmV0W01hdGgucmFuZG9tKCkgKiBsZW5ndGh8MF07XG4gIH1cblxuICByZXR1cm4gc3RyO1xufTtcblxuLyoqXG4gKiBJZiB0aGUgdGhpbmcgaXMgYSBGb3JtRGF0YSBvYmplY3QsIHJldHVybiB0cnVlLCBvdGhlcndpc2UgcmV0dXJuIGZhbHNlLlxuICpcbiAqIEBwYXJhbSB7dW5rbm93bn0gdGhpbmcgLSBUaGUgdGhpbmcgdG8gY2hlY2suXG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKi9cbmZ1bmN0aW9uIGlzU3BlY0NvbXBsaWFudEZvcm0odGhpbmcpIHtcbiAgcmV0dXJuICEhKHRoaW5nICYmIGlzRnVuY3Rpb24odGhpbmcuYXBwZW5kKSAmJiB0aGluZ1tTeW1ib2wudG9TdHJpbmdUYWddID09PSAnRm9ybURhdGEnICYmIHRoaW5nW1N5bWJvbC5pdGVyYXRvcl0pO1xufVxuXG5jb25zdCB0b0pTT05PYmplY3QgPSAob2JqKSA9PiB7XG4gIGNvbnN0IHN0YWNrID0gbmV3IEFycmF5KDEwKTtcblxuICBjb25zdCB2aXNpdCA9IChzb3VyY2UsIGkpID0+IHtcblxuICAgIGlmIChpc09iamVjdChzb3VyY2UpKSB7XG4gICAgICBpZiAoc3RhY2suaW5kZXhPZihzb3VyY2UpID49IDApIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZighKCd0b0pTT04nIGluIHNvdXJjZSkpIHtcbiAgICAgICAgc3RhY2tbaV0gPSBzb3VyY2U7XG4gICAgICAgIGNvbnN0IHRhcmdldCA9IGlzQXJyYXkoc291cmNlKSA/IFtdIDoge307XG5cbiAgICAgICAgZm9yRWFjaChzb3VyY2UsICh2YWx1ZSwga2V5KSA9PiB7XG4gICAgICAgICAgY29uc3QgcmVkdWNlZFZhbHVlID0gdmlzaXQodmFsdWUsIGkgKyAxKTtcbiAgICAgICAgICAhaXNVbmRlZmluZWQocmVkdWNlZFZhbHVlKSAmJiAodGFyZ2V0W2tleV0gPSByZWR1Y2VkVmFsdWUpO1xuICAgICAgICB9KTtcblxuICAgICAgICBzdGFja1tpXSA9IHVuZGVmaW5lZDtcblxuICAgICAgICByZXR1cm4gdGFyZ2V0O1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBzb3VyY2U7XG4gIH07XG5cbiAgcmV0dXJuIHZpc2l0KG9iaiwgMCk7XG59O1xuXG5jb25zdCBpc0FzeW5jRm4gPSBraW5kT2ZUZXN0KCdBc3luY0Z1bmN0aW9uJyk7XG5cbmNvbnN0IGlzVGhlbmFibGUgPSAodGhpbmcpID0+XG4gIHRoaW5nICYmIChpc09iamVjdCh0aGluZykgfHwgaXNGdW5jdGlvbih0aGluZykpICYmIGlzRnVuY3Rpb24odGhpbmcudGhlbikgJiYgaXNGdW5jdGlvbih0aGluZy5jYXRjaCk7XG5cbi8vIG9yaWdpbmFsIGNvZGVcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9EaWdpdGFsQnJhaW5KUy9BeGlvc1Byb21pc2UvYmxvYi8xNmRlYWIxMzcxMGVjMDk3Nzk5MjIxMzFmM2ZhNTk1NDMyMGY4M2FiL2xpYi91dGlscy5qcyNMMTEtTDM0XG5cbmNvbnN0IF9zZXRJbW1lZGlhdGUgPSAoKHNldEltbWVkaWF0ZVN1cHBvcnRlZCwgcG9zdE1lc3NhZ2VTdXBwb3J0ZWQpID0+IHtcbiAgaWYgKHNldEltbWVkaWF0ZVN1cHBvcnRlZCkge1xuICAgIHJldHVybiBzZXRJbW1lZGlhdGU7XG4gIH1cblxuICByZXR1cm4gcG9zdE1lc3NhZ2VTdXBwb3J0ZWQgPyAoKHRva2VuLCBjYWxsYmFja3MpID0+IHtcbiAgICBfZ2xvYmFsLmFkZEV2ZW50TGlzdGVuZXIoXCJtZXNzYWdlXCIsICh7c291cmNlLCBkYXRhfSkgPT4ge1xuICAgICAgaWYgKHNvdXJjZSA9PT0gX2dsb2JhbCAmJiBkYXRhID09PSB0b2tlbikge1xuICAgICAgICBjYWxsYmFja3MubGVuZ3RoICYmIGNhbGxiYWNrcy5zaGlmdCgpKCk7XG4gICAgICB9XG4gICAgfSwgZmFsc2UpO1xuXG4gICAgcmV0dXJuIChjYikgPT4ge1xuICAgICAgY2FsbGJhY2tzLnB1c2goY2IpO1xuICAgICAgX2dsb2JhbC5wb3N0TWVzc2FnZSh0b2tlbiwgXCIqXCIpO1xuICAgIH1cbiAgfSkoYGF4aW9zQCR7TWF0aC5yYW5kb20oKX1gLCBbXSkgOiAoY2IpID0+IHNldFRpbWVvdXQoY2IpO1xufSkoXG4gIHR5cGVvZiBzZXRJbW1lZGlhdGUgPT09ICdmdW5jdGlvbicsXG4gIGlzRnVuY3Rpb24oX2dsb2JhbC5wb3N0TWVzc2FnZSlcbik7XG5cbmNvbnN0IGFzYXAgPSB0eXBlb2YgcXVldWVNaWNyb3Rhc2sgIT09ICd1bmRlZmluZWQnID9cbiAgcXVldWVNaWNyb3Rhc2suYmluZChfZ2xvYmFsKSA6ICggdHlwZW9mIHByb2Nlc3MgIT09ICd1bmRlZmluZWQnICYmIHByb2Nlc3MubmV4dFRpY2sgfHwgX3NldEltbWVkaWF0ZSk7XG5cbi8vICoqKioqKioqKioqKioqKioqKioqKlxuXG52YXIgdXRpbHMkMSA9IHtcbiAgaXNBcnJheSxcbiAgaXNBcnJheUJ1ZmZlcixcbiAgaXNCdWZmZXIsXG4gIGlzRm9ybURhdGEsXG4gIGlzQXJyYXlCdWZmZXJWaWV3LFxuICBpc1N0cmluZyxcbiAgaXNOdW1iZXIsXG4gIGlzQm9vbGVhbixcbiAgaXNPYmplY3QsXG4gIGlzUGxhaW5PYmplY3QsXG4gIGlzUmVhZGFibGVTdHJlYW0sXG4gIGlzUmVxdWVzdCxcbiAgaXNSZXNwb25zZSxcbiAgaXNIZWFkZXJzLFxuICBpc1VuZGVmaW5lZCxcbiAgaXNEYXRlLFxuICBpc0ZpbGUsXG4gIGlzQmxvYixcbiAgaXNSZWdFeHAsXG4gIGlzRnVuY3Rpb24sXG4gIGlzU3RyZWFtLFxuICBpc1VSTFNlYXJjaFBhcmFtcyxcbiAgaXNUeXBlZEFycmF5LFxuICBpc0ZpbGVMaXN0LFxuICBmb3JFYWNoLFxuICBtZXJnZSxcbiAgZXh0ZW5kLFxuICB0cmltLFxuICBzdHJpcEJPTSxcbiAgaW5oZXJpdHMsXG4gIHRvRmxhdE9iamVjdCxcbiAga2luZE9mLFxuICBraW5kT2ZUZXN0LFxuICBlbmRzV2l0aCxcbiAgdG9BcnJheSxcbiAgZm9yRWFjaEVudHJ5LFxuICBtYXRjaEFsbCxcbiAgaXNIVE1MRm9ybSxcbiAgaGFzT3duUHJvcGVydHksXG4gIGhhc093blByb3A6IGhhc093blByb3BlcnR5LCAvLyBhbiBhbGlhcyB0byBhdm9pZCBFU0xpbnQgbm8tcHJvdG90eXBlLWJ1aWx0aW5zIGRldGVjdGlvblxuICByZWR1Y2VEZXNjcmlwdG9ycyxcbiAgZnJlZXplTWV0aG9kcyxcbiAgdG9PYmplY3RTZXQsXG4gIHRvQ2FtZWxDYXNlLFxuICBub29wLFxuICB0b0Zpbml0ZU51bWJlcixcbiAgZmluZEtleSxcbiAgZ2xvYmFsOiBfZ2xvYmFsLFxuICBpc0NvbnRleHREZWZpbmVkLFxuICBBTFBIQUJFVCxcbiAgZ2VuZXJhdGVTdHJpbmcsXG4gIGlzU3BlY0NvbXBsaWFudEZvcm0sXG4gIHRvSlNPTk9iamVjdCxcbiAgaXNBc3luY0ZuLFxuICBpc1RoZW5hYmxlLFxuICBzZXRJbW1lZGlhdGU6IF9zZXRJbW1lZGlhdGUsXG4gIGFzYXBcbn07XG5cbi8qKlxuICogQ3JlYXRlIGFuIEVycm9yIHdpdGggdGhlIHNwZWNpZmllZCBtZXNzYWdlLCBjb25maWcsIGVycm9yIGNvZGUsIHJlcXVlc3QgYW5kIHJlc3BvbnNlLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBtZXNzYWdlIFRoZSBlcnJvciBtZXNzYWdlLlxuICogQHBhcmFtIHtzdHJpbmd9IFtjb2RlXSBUaGUgZXJyb3IgY29kZSAoZm9yIGV4YW1wbGUsICdFQ09OTkFCT1JURUQnKS5cbiAqIEBwYXJhbSB7T2JqZWN0fSBbY29uZmlnXSBUaGUgY29uZmlnLlxuICogQHBhcmFtIHtPYmplY3R9IFtyZXF1ZXN0XSBUaGUgcmVxdWVzdC5cbiAqIEBwYXJhbSB7T2JqZWN0fSBbcmVzcG9uc2VdIFRoZSByZXNwb25zZS5cbiAqXG4gKiBAcmV0dXJucyB7RXJyb3J9IFRoZSBjcmVhdGVkIGVycm9yLlxuICovXG5mdW5jdGlvbiBBeGlvc0Vycm9yKG1lc3NhZ2UsIGNvZGUsIGNvbmZpZywgcmVxdWVzdCwgcmVzcG9uc2UpIHtcbiAgRXJyb3IuY2FsbCh0aGlzKTtcblxuICBpZiAoRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UpIHtcbiAgICBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSh0aGlzLCB0aGlzLmNvbnN0cnVjdG9yKTtcbiAgfSBlbHNlIHtcbiAgICB0aGlzLnN0YWNrID0gKG5ldyBFcnJvcigpKS5zdGFjaztcbiAgfVxuXG4gIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2U7XG4gIHRoaXMubmFtZSA9ICdBeGlvc0Vycm9yJztcbiAgY29kZSAmJiAodGhpcy5jb2RlID0gY29kZSk7XG4gIGNvbmZpZyAmJiAodGhpcy5jb25maWcgPSBjb25maWcpO1xuICByZXF1ZXN0ICYmICh0aGlzLnJlcXVlc3QgPSByZXF1ZXN0KTtcbiAgcmVzcG9uc2UgJiYgKHRoaXMucmVzcG9uc2UgPSByZXNwb25zZSk7XG59XG5cbnV0aWxzJDEuaW5oZXJpdHMoQXhpb3NFcnJvciwgRXJyb3IsIHtcbiAgdG9KU09OOiBmdW5jdGlvbiB0b0pTT04oKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC8vIFN0YW5kYXJkXG4gICAgICBtZXNzYWdlOiB0aGlzLm1lc3NhZ2UsXG4gICAgICBuYW1lOiB0aGlzLm5hbWUsXG4gICAgICAvLyBNaWNyb3NvZnRcbiAgICAgIGRlc2NyaXB0aW9uOiB0aGlzLmRlc2NyaXB0aW9uLFxuICAgICAgbnVtYmVyOiB0aGlzLm51bWJlcixcbiAgICAgIC8vIE1vemlsbGFcbiAgICAgIGZpbGVOYW1lOiB0aGlzLmZpbGVOYW1lLFxuICAgICAgbGluZU51bWJlcjogdGhpcy5saW5lTnVtYmVyLFxuICAgICAgY29sdW1uTnVtYmVyOiB0aGlzLmNvbHVtbk51bWJlcixcbiAgICAgIHN0YWNrOiB0aGlzLnN0YWNrLFxuICAgICAgLy8gQXhpb3NcbiAgICAgIGNvbmZpZzogdXRpbHMkMS50b0pTT05PYmplY3QodGhpcy5jb25maWcpLFxuICAgICAgY29kZTogdGhpcy5jb2RlLFxuICAgICAgc3RhdHVzOiB0aGlzLnJlc3BvbnNlICYmIHRoaXMucmVzcG9uc2Uuc3RhdHVzID8gdGhpcy5yZXNwb25zZS5zdGF0dXMgOiBudWxsXG4gICAgfTtcbiAgfVxufSk7XG5cbmNvbnN0IHByb3RvdHlwZSQxID0gQXhpb3NFcnJvci5wcm90b3R5cGU7XG5jb25zdCBkZXNjcmlwdG9ycyA9IHt9O1xuXG5bXG4gICdFUlJfQkFEX09QVElPTl9WQUxVRScsXG4gICdFUlJfQkFEX09QVElPTicsXG4gICdFQ09OTkFCT1JURUQnLFxuICAnRVRJTUVET1VUJyxcbiAgJ0VSUl9ORVRXT1JLJyxcbiAgJ0VSUl9GUl9UT09fTUFOWV9SRURJUkVDVFMnLFxuICAnRVJSX0RFUFJFQ0FURUQnLFxuICAnRVJSX0JBRF9SRVNQT05TRScsXG4gICdFUlJfQkFEX1JFUVVFU1QnLFxuICAnRVJSX0NBTkNFTEVEJyxcbiAgJ0VSUl9OT1RfU1VQUE9SVCcsXG4gICdFUlJfSU5WQUxJRF9VUkwnXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZnVuYy1uYW1lc1xuXS5mb3JFYWNoKGNvZGUgPT4ge1xuICBkZXNjcmlwdG9yc1tjb2RlXSA9IHt2YWx1ZTogY29kZX07XG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQXhpb3NFcnJvciwgZGVzY3JpcHRvcnMpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KHByb3RvdHlwZSQxLCAnaXNBeGlvc0Vycm9yJywge3ZhbHVlOiB0cnVlfSk7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBmdW5jLW5hbWVzXG5BeGlvc0Vycm9yLmZyb20gPSAoZXJyb3IsIGNvZGUsIGNvbmZpZywgcmVxdWVzdCwgcmVzcG9uc2UsIGN1c3RvbVByb3BzKSA9PiB7XG4gIGNvbnN0IGF4aW9zRXJyb3IgPSBPYmplY3QuY3JlYXRlKHByb3RvdHlwZSQxKTtcblxuICB1dGlscyQxLnRvRmxhdE9iamVjdChlcnJvciwgYXhpb3NFcnJvciwgZnVuY3Rpb24gZmlsdGVyKG9iaikge1xuICAgIHJldHVybiBvYmogIT09IEVycm9yLnByb3RvdHlwZTtcbiAgfSwgcHJvcCA9PiB7XG4gICAgcmV0dXJuIHByb3AgIT09ICdpc0F4aW9zRXJyb3InO1xuICB9KTtcblxuICBBeGlvc0Vycm9yLmNhbGwoYXhpb3NFcnJvciwgZXJyb3IubWVzc2FnZSwgY29kZSwgY29uZmlnLCByZXF1ZXN0LCByZXNwb25zZSk7XG5cbiAgYXhpb3NFcnJvci5jYXVzZSA9IGVycm9yO1xuXG4gIGF4aW9zRXJyb3IubmFtZSA9IGVycm9yLm5hbWU7XG5cbiAgY3VzdG9tUHJvcHMgJiYgT2JqZWN0LmFzc2lnbihheGlvc0Vycm9yLCBjdXN0b21Qcm9wcyk7XG5cbiAgcmV0dXJuIGF4aW9zRXJyb3I7XG59O1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgc3RyaWN0XG52YXIgaHR0cEFkYXB0ZXIgPSBudWxsO1xuXG4vKipcbiAqIERldGVybWluZXMgaWYgdGhlIGdpdmVuIHRoaW5nIGlzIGEgYXJyYXkgb3IganMgb2JqZWN0LlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSB0aGluZyAtIFRoZSBvYmplY3Qgb3IgYXJyYXkgdG8gYmUgdmlzaXRlZC5cbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqL1xuZnVuY3Rpb24gaXNWaXNpdGFibGUodGhpbmcpIHtcbiAgcmV0dXJuIHV0aWxzJDEuaXNQbGFpbk9iamVjdCh0aGluZykgfHwgdXRpbHMkMS5pc0FycmF5KHRoaW5nKTtcbn1cblxuLyoqXG4gKiBJdCByZW1vdmVzIHRoZSBicmFja2V0cyBmcm9tIHRoZSBlbmQgb2YgYSBzdHJpbmdcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IC0gVGhlIGtleSBvZiB0aGUgcGFyYW1ldGVyLlxuICpcbiAqIEByZXR1cm5zIHtzdHJpbmd9IHRoZSBrZXkgd2l0aG91dCB0aGUgYnJhY2tldHMuXG4gKi9cbmZ1bmN0aW9uIHJlbW92ZUJyYWNrZXRzKGtleSkge1xuICByZXR1cm4gdXRpbHMkMS5lbmRzV2l0aChrZXksICdbXScpID8ga2V5LnNsaWNlKDAsIC0yKSA6IGtleTtcbn1cblxuLyoqXG4gKiBJdCB0YWtlcyBhIHBhdGgsIGEga2V5LCBhbmQgYSBib29sZWFuLCBhbmQgcmV0dXJucyBhIHN0cmluZ1xuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBwYXRoIC0gVGhlIHBhdGggdG8gdGhlIGN1cnJlbnQga2V5LlxuICogQHBhcmFtIHtzdHJpbmd9IGtleSAtIFRoZSBrZXkgb2YgdGhlIGN1cnJlbnQgb2JqZWN0IGJlaW5nIGl0ZXJhdGVkIG92ZXIuXG4gKiBAcGFyYW0ge3N0cmluZ30gZG90cyAtIElmIHRydWUsIHRoZSBrZXkgd2lsbCBiZSByZW5kZXJlZCB3aXRoIGRvdHMgaW5zdGVhZCBvZiBicmFja2V0cy5cbiAqXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgcGF0aCB0byB0aGUgY3VycmVudCBrZXkuXG4gKi9cbmZ1bmN0aW9uIHJlbmRlcktleShwYXRoLCBrZXksIGRvdHMpIHtcbiAgaWYgKCFwYXRoKSByZXR1cm4ga2V5O1xuICByZXR1cm4gcGF0aC5jb25jYXQoa2V5KS5tYXAoZnVuY3Rpb24gZWFjaCh0b2tlbiwgaSkge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuICAgIHRva2VuID0gcmVtb3ZlQnJhY2tldHModG9rZW4pO1xuICAgIHJldHVybiAhZG90cyAmJiBpID8gJ1snICsgdG9rZW4gKyAnXScgOiB0b2tlbjtcbiAgfSkuam9pbihkb3RzID8gJy4nIDogJycpO1xufVxuXG4vKipcbiAqIElmIHRoZSBhcnJheSBpcyBhbiBhcnJheSBhbmQgbm9uZSBvZiBpdHMgZWxlbWVudHMgYXJlIHZpc2l0YWJsZSwgdGhlbiBpdCdzIGEgZmxhdCBhcnJheS5cbiAqXG4gKiBAcGFyYW0ge0FycmF5PGFueT59IGFyciAtIFRoZSBhcnJheSB0byBjaGVja1xuICpcbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5mdW5jdGlvbiBpc0ZsYXRBcnJheShhcnIpIHtcbiAgcmV0dXJuIHV0aWxzJDEuaXNBcnJheShhcnIpICYmICFhcnIuc29tZShpc1Zpc2l0YWJsZSk7XG59XG5cbmNvbnN0IHByZWRpY2F0ZXMgPSB1dGlscyQxLnRvRmxhdE9iamVjdCh1dGlscyQxLCB7fSwgbnVsbCwgZnVuY3Rpb24gZmlsdGVyKHByb3ApIHtcbiAgcmV0dXJuIC9eaXNbQS1aXS8udGVzdChwcm9wKTtcbn0pO1xuXG4vKipcbiAqIENvbnZlcnQgYSBkYXRhIG9iamVjdCB0byBGb3JtRGF0YVxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmpcbiAqIEBwYXJhbSB7P09iamVjdH0gW2Zvcm1EYXRhXVxuICogQHBhcmFtIHs/T2JqZWN0fSBbb3B0aW9uc11cbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtvcHRpb25zLnZpc2l0b3JdXG4gKiBAcGFyYW0ge0Jvb2xlYW59IFtvcHRpb25zLm1ldGFUb2tlbnMgPSB0cnVlXVxuICogQHBhcmFtIHtCb29sZWFufSBbb3B0aW9ucy5kb3RzID0gZmFsc2VdXG4gKiBAcGFyYW0gez9Cb29sZWFufSBbb3B0aW9ucy5pbmRleGVzID0gZmFsc2VdXG4gKlxuICogQHJldHVybnMge09iamVjdH1cbiAqKi9cblxuLyoqXG4gKiBJdCBjb252ZXJ0cyBhbiBvYmplY3QgaW50byBhIEZvcm1EYXRhIG9iamVjdFxuICpcbiAqIEBwYXJhbSB7T2JqZWN0PGFueSwgYW55Pn0gb2JqIC0gVGhlIG9iamVjdCB0byBjb252ZXJ0IHRvIGZvcm0gZGF0YS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBmb3JtRGF0YSAtIFRoZSBGb3JtRGF0YSBvYmplY3QgdG8gYXBwZW5kIHRvLlxuICogQHBhcmFtIHtPYmplY3Q8c3RyaW5nLCBhbnk+fSBvcHRpb25zXG4gKlxuICogQHJldHVybnNcbiAqL1xuZnVuY3Rpb24gdG9Gb3JtRGF0YShvYmosIGZvcm1EYXRhLCBvcHRpb25zKSB7XG4gIGlmICghdXRpbHMkMS5pc09iamVjdChvYmopKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcigndGFyZ2V0IG11c3QgYmUgYW4gb2JqZWN0Jyk7XG4gIH1cblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcGFyYW0tcmVhc3NpZ25cbiAgZm9ybURhdGEgPSBmb3JtRGF0YSB8fCBuZXcgKEZvcm1EYXRhKSgpO1xuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuICBvcHRpb25zID0gdXRpbHMkMS50b0ZsYXRPYmplY3Qob3B0aW9ucywge1xuICAgIG1ldGFUb2tlbnM6IHRydWUsXG4gICAgZG90czogZmFsc2UsXG4gICAgaW5kZXhlczogZmFsc2VcbiAgfSwgZmFsc2UsIGZ1bmN0aW9uIGRlZmluZWQob3B0aW9uLCBzb3VyY2UpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tZXEtbnVsbCxlcWVxZXFcbiAgICByZXR1cm4gIXV0aWxzJDEuaXNVbmRlZmluZWQoc291cmNlW29wdGlvbl0pO1xuICB9KTtcblxuICBjb25zdCBtZXRhVG9rZW5zID0gb3B0aW9ucy5tZXRhVG9rZW5zO1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdXNlLWJlZm9yZS1kZWZpbmVcbiAgY29uc3QgdmlzaXRvciA9IG9wdGlvbnMudmlzaXRvciB8fCBkZWZhdWx0VmlzaXRvcjtcbiAgY29uc3QgZG90cyA9IG9wdGlvbnMuZG90cztcbiAgY29uc3QgaW5kZXhlcyA9IG9wdGlvbnMuaW5kZXhlcztcbiAgY29uc3QgX0Jsb2IgPSBvcHRpb25zLkJsb2IgfHwgdHlwZW9mIEJsb2IgIT09ICd1bmRlZmluZWQnICYmIEJsb2I7XG4gIGNvbnN0IHVzZUJsb2IgPSBfQmxvYiAmJiB1dGlscyQxLmlzU3BlY0NvbXBsaWFudEZvcm0oZm9ybURhdGEpO1xuXG4gIGlmICghdXRpbHMkMS5pc0Z1bmN0aW9uKHZpc2l0b3IpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcigndmlzaXRvciBtdXN0IGJlIGEgZnVuY3Rpb24nKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNvbnZlcnRWYWx1ZSh2YWx1ZSkge1xuICAgIGlmICh2YWx1ZSA9PT0gbnVsbCkgcmV0dXJuICcnO1xuXG4gICAgaWYgKHV0aWxzJDEuaXNEYXRlKHZhbHVlKSkge1xuICAgICAgcmV0dXJuIHZhbHVlLnRvSVNPU3RyaW5nKCk7XG4gICAgfVxuXG4gICAgaWYgKCF1c2VCbG9iICYmIHV0aWxzJDEuaXNCbG9iKHZhbHVlKSkge1xuICAgICAgdGhyb3cgbmV3IEF4aW9zRXJyb3IoJ0Jsb2IgaXMgbm90IHN1cHBvcnRlZC4gVXNlIGEgQnVmZmVyIGluc3RlYWQuJyk7XG4gICAgfVxuXG4gICAgaWYgKHV0aWxzJDEuaXNBcnJheUJ1ZmZlcih2YWx1ZSkgfHwgdXRpbHMkMS5pc1R5cGVkQXJyYXkodmFsdWUpKSB7XG4gICAgICByZXR1cm4gdXNlQmxvYiAmJiB0eXBlb2YgQmxvYiA9PT0gJ2Z1bmN0aW9uJyA/IG5ldyBCbG9iKFt2YWx1ZV0pIDogQnVmZmVyLmZyb20odmFsdWUpO1xuICAgIH1cblxuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWZhdWx0IHZpc2l0b3IuXG4gICAqXG4gICAqIEBwYXJhbSB7Kn0gdmFsdWVcbiAgICogQHBhcmFtIHtTdHJpbmd8TnVtYmVyfSBrZXlcbiAgICogQHBhcmFtIHtBcnJheTxTdHJpbmd8TnVtYmVyPn0gcGF0aFxuICAgKiBAdGhpcyB7Rm9ybURhdGF9XG4gICAqXG4gICAqIEByZXR1cm5zIHtib29sZWFufSByZXR1cm4gdHJ1ZSB0byB2aXNpdCB0aGUgZWFjaCBwcm9wIG9mIHRoZSB2YWx1ZSByZWN1cnNpdmVseVxuICAgKi9cbiAgZnVuY3Rpb24gZGVmYXVsdFZpc2l0b3IodmFsdWUsIGtleSwgcGF0aCkge1xuICAgIGxldCBhcnIgPSB2YWx1ZTtcblxuICAgIGlmICh2YWx1ZSAmJiAhcGF0aCAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnKSB7XG4gICAgICBpZiAodXRpbHMkMS5lbmRzV2l0aChrZXksICd7fScpKSB7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuICAgICAgICBrZXkgPSBtZXRhVG9rZW5zID8ga2V5IDoga2V5LnNsaWNlKDAsIC0yKTtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXBhcmFtLXJlYXNzaWduXG4gICAgICAgIHZhbHVlID0gSlNPTi5zdHJpbmdpZnkodmFsdWUpO1xuICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgKHV0aWxzJDEuaXNBcnJheSh2YWx1ZSkgJiYgaXNGbGF0QXJyYXkodmFsdWUpKSB8fFxuICAgICAgICAoKHV0aWxzJDEuaXNGaWxlTGlzdCh2YWx1ZSkgfHwgdXRpbHMkMS5lbmRzV2l0aChrZXksICdbXScpKSAmJiAoYXJyID0gdXRpbHMkMS50b0FycmF5KHZhbHVlKSlcbiAgICAgICAgKSkge1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcGFyYW0tcmVhc3NpZ25cbiAgICAgICAga2V5ID0gcmVtb3ZlQnJhY2tldHMoa2V5KTtcblxuICAgICAgICBhcnIuZm9yRWFjaChmdW5jdGlvbiBlYWNoKGVsLCBpbmRleCkge1xuICAgICAgICAgICEodXRpbHMkMS5pc1VuZGVmaW5lZChlbCkgfHwgZWwgPT09IG51bGwpICYmIGZvcm1EYXRhLmFwcGVuZChcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1uZXN0ZWQtdGVybmFyeVxuICAgICAgICAgICAgaW5kZXhlcyA9PT0gdHJ1ZSA/IHJlbmRlcktleShba2V5XSwgaW5kZXgsIGRvdHMpIDogKGluZGV4ZXMgPT09IG51bGwgPyBrZXkgOiBrZXkgKyAnW10nKSxcbiAgICAgICAgICAgIGNvbnZlcnRWYWx1ZShlbClcbiAgICAgICAgICApO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChpc1Zpc2l0YWJsZSh2YWx1ZSkpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGZvcm1EYXRhLmFwcGVuZChyZW5kZXJLZXkocGF0aCwga2V5LCBkb3RzKSwgY29udmVydFZhbHVlKHZhbHVlKSk7XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBjb25zdCBzdGFjayA9IFtdO1xuXG4gIGNvbnN0IGV4cG9zZWRIZWxwZXJzID0gT2JqZWN0LmFzc2lnbihwcmVkaWNhdGVzLCB7XG4gICAgZGVmYXVsdFZpc2l0b3IsXG4gICAgY29udmVydFZhbHVlLFxuICAgIGlzVmlzaXRhYmxlXG4gIH0pO1xuXG4gIGZ1bmN0aW9uIGJ1aWxkKHZhbHVlLCBwYXRoKSB7XG4gICAgaWYgKHV0aWxzJDEuaXNVbmRlZmluZWQodmFsdWUpKSByZXR1cm47XG5cbiAgICBpZiAoc3RhY2suaW5kZXhPZih2YWx1ZSkgIT09IC0xKSB7XG4gICAgICB0aHJvdyBFcnJvcignQ2lyY3VsYXIgcmVmZXJlbmNlIGRldGVjdGVkIGluICcgKyBwYXRoLmpvaW4oJy4nKSk7XG4gICAgfVxuXG4gICAgc3RhY2sucHVzaCh2YWx1ZSk7XG5cbiAgICB1dGlscyQxLmZvckVhY2godmFsdWUsIGZ1bmN0aW9uIGVhY2goZWwsIGtleSkge1xuICAgICAgY29uc3QgcmVzdWx0ID0gISh1dGlscyQxLmlzVW5kZWZpbmVkKGVsKSB8fCBlbCA9PT0gbnVsbCkgJiYgdmlzaXRvci5jYWxsKFxuICAgICAgICBmb3JtRGF0YSwgZWwsIHV0aWxzJDEuaXNTdHJpbmcoa2V5KSA/IGtleS50cmltKCkgOiBrZXksIHBhdGgsIGV4cG9zZWRIZWxwZXJzXG4gICAgICApO1xuXG4gICAgICBpZiAocmVzdWx0ID09PSB0cnVlKSB7XG4gICAgICAgIGJ1aWxkKGVsLCBwYXRoID8gcGF0aC5jb25jYXQoa2V5KSA6IFtrZXldKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHN0YWNrLnBvcCgpO1xuICB9XG5cbiAgaWYgKCF1dGlscyQxLmlzT2JqZWN0KG9iaikpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdkYXRhIG11c3QgYmUgYW4gb2JqZWN0Jyk7XG4gIH1cblxuICBidWlsZChvYmopO1xuXG4gIHJldHVybiBmb3JtRGF0YTtcbn1cblxuLyoqXG4gKiBJdCBlbmNvZGVzIGEgc3RyaW5nIGJ5IHJlcGxhY2luZyBhbGwgY2hhcmFjdGVycyB0aGF0IGFyZSBub3QgaW4gdGhlIHVucmVzZXJ2ZWQgc2V0IHdpdGhcbiAqIHRoZWlyIHBlcmNlbnQtZW5jb2RlZCBlcXVpdmFsZW50c1xuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBzdHIgLSBUaGUgc3RyaW5nIHRvIGVuY29kZS5cbiAqXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgZW5jb2RlZCBzdHJpbmcuXG4gKi9cbmZ1bmN0aW9uIGVuY29kZSQxKHN0cikge1xuICBjb25zdCBjaGFyTWFwID0ge1xuICAgICchJzogJyUyMScsXG4gICAgXCInXCI6ICclMjcnLFxuICAgICcoJzogJyUyOCcsXG4gICAgJyknOiAnJTI5JyxcbiAgICAnfic6ICclN0UnLFxuICAgICclMjAnOiAnKycsXG4gICAgJyUwMCc6ICdcXHgwMCdcbiAgfTtcbiAgcmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudChzdHIpLnJlcGxhY2UoL1shJygpfl18JTIwfCUwMC9nLCBmdW5jdGlvbiByZXBsYWNlcihtYXRjaCkge1xuICAgIHJldHVybiBjaGFyTWFwW21hdGNoXTtcbiAgfSk7XG59XG5cbi8qKlxuICogSXQgdGFrZXMgYSBwYXJhbXMgb2JqZWN0IGFuZCBjb252ZXJ0cyBpdCB0byBhIEZvcm1EYXRhIG9iamVjdFxuICpcbiAqIEBwYXJhbSB7T2JqZWN0PHN0cmluZywgYW55Pn0gcGFyYW1zIC0gVGhlIHBhcmFtZXRlcnMgdG8gYmUgY29udmVydGVkIHRvIGEgRm9ybURhdGEgb2JqZWN0LlxuICogQHBhcmFtIHtPYmplY3Q8c3RyaW5nLCBhbnk+fSBvcHRpb25zIC0gVGhlIG9wdGlvbnMgb2JqZWN0IHBhc3NlZCB0byB0aGUgQXhpb3MgY29uc3RydWN0b3IuXG4gKlxuICogQHJldHVybnMge3ZvaWR9XG4gKi9cbmZ1bmN0aW9uIEF4aW9zVVJMU2VhcmNoUGFyYW1zKHBhcmFtcywgb3B0aW9ucykge1xuICB0aGlzLl9wYWlycyA9IFtdO1xuXG4gIHBhcmFtcyAmJiB0b0Zvcm1EYXRhKHBhcmFtcywgdGhpcywgb3B0aW9ucyk7XG59XG5cbmNvbnN0IHByb3RvdHlwZSA9IEF4aW9zVVJMU2VhcmNoUGFyYW1zLnByb3RvdHlwZTtcblxucHJvdG90eXBlLmFwcGVuZCA9IGZ1bmN0aW9uIGFwcGVuZChuYW1lLCB2YWx1ZSkge1xuICB0aGlzLl9wYWlycy5wdXNoKFtuYW1lLCB2YWx1ZV0pO1xufTtcblxucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24gdG9TdHJpbmcoZW5jb2Rlcikge1xuICBjb25zdCBfZW5jb2RlID0gZW5jb2RlciA/IGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgcmV0dXJuIGVuY29kZXIuY2FsbCh0aGlzLCB2YWx1ZSwgZW5jb2RlJDEpO1xuICB9IDogZW5jb2RlJDE7XG5cbiAgcmV0dXJuIHRoaXMuX3BhaXJzLm1hcChmdW5jdGlvbiBlYWNoKHBhaXIpIHtcbiAgICByZXR1cm4gX2VuY29kZShwYWlyWzBdKSArICc9JyArIF9lbmNvZGUocGFpclsxXSk7XG4gIH0sICcnKS5qb2luKCcmJyk7XG59O1xuXG4vKipcbiAqIEl0IHJlcGxhY2VzIGFsbCBpbnN0YW5jZXMgb2YgdGhlIGNoYXJhY3RlcnMgYDpgLCBgJGAsIGAsYCwgYCtgLCBgW2AsIGFuZCBgXWAgd2l0aCB0aGVpclxuICogVVJJIGVuY29kZWQgY291bnRlcnBhcnRzXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbCBUaGUgdmFsdWUgdG8gYmUgZW5jb2RlZC5cbiAqXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgZW5jb2RlZCB2YWx1ZS5cbiAqL1xuZnVuY3Rpb24gZW5jb2RlKHZhbCkge1xuICByZXR1cm4gZW5jb2RlVVJJQ29tcG9uZW50KHZhbCkuXG4gICAgcmVwbGFjZSgvJTNBL2dpLCAnOicpLlxuICAgIHJlcGxhY2UoLyUyNC9nLCAnJCcpLlxuICAgIHJlcGxhY2UoLyUyQy9naSwgJywnKS5cbiAgICByZXBsYWNlKC8lMjAvZywgJysnKS5cbiAgICByZXBsYWNlKC8lNUIvZ2ksICdbJykuXG4gICAgcmVwbGFjZSgvJTVEL2dpLCAnXScpO1xufVxuXG4vKipcbiAqIEJ1aWxkIGEgVVJMIGJ5IGFwcGVuZGluZyBwYXJhbXMgdG8gdGhlIGVuZFxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSB1cmwgVGhlIGJhc2Ugb2YgdGhlIHVybCAoZS5nLiwgaHR0cDovL3d3dy5nb29nbGUuY29tKVxuICogQHBhcmFtIHtvYmplY3R9IFtwYXJhbXNdIFRoZSBwYXJhbXMgdG8gYmUgYXBwZW5kZWRcbiAqIEBwYXJhbSB7P29iamVjdH0gb3B0aW9uc1xuICpcbiAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSBmb3JtYXR0ZWQgdXJsXG4gKi9cbmZ1bmN0aW9uIGJ1aWxkVVJMKHVybCwgcGFyYW1zLCBvcHRpb25zKSB7XG4gIC8qZXNsaW50IG5vLXBhcmFtLXJlYXNzaWduOjAqL1xuICBpZiAoIXBhcmFtcykge1xuICAgIHJldHVybiB1cmw7XG4gIH1cbiAgXG4gIGNvbnN0IF9lbmNvZGUgPSBvcHRpb25zICYmIG9wdGlvbnMuZW5jb2RlIHx8IGVuY29kZTtcblxuICBjb25zdCBzZXJpYWxpemVGbiA9IG9wdGlvbnMgJiYgb3B0aW9ucy5zZXJpYWxpemU7XG5cbiAgbGV0IHNlcmlhbGl6ZWRQYXJhbXM7XG5cbiAgaWYgKHNlcmlhbGl6ZUZuKSB7XG4gICAgc2VyaWFsaXplZFBhcmFtcyA9IHNlcmlhbGl6ZUZuKHBhcmFtcywgb3B0aW9ucyk7XG4gIH0gZWxzZSB7XG4gICAgc2VyaWFsaXplZFBhcmFtcyA9IHV0aWxzJDEuaXNVUkxTZWFyY2hQYXJhbXMocGFyYW1zKSA/XG4gICAgICBwYXJhbXMudG9TdHJpbmcoKSA6XG4gICAgICBuZXcgQXhpb3NVUkxTZWFyY2hQYXJhbXMocGFyYW1zLCBvcHRpb25zKS50b1N0cmluZyhfZW5jb2RlKTtcbiAgfVxuXG4gIGlmIChzZXJpYWxpemVkUGFyYW1zKSB7XG4gICAgY29uc3QgaGFzaG1hcmtJbmRleCA9IHVybC5pbmRleE9mKFwiI1wiKTtcblxuICAgIGlmIChoYXNobWFya0luZGV4ICE9PSAtMSkge1xuICAgICAgdXJsID0gdXJsLnNsaWNlKDAsIGhhc2htYXJrSW5kZXgpO1xuICAgIH1cbiAgICB1cmwgKz0gKHVybC5pbmRleE9mKCc/JykgPT09IC0xID8gJz8nIDogJyYnKSArIHNlcmlhbGl6ZWRQYXJhbXM7XG4gIH1cblxuICByZXR1cm4gdXJsO1xufVxuXG5jbGFzcyBJbnRlcmNlcHRvck1hbmFnZXIge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLmhhbmRsZXJzID0gW107XG4gIH1cblxuICAvKipcbiAgICogQWRkIGEgbmV3IGludGVyY2VwdG9yIHRvIHRoZSBzdGFja1xuICAgKlxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdWxmaWxsZWQgVGhlIGZ1bmN0aW9uIHRvIGhhbmRsZSBgdGhlbmAgZm9yIGEgYFByb21pc2VgXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IHJlamVjdGVkIFRoZSBmdW5jdGlvbiB0byBoYW5kbGUgYHJlamVjdGAgZm9yIGEgYFByb21pc2VgXG4gICAqXG4gICAqIEByZXR1cm4ge051bWJlcn0gQW4gSUQgdXNlZCB0byByZW1vdmUgaW50ZXJjZXB0b3IgbGF0ZXJcbiAgICovXG4gIHVzZShmdWxmaWxsZWQsIHJlamVjdGVkLCBvcHRpb25zKSB7XG4gICAgdGhpcy5oYW5kbGVycy5wdXNoKHtcbiAgICAgIGZ1bGZpbGxlZCxcbiAgICAgIHJlamVjdGVkLFxuICAgICAgc3luY2hyb25vdXM6IG9wdGlvbnMgPyBvcHRpb25zLnN5bmNocm9ub3VzIDogZmFsc2UsXG4gICAgICBydW5XaGVuOiBvcHRpb25zID8gb3B0aW9ucy5ydW5XaGVuIDogbnVsbFxuICAgIH0pO1xuICAgIHJldHVybiB0aGlzLmhhbmRsZXJzLmxlbmd0aCAtIDE7XG4gIH1cblxuICAvKipcbiAgICogUmVtb3ZlIGFuIGludGVyY2VwdG9yIGZyb20gdGhlIHN0YWNrXG4gICAqXG4gICAqIEBwYXJhbSB7TnVtYmVyfSBpZCBUaGUgSUQgdGhhdCB3YXMgcmV0dXJuZWQgYnkgYHVzZWBcbiAgICpcbiAgICogQHJldHVybnMge0Jvb2xlYW59IGB0cnVlYCBpZiB0aGUgaW50ZXJjZXB0b3Igd2FzIHJlbW92ZWQsIGBmYWxzZWAgb3RoZXJ3aXNlXG4gICAqL1xuICBlamVjdChpZCkge1xuICAgIGlmICh0aGlzLmhhbmRsZXJzW2lkXSkge1xuICAgICAgdGhpcy5oYW5kbGVyc1tpZF0gPSBudWxsO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDbGVhciBhbGwgaW50ZXJjZXB0b3JzIGZyb20gdGhlIHN0YWNrXG4gICAqXG4gICAqIEByZXR1cm5zIHt2b2lkfVxuICAgKi9cbiAgY2xlYXIoKSB7XG4gICAgaWYgKHRoaXMuaGFuZGxlcnMpIHtcbiAgICAgIHRoaXMuaGFuZGxlcnMgPSBbXTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogSXRlcmF0ZSBvdmVyIGFsbCB0aGUgcmVnaXN0ZXJlZCBpbnRlcmNlcHRvcnNcbiAgICpcbiAgICogVGhpcyBtZXRob2QgaXMgcGFydGljdWxhcmx5IHVzZWZ1bCBmb3Igc2tpcHBpbmcgb3ZlciBhbnlcbiAgICogaW50ZXJjZXB0b3JzIHRoYXQgbWF5IGhhdmUgYmVjb21lIGBudWxsYCBjYWxsaW5nIGBlamVjdGAuXG4gICAqXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IGZuIFRoZSBmdW5jdGlvbiB0byBjYWxsIGZvciBlYWNoIGludGVyY2VwdG9yXG4gICAqXG4gICAqIEByZXR1cm5zIHt2b2lkfVxuICAgKi9cbiAgZm9yRWFjaChmbikge1xuICAgIHV0aWxzJDEuZm9yRWFjaCh0aGlzLmhhbmRsZXJzLCBmdW5jdGlvbiBmb3JFYWNoSGFuZGxlcihoKSB7XG4gICAgICBpZiAoaCAhPT0gbnVsbCkge1xuICAgICAgICBmbihoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxufVxuXG52YXIgSW50ZXJjZXB0b3JNYW5hZ2VyJDEgPSBJbnRlcmNlcHRvck1hbmFnZXI7XG5cbnZhciB0cmFuc2l0aW9uYWxEZWZhdWx0cyA9IHtcbiAgc2lsZW50SlNPTlBhcnNpbmc6IHRydWUsXG4gIGZvcmNlZEpTT05QYXJzaW5nOiB0cnVlLFxuICBjbGFyaWZ5VGltZW91dEVycm9yOiBmYWxzZVxufTtcblxudmFyIFVSTFNlYXJjaFBhcmFtcyQxID0gdHlwZW9mIFVSTFNlYXJjaFBhcmFtcyAhPT0gJ3VuZGVmaW5lZCcgPyBVUkxTZWFyY2hQYXJhbXMgOiBBeGlvc1VSTFNlYXJjaFBhcmFtcztcblxudmFyIEZvcm1EYXRhJDEgPSB0eXBlb2YgRm9ybURhdGEgIT09ICd1bmRlZmluZWQnID8gRm9ybURhdGEgOiBudWxsO1xuXG52YXIgQmxvYiQxID0gdHlwZW9mIEJsb2IgIT09ICd1bmRlZmluZWQnID8gQmxvYiA6IG51bGw7XG5cbnZhciBwbGF0Zm9ybSQxID0ge1xuICBpc0Jyb3dzZXI6IHRydWUsXG4gIGNsYXNzZXM6IHtcbiAgICBVUkxTZWFyY2hQYXJhbXM6IFVSTFNlYXJjaFBhcmFtcyQxLFxuICAgIEZvcm1EYXRhOiBGb3JtRGF0YSQxLFxuICAgIEJsb2I6IEJsb2IkMVxuICB9LFxuICBwcm90b2NvbHM6IFsnaHR0cCcsICdodHRwcycsICdmaWxlJywgJ2Jsb2InLCAndXJsJywgJ2RhdGEnXVxufTtcblxuY29uc3QgaGFzQnJvd3NlckVudiA9IHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIHR5cGVvZiBkb2N1bWVudCAhPT0gJ3VuZGVmaW5lZCc7XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIHdlJ3JlIHJ1bm5pbmcgaW4gYSBzdGFuZGFyZCBicm93c2VyIGVudmlyb25tZW50XG4gKlxuICogVGhpcyBhbGxvd3MgYXhpb3MgdG8gcnVuIGluIGEgd2ViIHdvcmtlciwgYW5kIHJlYWN0LW5hdGl2ZS5cbiAqIEJvdGggZW52aXJvbm1lbnRzIHN1cHBvcnQgWE1MSHR0cFJlcXVlc3QsIGJ1dCBub3QgZnVsbHkgc3RhbmRhcmQgZ2xvYmFscy5cbiAqXG4gKiB3ZWIgd29ya2VyczpcbiAqICB0eXBlb2Ygd2luZG93IC0+IHVuZGVmaW5lZFxuICogIHR5cGVvZiBkb2N1bWVudCAtPiB1bmRlZmluZWRcbiAqXG4gKiByZWFjdC1uYXRpdmU6XG4gKiAgbmF2aWdhdG9yLnByb2R1Y3QgLT4gJ1JlYWN0TmF0aXZlJ1xuICogbmF0aXZlc2NyaXB0XG4gKiAgbmF2aWdhdG9yLnByb2R1Y3QgLT4gJ05hdGl2ZVNjcmlwdCcgb3IgJ05TJ1xuICpcbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5jb25zdCBoYXNTdGFuZGFyZEJyb3dzZXJFbnYgPSAoXG4gIChwcm9kdWN0KSA9PiB7XG4gICAgcmV0dXJuIGhhc0Jyb3dzZXJFbnYgJiYgWydSZWFjdE5hdGl2ZScsICdOYXRpdmVTY3JpcHQnLCAnTlMnXS5pbmRleE9mKHByb2R1Y3QpIDwgMFxuICB9KSh0eXBlb2YgbmF2aWdhdG9yICE9PSAndW5kZWZpbmVkJyAmJiBuYXZpZ2F0b3IucHJvZHVjdCk7XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIHdlJ3JlIHJ1bm5pbmcgaW4gYSBzdGFuZGFyZCBicm93c2VyIHdlYldvcmtlciBlbnZpcm9ubWVudFxuICpcbiAqIEFsdGhvdWdoIHRoZSBgaXNTdGFuZGFyZEJyb3dzZXJFbnZgIG1ldGhvZCBpbmRpY2F0ZXMgdGhhdFxuICogYGFsbG93cyBheGlvcyB0byBydW4gaW4gYSB3ZWIgd29ya2VyYCwgdGhlIFdlYldvcmtlciB3aWxsIHN0aWxsIGJlXG4gKiBmaWx0ZXJlZCBvdXQgZHVlIHRvIGl0cyBqdWRnbWVudCBzdGFuZGFyZFxuICogYHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIHR5cGVvZiBkb2N1bWVudCAhPT0gJ3VuZGVmaW5lZCdgLlxuICogVGhpcyBsZWFkcyB0byBhIHByb2JsZW0gd2hlbiBheGlvcyBwb3N0IGBGb3JtRGF0YWAgaW4gd2ViV29ya2VyXG4gKi9cbmNvbnN0IGhhc1N0YW5kYXJkQnJvd3NlcldlYldvcmtlckVudiA9ICgoKSA9PiB7XG4gIHJldHVybiAoXG4gICAgdHlwZW9mIFdvcmtlckdsb2JhbFNjb3BlICE9PSAndW5kZWZpbmVkJyAmJlxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bmRlZlxuICAgIHNlbGYgaW5zdGFuY2VvZiBXb3JrZXJHbG9iYWxTY29wZSAmJlxuICAgIHR5cGVvZiBzZWxmLmltcG9ydFNjcmlwdHMgPT09ICdmdW5jdGlvbidcbiAgKTtcbn0pKCk7XG5cbmNvbnN0IG9yaWdpbiA9IGhhc0Jyb3dzZXJFbnYgJiYgd2luZG93LmxvY2F0aW9uLmhyZWYgfHwgJ2h0dHA6Ly9sb2NhbGhvc3QnO1xuXG52YXIgdXRpbHMgPSAvKiNfX1BVUkVfXyovT2JqZWN0LmZyZWV6ZSh7XG4gIF9fcHJvdG9fXzogbnVsbCxcbiAgaGFzQnJvd3NlckVudjogaGFzQnJvd3NlckVudixcbiAgaGFzU3RhbmRhcmRCcm93c2VyV2ViV29ya2VyRW52OiBoYXNTdGFuZGFyZEJyb3dzZXJXZWJXb3JrZXJFbnYsXG4gIGhhc1N0YW5kYXJkQnJvd3NlckVudjogaGFzU3RhbmRhcmRCcm93c2VyRW52LFxuICBvcmlnaW46IG9yaWdpblxufSk7XG5cbnZhciBwbGF0Zm9ybSA9IHtcbiAgLi4udXRpbHMsXG4gIC4uLnBsYXRmb3JtJDFcbn07XG5cbmZ1bmN0aW9uIHRvVVJMRW5jb2RlZEZvcm0oZGF0YSwgb3B0aW9ucykge1xuICByZXR1cm4gdG9Gb3JtRGF0YShkYXRhLCBuZXcgcGxhdGZvcm0uY2xhc3Nlcy5VUkxTZWFyY2hQYXJhbXMoKSwgT2JqZWN0LmFzc2lnbih7XG4gICAgdmlzaXRvcjogZnVuY3Rpb24odmFsdWUsIGtleSwgcGF0aCwgaGVscGVycykge1xuICAgICAgaWYgKHBsYXRmb3JtLmlzTm9kZSAmJiB1dGlscyQxLmlzQnVmZmVyKHZhbHVlKSkge1xuICAgICAgICB0aGlzLmFwcGVuZChrZXksIHZhbHVlLnRvU3RyaW5nKCdiYXNlNjQnKSk7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGhlbHBlcnMuZGVmYXVsdFZpc2l0b3IuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICB9XG4gIH0sIG9wdGlvbnMpKTtcbn1cblxuLyoqXG4gKiBJdCB0YWtlcyBhIHN0cmluZyBsaWtlIGBmb29beF1beV1bel1gIGFuZCByZXR1cm5zIGFuIGFycmF5IGxpa2UgYFsnZm9vJywgJ3gnLCAneScsICd6J11cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gbmFtZSAtIFRoZSBuYW1lIG9mIHRoZSBwcm9wZXJ0eSB0byBnZXQuXG4gKlxuICogQHJldHVybnMgQW4gYXJyYXkgb2Ygc3RyaW5ncy5cbiAqL1xuZnVuY3Rpb24gcGFyc2VQcm9wUGF0aChuYW1lKSB7XG4gIC8vIGZvb1t4XVt5XVt6XVxuICAvLyBmb28ueC55LnpcbiAgLy8gZm9vLXgteS16XG4gIC8vIGZvbyB4IHkgelxuICByZXR1cm4gdXRpbHMkMS5tYXRjaEFsbCgvXFx3K3xcXFsoXFx3KildL2csIG5hbWUpLm1hcChtYXRjaCA9PiB7XG4gICAgcmV0dXJuIG1hdGNoWzBdID09PSAnW10nID8gJycgOiBtYXRjaFsxXSB8fCBtYXRjaFswXTtcbiAgfSk7XG59XG5cbi8qKlxuICogQ29udmVydCBhbiBhcnJheSB0byBhbiBvYmplY3QuXG4gKlxuICogQHBhcmFtIHtBcnJheTxhbnk+fSBhcnIgLSBUaGUgYXJyYXkgdG8gY29udmVydCB0byBhbiBvYmplY3QuXG4gKlxuICogQHJldHVybnMgQW4gb2JqZWN0IHdpdGggdGhlIHNhbWUga2V5cyBhbmQgdmFsdWVzIGFzIHRoZSBhcnJheS5cbiAqL1xuZnVuY3Rpb24gYXJyYXlUb09iamVjdChhcnIpIHtcbiAgY29uc3Qgb2JqID0ge307XG4gIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhhcnIpO1xuICBsZXQgaTtcbiAgY29uc3QgbGVuID0ga2V5cy5sZW5ndGg7XG4gIGxldCBrZXk7XG4gIGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykge1xuICAgIGtleSA9IGtleXNbaV07XG4gICAgb2JqW2tleV0gPSBhcnJba2V5XTtcbiAgfVxuICByZXR1cm4gb2JqO1xufVxuXG4vKipcbiAqIEl0IHRha2VzIGEgRm9ybURhdGEgb2JqZWN0IGFuZCByZXR1cm5zIGEgSmF2YVNjcmlwdCBvYmplY3RcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gZm9ybURhdGEgVGhlIEZvcm1EYXRhIG9iamVjdCB0byBjb252ZXJ0IHRvIEpTT04uXG4gKlxuICogQHJldHVybnMge09iamVjdDxzdHJpbmcsIGFueT4gfCBudWxsfSBUaGUgY29udmVydGVkIG9iamVjdC5cbiAqL1xuZnVuY3Rpb24gZm9ybURhdGFUb0pTT04oZm9ybURhdGEpIHtcbiAgZnVuY3Rpb24gYnVpbGRQYXRoKHBhdGgsIHZhbHVlLCB0YXJnZXQsIGluZGV4KSB7XG4gICAgbGV0IG5hbWUgPSBwYXRoW2luZGV4KytdO1xuXG4gICAgaWYgKG5hbWUgPT09ICdfX3Byb3RvX18nKSByZXR1cm4gdHJ1ZTtcblxuICAgIGNvbnN0IGlzTnVtZXJpY0tleSA9IE51bWJlci5pc0Zpbml0ZSgrbmFtZSk7XG4gICAgY29uc3QgaXNMYXN0ID0gaW5kZXggPj0gcGF0aC5sZW5ndGg7XG4gICAgbmFtZSA9ICFuYW1lICYmIHV0aWxzJDEuaXNBcnJheSh0YXJnZXQpID8gdGFyZ2V0Lmxlbmd0aCA6IG5hbWU7XG5cbiAgICBpZiAoaXNMYXN0KSB7XG4gICAgICBpZiAodXRpbHMkMS5oYXNPd25Qcm9wKHRhcmdldCwgbmFtZSkpIHtcbiAgICAgICAgdGFyZ2V0W25hbWVdID0gW3RhcmdldFtuYW1lXSwgdmFsdWVdO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGFyZ2V0W25hbWVdID0gdmFsdWU7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiAhaXNOdW1lcmljS2V5O1xuICAgIH1cblxuICAgIGlmICghdGFyZ2V0W25hbWVdIHx8ICF1dGlscyQxLmlzT2JqZWN0KHRhcmdldFtuYW1lXSkpIHtcbiAgICAgIHRhcmdldFtuYW1lXSA9IFtdO1xuICAgIH1cblxuICAgIGNvbnN0IHJlc3VsdCA9IGJ1aWxkUGF0aChwYXRoLCB2YWx1ZSwgdGFyZ2V0W25hbWVdLCBpbmRleCk7XG5cbiAgICBpZiAocmVzdWx0ICYmIHV0aWxzJDEuaXNBcnJheSh0YXJnZXRbbmFtZV0pKSB7XG4gICAgICB0YXJnZXRbbmFtZV0gPSBhcnJheVRvT2JqZWN0KHRhcmdldFtuYW1lXSk7XG4gICAgfVxuXG4gICAgcmV0dXJuICFpc051bWVyaWNLZXk7XG4gIH1cblxuICBpZiAodXRpbHMkMS5pc0Zvcm1EYXRhKGZvcm1EYXRhKSAmJiB1dGlscyQxLmlzRnVuY3Rpb24oZm9ybURhdGEuZW50cmllcykpIHtcbiAgICBjb25zdCBvYmogPSB7fTtcblxuICAgIHV0aWxzJDEuZm9yRWFjaEVudHJ5KGZvcm1EYXRhLCAobmFtZSwgdmFsdWUpID0+IHtcbiAgICAgIGJ1aWxkUGF0aChwYXJzZVByb3BQYXRoKG5hbWUpLCB2YWx1ZSwgb2JqLCAwKTtcbiAgICB9KTtcblxuICAgIHJldHVybiBvYmo7XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn1cblxuLyoqXG4gKiBJdCB0YWtlcyBhIHN0cmluZywgdHJpZXMgdG8gcGFyc2UgaXQsIGFuZCBpZiBpdCBmYWlscywgaXQgcmV0dXJucyB0aGUgc3RyaW5naWZpZWQgdmVyc2lvblxuICogb2YgdGhlIGlucHV0XG4gKlxuICogQHBhcmFtIHthbnl9IHJhd1ZhbHVlIC0gVGhlIHZhbHVlIHRvIGJlIHN0cmluZ2lmaWVkLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gcGFyc2VyIC0gQSBmdW5jdGlvbiB0aGF0IHBhcnNlcyBhIHN0cmluZyBpbnRvIGEgSmF2YVNjcmlwdCBvYmplY3QuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBlbmNvZGVyIC0gQSBmdW5jdGlvbiB0aGF0IHRha2VzIGEgdmFsdWUgYW5kIHJldHVybnMgYSBzdHJpbmcuXG4gKlxuICogQHJldHVybnMge3N0cmluZ30gQSBzdHJpbmdpZmllZCB2ZXJzaW9uIG9mIHRoZSByYXdWYWx1ZS5cbiAqL1xuZnVuY3Rpb24gc3RyaW5naWZ5U2FmZWx5KHJhd1ZhbHVlLCBwYXJzZXIsIGVuY29kZXIpIHtcbiAgaWYgKHV0aWxzJDEuaXNTdHJpbmcocmF3VmFsdWUpKSB7XG4gICAgdHJ5IHtcbiAgICAgIChwYXJzZXIgfHwgSlNPTi5wYXJzZSkocmF3VmFsdWUpO1xuICAgICAgcmV0dXJuIHV0aWxzJDEudHJpbShyYXdWYWx1ZSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgaWYgKGUubmFtZSAhPT0gJ1N5bnRheEVycm9yJykge1xuICAgICAgICB0aHJvdyBlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiAoZW5jb2RlciB8fCBKU09OLnN0cmluZ2lmeSkocmF3VmFsdWUpO1xufVxuXG5jb25zdCBkZWZhdWx0cyA9IHtcblxuICB0cmFuc2l0aW9uYWw6IHRyYW5zaXRpb25hbERlZmF1bHRzLFxuXG4gIGFkYXB0ZXI6IFsneGhyJywgJ2h0dHAnLCAnZmV0Y2gnXSxcblxuICB0cmFuc2Zvcm1SZXF1ZXN0OiBbZnVuY3Rpb24gdHJhbnNmb3JtUmVxdWVzdChkYXRhLCBoZWFkZXJzKSB7XG4gICAgY29uc3QgY29udGVudFR5cGUgPSBoZWFkZXJzLmdldENvbnRlbnRUeXBlKCkgfHwgJyc7XG4gICAgY29uc3QgaGFzSlNPTkNvbnRlbnRUeXBlID0gY29udGVudFR5cGUuaW5kZXhPZignYXBwbGljYXRpb24vanNvbicpID4gLTE7XG4gICAgY29uc3QgaXNPYmplY3RQYXlsb2FkID0gdXRpbHMkMS5pc09iamVjdChkYXRhKTtcblxuICAgIGlmIChpc09iamVjdFBheWxvYWQgJiYgdXRpbHMkMS5pc0hUTUxGb3JtKGRhdGEpKSB7XG4gICAgICBkYXRhID0gbmV3IEZvcm1EYXRhKGRhdGEpO1xuICAgIH1cblxuICAgIGNvbnN0IGlzRm9ybURhdGEgPSB1dGlscyQxLmlzRm9ybURhdGEoZGF0YSk7XG5cbiAgICBpZiAoaXNGb3JtRGF0YSkge1xuICAgICAgcmV0dXJuIGhhc0pTT05Db250ZW50VHlwZSA/IEpTT04uc3RyaW5naWZ5KGZvcm1EYXRhVG9KU09OKGRhdGEpKSA6IGRhdGE7XG4gICAgfVxuXG4gICAgaWYgKHV0aWxzJDEuaXNBcnJheUJ1ZmZlcihkYXRhKSB8fFxuICAgICAgdXRpbHMkMS5pc0J1ZmZlcihkYXRhKSB8fFxuICAgICAgdXRpbHMkMS5pc1N0cmVhbShkYXRhKSB8fFxuICAgICAgdXRpbHMkMS5pc0ZpbGUoZGF0YSkgfHxcbiAgICAgIHV0aWxzJDEuaXNCbG9iKGRhdGEpIHx8XG4gICAgICB1dGlscyQxLmlzUmVhZGFibGVTdHJlYW0oZGF0YSlcbiAgICApIHtcbiAgICAgIHJldHVybiBkYXRhO1xuICAgIH1cbiAgICBpZiAodXRpbHMkMS5pc0FycmF5QnVmZmVyVmlldyhkYXRhKSkge1xuICAgICAgcmV0dXJuIGRhdGEuYnVmZmVyO1xuICAgIH1cbiAgICBpZiAodXRpbHMkMS5pc1VSTFNlYXJjaFBhcmFtcyhkYXRhKSkge1xuICAgICAgaGVhZGVycy5zZXRDb250ZW50VHlwZSgnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkO2NoYXJzZXQ9dXRmLTgnLCBmYWxzZSk7XG4gICAgICByZXR1cm4gZGF0YS50b1N0cmluZygpO1xuICAgIH1cblxuICAgIGxldCBpc0ZpbGVMaXN0O1xuXG4gICAgaWYgKGlzT2JqZWN0UGF5bG9hZCkge1xuICAgICAgaWYgKGNvbnRlbnRUeXBlLmluZGV4T2YoJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCcpID4gLTEpIHtcbiAgICAgICAgcmV0dXJuIHRvVVJMRW5jb2RlZEZvcm0oZGF0YSwgdGhpcy5mb3JtU2VyaWFsaXplcikudG9TdHJpbmcoKTtcbiAgICAgIH1cblxuICAgICAgaWYgKChpc0ZpbGVMaXN0ID0gdXRpbHMkMS5pc0ZpbGVMaXN0KGRhdGEpKSB8fCBjb250ZW50VHlwZS5pbmRleE9mKCdtdWx0aXBhcnQvZm9ybS1kYXRhJykgPiAtMSkge1xuICAgICAgICBjb25zdCBfRm9ybURhdGEgPSB0aGlzLmVudiAmJiB0aGlzLmVudi5Gb3JtRGF0YTtcblxuICAgICAgICByZXR1cm4gdG9Gb3JtRGF0YShcbiAgICAgICAgICBpc0ZpbGVMaXN0ID8geydmaWxlc1tdJzogZGF0YX0gOiBkYXRhLFxuICAgICAgICAgIF9Gb3JtRGF0YSAmJiBuZXcgX0Zvcm1EYXRhKCksXG4gICAgICAgICAgdGhpcy5mb3JtU2VyaWFsaXplclxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChpc09iamVjdFBheWxvYWQgfHwgaGFzSlNPTkNvbnRlbnRUeXBlICkge1xuICAgICAgaGVhZGVycy5zZXRDb250ZW50VHlwZSgnYXBwbGljYXRpb24vanNvbicsIGZhbHNlKTtcbiAgICAgIHJldHVybiBzdHJpbmdpZnlTYWZlbHkoZGF0YSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGRhdGE7XG4gIH1dLFxuXG4gIHRyYW5zZm9ybVJlc3BvbnNlOiBbZnVuY3Rpb24gdHJhbnNmb3JtUmVzcG9uc2UoZGF0YSkge1xuICAgIGNvbnN0IHRyYW5zaXRpb25hbCA9IHRoaXMudHJhbnNpdGlvbmFsIHx8IGRlZmF1bHRzLnRyYW5zaXRpb25hbDtcbiAgICBjb25zdCBmb3JjZWRKU09OUGFyc2luZyA9IHRyYW5zaXRpb25hbCAmJiB0cmFuc2l0aW9uYWwuZm9yY2VkSlNPTlBhcnNpbmc7XG4gICAgY29uc3QgSlNPTlJlcXVlc3RlZCA9IHRoaXMucmVzcG9uc2VUeXBlID09PSAnanNvbic7XG5cbiAgICBpZiAodXRpbHMkMS5pc1Jlc3BvbnNlKGRhdGEpIHx8IHV0aWxzJDEuaXNSZWFkYWJsZVN0cmVhbShkYXRhKSkge1xuICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfVxuXG4gICAgaWYgKGRhdGEgJiYgdXRpbHMkMS5pc1N0cmluZyhkYXRhKSAmJiAoKGZvcmNlZEpTT05QYXJzaW5nICYmICF0aGlzLnJlc3BvbnNlVHlwZSkgfHwgSlNPTlJlcXVlc3RlZCkpIHtcbiAgICAgIGNvbnN0IHNpbGVudEpTT05QYXJzaW5nID0gdHJhbnNpdGlvbmFsICYmIHRyYW5zaXRpb25hbC5zaWxlbnRKU09OUGFyc2luZztcbiAgICAgIGNvbnN0IHN0cmljdEpTT05QYXJzaW5nID0gIXNpbGVudEpTT05QYXJzaW5nICYmIEpTT05SZXF1ZXN0ZWQ7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiBKU09OLnBhcnNlKGRhdGEpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBpZiAoc3RyaWN0SlNPTlBhcnNpbmcpIHtcbiAgICAgICAgICBpZiAoZS5uYW1lID09PSAnU3ludGF4RXJyb3InKSB7XG4gICAgICAgICAgICB0aHJvdyBBeGlvc0Vycm9yLmZyb20oZSwgQXhpb3NFcnJvci5FUlJfQkFEX1JFU1BPTlNFLCB0aGlzLCBudWxsLCB0aGlzLnJlc3BvbnNlKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBkYXRhO1xuICB9XSxcblxuICAvKipcbiAgICogQSB0aW1lb3V0IGluIG1pbGxpc2Vjb25kcyB0byBhYm9ydCBhIHJlcXVlc3QuIElmIHNldCB0byAwIChkZWZhdWx0KSBhXG4gICAqIHRpbWVvdXQgaXMgbm90IGNyZWF0ZWQuXG4gICAqL1xuICB0aW1lb3V0OiAwLFxuXG4gIHhzcmZDb29raWVOYW1lOiAnWFNSRi1UT0tFTicsXG4gIHhzcmZIZWFkZXJOYW1lOiAnWC1YU1JGLVRPS0VOJyxcblxuICBtYXhDb250ZW50TGVuZ3RoOiAtMSxcbiAgbWF4Qm9keUxlbmd0aDogLTEsXG5cbiAgZW52OiB7XG4gICAgRm9ybURhdGE6IHBsYXRmb3JtLmNsYXNzZXMuRm9ybURhdGEsXG4gICAgQmxvYjogcGxhdGZvcm0uY2xhc3Nlcy5CbG9iXG4gIH0sXG5cbiAgdmFsaWRhdGVTdGF0dXM6IGZ1bmN0aW9uIHZhbGlkYXRlU3RhdHVzKHN0YXR1cykge1xuICAgIHJldHVybiBzdGF0dXMgPj0gMjAwICYmIHN0YXR1cyA8IDMwMDtcbiAgfSxcblxuICBoZWFkZXJzOiB7XG4gICAgY29tbW9uOiB7XG4gICAgICAnQWNjZXB0JzogJ2FwcGxpY2F0aW9uL2pzb24sIHRleHQvcGxhaW4sICovKicsXG4gICAgICAnQ29udGVudC1UeXBlJzogdW5kZWZpbmVkXG4gICAgfVxuICB9XG59O1xuXG51dGlscyQxLmZvckVhY2goWydkZWxldGUnLCAnZ2V0JywgJ2hlYWQnLCAncG9zdCcsICdwdXQnLCAncGF0Y2gnXSwgKG1ldGhvZCkgPT4ge1xuICBkZWZhdWx0cy5oZWFkZXJzW21ldGhvZF0gPSB7fTtcbn0pO1xuXG52YXIgZGVmYXVsdHMkMSA9IGRlZmF1bHRzO1xuXG4vLyBSYXdBeGlvc0hlYWRlcnMgd2hvc2UgZHVwbGljYXRlcyBhcmUgaWdub3JlZCBieSBub2RlXG4vLyBjLmYuIGh0dHBzOi8vbm9kZWpzLm9yZy9hcGkvaHR0cC5odG1sI2h0dHBfbWVzc2FnZV9oZWFkZXJzXG5jb25zdCBpZ25vcmVEdXBsaWNhdGVPZiA9IHV0aWxzJDEudG9PYmplY3RTZXQoW1xuICAnYWdlJywgJ2F1dGhvcml6YXRpb24nLCAnY29udGVudC1sZW5ndGgnLCAnY29udGVudC10eXBlJywgJ2V0YWcnLFxuICAnZXhwaXJlcycsICdmcm9tJywgJ2hvc3QnLCAnaWYtbW9kaWZpZWQtc2luY2UnLCAnaWYtdW5tb2RpZmllZC1zaW5jZScsXG4gICdsYXN0LW1vZGlmaWVkJywgJ2xvY2F0aW9uJywgJ21heC1mb3J3YXJkcycsICdwcm94eS1hdXRob3JpemF0aW9uJyxcbiAgJ3JlZmVyZXInLCAncmV0cnktYWZ0ZXInLCAndXNlci1hZ2VudCdcbl0pO1xuXG4vKipcbiAqIFBhcnNlIGhlYWRlcnMgaW50byBhbiBvYmplY3RcbiAqXG4gKiBgYGBcbiAqIERhdGU6IFdlZCwgMjcgQXVnIDIwMTQgMDg6NTg6NDkgR01UXG4gKiBDb250ZW50LVR5cGU6IGFwcGxpY2F0aW9uL2pzb25cbiAqIENvbm5lY3Rpb246IGtlZXAtYWxpdmVcbiAqIFRyYW5zZmVyLUVuY29kaW5nOiBjaHVua2VkXG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gcmF3SGVhZGVycyBIZWFkZXJzIG5lZWRpbmcgdG8gYmUgcGFyc2VkXG4gKlxuICogQHJldHVybnMge09iamVjdH0gSGVhZGVycyBwYXJzZWQgaW50byBhbiBvYmplY3RcbiAqL1xudmFyIHBhcnNlSGVhZGVycyA9IHJhd0hlYWRlcnMgPT4ge1xuICBjb25zdCBwYXJzZWQgPSB7fTtcbiAgbGV0IGtleTtcbiAgbGV0IHZhbDtcbiAgbGV0IGk7XG5cbiAgcmF3SGVhZGVycyAmJiByYXdIZWFkZXJzLnNwbGl0KCdcXG4nKS5mb3JFYWNoKGZ1bmN0aW9uIHBhcnNlcihsaW5lKSB7XG4gICAgaSA9IGxpbmUuaW5kZXhPZignOicpO1xuICAgIGtleSA9IGxpbmUuc3Vic3RyaW5nKDAsIGkpLnRyaW0oKS50b0xvd2VyQ2FzZSgpO1xuICAgIHZhbCA9IGxpbmUuc3Vic3RyaW5nKGkgKyAxKS50cmltKCk7XG5cbiAgICBpZiAoIWtleSB8fCAocGFyc2VkW2tleV0gJiYgaWdub3JlRHVwbGljYXRlT2Zba2V5XSkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoa2V5ID09PSAnc2V0LWNvb2tpZScpIHtcbiAgICAgIGlmIChwYXJzZWRba2V5XSkge1xuICAgICAgICBwYXJzZWRba2V5XS5wdXNoKHZhbCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwYXJzZWRba2V5XSA9IFt2YWxdO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBwYXJzZWRba2V5XSA9IHBhcnNlZFtrZXldID8gcGFyc2VkW2tleV0gKyAnLCAnICsgdmFsIDogdmFsO1xuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIHBhcnNlZDtcbn07XG5cbmNvbnN0ICRpbnRlcm5hbHMgPSBTeW1ib2woJ2ludGVybmFscycpO1xuXG5mdW5jdGlvbiBub3JtYWxpemVIZWFkZXIoaGVhZGVyKSB7XG4gIHJldHVybiBoZWFkZXIgJiYgU3RyaW5nKGhlYWRlcikudHJpbSgpLnRvTG93ZXJDYXNlKCk7XG59XG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZVZhbHVlKHZhbHVlKSB7XG4gIGlmICh2YWx1ZSA9PT0gZmFsc2UgfHwgdmFsdWUgPT0gbnVsbCkge1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuXG4gIHJldHVybiB1dGlscyQxLmlzQXJyYXkodmFsdWUpID8gdmFsdWUubWFwKG5vcm1hbGl6ZVZhbHVlKSA6IFN0cmluZyh2YWx1ZSk7XG59XG5cbmZ1bmN0aW9uIHBhcnNlVG9rZW5zKHN0cikge1xuICBjb25zdCB0b2tlbnMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICBjb25zdCB0b2tlbnNSRSA9IC8oW15cXHMsOz1dKylcXHMqKD86PVxccyooW14sO10rKSk/L2c7XG4gIGxldCBtYXRjaDtcblxuICB3aGlsZSAoKG1hdGNoID0gdG9rZW5zUkUuZXhlYyhzdHIpKSkge1xuICAgIHRva2Vuc1ttYXRjaFsxXV0gPSBtYXRjaFsyXTtcbiAgfVxuXG4gIHJldHVybiB0b2tlbnM7XG59XG5cbmNvbnN0IGlzVmFsaWRIZWFkZXJOYW1lID0gKHN0cikgPT4gL15bLV9hLXpBLVowLTleYHx+LCEjJCUmJyorLl0rJC8udGVzdChzdHIudHJpbSgpKTtcblxuZnVuY3Rpb24gbWF0Y2hIZWFkZXJWYWx1ZShjb250ZXh0LCB2YWx1ZSwgaGVhZGVyLCBmaWx0ZXIsIGlzSGVhZGVyTmFtZUZpbHRlcikge1xuICBpZiAodXRpbHMkMS5pc0Z1bmN0aW9uKGZpbHRlcikpIHtcbiAgICByZXR1cm4gZmlsdGVyLmNhbGwodGhpcywgdmFsdWUsIGhlYWRlcik7XG4gIH1cblxuICBpZiAoaXNIZWFkZXJOYW1lRmlsdGVyKSB7XG4gICAgdmFsdWUgPSBoZWFkZXI7XG4gIH1cblxuICBpZiAoIXV0aWxzJDEuaXNTdHJpbmcodmFsdWUpKSByZXR1cm47XG5cbiAgaWYgKHV0aWxzJDEuaXNTdHJpbmcoZmlsdGVyKSkge1xuICAgIHJldHVybiB2YWx1ZS5pbmRleE9mKGZpbHRlcikgIT09IC0xO1xuICB9XG5cbiAgaWYgKHV0aWxzJDEuaXNSZWdFeHAoZmlsdGVyKSkge1xuICAgIHJldHVybiBmaWx0ZXIudGVzdCh2YWx1ZSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gZm9ybWF0SGVhZGVyKGhlYWRlcikge1xuICByZXR1cm4gaGVhZGVyLnRyaW0oKVxuICAgIC50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoLyhbYS16XFxkXSkoXFx3KikvZywgKHcsIGNoYXIsIHN0cikgPT4ge1xuICAgICAgcmV0dXJuIGNoYXIudG9VcHBlckNhc2UoKSArIHN0cjtcbiAgICB9KTtcbn1cblxuZnVuY3Rpb24gYnVpbGRBY2Nlc3NvcnMob2JqLCBoZWFkZXIpIHtcbiAgY29uc3QgYWNjZXNzb3JOYW1lID0gdXRpbHMkMS50b0NhbWVsQ2FzZSgnICcgKyBoZWFkZXIpO1xuXG4gIFsnZ2V0JywgJ3NldCcsICdoYXMnXS5mb3JFYWNoKG1ldGhvZE5hbWUgPT4ge1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIG1ldGhvZE5hbWUgKyBhY2Nlc3Nvck5hbWUsIHtcbiAgICAgIHZhbHVlOiBmdW5jdGlvbihhcmcxLCBhcmcyLCBhcmczKSB7XG4gICAgICAgIHJldHVybiB0aGlzW21ldGhvZE5hbWVdLmNhbGwodGhpcywgaGVhZGVyLCBhcmcxLCBhcmcyLCBhcmczKTtcbiAgICAgIH0sXG4gICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgfSk7XG59XG5cbmNsYXNzIEF4aW9zSGVhZGVycyB7XG4gIGNvbnN0cnVjdG9yKGhlYWRlcnMpIHtcbiAgICBoZWFkZXJzICYmIHRoaXMuc2V0KGhlYWRlcnMpO1xuICB9XG5cbiAgc2V0KGhlYWRlciwgdmFsdWVPclJld3JpdGUsIHJld3JpdGUpIHtcbiAgICBjb25zdCBzZWxmID0gdGhpcztcblxuICAgIGZ1bmN0aW9uIHNldEhlYWRlcihfdmFsdWUsIF9oZWFkZXIsIF9yZXdyaXRlKSB7XG4gICAgICBjb25zdCBsSGVhZGVyID0gbm9ybWFsaXplSGVhZGVyKF9oZWFkZXIpO1xuXG4gICAgICBpZiAoIWxIZWFkZXIpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdoZWFkZXIgbmFtZSBtdXN0IGJlIGEgbm9uLWVtcHR5IHN0cmluZycpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBrZXkgPSB1dGlscyQxLmZpbmRLZXkoc2VsZiwgbEhlYWRlcik7XG5cbiAgICAgIGlmKCFrZXkgfHwgc2VsZltrZXldID09PSB1bmRlZmluZWQgfHwgX3Jld3JpdGUgPT09IHRydWUgfHwgKF9yZXdyaXRlID09PSB1bmRlZmluZWQgJiYgc2VsZltrZXldICE9PSBmYWxzZSkpIHtcbiAgICAgICAgc2VsZltrZXkgfHwgX2hlYWRlcl0gPSBub3JtYWxpemVWYWx1ZShfdmFsdWUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IHNldEhlYWRlcnMgPSAoaGVhZGVycywgX3Jld3JpdGUpID0+XG4gICAgICB1dGlscyQxLmZvckVhY2goaGVhZGVycywgKF92YWx1ZSwgX2hlYWRlcikgPT4gc2V0SGVhZGVyKF92YWx1ZSwgX2hlYWRlciwgX3Jld3JpdGUpKTtcblxuICAgIGlmICh1dGlscyQxLmlzUGxhaW5PYmplY3QoaGVhZGVyKSB8fCBoZWFkZXIgaW5zdGFuY2VvZiB0aGlzLmNvbnN0cnVjdG9yKSB7XG4gICAgICBzZXRIZWFkZXJzKGhlYWRlciwgdmFsdWVPclJld3JpdGUpO1xuICAgIH0gZWxzZSBpZih1dGlscyQxLmlzU3RyaW5nKGhlYWRlcikgJiYgKGhlYWRlciA9IGhlYWRlci50cmltKCkpICYmICFpc1ZhbGlkSGVhZGVyTmFtZShoZWFkZXIpKSB7XG4gICAgICBzZXRIZWFkZXJzKHBhcnNlSGVhZGVycyhoZWFkZXIpLCB2YWx1ZU9yUmV3cml0ZSk7XG4gICAgfSBlbHNlIGlmICh1dGlscyQxLmlzSGVhZGVycyhoZWFkZXIpKSB7XG4gICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBoZWFkZXIuZW50cmllcygpKSB7XG4gICAgICAgIHNldEhlYWRlcih2YWx1ZSwga2V5LCByZXdyaXRlKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaGVhZGVyICE9IG51bGwgJiYgc2V0SGVhZGVyKHZhbHVlT3JSZXdyaXRlLCBoZWFkZXIsIHJld3JpdGUpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgZ2V0KGhlYWRlciwgcGFyc2VyKSB7XG4gICAgaGVhZGVyID0gbm9ybWFsaXplSGVhZGVyKGhlYWRlcik7XG5cbiAgICBpZiAoaGVhZGVyKSB7XG4gICAgICBjb25zdCBrZXkgPSB1dGlscyQxLmZpbmRLZXkodGhpcywgaGVhZGVyKTtcblxuICAgICAgaWYgKGtleSkge1xuICAgICAgICBjb25zdCB2YWx1ZSA9IHRoaXNba2V5XTtcblxuICAgICAgICBpZiAoIXBhcnNlcikge1xuICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChwYXJzZXIgPT09IHRydWUpIHtcbiAgICAgICAgICByZXR1cm4gcGFyc2VUb2tlbnModmFsdWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHV0aWxzJDEuaXNGdW5jdGlvbihwYXJzZXIpKSB7XG4gICAgICAgICAgcmV0dXJuIHBhcnNlci5jYWxsKHRoaXMsIHZhbHVlLCBrZXkpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHV0aWxzJDEuaXNSZWdFeHAocGFyc2VyKSkge1xuICAgICAgICAgIHJldHVybiBwYXJzZXIuZXhlYyh2YWx1ZSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdwYXJzZXIgbXVzdCBiZSBib29sZWFufHJlZ2V4cHxmdW5jdGlvbicpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGhhcyhoZWFkZXIsIG1hdGNoZXIpIHtcbiAgICBoZWFkZXIgPSBub3JtYWxpemVIZWFkZXIoaGVhZGVyKTtcblxuICAgIGlmIChoZWFkZXIpIHtcbiAgICAgIGNvbnN0IGtleSA9IHV0aWxzJDEuZmluZEtleSh0aGlzLCBoZWFkZXIpO1xuXG4gICAgICByZXR1cm4gISEoa2V5ICYmIHRoaXNba2V5XSAhPT0gdW5kZWZpbmVkICYmICghbWF0Y2hlciB8fCBtYXRjaEhlYWRlclZhbHVlKHRoaXMsIHRoaXNba2V5XSwga2V5LCBtYXRjaGVyKSkpO1xuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGRlbGV0ZShoZWFkZXIsIG1hdGNoZXIpIHtcbiAgICBjb25zdCBzZWxmID0gdGhpcztcbiAgICBsZXQgZGVsZXRlZCA9IGZhbHNlO1xuXG4gICAgZnVuY3Rpb24gZGVsZXRlSGVhZGVyKF9oZWFkZXIpIHtcbiAgICAgIF9oZWFkZXIgPSBub3JtYWxpemVIZWFkZXIoX2hlYWRlcik7XG5cbiAgICAgIGlmIChfaGVhZGVyKSB7XG4gICAgICAgIGNvbnN0IGtleSA9IHV0aWxzJDEuZmluZEtleShzZWxmLCBfaGVhZGVyKTtcblxuICAgICAgICBpZiAoa2V5ICYmICghbWF0Y2hlciB8fCBtYXRjaEhlYWRlclZhbHVlKHNlbGYsIHNlbGZba2V5XSwga2V5LCBtYXRjaGVyKSkpIHtcbiAgICAgICAgICBkZWxldGUgc2VsZltrZXldO1xuXG4gICAgICAgICAgZGVsZXRlZCA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodXRpbHMkMS5pc0FycmF5KGhlYWRlcikpIHtcbiAgICAgIGhlYWRlci5mb3JFYWNoKGRlbGV0ZUhlYWRlcik7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRlbGV0ZUhlYWRlcihoZWFkZXIpO1xuICAgIH1cblxuICAgIHJldHVybiBkZWxldGVkO1xuICB9XG5cbiAgY2xlYXIobWF0Y2hlcikge1xuICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyh0aGlzKTtcbiAgICBsZXQgaSA9IGtleXMubGVuZ3RoO1xuICAgIGxldCBkZWxldGVkID0gZmFsc2U7XG5cbiAgICB3aGlsZSAoaS0tKSB7XG4gICAgICBjb25zdCBrZXkgPSBrZXlzW2ldO1xuICAgICAgaWYoIW1hdGNoZXIgfHwgbWF0Y2hIZWFkZXJWYWx1ZSh0aGlzLCB0aGlzW2tleV0sIGtleSwgbWF0Y2hlciwgdHJ1ZSkpIHtcbiAgICAgICAgZGVsZXRlIHRoaXNba2V5XTtcbiAgICAgICAgZGVsZXRlZCA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGRlbGV0ZWQ7XG4gIH1cblxuICBub3JtYWxpemUoZm9ybWF0KSB7XG4gICAgY29uc3Qgc2VsZiA9IHRoaXM7XG4gICAgY29uc3QgaGVhZGVycyA9IHt9O1xuXG4gICAgdXRpbHMkMS5mb3JFYWNoKHRoaXMsICh2YWx1ZSwgaGVhZGVyKSA9PiB7XG4gICAgICBjb25zdCBrZXkgPSB1dGlscyQxLmZpbmRLZXkoaGVhZGVycywgaGVhZGVyKTtcblxuICAgICAgaWYgKGtleSkge1xuICAgICAgICBzZWxmW2tleV0gPSBub3JtYWxpemVWYWx1ZSh2YWx1ZSk7XG4gICAgICAgIGRlbGV0ZSBzZWxmW2hlYWRlcl07XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgY29uc3Qgbm9ybWFsaXplZCA9IGZvcm1hdCA/IGZvcm1hdEhlYWRlcihoZWFkZXIpIDogU3RyaW5nKGhlYWRlcikudHJpbSgpO1xuXG4gICAgICBpZiAobm9ybWFsaXplZCAhPT0gaGVhZGVyKSB7XG4gICAgICAgIGRlbGV0ZSBzZWxmW2hlYWRlcl07XG4gICAgICB9XG5cbiAgICAgIHNlbGZbbm9ybWFsaXplZF0gPSBub3JtYWxpemVWYWx1ZSh2YWx1ZSk7XG5cbiAgICAgIGhlYWRlcnNbbm9ybWFsaXplZF0gPSB0cnVlO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBjb25jYXQoLi4udGFyZ2V0cykge1xuICAgIHJldHVybiB0aGlzLmNvbnN0cnVjdG9yLmNvbmNhdCh0aGlzLCAuLi50YXJnZXRzKTtcbiAgfVxuXG4gIHRvSlNPTihhc1N0cmluZ3MpIHtcbiAgICBjb25zdCBvYmogPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuXG4gICAgdXRpbHMkMS5mb3JFYWNoKHRoaXMsICh2YWx1ZSwgaGVhZGVyKSA9PiB7XG4gICAgICB2YWx1ZSAhPSBudWxsICYmIHZhbHVlICE9PSBmYWxzZSAmJiAob2JqW2hlYWRlcl0gPSBhc1N0cmluZ3MgJiYgdXRpbHMkMS5pc0FycmF5KHZhbHVlKSA/IHZhbHVlLmpvaW4oJywgJykgOiB2YWx1ZSk7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gb2JqO1xuICB9XG5cbiAgW1N5bWJvbC5pdGVyYXRvcl0oKSB7XG4gICAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHRoaXMudG9KU09OKCkpW1N5bWJvbC5pdGVyYXRvcl0oKTtcbiAgfVxuXG4gIHRvU3RyaW5nKCkge1xuICAgIHJldHVybiBPYmplY3QuZW50cmllcyh0aGlzLnRvSlNPTigpKS5tYXAoKFtoZWFkZXIsIHZhbHVlXSkgPT4gaGVhZGVyICsgJzogJyArIHZhbHVlKS5qb2luKCdcXG4nKTtcbiAgfVxuXG4gIGdldCBbU3ltYm9sLnRvU3RyaW5nVGFnXSgpIHtcbiAgICByZXR1cm4gJ0F4aW9zSGVhZGVycyc7XG4gIH1cblxuICBzdGF0aWMgZnJvbSh0aGluZykge1xuICAgIHJldHVybiB0aGluZyBpbnN0YW5jZW9mIHRoaXMgPyB0aGluZyA6IG5ldyB0aGlzKHRoaW5nKTtcbiAgfVxuXG4gIHN0YXRpYyBjb25jYXQoZmlyc3QsIC4uLnRhcmdldHMpIHtcbiAgICBjb25zdCBjb21wdXRlZCA9IG5ldyB0aGlzKGZpcnN0KTtcblxuICAgIHRhcmdldHMuZm9yRWFjaCgodGFyZ2V0KSA9PiBjb21wdXRlZC5zZXQodGFyZ2V0KSk7XG5cbiAgICByZXR1cm4gY29tcHV0ZWQ7XG4gIH1cblxuICBzdGF0aWMgYWNjZXNzb3IoaGVhZGVyKSB7XG4gICAgY29uc3QgaW50ZXJuYWxzID0gdGhpc1skaW50ZXJuYWxzXSA9ICh0aGlzWyRpbnRlcm5hbHNdID0ge1xuICAgICAgYWNjZXNzb3JzOiB7fVxuICAgIH0pO1xuXG4gICAgY29uc3QgYWNjZXNzb3JzID0gaW50ZXJuYWxzLmFjY2Vzc29ycztcbiAgICBjb25zdCBwcm90b3R5cGUgPSB0aGlzLnByb3RvdHlwZTtcblxuICAgIGZ1bmN0aW9uIGRlZmluZUFjY2Vzc29yKF9oZWFkZXIpIHtcbiAgICAgIGNvbnN0IGxIZWFkZXIgPSBub3JtYWxpemVIZWFkZXIoX2hlYWRlcik7XG5cbiAgICAgIGlmICghYWNjZXNzb3JzW2xIZWFkZXJdKSB7XG4gICAgICAgIGJ1aWxkQWNjZXNzb3JzKHByb3RvdHlwZSwgX2hlYWRlcik7XG4gICAgICAgIGFjY2Vzc29yc1tsSGVhZGVyXSA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdXRpbHMkMS5pc0FycmF5KGhlYWRlcikgPyBoZWFkZXIuZm9yRWFjaChkZWZpbmVBY2Nlc3NvcikgOiBkZWZpbmVBY2Nlc3NvcihoZWFkZXIpO1xuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cbn1cblxuQXhpb3NIZWFkZXJzLmFjY2Vzc29yKFsnQ29udGVudC1UeXBlJywgJ0NvbnRlbnQtTGVuZ3RoJywgJ0FjY2VwdCcsICdBY2NlcHQtRW5jb2RpbmcnLCAnVXNlci1BZ2VudCcsICdBdXRob3JpemF0aW9uJ10pO1xuXG4vLyByZXNlcnZlZCBuYW1lcyBob3RmaXhcbnV0aWxzJDEucmVkdWNlRGVzY3JpcHRvcnMoQXhpb3NIZWFkZXJzLnByb3RvdHlwZSwgKHt2YWx1ZX0sIGtleSkgPT4ge1xuICBsZXQgbWFwcGVkID0ga2V5WzBdLnRvVXBwZXJDYXNlKCkgKyBrZXkuc2xpY2UoMSk7IC8vIG1hcCBgc2V0YCA9PiBgU2V0YFxuICByZXR1cm4ge1xuICAgIGdldDogKCkgPT4gdmFsdWUsXG4gICAgc2V0KGhlYWRlclZhbHVlKSB7XG4gICAgICB0aGlzW21hcHBlZF0gPSBoZWFkZXJWYWx1ZTtcbiAgICB9XG4gIH1cbn0pO1xuXG51dGlscyQxLmZyZWV6ZU1ldGhvZHMoQXhpb3NIZWFkZXJzKTtcblxudmFyIEF4aW9zSGVhZGVycyQxID0gQXhpb3NIZWFkZXJzO1xuXG4vKipcbiAqIFRyYW5zZm9ybSB0aGUgZGF0YSBmb3IgYSByZXF1ZXN0IG9yIGEgcmVzcG9uc2VcbiAqXG4gKiBAcGFyYW0ge0FycmF5fEZ1bmN0aW9ufSBmbnMgQSBzaW5nbGUgZnVuY3Rpb24gb3IgQXJyYXkgb2YgZnVuY3Rpb25zXG4gKiBAcGFyYW0gez9PYmplY3R9IHJlc3BvbnNlIFRoZSByZXNwb25zZSBvYmplY3RcbiAqXG4gKiBAcmV0dXJucyB7Kn0gVGhlIHJlc3VsdGluZyB0cmFuc2Zvcm1lZCBkYXRhXG4gKi9cbmZ1bmN0aW9uIHRyYW5zZm9ybURhdGEoZm5zLCByZXNwb25zZSkge1xuICBjb25zdCBjb25maWcgPSB0aGlzIHx8IGRlZmF1bHRzJDE7XG4gIGNvbnN0IGNvbnRleHQgPSByZXNwb25zZSB8fCBjb25maWc7XG4gIGNvbnN0IGhlYWRlcnMgPSBBeGlvc0hlYWRlcnMkMS5mcm9tKGNvbnRleHQuaGVhZGVycyk7XG4gIGxldCBkYXRhID0gY29udGV4dC5kYXRhO1xuXG4gIHV0aWxzJDEuZm9yRWFjaChmbnMsIGZ1bmN0aW9uIHRyYW5zZm9ybShmbikge1xuICAgIGRhdGEgPSBmbi5jYWxsKGNvbmZpZywgZGF0YSwgaGVhZGVycy5ub3JtYWxpemUoKSwgcmVzcG9uc2UgPyByZXNwb25zZS5zdGF0dXMgOiB1bmRlZmluZWQpO1xuICB9KTtcblxuICBoZWFkZXJzLm5vcm1hbGl6ZSgpO1xuXG4gIHJldHVybiBkYXRhO1xufVxuXG5mdW5jdGlvbiBpc0NhbmNlbCh2YWx1ZSkge1xuICByZXR1cm4gISEodmFsdWUgJiYgdmFsdWUuX19DQU5DRUxfXyk7XG59XG5cbi8qKlxuICogQSBgQ2FuY2VsZWRFcnJvcmAgaXMgYW4gb2JqZWN0IHRoYXQgaXMgdGhyb3duIHdoZW4gYW4gb3BlcmF0aW9uIGlzIGNhbmNlbGVkLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nPX0gbWVzc2FnZSBUaGUgbWVzc2FnZS5cbiAqIEBwYXJhbSB7T2JqZWN0PX0gY29uZmlnIFRoZSBjb25maWcuXG4gKiBAcGFyYW0ge09iamVjdD19IHJlcXVlc3QgVGhlIHJlcXVlc3QuXG4gKlxuICogQHJldHVybnMge0NhbmNlbGVkRXJyb3J9IFRoZSBjcmVhdGVkIGVycm9yLlxuICovXG5mdW5jdGlvbiBDYW5jZWxlZEVycm9yKG1lc3NhZ2UsIGNvbmZpZywgcmVxdWVzdCkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tZXEtbnVsbCxlcWVxZXFcbiAgQXhpb3NFcnJvci5jYWxsKHRoaXMsIG1lc3NhZ2UgPT0gbnVsbCA/ICdjYW5jZWxlZCcgOiBtZXNzYWdlLCBBeGlvc0Vycm9yLkVSUl9DQU5DRUxFRCwgY29uZmlnLCByZXF1ZXN0KTtcbiAgdGhpcy5uYW1lID0gJ0NhbmNlbGVkRXJyb3InO1xufVxuXG51dGlscyQxLmluaGVyaXRzKENhbmNlbGVkRXJyb3IsIEF4aW9zRXJyb3IsIHtcbiAgX19DQU5DRUxfXzogdHJ1ZVxufSk7XG5cbi8qKlxuICogUmVzb2x2ZSBvciByZWplY3QgYSBQcm9taXNlIGJhc2VkIG9uIHJlc3BvbnNlIHN0YXR1cy5cbiAqXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSByZXNvbHZlIEEgZnVuY3Rpb24gdGhhdCByZXNvbHZlcyB0aGUgcHJvbWlzZS5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IHJlamVjdCBBIGZ1bmN0aW9uIHRoYXQgcmVqZWN0cyB0aGUgcHJvbWlzZS5cbiAqIEBwYXJhbSB7b2JqZWN0fSByZXNwb25zZSBUaGUgcmVzcG9uc2UuXG4gKlxuICogQHJldHVybnMge29iamVjdH0gVGhlIHJlc3BvbnNlLlxuICovXG5mdW5jdGlvbiBzZXR0bGUocmVzb2x2ZSwgcmVqZWN0LCByZXNwb25zZSkge1xuICBjb25zdCB2YWxpZGF0ZVN0YXR1cyA9IHJlc3BvbnNlLmNvbmZpZy52YWxpZGF0ZVN0YXR1cztcbiAgaWYgKCFyZXNwb25zZS5zdGF0dXMgfHwgIXZhbGlkYXRlU3RhdHVzIHx8IHZhbGlkYXRlU3RhdHVzKHJlc3BvbnNlLnN0YXR1cykpIHtcbiAgICByZXNvbHZlKHJlc3BvbnNlKTtcbiAgfSBlbHNlIHtcbiAgICByZWplY3QobmV3IEF4aW9zRXJyb3IoXG4gICAgICAnUmVxdWVzdCBmYWlsZWQgd2l0aCBzdGF0dXMgY29kZSAnICsgcmVzcG9uc2Uuc3RhdHVzLFxuICAgICAgW0F4aW9zRXJyb3IuRVJSX0JBRF9SRVFVRVNULCBBeGlvc0Vycm9yLkVSUl9CQURfUkVTUE9OU0VdW01hdGguZmxvb3IocmVzcG9uc2Uuc3RhdHVzIC8gMTAwKSAtIDRdLFxuICAgICAgcmVzcG9uc2UuY29uZmlnLFxuICAgICAgcmVzcG9uc2UucmVxdWVzdCxcbiAgICAgIHJlc3BvbnNlXG4gICAgKSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gcGFyc2VQcm90b2NvbCh1cmwpIHtcbiAgY29uc3QgbWF0Y2ggPSAvXihbLStcXHddezEsMjV9KSg6P1xcL1xcL3w6KS8uZXhlYyh1cmwpO1xuICByZXR1cm4gbWF0Y2ggJiYgbWF0Y2hbMV0gfHwgJyc7XG59XG5cbi8qKlxuICogQ2FsY3VsYXRlIGRhdGEgbWF4UmF0ZVxuICogQHBhcmFtIHtOdW1iZXJ9IFtzYW1wbGVzQ291bnQ9IDEwXVxuICogQHBhcmFtIHtOdW1iZXJ9IFttaW49IDEwMDBdXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259XG4gKi9cbmZ1bmN0aW9uIHNwZWVkb21ldGVyKHNhbXBsZXNDb3VudCwgbWluKSB7XG4gIHNhbXBsZXNDb3VudCA9IHNhbXBsZXNDb3VudCB8fCAxMDtcbiAgY29uc3QgYnl0ZXMgPSBuZXcgQXJyYXkoc2FtcGxlc0NvdW50KTtcbiAgY29uc3QgdGltZXN0YW1wcyA9IG5ldyBBcnJheShzYW1wbGVzQ291bnQpO1xuICBsZXQgaGVhZCA9IDA7XG4gIGxldCB0YWlsID0gMDtcbiAgbGV0IGZpcnN0U2FtcGxlVFM7XG5cbiAgbWluID0gbWluICE9PSB1bmRlZmluZWQgPyBtaW4gOiAxMDAwO1xuXG4gIHJldHVybiBmdW5jdGlvbiBwdXNoKGNodW5rTGVuZ3RoKSB7XG4gICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcblxuICAgIGNvbnN0IHN0YXJ0ZWRBdCA9IHRpbWVzdGFtcHNbdGFpbF07XG5cbiAgICBpZiAoIWZpcnN0U2FtcGxlVFMpIHtcbiAgICAgIGZpcnN0U2FtcGxlVFMgPSBub3c7XG4gICAgfVxuXG4gICAgYnl0ZXNbaGVhZF0gPSBjaHVua0xlbmd0aDtcbiAgICB0aW1lc3RhbXBzW2hlYWRdID0gbm93O1xuXG4gICAgbGV0IGkgPSB0YWlsO1xuICAgIGxldCBieXRlc0NvdW50ID0gMDtcblxuICAgIHdoaWxlIChpICE9PSBoZWFkKSB7XG4gICAgICBieXRlc0NvdW50ICs9IGJ5dGVzW2krK107XG4gICAgICBpID0gaSAlIHNhbXBsZXNDb3VudDtcbiAgICB9XG5cbiAgICBoZWFkID0gKGhlYWQgKyAxKSAlIHNhbXBsZXNDb3VudDtcblxuICAgIGlmIChoZWFkID09PSB0YWlsKSB7XG4gICAgICB0YWlsID0gKHRhaWwgKyAxKSAlIHNhbXBsZXNDb3VudDtcbiAgICB9XG5cbiAgICBpZiAobm93IC0gZmlyc3RTYW1wbGVUUyA8IG1pbikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHBhc3NlZCA9IHN0YXJ0ZWRBdCAmJiBub3cgLSBzdGFydGVkQXQ7XG5cbiAgICByZXR1cm4gcGFzc2VkID8gTWF0aC5yb3VuZChieXRlc0NvdW50ICogMTAwMCAvIHBhc3NlZCkgOiB1bmRlZmluZWQ7XG4gIH07XG59XG5cbi8qKlxuICogVGhyb3R0bGUgZGVjb3JhdG9yXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmblxuICogQHBhcmFtIHtOdW1iZXJ9IGZyZXFcbiAqIEByZXR1cm4ge0Z1bmN0aW9ufVxuICovXG5mdW5jdGlvbiB0aHJvdHRsZShmbiwgZnJlcSkge1xuICBsZXQgdGltZXN0YW1wID0gMDtcbiAgbGV0IHRocmVzaG9sZCA9IDEwMDAgLyBmcmVxO1xuICBsZXQgbGFzdEFyZ3M7XG4gIGxldCB0aW1lcjtcblxuICBjb25zdCBpbnZva2UgPSAoYXJncywgbm93ID0gRGF0ZS5ub3coKSkgPT4ge1xuICAgIHRpbWVzdGFtcCA9IG5vdztcbiAgICBsYXN0QXJncyA9IG51bGw7XG4gICAgaWYgKHRpbWVyKSB7XG4gICAgICBjbGVhclRpbWVvdXQodGltZXIpO1xuICAgICAgdGltZXIgPSBudWxsO1xuICAgIH1cbiAgICBmbi5hcHBseShudWxsLCBhcmdzKTtcbiAgfTtcblxuICBjb25zdCB0aHJvdHRsZWQgPSAoLi4uYXJncykgPT4ge1xuICAgIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG4gICAgY29uc3QgcGFzc2VkID0gbm93IC0gdGltZXN0YW1wO1xuICAgIGlmICggcGFzc2VkID49IHRocmVzaG9sZCkge1xuICAgICAgaW52b2tlKGFyZ3MsIG5vdyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGxhc3RBcmdzID0gYXJncztcbiAgICAgIGlmICghdGltZXIpIHtcbiAgICAgICAgdGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICB0aW1lciA9IG51bGw7XG4gICAgICAgICAgaW52b2tlKGxhc3RBcmdzKTtcbiAgICAgICAgfSwgdGhyZXNob2xkIC0gcGFzc2VkKTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG5cbiAgY29uc3QgZmx1c2ggPSAoKSA9PiBsYXN0QXJncyAmJiBpbnZva2UobGFzdEFyZ3MpO1xuXG4gIHJldHVybiBbdGhyb3R0bGVkLCBmbHVzaF07XG59XG5cbmNvbnN0IHByb2dyZXNzRXZlbnRSZWR1Y2VyID0gKGxpc3RlbmVyLCBpc0Rvd25sb2FkU3RyZWFtLCBmcmVxID0gMykgPT4ge1xuICBsZXQgYnl0ZXNOb3RpZmllZCA9IDA7XG4gIGNvbnN0IF9zcGVlZG9tZXRlciA9IHNwZWVkb21ldGVyKDUwLCAyNTApO1xuXG4gIHJldHVybiB0aHJvdHRsZShlID0+IHtcbiAgICBjb25zdCBsb2FkZWQgPSBlLmxvYWRlZDtcbiAgICBjb25zdCB0b3RhbCA9IGUubGVuZ3RoQ29tcHV0YWJsZSA/IGUudG90YWwgOiB1bmRlZmluZWQ7XG4gICAgY29uc3QgcHJvZ3Jlc3NCeXRlcyA9IGxvYWRlZCAtIGJ5dGVzTm90aWZpZWQ7XG4gICAgY29uc3QgcmF0ZSA9IF9zcGVlZG9tZXRlcihwcm9ncmVzc0J5dGVzKTtcbiAgICBjb25zdCBpblJhbmdlID0gbG9hZGVkIDw9IHRvdGFsO1xuXG4gICAgYnl0ZXNOb3RpZmllZCA9IGxvYWRlZDtcblxuICAgIGNvbnN0IGRhdGEgPSB7XG4gICAgICBsb2FkZWQsXG4gICAgICB0b3RhbCxcbiAgICAgIHByb2dyZXNzOiB0b3RhbCA/IChsb2FkZWQgLyB0b3RhbCkgOiB1bmRlZmluZWQsXG4gICAgICBieXRlczogcHJvZ3Jlc3NCeXRlcyxcbiAgICAgIHJhdGU6IHJhdGUgPyByYXRlIDogdW5kZWZpbmVkLFxuICAgICAgZXN0aW1hdGVkOiByYXRlICYmIHRvdGFsICYmIGluUmFuZ2UgPyAodG90YWwgLSBsb2FkZWQpIC8gcmF0ZSA6IHVuZGVmaW5lZCxcbiAgICAgIGV2ZW50OiBlLFxuICAgICAgbGVuZ3RoQ29tcHV0YWJsZTogdG90YWwgIT0gbnVsbCxcbiAgICAgIFtpc0Rvd25sb2FkU3RyZWFtID8gJ2Rvd25sb2FkJyA6ICd1cGxvYWQnXTogdHJ1ZVxuICAgIH07XG5cbiAgICBsaXN0ZW5lcihkYXRhKTtcbiAgfSwgZnJlcSk7XG59O1xuXG5jb25zdCBwcm9ncmVzc0V2ZW50RGVjb3JhdG9yID0gKHRvdGFsLCB0aHJvdHRsZWQpID0+IHtcbiAgY29uc3QgbGVuZ3RoQ29tcHV0YWJsZSA9IHRvdGFsICE9IG51bGw7XG5cbiAgcmV0dXJuIFsobG9hZGVkKSA9PiB0aHJvdHRsZWRbMF0oe1xuICAgIGxlbmd0aENvbXB1dGFibGUsXG4gICAgdG90YWwsXG4gICAgbG9hZGVkXG4gIH0pLCB0aHJvdHRsZWRbMV1dO1xufTtcblxuY29uc3QgYXN5bmNEZWNvcmF0b3IgPSAoZm4pID0+ICguLi5hcmdzKSA9PiB1dGlscyQxLmFzYXAoKCkgPT4gZm4oLi4uYXJncykpO1xuXG52YXIgaXNVUkxTYW1lT3JpZ2luID0gcGxhdGZvcm0uaGFzU3RhbmRhcmRCcm93c2VyRW52ID9cblxuLy8gU3RhbmRhcmQgYnJvd3NlciBlbnZzIGhhdmUgZnVsbCBzdXBwb3J0IG9mIHRoZSBBUElzIG5lZWRlZCB0byB0ZXN0XG4vLyB3aGV0aGVyIHRoZSByZXF1ZXN0IFVSTCBpcyBvZiB0aGUgc2FtZSBvcmlnaW4gYXMgY3VycmVudCBsb2NhdGlvbi5cbiAgKGZ1bmN0aW9uIHN0YW5kYXJkQnJvd3NlckVudigpIHtcbiAgICBjb25zdCBtc2llID0gLyhtc2llfHRyaWRlbnQpL2kudGVzdChuYXZpZ2F0b3IudXNlckFnZW50KTtcbiAgICBjb25zdCB1cmxQYXJzaW5nTm9kZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKTtcbiAgICBsZXQgb3JpZ2luVVJMO1xuXG4gICAgLyoqXG4gICAgKiBQYXJzZSBhIFVSTCB0byBkaXNjb3ZlciBpdHMgY29tcG9uZW50c1xuICAgICpcbiAgICAqIEBwYXJhbSB7U3RyaW5nfSB1cmwgVGhlIFVSTCB0byBiZSBwYXJzZWRcbiAgICAqIEByZXR1cm5zIHtPYmplY3R9XG4gICAgKi9cbiAgICBmdW5jdGlvbiByZXNvbHZlVVJMKHVybCkge1xuICAgICAgbGV0IGhyZWYgPSB1cmw7XG5cbiAgICAgIGlmIChtc2llKSB7XG4gICAgICAgIC8vIElFIG5lZWRzIGF0dHJpYnV0ZSBzZXQgdHdpY2UgdG8gbm9ybWFsaXplIHByb3BlcnRpZXNcbiAgICAgICAgdXJsUGFyc2luZ05vZGUuc2V0QXR0cmlidXRlKCdocmVmJywgaHJlZik7XG4gICAgICAgIGhyZWYgPSB1cmxQYXJzaW5nTm9kZS5ocmVmO1xuICAgICAgfVxuXG4gICAgICB1cmxQYXJzaW5nTm9kZS5zZXRBdHRyaWJ1dGUoJ2hyZWYnLCBocmVmKTtcblxuICAgICAgLy8gdXJsUGFyc2luZ05vZGUgcHJvdmlkZXMgdGhlIFVybFV0aWxzIGludGVyZmFjZSAtIGh0dHA6Ly91cmwuc3BlYy53aGF0d2cub3JnLyN1cmx1dGlsc1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgaHJlZjogdXJsUGFyc2luZ05vZGUuaHJlZixcbiAgICAgICAgcHJvdG9jb2w6IHVybFBhcnNpbmdOb2RlLnByb3RvY29sID8gdXJsUGFyc2luZ05vZGUucHJvdG9jb2wucmVwbGFjZSgvOiQvLCAnJykgOiAnJyxcbiAgICAgICAgaG9zdDogdXJsUGFyc2luZ05vZGUuaG9zdCxcbiAgICAgICAgc2VhcmNoOiB1cmxQYXJzaW5nTm9kZS5zZWFyY2ggPyB1cmxQYXJzaW5nTm9kZS5zZWFyY2gucmVwbGFjZSgvXlxcPy8sICcnKSA6ICcnLFxuICAgICAgICBoYXNoOiB1cmxQYXJzaW5nTm9kZS5oYXNoID8gdXJsUGFyc2luZ05vZGUuaGFzaC5yZXBsYWNlKC9eIy8sICcnKSA6ICcnLFxuICAgICAgICBob3N0bmFtZTogdXJsUGFyc2luZ05vZGUuaG9zdG5hbWUsXG4gICAgICAgIHBvcnQ6IHVybFBhcnNpbmdOb2RlLnBvcnQsXG4gICAgICAgIHBhdGhuYW1lOiAodXJsUGFyc2luZ05vZGUucGF0aG5hbWUuY2hhckF0KDApID09PSAnLycpID9cbiAgICAgICAgICB1cmxQYXJzaW5nTm9kZS5wYXRobmFtZSA6XG4gICAgICAgICAgJy8nICsgdXJsUGFyc2luZ05vZGUucGF0aG5hbWVcbiAgICAgIH07XG4gICAgfVxuXG4gICAgb3JpZ2luVVJMID0gcmVzb2x2ZVVSTCh3aW5kb3cubG9jYXRpb24uaHJlZik7XG5cbiAgICAvKipcbiAgICAqIERldGVybWluZSBpZiBhIFVSTCBzaGFyZXMgdGhlIHNhbWUgb3JpZ2luIGFzIHRoZSBjdXJyZW50IGxvY2F0aW9uXG4gICAgKlxuICAgICogQHBhcmFtIHtTdHJpbmd9IHJlcXVlc3RVUkwgVGhlIFVSTCB0byB0ZXN0XG4gICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiBVUkwgc2hhcmVzIHRoZSBzYW1lIG9yaWdpbiwgb3RoZXJ3aXNlIGZhbHNlXG4gICAgKi9cbiAgICByZXR1cm4gZnVuY3Rpb24gaXNVUkxTYW1lT3JpZ2luKHJlcXVlc3RVUkwpIHtcbiAgICAgIGNvbnN0IHBhcnNlZCA9ICh1dGlscyQxLmlzU3RyaW5nKHJlcXVlc3RVUkwpKSA/IHJlc29sdmVVUkwocmVxdWVzdFVSTCkgOiByZXF1ZXN0VVJMO1xuICAgICAgcmV0dXJuIChwYXJzZWQucHJvdG9jb2wgPT09IG9yaWdpblVSTC5wcm90b2NvbCAmJlxuICAgICAgICAgIHBhcnNlZC5ob3N0ID09PSBvcmlnaW5VUkwuaG9zdCk7XG4gICAgfTtcbiAgfSkoKSA6XG5cbiAgLy8gTm9uIHN0YW5kYXJkIGJyb3dzZXIgZW52cyAod2ViIHdvcmtlcnMsIHJlYWN0LW5hdGl2ZSkgbGFjayBuZWVkZWQgc3VwcG9ydC5cbiAgKGZ1bmN0aW9uIG5vblN0YW5kYXJkQnJvd3NlckVudigpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gaXNVUkxTYW1lT3JpZ2luKCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfTtcbiAgfSkoKTtcblxudmFyIGNvb2tpZXMgPSBwbGF0Zm9ybS5oYXNTdGFuZGFyZEJyb3dzZXJFbnYgP1xuXG4gIC8vIFN0YW5kYXJkIGJyb3dzZXIgZW52cyBzdXBwb3J0IGRvY3VtZW50LmNvb2tpZVxuICB7XG4gICAgd3JpdGUobmFtZSwgdmFsdWUsIGV4cGlyZXMsIHBhdGgsIGRvbWFpbiwgc2VjdXJlKSB7XG4gICAgICBjb25zdCBjb29raWUgPSBbbmFtZSArICc9JyArIGVuY29kZVVSSUNvbXBvbmVudCh2YWx1ZSldO1xuXG4gICAgICB1dGlscyQxLmlzTnVtYmVyKGV4cGlyZXMpICYmIGNvb2tpZS5wdXNoKCdleHBpcmVzPScgKyBuZXcgRGF0ZShleHBpcmVzKS50b0dNVFN0cmluZygpKTtcblxuICAgICAgdXRpbHMkMS5pc1N0cmluZyhwYXRoKSAmJiBjb29raWUucHVzaCgncGF0aD0nICsgcGF0aCk7XG5cbiAgICAgIHV0aWxzJDEuaXNTdHJpbmcoZG9tYWluKSAmJiBjb29raWUucHVzaCgnZG9tYWluPScgKyBkb21haW4pO1xuXG4gICAgICBzZWN1cmUgPT09IHRydWUgJiYgY29va2llLnB1c2goJ3NlY3VyZScpO1xuXG4gICAgICBkb2N1bWVudC5jb29raWUgPSBjb29raWUuam9pbignOyAnKTtcbiAgICB9LFxuXG4gICAgcmVhZChuYW1lKSB7XG4gICAgICBjb25zdCBtYXRjaCA9IGRvY3VtZW50LmNvb2tpZS5tYXRjaChuZXcgUmVnRXhwKCcoXnw7XFxcXHMqKSgnICsgbmFtZSArICcpPShbXjtdKiknKSk7XG4gICAgICByZXR1cm4gKG1hdGNoID8gZGVjb2RlVVJJQ29tcG9uZW50KG1hdGNoWzNdKSA6IG51bGwpO1xuICAgIH0sXG5cbiAgICByZW1vdmUobmFtZSkge1xuICAgICAgdGhpcy53cml0ZShuYW1lLCAnJywgRGF0ZS5ub3coKSAtIDg2NDAwMDAwKTtcbiAgICB9XG4gIH1cblxuICA6XG5cbiAgLy8gTm9uLXN0YW5kYXJkIGJyb3dzZXIgZW52ICh3ZWIgd29ya2VycywgcmVhY3QtbmF0aXZlKSBsYWNrIG5lZWRlZCBzdXBwb3J0LlxuICB7XG4gICAgd3JpdGUoKSB7fSxcbiAgICByZWFkKCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfSxcbiAgICByZW1vdmUoKSB7fVxuICB9O1xuXG4vKipcbiAqIERldGVybWluZXMgd2hldGhlciB0aGUgc3BlY2lmaWVkIFVSTCBpcyBhYnNvbHV0ZVxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSB1cmwgVGhlIFVSTCB0byB0ZXN0XG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdGhlIHNwZWNpZmllZCBVUkwgaXMgYWJzb2x1dGUsIG90aGVyd2lzZSBmYWxzZVxuICovXG5mdW5jdGlvbiBpc0Fic29sdXRlVVJMKHVybCkge1xuICAvLyBBIFVSTCBpcyBjb25zaWRlcmVkIGFic29sdXRlIGlmIGl0IGJlZ2lucyB3aXRoIFwiPHNjaGVtZT46Ly9cIiBvciBcIi8vXCIgKHByb3RvY29sLXJlbGF0aXZlIFVSTCkuXG4gIC8vIFJGQyAzOTg2IGRlZmluZXMgc2NoZW1lIG5hbWUgYXMgYSBzZXF1ZW5jZSBvZiBjaGFyYWN0ZXJzIGJlZ2lubmluZyB3aXRoIGEgbGV0dGVyIGFuZCBmb2xsb3dlZFxuICAvLyBieSBhbnkgY29tYmluYXRpb24gb2YgbGV0dGVycywgZGlnaXRzLCBwbHVzLCBwZXJpb2QsIG9yIGh5cGhlbi5cbiAgcmV0dXJuIC9eKFthLXpdW2EtelxcZCtcXC0uXSo6KT9cXC9cXC8vaS50ZXN0KHVybCk7XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhIG5ldyBVUkwgYnkgY29tYmluaW5nIHRoZSBzcGVjaWZpZWQgVVJMc1xuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBiYXNlVVJMIFRoZSBiYXNlIFVSTFxuICogQHBhcmFtIHtzdHJpbmd9IHJlbGF0aXZlVVJMIFRoZSByZWxhdGl2ZSBVUkxcbiAqXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgY29tYmluZWQgVVJMXG4gKi9cbmZ1bmN0aW9uIGNvbWJpbmVVUkxzKGJhc2VVUkwsIHJlbGF0aXZlVVJMKSB7XG4gIHJldHVybiByZWxhdGl2ZVVSTFxuICAgID8gYmFzZVVSTC5yZXBsYWNlKC9cXC8/XFwvJC8sICcnKSArICcvJyArIHJlbGF0aXZlVVJMLnJlcGxhY2UoL15cXC8rLywgJycpXG4gICAgOiBiYXNlVVJMO1xufVxuXG4vKipcbiAqIENyZWF0ZXMgYSBuZXcgVVJMIGJ5IGNvbWJpbmluZyB0aGUgYmFzZVVSTCB3aXRoIHRoZSByZXF1ZXN0ZWRVUkwsXG4gKiBvbmx5IHdoZW4gdGhlIHJlcXVlc3RlZFVSTCBpcyBub3QgYWxyZWFkeSBhbiBhYnNvbHV0ZSBVUkwuXG4gKiBJZiB0aGUgcmVxdWVzdFVSTCBpcyBhYnNvbHV0ZSwgdGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSByZXF1ZXN0ZWRVUkwgdW50b3VjaGVkLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBiYXNlVVJMIFRoZSBiYXNlIFVSTFxuICogQHBhcmFtIHtzdHJpbmd9IHJlcXVlc3RlZFVSTCBBYnNvbHV0ZSBvciByZWxhdGl2ZSBVUkwgdG8gY29tYmluZVxuICpcbiAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSBjb21iaW5lZCBmdWxsIHBhdGhcbiAqL1xuZnVuY3Rpb24gYnVpbGRGdWxsUGF0aChiYXNlVVJMLCByZXF1ZXN0ZWRVUkwpIHtcbiAgaWYgKGJhc2VVUkwgJiYgIWlzQWJzb2x1dGVVUkwocmVxdWVzdGVkVVJMKSkge1xuICAgIHJldHVybiBjb21iaW5lVVJMcyhiYXNlVVJMLCByZXF1ZXN0ZWRVUkwpO1xuICB9XG4gIHJldHVybiByZXF1ZXN0ZWRVUkw7XG59XG5cbmNvbnN0IGhlYWRlcnNUb09iamVjdCA9ICh0aGluZykgPT4gdGhpbmcgaW5zdGFuY2VvZiBBeGlvc0hlYWRlcnMkMSA/IHsgLi4udGhpbmcgfSA6IHRoaW5nO1xuXG4vKipcbiAqIENvbmZpZy1zcGVjaWZpYyBtZXJnZS1mdW5jdGlvbiB3aGljaCBjcmVhdGVzIGEgbmV3IGNvbmZpZy1vYmplY3RcbiAqIGJ5IG1lcmdpbmcgdHdvIGNvbmZpZ3VyYXRpb24gb2JqZWN0cyB0b2dldGhlci5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gY29uZmlnMVxuICogQHBhcmFtIHtPYmplY3R9IGNvbmZpZzJcbiAqXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBOZXcgb2JqZWN0IHJlc3VsdGluZyBmcm9tIG1lcmdpbmcgY29uZmlnMiB0byBjb25maWcxXG4gKi9cbmZ1bmN0aW9uIG1lcmdlQ29uZmlnKGNvbmZpZzEsIGNvbmZpZzIpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXBhcmFtLXJlYXNzaWduXG4gIGNvbmZpZzIgPSBjb25maWcyIHx8IHt9O1xuICBjb25zdCBjb25maWcgPSB7fTtcblxuICBmdW5jdGlvbiBnZXRNZXJnZWRWYWx1ZSh0YXJnZXQsIHNvdXJjZSwgY2FzZWxlc3MpIHtcbiAgICBpZiAodXRpbHMkMS5pc1BsYWluT2JqZWN0KHRhcmdldCkgJiYgdXRpbHMkMS5pc1BsYWluT2JqZWN0KHNvdXJjZSkpIHtcbiAgICAgIHJldHVybiB1dGlscyQxLm1lcmdlLmNhbGwoe2Nhc2VsZXNzfSwgdGFyZ2V0LCBzb3VyY2UpO1xuICAgIH0gZWxzZSBpZiAodXRpbHMkMS5pc1BsYWluT2JqZWN0KHNvdXJjZSkpIHtcbiAgICAgIHJldHVybiB1dGlscyQxLm1lcmdlKHt9LCBzb3VyY2UpO1xuICAgIH0gZWxzZSBpZiAodXRpbHMkMS5pc0FycmF5KHNvdXJjZSkpIHtcbiAgICAgIHJldHVybiBzb3VyY2Uuc2xpY2UoKTtcbiAgICB9XG4gICAgcmV0dXJuIHNvdXJjZTtcbiAgfVxuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjb25zaXN0ZW50LXJldHVyblxuICBmdW5jdGlvbiBtZXJnZURlZXBQcm9wZXJ0aWVzKGEsIGIsIGNhc2VsZXNzKSB7XG4gICAgaWYgKCF1dGlscyQxLmlzVW5kZWZpbmVkKGIpKSB7XG4gICAgICByZXR1cm4gZ2V0TWVyZ2VkVmFsdWUoYSwgYiwgY2FzZWxlc3MpO1xuICAgIH0gZWxzZSBpZiAoIXV0aWxzJDEuaXNVbmRlZmluZWQoYSkpIHtcbiAgICAgIHJldHVybiBnZXRNZXJnZWRWYWx1ZSh1bmRlZmluZWQsIGEsIGNhc2VsZXNzKTtcbiAgICB9XG4gIH1cblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY29uc2lzdGVudC1yZXR1cm5cbiAgZnVuY3Rpb24gdmFsdWVGcm9tQ29uZmlnMihhLCBiKSB7XG4gICAgaWYgKCF1dGlscyQxLmlzVW5kZWZpbmVkKGIpKSB7XG4gICAgICByZXR1cm4gZ2V0TWVyZ2VkVmFsdWUodW5kZWZpbmVkLCBiKTtcbiAgICB9XG4gIH1cblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY29uc2lzdGVudC1yZXR1cm5cbiAgZnVuY3Rpb24gZGVmYXVsdFRvQ29uZmlnMihhLCBiKSB7XG4gICAgaWYgKCF1dGlscyQxLmlzVW5kZWZpbmVkKGIpKSB7XG4gICAgICByZXR1cm4gZ2V0TWVyZ2VkVmFsdWUodW5kZWZpbmVkLCBiKTtcbiAgICB9IGVsc2UgaWYgKCF1dGlscyQxLmlzVW5kZWZpbmVkKGEpKSB7XG4gICAgICByZXR1cm4gZ2V0TWVyZ2VkVmFsdWUodW5kZWZpbmVkLCBhKTtcbiAgICB9XG4gIH1cblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY29uc2lzdGVudC1yZXR1cm5cbiAgZnVuY3Rpb24gbWVyZ2VEaXJlY3RLZXlzKGEsIGIsIHByb3ApIHtcbiAgICBpZiAocHJvcCBpbiBjb25maWcyKSB7XG4gICAgICByZXR1cm4gZ2V0TWVyZ2VkVmFsdWUoYSwgYik7XG4gICAgfSBlbHNlIGlmIChwcm9wIGluIGNvbmZpZzEpIHtcbiAgICAgIHJldHVybiBnZXRNZXJnZWRWYWx1ZSh1bmRlZmluZWQsIGEpO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IG1lcmdlTWFwID0ge1xuICAgIHVybDogdmFsdWVGcm9tQ29uZmlnMixcbiAgICBtZXRob2Q6IHZhbHVlRnJvbUNvbmZpZzIsXG4gICAgZGF0YTogdmFsdWVGcm9tQ29uZmlnMixcbiAgICBiYXNlVVJMOiBkZWZhdWx0VG9Db25maWcyLFxuICAgIHRyYW5zZm9ybVJlcXVlc3Q6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgdHJhbnNmb3JtUmVzcG9uc2U6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgcGFyYW1zU2VyaWFsaXplcjogZGVmYXVsdFRvQ29uZmlnMixcbiAgICB0aW1lb3V0OiBkZWZhdWx0VG9Db25maWcyLFxuICAgIHRpbWVvdXRNZXNzYWdlOiBkZWZhdWx0VG9Db25maWcyLFxuICAgIHdpdGhDcmVkZW50aWFsczogZGVmYXVsdFRvQ29uZmlnMixcbiAgICB3aXRoWFNSRlRva2VuOiBkZWZhdWx0VG9Db25maWcyLFxuICAgIGFkYXB0ZXI6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgcmVzcG9uc2VUeXBlOiBkZWZhdWx0VG9Db25maWcyLFxuICAgIHhzcmZDb29raWVOYW1lOiBkZWZhdWx0VG9Db25maWcyLFxuICAgIHhzcmZIZWFkZXJOYW1lOiBkZWZhdWx0VG9Db25maWcyLFxuICAgIG9uVXBsb2FkUHJvZ3Jlc3M6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgb25Eb3dubG9hZFByb2dyZXNzOiBkZWZhdWx0VG9Db25maWcyLFxuICAgIGRlY29tcHJlc3M6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgbWF4Q29udGVudExlbmd0aDogZGVmYXVsdFRvQ29uZmlnMixcbiAgICBtYXhCb2R5TGVuZ3RoOiBkZWZhdWx0VG9Db25maWcyLFxuICAgIGJlZm9yZVJlZGlyZWN0OiBkZWZhdWx0VG9Db25maWcyLFxuICAgIHRyYW5zcG9ydDogZGVmYXVsdFRvQ29uZmlnMixcbiAgICBodHRwQWdlbnQ6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgaHR0cHNBZ2VudDogZGVmYXVsdFRvQ29uZmlnMixcbiAgICBjYW5jZWxUb2tlbjogZGVmYXVsdFRvQ29uZmlnMixcbiAgICBzb2NrZXRQYXRoOiBkZWZhdWx0VG9Db25maWcyLFxuICAgIHJlc3BvbnNlRW5jb2Rpbmc6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgdmFsaWRhdGVTdGF0dXM6IG1lcmdlRGlyZWN0S2V5cyxcbiAgICBoZWFkZXJzOiAoYSwgYikgPT4gbWVyZ2VEZWVwUHJvcGVydGllcyhoZWFkZXJzVG9PYmplY3QoYSksIGhlYWRlcnNUb09iamVjdChiKSwgdHJ1ZSlcbiAgfTtcblxuICB1dGlscyQxLmZvckVhY2goT2JqZWN0LmtleXMoT2JqZWN0LmFzc2lnbih7fSwgY29uZmlnMSwgY29uZmlnMikpLCBmdW5jdGlvbiBjb21wdXRlQ29uZmlnVmFsdWUocHJvcCkge1xuICAgIGNvbnN0IG1lcmdlID0gbWVyZ2VNYXBbcHJvcF0gfHwgbWVyZ2VEZWVwUHJvcGVydGllcztcbiAgICBjb25zdCBjb25maWdWYWx1ZSA9IG1lcmdlKGNvbmZpZzFbcHJvcF0sIGNvbmZpZzJbcHJvcF0sIHByb3ApO1xuICAgICh1dGlscyQxLmlzVW5kZWZpbmVkKGNvbmZpZ1ZhbHVlKSAmJiBtZXJnZSAhPT0gbWVyZ2VEaXJlY3RLZXlzKSB8fCAoY29uZmlnW3Byb3BdID0gY29uZmlnVmFsdWUpO1xuICB9KTtcblxuICByZXR1cm4gY29uZmlnO1xufVxuXG52YXIgcmVzb2x2ZUNvbmZpZyA9IChjb25maWcpID0+IHtcbiAgY29uc3QgbmV3Q29uZmlnID0gbWVyZ2VDb25maWcoe30sIGNvbmZpZyk7XG5cbiAgbGV0IHtkYXRhLCB3aXRoWFNSRlRva2VuLCB4c3JmSGVhZGVyTmFtZSwgeHNyZkNvb2tpZU5hbWUsIGhlYWRlcnMsIGF1dGh9ID0gbmV3Q29uZmlnO1xuXG4gIG5ld0NvbmZpZy5oZWFkZXJzID0gaGVhZGVycyA9IEF4aW9zSGVhZGVycyQxLmZyb20oaGVhZGVycyk7XG5cbiAgbmV3Q29uZmlnLnVybCA9IGJ1aWxkVVJMKGJ1aWxkRnVsbFBhdGgobmV3Q29uZmlnLmJhc2VVUkwsIG5ld0NvbmZpZy51cmwpLCBjb25maWcucGFyYW1zLCBjb25maWcucGFyYW1zU2VyaWFsaXplcik7XG5cbiAgLy8gSFRUUCBiYXNpYyBhdXRoZW50aWNhdGlvblxuICBpZiAoYXV0aCkge1xuICAgIGhlYWRlcnMuc2V0KCdBdXRob3JpemF0aW9uJywgJ0Jhc2ljICcgK1xuICAgICAgYnRvYSgoYXV0aC51c2VybmFtZSB8fCAnJykgKyAnOicgKyAoYXV0aC5wYXNzd29yZCA/IHVuZXNjYXBlKGVuY29kZVVSSUNvbXBvbmVudChhdXRoLnBhc3N3b3JkKSkgOiAnJykpXG4gICAgKTtcbiAgfVxuXG4gIGxldCBjb250ZW50VHlwZTtcblxuICBpZiAodXRpbHMkMS5pc0Zvcm1EYXRhKGRhdGEpKSB7XG4gICAgaWYgKHBsYXRmb3JtLmhhc1N0YW5kYXJkQnJvd3NlckVudiB8fCBwbGF0Zm9ybS5oYXNTdGFuZGFyZEJyb3dzZXJXZWJXb3JrZXJFbnYpIHtcbiAgICAgIGhlYWRlcnMuc2V0Q29udGVudFR5cGUodW5kZWZpbmVkKTsgLy8gTGV0IHRoZSBicm93c2VyIHNldCBpdFxuICAgIH0gZWxzZSBpZiAoKGNvbnRlbnRUeXBlID0gaGVhZGVycy5nZXRDb250ZW50VHlwZSgpKSAhPT0gZmFsc2UpIHtcbiAgICAgIC8vIGZpeCBzZW1pY29sb24gZHVwbGljYXRpb24gaXNzdWUgZm9yIFJlYWN0TmF0aXZlIEZvcm1EYXRhIGltcGxlbWVudGF0aW9uXG4gICAgICBjb25zdCBbdHlwZSwgLi4udG9rZW5zXSA9IGNvbnRlbnRUeXBlID8gY29udGVudFR5cGUuc3BsaXQoJzsnKS5tYXAodG9rZW4gPT4gdG9rZW4udHJpbSgpKS5maWx0ZXIoQm9vbGVhbikgOiBbXTtcbiAgICAgIGhlYWRlcnMuc2V0Q29udGVudFR5cGUoW3R5cGUgfHwgJ211bHRpcGFydC9mb3JtLWRhdGEnLCAuLi50b2tlbnNdLmpvaW4oJzsgJykpO1xuICAgIH1cbiAgfVxuXG4gIC8vIEFkZCB4c3JmIGhlYWRlclxuICAvLyBUaGlzIGlzIG9ubHkgZG9uZSBpZiBydW5uaW5nIGluIGEgc3RhbmRhcmQgYnJvd3NlciBlbnZpcm9ubWVudC5cbiAgLy8gU3BlY2lmaWNhbGx5IG5vdCBpZiB3ZSdyZSBpbiBhIHdlYiB3b3JrZXIsIG9yIHJlYWN0LW5hdGl2ZS5cblxuICBpZiAocGxhdGZvcm0uaGFzU3RhbmRhcmRCcm93c2VyRW52KSB7XG4gICAgd2l0aFhTUkZUb2tlbiAmJiB1dGlscyQxLmlzRnVuY3Rpb24od2l0aFhTUkZUb2tlbikgJiYgKHdpdGhYU1JGVG9rZW4gPSB3aXRoWFNSRlRva2VuKG5ld0NvbmZpZykpO1xuXG4gICAgaWYgKHdpdGhYU1JGVG9rZW4gfHwgKHdpdGhYU1JGVG9rZW4gIT09IGZhbHNlICYmIGlzVVJMU2FtZU9yaWdpbihuZXdDb25maWcudXJsKSkpIHtcbiAgICAgIC8vIEFkZCB4c3JmIGhlYWRlclxuICAgICAgY29uc3QgeHNyZlZhbHVlID0geHNyZkhlYWRlck5hbWUgJiYgeHNyZkNvb2tpZU5hbWUgJiYgY29va2llcy5yZWFkKHhzcmZDb29raWVOYW1lKTtcblxuICAgICAgaWYgKHhzcmZWYWx1ZSkge1xuICAgICAgICBoZWFkZXJzLnNldCh4c3JmSGVhZGVyTmFtZSwgeHNyZlZhbHVlKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gbmV3Q29uZmlnO1xufTtcblxuY29uc3QgaXNYSFJBZGFwdGVyU3VwcG9ydGVkID0gdHlwZW9mIFhNTEh0dHBSZXF1ZXN0ICE9PSAndW5kZWZpbmVkJztcblxudmFyIHhockFkYXB0ZXIgPSBpc1hIUkFkYXB0ZXJTdXBwb3J0ZWQgJiYgZnVuY3Rpb24gKGNvbmZpZykge1xuICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gZGlzcGF0Y2hYaHJSZXF1ZXN0KHJlc29sdmUsIHJlamVjdCkge1xuICAgIGNvbnN0IF9jb25maWcgPSByZXNvbHZlQ29uZmlnKGNvbmZpZyk7XG4gICAgbGV0IHJlcXVlc3REYXRhID0gX2NvbmZpZy5kYXRhO1xuICAgIGNvbnN0IHJlcXVlc3RIZWFkZXJzID0gQXhpb3NIZWFkZXJzJDEuZnJvbShfY29uZmlnLmhlYWRlcnMpLm5vcm1hbGl6ZSgpO1xuICAgIGxldCB7cmVzcG9uc2VUeXBlLCBvblVwbG9hZFByb2dyZXNzLCBvbkRvd25sb2FkUHJvZ3Jlc3N9ID0gX2NvbmZpZztcbiAgICBsZXQgb25DYW5jZWxlZDtcbiAgICBsZXQgdXBsb2FkVGhyb3R0bGVkLCBkb3dubG9hZFRocm90dGxlZDtcbiAgICBsZXQgZmx1c2hVcGxvYWQsIGZsdXNoRG93bmxvYWQ7XG5cbiAgICBmdW5jdGlvbiBkb25lKCkge1xuICAgICAgZmx1c2hVcGxvYWQgJiYgZmx1c2hVcGxvYWQoKTsgLy8gZmx1c2ggZXZlbnRzXG4gICAgICBmbHVzaERvd25sb2FkICYmIGZsdXNoRG93bmxvYWQoKTsgLy8gZmx1c2ggZXZlbnRzXG5cbiAgICAgIF9jb25maWcuY2FuY2VsVG9rZW4gJiYgX2NvbmZpZy5jYW5jZWxUb2tlbi51bnN1YnNjcmliZShvbkNhbmNlbGVkKTtcblxuICAgICAgX2NvbmZpZy5zaWduYWwgJiYgX2NvbmZpZy5zaWduYWwucmVtb3ZlRXZlbnRMaXN0ZW5lcignYWJvcnQnLCBvbkNhbmNlbGVkKTtcbiAgICB9XG5cbiAgICBsZXQgcmVxdWVzdCA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpO1xuXG4gICAgcmVxdWVzdC5vcGVuKF9jb25maWcubWV0aG9kLnRvVXBwZXJDYXNlKCksIF9jb25maWcudXJsLCB0cnVlKTtcblxuICAgIC8vIFNldCB0aGUgcmVxdWVzdCB0aW1lb3V0IGluIE1TXG4gICAgcmVxdWVzdC50aW1lb3V0ID0gX2NvbmZpZy50aW1lb3V0O1xuXG4gICAgZnVuY3Rpb24gb25sb2FkZW5kKCkge1xuICAgICAgaWYgKCFyZXF1ZXN0KSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIC8vIFByZXBhcmUgdGhlIHJlc3BvbnNlXG4gICAgICBjb25zdCByZXNwb25zZUhlYWRlcnMgPSBBeGlvc0hlYWRlcnMkMS5mcm9tKFxuICAgICAgICAnZ2V0QWxsUmVzcG9uc2VIZWFkZXJzJyBpbiByZXF1ZXN0ICYmIHJlcXVlc3QuZ2V0QWxsUmVzcG9uc2VIZWFkZXJzKClcbiAgICAgICk7XG4gICAgICBjb25zdCByZXNwb25zZURhdGEgPSAhcmVzcG9uc2VUeXBlIHx8IHJlc3BvbnNlVHlwZSA9PT0gJ3RleHQnIHx8IHJlc3BvbnNlVHlwZSA9PT0gJ2pzb24nID9cbiAgICAgICAgcmVxdWVzdC5yZXNwb25zZVRleHQgOiByZXF1ZXN0LnJlc3BvbnNlO1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSB7XG4gICAgICAgIGRhdGE6IHJlc3BvbnNlRGF0YSxcbiAgICAgICAgc3RhdHVzOiByZXF1ZXN0LnN0YXR1cyxcbiAgICAgICAgc3RhdHVzVGV4dDogcmVxdWVzdC5zdGF0dXNUZXh0LFxuICAgICAgICBoZWFkZXJzOiByZXNwb25zZUhlYWRlcnMsXG4gICAgICAgIGNvbmZpZyxcbiAgICAgICAgcmVxdWVzdFxuICAgICAgfTtcblxuICAgICAgc2V0dGxlKGZ1bmN0aW9uIF9yZXNvbHZlKHZhbHVlKSB7XG4gICAgICAgIHJlc29sdmUodmFsdWUpO1xuICAgICAgICBkb25lKCk7XG4gICAgICB9LCBmdW5jdGlvbiBfcmVqZWN0KGVycikge1xuICAgICAgICByZWplY3QoZXJyKTtcbiAgICAgICAgZG9uZSgpO1xuICAgICAgfSwgcmVzcG9uc2UpO1xuXG4gICAgICAvLyBDbGVhbiB1cCByZXF1ZXN0XG4gICAgICByZXF1ZXN0ID0gbnVsbDtcbiAgICB9XG5cbiAgICBpZiAoJ29ubG9hZGVuZCcgaW4gcmVxdWVzdCkge1xuICAgICAgLy8gVXNlIG9ubG9hZGVuZCBpZiBhdmFpbGFibGVcbiAgICAgIHJlcXVlc3Qub25sb2FkZW5kID0gb25sb2FkZW5kO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBMaXN0ZW4gZm9yIHJlYWR5IHN0YXRlIHRvIGVtdWxhdGUgb25sb2FkZW5kXG4gICAgICByZXF1ZXN0Lm9ucmVhZHlzdGF0ZWNoYW5nZSA9IGZ1bmN0aW9uIGhhbmRsZUxvYWQoKSB7XG4gICAgICAgIGlmICghcmVxdWVzdCB8fCByZXF1ZXN0LnJlYWR5U3RhdGUgIT09IDQpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAvLyBUaGUgcmVxdWVzdCBlcnJvcmVkIG91dCBhbmQgd2UgZGlkbid0IGdldCBhIHJlc3BvbnNlLCB0aGlzIHdpbGwgYmVcbiAgICAgICAgLy8gaGFuZGxlZCBieSBvbmVycm9yIGluc3RlYWRcbiAgICAgICAgLy8gV2l0aCBvbmUgZXhjZXB0aW9uOiByZXF1ZXN0IHRoYXQgdXNpbmcgZmlsZTogcHJvdG9jb2wsIG1vc3QgYnJvd3NlcnNcbiAgICAgICAgLy8gd2lsbCByZXR1cm4gc3RhdHVzIGFzIDAgZXZlbiB0aG91Z2ggaXQncyBhIHN1Y2Nlc3NmdWwgcmVxdWVzdFxuICAgICAgICBpZiAocmVxdWVzdC5zdGF0dXMgPT09IDAgJiYgIShyZXF1ZXN0LnJlc3BvbnNlVVJMICYmIHJlcXVlc3QucmVzcG9uc2VVUkwuaW5kZXhPZignZmlsZTonKSA9PT0gMCkpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgLy8gcmVhZHlzdGF0ZSBoYW5kbGVyIGlzIGNhbGxpbmcgYmVmb3JlIG9uZXJyb3Igb3Igb250aW1lb3V0IGhhbmRsZXJzLFxuICAgICAgICAvLyBzbyB3ZSBzaG91bGQgY2FsbCBvbmxvYWRlbmQgb24gdGhlIG5leHQgJ3RpY2snXG4gICAgICAgIHNldFRpbWVvdXQob25sb2FkZW5kKTtcbiAgICAgIH07XG4gICAgfVxuXG4gICAgLy8gSGFuZGxlIGJyb3dzZXIgcmVxdWVzdCBjYW5jZWxsYXRpb24gKGFzIG9wcG9zZWQgdG8gYSBtYW51YWwgY2FuY2VsbGF0aW9uKVxuICAgIHJlcXVlc3Qub25hYm9ydCA9IGZ1bmN0aW9uIGhhbmRsZUFib3J0KCkge1xuICAgICAgaWYgKCFyZXF1ZXN0KSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgcmVqZWN0KG5ldyBBeGlvc0Vycm9yKCdSZXF1ZXN0IGFib3J0ZWQnLCBBeGlvc0Vycm9yLkVDT05OQUJPUlRFRCwgY29uZmlnLCByZXF1ZXN0KSk7XG5cbiAgICAgIC8vIENsZWFuIHVwIHJlcXVlc3RcbiAgICAgIHJlcXVlc3QgPSBudWxsO1xuICAgIH07XG5cbiAgICAvLyBIYW5kbGUgbG93IGxldmVsIG5ldHdvcmsgZXJyb3JzXG4gICAgcmVxdWVzdC5vbmVycm9yID0gZnVuY3Rpb24gaGFuZGxlRXJyb3IoKSB7XG4gICAgICAvLyBSZWFsIGVycm9ycyBhcmUgaGlkZGVuIGZyb20gdXMgYnkgdGhlIGJyb3dzZXJcbiAgICAgIC8vIG9uZXJyb3Igc2hvdWxkIG9ubHkgZmlyZSBpZiBpdCdzIGEgbmV0d29yayBlcnJvclxuICAgICAgcmVqZWN0KG5ldyBBeGlvc0Vycm9yKCdOZXR3b3JrIEVycm9yJywgQXhpb3NFcnJvci5FUlJfTkVUV09SSywgY29uZmlnLCByZXF1ZXN0KSk7XG5cbiAgICAgIC8vIENsZWFuIHVwIHJlcXVlc3RcbiAgICAgIHJlcXVlc3QgPSBudWxsO1xuICAgIH07XG5cbiAgICAvLyBIYW5kbGUgdGltZW91dFxuICAgIHJlcXVlc3Qub250aW1lb3V0ID0gZnVuY3Rpb24gaGFuZGxlVGltZW91dCgpIHtcbiAgICAgIGxldCB0aW1lb3V0RXJyb3JNZXNzYWdlID0gX2NvbmZpZy50aW1lb3V0ID8gJ3RpbWVvdXQgb2YgJyArIF9jb25maWcudGltZW91dCArICdtcyBleGNlZWRlZCcgOiAndGltZW91dCBleGNlZWRlZCc7XG4gICAgICBjb25zdCB0cmFuc2l0aW9uYWwgPSBfY29uZmlnLnRyYW5zaXRpb25hbCB8fCB0cmFuc2l0aW9uYWxEZWZhdWx0cztcbiAgICAgIGlmIChfY29uZmlnLnRpbWVvdXRFcnJvck1lc3NhZ2UpIHtcbiAgICAgICAgdGltZW91dEVycm9yTWVzc2FnZSA9IF9jb25maWcudGltZW91dEVycm9yTWVzc2FnZTtcbiAgICAgIH1cbiAgICAgIHJlamVjdChuZXcgQXhpb3NFcnJvcihcbiAgICAgICAgdGltZW91dEVycm9yTWVzc2FnZSxcbiAgICAgICAgdHJhbnNpdGlvbmFsLmNsYXJpZnlUaW1lb3V0RXJyb3IgPyBBeGlvc0Vycm9yLkVUSU1FRE9VVCA6IEF4aW9zRXJyb3IuRUNPTk5BQk9SVEVELFxuICAgICAgICBjb25maWcsXG4gICAgICAgIHJlcXVlc3QpKTtcblxuICAgICAgLy8gQ2xlYW4gdXAgcmVxdWVzdFxuICAgICAgcmVxdWVzdCA9IG51bGw7XG4gICAgfTtcblxuICAgIC8vIFJlbW92ZSBDb250ZW50LVR5cGUgaWYgZGF0YSBpcyB1bmRlZmluZWRcbiAgICByZXF1ZXN0RGF0YSA9PT0gdW5kZWZpbmVkICYmIHJlcXVlc3RIZWFkZXJzLnNldENvbnRlbnRUeXBlKG51bGwpO1xuXG4gICAgLy8gQWRkIGhlYWRlcnMgdG8gdGhlIHJlcXVlc3RcbiAgICBpZiAoJ3NldFJlcXVlc3RIZWFkZXInIGluIHJlcXVlc3QpIHtcbiAgICAgIHV0aWxzJDEuZm9yRWFjaChyZXF1ZXN0SGVhZGVycy50b0pTT04oKSwgZnVuY3Rpb24gc2V0UmVxdWVzdEhlYWRlcih2YWwsIGtleSkge1xuICAgICAgICByZXF1ZXN0LnNldFJlcXVlc3RIZWFkZXIoa2V5LCB2YWwpO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gQWRkIHdpdGhDcmVkZW50aWFscyB0byByZXF1ZXN0IGlmIG5lZWRlZFxuICAgIGlmICghdXRpbHMkMS5pc1VuZGVmaW5lZChfY29uZmlnLndpdGhDcmVkZW50aWFscykpIHtcbiAgICAgIHJlcXVlc3Qud2l0aENyZWRlbnRpYWxzID0gISFfY29uZmlnLndpdGhDcmVkZW50aWFscztcbiAgICB9XG5cbiAgICAvLyBBZGQgcmVzcG9uc2VUeXBlIHRvIHJlcXVlc3QgaWYgbmVlZGVkXG4gICAgaWYgKHJlc3BvbnNlVHlwZSAmJiByZXNwb25zZVR5cGUgIT09ICdqc29uJykge1xuICAgICAgcmVxdWVzdC5yZXNwb25zZVR5cGUgPSBfY29uZmlnLnJlc3BvbnNlVHlwZTtcbiAgICB9XG5cbiAgICAvLyBIYW5kbGUgcHJvZ3Jlc3MgaWYgbmVlZGVkXG4gICAgaWYgKG9uRG93bmxvYWRQcm9ncmVzcykge1xuICAgICAgKFtkb3dubG9hZFRocm90dGxlZCwgZmx1c2hEb3dubG9hZF0gPSBwcm9ncmVzc0V2ZW50UmVkdWNlcihvbkRvd25sb2FkUHJvZ3Jlc3MsIHRydWUpKTtcbiAgICAgIHJlcXVlc3QuYWRkRXZlbnRMaXN0ZW5lcigncHJvZ3Jlc3MnLCBkb3dubG9hZFRocm90dGxlZCk7XG4gICAgfVxuXG4gICAgLy8gTm90IGFsbCBicm93c2VycyBzdXBwb3J0IHVwbG9hZCBldmVudHNcbiAgICBpZiAob25VcGxvYWRQcm9ncmVzcyAmJiByZXF1ZXN0LnVwbG9hZCkge1xuICAgICAgKFt1cGxvYWRUaHJvdHRsZWQsIGZsdXNoVXBsb2FkXSA9IHByb2dyZXNzRXZlbnRSZWR1Y2VyKG9uVXBsb2FkUHJvZ3Jlc3MpKTtcblxuICAgICAgcmVxdWVzdC51cGxvYWQuYWRkRXZlbnRMaXN0ZW5lcigncHJvZ3Jlc3MnLCB1cGxvYWRUaHJvdHRsZWQpO1xuXG4gICAgICByZXF1ZXN0LnVwbG9hZC5hZGRFdmVudExpc3RlbmVyKCdsb2FkZW5kJywgZmx1c2hVcGxvYWQpO1xuICAgIH1cblxuICAgIGlmIChfY29uZmlnLmNhbmNlbFRva2VuIHx8IF9jb25maWcuc2lnbmFsKSB7XG4gICAgICAvLyBIYW5kbGUgY2FuY2VsbGF0aW9uXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZnVuYy1uYW1lc1xuICAgICAgb25DYW5jZWxlZCA9IGNhbmNlbCA9PiB7XG4gICAgICAgIGlmICghcmVxdWVzdCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICByZWplY3QoIWNhbmNlbCB8fCBjYW5jZWwudHlwZSA/IG5ldyBDYW5jZWxlZEVycm9yKG51bGwsIGNvbmZpZywgcmVxdWVzdCkgOiBjYW5jZWwpO1xuICAgICAgICByZXF1ZXN0LmFib3J0KCk7XG4gICAgICAgIHJlcXVlc3QgPSBudWxsO1xuICAgICAgfTtcblxuICAgICAgX2NvbmZpZy5jYW5jZWxUb2tlbiAmJiBfY29uZmlnLmNhbmNlbFRva2VuLnN1YnNjcmliZShvbkNhbmNlbGVkKTtcbiAgICAgIGlmIChfY29uZmlnLnNpZ25hbCkge1xuICAgICAgICBfY29uZmlnLnNpZ25hbC5hYm9ydGVkID8gb25DYW5jZWxlZCgpIDogX2NvbmZpZy5zaWduYWwuYWRkRXZlbnRMaXN0ZW5lcignYWJvcnQnLCBvbkNhbmNlbGVkKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBwcm90b2NvbCA9IHBhcnNlUHJvdG9jb2woX2NvbmZpZy51cmwpO1xuXG4gICAgaWYgKHByb3RvY29sICYmIHBsYXRmb3JtLnByb3RvY29scy5pbmRleE9mKHByb3RvY29sKSA9PT0gLTEpIHtcbiAgICAgIHJlamVjdChuZXcgQXhpb3NFcnJvcignVW5zdXBwb3J0ZWQgcHJvdG9jb2wgJyArIHByb3RvY29sICsgJzonLCBBeGlvc0Vycm9yLkVSUl9CQURfUkVRVUVTVCwgY29uZmlnKSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG5cbiAgICAvLyBTZW5kIHRoZSByZXF1ZXN0XG4gICAgcmVxdWVzdC5zZW5kKHJlcXVlc3REYXRhIHx8IG51bGwpO1xuICB9KTtcbn07XG5cbmNvbnN0IGNvbXBvc2VTaWduYWxzID0gKHNpZ25hbHMsIHRpbWVvdXQpID0+IHtcbiAgbGV0IGNvbnRyb2xsZXIgPSBuZXcgQWJvcnRDb250cm9sbGVyKCk7XG5cbiAgbGV0IGFib3J0ZWQ7XG5cbiAgY29uc3Qgb25hYm9ydCA9IGZ1bmN0aW9uIChjYW5jZWwpIHtcbiAgICBpZiAoIWFib3J0ZWQpIHtcbiAgICAgIGFib3J0ZWQgPSB0cnVlO1xuICAgICAgdW5zdWJzY3JpYmUoKTtcbiAgICAgIGNvbnN0IGVyciA9IGNhbmNlbCBpbnN0YW5jZW9mIEVycm9yID8gY2FuY2VsIDogdGhpcy5yZWFzb247XG4gICAgICBjb250cm9sbGVyLmFib3J0KGVyciBpbnN0YW5jZW9mIEF4aW9zRXJyb3IgPyBlcnIgOiBuZXcgQ2FuY2VsZWRFcnJvcihlcnIgaW5zdGFuY2VvZiBFcnJvciA/IGVyci5tZXNzYWdlIDogZXJyKSk7XG4gICAgfVxuICB9O1xuXG4gIGxldCB0aW1lciA9IHRpbWVvdXQgJiYgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgb25hYm9ydChuZXcgQXhpb3NFcnJvcihgdGltZW91dCAke3RpbWVvdXR9IG9mIG1zIGV4Y2VlZGVkYCwgQXhpb3NFcnJvci5FVElNRURPVVQpKTtcbiAgfSwgdGltZW91dCk7XG5cbiAgY29uc3QgdW5zdWJzY3JpYmUgPSAoKSA9PiB7XG4gICAgaWYgKHNpZ25hbHMpIHtcbiAgICAgIHRpbWVyICYmIGNsZWFyVGltZW91dCh0aW1lcik7XG4gICAgICB0aW1lciA9IG51bGw7XG4gICAgICBzaWduYWxzLmZvckVhY2goc2lnbmFsID0+IHtcbiAgICAgICAgc2lnbmFsICYmXG4gICAgICAgIChzaWduYWwucmVtb3ZlRXZlbnRMaXN0ZW5lciA/IHNpZ25hbC5yZW1vdmVFdmVudExpc3RlbmVyKCdhYm9ydCcsIG9uYWJvcnQpIDogc2lnbmFsLnVuc3Vic2NyaWJlKG9uYWJvcnQpKTtcbiAgICAgIH0pO1xuICAgICAgc2lnbmFscyA9IG51bGw7XG4gICAgfVxuICB9O1xuXG4gIHNpZ25hbHMuZm9yRWFjaCgoc2lnbmFsKSA9PiBzaWduYWwgJiYgc2lnbmFsLmFkZEV2ZW50TGlzdGVuZXIgJiYgc2lnbmFsLmFkZEV2ZW50TGlzdGVuZXIoJ2Fib3J0Jywgb25hYm9ydCkpO1xuXG4gIGNvbnN0IHtzaWduYWx9ID0gY29udHJvbGxlcjtcblxuICBzaWduYWwudW5zdWJzY3JpYmUgPSB1bnN1YnNjcmliZTtcblxuICByZXR1cm4gW3NpZ25hbCwgKCkgPT4ge1xuICAgIHRpbWVyICYmIGNsZWFyVGltZW91dCh0aW1lcik7XG4gICAgdGltZXIgPSBudWxsO1xuICB9XTtcbn07XG5cbnZhciBjb21wb3NlU2lnbmFscyQxID0gY29tcG9zZVNpZ25hbHM7XG5cbmNvbnN0IHN0cmVhbUNodW5rID0gZnVuY3Rpb24qIChjaHVuaywgY2h1bmtTaXplKSB7XG4gIGxldCBsZW4gPSBjaHVuay5ieXRlTGVuZ3RoO1xuXG4gIGlmICghY2h1bmtTaXplIHx8IGxlbiA8IGNodW5rU2l6ZSkge1xuICAgIHlpZWxkIGNodW5rO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGxldCBwb3MgPSAwO1xuICBsZXQgZW5kO1xuXG4gIHdoaWxlIChwb3MgPCBsZW4pIHtcbiAgICBlbmQgPSBwb3MgKyBjaHVua1NpemU7XG4gICAgeWllbGQgY2h1bmsuc2xpY2UocG9zLCBlbmQpO1xuICAgIHBvcyA9IGVuZDtcbiAgfVxufTtcblxuY29uc3QgcmVhZEJ5dGVzID0gYXN5bmMgZnVuY3Rpb24qIChpdGVyYWJsZSwgY2h1bmtTaXplLCBlbmNvZGUpIHtcbiAgZm9yIGF3YWl0IChjb25zdCBjaHVuayBvZiBpdGVyYWJsZSkge1xuICAgIHlpZWxkKiBzdHJlYW1DaHVuayhBcnJheUJ1ZmZlci5pc1ZpZXcoY2h1bmspID8gY2h1bmsgOiAoYXdhaXQgZW5jb2RlKFN0cmluZyhjaHVuaykpKSwgY2h1bmtTaXplKTtcbiAgfVxufTtcblxuY29uc3QgdHJhY2tTdHJlYW0gPSAoc3RyZWFtLCBjaHVua1NpemUsIG9uUHJvZ3Jlc3MsIG9uRmluaXNoLCBlbmNvZGUpID0+IHtcbiAgY29uc3QgaXRlcmF0b3IgPSByZWFkQnl0ZXMoc3RyZWFtLCBjaHVua1NpemUsIGVuY29kZSk7XG5cbiAgbGV0IGJ5dGVzID0gMDtcbiAgbGV0IGRvbmU7XG4gIGxldCBfb25GaW5pc2ggPSAoZSkgPT4ge1xuICAgIGlmICghZG9uZSkge1xuICAgICAgZG9uZSA9IHRydWU7XG4gICAgICBvbkZpbmlzaCAmJiBvbkZpbmlzaChlKTtcbiAgICB9XG4gIH07XG5cbiAgcmV0dXJuIG5ldyBSZWFkYWJsZVN0cmVhbSh7XG4gICAgYXN5bmMgcHVsbChjb250cm9sbGVyKSB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCB7ZG9uZSwgdmFsdWV9ID0gYXdhaXQgaXRlcmF0b3IubmV4dCgpO1xuXG4gICAgICAgIGlmIChkb25lKSB7XG4gICAgICAgICBfb25GaW5pc2goKTtcbiAgICAgICAgICBjb250cm9sbGVyLmNsb3NlKCk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGxlbiA9IHZhbHVlLmJ5dGVMZW5ndGg7XG4gICAgICAgIGlmIChvblByb2dyZXNzKSB7XG4gICAgICAgICAgbGV0IGxvYWRlZEJ5dGVzID0gYnl0ZXMgKz0gbGVuO1xuICAgICAgICAgIG9uUHJvZ3Jlc3MobG9hZGVkQnl0ZXMpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnRyb2xsZXIuZW5xdWV1ZShuZXcgVWludDhBcnJheSh2YWx1ZSkpO1xuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIF9vbkZpbmlzaChlcnIpO1xuICAgICAgICB0aHJvdyBlcnI7XG4gICAgICB9XG4gICAgfSxcbiAgICBjYW5jZWwocmVhc29uKSB7XG4gICAgICBfb25GaW5pc2gocmVhc29uKTtcbiAgICAgIHJldHVybiBpdGVyYXRvci5yZXR1cm4oKTtcbiAgICB9XG4gIH0sIHtcbiAgICBoaWdoV2F0ZXJNYXJrOiAyXG4gIH0pXG59O1xuXG5jb25zdCBpc0ZldGNoU3VwcG9ydGVkID0gdHlwZW9mIGZldGNoID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBSZXF1ZXN0ID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBSZXNwb25zZSA9PT0gJ2Z1bmN0aW9uJztcbmNvbnN0IGlzUmVhZGFibGVTdHJlYW1TdXBwb3J0ZWQgPSBpc0ZldGNoU3VwcG9ydGVkICYmIHR5cGVvZiBSZWFkYWJsZVN0cmVhbSA9PT0gJ2Z1bmN0aW9uJztcblxuLy8gdXNlZCBvbmx5IGluc2lkZSB0aGUgZmV0Y2ggYWRhcHRlclxuY29uc3QgZW5jb2RlVGV4dCA9IGlzRmV0Y2hTdXBwb3J0ZWQgJiYgKHR5cGVvZiBUZXh0RW5jb2RlciA9PT0gJ2Z1bmN0aW9uJyA/XG4gICAgKChlbmNvZGVyKSA9PiAoc3RyKSA9PiBlbmNvZGVyLmVuY29kZShzdHIpKShuZXcgVGV4dEVuY29kZXIoKSkgOlxuICAgIGFzeW5jIChzdHIpID0+IG5ldyBVaW50OEFycmF5KGF3YWl0IG5ldyBSZXNwb25zZShzdHIpLmFycmF5QnVmZmVyKCkpXG4pO1xuXG5jb25zdCB0ZXN0ID0gKGZuLCAuLi5hcmdzKSA9PiB7XG4gIHRyeSB7XG4gICAgcmV0dXJuICEhZm4oLi4uYXJncyk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxufTtcblxuY29uc3Qgc3VwcG9ydHNSZXF1ZXN0U3RyZWFtID0gaXNSZWFkYWJsZVN0cmVhbVN1cHBvcnRlZCAmJiB0ZXN0KCgpID0+IHtcbiAgbGV0IGR1cGxleEFjY2Vzc2VkID0gZmFsc2U7XG5cbiAgY29uc3QgaGFzQ29udGVudFR5cGUgPSBuZXcgUmVxdWVzdChwbGF0Zm9ybS5vcmlnaW4sIHtcbiAgICBib2R5OiBuZXcgUmVhZGFibGVTdHJlYW0oKSxcbiAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICBnZXQgZHVwbGV4KCkge1xuICAgICAgZHVwbGV4QWNjZXNzZWQgPSB0cnVlO1xuICAgICAgcmV0dXJuICdoYWxmJztcbiAgICB9LFxuICB9KS5oZWFkZXJzLmhhcygnQ29udGVudC1UeXBlJyk7XG5cbiAgcmV0dXJuIGR1cGxleEFjY2Vzc2VkICYmICFoYXNDb250ZW50VHlwZTtcbn0pO1xuXG5jb25zdCBERUZBVUxUX0NIVU5LX1NJWkUgPSA2NCAqIDEwMjQ7XG5cbmNvbnN0IHN1cHBvcnRzUmVzcG9uc2VTdHJlYW0gPSBpc1JlYWRhYmxlU3RyZWFtU3VwcG9ydGVkICYmXG4gIHRlc3QoKCkgPT4gdXRpbHMkMS5pc1JlYWRhYmxlU3RyZWFtKG5ldyBSZXNwb25zZSgnJykuYm9keSkpO1xuXG5cbmNvbnN0IHJlc29sdmVycyA9IHtcbiAgc3RyZWFtOiBzdXBwb3J0c1Jlc3BvbnNlU3RyZWFtICYmICgocmVzKSA9PiByZXMuYm9keSlcbn07XG5cbmlzRmV0Y2hTdXBwb3J0ZWQgJiYgKCgocmVzKSA9PiB7XG4gIFsndGV4dCcsICdhcnJheUJ1ZmZlcicsICdibG9iJywgJ2Zvcm1EYXRhJywgJ3N0cmVhbSddLmZvckVhY2godHlwZSA9PiB7XG4gICAgIXJlc29sdmVyc1t0eXBlXSAmJiAocmVzb2x2ZXJzW3R5cGVdID0gdXRpbHMkMS5pc0Z1bmN0aW9uKHJlc1t0eXBlXSkgPyAocmVzKSA9PiByZXNbdHlwZV0oKSA6XG4gICAgICAoXywgY29uZmlnKSA9PiB7XG4gICAgICAgIHRocm93IG5ldyBBeGlvc0Vycm9yKGBSZXNwb25zZSB0eXBlICcke3R5cGV9JyBpcyBub3Qgc3VwcG9ydGVkYCwgQXhpb3NFcnJvci5FUlJfTk9UX1NVUFBPUlQsIGNvbmZpZyk7XG4gICAgICB9KTtcbiAgfSk7XG59KShuZXcgUmVzcG9uc2UpKTtcblxuY29uc3QgZ2V0Qm9keUxlbmd0aCA9IGFzeW5jIChib2R5KSA9PiB7XG4gIGlmIChib2R5ID09IG51bGwpIHtcbiAgICByZXR1cm4gMDtcbiAgfVxuXG4gIGlmKHV0aWxzJDEuaXNCbG9iKGJvZHkpKSB7XG4gICAgcmV0dXJuIGJvZHkuc2l6ZTtcbiAgfVxuXG4gIGlmKHV0aWxzJDEuaXNTcGVjQ29tcGxpYW50Rm9ybShib2R5KSkge1xuICAgIHJldHVybiAoYXdhaXQgbmV3IFJlcXVlc3QoYm9keSkuYXJyYXlCdWZmZXIoKSkuYnl0ZUxlbmd0aDtcbiAgfVxuXG4gIGlmKHV0aWxzJDEuaXNBcnJheUJ1ZmZlclZpZXcoYm9keSkgfHwgdXRpbHMkMS5pc0FycmF5QnVmZmVyKGJvZHkpKSB7XG4gICAgcmV0dXJuIGJvZHkuYnl0ZUxlbmd0aDtcbiAgfVxuXG4gIGlmKHV0aWxzJDEuaXNVUkxTZWFyY2hQYXJhbXMoYm9keSkpIHtcbiAgICBib2R5ID0gYm9keSArICcnO1xuICB9XG5cbiAgaWYodXRpbHMkMS5pc1N0cmluZyhib2R5KSkge1xuICAgIHJldHVybiAoYXdhaXQgZW5jb2RlVGV4dChib2R5KSkuYnl0ZUxlbmd0aDtcbiAgfVxufTtcblxuY29uc3QgcmVzb2x2ZUJvZHlMZW5ndGggPSBhc3luYyAoaGVhZGVycywgYm9keSkgPT4ge1xuICBjb25zdCBsZW5ndGggPSB1dGlscyQxLnRvRmluaXRlTnVtYmVyKGhlYWRlcnMuZ2V0Q29udGVudExlbmd0aCgpKTtcblxuICByZXR1cm4gbGVuZ3RoID09IG51bGwgPyBnZXRCb2R5TGVuZ3RoKGJvZHkpIDogbGVuZ3RoO1xufTtcblxudmFyIGZldGNoQWRhcHRlciA9IGlzRmV0Y2hTdXBwb3J0ZWQgJiYgKGFzeW5jIChjb25maWcpID0+IHtcbiAgbGV0IHtcbiAgICB1cmwsXG4gICAgbWV0aG9kLFxuICAgIGRhdGEsXG4gICAgc2lnbmFsLFxuICAgIGNhbmNlbFRva2VuLFxuICAgIHRpbWVvdXQsXG4gICAgb25Eb3dubG9hZFByb2dyZXNzLFxuICAgIG9uVXBsb2FkUHJvZ3Jlc3MsXG4gICAgcmVzcG9uc2VUeXBlLFxuICAgIGhlYWRlcnMsXG4gICAgd2l0aENyZWRlbnRpYWxzID0gJ3NhbWUtb3JpZ2luJyxcbiAgICBmZXRjaE9wdGlvbnNcbiAgfSA9IHJlc29sdmVDb25maWcoY29uZmlnKTtcblxuICByZXNwb25zZVR5cGUgPSByZXNwb25zZVR5cGUgPyAocmVzcG9uc2VUeXBlICsgJycpLnRvTG93ZXJDYXNlKCkgOiAndGV4dCc7XG5cbiAgbGV0IFtjb21wb3NlZFNpZ25hbCwgc3RvcFRpbWVvdXRdID0gKHNpZ25hbCB8fCBjYW5jZWxUb2tlbiB8fCB0aW1lb3V0KSA/XG4gICAgY29tcG9zZVNpZ25hbHMkMShbc2lnbmFsLCBjYW5jZWxUb2tlbl0sIHRpbWVvdXQpIDogW107XG5cbiAgbGV0IGZpbmlzaGVkLCByZXF1ZXN0O1xuXG4gIGNvbnN0IG9uRmluaXNoID0gKCkgPT4ge1xuICAgICFmaW5pc2hlZCAmJiBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGNvbXBvc2VkU2lnbmFsICYmIGNvbXBvc2VkU2lnbmFsLnVuc3Vic2NyaWJlKCk7XG4gICAgfSk7XG5cbiAgICBmaW5pc2hlZCA9IHRydWU7XG4gIH07XG5cbiAgbGV0IHJlcXVlc3RDb250ZW50TGVuZ3RoO1xuXG4gIHRyeSB7XG4gICAgaWYgKFxuICAgICAgb25VcGxvYWRQcm9ncmVzcyAmJiBzdXBwb3J0c1JlcXVlc3RTdHJlYW0gJiYgbWV0aG9kICE9PSAnZ2V0JyAmJiBtZXRob2QgIT09ICdoZWFkJyAmJlxuICAgICAgKHJlcXVlc3RDb250ZW50TGVuZ3RoID0gYXdhaXQgcmVzb2x2ZUJvZHlMZW5ndGgoaGVhZGVycywgZGF0YSkpICE9PSAwXG4gICAgKSB7XG4gICAgICBsZXQgX3JlcXVlc3QgPSBuZXcgUmVxdWVzdCh1cmwsIHtcbiAgICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICAgIGJvZHk6IGRhdGEsXG4gICAgICAgIGR1cGxleDogXCJoYWxmXCJcbiAgICAgIH0pO1xuXG4gICAgICBsZXQgY29udGVudFR5cGVIZWFkZXI7XG5cbiAgICAgIGlmICh1dGlscyQxLmlzRm9ybURhdGEoZGF0YSkgJiYgKGNvbnRlbnRUeXBlSGVhZGVyID0gX3JlcXVlc3QuaGVhZGVycy5nZXQoJ2NvbnRlbnQtdHlwZScpKSkge1xuICAgICAgICBoZWFkZXJzLnNldENvbnRlbnRUeXBlKGNvbnRlbnRUeXBlSGVhZGVyKTtcbiAgICAgIH1cblxuICAgICAgaWYgKF9yZXF1ZXN0LmJvZHkpIHtcbiAgICAgICAgY29uc3QgW29uUHJvZ3Jlc3MsIGZsdXNoXSA9IHByb2dyZXNzRXZlbnREZWNvcmF0b3IoXG4gICAgICAgICAgcmVxdWVzdENvbnRlbnRMZW5ndGgsXG4gICAgICAgICAgcHJvZ3Jlc3NFdmVudFJlZHVjZXIoYXN5bmNEZWNvcmF0b3Iob25VcGxvYWRQcm9ncmVzcykpXG4gICAgICAgICk7XG5cbiAgICAgICAgZGF0YSA9IHRyYWNrU3RyZWFtKF9yZXF1ZXN0LmJvZHksIERFRkFVTFRfQ0hVTktfU0laRSwgb25Qcm9ncmVzcywgZmx1c2gsIGVuY29kZVRleHQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICghdXRpbHMkMS5pc1N0cmluZyh3aXRoQ3JlZGVudGlhbHMpKSB7XG4gICAgICB3aXRoQ3JlZGVudGlhbHMgPSB3aXRoQ3JlZGVudGlhbHMgPyAnaW5jbHVkZScgOiAnb21pdCc7XG4gICAgfVxuXG4gICAgcmVxdWVzdCA9IG5ldyBSZXF1ZXN0KHVybCwge1xuICAgICAgLi4uZmV0Y2hPcHRpb25zLFxuICAgICAgc2lnbmFsOiBjb21wb3NlZFNpZ25hbCxcbiAgICAgIG1ldGhvZDogbWV0aG9kLnRvVXBwZXJDYXNlKCksXG4gICAgICBoZWFkZXJzOiBoZWFkZXJzLm5vcm1hbGl6ZSgpLnRvSlNPTigpLFxuICAgICAgYm9keTogZGF0YSxcbiAgICAgIGR1cGxleDogXCJoYWxmXCIsXG4gICAgICBjcmVkZW50aWFsczogd2l0aENyZWRlbnRpYWxzXG4gICAgfSk7XG5cbiAgICBsZXQgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaChyZXF1ZXN0KTtcblxuICAgIGNvbnN0IGlzU3RyZWFtUmVzcG9uc2UgPSBzdXBwb3J0c1Jlc3BvbnNlU3RyZWFtICYmIChyZXNwb25zZVR5cGUgPT09ICdzdHJlYW0nIHx8IHJlc3BvbnNlVHlwZSA9PT0gJ3Jlc3BvbnNlJyk7XG5cbiAgICBpZiAoc3VwcG9ydHNSZXNwb25zZVN0cmVhbSAmJiAob25Eb3dubG9hZFByb2dyZXNzIHx8IGlzU3RyZWFtUmVzcG9uc2UpKSB7XG4gICAgICBjb25zdCBvcHRpb25zID0ge307XG5cbiAgICAgIFsnc3RhdHVzJywgJ3N0YXR1c1RleHQnLCAnaGVhZGVycyddLmZvckVhY2gocHJvcCA9PiB7XG4gICAgICAgIG9wdGlvbnNbcHJvcF0gPSByZXNwb25zZVtwcm9wXTtcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCByZXNwb25zZUNvbnRlbnRMZW5ndGggPSB1dGlscyQxLnRvRmluaXRlTnVtYmVyKHJlc3BvbnNlLmhlYWRlcnMuZ2V0KCdjb250ZW50LWxlbmd0aCcpKTtcblxuICAgICAgY29uc3QgW29uUHJvZ3Jlc3MsIGZsdXNoXSA9IG9uRG93bmxvYWRQcm9ncmVzcyAmJiBwcm9ncmVzc0V2ZW50RGVjb3JhdG9yKFxuICAgICAgICByZXNwb25zZUNvbnRlbnRMZW5ndGgsXG4gICAgICAgIHByb2dyZXNzRXZlbnRSZWR1Y2VyKGFzeW5jRGVjb3JhdG9yKG9uRG93bmxvYWRQcm9ncmVzcyksIHRydWUpXG4gICAgICApIHx8IFtdO1xuXG4gICAgICByZXNwb25zZSA9IG5ldyBSZXNwb25zZShcbiAgICAgICAgdHJhY2tTdHJlYW0ocmVzcG9uc2UuYm9keSwgREVGQVVMVF9DSFVOS19TSVpFLCBvblByb2dyZXNzLCAoKSA9PiB7XG4gICAgICAgICAgZmx1c2ggJiYgZmx1c2goKTtcbiAgICAgICAgICBpc1N0cmVhbVJlc3BvbnNlICYmIG9uRmluaXNoKCk7XG4gICAgICAgIH0sIGVuY29kZVRleHQpLFxuICAgICAgICBvcHRpb25zXG4gICAgICApO1xuICAgIH1cblxuICAgIHJlc3BvbnNlVHlwZSA9IHJlc3BvbnNlVHlwZSB8fCAndGV4dCc7XG5cbiAgICBsZXQgcmVzcG9uc2VEYXRhID0gYXdhaXQgcmVzb2x2ZXJzW3V0aWxzJDEuZmluZEtleShyZXNvbHZlcnMsIHJlc3BvbnNlVHlwZSkgfHwgJ3RleHQnXShyZXNwb25zZSwgY29uZmlnKTtcblxuICAgICFpc1N0cmVhbVJlc3BvbnNlICYmIG9uRmluaXNoKCk7XG5cbiAgICBzdG9wVGltZW91dCAmJiBzdG9wVGltZW91dCgpO1xuXG4gICAgcmV0dXJuIGF3YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIHNldHRsZShyZXNvbHZlLCByZWplY3QsIHtcbiAgICAgICAgZGF0YTogcmVzcG9uc2VEYXRhLFxuICAgICAgICBoZWFkZXJzOiBBeGlvc0hlYWRlcnMkMS5mcm9tKHJlc3BvbnNlLmhlYWRlcnMpLFxuICAgICAgICBzdGF0dXM6IHJlc3BvbnNlLnN0YXR1cyxcbiAgICAgICAgc3RhdHVzVGV4dDogcmVzcG9uc2Uuc3RhdHVzVGV4dCxcbiAgICAgICAgY29uZmlnLFxuICAgICAgICByZXF1ZXN0XG4gICAgICB9KTtcbiAgICB9KVxuICB9IGNhdGNoIChlcnIpIHtcbiAgICBvbkZpbmlzaCgpO1xuXG4gICAgaWYgKGVyciAmJiBlcnIubmFtZSA9PT0gJ1R5cGVFcnJvcicgJiYgL2ZldGNoL2kudGVzdChlcnIubWVzc2FnZSkpIHtcbiAgICAgIHRocm93IE9iamVjdC5hc3NpZ24oXG4gICAgICAgIG5ldyBBeGlvc0Vycm9yKCdOZXR3b3JrIEVycm9yJywgQXhpb3NFcnJvci5FUlJfTkVUV09SSywgY29uZmlnLCByZXF1ZXN0KSxcbiAgICAgICAge1xuICAgICAgICAgIGNhdXNlOiBlcnIuY2F1c2UgfHwgZXJyXG4gICAgICAgIH1cbiAgICAgIClcbiAgICB9XG5cbiAgICB0aHJvdyBBeGlvc0Vycm9yLmZyb20oZXJyLCBlcnIgJiYgZXJyLmNvZGUsIGNvbmZpZywgcmVxdWVzdCk7XG4gIH1cbn0pO1xuXG5jb25zdCBrbm93bkFkYXB0ZXJzID0ge1xuICBodHRwOiBodHRwQWRhcHRlcixcbiAgeGhyOiB4aHJBZGFwdGVyLFxuICBmZXRjaDogZmV0Y2hBZGFwdGVyXG59O1xuXG51dGlscyQxLmZvckVhY2goa25vd25BZGFwdGVycywgKGZuLCB2YWx1ZSkgPT4ge1xuICBpZiAoZm4pIHtcbiAgICB0cnkge1xuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGZuLCAnbmFtZScsIHt2YWx1ZX0pO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1lbXB0eVxuICAgIH1cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZm4sICdhZGFwdGVyTmFtZScsIHt2YWx1ZX0pO1xuICB9XG59KTtcblxuY29uc3QgcmVuZGVyUmVhc29uID0gKHJlYXNvbikgPT4gYC0gJHtyZWFzb259YDtcblxuY29uc3QgaXNSZXNvbHZlZEhhbmRsZSA9IChhZGFwdGVyKSA9PiB1dGlscyQxLmlzRnVuY3Rpb24oYWRhcHRlcikgfHwgYWRhcHRlciA9PT0gbnVsbCB8fCBhZGFwdGVyID09PSBmYWxzZTtcblxudmFyIGFkYXB0ZXJzID0ge1xuICBnZXRBZGFwdGVyOiAoYWRhcHRlcnMpID0+IHtcbiAgICBhZGFwdGVycyA9IHV0aWxzJDEuaXNBcnJheShhZGFwdGVycykgPyBhZGFwdGVycyA6IFthZGFwdGVyc107XG5cbiAgICBjb25zdCB7bGVuZ3RofSA9IGFkYXB0ZXJzO1xuICAgIGxldCBuYW1lT3JBZGFwdGVyO1xuICAgIGxldCBhZGFwdGVyO1xuXG4gICAgY29uc3QgcmVqZWN0ZWRSZWFzb25zID0ge307XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICBuYW1lT3JBZGFwdGVyID0gYWRhcHRlcnNbaV07XG4gICAgICBsZXQgaWQ7XG5cbiAgICAgIGFkYXB0ZXIgPSBuYW1lT3JBZGFwdGVyO1xuXG4gICAgICBpZiAoIWlzUmVzb2x2ZWRIYW5kbGUobmFtZU9yQWRhcHRlcikpIHtcbiAgICAgICAgYWRhcHRlciA9IGtub3duQWRhcHRlcnNbKGlkID0gU3RyaW5nKG5hbWVPckFkYXB0ZXIpKS50b0xvd2VyQ2FzZSgpXTtcblxuICAgICAgICBpZiAoYWRhcHRlciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEF4aW9zRXJyb3IoYFVua25vd24gYWRhcHRlciAnJHtpZH0nYCk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKGFkYXB0ZXIpIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICAgIHJlamVjdGVkUmVhc29uc1tpZCB8fCAnIycgKyBpXSA9IGFkYXB0ZXI7XG4gICAgfVxuXG4gICAgaWYgKCFhZGFwdGVyKSB7XG5cbiAgICAgIGNvbnN0IHJlYXNvbnMgPSBPYmplY3QuZW50cmllcyhyZWplY3RlZFJlYXNvbnMpXG4gICAgICAgIC5tYXAoKFtpZCwgc3RhdGVdKSA9PiBgYWRhcHRlciAke2lkfSBgICtcbiAgICAgICAgICAoc3RhdGUgPT09IGZhbHNlID8gJ2lzIG5vdCBzdXBwb3J0ZWQgYnkgdGhlIGVudmlyb25tZW50JyA6ICdpcyBub3QgYXZhaWxhYmxlIGluIHRoZSBidWlsZCcpXG4gICAgICAgICk7XG5cbiAgICAgIGxldCBzID0gbGVuZ3RoID9cbiAgICAgICAgKHJlYXNvbnMubGVuZ3RoID4gMSA/ICdzaW5jZSA6XFxuJyArIHJlYXNvbnMubWFwKHJlbmRlclJlYXNvbikuam9pbignXFxuJykgOiAnICcgKyByZW5kZXJSZWFzb24ocmVhc29uc1swXSkpIDpcbiAgICAgICAgJ2FzIG5vIGFkYXB0ZXIgc3BlY2lmaWVkJztcblxuICAgICAgdGhyb3cgbmV3IEF4aW9zRXJyb3IoXG4gICAgICAgIGBUaGVyZSBpcyBubyBzdWl0YWJsZSBhZGFwdGVyIHRvIGRpc3BhdGNoIHRoZSByZXF1ZXN0IGAgKyBzLFxuICAgICAgICAnRVJSX05PVF9TVVBQT1JUJ1xuICAgICAgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gYWRhcHRlcjtcbiAgfSxcbiAgYWRhcHRlcnM6IGtub3duQWRhcHRlcnNcbn07XG5cbi8qKlxuICogVGhyb3dzIGEgYENhbmNlbGVkRXJyb3JgIGlmIGNhbmNlbGxhdGlvbiBoYXMgYmVlbiByZXF1ZXN0ZWQuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGNvbmZpZyBUaGUgY29uZmlnIHRoYXQgaXMgdG8gYmUgdXNlZCBmb3IgdGhlIHJlcXVlc3RcbiAqXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuZnVuY3Rpb24gdGhyb3dJZkNhbmNlbGxhdGlvblJlcXVlc3RlZChjb25maWcpIHtcbiAgaWYgKGNvbmZpZy5jYW5jZWxUb2tlbikge1xuICAgIGNvbmZpZy5jYW5jZWxUb2tlbi50aHJvd0lmUmVxdWVzdGVkKCk7XG4gIH1cblxuICBpZiAoY29uZmlnLnNpZ25hbCAmJiBjb25maWcuc2lnbmFsLmFib3J0ZWQpIHtcbiAgICB0aHJvdyBuZXcgQ2FuY2VsZWRFcnJvcihudWxsLCBjb25maWcpO1xuICB9XG59XG5cbi8qKlxuICogRGlzcGF0Y2ggYSByZXF1ZXN0IHRvIHRoZSBzZXJ2ZXIgdXNpbmcgdGhlIGNvbmZpZ3VyZWQgYWRhcHRlci5cbiAqXG4gKiBAcGFyYW0ge29iamVjdH0gY29uZmlnIFRoZSBjb25maWcgdGhhdCBpcyB0byBiZSB1c2VkIGZvciB0aGUgcmVxdWVzdFxuICpcbiAqIEByZXR1cm5zIHtQcm9taXNlfSBUaGUgUHJvbWlzZSB0byBiZSBmdWxmaWxsZWRcbiAqL1xuZnVuY3Rpb24gZGlzcGF0Y2hSZXF1ZXN0KGNvbmZpZykge1xuICB0aHJvd0lmQ2FuY2VsbGF0aW9uUmVxdWVzdGVkKGNvbmZpZyk7XG5cbiAgY29uZmlnLmhlYWRlcnMgPSBBeGlvc0hlYWRlcnMkMS5mcm9tKGNvbmZpZy5oZWFkZXJzKTtcblxuICAvLyBUcmFuc2Zvcm0gcmVxdWVzdCBkYXRhXG4gIGNvbmZpZy5kYXRhID0gdHJhbnNmb3JtRGF0YS5jYWxsKFxuICAgIGNvbmZpZyxcbiAgICBjb25maWcudHJhbnNmb3JtUmVxdWVzdFxuICApO1xuXG4gIGlmIChbJ3Bvc3QnLCAncHV0JywgJ3BhdGNoJ10uaW5kZXhPZihjb25maWcubWV0aG9kKSAhPT0gLTEpIHtcbiAgICBjb25maWcuaGVhZGVycy5zZXRDb250ZW50VHlwZSgnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJywgZmFsc2UpO1xuICB9XG5cbiAgY29uc3QgYWRhcHRlciA9IGFkYXB0ZXJzLmdldEFkYXB0ZXIoY29uZmlnLmFkYXB0ZXIgfHwgZGVmYXVsdHMkMS5hZGFwdGVyKTtcblxuICByZXR1cm4gYWRhcHRlcihjb25maWcpLnRoZW4oZnVuY3Rpb24gb25BZGFwdGVyUmVzb2x1dGlvbihyZXNwb25zZSkge1xuICAgIHRocm93SWZDYW5jZWxsYXRpb25SZXF1ZXN0ZWQoY29uZmlnKTtcblxuICAgIC8vIFRyYW5zZm9ybSByZXNwb25zZSBkYXRhXG4gICAgcmVzcG9uc2UuZGF0YSA9IHRyYW5zZm9ybURhdGEuY2FsbChcbiAgICAgIGNvbmZpZyxcbiAgICAgIGNvbmZpZy50cmFuc2Zvcm1SZXNwb25zZSxcbiAgICAgIHJlc3BvbnNlXG4gICAgKTtcblxuICAgIHJlc3BvbnNlLmhlYWRlcnMgPSBBeGlvc0hlYWRlcnMkMS5mcm9tKHJlc3BvbnNlLmhlYWRlcnMpO1xuXG4gICAgcmV0dXJuIHJlc3BvbnNlO1xuICB9LCBmdW5jdGlvbiBvbkFkYXB0ZXJSZWplY3Rpb24ocmVhc29uKSB7XG4gICAgaWYgKCFpc0NhbmNlbChyZWFzb24pKSB7XG4gICAgICB0aHJvd0lmQ2FuY2VsbGF0aW9uUmVxdWVzdGVkKGNvbmZpZyk7XG5cbiAgICAgIC8vIFRyYW5zZm9ybSByZXNwb25zZSBkYXRhXG4gICAgICBpZiAocmVhc29uICYmIHJlYXNvbi5yZXNwb25zZSkge1xuICAgICAgICByZWFzb24ucmVzcG9uc2UuZGF0YSA9IHRyYW5zZm9ybURhdGEuY2FsbChcbiAgICAgICAgICBjb25maWcsXG4gICAgICAgICAgY29uZmlnLnRyYW5zZm9ybVJlc3BvbnNlLFxuICAgICAgICAgIHJlYXNvbi5yZXNwb25zZVxuICAgICAgICApO1xuICAgICAgICByZWFzb24ucmVzcG9uc2UuaGVhZGVycyA9IEF4aW9zSGVhZGVycyQxLmZyb20ocmVhc29uLnJlc3BvbnNlLmhlYWRlcnMpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBQcm9taXNlLnJlamVjdChyZWFzb24pO1xuICB9KTtcbn1cblxuY29uc3QgVkVSU0lPTiA9IFwiMS43LjRcIjtcblxuY29uc3QgdmFsaWRhdG9ycyQxID0ge307XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBmdW5jLW5hbWVzXG5bJ29iamVjdCcsICdib29sZWFuJywgJ251bWJlcicsICdmdW5jdGlvbicsICdzdHJpbmcnLCAnc3ltYm9sJ10uZm9yRWFjaCgodHlwZSwgaSkgPT4ge1xuICB2YWxpZGF0b3JzJDFbdHlwZV0gPSBmdW5jdGlvbiB2YWxpZGF0b3IodGhpbmcpIHtcbiAgICByZXR1cm4gdHlwZW9mIHRoaW5nID09PSB0eXBlIHx8ICdhJyArIChpIDwgMSA/ICduICcgOiAnICcpICsgdHlwZTtcbiAgfTtcbn0pO1xuXG5jb25zdCBkZXByZWNhdGVkV2FybmluZ3MgPSB7fTtcblxuLyoqXG4gKiBUcmFuc2l0aW9uYWwgb3B0aW9uIHZhbGlkYXRvclxuICpcbiAqIEBwYXJhbSB7ZnVuY3Rpb258Ym9vbGVhbj99IHZhbGlkYXRvciAtIHNldCB0byBmYWxzZSBpZiB0aGUgdHJhbnNpdGlvbmFsIG9wdGlvbiBoYXMgYmVlbiByZW1vdmVkXG4gKiBAcGFyYW0ge3N0cmluZz99IHZlcnNpb24gLSBkZXByZWNhdGVkIHZlcnNpb24gLyByZW1vdmVkIHNpbmNlIHZlcnNpb25cbiAqIEBwYXJhbSB7c3RyaW5nP30gbWVzc2FnZSAtIHNvbWUgbWVzc2FnZSB3aXRoIGFkZGl0aW9uYWwgaW5mb1xuICpcbiAqIEByZXR1cm5zIHtmdW5jdGlvbn1cbiAqL1xudmFsaWRhdG9ycyQxLnRyYW5zaXRpb25hbCA9IGZ1bmN0aW9uIHRyYW5zaXRpb25hbCh2YWxpZGF0b3IsIHZlcnNpb24sIG1lc3NhZ2UpIHtcbiAgZnVuY3Rpb24gZm9ybWF0TWVzc2FnZShvcHQsIGRlc2MpIHtcbiAgICByZXR1cm4gJ1tBeGlvcyB2JyArIFZFUlNJT04gKyAnXSBUcmFuc2l0aW9uYWwgb3B0aW9uIFxcJycgKyBvcHQgKyAnXFwnJyArIGRlc2MgKyAobWVzc2FnZSA/ICcuICcgKyBtZXNzYWdlIDogJycpO1xuICB9XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGZ1bmMtbmFtZXNcbiAgcmV0dXJuICh2YWx1ZSwgb3B0LCBvcHRzKSA9PiB7XG4gICAgaWYgKHZhbGlkYXRvciA9PT0gZmFsc2UpIHtcbiAgICAgIHRocm93IG5ldyBBeGlvc0Vycm9yKFxuICAgICAgICBmb3JtYXRNZXNzYWdlKG9wdCwgJyBoYXMgYmVlbiByZW1vdmVkJyArICh2ZXJzaW9uID8gJyBpbiAnICsgdmVyc2lvbiA6ICcnKSksXG4gICAgICAgIEF4aW9zRXJyb3IuRVJSX0RFUFJFQ0FURURcbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKHZlcnNpb24gJiYgIWRlcHJlY2F0ZWRXYXJuaW5nc1tvcHRdKSB7XG4gICAgICBkZXByZWNhdGVkV2FybmluZ3Nbb3B0XSA9IHRydWU7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICBmb3JtYXRNZXNzYWdlKFxuICAgICAgICAgIG9wdCxcbiAgICAgICAgICAnIGhhcyBiZWVuIGRlcHJlY2F0ZWQgc2luY2UgdicgKyB2ZXJzaW9uICsgJyBhbmQgd2lsbCBiZSByZW1vdmVkIGluIHRoZSBuZWFyIGZ1dHVyZSdcbiAgICAgICAgKVxuICAgICAgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdmFsaWRhdG9yID8gdmFsaWRhdG9yKHZhbHVlLCBvcHQsIG9wdHMpIDogdHJ1ZTtcbiAgfTtcbn07XG5cbi8qKlxuICogQXNzZXJ0IG9iamVjdCdzIHByb3BlcnRpZXMgdHlwZVxuICpcbiAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zXG4gKiBAcGFyYW0ge29iamVjdH0gc2NoZW1hXG4gKiBAcGFyYW0ge2Jvb2xlYW4/fSBhbGxvd1Vua25vd25cbiAqXG4gKiBAcmV0dXJucyB7b2JqZWN0fVxuICovXG5cbmZ1bmN0aW9uIGFzc2VydE9wdGlvbnMob3B0aW9ucywgc2NoZW1hLCBhbGxvd1Vua25vd24pIHtcbiAgaWYgKHR5cGVvZiBvcHRpb25zICE9PSAnb2JqZWN0Jykge1xuICAgIHRocm93IG5ldyBBeGlvc0Vycm9yKCdvcHRpb25zIG11c3QgYmUgYW4gb2JqZWN0JywgQXhpb3NFcnJvci5FUlJfQkFEX09QVElPTl9WQUxVRSk7XG4gIH1cbiAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKG9wdGlvbnMpO1xuICBsZXQgaSA9IGtleXMubGVuZ3RoO1xuICB3aGlsZSAoaS0tID4gMCkge1xuICAgIGNvbnN0IG9wdCA9IGtleXNbaV07XG4gICAgY29uc3QgdmFsaWRhdG9yID0gc2NoZW1hW29wdF07XG4gICAgaWYgKHZhbGlkYXRvcikge1xuICAgICAgY29uc3QgdmFsdWUgPSBvcHRpb25zW29wdF07XG4gICAgICBjb25zdCByZXN1bHQgPSB2YWx1ZSA9PT0gdW5kZWZpbmVkIHx8IHZhbGlkYXRvcih2YWx1ZSwgb3B0LCBvcHRpb25zKTtcbiAgICAgIGlmIChyZXN1bHQgIT09IHRydWUpIHtcbiAgICAgICAgdGhyb3cgbmV3IEF4aW9zRXJyb3IoJ29wdGlvbiAnICsgb3B0ICsgJyBtdXN0IGJlICcgKyByZXN1bHQsIEF4aW9zRXJyb3IuRVJSX0JBRF9PUFRJT05fVkFMVUUpO1xuICAgICAgfVxuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGlmIChhbGxvd1Vua25vd24gIT09IHRydWUpIHtcbiAgICAgIHRocm93IG5ldyBBeGlvc0Vycm9yKCdVbmtub3duIG9wdGlvbiAnICsgb3B0LCBBeGlvc0Vycm9yLkVSUl9CQURfT1BUSU9OKTtcbiAgICB9XG4gIH1cbn1cblxudmFyIHZhbGlkYXRvciA9IHtcbiAgYXNzZXJ0T3B0aW9ucyxcbiAgdmFsaWRhdG9yczogdmFsaWRhdG9ycyQxXG59O1xuXG5jb25zdCB2YWxpZGF0b3JzID0gdmFsaWRhdG9yLnZhbGlkYXRvcnM7XG5cbi8qKlxuICogQ3JlYXRlIGEgbmV3IGluc3RhbmNlIG9mIEF4aW9zXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGluc3RhbmNlQ29uZmlnIFRoZSBkZWZhdWx0IGNvbmZpZyBmb3IgdGhlIGluc3RhbmNlXG4gKlxuICogQHJldHVybiB7QXhpb3N9IEEgbmV3IGluc3RhbmNlIG9mIEF4aW9zXG4gKi9cbmNsYXNzIEF4aW9zIHtcbiAgY29uc3RydWN0b3IoaW5zdGFuY2VDb25maWcpIHtcbiAgICB0aGlzLmRlZmF1bHRzID0gaW5zdGFuY2VDb25maWc7XG4gICAgdGhpcy5pbnRlcmNlcHRvcnMgPSB7XG4gICAgICByZXF1ZXN0OiBuZXcgSW50ZXJjZXB0b3JNYW5hZ2VyJDEoKSxcbiAgICAgIHJlc3BvbnNlOiBuZXcgSW50ZXJjZXB0b3JNYW5hZ2VyJDEoKVxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogRGlzcGF0Y2ggYSByZXF1ZXN0XG4gICAqXG4gICAqIEBwYXJhbSB7U3RyaW5nfE9iamVjdH0gY29uZmlnT3JVcmwgVGhlIGNvbmZpZyBzcGVjaWZpYyBmb3IgdGhpcyByZXF1ZXN0IChtZXJnZWQgd2l0aCB0aGlzLmRlZmF1bHRzKVxuICAgKiBAcGFyYW0gez9PYmplY3R9IGNvbmZpZ1xuICAgKlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZX0gVGhlIFByb21pc2UgdG8gYmUgZnVsZmlsbGVkXG4gICAqL1xuICBhc3luYyByZXF1ZXN0KGNvbmZpZ09yVXJsLCBjb25maWcpIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuX3JlcXVlc3QoY29uZmlnT3JVcmwsIGNvbmZpZyk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBpZiAoZXJyIGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgICAgbGV0IGR1bW15O1xuXG4gICAgICAgIEVycm9yLmNhcHR1cmVTdGFja1RyYWNlID8gRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UoZHVtbXkgPSB7fSkgOiAoZHVtbXkgPSBuZXcgRXJyb3IoKSk7XG5cbiAgICAgICAgLy8gc2xpY2Ugb2ZmIHRoZSBFcnJvcjogLi4uIGxpbmVcbiAgICAgICAgY29uc3Qgc3RhY2sgPSBkdW1teS5zdGFjayA/IGR1bW15LnN0YWNrLnJlcGxhY2UoL14uK1xcbi8sICcnKSA6ICcnO1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGlmICghZXJyLnN0YWNrKSB7XG4gICAgICAgICAgICBlcnIuc3RhY2sgPSBzdGFjaztcbiAgICAgICAgICAgIC8vIG1hdGNoIHdpdGhvdXQgdGhlIDIgdG9wIHN0YWNrIGxpbmVzXG4gICAgICAgICAgfSBlbHNlIGlmIChzdGFjayAmJiAhU3RyaW5nKGVyci5zdGFjaykuZW5kc1dpdGgoc3RhY2sucmVwbGFjZSgvXi4rXFxuLitcXG4vLCAnJykpKSB7XG4gICAgICAgICAgICBlcnIuc3RhY2sgKz0gJ1xcbicgKyBzdGFjaztcbiAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAvLyBpZ25vcmUgdGhlIGNhc2Ugd2hlcmUgXCJzdGFja1wiIGlzIGFuIHVuLXdyaXRhYmxlIHByb3BlcnR5XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdGhyb3cgZXJyO1xuICAgIH1cbiAgfVxuXG4gIF9yZXF1ZXN0KGNvbmZpZ09yVXJsLCBjb25maWcpIHtcbiAgICAvKmVzbGludCBuby1wYXJhbS1yZWFzc2lnbjowKi9cbiAgICAvLyBBbGxvdyBmb3IgYXhpb3MoJ2V4YW1wbGUvdXJsJ1ssIGNvbmZpZ10pIGEgbGEgZmV0Y2ggQVBJXG4gICAgaWYgKHR5cGVvZiBjb25maWdPclVybCA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGNvbmZpZyA9IGNvbmZpZyB8fCB7fTtcbiAgICAgIGNvbmZpZy51cmwgPSBjb25maWdPclVybDtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uZmlnID0gY29uZmlnT3JVcmwgfHwge307XG4gICAgfVxuXG4gICAgY29uZmlnID0gbWVyZ2VDb25maWcodGhpcy5kZWZhdWx0cywgY29uZmlnKTtcblxuICAgIGNvbnN0IHt0cmFuc2l0aW9uYWwsIHBhcmFtc1NlcmlhbGl6ZXIsIGhlYWRlcnN9ID0gY29uZmlnO1xuXG4gICAgaWYgKHRyYW5zaXRpb25hbCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB2YWxpZGF0b3IuYXNzZXJ0T3B0aW9ucyh0cmFuc2l0aW9uYWwsIHtcbiAgICAgICAgc2lsZW50SlNPTlBhcnNpbmc6IHZhbGlkYXRvcnMudHJhbnNpdGlvbmFsKHZhbGlkYXRvcnMuYm9vbGVhbiksXG4gICAgICAgIGZvcmNlZEpTT05QYXJzaW5nOiB2YWxpZGF0b3JzLnRyYW5zaXRpb25hbCh2YWxpZGF0b3JzLmJvb2xlYW4pLFxuICAgICAgICBjbGFyaWZ5VGltZW91dEVycm9yOiB2YWxpZGF0b3JzLnRyYW5zaXRpb25hbCh2YWxpZGF0b3JzLmJvb2xlYW4pXG4gICAgICB9LCBmYWxzZSk7XG4gICAgfVxuXG4gICAgaWYgKHBhcmFtc1NlcmlhbGl6ZXIgIT0gbnVsbCkge1xuICAgICAgaWYgKHV0aWxzJDEuaXNGdW5jdGlvbihwYXJhbXNTZXJpYWxpemVyKSkge1xuICAgICAgICBjb25maWcucGFyYW1zU2VyaWFsaXplciA9IHtcbiAgICAgICAgICBzZXJpYWxpemU6IHBhcmFtc1NlcmlhbGl6ZXJcbiAgICAgICAgfTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhbGlkYXRvci5hc3NlcnRPcHRpb25zKHBhcmFtc1NlcmlhbGl6ZXIsIHtcbiAgICAgICAgICBlbmNvZGU6IHZhbGlkYXRvcnMuZnVuY3Rpb24sXG4gICAgICAgICAgc2VyaWFsaXplOiB2YWxpZGF0b3JzLmZ1bmN0aW9uXG4gICAgICAgIH0sIHRydWUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFNldCBjb25maWcubWV0aG9kXG4gICAgY29uZmlnLm1ldGhvZCA9IChjb25maWcubWV0aG9kIHx8IHRoaXMuZGVmYXVsdHMubWV0aG9kIHx8ICdnZXQnKS50b0xvd2VyQ2FzZSgpO1xuXG4gICAgLy8gRmxhdHRlbiBoZWFkZXJzXG4gICAgbGV0IGNvbnRleHRIZWFkZXJzID0gaGVhZGVycyAmJiB1dGlscyQxLm1lcmdlKFxuICAgICAgaGVhZGVycy5jb21tb24sXG4gICAgICBoZWFkZXJzW2NvbmZpZy5tZXRob2RdXG4gICAgKTtcblxuICAgIGhlYWRlcnMgJiYgdXRpbHMkMS5mb3JFYWNoKFxuICAgICAgWydkZWxldGUnLCAnZ2V0JywgJ2hlYWQnLCAncG9zdCcsICdwdXQnLCAncGF0Y2gnLCAnY29tbW9uJ10sXG4gICAgICAobWV0aG9kKSA9PiB7XG4gICAgICAgIGRlbGV0ZSBoZWFkZXJzW21ldGhvZF07XG4gICAgICB9XG4gICAgKTtcblxuICAgIGNvbmZpZy5oZWFkZXJzID0gQXhpb3NIZWFkZXJzJDEuY29uY2F0KGNvbnRleHRIZWFkZXJzLCBoZWFkZXJzKTtcblxuICAgIC8vIGZpbHRlciBvdXQgc2tpcHBlZCBpbnRlcmNlcHRvcnNcbiAgICBjb25zdCByZXF1ZXN0SW50ZXJjZXB0b3JDaGFpbiA9IFtdO1xuICAgIGxldCBzeW5jaHJvbm91c1JlcXVlc3RJbnRlcmNlcHRvcnMgPSB0cnVlO1xuICAgIHRoaXMuaW50ZXJjZXB0b3JzLnJlcXVlc3QuZm9yRWFjaChmdW5jdGlvbiB1bnNoaWZ0UmVxdWVzdEludGVyY2VwdG9ycyhpbnRlcmNlcHRvcikge1xuICAgICAgaWYgKHR5cGVvZiBpbnRlcmNlcHRvci5ydW5XaGVuID09PSAnZnVuY3Rpb24nICYmIGludGVyY2VwdG9yLnJ1bldoZW4oY29uZmlnKSA9PT0gZmFsc2UpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBzeW5jaHJvbm91c1JlcXVlc3RJbnRlcmNlcHRvcnMgPSBzeW5jaHJvbm91c1JlcXVlc3RJbnRlcmNlcHRvcnMgJiYgaW50ZXJjZXB0b3Iuc3luY2hyb25vdXM7XG5cbiAgICAgIHJlcXVlc3RJbnRlcmNlcHRvckNoYWluLnVuc2hpZnQoaW50ZXJjZXB0b3IuZnVsZmlsbGVkLCBpbnRlcmNlcHRvci5yZWplY3RlZCk7XG4gICAgfSk7XG5cbiAgICBjb25zdCByZXNwb25zZUludGVyY2VwdG9yQ2hhaW4gPSBbXTtcbiAgICB0aGlzLmludGVyY2VwdG9ycy5yZXNwb25zZS5mb3JFYWNoKGZ1bmN0aW9uIHB1c2hSZXNwb25zZUludGVyY2VwdG9ycyhpbnRlcmNlcHRvcikge1xuICAgICAgcmVzcG9uc2VJbnRlcmNlcHRvckNoYWluLnB1c2goaW50ZXJjZXB0b3IuZnVsZmlsbGVkLCBpbnRlcmNlcHRvci5yZWplY3RlZCk7XG4gICAgfSk7XG5cbiAgICBsZXQgcHJvbWlzZTtcbiAgICBsZXQgaSA9IDA7XG4gICAgbGV0IGxlbjtcblxuICAgIGlmICghc3luY2hyb25vdXNSZXF1ZXN0SW50ZXJjZXB0b3JzKSB7XG4gICAgICBjb25zdCBjaGFpbiA9IFtkaXNwYXRjaFJlcXVlc3QuYmluZCh0aGlzKSwgdW5kZWZpbmVkXTtcbiAgICAgIGNoYWluLnVuc2hpZnQuYXBwbHkoY2hhaW4sIHJlcXVlc3RJbnRlcmNlcHRvckNoYWluKTtcbiAgICAgIGNoYWluLnB1c2guYXBwbHkoY2hhaW4sIHJlc3BvbnNlSW50ZXJjZXB0b3JDaGFpbik7XG4gICAgICBsZW4gPSBjaGFpbi5sZW5ndGg7XG5cbiAgICAgIHByb21pc2UgPSBQcm9taXNlLnJlc29sdmUoY29uZmlnKTtcblxuICAgICAgd2hpbGUgKGkgPCBsZW4pIHtcbiAgICAgICAgcHJvbWlzZSA9IHByb21pc2UudGhlbihjaGFpbltpKytdLCBjaGFpbltpKytdKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHByb21pc2U7XG4gICAgfVxuXG4gICAgbGVuID0gcmVxdWVzdEludGVyY2VwdG9yQ2hhaW4ubGVuZ3RoO1xuXG4gICAgbGV0IG5ld0NvbmZpZyA9IGNvbmZpZztcblxuICAgIGkgPSAwO1xuXG4gICAgd2hpbGUgKGkgPCBsZW4pIHtcbiAgICAgIGNvbnN0IG9uRnVsZmlsbGVkID0gcmVxdWVzdEludGVyY2VwdG9yQ2hhaW5baSsrXTtcbiAgICAgIGNvbnN0IG9uUmVqZWN0ZWQgPSByZXF1ZXN0SW50ZXJjZXB0b3JDaGFpbltpKytdO1xuICAgICAgdHJ5IHtcbiAgICAgICAgbmV3Q29uZmlnID0gb25GdWxmaWxsZWQobmV3Q29uZmlnKTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIG9uUmVqZWN0ZWQuY2FsbCh0aGlzLCBlcnJvcik7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICBwcm9taXNlID0gZGlzcGF0Y2hSZXF1ZXN0LmNhbGwodGhpcywgbmV3Q29uZmlnKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KGVycm9yKTtcbiAgICB9XG5cbiAgICBpID0gMDtcbiAgICBsZW4gPSByZXNwb25zZUludGVyY2VwdG9yQ2hhaW4ubGVuZ3RoO1xuXG4gICAgd2hpbGUgKGkgPCBsZW4pIHtcbiAgICAgIHByb21pc2UgPSBwcm9taXNlLnRoZW4ocmVzcG9uc2VJbnRlcmNlcHRvckNoYWluW2krK10sIHJlc3BvbnNlSW50ZXJjZXB0b3JDaGFpbltpKytdKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcHJvbWlzZTtcbiAgfVxuXG4gIGdldFVyaShjb25maWcpIHtcbiAgICBjb25maWcgPSBtZXJnZUNvbmZpZyh0aGlzLmRlZmF1bHRzLCBjb25maWcpO1xuICAgIGNvbnN0IGZ1bGxQYXRoID0gYnVpbGRGdWxsUGF0aChjb25maWcuYmFzZVVSTCwgY29uZmlnLnVybCk7XG4gICAgcmV0dXJuIGJ1aWxkVVJMKGZ1bGxQYXRoLCBjb25maWcucGFyYW1zLCBjb25maWcucGFyYW1zU2VyaWFsaXplcik7XG4gIH1cbn1cblxuLy8gUHJvdmlkZSBhbGlhc2VzIGZvciBzdXBwb3J0ZWQgcmVxdWVzdCBtZXRob2RzXG51dGlscyQxLmZvckVhY2goWydkZWxldGUnLCAnZ2V0JywgJ2hlYWQnLCAnb3B0aW9ucyddLCBmdW5jdGlvbiBmb3JFYWNoTWV0aG9kTm9EYXRhKG1ldGhvZCkge1xuICAvKmVzbGludCBmdW5jLW5hbWVzOjAqL1xuICBBeGlvcy5wcm90b3R5cGVbbWV0aG9kXSA9IGZ1bmN0aW9uKHVybCwgY29uZmlnKSB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdChtZXJnZUNvbmZpZyhjb25maWcgfHwge30sIHtcbiAgICAgIG1ldGhvZCxcbiAgICAgIHVybCxcbiAgICAgIGRhdGE6IChjb25maWcgfHwge30pLmRhdGFcbiAgICB9KSk7XG4gIH07XG59KTtcblxudXRpbHMkMS5mb3JFYWNoKFsncG9zdCcsICdwdXQnLCAncGF0Y2gnXSwgZnVuY3Rpb24gZm9yRWFjaE1ldGhvZFdpdGhEYXRhKG1ldGhvZCkge1xuICAvKmVzbGludCBmdW5jLW5hbWVzOjAqL1xuXG4gIGZ1bmN0aW9uIGdlbmVyYXRlSFRUUE1ldGhvZChpc0Zvcm0pIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gaHR0cE1ldGhvZCh1cmwsIGRhdGEsIGNvbmZpZykge1xuICAgICAgcmV0dXJuIHRoaXMucmVxdWVzdChtZXJnZUNvbmZpZyhjb25maWcgfHwge30sIHtcbiAgICAgICAgbWV0aG9kLFxuICAgICAgICBoZWFkZXJzOiBpc0Zvcm0gPyB7XG4gICAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdtdWx0aXBhcnQvZm9ybS1kYXRhJ1xuICAgICAgICB9IDoge30sXG4gICAgICAgIHVybCxcbiAgICAgICAgZGF0YVxuICAgICAgfSkpO1xuICAgIH07XG4gIH1cblxuICBBeGlvcy5wcm90b3R5cGVbbWV0aG9kXSA9IGdlbmVyYXRlSFRUUE1ldGhvZCgpO1xuXG4gIEF4aW9zLnByb3RvdHlwZVttZXRob2QgKyAnRm9ybSddID0gZ2VuZXJhdGVIVFRQTWV0aG9kKHRydWUpO1xufSk7XG5cbnZhciBBeGlvcyQxID0gQXhpb3M7XG5cbi8qKlxuICogQSBgQ2FuY2VsVG9rZW5gIGlzIGFuIG9iamVjdCB0aGF0IGNhbiBiZSB1c2VkIHRvIHJlcXVlc3QgY2FuY2VsbGF0aW9uIG9mIGFuIG9wZXJhdGlvbi5cbiAqXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBleGVjdXRvciBUaGUgZXhlY3V0b3IgZnVuY3Rpb24uXG4gKlxuICogQHJldHVybnMge0NhbmNlbFRva2VufVxuICovXG5jbGFzcyBDYW5jZWxUb2tlbiB7XG4gIGNvbnN0cnVjdG9yKGV4ZWN1dG9yKSB7XG4gICAgaWYgKHR5cGVvZiBleGVjdXRvciAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignZXhlY3V0b3IgbXVzdCBiZSBhIGZ1bmN0aW9uLicpO1xuICAgIH1cblxuICAgIGxldCByZXNvbHZlUHJvbWlzZTtcblxuICAgIHRoaXMucHJvbWlzZSA9IG5ldyBQcm9taXNlKGZ1bmN0aW9uIHByb21pc2VFeGVjdXRvcihyZXNvbHZlKSB7XG4gICAgICByZXNvbHZlUHJvbWlzZSA9IHJlc29sdmU7XG4gICAgfSk7XG5cbiAgICBjb25zdCB0b2tlbiA9IHRoaXM7XG5cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZnVuYy1uYW1lc1xuICAgIHRoaXMucHJvbWlzZS50aGVuKGNhbmNlbCA9PiB7XG4gICAgICBpZiAoIXRva2VuLl9saXN0ZW5lcnMpIHJldHVybjtcblxuICAgICAgbGV0IGkgPSB0b2tlbi5fbGlzdGVuZXJzLmxlbmd0aDtcblxuICAgICAgd2hpbGUgKGktLSA+IDApIHtcbiAgICAgICAgdG9rZW4uX2xpc3RlbmVyc1tpXShjYW5jZWwpO1xuICAgICAgfVxuICAgICAgdG9rZW4uX2xpc3RlbmVycyA9IG51bGw7XG4gICAgfSk7XG5cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZnVuYy1uYW1lc1xuICAgIHRoaXMucHJvbWlzZS50aGVuID0gb25mdWxmaWxsZWQgPT4ge1xuICAgICAgbGV0IF9yZXNvbHZlO1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGZ1bmMtbmFtZXNcbiAgICAgIGNvbnN0IHByb21pc2UgPSBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHtcbiAgICAgICAgdG9rZW4uc3Vic2NyaWJlKHJlc29sdmUpO1xuICAgICAgICBfcmVzb2x2ZSA9IHJlc29sdmU7XG4gICAgICB9KS50aGVuKG9uZnVsZmlsbGVkKTtcblxuICAgICAgcHJvbWlzZS5jYW5jZWwgPSBmdW5jdGlvbiByZWplY3QoKSB7XG4gICAgICAgIHRva2VuLnVuc3Vic2NyaWJlKF9yZXNvbHZlKTtcbiAgICAgIH07XG5cbiAgICAgIHJldHVybiBwcm9taXNlO1xuICAgIH07XG5cbiAgICBleGVjdXRvcihmdW5jdGlvbiBjYW5jZWwobWVzc2FnZSwgY29uZmlnLCByZXF1ZXN0KSB7XG4gICAgICBpZiAodG9rZW4ucmVhc29uKSB7XG4gICAgICAgIC8vIENhbmNlbGxhdGlvbiBoYXMgYWxyZWFkeSBiZWVuIHJlcXVlc3RlZFxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHRva2VuLnJlYXNvbiA9IG5ldyBDYW5jZWxlZEVycm9yKG1lc3NhZ2UsIGNvbmZpZywgcmVxdWVzdCk7XG4gICAgICByZXNvbHZlUHJvbWlzZSh0b2tlbi5yZWFzb24pO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFRocm93cyBhIGBDYW5jZWxlZEVycm9yYCBpZiBjYW5jZWxsYXRpb24gaGFzIGJlZW4gcmVxdWVzdGVkLlxuICAgKi9cbiAgdGhyb3dJZlJlcXVlc3RlZCgpIHtcbiAgICBpZiAodGhpcy5yZWFzb24pIHtcbiAgICAgIHRocm93IHRoaXMucmVhc29uO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBTdWJzY3JpYmUgdG8gdGhlIGNhbmNlbCBzaWduYWxcbiAgICovXG5cbiAgc3Vic2NyaWJlKGxpc3RlbmVyKSB7XG4gICAgaWYgKHRoaXMucmVhc29uKSB7XG4gICAgICBsaXN0ZW5lcih0aGlzLnJlYXNvbik7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX2xpc3RlbmVycykge1xuICAgICAgdGhpcy5fbGlzdGVuZXJzLnB1c2gobGlzdGVuZXIpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9saXN0ZW5lcnMgPSBbbGlzdGVuZXJdO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBVbnN1YnNjcmliZSBmcm9tIHRoZSBjYW5jZWwgc2lnbmFsXG4gICAqL1xuXG4gIHVuc3Vic2NyaWJlKGxpc3RlbmVyKSB7XG4gICAgaWYgKCF0aGlzLl9saXN0ZW5lcnMpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgaW5kZXggPSB0aGlzLl9saXN0ZW5lcnMuaW5kZXhPZihsaXN0ZW5lcik7XG4gICAgaWYgKGluZGV4ICE9PSAtMSkge1xuICAgICAgdGhpcy5fbGlzdGVuZXJzLnNwbGljZShpbmRleCwgMSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYW4gb2JqZWN0IHRoYXQgY29udGFpbnMgYSBuZXcgYENhbmNlbFRva2VuYCBhbmQgYSBmdW5jdGlvbiB0aGF0LCB3aGVuIGNhbGxlZCxcbiAgICogY2FuY2VscyB0aGUgYENhbmNlbFRva2VuYC5cbiAgICovXG4gIHN0YXRpYyBzb3VyY2UoKSB7XG4gICAgbGV0IGNhbmNlbDtcbiAgICBjb25zdCB0b2tlbiA9IG5ldyBDYW5jZWxUb2tlbihmdW5jdGlvbiBleGVjdXRvcihjKSB7XG4gICAgICBjYW5jZWwgPSBjO1xuICAgIH0pO1xuICAgIHJldHVybiB7XG4gICAgICB0b2tlbixcbiAgICAgIGNhbmNlbFxuICAgIH07XG4gIH1cbn1cblxudmFyIENhbmNlbFRva2VuJDEgPSBDYW5jZWxUb2tlbjtcblxuLyoqXG4gKiBTeW50YWN0aWMgc3VnYXIgZm9yIGludm9raW5nIGEgZnVuY3Rpb24gYW5kIGV4cGFuZGluZyBhbiBhcnJheSBmb3IgYXJndW1lbnRzLlxuICpcbiAqIENvbW1vbiB1c2UgY2FzZSB3b3VsZCBiZSB0byB1c2UgYEZ1bmN0aW9uLnByb3RvdHlwZS5hcHBseWAuXG4gKlxuICogIGBgYGpzXG4gKiAgZnVuY3Rpb24gZih4LCB5LCB6KSB7fVxuICogIHZhciBhcmdzID0gWzEsIDIsIDNdO1xuICogIGYuYXBwbHkobnVsbCwgYXJncyk7XG4gKiAgYGBgXG4gKlxuICogV2l0aCBgc3ByZWFkYCB0aGlzIGV4YW1wbGUgY2FuIGJlIHJlLXdyaXR0ZW4uXG4gKlxuICogIGBgYGpzXG4gKiAgc3ByZWFkKGZ1bmN0aW9uKHgsIHksIHopIHt9KShbMSwgMiwgM10pO1xuICogIGBgYFxuICpcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrXG4gKlxuICogQHJldHVybnMge0Z1bmN0aW9ufVxuICovXG5mdW5jdGlvbiBzcHJlYWQoY2FsbGJhY2spIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIHdyYXAoYXJyKSB7XG4gICAgcmV0dXJuIGNhbGxiYWNrLmFwcGx5KG51bGwsIGFycik7XG4gIH07XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSBwYXlsb2FkIGlzIGFuIGVycm9yIHRocm93biBieSBBeGlvc1xuICpcbiAqIEBwYXJhbSB7Kn0gcGF5bG9hZCBUaGUgdmFsdWUgdG8gdGVzdFxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHRoZSBwYXlsb2FkIGlzIGFuIGVycm9yIHRocm93biBieSBBeGlvcywgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzQXhpb3NFcnJvcihwYXlsb2FkKSB7XG4gIHJldHVybiB1dGlscyQxLmlzT2JqZWN0KHBheWxvYWQpICYmIChwYXlsb2FkLmlzQXhpb3NFcnJvciA9PT0gdHJ1ZSk7XG59XG5cbmNvbnN0IEh0dHBTdGF0dXNDb2RlID0ge1xuICBDb250aW51ZTogMTAwLFxuICBTd2l0Y2hpbmdQcm90b2NvbHM6IDEwMSxcbiAgUHJvY2Vzc2luZzogMTAyLFxuICBFYXJseUhpbnRzOiAxMDMsXG4gIE9rOiAyMDAsXG4gIENyZWF0ZWQ6IDIwMSxcbiAgQWNjZXB0ZWQ6IDIwMixcbiAgTm9uQXV0aG9yaXRhdGl2ZUluZm9ybWF0aW9uOiAyMDMsXG4gIE5vQ29udGVudDogMjA0LFxuICBSZXNldENvbnRlbnQ6IDIwNSxcbiAgUGFydGlhbENvbnRlbnQ6IDIwNixcbiAgTXVsdGlTdGF0dXM6IDIwNyxcbiAgQWxyZWFkeVJlcG9ydGVkOiAyMDgsXG4gIEltVXNlZDogMjI2LFxuICBNdWx0aXBsZUNob2ljZXM6IDMwMCxcbiAgTW92ZWRQZXJtYW5lbnRseTogMzAxLFxuICBGb3VuZDogMzAyLFxuICBTZWVPdGhlcjogMzAzLFxuICBOb3RNb2RpZmllZDogMzA0LFxuICBVc2VQcm94eTogMzA1LFxuICBVbnVzZWQ6IDMwNixcbiAgVGVtcG9yYXJ5UmVkaXJlY3Q6IDMwNyxcbiAgUGVybWFuZW50UmVkaXJlY3Q6IDMwOCxcbiAgQmFkUmVxdWVzdDogNDAwLFxuICBVbmF1dGhvcml6ZWQ6IDQwMSxcbiAgUGF5bWVudFJlcXVpcmVkOiA0MDIsXG4gIEZvcmJpZGRlbjogNDAzLFxuICBOb3RGb3VuZDogNDA0LFxuICBNZXRob2ROb3RBbGxvd2VkOiA0MDUsXG4gIE5vdEFjY2VwdGFibGU6IDQwNixcbiAgUHJveHlBdXRoZW50aWNhdGlvblJlcXVpcmVkOiA0MDcsXG4gIFJlcXVlc3RUaW1lb3V0OiA0MDgsXG4gIENvbmZsaWN0OiA0MDksXG4gIEdvbmU6IDQxMCxcbiAgTGVuZ3RoUmVxdWlyZWQ6IDQxMSxcbiAgUHJlY29uZGl0aW9uRmFpbGVkOiA0MTIsXG4gIFBheWxvYWRUb29MYXJnZTogNDEzLFxuICBVcmlUb29Mb25nOiA0MTQsXG4gIFVuc3VwcG9ydGVkTWVkaWFUeXBlOiA0MTUsXG4gIFJhbmdlTm90U2F0aXNmaWFibGU6IDQxNixcbiAgRXhwZWN0YXRpb25GYWlsZWQ6IDQxNyxcbiAgSW1BVGVhcG90OiA0MTgsXG4gIE1pc2RpcmVjdGVkUmVxdWVzdDogNDIxLFxuICBVbnByb2Nlc3NhYmxlRW50aXR5OiA0MjIsXG4gIExvY2tlZDogNDIzLFxuICBGYWlsZWREZXBlbmRlbmN5OiA0MjQsXG4gIFRvb0Vhcmx5OiA0MjUsXG4gIFVwZ3JhZGVSZXF1aXJlZDogNDI2LFxuICBQcmVjb25kaXRpb25SZXF1aXJlZDogNDI4LFxuICBUb29NYW55UmVxdWVzdHM6IDQyOSxcbiAgUmVxdWVzdEhlYWRlckZpZWxkc1Rvb0xhcmdlOiA0MzEsXG4gIFVuYXZhaWxhYmxlRm9yTGVnYWxSZWFzb25zOiA0NTEsXG4gIEludGVybmFsU2VydmVyRXJyb3I6IDUwMCxcbiAgTm90SW1wbGVtZW50ZWQ6IDUwMSxcbiAgQmFkR2F0ZXdheTogNTAyLFxuICBTZXJ2aWNlVW5hdmFpbGFibGU6IDUwMyxcbiAgR2F0ZXdheVRpbWVvdXQ6IDUwNCxcbiAgSHR0cFZlcnNpb25Ob3RTdXBwb3J0ZWQ6IDUwNSxcbiAgVmFyaWFudEFsc29OZWdvdGlhdGVzOiA1MDYsXG4gIEluc3VmZmljaWVudFN0b3JhZ2U6IDUwNyxcbiAgTG9vcERldGVjdGVkOiA1MDgsXG4gIE5vdEV4dGVuZGVkOiA1MTAsXG4gIE5ldHdvcmtBdXRoZW50aWNhdGlvblJlcXVpcmVkOiA1MTEsXG59O1xuXG5PYmplY3QuZW50cmllcyhIdHRwU3RhdHVzQ29kZSkuZm9yRWFjaCgoW2tleSwgdmFsdWVdKSA9PiB7XG4gIEh0dHBTdGF0dXNDb2RlW3ZhbHVlXSA9IGtleTtcbn0pO1xuXG52YXIgSHR0cFN0YXR1c0NvZGUkMSA9IEh0dHBTdGF0dXNDb2RlO1xuXG4vKipcbiAqIENyZWF0ZSBhbiBpbnN0YW5jZSBvZiBBeGlvc1xuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBkZWZhdWx0Q29uZmlnIFRoZSBkZWZhdWx0IGNvbmZpZyBmb3IgdGhlIGluc3RhbmNlXG4gKlxuICogQHJldHVybnMge0F4aW9zfSBBIG5ldyBpbnN0YW5jZSBvZiBBeGlvc1xuICovXG5mdW5jdGlvbiBjcmVhdGVJbnN0YW5jZShkZWZhdWx0Q29uZmlnKSB7XG4gIGNvbnN0IGNvbnRleHQgPSBuZXcgQXhpb3MkMShkZWZhdWx0Q29uZmlnKTtcbiAgY29uc3QgaW5zdGFuY2UgPSBiaW5kKEF4aW9zJDEucHJvdG90eXBlLnJlcXVlc3QsIGNvbnRleHQpO1xuXG4gIC8vIENvcHkgYXhpb3MucHJvdG90eXBlIHRvIGluc3RhbmNlXG4gIHV0aWxzJDEuZXh0ZW5kKGluc3RhbmNlLCBBeGlvcyQxLnByb3RvdHlwZSwgY29udGV4dCwge2FsbE93bktleXM6IHRydWV9KTtcblxuICAvLyBDb3B5IGNvbnRleHQgdG8gaW5zdGFuY2VcbiAgdXRpbHMkMS5leHRlbmQoaW5zdGFuY2UsIGNvbnRleHQsIG51bGwsIHthbGxPd25LZXlzOiB0cnVlfSk7XG5cbiAgLy8gRmFjdG9yeSBmb3IgY3JlYXRpbmcgbmV3IGluc3RhbmNlc1xuICBpbnN0YW5jZS5jcmVhdGUgPSBmdW5jdGlvbiBjcmVhdGUoaW5zdGFuY2VDb25maWcpIHtcbiAgICByZXR1cm4gY3JlYXRlSW5zdGFuY2UobWVyZ2VDb25maWcoZGVmYXVsdENvbmZpZywgaW5zdGFuY2VDb25maWcpKTtcbiAgfTtcblxuICByZXR1cm4gaW5zdGFuY2U7XG59XG5cbi8vIENyZWF0ZSB0aGUgZGVmYXVsdCBpbnN0YW5jZSB0byBiZSBleHBvcnRlZFxuY29uc3QgYXhpb3MgPSBjcmVhdGVJbnN0YW5jZShkZWZhdWx0cyQxKTtcblxuLy8gRXhwb3NlIEF4aW9zIGNsYXNzIHRvIGFsbG93IGNsYXNzIGluaGVyaXRhbmNlXG5heGlvcy5BeGlvcyA9IEF4aW9zJDE7XG5cbi8vIEV4cG9zZSBDYW5jZWwgJiBDYW5jZWxUb2tlblxuYXhpb3MuQ2FuY2VsZWRFcnJvciA9IENhbmNlbGVkRXJyb3I7XG5heGlvcy5DYW5jZWxUb2tlbiA9IENhbmNlbFRva2VuJDE7XG5heGlvcy5pc0NhbmNlbCA9IGlzQ2FuY2VsO1xuYXhpb3MuVkVSU0lPTiA9IFZFUlNJT047XG5heGlvcy50b0Zvcm1EYXRhID0gdG9Gb3JtRGF0YTtcblxuLy8gRXhwb3NlIEF4aW9zRXJyb3IgY2xhc3NcbmF4aW9zLkF4aW9zRXJyb3IgPSBBeGlvc0Vycm9yO1xuXG4vLyBhbGlhcyBmb3IgQ2FuY2VsZWRFcnJvciBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eVxuYXhpb3MuQ2FuY2VsID0gYXhpb3MuQ2FuY2VsZWRFcnJvcjtcblxuLy8gRXhwb3NlIGFsbC9zcHJlYWRcbmF4aW9zLmFsbCA9IGZ1bmN0aW9uIGFsbChwcm9taXNlcykge1xuICByZXR1cm4gUHJvbWlzZS5hbGwocHJvbWlzZXMpO1xufTtcblxuYXhpb3Muc3ByZWFkID0gc3ByZWFkO1xuXG4vLyBFeHBvc2UgaXNBeGlvc0Vycm9yXG5heGlvcy5pc0F4aW9zRXJyb3IgPSBpc0F4aW9zRXJyb3I7XG5cbi8vIEV4cG9zZSBtZXJnZUNvbmZpZ1xuYXhpb3MubWVyZ2VDb25maWcgPSBtZXJnZUNvbmZpZztcblxuYXhpb3MuQXhpb3NIZWFkZXJzID0gQXhpb3NIZWFkZXJzJDE7XG5cbmF4aW9zLmZvcm1Ub0pTT04gPSB0aGluZyA9PiBmb3JtRGF0YVRvSlNPTih1dGlscyQxLmlzSFRNTEZvcm0odGhpbmcpID8gbmV3IEZvcm1EYXRhKHRoaW5nKSA6IHRoaW5nKTtcblxuYXhpb3MuZ2V0QWRhcHRlciA9IGFkYXB0ZXJzLmdldEFkYXB0ZXI7XG5cbmF4aW9zLkh0dHBTdGF0dXNDb2RlID0gSHR0cFN0YXR1c0NvZGUkMTtcblxuYXhpb3MuZGVmYXVsdCA9IGF4aW9zO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGF4aW9zO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9YXhpb3MuY2pzLm1hcFxuIiwiLy8gVGhlIG1vZHVsZSBjYWNoZVxudmFyIF9fd2VicGFja19tb2R1bGVfY2FjaGVfXyA9IHt9O1xuXG4vLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuXHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcblx0dmFyIGNhY2hlZE1vZHVsZSA9IF9fd2VicGFja19tb2R1bGVfY2FjaGVfX1ttb2R1bGVJZF07XG5cdGlmIChjYWNoZWRNb2R1bGUgIT09IHVuZGVmaW5lZCkge1xuXHRcdHJldHVybiBjYWNoZWRNb2R1bGUuZXhwb3J0cztcblx0fVxuXHQvLyBDcmVhdGUgYSBuZXcgbW9kdWxlIChhbmQgcHV0IGl0IGludG8gdGhlIGNhY2hlKVxuXHR2YXIgbW9kdWxlID0gX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fW21vZHVsZUlkXSA9IHtcblx0XHQvLyBubyBtb2R1bGUuaWQgbmVlZGVkXG5cdFx0Ly8gbm8gbW9kdWxlLmxvYWRlZCBuZWVkZWRcblx0XHRleHBvcnRzOiB7fVxuXHR9O1xuXG5cdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxuXHRfX3dlYnBhY2tfbW9kdWxlc19fW21vZHVsZUlkXS5jYWxsKG1vZHVsZS5leHBvcnRzLCBtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTtcblxuXHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuXHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG59XG5cbiIsIl9fd2VicGFja19yZXF1aXJlX18uZyA9IChmdW5jdGlvbigpIHtcblx0aWYgKHR5cGVvZiBnbG9iYWxUaGlzID09PSAnb2JqZWN0JykgcmV0dXJuIGdsb2JhbFRoaXM7XG5cdHRyeSB7XG5cdFx0cmV0dXJuIHRoaXMgfHwgbmV3IEZ1bmN0aW9uKCdyZXR1cm4gdGhpcycpKCk7XG5cdH0gY2F0Y2ggKGUpIHtcblx0XHRpZiAodHlwZW9mIHdpbmRvdyA9PT0gJ29iamVjdCcpIHJldHVybiB3aW5kb3c7XG5cdH1cbn0pKCk7IiwiLy8gc3RhcnR1cFxuLy8gTG9hZCBlbnRyeSBtb2R1bGUgYW5kIHJldHVybiBleHBvcnRzXG4vLyBUaGlzIGVudHJ5IG1vZHVsZSBpcyByZWZlcmVuY2VkIGJ5IG90aGVyIG1vZHVsZXMgc28gaXQgY2FuJ3QgYmUgaW5saW5lZFxudmFyIF9fd2VicGFja19leHBvcnRzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDMyMSk7XG4iXSwibmFtZXMiOlsicGFyYW1zIiwiaXNQdXJlT2JqZWN0IiwiRXJyb3IiLCJ0aGlzIiwiaW5pdCIsImNsb25lUGFyYW1zIiwiQ2xpZW50IiwidmVyc2lvbiIsImFwaUtleSIsImFwaVNlY3JldCIsImFwaVRva2VuIiwiY29uZmlnIiwib3B0aW9ucyIsInJlc291cmNlIiwicmVxdWVzdF8xIiwiSHR0cE1ldGhvZHNfMSIsIkdldCIsIlBvc3QiLCJQdXQiLCJEZWxldGUiLCJwYWNrYWdlSlNPTiIsInNldENvbmZpZyIsInNldE9wdGlvbnMiLCJ0b2tlbkNvbm5lY3RTdHJhdGVneSIsImJhc2ljQ29ubmVjdFN0cmF0ZWd5IiwiY2xvbmVkUGFyYW1zIiwicHJveHkiLCJoZWFkZXJzIiwiY3VzdG9tQ29uZmlnIiwiX3R5cGVvZiIsInNldFZhbHVlSWZOb3ROaWwiLCJob3N0Iiwib3V0cHV0IiwiT2JqZWN0IiwiZnJlZXplIiwiX19hc3NpZ24iLCJwYWNrYWdlX2pzb25fMSIsImV4cG9ydHMiLCJpbmRleF8xIiwiaW5kZXhfMiIsIl9fZXh0ZW5kcyIsIk1haWxqZXQiLCJfX2V4cG9ydFN0YXIiLCJIdHRwTWV0aG9kcyIsIkpTT05iIiwic3RvcmVBc1N0cmluZyIsImNsaWVudCIsIm1ldGhvZCIsImNsaWVudF8xIiwidmFsdWVzIiwiaW5jbHVkZXMiLCJ1cmwiLCJ0b0xvd2VyQ2FzZSIsInN1YlBhdGgiLCJidWlsZFN1YlBhdGgiLCJhY3Rpb25QYXRoIiwiUmVxdWVzdCIsImdldFBhY2thZ2VWZXJzaW9uIiwiZ2V0QVBJVG9rZW4iLCJnZXRBUElLZXkiLCJnZXRBUElTZWNyZXQiLCJpbmRleE9mIiwiZGF0YSIsInVuZGVmaW5lZCIsImNsaWVudENvbmZpZyIsImdldENvbmZpZyIsInByb3RvY29sIiwiaXNDb250YWN0TGlzdFdpdGhDU1YiLCJpc0JhdGNoSm9iV2l0aENTViIsImlzU2VuZFJlc291cmNlIiwicmVzb3VyY2VDb250YWluU01TIiwicmVxdWVzdENvbmZpZyIsImdldFJlcXVlc3RCb2R5IiwicmVzcG9uc2VUeXBlIiwiZ2V0VXNlckFnZW50IiwiZ2V0Q29udGVudFR5cGUiLCJ0cmFuc2Zvcm1SZXNwb25zZSIsInJlc3BvbnNlRGF0YSIsImRhdGFJc1N0cmluZyIsImlzSlNPTlJlcXVlc3RlZCIsInBhcnNlVG9KU09OYiIsImlzQnJvd3NlciIsImNyZWRlbnRpYWxzIiwiZ2V0Q3JlZGVudGlhbHMiLCJhdXRoIiwidXNlcm5hbWUiLCJwYXNzd29yZCIsImNsaWVudE9wdGlvbnMiLCJnZXRPcHRpb25zIiwidGltZW91dCIsImtleXMiLCJsZW5ndGgiLCJtYXhCb2R5TGVuZ3RoIiwibWF4Q29udGVudExlbmd0aCIsImJhc2VVcmwiLCJ2YWx1ZSIsInRvU3RyaW5nIiwibmFtZSIsInBlcmZvcm1BUElDYWxsIiwiYnVpbGRGdWxsVXJsIiwic2V0QmFzZVVSTCIsImJvZHkiLCJtYWtlUmVxdWVzdCIsInJlc3BvbnNlIiwiX2ciLCJheGlvc18xIiwiZXJyb3IiLCJjb2RlIiwiZXJyXzEiLCJfZiIsInN0YXR1c18xIiwic3RhdHVzVGV4dCIsInN0YXR1c0NvZGUiLCJlcnJvck1lc3NhZ2UiLCJFcnJvck1lc3NhZ2UiLCJtZXNzYWdlIiwib3JpZ2luYWxNZXNzYWdlIiwiZnVsbE1lc3NhZ2UiLCJNZXNzYWdlcyIsIkVycm9ycyIsIkVycm9yQ29kZSIsIkVycm9ySWRlbnRpZmllciIsIkVycm9yUmVsYXRlZFRvIiwidGV4dCIsInBhcnNlIiwiZSIsIndpbmRvdyIsIkRyYWZ0Q2FtcGFpZ24iLCJFZGl0TW9kZSIsIkNhbXBhaWduRHJhZnRTdGF0dXMiLCJDYW1wYWlnbkRyYWZ0U2VuZGluZ1N0YXR1cyIsIlNlbnRDYW1wYWlnbiIsIkNhbXBhaWduVHlwZSIsIkNvbW1vbiIsIlBlcmlvZCIsIkJ1bGtDb250YWN0TWFuYWdlbWVudCIsIk1hbmFnZUNvbnRhY3RzQWN0aW9uIiwiSW1wb3J0TGlzdEFjdGlvbiIsIkltcG9ydENTVk1ldGhvZCIsIkNTVkltcG9ydFN0YXR1cyIsIkpvYlN0YXR1cyIsIkNvbnRhY3RQcm9wZXJ0aWVzIiwiRGF0YVR5cGUiLCJOYW1lU3BhY2UiLCJNZXNzYWdlIiwiTWVzc2FnZVN0YXRlIiwiRnJvbVR5cGUiLCJNZXNzYWdlU3RhdHVzIiwiQ3VycmVudE1lc3NhZ2VTdGF0dXMiLCJFdmVudFR5cGUiLCJTZWdtZW50YXRpb24iLCJTZWdtZW50U3RhdHVzIiwiU2VuZEVtYWlsVjNfMSIsIlRyYWNrT3BlbnMiLCJUcmFja0NsaWNrcyIsIlJlc3BvbnNlU3RhdHVzIiwiU2VuZGVyIiwiRW1haWxUeXBlIiwiU2VuZGVyU3RhdHVzIiwiRE5TIiwiREtJTUNvbmZpZ3VyYXRpb25DaGVja1N0YXR1cyIsIkRLSU1Db25maWd1cmF0aW9uU3RhdHVzIiwiU1BGQ29uZmlndXJhdGlvbkNoZWNrU3RhdHVzIiwiU1BGQ29uZmlndXJhdGlvblN0YXR1cyIsIkFQSUtleUNvbmZpZ3VyYXRpb24iLCJSdW5MZXZlbCIsIlN0YXRpc3RpYyIsIkNhbXBhaWduT3ZlcnZpZXdJRFR5cGUiLCJDYW1wYWlnbk92ZXJ2aWV3RWRpdE1vZGUiLCJDYW1wYWlnbk92ZXJ2aWV3RWRpdFR5cGUiLCJDb3VudGVyU291cmNlIiwiQ291bnRlclJlc29sdXRpb24iLCJDb3VudGVyVGltaW5nIiwiRW1haWxFdmVudCIsIlRlbXBsYXRlIiwiQ2F0ZWdvcmllcyIsIkNhdGVnb3JpZXNTZWxlY3Rpb25NZXRob2QiLCJPd25lclR5cGUiLCJQdXJwb3NlcyIsIlB1cnBvc2VzU2VsZWN0aW9uTWV0aG9kIiwiV2ViaG9vayIsIkV2ZW50VHlwZVZhbHVlIiwiU3RhdHVzIiwiZW51bWVyYWJsZSIsImdldCIsImlzTmlsXzEiLCJpc051bGxfMSIsImlzVW5kZWZpbmVkXzEiLCJpc1B1cmVPYmplY3RfMSIsInNldFZhbHVlSWZOb3ROaWxfMSIsImdldFByb3RvdHlwZU9mIiwicHJvdG90eXBlIiwidGFyZ2V0T2JqZWN0IiwicGF0aCIsImdsb2JhbE9iamVjdCIsIkJpZ051bWJlciIsImlzTnVtZXJpYyIsIm1hdGhjZWlsIiwiTWF0aCIsImNlaWwiLCJtYXRoZmxvb3IiLCJmbG9vciIsImJpZ251bWJlckVycm9yIiwidG9vTWFueURpZ2l0cyIsIkJBU0UiLCJMT0dfQkFTRSIsIk1BWF9TQUZFX0lOVEVHRVIiLCJQT1dTX1RFTiIsIlNRUlRfQkFTRSIsIk1BWCIsImJpdEZsb29yIiwibiIsImkiLCJjb2VmZlRvU3RyaW5nIiwiYSIsInMiLCJ6IiwiaiIsInIiLCJjaGFyQ29kZUF0Iiwic2xpY2UiLCJjb21wYXJlIiwieCIsInkiLCJiIiwieGMiLCJjIiwieWMiLCJrIiwibCIsImludENoZWNrIiwibWluIiwibWF4IiwiU3RyaW5nIiwiaXNPZGQiLCJ0b0V4cG9uZW50aWFsIiwic3RyIiwiY2hhckF0IiwidG9GaXhlZFBvaW50IiwibGVuIiwienMiLCJjbG9uZSIsImNvbmZpZ09iamVjdCIsImRpdiIsImNvbnZlcnRCYXNlIiwicGFyc2VOdW1lcmljIiwicG93Ml81MyIsInJhbmRvbTUzYml0SW50IiwiYmFzZVByZWZpeCIsImRvdEFmdGVyIiwiZG90QmVmb3JlIiwiaXNJbmZpbml0eU9yTmFOIiwid2hpdGVzcGFjZU9yUGx1cyIsIlAiLCJjb25zdHJ1Y3RvciIsInZhbHVlT2YiLCJPTkUiLCJERUNJTUFMX1BMQUNFUyIsIlJPVU5ESU5HX01PREUiLCJUT19FWFBfTkVHIiwiVE9fRVhQX1BPUyIsIk1JTl9FWFAiLCJNQVhfRVhQIiwiQ1JZUFRPIiwiTU9EVUxPX01PREUiLCJQT1dfUFJFQ0lTSU9OIiwiRk9STUFUIiwicHJlZml4IiwiZ3JvdXBTaXplIiwic2Vjb25kYXJ5R3JvdXBTaXplIiwiZ3JvdXBTZXBhcmF0b3IiLCJkZWNpbWFsU2VwYXJhdG9yIiwiZnJhY3Rpb25Hcm91cFNpemUiLCJmcmFjdGlvbkdyb3VwU2VwYXJhdG9yIiwic3VmZml4IiwiQUxQSEFCRVQiLCJ2IiwiYWxwaGFiZXQiLCJjYXNlQ2hhbmdlZCIsImlzTnVtIiwiX2lzQmlnTnVtYmVyIiwidGVzdCIsInJlcGxhY2UiLCJzZWFyY2giLCJzdWJzdHJpbmciLCJyb3VuZCIsIkRFQlVHIiwidG9VcHBlckNhc2UiLCJwdXNoIiwiZm9ybWF0Iiwicm0iLCJpZCIsImMwIiwibmUiLCJtYXhPck1pbiIsImFyZ3MiLCJtIiwiY2FsbCIsIm5vcm1hbGlzZSIsInBvcCIsInNkIiwiZCIsIm5pIiwicmQiLCJwb3dzMTAiLCJvdXQiLCJST1VORF9VUCIsIlJPVU5EX0RPV04iLCJST1VORF9DRUlMIiwiUk9VTkRfRkxPT1IiLCJST1VORF9IQUxGX1VQIiwiUk9VTkRfSEFMRl9ET1dOIiwiUk9VTkRfSEFMRl9FVkVOIiwiUk9VTkRfSEFMRl9DRUlMIiwiUk9VTkRfSEFMRl9GTE9PUiIsIkVVQ0xJRCIsInNldCIsIm9iaiIsInAiLCJoYXNPd25Qcm9wZXJ0eSIsImNyeXB0byIsImdldFJhbmRvbVZhbHVlcyIsInJhbmRvbUJ5dGVzIiwiRVhQT05FTlRJQUxfQVQiLCJSQU5HRSIsImlzQmlnTnVtYmVyIiwibWF4aW11bSIsImFyZ3VtZW50cyIsImx0IiwibWluaW11bSIsImd0IiwicmFuZG9tIiwiZHAiLCJyYW5kIiwiVWludDMyQXJyYXkiLCJjb3B5Iiwic3BsaWNlIiwic3VtIiwicGx1cyIsImRlY2ltYWwiLCJ0b0Jhc2VPdXQiLCJiYXNlSW4iLCJiYXNlT3V0IiwiYXJyTCIsImFyciIsInJldmVyc2UiLCJzaWduIiwiY2FsbGVySXNUb1N0cmluZyIsInBvdyIsImNvbmNhdCIsIm11bHRpcGx5IiwiYmFzZSIsInRlbXAiLCJ4bG8iLCJ4aGkiLCJjYXJyeSIsImtsbyIsImtoaSIsImFMIiwiYkwiLCJjbXAiLCJzdWJ0cmFjdCIsIm1vcmUiLCJwcm9kIiwicHJvZEwiLCJxIiwicWMiLCJyZW0iLCJyZW1MIiwicmVtMCIsInhpIiwieEwiLCJ5YzAiLCJ5TCIsInl6IiwiTmFOIiwiaXNOYU4iLCJwMSIsInAyIiwiYWJzb2x1dGVWYWx1ZSIsImFicyIsImNvbXBhcmVkVG8iLCJkZWNpbWFsUGxhY2VzIiwiZGl2aWRlZEJ5IiwiZGl2aWRlZFRvSW50ZWdlckJ5IiwiaWRpdiIsImV4cG9uZW50aWF0ZWRCeSIsImhhbGYiLCJpc01vZEV4cCIsIm5Jc0JpZyIsIm5Jc05lZyIsIm5Jc09kZCIsImlzSW50ZWdlciIsIm1vZCIsInRpbWVzIiwiaW50ZWdlclZhbHVlIiwiaXNFcXVhbFRvIiwiZXEiLCJpc0Zpbml0ZSIsImlzR3JlYXRlclRoYW4iLCJpc0dyZWF0ZXJUaGFuT3JFcXVhbFRvIiwiZ3RlIiwiaXNMZXNzVGhhbiIsImlzTGVzc1RoYW5PckVxdWFsVG8iLCJsdGUiLCJpc05lZ2F0aXZlIiwiaXNQb3NpdGl2ZSIsImlzWmVybyIsIm1pbnVzIiwidCIsInhMVHkiLCJ4ZSIsInllIiwibW9kdWxvIiwibXVsdGlwbGllZEJ5IiwieGNMIiwieWNMIiwieWxvIiwieWhpIiwiemMiLCJzcXJ0QmFzZSIsIm5lZ2F0ZWQiLCJwcmVjaXNpb24iLCJzaGlmdGVkQnkiLCJzcXVhcmVSb290Iiwic3FydCIsInJlcCIsInRvRml4ZWQiLCJ0b0Zvcm1hdCIsInNwbGl0IiwiZzEiLCJnMiIsImludFBhcnQiLCJmcmFjdGlvblBhcnQiLCJpc05lZyIsImludERpZ2l0cyIsInN1YnN0ciIsIlJlZ0V4cCIsInRvRnJhY3Rpb24iLCJtZCIsImQwIiwiZDEiLCJkMiIsImV4cCIsIm4wIiwibjEiLCJ0b051bWJlciIsInRvUHJlY2lzaW9uIiwidG9KU09OIiwianNvbl9zdHJpbmdpZnkiLCJqc29uX3BhcnNlIiwibW9kdWxlIiwic3RyaW5naWZ5Iiwic3VzcGVjdFByb3RvUngiLCJzdXNwZWN0Q29uc3RydWN0b3JSeCIsIl9vcHRpb25zIiwic3RyaWN0IiwiYWx3YXlzUGFyc2VBc0JpZyIsInVzZU5hdGl2ZUJpZ0ludCIsInByb3RvQWN0aW9uIiwiY29uc3RydWN0b3JBY3Rpb24iLCJhdCIsImNoIiwiZXNjYXBlZSIsImYiLCJuZXh0IiwibnVtYmVyIiwic3RyaW5nIiwiQmlnSW50IiwiaGV4IiwidWZmZmYiLCJzdGFydEF0IiwicGFyc2VJbnQiLCJmcm9tQ2hhckNvZGUiLCJ3aGl0ZSIsImtleSIsIm9iamVjdCIsImNyZWF0ZSIsImFycmF5Iiwid29yZCIsInNvdXJjZSIsInJldml2ZXIiLCJyZXN1bHQiLCJ3YWxrIiwiaG9sZGVyIiwiZm9yRWFjaCIsIkpTT04iLCJnYXAiLCJpbmRlbnQiLCJlc2NhcGFibGUiLCJtZXRhIiwicXVvdGUiLCJsYXN0SW5kZXgiLCJwYXJ0aWFsIiwibWluZCIsImFwcGx5Iiwiam9pbiIsInJlcGxhY2VyIiwic3BhY2UiLCJub3JtYWxpemUiLCJzdHJBcnJheSIsInJlc3VsdEFycmF5IiwiVHlwZUVycm9yIiwibWF0Y2giLCJmaXJzdCIsInNoaWZ0IiwiY29tcG9uZW50IiwicGFydHMiLCJkZWZpbml0aW9uIiwiYmluZCIsImZuIiwidGhpc0FyZyIsImtpbmRPZiIsImNhY2hlIiwidGhpbmciLCJraW5kT2ZUZXN0IiwidHlwZSIsInR5cGVPZlRlc3QiLCJpc0FycmF5IiwiQXJyYXkiLCJpc1VuZGVmaW5lZCIsImlzQXJyYXlCdWZmZXIiLCJpc1N0cmluZyIsImlzRnVuY3Rpb24iLCJpc051bWJlciIsImlzT2JqZWN0IiwiaXNQbGFpbk9iamVjdCIsInZhbCIsIlN5bWJvbCIsInRvU3RyaW5nVGFnIiwiaXRlcmF0b3IiLCJpc0RhdGUiLCJpc0ZpbGUiLCJpc0Jsb2IiLCJpc0ZpbGVMaXN0IiwiaXNVUkxTZWFyY2hQYXJhbXMiLCJpc1JlYWRhYmxlU3RyZWFtIiwiaXNSZXF1ZXN0IiwiaXNSZXNwb25zZSIsImlzSGVhZGVycyIsIm1hcCIsImFsbE93bktleXMiLCJnZXRPd25Qcm9wZXJ0eU5hbWVzIiwiZmluZEtleSIsIl9rZXkiLCJfZ2xvYmFsIiwiZ2xvYmFsVGhpcyIsInNlbGYiLCJnIiwiaXNDb250ZXh0RGVmaW5lZCIsImNvbnRleHQiLCJpc1R5cGVkQXJyYXkiLCJUeXBlZEFycmF5IiwiVWludDhBcnJheSIsImlzSFRNTEZvcm0iLCJwcm9wIiwiaXNSZWdFeHAiLCJyZWR1Y2VEZXNjcmlwdG9ycyIsInJlZHVjZXIiLCJkZXNjcmlwdG9ycyIsImdldE93blByb3BlcnR5RGVzY3JpcHRvcnMiLCJyZWR1Y2VkRGVzY3JpcHRvcnMiLCJkZXNjcmlwdG9yIiwicmV0IiwiZGVmaW5lUHJvcGVydGllcyIsIkFMUEhBIiwiRElHSVQiLCJBTFBIQV9ESUdJVCIsImlzQXN5bmNGbiIsIl9zZXRJbW1lZGlhdGUiLCJzZXRJbW1lZGlhdGVTdXBwb3J0ZWQiLCJzZXRJbW1lZGlhdGUiLCJwb3N0TWVzc2FnZVN1cHBvcnRlZCIsInBvc3RNZXNzYWdlIiwidG9rZW4iLCJjYWxsYmFja3MiLCJhZGRFdmVudExpc3RlbmVyIiwiY2IiLCJzZXRUaW1lb3V0IiwiYXNhcCIsInF1ZXVlTWljcm90YXNrIiwicHJvY2VzcyIsIm5leHRUaWNrIiwidXRpbHMkMSIsImlzQnVmZmVyIiwiaXNGb3JtRGF0YSIsImtpbmQiLCJGb3JtRGF0YSIsImFwcGVuZCIsImlzQXJyYXlCdWZmZXJWaWV3IiwiQXJyYXlCdWZmZXIiLCJpc1ZpZXciLCJidWZmZXIiLCJpc0Jvb2xlYW4iLCJpc1N0cmVhbSIsInBpcGUiLCJtZXJnZSIsImNhc2VsZXNzIiwiYXNzaWduVmFsdWUiLCJ0YXJnZXRLZXkiLCJleHRlbmQiLCJ0cmltIiwic3RyaXBCT00iLCJjb250ZW50IiwiaW5oZXJpdHMiLCJzdXBlckNvbnN0cnVjdG9yIiwicHJvcHMiLCJkZWZpbmVQcm9wZXJ0eSIsImFzc2lnbiIsInRvRmxhdE9iamVjdCIsInNvdXJjZU9iaiIsImRlc3RPYmoiLCJmaWx0ZXIiLCJwcm9wRmlsdGVyIiwibWVyZ2VkIiwiZW5kc1dpdGgiLCJzZWFyY2hTdHJpbmciLCJwb3NpdGlvbiIsInRvQXJyYXkiLCJmb3JFYWNoRW50cnkiLCJkb25lIiwicGFpciIsIm1hdGNoQWxsIiwicmVnRXhwIiwibWF0Y2hlcyIsImV4ZWMiLCJoYXNPd25Qcm9wIiwiZnJlZXplTWV0aG9kcyIsIndyaXRhYmxlIiwidG9PYmplY3RTZXQiLCJhcnJheU9yU3RyaW5nIiwiZGVsaW1pdGVyIiwiZGVmaW5lIiwidG9DYW1lbENhc2UiLCJub29wIiwidG9GaW5pdGVOdW1iZXIiLCJkZWZhdWx0VmFsdWUiLCJOdW1iZXIiLCJnbG9iYWwiLCJnZW5lcmF0ZVN0cmluZyIsInNpemUiLCJpc1NwZWNDb21wbGlhbnRGb3JtIiwidG9KU09OT2JqZWN0Iiwic3RhY2siLCJ2aXNpdCIsInRhcmdldCIsInJlZHVjZWRWYWx1ZSIsImlzVGhlbmFibGUiLCJ0aGVuIiwiY2F0Y2giLCJBeGlvc0Vycm9yIiwicmVxdWVzdCIsImNhcHR1cmVTdGFja1RyYWNlIiwiZGVzY3JpcHRpb24iLCJmaWxlTmFtZSIsImxpbmVOdW1iZXIiLCJjb2x1bW5OdW1iZXIiLCJzdGF0dXMiLCJwcm90b3R5cGUkMSIsImZyb20iLCJjdXN0b21Qcm9wcyIsImF4aW9zRXJyb3IiLCJjYXVzZSIsImlzVmlzaXRhYmxlIiwicmVtb3ZlQnJhY2tldHMiLCJyZW5kZXJLZXkiLCJkb3RzIiwicHJlZGljYXRlcyIsInRvRm9ybURhdGEiLCJmb3JtRGF0YSIsIm1ldGFUb2tlbnMiLCJpbmRleGVzIiwib3B0aW9uIiwidmlzaXRvciIsImRlZmF1bHRWaXNpdG9yIiwidXNlQmxvYiIsIkJsb2IiLCJjb252ZXJ0VmFsdWUiLCJ0b0lTT1N0cmluZyIsIkJ1ZmZlciIsInNvbWUiLCJpc0ZsYXRBcnJheSIsImVsIiwiaW5kZXgiLCJleHBvc2VkSGVscGVycyIsImJ1aWxkIiwiZW5jb2RlJDEiLCJjaGFyTWFwIiwiZW5jb2RlVVJJQ29tcG9uZW50IiwiQXhpb3NVUkxTZWFyY2hQYXJhbXMiLCJfcGFpcnMiLCJlbmNvZGUiLCJidWlsZFVSTCIsIl9lbmNvZGUiLCJzZXJpYWxpemVGbiIsInNlcmlhbGl6ZSIsInNlcmlhbGl6ZWRQYXJhbXMiLCJoYXNobWFya0luZGV4IiwiZW5jb2RlciIsIkludGVyY2VwdG9yTWFuYWdlciQxIiwiSW50ZXJjZXB0b3JNYW5hZ2VyIiwiaGFuZGxlcnMiLCJ1c2UiLCJmdWxmaWxsZWQiLCJyZWplY3RlZCIsInN5bmNocm9ub3VzIiwicnVuV2hlbiIsImVqZWN0IiwiY2xlYXIiLCJoIiwidHJhbnNpdGlvbmFsRGVmYXVsdHMiLCJzaWxlbnRKU09OUGFyc2luZyIsImZvcmNlZEpTT05QYXJzaW5nIiwiY2xhcmlmeVRpbWVvdXRFcnJvciIsInBsYXRmb3JtJDEiLCJjbGFzc2VzIiwiVVJMU2VhcmNoUGFyYW1zIiwicHJvdG9jb2xzIiwiaGFzQnJvd3NlckVudiIsImRvY3VtZW50IiwiaGFzU3RhbmRhcmRCcm93c2VyRW52IiwicHJvZHVjdCIsIm5hdmlnYXRvciIsImhhc1N0YW5kYXJkQnJvd3NlcldlYldvcmtlckVudiIsIldvcmtlckdsb2JhbFNjb3BlIiwiaW1wb3J0U2NyaXB0cyIsIm9yaWdpbiIsImxvY2F0aW9uIiwiaHJlZiIsInBsYXRmb3JtIiwiX19wcm90b19fIiwiZm9ybURhdGFUb0pTT04iLCJidWlsZFBhdGgiLCJpc051bWVyaWNLZXkiLCJpc0xhc3QiLCJhcnJheVRvT2JqZWN0IiwiZW50cmllcyIsInBhcnNlUHJvcFBhdGgiLCJkZWZhdWx0cyIsInRyYW5zaXRpb25hbCIsImFkYXB0ZXIiLCJ0cmFuc2Zvcm1SZXF1ZXN0IiwiY29udGVudFR5cGUiLCJoYXNKU09OQ29udGVudFR5cGUiLCJpc09iamVjdFBheWxvYWQiLCJzZXRDb250ZW50VHlwZSIsImhlbHBlcnMiLCJpc05vZGUiLCJ0b1VSTEVuY29kZWRGb3JtIiwiZm9ybVNlcmlhbGl6ZXIiLCJfRm9ybURhdGEiLCJlbnYiLCJyYXdWYWx1ZSIsInBhcnNlciIsInN0cmluZ2lmeVNhZmVseSIsIkpTT05SZXF1ZXN0ZWQiLCJzdHJpY3RKU09OUGFyc2luZyIsIkVSUl9CQURfUkVTUE9OU0UiLCJ4c3JmQ29va2llTmFtZSIsInhzcmZIZWFkZXJOYW1lIiwidmFsaWRhdGVTdGF0dXMiLCJjb21tb24iLCJkZWZhdWx0cyQxIiwiaWdub3JlRHVwbGljYXRlT2YiLCIkaW50ZXJuYWxzIiwibm9ybWFsaXplSGVhZGVyIiwiaGVhZGVyIiwibm9ybWFsaXplVmFsdWUiLCJtYXRjaEhlYWRlclZhbHVlIiwiaXNIZWFkZXJOYW1lRmlsdGVyIiwiQXhpb3NIZWFkZXJzIiwidmFsdWVPclJld3JpdGUiLCJyZXdyaXRlIiwic2V0SGVhZGVyIiwiX3ZhbHVlIiwiX2hlYWRlciIsIl9yZXdyaXRlIiwibEhlYWRlciIsInNldEhlYWRlcnMiLCJyYXdIZWFkZXJzIiwicGFyc2VkIiwibGluZSIsInBhcnNlSGVhZGVycyIsInRva2VucyIsInRva2Vuc1JFIiwicGFyc2VUb2tlbnMiLCJoYXMiLCJtYXRjaGVyIiwiZGVsZXRlIiwiZGVsZXRlZCIsImRlbGV0ZUhlYWRlciIsIm5vcm1hbGl6ZWQiLCJ3IiwiY2hhciIsImZvcm1hdEhlYWRlciIsInRhcmdldHMiLCJhc1N0cmluZ3MiLCJzdGF0aWMiLCJjb21wdXRlZCIsImFjY2Vzc29ycyIsImRlZmluZUFjY2Vzc29yIiwiYWNjZXNzb3JOYW1lIiwibWV0aG9kTmFtZSIsImFyZzEiLCJhcmcyIiwiYXJnMyIsImNvbmZpZ3VyYWJsZSIsImJ1aWxkQWNjZXNzb3JzIiwiYWNjZXNzb3IiLCJtYXBwZWQiLCJoZWFkZXJWYWx1ZSIsIkF4aW9zSGVhZGVycyQxIiwidHJhbnNmb3JtRGF0YSIsImZucyIsImlzQ2FuY2VsIiwiX19DQU5DRUxfXyIsIkNhbmNlbGVkRXJyb3IiLCJFUlJfQ0FOQ0VMRUQiLCJzZXR0bGUiLCJyZXNvbHZlIiwicmVqZWN0IiwiRVJSX0JBRF9SRVFVRVNUIiwicHJvZ3Jlc3NFdmVudFJlZHVjZXIiLCJsaXN0ZW5lciIsImlzRG93bmxvYWRTdHJlYW0iLCJmcmVxIiwiYnl0ZXNOb3RpZmllZCIsIl9zcGVlZG9tZXRlciIsInNhbXBsZXNDb3VudCIsImJ5dGVzIiwidGltZXN0YW1wcyIsImZpcnN0U2FtcGxlVFMiLCJoZWFkIiwidGFpbCIsImNodW5rTGVuZ3RoIiwibm93IiwiRGF0ZSIsInN0YXJ0ZWRBdCIsImJ5dGVzQ291bnQiLCJwYXNzZWQiLCJzcGVlZG9tZXRlciIsImxhc3RBcmdzIiwidGltZXIiLCJ0aW1lc3RhbXAiLCJ0aHJlc2hvbGQiLCJpbnZva2UiLCJjbGVhclRpbWVvdXQiLCJ0aHJvdHRsZSIsImxvYWRlZCIsInRvdGFsIiwibGVuZ3RoQ29tcHV0YWJsZSIsInByb2dyZXNzQnl0ZXMiLCJyYXRlIiwicHJvZ3Jlc3MiLCJlc3RpbWF0ZWQiLCJldmVudCIsInByb2dyZXNzRXZlbnREZWNvcmF0b3IiLCJ0aHJvdHRsZWQiLCJhc3luY0RlY29yYXRvciIsImlzVVJMU2FtZU9yaWdpbiIsIm1zaWUiLCJ1c2VyQWdlbnQiLCJ1cmxQYXJzaW5nTm9kZSIsImNyZWF0ZUVsZW1lbnQiLCJvcmlnaW5VUkwiLCJyZXNvbHZlVVJMIiwic2V0QXR0cmlidXRlIiwiaGFzaCIsImhvc3RuYW1lIiwicG9ydCIsInBhdGhuYW1lIiwicmVxdWVzdFVSTCIsImNvb2tpZXMiLCJ3cml0ZSIsImV4cGlyZXMiLCJkb21haW4iLCJzZWN1cmUiLCJjb29raWUiLCJ0b0dNVFN0cmluZyIsInJlYWQiLCJkZWNvZGVVUklDb21wb25lbnQiLCJyZW1vdmUiLCJidWlsZEZ1bGxQYXRoIiwiYmFzZVVSTCIsInJlcXVlc3RlZFVSTCIsInJlbGF0aXZlVVJMIiwiY29tYmluZVVSTHMiLCJoZWFkZXJzVG9PYmplY3QiLCJtZXJnZUNvbmZpZyIsImNvbmZpZzEiLCJjb25maWcyIiwiZ2V0TWVyZ2VkVmFsdWUiLCJtZXJnZURlZXBQcm9wZXJ0aWVzIiwidmFsdWVGcm9tQ29uZmlnMiIsImRlZmF1bHRUb0NvbmZpZzIiLCJtZXJnZURpcmVjdEtleXMiLCJtZXJnZU1hcCIsInBhcmFtc1NlcmlhbGl6ZXIiLCJ0aW1lb3V0TWVzc2FnZSIsIndpdGhDcmVkZW50aWFscyIsIndpdGhYU1JGVG9rZW4iLCJvblVwbG9hZFByb2dyZXNzIiwib25Eb3dubG9hZFByb2dyZXNzIiwiZGVjb21wcmVzcyIsImJlZm9yZVJlZGlyZWN0IiwidHJhbnNwb3J0IiwiaHR0cEFnZW50IiwiaHR0cHNBZ2VudCIsImNhbmNlbFRva2VuIiwic29ja2V0UGF0aCIsInJlc3BvbnNlRW5jb2RpbmciLCJjb25maWdWYWx1ZSIsInJlc29sdmVDb25maWciLCJuZXdDb25maWciLCJidG9hIiwidW5lc2NhcGUiLCJCb29sZWFuIiwieHNyZlZhbHVlIiwieGhyQWRhcHRlciIsIlhNTEh0dHBSZXF1ZXN0IiwiUHJvbWlzZSIsIl9jb25maWciLCJyZXF1ZXN0RGF0YSIsInJlcXVlc3RIZWFkZXJzIiwib25DYW5jZWxlZCIsInVwbG9hZFRocm90dGxlZCIsImRvd25sb2FkVGhyb3R0bGVkIiwiZmx1c2hVcGxvYWQiLCJmbHVzaERvd25sb2FkIiwidW5zdWJzY3JpYmUiLCJzaWduYWwiLCJyZW1vdmVFdmVudExpc3RlbmVyIiwib25sb2FkZW5kIiwicmVzcG9uc2VIZWFkZXJzIiwiZ2V0QWxsUmVzcG9uc2VIZWFkZXJzIiwiZXJyIiwicmVzcG9uc2VUZXh0Iiwib3BlbiIsIm9ucmVhZHlzdGF0ZWNoYW5nZSIsInJlYWR5U3RhdGUiLCJyZXNwb25zZVVSTCIsIm9uYWJvcnQiLCJFQ09OTkFCT1JURUQiLCJvbmVycm9yIiwiRVJSX05FVFdPUksiLCJvbnRpbWVvdXQiLCJ0aW1lb3V0RXJyb3JNZXNzYWdlIiwiRVRJTUVET1VUIiwic2V0UmVxdWVzdEhlYWRlciIsInVwbG9hZCIsImNhbmNlbCIsImFib3J0Iiwic3Vic2NyaWJlIiwiYWJvcnRlZCIsInBhcnNlUHJvdG9jb2wiLCJzZW5kIiwiY29tcG9zZVNpZ25hbHMkMSIsInNpZ25hbHMiLCJjb250cm9sbGVyIiwiQWJvcnRDb250cm9sbGVyIiwicmVhc29uIiwic3RyZWFtQ2h1bmsiLCJjaHVuayIsImNodW5rU2l6ZSIsImJ5dGVMZW5ndGgiLCJlbmQiLCJwb3MiLCJ0cmFja1N0cmVhbSIsInN0cmVhbSIsIm9uUHJvZ3Jlc3MiLCJvbkZpbmlzaCIsImFzeW5jIiwiaXRlcmFibGUiLCJyZWFkQnl0ZXMiLCJfb25GaW5pc2giLCJSZWFkYWJsZVN0cmVhbSIsImNsb3NlIiwibG9hZGVkQnl0ZXMiLCJlbnF1ZXVlIiwicmV0dXJuIiwiaGlnaFdhdGVyTWFyayIsImlzRmV0Y2hTdXBwb3J0ZWQiLCJmZXRjaCIsIlJlc3BvbnNlIiwiaXNSZWFkYWJsZVN0cmVhbVN1cHBvcnRlZCIsImVuY29kZVRleHQiLCJUZXh0RW5jb2RlciIsImFycmF5QnVmZmVyIiwic3VwcG9ydHNSZXF1ZXN0U3RyZWFtIiwiZHVwbGV4QWNjZXNzZWQiLCJoYXNDb250ZW50VHlwZSIsImR1cGxleCIsInN1cHBvcnRzUmVzcG9uc2VTdHJlYW0iLCJyZXNvbHZlcnMiLCJyZXMiLCJfIiwiRVJSX05PVF9TVVBQT1JUIiwicmVzb2x2ZUJvZHlMZW5ndGgiLCJnZXRDb250ZW50TGVuZ3RoIiwiZ2V0Qm9keUxlbmd0aCIsImtub3duQWRhcHRlcnMiLCJodHRwIiwieGhyIiwiZmV0Y2hPcHRpb25zIiwiZmluaXNoZWQiLCJjb21wb3NlZFNpZ25hbCIsInN0b3BUaW1lb3V0IiwicmVxdWVzdENvbnRlbnRMZW5ndGgiLCJjb250ZW50VHlwZUhlYWRlciIsIl9yZXF1ZXN0IiwiZmx1c2giLCJpc1N0cmVhbVJlc3BvbnNlIiwicmVzcG9uc2VDb250ZW50TGVuZ3RoIiwicmVuZGVyUmVhc29uIiwiaXNSZXNvbHZlZEhhbmRsZSIsImFkYXB0ZXJzIiwibmFtZU9yQWRhcHRlciIsInJlamVjdGVkUmVhc29ucyIsInJlYXNvbnMiLCJzdGF0ZSIsInRocm93SWZDYW5jZWxsYXRpb25SZXF1ZXN0ZWQiLCJ0aHJvd0lmUmVxdWVzdGVkIiwiZGlzcGF0Y2hSZXF1ZXN0IiwiVkVSU0lPTiIsInZhbGlkYXRvcnMkMSIsImRlcHJlY2F0ZWRXYXJuaW5ncyIsInZhbGlkYXRvciIsImZvcm1hdE1lc3NhZ2UiLCJvcHQiLCJkZXNjIiwib3B0cyIsIkVSUl9ERVBSRUNBVEVEIiwiY29uc29sZSIsIndhcm4iLCJhc3NlcnRPcHRpb25zIiwic2NoZW1hIiwiYWxsb3dVbmtub3duIiwiRVJSX0JBRF9PUFRJT05fVkFMVUUiLCJFUlJfQkFEX09QVElPTiIsInZhbGlkYXRvcnMiLCJBeGlvcyIsImluc3RhbmNlQ29uZmlnIiwiaW50ZXJjZXB0b3JzIiwiY29uZmlnT3JVcmwiLCJkdW1teSIsImJvb2xlYW4iLCJmdW5jdGlvbiIsImNvbnRleHRIZWFkZXJzIiwicmVxdWVzdEludGVyY2VwdG9yQ2hhaW4iLCJzeW5jaHJvbm91c1JlcXVlc3RJbnRlcmNlcHRvcnMiLCJpbnRlcmNlcHRvciIsInVuc2hpZnQiLCJyZXNwb25zZUludGVyY2VwdG9yQ2hhaW4iLCJwcm9taXNlIiwiY2hhaW4iLCJvbkZ1bGZpbGxlZCIsIm9uUmVqZWN0ZWQiLCJnZXRVcmkiLCJnZW5lcmF0ZUhUVFBNZXRob2QiLCJpc0Zvcm0iLCJBeGlvcyQxIiwiQ2FuY2VsVG9rZW4iLCJleGVjdXRvciIsInJlc29sdmVQcm9taXNlIiwiX2xpc3RlbmVycyIsIm9uZnVsZmlsbGVkIiwiX3Jlc29sdmUiLCJDYW5jZWxUb2tlbiQxIiwiSHR0cFN0YXR1c0NvZGUiLCJDb250aW51ZSIsIlN3aXRjaGluZ1Byb3RvY29scyIsIlByb2Nlc3NpbmciLCJFYXJseUhpbnRzIiwiT2siLCJDcmVhdGVkIiwiQWNjZXB0ZWQiLCJOb25BdXRob3JpdGF0aXZlSW5mb3JtYXRpb24iLCJOb0NvbnRlbnQiLCJSZXNldENvbnRlbnQiLCJQYXJ0aWFsQ29udGVudCIsIk11bHRpU3RhdHVzIiwiQWxyZWFkeVJlcG9ydGVkIiwiSW1Vc2VkIiwiTXVsdGlwbGVDaG9pY2VzIiwiTW92ZWRQZXJtYW5lbnRseSIsIkZvdW5kIiwiU2VlT3RoZXIiLCJOb3RNb2RpZmllZCIsIlVzZVByb3h5IiwiVW51c2VkIiwiVGVtcG9yYXJ5UmVkaXJlY3QiLCJQZXJtYW5lbnRSZWRpcmVjdCIsIkJhZFJlcXVlc3QiLCJVbmF1dGhvcml6ZWQiLCJQYXltZW50UmVxdWlyZWQiLCJGb3JiaWRkZW4iLCJOb3RGb3VuZCIsIk1ldGhvZE5vdEFsbG93ZWQiLCJOb3RBY2NlcHRhYmxlIiwiUHJveHlBdXRoZW50aWNhdGlvblJlcXVpcmVkIiwiUmVxdWVzdFRpbWVvdXQiLCJDb25mbGljdCIsIkdvbmUiLCJMZW5ndGhSZXF1aXJlZCIsIlByZWNvbmRpdGlvbkZhaWxlZCIsIlBheWxvYWRUb29MYXJnZSIsIlVyaVRvb0xvbmciLCJVbnN1cHBvcnRlZE1lZGlhVHlwZSIsIlJhbmdlTm90U2F0aXNmaWFibGUiLCJFeHBlY3RhdGlvbkZhaWxlZCIsIkltQVRlYXBvdCIsIk1pc2RpcmVjdGVkUmVxdWVzdCIsIlVucHJvY2Vzc2FibGVFbnRpdHkiLCJMb2NrZWQiLCJGYWlsZWREZXBlbmRlbmN5IiwiVG9vRWFybHkiLCJVcGdyYWRlUmVxdWlyZWQiLCJQcmVjb25kaXRpb25SZXF1aXJlZCIsIlRvb01hbnlSZXF1ZXN0cyIsIlJlcXVlc3RIZWFkZXJGaWVsZHNUb29MYXJnZSIsIlVuYXZhaWxhYmxlRm9yTGVnYWxSZWFzb25zIiwiSW50ZXJuYWxTZXJ2ZXJFcnJvciIsIk5vdEltcGxlbWVudGVkIiwiQmFkR2F0ZXdheSIsIlNlcnZpY2VVbmF2YWlsYWJsZSIsIkdhdGV3YXlUaW1lb3V0IiwiSHR0cFZlcnNpb25Ob3RTdXBwb3J0ZWQiLCJWYXJpYW50QWxzb05lZ290aWF0ZXMiLCJJbnN1ZmZpY2llbnRTdG9yYWdlIiwiTG9vcERldGVjdGVkIiwiTm90RXh0ZW5kZWQiLCJOZXR3b3JrQXV0aGVudGljYXRpb25SZXF1aXJlZCIsIkh0dHBTdGF0dXNDb2RlJDEiLCJheGlvcyIsImNyZWF0ZUluc3RhbmNlIiwiZGVmYXVsdENvbmZpZyIsImluc3RhbmNlIiwiQ2FuY2VsIiwiYWxsIiwicHJvbWlzZXMiLCJzcHJlYWQiLCJjYWxsYmFjayIsImlzQXhpb3NFcnJvciIsInBheWxvYWQiLCJmb3JtVG9KU09OIiwiZ2V0QWRhcHRlciIsImRlZmF1bHQiLCJfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX18iLCJfX3dlYnBhY2tfcmVxdWlyZV9fIiwibW9kdWxlSWQiLCJjYWNoZWRNb2R1bGUiLCJfX3dlYnBhY2tfbW9kdWxlc19fIiwiRnVuY3Rpb24iXSwic291cmNlUm9vdCI6IiJ9 \ No newline at end of file diff --git a/dist/mailjet.web.js.LICENSE.txt b/dist/mailjet.web.js.LICENSE.txt index cbd512d..bf2252d 100644 --- a/dist/mailjet.web.js.LICENSE.txt +++ b/dist/mailjet.web.js.LICENSE.txt @@ -1 +1 @@ -/*! node-mailjet v6.0.5 */ +/*! node-mailjet v6.0.6 */ diff --git a/dist/package-lock.json b/dist/package-lock.json index 04d811e..bd42df8 100644 --- a/dist/package-lock.json +++ b/dist/package-lock.json @@ -1,6 +1,6 @@ { "name": "node-mailjet", - "version": "6.0.5", + "version": "6.0.6", "lockfileVersion": 2, "requires": true, "dependencies": { @@ -10,11 +10,11 @@ "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" }, "axios": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.6.2.tgz", - "integrity": "sha512-7i24Ri4pmDRfJTR7LDBhsOTtcm+9kjX5WiY1X3wIisx6G9So3pfMkEiU7emUBe46oceVImccTEM3k6C5dbVW8A==", + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.7.4.tgz", + "integrity": "sha512-DukmaFRnY6AzAALSH4J2M3k6PkaC+MfaAGdEERRWcC9q3/TWQwLpHR8ZRLKTdQ3aBDL64EdluRDjJqKw+BPZEw==", "requires": { - "follow-redirects": "^1.15.0", + "follow-redirects": "^1.15.6", "form-data": "^4.0.0", "proxy-from-env": "^1.1.0" } @@ -38,9 +38,9 @@ "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==" }, "follow-redirects": { - "version": "1.15.1", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.1.tgz", - "integrity": "sha512-yLAMQs+k0b2m7cVxpS1VKJVvoz7SS9Td1zss3XRwXj+ZDH00RJgnuLx7E44wx02kQLrdM3aOOy+FpzS7+8OizA==" + "version": "1.15.6", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.6.tgz", + "integrity": "sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==" }, "form-data": { "version": "4.0.0", diff --git a/dist/package.json b/dist/package.json index aa95b3e..ba3e07b 100644 --- a/dist/package.json +++ b/dist/package.json @@ -1,6 +1,6 @@ { "name": "node-mailjet", - "version": "6.0.5", + "version": "6.0.6", "main": "./mailjet.node.js", "browser": "./mailjet.web.js", "types": "./declarations/index.d.ts", @@ -26,7 +26,7 @@ "definition": "./declarations/index.d.ts" }, "dependencies": { - "axios": "1.6.2", + "axios": "1.7.4", "json-bigint": "^1.0.0", "url-join": "^4.0.0" }, diff --git a/docs/classes/client.default.html b/docs/classes/client.default.html index 3e05532..f188d60 100644 --- a/docs/classes/client.default.html +++ b/docs/classes/client.default.html @@ -1 +1 @@ -default | node-mailjet
Options
All
  • Public
  • Public/Protected
  • All
Menu

Hierarchy

Index

Constructors

Properties

apiKey?: string
apiSecret?: string
apiToken?: string
version: string
config: Readonly<RequestConfig> = ...
packageJSON: Readonly<{ author: string; browser: string; bugs: { url: string }; contributors: string[]; dependencies: { axios: string; json-bigint: string; url-join: string }; description: string; devDependencies: { @babel/core: string; @babel/preset-env: string; @commitlint/cli: string; @commitlint/config-conventional: string; @types/chai: string; @types/json-bigint: string; @types/mocha: string; @types/node: string; @types/qs: string; @types/superagent: string; @types/url-join: string; @typescript-eslint/eslint-plugin: string; @typescript-eslint/parser: string; babel-loader: string; chai: string; eslint: string; eslint-config-airbnb-base: string; eslint-import-resolver-typescript: string; eslint-plugin-import: string; eslint-plugin-tsdoc: string; husky: string; mocha: string; nock: string; nyc: string; qs: string; standard-version: string; terser-webpack-plugin: string; ts-loader: string; ts-node: string; ts-node-dev: string; ts-patch: string; tsconfig-paths: string; tsconfig-paths-webpack-plugin: string; typedoc: string; typescript: string; typescript-transform-paths: string; webpack: string; webpack-cli: string; webpack-merge: string }; directories: { docs: string; lib: string }; engines: { node: string; npm: string }; files: string[]; homepage: string; keywords: string[]; license: string; main: string; name: string; private: boolean; repository: { type: string; url: string }; scripts: { build: string; build:dev: string; build:prepublish: string; build:release: string; build:watch: string; cover: string; cover:expandable: string; cover:int: string; cover:unit: string; docs: string; init: string; lint: string; lint:errors: string; lint:fix: string; pkg:link: string; pkg:precommit: string; pkg:prepare: string; release: string; release:dry: string; release:major: string; release:minor: string; release:patch: string; release:quiet: string; test: string; test:int: string; test:unit: string; test:watch: string; ts:mocha: string; ts:patch: string; ts:run: string; ts:watch: string }; types: string; typescript: { definition: string }; version: string }> = ...

Methods

  • basicConnectStrategy(apiKey: undefined | string, apiSecret: undefined | string): default
  • getAPIKey(): undefined | string
  • getAPISecret(): undefined | string
  • getAPIToken(): undefined | string
  • getConfig(): { host: string; output: ResponseType; version: string }
  • Returns { host: string; output: ResponseType; version: string }

    • host: string
    • output: ResponseType
    • version: string
  • getPackageVersion(): string
  • tokenConnectStrategy(apiToken: undefined | string): default

Legend

  • Namespace
  • Function
  • Type alias
  • Class
  • Constructor
  • Method
  • Interface
  • Interface with type parameter
  • Private property
  • Private method
  • Static property
  • Static method
  • Enumeration

Settings

Theme

Generated using TypeDoc

\ No newline at end of file +default | node-mailjet
Options
All
  • Public
  • Public/Protected
  • All
Menu

Hierarchy

Index

Constructors

Properties

apiKey?: string
apiSecret?: string
apiToken?: string
version: string
config: Readonly<RequestConfig> = ...
packageJSON: Readonly<{ author: string; browser: string; bugs: { url: string }; contributors: string[]; dependencies: { axios: string; json-bigint: string; url-join: string }; description: string; devDependencies: { @babel/core: string; @babel/preset-env: string; @commitlint/cli: string; @commitlint/config-conventional: string; @types/chai: string; @types/json-bigint: string; @types/mocha: string; @types/node: string; @types/qs: string; @types/superagent: string; @types/url-join: string; @typescript-eslint/eslint-plugin: string; @typescript-eslint/parser: string; babel-loader: string; chai: string; eslint: string; eslint-config-airbnb-base: string; eslint-import-resolver-typescript: string; eslint-plugin-import: string; eslint-plugin-tsdoc: string; husky: string; mocha: string; nock: string; nyc: string; qs: string; standard-version: string; terser-webpack-plugin: string; ts-loader: string; ts-node: string; ts-node-dev: string; ts-patch: string; tsconfig-paths: string; tsconfig-paths-webpack-plugin: string; typedoc: string; typescript: string; typescript-transform-paths: string; webpack: string; webpack-cli: string; webpack-merge: string }; directories: { docs: string; lib: string }; engines: { node: string; npm: string }; files: string[]; homepage: string; keywords: string[]; license: string; main: string; name: string; private: boolean; repository: { type: string; url: string }; scripts: { build: string; build:dev: string; build:prepublish: string; build:release: string; build:watch: string; cover: string; cover:expandable: string; cover:int: string; cover:unit: string; docs: string; init: string; lint: string; lint:errors: string; lint:fix: string; pkg:link: string; pkg:precommit: string; pkg:prepare: string; release: string; release:dry: string; release:major: string; release:minor: string; release:patch: string; release:quiet: string; test: string; test:int: string; test:unit: string; test:watch: string; ts:mocha: string; ts:patch: string; ts:run: string; ts:watch: string }; types: string; typescript: { definition: string }; version: string }> = ...

Methods

  • basicConnectStrategy(apiKey: undefined | string, apiSecret: undefined | string): default
  • getAPIKey(): undefined | string
  • getAPISecret(): undefined | string
  • getAPIToken(): undefined | string
  • getConfig(): { host: string; output: ResponseType; version: string }
  • Returns { host: string; output: ResponseType; version: string }

    • host: string
    • output: ResponseType
    • version: string
  • getPackageVersion(): string
  • tokenConnectStrategy(apiToken: undefined | string): default

Legend

  • Namespace
  • Function
  • Type alias
  • Class
  • Constructor
  • Method
  • Interface
  • Interface with type parameter
  • Private property
  • Private method
  • Static property
  • Static method
  • Enumeration

Settings

Theme

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/classes/index.default.html b/docs/classes/index.default.html index ddbf086..6d980c4 100644 --- a/docs/classes/index.default.html +++ b/docs/classes/index.default.html @@ -1 +1 @@ -default | node-mailjet
Options
All
  • Public
  • Public/Protected
  • All
Menu

Hierarchy

Index

Constructors

Properties

Client: typeof default = Client
HttpMethods: typeof default = HttpMethods
Request: typeof default = Request
config: Readonly<RequestConfig> = ...
packageJSON: Readonly<{ author: string; browser: string; bugs: { url: string }; contributors: string[]; dependencies: { axios: string; json-bigint: string; url-join: string }; description: string; devDependencies: { @babel/core: string; @babel/preset-env: string; @commitlint/cli: string; @commitlint/config-conventional: string; @types/chai: string; @types/json-bigint: string; @types/mocha: string; @types/node: string; @types/qs: string; @types/superagent: string; @types/url-join: string; @typescript-eslint/eslint-plugin: string; @typescript-eslint/parser: string; babel-loader: string; chai: string; eslint: string; eslint-config-airbnb-base: string; eslint-import-resolver-typescript: string; eslint-plugin-import: string; eslint-plugin-tsdoc: string; husky: string; mocha: string; nock: string; nyc: string; qs: string; standard-version: string; terser-webpack-plugin: string; ts-loader: string; ts-node: string; ts-node-dev: string; ts-patch: string; tsconfig-paths: string; tsconfig-paths-webpack-plugin: string; typedoc: string; typescript: string; typescript-transform-paths: string; webpack: string; webpack-cli: string; webpack-merge: string }; directories: { docs: string; lib: string }; engines: { node: string; npm: string }; files: string[]; homepage: string; keywords: string[]; license: string; main: string; name: string; private: boolean; repository: { type: string; url: string }; scripts: { build: string; build:dev: string; build:prepublish: string; build:release: string; build:watch: string; cover: string; cover:expandable: string; cover:int: string; cover:unit: string; docs: string; init: string; lint: string; lint:errors: string; lint:fix: string; pkg:link: string; pkg:precommit: string; pkg:prepare: string; release: string; release:dry: string; release:major: string; release:minor: string; release:patch: string; release:quiet: string; test: string; test:int: string; test:unit: string; test:watch: string; ts:mocha: string; ts:patch: string; ts:run: string; ts:watch: string }; types: string; typescript: { definition: string }; version: string }> = ...

Methods

  • getAPIKey(): undefined | string
  • getAPISecret(): undefined | string
  • getAPIToken(): undefined | string
  • getConfig(): { host: string; output: ResponseType; version: string }
  • getPackageVersion(): string

Legend

  • Namespace
  • Function
  • Type alias
  • Interface
  • Interface with type parameter
  • Inherited constructor
  • Inherited method
  • Enumeration
  • Class
  • Static property

Settings

Theme

Generated using TypeDoc

\ No newline at end of file +default | node-mailjet
Options
All
  • Public
  • Public/Protected
  • All
Menu

Hierarchy

Index

Constructors

Properties

Client: typeof default = Client
HttpMethods: typeof default = HttpMethods
Request: typeof default = Request
config: Readonly<RequestConfig> = ...
packageJSON: Readonly<{ author: string; browser: string; bugs: { url: string }; contributors: string[]; dependencies: { axios: string; json-bigint: string; url-join: string }; description: string; devDependencies: { @babel/core: string; @babel/preset-env: string; @commitlint/cli: string; @commitlint/config-conventional: string; @types/chai: string; @types/json-bigint: string; @types/mocha: string; @types/node: string; @types/qs: string; @types/superagent: string; @types/url-join: string; @typescript-eslint/eslint-plugin: string; @typescript-eslint/parser: string; babel-loader: string; chai: string; eslint: string; eslint-config-airbnb-base: string; eslint-import-resolver-typescript: string; eslint-plugin-import: string; eslint-plugin-tsdoc: string; husky: string; mocha: string; nock: string; nyc: string; qs: string; standard-version: string; terser-webpack-plugin: string; ts-loader: string; ts-node: string; ts-node-dev: string; ts-patch: string; tsconfig-paths: string; tsconfig-paths-webpack-plugin: string; typedoc: string; typescript: string; typescript-transform-paths: string; webpack: string; webpack-cli: string; webpack-merge: string }; directories: { docs: string; lib: string }; engines: { node: string; npm: string }; files: string[]; homepage: string; keywords: string[]; license: string; main: string; name: string; private: boolean; repository: { type: string; url: string }; scripts: { build: string; build:dev: string; build:prepublish: string; build:release: string; build:watch: string; cover: string; cover:expandable: string; cover:int: string; cover:unit: string; docs: string; init: string; lint: string; lint:errors: string; lint:fix: string; pkg:link: string; pkg:precommit: string; pkg:prepare: string; release: string; release:dry: string; release:major: string; release:minor: string; release:patch: string; release:quiet: string; test: string; test:int: string; test:unit: string; test:watch: string; ts:mocha: string; ts:patch: string; ts:run: string; ts:watch: string }; types: string; typescript: { definition: string }; version: string }> = ...

Methods

  • getAPIKey(): undefined | string
  • getAPISecret(): undefined | string
  • getAPIToken(): undefined | string
  • getConfig(): { host: string; output: ResponseType; version: string }
  • getPackageVersion(): string

Legend

  • Namespace
  • Function
  • Type alias
  • Interface
  • Interface with type parameter
  • Inherited constructor
  • Inherited method
  • Enumeration
  • Class
  • Static property

Settings

Theme

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/classes/request.default.html b/docs/classes/request.default.html index bfab562..67f93ae 100644 --- a/docs/classes/request.default.html +++ b/docs/classes/request.default.html @@ -1 +1 @@ -default | node-mailjet
Options
All
  • Public
  • Public/Protected
  • All
Menu

Hierarchy

  • default

Index

Constructors

Properties

actionPath: null | string
client: default
config: Partial<RequestConfig>
method: default
resource: string
subPath: SubPath
url: string
protocol: "https://" = ...

Methods

  • buildFullUrl(): string
  • getContentType(url: string): "text/plain" | "application/json"
  • getCredentials(): { apiKey: undefined | string; apiSecret: undefined | string; apiToken: undefined | string }
  • Returns { apiKey: undefined | string; apiSecret: undefined | string; apiToken: undefined | string }

    • apiKey: undefined | string
    • apiSecret: undefined | string
    • apiToken: undefined | string
  • getUserAgent(): string
  • id(value: string | number): default
  • setBaseURL(baseUrl: string): default
  • isBrowser(): boolean
  • parseToJSONb(text: string): any

Legend

  • Namespace
  • Function
  • Type alias
  • Class
  • Constructor
  • Method
  • Interface
  • Interface with type parameter
  • Private property
  • Private method
  • Static property
  • Static method
  • Enumeration

Settings

Theme

Generated using TypeDoc

\ No newline at end of file +default | node-mailjet
Options
All
  • Public
  • Public/Protected
  • All
Menu

Hierarchy

  • default

Index

Constructors

Properties

actionPath: null | string
client: default
config: Partial<RequestConfig>
method: default
resource: string
subPath: SubPath
url: string
protocol: "https://" = ...

Methods

  • buildFullUrl(): string
  • getContentType(url: string): "text/plain" | "application/json"
  • getCredentials(): { apiKey: undefined | string; apiSecret: undefined | string; apiToken: undefined | string }
  • Returns { apiKey: undefined | string; apiSecret: undefined | string; apiToken: undefined | string }

    • apiKey: undefined | string
    • apiSecret: undefined | string
    • apiToken: undefined | string
  • getUserAgent(): string
  • id(value: string | number): default
  • setBaseURL(baseUrl: string): default
  • isBrowser(): boolean
  • parseToJSONb(text: string): any

Legend

  • Namespace
  • Function
  • Type alias
  • Class
  • Constructor
  • Method
  • Interface
  • Interface with type parameter
  • Private property
  • Private method
  • Static property
  • Static method
  • Enumeration

Settings

Theme

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/enums/request_HttpMethods.default.html b/docs/enums/request_HttpMethods.default.html index 4b2f389..6024bb7 100644 --- a/docs/enums/request_HttpMethods.default.html +++ b/docs/enums/request_HttpMethods.default.html @@ -1 +1 @@ -default | node-mailjet
Options
All
  • Public
  • Public/Protected
  • All
Menu

Legend

  • Namespace
  • Function
  • Type alias
  • Interface
  • Interface with type parameter
  • Enumeration
  • Class

Settings

Theme

Generated using TypeDoc

\ No newline at end of file +default | node-mailjet
Options
All
  • Public
  • Public/Protected
  • All
Menu

Legend

  • Namespace
  • Function
  • Type alias
  • Interface
  • Interface with type parameter
  • Enumeration
  • Class

Settings

Theme

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/enums/types_api_Campaign.DraftCampaign.CampaignDraftSendingStatus.html b/docs/enums/types_api_Campaign.DraftCampaign.CampaignDraftSendingStatus.html index 3d177c1..a1cc9c0 100644 --- a/docs/enums/types_api_Campaign.DraftCampaign.CampaignDraftSendingStatus.html +++ b/docs/enums/types_api_Campaign.DraftCampaign.CampaignDraftSendingStatus.html @@ -1 +1 @@ -CampaignDraftSendingStatus | node-mailjet
Options
All
  • Public
  • Public/Protected
  • All
Menu

Legend

  • Namespace
  • Function
  • Type alias
  • Interface
  • Interface with type parameter
  • Enumeration
  • Class

Settings

Theme

Generated using TypeDoc

\ No newline at end of file +CampaignDraftSendingStatus | node-mailjet
Options
All
  • Public
  • Public/Protected
  • All
Menu

Legend

  • Namespace
  • Function
  • Type alias
  • Interface
  • Interface with type parameter
  • Enumeration
  • Class

Settings

Theme

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/enums/types_api_Campaign.DraftCampaign.CampaignDraftStatus.html b/docs/enums/types_api_Campaign.DraftCampaign.CampaignDraftStatus.html index e232bc5..8d5ff91 100644 --- a/docs/enums/types_api_Campaign.DraftCampaign.CampaignDraftStatus.html +++ b/docs/enums/types_api_Campaign.DraftCampaign.CampaignDraftStatus.html @@ -1 +1 @@ -CampaignDraftStatus | node-mailjet
Options
All
  • Public
  • Public/Protected
  • All
Menu

Legend

  • Namespace
  • Function
  • Type alias
  • Interface
  • Interface with type parameter
  • Enumeration
  • Class

Settings

Theme

Generated using TypeDoc

\ No newline at end of file +CampaignDraftStatus | node-mailjet
Options
All
  • Public
  • Public/Protected
  • All
Menu

Legend

  • Namespace
  • Function
  • Type alias
  • Interface
  • Interface with type parameter
  • Enumeration
  • Class

Settings

Theme

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/enums/types_api_Campaign.DraftCampaign.EditMode.html b/docs/enums/types_api_Campaign.DraftCampaign.EditMode.html index 84b15a9..0e5fcf0 100644 --- a/docs/enums/types_api_Campaign.DraftCampaign.EditMode.html +++ b/docs/enums/types_api_Campaign.DraftCampaign.EditMode.html @@ -1 +1 @@ -EditMode | node-mailjet
Options
All
  • Public
  • Public/Protected
  • All
Menu

Legend

  • Namespace
  • Function
  • Type alias
  • Interface
  • Interface with type parameter
  • Enumeration
  • Class

Settings

Theme

Generated using TypeDoc

\ No newline at end of file +EditMode | node-mailjet
Options
All
  • Public
  • Public/Protected
  • All
Menu

Legend

  • Namespace
  • Function
  • Type alias
  • Interface
  • Interface with type parameter
  • Enumeration
  • Class

Settings

Theme

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/enums/types_api_Campaign.SentCampaign.CampaignType.html b/docs/enums/types_api_Campaign.SentCampaign.CampaignType.html index 5d8de04..70f73ac 100644 --- a/docs/enums/types_api_Campaign.SentCampaign.CampaignType.html +++ b/docs/enums/types_api_Campaign.SentCampaign.CampaignType.html @@ -1 +1 @@ -CampaignType | node-mailjet
Options
All
  • Public
  • Public/Protected
  • All
Menu

Legend

  • Namespace
  • Function
  • Type alias
  • Interface
  • Interface with type parameter
  • Enumeration
  • Class

Settings

Theme

Generated using TypeDoc

\ No newline at end of file +CampaignType | node-mailjet
Options
All
  • Public
  • Public/Protected
  • All
Menu

Legend

  • Namespace
  • Function
  • Type alias
  • Interface
  • Interface with type parameter
  • Enumeration
  • Class

Settings

Theme

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/enums/types_api_Common.Common.Period.html b/docs/enums/types_api_Common.Common.Period.html index 19c81bd..14dcc65 100644 --- a/docs/enums/types_api_Common.Common.Period.html +++ b/docs/enums/types_api_Common.Common.Period.html @@ -1 +1 @@ -Period | node-mailjet
Options
All
  • Public
  • Public/Protected
  • All
Menu

Legend

  • Namespace
  • Function
  • Type alias
  • Interface
  • Interface with type parameter
  • Enumeration
  • Class

Settings

Theme

Generated using TypeDoc

\ No newline at end of file +Period | node-mailjet
Options
All
  • Public
  • Public/Protected
  • All
Menu

Legend

  • Namespace
  • Function
  • Type alias
  • Interface
  • Interface with type parameter
  • Enumeration
  • Class

Settings

Theme

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/enums/types_api_Contact.BulkContactManagement.CSVImportStatus.html b/docs/enums/types_api_Contact.BulkContactManagement.CSVImportStatus.html index 1807630..1704f03 100644 --- a/docs/enums/types_api_Contact.BulkContactManagement.CSVImportStatus.html +++ b/docs/enums/types_api_Contact.BulkContactManagement.CSVImportStatus.html @@ -1 +1 @@ -CSVImportStatus | node-mailjet
Options
All
  • Public
  • Public/Protected
  • All
Menu

Legend

  • Namespace
  • Function
  • Type alias
  • Interface
  • Interface with type parameter
  • Enumeration
  • Class

Settings

Theme

Generated using TypeDoc

\ No newline at end of file +CSVImportStatus | node-mailjet
Options
All
  • Public
  • Public/Protected
  • All
Menu

Legend

  • Namespace
  • Function
  • Type alias
  • Interface
  • Interface with type parameter
  • Enumeration
  • Class

Settings

Theme

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/enums/types_api_Contact.BulkContactManagement.ImportCSVMethod.html b/docs/enums/types_api_Contact.BulkContactManagement.ImportCSVMethod.html index 68a8f76..b6ca8f4 100644 --- a/docs/enums/types_api_Contact.BulkContactManagement.ImportCSVMethod.html +++ b/docs/enums/types_api_Contact.BulkContactManagement.ImportCSVMethod.html @@ -1 +1 @@ -ImportCSVMethod | node-mailjet
Options
All
  • Public
  • Public/Protected
  • All
Menu

Legend

  • Namespace
  • Function
  • Type alias
  • Interface
  • Interface with type parameter
  • Enumeration
  • Class

Settings

Theme

Generated using TypeDoc

\ No newline at end of file +ImportCSVMethod | node-mailjet
Options
All
  • Public
  • Public/Protected
  • All
Menu

Legend

  • Namespace
  • Function
  • Type alias
  • Interface
  • Interface with type parameter
  • Enumeration
  • Class

Settings

Theme

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/enums/types_api_Contact.BulkContactManagement.ImportListAction.html b/docs/enums/types_api_Contact.BulkContactManagement.ImportListAction.html index 30e66dc..1bf4602 100644 --- a/docs/enums/types_api_Contact.BulkContactManagement.ImportListAction.html +++ b/docs/enums/types_api_Contact.BulkContactManagement.ImportListAction.html @@ -1 +1 @@ -ImportListAction | node-mailjet
Options
All
  • Public
  • Public/Protected
  • All
Menu

Legend

  • Namespace
  • Function
  • Type alias
  • Interface
  • Interface with type parameter
  • Enumeration
  • Class

Settings

Theme

Generated using TypeDoc

\ No newline at end of file +ImportListAction | node-mailjet
Options
All
  • Public
  • Public/Protected
  • All
Menu

Legend

  • Namespace
  • Function
  • Type alias
  • Interface
  • Interface with type parameter
  • Enumeration
  • Class

Settings

Theme

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/enums/types_api_Contact.BulkContactManagement.JobStatus.html b/docs/enums/types_api_Contact.BulkContactManagement.JobStatus.html index eecc61c..47656ae 100644 --- a/docs/enums/types_api_Contact.BulkContactManagement.JobStatus.html +++ b/docs/enums/types_api_Contact.BulkContactManagement.JobStatus.html @@ -1 +1 @@ -JobStatus | node-mailjet
Options
All
  • Public
  • Public/Protected
  • All
Menu

Legend

  • Namespace
  • Function
  • Type alias
  • Interface
  • Interface with type parameter
  • Enumeration
  • Class

Settings

Theme

Generated using TypeDoc

\ No newline at end of file +JobStatus | node-mailjet
Options
All
  • Public
  • Public/Protected
  • All
Menu

Legend

  • Namespace
  • Function
  • Type alias
  • Interface
  • Interface with type parameter
  • Enumeration
  • Class

Settings

Theme

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/enums/types_api_Contact.BulkContactManagement.ManageContactsAction.html b/docs/enums/types_api_Contact.BulkContactManagement.ManageContactsAction.html index 13e1b30..def1c44 100644 --- a/docs/enums/types_api_Contact.BulkContactManagement.ManageContactsAction.html +++ b/docs/enums/types_api_Contact.BulkContactManagement.ManageContactsAction.html @@ -1 +1 @@ -ManageContactsAction | node-mailjet
Options
All
  • Public
  • Public/Protected
  • All
Menu

Legend

  • Namespace
  • Function
  • Type alias
  • Interface
  • Interface with type parameter
  • Enumeration
  • Class

Settings

Theme

Generated using TypeDoc

\ No newline at end of file +ManageContactsAction | node-mailjet
Options
All
  • Public
  • Public/Protected
  • All
Menu

Legend

  • Namespace
  • Function
  • Type alias
  • Interface
  • Interface with type parameter
  • Enumeration
  • Class

Settings

Theme

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/enums/types_api_Contact.ContactProperties.DataType.html b/docs/enums/types_api_Contact.ContactProperties.DataType.html index 27fe6f1..ea45fa7 100644 --- a/docs/enums/types_api_Contact.ContactProperties.DataType.html +++ b/docs/enums/types_api_Contact.ContactProperties.DataType.html @@ -1 +1 @@ -DataType | node-mailjet
Options
All
  • Public
  • Public/Protected
  • All
Menu

Legend

  • Namespace
  • Function
  • Type alias
  • Interface
  • Interface with type parameter
  • Enumeration
  • Class

Settings

Theme

Generated using TypeDoc

\ No newline at end of file +DataType | node-mailjet
Options
All
  • Public
  • Public/Protected
  • All
Menu

Legend

  • Namespace
  • Function
  • Type alias
  • Interface
  • Interface with type parameter
  • Enumeration
  • Class

Settings

Theme

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/enums/types_api_Contact.ContactProperties.NameSpace.html b/docs/enums/types_api_Contact.ContactProperties.NameSpace.html index c9776ee..c5ac616 100644 --- a/docs/enums/types_api_Contact.ContactProperties.NameSpace.html +++ b/docs/enums/types_api_Contact.ContactProperties.NameSpace.html @@ -1 +1 @@ -NameSpace | node-mailjet
Options
All
  • Public
  • Public/Protected
  • All
Menu

Legend

  • Namespace
  • Function
  • Type alias
  • Interface
  • Interface with type parameter
  • Enumeration
  • Class

Settings

Theme

Generated using TypeDoc

\ No newline at end of file +NameSpace | node-mailjet
Options
All
  • Public
  • Public/Protected
  • All
Menu

Legend

  • Namespace
  • Function
  • Type alias
  • Interface
  • Interface with type parameter
  • Enumeration
  • Class

Settings

Theme

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/enums/types_api_Message.Message.CurrentMessageStatus.html b/docs/enums/types_api_Message.Message.CurrentMessageStatus.html index cc5ce44..98cc6ab 100644 --- a/docs/enums/types_api_Message.Message.CurrentMessageStatus.html +++ b/docs/enums/types_api_Message.Message.CurrentMessageStatus.html @@ -1 +1 @@ -CurrentMessageStatus | node-mailjet
Options
All
  • Public
  • Public/Protected
  • All
Menu

Legend

  • Namespace
  • Function
  • Type alias
  • Interface
  • Interface with type parameter
  • Enumeration
  • Class

Settings

Theme

Generated using TypeDoc

\ No newline at end of file +CurrentMessageStatus | node-mailjet
Options
All
  • Public
  • Public/Protected
  • All
Menu

Legend

  • Namespace
  • Function
  • Type alias
  • Interface
  • Interface with type parameter
  • Enumeration
  • Class

Settings

Theme

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/enums/types_api_Message.Message.EventType.html b/docs/enums/types_api_Message.Message.EventType.html index 163a35b..87342a9 100644 --- a/docs/enums/types_api_Message.Message.EventType.html +++ b/docs/enums/types_api_Message.Message.EventType.html @@ -1 +1 @@ -EventType | node-mailjet
Options
All
  • Public
  • Public/Protected
  • All
Menu

Legend

  • Namespace
  • Function
  • Type alias
  • Interface
  • Interface with type parameter
  • Enumeration
  • Class

Settings

Theme

Generated using TypeDoc

\ No newline at end of file +EventType | node-mailjet
Options
All
  • Public
  • Public/Protected
  • All
Menu

Legend

  • Namespace
  • Function
  • Type alias
  • Interface
  • Interface with type parameter
  • Enumeration
  • Class

Settings

Theme

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/enums/types_api_Message.Message.FromType.html b/docs/enums/types_api_Message.Message.FromType.html index b3bcdee..18deda5 100644 --- a/docs/enums/types_api_Message.Message.FromType.html +++ b/docs/enums/types_api_Message.Message.FromType.html @@ -1 +1 @@ -FromType | node-mailjet
Options
All
  • Public
  • Public/Protected
  • All
Menu

Legend

  • Namespace
  • Function
  • Type alias
  • Interface
  • Interface with type parameter
  • Enumeration
  • Class

Settings

Theme

Generated using TypeDoc

\ No newline at end of file +FromType | node-mailjet
Options
All
  • Public
  • Public/Protected
  • All
Menu

Legend

  • Namespace
  • Function
  • Type alias
  • Interface
  • Interface with type parameter
  • Enumeration
  • Class

Settings

Theme

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/enums/types_api_Message.Message.MessageState.html b/docs/enums/types_api_Message.Message.MessageState.html index 15028e8..b4904c9 100644 --- a/docs/enums/types_api_Message.Message.MessageState.html +++ b/docs/enums/types_api_Message.Message.MessageState.html @@ -1 +1 @@ -MessageState | node-mailjet
Options
All
  • Public
  • Public/Protected
  • All
Menu

Index

Enumeration members

BadOrEmptyTemplate = 17
BlackListed = 20
ConnectionIssue = 12
ContentBlocked = 8
DuplicateInCampaign = 15
ErrorInTemplateLanguage = 18
GreyListed = 13
InvalidDomain = 4
MailboxInactive = 2
NoMailHost = 5
PolicyIssue = 9
PreBlocked = 14
ProtocolIssue = 11
QuotaExceeded = 3
RelayOrAccessDenied = 6
SenderBlocked = 7
SpamPreBlocked = 16
SpamReporter = 21
SystemIssue = 10
TypoFix = 19
UserUnknown = 1

Legend

  • Namespace
  • Function
  • Type alias
  • Interface
  • Interface with type parameter
  • Enumeration
  • Class

Settings

Theme

Generated using TypeDoc

\ No newline at end of file +MessageState | node-mailjet
Options
All
  • Public
  • Public/Protected
  • All
Menu

Index

Enumeration members

BadOrEmptyTemplate = 17
BlackListed = 20
ConnectionIssue = 12
ContentBlocked = 8
DuplicateInCampaign = 15
ErrorInTemplateLanguage = 18
GreyListed = 13
InvalidDomain = 4
MailboxInactive = 2
NoMailHost = 5
PolicyIssue = 9
PreBlocked = 14
ProtocolIssue = 11
QuotaExceeded = 3
RelayOrAccessDenied = 6
SenderBlocked = 7
SpamPreBlocked = 16
SpamReporter = 21
SystemIssue = 10
TypoFix = 19
UserUnknown = 1

Legend

  • Namespace
  • Function
  • Type alias
  • Interface
  • Interface with type parameter
  • Enumeration
  • Class

Settings

Theme

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/enums/types_api_Message.Message.MessageStatus.html b/docs/enums/types_api_Message.Message.MessageStatus.html index b273212..7c7baea 100644 --- a/docs/enums/types_api_Message.Message.MessageStatus.html +++ b/docs/enums/types_api_Message.Message.MessageStatus.html @@ -1 +1 @@ -MessageStatus | node-mailjet
Options
All
  • Public
  • Public/Protected
  • All
Menu

Legend

  • Namespace
  • Function
  • Type alias
  • Interface
  • Interface with type parameter
  • Enumeration
  • Class

Settings

Theme

Generated using TypeDoc

\ No newline at end of file +MessageStatus | node-mailjet
Options
All
  • Public
  • Public/Protected
  • All
Menu

Legend

  • Namespace
  • Function
  • Type alias
  • Interface
  • Interface with type parameter
  • Enumeration
  • Class

Settings

Theme

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/enums/types_api_Segmentation.Segmentation.SegmentStatus.html b/docs/enums/types_api_Segmentation.Segmentation.SegmentStatus.html index 06f2600..108af95 100644 --- a/docs/enums/types_api_Segmentation.Segmentation.SegmentStatus.html +++ b/docs/enums/types_api_Segmentation.Segmentation.SegmentStatus.html @@ -1 +1 @@ -SegmentStatus | node-mailjet
Options
All
  • Public
  • Public/Protected
  • All
Menu

Legend

  • Namespace
  • Function
  • Type alias
  • Interface
  • Interface with type parameter
  • Enumeration
  • Class

Settings

Theme

Generated using TypeDoc

\ No newline at end of file +SegmentStatus | node-mailjet
Options
All
  • Public
  • Public/Protected
  • All
Menu

Legend

  • Namespace
  • Function
  • Type alias
  • Interface
  • Interface with type parameter
  • Enumeration
  • Class

Settings

Theme

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/enums/types_api_SendEmail.SendEmailV3_1.ResponseStatus.html b/docs/enums/types_api_SendEmail.SendEmailV3_1.ResponseStatus.html index 766504f..5394870 100644 --- a/docs/enums/types_api_SendEmail.SendEmailV3_1.ResponseStatus.html +++ b/docs/enums/types_api_SendEmail.SendEmailV3_1.ResponseStatus.html @@ -1 +1 @@ -ResponseStatus | node-mailjet
Options
All
  • Public
  • Public/Protected
  • All
Menu

Legend

  • Namespace
  • Function
  • Type alias
  • Interface
  • Interface with type parameter
  • Enumeration
  • Class

Settings

Theme

Generated using TypeDoc

\ No newline at end of file +ResponseStatus | node-mailjet
Options
All
  • Public
  • Public/Protected
  • All
Menu

Legend

  • Namespace
  • Function
  • Type alias
  • Interface
  • Interface with type parameter
  • Enumeration
  • Class

Settings

Theme

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/enums/types_api_SendEmail.SendEmailV3_1.TrackClicks.html b/docs/enums/types_api_SendEmail.SendEmailV3_1.TrackClicks.html index 85c140e..34a5b71 100644 --- a/docs/enums/types_api_SendEmail.SendEmailV3_1.TrackClicks.html +++ b/docs/enums/types_api_SendEmail.SendEmailV3_1.TrackClicks.html @@ -1 +1 @@ -TrackClicks | node-mailjet
Options
All
  • Public
  • Public/Protected
  • All
Menu

Legend

  • Namespace
  • Function
  • Type alias
  • Interface
  • Interface with type parameter
  • Enumeration
  • Class

Settings

Theme

Generated using TypeDoc

\ No newline at end of file +TrackClicks | node-mailjet
Options
All
  • Public
  • Public/Protected
  • All
Menu

Legend

  • Namespace
  • Function
  • Type alias
  • Interface
  • Interface with type parameter
  • Enumeration
  • Class

Settings

Theme

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/enums/types_api_SendEmail.SendEmailV3_1.TrackOpens.html b/docs/enums/types_api_SendEmail.SendEmailV3_1.TrackOpens.html index e02fa85..d06ec79 100644 --- a/docs/enums/types_api_SendEmail.SendEmailV3_1.TrackOpens.html +++ b/docs/enums/types_api_SendEmail.SendEmailV3_1.TrackOpens.html @@ -1 +1 @@ -TrackOpens | node-mailjet
Options
All
  • Public
  • Public/Protected
  • All
Menu

Legend

  • Namespace
  • Function
  • Type alias
  • Interface
  • Interface with type parameter
  • Enumeration
  • Class

Settings

Theme

Generated using TypeDoc

\ No newline at end of file +TrackOpens | node-mailjet
Options
All
  • Public
  • Public/Protected
  • All
Menu

Legend

  • Namespace
  • Function
  • Type alias
  • Interface
  • Interface with type parameter
  • Enumeration
  • Class

Settings

Theme

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/enums/types_api_SenderAddressAndDomain.DNS.DKIMConfigurationCheckStatus.html b/docs/enums/types_api_SenderAddressAndDomain.DNS.DKIMConfigurationCheckStatus.html index 1092bac..4aa717b 100644 --- a/docs/enums/types_api_SenderAddressAndDomain.DNS.DKIMConfigurationCheckStatus.html +++ b/docs/enums/types_api_SenderAddressAndDomain.DNS.DKIMConfigurationCheckStatus.html @@ -1 +1 @@ -DKIMConfigurationCheckStatus | node-mailjet
Options
All
  • Public
  • Public/Protected
  • All
Menu

Legend

  • Namespace
  • Function
  • Type alias
  • Interface
  • Interface with type parameter
  • Enumeration
  • Class

Settings

Theme

Generated using TypeDoc

\ No newline at end of file +DKIMConfigurationCheckStatus | node-mailjet
Options
All
  • Public
  • Public/Protected
  • All
Menu

Legend

  • Namespace
  • Function
  • Type alias
  • Interface
  • Interface with type parameter
  • Enumeration
  • Class

Settings

Theme

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/enums/types_api_SenderAddressAndDomain.DNS.DKIMConfigurationStatus.html b/docs/enums/types_api_SenderAddressAndDomain.DNS.DKIMConfigurationStatus.html index 6597cfe..0b54c06 100644 --- a/docs/enums/types_api_SenderAddressAndDomain.DNS.DKIMConfigurationStatus.html +++ b/docs/enums/types_api_SenderAddressAndDomain.DNS.DKIMConfigurationStatus.html @@ -1 +1 @@ -DKIMConfigurationStatus | node-mailjet
Options
All
  • Public
  • Public/Protected
  • All
Menu

Legend

  • Namespace
  • Function
  • Type alias
  • Interface
  • Interface with type parameter
  • Enumeration
  • Class

Settings

Theme

Generated using TypeDoc

\ No newline at end of file +DKIMConfigurationStatus | node-mailjet
Options
All
  • Public
  • Public/Protected
  • All
Menu

Legend

  • Namespace
  • Function
  • Type alias
  • Interface
  • Interface with type parameter
  • Enumeration
  • Class

Settings

Theme

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/enums/types_api_SenderAddressAndDomain.DNS.SPFConfigurationCheckStatus.html b/docs/enums/types_api_SenderAddressAndDomain.DNS.SPFConfigurationCheckStatus.html index ef9226d..09d0310 100644 --- a/docs/enums/types_api_SenderAddressAndDomain.DNS.SPFConfigurationCheckStatus.html +++ b/docs/enums/types_api_SenderAddressAndDomain.DNS.SPFConfigurationCheckStatus.html @@ -1 +1 @@ -SPFConfigurationCheckStatus | node-mailjet
Options
All
  • Public
  • Public/Protected
  • All
Menu

Legend

  • Namespace
  • Function
  • Type alias
  • Interface
  • Interface with type parameter
  • Enumeration
  • Class

Settings

Theme

Generated using TypeDoc

\ No newline at end of file +SPFConfigurationCheckStatus | node-mailjet
Options
All
  • Public
  • Public/Protected
  • All
Menu

Legend

  • Namespace
  • Function
  • Type alias
  • Interface
  • Interface with type parameter
  • Enumeration
  • Class

Settings

Theme

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/enums/types_api_SenderAddressAndDomain.DNS.SPFConfigurationStatus.html b/docs/enums/types_api_SenderAddressAndDomain.DNS.SPFConfigurationStatus.html index c4accf4..70ab073 100644 --- a/docs/enums/types_api_SenderAddressAndDomain.DNS.SPFConfigurationStatus.html +++ b/docs/enums/types_api_SenderAddressAndDomain.DNS.SPFConfigurationStatus.html @@ -1 +1 @@ -SPFConfigurationStatus | node-mailjet
Options
All
  • Public
  • Public/Protected
  • All
Menu

Legend

  • Namespace
  • Function
  • Type alias
  • Interface
  • Interface with type parameter
  • Enumeration
  • Class

Settings

Theme

Generated using TypeDoc

\ No newline at end of file +SPFConfigurationStatus | node-mailjet
Options
All
  • Public
  • Public/Protected
  • All
Menu

Legend

  • Namespace
  • Function
  • Type alias
  • Interface
  • Interface with type parameter
  • Enumeration
  • Class

Settings

Theme

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/enums/types_api_SenderAddressAndDomain.Sender.EmailType.html b/docs/enums/types_api_SenderAddressAndDomain.Sender.EmailType.html index 400bc12..8e2368b 100644 --- a/docs/enums/types_api_SenderAddressAndDomain.Sender.EmailType.html +++ b/docs/enums/types_api_SenderAddressAndDomain.Sender.EmailType.html @@ -1 +1 @@ -EmailType | node-mailjet
Options
All
  • Public
  • Public/Protected
  • All
Menu

Legend

  • Namespace
  • Function
  • Type alias
  • Interface
  • Interface with type parameter
  • Enumeration
  • Class

Settings

Theme

Generated using TypeDoc

\ No newline at end of file +EmailType | node-mailjet
Options
All
  • Public
  • Public/Protected
  • All
Menu

Legend

  • Namespace
  • Function
  • Type alias
  • Interface
  • Interface with type parameter
  • Enumeration
  • Class

Settings

Theme

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/enums/types_api_SenderAddressAndDomain.Sender.SenderStatus.html b/docs/enums/types_api_SenderAddressAndDomain.Sender.SenderStatus.html index f428b67..b3551ac 100644 --- a/docs/enums/types_api_SenderAddressAndDomain.Sender.SenderStatus.html +++ b/docs/enums/types_api_SenderAddressAndDomain.Sender.SenderStatus.html @@ -1 +1 @@ -SenderStatus | node-mailjet
Options
All
  • Public
  • Public/Protected
  • All
Menu

Legend

  • Namespace
  • Function
  • Type alias
  • Interface
  • Interface with type parameter
  • Enumeration
  • Class

Settings

Theme

Generated using TypeDoc

\ No newline at end of file +SenderStatus | node-mailjet
Options
All
  • Public
  • Public/Protected
  • All
Menu

Legend

  • Namespace
  • Function
  • Type alias
  • Interface
  • Interface with type parameter
  • Enumeration
  • Class

Settings

Theme

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/enums/types_api_Setting.APIKeyConfiguration.RunLevel.html b/docs/enums/types_api_Setting.APIKeyConfiguration.RunLevel.html index 319456a..9d058ef 100644 --- a/docs/enums/types_api_Setting.APIKeyConfiguration.RunLevel.html +++ b/docs/enums/types_api_Setting.APIKeyConfiguration.RunLevel.html @@ -1 +1 @@ -RunLevel | node-mailjet
Options
All
  • Public
  • Public/Protected
  • All
Menu

Legend

  • Namespace
  • Function
  • Type alias
  • Interface
  • Interface with type parameter
  • Enumeration
  • Class

Settings

Theme

Generated using TypeDoc

\ No newline at end of file +RunLevel | node-mailjet
Options
All
  • Public
  • Public/Protected
  • All
Menu

Legend

  • Namespace
  • Function
  • Type alias
  • Interface
  • Interface with type parameter
  • Enumeration
  • Class

Settings

Theme

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/enums/types_api_Statistic.Statistic.CampaignOverViewEditMode.html b/docs/enums/types_api_Statistic.Statistic.CampaignOverViewEditMode.html index 4969826..47968d1 100644 --- a/docs/enums/types_api_Statistic.Statistic.CampaignOverViewEditMode.html +++ b/docs/enums/types_api_Statistic.Statistic.CampaignOverViewEditMode.html @@ -1 +1 @@ -CampaignOverviewEditMode | node-mailjet
Options
All
  • Public
  • Public/Protected
  • All
Menu

Legend

  • Namespace
  • Function
  • Type alias
  • Interface
  • Interface with type parameter
  • Enumeration
  • Class

Settings

Theme

Generated using TypeDoc

\ No newline at end of file +CampaignOverviewEditMode | node-mailjet
Options
All
  • Public
  • Public/Protected
  • All
Menu

Legend

  • Namespace
  • Function
  • Type alias
  • Interface
  • Interface with type parameter
  • Enumeration
  • Class

Settings

Theme

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/enums/types_api_Statistic.Statistic.CampaignOverViewEditType.html b/docs/enums/types_api_Statistic.Statistic.CampaignOverViewEditType.html index 8b684df..b54e00b 100644 --- a/docs/enums/types_api_Statistic.Statistic.CampaignOverViewEditType.html +++ b/docs/enums/types_api_Statistic.Statistic.CampaignOverViewEditType.html @@ -1 +1 @@ -CampaignOverviewEditType | node-mailjet
Options
All
  • Public
  • Public/Protected
  • All
Menu

Legend

  • Namespace
  • Function
  • Type alias
  • Interface
  • Interface with type parameter
  • Enumeration
  • Class

Settings

Theme

Generated using TypeDoc

\ No newline at end of file +CampaignOverviewEditType | node-mailjet
Options
All
  • Public
  • Public/Protected
  • All
Menu

Legend

  • Namespace
  • Function
  • Type alias
  • Interface
  • Interface with type parameter
  • Enumeration
  • Class

Settings

Theme

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/enums/types_api_Statistic.Statistic.CampaignOverViewIDType.html b/docs/enums/types_api_Statistic.Statistic.CampaignOverViewIDType.html index 74fc229..4a2484f 100644 --- a/docs/enums/types_api_Statistic.Statistic.CampaignOverViewIDType.html +++ b/docs/enums/types_api_Statistic.Statistic.CampaignOverViewIDType.html @@ -1 +1 @@ -CampaignOverviewIDType | node-mailjet
Options
All
  • Public
  • Public/Protected
  • All
Menu

Legend

  • Namespace
  • Function
  • Type alias
  • Interface
  • Interface with type parameter
  • Enumeration
  • Class

Settings

Theme

Generated using TypeDoc

\ No newline at end of file +CampaignOverviewIDType | node-mailjet
Options
All
  • Public
  • Public/Protected
  • All
Menu

Legend

  • Namespace
  • Function
  • Type alias
  • Interface
  • Interface with type parameter
  • Enumeration
  • Class

Settings

Theme

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/enums/types_api_Statistic.Statistic.CampaignOverviewEditMode.html b/docs/enums/types_api_Statistic.Statistic.CampaignOverviewEditMode.html new file mode 100644 index 0000000..47968d1 --- /dev/null +++ b/docs/enums/types_api_Statistic.Statistic.CampaignOverviewEditMode.html @@ -0,0 +1 @@ +CampaignOverviewEditMode | node-mailjet
Options
All
  • Public
  • Public/Protected
  • All
Menu

Legend

  • Namespace
  • Function
  • Type alias
  • Interface
  • Interface with type parameter
  • Enumeration
  • Class

Settings

Theme

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/enums/types_api_Statistic.Statistic.CampaignOverviewEditType.html b/docs/enums/types_api_Statistic.Statistic.CampaignOverviewEditType.html new file mode 100644 index 0000000..b54e00b --- /dev/null +++ b/docs/enums/types_api_Statistic.Statistic.CampaignOverviewEditType.html @@ -0,0 +1 @@ +CampaignOverviewEditType | node-mailjet
Options
All
  • Public
  • Public/Protected
  • All
Menu

Legend

  • Namespace
  • Function
  • Type alias
  • Interface
  • Interface with type parameter
  • Enumeration
  • Class

Settings

Theme

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/enums/types_api_Statistic.Statistic.CampaignOverviewIDType.html b/docs/enums/types_api_Statistic.Statistic.CampaignOverviewIDType.html new file mode 100644 index 0000000..4a2484f --- /dev/null +++ b/docs/enums/types_api_Statistic.Statistic.CampaignOverviewIDType.html @@ -0,0 +1 @@ +CampaignOverviewIDType | node-mailjet
Options
All
  • Public
  • Public/Protected
  • All
Menu

Legend

  • Namespace
  • Function
  • Type alias
  • Interface
  • Interface with type parameter
  • Enumeration
  • Class

Settings

Theme

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/enums/types_api_Statistic.Statistic.CounterResolution.html b/docs/enums/types_api_Statistic.Statistic.CounterResolution.html index 1d29531..5ab4da6 100644 --- a/docs/enums/types_api_Statistic.Statistic.CounterResolution.html +++ b/docs/enums/types_api_Statistic.Statistic.CounterResolution.html @@ -1 +1 @@ -CounterResolution | node-mailjet
Options
All
  • Public
  • Public/Protected
  • All
Menu

Legend

  • Namespace
  • Function
  • Type alias
  • Interface
  • Interface with type parameter
  • Enumeration
  • Class

Settings

Theme

Generated using TypeDoc

\ No newline at end of file +CounterResolution | node-mailjet
Options
All
  • Public
  • Public/Protected
  • All
Menu

Legend

  • Namespace
  • Function
  • Type alias
  • Interface
  • Interface with type parameter
  • Enumeration
  • Class

Settings

Theme

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/enums/types_api_Statistic.Statistic.CounterSource.html b/docs/enums/types_api_Statistic.Statistic.CounterSource.html index 49a4fb5..ad93c10 100644 --- a/docs/enums/types_api_Statistic.Statistic.CounterSource.html +++ b/docs/enums/types_api_Statistic.Statistic.CounterSource.html @@ -1 +1 @@ -CounterSource | node-mailjet
Options
All
  • Public
  • Public/Protected
  • All
Menu

Legend

  • Namespace
  • Function
  • Type alias
  • Interface
  • Interface with type parameter
  • Enumeration
  • Class

Settings

Theme

Generated using TypeDoc

\ No newline at end of file +CounterSource | node-mailjet
Options
All
  • Public
  • Public/Protected
  • All
Menu

Legend

  • Namespace
  • Function
  • Type alias
  • Interface
  • Interface with type parameter
  • Enumeration
  • Class

Settings

Theme

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/enums/types_api_Statistic.Statistic.CounterTiming.html b/docs/enums/types_api_Statistic.Statistic.CounterTiming.html index 4f4a043..c5dfeb0 100644 --- a/docs/enums/types_api_Statistic.Statistic.CounterTiming.html +++ b/docs/enums/types_api_Statistic.Statistic.CounterTiming.html @@ -1 +1 @@ -CounterTiming | node-mailjet
Options
All
  • Public
  • Public/Protected
  • All
Menu

Legend

  • Namespace
  • Function
  • Type alias
  • Interface
  • Interface with type parameter
  • Enumeration
  • Class

Settings

Theme

Generated using TypeDoc

\ No newline at end of file +CounterTiming | node-mailjet
Options
All
  • Public
  • Public/Protected
  • All
Menu

Legend

  • Namespace
  • Function
  • Type alias
  • Interface
  • Interface with type parameter
  • Enumeration
  • Class

Settings

Theme

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/enums/types_api_Statistic.Statistic.EmailEvent.html b/docs/enums/types_api_Statistic.Statistic.EmailEvent.html index 3cf0b5d..047b81e 100644 --- a/docs/enums/types_api_Statistic.Statistic.EmailEvent.html +++ b/docs/enums/types_api_Statistic.Statistic.EmailEvent.html @@ -1 +1 @@ -EmailEvent | node-mailjet
Options
All
  • Public
  • Public/Protected
  • All
Menu

Legend

  • Namespace
  • Function
  • Type alias
  • Interface
  • Interface with type parameter
  • Enumeration
  • Class

Settings

Theme

Generated using TypeDoc

\ No newline at end of file +EmailEvent | node-mailjet
Options
All
  • Public
  • Public/Protected
  • All
Menu

Legend

  • Namespace
  • Function
  • Type alias
  • Interface
  • Interface with type parameter
  • Enumeration
  • Class

Settings

Theme

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/enums/types_api_Template.Template.Categories.html b/docs/enums/types_api_Template.Template.Categories.html index 3b2b5e5..ce6ae80 100644 --- a/docs/enums/types_api_Template.Template.Categories.html +++ b/docs/enums/types_api_Template.Template.Categories.html @@ -1 +1 @@ -Categories | node-mailjet
Options
All
  • Public
  • Public/Protected
  • All
Menu

Index

Enumeration members

Account = "account"
Activation = "activation"
Anniversary = "anniversary"
Basic = "basic"
ContactPropertyUpdate = "contact-property-update"
ECommerce = "e-commerce"
Events = "events"
Full = "full"
Invoice = "invoice"
NewsLetter = "newsletter"
Sports = "sports"
Support = "support"
Travel = "travel"
Welcome = "welcome"

Legend

  • Namespace
  • Function
  • Type alias
  • Interface
  • Interface with type parameter
  • Enumeration
  • Class

Settings

Theme

Generated using TypeDoc

\ No newline at end of file +Categories | node-mailjet
Options
All
  • Public
  • Public/Protected
  • All
Menu

Index

Enumeration members

Account = "account"
Activation = "activation"
Anniversary = "anniversary"
Basic = "basic"
ContactPropertyUpdate = "contact-property-update"
ECommerce = "e-commerce"
Events = "events"
Full = "full"
Invoice = "invoice"
NewsLetter = "newsletter"
Sports = "sports"
Support = "support"
Travel = "travel"
Welcome = "welcome"

Legend

  • Namespace
  • Function
  • Type alias
  • Interface
  • Interface with type parameter
  • Enumeration
  • Class

Settings

Theme

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/enums/types_api_Template.Template.CategoriesSelectionMethod.html b/docs/enums/types_api_Template.Template.CategoriesSelectionMethod.html index 54456da..4ad54a8 100644 --- a/docs/enums/types_api_Template.Template.CategoriesSelectionMethod.html +++ b/docs/enums/types_api_Template.Template.CategoriesSelectionMethod.html @@ -1 +1 @@ -CategoriesSelectionMethod | node-mailjet
Options
All
  • Public
  • Public/Protected
  • All
Menu

Legend

  • Namespace
  • Function
  • Type alias
  • Interface
  • Interface with type parameter
  • Enumeration
  • Class

Settings

Theme

Generated using TypeDoc

\ No newline at end of file +CategoriesSelectionMethod | node-mailjet
Options
All
  • Public
  • Public/Protected
  • All
Menu

Legend

  • Namespace
  • Function
  • Type alias
  • Interface
  • Interface with type parameter
  • Enumeration
  • Class

Settings

Theme

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/enums/types_api_Template.Template.EditMode.html b/docs/enums/types_api_Template.Template.EditMode.html index ffe59e8..5e63bb3 100644 --- a/docs/enums/types_api_Template.Template.EditMode.html +++ b/docs/enums/types_api_Template.Template.EditMode.html @@ -1 +1 @@ -EditMode | node-mailjet
Options
All
  • Public
  • Public/Protected
  • All
Menu

Legend

  • Namespace
  • Function
  • Type alias
  • Interface
  • Interface with type parameter
  • Enumeration
  • Class

Settings

Theme

Generated using TypeDoc

\ No newline at end of file +EditMode | node-mailjet
Options
All
  • Public
  • Public/Protected
  • All
Menu

Legend

  • Namespace
  • Function
  • Type alias
  • Interface
  • Interface with type parameter
  • Enumeration
  • Class

Settings

Theme

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/enums/types_api_Template.Template.OwnerType.html b/docs/enums/types_api_Template.Template.OwnerType.html index 2e634d9..4af5a65 100644 --- a/docs/enums/types_api_Template.Template.OwnerType.html +++ b/docs/enums/types_api_Template.Template.OwnerType.html @@ -1 +1 @@ -OwnerType | node-mailjet
Options
All
  • Public
  • Public/Protected
  • All
Menu

Legend

  • Namespace
  • Function
  • Type alias
  • Interface
  • Interface with type parameter
  • Enumeration
  • Class

Settings

Theme

Generated using TypeDoc

\ No newline at end of file +OwnerType | node-mailjet
Options
All
  • Public
  • Public/Protected
  • All
Menu

Legend

  • Namespace
  • Function
  • Type alias
  • Interface
  • Interface with type parameter
  • Enumeration
  • Class

Settings

Theme

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/enums/types_api_Template.Template.Purposes.html b/docs/enums/types_api_Template.Template.Purposes.html index e164a72..ce22ea4 100644 --- a/docs/enums/types_api_Template.Template.Purposes.html +++ b/docs/enums/types_api_Template.Template.Purposes.html @@ -1 +1 @@ -Purposes | node-mailjet
Options
All
  • Public
  • Public/Protected
  • All
Menu

Legend

  • Namespace
  • Function
  • Type alias
  • Interface
  • Interface with type parameter
  • Enumeration
  • Class

Settings

Theme

Generated using TypeDoc

\ No newline at end of file +Purposes | node-mailjet
Options
All
  • Public
  • Public/Protected
  • All
Menu

Legend

  • Namespace
  • Function
  • Type alias
  • Interface
  • Interface with type parameter
  • Enumeration
  • Class

Settings

Theme

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/enums/types_api_Template.Template.PurposesSelectionMethod.html b/docs/enums/types_api_Template.Template.PurposesSelectionMethod.html index 5ee0b59..77af024 100644 --- a/docs/enums/types_api_Template.Template.PurposesSelectionMethod.html +++ b/docs/enums/types_api_Template.Template.PurposesSelectionMethod.html @@ -1 +1 @@ -PurposesSelectionMethod | node-mailjet
Options
All
  • Public
  • Public/Protected
  • All
Menu

Legend

  • Namespace
  • Function
  • Type alias
  • Interface
  • Interface with type parameter
  • Enumeration
  • Class

Settings

Theme

Generated using TypeDoc

\ No newline at end of file +PurposesSelectionMethod | node-mailjet
Options
All
  • Public
  • Public/Protected
  • All
Menu

Legend

  • Namespace
  • Function
  • Type alias
  • Interface
  • Interface with type parameter
  • Enumeration
  • Class

Settings

Theme

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/enums/types_api_Webhook.Webhook.EventType.html b/docs/enums/types_api_Webhook.Webhook.EventType.html index e6d1087..9e1e18d 100644 --- a/docs/enums/types_api_Webhook.Webhook.EventType.html +++ b/docs/enums/types_api_Webhook.Webhook.EventType.html @@ -1 +1 @@ -EventType | node-mailjet
Options
All
  • Public
  • Public/Protected
  • All
Menu

Legend

  • Namespace
  • Function
  • Type alias
  • Interface
  • Interface with type parameter
  • Enumeration
  • Class

Settings

Theme

Generated using TypeDoc

\ No newline at end of file +EventType | node-mailjet
Options
All
  • Public
  • Public/Protected
  • All
Menu

Legend

  • Namespace
  • Function
  • Type alias
  • Interface
  • Interface with type parameter
  • Enumeration
  • Class

Settings

Theme

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/enums/types_api_Webhook.Webhook.EventTypeValue.html b/docs/enums/types_api_Webhook.Webhook.EventTypeValue.html index 0b50bb6..94e27cf 100644 --- a/docs/enums/types_api_Webhook.Webhook.EventTypeValue.html +++ b/docs/enums/types_api_Webhook.Webhook.EventTypeValue.html @@ -1 +1 @@ -EventTypeValue | node-mailjet
Options
All
  • Public
  • Public/Protected
  • All
Menu

Legend

  • Namespace
  • Function
  • Type alias
  • Interface
  • Interface with type parameter
  • Enumeration
  • Class

Settings

Theme

Generated using TypeDoc

\ No newline at end of file +EventTypeValue | node-mailjet
Options
All
  • Public
  • Public/Protected
  • All
Menu

Legend

  • Namespace
  • Function
  • Type alias
  • Interface
  • Interface with type parameter
  • Enumeration
  • Class

Settings

Theme

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/enums/types_api_Webhook.Webhook.Status.html b/docs/enums/types_api_Webhook.Webhook.Status.html index 2d098f4..de234e2 100644 --- a/docs/enums/types_api_Webhook.Webhook.Status.html +++ b/docs/enums/types_api_Webhook.Webhook.Status.html @@ -1 +1 @@ -Status | node-mailjet
Options
All
  • Public
  • Public/Protected
  • All
Menu

Legend

  • Namespace
  • Function
  • Type alias
  • Interface
  • Interface with type parameter
  • Enumeration
  • Class

Settings

Theme

Generated using TypeDoc

\ No newline at end of file +Status | node-mailjet
Options
All
  • Public
  • Public/Protected
  • All
Menu

Legend

  • Namespace
  • Function
  • Type alias
  • Interface
  • Interface with type parameter
  • Enumeration
  • Class

Settings

Theme

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/index.html b/docs/index.html index 11af9d6..504cac7 100644 --- a/docs/index.html +++ b/docs/index.html @@ -4,7 +4,7 @@

Mailjet JS

Build Status -Current Version

+Current Version

Overview

diff --git a/docs/interfaces/client_Client.ClientParams.html b/docs/interfaces/client_Client.ClientParams.html index e7175ad..206899d 100644 --- a/docs/interfaces/client_Client.ClientParams.html +++ b/docs/interfaces/client_Client.ClientParams.html @@ -1 +1 @@ -ClientParams | node-mailjet

Legend

  • Namespace
  • Function
  • Type alias
  • Interface
  • Interface with type parameter
  • Property
  • Enumeration
  • Class

Settings

Theme

Generated using TypeDoc

\ No newline at end of file +ClientParams | node-mailjet
Options
All
  • Public
  • Public/Protected
  • All
Menu

Legend

  • Namespace
  • Function
  • Type alias
  • Interface
  • Interface with type parameter
  • Property
  • Enumeration
  • Class

Settings

Theme

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/interfaces/request_Request.RequestConfig.html b/docs/interfaces/request_Request.RequestConfig.html index e9158bf..8b8390a 100644 --- a/docs/interfaces/request_Request.RequestConfig.html +++ b/docs/interfaces/request_Request.RequestConfig.html @@ -1 +1 @@ -RequestConfig | node-mailjet
Options
All
  • Public
  • Public/Protected
  • All
Menu

Legend

  • Namespace
  • Function
  • Type alias
  • Interface
  • Interface with type parameter
  • Property
  • Enumeration
  • Class

Settings

Theme

Generated using TypeDoc

\ No newline at end of file +RequestConfig | node-mailjet
Options
All
  • Public
  • Public/Protected
  • All
Menu

Legend

  • Namespace
  • Function
  • Type alias
  • Interface
  • Interface with type parameter
  • Property
  • Enumeration
  • Class

Settings

Theme

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/interfaces/request_Request.RequestOptions.html b/docs/interfaces/request_Request.RequestOptions.html index 522d1c2..f522e70 100644 --- a/docs/interfaces/request_Request.RequestOptions.html +++ b/docs/interfaces/request_Request.RequestOptions.html @@ -1 +1 @@ -RequestOptions | node-mailjet
Options
All
  • Public
  • Public/Protected
  • All
Menu

Hierarchy

  • RequestOptions

Index

Properties

headers?: Partial<RawAxiosHeaders & { Accept: AxiosHeaderValue; Authorization: AxiosHeaderValue; Content-Encoding: AxiosHeaderValue; Content-Length: AxiosHeaderValue; User-Agent: AxiosHeaderValue } & { Content-Type: ContentType }>
maxBodyLength?: number
maxContentLength?: number
proxy?: AxiosProxyConfig
timeout?: number

Legend

  • Namespace
  • Function
  • Type alias
  • Interface
  • Interface with type parameter
  • Property
  • Enumeration
  • Class

Settings

Theme

Generated using TypeDoc

\ No newline at end of file +RequestOptions | node-mailjet
Options
All
  • Public
  • Public/Protected
  • All
Menu

Hierarchy

  • RequestOptions

Index

Properties

headers?: Partial<RawAxiosHeaders & { Accept: AxiosHeaderValue; Authorization: AxiosHeaderValue; Content-Encoding: AxiosHeaderValue; Content-Length: AxiosHeaderValue; User-Agent: AxiosHeaderValue } & { Content-Type: ContentType }>
maxBodyLength?: number
maxContentLength?: number
proxy?: AxiosProxyConfig
timeout?: number

Legend

  • Namespace
  • Function
  • Type alias
  • Interface
  • Interface with type parameter
  • Property
  • Enumeration
  • Class

Settings

Theme

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/interfaces/types_api_Campaign.DraftCampaign.CampaignDraft.html b/docs/interfaces/types_api_Campaign.DraftCampaign.CampaignDraft.html index e10345a..2507941 100644 --- a/docs/interfaces/types_api_Campaign.DraftCampaign.CampaignDraft.html +++ b/docs/interfaces/types_api_Campaign.DraftCampaign.CampaignDraft.html @@ -1 +1 @@ -CampaignDraft | node-mailjet
Options
All
  • Public
  • Public/Protected
  • All
Menu

Type parameters

Hierarchy

  • CampaignDraft

Index

Properties

AXFraction: number
AXFractionName: string
AXTesting: AXTesting
CampaignID: number
ContactsListID: number
CreatedAt: string
Current: number
DeliveredAt: string
ID: number
IsStarred: boolean
IsTextPartIncluded: boolean
Locale: string
ModifiedAt: string
Preset: string
ReplyEmail: string
SegmentationID: number
Sender: string
SenderEmail: string
SenderName: string
Subject: string
TemplateID: number
Title: string
Url: string
Used: boolean

Legend

  • Namespace
  • Function
  • Type alias
  • Interface
  • Interface with type parameter
  • Property
  • Enumeration
  • Class

Settings

Theme

Generated using TypeDoc

\ No newline at end of file +CampaignDraft | node-mailjet
Options
All
  • Public
  • Public/Protected
  • All
Menu

Type parameters

Hierarchy

  • CampaignDraft

Index

Properties

AXFraction: number
AXFractionName: string
AXTesting: AXTesting
CampaignID: number
ContactsListID: number
CreatedAt: string
Current: number
DeliveredAt: string
ID: number
IsStarred: boolean
IsTextPartIncluded: boolean
Locale: string
ModifiedAt: string
Preset: string
ReplyEmail: string
SegmentationID: number
Sender: string
SenderEmail: string
SenderName: string
Subject: string
TemplateID: number
Title: string
Url: string
Used: boolean

Legend

  • Namespace
  • Function
  • Type alias
  • Interface
  • Interface with type parameter
  • Property
  • Enumeration
  • Class

Settings

Theme

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/interfaces/types_api_Campaign.DraftCampaign.CampaignDraftDetailContent.html b/docs/interfaces/types_api_Campaign.DraftCampaign.CampaignDraftDetailContent.html index 9c15850..d525db3 100644 --- a/docs/interfaces/types_api_Campaign.DraftCampaign.CampaignDraftDetailContent.html +++ b/docs/interfaces/types_api_Campaign.DraftCampaign.CampaignDraftDetailContent.html @@ -1 +1 @@ -CampaignDraftDetailContent | node-mailjet
Options
All
  • Public
  • Public/Protected
  • All
Menu

Interface CampaignDraftDetailContent<Headers>

Legend

  • Namespace
  • Function
  • Type alias
  • Interface
  • Interface with type parameter
  • Property
  • Enumeration
  • Class

Settings

Theme

Generated using TypeDoc

\ No newline at end of file +CampaignDraftDetailContent | node-mailjet
Options
All
  • Public
  • Public/Protected
  • All
Menu

Interface CampaignDraftDetailContent<Headers>

Legend

  • Namespace
  • Function
  • Type alias
  • Interface
  • Interface with type parameter
  • Property
  • Enumeration
  • Class

Settings

Theme

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/interfaces/types_api_Campaign.DraftCampaign.CampaignDraftSchedule.html b/docs/interfaces/types_api_Campaign.DraftCampaign.CampaignDraftSchedule.html index 7649970..0ab9f67 100644 --- a/docs/interfaces/types_api_Campaign.DraftCampaign.CampaignDraftSchedule.html +++ b/docs/interfaces/types_api_Campaign.DraftCampaign.CampaignDraftSchedule.html @@ -1 +1 @@ -CampaignDraftSchedule | node-mailjet
Options
All
  • Public
  • Public/Protected
  • All
Menu

Legend

  • Namespace
  • Function
  • Type alias
  • Interface
  • Interface with type parameter
  • Property
  • Enumeration
  • Class

Settings

Theme

Generated using TypeDoc

\ No newline at end of file +CampaignDraftSchedule | node-mailjet
Options
All
  • Public
  • Public/Protected
  • All
Menu

Legend

  • Namespace
  • Function
  • Type alias
  • Interface
  • Interface with type parameter
  • Property
  • Enumeration
  • Class

Settings

Theme

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/interfaces/types_api_Campaign.DraftCampaign.Recipient.html b/docs/interfaces/types_api_Campaign.DraftCampaign.Recipient.html index 9627709..6496d36 100644 --- a/docs/interfaces/types_api_Campaign.DraftCampaign.Recipient.html +++ b/docs/interfaces/types_api_Campaign.DraftCampaign.Recipient.html @@ -1 +1 @@ -Recipient | node-mailjet
Options
All
  • Public
  • Public/Protected
  • All
Menu

Legend

  • Namespace
  • Function
  • Type alias
  • Interface
  • Interface with type parameter
  • Property
  • Enumeration
  • Class

Settings

Theme

Generated using TypeDoc

\ No newline at end of file +Recipient | node-mailjet
Options
All
  • Public
  • Public/Protected
  • All
Menu

Legend

  • Namespace
  • Function
  • Type alias
  • Interface
  • Interface with type parameter
  • Property
  • Enumeration
  • Class

Settings

Theme

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/interfaces/types_api_Campaign.SentCampaign.Campaign.html b/docs/interfaces/types_api_Campaign.SentCampaign.Campaign.html index 1c85ee8..c4e95e0 100644 --- a/docs/interfaces/types_api_Campaign.SentCampaign.Campaign.html +++ b/docs/interfaces/types_api_Campaign.SentCampaign.Campaign.html @@ -1 +1 @@ -Campaign | node-mailjet
Options
All
  • Public
  • Public/Protected
  • All
Menu

Hierarchy

  • Campaign

Index

Properties

CampaignType: CampaignType
CreatedAt: string
CustomValue: string
FirstMessageID: number
FromEmail: string
FromID: number
FromName: string
HasHtmlCount: number
HasTxtCount: number
ID: number
IsDeleted: boolean
IsStarred: boolean
ListID: number
NewsLetterID: number
SegmentationID: number
SendEndAt: string
SendStartAt: string
SpamassScore: number
Subject: string
WorkflowID: number

Legend

  • Namespace
  • Function
  • Type alias
  • Interface
  • Interface with type parameter
  • Property
  • Enumeration
  • Class

Settings

Theme

Generated using TypeDoc

\ No newline at end of file +Campaign | node-mailjet
Options
All
  • Public
  • Public/Protected
  • All
Menu

Hierarchy

  • Campaign

Index

Properties

CampaignType: CampaignType
CreatedAt: string
CustomValue: string
FirstMessageID: number
FromEmail: string
FromID: number
FromName: string
HasHtmlCount: number
HasTxtCount: number
ID: number
IsDeleted: boolean
IsStarred: boolean
ListID: number
NewsLetterID: number
SegmentationID: number
SendEndAt: string
SendStartAt: string
SpamassScore: number
Subject: string
WorkflowID: number

Legend

  • Namespace
  • Function
  • Type alias
  • Interface
  • Interface with type parameter
  • Property
  • Enumeration
  • Class

Settings

Theme

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/interfaces/types_api_Common.Common.Pagination.html b/docs/interfaces/types_api_Common.Common.Pagination.html index cbc9e6a..7bf1c53 100644 --- a/docs/interfaces/types_api_Common.Common.Pagination.html +++ b/docs/interfaces/types_api_Common.Common.Pagination.html @@ -1 +1 @@ -Pagination | node-mailjet
Options
All
  • Public
  • Public/Protected
  • All
Menu

Legend

  • Namespace
  • Function
  • Type alias
  • Interface
  • Interface with type parameter
  • Property
  • Enumeration
  • Class

Settings

Theme

Generated using TypeDoc

\ No newline at end of file +Pagination | node-mailjet
Options
All
  • Public
  • Public/Protected
  • All
Menu

Legend

  • Namespace
  • Function
  • Type alias
  • Interface
  • Interface with type parameter
  • Property
  • Enumeration
  • Class

Settings

Theme

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/interfaces/types_api_Common.Common.TimestampPeriod.html b/docs/interfaces/types_api_Common.Common.TimestampPeriod.html index ae7312c..9a44dae 100644 --- a/docs/interfaces/types_api_Common.Common.TimestampPeriod.html +++ b/docs/interfaces/types_api_Common.Common.TimestampPeriod.html @@ -1 +1 @@ -TimestampPeriod | node-mailjet
Options
All
  • Public
  • Public/Protected
  • All
Menu

Legend

  • Namespace
  • Function
  • Type alias
  • Interface
  • Interface with type parameter
  • Property
  • Enumeration
  • Class

Settings

Theme

Generated using TypeDoc

\ No newline at end of file +TimestampPeriod | node-mailjet
Options
All
  • Public
  • Public/Protected
  • All
Menu

Legend

  • Namespace
  • Function
  • Type alias
  • Interface
  • Interface with type parameter
  • Property
  • Enumeration
  • Class

Settings

Theme

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/interfaces/types_api_Contact.BulkContactManagement.CSVImport.html b/docs/interfaces/types_api_Contact.BulkContactManagement.CSVImport.html index 2493092..7047ba5 100644 --- a/docs/interfaces/types_api_Contact.BulkContactManagement.CSVImport.html +++ b/docs/interfaces/types_api_Contact.BulkContactManagement.CSVImport.html @@ -1 +1 @@ -CSVImport | node-mailjet
Options
All
  • Public
  • Public/Protected
  • All
Menu

Hierarchy

  • CSVImport

Index

Properties

AliveAt: string
ContactsListID: number
Count: number
Current: number
DataID: number
ErrTreshold: number
Errcount: number
ID: number
ImportOptions: string
JobEnd: string
JobStart: string
RequestAt: string

Legend

  • Namespace
  • Function
  • Type alias
  • Interface
  • Interface with type parameter
  • Property
  • Enumeration
  • Class

Settings

Theme

Generated using TypeDoc

\ No newline at end of file +CSVImport | node-mailjet
Options
All
  • Public
  • Public/Protected
  • All
Menu

Hierarchy

  • CSVImport

Index

Properties

AliveAt: string
ContactsListID: number
Count: number
Current: number
DataID: number
ErrTreshold: number
Errcount: number
ID: number
ImportOptions: string
JobEnd: string
JobStart: string
RequestAt: string

Legend

  • Namespace
  • Function
  • Type alias
  • Interface
  • Interface with type parameter
  • Property
  • Enumeration
  • Class

Settings

Theme

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/interfaces/types_api_Contact.BulkContactManagement.ContactList.html b/docs/interfaces/types_api_Contact.BulkContactManagement.ContactList.html index 36548e4..ac4a4f2 100644 --- a/docs/interfaces/types_api_Contact.BulkContactManagement.ContactList.html +++ b/docs/interfaces/types_api_Contact.BulkContactManagement.ContactList.html @@ -1 +1 @@ -ContactList | node-mailjet
Options
All
  • Public
  • Public/Protected
  • All
Menu

Legend

  • Namespace
  • Function
  • Type alias
  • Interface
  • Interface with type parameter
  • Property
  • Enumeration
  • Class

Settings

Theme

Generated using TypeDoc

\ No newline at end of file +ContactList | node-mailjet
Options
All
  • Public
  • Public/Protected
  • All
Menu

Legend

  • Namespace
  • Function
  • Type alias
  • Interface
  • Interface with type parameter
  • Property
  • Enumeration
  • Class

Settings

Theme

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/interfaces/types_api_Contact.BulkContactManagement.ContactManageManyContacts.html b/docs/interfaces/types_api_Contact.BulkContactManagement.ContactManageManyContacts.html index 48aa429..974094d 100644 --- a/docs/interfaces/types_api_Contact.BulkContactManagement.ContactManageManyContacts.html +++ b/docs/interfaces/types_api_Contact.BulkContactManagement.ContactManageManyContacts.html @@ -1 +1 @@ -ContactManageManyContacts | node-mailjet
Options
All
  • Public
  • Public/Protected
  • All
Menu

Legend

  • Namespace
  • Function
  • Type alias
  • Interface
  • Interface with type parameter
  • Property
  • Enumeration
  • Class

Settings

Theme

Generated using TypeDoc

\ No newline at end of file +ContactManageManyContacts | node-mailjet
Options
All
  • Public
  • Public/Protected
  • All
Menu

Legend

  • Namespace
  • Function
  • Type alias
  • Interface
  • Interface with type parameter
  • Property
  • Enumeration
  • Class

Settings

Theme

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/interfaces/types_api_Contact.BulkContactManagement.ContactsListImportList.html b/docs/interfaces/types_api_Contact.BulkContactManagement.ContactsListImportList.html index a65f800..de58ec7 100644 --- a/docs/interfaces/types_api_Contact.BulkContactManagement.ContactsListImportList.html +++ b/docs/interfaces/types_api_Contact.BulkContactManagement.ContactsListImportList.html @@ -1 +1 @@ -ContactsListImportList | node-mailjet
Options
All
  • Public
  • Public/Protected
  • All
Menu

Legend

  • Namespace
  • Function
  • Type alias
  • Interface
  • Interface with type parameter
  • Property
  • Enumeration
  • Class

Settings

Theme

Generated using TypeDoc

\ No newline at end of file +ContactsListImportList | node-mailjet
Options
All
  • Public
  • Public/Protected
  • All
Menu

Legend

  • Namespace
  • Function
  • Type alias
  • Interface
  • Interface with type parameter
  • Property
  • Enumeration
  • Class

Settings

Theme

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/interfaces/types_api_Contact.BulkContactManagement.Job.html b/docs/interfaces/types_api_Contact.BulkContactManagement.Job.html index 9972e5a..4e7a622 100644 --- a/docs/interfaces/types_api_Contact.BulkContactManagement.Job.html +++ b/docs/interfaces/types_api_Contact.BulkContactManagement.Job.html @@ -1 +1 @@ -Job | node-mailjet
Options
All
  • Public
  • Public/Protected
  • All
Menu

Legend

  • Namespace
  • Function
  • Type alias
  • Interface
  • Interface with type parameter
  • Property
  • Enumeration
  • Class

Settings

Theme

Generated using TypeDoc

\ No newline at end of file +Job | node-mailjet
Options
All
  • Public
  • Public/Protected
  • All
Menu

Legend

  • Namespace
  • Function
  • Type alias
  • Interface
  • Interface with type parameter
  • Property
  • Enumeration
  • Class

Settings

Theme

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/interfaces/types_api_Contact.Contact.Contact.html b/docs/interfaces/types_api_Contact.Contact.Contact.html index fc9d808..56229e2 100644 --- a/docs/interfaces/types_api_Contact.Contact.Contact.html +++ b/docs/interfaces/types_api_Contact.Contact.Contact.html @@ -1 +1 @@ -Contact | node-mailjet
Options
All
  • Public
  • Public/Protected
  • All
Menu

Hierarchy

  • Contact

Index

Properties

CreatedAt: string
DeliveredCount: number
Email: string
ExclusionFromCampaignsUpdatedAt: string
ID: number
IsExcludedFromCampaigns: boolean
IsOptInPending: boolean
IsSpamComplaining: boolean
LastActivityAt: string
LastUpdateAt: string
Name: string

Legend

  • Namespace
  • Function
  • Type alias
  • Interface
  • Interface with type parameter
  • Property
  • Enumeration
  • Class

Settings

Theme

Generated using TypeDoc

\ No newline at end of file +Contact | node-mailjet
Options
All
  • Public
  • Public/Protected
  • All
Menu

Hierarchy

  • Contact

Index

Properties

CreatedAt: string
DeliveredCount: number
Email: string
ExclusionFromCampaignsUpdatedAt: string
ID: number
IsExcludedFromCampaigns: boolean
IsOptInPending: boolean
IsSpamComplaining: boolean
LastActivityAt: string
LastUpdateAt: string
Name: string

Legend

  • Namespace
  • Function
  • Type alias
  • Interface
  • Interface with type parameter
  • Property
  • Enumeration
  • Class

Settings

Theme

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/interfaces/types_api_Contact.ContactList.ContactList.html b/docs/interfaces/types_api_Contact.ContactList.ContactList.html index 7b41619..b63b5f8 100644 --- a/docs/interfaces/types_api_Contact.ContactList.ContactList.html +++ b/docs/interfaces/types_api_Contact.ContactList.ContactList.html @@ -1 +1 @@ -ContactList | node-mailjet
Options
All
  • Public
  • Public/Protected
  • All
Menu

Legend

  • Namespace
  • Function
  • Type alias
  • Interface
  • Interface with type parameter
  • Property
  • Enumeration
  • Class

Settings

Theme

Generated using TypeDoc

\ No newline at end of file +ContactList | node-mailjet
Options
All
  • Public
  • Public/Protected
  • All
Menu

Legend

  • Namespace
  • Function
  • Type alias
  • Interface
  • Interface with type parameter
  • Property
  • Enumeration
  • Class

Settings

Theme

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/interfaces/types_api_Contact.ContactProperties.ContactData.html b/docs/interfaces/types_api_Contact.ContactProperties.ContactData.html index 2a746c6..a8fe01e 100644 --- a/docs/interfaces/types_api_Contact.ContactProperties.ContactData.html +++ b/docs/interfaces/types_api_Contact.ContactProperties.ContactData.html @@ -1 +1 @@ -ContactData | node-mailjet
Options
All
  • Public
  • Public/Protected
  • All
Menu

Legend

  • Namespace
  • Function
  • Type alias
  • Interface
  • Interface with type parameter
  • Property
  • Enumeration
  • Class

Settings

Theme

Generated using TypeDoc

\ No newline at end of file +ContactData | node-mailjet
Options
All
  • Public
  • Public/Protected
  • All
Menu

Legend

  • Namespace
  • Function
  • Type alias
  • Interface
  • Interface with type parameter
  • Property
  • Enumeration
  • Class

Settings

Theme

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/interfaces/types_api_Contact.ContactProperties.ContactMetaData.html b/docs/interfaces/types_api_Contact.ContactProperties.ContactMetaData.html index b990c95..c834b3b 100644 --- a/docs/interfaces/types_api_Contact.ContactProperties.ContactMetaData.html +++ b/docs/interfaces/types_api_Contact.ContactProperties.ContactMetaData.html @@ -1 +1 @@ -ContactMetaData | node-mailjet
Options
All
  • Public
  • Public/Protected
  • All
Menu

Legend

  • Namespace
  • Function
  • Type alias
  • Interface
  • Interface with type parameter
  • Property
  • Enumeration
  • Class

Settings

Theme

Generated using TypeDoc

\ No newline at end of file +ContactMetaData | node-mailjet
Options
All
  • Public
  • Public/Protected
  • All
Menu

Legend

  • Namespace
  • Function
  • Type alias
  • Interface
  • Interface with type parameter
  • Property
  • Enumeration
  • Class

Settings

Theme

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/interfaces/types_api_Contact.ContactProperties.ContactProperty.html b/docs/interfaces/types_api_Contact.ContactProperties.ContactProperty.html index cf0094f..d10366f 100644 --- a/docs/interfaces/types_api_Contact.ContactProperties.ContactProperty.html +++ b/docs/interfaces/types_api_Contact.ContactProperties.ContactProperty.html @@ -1 +1 @@ -ContactProperty | node-mailjet
Options
All
  • Public
  • Public/Protected
  • All
Menu

Legend

  • Namespace
  • Function
  • Type alias
  • Interface
  • Interface with type parameter
  • Property
  • Enumeration
  • Class

Settings

Theme

Generated using TypeDoc

\ No newline at end of file +ContactProperty | node-mailjet
Options
All
  • Public
  • Public/Protected
  • All
Menu

Legend

  • Namespace
  • Function
  • Type alias
  • Interface
  • Interface with type parameter
  • Property
  • Enumeration
  • Class

Settings

Theme

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/interfaces/types_api_Contact.ContactSubscription.ContactsList.html b/docs/interfaces/types_api_Contact.ContactSubscription.ContactsList.html index b401af8..5ddad5c 100644 --- a/docs/interfaces/types_api_Contact.ContactSubscription.ContactsList.html +++ b/docs/interfaces/types_api_Contact.ContactSubscription.ContactsList.html @@ -1 +1 @@ -ContactsList | node-mailjet
Options
All
  • Public
  • Public/Protected
  • All
Menu

Legend

  • Namespace
  • Function
  • Type alias
  • Interface
  • Interface with type parameter
  • Property
  • Enumeration
  • Class

Settings

Theme

Generated using TypeDoc

\ No newline at end of file +ContactsList | node-mailjet
Options
All
  • Public
  • Public/Protected
  • All
Menu

Legend

  • Namespace
  • Function
  • Type alias
  • Interface
  • Interface with type parameter
  • Property
  • Enumeration
  • Class

Settings

Theme

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/interfaces/types_api_Contact.ContactSubscription.ContactsListSignup.html b/docs/interfaces/types_api_Contact.ContactSubscription.ContactsListSignup.html index d2b8fd6..23cf8de 100644 --- a/docs/interfaces/types_api_Contact.ContactSubscription.ContactsListSignup.html +++ b/docs/interfaces/types_api_Contact.ContactSubscription.ContactsListSignup.html @@ -1 +1 @@ -ContactsListSignup | node-mailjet
Options
All
  • Public
  • Public/Protected
  • All
Menu

Legend

  • Namespace
  • Function
  • Type alias
  • Interface
  • Interface with type parameter
  • Property
  • Enumeration
  • Class

Settings

Theme

Generated using TypeDoc

\ No newline at end of file +ContactsListSignup | node-mailjet
Options
All
  • Public
  • Public/Protected
  • All
Menu

Legend

  • Namespace
  • Function
  • Type alias
  • Interface
  • Interface with type parameter
  • Property
  • Enumeration
  • Class

Settings

Theme

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/interfaces/types_api_Contact.ContactSubscription.ListRecipient.html b/docs/interfaces/types_api_Contact.ContactSubscription.ListRecipient.html index 6ebde65..cd5f84c 100644 --- a/docs/interfaces/types_api_Contact.ContactSubscription.ListRecipient.html +++ b/docs/interfaces/types_api_Contact.ContactSubscription.ListRecipient.html @@ -1 +1 @@ -ListRecipient | node-mailjet
Options
All
  • Public
  • Public/Protected
  • All
Menu

Legend

  • Namespace
  • Function
  • Type alias
  • Interface
  • Interface with type parameter
  • Property
  • Enumeration
  • Class

Settings

Theme

Generated using TypeDoc

\ No newline at end of file +ListRecipient | node-mailjet
Options
All
  • Public
  • Public/Protected
  • All
Menu

Legend

  • Namespace
  • Function
  • Type alias
  • Interface
  • Interface with type parameter
  • Property
  • Enumeration
  • Class

Settings

Theme

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/interfaces/types_api_Contact.ContactSubscription.ManageContacts.html b/docs/interfaces/types_api_Contact.ContactSubscription.ManageContacts.html index ebe8387..2e8bcce 100644 --- a/docs/interfaces/types_api_Contact.ContactSubscription.ManageContacts.html +++ b/docs/interfaces/types_api_Contact.ContactSubscription.ManageContacts.html @@ -1 +1 @@ -ManageContacts | node-mailjet
Options
All
  • Public
  • Public/Protected
  • All
Menu

Legend

  • Namespace
  • Function
  • Type alias
  • Interface
  • Interface with type parameter
  • Property
  • Enumeration
  • Class

Settings

Theme

Generated using TypeDoc

\ No newline at end of file +ManageContacts | node-mailjet
Options
All
  • Public
  • Public/Protected
  • All
Menu

Legend

  • Namespace
  • Function
  • Type alias
  • Interface
  • Interface with type parameter
  • Property
  • Enumeration
  • Class

Settings

Theme

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/interfaces/types_api_Contact.ContactVerification.ContactsListVerification.html b/docs/interfaces/types_api_Contact.ContactVerification.ContactsListVerification.html index 99f94d0..87a7f09 100644 --- a/docs/interfaces/types_api_Contact.ContactVerification.ContactsListVerification.html +++ b/docs/interfaces/types_api_Contact.ContactVerification.ContactsListVerification.html @@ -1 +1 @@ -ContactsListVerification | node-mailjet
Options
All
  • Public
  • Public/Protected
  • All
Menu

Interface ContactsListVerification<Result, Risk>

Type parameters

Hierarchy

  • ContactsListVerification

Index

Properties

Akid: number
ContactListID: number
Count: number
Error: string
ID: number
JobEnd: string
JobStart: string
Method: string
ResponseURL: string
Status: string
Summary: VerificationSummary<Result, Risk>

Legend

  • Namespace
  • Function
  • Type alias
  • Interface
  • Interface with type parameter
  • Property
  • Enumeration
  • Class

Settings

Theme

Generated using TypeDoc

\ No newline at end of file +ContactsListVerification | node-mailjet
Options
All
  • Public
  • Public/Protected
  • All
Menu

Interface ContactsListVerification<Result, Risk>

Type parameters

Hierarchy

  • ContactsListVerification

Index

Properties

Akid: number
ContactListID: number
Count: number
Error: string
ID: number
JobEnd: string
JobStart: string
Method: string
ResponseURL: string
Status: string
Summary: VerificationSummary<Result, Risk>

Legend

  • Namespace
  • Function
  • Type alias
  • Interface
  • Interface with type parameter
  • Property
  • Enumeration
  • Class

Settings

Theme

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/interfaces/types_api_Contact.ContactVerification.VerificationSummary.html b/docs/interfaces/types_api_Contact.ContactVerification.VerificationSummary.html index 29a1376..012d884 100644 --- a/docs/interfaces/types_api_Contact.ContactVerification.VerificationSummary.html +++ b/docs/interfaces/types_api_Contact.ContactVerification.VerificationSummary.html @@ -1 +1 @@ -VerificationSummary | node-mailjet
Options
All
  • Public
  • Public/Protected
  • All
Menu

Legend

  • Namespace
  • Function
  • Type alias
  • Interface
  • Interface with type parameter
  • Property
  • Enumeration
  • Class

Settings

Theme

Generated using TypeDoc

\ No newline at end of file +VerificationSummary | node-mailjet
Options
All
  • Public
  • Public/Protected
  • All
Menu

Legend

  • Namespace
  • Function
  • Type alias
  • Interface
  • Interface with type parameter
  • Property
  • Enumeration
  • Class

Settings

Theme

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/interfaces/types_api_LibraryResponse.LibraryLocalResponse.html b/docs/interfaces/types_api_LibraryResponse.LibraryLocalResponse.html index dcd0636..609c588 100644 --- a/docs/interfaces/types_api_LibraryResponse.LibraryLocalResponse.html +++ b/docs/interfaces/types_api_LibraryResponse.LibraryLocalResponse.html @@ -1 +1 @@ -LibraryLocalResponse | node-mailjet
Options
All
  • Public
  • Public/Protected
  • All
Menu

Interface LibraryLocalResponse<Data, Params>

Legend

  • Namespace
  • Function
  • Type alias
  • Interface
  • Interface with type parameter
  • Property
  • Enumeration
  • Class

Settings

Theme

Generated using TypeDoc

\ No newline at end of file +LibraryLocalResponse | node-mailjet
Options
All
  • Public
  • Public/Protected
  • All
Menu

Interface LibraryLocalResponse<Data, Params>

Legend

  • Namespace
  • Function
  • Type alias
  • Interface
  • Interface with type parameter
  • Property
  • Enumeration
  • Class

Settings

Theme

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/interfaces/types_api_LibraryResponse.LibraryResponse.html b/docs/interfaces/types_api_LibraryResponse.LibraryResponse.html index c4f3edb..7b4aa79 100644 --- a/docs/interfaces/types_api_LibraryResponse.LibraryResponse.html +++ b/docs/interfaces/types_api_LibraryResponse.LibraryResponse.html @@ -1 +1 @@ -LibraryResponse | node-mailjet
Options
All
  • Public
  • Public/Protected
  • All
Menu

Legend

  • Namespace
  • Function
  • Type alias
  • Interface
  • Interface with type parameter
  • Property
  • Enumeration
  • Class

Settings

Theme

Generated using TypeDoc

\ No newline at end of file +LibraryResponse | node-mailjet
Options
All
  • Public
  • Public/Protected
  • All
Menu

Legend

  • Namespace
  • Function
  • Type alias
  • Interface
  • Interface with type parameter
  • Property
  • Enumeration
  • Class

Settings

Theme

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/interfaces/types_api_Message.Message.Message.html b/docs/interfaces/types_api_Message.Message.Message.html index 06b588e..f056c32 100644 --- a/docs/interfaces/types_api_Message.Message.Message.html +++ b/docs/interfaces/types_api_Message.Message.Message.html @@ -1 +1 @@ -Message | node-mailjet
Options
All
  • Public
  • Public/Protected
  • All
Menu

Hierarchy

Index

Properties

ArrivedAt: string
AttachmentCount: number
AttemptCount: number
CampaignID: number
ContactAlt: string
ContactID: number
Delay: number
DestinationID: number
FilterTime: number
ID: number
IsClickTracked: boolean
IsHTMLPartIncluded: boolean
IsOpenTracked: boolean
IsTextPartIncluded: boolean
IsUnsubTracked: boolean
MessageSize: number
SenderID: number
SpamassRules: string
SpamassassinScore: number
StateID: MessageState
StatePermanent: boolean
Subject: string
UUID: string

Legend

  • Namespace
  • Function
  • Type alias
  • Interface
  • Interface with type parameter
  • Property
  • Enumeration
  • Class

Settings

Theme

Generated using TypeDoc

\ No newline at end of file +Message | node-mailjet
Options
All
  • Public
  • Public/Protected
  • All
Menu

Hierarchy

Index

Properties

ArrivedAt: string
AttachmentCount: number
AttemptCount: number
CampaignID: number
ContactAlt: string
ContactID: number
Delay: number
DestinationID: number
FilterTime: number
ID: number
IsClickTracked: boolean
IsHTMLPartIncluded: boolean
IsOpenTracked: boolean
IsTextPartIncluded: boolean
IsUnsubTracked: boolean
MessageSize: number
SenderID: number
SpamassRules: string
SpamassassinScore: number
StateID: MessageState
StatePermanent: boolean
Subject: string
UUID: string

Legend

  • Namespace
  • Function
  • Type alias
  • Interface
  • Interface with type parameter
  • Property
  • Enumeration
  • Class

Settings

Theme

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/interfaces/types_api_Message.Message.MessageHistory.html b/docs/interfaces/types_api_Message.Message.MessageHistory.html index e26f6bf..7ec5a75 100644 --- a/docs/interfaces/types_api_Message.Message.MessageHistory.html +++ b/docs/interfaces/types_api_Message.Message.MessageHistory.html @@ -1 +1 @@ -MessageHistory | node-mailjet
Options
All
  • Public
  • Public/Protected
  • All
Menu

Legend

  • Namespace
  • Function
  • Type alias
  • Interface
  • Interface with type parameter
  • Property
  • Enumeration
  • Class

Settings

Theme

Generated using TypeDoc

\ No newline at end of file +MessageHistory | node-mailjet
Options
All
  • Public
  • Public/Protected
  • All
Menu

Legend

  • Namespace
  • Function
  • Type alias
  • Interface
  • Interface with type parameter
  • Property
  • Enumeration
  • Class

Settings

Theme

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/interfaces/types_api_Message.Message.MessageInformation.html b/docs/interfaces/types_api_Message.Message.MessageInformation.html index a821dbc..4699fc3 100644 --- a/docs/interfaces/types_api_Message.Message.MessageInformation.html +++ b/docs/interfaces/types_api_Message.Message.MessageInformation.html @@ -1 +1 @@ -MessageInformation | node-mailjet
Options
All
  • Public
  • Public/Protected
  • All
Menu

Interface MessageInformation<Rules>

Type parameters

Hierarchy

  • MessageInformation

Index

Properties

CampaignID: number
ClickTrackedCount: number
ContactID: number
CreatedAt: string
ID: number
MessageSize: number
OpenTrackedCount: number
QueuedCount: number
SendEndAt: string
SentCount: number
SpamAssassinRules: Rules
SpamAssassinScore: number

Legend

  • Namespace
  • Function
  • Type alias
  • Interface
  • Interface with type parameter
  • Property
  • Enumeration
  • Class

Settings

Theme

Generated using TypeDoc

\ No newline at end of file +MessageInformation | node-mailjet
Options
All
  • Public
  • Public/Protected
  • All
Menu

Interface MessageInformation<Rules>

Type parameters

Hierarchy

  • MessageInformation

Index

Properties

CampaignID: number
ClickTrackedCount: number
ContactID: number
CreatedAt: string
ID: number
MessageSize: number
OpenTrackedCount: number
QueuedCount: number
SendEndAt: string
SentCount: number
SpamAssassinRules: Rules
SpamAssassinScore: number

Legend

  • Namespace
  • Function
  • Type alias
  • Interface
  • Interface with type parameter
  • Property
  • Enumeration
  • Class

Settings

Theme

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/interfaces/types_api_Message.Message.MessageTracked.html b/docs/interfaces/types_api_Message.Message.MessageTracked.html index b3844da..803a847 100644 --- a/docs/interfaces/types_api_Message.Message.MessageTracked.html +++ b/docs/interfaces/types_api_Message.Message.MessageTracked.html @@ -1 +1 @@ -MessageTracked | node-mailjet
Options
All
  • Public
  • Public/Protected
  • All
Menu

Legend

  • Namespace
  • Function
  • Type alias
  • Interface
  • Interface with type parameter
  • Property
  • Enumeration
  • Class

Settings

Theme

Generated using TypeDoc

\ No newline at end of file +MessageTracked | node-mailjet
Options
All
  • Public
  • Public/Protected
  • All
Menu

Legend

  • Namespace
  • Function
  • Type alias
  • Interface
  • Interface with type parameter
  • Property
  • Enumeration
  • Class

Settings

Theme

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/interfaces/types_api_MessageEvent.MessageEvent.BounceStatistic.html b/docs/interfaces/types_api_MessageEvent.MessageEvent.BounceStatistic.html index 61b2e67..a134d93 100644 --- a/docs/interfaces/types_api_MessageEvent.MessageEvent.BounceStatistic.html +++ b/docs/interfaces/types_api_MessageEvent.MessageEvent.BounceStatistic.html @@ -1 +1 @@ -BounceStatistic | node-mailjet
Options
All
  • Public
  • Public/Protected
  • All
Menu

Legend

  • Namespace
  • Function
  • Type alias
  • Interface
  • Interface with type parameter
  • Property
  • Enumeration
  • Class

Settings

Theme

Generated using TypeDoc

\ No newline at end of file +BounceStatistic | node-mailjet
Options
All
  • Public
  • Public/Protected
  • All
Menu

Legend

  • Namespace
  • Function
  • Type alias
  • Interface
  • Interface with type parameter
  • Property
  • Enumeration
  • Class

Settings

Theme

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/interfaces/types_api_MessageEvent.MessageEvent.ClickStatistic.html b/docs/interfaces/types_api_MessageEvent.MessageEvent.ClickStatistic.html index bee0a30..ba43ba3 100644 --- a/docs/interfaces/types_api_MessageEvent.MessageEvent.ClickStatistic.html +++ b/docs/interfaces/types_api_MessageEvent.MessageEvent.ClickStatistic.html @@ -1 +1 @@ -ClickStatistic | node-mailjet
Options
All
  • Public
  • Public/Protected
  • All
Menu

Legend

  • Namespace
  • Function
  • Type alias
  • Interface
  • Interface with type parameter
  • Property
  • Enumeration
  • Class

Settings

Theme

Generated using TypeDoc

\ No newline at end of file +ClickStatistic | node-mailjet
Options
All
  • Public
  • Public/Protected
  • All
Menu

Legend

  • Namespace
  • Function
  • Type alias
  • Interface
  • Interface with type parameter
  • Property
  • Enumeration
  • Class

Settings

Theme

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/interfaces/types_api_MessageEvent.MessageEvent.OpenInformation.html b/docs/interfaces/types_api_MessageEvent.MessageEvent.OpenInformation.html index ff52a3c..7dba93d 100644 --- a/docs/interfaces/types_api_MessageEvent.MessageEvent.OpenInformation.html +++ b/docs/interfaces/types_api_MessageEvent.MessageEvent.OpenInformation.html @@ -1 +1 @@ -OpenInformation | node-mailjet
Options
All
  • Public
  • Public/Protected
  • All
Menu

Legend

  • Namespace
  • Function
  • Type alias
  • Interface
  • Interface with type parameter
  • Property
  • Enumeration
  • Class

Settings

Theme

Generated using TypeDoc

\ No newline at end of file +OpenInformation | node-mailjet
Options
All
  • Public
  • Public/Protected
  • All
Menu

Legend

  • Namespace
  • Function
  • Type alias
  • Interface
  • Interface with type parameter
  • Property
  • Enumeration
  • Class

Settings

Theme

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/interfaces/types_api_Parse.Parse.ParseRoute.html b/docs/interfaces/types_api_Parse.Parse.ParseRoute.html index 524d406..74134f4 100644 --- a/docs/interfaces/types_api_Parse.Parse.ParseRoute.html +++ b/docs/interfaces/types_api_Parse.Parse.ParseRoute.html @@ -1 +1 @@ -ParseRoute | node-mailjet
Options
All
  • Public
  • Public/Protected
  • All
Menu

Legend

  • Namespace
  • Function
  • Type alias
  • Interface
  • Interface with type parameter
  • Property
  • Enumeration
  • Class

Settings

Theme

Generated using TypeDoc

\ No newline at end of file +ParseRoute | node-mailjet
Options
All
  • Public
  • Public/Protected
  • All
Menu

Legend

  • Namespace
  • Function
  • Type alias
  • Interface
  • Interface with type parameter
  • Property
  • Enumeration
  • Class

Settings

Theme

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/interfaces/types_api_Segmentation.Segmentation.ContactFilter.html b/docs/interfaces/types_api_Segmentation.Segmentation.ContactFilter.html index d022bf0..f1f1133 100644 --- a/docs/interfaces/types_api_Segmentation.Segmentation.ContactFilter.html +++ b/docs/interfaces/types_api_Segmentation.Segmentation.ContactFilter.html @@ -1 +1 @@ -ContactFilter | node-mailjet
Options
All
  • Public
  • Public/Protected
  • All
Menu

Legend

  • Namespace
  • Function
  • Type alias
  • Interface
  • Interface with type parameter
  • Property
  • Enumeration
  • Class

Settings

Theme

Generated using TypeDoc

\ No newline at end of file +ContactFilter | node-mailjet
Options
All
  • Public
  • Public/Protected
  • All
Menu

Legend

  • Namespace
  • Function
  • Type alias
  • Interface
  • Interface with type parameter
  • Property
  • Enumeration
  • Class

Settings

Theme

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/interfaces/types_api_SendEmail.SendEmailV3.Attachment.html b/docs/interfaces/types_api_SendEmail.SendEmailV3.Attachment.html index 20d66ba..0416a7f 100644 --- a/docs/interfaces/types_api_SendEmail.SendEmailV3.Attachment.html +++ b/docs/interfaces/types_api_SendEmail.SendEmailV3.Attachment.html @@ -1 +1 @@ -Attachment | node-mailjet
Options
All
  • Public
  • Public/Protected
  • All
Menu

Legend

  • Namespace
  • Function
  • Type alias
  • Interface
  • Interface with type parameter
  • Property
  • Enumeration
  • Class

Settings

Theme

Generated using TypeDoc

\ No newline at end of file +Attachment | node-mailjet
Options
All
  • Public
  • Public/Protected
  • All
Menu

Legend

  • Namespace
  • Function
  • Type alias
  • Interface
  • Interface with type parameter
  • Property
  • Enumeration
  • Class

Settings

Theme

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/interfaces/types_api_SendEmail.SendEmailV3.Recipient.html b/docs/interfaces/types_api_SendEmail.SendEmailV3.Recipient.html index ec7f12a..680fee1 100644 --- a/docs/interfaces/types_api_SendEmail.SendEmailV3.Recipient.html +++ b/docs/interfaces/types_api_SendEmail.SendEmailV3.Recipient.html @@ -1 +1 @@ -Recipient | node-mailjet
Options
All
  • Public
  • Public/Protected
  • All
Menu

Legend

  • Namespace
  • Function
  • Type alias
  • Interface
  • Interface with type parameter
  • Property
  • Enumeration
  • Class

Settings

Theme

Generated using TypeDoc

\ No newline at end of file +Recipient | node-mailjet
Options
All
  • Public
  • Public/Protected
  • All
Menu

Legend

  • Namespace
  • Function
  • Type alias
  • Interface
  • Interface with type parameter
  • Property
  • Enumeration
  • Class

Settings

Theme

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/interfaces/types_api_SendEmail.SendEmailV3.ResponseSent.html b/docs/interfaces/types_api_SendEmail.SendEmailV3.ResponseSent.html index 0cbe7d3..1f820f8 100644 --- a/docs/interfaces/types_api_SendEmail.SendEmailV3.ResponseSent.html +++ b/docs/interfaces/types_api_SendEmail.SendEmailV3.ResponseSent.html @@ -1 +1 @@ -ResponseSent | node-mailjet
Options
All
  • Public
  • Public/Protected
  • All
Menu

Legend

  • Namespace
  • Function
  • Type alias
  • Interface
  • Interface with type parameter
  • Property
  • Enumeration
  • Class

Settings

Theme

Generated using TypeDoc

\ No newline at end of file +ResponseSent | node-mailjet
Options
All
  • Public
  • Public/Protected
  • All
Menu

Legend

  • Namespace
  • Function
  • Type alias
  • Interface
  • Interface with type parameter
  • Property
  • Enumeration
  • Class

Settings

Theme

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/interfaces/types_api_SendEmail.SendEmailV3_1.Attachment.html b/docs/interfaces/types_api_SendEmail.SendEmailV3_1.Attachment.html index fd56cdb..38694a8 100644 --- a/docs/interfaces/types_api_SendEmail.SendEmailV3_1.Attachment.html +++ b/docs/interfaces/types_api_SendEmail.SendEmailV3_1.Attachment.html @@ -1 +1 @@ -Attachment | node-mailjet
Options
All
  • Public
  • Public/Protected
  • All
Menu

Legend

  • Namespace
  • Function
  • Type alias
  • Interface
  • Interface with type parameter
  • Property
  • Enumeration
  • Class

Settings

Theme

Generated using TypeDoc

\ No newline at end of file +Attachment | node-mailjet
Options
All
  • Public
  • Public/Protected
  • All
Menu

Legend

  • Namespace
  • Function
  • Type alias
  • Interface
  • Interface with type parameter
  • Property
  • Enumeration
  • Class

Settings

Theme

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/interfaces/types_api_SendEmail.SendEmailV3_1.EmailAddressTo.html b/docs/interfaces/types_api_SendEmail.SendEmailV3_1.EmailAddressTo.html index 1b0bb75..895ad2d 100644 --- a/docs/interfaces/types_api_SendEmail.SendEmailV3_1.EmailAddressTo.html +++ b/docs/interfaces/types_api_SendEmail.SendEmailV3_1.EmailAddressTo.html @@ -1 +1 @@ -EmailAddressTo | node-mailjet
Options
All
  • Public
  • Public/Protected
  • All
Menu

Legend

  • Namespace
  • Function
  • Type alias
  • Interface
  • Interface with type parameter
  • Property
  • Enumeration
  • Class

Settings

Theme

Generated using TypeDoc

\ No newline at end of file +EmailAddressTo | node-mailjet
Options
All
  • Public
  • Public/Protected
  • All
Menu

Legend

  • Namespace
  • Function
  • Type alias
  • Interface
  • Interface with type parameter
  • Property
  • Enumeration
  • Class

Settings

Theme

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/interfaces/types_api_SendEmail.SendEmailV3_1.InlinedAttachment.html b/docs/interfaces/types_api_SendEmail.SendEmailV3_1.InlinedAttachment.html index 8c94b5c..e32ab37 100644 --- a/docs/interfaces/types_api_SendEmail.SendEmailV3_1.InlinedAttachment.html +++ b/docs/interfaces/types_api_SendEmail.SendEmailV3_1.InlinedAttachment.html @@ -1 +1 @@ -InlinedAttachment | node-mailjet
Options
All
  • Public
  • Public/Protected
  • All
Menu

Legend

  • Namespace
  • Function
  • Type alias
  • Interface
  • Interface with type parameter
  • Property
  • Enumeration
  • Class

Settings

Theme

Generated using TypeDoc

\ No newline at end of file +InlinedAttachment | node-mailjet
Options
All
  • Public
  • Public/Protected
  • All
Menu

Legend

  • Namespace
  • Function
  • Type alias
  • Interface
  • Interface with type parameter
  • Property
  • Enumeration
  • Class

Settings

Theme

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/interfaces/types_api_SendEmail.SendEmailV3_1.Message.html b/docs/interfaces/types_api_SendEmail.SendEmailV3_1.Message.html index 0472d06..b6bfa55 100644 --- a/docs/interfaces/types_api_SendEmail.SendEmailV3_1.Message.html +++ b/docs/interfaces/types_api_SendEmail.SendEmailV3_1.Message.html @@ -1 +1 @@ -Message | node-mailjet
Options
All
  • Public
  • Public/Protected
  • All
Menu

Interface Message<Headers, Variables>

Type parameters

Hierarchy

  • Message

Index

Properties

Attachments?: SendEmailV3_1.Attachment[]
CustomCampaign?: string
CustomID?: string
DeduplicateCampaign?: boolean
EventPayload?: string
HTMLPart?: string
Headers: undefined | Headers
InlinedAttachments?: InlinedAttachment[]
Priority?: number
ReplyTo?: EmailAddressTo
Subject?: string
TemplateErrorDeliver?: boolean
TemplateErrorReporting?: EmailAddressTo
TemplateID?: number
TemplateLanguage?: boolean
TextPart?: string
TrackClicks?: TrackClicks
TrackOpens?: TrackOpens
URLTags?: string
Variables: undefined | Variables

Legend

  • Namespace
  • Function
  • Type alias
  • Interface
  • Interface with type parameter
  • Property
  • Enumeration
  • Class

Settings

Theme

Generated using TypeDoc

\ No newline at end of file +Message | node-mailjet
Options
All
  • Public
  • Public/Protected
  • All
Menu

Interface Message<Headers, Variables>

Type parameters

Hierarchy

  • Message

Index

Properties

Attachments?: SendEmailV3_1.Attachment[]
CustomCampaign?: string
CustomID?: string
DeduplicateCampaign?: boolean
EventPayload?: string
HTMLPart?: string
Headers: undefined | Headers
InlinedAttachments?: InlinedAttachment[]
Priority?: number
ReplyTo?: EmailAddressTo
Subject?: string
TemplateErrorDeliver?: boolean
TemplateErrorReporting?: EmailAddressTo
TemplateID?: number
TemplateLanguage?: boolean
TextPart?: string
TrackClicks?: TrackClicks
TrackOpens?: TrackOpens
URLTags?: string
Variables: undefined | Variables

Legend

  • Namespace
  • Function
  • Type alias
  • Interface
  • Interface with type parameter
  • Property
  • Enumeration
  • Class

Settings

Theme

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/interfaces/types_api_SendEmail.SendEmailV3_1.ResponseEmailAddressTo.html b/docs/interfaces/types_api_SendEmail.SendEmailV3_1.ResponseEmailAddressTo.html index c95d88c..2376170 100644 --- a/docs/interfaces/types_api_SendEmail.SendEmailV3_1.ResponseEmailAddressTo.html +++ b/docs/interfaces/types_api_SendEmail.SendEmailV3_1.ResponseEmailAddressTo.html @@ -1 +1 @@ -ResponseEmailAddressTo | node-mailjet
Options
All
  • Public
  • Public/Protected
  • All
Menu

Legend

  • Namespace
  • Function
  • Type alias
  • Interface
  • Interface with type parameter
  • Property
  • Enumeration
  • Class

Settings

Theme

Generated using TypeDoc

\ No newline at end of file +ResponseEmailAddressTo | node-mailjet
Options
All
  • Public
  • Public/Protected
  • All
Menu

Legend

  • Namespace
  • Function
  • Type alias
  • Interface
  • Interface with type parameter
  • Property
  • Enumeration
  • Class

Settings

Theme

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/interfaces/types_api_SendEmail.SendEmailV3_1.ResponseError.html b/docs/interfaces/types_api_SendEmail.SendEmailV3_1.ResponseError.html index 49475f6..1752448 100644 --- a/docs/interfaces/types_api_SendEmail.SendEmailV3_1.ResponseError.html +++ b/docs/interfaces/types_api_SendEmail.SendEmailV3_1.ResponseError.html @@ -1 +1 @@ -ResponseError | node-mailjet
Options
All
  • Public
  • Public/Protected
  • All
Menu

Legend

  • Namespace
  • Function
  • Type alias
  • Interface
  • Interface with type parameter
  • Property
  • Enumeration
  • Class

Settings

Theme

Generated using TypeDoc

\ No newline at end of file +ResponseError | node-mailjet
Options
All
  • Public
  • Public/Protected
  • All
Menu

Legend

  • Namespace
  • Function
  • Type alias
  • Interface
  • Interface with type parameter
  • Property
  • Enumeration
  • Class

Settings

Theme

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/interfaces/types_api_SendEmail.SendEmailV3_1.ResponseMessage.html b/docs/interfaces/types_api_SendEmail.SendEmailV3_1.ResponseMessage.html index 76b2a96..b6f6ad7 100644 --- a/docs/interfaces/types_api_SendEmail.SendEmailV3_1.ResponseMessage.html +++ b/docs/interfaces/types_api_SendEmail.SendEmailV3_1.ResponseMessage.html @@ -1 +1 @@ -ResponseMessage | node-mailjet
Options
All
  • Public
  • Public/Protected
  • All
Menu

Legend

  • Namespace
  • Function
  • Type alias
  • Interface
  • Interface with type parameter
  • Property
  • Enumeration
  • Class

Settings

Theme

Generated using TypeDoc

\ No newline at end of file +ResponseMessage | node-mailjet
Options
All
  • Public
  • Public/Protected
  • All
Menu

Legend

  • Namespace
  • Function
  • Type alias
  • Interface
  • Interface with type parameter
  • Property
  • Enumeration
  • Class

Settings

Theme

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/interfaces/types_api_SendMessage.SendMessage.Cost.html b/docs/interfaces/types_api_SendMessage.SendMessage.Cost.html index 6285275..81049a4 100644 --- a/docs/interfaces/types_api_SendMessage.SendMessage.Cost.html +++ b/docs/interfaces/types_api_SendMessage.SendMessage.Cost.html @@ -1 +1 @@ -Cost | node-mailjet
Options
All
  • Public
  • Public/Protected
  • All
Menu

Legend

  • Namespace
  • Function
  • Type alias
  • Interface
  • Interface with type parameter
  • Property
  • Enumeration
  • Class

Settings

Theme

Generated using TypeDoc

\ No newline at end of file +Cost | node-mailjet
Options
All
  • Public
  • Public/Protected
  • All
Menu

Legend

  • Namespace
  • Function
  • Type alias
  • Interface
  • Interface with type parameter
  • Property
  • Enumeration
  • Class

Settings

Theme

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/interfaces/types_api_SendMessage.SendMessage.SendStatus.html b/docs/interfaces/types_api_SendMessage.SendMessage.SendStatus.html index 9ec42ea..f653725 100644 --- a/docs/interfaces/types_api_SendMessage.SendMessage.SendStatus.html +++ b/docs/interfaces/types_api_SendMessage.SendMessage.SendStatus.html @@ -1 +1 @@ -SendStatus | node-mailjet
Options
All
  • Public
  • Public/Protected
  • All
Menu

Legend

  • Namespace
  • Function
  • Type alias
  • Interface
  • Interface with type parameter
  • Property
  • Enumeration
  • Class

Settings

Theme

Generated using TypeDoc

\ No newline at end of file +SendStatus | node-mailjet
Options
All
  • Public
  • Public/Protected
  • All
Menu

Legend

  • Namespace
  • Function
  • Type alias
  • Interface
  • Interface with type parameter
  • Property
  • Enumeration
  • Class

Settings

Theme

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/interfaces/types_api_SenderAddressAndDomain.DNS.DNS.html b/docs/interfaces/types_api_SenderAddressAndDomain.DNS.DNS.html index d0cfad5..cf73fcc 100644 --- a/docs/interfaces/types_api_SenderAddressAndDomain.DNS.DNS.html +++ b/docs/interfaces/types_api_SenderAddressAndDomain.DNS.DNS.html @@ -1 +1 @@ -DNS | node-mailjet
Options
All
  • Public
  • Public/Protected
  • All
Menu

Hierarchy

  • DNS

Index

Properties

DKIMRecordName: string
DKIMRecordValue: string
Domain: string
ID: number
IsCheckInProgress: boolean
LastCheckAt: string
OwnerShipToken: string
OwnerShipTokenRecordName: string
SPFRecordValue: string

Legend

  • Namespace
  • Function
  • Type alias
  • Interface
  • Interface with type parameter
  • Property
  • Enumeration
  • Class

Settings

Theme

Generated using TypeDoc

\ No newline at end of file +DNS | node-mailjet
Options
All
  • Public
  • Public/Protected
  • All
Menu

Hierarchy

  • DNS

Index

Properties

DKIMRecordName: string
DKIMRecordValue: string
Domain: string
ID: number
IsCheckInProgress: boolean
LastCheckAt: string
OwnerShipToken: string
OwnerShipTokenRecordName: string
SPFRecordValue: string

Legend

  • Namespace
  • Function
  • Type alias
  • Interface
  • Interface with type parameter
  • Property
  • Enumeration
  • Class

Settings

Theme

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/interfaces/types_api_SenderAddressAndDomain.DNS.DNSCheck.html b/docs/interfaces/types_api_SenderAddressAndDomain.DNS.DNSCheck.html index 66d78be..bdec761 100644 --- a/docs/interfaces/types_api_SenderAddressAndDomain.DNS.DNSCheck.html +++ b/docs/interfaces/types_api_SenderAddressAndDomain.DNS.DNSCheck.html @@ -1 +1 @@ -DNSCheck | node-mailjet
Options
All
  • Public
  • Public/Protected
  • All
Menu

Legend

  • Namespace
  • Function
  • Type alias
  • Interface
  • Interface with type parameter
  • Property
  • Enumeration
  • Class

Settings

Theme

Generated using TypeDoc

\ No newline at end of file +DNSCheck | node-mailjet
Options
All
  • Public
  • Public/Protected
  • All
Menu

Legend

  • Namespace
  • Function
  • Type alias
  • Interface
  • Interface with type parameter
  • Property
  • Enumeration
  • Class

Settings

Theme

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/interfaces/types_api_SenderAddressAndDomain.Metasender.MetaSender.html b/docs/interfaces/types_api_SenderAddressAndDomain.Metasender.MetaSender.html index 8038e0c..a38ea07 100644 --- a/docs/interfaces/types_api_SenderAddressAndDomain.Metasender.MetaSender.html +++ b/docs/interfaces/types_api_SenderAddressAndDomain.Metasender.MetaSender.html @@ -1 +1 @@ -MetaSender | node-mailjet
Options
All
  • Public
  • Public/Protected
  • All
Menu

Legend

  • Namespace
  • Function
  • Type alias
  • Interface
  • Interface with type parameter
  • Property
  • Enumeration
  • Class

Settings

Theme

Generated using TypeDoc

\ No newline at end of file +MetaSender | node-mailjet
Options
All
  • Public
  • Public/Protected
  • All
Menu

Legend

  • Namespace
  • Function
  • Type alias
  • Interface
  • Interface with type parameter
  • Property
  • Enumeration
  • Class

Settings

Theme

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/interfaces/types_api_SenderAddressAndDomain.Sender.Sender.html b/docs/interfaces/types_api_SenderAddressAndDomain.Sender.Sender.html index 1ffc2f4..d8fbd6b 100644 --- a/docs/interfaces/types_api_SenderAddressAndDomain.Sender.Sender.html +++ b/docs/interfaces/types_api_SenderAddressAndDomain.Sender.Sender.html @@ -1 +1 @@ -Sender | node-mailjet
Options
All
  • Public
  • Public/Protected
  • All
Menu

Legend

  • Namespace
  • Function
  • Type alias
  • Interface
  • Interface with type parameter
  • Property
  • Enumeration
  • Class

Settings

Theme

Generated using TypeDoc

\ No newline at end of file +Sender | node-mailjet
Options
All
  • Public
  • Public/Protected
  • All
Menu

Legend

  • Namespace
  • Function
  • Type alias
  • Interface
  • Interface with type parameter
  • Property
  • Enumeration
  • Class

Settings

Theme

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/interfaces/types_api_SenderAddressAndDomain.Sender.SenderValidate.html b/docs/interfaces/types_api_SenderAddressAndDomain.Sender.SenderValidate.html index 46c57fb..dd0cd4c 100644 --- a/docs/interfaces/types_api_SenderAddressAndDomain.Sender.SenderValidate.html +++ b/docs/interfaces/types_api_SenderAddressAndDomain.Sender.SenderValidate.html @@ -1 +1 @@ -SenderValidate | node-mailjet
Options
All
  • Public
  • Public/Protected
  • All
Menu

Legend

  • Namespace
  • Function
  • Type alias
  • Interface
  • Interface with type parameter
  • Property
  • Enumeration
  • Class

Settings

Theme

Generated using TypeDoc

\ No newline at end of file +SenderValidate | node-mailjet
Options
All
  • Public
  • Public/Protected
  • All
Menu

Legend

  • Namespace
  • Function
  • Type alias
  • Interface
  • Interface with type parameter
  • Property
  • Enumeration
  • Class

Settings

Theme

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/interfaces/types_api_Setting.APIKeyConfiguration.ApiKey.html b/docs/interfaces/types_api_Setting.APIKeyConfiguration.ApiKey.html index 4569445..28e3847 100644 --- a/docs/interfaces/types_api_Setting.APIKeyConfiguration.ApiKey.html +++ b/docs/interfaces/types_api_Setting.APIKeyConfiguration.ApiKey.html @@ -1 +1 @@ -ApiKey | node-mailjet
Options
All
  • Public
  • Public/Protected
  • All
Menu

Legend

  • Namespace
  • Function
  • Type alias
  • Interface
  • Interface with type parameter
  • Property
  • Enumeration
  • Class

Settings

Theme

Generated using TypeDoc

\ No newline at end of file +ApiKey | node-mailjet
Options
All
  • Public
  • Public/Protected
  • All
Menu

Legend

  • Namespace
  • Function
  • Type alias
  • Interface
  • Interface with type parameter
  • Property
  • Enumeration
  • Class

Settings

Theme

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/interfaces/types_api_Setting.AccountSetting.MyProfile.html b/docs/interfaces/types_api_Setting.AccountSetting.MyProfile.html index 0ce66d4..1e3359b 100644 --- a/docs/interfaces/types_api_Setting.AccountSetting.MyProfile.html +++ b/docs/interfaces/types_api_Setting.AccountSetting.MyProfile.html @@ -1 +1 @@ -MyProfile | node-mailjet
Options
All
  • Public
  • Public/Protected
  • All
Menu

Hierarchy

  • MyProfile

Index

Properties

AddressCity: string
AddressCountry: string
AddressPostalCode: string
AddressState: string
AddressStreet: string
BillingEmail: string
BirthdayAt: string
CompanyName: string
CompanyNumOfEmployees: string
ContactPhone: string
EstimatedVolume: number
Features: string
Firstname: string
ID: number
Industry: number
JobTitle: string
Lastname: string
UserID: number
VAT: number
VATNumber: string
Website: string

Legend

  • Namespace
  • Function
  • Type alias
  • Interface
  • Interface with type parameter
  • Property
  • Enumeration
  • Class

Settings

Theme

Generated using TypeDoc

\ No newline at end of file +MyProfile | node-mailjet
Options
All
  • Public
  • Public/Protected
  • All
Menu

Hierarchy

  • MyProfile

Index

Properties

AddressCity: string
AddressCountry: string
AddressPostalCode: string
AddressState: string
AddressStreet: string
BillingEmail: string
BirthdayAt: string
CompanyName: string
CompanyNumOfEmployees: string
ContactPhone: string
EstimatedVolume: number
Features: string
Firstname: string
ID: number
Industry: number
JobTitle: string
Lastname: string
UserID: number
VAT: number
VATNumber: string
Website: string

Legend

  • Namespace
  • Function
  • Type alias
  • Interface
  • Interface with type parameter
  • Property
  • Enumeration
  • Class

Settings

Theme

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/interfaces/types_api_Setting.AccountSetting.User.html b/docs/interfaces/types_api_Setting.AccountSetting.User.html index 05a72aa..609ae76 100644 --- a/docs/interfaces/types_api_Setting.AccountSetting.User.html +++ b/docs/interfaces/types_api_Setting.AccountSetting.User.html @@ -1 +1 @@ -User | node-mailjet
Options
All
  • Public
  • Public/Protected
  • All
Menu

Hierarchy

  • User

Index

Properties

ACL: string
CreatedAt: string
Email: string
FirstIp: string
ID: number
LastIp: string
LastLoginAt: string
Locale: string
MaxAllowedAPIKeys: number
Timezone: string
Username: string
WarnedRatelimitAt: string

Legend

  • Namespace
  • Function
  • Type alias
  • Interface
  • Interface with type parameter
  • Property
  • Enumeration
  • Class

Settings

Theme

Generated using TypeDoc

\ No newline at end of file +User | node-mailjet
Options
All
  • Public
  • Public/Protected
  • All
Menu

Hierarchy

  • User

Index

Properties

ACL: string
CreatedAt: string
Email: string
FirstIp: string
ID: number
LastIp: string
LastLoginAt: string
Locale: string
MaxAllowedAPIKeys: number
Timezone: string
Username: string
WarnedRatelimitAt: string

Legend

  • Namespace
  • Function
  • Type alias
  • Interface
  • Interface with type parameter
  • Property
  • Enumeration
  • Class

Settings

Theme

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/interfaces/types_api_Statistic.Statistic.CampaignOverview.html b/docs/interfaces/types_api_Statistic.Statistic.CampaignOverview.html index 7bf7c50..652416b 100644 --- a/docs/interfaces/types_api_Statistic.Statistic.CampaignOverview.html +++ b/docs/interfaces/types_api_Statistic.Statistic.CampaignOverview.html @@ -1 +1 @@ -CampaignOverview | node-mailjet
Options
All
  • Public
  • Public/Protected
  • All
Menu

Hierarchy

  • CampaignOverview

Index

Properties

ClickedCount: number
DeliveredCount: number
ID: number
OpenedCount: number
ProcessedCount: number
SendTimeStart: number
Starred: boolean
Subject: string
Title: string

Legend

  • Namespace
  • Function
  • Type alias
  • Interface
  • Interface with type parameter
  • Property
  • Enumeration
  • Class

Settings

Theme

Generated using TypeDoc

\ No newline at end of file +CampaignOverview | node-mailjet
Options
All
  • Public
  • Public/Protected
  • All
Menu

Hierarchy

  • CampaignOverview

Index

Properties

ClickedCount: number
DeliveredCount: number
ID: number
OpenedCount: number
ProcessedCount: number
SendTimeStart: number
Starred: boolean
Subject: string
Title: string

Legend

  • Namespace
  • Function
  • Type alias
  • Interface
  • Interface with type parameter
  • Property
  • Enumeration
  • Class

Settings

Theme

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/interfaces/types_api_Statistic.Statistic.ContactStatistic.html b/docs/interfaces/types_api_Statistic.Statistic.ContactStatistic.html index 6cd9c58..45a0616 100644 --- a/docs/interfaces/types_api_Statistic.Statistic.ContactStatistic.html +++ b/docs/interfaces/types_api_Statistic.Statistic.ContactStatistic.html @@ -1 +1 @@ -ContactStatistic | node-mailjet
Options
All
  • Public
  • Public/Protected
  • All
Menu

Hierarchy

  • ContactStatistic

Index

Properties

BlockedCount: number
BouncedCount: number
ClickedCount: number
ContactID: number
DeferredCount: number
DeliveredCount: number
HardbouncedCount: number
LastActivityAt: string
MarketingContacts: number
OpenedCount: number
ProcessedCount: number
QueuedCount: number
SoftbouncedCount: number
SpamComplaintCount: number
UnsubscribedCount: number
UserMarketingContacts: number
WorkFlowExitedCount: number

Legend

  • Namespace
  • Function
  • Type alias
  • Interface
  • Interface with type parameter
  • Property
  • Enumeration
  • Class

Settings

Theme

Generated using TypeDoc

\ No newline at end of file +ContactStatistic | node-mailjet
Options
All
  • Public
  • Public/Protected
  • All
Menu

Hierarchy

  • ContactStatistic

Index

Properties

BlockedCount: number
BouncedCount: number
ClickedCount: number
ContactID: number
DeferredCount: number
DeliveredCount: number
HardbouncedCount: number
LastActivityAt: string
MarketingContacts: number
OpenedCount: number
ProcessedCount: number
QueuedCount: number
SoftbouncedCount: number
SpamComplaintCount: number
UnsubscribedCount: number
UserMarketingContacts: number
WorkFlowExitedCount: number

Legend

  • Namespace
  • Function
  • Type alias
  • Interface
  • Interface with type parameter
  • Property
  • Enumeration
  • Class

Settings

Theme

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/interfaces/types_api_Statistic.Statistic.GEOStatistic.html b/docs/interfaces/types_api_Statistic.Statistic.GEOStatistic.html index 0294c63..6a99bf4 100644 --- a/docs/interfaces/types_api_Statistic.Statistic.GEOStatistic.html +++ b/docs/interfaces/types_api_Statistic.Statistic.GEOStatistic.html @@ -1 +1 @@ -GEOStatistic | node-mailjet
Options
All
  • Public
  • Public/Protected
  • All
Menu

Legend

  • Namespace
  • Function
  • Type alias
  • Interface
  • Interface with type parameter
  • Property
  • Enumeration
  • Class

Settings

Theme

Generated using TypeDoc

\ No newline at end of file +GEOStatistic | node-mailjet
Options
All
  • Public
  • Public/Protected
  • All
Menu

Legend

  • Namespace
  • Function
  • Type alias
  • Interface
  • Interface with type parameter
  • Property
  • Enumeration
  • Class

Settings

Theme

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/interfaces/types_api_Statistic.Statistic.LinkClickStatistic.html b/docs/interfaces/types_api_Statistic.Statistic.LinkClickStatistic.html index 57b3690..12fe0fe 100644 --- a/docs/interfaces/types_api_Statistic.Statistic.LinkClickStatistic.html +++ b/docs/interfaces/types_api_Statistic.Statistic.LinkClickStatistic.html @@ -1 +1 @@ -LinkClickStatistic | node-mailjet
Options
All
  • Public
  • Public/Protected
  • All
Menu

Legend

  • Namespace
  • Function
  • Type alias
  • Interface
  • Interface with type parameter
  • Property
  • Enumeration
  • Class

Settings

Theme

Generated using TypeDoc

\ No newline at end of file +LinkClickStatistic | node-mailjet
Options
All
  • Public
  • Public/Protected
  • All
Menu

Legend

  • Namespace
  • Function
  • Type alias
  • Interface
  • Interface with type parameter
  • Property
  • Enumeration
  • Class

Settings

Theme

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/interfaces/types_api_Statistic.Statistic.ListRecipientStatistic.html b/docs/interfaces/types_api_Statistic.Statistic.ListRecipientStatistic.html index 832b8fd..f4a7cf9 100644 --- a/docs/interfaces/types_api_Statistic.Statistic.ListRecipientStatistic.html +++ b/docs/interfaces/types_api_Statistic.Statistic.ListRecipientStatistic.html @@ -1 +1 @@ -ListRecipientStatistic | node-mailjet
Options
All
  • Public
  • Public/Protected
  • All
Menu

Type parameters

  • Data = unknown[]

Hierarchy

  • ListRecipientStatistic

Index

Properties

BlockedCount: number
BouncedCount: number
ClickedCount: number
Data: Data
DeferredCount: number
DeliveredCount: number
HardbouncedCount: number
LastActivityAt: string
ListRecipientID: number
OpenedCount: number
PreQueuedCount: number
ProcessedCount: number
QueuedCount: number
SoftbouncedCount: number
SpamComplaintCount: number
UnsubscribedCount: number
WorkFlowExitedCount: number

Legend

  • Namespace
  • Function
  • Type alias
  • Interface
  • Interface with type parameter
  • Property
  • Enumeration
  • Class

Settings

Theme

Generated using TypeDoc

\ No newline at end of file +ListRecipientStatistic | node-mailjet
Options
All
  • Public
  • Public/Protected
  • All
Menu

Type parameters

  • Data = unknown[]

Hierarchy

  • ListRecipientStatistic

Index

Properties

BlockedCount: number
BouncedCount: number
ClickedCount: number
Data: Data
DeferredCount: number
DeliveredCount: number
HardbouncedCount: number
LastActivityAt: string
ListRecipientID: number
OpenedCount: number
PreQueuedCount: number
ProcessedCount: number
QueuedCount: number
SoftbouncedCount: number
SpamComplaintCount: number
UnsubscribedCount: number
WorkFlowExitedCount: number

Legend

  • Namespace
  • Function
  • Type alias
  • Interface
  • Interface with type parameter
  • Property
  • Enumeration
  • Class

Settings

Theme

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/interfaces/types_api_Statistic.Statistic.RecipientESPStatistic.html b/docs/interfaces/types_api_Statistic.Statistic.RecipientESPStatistic.html index b6c7235..abbdced 100644 --- a/docs/interfaces/types_api_Statistic.Statistic.RecipientESPStatistic.html +++ b/docs/interfaces/types_api_Statistic.Statistic.RecipientESPStatistic.html @@ -1 +1 @@ -RecipientESPStatistic | node-mailjet
Options
All
  • Public
  • Public/Protected
  • All
Menu

Hierarchy

  • RecipientESPStatistic

Index

Properties

AttemptedMessagesCount?: number
ClickThroughRate?: number
ClickedMessagesCount?: number
DeferredMessagesCount?: number
DeferredRate?: number
DeliveredMessagesCount?: number
ESPName?: string
HardBouncedMessagesCount?: number
HardBouncedRate?: number
OpenRate?: number
OpenedMessagesCount?: number
SoftBouncedMessagesCount?: number
SoftBouncedRate?: number
SpamReportsCount?: number
SpamReportsRate?: number
UnsubscribedMessagesCount?: number
UnsubscribedRate?: number

Legend

  • Namespace
  • Function
  • Type alias
  • Interface
  • Interface with type parameter
  • Property
  • Enumeration
  • Class

Settings

Theme

Generated using TypeDoc

\ No newline at end of file +RecipientESPStatistic | node-mailjet
Options
All
  • Public
  • Public/Protected
  • All
Menu

Hierarchy

  • RecipientESPStatistic

Index

Properties

AttemptedMessagesCount?: number
ClickThroughRate?: number
ClickedMessagesCount?: number
DeferredMessagesCount?: number
DeferredRate?: number
DeliveredMessagesCount?: number
ESPName?: string
HardBouncedMessagesCount?: number
HardBouncedRate?: number
OpenRate?: number
OpenedMessagesCount?: number
SoftBouncedMessagesCount?: number
SoftBouncedRate?: number
SpamReportsCount?: number
SpamReportsRate?: number
UnsubscribedMessagesCount?: number
UnsubscribedRate?: number

Legend

  • Namespace
  • Function
  • Type alias
  • Interface
  • Interface with type parameter
  • Property
  • Enumeration
  • Class

Settings

Theme

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/interfaces/types_api_Statistic.Statistic.StatCounter.html b/docs/interfaces/types_api_Statistic.Statistic.StatCounter.html index 7d7dc4c..c6e0437 100644 --- a/docs/interfaces/types_api_Statistic.Statistic.StatCounter.html +++ b/docs/interfaces/types_api_Statistic.Statistic.StatCounter.html @@ -1 +1 @@ -StatCounter | node-mailjet
Options
All
  • Public
  • Public/Protected
  • All
Menu

Hierarchy

  • StatCounter

Index

Properties

APIKeyID: number
EventClickDelay: number
EventClickedCount: number
EventOpenDelay: number
EventOpenedCount: number
EventSpamCount: number
EventUnsubscribedCount: number
EventWorkflowExitedCount: number
MessageBlockedCount: number
MessageClickedCount: number
MessageDeferredCount: number
MessageHardBouncedCount: number
MessageOpenedCount: number
MessageQueuedCount: number
MessageSentCount: number
MessageSoftBouncedCount: number
MessageSpamCount: number
MessageUnsubscribedCount: number
MessageWorkFlowExitedCount: number
SourceID: number
Timeslice: string
Total: number

Legend

  • Namespace
  • Function
  • Type alias
  • Interface
  • Interface with type parameter
  • Property
  • Enumeration
  • Class

Settings

Theme

Generated using TypeDoc

\ No newline at end of file +StatCounter | node-mailjet
Options
All
  • Public
  • Public/Protected
  • All
Menu

Hierarchy

  • StatCounter

Index

Properties

APIKeyID: number
EventClickDelay: number
EventClickedCount: number
EventOpenDelay: number
EventOpenedCount: number
EventSpamCount: number
EventUnsubscribedCount: number
EventWorkflowExitedCount: number
MessageBlockedCount: number
MessageClickedCount: number
MessageDeferredCount: number
MessageHardBouncedCount: number
MessageOpenedCount: number
MessageQueuedCount: number
MessageSentCount: number
MessageSoftBouncedCount: number
MessageSpamCount: number
MessageUnsubscribedCount: number
MessageWorkFlowExitedCount: number
SourceID: number
Timeslice: string
Total: number

Legend

  • Namespace
  • Function
  • Type alias
  • Interface
  • Interface with type parameter
  • Property
  • Enumeration
  • Class

Settings

Theme

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/interfaces/types_api_Statistic.Statistic.TopLinkClicked.html b/docs/interfaces/types_api_Statistic.Statistic.TopLinkClicked.html index 3dfe10c..ac9d239 100644 --- a/docs/interfaces/types_api_Statistic.Statistic.TopLinkClicked.html +++ b/docs/interfaces/types_api_Statistic.Statistic.TopLinkClicked.html @@ -1 +1 @@ -TopLinkClicked | node-mailjet
Options
All
  • Public
  • Public/Protected
  • All
Menu

Legend

  • Namespace
  • Function
  • Type alias
  • Interface
  • Interface with type parameter
  • Property
  • Enumeration
  • Class

Settings

Theme

Generated using TypeDoc

\ No newline at end of file +TopLinkClicked | node-mailjet
Options
All
  • Public
  • Public/Protected
  • All
Menu

Legend

  • Namespace
  • Function
  • Type alias
  • Interface
  • Interface with type parameter
  • Property
  • Enumeration
  • Class

Settings

Theme

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/interfaces/types_api_Statistic.Statistic.UserAgentStatistic.html b/docs/interfaces/types_api_Statistic.Statistic.UserAgentStatistic.html index dc6a6c6..2d2c73a 100644 --- a/docs/interfaces/types_api_Statistic.Statistic.UserAgentStatistic.html +++ b/docs/interfaces/types_api_Statistic.Statistic.UserAgentStatistic.html @@ -1 +1 @@ -UserAgentStatistic | node-mailjet
Options
All
  • Public
  • Public/Protected
  • All
Menu

Legend

  • Namespace
  • Function
  • Type alias
  • Interface
  • Interface with type parameter
  • Property
  • Enumeration
  • Class

Settings

Theme

Generated using TypeDoc

\ No newline at end of file +UserAgentStatistic | node-mailjet
Options
All
  • Public
  • Public/Protected
  • All
Menu

Legend

  • Namespace
  • Function
  • Type alias
  • Interface
  • Interface with type parameter
  • Property
  • Enumeration
  • Class

Settings

Theme

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/interfaces/types_api_Template.Template.Headers.html b/docs/interfaces/types_api_Template.Template.Headers.html index 4d16c71..e6142d6 100644 --- a/docs/interfaces/types_api_Template.Template.Headers.html +++ b/docs/interfaces/types_api_Template.Template.Headers.html @@ -1 +1 @@ -Headers | node-mailjet
Options
All
  • Public
  • Public/Protected
  • All
Menu

Legend

  • Namespace
  • Function
  • Type alias
  • Interface
  • Interface with type parameter
  • Property
  • Enumeration
  • Class

Settings

Theme

Generated using TypeDoc

\ No newline at end of file +Headers | node-mailjet
Options
All
  • Public
  • Public/Protected
  • All
Menu

Legend

  • Namespace
  • Function
  • Type alias
  • Interface
  • Interface with type parameter
  • Property
  • Enumeration
  • Class

Settings

Theme

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/interfaces/types_api_Template.Template.Template.html b/docs/interfaces/types_api_Template.Template.Template.html index 5a7ff4a..0056a77 100644 --- a/docs/interfaces/types_api_Template.Template.Template.html +++ b/docs/interfaces/types_api_Template.Template.Template.html @@ -1 +1 @@ -Template | node-mailjet
Options
All
  • Public
  • Public/Protected
  • All
Menu

Hierarchy

  • Template

Index

Properties

Author: string
Categories: Categories
Copyright: string
CreatedAt: string
Description: string
EditMode: Template.EditMode
ID: number
IsStarred: boolean
IsTextPartGenerationEnabled: boolean
LastUpdatedAt: string
Locale: string
Name: string
OwnerId: number
OwnerType: OwnerType
Presets: string
Previews: string
Purposes: Purposes

Legend

  • Namespace
  • Function
  • Type alias
  • Interface
  • Interface with type parameter
  • Property
  • Enumeration
  • Class

Settings

Theme

Generated using TypeDoc

\ No newline at end of file +Template | node-mailjet
Options
All
  • Public
  • Public/Protected
  • All
Menu

Hierarchy

  • Template

Index

Properties

Author: string
Categories: Categories
Copyright: string
CreatedAt: string
Description: string
EditMode: Template.EditMode
ID: number
IsStarred: boolean
IsTextPartGenerationEnabled: boolean
LastUpdatedAt: string
Locale: string
Name: string
OwnerId: number
OwnerType: OwnerType
Presets: string
Previews: string
Purposes: Purposes

Legend

  • Namespace
  • Function
  • Type alias
  • Interface
  • Interface with type parameter
  • Property
  • Enumeration
  • Class

Settings

Theme

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/interfaces/types_api_Webhook.Webhook.EventCallbackUrl.html b/docs/interfaces/types_api_Webhook.Webhook.EventCallbackUrl.html index 7809b99..184283f 100644 --- a/docs/interfaces/types_api_Webhook.Webhook.EventCallbackUrl.html +++ b/docs/interfaces/types_api_Webhook.Webhook.EventCallbackUrl.html @@ -1 +1 @@ -EventCallbackUrl | node-mailjet
Options
All
  • Public
  • Public/Protected
  • All
Menu

Legend

  • Namespace
  • Function
  • Type alias
  • Interface
  • Interface with type parameter
  • Property
  • Enumeration
  • Class

Settings

Theme

Generated using TypeDoc

\ No newline at end of file +EventCallbackUrl | node-mailjet
Options
All
  • Public
  • Public/Protected
  • All
Menu

Legend

  • Namespace
  • Function
  • Type alias
  • Interface
  • Interface with type parameter
  • Property
  • Enumeration
  • Class

Settings

Theme

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/modules/client.html b/docs/modules/client.html index aa15ae7..adf8174 100644 --- a/docs/modules/client.html +++ b/docs/modules/client.html @@ -1 +1 @@ -client | node-mailjet
Options
All
  • Public
  • Public/Protected
  • All
Menu

Module client

Legend

  • Namespace
  • Function
  • Type alias
  • Interface
  • Interface with type parameter
  • Enumeration
  • Class

Settings

Theme

Generated using TypeDoc

\ No newline at end of file +client | node-mailjet
Options
All
  • Public
  • Public/Protected
  • All
Menu

Module client

Legend

  • Namespace
  • Function
  • Type alias
  • Interface
  • Interface with type parameter
  • Enumeration
  • Class

Settings

Theme

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/modules/request_Request.html b/docs/modules/request_Request.html index 9bf0a2d..0309d1a 100644 --- a/docs/modules/request_Request.html +++ b/docs/modules/request_Request.html @@ -1 +1 @@ -request/Request | node-mailjet
Options
All
  • Public
  • Public/Protected
  • All
Menu

Module request/Request

Legend

  • Namespace
  • Function
  • Type alias
  • Interface
  • Interface with type parameter
  • Enumeration
  • Class

Settings

Theme

Generated using TypeDoc

\ No newline at end of file +request/Request | node-mailjet
Options
All
  • Public
  • Public/Protected
  • All
Menu

Module request/Request

Legend

  • Namespace
  • Function
  • Type alias
  • Interface
  • Interface with type parameter
  • Enumeration
  • Class

Settings

Theme

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/modules/types.TArray.html b/docs/modules/types.TArray.html index 73183f6..4404889 100644 --- a/docs/modules/types.TArray.html +++ b/docs/modules/types.TArray.html @@ -1 +1 @@ -TArray | node-mailjet
Options
All
  • Public
  • Public/Protected
  • All
Menu

Namespace TArray

Index

Type aliases

Pair<T, K>: [T, K]

Type parameters

  • T

  • K

Pairs<T, K>: Pair<T, K>[]

Type parameters

  • T

  • K

PossibleArray<TValue>: TValue | TValue[]

Type parameters

  • TValue

SingleType<TValue>: TValue extends infer TSingle[] ? TSingle : TValue

Type parameters

  • TValue

TKeys<T>: Exclude<keyof T, keyof unknown[]>[]

Type parameters

  • T: unknown[]

TValues<T>: T[number][]

Type parameters

  • T: unknown[]

Legend

  • Namespace
  • Function
  • Type alias
  • Interface
  • Interface with type parameter
  • Enumeration
  • Class

Settings

Theme

Generated using TypeDoc

\ No newline at end of file +TArray | node-mailjet
Options
All
  • Public
  • Public/Protected
  • All
Menu

Namespace TArray

Index

Type aliases

Pair<T, K>: [T, K]

Type parameters

  • T

  • K

Pairs<T, K>: Pair<T, K>[]

Type parameters

  • T

  • K

PossibleArray<TValue>: TValue | TValue[]

Type parameters

  • TValue

SingleType<TValue>: TValue extends infer TSingle[] ? TSingle : TValue

Type parameters

  • TValue

TKeys<T>: Exclude<keyof T, keyof unknown[]>[]

Type parameters

  • T: unknown[]

TValues<T>: T[number][]

Type parameters

  • T: unknown[]

Legend

  • Namespace
  • Function
  • Type alias
  • Interface
  • Interface with type parameter
  • Enumeration
  • Class

Settings

Theme

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/modules/types.TFunction.html b/docs/modules/types.TFunction.html index b9a3f97..18d8ed7 100644 --- a/docs/modules/types.TFunction.html +++ b/docs/modules/types.TFunction.html @@ -1 +1 @@ -TFunction | node-mailjet
Options
All
  • Public
  • Public/Protected
  • All
Menu

Namespace TFunction

Legend

  • Namespace
  • Function
  • Type alias
  • Interface
  • Interface with type parameter
  • Enumeration
  • Class

Settings

Theme

Generated using TypeDoc

\ No newline at end of file +TFunction | node-mailjet
Options
All
  • Public
  • Public/Protected
  • All
Menu

Namespace TFunction

Legend

  • Namespace
  • Function
  • Type alias
  • Interface
  • Interface with type parameter
  • Enumeration
  • Class

Settings

Theme

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/modules/types.TObject.html b/docs/modules/types.TObject.html index dfcca8d..5ca90fb 100644 --- a/docs/modules/types.TObject.html +++ b/docs/modules/types.TObject.html @@ -1 +1 @@ -TObject | node-mailjet
Options
All
  • Public
  • Public/Protected
  • All
Menu

Namespace TObject

Index

Type aliases

MakeNil<T, TObjKeys>: { [ TKey in TObjKeys]?: T[TKey] | null }

Type parameters

  • T: Record<string, unknown>

  • TObjKeys: keyof T

MakeNilAll<T>: { [ TKey in keyof T]?: T[TKey] | null }

Type parameters

  • T: Record<string, unknown>

MakeOptional<T, K>: Omit<T, K> & Partial<T>

Type parameters

  • T

  • K: keyof T

MakeRequired<T, K>: Omit<T, K> & Required<Pick<T, K>>

Type parameters

  • T

  • K: keyof T

TKeys<T>: keyof T[]

Type parameters

  • T

TValues<TObj>: TObj extends Record<string, infer TKey> ? TKey[] : never

Type parameters

  • TObj

UnknownRec: Record<string, unknown>

Legend

  • Namespace
  • Function
  • Type alias
  • Interface
  • Interface with type parameter
  • Enumeration
  • Class

Settings

Theme

Generated using TypeDoc

\ No newline at end of file +TObject | node-mailjet
Options
All
  • Public
  • Public/Protected
  • All
Menu

Namespace TObject

Index

Type aliases

MakeNil<T, TObjKeys>: { [ TKey in TObjKeys]?: T[TKey] | null }

Type parameters

  • T: Record<string, unknown>

  • TObjKeys: keyof T

MakeNilAll<T>: { [ TKey in keyof T]?: T[TKey] | null }

Type parameters

  • T: Record<string, unknown>

MakeOptional<T, K>: Omit<T, K> & Partial<T>

Type parameters

  • T

  • K: keyof T

MakeRequired<T, K>: Omit<T, K> & Required<Pick<T, K>>

Type parameters

  • T

  • K: keyof T

TKeys<T>: keyof T[]

Type parameters

  • T

TValues<TObj>: TObj extends Record<string, infer TKey> ? TKey[] : never

Type parameters

  • TObj

UnknownRec: Record<string, unknown>

Legend

  • Namespace
  • Function
  • Type alias
  • Interface
  • Interface with type parameter
  • Enumeration
  • Class

Settings

Theme

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/modules/types_api_Campaign.DraftCampaign.html b/docs/modules/types_api_Campaign.DraftCampaign.html index 4d559a0..c592494 100644 --- a/docs/modules/types_api_Campaign.DraftCampaign.html +++ b/docs/modules/types_api_Campaign.DraftCampaign.html @@ -1 +1 @@ -DraftCampaign | node-mailjet
Options
All
  • Public
  • Public/Protected
  • All
Menu

Index

Type aliases

GetCampaignDraftDetailContentResponse<Headers>: CampaignDraftDetailContentResponse<Headers>

Type parameters

GetCampaignDraftQueryParams: Partial<Pagination> & { AXTesting?: number; Campaign?: number; ContactsList?: number; DeliveredAt?: string; EditMode?: DraftCampaign.EditMode; IsArchived?: boolean; IsCampaign?: boolean; IsDeleted?: boolean; IsHandled?: boolean; IsStarred?: boolean; Modified?: boolean; NewsLetterTemplate?: number; Status?: CampaignDraftStatus; Subject?: string; Template?: number }
GetCampaignDraftResponse: CampaignDraftResponse
GetCampaignDraftScheduleResponse: CampaignDraftScheduleResponse
GetCampaignDraftStatus: CampaignDraftStatusResponse
PostCampaignDraftBody<AXTesting>: { AXFraction?: number; AXFractionName?: string; AXTesting?: AXTesting; ContactsListAlt?: string; ContactsListID?: number; Current?: number; EditMode?: DraftCampaign.EditMode; IsStarred?: boolean; IsTextPartIncluded?: boolean; Locale: string; ReplyEmail?: string; SegmentationAlt?: string; SegmentationID?: number; Sender?: string; SenderEmail?: string; SenderName?: string; Subject: string; TemplateID?: number; Title?: string }

Type parameters

Type declaration

  • Optional AXFraction?: number
  • Optional AXFractionName?: string
  • Optional AXTesting?: AXTesting
  • Optional ContactsListAlt?: string
  • Optional ContactsListID?: number
  • Optional Current?: number
  • Optional EditMode?: DraftCampaign.EditMode
  • Optional IsStarred?: boolean
  • Optional IsTextPartIncluded?: boolean
  • Locale: string
  • Optional ReplyEmail?: string
  • Optional SegmentationAlt?: string
  • Optional SegmentationID?: number
  • Optional Sender?: string
  • Optional SenderEmail?: string
  • Optional SenderName?: string
  • Subject: string
  • Optional TemplateID?: number
  • Optional Title?: string
PostCampaignDraftDetailContentBody<Headers>: Partial<CampaignDraftDetailContent<Headers>>

Type parameters

PostCampaignDraftDetailContentResponse<Headers>: CampaignDraftDetailContentResponse<Headers>

Type parameters

PostCampaignDraftResponse: CampaignDraftResponse
PostCampaignDraftScheduleBody: { Date: string }

Type declaration

  • Date: string
PostCampaignDraftScheduleResponse: CampaignDraftScheduleResponse
PostCampaignDraftSend: CampaignDraftStatusResponse
PostCampaignDraftTest: CampaignDraftStatusResponse
PostCampaignDraftTestBody: { Recipients: DraftCampaign.Recipient[] }

Type declaration

PutCampaignDraftBody<AXTesting>: Omit<Partial<PostCampaignDraftBody<AXTesting>>, "ContactsListAlt"> & { Status?: CampaignDraftStatus }

Type parameters

PutCampaignDraftResponse: CampaignDraftResponse
PutCampaignDraftScheduleBody: Partial<PostCampaignDraftScheduleBody>
PutCampaignDraftScheduleResponse: CampaignDraftScheduleResponse

Legend

  • Namespace
  • Function
  • Type alias
  • Interface
  • Interface with type parameter
  • Enumeration
  • Class

Settings

Theme

Generated using TypeDoc

\ No newline at end of file +DraftCampaign | node-mailjet
Options
All
  • Public
  • Public/Protected
  • All
Menu

Index

Type aliases

GetCampaignDraftDetailContentResponse<Headers>: CampaignDraftDetailContentResponse<Headers>

Type parameters

GetCampaignDraftQueryParams: Partial<Pagination> & { AXTesting?: number; Campaign?: number; ContactsList?: number; DeliveredAt?: string; EditMode?: DraftCampaign.EditMode; IsArchived?: boolean; IsCampaign?: boolean; IsDeleted?: boolean; IsHandled?: boolean; IsStarred?: boolean; Modified?: boolean; NewsLetterTemplate?: number; Status?: CampaignDraftStatus; Subject?: string; Template?: number }
GetCampaignDraftResponse: CampaignDraftResponse
GetCampaignDraftScheduleResponse: CampaignDraftScheduleResponse
GetCampaignDraftStatus: CampaignDraftStatusResponse
PostCampaignDraftBody<AXTesting>: { AXFraction?: number; AXFractionName?: string; AXTesting?: AXTesting; ContactsListAlt?: string; ContactsListID?: number; Current?: number; EditMode?: DraftCampaign.EditMode; IsStarred?: boolean; IsTextPartIncluded?: boolean; Locale: string; ReplyEmail?: string; SegmentationAlt?: string; SegmentationID?: number; Sender?: string; SenderEmail?: string; SenderName?: string; Subject: string; TemplateID?: number; Title?: string }

Type parameters

Type declaration

  • Optional AXFraction?: number
  • Optional AXFractionName?: string
  • Optional AXTesting?: AXTesting
  • Optional ContactsListAlt?: string
  • Optional ContactsListID?: number
  • Optional Current?: number
  • Optional EditMode?: DraftCampaign.EditMode
  • Optional IsStarred?: boolean
  • Optional IsTextPartIncluded?: boolean
  • Locale: string
  • Optional ReplyEmail?: string
  • Optional SegmentationAlt?: string
  • Optional SegmentationID?: number
  • Optional Sender?: string
  • Optional SenderEmail?: string
  • Optional SenderName?: string
  • Subject: string
  • Optional TemplateID?: number
  • Optional Title?: string
PostCampaignDraftDetailContentBody<Headers>: Partial<CampaignDraftDetailContent<Headers>>

Type parameters

PostCampaignDraftDetailContentResponse<Headers>: CampaignDraftDetailContentResponse<Headers>

Type parameters

PostCampaignDraftResponse: CampaignDraftResponse
PostCampaignDraftScheduleBody: { Date: string }

Type declaration

  • Date: string
PostCampaignDraftScheduleResponse: CampaignDraftScheduleResponse
PostCampaignDraftSend: CampaignDraftStatusResponse
PostCampaignDraftTest: CampaignDraftStatusResponse
PostCampaignDraftTestBody: { Recipients: DraftCampaign.Recipient[] }

Type declaration

PutCampaignDraftBody<AXTesting>: Omit<Partial<PostCampaignDraftBody<AXTesting>>, "ContactsListAlt"> & { Status?: CampaignDraftStatus }

Type parameters

PutCampaignDraftResponse: CampaignDraftResponse
PutCampaignDraftScheduleBody: Partial<PostCampaignDraftScheduleBody>
PutCampaignDraftScheduleResponse: CampaignDraftScheduleResponse

Legend

  • Namespace
  • Function
  • Type alias
  • Interface
  • Interface with type parameter
  • Enumeration
  • Class

Settings

Theme

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/modules/types_api_Campaign.SentCampaign.html b/docs/modules/types_api_Campaign.SentCampaign.html index d579880..cfa999e 100644 --- a/docs/modules/types_api_Campaign.SentCampaign.html +++ b/docs/modules/types_api_Campaign.SentCampaign.html @@ -1 +1 @@ -SentCampaign | node-mailjet
Options
All
  • Public
  • Public/Protected
  • All
Menu

Index

Type aliases

GetCampaignQueryParams: Partial<TimestampPeriod> & Partial<Pagination> & { CampaignID?: number; ContactsListID?: number; CustomCampaign?: string; From?: string; FromDomain?: string; FromID?: number; FromType?: CampaignType; IsDeleted?: boolean; IsNewsletterTool?: boolean; IsStarred?: boolean; Period?: Period; WorkflowID?: number }
GetCampaignResponse: CampaignResponse
PutCampaignBody: { IsDeleted?: boolean; IsStarred?: boolean }

Type declaration

  • Optional IsDeleted?: boolean
  • Optional IsStarred?: boolean
PutCampaignResponse: CampaignResponse

Legend

  • Namespace
  • Function
  • Type alias
  • Interface
  • Interface with type parameter
  • Enumeration
  • Class

Settings

Theme

Generated using TypeDoc

\ No newline at end of file +SentCampaign | node-mailjet
Options
All
  • Public
  • Public/Protected
  • All
Menu

Index

Type aliases

GetCampaignQueryParams: Partial<TimestampPeriod> & Partial<Pagination> & { CampaignID?: number; ContactsListID?: number; CustomCampaign?: string; From?: string; FromDomain?: string; FromID?: number; FromType?: CampaignType; IsDeleted?: boolean; IsNewsletterTool?: boolean; IsStarred?: boolean; Period?: Period; WorkflowID?: number }
GetCampaignResponse: CampaignResponse
PutCampaignBody: { IsDeleted?: boolean; IsStarred?: boolean }

Type declaration

  • Optional IsDeleted?: boolean
  • Optional IsStarred?: boolean
PutCampaignResponse: CampaignResponse

Legend

  • Namespace
  • Function
  • Type alias
  • Interface
  • Interface with type parameter
  • Enumeration
  • Class

Settings

Theme

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/modules/types_api_Common.Common.html b/docs/modules/types_api_Common.Common.html index 2ec6d05..e39b871 100644 --- a/docs/modules/types_api_Common.Common.html +++ b/docs/modules/types_api_Common.Common.html @@ -1 +1 @@ -Common | node-mailjet
Options
All
  • Public
  • Public/Protected
  • All
Menu

Legend

  • Namespace
  • Function
  • Type alias
  • Interface
  • Interface with type parameter
  • Enumeration
  • Class

Settings

Theme

Generated using TypeDoc

\ No newline at end of file +Common | node-mailjet
Options
All
  • Public
  • Public/Protected
  • All
Menu

Legend

  • Namespace
  • Function
  • Type alias
  • Interface
  • Interface with type parameter
  • Enumeration
  • Class

Settings

Theme

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/modules/types_api_Contact.BulkContactManagement.html b/docs/modules/types_api_Contact.BulkContactManagement.html index 79dde0e..39a2452 100644 --- a/docs/modules/types_api_Contact.BulkContactManagement.html +++ b/docs/modules/types_api_Contact.BulkContactManagement.html @@ -1 +1 @@ -BulkContactManagement | node-mailjet
Options
All
  • Public
  • Public/Protected
  • All
Menu

Index

Type aliases

ContactBody<Properties>: { Email: string; IsExcludedFromCampaigns?: boolean; Name?: string; Properties?: Properties }

Type parameters

Type declaration

  • Email: string
  • Optional IsExcludedFromCampaigns?: boolean
  • Optional Name?: string
  • Optional Properties?: Properties
GetCSVImportQueryParams: Partial<Pagination>
GetCSVImportResponse: CSVImportResponse
GetContactManageManyContactsResponse: ContactManageManyContactsResponse
GetContactsListImportListResponse: Common.Response<ContactsListImportList[]>
GetContactsListManageManyContactsResponse: ContactManageManyContactsResponse
PostCSVImportBody: { ContactsListID: number; DataID: number; ErrTreshold?: number; ImportOptions?: string; Method?: ImportCSVMethod }

Type declaration

  • ContactsListID: number
  • DataID: number
  • Optional ErrTreshold?: number
  • Optional ImportOptions?: string
  • Optional Method?: ImportCSVMethod
PostCSVImportResponse: CSVImportResponse
PostContactManageManyContactsBody<Properties>: { Contacts: ContactBody<Properties>[]; ContactsLists?: BulkContactManagement.ContactList[] }

Type parameters

Type declaration

PostContactManageManyContactsResponse: JobResponse
PostContactsListImportListBody: { Action: ImportListAction; ListID: number }

Type declaration

PostContactsListImportListResponse: JobResponse
PostContactsListManageManyContactsBody<Properties>: { Action: ManageContactsAction; Contacts: ContactBody<Properties>[] }

Type parameters

Type declaration

PostContactsListManageManyContactsResponse: JobResponse
PutCSVImportBody: Partial<PostCSVImportBody> & { Status?: CSVImportStatus }
PutCSVImportResponse: CSVImportResponse

Legend

  • Namespace
  • Function
  • Type alias
  • Interface
  • Interface with type parameter
  • Enumeration
  • Class

Settings

Theme

Generated using TypeDoc

\ No newline at end of file +BulkContactManagement | node-mailjet
Options
All
  • Public
  • Public/Protected
  • All
Menu

Index

Type aliases

ContactBody<Properties>: { Email: string; IsExcludedFromCampaigns?: boolean; Name?: string; Properties?: Properties }

Type parameters

Type declaration

  • Email: string
  • Optional IsExcludedFromCampaigns?: boolean
  • Optional Name?: string
  • Optional Properties?: Properties
GetCSVImportQueryParams: Partial<Pagination>
GetCSVImportResponse: CSVImportResponse
GetContactManageManyContactsResponse: ContactManageManyContactsResponse
GetContactsListImportListResponse: Common.Response<ContactsListImportList[]>
GetContactsListManageManyContactsResponse: ContactManageManyContactsResponse
PostCSVImportBody: { ContactsListID: number; DataID: number; ErrTreshold?: number; ImportOptions?: string; Method?: ImportCSVMethod }

Type declaration

  • ContactsListID: number
  • DataID: number
  • Optional ErrTreshold?: number
  • Optional ImportOptions?: string
  • Optional Method?: ImportCSVMethod
PostCSVImportResponse: CSVImportResponse
PostContactManageManyContactsBody<Properties>: { Contacts: ContactBody<Properties>[]; ContactsLists?: BulkContactManagement.ContactList[] }

Type parameters

Type declaration

PostContactManageManyContactsResponse: JobResponse
PostContactsListImportListBody: { Action: ImportListAction; ListID: number }

Type declaration

PostContactsListImportListResponse: JobResponse
PostContactsListManageManyContactsBody<Properties>: { Action: ManageContactsAction; Contacts: ContactBody<Properties>[] }

Type parameters

Type declaration

PostContactsListManageManyContactsResponse: JobResponse
PutCSVImportBody: Partial<PostCSVImportBody> & { Status?: CSVImportStatus }
PutCSVImportResponse: CSVImportResponse

Legend

  • Namespace
  • Function
  • Type alias
  • Interface
  • Interface with type parameter
  • Enumeration
  • Class

Settings

Theme

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/modules/types_api_Contact.Contact.html b/docs/modules/types_api_Contact.Contact.html index 5eaf1e2..b16953a 100644 --- a/docs/modules/types_api_Contact.Contact.html +++ b/docs/modules/types_api_Contact.Contact.html @@ -1 +1 @@ -Contact | node-mailjet
Options
All
  • Public
  • Public/Protected
  • All
Menu

Index

Type aliases

GetContactQueryParams: Partial<Pagination> & { Campaign?: number; ContactsList?: number; IsExcludedFromCampaigns?: boolean }
GetContactResponse: ContactResponse
PostContactBody: { Email: string; IsExcludedFromCampaigns?: boolean; Name?: string }

Type declaration

  • Email: string
  • Optional IsExcludedFromCampaigns?: boolean
  • Optional Name?: string
PostContactResponse: ContactResponse
PutContactBody: Omit<PostContactBody, "Email">
PutContactResponse: ContactResponse

Legend

  • Namespace
  • Function
  • Type alias
  • Interface
  • Interface with type parameter
  • Enumeration
  • Class

Settings

Theme

Generated using TypeDoc

\ No newline at end of file +Contact | node-mailjet
Options
All
  • Public
  • Public/Protected
  • All
Menu

Index

Type aliases

GetContactQueryParams: Partial<Pagination> & { Campaign?: number; ContactsList?: number; IsExcludedFromCampaigns?: boolean }
GetContactResponse: ContactResponse
PostContactBody: { Email: string; IsExcludedFromCampaigns?: boolean; Name?: string }

Type declaration

  • Email: string
  • Optional IsExcludedFromCampaigns?: boolean
  • Optional Name?: string
PostContactResponse: ContactResponse
PutContactBody: Omit<PostContactBody, "Email">
PutContactResponse: ContactResponse

Legend

  • Namespace
  • Function
  • Type alias
  • Interface
  • Interface with type parameter
  • Enumeration
  • Class

Settings

Theme

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/modules/types_api_Contact.ContactList.html b/docs/modules/types_api_Contact.ContactList.html index 8910223..f6b4c0e 100644 --- a/docs/modules/types_api_Contact.ContactList.html +++ b/docs/modules/types_api_Contact.ContactList.html @@ -1 +1 @@ -ContactList | node-mailjet
Options
All
  • Public
  • Public/Protected
  • All
Menu

Index

Type aliases

GetContactListQueryParams: Partial<Pagination> & { Address?: string; ExcludeID?: number; IsDeleted?: boolean; Name?: string }
GetContactListResponse: ContactListResponse
PostContactListBody: { IsDeleted?: boolean; Name: string }

Type declaration

  • Optional IsDeleted?: boolean
  • Name: string
PostContactListResponse: ContactListResponse
PutContactListBody: Partial<PostContactListBody>
PutContactListResponse: ContactListResponse

Legend

  • Namespace
  • Function
  • Type alias
  • Interface
  • Interface with type parameter
  • Enumeration
  • Class

Settings

Theme

Generated using TypeDoc

\ No newline at end of file +ContactList | node-mailjet
Options
All
  • Public
  • Public/Protected
  • All
Menu

Index

Type aliases

GetContactListQueryParams: Partial<Pagination> & { Address?: string; ExcludeID?: number; IsDeleted?: boolean; Name?: string }
GetContactListResponse: ContactListResponse
PostContactListBody: { IsDeleted?: boolean; Name: string }

Type declaration

  • Optional IsDeleted?: boolean
  • Name: string
PostContactListResponse: ContactListResponse
PutContactListBody: Partial<PostContactListBody>
PutContactListResponse: ContactListResponse

Legend

  • Namespace
  • Function
  • Type alias
  • Interface
  • Interface with type parameter
  • Enumeration
  • Class

Settings

Theme

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/modules/types_api_Contact.ContactProperties.html b/docs/modules/types_api_Contact.ContactProperties.html index fa3d9c1..9e7d91a 100644 --- a/docs/modules/types_api_Contact.ContactProperties.html +++ b/docs/modules/types_api_Contact.ContactProperties.html @@ -1 +1 @@ -ContactProperties | node-mailjet
Options
All
  • Public
  • Public/Protected
  • All
Menu

Index

Type aliases

GetContactDataQueryParams: Partial<Pagination> & { Campaign?: number; ContactEmail?: string; ContactsList?: number; Fields?: string; LastActivityAt?: string }
GetContactDataResponse: ContactDataResponse
GetContactMetaDataQueryParams: Partial<Pagination> & { DataType?: DataType; Namespace?: NameSpace }
GetContactMetaDataResponse: ContactMetaDataResponse
PostContactMetaDataBody: { Datatype?: DataType; Name: string; NameSpace?: NameSpace }

Type declaration

PostContactMetaDataResponse: ContactMetaDataResponse
PutContactDataBody: { Data: ContactProperty[] }

Type declaration

PutContactDataResponse: ContactDataResponse
PutContactMetaDataBody: { Datatype?: DataType; Name?: string }

Type declaration

  • Optional Datatype?: DataType
  • Optional Name?: string
PutContactMetaDataResponse: ContactMetaDataResponse

Legend

  • Namespace
  • Function
  • Type alias
  • Interface
  • Interface with type parameter
  • Enumeration
  • Class

Settings

Theme

Generated using TypeDoc

\ No newline at end of file +ContactProperties | node-mailjet
Options
All
  • Public
  • Public/Protected
  • All
Menu

Index

Type aliases

GetContactDataQueryParams: Partial<Pagination> & { Campaign?: number; ContactEmail?: string; ContactsList?: number; Fields?: string; LastActivityAt?: string }
GetContactDataResponse: ContactDataResponse
GetContactMetaDataQueryParams: Partial<Pagination> & { DataType?: DataType; Namespace?: NameSpace }
GetContactMetaDataResponse: ContactMetaDataResponse
PostContactMetaDataBody: { Datatype?: DataType; Name: string; NameSpace?: NameSpace }

Type declaration

PostContactMetaDataResponse: ContactMetaDataResponse
PutContactDataBody: { Data: ContactProperty[] }

Type declaration

PutContactDataResponse: ContactDataResponse
PutContactMetaDataBody: { Datatype?: DataType; Name?: string }

Type declaration

  • Optional Datatype?: DataType
  • Optional Name?: string
PutContactMetaDataResponse: ContactMetaDataResponse

Legend

  • Namespace
  • Function
  • Type alias
  • Interface
  • Interface with type parameter
  • Enumeration
  • Class

Settings

Theme

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/modules/types_api_Contact.ContactSubscription.html b/docs/modules/types_api_Contact.ContactSubscription.html index 917ac8c..fda0aa0 100644 --- a/docs/modules/types_api_Contact.ContactSubscription.html +++ b/docs/modules/types_api_Contact.ContactSubscription.html @@ -1 +1 @@ -ContactSubscription | node-mailjet
Options
All
  • Public
  • Public/Protected
  • All
Menu

Index

Type aliases

GetContactGetContactsListsResponse: Common.Response<ContactsList[]>
GetContactsListSignupQueryParams: Partial<Pagination> & { Contact?: number; ContactsList?: number; Domain?: string; Email?: string; LocalPart?: string; MaxConfirmAt?: number; MaxSignupAt?: number; MinConfirmAt?: number; MinSignupAt?: number; SignupIp?: string; Source?: string; SourceID?: number }
GetContactsListSignupResponse: Common.Response<ContactsListSignup[]>
GetListRecipientQueryParams: Partial<Pagination> & { Blocked?: boolean; Contact?: number; ContactEmail?: string; ContactsList?: number; IgnoreDeleted?: boolean; IsExcludedFromCampaigns?: boolean; LastActivityAt?: string; ListName?: string; Opened?: boolean; Unsub?: boolean }
GetListRecipientResponse: ListRecipientResponse
PostContactManageContactsListsBody: { ContactsLists: BulkContactManagement.ContactList[] }

Type declaration

PostContactManageContactsListsResponse: Common.Response<{ ContactsLists: BulkContactManagement.ContactList[] }[]>
PostContactsListManageContactBody<Properties>: { Action: ManageContactsAction; Email: string; Name?: string; Properties?: Properties }

Type parameters

Type declaration

PostContactsListManageContactResponse<Properties>: Common.Response<ManageContacts<Properties>[]>

Type parameters

PostListRecipientBody: { ContactAlt?: string; ContactID: number; IsUnsubscribed?: boolean; ListAlt?: string; ListID: number }

Type declaration

  • Optional ContactAlt?: string
  • ContactID: number
  • Optional IsUnsubscribed?: boolean
  • Optional ListAlt?: string
  • ListID: number
PostListRecipientResponse: ListRecipientResponse
PutListRecipientBody: { IsUnsubscribed?: boolean }

Type declaration

  • Optional IsUnsubscribed?: boolean
PutListRecipientResponse: ListRecipientResponse

Legend

  • Namespace
  • Function
  • Type alias
  • Interface
  • Interface with type parameter
  • Enumeration
  • Class

Settings

Theme

Generated using TypeDoc

\ No newline at end of file +ContactSubscription | node-mailjet
Options
All
  • Public
  • Public/Protected
  • All
Menu

Index

Type aliases

GetContactGetContactsListsResponse: Common.Response<ContactsList[]>
GetContactsListSignupQueryParams: Partial<Pagination> & { Contact?: number; ContactsList?: number; Domain?: string; Email?: string; LocalPart?: string; MaxConfirmAt?: number; MaxSignupAt?: number; MinConfirmAt?: number; MinSignupAt?: number; SignupIp?: string; Source?: string; SourceID?: number }
GetContactsListSignupResponse: Common.Response<ContactsListSignup[]>
GetListRecipientQueryParams: Partial<Pagination> & { Blocked?: boolean; Contact?: number; ContactEmail?: string; ContactsList?: number; IgnoreDeleted?: boolean; IsExcludedFromCampaigns?: boolean; LastActivityAt?: string; ListName?: string; Opened?: boolean; Unsub?: boolean }
GetListRecipientResponse: ListRecipientResponse
PostContactManageContactsListsBody: { ContactsLists: BulkContactManagement.ContactList[] }

Type declaration

PostContactManageContactsListsResponse: Common.Response<{ ContactsLists: BulkContactManagement.ContactList[] }[]>
PostContactsListManageContactBody<Properties>: { Action: ManageContactsAction; Email: string; Name?: string; Properties?: Properties }

Type parameters

Type declaration

PostContactsListManageContactResponse<Properties>: Common.Response<ManageContacts<Properties>[]>

Type parameters

PostListRecipientBody: { ContactAlt?: string; ContactID: number; IsUnsubscribed?: boolean; ListAlt?: string; ListID: number }

Type declaration

  • Optional ContactAlt?: string
  • ContactID: number
  • Optional IsUnsubscribed?: boolean
  • Optional ListAlt?: string
  • ListID: number
PostListRecipientResponse: ListRecipientResponse
PutListRecipientBody: { IsUnsubscribed?: boolean }

Type declaration

  • Optional IsUnsubscribed?: boolean
PutListRecipientResponse: ListRecipientResponse

Legend

  • Namespace
  • Function
  • Type alias
  • Interface
  • Interface with type parameter
  • Enumeration
  • Class

Settings

Theme

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/modules/types_api_Contact.ContactVerification.html b/docs/modules/types_api_Contact.ContactVerification.html index 47a861b..86d370c 100644 --- a/docs/modules/types_api_Contact.ContactVerification.html +++ b/docs/modules/types_api_Contact.ContactVerification.html @@ -1 +1 @@ -ContactVerification | node-mailjet
Options
All
  • Public
  • Public/Protected
  • All
Menu

Legend

  • Namespace
  • Function
  • Type alias
  • Interface
  • Interface with type parameter
  • Enumeration
  • Class

Settings

Theme

Generated using TypeDoc

\ No newline at end of file +ContactVerification | node-mailjet
Options
All
  • Public
  • Public/Protected
  • All
Menu

Legend

  • Namespace
  • Function
  • Type alias
  • Interface
  • Interface with type parameter
  • Enumeration
  • Class

Settings

Theme

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/modules/types_api_Message.Message.html b/docs/modules/types_api_Message.Message.html index ac06530..babecea 100644 --- a/docs/modules/types_api_Message.Message.html +++ b/docs/modules/types_api_Message.Message.html @@ -1 +1 @@ -Message | node-mailjet
Options
All
  • Public
  • Public/Protected
  • All
Menu

Index

Type aliases

GetMessageHistoryResponse: Common.Response<MessageHistory[]>
GetMessageInformationQueryParams: Partial<TimestampPeriod> & Partial<Pagination> & { CampaignID?: number; ContactsList?: number; CustomCampaign?: string; From?: string; FromDomain?: string; FromID?: number; FromType?: FromType; IsDeleted?: boolean; IsNewsletterTool?: boolean; IsStarred?: boolean; MessageStatus?: MessageStatus; Period?: Period }
GetMessageInformationResponse<Rules>: Common.Response<MessageInformation<Rules>[]>

Type parameters

GetMessageQueryParams: Partial<TimestampPeriod> & Partial<Pagination> & { Campaign?: number; Contact?: number; CustomID?: string; Destination?: number; FromType?: FromType; MessageState?: MessageState; MessageStatus?: MessageStatus; PlanSubscription?: number; SenderID?: number; ShowContactAlt?: boolean; ShowCustomID?: boolean; ShowSubject?: boolean }
GetMessagesResponse: Common.Response<Message.Message[]>

Legend

  • Namespace
  • Function
  • Type alias
  • Interface
  • Interface with type parameter
  • Enumeration
  • Class

Settings

Theme

Generated using TypeDoc

\ No newline at end of file +Message | node-mailjet
Options
All
  • Public
  • Public/Protected
  • All
Menu

Index

Type aliases

GetMessageHistoryResponse: Common.Response<MessageHistory[]>
GetMessageInformationQueryParams: Partial<TimestampPeriod> & Partial<Pagination> & { CampaignID?: number; ContactsList?: number; CustomCampaign?: string; From?: string; FromDomain?: string; FromID?: number; FromType?: FromType; IsDeleted?: boolean; IsNewsletterTool?: boolean; IsStarred?: boolean; MessageStatus?: MessageStatus; Period?: Period }
GetMessageInformationResponse<Rules>: Common.Response<MessageInformation<Rules>[]>

Type parameters

GetMessageQueryParams: Partial<TimestampPeriod> & Partial<Pagination> & { Campaign?: number; Contact?: number; CustomID?: string; Destination?: number; FromType?: FromType; MessageState?: MessageState; MessageStatus?: MessageStatus; PlanSubscription?: number; SenderID?: number; ShowContactAlt?: boolean; ShowCustomID?: boolean; ShowSubject?: boolean }
GetMessagesResponse: Common.Response<Message.Message[]>

Legend

  • Namespace
  • Function
  • Type alias
  • Interface
  • Interface with type parameter
  • Enumeration
  • Class

Settings

Theme

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/modules/types_api_MessageEvent.MessageEvent.html b/docs/modules/types_api_MessageEvent.MessageEvent.html index fbc7334..77069a2 100644 --- a/docs/modules/types_api_MessageEvent.MessageEvent.html +++ b/docs/modules/types_api_MessageEvent.MessageEvent.html @@ -1 +1 @@ -MessageEvent | node-mailjet
Options
All
  • Public
  • Public/Protected
  • All
Menu

Index

Type aliases

GetBounceStatisticsQueryParams: Partial<TimestampPeriod> & Partial<Pagination> & { CampaignID?: number; ContactsList?: number; EventFromTs?: string; EventToTs?: string; Period?: Period }
GetBounceStatisticsResponse: Common.Response<BounceStatistic[]>
GetClickStatisticsQueryParams: Partial<TimestampPeriod> & Partial<Pagination> & { CampaignID?: number; ContactsList?: number; CustomCampaign?: string; EventFromTs?: string; EventToTs?: string; From?: string; FromDomain?: string; FromID?: number; FromType?: FromType; IsDeleted?: boolean; IsNewsletterTool?: boolean; MessageID?: number; MessageStatus?: MessageStatus; Period?: Period }
GetClickStatisticsResponse: Common.Response<ClickStatistic[]>
GetOpenInformationQueryParams: Partial<TimestampPeriod> & Partial<Pagination> & { CampaignID?: number; ContactsList?: number; CustomCampaign?: string; EventFromTs?: string; EventToTs?: string; From?: string; FromDomain?: string; FromID?: number; FromType?: FromType; IsDeleted?: boolean; MessageStatus?: MessageStatus; Period?: Period }
GetOpenInformationResponse: Common.Response<OpenInformation[]>

Legend

  • Namespace
  • Function
  • Type alias
  • Interface
  • Interface with type parameter
  • Enumeration
  • Class

Settings

Theme

Generated using TypeDoc

\ No newline at end of file +MessageEvent | node-mailjet
Options
All
  • Public
  • Public/Protected
  • All
Menu

Index

Type aliases

GetBounceStatisticsQueryParams: Partial<TimestampPeriod> & Partial<Pagination> & { CampaignID?: number; ContactsList?: number; EventFromTs?: string; EventToTs?: string; Period?: Period }
GetBounceStatisticsResponse: Common.Response<BounceStatistic[]>
GetClickStatisticsQueryParams: Partial<TimestampPeriod> & Partial<Pagination> & { CampaignID?: number; ContactsList?: number; CustomCampaign?: string; EventFromTs?: string; EventToTs?: string; From?: string; FromDomain?: string; FromID?: number; FromType?: FromType; IsDeleted?: boolean; IsNewsletterTool?: boolean; MessageID?: number; MessageStatus?: MessageStatus; Period?: Period }
GetClickStatisticsResponse: Common.Response<ClickStatistic[]>
GetOpenInformationQueryParams: Partial<TimestampPeriod> & Partial<Pagination> & { CampaignID?: number; ContactsList?: number; CustomCampaign?: string; EventFromTs?: string; EventToTs?: string; From?: string; FromDomain?: string; FromID?: number; FromType?: FromType; IsDeleted?: boolean; MessageStatus?: MessageStatus; Period?: Period }
GetOpenInformationResponse: Common.Response<OpenInformation[]>

Legend

  • Namespace
  • Function
  • Type alias
  • Interface
  • Interface with type parameter
  • Enumeration
  • Class

Settings

Theme

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/modules/types_api_Parse.Parse.html b/docs/modules/types_api_Parse.Parse.html index 0946aef..402d7d5 100644 --- a/docs/modules/types_api_Parse.Parse.html +++ b/docs/modules/types_api_Parse.Parse.html @@ -1 +1 @@ -Parse | node-mailjet
Options
All
  • Public
  • Public/Protected
  • All
Menu

Legend

  • Namespace
  • Function
  • Type alias
  • Interface
  • Interface with type parameter
  • Enumeration
  • Class

Settings

Theme

Generated using TypeDoc

\ No newline at end of file +Parse | node-mailjet
Options
All
  • Public
  • Public/Protected
  • All
Menu

Legend

  • Namespace
  • Function
  • Type alias
  • Interface
  • Interface with type parameter
  • Enumeration
  • Class

Settings

Theme

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/modules/types_api_SMSMessage.SMSMessage.html b/docs/modules/types_api_SMSMessage.SMSMessage.html index e80741e..bded145 100644 --- a/docs/modules/types_api_SMSMessage.SMSMessage.html +++ b/docs/modules/types_api_SMSMessage.SMSMessage.html @@ -1 +1 @@ -SMSMessage | node-mailjet
Options
All
  • Public
  • Public/Protected
  • All
Menu

Index

Type aliases

GetSMSCountQueryParams: Partial<TimestampPeriod> & { StatusCode?: string[]; To?: string }
GetSMSCountResponse: { Count: number }

Type declaration

  • Count: number
GetSMSExportResponse: SMSExport
GetSMSQueryParams: Partial<TimestampPeriod> & Partial<Pick<Pagination, "Limit" | "Offset">> & { IDs?: string; StatusCode?: string[]; To?: string }
GetSMSResponse: { Data: SMS[] }

Type declaration

PostSMSExportBody: TimestampPeriod
PostSMSExportResponse: SMSExport
SMS: { Cost: Cost; CreationTS: number; From: string; MessageID: string | number; SMSCount: number; SentTS: number; Status: SendStatus; To: string }

Type declaration

  • Cost: Cost
  • CreationTS: number
  • From: string
  • MessageID: string | number
  • SMSCount: number
  • SentTS: number
  • Status: SendStatus
  • To: string
SMSExport: { CreationTS: number; ExpirationTS: number; ID: number; Status: SendStatus; URL: string }

Type declaration

  • CreationTS: number
  • ExpirationTS: number
  • ID: number
  • Status: SendStatus
  • URL: string

Legend

  • Namespace
  • Function
  • Type alias
  • Interface
  • Interface with type parameter
  • Enumeration
  • Class

Settings

Theme

Generated using TypeDoc

\ No newline at end of file +SMSMessage | node-mailjet
Options
All
  • Public
  • Public/Protected
  • All
Menu

Index

Type aliases

GetSMSCountQueryParams: Partial<TimestampPeriod> & { StatusCode?: string[]; To?: string }
GetSMSCountResponse: { Count: number }

Type declaration

  • Count: number
GetSMSExportResponse: SMSExport
GetSMSQueryParams: Partial<TimestampPeriod> & Partial<Pick<Pagination, "Limit" | "Offset">> & { IDs?: string; StatusCode?: string[]; To?: string }
GetSMSResponse: { Data: SMS[] }

Type declaration

PostSMSExportBody: TimestampPeriod
PostSMSExportResponse: SMSExport
SMS: { Cost: Cost; CreationTS: number; From: string; MessageID: string | number; SMSCount: number; SentTS: number; Status: SendStatus; To: string }

Type declaration

  • Cost: Cost
  • CreationTS: number
  • From: string
  • MessageID: string | number
  • SMSCount: number
  • SentTS: number
  • Status: SendStatus
  • To: string
SMSExport: { CreationTS: number; ExpirationTS: number; ID: number; Status: SendStatus; URL: string }

Type declaration

  • CreationTS: number
  • ExpirationTS: number
  • ID: number
  • Status: SendStatus
  • URL: string

Legend

  • Namespace
  • Function
  • Type alias
  • Interface
  • Interface with type parameter
  • Enumeration
  • Class

Settings

Theme

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/modules/types_api_Segmentation.Segmentation.html b/docs/modules/types_api_Segmentation.Segmentation.html index 5e910f0..7cf90f0 100644 --- a/docs/modules/types_api_Segmentation.Segmentation.html +++ b/docs/modules/types_api_Segmentation.Segmentation.html @@ -1 +1 @@ -Segmentation | node-mailjet
Options
All
  • Public
  • Public/Protected
  • All
Menu

Index

Type aliases

GetContactFilterQueryParams: Partial<Pagination> & { ShowDeleted?: boolean; Status?: SegmentStatus }
GetContactFilterResponse: ContactFilterResponse
PostContactFilterBody: { Description?: string; Expression: string; Name: string }

Type declaration

  • Optional Description?: string
  • Expression: string
  • Name: string
PostContactFilterResponse: ContactFilterResponse
PutContactFilterBody: Partial<PostContactFilterBody> & { Status?: SegmentStatus }
PutContactFilterResponse: ContactFilterResponse

Legend

  • Namespace
  • Function
  • Type alias
  • Interface
  • Interface with type parameter
  • Enumeration
  • Class

Settings

Theme

Generated using TypeDoc

\ No newline at end of file +Segmentation | node-mailjet
Options
All
  • Public
  • Public/Protected
  • All
Menu

Index

Type aliases

GetContactFilterQueryParams: Partial<Pagination> & { ShowDeleted?: boolean; Status?: SegmentStatus }
GetContactFilterResponse: ContactFilterResponse
PostContactFilterBody: { Description?: string; Expression: string; Name: string }

Type declaration

  • Optional Description?: string
  • Expression: string
  • Name: string
PostContactFilterResponse: ContactFilterResponse
PutContactFilterBody: Partial<PostContactFilterBody> & { Status?: SegmentStatus }
PutContactFilterResponse: ContactFilterResponse

Legend

  • Namespace
  • Function
  • Type alias
  • Interface
  • Interface with type parameter
  • Enumeration
  • Class

Settings

Theme

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/modules/types_api_SendEmail.SendEmailV3.html b/docs/modules/types_api_SendEmail.SendEmailV3.html index b393d81..1f47891 100644 --- a/docs/modules/types_api_SendEmail.SendEmailV3.html +++ b/docs/modules/types_api_SendEmail.SendEmailV3.html @@ -1 +1 @@ -SendEmailV3 | node-mailjet
Options
All
  • Public
  • Public/Protected
  • All
Menu

Index

Type aliases

Body<Headers, Vars>: BodyMj & { Attachments?: SendEmailV3.Attachment[]; Bcc?: string; Cc?: string; FromEmail?: string; FromName?: string; Headers?: Headers; Html-part?: string; Inline_attachments?: SendEmailV3.Attachment[]; Recipients?: SendEmailV3.Recipient[]; Sender?: boolean; Subject?: string; Text-part?: string; To?: string; Vars?: Vars }

Type parameters

BodyMj: { Mj-CustomID?: string; Mj-EventPayload?: string; Mj-TemplateErrorDeliver?: MjTemplateErrorDeliver; Mj-TemplateErrorReporting?: string; Mj-TemplateID?: number; Mj-TemplateLanguage?: boolean; Mj-campaign?: string; Mj-deduplicatecampaign?: MjDeduplicateCampaign; Mj-prio?: number; Mj-trackopen?: MjTrackOpen }

Type declaration

  • Optional Mj-CustomID?: string
  • Optional Mj-EventPayload?: string
  • Optional Mj-TemplateErrorDeliver?: MjTemplateErrorDeliver
  • Optional Mj-TemplateErrorReporting?: string
  • Optional Mj-TemplateID?: number
  • Optional Mj-TemplateLanguage?: boolean
  • Optional Mj-campaign?: string
  • Optional Mj-deduplicatecampaign?: MjDeduplicateCampaign
  • Optional Mj-prio?: number
  • Optional Mj-trackopen?: MjTrackOpen
MjDeduplicateCampaign: 0 | 1
MjTemplateErrorDeliver: "0" | "deliver"
MjTrackOpen: 0 | 1 | 2
Response: { Sent: ResponseSent[] }

Type declaration

Legend

  • Namespace
  • Function
  • Type alias
  • Interface
  • Interface with type parameter
  • Enumeration
  • Class

Settings

Theme

Generated using TypeDoc

\ No newline at end of file +SendEmailV3 | node-mailjet
Options
All
  • Public
  • Public/Protected
  • All
Menu

Index

Type aliases

Body<Headers, Vars>: BodyMj & { Attachments?: SendEmailV3.Attachment[]; Bcc?: string; Cc?: string; FromEmail?: string; FromName?: string; Headers?: Headers; Html-part?: string; Inline_attachments?: SendEmailV3.Attachment[]; Recipients?: SendEmailV3.Recipient[]; Sender?: boolean; Subject?: string; Text-part?: string; To?: string; Vars?: Vars }

Type parameters

BodyMj: { Mj-CustomID?: string; Mj-EventPayload?: string; Mj-TemplateErrorDeliver?: MjTemplateErrorDeliver; Mj-TemplateErrorReporting?: string; Mj-TemplateID?: number; Mj-TemplateLanguage?: boolean; Mj-campaign?: string; Mj-deduplicatecampaign?: MjDeduplicateCampaign; Mj-prio?: number; Mj-trackopen?: MjTrackOpen }

Type declaration

  • Optional Mj-CustomID?: string
  • Optional Mj-EventPayload?: string
  • Optional Mj-TemplateErrorDeliver?: MjTemplateErrorDeliver
  • Optional Mj-TemplateErrorReporting?: string
  • Optional Mj-TemplateID?: number
  • Optional Mj-TemplateLanguage?: boolean
  • Optional Mj-campaign?: string
  • Optional Mj-deduplicatecampaign?: MjDeduplicateCampaign
  • Optional Mj-prio?: number
  • Optional Mj-trackopen?: MjTrackOpen
MjDeduplicateCampaign: 0 | 1
MjTemplateErrorDeliver: "0" | "deliver"
MjTrackOpen: 0 | 1 | 2
Response: { Sent: ResponseSent[] }

Type declaration

Legend

  • Namespace
  • Function
  • Type alias
  • Interface
  • Interface with type parameter
  • Enumeration
  • Class

Settings

Theme

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/modules/types_api_SendEmail.SendEmailV3_1.html b/docs/modules/types_api_SendEmail.SendEmailV3_1.html index 5a17ac6..0346809 100644 --- a/docs/modules/types_api_SendEmail.SendEmailV3_1.html +++ b/docs/modules/types_api_SendEmail.SendEmailV3_1.html @@ -1 +1 @@ -SendEmailV3_1 | node-mailjet
Options
All
  • Public
  • Public/Protected
  • All
Menu

Legend

  • Namespace
  • Function
  • Type alias
  • Interface
  • Interface with type parameter
  • Enumeration
  • Class

Settings

Theme

Generated using TypeDoc

\ No newline at end of file +SendEmailV3_1 | node-mailjet
Options
All
  • Public
  • Public/Protected
  • All
Menu

Legend

  • Namespace
  • Function
  • Type alias
  • Interface
  • Interface with type parameter
  • Enumeration
  • Class

Settings

Theme

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/modules/types_api_SendMessage.SendMessage.html b/docs/modules/types_api_SendMessage.SendMessage.html index 44482fc..12fa63c 100644 --- a/docs/modules/types_api_SendMessage.SendMessage.html +++ b/docs/modules/types_api_SendMessage.SendMessage.html @@ -1 +1 @@ -SendMessage | node-mailjet
Options
All
  • Public
  • Public/Protected
  • All
Menu

Index

Interfaces

Type aliases

Type aliases

Body: { From: string; Text: string; To: string }

Type declaration

  • From: string
  • Text: string
  • To: string
Response: { Cost: Cost; CreationTS: number; From: string; MessageID: string | number; SMSCount: number; SentTS: number; Status: SendStatus; Text: string; To: string }

Type declaration

  • Cost: Cost
  • CreationTS: number
  • From: string
  • MessageID: string | number
  • SMSCount: number
  • SentTS: number
  • Status: SendStatus
  • Text: string
  • To: string

Legend

  • Namespace
  • Function
  • Type alias
  • Interface
  • Interface with type parameter
  • Enumeration
  • Class

Settings

Theme

Generated using TypeDoc

\ No newline at end of file +SendMessage | node-mailjet
Options
All
  • Public
  • Public/Protected
  • All
Menu

Index

Interfaces

Type aliases

Type aliases

Body: { From: string; Text: string; To: string }

Type declaration

  • From: string
  • Text: string
  • To: string
Response: { Cost: Cost; CreationTS: number; From: string; MessageID: string | number; SMSCount: number; SentTS: number; Status: SendStatus; Text: string; To: string }

Type declaration

  • Cost: Cost
  • CreationTS: number
  • From: string
  • MessageID: string | number
  • SMSCount: number
  • SentTS: number
  • Status: SendStatus
  • Text: string
  • To: string

Legend

  • Namespace
  • Function
  • Type alias
  • Interface
  • Interface with type parameter
  • Enumeration
  • Class

Settings

Theme

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/modules/types_api_SenderAddressAndDomain.DNS.html b/docs/modules/types_api_SenderAddressAndDomain.DNS.html index f2ff152..d88d877 100644 --- a/docs/modules/types_api_SenderAddressAndDomain.DNS.html +++ b/docs/modules/types_api_SenderAddressAndDomain.DNS.html @@ -1 +1 @@ -DNS | node-mailjet
Options
All
  • Public
  • Public/Protected
  • All
Menu

Legend

  • Namespace
  • Function
  • Type alias
  • Interface
  • Interface with type parameter
  • Enumeration
  • Class

Settings

Theme

Generated using TypeDoc

\ No newline at end of file +DNS | node-mailjet
Options
All
  • Public
  • Public/Protected
  • All
Menu

Legend

  • Namespace
  • Function
  • Type alias
  • Interface
  • Interface with type parameter
  • Enumeration
  • Class

Settings

Theme

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/modules/types_api_SenderAddressAndDomain.Metasender.html b/docs/modules/types_api_SenderAddressAndDomain.Metasender.html index a67da28..01f436d 100644 --- a/docs/modules/types_api_SenderAddressAndDomain.Metasender.html +++ b/docs/modules/types_api_SenderAddressAndDomain.Metasender.html @@ -1 +1 @@ -Metasender | node-mailjet
Options
All
  • Public
  • Public/Protected
  • All
Menu

Index

Type aliases

GetMetaSenderQueryParams: Partial<Pagination> & { DNS?: number }
GetMetaSenderResponse: MetaSenderResponse
PostMetaSenderBody: { Description?: string; Email: string }

Type declaration

  • Optional Description?: string
  • Email: string
PostMetaSenderResponse: MetaSenderResponse
PutMetaSenderBody: Omit<PostMetaSenderBody, "Email">
PutMetaSenderResponse: MetaSenderResponse

Legend

  • Namespace
  • Function
  • Type alias
  • Interface
  • Interface with type parameter
  • Enumeration
  • Class

Settings

Theme

Generated using TypeDoc

\ No newline at end of file +Metasender | node-mailjet
Options
All
  • Public
  • Public/Protected
  • All
Menu

Index

Type aliases

GetMetaSenderQueryParams: Partial<Pagination> & { DNS?: number }
GetMetaSenderResponse: MetaSenderResponse
PostMetaSenderBody: { Description?: string; Email: string }

Type declaration

  • Optional Description?: string
  • Email: string
PostMetaSenderResponse: MetaSenderResponse
PutMetaSenderBody: Omit<PostMetaSenderBody, "Email">
PutMetaSenderResponse: MetaSenderResponse

Legend

  • Namespace
  • Function
  • Type alias
  • Interface
  • Interface with type parameter
  • Enumeration
  • Class

Settings

Theme

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/modules/types_api_SenderAddressAndDomain.Sender.html b/docs/modules/types_api_SenderAddressAndDomain.Sender.html index 5094866..0fd7615 100644 --- a/docs/modules/types_api_SenderAddressAndDomain.Sender.html +++ b/docs/modules/types_api_SenderAddressAndDomain.Sender.html @@ -1 +1 @@ -Sender | node-mailjet
Options
All
  • Public
  • Public/Protected
  • All
Menu

Index

Type aliases

GetSenderQueryParams: Partial<Pagination> & { DnsID?: number; Domain?: string; Email?: string; IsDomainSender?: boolean; LocalPart?: string; ShowDeleted?: boolean; Status?: SenderStatus }
GetSenderResponse: SenderResponse
PostSenderBody: { Email: string; EmailType?: EmailType; IsDefaultSender?: boolean; Name?: string }

Type declaration

  • Email: string
  • Optional EmailType?: EmailType
  • Optional IsDefaultSender?: boolean
  • Optional Name?: string
PostSenderResponse: SenderResponse
PostSenderValidateResponse: Common.Response<SenderValidate[]>
PutSenderBody: Omit<PostSenderBody, "Email">
PutSenderResponse: SenderResponse

Legend

  • Namespace
  • Function
  • Type alias
  • Interface
  • Interface with type parameter
  • Enumeration
  • Class

Settings

Theme

Generated using TypeDoc

\ No newline at end of file +Sender | node-mailjet
Options
All
  • Public
  • Public/Protected
  • All
Menu

Index

Type aliases

GetSenderQueryParams: Partial<Pagination> & { DnsID?: number; Domain?: string; Email?: string; IsDomainSender?: boolean; LocalPart?: string; ShowDeleted?: boolean; Status?: SenderStatus }
GetSenderResponse: SenderResponse
PostSenderBody: { Email: string; EmailType?: EmailType; IsDefaultSender?: boolean; Name?: string }

Type declaration

  • Email: string
  • Optional EmailType?: EmailType
  • Optional IsDefaultSender?: boolean
  • Optional Name?: string
PostSenderResponse: SenderResponse
PostSenderValidateResponse: Common.Response<SenderValidate[]>
PutSenderBody: Omit<PostSenderBody, "Email">
PutSenderResponse: SenderResponse

Legend

  • Namespace
  • Function
  • Type alias
  • Interface
  • Interface with type parameter
  • Enumeration
  • Class

Settings

Theme

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/modules/types_api_Setting.APIKeyConfiguration.html b/docs/modules/types_api_Setting.APIKeyConfiguration.html index e3e2df3..be1afc8 100644 --- a/docs/modules/types_api_Setting.APIKeyConfiguration.html +++ b/docs/modules/types_api_Setting.APIKeyConfiguration.html @@ -1 +1 @@ -APIKeyConfiguration | node-mailjet
Options
All
  • Public
  • Public/Protected
  • All
Menu

Index

Type aliases

GetApiKeyQueryParams: Partial<Pagination> & { APIKey?: string; IsActive?: boolean; IsMaster?: boolean; Name?: string }
GetApiKeyResponse: ApiKeyResponse
PostApiKeyBody: { ACL?: string; IsActive?: boolean; Name: string }

Type declaration

  • Optional ACL?: string
  • Optional IsActive?: boolean
  • Name: string
PostApiKeyResponse: ApiKeyResponse
PutApiKeyBody: Partial<PostApiKeyBody>
PutApiKeyResponse: ApiKeyResponse

Legend

  • Namespace
  • Function
  • Type alias
  • Interface
  • Interface with type parameter
  • Enumeration
  • Class

Settings

Theme

Generated using TypeDoc

\ No newline at end of file +APIKeyConfiguration | node-mailjet
Options
All
  • Public
  • Public/Protected
  • All
Menu

Index

Type aliases

GetApiKeyQueryParams: Partial<Pagination> & { APIKey?: string; IsActive?: boolean; IsMaster?: boolean; Name?: string }
GetApiKeyResponse: ApiKeyResponse
PostApiKeyBody: { ACL?: string; IsActive?: boolean; Name: string }

Type declaration

  • Optional ACL?: string
  • Optional IsActive?: boolean
  • Name: string
PostApiKeyResponse: ApiKeyResponse
PutApiKeyBody: Partial<PostApiKeyBody>
PutApiKeyResponse: ApiKeyResponse

Legend

  • Namespace
  • Function
  • Type alias
  • Interface
  • Interface with type parameter
  • Enumeration
  • Class

Settings

Theme

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/modules/types_api_Setting.AccountSetting.html b/docs/modules/types_api_Setting.AccountSetting.html index 47577a0..bbb6e9f 100644 --- a/docs/modules/types_api_Setting.AccountSetting.html +++ b/docs/modules/types_api_Setting.AccountSetting.html @@ -1 +1 @@ -AccountSetting | node-mailjet
Options
All
  • Public
  • Public/Protected
  • All
Menu

Legend

  • Namespace
  • Function
  • Type alias
  • Interface
  • Interface with type parameter
  • Enumeration
  • Class

Settings

Theme

Generated using TypeDoc

\ No newline at end of file +AccountSetting | node-mailjet
Options
All
  • Public
  • Public/Protected
  • All
Menu

Legend

  • Namespace
  • Function
  • Type alias
  • Interface
  • Interface with type parameter
  • Enumeration
  • Class

Settings

Theme

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/modules/types_api_Statistic.Statistic.html b/docs/modules/types_api_Statistic.Statistic.html index 6b2dd48..4d3ab4f 100644 --- a/docs/modules/types_api_Statistic.Statistic.html +++ b/docs/modules/types_api_Statistic.Statistic.html @@ -1 +1 @@ -Statistic | node-mailjet
Options
All
  • Public
  • Public/Protected
  • All
Menu

Index

Type aliases

GetCampaignOverviewQueryParams: Partial<Pagination> & { All?: boolean; Archived?: boolean; Drafts?: boolean; ID?: number; IDType?: CampaignOverviewIDType; Programmed?: boolean; Sent?: boolean; Starred?: boolean; Subject?: string }
GetCampaignOverviewResponse: Common.Response<CampaignOverview[]>
GetContactStatisticsQueryParams: Partial<Pagination> & { Blocked?: boolean; Bounced?: boolean; Click?: boolean; Deferred?: boolean; Hardbounced?: boolean; LastActivityAt?: string; MaxLastActivityAt?: string; MinLastActivityAt?: string; Open?: boolean; Queued?: boolean; Sent?: boolean; Softbounced?: boolean; Spam?: boolean; Unsubscribed?: boolean }
GetContactStatisticsResponse: Common.Response<ContactStatistic[]>
GetGEOStatisticsQueryParams: Partial<TimestampPeriod> & Partial<Pagination> & { CampaignID?: number; ContactsList?: number; CustomCampaign?: string; From?: string; FromDomain?: string; FromID?: number; FromType?: FromType; IsDeleted?: boolean; IsNewsletterTool?: boolean; IsStarred?: boolean; MessageStatus?: MessageStatus; Period?: Period }
GetGEOStatisticsResponse: Common.Response<GEOStatistic[]>
GetLinkClickStatisticsQueryParams: Partial<Pagination> & { CampaignID: number }
GetLinkClickStatisticsResponse: Common.Response<LinkClickStatistic[]>
GetListRecipientStatisticsQueryParams: Partial<Pagination> & { Blocked?: boolean; Bounced?: boolean; Click?: boolean; Contact?: number; ContactsList?: number; IsExcludedFromCampaigns?: boolean; IsUnsubscribed?: boolean; LastActivityAt?: string; MaxLastActivityAt?: string; MaxUnsubscribedAt?: string; MinLastActivityAt?: string; MinUnsubscribedAt?: string; Open?: boolean; Queued?: boolean; Sent?: boolean; ShowExtraData?: boolean; Spam?: boolean; TimeZone?: string; Unsubscribed?: boolean }
GetListRecipientStatisticsResponse<Data>: Common.Response<ListRecipientStatistic<Data>[]>

Type parameters

  • Data = unknown[]

GetRecipientESPStatisticsQueryParams: GetLinkClickStatisticsQueryParams & { ESP_Name?: number }
GetRecipientESPStatisticsResponse: Common.Response<RecipientESPStatistic[]>
GetStatCountersQueryParams: Partial<TimestampPeriod> & Partial<Pagination> & { CounterResolution: CounterResolution; CounterSource: CounterSource; CounterTiming: CounterTiming; SourceID?: number }
GetStatCountersResponse: Common.Response<StatCounter[]>
GetTopLinkClickedQueryParams: Partial<TimestampPeriod> & Partial<Pagination> & { ActualClicks?: boolean; CampaignID?: number; Contact?: number; ContactsList?: number; CustomCampaign?: string; From?: string; FromDomain?: string; FromID?: number; FromType?: FromType; IsDeleted?: boolean; IsNewsletterTool?: boolean; IsStarred?: boolean; Message?: number; Period?: Period }
GetTopLinkClickedResponse: Common.Response<TopLinkClicked[]>
GetUserAgentStatisticsQueryParams: Partial<TimestampPeriod> & Partial<Pagination> & { CampaignID?: number; ContactsList?: number; CustomCampaign?: string; Event?: EmailEvent; ExcludePlatform?: string; From?: string; FromDomain?: string; FromID?: number; FromType?: FromType; IsDeleted?: boolean; IsNewsletterTool?: boolean; IsStarred?: boolean; Period?: Period; Platform?: string }
GetUserAgentStatisticsResponse: Common.Response<UserAgentStatistic[]>

Legend

  • Namespace
  • Function
  • Type alias
  • Interface
  • Interface with type parameter
  • Enumeration
  • Class

Settings

Theme

Generated using TypeDoc

\ No newline at end of file +Statistic | node-mailjet
Options
All
  • Public
  • Public/Protected
  • All
Menu

Index

Type aliases

GetCampaignOverviewQueryParams: Partial<Pagination> & { All?: boolean; Archived?: boolean; Drafts?: boolean; ID?: number; IDType?: CampaignOverviewIDType; Programmed?: boolean; Sent?: boolean; Starred?: boolean; Subject?: string }
GetCampaignOverviewResponse: Common.Response<CampaignOverview[]>
GetContactStatisticsQueryParams: Partial<Pagination> & { Blocked?: boolean; Bounced?: boolean; Click?: boolean; Deferred?: boolean; Hardbounced?: boolean; LastActivityAt?: string; MaxLastActivityAt?: string; MinLastActivityAt?: string; Open?: boolean; Queued?: boolean; Sent?: boolean; Softbounced?: boolean; Spam?: boolean; Unsubscribed?: boolean }
GetContactStatisticsResponse: Common.Response<ContactStatistic[]>
GetGEOStatisticsQueryParams: Partial<TimestampPeriod> & Partial<Pagination> & { CampaignID?: number; ContactsList?: number; CustomCampaign?: string; From?: string; FromDomain?: string; FromID?: number; FromType?: FromType; IsDeleted?: boolean; IsNewsletterTool?: boolean; IsStarred?: boolean; MessageStatus?: MessageStatus; Period?: Period }
GetGEOStatisticsResponse: Common.Response<GEOStatistic[]>
GetLinkClickStatisticsQueryParams: Partial<Pagination> & { CampaignID: number }
GetLinkClickStatisticsResponse: Common.Response<LinkClickStatistic[]>
GetListRecipientStatisticsQueryParams: Partial<Pagination> & { Blocked?: boolean; Bounced?: boolean; Click?: boolean; Contact?: number; ContactsList?: number; IsExcludedFromCampaigns?: boolean; IsUnsubscribed?: boolean; LastActivityAt?: string; MaxLastActivityAt?: string; MaxUnsubscribedAt?: string; MinLastActivityAt?: string; MinUnsubscribedAt?: string; Open?: boolean; Queued?: boolean; Sent?: boolean; ShowExtraData?: boolean; Spam?: boolean; TimeZone?: string; Unsubscribed?: boolean }
GetListRecipientStatisticsResponse<Data>: Common.Response<ListRecipientStatistic<Data>[]>

Type parameters

  • Data = unknown[]

GetRecipientESPStatisticsQueryParams: GetLinkClickStatisticsQueryParams & { ESP_Name?: number }
GetRecipientESPStatisticsResponse: Common.Response<RecipientESPStatistic[]>
GetStatCountersQueryParams: Partial<TimestampPeriod> & Partial<Pagination> & { CounterResolution: CounterResolution; CounterSource: CounterSource; CounterTiming: CounterTiming; SourceID?: number }
GetStatCountersResponse: Common.Response<StatCounter[]>
GetTopLinkClickedQueryParams: Partial<TimestampPeriod> & Partial<Pagination> & { ActualClicks?: boolean; CampaignID?: number; Contact?: number; ContactsList?: number; CustomCampaign?: string; From?: string; FromDomain?: string; FromID?: number; FromType?: FromType; IsDeleted?: boolean; IsNewsletterTool?: boolean; IsStarred?: boolean; Message?: number; Period?: Period }
GetTopLinkClickedResponse: Common.Response<TopLinkClicked[]>
GetUserAgentStatisticsQueryParams: Partial<TimestampPeriod> & Partial<Pagination> & { CampaignID?: number; ContactsList?: number; CustomCampaign?: string; Event?: EmailEvent; ExcludePlatform?: string; From?: string; FromDomain?: string; FromID?: number; FromType?: FromType; IsDeleted?: boolean; IsNewsletterTool?: boolean; IsStarred?: boolean; Period?: Period; Platform?: string }
GetUserAgentStatisticsResponse: Common.Response<UserAgentStatistic[]>

Legend

  • Namespace
  • Function
  • Type alias
  • Interface
  • Interface with type parameter
  • Enumeration
  • Class

Settings

Theme

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/modules/types_api_Template.Template.html b/docs/modules/types_api_Template.Template.html index 4ca96f2..9d9bee9 100644 --- a/docs/modules/types_api_Template.Template.html +++ b/docs/modules/types_api_Template.Template.html @@ -1 +1 @@ -Template | node-mailjet
Options
All
  • Public
  • Public/Protected
  • All
Menu

Index

Type aliases

GetTemplateDetailContentResponse: TemplateDetailContentResponse
GetTemplateQueryParams: Partial<Pagination> & { Categories?: string; CategoriesSelectionMethod?: CategoriesSelectionMethod; EditMode?: Template.EditMode; Name?: string; OwnerType?: OwnerType; Purposes?: Purposes; PurposesSelectionMethod?: PurposesSelectionMethod }
GetTemplateResponse: TemplateResponse
PostTemplateBody: Partial<Omit<Template, "Name" | "ID" | "OwnerId" | "Previews" | "CreatedAt" | "LastUpdatedAt">> & { Name: string }
PostTemplateDetailContentBody: Partial<Omit<TemplateDetailContent, "Headers">> & { Headers?: Partial<Headers> }
PostTemplateDetailContentResponse: TemplateDetailContentResponse
PostTemplateResponse: TemplateResponse
PutTemplateBody: Partial<PostTemplateBody>
PutTemplateDetailContentBody: PostTemplateDetailContentBody
PutTemplateDetailContentResponse: TemplateDetailContentResponse
PutTemplateResponse: TemplateResponse
TemplateDetailContent: { Headers: Headers; Html-part: string; MJMLContent: string; Text-part: string }

Type declaration

  • Headers: Headers
  • Html-part: string
  • MJMLContent: string
  • Text-part: string

Legend

  • Namespace
  • Function
  • Type alias
  • Interface
  • Interface with type parameter
  • Enumeration
  • Class

Settings

Theme

Generated using TypeDoc

\ No newline at end of file +Template | node-mailjet
Options
All
  • Public
  • Public/Protected
  • All
Menu

Index

Type aliases

GetTemplateDetailContentResponse: TemplateDetailContentResponse
GetTemplateQueryParams: Partial<Pagination> & { Categories?: string; CategoriesSelectionMethod?: CategoriesSelectionMethod; EditMode?: Template.EditMode; Name?: string; OwnerType?: OwnerType; Purposes?: Purposes; PurposesSelectionMethod?: PurposesSelectionMethod }
GetTemplateResponse: TemplateResponse
PostTemplateBody: Partial<Omit<Template, "Name" | "ID" | "OwnerId" | "Previews" | "CreatedAt" | "LastUpdatedAt">> & { Name: string }
PostTemplateDetailContentBody: Partial<Omit<TemplateDetailContent, "Headers">> & { Headers?: Partial<Headers> }
PostTemplateDetailContentResponse: TemplateDetailContentResponse
PostTemplateResponse: TemplateResponse
PutTemplateBody: Partial<PostTemplateBody>
PutTemplateDetailContentBody: PostTemplateDetailContentBody
PutTemplateDetailContentResponse: TemplateDetailContentResponse
PutTemplateResponse: TemplateResponse
TemplateDetailContent: { Headers: Headers; Html-part: string; MJMLContent: string; Text-part: string }

Type declaration

  • Headers: Headers
  • Html-part: string
  • MJMLContent: string
  • Text-part: string

Legend

  • Namespace
  • Function
  • Type alias
  • Interface
  • Interface with type parameter
  • Enumeration
  • Class

Settings

Theme

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/modules/types_api_Webhook.Webhook.html b/docs/modules/types_api_Webhook.Webhook.html index 3bea15a..42760b6 100644 --- a/docs/modules/types_api_Webhook.Webhook.html +++ b/docs/modules/types_api_Webhook.Webhook.html @@ -1 +1 @@ -Webhook | node-mailjet
Options
All
  • Public
  • Public/Protected
  • All
Menu

Index

Type aliases

GetEventCallbackUrlQueryParams: Partial<Pagination> & { Backup?: boolean; EventType?: EventTypeValue; Status?: string; Version?: Version }
GetEventCallbackUrlResponse: EventCallbackUrlResponse
PostEventCallbackUrlBody: { EventType?: Webhook.EventType; IsBackup?: boolean; Status?: Status; Url: string }

Type declaration

PostEventCallbackUrlResponse: EventCallbackUrlResponse
PutEventCallbackUrlBody: Partial<PostEventCallbackUrlBody>
PutEventCallbackUrlResponse: EventCallbackUrlResponse
Version: 1 | 2

Legend

  • Namespace
  • Function
  • Type alias
  • Interface
  • Interface with type parameter
  • Enumeration
  • Class

Settings

Theme

Generated using TypeDoc

\ No newline at end of file +Webhook | node-mailjet
Options
All
  • Public
  • Public/Protected
  • All
Menu

Index

Type aliases

GetEventCallbackUrlQueryParams: Partial<Pagination> & { Backup?: boolean; EventType?: EventTypeValue; Status?: string; Version?: Version }
GetEventCallbackUrlResponse: EventCallbackUrlResponse
PostEventCallbackUrlBody: { EventType?: Webhook.EventType; IsBackup?: boolean; Status?: Status; Url: string }

Type declaration

PostEventCallbackUrlResponse: EventCallbackUrlResponse
PutEventCallbackUrlBody: Partial<PostEventCallbackUrlBody>
PutEventCallbackUrlResponse: EventCallbackUrlResponse
Version: 1 | 2

Legend

  • Namespace
  • Function
  • Type alias
  • Interface
  • Interface with type parameter
  • Enumeration
  • Class

Settings

Theme

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/modules/utils_isNil.html b/docs/modules/utils_isNil.html index d3b7975..0784852 100644 --- a/docs/modules/utils_isNil.html +++ b/docs/modules/utils_isNil.html @@ -1 +1 @@ -utils/isNil | node-mailjet
Options
All
  • Public
  • Public/Protected
  • All
Menu

Module utils/isNil

Legend

  • Namespace
  • Function
  • Type alias
  • Interface
  • Interface with type parameter
  • Enumeration
  • Class

Settings

Theme

Generated using TypeDoc

\ No newline at end of file +utils/isNil | node-mailjet
Options
All
  • Public
  • Public/Protected
  • All
Menu

Module utils/isNil

Legend

  • Namespace
  • Function
  • Type alias
  • Interface
  • Interface with type parameter
  • Enumeration
  • Class

Settings

Theme

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/modules/utils_isNull.html b/docs/modules/utils_isNull.html index c5ca2a5..1dee432 100644 --- a/docs/modules/utils_isNull.html +++ b/docs/modules/utils_isNull.html @@ -1 +1 @@ -utils/isNull | node-mailjet
Options
All
  • Public
  • Public/Protected
  • All
Menu

Module utils/isNull

Legend

  • Namespace
  • Function
  • Type alias
  • Interface
  • Interface with type parameter
  • Enumeration
  • Class

Settings

Theme

Generated using TypeDoc

\ No newline at end of file +utils/isNull | node-mailjet
Options
All
  • Public
  • Public/Protected
  • All
Menu

Module utils/isNull

Legend

  • Namespace
  • Function
  • Type alias
  • Interface
  • Interface with type parameter
  • Enumeration
  • Class

Settings

Theme

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/modules/utils_isPureObject.html b/docs/modules/utils_isPureObject.html index 4bd0206..e6335d4 100644 --- a/docs/modules/utils_isPureObject.html +++ b/docs/modules/utils_isPureObject.html @@ -1 +1 @@ -utils/isPureObject | node-mailjet
Options
All
  • Public
  • Public/Protected
  • All
Menu

Module utils/isPureObject

Legend

  • Namespace
  • Function
  • Type alias
  • Interface
  • Interface with type parameter
  • Enumeration
  • Class

Settings

Theme

Generated using TypeDoc

\ No newline at end of file +utils/isPureObject | node-mailjet
Options
All
  • Public
  • Public/Protected
  • All
Menu

Module utils/isPureObject

Legend

  • Namespace
  • Function
  • Type alias
  • Interface
  • Interface with type parameter
  • Enumeration
  • Class

Settings

Theme

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/modules/utils_isUndefined.html b/docs/modules/utils_isUndefined.html index 98502da..69484fc 100644 --- a/docs/modules/utils_isUndefined.html +++ b/docs/modules/utils_isUndefined.html @@ -1 +1 @@ -utils/isUndefined | node-mailjet
Options
All
  • Public
  • Public/Protected
  • All
Menu

Module utils/isUndefined

Legend

  • Namespace
  • Function
  • Type alias
  • Interface
  • Interface with type parameter
  • Enumeration
  • Class

Settings

Theme

Generated using TypeDoc

\ No newline at end of file +utils/isUndefined | node-mailjet
Options
All
  • Public
  • Public/Protected
  • All
Menu

Module utils/isUndefined

Legend

  • Namespace
  • Function
  • Type alias
  • Interface
  • Interface with type parameter
  • Enumeration
  • Class

Settings

Theme

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/modules/utils_setValueIfNotNil.html b/docs/modules/utils_setValueIfNotNil.html index 3792d4b..0655e9f 100644 --- a/docs/modules/utils_setValueIfNotNil.html +++ b/docs/modules/utils_setValueIfNotNil.html @@ -1 +1 @@ -utils/setValueIfNotNil | node-mailjet
Options
All
  • Public
  • Public/Protected
  • All
Menu

Module utils/setValueIfNotNil

Legend

  • Namespace
  • Function
  • Type alias
  • Interface
  • Interface with type parameter
  • Enumeration
  • Class

Settings

Theme

Generated using TypeDoc

\ No newline at end of file +utils/setValueIfNotNil | node-mailjet
Options
All
  • Public
  • Public/Protected
  • All
Menu

Module utils/setValueIfNotNil

Legend

  • Namespace
  • Function
  • Type alias
  • Interface
  • Interface with type parameter
  • Enumeration
  • Class

Settings

Theme

Generated using TypeDoc

\ No newline at end of file diff --git a/package-lock.json b/package-lock.json index 3dd944d..a2095af 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "node-mailjet", - "version": "6.0.5", + "version": "6.0.6", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "node-mailjet", - "version": "6.0.5", + "version": "6.0.6", "license": "MIT", "dependencies": { "axios": "1.7.4", diff --git a/package.json b/package.json index fb47c76..31f07da 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "node-mailjet", - "version": "6.0.5", + "version": "6.0.6", "main": "./dist/mailjet.node.js", "browser": "./dist/mailjet.web.js", "types": "./dist/declarations/index.d.ts",