/*! 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=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