/*! For license information please see sdk-qa.js.LICENSE.txt */ !function(){"use strict";var e={"./src/sdk-events.js":function(e,t,n){n.r(t),t.default={events:{optimove_sdk_metadata:{id:1007,supportedOnOptitrack:!0,supportedOnRealTime:!1,parameters:{event_platform:{id:1e3,name:"Platform",configName:"event_platform",type:"String",optional:!0,optiTrackDimensionId:8},event_device_type:{id:1001,name:"Device Type",configName:"event_device_type",type:"String",optional:!0,optiTrackDimensionId:9},event_os:{id:1002,name:"OS",configName:"event_os",type:"String",optional:!0,optiTrackDimensionId:10},event_native_mobile:{id:1003,name:"Native Mobile",configName:"event_native_mobile",type:"Boolean",optional:!0,optiTrackDimensionId:11},sdk_platform:{id:1,name:"SDK Platform",configName:"sdk_platform",type:"String",optional:!1,optiTrackDimensionId:12},sdk_version:{id:2,name:"SDK Version",configName:"sdk_version",type:"String",optional:!1,optiTrackDimensionId:13},config_file_url:{id:3,name:"Config file URL",configName:"config_file_url",type:"String",optional:!0,optiTrackDimensionId:14},app_ns:{id:4,name:"App Namespace",configName:"app_ns",type:"String",optional:!1,optiTrackDimensionId:15},campaign_name:{id:5,name:"UTM Campaign Name",configName:"campaign_name",type:"String",optional:!0,optiTrackDimensionId:16},campaign_keyword:{id:6,name:"UTM Campaign Keyword",configName:"campaign_keyword",type:"String",optional:!0,optiTrackDimensionId:17},campaign_source:{id:7,name:"UTM Campaign Source",configName:"campaign_source",type:"String",optional:!0,optiTrackDimensionId:18},campaign_medium:{id:8,name:"UTM Campaign Medium",configName:"campaign_medium",type:"String",optional:!0,optiTrackDimensionId:19},campaign_content:{id:9,name:"UTM Campaign Content",configName:"campaign_content",type:"String",optional:!0,optiTrackDimensionId:20},campaign_id:{id:10,name:"UTM Campaign ID",configName:"campaign_id",type:"String",optional:!0,optiTrackDimensionId:21},location:{id:11,name:"GEO Location",configName:"location",type:"String",optional:!0,optiTrackDimensionId:22},location_latitude:{id:12,name:"Location latitude",configName:"location_latitude",type:"String",optional:!0,optiTrackDimensionId:23},location_longitude:{id:13,name:"Location longitude",configName:"location_longitude",type:"String",optional:!0,optiTrackDimensionId:24},ip:{id:14,name:"IP Address",configName:"ip",type:"String",optional:!0,optiTrackDimensionId:25},language:{id:15,name:"Language",configName:"language",type:"String",optional:!0,optiTrackDimensionId:26}}},web_popup_displayed:{id:1008,supportedOnOptitrack:!0,supportedOnRealTime:!0,parameters:{event_platform:{id:1e3,name:"Platform",configName:"event_platform",type:"String",optional:!0,optiTrackDimensionId:8},event_device_type:{id:1001,name:"Device Type",configName:"event_device_type",type:"String",optional:!0,optiTrackDimensionId:9},event_os:{id:1002,name:"OS",configName:"event_os",type:"String",optional:!0,optiTrackDimensionId:10},event_native_mobile:{id:1003,name:"Native Mobile",configName:"event_native_mobile",type:"Boolean",optional:!0,optiTrackDimensionId:11},campaign_detail_id:{id:1,name:"Campaign Detail ID",configName:"campaign_detail_id",type:"Number",optional:!1,optiTrackDimensionId:12},template_id:{id:2,name:"Template ID",configName:"template_id",type:"Number",optional:!0,optiTrackDimensionId:13},action_channel_id:{id:3,name:"Action Channel ID",configName:"action_channel_id",type:"Number",optional:!0,optiTrackDimensionId:14},send_id:{id:4,name:"Send ID",configName:"send_id",type:"String",optional:!0,optiTrackDimensionId:15}}},ticket_opened:{id:1023,supportedOnOptitrack:!1,supportedOnRealTime:!0,parameters:{}},ticket_resolved:{id:1024,supportedOnOptitrack:!1,supportedOnRealTime:!0,parameters:{}},set_user_id_event:{id:1001,supportedOnOptitrack:!0,supportedOnRealTime:!0,parameters:{event_platform:{id:1e3,name:"Platform",configName:"event_platform",type:"String",optional:!0,optiTrackDimensionId:11},event_device_type:{id:1001,name:"Device Type",configName:"event_device_type",type:"String",optional:!0,optiTrackDimensionId:12},event_os:{id:1002,name:"OS",configName:"event_os",type:"String",optional:!0,optiTrackDimensionId:13},event_native_mobile:{id:1003,name:"Native Mobile",configName:"event_native_mobile",type:"Boolean",optional:!0,optiTrackDimensionId:14},originalVisitorId:{id:1,name:"Original Visitor ID",configName:"originalVisitorId",type:"String",optional:!1,optiTrackDimensionId:8},userId:{id:2,name:"User ID",configName:"userId",type:"String",optional:!1,optiTrackDimensionId:9},updatedVisitorId:{id:3,name:"Updated Visitor ID",configName:"updatedVisitorId",type:"String",optional:!1,optiTrackDimensionId:10}}},set_email_event:{id:1002,supportedOnOptitrack:!0,supportedOnRealTime:!0,parameters:{event_platform:{id:1e3,name:"Platform",configName:"event_platform",type:"String",optional:!0,optiTrackDimensionId:9},event_device_type:{id:1001,name:"Device Type",configName:"event_device_type",type:"String",optional:!0,optiTrackDimensionId:10},event_os:{id:1002,name:"OS",configName:"event_os",type:"String",optional:!0,optiTrackDimensionId:11},event_native_mobile:{id:1003,name:"Native Mobile",configName:"event_native_mobile",type:"Boolean",optional:!0,optiTrackDimensionId:12},email:{id:1,name:"Email",configName:"email",type:"String",optional:!1,optiTrackDimensionId:8}}},stitch_event:{id:1004,supportedOnOptitrack:!0,supportedOnRealTime:!1,parameters:{event_platform:{id:1e3,name:"Platform",configName:"event_platform",type:"String",optional:!0,optiTrackDimensionId:11},event_device_type:{id:1001,name:"Device Type",configName:"event_device_type",type:"String",optional:!0,optiTrackDimensionId:12},event_os:{id:1002,name:"OS",configName:"event_os",type:"String",optional:!0,optiTrackDimensionId:13},event_native_mobile:{id:1003,name:"Native Mobile",configName:"event_native_mobile",type:"Boolean",optional:!0,optiTrackDimensionId:14},sourcePublicCustomerId:{id:1,name:"Source Public Customer Id",configName:"sourcePublicCustomerId",type:"String",optional:!1,optiTrackDimensionId:8},sourceVisitorId:{id:2,name:"Source Visitor ID",configName:"sourceVisitorId",type:"String",optional:!1,optiTrackDimensionId:9},targetVisitorId:{id:3,name:"Target Visitor ID",configName:"targetVisitorId",type:"String",optional:!1,optiTrackDimensionId:10}}},user_agent_header_event:{id:1005,supportedOnOptitrack:!0,supportedOnRealTime:!1,parameters:{event_platform:{id:1e3,name:"Platform",configName:"event_platform",type:"String",optional:!0,optiTrackDimensionId:10},event_device_type:{id:1001,name:"Device Type",configName:"event_device_type",type:"String",optional:!0,optiTrackDimensionId:11},event_os:{id:1002,name:"OS",configName:"event_os",type:"String",optional:!0,optiTrackDimensionId:12},event_native_mobile:{id:1003,name:"Native Mobile",configName:"event_native_mobile",type:"Boolean",optional:!0,optiTrackDimensionId:13},user_agent_header1:{id:1,name:"User Agent Header Part 1",configName:"user_agent_header1",type:"String",optional:!1,optiTrackDimensionId:8},user_agent_header2:{id:2,name:"User Agent Header Part 2",configName:"user_agent_header2",type:"String",optional:!0,optiTrackDimensionId:9}}},set_page_visit:{id:1006,supportedOnOptitrack:!0,supportedOnRealTime:!0,parameters:{event_platform:{id:1e3,name:"Platform",configName:"event_platform",type:"String",optional:!0,optiTrackDimensionId:11},event_device_type:{id:1001,name:"Device Type",configName:"event_device_type",type:"String",optional:!0,optiTrackDimensionId:12},event_os:{id:1002,name:"OS",configName:"event_os",type:"String",optional:!0,optiTrackDimensionId:13},event_native_mobile:{id:1003,name:"Native Mobile",configName:"event_native_mobile",type:"Boolean",optional:!0,optiTrackDimensionId:14},customURL:{id:1,name:"Page URL",configName:"customURL",type:"String",optional:!1,optiTrackDimensionId:8},pageTitle:{id:2,name:"Page Title",configName:"pageTitle",type:"String",optional:!1,optiTrackDimensionId:9},category:{id:3,name:"Page Category",configName:"category",type:"String",optional:!0,optiTrackDimensionId:10}}}}}},"./src/web-test-tool/optmv-web-test-tool.js":function(e,t,n){n.r(t),n("./src/web-test-tool/style.css"),window.openTestTool=function(){new Promise((function(e,t){document.getElementsByTagName("body");var n=document.createElement("script");n.src="https://kit.fontawesome.com/608cdf593e.js";var i=document.createElement("script");i.src="https://unpkg.com/ag-grid-community/dist/ag-grid-community.min.noStyle.js";var a=document.createElement("link");a.rel="stylesheet",a.href="https://unpkg.com/ag-grid-community/dist/styles/ag-grid.css";var r=document.createElement("link");r.rel="stylesheet",r.href="https://unpkg.com/ag-grid-community/dist/styles/ag-theme-balham.css";var p=document.createElement("link");p.rel="stylesheet",p.href="https://maxcdn.bootstrapcdn.com/bootstrap/3.4.0/css/bootstrap.min.css";var l=document.createElement("link");l.rel="stylesheet",l.href="https://fonts.googleapis.com/icon?family=Material+Icons";var c=document.createElement("link");c.rel="stylesheet",c.href="https://fonts.googleapis.com/css?family=Roboto&display=swap";var d=document.createElement("div");d.id="optimoveSdkWebTool",d.className="ag-theme-balham";var s=document.createElement("div");s.id="optimovePanelHead",s.classList.add("panel-heading");var m=document.createElement("div");m.classList.add("optimoveTopHeadLine");var u=document.createElement("img");u.classList.add("optimoveIcon"),u.ID="optimoveIcon",u.src="data:image/png;base64,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";var g=document.createElement("div"),A=document.createElement("div"),f=document.createElement("p");f.innerHTML='The Web SDK testing tool has been replaced by Optimove\'s Events Log. Click here to learn more about the Events Log in Optimove\'s academy. If you are unable to access the academy article, please contact your customer success manager.',A.appendChild(f);var v=document.createElement("i");v.classList.add("material-icons"),v.innerText="clear";var h=document.createElement("div");h.appendChild(v),h.classList.add("optimoveWebToolBtnClose"),h.width="10px",h.height="10px",h.onclick=function(){o()};var b=document.createElement("div");b.classList.add("optimoveTopHeadLineText"),b.classList.add("font-weight-bold"),b.id="OptimoveSDKEvents",b.textContent="| Web SDK testing tool",m.appendChild(u),m.appendChild(b),m.appendChild(g),m.appendChild(h);var y=document.createElement("div"),I=document.createElement("div");I.id="optimoveBottomHeadLineText",I.classList.add("optimoveBottomHeadLineText"),I.textContent="",y.appendChild(I),s.appendChild(m),s.appendChild(y),s.appendChild(A),d.appendChild(s),document.body.appendChild(n),document.body.appendChild(i),document.body.appendChild(a),document.body.appendChild(r),document.body.appendChild(l),document.body.appendChild(c),document.body.appendChild(d),d.classList.add("open"),document.body.classList.add("optimoveSdkWebToolOpen"),i.onload=function(){e()}})).then((function(){window.sessionStorage.setItem("isSideBarShouldBeOpen",!0);var e=window.sessionStorage.getItem("OptimovePanelWidth");e>0&&(document.getElementById("optimoveSdkWebTool").style.width=e+"px",document.body.style.width=parseInt(window.width-e)+"px")}))};var o=function(){var e=document.getElementById("optimoveSdkWebTool");null!=e&&(e.remove(),window.sessionStorage.setItem("isSideBarShouldBeOpen",!1)),document.body.classList.remove("optimoveSdkWebToolOpen"),document.body.style.width="auto"};t.default=window.openTestTool},"./node_modules/css-loader/dist/cjs.js!./src/web-test-tool/style.css":function(e,t,n){n.r(t);var o=n("./node_modules/css-loader/dist/runtime/cssWithMappingToString.js"),i=n.n(o),a=n("./node_modules/css-loader/dist/runtime/api.js"),r=n.n(a)()(i());r.push([e.id,"#optimoveSdkWebTool {\n width: 0;\n display: none;\n position: fixed;\n right: 0;\n top: 0;\n background: #fff;\n z-index: 1000;\n}\n\n#optimoveSdkWebTool.open {\n max-width: 1500px;\n min-width: 340px;\n height: 100vh;\n}\n\n#optimoveSdkWebTool.open.ag-theme-balham {\n width: 500px;\n display: block;\n z-index: 10000;\n -webkit-box-shadow: -3px 0 10px 0 rgba(200, 200, 200, 0.5);\n box-shadow: -3px 0 10px 0 rgba(200, 200, 200, 0.5);\n}\n\n#optimovePanelHead.panel-heading {\n padding: 16px 15px;\n}\n\n#optimovePanelHead .popupDiv {\n padding-left: 334px;\n position: relative;\n}\n\n#optimovePanelHead .popupDiv .popup {\n position: absolute;\n visibility: hidden;\n}\n\n#optimovePanelHead .popupDiv .popup.showPopup {\n visibility: visible;\n display: block;\n background: #FFFFFF 0% 0% no-repeat padding-box;\n box-shadow: 0px 0px 6px #00000029;\n border-radius: 4px;\n opacity: 1;\n width: 109px;\n height: 84px;\n z-index: 1;\n}\n\n#optimovePanelHead .popupDiv .popup.showPopup .dockRightPicDiv {\n height: 28px;\n padding-top: 10px;\n padding-left: 10px;\n}\n\n#optimovePanelHead .popupDiv .popup.showPopup .dockRightPicDiv .dockText {\n display: inline;\n padding-left: 6px;\n}\n\n#optimovePanelHead .popupDiv .popup.showPopup .dockRightPicDiv:hover {\n background-color: #ECEFF1;\n}\n\n#optimovePanelHead .popupDiv .popup.showPopup .dockLeftPicDiv {\n height: 28px;\n padding-top: 10px;\n padding-left: 10px;\n}\n\n#optimovePanelHead .popupDiv .popup.showPopup .dockLeftPicDiv .dockText {\n display: inline;\n padding-left: 6px;\n}\n\n#optimovePanelHead .popupDiv .popup.showPopup .dockLeftPicDiv:hover {\n background-color: #ECEFF1;\n}\n\n#optimovePanelHead .popupDiv .popup.showPopup .dockBottomPicDiv {\n height: 28px;\n padding-top: 10px;\n padding-left: 10px;\n}\n\n#optimovePanelHead .popupDiv .popup.showPopup .dockBottomPicDiv .dockText {\n display: inline;\n padding-left: 6px;\n}\n\n#optimovePanelHead .popupDiv .popup.showPopup .dockBottomPicDiv:hover {\n background-color: #ECEFF1;\n}\n\n#optimovePanelHead .popup.popupNotShow {\n visibility: hidden;\n}\n\n#optimovePanelHead .popup.showPopup {\n visibility: visible;\n display: block;\n background: #FFFFFF 0% 0% no-repeat padding-box;\n box-shadow: 0px 0px 6px #00000029;\n border-radius: 4px;\n opacity: 1;\n width: 109px;\n height: 83px;\n}\n\n#optimoveSdkWebTool.open.ag-theme-balham .ag-header-cell {\n padding-right: 0px !important;\n}\n\n#optimoveSDKDragger {\n width: 10px;\n height: 100%;\n position: absolute;\n top: 0;\n left: 0;\n background: transparent;\n z-index: 1;\n cursor: w-resize;\n}\n\n#optimoveSdkWebTool .material-icons {\n cursor: pointer;\n}\n\n#optimoveSdkWebTool .ag-root-wrapper.ag-layout-normal {\n height: calc(100% - 103px);\n}\n\n#optimoveSdkWebTool.ag-theme-balham .is-not-main {\n background-color: #ECEFF1;\n}\n\n#optimoveSdkWebTool.ag-theme-balham .errorNotMainRow {\n background-color: #FFD6C2;\n}\n\n#optimoveSdkWebTool.ag-theme-balham .ag-header-cell {\n background-color: #CFD8DC;\n box-sizing: content-box;\n}\n\n#optimoveSdkWebTool .ag-header-cell-text {\n color: #455A64;\n text-align: left;\n font: Bold 12px/14px Roboto;\n letter-spacing: 0;\n opacity: 1;\n}\n\n#optimoveSdkWebTool.ag-theme-balham .ag-cell {\n text-align: left;\n font: Regular 12px/14px Roboto;\n letter-spacing: 0;\n color: #37474F;\n opacity: 1;\n}\n\n#optimoveSdkWebTool.ag-theme-balham .ag-cell .fa-angle-right,\n#optimoveSdkWebTool.ag-theme-balham .ag-cell .fa-angle-down {\n width: 18px;\n height: 18px;\n padding-right: 10px;\n color: #37474F;\n}\n\n#optimoveSdkWebTool.ag-theme-balham .ag-cell .fa-exclamation-circle {\n padding-right: 20px;\n width: 16px;\n height: 17px;\n color: #FF5500;\n}\n\n#optimoveSdkWebTool.ag-theme-balham .ag-cell.mainRowClass.optDateCell.optHasError {\n color: #FF5500;\n}\n\n#optimoveSdkWebTool.ag-theme-balham .ag-cell.mainRowClass.mainRowClassEventId.optHasError {\n color: #FF5500;\n}\n\n#optimoveSdkWebTool.ag-theme-balham .ag-cell.mainRowClass.mainRowClassEventName.optHasError {\n color: #FF5500;\n}\n\n#optimoveSdkWebTool.ag-theme-balham .ag-cell.notMainDateRowClass {\n left: 26px !important;\n white-space: normal !important;\n}\n\n#optimoveSdkWebTool.ag-theme-balham .ag-cell.notMainDateRowClass.optParametersWarning {\n color: #212121 !important;\n font-weight: bold !important;\n left: 26px !important;\n}\n\n#optimoveSdkWebTool .cell-wrap-text {\n white-space: normal !important;\n}\n\n#optimoveSdkWebTool.ag-theme-balham .ag-cell.notMainDateRowClass.optNotExistWarning {\n left: 26px !important;\n left: 26px !important;\n white-space: nowrap !important;\n color: #CF4500;\n}\n\n#optimoveSdkWebTool.ag-theme-balham .ag-cell.notMainRowClass.notMainRowClassEventId {\n left: 160px !important;\n font-weight: bold;\n white-space: normal !important;\n}\n\n#optimoveSdkWebTool.ag-theme-balham .ag-cell.notMainRowClass.notMainRowClassEventId.optHasError {\n left: 160px !important;\n font-weight: normal;\n white-space: normal !important;\n}\n\n#optimoveSdkWebTool .ag-overlay-loading-center {\n text-align: center;\n font: Bold 24px/28px Roboto;\n letter-spacing: 0;\n color: #F2F0F0;\n opacity: 1;\n}\n\n#optimoveSdkWebTool .cell-parameter-value {\n width: 540px !important;\n ;\n}\n\n#optimoveSdkWebTool .ag-full-width-row {\n padding-left: 8px !important;\n padding-top: 16px !important;\n}\n\n#optimoveSdkWebTool .optimoveTopHeadLine {\n display: flex;\n align-items: center;\n justify-content: space-around;\n}\n\n#optimoveSdkWebTool .optimoveTopHeadLine .optimoveWebToolBtnClose {\n box-shadow: none;\n}\n\n#optimoveSdkWebTool .optimoveTopHeadLine .optimoveWebToolBtnClose i {\n font-size: 17px;\n color: #5F7C8A;\n}\n\n#optimoveSdkWebTool .optimoveTopHeadLine .positionButtonPic {\n padding-right: 10px;\n}\n\n#optimoveSdkWebTool .optimoveTopHeadLineText {\n width: 100%;\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding-left: 8px;\n color: #424242;\n text-align: left;\n font: Light 18px/18px Roboto;\n letter-spacing: 0;\n opacity: 1;\n font-weight: 300;\n font-size: 18px;\n}\n\n#optimoveSdkWebTool .optimoveBottomHeadLineText {\n display: flex;\n align-items: center;\n justify-content: space-between;\n width: 100%;\n padding: 10px 0 5px;\n text-align: left;\n font: Regular 12px/16px Roboto;\n letter-spacing: 0;\n color: #546E7A;\n opacity: 1;\n}\n\n#optimoveSdkWebTool .opvArrowNoParams {\n visibility: hidden;\n}\n\n#optimoveSdkWebTool .btn-link.opt-btn-link {\n padding-top: 5px;\n padding-left: 0px;\n border: 0;\n cursor: pointer;\n color: #00AAFF;\n font-size: 12px;\n font-weight: 700;\n user-select: none;\n text-shadow: none;\n background-color: white !important;\n}\n\n#optimoveSdkWebTool .btn-link.opt-btn-link:hover {\n color: #00699E !important;\n text-decoration: none;\n}\n\n#optimoveSdkWebTool .opt-btn-link.btn-link.disable-btn:hover {\n color: #B0BEC5 !important;\n}\n\n#optimoveSdkWebTool.ag-theme-balham .ag-header-cell::after,\n.ag-theme-balham .ag-header-group-cell::after {\n border-right: none;\n}\n\n#optimoveSdkWebTool .ag-row-hover {\n background-color: #F5F7F7 !important;\n}\n\n#optimoveSdkWebTool.ag-theme-balham .ag-row-selected.opti-row-class {\n background-color: white !important;\n border-color: #d9dcde;\n}\n\n#optimoveSdkWebTool.ag-theme-balham .ag-root {\n border: 0px !important;\n}\n\n#optimoveSdkWebTool.ag-theme-balham .ag-overlay-loading-center {\n border: 0px !important;\n}","",{version:3,sources:["webpack://./src/web-test-tool/style.css"],names:[],mappings:"AAAA;IACI,QAAQ;IACR,aAAa;IACb,eAAe;IACf,QAAQ;IACR,MAAM;IACN,gBAAgB;IAChB,aAAa;AACjB;;AAEA;IACI,iBAAiB;IACjB,gBAAgB;IAChB,aAAa;AACjB;;AAEA;IACI,YAAY;IACZ,cAAc;IACd,cAAc;IACd,0DAA0D;IAC1D,kDAAkD;AACtD;;AAEA;IACI,kBAAkB;AACtB;;AAEA;IACI,mBAAmB;IACnB,kBAAkB;AACtB;;AAEA;IACI,kBAAkB;IAClB,kBAAkB;AACtB;;AAEA;IACI,mBAAmB;IACnB,cAAc;IACd,+CAA+C;IAC/C,iCAAiC;IACjC,kBAAkB;IAClB,UAAU;IACV,YAAY;IACZ,YAAY;IACZ,UAAU;AACd;;AAEA;IACI,YAAY;IACZ,iBAAiB;IACjB,kBAAkB;AACtB;;AAEA;IACI,eAAe;IACf,iBAAiB;AACrB;;AAEA;IACI,yBAAyB;AAC7B;;AAEA;IACI,YAAY;IACZ,iBAAiB;IACjB,kBAAkB;AACtB;;AAEA;IACI,eAAe;IACf,iBAAiB;AACrB;;AAEA;IACI,yBAAyB;AAC7B;;AAEA;IACI,YAAY;IACZ,iBAAiB;IACjB,kBAAkB;AACtB;;AAEA;IACI,eAAe;IACf,iBAAiB;AACrB;;AAEA;IACI,yBAAyB;AAC7B;;AAEA;IACI,kBAAkB;AACtB;;AAEA;IACI,mBAAmB;IACnB,cAAc;IACd,+CAA+C;IAC/C,iCAAiC;IACjC,kBAAkB;IAClB,UAAU;IACV,YAAY;IACZ,YAAY;AAChB;;AAEA;IACI,6BAA6B;AACjC;;AAEA;IACI,WAAW;IACX,YAAY;IACZ,kBAAkB;IAClB,MAAM;IACN,OAAO;IACP,uBAAuB;IACvB,UAAU;IACV,gBAAgB;AACpB;;AAEA;IACI,eAAe;AACnB;;AAEA;IACI,0BAA0B;AAC9B;;AAEA;IACI,yBAAyB;AAC7B;;AAEA;IACI,yBAAyB;AAC7B;;AAEA;IACI,yBAAyB;IACzB,uBAAuB;AAC3B;;AAEA;IACI,cAAc;IACd,gBAAgB;IAChB,2BAA2B;IAC3B,iBAAiB;IACjB,UAAU;AACd;;AAEA;IACI,gBAAgB;IAChB,8BAA8B;IAC9B,iBAAiB;IACjB,cAAc;IACd,UAAU;AACd;;AAEA;;IAEI,WAAW;IACX,YAAY;IACZ,mBAAmB;IACnB,cAAc;AAClB;;AAEA;IACI,mBAAmB;IACnB,WAAW;IACX,YAAY;IACZ,cAAc;AAClB;;AAEA;IACI,cAAc;AAClB;;AAEA;IACI,cAAc;AAClB;;AAEA;IACI,cAAc;AAClB;;AAEA;IACI,qBAAqB;IACrB,8BAA8B;AAClC;;AAEA;IACI,yBAAyB;IACzB,4BAA4B;IAC5B,qBAAqB;AACzB;;AAEA;IACI,8BAA8B;AAClC;;AAEA;IACI,qBAAqB;IACrB,qBAAqB;IACrB,8BAA8B;IAC9B,cAAc;AAClB;;AAEA;IACI,sBAAsB;IACtB,iBAAiB;IACjB,8BAA8B;AAClC;;AAEA;IACI,sBAAsB;IACtB,mBAAmB;IACnB,8BAA8B;AAClC;;AAEA;IACI,kBAAkB;IAClB,2BAA2B;IAC3B,iBAAiB;IACjB,cAAc;IACd,UAAU;AACd;;AAEA;IACI,uBAAuB;;AAE3B;;AAEA;IACI,4BAA4B;IAC5B,4BAA4B;AAChC;;AAEA;IACI,aAAa;IACb,mBAAmB;IACnB,6BAA6B;AACjC;;AAEA;IACI,gBAAgB;AACpB;;AAEA;IACI,eAAe;IACf,cAAc;AAClB;;AAEA;IACI,mBAAmB;AACvB;;AAEA;IACI,WAAW;IACX,aAAa;IACb,mBAAmB;IACnB,8BAA8B;IAC9B,iBAAiB;IACjB,cAAc;IACd,gBAAgB;IAChB,4BAA4B;IAC5B,iBAAiB;IACjB,UAAU;IACV,gBAAgB;IAChB,eAAe;AACnB;;AAEA;IACI,aAAa;IACb,mBAAmB;IACnB,8BAA8B;IAC9B,WAAW;IACX,mBAAmB;IACnB,gBAAgB;IAChB,8BAA8B;IAC9B,iBAAiB;IACjB,cAAc;IACd,UAAU;AACd;;AAEA;IACI,kBAAkB;AACtB;;AAEA;IACI,gBAAgB;IAChB,iBAAiB;IACjB,SAAS;IACT,eAAe;IACf,cAAc;IACd,eAAe;IACf,gBAAgB;IAChB,iBAAiB;IACjB,iBAAiB;IACjB,kCAAkC;AACtC;;AAEA;IACI,yBAAyB;IACzB,qBAAqB;AACzB;;AAEA;IACI,yBAAyB;AAC7B;;AAEA;;IAEI,kBAAkB;AACtB;;AAEA;IACI,oCAAoC;AACxC;;AAEA;IACI,kCAAkC;IAClC,qBAAqB;AACzB;;AAEA;IACI,sBAAsB;AAC1B;;AAEA;IACI,sBAAsB;AAC1B",sourcesContent:["#optimoveSdkWebTool {\n width: 0;\n display: none;\n position: fixed;\n right: 0;\n top: 0;\n background: #fff;\n z-index: 1000;\n}\n\n#optimoveSdkWebTool.open {\n max-width: 1500px;\n min-width: 340px;\n height: 100vh;\n}\n\n#optimoveSdkWebTool.open.ag-theme-balham {\n width: 500px;\n display: block;\n z-index: 10000;\n -webkit-box-shadow: -3px 0 10px 0 rgba(200, 200, 200, 0.5);\n box-shadow: -3px 0 10px 0 rgba(200, 200, 200, 0.5);\n}\n\n#optimovePanelHead.panel-heading {\n padding: 16px 15px;\n}\n\n#optimovePanelHead .popupDiv {\n padding-left: 334px;\n position: relative;\n}\n\n#optimovePanelHead .popupDiv .popup {\n position: absolute;\n visibility: hidden;\n}\n\n#optimovePanelHead .popupDiv .popup.showPopup {\n visibility: visible;\n display: block;\n background: #FFFFFF 0% 0% no-repeat padding-box;\n box-shadow: 0px 0px 6px #00000029;\n border-radius: 4px;\n opacity: 1;\n width: 109px;\n height: 84px;\n z-index: 1;\n}\n\n#optimovePanelHead .popupDiv .popup.showPopup .dockRightPicDiv {\n height: 28px;\n padding-top: 10px;\n padding-left: 10px;\n}\n\n#optimovePanelHead .popupDiv .popup.showPopup .dockRightPicDiv .dockText {\n display: inline;\n padding-left: 6px;\n}\n\n#optimovePanelHead .popupDiv .popup.showPopup .dockRightPicDiv:hover {\n background-color: #ECEFF1;\n}\n\n#optimovePanelHead .popupDiv .popup.showPopup .dockLeftPicDiv {\n height: 28px;\n padding-top: 10px;\n padding-left: 10px;\n}\n\n#optimovePanelHead .popupDiv .popup.showPopup .dockLeftPicDiv .dockText {\n display: inline;\n padding-left: 6px;\n}\n\n#optimovePanelHead .popupDiv .popup.showPopup .dockLeftPicDiv:hover {\n background-color: #ECEFF1;\n}\n\n#optimovePanelHead .popupDiv .popup.showPopup .dockBottomPicDiv {\n height: 28px;\n padding-top: 10px;\n padding-left: 10px;\n}\n\n#optimovePanelHead .popupDiv .popup.showPopup .dockBottomPicDiv .dockText {\n display: inline;\n padding-left: 6px;\n}\n\n#optimovePanelHead .popupDiv .popup.showPopup .dockBottomPicDiv:hover {\n background-color: #ECEFF1;\n}\n\n#optimovePanelHead .popup.popupNotShow {\n visibility: hidden;\n}\n\n#optimovePanelHead .popup.showPopup {\n visibility: visible;\n display: block;\n background: #FFFFFF 0% 0% no-repeat padding-box;\n box-shadow: 0px 0px 6px #00000029;\n border-radius: 4px;\n opacity: 1;\n width: 109px;\n height: 83px;\n}\n\n#optimoveSdkWebTool.open.ag-theme-balham .ag-header-cell {\n padding-right: 0px !important;\n}\n\n#optimoveSDKDragger {\n width: 10px;\n height: 100%;\n position: absolute;\n top: 0;\n left: 0;\n background: transparent;\n z-index: 1;\n cursor: w-resize;\n}\n\n#optimoveSdkWebTool .material-icons {\n cursor: pointer;\n}\n\n#optimoveSdkWebTool .ag-root-wrapper.ag-layout-normal {\n height: calc(100% - 103px);\n}\n\n#optimoveSdkWebTool.ag-theme-balham .is-not-main {\n background-color: #ECEFF1;\n}\n\n#optimoveSdkWebTool.ag-theme-balham .errorNotMainRow {\n background-color: #FFD6C2;\n}\n\n#optimoveSdkWebTool.ag-theme-balham .ag-header-cell {\n background-color: #CFD8DC;\n box-sizing: content-box;\n}\n\n#optimoveSdkWebTool .ag-header-cell-text {\n color: #455A64;\n text-align: left;\n font: Bold 12px/14px Roboto;\n letter-spacing: 0;\n opacity: 1;\n}\n\n#optimoveSdkWebTool.ag-theme-balham .ag-cell {\n text-align: left;\n font: Regular 12px/14px Roboto;\n letter-spacing: 0;\n color: #37474F;\n opacity: 1;\n}\n\n#optimoveSdkWebTool.ag-theme-balham .ag-cell .fa-angle-right,\n#optimoveSdkWebTool.ag-theme-balham .ag-cell .fa-angle-down {\n width: 18px;\n height: 18px;\n padding-right: 10px;\n color: #37474F;\n}\n\n#optimoveSdkWebTool.ag-theme-balham .ag-cell .fa-exclamation-circle {\n padding-right: 20px;\n width: 16px;\n height: 17px;\n color: #FF5500;\n}\n\n#optimoveSdkWebTool.ag-theme-balham .ag-cell.mainRowClass.optDateCell.optHasError {\n color: #FF5500;\n}\n\n#optimoveSdkWebTool.ag-theme-balham .ag-cell.mainRowClass.mainRowClassEventId.optHasError {\n color: #FF5500;\n}\n\n#optimoveSdkWebTool.ag-theme-balham .ag-cell.mainRowClass.mainRowClassEventName.optHasError {\n color: #FF5500;\n}\n\n#optimoveSdkWebTool.ag-theme-balham .ag-cell.notMainDateRowClass {\n left: 26px !important;\n white-space: normal !important;\n}\n\n#optimoveSdkWebTool.ag-theme-balham .ag-cell.notMainDateRowClass.optParametersWarning {\n color: #212121 !important;\n font-weight: bold !important;\n left: 26px !important;\n}\n\n#optimoveSdkWebTool .cell-wrap-text {\n white-space: normal !important;\n}\n\n#optimoveSdkWebTool.ag-theme-balham .ag-cell.notMainDateRowClass.optNotExistWarning {\n left: 26px !important;\n left: 26px !important;\n white-space: nowrap !important;\n color: #CF4500;\n}\n\n#optimoveSdkWebTool.ag-theme-balham .ag-cell.notMainRowClass.notMainRowClassEventId {\n left: 160px !important;\n font-weight: bold;\n white-space: normal !important;\n}\n\n#optimoveSdkWebTool.ag-theme-balham .ag-cell.notMainRowClass.notMainRowClassEventId.optHasError {\n left: 160px !important;\n font-weight: normal;\n white-space: normal !important;\n}\n\n#optimoveSdkWebTool .ag-overlay-loading-center {\n text-align: center;\n font: Bold 24px/28px Roboto;\n letter-spacing: 0;\n color: #F2F0F0;\n opacity: 1;\n}\n\n#optimoveSdkWebTool .cell-parameter-value {\n width: 540px !important;\n ;\n}\n\n#optimoveSdkWebTool .ag-full-width-row {\n padding-left: 8px !important;\n padding-top: 16px !important;\n}\n\n#optimoveSdkWebTool .optimoveTopHeadLine {\n display: flex;\n align-items: center;\n justify-content: space-around;\n}\n\n#optimoveSdkWebTool .optimoveTopHeadLine .optimoveWebToolBtnClose {\n box-shadow: none;\n}\n\n#optimoveSdkWebTool .optimoveTopHeadLine .optimoveWebToolBtnClose i {\n font-size: 17px;\n color: #5F7C8A;\n}\n\n#optimoveSdkWebTool .optimoveTopHeadLine .positionButtonPic {\n padding-right: 10px;\n}\n\n#optimoveSdkWebTool .optimoveTopHeadLineText {\n width: 100%;\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding-left: 8px;\n color: #424242;\n text-align: left;\n font: Light 18px/18px Roboto;\n letter-spacing: 0;\n opacity: 1;\n font-weight: 300;\n font-size: 18px;\n}\n\n#optimoveSdkWebTool .optimoveBottomHeadLineText {\n display: flex;\n align-items: center;\n justify-content: space-between;\n width: 100%;\n padding: 10px 0 5px;\n text-align: left;\n font: Regular 12px/16px Roboto;\n letter-spacing: 0;\n color: #546E7A;\n opacity: 1;\n}\n\n#optimoveSdkWebTool .opvArrowNoParams {\n visibility: hidden;\n}\n\n#optimoveSdkWebTool .btn-link.opt-btn-link {\n padding-top: 5px;\n padding-left: 0px;\n border: 0;\n cursor: pointer;\n color: #00AAFF;\n font-size: 12px;\n font-weight: 700;\n user-select: none;\n text-shadow: none;\n background-color: white !important;\n}\n\n#optimoveSdkWebTool .btn-link.opt-btn-link:hover {\n color: #00699E !important;\n text-decoration: none;\n}\n\n#optimoveSdkWebTool .opt-btn-link.btn-link.disable-btn:hover {\n color: #B0BEC5 !important;\n}\n\n#optimoveSdkWebTool.ag-theme-balham .ag-header-cell::after,\n.ag-theme-balham .ag-header-group-cell::after {\n border-right: none;\n}\n\n#optimoveSdkWebTool .ag-row-hover {\n background-color: #F5F7F7 !important;\n}\n\n#optimoveSdkWebTool.ag-theme-balham .ag-row-selected.opti-row-class {\n background-color: white !important;\n border-color: #d9dcde;\n}\n\n#optimoveSdkWebTool.ag-theme-balham .ag-root {\n border: 0px !important;\n}\n\n#optimoveSdkWebTool.ag-theme-balham .ag-overlay-loading-center {\n border: 0px !important;\n}"],sourceRoot:""}]),t.default=r},"./node_modules/css-loader/dist/runtime/api.js":function(e){e.exports=function(e){var t=[];return t.toString=function(){return this.map((function(t){var n=e(t);return t[2]?"@media ".concat(t[2]," {").concat(n,"}"):n})).join("")},t.i=function(e,n,o){"string"==typeof e&&(e=[[null,e,""]]);var i={};if(o)for(var a=0;ae.length)&&(t=e.length);for(var n=0,o=new Array(t);n=0;--i){var a=this.tryEntries[i],r=a.completion;if("root"===a.tryLoc)return o("end");if(a.tryLoc<=this.prev){var p=n.call(a,"catchLoc"),l=n.call(a,"finallyLoc");if(p&&l){if(this.prev=0;--o){var i=this.tryEntries[o];if(i.tryLoc<=this.prev&&n.call(i,"finallyLoc")&&this.prev=0;--t){var n=this.tryEntries[t];if(n.finallyLoc===e)return this.complete(n.completion,n.afterLoc),C(n),d}},catch:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var n=this.tryEntries[t];if(n.tryLoc===e){var o=n.completion;if("throw"===o.type){var i=o.arg;C(n)}return i}}throw new Error("illegal catch attempt")},delegateYield:function(e,t,n){return this.delegate={iterator:x(e),resultName:t,nextLoc:n},"next"===this.method&&(this.arg=void 0),d}},e}function be(e,t,n,o,i,a,r){try{var p=e[a](r),l=p.value}catch(e){return void n(e)}p.done?t(l):Promise.resolve(l).then(o,i)}function ye(e){return function(){var t=this,n=arguments;return new Promise((function(o,i){var a=e.apply(t,n);function r(e){be(a,o,i,r,p,"next",e)}function p(e){be(a,o,i,r,p,"throw",e)}r(void 0)}))}}function Ie(e){return(Ie="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})(e)}window.optimoveSDK=(k="2.0.17",x="//sdk-cdn.optimove.net/",B="990a6d8eb6cbb8ea44b73d21f1e473b43b9c74ea",w="0b006d8eb623b8ea11b73d61f1e483b47b9d7422",S="4ba302311571f45d57f1aa75e428b9b78d59a7a2",T="85bdeae0a9e0dad7fdd022d8f90da5d3a241b3d0",D="d0df7f0a4c2724ff587c1cfb3e315b432e2d1f50",E="647a3d19ac2647f361068a43df3a4da1",_="19a826c7f361268a43da3a46a12047f3",M="215d26f4be2047f348066e44ee7fe3d6",P="511a26f4be2047a348064e4abe8ce2a9","set_page_visit",W="set_user_id_event",O="set_email_event",L="web_popup_displayed",N="prod",R="",F="",t={info:1,warning:2,error:3,none:4},i="none",U={setLevel:function(e){i=e},log:function(e,n){if("prod"!=N&&t[e]>=t[i])switch(t[e]){case 1:console.info(n);break;case 2:console.warn(n);break;case 3:console.error(n);break;default:console.log(n)}}},j=function(e){var t,n,o,i,a,r,p,l,c,d=function(e,t){return e<>>32-t},s=function(e){var t,n="";for(t=7;t>=0;t--)n+=(e>>>4*t&15).toString(16);return n},m=new Array(80),u=1732584193,g=4023233417,A=2562383102,f=271733878,v=3285377520,h=(e=function(e){e=e.replace(/\r\n/g,"\n");for(var t="",n=0;n127&&o<2048?(t+=String.fromCharCode(o>>6|192),t+=String.fromCharCode(63&o|128)):(t+=String.fromCharCode(o>>12|224),t+=String.fromCharCode(o>>6&63|128),t+=String.fromCharCode(63&o|128))}return t}(e)).length,b=new Array;for(n=0;n>>29),b.push(h<<3&4294967295),t=0;t200)},validateUserId:function(e){return!e||" "!=e&&"null"!=e.toLowerCase()&&"none"!=e.toLowerCase()&&!e.toLowerCase().includes("undefine")},validateEmail:function(e){return/^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/.test(e)},getUrlParams:function(e){var t=e?e.split("?")[1]:window.location.search.slice(1),n={};if(t)for(var o=(t=t.split("#")[0]).split("&"),i=0;i0?(o=(e+o)%16|0,e=Math.floor(e/16)):(o=(t+o)%16|0,t=Math.floor(t/16)),("x"===n?o:3&o|8).toString(16)}))}},z=function(t){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null,o=arguments.length>2?arguments[2]:void 0,i=arguments.length>3?arguments[3]:void 0;i&&U.setLevel(i),N=J(B)||N,Y(B,N),F=window.location.hostname,ve.default,n="prod"==N?"web-configuration.1.0.0":"web-configuration.1.0.0-stg",(e=self.optimoveTenantConfiguration)?V((function(){Z(),e.enableWebPush&&(U.log("info","call initializeOptimobile"),de.initializeOptimobile()),e.enableOptitrack&&(U.log("info","call initializeOptiTrack"),ce.initializeOptiTrack((function(){ce.logMetadataCoreEvent().then((function(e){o&&"function"==typeof o&&o()}))}))),e.enableRealtime&&(U.log("info","call initializeRealtime"),le.initializeRealtime())})):K(R=x+"webconfig/"+t+"/"+n+".js",(function(){U.log("info","configuration loaded successfully"),U.log("info","core events loaded successfully"),V((function(){Z(),e.enableWebPush&&(U.log("info","call initializeOptimobile"),de.initializeOptimobile()),e.enableOptitrack&&(U.log("info","call initializeOptiTrack"),ce.initializeOptiTrack((function(){ce.logMetadataCoreEvent().then((function(e){o&&"function"==typeof o&&o()}))}))),e.enableRealtime&&(U.log("info","call initializeRealtime"),le.initializeRealtime()),ne()&&optimoveSDK.API.openWebTestTool()}))}))},V=function(t){e=self.optimoveTenantConfiguration,ae(e),t&&"function"==typeof t&&t()},K=function(e,t){var n=document.createElement("script");n.type="text/javascript",n.async=!1,n.defer=!1,n.src=e,document.getElementsByTagName("script")[1].appendChild(n),n.readyState?n.onreadystatechange=function(){"loaded"!=n.readyState&&"complete"!=n.readyState||(n.onreadystatechange=null,t())}:n.onload=function(){t()}},a=[],r=function(){var e=ye(he().mark((function e(t,n){var o;return he().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return o=[],n.forEach((function(e){o.push(e.event)})),e.next=4,fetch(t,{method:"POST",headers:{Accept:"application/json","Content-Type":"application/json","X-Request-ID":H.generateUUID()},body:JSON.stringify(n)}).then((function(e){return e.json()})).then((function(e){return U.log("info","event".concat(o.length>1?"s":""," ").concat(o.join(", ")," reported to ").concat(t," successfully")),{payload:n,response:e}})).catch((function(e){return U.log("error","event".concat(o.length>1?"s":""," ").concat(o.join(", ")," not reported to ").concat(t," due to ").concat(e)),{payload:n,response:e}}));case 4:return e.abrupt("return",e.sent);case 5:case"end":return e.stop()}}),e)})));return function(t,n){return e.apply(this,arguments)}}(),p=function(e){return e==L?"popup":"track"},q={logEvent:function(t,n,o){try{var i,r;n="object"===Ie(n=n||{})&&Object.keys(n).length>0?oe(n):{},Object.assign(n,pe()),o&&t!=W?(i=o.updatedVisitorId,r=o.userId):t==W?(i=n.updatedVisitorId,r=n.userId):(i=G(),r=$());var l={tenant:e.optitrackMetaData.siteId,category:p(t),origin:"sdk",event:t,context:n,timestamp:(new Date).toISOString(),metadata:{firstVisitorDate:te(),eventId:H.generateUUID(),sdk_platform:"web",sdk_version:k},visitor:i,customer:r};a.push(l)}catch(e){U.log("error","could not log event: ".concat(t," error log: ").concat(e))}},dispatch:function(){var t=ye(he().mark((function t(){var n,o,i,p;return he().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:if(n=[],o=[],a.length){t.next=4;break}return t.abrupt("return");case 4:if(a.forEach((function(e){n.push(e),o.push(e)})),e.enableWebPush&&de.reportEventsToOptimobile(a),a=[],!(e.enableOptitrack&&n.length>0)){t.next=13;break}return t.next=10,r(ce.getOptitrackEndpoint(),n);case 10:t.t0=t.sent,t.next=16;break;case 13:return t.next=15,Promise.resolve();case 15:t.t0=t.sent;case 16:if(i=t.t0,!(e.enableRealtime&&o.length>0)){t.next=23;break}return t.next=20,r(le.getRealtimeEndpoint(),o).then((function(e){le.postRealtimeEvent(e)}));case 20:t.t1=t.sent,t.next=26;break;case 23:return t.next=25,Promise.resolve();case 25:t.t1=t.sent;case 26:return p=t.t1,t.abrupt("return",Promise.all([i,p]).then((function(e){return e})));case 28:case"end":return t.stop()}}),t)})));return function(){return t.apply(this,arguments)}}()},Y=function(e,t){try{var n=localStorage.getItem(e);null!=n&&n==t||localStorage.setItem(e,t)}catch(e){U.log("error","OptimoveSDK: persistSDKLocalData() Failed error = ".concat(e))}},J=function(e){try{var t=localStorage.getItem(e);if(null!=t)return t}catch(e){return U.log("error","OptimoveSDK: getPersistedSDKLocalDatas () Failed error = ".concat(e)),null}},G=function(){return J(E)||null},X=function(e){Y(E,e)},Z=function(){var t=J(E),n=J(_);if(t||(t=H.generateUUID(),Y(E,t)),!n){var o="_pk_id.".concat(e.optitrackMetaData.siteId,"."),i=document.cookie.match(new RegExp("(^| )"+o+".{1,}=([^;]+)")),a=Array.isArray(i)&&null!=i[2]?i[2].split(".")[0]:null;Y(_,a||t),Y(P,(new Date).toISOString())}return t},Q=function(){return J(_)||null},$=function(){return J(M)},ee=function(e){Y(M,e)},te=function(){return J(P)||null},ne=function(){try{return"true"==window.sessionStorage.getItem("isSideBarShouldBeOpen")}catch(e){U.log("error","Web sdk test tool : session storage access has failed : ".concat(e))}},oe=function(t){if(null!=t){var n=Object.getOwnPropertyNames(t),o=1;return n.forEach((function(n){if(o>e.optitrackMetaData.maxActionCustomDimensions)delete t[n];else{var i=t[n];if("string"==typeof i){var a=i.trim();t[n]=a}}"customURL"==n&&(t[n]=H.cleanUrl(t[n]).toLowerCase()),o++})),t}U.log("info","normalizeEventParameters: event parameter is null")},ie=function(e){var t="desktop",n="windows",o="";if(void 0!==e){var i=e.os.name;n=i,o=i+" "+e.os.version,Object.keys(e.device).length>0&&void 0!==e.device.type&&(t=e.device.type,U.log("info","found deviceType="+t)),Y(w,n),Y(S,t),Y(T,o),Y(D,"false")}},ae=function(e){void 0===J(w)&&function(e,t){window.navigator.userAgent;var n=new XMLHttpRequest,o=e.sdkServicesEndPoint;n.open("GET",o,!0),n.setRequestHeader("Content-Type","application/x-www-form-urlencoded;charset=utf-8"),n.onreadystatechange=function(){try{if(4==n.readyState&&200==n.status){var e=JSON.parse(n.responseText);U.log("info",e),t&&t(e)}}catch(e){U.log("error",e)}},n.send()}(e,ie)},re=function(){var e=ce.getOptitrackVisitorInfo(),t=new Object;return null!=e?(t.visitorId=e[1],t.visitCount=e[3]):(U.log("error","in getVisitorsInfoObj Optitrack"),t=void 0),t},pe=function(){return{event_platform:J(w),event_device_type:J(S),event_os:J(T),event_native_mobile:J(D)}},c=!1,d=function e(t){t&&(!0!==t&&t.target!=document.getElementById("optiRealPopupDimmer")&&"optiRealclosePopupImage"!=t.target.id||(document.body.removeChild(l),document.removeEventListener("mousedown",e)))},s=function(t){try{var n=document.createElement("div"),o="";o="",document.addEventListener("mousedown",d),o+="
"+t+"
"+(e.realtimeMetaData.options.showDimmer&&e.realtimeMetaData.options.showWatermark?"
Powered by Optimove
":"")+"
",n.innerHTML=o,l=n,document.body.appendChild(n);var i=n.getElementsByTagName("script");i.length>0&&window.eval(i[0].innerText)}catch(e){U.log("error","Error while executing popup ".concat(e))}},m=function(e,t,n,o){if(!t||void 0===t||0==t)return!1;if(null==o||null==n)return!0;var i,a=localStorage.getItem("optimove_popup_"+t+"_"+e),r={};return a&&(a=JSON.parse(a),new Date(a.recurrenceFrameStopTime)>new Date((new Date).toISOString())?i=Math.min(o,a.recurrenceLeft):(i=o,r.recurrenceFrameStopTime=n),o=i),r.recurrenceFrameStopTime=n,r.recurrenceLeft=o-1,localStorage.setItem("optimove_popup_"+t+"_"+e,JSON.stringify(r)),!(o<=0)},u=function(){return"".concat(e.realtimeMetaData.realtimeGateway,"reportEvent")},le={initializeRealtime:function(e){u(),e&&"function"==typeof e&&e()},postRealtimeEvent:function(){var t=ye(he().mark((function t(n){var o,i,a,r,p;return he().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:try{(o=n.response).IsSuccess&&o.Data&&o.Metadata&&(o.Metadata.delayValue||(o.Metadata.delayValue=0),i=o.Metadata.campaignDetailId?parseInt(o.Metadata.campaignDetailId):1,a=o.Metadata.templateId?parseInt(o.Metadata.templateId):0,r=o.Metadata.actionChannelId?parseInt(o.Metadata.actionChannelId):0,p=o.Metadata.sendId?o.Metadata.sendId:null,c||(c=!0,setTimeout((function(){if(m(n.visitorId,i,o.Metadata.recurrenceFrameStopTime,o.Metadata.recurrenceLeft)){e.realtimeMetaData.options.popupCallback?e.realtimeMetaData.options.popupCallback(o):s(o.Data);var t=q;t.logEvent(L,{campaign_detail_id:i,template_id:a,action_channel_id:r,send_id:p}),t.dispatch().then((function(e){return c=!1,e}))}}),1e3*o.Metadata.delayValue)))}catch(e){U.log("error",e)}case 1:case"end":return t.stop()}}),t)})));return function(e){return t.apply(this,arguments)}}(),executePopup:s,closePopup:d,getRealtimeEndpoint:u},g="set_user_id_event",A="a5c127e180652c82e615be143677e248",f=null,v=function(){var e=ye(he().mark((function e(t,n){return he().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.abrupt("return",reportEvent(t,n,f));case 1:case"end":return e.stop()}}),e)})));return function(t,n){return e.apply(this,arguments)}}(),h=function(t){var n=e.events[t];return null==n?null:n},b=function(e,t){var n=e.parameters[t];return null==n?null:n},ce={initializeOptiTrack:function(e){f=C(),e&&"function"==typeof e&&e()},logSetUserId:function(e,t,n){try{var o=h(g);if(null==e||null==t)return void U.log("error","OptiTrackModule:logSetUserIdEvent Failed!!, error = origVisitorIdValue == undefined || updatedUserIdValue == undefined ");if(null!=o){b(o,"originalVisitorId"),b(o,"updatedVisitorId"),b(o,"userId");var i={originalVisitorId:e,userId:$(),updatedVisitorId:G()};reportEvent(g,i).then((function(e){}))}}catch(e){U.log("error","OptiTrackModule:logSetUserIdEvent Failed!!, error = "+e)}},logUserEmail:function(e){reportEvent("set_email_event",{email:e}).catch((function(e){_logger.log("error","OptiTrackModule:logOptitrackUserEmail Failed!!, error = "+e)}))},logMetadataCoreEvent:function(){var e=ye(he().mark((function e(){var t,n,o,i;return he().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(U.log("info","OptiTrackModule: in logMetadataCoreEvent"),!(t=I(A))||"true"!==t.value){e.next=4;break}return e.abrupt("return");case 4:return n=H.getUrlParams(),o={sdk_platform:"Web",sdk_version:k,app_ns:F,campaign_name:n.utm_campaign?n.utm_campaign:null,campaign_keyword:n.utm_term?n.utm_term:null,campaign_source:n.utm_source?n.utm_source:null,campaign_medium:n.utm_medium?n.utm_medium:null,campaign_content:n.utm_content?n.utm_content:null,campaign_id:n.utm_id?n.utm_id:null,language:H.getUserLanguage()},""!==R&&(o.config_file_url=R),(i=q).logEvent("optimove_sdk_metadata",o),e.abrupt("return",i.dispatch().then((function(e){return y(A,!0),e})).catch((function(e){U.log("warning","OptiTrackModule:logMetadataCoreEvent Failed!!, error = ".concat(e))})));case 10:case"end":return e.stop()}}),e)})));return function(){return e.apply(this,arguments)}}(),getOptitrackVisitorInfo:function(){return[]},getUserId:$,getKeyId:function(e,t){try{var n=null;switch(t){case"datonics":n="75f8c5fdab43daca991a35c854a5a6d2";break;case"liveRamp":n="4007d0a432ab6289711974163b25a06d";break;case"googlCookieMatch":n="634beb77779dc8025e7615cf95fce8f7";break;default:n=null}return n}catch(e){var o="OptiTrackModule:getKeyId Failed!!, error = "+e;_logger.log("error",o)}},getOptitrackEndpoint:C=function(){return e.optitrackMetaData.optitrackEndpoint},reportOptitrackEvent:v,getPersistedSDKSessionData:I=function(t){try{if(1!=e.optitrackMetaData.useSessionStorage)return U.log("info","Optitrack: persistSDKSessionData() key: ".concat(t," Not Persisted")),null;var n=sessionStorage.getItem(t);if(null!=n)return{key:t,value:n}}catch(e){return U.log("error","OptiTrackModule: getPersistedSDKSessionData () Failed error = ".concat(e)),null}},persistSDKSessionData:y=function(t,n){try{if(1==e.optitrackMetaData.useSessionStorage){var o=sessionStorage.getItem(t);null!=o&&o==n||sessionStorage.setItem(t,n)}else U.log("info","Optitrack: persistSDKSessionData() Not Persisted")}catch(e){U.log("error","OptiTrackModule: persistSDKSessionData () Failed error = ".concat(e))}}},de={initializeOptimobile:function(){var t,n;(t=window)[n="Kumulos"]=t[n]||function(){t[n].q=t[n].q||[],t[n].q.push(arguments)};var o=e.kumulosWebSdkMetaData,i=Q();if(null!==i){var a,r={apiKey:o.apiKey,secretKey:o.secretKey,vapidPublicKey:o.vapidPublicKey,region:o.region,originalVisitorId:i},p=$();p&&(r.customerId=p),Kumulos("init",r),a=function(){var e=document.createElement("script");e.id="kumulos",e.src="https://static.app.delivery/sdks/web/optimove-web-bundle.js",e.async=!0,document.body.append(e)},"loading"!==document.readyState?a():document.addEventListener("DOMContentLoaded",a)}else console.error("Optimobile cannot initialize: no originalVisitorId present")},reportEventsToOptimobile:function(e){e.forEach((function(e){U.log("info","reporting to kumulos event "+e.event),Kumulos("trackEvent",e.event,e.context)}))},pushRegister:function(){Kumulos("pushRegister")}},se={updateLiveRampDataMatching:function(){var t,n=ce.getKeyId(ce,"liveRamp"),o=ce.getPersistedSDKSessionData(ce,n);if(t=re().visitorId,(null==o||o.value!=t)&&void 0!==e.LiveRampMetaData&&void 0!==e.LiveRampMetaData.tenantToken&&void 0!==e.LiveRampMetaData.baseEndpoint){var i=e.LiveRampMetaData.tenantToken,a=e.LiveRampMetaData.liveRampTenantToken,r=e.LiveRampMetaData.baseEndpoint,p=e.optitrackMetaData.siteId,l=new RegExp("(\\[liveRampToken\\])","g");!function(e){if(i!=e){var t=document,n=t.createElement("img"),o=t.getElementsByTagName("script")[0];n.type="text/javascript",n.async=!0,n.defer=!0,n.src=e,o.parentNode.insertBefore(n,o)}}(r.replace(l,a)+i+"_"+p+"_"+t),ce.persistSDKSessionData(ce,n,t)}}},me={updateDatonicsDataMatching:function(){var t,n=ce.getKeyId(ce,"datonics"),o=ce.getPersistedSDKSessionData(ce,n);t=re().visitorId,(null==o||o.value!=t)&&(function(t,n){if(null!=t){var o=e.DatonicsCookieMatchingMetaData.baseEndpoint,i=document,a=i.createElement("img"),r=i.getElementsByTagName("script")[0];a.type="text/javascript",a.async=!0,a.defer=!0;var p=Math.round(1e16*Math.random());a.src=o+"csync="+n+"_"+t+";rnd=("+p+")",r.parentNode.insertBefore(a,r)}}(t,e.optitrackMetaData.siteId),ce.persistSDKSessionData(ce,n,t))}},ue={updateCookieMatcher:function(t){var n,o=ce.getKeyId(ce,"googlCookieMatch"),i=ce.getPersistedSDKSessionData(ce,o);n=re().visitorId;var a,r,p,l,c;a=void 0!==t&&null!=t?t:n,(null==i||i.value!=n)&&(function(e){var t="https://gcm.optimove.events/setCookie?optimove_id="+e,n=document.createElement("img");n.style.display="none",n.setAttribute("src",t),document.body.appendChild(n)}(a),r=e.cookieMatcherMetaData.tenantToken,p=e.cookieMatcherMetaData.optimoveCookieMatcherId,l="https://cm.g.doubleclick.net/pixel?google_nid="+p+"&google_cm&tenant_id="+r,(c=document.createElement("img")).style.display="none",c.setAttribute("src",l),document.body.appendChild(c),ce.persistSDKSessionData(ce,o,n))}},ge=function(e){var t=e,n=$(),o=Q();G();return n&&n===t?(U.log("info","setUserId: User ID is already set"),!1):{userId:t,originalVisitorId:o?Q():Z(),updatedVisitorId:j(e||"").substring(0,16)}},Ae={getVersion:function(){return k},getConfigurationVersion:function(){return e.version},getVisitorId:function(){return G()},getUserId:function(){return $()},setRealTimeOptions:function(t){null!=t.showDimmer&&(e.realtimeMetaData.options.showDimmer=t.showDimmer),null!=t.showWatermark&&(e.realtimeMetaData.options.showWatermark=t.showWatermark),null!=t.reportEventCallback&&(e.realtimeMetaData.options.popupCallback=t.reportEventCallback)},setUserId:function(t,n){var o=t||null;if(o||n){var i=ge(o);if(i){var a=q;a.logEvent(W,i),a.dispatch().then((function(t){H.validateUserId(o)&&H.validateUserIdLength(o)&&(X(i.updatedVisitorId),ee(o),e.enableWebPush&&(U.log("info","kumulos associating user identifier: "+i.userId),Kumulos("associateUser",i.userId))),"function"==typeof n&&n()})).catch((function(e){U.log("error","setUserId error = ".concat(e))})),1==e.supportCookieMatcher&&ue.updateCookieMatcher(o)}else"function"==typeof n&&n()}else console.error("UserId is not defined ".concat(o,", no user ID had been set"))},setUserEmail:function(t,n,o){var i,a=o||null,r=q;if(t){if(t.trim()){var p={email:t};a&&(i=ge(a))&&(r.logEvent(W,i),1==e.supportCookieMatcher&&ue.updateCookieMatcher(a)),r.logEvent(O,p,i),r.dispatch().then((function(t){i&&H.validateUserId(a)&&H.validateUserIdLength(a)&&(X(i.updatedVisitorId),ee(a),e.enableWebPush&&(U.log("info","kumulos associating user identifier: "+i.userId),Kumulos("associateUser",i.userId))),n&&"function"==typeof n&&n()})).catch((function(e){U.log("error","setUserEmail error = ".concat(e))}))}}else U.log("error","setUserEmail: email is missing")},registerUser:function(t,n,o,i,a){var r=t||null;if(r){var p=ge(r);if(p){var l=q;l.logEvent(W,p),n&&l.logEvent(O,{email:n},p),o&&l.logEvent(o,i,p),l.dispatch().then((function(){p&&H.validateUserId(r)&&H.validateUserIdLength(r)&&(X(p.updatedVisitorId),ee(r),e.enableWebPush&&(U.log("info","kumulos associating user identifier: "+p.userId),Kumulos("associateUser",p.userId))),a&&"function"==typeof a&&a()}))}else a&&"function"==typeof a&&a()}else console.error("UserId is not defined ".concat(r,", no user ID had been set"))},reportEvent:function(t,n,o,i){var a,r=i||null,p=q;r&&(a=ge(r))&&(p.logEvent(W,a),1==e.supportCookieMatcher&&ue.updateCookieMatcher(r)),p.logEvent(t,n,a),p.dispatch().then((function(t){a&&H.validateUserId(r)&&H.validateUserIdLength(r)&&(X(a.updatedVisitorId),ee(r),e.enableWebPush&&(U.log("info","kumulos associating user identifier: "+a.userId),Kumulos("associateUser",a.userId))),o&&"function"==typeof o&&o()}))},setPageVisit:function(t,n,o,i){var a,r=n?n.trim():null,p=null!=o?o.trim():null,l=encodeURI(t),c={customURL:l=l.trim().toLowerCase(),pageTitle:r,category:p},d=i||null,s=q;d&&(a=ge(d))&&(s.logEvent(W,a),1==e.supportCookieMatcher&&ue.updateCookieMatcher(d)),s.logEvent("set_page_visit",c,a),s.dispatch().then((function(t){a&&H.validateUserId(d)&&H.validateUserIdLength(d)&&(X(a.updatedVisitorId),ee(d),e.enableWebPush&&(U.log("info","kumulos associating user identifier: "+a.userId),Kumulos("associateUser",a.userId)))})),void 0!==e.supportDatonicsCookieMatching&&1==e.supportDatonicsCookieMatching&&(U.log("info","call setPageVisit support DatonicsCookieMatching"),me.updateDatonicsDataMatching()),void 0!==e.supportCookieMatcher&&1==e.supportCookieMatcher&&ue.updateCookieMatcher(null),void 0!==e.supportLiveRamp&&1==e.supportLiveRamp&&se.updateLiveRampDataMatching()},pushRegister:function(){de.pushRegister()},showRealtimePopup:le.executePopup,closeRealtimePopup:le.closePopup,openWebTestTool:function(){document.getElementById("optimoveSdkWebTool")||(0,fe.default)()},closeWebTestTool:function(){var e=document.getElementById("optimoveSdkWebTool");if(null!=e){e.remove();try{window.sessionStorage.setItem("isSideBarShouldBeOpen",!1)}catch(e){U.log("error","Web sdk test tool : session storage access has failed : ".concat(e))}}document.body.classList.remove("optimoveSdkWebToolOpen"),document.body.style.width="auto"},tools:function(){return H}},self.optimoveTenantConfiguration&&z(null,null,null,"info"),{initialize:z,API:Ae})}()}(); //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9zZGsvLi9zcmMvc2RrLWV2ZW50cy5qcyIsIndlYnBhY2s6Ly9zZGsvLi9zcmMvd2ViLXRlc3QtdG9vbC9vcHRtdi13ZWItdGVzdC10b29sLmpzIiwid2VicGFjazovL3Nkay8uL3NyYy93ZWItdGVzdC10b29sL3N0eWxlLmNzcyIsIndlYnBhY2s6Ly9zZGsvLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L3J1bnRpbWUvYXBpLmpzIiwid2VicGFjazovL3Nkay8uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvcnVudGltZS9jc3NXaXRoTWFwcGluZ1RvU3RyaW5nLmpzIiwid2VicGFjazovL3Nkay8uL3NyYy93ZWItdGVzdC10b29sL3N0eWxlLmNzcz84YmFmIiwid2VicGFjazovL3Nkay8uL25vZGVfbW9kdWxlcy9zdHlsZS1sb2FkZXIvZGlzdC9ydW50aW1lL2luamVjdFN0eWxlc0ludG9TdHlsZVRhZy5qcyIsIndlYnBhY2s6Ly9zZGsvd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vc2RrL3dlYnBhY2svcnVudGltZS9jb21wYXQgZ2V0IGRlZmF1bHQgZXhwb3J0Iiwid2VicGFjazovL3Nkay93ZWJwYWNrL3J1bnRpbWUvZGVmaW5lIHByb3BlcnR5IGdldHRlcnMiLCJ3ZWJwYWNrOi8vc2RrL3dlYnBhY2svcnVudGltZS9oYXNPd25Qcm9wZXJ0eSBzaG9ydGhhbmQiLCJ3ZWJwYWNrOi8vc2RrL3dlYnBhY2svcnVudGltZS9tYWtlIG5hbWVzcGFjZSBvYmplY3QiLCJ3ZWJwYWNrOi8vc2RrLy4vc3JjL3Nkay5qcyJdLCJuYW1lcyI6WyJ3aW5kb3ciLCJvcGVuVGVzdFRvb2wiLCJQcm9taXNlIiwicmVzb2x2ZSIsInJlamVjdCIsImRvY3VtZW50IiwiZ2V0RWxlbWVudHNCeVRhZ05hbWUiLCJmb250QXdlc29tZVNjcmlwdCIsImNyZWF0ZUVsZW1lbnQiLCJzcmMiLCJzY3JpcHQiLCJsaW5rMSIsInJlbCIsImhyZWYiLCJsaW5rMiIsImJvb3RzdHJhcExpbmsiLCJnb29nbGVJY29uZUxpbmsiLCJyb2JvdG9MaW5rIiwib3B0aW1vdmVQYW5lbERpdiIsImlkIiwiY2xhc3NOYW1lIiwib3B0aW1vdmVQYW5lbEhlYWREaXYiLCJjbGFzc0xpc3QiLCJhZGQiLCJvcHRpbW92ZVRvcEhlYWRMaW5lIiwib3B0aW1vdmVJY29uIiwiSUQiLCJwb3NpdGlvbkJ1dHRvbkRpdiIsIm9wdGltb3ZlVGV4dCIsInAiLCJpbm5lckhUTUwiLCJhcHBlbmRDaGlsZCIsImNsb3NlQnV0dHVuSWNvbiIsImlubmVyVGV4dCIsImNsb3NlQnV0dHVuIiwid2lkdGgiLCJoZWlnaHQiLCJvbmNsaWNrIiwiY2xvc2VUZXN0VG9vbCIsIm9wdGltb3ZlVG9wSGVhZExpbmVUZXh0IiwidGV4dENvbnRlbnQiLCJvcHRpb3ZlQm90dG9tSGVhZExpbmUiLCJvcHRpbW92ZUJvdHRvbUhlYWRMaW5lVGV4dCIsImJvZHkiLCJvbmxvYWQiLCJ0aGVuIiwic2Vzc2lvblN0b3JhZ2UiLCJzZXRJdGVtIiwicGFuZWxXaWR0aCIsImdldEl0ZW0iLCJnZXRFbGVtZW50QnlJZCIsInN0eWxlIiwicGFyc2VJbnQiLCJhIiwidW5kZWZpbmVkIiwicmVtb3ZlIiwiX19fQ1NTX0xPQURFUl9FWFBPUlRfX18iLCJwdXNoIiwibW9kdWxlIiwiZXhwb3J0cyIsImNzc1dpdGhNYXBwaW5nVG9TdHJpbmciLCJsaXN0IiwidG9TdHJpbmciLCJ0aGlzIiwibWFwIiwiaXRlbSIsImNvbnRlbnQiLCJjb25jYXQiLCJqb2luIiwiaSIsIm1vZHVsZXMiLCJtZWRpYVF1ZXJ5IiwiZGVkdXBlIiwiYWxyZWFkeUltcG9ydGVkTW9kdWxlcyIsImxlbmd0aCIsIl9pIiwiX2FycmF5TGlrZVRvQXJyYXkiLCJhcnIiLCJsZW4iLCJhcnIyIiwiQXJyYXkiLCJfaXRlbSIsImlzQXJyYXkiLCJfYXJyYXlXaXRoSG9sZXMiLCJTeW1ib2wiLCJpdGVyYXRvciIsIk9iamVjdCIsIl9hcnIiLCJfbiIsIl9kIiwiX2UiLCJfcyIsIm5leHQiLCJkb25lIiwidmFsdWUiLCJlcnIiLCJfaXRlcmFibGVUb0FycmF5TGltaXQiLCJvIiwibWluTGVuIiwibiIsInByb3RvdHlwZSIsImNhbGwiLCJzbGljZSIsImNvbnN0cnVjdG9yIiwibmFtZSIsImZyb20iLCJ0ZXN0IiwiX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5IiwiVHlwZUVycm9yIiwiX25vbkl0ZXJhYmxlUmVzdCIsImNzc01hcHBpbmciLCJidG9hIiwiYmFzZTY0IiwidW5lc2NhcGUiLCJlbmNvZGVVUklDb21wb25lbnQiLCJKU09OIiwic3RyaW5naWZ5IiwiZGF0YSIsInNvdXJjZU1hcHBpbmciLCJzb3VyY2VVUkxzIiwic291cmNlcyIsInNvdXJjZSIsInNvdXJjZVJvb3QiLCJtZW1vIiwiZ2V0VGFyZ2V0IiwidGFyZ2V0Iiwic3R5bGVUYXJnZXQiLCJxdWVyeVNlbGVjdG9yIiwiSFRNTElGcmFtZUVsZW1lbnQiLCJjb250ZW50RG9jdW1lbnQiLCJoZWFkIiwiZSIsInN0eWxlc0luRG9tIiwiZ2V0SW5kZXhCeUlkZW50aWZpZXIiLCJpZGVudGlmaWVyIiwicmVzdWx0IiwibW9kdWxlc1RvRG9tIiwib3B0aW9ucyIsImlkQ291bnRNYXAiLCJpZGVudGlmaWVycyIsImJhc2UiLCJjb3VudCIsImluZGV4Iiwib2JqIiwiY3NzIiwibWVkaWEiLCJzb3VyY2VNYXAiLCJyZWZlcmVuY2VzIiwidXBkYXRlciIsImFkZFN0eWxlIiwiaW5zZXJ0U3R5bGVFbGVtZW50IiwiYXR0cmlidXRlcyIsIm5vbmNlIiwia2V5cyIsImZvckVhY2giLCJrZXkiLCJzZXRBdHRyaWJ1dGUiLCJpbnNlcnQiLCJFcnJvciIsInRleHRTdG9yZSIsInJlcGxhY2VUZXh0IiwicmVwbGFjZW1lbnQiLCJmaWx0ZXIiLCJCb29sZWFuIiwiYXBwbHlUb1NpbmdsZXRvblRhZyIsInN0eWxlU2hlZXQiLCJjc3NUZXh0IiwiY3NzTm9kZSIsImNyZWF0ZVRleHROb2RlIiwiY2hpbGROb2RlcyIsInJlbW92ZUNoaWxkIiwiaW5zZXJ0QmVmb3JlIiwiYXBwbHlUb1RhZyIsInJlbW92ZUF0dHJpYnV0ZSIsImZpcnN0Q2hpbGQiLCJzaW5nbGV0b24iLCJzaW5nbGV0b25Db3VudGVyIiwidXBkYXRlIiwic3R5bGVJbmRleCIsImJpbmQiLCJwYXJlbnROb2RlIiwicmVtb3ZlU3R5bGVFbGVtZW50IiwibmV3T2JqIiwiYWxsIiwiYXRvYiIsImxhc3RJZGVudGlmaWVycyIsIm5ld0xpc3QiLCJuZXdMYXN0SWRlbnRpZmllcnMiLCJfaW5kZXgiLCJzcGxpY2UiLCJfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX18iLCJfX3dlYnBhY2tfcmVxdWlyZV9fIiwibW9kdWxlSWQiLCJjYWNoZWRNb2R1bGUiLCJfX3dlYnBhY2tfbW9kdWxlc19fIiwiZ2V0dGVyIiwiX19lc01vZHVsZSIsImQiLCJkZWZpbml0aW9uIiwiZGVmaW5lUHJvcGVydHkiLCJlbnVtZXJhYmxlIiwiZ2V0IiwicHJvcCIsImhhc093blByb3BlcnR5IiwiciIsInRvU3RyaW5nVGFnIiwiX2NvbmZpZ3VyYXRpb24iLCJfbGV2ZWxzIiwiX2xvZ2dlckxldmVsIiwiZXZlbnRzIiwicmVwb3J0IiwiZ2V0RXZlbnRDYXRlZ29yeSIsIl9wb3B1cCIsIl9leGVjdXRpb25JblByb2Nlc3MiLCJjbG9zZVBvcHVwIiwiZXhlY3V0ZVBvcHVwIiwic2hvdWxkRXhlY3V0ZSIsImdldFJlYWx0aW1lRW5kcG9pbnRGcm9tQ29uZmlnIiwiU2V0VXNlcklkRXZlbnRfbmFtZSIsImlzUmVwb3J0ZWRDb3JlTWV0YWRhdGEiLCJfb3RfZW5kcG9pbnQiLCJyZXBvcnRPcHRpdHJhY2tFdmVudCIsImdldEN1c3RvbUV2ZW50Q29uZmlnQnlJZCIsImdldEN1c3RvbUV2ZW50UGFyYW1Gcm9tQ29uZmlnIiwicGVyc2lzdFNES1Nlc3Npb25EYXRhIiwiZ2V0UGVyc2lzdGVkU0RLU2Vzc2lvbkRhdGEiLCJnZXRPcHRpVHJhY2tFbmRwb2ludEZyb21Db25maWciLCJfdmVyc2lvbiIsIl9zZGtEb21haW4iLCJlbnZLZXkiLCJldmVudFBsYXRmb3JtSURLZXkiLCJldmVudERldmljZVR5cGVJREtleSIsImV2ZW50T1NJREtleSIsImV2ZW50TmF0aXZlTW9iaWxlIiwidmlzaXRvcklES2V5Iiwib3JpZ2luYWxWaXNpdG9ySURLZXkiLCJjbGllbnRDdXN0b21lcklES2V5IiwidmlzaXRGaXJzdERhdGVLZXkiLCJrZXlTZXRVc2VySWRFdmVudCIsImtleVNldEVtYWlsRXZlbnQiLCJrZXlXZWJQb3B1cERpc3BsYXllZCIsIl9lbnYiLCJfY29uZmlnRmlsZVVybCIsIl9ob3N0bmFtZSIsImxvZ2dlciIsIl9TSEExIiwiX1Rvb2xzIiwiaW5pdCIsInNldENvbmZpZ3VyYXRpb24iLCJsb2FkU2NyaXB0IiwiZXZlbnRzSGFuZGxlciIsInBlcnNpc3RTREtMb2NhbERhdGEiLCJnZXRQZXJzaXN0ZWRTREtMb2NhbERhdGEiLCJnZXRWaXNpdG9ySWQiLCJzZXRWaXNpdG9ySWQiLCJnZW5lcmF0ZVZpc2l0b3JJZCIsImdldE9yaWdpbmFsVmlzaXRvcklkIiwiZ2V0VXNlcklkIiwic2V0VXNlcklkIiwiZ2V0Rmlyc3RWaXNpdERhdGUiLCJvcHRtdklzT3BlbiIsIm5vcm1hbGl6ZUV2ZW50UGFyYW1ldGVycyIsIlVzZXJBZ2VudGNhbGxCYWNrRnVuYyIsImdldFBsYWZvcm1JbmZvRnJvbVVzZXJBZ2VudCIsImdldFZpc2l0b3JzSW5mb09iaiIsImdldEFkZGl0aW9uYWxBdHRyaWJ1dGVzVG9FdmVudCIsInJlYWx0aW1lTW9kdWxlIiwib3B0aXRyYWNrTW9kdWxlIiwib3B0aW1vYmlsZU1vZHVsZSIsImxpdmVSYW1wTW9kdWxlIiwiZGF0b25pY3NNb2R1bGUiLCJjb29raWVNYXRjaGVyTW9kdWxlIiwic2V0VXNlcklkSGFuZGxlciIsIl9BUEkiLCJvcHRpbW92ZVNESyIsImluZm8iLCJ3YXJuaW5nIiwiZXJyb3IiLCJub25lIiwic2V0TGV2ZWwiLCJsb2dMZXZlbCIsImxvZyIsImxldmVsIiwibWVzc2FnZSIsImNvbnNvbGUiLCJ3YXJuIiwibXNnIiwiYmxvY2tzdGFydCIsImoiLCJBIiwiQiIsIkMiLCJEIiwiRSIsInRlbXAiLCJyb3RhdGVfbGVmdCIsInMiLCJjdnRfaGV4IiwidmFsIiwic3RyIiwiVyIsIkgwIiwiSDEiLCJIMiIsIkgzIiwiSDQiLCJtc2dfbGVuIiwic3RyaW5nIiwicmVwbGFjZSIsInV0ZnRleHQiLCJjIiwiY2hhckNvZGVBdCIsIlN0cmluZyIsImZyb21DaGFyQ29kZSIsIlV0ZjhFbmNvZGUiLCJ3b3JkX2FycmF5IiwidG9Mb3dlckNhc2UiLCJjbGVhblVybCIsInVybCIsInN0YXJ0c1dpdGgiLCJ2YWxpZGF0ZVBhZ2VVUkwiLCJjdXN0b21VUkwiLCJ2YWxpZGF0ZVVzZXJJZExlbmd0aCIsInVzZXJJZCIsInZhbGlkYXRlVXNlcklkIiwiaW5jbHVkZXMiLCJ2YWxpZGF0ZUVtYWlsIiwiZW1haWwiLCJnZXRVcmxQYXJhbXMiLCJxdWVyeVN0cmluZyIsInNwbGl0IiwibG9jYXRpb24iLCJzZWFyY2giLCJwYXJhbU5hbWUiLCJwYXJhbVZhbHVlIiwibWF0Y2giLCJleGVjIiwiY29udmVydFVUTUFycmF5IiwiZ2V0VXNlckxhbmd1YWdlIiwibGFuZ3VhZ2UiLCJuYXZpZ2F0b3IiLCJnZW5lcmF0ZVVVSUQiLCJEYXRlIiwiZ2V0VGltZSIsImQyIiwicGVyZm9ybWFuY2UiLCJub3ciLCJNYXRoIiwicmFuZG9tIiwiZmxvb3IiLCJ0b2tlbiIsImNvbmZ2ZXJzaW9uIiwiY2FsbGJhY2siLCJob3N0bmFtZSIsIm9wdGltb3ZlQ29yZUV2ZW50cyIsInNlbGYiLCJvcHRpbW92ZVRlbmFudENvbmZpZ3VyYXRpb24iLCJlbmFibGVXZWJQdXNoIiwiaW5pdGlhbGl6ZU9wdGltb2JpbGUiLCJlbmFibGVPcHRpdHJhY2siLCJpbml0aWFsaXplT3B0aVRyYWNrIiwibG9nTWV0YWRhdGFDb3JlRXZlbnQiLCJlbmFibGVSZWFsdGltZSIsImluaXRpYWxpemVSZWFsdGltZSIsIkFQSSIsIm9wZW5XZWJUZXN0VG9vbCIsInR5cGUiLCJhc3luYyIsImRlZmVyIiwicmVhZHlTdGF0ZSIsIm9ucmVhZHlzdGF0ZWNoYW5nZSIsImVuZHBvaW50IiwicGF5bG9hZCIsImV2ZW50IiwiZmV0Y2giLCJtZXRob2QiLCJoZWFkZXJzIiwicmVzcG9uc2UiLCJqc29uIiwiZXZlbnROYW1lIiwibG9nRXZlbnQiLCJwYXJhbWV0ZXJzIiwidXNlckluZm8iLCJ2aXNpdG9yVmFsdWUiLCJjdXN0b21lclZhbHVlIiwiYXNzaWduIiwidXBkYXRlZFZpc2l0b3JJZCIsInRlbmFudCIsIm9wdGl0cmFja01ldGFEYXRhIiwic2l0ZUlkIiwiY2F0ZWdvcnkiLCJvcmlnaW4iLCJjb250ZXh0IiwidGltZXN0YW1wIiwidG9JU09TdHJpbmciLCJtZXRhZGF0YSIsImZpcnN0VmlzaXRvckRhdGUiLCJldmVudElkIiwic2RrX3BsYXRmb3JtIiwic2RrX3ZlcnNpb24iLCJ2aXNpdG9yIiwiY3VzdG9tZXIiLCJkaXNwYXRjaCIsIm9wdGl0cmFja0V2ZW50cyIsInJlYWx0aW1lRXZlbnRzIiwicmVwb3J0RXZlbnRzVG9PcHRpbW9iaWxlIiwiZ2V0T3B0aXRyYWNrRW5kcG9pbnQiLCJkaXNwYXRjaFRvVHJhY2siLCJnZXRSZWFsdGltZUVuZHBvaW50IiwicG9zdFJlYWx0aW1lRXZlbnQiLCJkaXNwYXRjaFRvUmVhbHRpbWUiLCJ1cGRhdGVkVmFsdWUiLCJjdXJyVmFsdWUiLCJsb2NhbFN0b3JhZ2UiLCJ2aXNpdG9ySWQiLCJvcmlnaW5hbFZpc2l0b3JJZCIsImNvb2tpZU5hbWUiLCJjb29raWVPcmlnaW5hbFZpc2l0b3JJZFN0cmluZyIsImNvb2tpZSIsIlJlZ0V4cCIsImNvb2tpZU9yaWdpbmFsVmlzaXRvcklkIiwiZXZlbnRfcGFyYW1ldGVycyIsInBhcmFtZXRlck5hbWVzIiwiZ2V0T3duUHJvcGVydHlOYW1lcyIsImNvdW50ZXIiLCJtYXhBY3Rpb25DdXN0b21EaW1lbnNpb25zIiwiY3VyclBhcmFtVmFsdWUiLCJub3JtYWxpemVkVmFsdWUiLCJ0cmltIiwicmVzcG9uc2VEYXRhIiwiZGV2aWNlVHlwZSIsInBsYXRmb3JtIiwiZGV2aWNlT1MiLCJvc05hbWUiLCJvcyIsInZlcnNpb24iLCJkZXZpY2UiLCJjb25maWd1cmF0aW9uIiwidXNlckFnZW50IiwieG1saHR0cCIsIlhNTEh0dHBSZXF1ZXN0Iiwic2RrU2VydmljZXNFbmRQb2ludCIsIm9wZW4iLCJzZXRSZXF1ZXN0SGVhZGVyIiwic3RhdHVzIiwicGFyc2UiLCJyZXNwb25zZVRleHQiLCJzZW5kIiwiZ2V0VUFJbmZvQXN5bmMiLCJ2aXNpdG9yc0luZm8iLCJnZXRPcHRpdHJhY2tWaXNpdG9ySW5mbyIsInZpc2l0b3JJbmZvT2JqZWN0IiwidmlzaXRDb3VudCIsImV2ZW50X3BsYXRmb3JtIiwiZXZlbnRfZGV2aWNlX3R5cGUiLCJldmVudF9vcyIsImV2ZW50X25hdGl2ZV9tb2JpbGUiLCJlbGVtZW50IiwicmVtb3ZlRXZlbnRMaXN0ZW5lciIsImh0bWwiLCJwb3B1cERpdiIsImRpdkh0bWwiLCJyZWFsdGltZU1ldGFEYXRhIiwic2hvd0RpbW1lciIsImFkZEV2ZW50TGlzdGVuZXIiLCJzaG93V2F0ZXJtYXJrIiwic2NyaXB0VGFncyIsImV2YWwiLCJjYW1wYWlnbklkIiwicmVjdXJyZW5jZUZyYW1lU3RvcFRpbWUiLCJyZWN1cnJlbmNlTGVmdCIsIm1pbkNvdW50ZXIiLCJsc0NhbXBhaWduIiwibWluIiwicmVhbHRpbWVHYXRld2F5IiwiSXNTdWNjZXNzIiwiRGF0YSIsIk1ldGFkYXRhIiwiZGVsYXlWYWx1ZSIsImNhbXBhaWduRGV0YWlsSWQiLCJ0ZW1wbGF0ZUlkIiwiYWN0aW9uQ2hhbm5lbElkIiwic2VuZElkIiwic2V0VGltZW91dCIsInBvcHVwQ2FsbGJhY2siLCJldmVudEhhbmRsZXIiLCJwYXJhbXMiLCJyZXBvcnRFdmVudCIsImN1cnJFdmVudCIsImV2ZW50Q29uZmlnIiwiY3VyclBhcmFtIiwibG9nU2V0VXNlcklkIiwib3JpZ1Zpc2l0b3JJZFZhbHVlIiwidXBkYXRlZFVzZXJJZFZhbHVlIiwidXBkYXRlZFZpc2l0b3JJZFZhbHVlIiwibG9nVXNlckVtYWlsIiwiX2xvZ2dlciIsImlzUmVwb3J0ZWQiLCJ1cmxQYXJhbXMiLCJhcHBfbnMiLCJjYW1wYWlnbl9uYW1lIiwidXRtX2NhbXBhaWduIiwiY2FtcGFpZ25fa2V5d29yZCIsInV0bV90ZXJtIiwiY2FtcGFpZ25fc291cmNlIiwidXRtX3NvdXJjZSIsImNhbXBhaWduX21lZGl1bSIsInV0bV9tZWRpdW0iLCJjYW1wYWlnbl9jb250ZW50IiwidXRtX2NvbnRlbnQiLCJjYW1wYWlnbl9pZCIsInV0bV9pZCIsImNvbmZpZ19maWxlX3VybCIsImdldEtleUlkIiwiVEhJUyIsImtleU5hbWUiLCJyZXN1bHRLZXlJZCIsImVyck1zZyIsIm9wdGl0cmFja0VuZHBvaW50IiwidXNlU2Vzc2lvblN0b3JhZ2UiLCJ3IiwicSIsImFyZ3VtZW50cyIsImt1bXVsb3NNZXRhIiwia3VtdWxvc1dlYlNka01ldGFEYXRhIiwiZm4iLCJjb25maWciLCJhcGlLZXkiLCJzZWNyZXRLZXkiLCJ2YXBpZFB1YmxpY0tleSIsInJlZ2lvbiIsImN1c3RvbWVySWQiLCJLdW11bG9zIiwiYXBwZW5kIiwicHVzaFJlZ2lzdGVyIiwidXBkYXRlTGl2ZVJhbXBEYXRhTWF0Y2hpbmciLCJsaXZSYW1wSWQiLCJsaXZlUmFtcE9uU2Vzc2lvblBlcnNpc3RlZCIsIkxpdmVSYW1wTWV0YURhdGEiLCJ0ZW5hbnRUb2tlbiIsImJhc2VFbmRwb2ludCIsImxpdmVSYW1wVGVuYW50VG9rZW4iLCJsaXZlUmFtcFRlbXBsYXRlRW5kcG9pbnQiLCJ0ZW5hbnRJZCIsInJlZyIsInNyY1VybCIsImciLCJvcHRpbW92ZUxpdmVSYW1wRGF0YU1hdGNoaW5nIiwidXBkYXRlRGF0b25pY3NEYXRhTWF0Y2hpbmciLCJkYXRvbmljc0lkIiwiZGF0b25pY3NPblNlc3Npb25QZXJzaXN0ZWQiLCJvcHRpbW92ZV9Db29raWVfSUQiLCJvcHRpbW92ZV9DbGllbnRfSUQiLCJEYXRvbmljc0Nvb2tpZU1hdGNoaW5nTWV0YURhdGEiLCJyb3VuZCIsIm9wdGltb3ZlRGF0YU1hdGNoaW5nIiwidXBkYXRlQ29va2llTWF0Y2hlciIsImdvb2dsQ29va2llTWF0Y2hJZCIsImdvb2dsQ29va2llTWF0Y2hPblNlc3Npb25QZXJzaXN0ZWQiLCJjb29raWVNYXRjaGVyVXNlcklkIiwib3B0aW1vdmVDb29raWVNYXRjaGVySWQiLCJub2RlIiwic2V0Q29va2llVXJsIiwic2V0Q29va2llTm9kZSIsImRpc3BsYXkiLCJzZXRPcHRpbW92ZUNvb2tpZSIsImNvb2tpZU1hdGNoZXJNZXRhRGF0YSIsInVwZGF0ZWRVc2VySWQiLCJzdWJzdHJpbmciLCJnZXRWZXJzaW9uIiwiZ2V0Q29uZmlndXJhdGlvblZlcnNpb24iLCJzZXRSZWFsVGltZU9wdGlvbnMiLCJyZXBvcnRFdmVudENhbGxiYWNrIiwic3VwcG9ydENvb2tpZU1hdGNoZXIiLCJzZXRVc2VyRW1haWwiLCJyZWdpc3RlclVzZXIiLCJzZXRQYWdlVmlzaXQiLCJjdXN0b21VUkxJbiIsInBhZ2VUaXRsZUluIiwiY2F0ZWdvcnlJbiIsInBhZ2VUaXRsZSIsImVuY29kZVVSSSIsInN1cHBvcnREYXRvbmljc0Nvb2tpZU1hdGNoaW5nIiwic3VwcG9ydExpdmVSYW1wIiwic2hvd1JlYWx0aW1lUG9wdXAiLCJjbG9zZVJlYWx0aW1lUG9wdXAiLCJjbG9zZVdlYlRlc3RUb29sIiwidG9vbHMiLCJpbml0aWFsaXplIl0sIm1hcHBpbmdzIjoiOzZFQTBoQkEsVUExaEJ5QixDQUN4QixPQUFVLENBQ1Qsc0JBQXlCLENBQ3hCLEdBQU0sS0FDTixzQkFBd0IsRUFDeEIscUJBQXVCLEVBQ3ZCLFdBQWMsQ0FDYixlQUFrQixDQUNqQixHQUFNLElBQ04sS0FBUSxXQUNSLFdBQWMsaUJBQ2QsS0FBUSxTQUNSLFVBQVksRUFDWixxQkFBd0IsR0FFekIsa0JBQXFCLENBQ3BCLEdBQU0sS0FDTixLQUFRLGNBQ1IsV0FBYyxvQkFDZCxLQUFRLFNBQ1IsVUFBWSxFQUNaLHFCQUF3QixHQUV6QixTQUFZ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SixnQkFDbEJqSCxFQUFPcUMsSUFBSSxPQUFRLHdDQUEwQ3FHLEVBQVMzRCxRQUN0RWlOLFFBQVEsZ0JBQWlCdEosRUFBUzNELGtCQU9vQixJQUFoRHJILEVBQWV3WCwrQkFBZ0csR0FBaER4WCxFQUFld1gsZ0NBQ3hGbFYsRUFBT3FDLElBQUksT0FBUSxvREFDbkJYLEdBQWVzUixtQ0FHa0MsSUFBdkN0VixFQUFlK1csc0JBQThFLEdBQXZDL1csRUFBZStXLHNCQUU5RTlTLEdBQW9CNlIsb0JBQW9CLFdBSUcsSUFBbEM5VixFQUFleVgsaUJBQW9FLEdBQWxDelgsRUFBZXlYLGlCQUMxRTFULEdBQWUwUSw4QkFLWEQsYUFBYyxXQUNWMVEsR0FBaUIwUSxnQkFHM0JrRCxrQkFBbUI5VCxHQUFlbkQsYUFDbENrWCxtQkFBb0IvVCxHQUFlcEQsV0FDbkN1SixnQkFBaUIsV0FDSXhXLFNBQVM2QyxlQUFlLHdCQUczQ2pELGlCQUdGeWtCLGlCQUFrQixXQUNqQixJQUFJcmhCLEVBQUloRCxTQUFTNkMsZUFBZSxzQkFDaEMsR0FBU0ksTUFBTEQsRUFBZ0IsQ0FDbkJBLEVBQUVFLFNBQ0YsSUFDQ3ZELE9BQU84QyxlQUFlQyxRQUFRLHlCQUF5QixHQUN0RCxNQUFPc08sR0FDVGpDLEVBQU9xQyxJQUFJLFFBQVgsbUVBQWdGSixLQUdqRmhSLFNBQVNzQyxLQUFLckIsVUFBVWlDLE9BQU8sMEJBQy9CbEQsU0FBU3NDLEtBQUtRLE1BQU1oQixNQUFRLFFBRTdCd2lCLE1BQU8sV0FDTixPQUFPclYsSUFNTDZHLEtBQUtDLDZCQUNSN0csRUFBSyxLQUFLLEtBQUssS0FBTSxRQUdmLENBQ05xVixXQUFZclYsRUFDWnFILElBQUszRixLIiwiZmlsZSI6InNkay1xYS5qcyIsInNvdXJjZXNDb250ZW50IjpbInZhciBvcHRpbW92ZUNvcmVFdmVudHMgPSB7XG5cdFwiZXZlbnRzXCI6IHtcblx0XHRcIm9wdGltb3ZlX3Nka19tZXRhZGF0YVwiOiB7XG5cdFx0XHRcImlkXCI6IDEwMDcsXG5cdFx0XHRcInN1cHBvcnRlZE9uT3B0aXRyYWNrXCI6IHRydWUsXG5cdFx0XHRcInN1cHBvcnRlZE9uUmVhbFRpbWVcIjogZmFsc2UsXG5cdFx0XHRcInBhcmFtZXRlcnNcIjoge1xuXHRcdFx0XHRcImV2ZW50X3BsYXRmb3JtXCI6IHtcblx0XHRcdFx0XHRcImlkXCI6IDEwMDAsXG5cdFx0XHRcdFx0XCJuYW1lXCI6IFwiUGxhdGZvcm1cIixcblx0XHRcdFx0XHRcImNvbmZpZ05hbWVcIjogXCJldmVudF9wbGF0Zm9ybVwiLFxuXHRcdFx0XHRcdFwidHlwZVwiOiBcIlN0cmluZ1wiLFxuXHRcdFx0XHRcdFwib3B0aW9uYWxcIjogdHJ1ZSxcblx0XHRcdFx0XHRcIm9wdGlUcmFja0RpbWVuc2lvbklkXCI6IDhcblx0XHRcdFx0fSxcblx0XHRcdFx0XCJldmVudF9kZXZpY2VfdHlwZVwiOiB7XG5cdFx0XHRcdFx0XCJpZFwiOiAxMDAxLFxuXHRcdFx0XHRcdFwibmFtZVwiOiBcIkRldmljZSBUeXBlXCIsXG5cdFx0XHRcdFx0XCJjb25maWdOYW1lXCI6IFwiZXZlbnRfZGV2aWNlX3R5cGVcIixcblx0XHRcdFx0XHRcInR5cGVcIjogXCJTdHJpbmdcIixcblx0XHRcdFx0XHRcIm9wdGlvbmFsXCI6IHRydWUsXG5cdFx0XHRcdFx0XCJvcHRpVHJhY2tEaW1lbnNpb25JZFwiOiA5XG5cdFx0XHRcdH0sXG5cdFx0XHRcdFwiZXZlbnRfb3NcIjoge1xuXHRcdFx0XHRcdFwiaWRcIjogMTAwMixcblx0XHRcdFx0XHRcIm5hbWVcIjogXCJPU1wiLFxuXHRcdFx0XHRcdFwiY29uZmlnTmFtZVwiOiBcImV2ZW50X29zXCIsXG5cdFx0XHRcdFx0XCJ0eXBlXCI6IFwiU3RyaW5nXCIsXG5cdFx0XHRcdFx0XCJvcHRpb25hbFwiOiB0cnVlLFxuXHRcdFx0XHRcdFwib3B0aVRyYWNrRGltZW5zaW9uSWRcIjogMTBcblx0XHRcdFx0fSxcblx0XHRcdFx0XCJldmVudF9uYXRpdmVfbW9iaWxlXCI6IHtcblx0XHRcdFx0XHRcImlkXCI6IDEwMDMsXG5cdFx0XHRcdFx0XCJuYW1lXCI6IFwiTmF0aXZlIE1vYmlsZVwiLFxuXHRcdFx0XHRcdFwiY29uZmlnTmFtZVwiOiBcImV2ZW50X25hdGl2ZV9tb2JpbGVcIixcblx0XHRcdFx0XHRcInR5cGVcIjogXCJCb29sZWFuXCIsXG5cdFx0XHRcdFx0XCJvcHRpb25hbFwiOiB0cnVlLFxuXHRcdFx0XHRcdFwib3B0aVRyYWNrRGltZW5zaW9uSWRcIjogMTFcblx0XHRcdFx0fSxcblx0XHRcdFx0XCJzZGtfcGxhdGZvcm1cIjoge1xuXHRcdFx0XHRcdFwiaWRcIjogMSxcblx0XHRcdFx0XHRcIm5hbWVcIjogXCJTREsgUGxhdGZvcm1cIixcblx0XHRcdFx0XHRcImNvbmZpZ05hbWVcIjogXCJzZGtfcGxhdGZvcm1cIixcblx0XHRcdFx0XHRcInR5cGVcIjogXCJTdHJpbmdcIixcblx0XHRcdFx0XHRcIm9wdGlvbmFsXCI6IGZhbHNlLFxuXHRcdFx0XHRcdFwib3B0aVRyYWNrRGltZW5zaW9uSWRcIjogMTJcblx0XHRcdFx0fSxcblx0XHRcdFx0XCJzZGtfdmVyc2lvblwiOiB7XG5cdFx0XHRcdFx0XCJpZFwiOiAyLFxuXHRcdFx0XHRcdFwibmFtZVwiOiBcIlNESyBWZXJzaW9uXCIsXG5cdFx0XHRcdFx0XCJjb25maWdOYW1lXCI6IFwic2RrX3ZlcnNpb25cIixcblx0XHRcdFx0XHRcInR5cGVcIjogXCJTdHJpbmdcIixcblx0XHRcdFx0XHRcIm9wdGlvbmFsXCI6IGZhbHNlLFxuXHRcdFx0XHRcdFwib3B0aVRyYWNrRGltZW5zaW9uSWRcIjogMTNcblx0XHRcdFx0fSxcblx0XHRcdFx0XCJjb25maWdfZmlsZV91cmxcIjoge1xuXHRcdFx0XHRcdFwiaWRcIjogMyxcblx0XHRcdFx0XHRcIm5hbWVcIjogXCJDb25maWcgZmlsZSBVUkxcIixcblx0XHRcdFx0XHRcImNvbmZpZ05hbWVcIjogXCJjb25maWdfZmlsZV91cmxcIixcblx0XHRcdFx0XHRcInR5cGVcIjogXCJTdHJpbmdcIixcblx0XHRcdFx0XHRcIm9wdGlvbmFsXCI6IHRydWUsXG5cdFx0XHRcdFx0XCJvcHRpVHJhY2tEaW1lbnNpb25JZFwiOiAxNFxuXHRcdFx0XHR9LFxuXHRcdFx0XHRcImFwcF9uc1wiOiB7XG5cdFx0XHRcdFx0XCJpZFwiOiA0LFxuXHRcdFx0XHRcdFwibmFtZVwiOiBcIkFwcCBOYW1lc3BhY2VcIixcblx0XHRcdFx0XHRcImNvbmZpZ05hbWVcIjogXCJhcHBfbnNcIixcblx0XHRcdFx0XHRcInR5cGVcIjogXCJTdHJpbmdcIixcblx0XHRcdFx0XHRcIm9wdGlvbmFsXCI6IGZhbHNlLFxuXHRcdFx0XHRcdFwib3B0aVRyYWNrRGltZW5zaW9uSWRcIjogMTVcblx0XHRcdFx0fSxcblx0XHRcdFx0XCJjYW1wYWlnbl9uYW1lXCI6IHtcblx0XHRcdFx0XHRcImlkXCI6IDUsXG5cdFx0XHRcdFx0XCJuYW1lXCI6IFwiVVRNIENhbXBhaWduIE5hbWVcIixcblx0XHRcdFx0XHRcImNvbmZpZ05hbWVcIjogXCJjYW1wYWlnbl9uYW1lXCIsXG5cdFx0XHRcdFx0XCJ0eXBlXCI6IFwiU3RyaW5nXCIsXG5cdFx0XHRcdFx0XCJvcHRpb25hbFwiOiB0cnVlLFxuXHRcdFx0XHRcdFwib3B0aVRyYWNrRGltZW5zaW9uSWRcIjogMTZcblx0XHRcdFx0fSxcblx0XHRcdFx0XCJjYW1wYWlnbl9rZXl3b3JkXCI6IHtcblx0XHRcdFx0XHRcImlkXCI6IDYsXG5cdFx0XHRcdFx0XCJuYW1lXCI6IFwiVVRNIENhbXBhaWduIEtleXdvcmRcIixcblx0XHRcdFx0XHRcImNvbmZpZ05hbWVcIjogXCJjYW1wYWlnbl9rZXl3b3JkXCIsXG5cdFx0XHRcdFx0XCJ0eXBlXCI6IFwiU3RyaW5nXCIsXG5cdFx0XHRcdFx0XCJvcHRpb25hbFwiOiB0cnVlLFxuXHRcdFx0XHRcdFwib3B0aVRyYWNrRGltZW5zaW9uSWRcIjogMTdcblx0XHRcdFx0fSxcblx0XHRcdFx0XCJjYW1wYWlnbl9zb3VyY2VcIjoge1xuXHRcdFx0XHRcdFwiaWRcIjogNyxcblx0XHRcdFx0XHRcIm5hbWVcIjogXCJVVE0gQ2FtcGFpZ24gU291cmNlXCIsXG5cdFx0XHRcdFx0XCJjb25maWdOYW1lXCI6IFwiY2FtcGFpZ25fc291cmNlXCIsXG5cdFx0XHRcdFx0XCJ0eXBlXCI6IFwiU3RyaW5nXCIsXG5cdFx0XHRcdFx0XCJvcHRpb25hbFwiOiB0cnVlLFxuXHRcdFx0XHRcdFwib3B0aVRyYWNrRGltZW5zaW9uSWRcIjogMThcblx0XHRcdFx0fSxcblx0XHRcdFx0XCJjYW1wYWlnbl9tZWRpdW1cIjoge1xuXHRcdFx0XHRcdFwiaWRcIjogOCxcblx0XHRcdFx0XHRcIm5hbWVcIjogXCJVVE0gQ2FtcGFpZ24gTWVkaXVtXCIsXG5cdFx0XHRcdFx0XCJjb25maWdOYW1lXCI6IFwiY2FtcGFpZ25fbWVkaXVtXCIsXG5cdFx0XHRcdFx0XCJ0eXBlXCI6IFwiU3RyaW5nXCIsXG5cdFx0XHRcdFx0XCJvcHRpb25hbFwiOiB0cnVlLFxuXHRcdFx0XHRcdFwib3B0aVRyYWNrRGltZW5zaW9uSWRcIjogMTlcblx0XHRcdFx0fSxcblx0XHRcdFx0XCJjYW1wYWlnbl9jb250ZW50XCI6IHtcblx0XHRcdFx0XHRcImlkXCI6IDksXG5cdFx0XHRcdFx0XCJuYW1lXCI6IFwiVVRNIENhbXBhaWduIENvbnRlbnRcIixcblx0XHRcdFx0XHRcImNvbmZpZ05hbWVcIjogXCJjYW1wYWlnbl9jb250ZW50XCIsXG5cdFx0XHRcdFx0XCJ0eXBlXCI6IFwiU3RyaW5nXCIsXG5cdFx0XHRcdFx0XCJvcHRpb25hbFwiOiB0cnVlLFxuXHRcdFx0XHRcdFwib3B0aVRyYWNrRGltZW5zaW9uSWRcIjogMjBcblx0XHRcdFx0fSxcblx0XHRcdFx0XCJjYW1wYWlnbl9pZFwiOiB7XG5cdFx0XHRcdFx0XCJpZFwiOiAxMCxcblx0XHRcdFx0XHRcIm5hbWVcIjogXCJVVE0gQ2FtcGFpZ24gSURcIixcblx0XHRcdFx0XHRcImNvbmZpZ05hbWVcIjogXCJjYW1wYWlnbl9pZFwiLFxuXHRcdFx0XHRcdFwidHlwZVwiOiBcIlN0cmluZ1wiLFxuXHRcdFx0XHRcdFwib3B0aW9uYWxcIjogdHJ1ZSxcblx0XHRcdFx0XHRcIm9wdGlUcmFja0RpbWVuc2lvbklkXCI6IDIxXG5cdFx0XHRcdH0sXG5cdFx0XHRcdFwibG9jYXRpb25cIjoge1xuXHRcdFx0XHRcdFwiaWRcIjogMTEsXG5cdFx0XHRcdFx0XCJuYW1lXCI6IFwiR0VPIExvY2F0aW9uXCIsXG5cdFx0XHRcdFx0XCJjb25maWdOYW1lXCI6IFwibG9jYXRpb25cIixcblx0XHRcdFx0XHRcInR5cGVcIjogXCJTdHJpbmdcIixcblx0XHRcdFx0XHRcIm9wdGlvbmFsXCI6IHRydWUsXG5cdFx0XHRcdFx0XCJvcHRpVHJhY2tEaW1lbnNpb25JZFwiOiAyMlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRcImxvY2F0aW9uX2xhdGl0dWRlXCI6IHtcblx0XHRcdFx0XHRcImlkXCI6IDEyLFxuXHRcdFx0XHRcdFwibmFtZVwiOiBcIkxvY2F0aW9uIGxhdGl0dWRlXCIsXG5cdFx0XHRcdFx0XCJjb25maWdOYW1lXCI6IFwibG9jYXRpb25fbGF0aXR1ZGVcIixcblx0XHRcdFx0XHRcInR5cGVcIjogXCJTdHJpbmdcIixcblx0XHRcdFx0XHRcIm9wdGlvbmFsXCI6IHRydWUsXG5cdFx0XHRcdFx0XCJvcHRpVHJhY2tEaW1lbnNpb25JZFwiOiAyM1xuXHRcdFx0XHR9LFxuXHRcdFx0XHRcImxvY2F0aW9uX2xvbmdpdHVkZVwiOiB7XG5cdFx0XHRcdFx0XCJpZFwiOiAxMyxcblx0XHRcdFx0XHRcIm5hbWVcIjogXCJMb2NhdGlvbiBsb25naXR1ZGVcIixcblx0XHRcdFx0XHRcImNvbmZpZ05hbWVcIjogXCJsb2NhdGlvbl9sb25naXR1ZGVcIixcblx0XHRcdFx0XHRcInR5cGVcIjogXCJTdHJpbmdcIixcblx0XHRcdFx0XHRcIm9wdGlvbmFsXCI6IHRydWUsXG5cdFx0XHRcdFx0XCJvcHRpVHJhY2tEaW1lbnNpb25JZFwiOiAyNFxuXHRcdFx0XHR9LFxuXHRcdFx0XHRcImlwXCI6IHtcblx0XHRcdFx0XHRcImlkXCI6IDE0LFxuXHRcdFx0XHRcdFwibmFtZVwiOiBcIklQIEFkZHJlc3NcIixcblx0XHRcdFx0XHRcImNvbmZpZ05hbWVcIjogXCJpcFwiLFxuXHRcdFx0XHRcdFwidHlwZVwiOiBcIlN0cmluZ1wiLFxuXHRcdFx0XHRcdFwib3B0aW9uYWxcIjogdHJ1ZSxcblx0XHRcdFx0XHRcIm9wdGlUcmFja0RpbWVuc2lvbklkXCI6IDI1XG5cdFx0XHRcdH0sXG5cdFx0XHRcdFwibGFuZ3VhZ2VcIjoge1xuXHRcdFx0XHRcdFwiaWRcIjogMTUsXG5cdFx0XHRcdFx0XCJuYW1lXCI6IFwiTGFuZ3VhZ2VcIixcblx0XHRcdFx0XHRcImNvbmZpZ05hbWVcIjogXCJsYW5ndWFnZVwiLFxuXHRcdFx0XHRcdFwidHlwZVwiOiBcIlN0cmluZ1wiLFxuXHRcdFx0XHRcdFwib3B0aW9uYWxcIjogdHJ1ZSxcblx0XHRcdFx0XHRcIm9wdGlUcmFja0RpbWVuc2lvbklkXCI6IDI2XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9LFxuXHRcdFwid2ViX3BvcHVwX2Rpc3BsYXllZFwiOiB7XG5cdFx0XHRcImlkXCI6IDEwMDgsXG5cdFx0XHRcInN1cHBvcnRlZE9uT3B0aXRyYWNrXCI6IHRydWUsXG5cdFx0XHRcInN1cHBvcnRlZE9uUmVhbFRpbWVcIjogdHJ1ZSxcblx0XHRcdFwicGFyYW1ldGVyc1wiOiB7XG5cdFx0XHRcdFwiZXZlbnRfcGxhdGZvcm1cIjoge1xuXHRcdFx0XHRcdFwiaWRcIjogMTAwMCxcblx0XHRcdFx0XHRcIm5hbWVcIjogXCJQbGF0Zm9ybVwiLFxuXHRcdFx0XHRcdFwiY29uZmlnTmFtZVwiOiBcImV2ZW50X3BsYXRmb3JtXCIsXG5cdFx0XHRcdFx0XCJ0eXBlXCI6IFwiU3RyaW5nXCIsXG5cdFx0XHRcdFx0XCJvcHRpb25hbFwiOiB0cnVlLFxuXHRcdFx0XHRcdFwib3B0aVRyYWNrRGltZW5zaW9uSWRcIjogOFxuXHRcdFx0XHR9LFxuXHRcdFx0XHRcImV2ZW50X2RldmljZV90eXBlXCI6IHtcblx0XHRcdFx0XHRcImlkXCI6IDEwMDEsXG5cdFx0XHRcdFx0XCJuYW1lXCI6IFwiRGV2aWNlIFR5cGVcIixcblx0XHRcdFx0XHRcImNvbmZpZ05hbWVcIjogXCJldmVudF9kZXZpY2VfdHlwZVwiLFxuXHRcdFx0XHRcdFwidHlwZVwiOiBcIlN0cmluZ1wiLFxuXHRcdFx0XHRcdFwib3B0aW9uYWxcIjogdHJ1ZSxcblx0XHRcdFx0XHRcIm9wdGlUcmFja0RpbWVuc2lvbklkXCI6IDlcblx0XHRcdFx0fSxcblx0XHRcdFx0XCJldmVudF9vc1wiOiB7XG5cdFx0XHRcdFx0XCJpZFwiOiAxMDAyLFxuXHRcdFx0XHRcdFwibmFtZVwiOiBcIk9TXCIsXG5cdFx0XHRcdFx0XCJjb25maWdOYW1lXCI6IFwiZXZlbnRfb3NcIixcblx0XHRcdFx0XHRcInR5cGVcIjogXCJTdHJpbmdcIixcblx0XHRcdFx0XHRcIm9wdGlvbmFsXCI6IHRydWUsXG5cdFx0XHRcdFx0XCJvcHRpVHJhY2tEaW1lbnNpb25JZFwiOiAxMFxuXHRcdFx0XHR9LFxuXHRcdFx0XHRcImV2ZW50X25hdGl2ZV9tb2JpbGVcIjoge1xuXHRcdFx0XHRcdFwiaWRcIjogMTAwMyxcblx0XHRcdFx0XHRcIm5hbWVcIjogXCJOYXRpdmUgTW9iaWxlXCIsXG5cdFx0XHRcdFx0XCJjb25maWdOYW1lXCI6IFwiZXZlbnRfbmF0aXZlX21vYmlsZVwiLFxuXHRcdFx0XHRcdFwidHlwZVwiOiBcIkJvb2xlYW5cIixcblx0XHRcdFx0XHRcIm9wdGlvbmFsXCI6IHRydWUsXG5cdFx0XHRcdFx0XCJvcHRpVHJhY2tEaW1lbnNpb25JZFwiOiAxMVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRcImNhbXBhaWduX2RldGFpbF9pZFwiOiB7XG5cdFx0XHRcdFx0XCJpZFwiOiAxLFxuXHRcdFx0XHRcdFwibmFtZVwiOiBcIkNhbXBhaWduIERldGFpbCBJRFwiLFxuXHRcdFx0XHRcdFwiY29uZmlnTmFtZVwiOiBcImNhbXBhaWduX2RldGFpbF9pZFwiLFxuXHRcdFx0XHRcdFwidHlwZVwiOiBcIk51bWJlclwiLFxuXHRcdFx0XHRcdFwib3B0aW9uYWxcIjogZmFsc2UsXG5cdFx0XHRcdFx0XCJvcHRpVHJhY2tEaW1lbnNpb25JZFwiOiAxMlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRcInRlbXBsYXRlX2lkXCI6IHtcblx0XHRcdFx0XHRcImlkXCI6IDIsXG5cdFx0XHRcdFx0XCJuYW1lXCI6IFwiVGVtcGxhdGUgSURcIixcblx0XHRcdFx0XHRcImNvbmZpZ05hbWVcIjogXCJ0ZW1wbGF0ZV9pZFwiLFxuXHRcdFx0XHRcdFwidHlwZVwiOiBcIk51bWJlclwiLFxuXHRcdFx0XHRcdFwib3B0aW9uYWxcIjogdHJ1ZSxcblx0XHRcdFx0XHRcIm9wdGlUcmFja0RpbWVuc2lvbklkXCI6IDEzXG5cdFx0XHRcdH0sXG5cdFx0XHRcdFwiYWN0aW9uX2NoYW5uZWxfaWRcIjoge1xuXHRcdFx0XHRcdFwiaWRcIjogMyxcblx0XHRcdFx0XHRcIm5hbWVcIjogXCJBY3Rpb24gQ2hhbm5lbCBJRFwiLFxuXHRcdFx0XHRcdFwiY29uZmlnTmFtZVwiOiBcImFjdGlvbl9jaGFubmVsX2lkXCIsXG5cdFx0XHRcdFx0XCJ0eXBlXCI6IFwiTnVtYmVyXCIsXG5cdFx0XHRcdFx0XCJvcHRpb25hbFwiOiB0cnVlLFxuXHRcdFx0XHRcdFwib3B0aVRyYWNrRGltZW5zaW9uSWRcIjogMTRcblx0XHRcdFx0fSxcblx0XHRcdFx0XCJzZW5kX2lkXCI6IHtcblx0XHRcdFx0XHRcImlkXCI6IDQsXG5cdFx0XHRcdFx0XCJuYW1lXCI6IFwiU2VuZCBJRFwiLFxuXHRcdFx0XHRcdFwiY29uZmlnTmFtZVwiOiBcInNlbmRfaWRcIixcblx0XHRcdFx0XHRcInR5cGVcIjogXCJTdHJpbmdcIixcblx0XHRcdFx0XHRcIm9wdGlvbmFsXCI6IHRydWUsXG5cdFx0XHRcdFx0XCJvcHRpVHJhY2tEaW1lbnNpb25JZFwiOiAxNVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSxcblx0XHRcInRpY2tldF9vcGVuZWRcIjp7XG5cdFx0XHRcImlkXCI6IDEwMjMsXG5cdFx0XHRcInN1cHBvcnRlZE9uT3B0aXRyYWNrXCI6IGZhbHNlLFxuXHRcdFx0XCJzdXBwb3J0ZWRPblJlYWxUaW1lXCI6IHRydWUsXG5cdFx0XHRcInBhcmFtZXRlcnNcIjoge31cblx0XHR9LFxuXHRcdFwidGlja2V0X3Jlc29sdmVkXCI6e1xuXHRcdFx0XCJpZFwiOiAxMDI0LFxuXHRcdFx0XCJzdXBwb3J0ZWRPbk9wdGl0cmFja1wiOiBmYWxzZSxcblx0XHRcdFwic3VwcG9ydGVkT25SZWFsVGltZVwiOiB0cnVlLFxuXHRcdFx0XCJwYXJhbWV0ZXJzXCI6IHt9XG4gICAgICAgIH0sXG4gICAgICAgIFwic2V0X3VzZXJfaWRfZXZlbnRcIjoge1xuICAgICAgICAgICAgXCJpZFwiOiAxMDAxLFxuICAgICAgICAgICAgXCJzdXBwb3J0ZWRPbk9wdGl0cmFja1wiOiB0cnVlLFxuICAgICAgICAgICAgXCJzdXBwb3J0ZWRPblJlYWxUaW1lXCI6IHRydWUsXG4gICAgICAgICAgICBcInBhcmFtZXRlcnNcIjoge1xuICAgICAgICAgICAgICBcImV2ZW50X3BsYXRmb3JtXCI6IHtcbiAgICAgICAgICAgICAgICBcImlkXCI6IDEwMDAsXG4gICAgICAgICAgICAgICAgXCJuYW1lXCI6IFwiUGxhdGZvcm1cIixcbiAgICAgICAgICAgICAgICBcImNvbmZpZ05hbWVcIjogXCJldmVudF9wbGF0Zm9ybVwiLFxuICAgICAgICAgICAgICAgIFwidHlwZVwiOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIFwib3B0aW9uYWxcIjogdHJ1ZSxcbiAgICAgICAgICAgICAgICBcIm9wdGlUcmFja0RpbWVuc2lvbklkXCI6IDExXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIFwiZXZlbnRfZGV2aWNlX3R5cGVcIjoge1xuICAgICAgICAgICAgICAgIFwiaWRcIjogMTAwMSxcbiAgICAgICAgICAgICAgICBcIm5hbWVcIjogXCJEZXZpY2UgVHlwZVwiLFxuICAgICAgICAgICAgICAgIFwiY29uZmlnTmFtZVwiOiBcImV2ZW50X2RldmljZV90eXBlXCIsXG4gICAgICAgICAgICAgICAgXCJ0eXBlXCI6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgXCJvcHRpb25hbFwiOiB0cnVlLFxuICAgICAgICAgICAgICAgIFwib3B0aVRyYWNrRGltZW5zaW9uSWRcIjogMTJcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgXCJldmVudF9vc1wiOiB7XG4gICAgICAgICAgICAgICAgXCJpZFwiOiAxMDAyLFxuICAgICAgICAgICAgICAgIFwibmFtZVwiOiBcIk9TXCIsXG4gICAgICAgICAgICAgICAgXCJjb25maWdOYW1lXCI6IFwiZXZlbnRfb3NcIixcbiAgICAgICAgICAgICAgICBcInR5cGVcIjogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICBcIm9wdGlvbmFsXCI6IHRydWUsXG4gICAgICAgICAgICAgICAgXCJvcHRpVHJhY2tEaW1lbnNpb25JZFwiOiAxM1xuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBcImV2ZW50X25hdGl2ZV9tb2JpbGVcIjoge1xuICAgICAgICAgICAgICAgIFwiaWRcIjogMTAwMyxcbiAgICAgICAgICAgICAgICBcIm5hbWVcIjogXCJOYXRpdmUgTW9iaWxlXCIsXG4gICAgICAgICAgICAgICAgXCJjb25maWdOYW1lXCI6IFwiZXZlbnRfbmF0aXZlX21vYmlsZVwiLFxuICAgICAgICAgICAgICAgIFwidHlwZVwiOiBcIkJvb2xlYW5cIixcbiAgICAgICAgICAgICAgICBcIm9wdGlvbmFsXCI6IHRydWUsXG4gICAgICAgICAgICAgICAgXCJvcHRpVHJhY2tEaW1lbnNpb25JZFwiOiAxNFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBcIm9yaWdpbmFsVmlzaXRvcklkXCI6IHtcbiAgICAgICAgICAgICAgICBcImlkXCI6IDEsXG4gICAgICAgICAgICAgICAgXCJuYW1lXCI6IFwiT3JpZ2luYWwgVmlzaXRvciBJRFwiLFxuICAgICAgICAgICAgICAgIFwiY29uZmlnTmFtZVwiOiBcIm9yaWdpbmFsVmlzaXRvcklkXCIsXG4gICAgICAgICAgICAgICAgXCJ0eXBlXCI6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgXCJvcHRpb25hbFwiOiBmYWxzZSxcbiAgICAgICAgICAgICAgICBcIm9wdGlUcmFja0RpbWVuc2lvbklkXCI6IDhcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgXCJ1c2VySWRcIjoge1xuICAgICAgICAgICAgICAgIFwiaWRcIjogMixcbiAgICAgICAgICAgICAgICBcIm5hbWVcIjogXCJVc2VyIElEXCIsXG4gICAgICAgICAgICAgICAgXCJjb25maWdOYW1lXCI6IFwidXNlcklkXCIsXG4gICAgICAgICAgICAgICAgXCJ0eXBlXCI6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgXCJvcHRpb25hbFwiOiBmYWxzZSxcbiAgICAgICAgICAgICAgICBcIm9wdGlUcmFja0RpbWVuc2lvbklkXCI6IDlcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgXCJ1cGRhdGVkVmlzaXRvcklkXCI6IHtcbiAgICAgICAgICAgICAgICBcImlkXCI6IDMsXG4gICAgICAgICAgICAgICAgXCJuYW1lXCI6IFwiVXBkYXRlZCBWaXNpdG9yIElEXCIsXG4gICAgICAgICAgICAgICAgXCJjb25maWdOYW1lXCI6IFwidXBkYXRlZFZpc2l0b3JJZFwiLFxuICAgICAgICAgICAgICAgIFwidHlwZVwiOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIFwib3B0aW9uYWxcIjogZmFsc2UsXG4gICAgICAgICAgICAgICAgXCJvcHRpVHJhY2tEaW1lbnNpb25JZFwiOiAxMFxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInNldF9lbWFpbF9ldmVudFwiOiB7XG4gICAgICAgICAgICBcImlkXCI6IDEwMDIsXG4gICAgICAgICAgICBcInN1cHBvcnRlZE9uT3B0aXRyYWNrXCI6IHRydWUsXG4gICAgICAgICAgICBcInN1cHBvcnRlZE9uUmVhbFRpbWVcIjogdHJ1ZSxcbiAgICAgICAgICAgIFwicGFyYW1ldGVyc1wiOiB7XG4gICAgICAgICAgICAgIFwiZXZlbnRfcGxhdGZvcm1cIjoge1xuICAgICAgICAgICAgICAgIFwiaWRcIjogMTAwMCxcbiAgICAgICAgICAgICAgICBcIm5hbWVcIjogXCJQbGF0Zm9ybVwiLFxuICAgICAgICAgICAgICAgIFwiY29uZmlnTmFtZVwiOiBcImV2ZW50X3BsYXRmb3JtXCIsXG4gICAgICAgICAgICAgICAgXCJ0eXBlXCI6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgXCJvcHRpb25hbFwiOiB0cnVlLFxuICAgICAgICAgICAgICAgIFwib3B0aVRyYWNrRGltZW5zaW9uSWRcIjogOVxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBcImV2ZW50X2RldmljZV90eXBlXCI6IHtcbiAgICAgICAgICAgICAgICBcImlkXCI6IDEwMDEsXG4gICAgICAgICAgICAgICAgXCJuYW1lXCI6IFwiRGV2aWNlIFR5cGVcIixcbiAgICAgICAgICAgICAgICBcImNvbmZpZ05hbWVcIjogXCJldmVudF9kZXZpY2VfdHlwZVwiLFxuICAgICAgICAgICAgICAgIFwidHlwZVwiOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIFwib3B0aW9uYWxcIjogdHJ1ZSxcbiAgICAgICAgICAgICAgICBcIm9wdGlUcmFja0RpbWVuc2lvbklkXCI6IDEwXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIFwiZXZlbnRfb3NcIjoge1xuICAgICAgICAgICAgICAgIFwiaWRcIjogMTAwMixcbiAgICAgICAgICAgICAgICBcIm5hbWVcIjogXCJPU1wiLFxuICAgICAgICAgICAgICAgIFwiY29uZmlnTmFtZVwiOiBcImV2ZW50X29zXCIsXG4gICAgICAgICAgICAgICAgXCJ0eXBlXCI6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgXCJvcHRpb25hbFwiOiB0cnVlLFxuICAgICAgICAgICAgICAgIFwib3B0aVRyYWNrRGltZW5zaW9uSWRcIjogMTFcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgXCJldmVudF9uYXRpdmVfbW9iaWxlXCI6IHtcbiAgICAgICAgICAgICAgICBcImlkXCI6IDEwMDMsXG4gICAgICAgICAgICAgICAgXCJuYW1lXCI6IFwiTmF0aXZlIE1vYmlsZVwiLFxuICAgICAgICAgICAgICAgIFwiY29uZmlnTmFtZVwiOiBcImV2ZW50X25hdGl2ZV9tb2JpbGVcIixcbiAgICAgICAgICAgICAgICBcInR5cGVcIjogXCJCb29sZWFuXCIsXG4gICAgICAgICAgICAgICAgXCJvcHRpb25hbFwiOiB0cnVlLFxuICAgICAgICAgICAgICAgIFwib3B0aVRyYWNrRGltZW5zaW9uSWRcIjogMTJcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgXCJlbWFpbFwiOiB7XG4gICAgICAgICAgICAgICAgXCJpZFwiOiAxLFxuICAgICAgICAgICAgICAgIFwibmFtZVwiOiBcIkVtYWlsXCIsXG4gICAgICAgICAgICAgICAgXCJjb25maWdOYW1lXCI6IFwiZW1haWxcIixcbiAgICAgICAgICAgICAgICBcInR5cGVcIjogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICBcIm9wdGlvbmFsXCI6IGZhbHNlLFxuICAgICAgICAgICAgICAgIFwib3B0aVRyYWNrRGltZW5zaW9uSWRcIjogOFxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInN0aXRjaF9ldmVudFwiOiB7XG4gICAgICAgICAgICBcImlkXCI6IDEwMDQsXG4gICAgICAgICAgICBcInN1cHBvcnRlZE9uT3B0aXRyYWNrXCI6IHRydWUsXG4gICAgICAgICAgICBcInN1cHBvcnRlZE9uUmVhbFRpbWVcIjogZmFsc2UsXG4gICAgICAgICAgICBcInBhcmFtZXRlcnNcIjoge1xuICAgICAgICAgICAgICBcImV2ZW50X3BsYXRmb3JtXCI6IHtcbiAgICAgICAgICAgICAgICBcImlkXCI6IDEwMDAsXG4gICAgICAgICAgICAgICAgXCJuYW1lXCI6IFwiUGxhdGZvcm1cIixcbiAgICAgICAgICAgICAgICBcImNvbmZpZ05hbWVcIjogXCJldmVudF9wbGF0Zm9ybVwiLFxuICAgICAgICAgICAgICAgIFwidHlwZVwiOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIFwib3B0aW9uYWxcIjogdHJ1ZSxcbiAgICAgICAgICAgICAgICBcIm9wdGlUcmFja0RpbWVuc2lvbklkXCI6IDExXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIFwiZXZlbnRfZGV2aWNlX3R5cGVcIjoge1xuICAgICAgICAgICAgICAgIFwiaWRcIjogMTAwMSxcbiAgICAgICAgICAgICAgICBcIm5hbWVcIjogXCJEZXZpY2UgVHlwZVwiLFxuICAgICAgICAgICAgICAgIFwiY29uZmlnTmFtZVwiOiBcImV2ZW50X2RldmljZV90eXBlXCIsXG4gICAgICAgICAgICAgICAgXCJ0eXBlXCI6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgXCJvcHRpb25hbFwiOiB0cnVlLFxuICAgICAgICAgICAgICAgIFwib3B0aVRyYWNrRGltZW5zaW9uSWRcIjogMTJcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgXCJldmVudF9vc1wiOiB7XG4gICAgICAgICAgICAgICAgXCJpZFwiOiAxMDAyLFxuICAgICAgICAgICAgICAgIFwibmFtZVwiOiBcIk9TXCIsXG4gICAgICAgICAgICAgICAgXCJjb25maWdOYW1lXCI6IFwiZXZlbnRfb3NcIixcbiAgICAgICAgICAgICAgICBcInR5cGVcIjogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICBcIm9wdGlvbmFsXCI6IHRydWUsXG4gICAgICAgICAgICAgICAgXCJvcHRpVHJhY2tEaW1lbnNpb25JZFwiOiAxM1xuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBcImV2ZW50X25hdGl2ZV9tb2JpbGVcIjoge1xuICAgICAgICAgICAgICAgIFwiaWRcIjogMTAwMyxcbiAgICAgICAgICAgICAgICBcIm5hbWVcIjogXCJOYXRpdmUgTW9iaWxlXCIsXG4gICAgICAgICAgICAgICAgXCJjb25maWdOYW1lXCI6IFwiZXZlbnRfbmF0aXZlX21vYmlsZVwiLFxuICAgICAgICAgICAgICAgIFwidHlwZVwiOiBcIkJvb2xlYW5cIixcbiAgICAgICAgICAgICAgICBcIm9wdGlvbmFsXCI6IHRydWUsXG4gICAgICAgICAgICAgICAgXCJvcHRpVHJhY2tEaW1lbnNpb25JZFwiOiAxNFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBcInNvdXJjZVB1YmxpY0N1c3RvbWVySWRcIjoge1xuICAgICAgICAgICAgICAgIFwiaWRcIjogMSxcbiAgICAgICAgICAgICAgICBcIm5hbWVcIjogXCJTb3VyY2UgUHVibGljIEN1c3RvbWVyIElkXCIsXG4gICAgICAgICAgICAgICAgXCJjb25maWdOYW1lXCI6IFwic291cmNlUHVibGljQ3VzdG9tZXJJZFwiLFxuICAgICAgICAgICAgICAgIFwidHlwZVwiOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIFwib3B0aW9uYWxcIjogZmFsc2UsXG4gICAgICAgICAgICAgICAgXCJvcHRpVHJhY2tEaW1lbnNpb25JZFwiOiA4XG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIFwic291cmNlVmlzaXRvcklkXCI6IHtcbiAgICAgICAgICAgICAgICBcImlkXCI6IDIsXG4gICAgICAgICAgICAgICAgXCJuYW1lXCI6IFwiU291cmNlIFZpc2l0b3IgSURcIixcbiAgICAgICAgICAgICAgICBcImNvbmZpZ05hbWVcIjogXCJzb3VyY2VWaXNpdG9ySWRcIixcbiAgICAgICAgICAgICAgICBcInR5cGVcIjogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICBcIm9wdGlvbmFsXCI6IGZhbHNlLFxuICAgICAgICAgICAgICAgIFwib3B0aVRyYWNrRGltZW5zaW9uSWRcIjogOVxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBcInRhcmdldFZpc2l0b3JJZFwiOiB7XG4gICAgICAgICAgICAgICAgXCJpZFwiOiAzLFxuICAgICAgICAgICAgICAgIFwibmFtZVwiOiBcIlRhcmdldCBWaXNpdG9yIElEXCIsXG4gICAgICAgICAgICAgICAgXCJjb25maWdOYW1lXCI6IFwidGFyZ2V0VmlzaXRvcklkXCIsXG4gICAgICAgICAgICAgICAgXCJ0eXBlXCI6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgXCJvcHRpb25hbFwiOiBmYWxzZSxcbiAgICAgICAgICAgICAgICBcIm9wdGlUcmFja0RpbWVuc2lvbklkXCI6IDEwXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LFxuICAgICAgICAgIFwidXNlcl9hZ2VudF9oZWFkZXJfZXZlbnRcIjoge1xuICAgICAgICAgICAgXCJpZFwiOiAxMDA1LFxuICAgICAgICAgICAgXCJzdXBwb3J0ZWRPbk9wdGl0cmFja1wiOiB0cnVlLFxuICAgICAgICAgICAgXCJzdXBwb3J0ZWRPblJlYWxUaW1lXCI6IGZhbHNlLFxuICAgICAgICAgICAgXCJwYXJhbWV0ZXJzXCI6IHtcbiAgICAgICAgICAgICAgXCJldmVudF9wbGF0Zm9ybVwiOiB7XG4gICAgICAgICAgICAgICAgXCJpZFwiOiAxMDAwLFxuICAgICAgICAgICAgICAgIFwibmFtZVwiOiBcIlBsYXRmb3JtXCIsXG4gICAgICAgICAgICAgICAgXCJjb25maWdOYW1lXCI6IFwiZXZlbnRfcGxhdGZvcm1cIixcbiAgICAgICAgICAgICAgICBcInR5cGVcIjogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICBcIm9wdGlvbmFsXCI6IHRydWUsXG4gICAgICAgICAgICAgICAgXCJvcHRpVHJhY2tEaW1lbnNpb25JZFwiOiAxMFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBcImV2ZW50X2RldmljZV90eXBlXCI6IHtcbiAgICAgICAgICAgICAgICBcImlkXCI6IDEwMDEsXG4gICAgICAgICAgICAgICAgXCJuYW1lXCI6IFwiRGV2aWNlIFR5cGVcIixcbiAgICAgICAgICAgICAgICBcImNvbmZpZ05hbWVcIjogXCJldmVudF9kZXZpY2VfdHlwZVwiLFxuICAgICAgICAgICAgICAgIFwidHlwZVwiOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIFwib3B0aW9uYWxcIjogdHJ1ZSxcbiAgICAgICAgICAgICAgICBcIm9wdGlUcmFja0RpbWVuc2lvbklkXCI6IDExXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIFwiZXZlbnRfb3NcIjoge1xuICAgICAgICAgICAgICAgIFwiaWRcIjogMTAwMixcbiAgICAgICAgICAgICAgICBcIm5hbWVcIjogXCJPU1wiLFxuICAgICAgICAgICAgICAgIFwiY29uZmlnTmFtZVwiOiBcImV2ZW50X29zXCIsXG4gICAgICAgICAgICAgICAgXCJ0eXBlXCI6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgXCJvcHRpb25hbFwiOiB0cnVlLFxuICAgICAgICAgICAgICAgIFwib3B0aVRyYWNrRGltZW5zaW9uSWRcIjogMTJcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgXCJldmVudF9uYXRpdmVfbW9iaWxlXCI6IHtcbiAgICAgICAgICAgICAgICBcImlkXCI6IDEwMDMsXG4gICAgICAgICAgICAgICAgXCJuYW1lXCI6IFwiTmF0aXZlIE1vYmlsZVwiLFxuICAgICAgICAgICAgICAgIFwiY29uZmlnTmFtZVwiOiBcImV2ZW50X25hdGl2ZV9tb2JpbGVcIixcbiAgICAgICAgICAgICAgICBcInR5cGVcIjogXCJCb29sZWFuXCIsXG4gICAgICAgICAgICAgICAgXCJvcHRpb25hbFwiOiB0cnVlLFxuICAgICAgICAgICAgICAgIFwib3B0aVRyYWNrRGltZW5zaW9uSWRcIjogMTNcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgXCJ1c2VyX2FnZW50X2hlYWRlcjFcIjoge1xuICAgICAgICAgICAgICAgIFwiaWRcIjogMSxcbiAgICAgICAgICAgICAgICBcIm5hbWVcIjogXCJVc2VyIEFnZW50IEhlYWRlciBQYXJ0IDFcIixcbiAgICAgICAgICAgICAgICBcImNvbmZpZ05hbWVcIjogXCJ1c2VyX2FnZW50X2hlYWRlcjFcIixcbiAgICAgICAgICAgICAgICBcInR5cGVcIjogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICBcIm9wdGlvbmFsXCI6IGZhbHNlLFxuICAgICAgICAgICAgICAgIFwib3B0aVRyYWNrRGltZW5zaW9uSWRcIjogOFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBcInVzZXJfYWdlbnRfaGVhZGVyMlwiOiB7XG4gICAgICAgICAgICAgICAgXCJpZFwiOiAyLFxuICAgICAgICAgICAgICAgIFwibmFtZVwiOiBcIlVzZXIgQWdlbnQgSGVhZGVyIFBhcnQgMlwiLFxuICAgICAgICAgICAgICAgIFwiY29uZmlnTmFtZVwiOiBcInVzZXJfYWdlbnRfaGVhZGVyMlwiLFxuICAgICAgICAgICAgICAgIFwidHlwZVwiOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIFwib3B0aW9uYWxcIjogdHJ1ZSxcbiAgICAgICAgICAgICAgICBcIm9wdGlUcmFja0RpbWVuc2lvbklkXCI6IDlcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJzZXRfcGFnZV92aXNpdFwiOiB7XG4gICAgICAgICAgICBcImlkXCI6IDEwMDYsXG4gICAgICAgICAgICBcInN1cHBvcnRlZE9uT3B0aXRyYWNrXCI6IHRydWUsXG4gICAgICAgICAgICBcInN1cHBvcnRlZE9uUmVhbFRpbWVcIjogdHJ1ZSxcbiAgICAgICAgICAgIFwicGFyYW1ldGVyc1wiOiB7XG4gICAgICAgICAgICAgIFwiZXZlbnRfcGxhdGZvcm1cIjoge1xuICAgICAgICAgICAgICAgIFwiaWRcIjogMTAwMCxcbiAgICAgICAgICAgICAgICBcIm5hbWVcIjogXCJQbGF0Zm9ybVwiLFxuICAgICAgICAgICAgICAgIFwiY29uZmlnTmFtZVwiOiBcImV2ZW50X3BsYXRmb3JtXCIsXG4gICAgICAgICAgICAgICAgXCJ0eXBlXCI6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgXCJvcHRpb25hbFwiOiB0cnVlLFxuICAgICAgICAgICAgICAgIFwib3B0aVRyYWNrRGltZW5zaW9uSWRcIjogMTFcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgXCJldmVudF9kZXZpY2VfdHlwZVwiOiB7XG4gICAgICAgICAgICAgICAgXCJpZFwiOiAxMDAxLFxuICAgICAgICAgICAgICAgIFwibmFtZVwiOiBcIkRldmljZSBUeXBlXCIsXG4gICAgICAgICAgICAgICAgXCJjb25maWdOYW1lXCI6IFwiZXZlbnRfZGV2aWNlX3R5cGVcIixcbiAgICAgICAgICAgICAgICBcInR5cGVcIjogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICBcIm9wdGlvbmFsXCI6IHRydWUsXG4gICAgICAgICAgICAgICAgXCJvcHRpVHJhY2tEaW1lbnNpb25JZFwiOiAxMlxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBcImV2ZW50X29zXCI6IHtcbiAgICAgICAgICAgICAgICBcImlkXCI6IDEwMDIsXG4gICAgICAgICAgICAgICAgXCJuYW1lXCI6IFwiT1NcIixcbiAgICAgICAgICAgICAgICBcImNvbmZpZ05hbWVcIjogXCJldmVudF9vc1wiLFxuICAgICAgICAgICAgICAgIFwidHlwZVwiOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIFwib3B0aW9uYWxcIjogdHJ1ZSxcbiAgICAgICAgICAgICAgICBcIm9wdGlUcmFja0RpbWVuc2lvbklkXCI6IDEzXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIFwiZXZlbnRfbmF0aXZlX21vYmlsZVwiOiB7XG4gICAgICAgICAgICAgICAgXCJpZFwiOiAxMDAzLFxuICAgICAgICAgICAgICAgIFwibmFtZVwiOiBcIk5hdGl2ZSBNb2JpbGVcIixcbiAgICAgICAgICAgICAgICBcImNvbmZpZ05hbWVcIjogXCJldmVudF9uYXRpdmVfbW9iaWxlXCIsXG4gICAgICAgICAgICAgICAgXCJ0eXBlXCI6IFwiQm9vbGVhblwiLFxuICAgICAgICAgICAgICAgIFwib3B0aW9uYWxcIjogdHJ1ZSxcbiAgICAgICAgICAgICAgICBcIm9wdGlUcmFja0RpbWVuc2lvbklkXCI6IDE0XG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIFwiY3VzdG9tVVJMXCI6IHtcbiAgICAgICAgICAgICAgICBcImlkXCI6IDEsXG4gICAgICAgICAgICAgICAgXCJuYW1lXCI6IFwiUGFnZSBVUkxcIixcbiAgICAgICAgICAgICAgICBcImNvbmZpZ05hbWVcIjogXCJjdXN0b21VUkxcIixcbiAgICAgICAgICAgICAgICBcInR5cGVcIjogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICBcIm9wdGlvbmFsXCI6IGZhbHNlLFxuICAgICAgICAgICAgICAgIFwib3B0aVRyYWNrRGltZW5zaW9uSWRcIjogOFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBcInBhZ2VUaXRsZVwiOiB7XG4gICAgICAgICAgICAgICAgXCJpZFwiOiAyLFxuICAgICAgICAgICAgICAgIFwibmFtZVwiOiBcIlBhZ2UgVGl0bGVcIixcbiAgICAgICAgICAgICAgICBcImNvbmZpZ05hbWVcIjogXCJwYWdlVGl0bGVcIixcbiAgICAgICAgICAgICAgICBcInR5cGVcIjogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICBcIm9wdGlvbmFsXCI6IGZhbHNlLFxuICAgICAgICAgICAgICAgIFwib3B0aVRyYWNrRGltZW5zaW9uSWRcIjogOVxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBcImNhdGVnb3J5XCI6IHtcbiAgICAgICAgICAgICAgICBcImlkXCI6IDMsXG4gICAgICAgICAgICAgICAgXCJuYW1lXCI6IFwiUGFnZSBDYXRlZ29yeVwiLFxuICAgICAgICAgICAgICAgIFwiY29uZmlnTmFtZVwiOiBcImNhdGVnb3J5XCIsXG4gICAgICAgICAgICAgICAgXCJ0eXBlXCI6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgXCJvcHRpb25hbFwiOiB0cnVlLFxuICAgICAgICAgICAgICAgIFwib3B0aVRyYWNrRGltZW5zaW9uSWRcIjogMTBcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblx0fVxufTtcblxuZXhwb3J0IGRlZmF1bHQgb3B0aW1vdmVDb3JlRXZlbnRzO1xuIiwiLyogVEVTVC1TVEFSVCAqL1xuaW1wb3J0ICcuL3N0eWxlLmNzcyc7XG4vKiBURVNULUVORCAqL1xuXG5cbnZhciBhZGRUb29sRWxlbWVudHNUb1RoZVBhZ2UgPSBmdW5jdGlvbigpIHtcblx0cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcblxuXHRcdC8vIHZhciBjaGVjayA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwib3B0aW1vdmVTZGtXZWJUb29sXCIpO1xuXHRcdC8vIGlmKGNoZWNrID09IG51bGwgfHwgY2hlY2sgPT0gdW5kZWZpbmVkKSB7XG5cdFx0dmFyIGJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZShcImJvZHlcIik7XG5cblx0XHR2YXIgZm9udEF3ZXNvbWVTY3JpcHQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwic2NyaXB0XCIpO1xuXHRcdGZvbnRBd2Vzb21lU2NyaXB0LnNyYyA9ICdodHRwczovL2tpdC5mb250YXdlc29tZS5jb20vNjA4Y2RmNTkzZS5qcyc7XG5cblx0XHR2YXIgc2NyaXB0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInNjcmlwdFwiKTtcblx0XHRzY3JpcHQuc3JjID0gXCJodHRwczovL3VucGtnLmNvbS9hZy1ncmlkLWNvbW11bml0eS9kaXN0L2FnLWdyaWQtY29tbXVuaXR5Lm1pbi5ub1N0eWxlLmpzXCI7XG5cblx0XHR2YXIgbGluazEgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwibGlua1wiKTtcblx0XHRsaW5rMS5yZWwgPSBcInN0eWxlc2hlZXRcIjtcblx0XHRsaW5rMS5ocmVmID0gXCJodHRwczovL3VucGtnLmNvbS9hZy1ncmlkLWNvbW11bml0eS9kaXN0L3N0eWxlcy9hZy1ncmlkLmNzc1wiO1xuXG5cdFx0dmFyIGxpbmsyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImxpbmtcIik7XG5cdFx0bGluazIucmVsID0gXCJzdHlsZXNoZWV0XCI7XG5cdFx0bGluazIuaHJlZiA9IFwiaHR0cHM6Ly91bnBrZy5jb20vYWctZ3JpZC1jb21tdW5pdHkvZGlzdC9zdHlsZXMvYWctdGhlbWUtYmFsaGFtLmNzc1wiO1xuXG5cdFx0dmFyIGJvb3RzdHJhcExpbmsgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwibGlua1wiKTtcblx0XHRib290c3RyYXBMaW5rLnJlbCA9IFwic3R5bGVzaGVldFwiO1xuXHRcdGJvb3RzdHJhcExpbmsuaHJlZiA9IFwiaHR0cHM6Ly9tYXhjZG4uYm9vdHN0cmFwY2RuLmNvbS9ib290c3RyYXAvMy40LjAvY3NzL2Jvb3RzdHJhcC5taW4uY3NzXCI7XG5cblx0XHR2YXIgZ29vZ2xlSWNvbmVMaW5rID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImxpbmtcIik7XG5cdFx0Z29vZ2xlSWNvbmVMaW5rLnJlbCA9IFwic3R5bGVzaGVldFwiO1xuXHRcdGdvb2dsZUljb25lTGluay5ocmVmID0gXCJodHRwczovL2ZvbnRzLmdvb2dsZWFwaXMuY29tL2ljb24/ZmFtaWx5PU1hdGVyaWFsK0ljb25zXCI7XG5cblxuXHRcdHZhciByb2JvdG9MaW5rID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImxpbmtcIik7XG5cdFx0cm9ib3RvTGluay5yZWwgPSBcInN0eWxlc2hlZXRcIjtcblx0XHRyb2JvdG9MaW5rLmhyZWYgPSBcImh0dHBzOi8vZm9udHMuZ29vZ2xlYXBpcy5jb20vY3NzP2ZhbWlseT1Sb2JvdG8mZGlzcGxheT1zd2FwXCI7XG5cblx0XHQvLyB2YXIgc2RrV2ViVG9vbENzcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJsaW5rXCIpO1xuXHRcdC8vIHNka1dlYlRvb2xDc3MucmVsID0gXCJzdHlsZXNoZWV0XCI7XG5cdFx0Ly8gc2RrV2ViVG9vbENzcy5ocmVmID0gXCIuL29wdG12LXdlYi10ZXN0LXRvb2wuY3NzXCI7XG5cblx0XHR2YXIgb3B0aW1vdmVQYW5lbERpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG5cdFx0b3B0aW1vdmVQYW5lbERpdi5pZCA9IFwib3B0aW1vdmVTZGtXZWJUb29sXCI7XG5cdFx0b3B0aW1vdmVQYW5lbERpdi5jbGFzc05hbWUgPSBcImFnLXRoZW1lLWJhbGhhbVwiO1xuXG5cdFx0dmFyIG9wdGltb3ZlUGFuZWxIZWFkRGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcblx0XHRvcHRpbW92ZVBhbmVsSGVhZERpdi5pZCA9IFwib3B0aW1vdmVQYW5lbEhlYWRcIjtcblx0XHRvcHRpbW92ZVBhbmVsSGVhZERpdi5jbGFzc0xpc3QuYWRkKFwicGFuZWwtaGVhZGluZ1wiKTtcblxuXHRcdHZhciBvcHRpbW92ZVRvcEhlYWRMaW5lID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcblx0XHRvcHRpbW92ZVRvcEhlYWRMaW5lLmNsYXNzTGlzdC5hZGQoXCJvcHRpbW92ZVRvcEhlYWRMaW5lXCIpO1xuXG5cdFx0dmFyIG9wdGltb3ZlSWNvbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJpbWdcIik7XG5cdFx0b3B0aW1vdmVJY29uLmNsYXNzTGlzdC5hZGQoXCJvcHRpbW92ZUljb25cIik7XG5cdFx0b3B0aW1vdmVJY29uLklEID0gXCJvcHRpbW92ZUljb25cIjtcblx0XHQvL29wdGltb3ZlSWNvbi5zcmMgPSBcIi8vc2RrLWNkbi5vcHRpbW92ZS5uZXQvd2VidG9vbC9xYS9vcHRpbW92ZS1sb2dvLnBuZ1wiO1xuXHRcdG9wdGltb3ZlSWNvbi5zcmMgPSAnZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFHUUFBQUFXQ0FZQUFBQTJDRG1lQUFBQUFYTlNSMElBcnM0YzZRQUFBQVJuUVUxQkFBQ3hqd3Y4WVFVQUFBWVlTVVJCVkdoRDdWaTdVaHhYRU8yZVdTM3Z3aW9YMkpueEYzaVZPVFA2QXNRWENFSkZoaSt3Q1IwSlFrWENvU0xnQzBBWmlvUXlaNEpNQWxzQ0FTcXhNdE0rcCtmZTJkblpBZGt1RzZqU25xclp1ZHYzMWEvYjNYZmtwbUZFdnB3ZTA4bm5venI1T0pENnVFNk02c1JER01UNGpNdjRGNEg4MlNBTjd5c0ZUMEZUaHFlR3BYbDRKbWNmQXRuUmtKSFhpZXIzWXZMTE8zbXpGY2g5L0YrZzE4Y1RNQ3dUclVEdUl5QUo3ejRBZHhhWm1CdVhyNllDNmNxaDRlMFlsY2w3b015QTJESXh4Ry9kVXJPbngzS3dHb1lVWU5pQlBhZGgwZDFFMnV0L1NuTUJvV2JHUktaVWJBdnYzUk03V0F6REMxRG9UQWZlc28weFdOY08yWTVqdWE1cU1xT21lOGV5djB3YTBhSExDKzZYeWNDY3FQM0FQdTZWV3JKeUpLOTNmWDMwbWRvM0tqcU52cDJMWklqZ0hQS3ZLdmN4SnhnRE1waXVuTWorZXY0L3g1aE1MbkJ0czJ6alZQN29DYWxjNjF5YlA3RWRlZklPb01vYjl0ak5JRTlEMnN0SGN1UjZjSVBrU21xaXF0RjcvRjhGRlhkaSsvUGhyMk5FSm42R0FYeGo5Qjlpb2RvRW5ObjUzVExqK1Y2NVFTSTRIK3ZmWnBzZUtxcXNzSGFPYmY4T2FRU2RCUXBiZzZQc1lpOElTWUVxTUZtRVJQZlJxZ21GdG41c0I3UGhqK01pUTFUVzNqR1RwV2dZRmgwWXUxRG11WXdPbjNLWTJ0bTNVZEVNejJrdWwvTlcxaG5iK0pubkhoNnlvakhZZ1djVkRNeUsyVHlFZHcvRnhMa3huVmhqdXc3NXdoQUVjMmlBTU5jOUk5RjBNejlOdmNqTWxqaVd6QVRTSjBIRm1XaUx5ay9zN0xidkI2V0Z6b2Y0eGVtVzFYT3pPK3lQTWxBK2p3QWxuTXZBTkowcU53YjU1NXJ0V1RnQ0RqbU1tNk9GZFlzU1BMWDJFdCtVdVU0dVZmc3hiOWxxTkFZTjN6R0diWkUzR3BQN1VBZXVQK3pob1pJZXlRU0x1djl0M1Fha3hTUmNGb2ducEtERGE3aHA2Q3BBSTRZeHp3UEptWXZ6NnBKNjVLYzhoK0RlY1I3M0RtUkhlVTNzdVJuSUJjRGZTL1pWN3paUkJ2SWZTRDJJYzh0NWhYdlVyVWQ1Y2g3SVkwZVhIVjNWTzNYVUU5ZExZSm1abkd5cmRUR1JOSG9jMjdBK3cwRVhlS3JvTmRFYnlvQzNSYzl2L1plSnNpRkpWejdnM3VURC81ajg2dTl1ZUxpQjIzYzVUYUx5blRkTW4vcTdIajQzRSt1Y3JzNGU5OHFPQ0U4UFkyeXJyRXZtVm05Z0grcWgrbUM5RFhaamZpdUJJTzZsU0M1MWd1UUlFK0xZTXBqQTY0eEI1SFRHWklZSDY1bjdiOEJRV0U2VVZTQ2M5ZkNDRUh3VW1vWHlxRWlNZFM5T1JmT1FWd01XRWFIaEJRVEJBaUhrTWsvU2dReUg5ZnhGSnJwMENiM2x6b2lRbXFtOXJENGhaL3E0b3V6RlVmbWtCeVBXMWlyK01oVE1YQkZNem50NGhHdzl0SS9TUkRVb01NcmxCazRrY1llS3hpdkJUdzRxSnM4Wm5zdzl2OGtocTBEU0NCcmVjNFNEem1ub3EzL28zRENJaGcwdjl1RFloM2R4RENOcUdDMVFQczdSQzh2aEphMDVjVmNOS3JHYTdNdklOUFA4QXFWMkdhMlQzTlhEVGllY2Q1STVFZHI1Q1RUZFlLVjMyWk5Bb3g2T1dHMWNsTlJWMWIyQXRiY1RTNkQxNno0RTBoaXMzbUlGVS9iQ0tKeXBGbUhncXZGZURsak9laG5NTXJXK3dKaGNRSzlYbjZpTXVpckI0RmlleTJDMHg5RXg2M1FVSFRtZXBpcTRkOVI5a3RmWFBESTBTcnJKaW9NZXd3RnNxNlpyNFdndjF5VjlBdjBzaTcyOHBiZFFFTncxVU8za3dtU1d1VGNWTUZ2aHkrZngzbkZOb094UnFYRElUZklkSDYrOEVQUDlOS01zcHdGOVVobkJtU0hKTkhVRVFsY3lqK0JwZ3Y2UWMzUUsxZFR6cUh3NkxlWG4zdkY2NERtRTFWQmtESk40VVZyakFHKzdNV1ExSHRFcXVGSGVVdFQwNldhZXBJcjdnQXRUWlRLL05VZXYwZHFTK2FvUUxydzdybER5SFI3S3puNGs5ZUpTV0VWdTBDZy9jRUZoeE5PRW9tazJqRzFSVHl4ei9ZSWNFanJtTGxKUC9yV1hYMXpiY3JveElNTjdVQkJ2a01RcmpOcUdkejg0bGQ5WHFsOWxtekxDVUViUDJFa3N1UXREMEppRE1NSWdhTC9od3ZNSTVlbURZOW5mRGxPNk1DUzNOakp0ZkkxRTl1cWR2Q2tFYVNCSXdpRStJSnk4K0NqdkMwTTJaSGd3MEorVjZSRzNaSGdJRE95QUMvYUQ5dzR3OXdQbnF1a3p5Tm5EejVBMG5tU2FEcUxKdnVMQitDZmx6emQxYU1yb0hxekcvYlpUYVQrcTZpbUNQTFhsL2NxQWpCeVp5aXZJemR5eUMzMnR3MWd3eGtHdDBmODJTcGVkbm92WVA0SFg0WDBVS01yZTY4SmxKZWZuaUdzM1NCL2Q2QnZraHFGdmtCc0ZrYjhBdWRrZmJiNmdFVmdBQUFBQVNVVk9SSzVDWUlJPSc7XG5cblx0XHR2YXIgcG9zaXRpb25CdXR0b25EaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuXG5cdFx0dmFyIG9wdGltb3ZlVGV4dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG5cdFx0dmFyIHAgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdwJyk7XG5cdFx0cC5pbm5lckhUTUwgPSAnVGhlIFdlYiBTREsgdGVzdGluZyB0b29sIGhhcyBiZWVuIHJlcGxhY2VkIGJ5IE9wdGltb3ZlXFwncyBFdmVudHMgTG9nLiBDbGljayA8YSBocmVmPVwiaHR0cHM6Ly9hY2FkZW15Lm9wdGltb3ZlLmNvbS9lbi9hcnRpY2xlL21vbml0b3JpbmctZXZlbnRzLWluLW9wdGltb3ZlXCIgIHRhcmdldD1cIl9ibGFua1wiIHRpdGxlPVwiaHR0cHM6Ly9hY2FkZW15Lm9wdGltb3ZlLmNvbS9lbi9hcnRpY2xlL21vbml0b3JpbmctZXZlbnRzLWluLW9wdGltb3ZlL1wiPiBoZXJlPC9hPiB0byBsZWFybiBtb3JlIGFib3V0IHRoZSBFdmVudHMgTG9nIGluIE9wdGltb3ZlXFwncyBhY2FkZW15LiBJZiB5b3UgYXJlIHVuYWJsZSB0byBhY2Nlc3MgdGhlIGFjYWRlbXkgYXJ0aWNsZSwgcGxlYXNlIGNvbnRhY3QgeW91ciBjdXN0b21lciBzdWNjZXNzIG1hbmFnZXIuJztcblx0XHRvcHRpbW92ZVRleHQuYXBwZW5kQ2hpbGQocCk7XG5cblx0XHQvLyB2YXIgcG9zaXRpb25CdXR0b25QaWMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiaW1nXCIpXG5cdFx0Ly8gcG9zaXRpb25CdXR0b25QaWMuY2xhc3NMaXN0LmFkZChcInBvc2l0aW9uQnV0dG9uUGljXCIpO1xuXHRcdC8vIHBvc2l0aW9uQnV0dG9uUGljLnNyYyA9IGNvbmZpZy50b29sUGF0aCArICdpbWFnZXMvZG9jay1yaWdodC5wbmcnO1xuXHRcdC8vIHBvc2l0aW9uQnV0dG9uUGljLm9uY2xpY2sgPSBmdW5jdGlvbigpIHtcblx0XHQvLyBcdHZhciBwb3B1cFRlbXAgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInBvcHVwSWRcIik7XG5cdFx0Ly8gXHRwb3B1cFRlbXAuY2xhc3NMaXN0LnJlbW92ZShcInBvcHVwTm90U2hvd1wiKTtcblx0XHQvLyBcdHBvcHVwVGVtcC5jbGFzc0xpc3QuYWRkKFwic2hvd1BvcHVwXCIpO1xuXHRcdC8vIFx0Y29uc29sZS5sb2cocG9wdXBUZW1wLmlubmVyVGV4dCk7XG5cdFx0Ly8gfTtcblx0XHQvL1xuXHRcdC8vIHBvc2l0aW9uQnV0dG9uRGl2LmFwcGVuZENoaWxkKHBvc2l0aW9uQnV0dG9uUGljKTtcblxuXHRcdHZhciBjbG9zZUJ1dHR1bkljb24gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiaVwiKTtcblx0XHRjbG9zZUJ1dHR1bkljb24uY2xhc3NMaXN0LmFkZChcIm1hdGVyaWFsLWljb25zXCIpO1xuXHRcdGNsb3NlQnV0dHVuSWNvbi5pbm5lclRleHQgPSBcImNsZWFyXCI7XG5cblx0XHR2YXIgY2xvc2VCdXR0dW4gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuXHRcdGNsb3NlQnV0dHVuLmFwcGVuZENoaWxkKGNsb3NlQnV0dHVuSWNvbik7XG5cdFx0Y2xvc2VCdXR0dW4uY2xhc3NMaXN0LmFkZChcIm9wdGltb3ZlV2ViVG9vbEJ0bkNsb3NlXCIpO1xuXHRcdGNsb3NlQnV0dHVuLndpZHRoID0gXCIxMHB4XCI7XG5cdFx0Y2xvc2VCdXR0dW4uaGVpZ2h0ID0gXCIxMHB4XCI7XG5cdFx0Y2xvc2VCdXR0dW4ub25jbGljayA9IGZ1bmN0aW9uICgpIHtcblx0XHRcdGNsb3NlVGVzdFRvb2woKTtcblx0XHR9O1xuXG5cdFx0dmFyIG9wdGltb3ZlVG9wSGVhZExpbmVUZXh0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcblx0XHRvcHRpbW92ZVRvcEhlYWRMaW5lVGV4dC5jbGFzc0xpc3QuYWRkKFwib3B0aW1vdmVUb3BIZWFkTGluZVRleHRcIik7XG5cdFx0b3B0aW1vdmVUb3BIZWFkTGluZVRleHQuY2xhc3NMaXN0LmFkZChcImZvbnQtd2VpZ2h0LWJvbGRcIik7XG5cdFx0b3B0aW1vdmVUb3BIZWFkTGluZVRleHQuaWQgPSBcIk9wdGltb3ZlU0RLRXZlbnRzXCI7XG5cdFx0b3B0aW1vdmVUb3BIZWFkTGluZVRleHQudGV4dENvbnRlbnQgPSBcInwgV2ViIFNESyB0ZXN0aW5nIHRvb2xcIjtcblxuXHRcdG9wdGltb3ZlVG9wSGVhZExpbmUuYXBwZW5kQ2hpbGQob3B0aW1vdmVJY29uKTtcblx0XHRvcHRpbW92ZVRvcEhlYWRMaW5lLmFwcGVuZENoaWxkKG9wdGltb3ZlVG9wSGVhZExpbmVUZXh0KTtcblx0XHRvcHRpbW92ZVRvcEhlYWRMaW5lLmFwcGVuZENoaWxkKHBvc2l0aW9uQnV0dG9uRGl2KTtcblx0XHRvcHRpbW92ZVRvcEhlYWRMaW5lLmFwcGVuZENoaWxkKGNsb3NlQnV0dHVuKTtcblxuXHRcdHZhciBvcHRpb3ZlQm90dG9tSGVhZExpbmUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuXG5cdFx0dmFyIG9wdGltb3ZlQm90dG9tSGVhZExpbmVUZXh0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcblx0XHRvcHRpbW92ZUJvdHRvbUhlYWRMaW5lVGV4dC5pZCA9IFwib3B0aW1vdmVCb3R0b21IZWFkTGluZVRleHRcIjtcblx0XHRvcHRpbW92ZUJvdHRvbUhlYWRMaW5lVGV4dC5jbGFzc0xpc3QuYWRkKFwib3B0aW1vdmVCb3R0b21IZWFkTGluZVRleHRcIik7XG5cdFx0b3B0aW1vdmVCb3R0b21IZWFkTGluZVRleHQudGV4dENvbnRlbnQgPSBcIlwiO1xuXG5cblx0XHRvcHRpb3ZlQm90dG9tSGVhZExpbmUuYXBwZW5kQ2hpbGQob3B0aW1vdmVCb3R0b21IZWFkTGluZVRleHQpO1xuXHRcdC8vb3B0aW92ZUJvdHRvbUhlYWRMaW5lLmFwcGVuZENoaWxkKGJ1dHRvbik7XG5cdFx0b3B0aW1vdmVQYW5lbEhlYWREaXYuYXBwZW5kQ2hpbGQob3B0aW1vdmVUb3BIZWFkTGluZSk7XG5cdFx0Ly8gb3B0aW1vdmVQYW5lbEhlYWREaXYuYXBwZW5kQ2hpbGQocG9wdXBEaXYpO1xuXHRcdG9wdGltb3ZlUGFuZWxIZWFkRGl2LmFwcGVuZENoaWxkKG9wdGlvdmVCb3R0b21IZWFkTGluZSk7XG5cdFx0b3B0aW1vdmVQYW5lbEhlYWREaXYuYXBwZW5kQ2hpbGQob3B0aW1vdmVUZXh0KTtcblxuXG5cblxuXG5cdFx0b3B0aW1vdmVQYW5lbERpdi5hcHBlbmRDaGlsZChvcHRpbW92ZVBhbmVsSGVhZERpdik7XG5cblxuXHRcdGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoZm9udEF3ZXNvbWVTY3JpcHQpO1xuXHRcdGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoc2NyaXB0KTtcblx0XHRkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGxpbmsxKTtcblx0XHRkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGxpbmsyKTtcblx0XHQvL2RvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoYm9vdHN0cmFwTGluayk7XG5cdFx0ZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChnb29nbGVJY29uZUxpbmspO1xuXHRcdGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQocm9ib3RvTGluayk7XG5cdFx0Ly9kb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHNka1dlYlRvb2xDc3MpO1xuXHRcdGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQob3B0aW1vdmVQYW5lbERpdik7XG5cdFx0b3B0aW1vdmVQYW5lbERpdi5jbGFzc0xpc3QuYWRkKCdvcGVuJyk7XG5cdFx0ZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QuYWRkKCdvcHRpbW92ZVNka1dlYlRvb2xPcGVuJyk7XG5cblx0XHRzY3JpcHQub25sb2FkID0gZnVuY3Rpb24gKCkge1xuXHRcdFx0cmVzb2x2ZSgpO1xuXHRcdH07XG5cdH0pO1xufVxuXG53aW5kb3cub3BlblRlc3RUb29sID0gZnVuY3Rpb24gKCkge1xuXHRhZGRUb29sRWxlbWVudHNUb1RoZVBhZ2UoKS50aGVuKGZ1bmN0aW9uICgpIHtcblx0XHR3aW5kb3cuc2Vzc2lvblN0b3JhZ2Uuc2V0SXRlbShcImlzU2lkZUJhclNob3VsZEJlT3BlblwiLCB0cnVlKTtcblx0XHR2YXIgcGFuZWxXaWR0aCA9IHdpbmRvdy5zZXNzaW9uU3RvcmFnZS5nZXRJdGVtKFwiT3B0aW1vdmVQYW5lbFdpZHRoXCIpO1xuXHRcdGlmIChwYW5lbFdpZHRoID4gMCkge1xuXHRcdFx0ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ29wdGltb3ZlU2RrV2ViVG9vbCcpLnN0eWxlLndpZHRoID0gcGFuZWxXaWR0aCArICdweCc7XG5cdFx0XHRkb2N1bWVudC5ib2R5LnN0eWxlLndpZHRoID0gcGFyc2VJbnQod2luZG93LndpZHRoIC0gcGFuZWxXaWR0aCkgKyAncHgnO1xuXHRcdH1cblx0fSk7XG59O1xuXG52YXIgY2xvc2VUZXN0VG9vbCA9IGZ1bmN0aW9uKCkge1xuXHR2YXIgYSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwib3B0aW1vdmVTZGtXZWJUb29sXCIpO1xuXHRpZiAoYSAhPSB1bmRlZmluZWQpIHtcblx0XHRhLnJlbW92ZSgpO1xuXHRcdHdpbmRvdy5zZXNzaW9uU3RvcmFnZS5zZXRJdGVtKFwiaXNTaWRlQmFyU2hvdWxkQmVPcGVuXCIsIGZhbHNlKTtcblx0fVxuXHRkb2N1bWVudC5ib2R5LmNsYXNzTGlzdC5yZW1vdmUoJ29wdGltb3ZlU2RrV2ViVG9vbE9wZW4nKTtcblx0ZG9jdW1lbnQuYm9keS5zdHlsZS53aWR0aCA9ICdhdXRvJztcbn07XG5cbi8qIFRFU1QtU1RBUlQgKi9cbmV4cG9ydCBkZWZhdWx0IHdpbmRvdy5vcGVuVGVzdFRvb2w7XG4vKiBURVNULUVORCAqL1xuXG4iLCIvLyBJbXBvcnRzXG5pbXBvcnQgX19fQ1NTX0xPQURFUl9BUElfU09VUkNFTUFQX0lNUE9SVF9fXyBmcm9tIFwiLi4vLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9ydW50aW1lL2Nzc1dpdGhNYXBwaW5nVG9TdHJpbmcuanNcIjtcbmltcG9ydCBfX19DU1NfTE9BREVSX0FQSV9JTVBPUlRfX18gZnJvbSBcIi4uLy4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvcnVudGltZS9hcGkuanNcIjtcbnZhciBfX19DU1NfTE9BREVSX0VYUE9SVF9fXyA9IF9fX0NTU19MT0FERVJfQVBJX0lNUE9SVF9fXyhfX19DU1NfTE9BREVSX0FQSV9TT1VSQ0VNQVBfSU1QT1JUX19fKTtcbi8vIE1vZHVsZVxuX19fQ1NTX0xPQURFUl9FWFBPUlRfX18ucHVzaChbbW9kdWxlLmlkLCBcIiNvcHRpbW92ZVNka1dlYlRvb2wge1xcbiAgICB3aWR0aDogMDtcXG4gICAgZGlzcGxheTogbm9uZTtcXG4gICAgcG9zaXRpb246IGZpeGVkO1xcbiAgICByaWdodDogMDtcXG4gICAgdG9wOiAwO1xcbiAgICBiYWNrZ3JvdW5kOiAjZmZmO1xcbiAgICB6LWluZGV4OiAxMDAwO1xcbn1cXG5cXG4jb3B0aW1vdmVTZGtXZWJUb29sLm9wZW4ge1xcbiAgICBtYXgtd2lkdGg6IDE1MDBweDtcXG4gICAgbWluLXdpZHRoOiAzNDBweDtcXG4gICAgaGVpZ2h0OiAxMDB2aDtcXG59XFxuXFxuI29wdGltb3ZlU2RrV2ViVG9vbC5vcGVuLmFnLXRoZW1lLWJhbGhhbSB7XFxuICAgIHdpZHRoOiA1MDBweDtcXG4gICAgZGlzcGxheTogYmxvY2s7XFxuICAgIHotaW5kZXg6IDEwMDAwO1xcbiAgICAtd2Via2l0LWJveC1zaGFkb3c6IC0zcHggMCAxMHB4IDAgcmdiYSgyMDAsIDIwMCwgMjAwLCAwLjUpO1xcbiAgICBib3gtc2hhZG93OiAtM3B4IDAgMTBweCAwIHJnYmEoMjAwLCAyMDAsIDIwMCwgMC41KTtcXG59XFxuXFxuI29wdGltb3ZlUGFuZWxIZWFkLnBhbmVsLWhlYWRpbmcge1xcbiAgICBwYWRkaW5nOiAxNnB4IDE1cHg7XFxufVxcblxcbiNvcHRpbW92ZVBhbmVsSGVhZCAucG9wdXBEaXYge1xcbiAgICBwYWRkaW5nLWxlZnQ6IDMzNHB4O1xcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XFxufVxcblxcbiNvcHRpbW92ZVBhbmVsSGVhZCAucG9wdXBEaXYgLnBvcHVwIHtcXG4gICAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgICB2aXNpYmlsaXR5OiBoaWRkZW47XFxufVxcblxcbiNvcHRpbW92ZVBhbmVsSGVhZCAucG9wdXBEaXYgLnBvcHVwLnNob3dQb3B1cCB7XFxuICAgIHZpc2liaWxpdHk6IHZpc2libGU7XFxuICAgIGRpc3BsYXk6IGJsb2NrO1xcbiAgICBiYWNrZ3JvdW5kOiAjRkZGRkZGIDAlIDAlIG5vLXJlcGVhdCBwYWRkaW5nLWJveDtcXG4gICAgYm94LXNoYWRvdzogMHB4IDBweCA2cHggIzAwMDAwMDI5O1xcbiAgICBib3JkZXItcmFkaXVzOiA0cHg7XFxuICAgIG9wYWNpdHk6IDE7XFxuICAgIHdpZHRoOiAxMDlweDtcXG4gICAgaGVpZ2h0OiA4NHB4O1xcbiAgICB6LWluZGV4OiAxO1xcbn1cXG5cXG4jb3B0aW1vdmVQYW5lbEhlYWQgLnBvcHVwRGl2IC5wb3B1cC5zaG93UG9wdXAgLmRvY2tSaWdodFBpY0RpdiB7XFxuICAgIGhlaWdodDogMjhweDtcXG4gICAgcGFkZGluZy10b3A6IDEwcHg7XFxuICAgIHBhZGRpbmctbGVmdDogMTBweDtcXG59XFxuXFxuI29wdGltb3ZlUGFuZWxIZWFkIC5wb3B1cERpdiAucG9wdXAuc2hvd1BvcHVwIC5kb2NrUmlnaHRQaWNEaXYgLmRvY2tUZXh0IHtcXG4gICAgZGlzcGxheTogaW5saW5lO1xcbiAgICBwYWRkaW5nLWxlZnQ6IDZweDtcXG59XFxuXFxuI29wdGltb3ZlUGFuZWxIZWFkIC5wb3B1cERpdiAucG9wdXAuc2hvd1BvcHVwIC5kb2NrUmlnaHRQaWNEaXY6aG92ZXIge1xcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjRUNFRkYxO1xcbn1cXG5cXG4jb3B0aW1vdmVQYW5lbEhlYWQgLnBvcHVwRGl2IC5wb3B1cC5zaG93UG9wdXAgLmRvY2tMZWZ0UGljRGl2IHtcXG4gICAgaGVpZ2h0OiAyOHB4O1xcbiAgICBwYWRkaW5nLXRvcDogMTBweDtcXG4gICAgcGFkZGluZy1sZWZ0OiAxMHB4O1xcbn1cXG5cXG4jb3B0aW1vdmVQYW5lbEhlYWQgLnBvcHVwRGl2IC5wb3B1cC5zaG93UG9wdXAgLmRvY2tMZWZ0UGljRGl2IC5kb2NrVGV4dCB7XFxuICAgIGRpc3BsYXk6IGlubGluZTtcXG4gICAgcGFkZGluZy1sZWZ0OiA2cHg7XFxufVxcblxcbiNvcHRpbW92ZVBhbmVsSGVhZCAucG9wdXBEaXYgLnBvcHVwLnNob3dQb3B1cCAuZG9ja0xlZnRQaWNEaXY6aG92ZXIge1xcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjRUNFRkYxO1xcbn1cXG5cXG4jb3B0aW1vdmVQYW5lbEhlYWQgLnBvcHVwRGl2IC5wb3B1cC5zaG93UG9wdXAgLmRvY2tCb3R0b21QaWNEaXYge1xcbiAgICBoZWlnaHQ6IDI4cHg7XFxuICAgIHBhZGRpbmctdG9wOiAxMHB4O1xcbiAgICBwYWRkaW5nLWxlZnQ6IDEwcHg7XFxufVxcblxcbiNvcHRpbW92ZVBhbmVsSGVhZCAucG9wdXBEaXYgLnBvcHVwLnNob3dQb3B1cCAuZG9ja0JvdHRvbVBpY0RpdiAuZG9ja1RleHQge1xcbiAgICBkaXNwbGF5OiBpbmxpbmU7XFxuICAgIHBhZGRpbmctbGVmdDogNnB4O1xcbn1cXG5cXG4jb3B0aW1vdmVQYW5lbEhlYWQgLnBvcHVwRGl2IC5wb3B1cC5zaG93UG9wdXAgLmRvY2tCb3R0b21QaWNEaXY6aG92ZXIge1xcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjRUNFRkYxO1xcbn1cXG5cXG4jb3B0aW1vdmVQYW5lbEhlYWQgLnBvcHVwLnBvcHVwTm90U2hvdyB7XFxuICAgIHZpc2liaWxpdHk6IGhpZGRlbjtcXG59XFxuXFxuI29wdGltb3ZlUGFuZWxIZWFkIC5wb3B1cC5zaG93UG9wdXAge1xcbiAgICB2aXNpYmlsaXR5OiB2aXNpYmxlO1xcbiAgICBkaXNwbGF5OiBibG9jaztcXG4gICAgYmFja2dyb3VuZDogI0ZGRkZGRiAwJSAwJSBuby1yZXBlYXQgcGFkZGluZy1ib3g7XFxuICAgIGJveC1zaGFkb3c6IDBweCAwcHggNnB4ICMwMDAwMDAyOTtcXG4gICAgYm9yZGVyLXJhZGl1czogNHB4O1xcbiAgICBvcGFjaXR5OiAxO1xcbiAgICB3aWR0aDogMTA5cHg7XFxuICAgIGhlaWdodDogODNweDtcXG59XFxuXFxuI29wdGltb3ZlU2RrV2ViVG9vbC5vcGVuLmFnLXRoZW1lLWJhbGhhbSAuYWctaGVhZGVyLWNlbGwge1xcbiAgICBwYWRkaW5nLXJpZ2h0OiAwcHggIWltcG9ydGFudDtcXG59XFxuXFxuI29wdGltb3ZlU0RLRHJhZ2dlciB7XFxuICAgIHdpZHRoOiAxMHB4O1xcbiAgICBoZWlnaHQ6IDEwMCU7XFxuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gICAgdG9wOiAwO1xcbiAgICBsZWZ0OiAwO1xcbiAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcXG4gICAgei1pbmRleDogMTtcXG4gICAgY3Vyc29yOiB3LXJlc2l6ZTtcXG59XFxuXFxuI29wdGltb3ZlU2RrV2ViVG9vbCAubWF0ZXJpYWwtaWNvbnMge1xcbiAgICBjdXJzb3I6IHBvaW50ZXI7XFxufVxcblxcbiNvcHRpbW92ZVNka1dlYlRvb2wgLmFnLXJvb3Qtd3JhcHBlci5hZy1sYXlvdXQtbm9ybWFsIHtcXG4gICAgaGVpZ2h0OiBjYWxjKDEwMCUgLSAxMDNweCk7XFxufVxcblxcbiNvcHRpbW92ZVNka1dlYlRvb2wuYWctdGhlbWUtYmFsaGFtIC5pcy1ub3QtbWFpbiB7XFxuICAgIGJhY2tncm91bmQtY29sb3I6ICNFQ0VGRjE7XFxufVxcblxcbiNvcHRpbW92ZVNka1dlYlRvb2wuYWctdGhlbWUtYmFsaGFtIC5lcnJvck5vdE1haW5Sb3cge1xcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjRkZENkMyO1xcbn1cXG5cXG4jb3B0aW1vdmVTZGtXZWJUb29sLmFnLXRoZW1lLWJhbGhhbSAuYWctaGVhZGVyLWNlbGwge1xcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjQ0ZEOERDO1xcbiAgICBib3gtc2l6aW5nOiBjb250ZW50LWJveDtcXG59XFxuXFxuI29wdGltb3ZlU2RrV2ViVG9vbCAuYWctaGVhZGVyLWNlbGwtdGV4dCB7XFxuICAgIGNvbG9yOiAjNDU1QTY0O1xcbiAgICB0ZXh0LWFsaWduOiBsZWZ0O1xcbiAgICBmb250OiBCb2xkIDEycHgvMTRweCBSb2JvdG87XFxuICAgIGxldHRlci1zcGFjaW5nOiAwO1xcbiAgICBvcGFjaXR5OiAxO1xcbn1cXG5cXG4jb3B0aW1vdmVTZGtXZWJUb29sLmFnLXRoZW1lLWJhbGhhbSAuYWctY2VsbCB7XFxuICAgIHRleHQtYWxpZ246IGxlZnQ7XFxuICAgIGZvbnQ6IFJlZ3VsYXIgMTJweC8xNHB4IFJvYm90bztcXG4gICAgbGV0dGVyLXNwYWNpbmc6IDA7XFxuICAgIGNvbG9yOiAjMzc0NzRGO1xcbiAgICBvcGFjaXR5OiAxO1xcbn1cXG5cXG4jb3B0aW1vdmVTZGtXZWJUb29sLmFnLXRoZW1lLWJhbGhhbSAuYWctY2VsbCAuZmEtYW5nbGUtcmlnaHQsXFxuI29wdGltb3ZlU2RrV2ViVG9vbC5hZy10aGVtZS1iYWxoYW0gLmFnLWNlbGwgLmZhLWFuZ2xlLWRvd24ge1xcbiAgICB3aWR0aDogMThweDtcXG4gICAgaGVpZ2h0OiAxOHB4O1xcbiAgICBwYWRkaW5nLXJpZ2h0OiAxMHB4O1xcbiAgICBjb2xvcjogIzM3NDc0RjtcXG59XFxuXFxuI29wdGltb3ZlU2RrV2ViVG9vbC5hZy10aGVtZS1iYWxoYW0gLmFnLWNlbGwgLmZhLWV4Y2xhbWF0aW9uLWNpcmNsZSB7XFxuICAgIHBhZGRpbmctcmlnaHQ6IDIwcHg7XFxuICAgIHdpZHRoOiAxNnB4O1xcbiAgICBoZWlnaHQ6IDE3cHg7XFxuICAgIGNvbG9yOiAjRkY1NTAwO1xcbn1cXG5cXG4jb3B0aW1vdmVTZGtXZWJUb29sLmFnLXRoZW1lLWJhbGhhbSAuYWctY2VsbC5tYWluUm93Q2xhc3Mub3B0RGF0ZUNlbGwub3B0SGFzRXJyb3Ige1xcbiAgICBjb2xvcjogI0ZGNTUwMDtcXG59XFxuXFxuI29wdGltb3ZlU2RrV2ViVG9vbC5hZy10aGVtZS1iYWxoYW0gLmFnLWNlbGwubWFpblJvd0NsYXNzLm1haW5Sb3dDbGFzc0V2ZW50SWQub3B0SGFzRXJyb3Ige1xcbiAgICBjb2xvcjogI0ZGNTUwMDtcXG59XFxuXFxuI29wdGltb3ZlU2RrV2ViVG9vbC5hZy10aGVtZS1iYWxoYW0gLmFnLWNlbGwubWFpblJvd0NsYXNzLm1haW5Sb3dDbGFzc0V2ZW50TmFtZS5vcHRIYXNFcnJvciB7XFxuICAgIGNvbG9yOiAjRkY1NTAwO1xcbn1cXG5cXG4jb3B0aW1vdmVTZGtXZWJUb29sLmFnLXRoZW1lLWJhbGhhbSAuYWctY2VsbC5ub3RNYWluRGF0ZVJvd0NsYXNzIHtcXG4gICAgbGVmdDogMjZweCAhaW1wb3J0YW50O1xcbiAgICB3aGl0ZS1zcGFjZTogbm9ybWFsICFpbXBvcnRhbnQ7XFxufVxcblxcbiNvcHRpbW92ZVNka1dlYlRvb2wuYWctdGhlbWUtYmFsaGFtIC5hZy1jZWxsLm5vdE1haW5EYXRlUm93Q2xhc3Mub3B0UGFyYW1ldGVyc1dhcm5pbmcge1xcbiAgICBjb2xvcjogIzIxMjEyMSAhaW1wb3J0YW50O1xcbiAgICBmb250LXdlaWdodDogYm9sZCAhaW1wb3J0YW50O1xcbiAgICBsZWZ0OiAyNnB4ICFpbXBvcnRhbnQ7XFxufVxcblxcbiNvcHRpbW92ZVNka1dlYlRvb2wgLmNlbGwtd3JhcC10ZXh0IHtcXG4gICAgd2hpdGUtc3BhY2U6IG5vcm1hbCAhaW1wb3J0YW50O1xcbn1cXG5cXG4jb3B0aW1vdmVTZGtXZWJUb29sLmFnLXRoZW1lLWJhbGhhbSAuYWctY2VsbC5ub3RNYWluRGF0ZVJvd0NsYXNzLm9wdE5vdEV4aXN0V2FybmluZyB7XFxuICAgIGxlZnQ6IDI2cHggIWltcG9ydGFudDtcXG4gICAgbGVmdDogMjZweCAhaW1wb3J0YW50O1xcbiAgICB3aGl0ZS1zcGFjZTogbm93cmFwICFpbXBvcnRhbnQ7XFxuICAgIGNvbG9yOiAjQ0Y0NTAwO1xcbn1cXG5cXG4jb3B0aW1vdmVTZGtXZWJUb29sLmFnLXRoZW1lLWJhbGhhbSAuYWctY2VsbC5ub3RNYWluUm93Q2xhc3Mubm90TWFpblJvd0NsYXNzRXZlbnRJZCB7XFxuICAgIGxlZnQ6IDE2MHB4ICFpbXBvcnRhbnQ7XFxuICAgIGZvbnQtd2VpZ2h0OiBib2xkO1xcbiAgICB3aGl0ZS1zcGFjZTogbm9ybWFsICFpbXBvcnRhbnQ7XFxufVxcblxcbiNvcHRpbW92ZVNka1dlYlRvb2wuYWctdGhlbWUtYmFsaGFtIC5hZy1jZWxsLm5vdE1haW5Sb3dDbGFzcy5ub3RNYWluUm93Q2xhc3NFdmVudElkLm9wdEhhc0Vycm9yIHtcXG4gICAgbGVmdDogMTYwcHggIWltcG9ydGFudDtcXG4gICAgZm9udC13ZWlnaHQ6IG5vcm1hbDtcXG4gICAgd2hpdGUtc3BhY2U6IG5vcm1hbCAhaW1wb3J0YW50O1xcbn1cXG5cXG4jb3B0aW1vdmVTZGtXZWJUb29sIC5hZy1vdmVybGF5LWxvYWRpbmctY2VudGVyIHtcXG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xcbiAgICBmb250OiBCb2xkIDI0cHgvMjhweCBSb2JvdG87XFxuICAgIGxldHRlci1zcGFjaW5nOiAwO1xcbiAgICBjb2xvcjogI0YyRjBGMDtcXG4gICAgb3BhY2l0eTogMTtcXG59XFxuXFxuI29wdGltb3ZlU2RrV2ViVG9vbCAuY2VsbC1wYXJhbWV0ZXItdmFsdWUge1xcbiAgICB3aWR0aDogNTQwcHggIWltcG9ydGFudDtcXG4gICAgO1xcbn1cXG5cXG4jb3B0aW1vdmVTZGtXZWJUb29sIC5hZy1mdWxsLXdpZHRoLXJvdyB7XFxuICAgIHBhZGRpbmctbGVmdDogOHB4ICFpbXBvcnRhbnQ7XFxuICAgIHBhZGRpbmctdG9wOiAxNnB4ICFpbXBvcnRhbnQ7XFxufVxcblxcbiNvcHRpbW92ZVNka1dlYlRvb2wgLm9wdGltb3ZlVG9wSGVhZExpbmUge1xcbiAgICBkaXNwbGF5OiBmbGV4O1xcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWFyb3VuZDtcXG59XFxuXFxuI29wdGltb3ZlU2RrV2ViVG9vbCAub3B0aW1vdmVUb3BIZWFkTGluZSAub3B0aW1vdmVXZWJUb29sQnRuQ2xvc2Uge1xcbiAgICBib3gtc2hhZG93OiBub25lO1xcbn1cXG5cXG4jb3B0aW1vdmVTZGtXZWJUb29sIC5vcHRpbW92ZVRvcEhlYWRMaW5lIC5vcHRpbW92ZVdlYlRvb2xCdG5DbG9zZSBpIHtcXG4gICAgZm9udC1zaXplOiAxN3B4O1xcbiAgICBjb2xvcjogIzVGN0M4QTtcXG59XFxuXFxuI29wdGltb3ZlU2RrV2ViVG9vbCAub3B0aW1vdmVUb3BIZWFkTGluZSAucG9zaXRpb25CdXR0b25QaWMge1xcbiAgICBwYWRkaW5nLXJpZ2h0OiAxMHB4O1xcbn1cXG5cXG4jb3B0aW1vdmVTZGtXZWJUb29sIC5vcHRpbW92ZVRvcEhlYWRMaW5lVGV4dCB7XFxuICAgIHdpZHRoOiAxMDAlO1xcbiAgICBkaXNwbGF5OiBmbGV4O1xcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XFxuICAgIHBhZGRpbmctbGVmdDogOHB4O1xcbiAgICBjb2xvcjogIzQyNDI0MjtcXG4gICAgdGV4dC1hbGlnbjogbGVmdDtcXG4gICAgZm9udDogTGlnaHQgMThweC8xOHB4IFJvYm90bztcXG4gICAgbGV0dGVyLXNwYWNpbmc6IDA7XFxuICAgIG9wYWNpdHk6IDE7XFxuICAgIGZvbnQtd2VpZ2h0OiAzMDA7XFxuICAgIGZvbnQtc2l6ZTogMThweDtcXG59XFxuXFxuI29wdGltb3ZlU2RrV2ViVG9vbCAub3B0aW1vdmVCb3R0b21IZWFkTGluZVRleHQge1xcbiAgICBkaXNwbGF5OiBmbGV4O1xcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XFxuICAgIHdpZHRoOiAxMDAlO1xcbiAgICBwYWRkaW5nOiAxMHB4IDAgNXB4O1xcbiAgICB0ZXh0LWFsaWduOiBsZWZ0O1xcbiAgICBmb250OiBSZWd1bGFyIDEycHgvMTZweCBSb2JvdG87XFxuICAgIGxldHRlci1zcGFjaW5nOiAwO1xcbiAgICBjb2xvcjogIzU0NkU3QTtcXG4gICAgb3BhY2l0eTogMTtcXG59XFxuXFxuI29wdGltb3ZlU2RrV2ViVG9vbCAub3B2QXJyb3dOb1BhcmFtcyB7XFxuICAgIHZpc2liaWxpdHk6IGhpZGRlbjtcXG59XFxuXFxuI29wdGltb3ZlU2RrV2ViVG9vbCAuYnRuLWxpbmsub3B0LWJ0bi1saW5rIHtcXG4gICAgcGFkZGluZy10b3A6IDVweDtcXG4gICAgcGFkZGluZy1sZWZ0OiAwcHg7XFxuICAgIGJvcmRlcjogMDtcXG4gICAgY3Vyc29yOiBwb2ludGVyO1xcbiAgICBjb2xvcjogIzAwQUFGRjtcXG4gICAgZm9udC1zaXplOiAxMnB4O1xcbiAgICBmb250LXdlaWdodDogNzAwO1xcbiAgICB1c2VyLXNlbGVjdDogbm9uZTtcXG4gICAgdGV4dC1zaGFkb3c6IG5vbmU7XFxuICAgIGJhY2tncm91bmQtY29sb3I6IHdoaXRlICFpbXBvcnRhbnQ7XFxufVxcblxcbiNvcHRpbW92ZVNka1dlYlRvb2wgLmJ0bi1saW5rLm9wdC1idG4tbGluazpob3ZlciB7XFxuICAgIGNvbG9yOiAjMDA2OTlFICFpbXBvcnRhbnQ7XFxuICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcXG59XFxuXFxuI29wdGltb3ZlU2RrV2ViVG9vbCAub3B0LWJ0bi1saW5rLmJ0bi1saW5rLmRpc2FibGUtYnRuOmhvdmVyIHtcXG4gICAgY29sb3I6ICNCMEJFQzUgIWltcG9ydGFudDtcXG59XFxuXFxuI29wdGltb3ZlU2RrV2ViVG9vbC5hZy10aGVtZS1iYWxoYW0gLmFnLWhlYWRlci1jZWxsOjphZnRlcixcXG4uYWctdGhlbWUtYmFsaGFtIC5hZy1oZWFkZXItZ3JvdXAtY2VsbDo6YWZ0ZXIge1xcbiAgICBib3JkZXItcmlnaHQ6IG5vbmU7XFxufVxcblxcbiNvcHRpbW92ZVNka1dlYlRvb2wgLmFnLXJvdy1ob3ZlciB7XFxuICAgIGJhY2tncm91bmQtY29sb3I6ICNGNUY3RjcgIWltcG9ydGFudDtcXG59XFxuXFxuI29wdGltb3ZlU2RrV2ViVG9vbC5hZy10aGVtZS1iYWxoYW0gLmFnLXJvdy1zZWxlY3RlZC5vcHRpLXJvdy1jbGFzcyB7XFxuICAgIGJhY2tncm91bmQtY29sb3I6IHdoaXRlICFpbXBvcnRhbnQ7XFxuICAgIGJvcmRlci1jb2xvcjogI2Q5ZGNkZTtcXG59XFxuXFxuI29wdGltb3ZlU2RrV2ViVG9vbC5hZy10aGVtZS1iYWxoYW0gLmFnLXJvb3Qge1xcbiAgICBib3JkZXI6IDBweCAhaW1wb3J0YW50O1xcbn1cXG5cXG4jb3B0aW1vdmVTZGtXZWJUb29sLmFnLXRoZW1lLWJhbGhhbSAuYWctb3ZlcmxheS1sb2FkaW5nLWNlbnRlciB7XFxuICAgIGJvcmRlcjogMHB4ICFpbXBvcnRhbnQ7XFxufVwiLCBcIlwiLHtcInZlcnNpb25cIjozLFwic291cmNlc1wiOltcIndlYnBhY2s6Ly8uL3NyYy93ZWItdGVzdC10b29sL3N0eWxlLmNzc1wiXSxcIm5hbWVzXCI6W10sXCJtYXBwaW5nc1wiOlwiQUFBQTtJQUNJLFFBQVE7SUFDUixhQUFhO0lBQ2IsZUFBZTtJQUNmLFFBQVE7SUFDUixNQUFNO0lBQ04sZ0JBQWdCO0lBQ2hCLGFBQWE7QUFDakI7O0FBRUE7SUFDSSxpQkFBaUI7SUFDakIsZ0JBQWdCO0lBQ2hCLGFBQWE7QUFDakI7O0FBRUE7SUFDSSxZQUFZO0lBQ1osY0FBYztJQUNkLGNBQWM7SUFDZCwwREFBMEQ7SUFDMUQsa0RBQWtEO0FBQ3REOztBQUVBO0lBQ0ksa0JBQWtCO0FBQ3RCOztBQUVBO0lBQ0ksbUJBQW1CO0lBQ25CLGtCQUFrQjtBQUN0Qjs7QUFFQTtJQUNJLGtCQUFrQjtJQUNsQixrQkFBa0I7QUFDdEI7O0FBRUE7SUFDSSxtQkFBbUI7SUFDbkIsY0FBYztJQUNkLCtDQUErQztJQUMvQyxpQ0FBaUM7SUFDakMsa0JBQWtCO0lBQ2xCLFVBQVU7SUFDVixZQUFZO0lBQ1osWUFBWTtJQUNaLFVBQVU7QUFDZDs7QUFFQTtJQUNJLFlBQVk7SUFDWixpQkFBaUI7SUFDakIsa0JBQWtCO0FBQ3RCOztBQUVBO0lBQ0ksZUFBZTtJQUNmLGlCQUFpQjtBQUNyQjs7QUFFQTtJQUNJLHlCQUF5QjtBQUM3Qjs7QUFFQTtJQUNJLFlBQVk7SUFDWixpQkFBaUI7SUFDakIsa0JBQWtCO0FBQ3RCOztBQUVBO0lBQ0ksZUFBZTtJQUNmLGlCQUFpQjtBQUNyQjs7QUFFQTtJQUNJLHlCQUF5QjtBQUM3Qjs7QUFFQTtJQUNJLFlBQVk7SUFDWixpQkFBaUI7SUFDakIsa0JBQWtCO0FBQ3RCOztBQUVBO0lBQ0ksZUFBZTtJQUNmLGlCQUFpQjtBQUNyQjs7QUFFQTtJQUNJLHlCQUF5QjtBQUM3Qjs7QUFFQTtJQUNJLGtCQUFrQjtBQUN0Qjs7QUFFQTtJ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QUFDMUI7O0FBRUE7SUFDSSxzQkFBc0I7QUFDMUJcIixcInNvdXJjZXNDb250ZW50XCI6W1wiI29wdGltb3ZlU2RrV2ViVG9vbCB7XFxuICAgIHdpZHRoOiAwO1xcbiAgICBkaXNwbGF5OiBub25lO1xcbiAgICBwb3NpdGlvbjogZml4ZWQ7XFxuICAgIHJpZ2h0OiAwO1xcbiAgICB0b3A6IDA7XFxuICAgIGJhY2tncm91bmQ6ICNmZmY7XFxuICAgIHotaW5kZXg6IDEwMDA7XFxufVxcblxcbiNvcHRpbW92ZVNka1dlYlRvb2wub3BlbiB7XFxuICAgIG1heC13aWR0aDogMTUwMHB4O1xcbiAgICBtaW4td2lkdGg6IDM0MHB4O1xcbiAgICBoZWlnaHQ6IDEwMHZoO1xcbn1cXG5cXG4jb3B0aW1vdmVTZGtXZWJUb29sLm9wZW4uYWctdGhlbWUtYmFsaGFtIHtcXG4gICAgd2lkdGg6IDUwMHB4O1xcbiAgICBkaXNwbGF5OiBibG9jaztcXG4gICAgei1pbmRleDogMTAwMDA7XFxuICAgIC13ZWJraXQtYm94LXNoYWRvdzogLTNweCAwIDEwcHggMCByZ2JhKDIwMCwgMjAwLCAyMDAsIDAuNSk7XFxuICAgIGJveC1zaGFkb3c6IC0zcHggMCAxMHB4IDAgcmdiYSgyMDAsIDIwMCwgMjAwLCAwLjUpO1xcbn1cXG5cXG4jb3B0aW1vdmVQYW5lbEhlYWQucGFuZWwtaGVhZGluZyB7XFxuICAgIHBhZGRpbmc6IDE2cHggMTVweDtcXG59XFxuXFxuI29wdGltb3ZlUGFuZWxIZWFkIC5wb3B1cERpdiB7XFxuICAgIHBhZGRpbmctbGVmdDogMzM0cHg7XFxuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcXG59XFxuXFxuI29wdGltb3ZlUGFuZWxIZWFkIC5wb3B1cERpdiAucG9wdXAge1xcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICAgIHZpc2liaWxpdHk6IGhpZGRlbjtcXG59XFxuXFxuI29wdGltb3ZlUGFuZWxIZWFkIC5wb3B1cERpdiAucG9wdXAuc2hvd1BvcHVwIHtcXG4gICAgdmlzaWJpbGl0eTogdmlzaWJsZTtcXG4gICAgZGlzcGxheTogYmxvY2s7XFxuICAgIGJhY2tncm91bmQ6ICNGRkZGRkYgMCUgMCUgbm8tcmVwZWF0IHBhZGRpbmctYm94O1xcbiAgICBib3gtc2hhZG93OiAwcHggMHB4IDZweCAjMDAwMDAwMjk7XFxuICAgIGJvcmRlci1yYWRpdXM6IDRweDtcXG4gICAgb3BhY2l0eTogMTtcXG4gICAgd2lkdGg6IDEwOXB4O1xcbiAgICBoZWlnaHQ6IDg0cHg7XFxuICAgIHotaW5kZXg6IDE7XFxufVxcblxcbiNvcHRpbW92ZVBhbmVsSGVhZCAucG9wdXBEaXYgLnBvcHVwLnNob3dQb3B1cCAuZG9ja1JpZ2h0UGljRGl2IHtcXG4gICAgaGVpZ2h0OiAyOHB4O1xcbiAgICBwYWRkaW5nLXRvcDogMTBweDtcXG4gICAgcGFkZGluZy1sZWZ0OiAxMHB4O1xcbn1cXG5cXG4jb3B0aW1vdmVQYW5lbEhlYWQgLnBvcHVwRGl2IC5wb3B1cC5zaG93UG9wdXAgLmRvY2tSaWdodFBpY0RpdiAuZG9ja1RleHQge1xcbiAgICBkaXNwbGF5OiBpbmxpbmU7XFxuICAgIHBhZGRpbmctbGVmdDogNnB4O1xcbn1cXG5cXG4jb3B0aW1vdmVQYW5lbEhlYWQgLnBvcHVwRGl2IC5wb3B1cC5zaG93UG9wdXAgLmRvY2tSaWdodFBpY0Rpdjpob3ZlciB7XFxuICAgIGJhY2tncm91bmQtY29sb3I6ICNFQ0VGRjE7XFxufVxcblxcbiNvcHRpbW92ZVBhbmVsSGVhZCAucG9wdXBEaXYgLnBvcHVwLnNob3dQb3B1cCAuZG9ja0xlZnRQaWNEaXYge1xcbiAgICBoZWlnaHQ6IDI4cHg7XFxuICAgIHBhZGRpbmctdG9wOiAxMHB4O1xcbiAgICBwYWRkaW5nLWxlZnQ6IDEwcHg7XFxufVxcblxcbiNvcHRpbW92ZVBhbmVsSGVhZCAucG9wdXBEaXYgLnBvcHVwLnNob3dQb3B1cCAuZG9ja0xlZnRQaWNEaXYgLmRvY2tUZXh0IHtcXG4gICAgZGlzcGxheTogaW5saW5lO1xcbiAgICBwYWRkaW5nLWxlZnQ6IDZweDtcXG59XFxuXFxuI29wdGltb3ZlUGFuZWxIZWFkIC5wb3B1cERpdiAucG9wdXAuc2hvd1BvcHVwIC5kb2NrTGVmdFBpY0Rpdjpob3ZlciB7XFxuICAgIGJhY2tncm91bmQtY29sb3I6ICNFQ0VGRjE7XFxufVxcblxcbiNvcHRpbW92ZVBhbmVsSGVhZCAucG9wdXBEaXYgLnBvcHVwLnNob3dQb3B1cCAuZG9ja0JvdHRvbVBpY0RpdiB7XFxuICAgIGhlaWdodDogMjhweDtcXG4gICAgcGFkZGluZy10b3A6IDEwcHg7XFxuICAgIHBhZGRpbmctbGVmdDogMTBweDtcXG59XFxuXFxuI29wdGltb3ZlUGFuZWxIZWFkIC5wb3B1cERpdiAucG9wdXAuc2hvd1BvcHVwIC5kb2NrQm90dG9tUGljRGl2IC5kb2NrVGV4dCB7XFxuICAgIGRpc3BsYXk6IGlubGluZTtcXG4gICAgcGFkZGluZy1sZWZ0OiA2cHg7XFxufVxcblxcbiNvcHRpbW92ZVBhbmVsSGVhZCAucG9wdXBEaXYgLnBvcHVwLnNob3dQb3B1cCAuZG9ja0JvdHRvbVBpY0Rpdjpob3ZlciB7XFxuICAgIGJhY2tncm91bmQtY29sb3I6ICNFQ0VGRjE7XFxufVxcblxcbiNvcHRpbW92ZVBhbmVsSGVhZCAucG9wdXAucG9wdXBOb3RTaG93IHtcXG4gICAgdmlzaWJpbGl0eTogaGlkZGVuO1xcbn1cXG5cXG4jb3B0aW1vdmVQYW5lbEhlYWQgLnBvcHVwLnNob3dQb3B1cCB7XFxuICAgIHZpc2liaWxpdHk6IHZpc2libGU7XFxuICAgIGRpc3BsYXk6IGJsb2NrO1xcbiAgICBiYWNrZ3JvdW5kOiAjRkZGRkZGIDAlIDAlIG5vLXJlcGVhdCBwYWRkaW5nLWJveDtcXG4gICAgYm94LXNoYWRvdzogMHB4IDBweCA2cHggIzAwMDAwMDI5O1xcbiAgICBib3JkZXItcmFkaXVzOiA0cHg7XFxuICAgIG9wYWNpdHk6IDE7XFxuICAgIHdpZHRoOiAxMDlweDtcXG4gICAgaGVpZ2h0OiA4M3B4O1xcbn1cXG5cXG4jb3B0aW1vdmVTZGtXZWJUb29sLm9wZW4uYWctdGhlbWUtYmFsaGFtIC5hZy1oZWFkZXItY2VsbCB7XFxuICAgIHBhZGRpbmctcmlnaHQ6IDBweCAhaW1wb3J0YW50O1xcbn1cXG5cXG4jb3B0aW1vdmVTREtEcmFnZ2VyIHtcXG4gICAgd2lkdGg6IDEwcHg7XFxuICAgIGhlaWdodDogMTAwJTtcXG4gICAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgICB0b3A6IDA7XFxuICAgIGxlZnQ6IDA7XFxuICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xcbiAgICB6LWluZGV4OiAxO1xcbiAgICBjdXJzb3I6IHctcmVzaXplO1xcbn1cXG5cXG4jb3B0aW1vdmVTZGtXZWJUb29sIC5tYXRlcmlhbC1pY29ucyB7XFxuICAgIGN1cnNvcjogcG9pbnRlcjtcXG59XFxuXFxuI29wdGltb3ZlU2RrV2ViVG9vbCAuYWctcm9vdC13cmFwcGVyLmFnLWxheW91dC1ub3JtYWwge1xcbiAgICBoZWlnaHQ6IGNhbGMoMTAwJSAtIDEwM3B4KTtcXG59XFxuXFxuI29wdGltb3ZlU2RrV2ViVG9vbC5hZy10aGVtZS1iYWxoYW0gLmlzLW5vdC1tYWluIHtcXG4gICAgYmFja2dyb3VuZC1jb2xvcjogI0VDRUZGMTtcXG59XFxuXFxuI29wdGltb3ZlU2RrV2ViVG9vbC5hZy10aGVtZS1iYWxoYW0gLmVycm9yTm90TWFpblJvdyB7XFxuICAgIGJhY2tncm91bmQtY29sb3I6ICNGRkQ2QzI7XFxufVxcblxcbiNvcHRpbW92ZVNka1dlYlRvb2wuYWctdGhlbWUtYmFsaGFtIC5hZy1oZWFkZXItY2VsbCB7XFxuICAgIGJhY2tncm91bmQtY29sb3I6ICNDRkQ4REM7XFxuICAgIGJveC1zaXppbmc6IGNvbnRlbnQtYm94O1xcbn1cXG5cXG4jb3B0aW1vdmVTZGtXZWJUb29sIC5hZy1oZWFkZXItY2VsbC10ZXh0IHtcXG4gICAgY29sb3I6ICM0NTVBNjQ7XFxuICAgIHRleHQtYWxpZ246IGxlZnQ7XFxuICAgIGZvbnQ6IEJvbGQgMTJweC8xNHB4IFJvYm90bztcXG4gICAgbGV0dGVyLXNwYWNpbmc6IDA7XFxuICAgIG9wYWNpdHk6IDE7XFxufVxcblxcbiNvcHRpbW92ZVNka1dlYlRvb2wuYWctdGhlbWUtYmFsaGFtIC5hZy1jZWxsIHtcXG4gICAgdGV4dC1hbGlnbjogbGVmdDtcXG4gICAgZm9udDogUmVndWxhciAxMnB4LzE0cHggUm9ib3RvO1xcbiAgICBsZXR0ZXItc3BhY2luZzogMDtcXG4gICAgY29sb3I6ICMzNzQ3NEY7XFxuICAgIG9wYWNpdHk6IDE7XFxufVxcblxcbiNvcHRpbW92ZVNka1dlYlRvb2wuYWctdGhlbWUtYmFsaGFtIC5hZy1jZWxsIC5mYS1hbmdsZS1yaWdodCxcXG4jb3B0aW1vdmVTZGtXZWJUb29sLmFnLXRoZW1lLWJhbGhhbSAuYWctY2VsbCAuZmEtYW5nbGUtZG93biB7XFxuICAgIHdpZHRoOiAxOHB4O1xcbiAgICBoZWlnaHQ6IDE4cHg7XFxuICAgIHBhZGRpbmctcmlnaHQ6IDEwcHg7XFxuICAgIGNvbG9yOiAjMzc0NzRGO1xcbn1cXG5cXG4jb3B0aW1vdmVTZGtXZWJUb29sLmFnLXRoZW1lLWJhbGhhbSAuYWctY2VsbCAuZmEtZXhjbGFtYXRpb24tY2lyY2xlIHtcXG4gICAgcGFkZGluZy1yaWdodDogMjBweDtcXG4gICAgd2lkdGg6IDE2cHg7XFxuICAgIGhlaWdodDogMTdweDtcXG4gICAgY29sb3I6ICNGRjU1MDA7XFxufVxcblxcbiNvcHRpbW92ZVNka1dlYlRvb2wuYWctdGhlbWUtYmFsaGFtIC5hZy1jZWxsLm1haW5Sb3dDbGFzcy5vcHREYXRlQ2VsbC5vcHRIYXNFcnJvciB7XFxuICAgIGNvbG9yOiAjRkY1NTAwO1xcbn1cXG5cXG4jb3B0aW1vdmVTZGtXZWJUb29sLmFnLXRoZW1lLWJhbGhhbSAuYWctY2VsbC5tYWluUm93Q2xhc3MubWFpblJvd0NsYXNzRXZlbnRJZC5vcHRIYXNFcnJvciB7XFxuICAgIGNvbG9yOiAjRkY1NTAwO1xcbn1cXG5cXG4jb3B0aW1vdmVTZGtXZWJUb29sLmFnLXRoZW1lLWJhbGhhbSAuYWctY2VsbC5tYWluUm93Q2xhc3MubWFpblJvd0NsYXNzRXZlbnROYW1lLm9wdEhhc0Vycm9yIHtcXG4gICAgY29sb3I6ICNGRjU1MDA7XFxufVxcblxcbiNvcHRpbW92ZVNka1dlYlRvb2wuYWctdGhlbWUtYmFsaGFtIC5hZy1jZWxsLm5vdE1haW5EYXRlUm93Q2xhc3Mge1xcbiAgICBsZWZ0OiAyNnB4ICFpbXBvcnRhbnQ7XFxuICAgIHdoaXRlLXNwYWNlOiBub3JtYWwgIWltcG9ydGFudDtcXG59XFxuXFxuI29wdGltb3ZlU2RrV2ViVG9vbC5hZy10aGVtZS1iYWxoYW0gLmFnLWNlbGwubm90TWFpbkRhdGVSb3dDbGFzcy5vcHRQYXJhbWV0ZXJzV2FybmluZyB7XFxuICAgIGNvbG9yOiAjMjEyMTIxICFpbXBvcnRhbnQ7XFxuICAgIGZvbnQtd2VpZ2h0OiBib2xkICFpbXBvcnRhbnQ7XFxuICAgIGxlZnQ6IDI2cHggIWltcG9ydGFudDtcXG59XFxuXFxuI29wdGltb3ZlU2RrV2ViVG9vbCAuY2VsbC13cmFwLXRleHQge1xcbiAgICB3aGl0ZS1zcGFjZTogbm9ybWFsICFpbXBvcnRhbnQ7XFxufVxcblxcbiNvcHRpbW92ZVNka1dlYlRvb2wuYWctdGhlbWUtYmFsaGFtIC5hZy1jZWxsLm5vdE1haW5EYXRlUm93Q2xhc3Mub3B0Tm90RXhpc3RXYXJuaW5nIHtcXG4gICAgbGVmdDogMjZweCAhaW1wb3J0YW50O1xcbiAgICBsZWZ0OiAyNnB4ICFpbXBvcnRhbnQ7XFxuICAgIHdoaXRlLXNwYWNlOiBub3dyYXAgIWltcG9ydGFudDtcXG4gICAgY29sb3I6ICNDRjQ1MDA7XFxufVxcblxcbiNvcHRpbW92ZVNka1dlYlRvb2wuYWctdGhlbWUtYmFsaGFtIC5hZy1jZWxsLm5vdE1haW5Sb3dDbGFzcy5ub3RNYWluUm93Q2xhc3NFdmVudElkIHtcXG4gICAgbGVmdDogMTYwcHggIWltcG9ydGFudDtcXG4gICAgZm9udC13ZWlnaHQ6IGJvbGQ7XFxuICAgIHdoaXRlLXNwYWNlOiBub3JtYWwgIWltcG9ydGFudDtcXG59XFxuXFxuI29wdGltb3ZlU2RrV2ViVG9vbC5hZy10aGVtZS1iYWxoYW0gLmFnLWNlbGwubm90TWFpblJvd0NsYXNzLm5vdE1haW5Sb3dDbGFzc0V2ZW50SWQub3B0SGFzRXJyb3Ige1xcbiAgICBsZWZ0OiAxNjBweCAhaW1wb3J0YW50O1xcbiAgICBmb250LXdlaWdodDogbm9ybWFsO1xcbiAgICB3aGl0ZS1zcGFjZTogbm9ybWFsICFpbXBvcnRhbnQ7XFxufVxcblxcbiNvcHRpbW92ZVNka1dlYlRvb2wgLmFnLW92ZXJsYXktbG9hZGluZy1jZW50ZXIge1xcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XFxuICAgIGZvbnQ6IEJvbGQgMjRweC8yOHB4IFJvYm90bztcXG4gICAgbGV0dGVyLXNwYWNpbmc6IDA7XFxuICAgIGNvbG9yOiAjRjJGMEYwO1xcbiAgICBvcGFjaXR5OiAxO1xcbn1cXG5cXG4jb3B0aW1vdmVTZGtXZWJUb29sIC5jZWxsLXBhcmFtZXRlci12YWx1ZSB7XFxuICAgIHdpZHRoOiA1NDBweCAhaW1wb3J0YW50O1xcbiAgICA7XFxufVxcblxcbiNvcHRpbW92ZVNka1dlYlRvb2wgLmFnLWZ1bGwtd2lkdGgtcm93IHtcXG4gICAgcGFkZGluZy1sZWZ0OiA4cHggIWltcG9ydGFudDtcXG4gICAgcGFkZGluZy10b3A6IDE2cHggIWltcG9ydGFudDtcXG59XFxuXFxuI29wdGltb3ZlU2RrV2ViVG9vbCAub3B0aW1vdmVUb3BIZWFkTGluZSB7XFxuICAgIGRpc3BsYXk6IGZsZXg7XFxuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxuICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYXJvdW5kO1xcbn1cXG5cXG4jb3B0aW1vdmVTZGtXZWJUb29sIC5vcHRpbW92ZVRvcEhlYWRMaW5lIC5vcHRpbW92ZVdlYlRvb2xCdG5DbG9zZSB7XFxuICAgIGJveC1zaGFkb3c6IG5vbmU7XFxufVxcblxcbiNvcHRpbW92ZVNka1dlYlRvb2wgLm9wdGltb3ZlVG9wSGVhZExpbmUgLm9wdGltb3ZlV2ViVG9vbEJ0bkNsb3NlIGkge1xcbiAgICBmb250LXNpemU6IDE3cHg7XFxuICAgIGNvbG9yOiAjNUY3QzhBO1xcbn1cXG5cXG4jb3B0aW1vdmVTZGtXZWJUb29sIC5vcHRpbW92ZVRvcEhlYWRMaW5lIC5wb3NpdGlvbkJ1dHRvblBpYyB7XFxuICAgIHBhZGRpbmctcmlnaHQ6IDEwcHg7XFxufVxcblxcbiNvcHRpbW92ZVNka1dlYlRvb2wgLm9wdGltb3ZlVG9wSGVhZExpbmVUZXh0IHtcXG4gICAgd2lkdGg6IDEwMCU7XFxuICAgIGRpc3BsYXk6IGZsZXg7XFxuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxuICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcXG4gICAgcGFkZGluZy1sZWZ0OiA4cHg7XFxuICAgIGNvbG9yOiAjNDI0MjQyO1xcbiAgICB0ZXh0LWFsaWduOiBsZWZ0O1xcbiAgICBmb250OiBMaWdodCAxOHB4LzE4cHggUm9ib3RvO1xcbiAgICBsZXR0ZXItc3BhY2luZzogMDtcXG4gICAgb3BhY2l0eTogMTtcXG4gICAgZm9udC13ZWlnaHQ6IDMwMDtcXG4gICAgZm9udC1zaXplOiAxOHB4O1xcbn1cXG5cXG4jb3B0aW1vdmVTZGtXZWJUb29sIC5vcHRpbW92ZUJvdHRvbUhlYWRMaW5lVGV4dCB7XFxuICAgIGRpc3BsYXk6IGZsZXg7XFxuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxuICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcXG4gICAgd2lkdGg6IDEwMCU7XFxuICAgIHBhZGRpbmc6IDEwcHggMCA1cHg7XFxuICAgIHRleHQtYWxpZ246IGxlZnQ7XFxuICAgIGZvbnQ6IFJlZ3VsYXIgMTJweC8xNnB4IFJvYm90bztcXG4gICAgbGV0dGVyLXNwYWNpbmc6IDA7XFxuICAgIGNvbG9yOiAjNTQ2RTdBO1xcbiAgICBvcGFjaXR5OiAxO1xcbn1cXG5cXG4jb3B0aW1vdmVTZGtXZWJUb29sIC5vcHZBcnJvd05vUGFyYW1zIHtcXG4gICAgdmlzaWJpbGl0eTogaGlkZGVuO1xcbn1cXG5cXG4jb3B0aW1vdmVTZGtXZWJUb29sIC5idG4tbGluay5vcHQtYnRuLWxpbmsge1xcbiAgICBwYWRkaW5nLXRvcDogNXB4O1xcbiAgICBwYWRkaW5nLWxlZnQ6IDBweDtcXG4gICAgYm9yZGVyOiAwO1xcbiAgICBjdXJzb3I6IHBvaW50ZXI7XFxuICAgIGNvbG9yOiAjMDBBQUZGO1xcbiAgICBmb250LXNpemU6IDEycHg7XFxuICAgIGZvbnQtd2VpZ2h0OiA3MDA7XFxuICAgIHVzZXItc2VsZWN0OiBub25lO1xcbiAgICB0ZXh0LXNoYWRvdzogbm9uZTtcXG4gICAgYmFja2dyb3VuZC1jb2xvcjogd2hpdGUgIWltcG9ydGFudDtcXG59XFxuXFxuI29wdGltb3ZlU2RrV2ViVG9vbCAuYnRuLWxpbmsub3B0LWJ0bi1saW5rOmhvdmVyIHtcXG4gICAgY29sb3I6ICMwMDY5OUUgIWltcG9ydGFudDtcXG4gICAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xcbn1cXG5cXG4jb3B0aW1vdmVTZGtXZWJUb29sIC5vcHQtYnRuLWxpbmsuYnRuLWxpbmsuZGlzYWJsZS1idG46aG92ZXIge1xcbiAgICBjb2xvcjogI0IwQkVDNSAhaW1wb3J0YW50O1xcbn1cXG5cXG4jb3B0aW1vdmVTZGtXZWJUb29sLmFnLXRoZW1lLWJhbGhhbSAuYWctaGVhZGVyLWNlbGw6OmFmdGVyLFxcbi5hZy10aGVtZS1iYWxoYW0gLmFnLWhlYWRlci1ncm91cC1jZWxsOjphZnRlciB7XFxuICAgIGJvcmRlci1yaWdodDogbm9uZTtcXG59XFxuXFxuI29wdGltb3ZlU2RrV2ViVG9vbCAuYWctcm93LWhvdmVyIHtcXG4gICAgYmFja2dyb3VuZC1jb2xvcjogI0Y1RjdGNyAhaW1wb3J0YW50O1xcbn1cXG5cXG4jb3B0aW1vdmVTZGtXZWJUb29sLmFnLXRoZW1lLWJhbGhhbSAuYWctcm93LXNlbGVjdGVkLm9wdGktcm93LWNsYXNzIHtcXG4gICAgYmFja2dyb3VuZC1jb2xvcjogd2hpdGUgIWltcG9ydGFudDtcXG4gICAgYm9yZGVyLWNvbG9yOiAjZDlkY2RlO1xcbn1cXG5cXG4jb3B0aW1vdmVTZGtXZWJUb29sLmFnLXRoZW1lLWJhbGhhbSAuYWctcm9vdCB7XFxuICAgIGJvcmRlcjogMHB4ICFpbXBvcnRhbnQ7XFxufVxcblxcbiNvcHRpbW92ZVNka1dlYlRvb2wuYWctdGhlbWUtYmFsaGFtIC5hZy1vdmVybGF5LWxvYWRpbmctY2VudGVyIHtcXG4gICAgYm9yZGVyOiAwcHggIWltcG9ydGFudDtcXG59XCJdLFwic291cmNlUm9vdFwiOlwiXCJ9XSk7XG4vLyBFeHBvcnRzXG5leHBvcnQgZGVmYXVsdCBfX19DU1NfTE9BREVSX0VYUE9SVF9fXztcbiIsIlwidXNlIHN0cmljdFwiO1xuXG4vKlxuICBNSVQgTGljZW5zZSBodHRwOi8vd3d3Lm9wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL21pdC1saWNlbnNlLnBocFxuICBBdXRob3IgVG9iaWFzIEtvcHBlcnMgQHNva3JhXG4qL1xuLy8gY3NzIGJhc2UgY29kZSwgaW5qZWN0ZWQgYnkgdGhlIGNzcy1sb2FkZXJcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBmdW5jLW5hbWVzXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChjc3NXaXRoTWFwcGluZ1RvU3RyaW5nKSB7XG4gIHZhciBsaXN0ID0gW107IC8vIHJldHVybiB0aGUgbGlzdCBvZiBtb2R1bGVzIGFzIGNzcyBzdHJpbmdcblxuICBsaXN0LnRvU3RyaW5nID0gZnVuY3Rpb24gdG9TdHJpbmcoKSB7XG4gICAgcmV0dXJuIHRoaXMubWFwKGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgICB2YXIgY29udGVudCA9IGNzc1dpdGhNYXBwaW5nVG9TdHJpbmcoaXRlbSk7XG5cbiAgICAgIGlmIChpdGVtWzJdKSB7XG4gICAgICAgIHJldHVybiBcIkBtZWRpYSBcIi5jb25jYXQoaXRlbVsyXSwgXCIge1wiKS5jb25jYXQoY29udGVudCwgXCJ9XCIpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gY29udGVudDtcbiAgICB9KS5qb2luKCcnKTtcbiAgfTsgLy8gaW1wb3J0IGEgbGlzdCBvZiBtb2R1bGVzIGludG8gdGhlIGxpc3RcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGZ1bmMtbmFtZXNcblxuXG4gIGxpc3QuaSA9IGZ1bmN0aW9uIChtb2R1bGVzLCBtZWRpYVF1ZXJ5LCBkZWR1cGUpIHtcbiAgICBpZiAodHlwZW9mIG1vZHVsZXMgPT09ICdzdHJpbmcnKSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcGFyYW0tcmVhc3NpZ25cbiAgICAgIG1vZHVsZXMgPSBbW251bGwsIG1vZHVsZXMsICcnXV07XG4gICAgfVxuXG4gICAgdmFyIGFscmVhZHlJbXBvcnRlZE1vZHVsZXMgPSB7fTtcblxuICAgIGlmIChkZWR1cGUpIHtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcHJlZmVyLWRlc3RydWN0dXJpbmdcbiAgICAgICAgdmFyIGlkID0gdGhpc1tpXVswXTtcblxuICAgICAgICBpZiAoaWQgIT0gbnVsbCkge1xuICAgICAgICAgIGFscmVhZHlJbXBvcnRlZE1vZHVsZXNbaWRdID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCBtb2R1bGVzLmxlbmd0aDsgX2krKykge1xuICAgICAgdmFyIGl0ZW0gPSBbXS5jb25jYXQobW9kdWxlc1tfaV0pO1xuXG4gICAgICBpZiAoZGVkdXBlICYmIGFscmVhZHlJbXBvcnRlZE1vZHVsZXNbaXRlbVswXV0pIHtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnRpbnVlXG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBpZiAobWVkaWFRdWVyeSkge1xuICAgICAgICBpZiAoIWl0ZW1bMl0pIHtcbiAgICAgICAgICBpdGVtWzJdID0gbWVkaWFRdWVyeTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpdGVtWzJdID0gXCJcIi5jb25jYXQobWVkaWFRdWVyeSwgXCIgYW5kIFwiKS5jb25jYXQoaXRlbVsyXSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgbGlzdC5wdXNoKGl0ZW0pO1xuICAgIH1cbiAgfTtcblxuICByZXR1cm4gbGlzdDtcbn07IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmZ1bmN0aW9uIF9zbGljZWRUb0FycmF5KGFyciwgaSkgeyByZXR1cm4gX2FycmF5V2l0aEhvbGVzKGFycikgfHwgX2l0ZXJhYmxlVG9BcnJheUxpbWl0KGFyciwgaSkgfHwgX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KGFyciwgaSkgfHwgX25vbkl0ZXJhYmxlUmVzdCgpOyB9XG5cbmZ1bmN0aW9uIF9ub25JdGVyYWJsZVJlc3QoKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxcbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC5cIik7IH1cblxuZnVuY3Rpb24gX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KG8sIG1pbkxlbikgeyBpZiAoIW8pIHJldHVybjsgaWYgKHR5cGVvZiBvID09PSBcInN0cmluZ1wiKSByZXR1cm4gX2FycmF5TGlrZVRvQXJyYXkobywgbWluTGVuKTsgdmFyIG4gPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwobykuc2xpY2UoOCwgLTEpOyBpZiAobiA9PT0gXCJPYmplY3RcIiAmJiBvLmNvbnN0cnVjdG9yKSBuID0gby5jb25zdHJ1Y3Rvci5uYW1lOyBpZiAobiA9PT0gXCJNYXBcIiB8fCBuID09PSBcIlNldFwiKSByZXR1cm4gQXJyYXkuZnJvbShvKTsgaWYgKG4gPT09IFwiQXJndW1lbnRzXCIgfHwgL14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3QobikpIHJldHVybiBfYXJyYXlMaWtlVG9BcnJheShvLCBtaW5MZW4pOyB9XG5cbmZ1bmN0aW9uIF9hcnJheUxpa2VUb0FycmF5KGFyciwgbGVuKSB7IGlmIChsZW4gPT0gbnVsbCB8fCBsZW4gPiBhcnIubGVuZ3RoKSBsZW4gPSBhcnIubGVuZ3RoOyBmb3IgKHZhciBpID0gMCwgYXJyMiA9IG5ldyBBcnJheShsZW4pOyBpIDwgbGVuOyBpKyspIHsgYXJyMltpXSA9IGFycltpXTsgfSByZXR1cm4gYXJyMjsgfVxuXG5mdW5jdGlvbiBfaXRlcmFibGVUb0FycmF5TGltaXQoYXJyLCBpKSB7IGlmICh0eXBlb2YgU3ltYm9sID09PSBcInVuZGVmaW5lZFwiIHx8ICEoU3ltYm9sLml0ZXJhdG9yIGluIE9iamVjdChhcnIpKSkgcmV0dXJuOyB2YXIgX2FyciA9IFtdOyB2YXIgX24gPSB0cnVlOyB2YXIgX2QgPSBmYWxzZTsgdmFyIF9lID0gdW5kZWZpbmVkOyB0cnkgeyBmb3IgKHZhciBfaSA9IGFycltTeW1ib2wuaXRlcmF0b3JdKCksIF9zOyAhKF9uID0gKF9zID0gX2kubmV4dCgpKS5kb25lKTsgX24gPSB0cnVlKSB7IF9hcnIucHVzaChfcy52YWx1ZSk7IGlmIChpICYmIF9hcnIubGVuZ3RoID09PSBpKSBicmVhazsgfSB9IGNhdGNoIChlcnIpIHsgX2QgPSB0cnVlOyBfZSA9IGVycjsgfSBmaW5hbGx5IHsgdHJ5IHsgaWYgKCFfbiAmJiBfaVtcInJldHVyblwiXSAhPSBudWxsKSBfaVtcInJldHVyblwiXSgpOyB9IGZpbmFsbHkgeyBpZiAoX2QpIHRocm93IF9lOyB9IH0gcmV0dXJuIF9hcnI7IH1cblxuZnVuY3Rpb24gX2FycmF5V2l0aEhvbGVzKGFycikgeyBpZiAoQXJyYXkuaXNBcnJheShhcnIpKSByZXR1cm4gYXJyOyB9XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gY3NzV2l0aE1hcHBpbmdUb1N0cmluZyhpdGVtKSB7XG4gIHZhciBfaXRlbSA9IF9zbGljZWRUb0FycmF5KGl0ZW0sIDQpLFxuICAgICAgY29udGVudCA9IF9pdGVtWzFdLFxuICAgICAgY3NzTWFwcGluZyA9IF9pdGVtWzNdO1xuXG4gIGlmICh0eXBlb2YgYnRvYSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bmRlZlxuICAgIHZhciBiYXNlNjQgPSBidG9hKHVuZXNjYXBlKGVuY29kZVVSSUNvbXBvbmVudChKU09OLnN0cmluZ2lmeShjc3NNYXBwaW5nKSkpKTtcbiAgICB2YXIgZGF0YSA9IFwic291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247Y2hhcnNldD11dGYtODtiYXNlNjQsXCIuY29uY2F0KGJhc2U2NCk7XG4gICAgdmFyIHNvdXJjZU1hcHBpbmcgPSBcIi8qIyBcIi5jb25jYXQoZGF0YSwgXCIgKi9cIik7XG4gICAgdmFyIHNvdXJjZVVSTHMgPSBjc3NNYXBwaW5nLnNvdXJjZXMubWFwKGZ1bmN0aW9uIChzb3VyY2UpIHtcbiAgICAgIHJldHVybiBcIi8qIyBzb3VyY2VVUkw9XCIuY29uY2F0KGNzc01hcHBpbmcuc291cmNlUm9vdCB8fCAnJykuY29uY2F0KHNvdXJjZSwgXCIgKi9cIik7XG4gICAgfSk7XG4gICAgcmV0dXJuIFtjb250ZW50XS5jb25jYXQoc291cmNlVVJMcykuY29uY2F0KFtzb3VyY2VNYXBwaW5nXSkuam9pbignXFxuJyk7XG4gIH1cblxuICByZXR1cm4gW2NvbnRlbnRdLmpvaW4oJ1xcbicpO1xufTsiLCJpbXBvcnQgYXBpIGZyb20gXCIhLi4vLi4vbm9kZV9tb2R1bGVzL3N0eWxlLWxvYWRlci9kaXN0L3J1bnRpbWUvaW5qZWN0U3R5bGVzSW50b1N0eWxlVGFnLmpzXCI7XG4gICAgICAgICAgICBpbXBvcnQgY29udGVudCBmcm9tIFwiISEuLi8uLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L2Nqcy5qcyEuL3N0eWxlLmNzc1wiO1xuXG52YXIgb3B0aW9ucyA9IHt9O1xuXG5vcHRpb25zLmluc2VydCA9IFwiaGVhZFwiO1xub3B0aW9ucy5zaW5nbGV0b24gPSBmYWxzZTtcblxudmFyIHVwZGF0ZSA9IGFwaShjb250ZW50LCBvcHRpb25zKTtcblxuXG5cbmV4cG9ydCBkZWZhdWx0IGNvbnRlbnQubG9jYWxzIHx8IHt9OyIsIlwidXNlIHN0cmljdFwiO1xuXG52YXIgaXNPbGRJRSA9IGZ1bmN0aW9uIGlzT2xkSUUoKSB7XG4gIHZhciBtZW1vO1xuICByZXR1cm4gZnVuY3Rpb24gbWVtb3JpemUoKSB7XG4gICAgaWYgKHR5cGVvZiBtZW1vID09PSAndW5kZWZpbmVkJykge1xuICAgICAgLy8gVGVzdCBmb3IgSUUgPD0gOSBhcyBwcm9wb3NlZCBieSBCcm93c2VyaGFja3NcbiAgICAgIC8vIEBzZWUgaHR0cDovL2Jyb3dzZXJoYWNrcy5jb20vI2hhY2stZTcxZDg2OTJmNjUzMzQxNzNmZWU3MTVjMjIyY2I4MDVcbiAgICAgIC8vIFRlc3RzIGZvciBleGlzdGVuY2Ugb2Ygc3RhbmRhcmQgZ2xvYmFscyBpcyB0byBhbGxvdyBzdHlsZS1sb2FkZXJcbiAgICAgIC8vIHRvIG9wZXJhdGUgY29ycmVjdGx5IGludG8gbm9uLXN0YW5kYXJkIGVudmlyb25tZW50c1xuICAgICAgLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vd2VicGFjay1jb250cmliL3N0eWxlLWxvYWRlci9pc3N1ZXMvMTc3XG4gICAgICBtZW1vID0gQm9vbGVhbih3aW5kb3cgJiYgZG9jdW1lbnQgJiYgZG9jdW1lbnQuYWxsICYmICF3aW5kb3cuYXRvYik7XG4gICAgfVxuXG4gICAgcmV0dXJuIG1lbW87XG4gIH07XG59KCk7XG5cbnZhciBnZXRUYXJnZXQgPSBmdW5jdGlvbiBnZXRUYXJnZXQoKSB7XG4gIHZhciBtZW1vID0ge307XG4gIHJldHVybiBmdW5jdGlvbiBtZW1vcml6ZSh0YXJnZXQpIHtcbiAgICBpZiAodHlwZW9mIG1lbW9bdGFyZ2V0XSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHZhciBzdHlsZVRhcmdldCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IodGFyZ2V0KTsgLy8gU3BlY2lhbCBjYXNlIHRvIHJldHVybiBoZWFkIG9mIGlmcmFtZSBpbnN0ZWFkIG9mIGlmcmFtZSBpdHNlbGZcblxuICAgICAgaWYgKHdpbmRvdy5IVE1MSUZyYW1lRWxlbWVudCAmJiBzdHlsZVRhcmdldCBpbnN0YW5jZW9mIHdpbmRvdy5IVE1MSUZyYW1lRWxlbWVudCkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIC8vIFRoaXMgd2lsbCB0aHJvdyBhbiBleGNlcHRpb24gaWYgYWNjZXNzIHRvIGlmcmFtZSBpcyBibG9ja2VkXG4gICAgICAgICAgLy8gZHVlIHRvIGNyb3NzLW9yaWdpbiByZXN0cmljdGlvbnNcbiAgICAgICAgICBzdHlsZVRhcmdldCA9IHN0eWxlVGFyZ2V0LmNvbnRlbnREb2N1bWVudC5oZWFkO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgLy8gaXN0YW5idWwgaWdub3JlIG5leHRcbiAgICAgICAgICBzdHlsZVRhcmdldCA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgbWVtb1t0YXJnZXRdID0gc3R5bGVUYXJnZXQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIG1lbW9bdGFyZ2V0XTtcbiAgfTtcbn0oKTtcblxudmFyIHN0eWxlc0luRG9tID0gW107XG5cbmZ1bmN0aW9uIGdldEluZGV4QnlJZGVudGlmaWVyKGlkZW50aWZpZXIpIHtcbiAgdmFyIHJlc3VsdCA9IC0xO1xuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgc3R5bGVzSW5Eb20ubGVuZ3RoOyBpKyspIHtcbiAgICBpZiAoc3R5bGVzSW5Eb21baV0uaWRlbnRpZmllciA9PT0gaWRlbnRpZmllcikge1xuICAgICAgcmVzdWx0ID0gaTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmZ1bmN0aW9uIG1vZHVsZXNUb0RvbShsaXN0LCBvcHRpb25zKSB7XG4gIHZhciBpZENvdW50TWFwID0ge307XG4gIHZhciBpZGVudGlmaWVycyA9IFtdO1xuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGlzdC5sZW5ndGg7IGkrKykge1xuICAgIHZhciBpdGVtID0gbGlzdFtpXTtcbiAgICB2YXIgaWQgPSBvcHRpb25zLmJhc2UgPyBpdGVtWzBdICsgb3B0aW9ucy5iYXNlIDogaXRlbVswXTtcbiAgICB2YXIgY291bnQgPSBpZENvdW50TWFwW2lkXSB8fCAwO1xuICAgIHZhciBpZGVudGlmaWVyID0gXCJcIi5jb25jYXQoaWQsIFwiIFwiKS5jb25jYXQoY291bnQpO1xuICAgIGlkQ291bnRNYXBbaWRdID0gY291bnQgKyAxO1xuICAgIHZhciBpbmRleCA9IGdldEluZGV4QnlJZGVudGlmaWVyKGlkZW50aWZpZXIpO1xuICAgIHZhciBvYmogPSB7XG4gICAgICBjc3M6IGl0ZW1bMV0sXG4gICAgICBtZWRpYTogaXRlbVsyXSxcbiAgICAgIHNvdXJjZU1hcDogaXRlbVszXVxuICAgIH07XG5cbiAgICBpZiAoaW5kZXggIT09IC0xKSB7XG4gICAgICBzdHlsZXNJbkRvbVtpbmRleF0ucmVmZXJlbmNlcysrO1xuICAgICAgc3R5bGVzSW5Eb21baW5kZXhdLnVwZGF0ZXIob2JqKTtcbiAgICB9IGVsc2Uge1xuICAgICAgc3R5bGVzSW5Eb20ucHVzaCh7XG4gICAgICAgIGlkZW50aWZpZXI6IGlkZW50aWZpZXIsXG4gICAgICAgIHVwZGF0ZXI6IGFkZFN0eWxlKG9iaiwgb3B0aW9ucyksXG4gICAgICAgIHJlZmVyZW5jZXM6IDFcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlkZW50aWZpZXJzLnB1c2goaWRlbnRpZmllcik7XG4gIH1cblxuICByZXR1cm4gaWRlbnRpZmllcnM7XG59XG5cbmZ1bmN0aW9uIGluc2VydFN0eWxlRWxlbWVudChvcHRpb25zKSB7XG4gIHZhciBzdHlsZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3N0eWxlJyk7XG4gIHZhciBhdHRyaWJ1dGVzID0gb3B0aW9ucy5hdHRyaWJ1dGVzIHx8IHt9O1xuXG4gIGlmICh0eXBlb2YgYXR0cmlidXRlcy5ub25jZSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICB2YXIgbm9uY2UgPSB0eXBlb2YgX193ZWJwYWNrX25vbmNlX18gIT09ICd1bmRlZmluZWQnID8gX193ZWJwYWNrX25vbmNlX18gOiBudWxsO1xuXG4gICAgaWYgKG5vbmNlKSB7XG4gICAgICBhdHRyaWJ1dGVzLm5vbmNlID0gbm9uY2U7XG4gICAgfVxuICB9XG5cbiAgT2JqZWN0LmtleXMoYXR0cmlidXRlcykuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgc3R5bGUuc2V0QXR0cmlidXRlKGtleSwgYXR0cmlidXRlc1trZXldKTtcbiAgfSk7XG5cbiAgaWYgKHR5cGVvZiBvcHRpb25zLmluc2VydCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIG9wdGlvbnMuaW5zZXJ0KHN0eWxlKTtcbiAgfSBlbHNlIHtcbiAgICB2YXIgdGFyZ2V0ID0gZ2V0VGFyZ2V0KG9wdGlvbnMuaW5zZXJ0IHx8ICdoZWFkJyk7XG5cbiAgICBpZiAoIXRhcmdldCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQ291bGRuJ3QgZmluZCBhIHN0eWxlIHRhcmdldC4gVGhpcyBwcm9iYWJseSBtZWFucyB0aGF0IHRoZSB2YWx1ZSBmb3IgdGhlICdpbnNlcnQnIHBhcmFtZXRlciBpcyBpbnZhbGlkLlwiKTtcbiAgICB9XG5cbiAgICB0YXJnZXQuYXBwZW5kQ2hpbGQoc3R5bGUpO1xuICB9XG5cbiAgcmV0dXJuIHN0eWxlO1xufVxuXG5mdW5jdGlvbiByZW1vdmVTdHlsZUVsZW1lbnQoc3R5bGUpIHtcbiAgLy8gaXN0YW5idWwgaWdub3JlIGlmXG4gIGlmIChzdHlsZS5wYXJlbnROb2RlID09PSBudWxsKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgc3R5bGUucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChzdHlsZSk7XG59XG4vKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAgKi9cblxuXG52YXIgcmVwbGFjZVRleHQgPSBmdW5jdGlvbiByZXBsYWNlVGV4dCgpIHtcbiAgdmFyIHRleHRTdG9yZSA9IFtdO1xuICByZXR1cm4gZnVuY3Rpb24gcmVwbGFjZShpbmRleCwgcmVwbGFjZW1lbnQpIHtcbiAgICB0ZXh0U3RvcmVbaW5kZXhdID0gcmVwbGFjZW1lbnQ7XG4gICAgcmV0dXJuIHRleHRTdG9yZS5maWx0ZXIoQm9vbGVhbikuam9pbignXFxuJyk7XG4gIH07XG59KCk7XG5cbmZ1bmN0aW9uIGFwcGx5VG9TaW5nbGV0b25UYWcoc3R5bGUsIGluZGV4LCByZW1vdmUsIG9iaikge1xuICB2YXIgY3NzID0gcmVtb3ZlID8gJycgOiBvYmoubWVkaWEgPyBcIkBtZWRpYSBcIi5jb25jYXQob2JqLm1lZGlhLCBcIiB7XCIpLmNvbmNhdChvYmouY3NzLCBcIn1cIikgOiBvYmouY3NzOyAvLyBGb3Igb2xkIElFXG5cbiAgLyogaXN0YW5idWwgaWdub3JlIGlmICAqL1xuXG4gIGlmIChzdHlsZS5zdHlsZVNoZWV0KSB7XG4gICAgc3R5bGUuc3R5bGVTaGVldC5jc3NUZXh0ID0gcmVwbGFjZVRleHQoaW5kZXgsIGNzcyk7XG4gIH0gZWxzZSB7XG4gICAgdmFyIGNzc05vZGUgPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShjc3MpO1xuICAgIHZhciBjaGlsZE5vZGVzID0gc3R5bGUuY2hpbGROb2RlcztcblxuICAgIGlmIChjaGlsZE5vZGVzW2luZGV4XSkge1xuICAgICAgc3R5bGUucmVtb3ZlQ2hpbGQoY2hpbGROb2Rlc1tpbmRleF0pO1xuICAgIH1cblxuICAgIGlmIChjaGlsZE5vZGVzLmxlbmd0aCkge1xuICAgICAgc3R5bGUuaW5zZXJ0QmVmb3JlKGNzc05vZGUsIGNoaWxkTm9kZXNbaW5kZXhdKTtcbiAgICB9IGVsc2Uge1xuICAgICAgc3R5bGUuYXBwZW5kQ2hpbGQoY3NzTm9kZSk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGFwcGx5VG9UYWcoc3R5bGUsIG9wdGlvbnMsIG9iaikge1xuICB2YXIgY3NzID0gb2JqLmNzcztcbiAgdmFyIG1lZGlhID0gb2JqLm1lZGlhO1xuICB2YXIgc291cmNlTWFwID0gb2JqLnNvdXJjZU1hcDtcblxuICBpZiAobWVkaWEpIHtcbiAgICBzdHlsZS5zZXRBdHRyaWJ1dGUoJ21lZGlhJywgbWVkaWEpO1xuICB9IGVsc2Uge1xuICAgIHN0eWxlLnJlbW92ZUF0dHJpYnV0ZSgnbWVkaWEnKTtcbiAgfVxuXG4gIGlmIChzb3VyY2VNYXAgJiYgdHlwZW9mIGJ0b2EgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgY3NzICs9IFwiXFxuLyojIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2Jhc2U2NCxcIi5jb25jYXQoYnRvYSh1bmVzY2FwZShlbmNvZGVVUklDb21wb25lbnQoSlNPTi5zdHJpbmdpZnkoc291cmNlTWFwKSkpKSwgXCIgKi9cIik7XG4gIH0gLy8gRm9yIG9sZCBJRVxuXG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAgKi9cblxuXG4gIGlmIChzdHlsZS5zdHlsZVNoZWV0KSB7XG4gICAgc3R5bGUuc3R5bGVTaGVldC5jc3NUZXh0ID0gY3NzO1xuICB9IGVsc2Uge1xuICAgIHdoaWxlIChzdHlsZS5maXJzdENoaWxkKSB7XG4gICAgICBzdHlsZS5yZW1vdmVDaGlsZChzdHlsZS5maXJzdENoaWxkKTtcbiAgICB9XG5cbiAgICBzdHlsZS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShjc3MpKTtcbiAgfVxufVxuXG52YXIgc2luZ2xldG9uID0gbnVsbDtcbnZhciBzaW5nbGV0b25Db3VudGVyID0gMDtcblxuZnVuY3Rpb24gYWRkU3R5bGUob2JqLCBvcHRpb25zKSB7XG4gIHZhciBzdHlsZTtcbiAgdmFyIHVwZGF0ZTtcbiAgdmFyIHJlbW92ZTtcblxuICBpZiAob3B0aW9ucy5zaW5nbGV0b24pIHtcbiAgICB2YXIgc3R5bGVJbmRleCA9IHNpbmdsZXRvbkNvdW50ZXIrKztcbiAgICBzdHlsZSA9IHNpbmdsZXRvbiB8fCAoc2luZ2xldG9uID0gaW5zZXJ0U3R5bGVFbGVtZW50KG9wdGlvbnMpKTtcbiAgICB1cGRhdGUgPSBhcHBseVRvU2luZ2xldG9uVGFnLmJpbmQobnVsbCwgc3R5bGUsIHN0eWxlSW5kZXgsIGZhbHNlKTtcbiAgICByZW1vdmUgPSBhcHBseVRvU2luZ2xldG9uVGFnLmJpbmQobnVsbCwgc3R5bGUsIHN0eWxlSW5kZXgsIHRydWUpO1xuICB9IGVsc2Uge1xuICAgIHN0eWxlID0gaW5zZXJ0U3R5bGVFbGVtZW50KG9wdGlvbnMpO1xuICAgIHVwZGF0ZSA9IGFwcGx5VG9UYWcuYmluZChudWxsLCBzdHlsZSwgb3B0aW9ucyk7XG5cbiAgICByZW1vdmUgPSBmdW5jdGlvbiByZW1vdmUoKSB7XG4gICAgICByZW1vdmVTdHlsZUVsZW1lbnQoc3R5bGUpO1xuICAgIH07XG4gIH1cblxuICB1cGRhdGUob2JqKTtcbiAgcmV0dXJuIGZ1bmN0aW9uIHVwZGF0ZVN0eWxlKG5ld09iaikge1xuICAgIGlmIChuZXdPYmopIHtcbiAgICAgIGlmIChuZXdPYmouY3NzID09PSBvYmouY3NzICYmIG5ld09iai5tZWRpYSA9PT0gb2JqLm1lZGlhICYmIG5ld09iai5zb3VyY2VNYXAgPT09IG9iai5zb3VyY2VNYXApIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB1cGRhdGUob2JqID0gbmV3T2JqKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVtb3ZlKCk7XG4gICAgfVxuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChsaXN0LCBvcHRpb25zKSB7XG4gIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9OyAvLyBGb3JjZSBzaW5nbGUtdGFnIHNvbHV0aW9uIG9uIElFNi05LCB3aGljaCBoYXMgYSBoYXJkIGxpbWl0IG9uIHRoZSAjIG9mIDxzdHlsZT5cbiAgLy8gdGFncyBpdCB3aWxsIGFsbG93IG9uIGEgcGFnZVxuXG4gIGlmICghb3B0aW9ucy5zaW5nbGV0b24gJiYgdHlwZW9mIG9wdGlvbnMuc2luZ2xldG9uICE9PSAnYm9vbGVhbicpIHtcbiAgICBvcHRpb25zLnNpbmdsZXRvbiA9IGlzT2xkSUUoKTtcbiAgfVxuXG4gIGxpc3QgPSBsaXN0IHx8IFtdO1xuICB2YXIgbGFzdElkZW50aWZpZXJzID0gbW9kdWxlc1RvRG9tKGxpc3QsIG9wdGlvbnMpO1xuICByZXR1cm4gZnVuY3Rpb24gdXBkYXRlKG5ld0xpc3QpIHtcbiAgICBuZXdMaXN0ID0gbmV3TGlzdCB8fCBbXTtcblxuICAgIGlmIChPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwobmV3TGlzdCkgIT09ICdbb2JqZWN0IEFycmF5XScpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxhc3RJZGVudGlmaWVycy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGlkZW50aWZpZXIgPSBsYXN0SWRlbnRpZmllcnNbaV07XG4gICAgICB2YXIgaW5kZXggPSBnZXRJbmRleEJ5SWRlbnRpZmllcihpZGVudGlmaWVyKTtcbiAgICAgIHN0eWxlc0luRG9tW2luZGV4XS5yZWZlcmVuY2VzLS07XG4gICAgfVxuXG4gICAgdmFyIG5ld0xhc3RJZGVudGlmaWVycyA9IG1vZHVsZXNUb0RvbShuZXdMaXN0LCBvcHRpb25zKTtcblxuICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCBsYXN0SWRlbnRpZmllcnMubGVuZ3RoOyBfaSsrKSB7XG4gICAgICB2YXIgX2lkZW50aWZpZXIgPSBsYXN0SWRlbnRpZmllcnNbX2ldO1xuXG4gICAgICB2YXIgX2luZGV4ID0gZ2V0SW5kZXhCeUlkZW50aWZpZXIoX2lkZW50aWZpZXIpO1xuXG4gICAgICBpZiAoc3R5bGVzSW5Eb21bX2luZGV4XS5yZWZlcmVuY2VzID09PSAwKSB7XG4gICAgICAgIHN0eWxlc0luRG9tW19pbmRleF0udXBkYXRlcigpO1xuXG4gICAgICAgIHN0eWxlc0luRG9tLnNwbGljZShfaW5kZXgsIDEpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGxhc3RJZGVudGlmaWVycyA9IG5ld0xhc3RJZGVudGlmaWVycztcbiAgfTtcbn07IiwiLy8gVGhlIG1vZHVsZSBjYWNoZVxudmFyIF9fd2VicGFja19tb2R1bGVfY2FjaGVfXyA9IHt9O1xuXG4vLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuXHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcblx0dmFyIGNhY2hlZE1vZHVsZSA9IF9fd2VicGFja19tb2R1bGVfY2FjaGVfX1ttb2R1bGVJZF07XG5cdGlmIChjYWNoZWRNb2R1bGUgIT09IHVuZGVmaW5lZCkge1xuXHRcdHJldHVybiBjYWNoZWRNb2R1bGUuZXhwb3J0cztcblx0fVxuXHQvLyBDcmVhdGUgYSBuZXcgbW9kdWxlIChhbmQgcHV0IGl0IGludG8gdGhlIGNhY2hlKVxuXHR2YXIgbW9kdWxlID0gX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fW21vZHVsZUlkXSA9IHtcblx0XHRpZDogbW9kdWxlSWQsXG5cdFx0Ly8gbm8gbW9kdWxlLmxvYWRlZCBuZWVkZWRcblx0XHRleHBvcnRzOiB7fVxuXHR9O1xuXG5cdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxuXHRfX3dlYnBhY2tfbW9kdWxlc19fW21vZHVsZUlkXShtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTtcblxuXHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuXHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG59XG5cbiIsIi8vIGdldERlZmF1bHRFeHBvcnQgZnVuY3Rpb24gZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBub24taGFybW9ueSBtb2R1bGVzXG5fX3dlYnBhY2tfcmVxdWlyZV9fLm4gPSBmdW5jdGlvbihtb2R1bGUpIHtcblx0dmFyIGdldHRlciA9IG1vZHVsZSAmJiBtb2R1bGUuX19lc01vZHVsZSA/XG5cdFx0ZnVuY3Rpb24oKSB7IHJldHVybiBtb2R1bGVbJ2RlZmF1bHQnXTsgfSA6XG5cdFx0ZnVuY3Rpb24oKSB7IHJldHVybiBtb2R1bGU7IH07XG5cdF9fd2VicGFja19yZXF1aXJlX18uZChnZXR0ZXIsIHsgYTogZ2V0dGVyIH0pO1xuXHRyZXR1cm4gZ2V0dGVyO1xufTsiLCIvLyBkZWZpbmUgZ2V0dGVyIGZ1bmN0aW9ucyBmb3IgaGFybW9ueSBleHBvcnRzXG5fX3dlYnBhY2tfcmVxdWlyZV9fLmQgPSBmdW5jdGlvbihleHBvcnRzLCBkZWZpbml0aW9uKSB7XG5cdGZvcih2YXIga2V5IGluIGRlZmluaXRpb24pIHtcblx0XHRpZihfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZGVmaW5pdGlvbiwga2V5KSAmJiAhX193ZWJwYWNrX3JlcXVpcmVfXy5vKGV4cG9ydHMsIGtleSkpIHtcblx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBrZXksIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBkZWZpbml0aW9uW2tleV0gfSk7XG5cdFx0fVxuXHR9XG59OyIsIl9fd2VicGFja19yZXF1aXJlX18ubyA9IGZ1bmN0aW9uKG9iaiwgcHJvcCkgeyByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwgcHJvcCk7IH0iLCIvLyBkZWZpbmUgX19lc01vZHVsZSBvbiBleHBvcnRzXG5fX3dlYnBhY2tfcmVxdWlyZV9fLnIgPSBmdW5jdGlvbihleHBvcnRzKSB7XG5cdGlmKHR5cGVvZiBTeW1ib2wgIT09ICd1bmRlZmluZWQnICYmIFN5bWJvbC50b1N0cmluZ1RhZykge1xuXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBTeW1ib2wudG9TdHJpbmdUYWcsIHsgdmFsdWU6ICdNb2R1bGUnIH0pO1xuXHR9XG5cdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG59OyIsIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgb3BlblRlc3RUb29sIGZyb20gJy4vd2ViLXRlc3QtdG9vbC9vcHRtdi13ZWItdGVzdC10b29sJztcbmltcG9ydCBvcHRpbW92ZUNvcmVFdmVudHMgZnJvbSAnLi9zZGstZXZlbnRzJztcblxud2luZG93Lm9wdGltb3ZlU0RLID0gKGZ1bmN0aW9uICgpIHtcblx0Ly8gLS0tLSBTREsgY29uc3RhbnRzIC0tLS1cblx0Y29uc3QgX3ZlcnNpb24gPSAnMi4wLjE3Jztcblx0Y29uc3QgX3Nka0RvbWFpbiA9IFwiLy9zZGstY2RuLm9wdGltb3ZlLm5ldC9cIjtcblx0Y29uc3QgX21heFVzZXJJZFNpemUgPSAyMDA7XG5cdGNvbnN0IF9tYXhQYXJhbVZhbHVlU2l6ZSA9IDQwMDA7XG5cblx0Ly8gLS0tLSBJZCdzIGZvciBsb2NhbCBzdG9yYWdlIC0tLS0gY3VzdG9tIGV2ZW50IGFkZGl0aW9uYWwgYXR0cmlidXRlcyAtLS0tXG5cdGNvbnN0IGVudktleSA9IFwiOTkwYTZkOGViNmNiYjhlYTQ0YjczZDIxZjFlNDczYjQzYjljNzRlYVwiO1xuXHRjb25zdCBldmVudFBsYXRmb3JtSURLZXkgPSBcIjBiMDA2ZDhlYjYyM2I4ZWExMWI3M2Q2MWYxZTQ4M2I0N2I5ZDc0MjJcIjtcblx0Y29uc3QgZXZlbnREZXZpY2VUeXBlSURLZXkgPSBcIjRiYTMwMjMxMTU3MWY0NWQ1N2YxYWE3NWU0MjhiOWI3OGQ1OWE3YTJcIjtcblx0Y29uc3QgZXZlbnRPU0lES2V5ID0gXCI4NWJkZWFlMGE5ZTBkYWQ3ZmRkMDIyZDhmOTBkYTVkM2EyNDFiM2QwXCI7XG5cdGNvbnN0IGV2ZW50TmF0aXZlTW9iaWxlID0gXCJkMGRmN2YwYTRjMjcyNGZmNTg3YzFjZmIzZTMxNWI0MzJlMmQxZjUwXCI7XG5cdGNvbnN0IHZpc2l0b3JJREtleSA9IFwiNjQ3YTNkMTlhYzI2NDdmMzYxMDY4YTQzZGYzYTRkYTFcIjtcblx0Y29uc3Qgb3JpZ2luYWxWaXNpdG9ySURLZXkgPSBcIjE5YTgyNmM3ZjM2MTI2OGE0M2RhM2E0NmExMjA0N2YzXCI7XG5cdGNvbnN0IGNsaWVudEN1c3RvbWVySURLZXkgPSBcIjIxNWQyNmY0YmUyMDQ3ZjM0ODA2NmU0NGVlN2ZlM2Q2XCI7XG5cdGNvbnN0IHZpc2l0Rmlyc3REYXRlS2V5ID0gXCI1MTFhMjZmNGJlMjA0N2EzNDgwNjRlNGFiZThjZTJhOVwiO1xuXHRjb25zdCBBZGRpdGlvbmFsQXR0cmlidXRlTWluSWQgPSAxMDAwO1xuXHRjb25zdCBBZGRpdGlvbmFsQXR0cmlidXRlTWF4SWQgPSAxMTAwO1xuXG5cdC8vIC0tLS0gQ29yZSBldmVudCBrZXlzIC0tLS1cblx0Y29uc3Qga2V5U2V0UGFnZVZpc2l0RXZlbnQgPSAnc2V0X3BhZ2VfdmlzaXQnO1xuXHRjb25zdCBrZXlTZXRVc2VySWRFdmVudCA9ICdzZXRfdXNlcl9pZF9ldmVudCc7XG5cdGNvbnN0IGtleVNldEVtYWlsRXZlbnQgPSAnc2V0X2VtYWlsX2V2ZW50Jztcblx0Y29uc3Qga2V5Q29yZU1ldGFkYXRhRXZlbnQgPSAnb3B0aW1vdmVfc2RrX21ldGFkYXRhJztcblx0Y29uc3Qga2V5V2ViUG9wdXBEaXNwbGF5ZWQgPSAnd2ViX3BvcHVwX2Rpc3BsYXllZCc7XG5cblx0Ly8gLS0tLSBDbGllbnQncyBkaWZmZXJlbnQgdmFyaWFibGVzIC0tLS1cblx0bGV0IF9lbnYgPSAncHJvZCc7XG5cdGxldCBfY29uZmlnRmlsZVVybCA9IFwiXCI7XG5cdGxldCBfaG9zdG5hbWUgPSBcIlwiO1xuXHRsZXQgX2NvbmZpZ3VyYXRpb247XG5cdGxldCBfY29yZUV2ZW50cztcblx0bGV0IF91c2VySWQgPSBudWxsO1xuXG5cdC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXHQvLyBGdW5jdGlvbjogbG9nZ2VyXG5cdC8vIEFyZ3M6XG5cdC8vIFRoZSBtYWluIExvZ2dlciBPYmplY3Rcblx0Ly8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cdGNvbnN0IGxvZ2dlciA9ICgoKSA9PiB7XG5cdFx0Y29uc3QgX2xldmVscyA9IHtcblx0XHRcdGluZm86IDEsXG5cdFx0XHR3YXJuaW5nOiAyLFxuXHRcdFx0ZXJyb3I6IDMsXG5cdFx0XHRub25lOiA0XG5cdFx0fTtcblx0XHRsZXQgX2xvZ2dlckxldmVsID0gXCJub25lXCI7IC8vICBcIm5vbmVcIiB8IFwiaW5mb1wiIHwgXCJ3YXJuaW5nXCIgfCBcImVycm9yXCJcblxuXHRcdGNvbnN0IF9zZXRMb2dMZXZlbCA9IGZ1bmN0aW9uIChsb2dMZXZlbCkge1xuXHRcdFx0X2xvZ2dlckxldmVsID0gbG9nTGV2ZWw7XG5cdFx0fTtcblxuXHRcdGNvbnN0IF9sb2cgPSBmdW5jdGlvbiAobGV2ZWwsIG1lc3NhZ2UpIHtcblx0XHRcdGlmIChfZW52ID09ICdwcm9kJykge1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cdFx0XHRpZiAoX2xldmVsc1tsZXZlbF0gPj0gX2xldmVsc1tfbG9nZ2VyTGV2ZWxdKSB7XG5cdFx0XHRcdHN3aXRjaCAoX2xldmVsc1tsZXZlbF0pIHtcblx0XHRcdFx0XHRjYXNlIDE6XG5cdFx0XHRcdFx0XHRjb25zb2xlLmluZm8obWVzc2FnZSk7XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRjYXNlIDI6XG5cdFx0XHRcdFx0XHRjb25zb2xlLndhcm4obWVzc2FnZSk7XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRjYXNlIDM6XG5cdFx0XHRcdFx0XHRjb25zb2xlLmVycm9yKG1lc3NhZ2UpO1xuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0XHRcdGNvbnNvbGUubG9nKG1lc3NhZ2UpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fTtcblxuXHRcdHJldHVybiB7XG5cdFx0XHRzZXRMZXZlbDogX3NldExvZ0xldmVsLFxuXHRcdFx0bG9nOiBfbG9nXG5cdFx0fTtcblx0fSkoKTtcblxuXHRjb25zdCBfU0hBMSA9IHtcblx0XHQvKipcblx0XHQgKlxuXHRcdCAqICBTZWN1cmUgSGFzaCBBbGdvcml0aG0gKFNIQTEpXG5cdFx0ICogIGh0dHA6Ly93d3cud2VidG9vbGtpdC5pbmZvL1xuXHRcdCAqXG5cdFx0ICoqL1xuXHRcdFNIQTE6IGZ1bmN0aW9uIChtc2cpIHtcblx0XHRcdHZhciByb3RhdGVfbGVmdCA9IGZ1bmN0aW9uIChuLCBzKSB7XG5cdFx0XHRcdHZhciB0NCA9IChuIDw8IHMpIHwgKG4gPj4+ICgzMiAtIHMpKTtcblx0XHRcdFx0cmV0dXJuIHQ0O1xuXHRcdFx0fTtcblxuXHRcdFx0dmFyIGxzYl9oZXggPSBmdW5jdGlvbiAodmFsKSB7XG5cdFx0XHRcdHZhciBzdHIgPSBcIlwiO1xuXHRcdFx0XHR2YXIgaTtcblx0XHRcdFx0dmFyIHZoO1xuXHRcdFx0XHR2YXIgdmw7XG5cblx0XHRcdFx0Zm9yIChpID0gMDsgaSA8PSA2OyBpICs9IDIpIHtcblx0XHRcdFx0XHR2aCA9ICh2YWwgPj4+IChpICogNCArIDQpKSAmIDB4MGY7XG5cdFx0XHRcdFx0dmwgPSAodmFsID4+PiAoaSAqIDQpKSAmIDB4MGY7XG5cdFx0XHRcdFx0c3RyICs9IHZoLnRvU3RyaW5nKDE2KSArIHZsLnRvU3RyaW5nKDE2KTtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gc3RyO1xuXHRcdFx0fTtcblxuXHRcdFx0dmFyIGN2dF9oZXggPSBmdW5jdGlvbiAodmFsKSB7XG5cdFx0XHRcdHZhciBzdHIgPSBcIlwiO1xuXHRcdFx0XHR2YXIgaTtcblx0XHRcdFx0dmFyIHY7XG5cdFx0XHRcdGZvciAoaSA9IDc7IGkgPj0gMDsgaS0tKSB7XG5cdFx0XHRcdFx0diA9ICh2YWwgPj4+IChpICogNCkpICYgMHgwZjtcblx0XHRcdFx0XHRzdHIgKz0gdi50b1N0cmluZygxNik7XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIHN0cjtcblx0XHRcdH07XG5cblx0XHRcdHZhciBVdGY4RW5jb2RlID0gZnVuY3Rpb24gKHN0cmluZykge1xuXHRcdFx0XHRzdHJpbmcgPSBzdHJpbmcucmVwbGFjZSgvXFxyXFxuL2csIFwiXFxuXCIpO1xuXHRcdFx0XHR2YXIgdXRmdGV4dCA9IFwiXCI7XG5cdFx0XHRcdGZvciAodmFyIG4gPSAwOyBuIDwgc3RyaW5nLmxlbmd0aDsgbisrKSB7XG5cdFx0XHRcdFx0dmFyIGMgPSBzdHJpbmcuY2hhckNvZGVBdChuKTtcblx0XHRcdFx0XHRpZiAoYyA8IDEyOCkge1xuXHRcdFx0XHRcdFx0dXRmdGV4dCArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGMpO1xuXHRcdFx0XHRcdH0gZWxzZSBpZiAoKGMgPiAxMjcpICYmIChjIDwgMjA0OCkpIHtcblx0XHRcdFx0XHRcdHV0ZnRleHQgKz0gU3RyaW5nLmZyb21DaGFyQ29kZSgoYyA+PiA2KSB8IDE5Mik7XG5cdFx0XHRcdFx0XHR1dGZ0ZXh0ICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoKGMgJiA2MykgfCAxMjgpO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHR1dGZ0ZXh0ICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoKGMgPj4gMTIpIHwgMjI0KTtcblx0XHRcdFx0XHRcdHV0ZnRleHQgKz0gU3RyaW5nLmZyb21DaGFyQ29kZSgoKGMgPj4gNikgJiA2MykgfCAxMjgpO1xuXHRcdFx0XHRcdFx0dXRmdGV4dCArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKChjICYgNjMpIHwgMTI4KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIHV0ZnRleHQ7XG5cdFx0XHR9O1xuXG5cdFx0XHR2YXIgYmxvY2tzdGFydDtcblx0XHRcdHZhciBpLCBqO1xuXHRcdFx0dmFyIFcgPSBuZXcgQXJyYXkoODApO1xuXHRcdFx0dmFyIEgwID0gMHg2NzQ1MjMwMTtcblx0XHRcdHZhciBIMSA9IDB4RUZDREFCODk7XG5cdFx0XHR2YXIgSDIgPSAweDk4QkFEQ0ZFO1xuXHRcdFx0dmFyIEgzID0gMHgxMDMyNTQ3Njtcblx0XHRcdHZhciBINCA9IDB4QzNEMkUxRjA7XG5cdFx0XHR2YXIgQSwgQiwgQywgRCwgRTtcblx0XHRcdHZhciB0ZW1wO1xuXG5cdFx0XHRtc2cgPSBVdGY4RW5jb2RlKG1zZyk7XG5cdFx0XHR2YXIgbXNnX2xlbiA9IG1zZy5sZW5ndGg7XG5cdFx0XHR2YXIgd29yZF9hcnJheSA9IG5ldyBBcnJheSgpO1xuXHRcdFx0Zm9yIChpID0gMDsgaSA8IG1zZ19sZW4gLSAzOyBpICs9IDQpIHtcblx0XHRcdFx0aiA9IG1zZy5jaGFyQ29kZUF0KGkpIDw8IDI0IHwgbXNnLmNoYXJDb2RlQXQoaSArIDEpIDw8IDE2IHxcblx0XHRcdFx0XHRtc2cuY2hhckNvZGVBdChpICsgMikgPDwgOCB8IG1zZy5jaGFyQ29kZUF0KGkgKyAzKTtcblx0XHRcdFx0d29yZF9hcnJheS5wdXNoKGopO1xuXHRcdFx0fVxuXG5cdFx0XHRzd2l0Y2ggKG1zZ19sZW4gJSA0KSB7XG5cdFx0XHRcdGNhc2UgMDpcblx0XHRcdFx0XHRpID0gMHgwODAwMDAwMDA7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGNhc2UgMTpcblx0XHRcdFx0XHRpID0gbXNnLmNoYXJDb2RlQXQobXNnX2xlbiAtIDEpIDw8IDI0IHwgMHgwODAwMDAwO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRjYXNlIDI6XG5cdFx0XHRcdFx0aSA9IG1zZy5jaGFyQ29kZUF0KG1zZ19sZW4gLSAyKSA8PCAyNCB8IG1zZy5jaGFyQ29kZUF0KG1zZ19sZW4gLSAxKSA8PCAxNiB8IDB4MDgwMDA7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGNhc2UgMzpcblx0XHRcdFx0XHRpID0gbXNnLmNoYXJDb2RlQXQobXNnX2xlbiAtIDMpIDw8IDI0IHwgbXNnLmNoYXJDb2RlQXQobXNnX2xlbiAtIDIpIDw8IDE2IHwgbXNnLmNoYXJDb2RlQXQobXNnX2xlbiAtIDEpIDw8IDggfCAweDgwO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuXG5cdFx0XHR3b3JkX2FycmF5LnB1c2goaSk7XG5cdFx0XHR3aGlsZSAoKHdvcmRfYXJyYXkubGVuZ3RoICUgMTYpICE9IDE0KSB3b3JkX2FycmF5LnB1c2goMCk7XG5cdFx0XHR3b3JkX2FycmF5LnB1c2gobXNnX2xlbiA+Pj4gMjkpO1xuXHRcdFx0d29yZF9hcnJheS5wdXNoKChtc2dfbGVuIDw8IDMpICYgMHgwZmZmZmZmZmYpO1xuXG5cdFx0XHRmb3IgKGJsb2Nrc3RhcnQgPSAwOyBibG9ja3N0YXJ0IDwgd29yZF9hcnJheS5sZW5ndGg7IGJsb2Nrc3RhcnQgKz0gMTYpIHtcblx0XHRcdFx0Zm9yIChpID0gMDsgaSA8IDE2OyBpKyspIFdbaV0gPSB3b3JkX2FycmF5W2Jsb2Nrc3RhcnQgKyBpXTtcblx0XHRcdFx0Zm9yIChpID0gMTY7IGkgPD0gNzk7IGkrKykgV1tpXSA9IHJvdGF0ZV9sZWZ0KFdbaSAtIDNdIF4gV1tpIC0gOF0gXiBXW2kgLSAxNF0gXiBXW2kgLSAxNl0sIDEpO1xuXHRcdFx0XHRBID0gSDA7XG5cdFx0XHRcdEIgPSBIMTtcblx0XHRcdFx0QyA9IEgyO1xuXHRcdFx0XHREID0gSDM7XG5cdFx0XHRcdEUgPSBINDtcblx0XHRcdFx0Zm9yIChpID0gMDsgaSA8PSAxOTsgaSsrKSB7XG5cdFx0XHRcdFx0dGVtcCA9IChyb3RhdGVfbGVmdChBLCA1KSArICgoQiAmIEMpIHwgKH5CICYgRCkpICsgRSArIFdbaV0gKyAweDVBODI3OTk5KSAmIDB4MGZmZmZmZmZmO1xuXHRcdFx0XHRcdEUgPSBEO1xuXHRcdFx0XHRcdEQgPSBDO1xuXHRcdFx0XHRcdEMgPSByb3RhdGVfbGVmdChCLCAzMCk7XG5cdFx0XHRcdFx0QiA9IEE7XG5cdFx0XHRcdFx0QSA9IHRlbXA7XG5cdFx0XHRcdH1cblx0XHRcdFx0Zm9yIChpID0gMjA7IGkgPD0gMzk7IGkrKykge1xuXHRcdFx0XHRcdHRlbXAgPSAocm90YXRlX2xlZnQoQSwgNSkgKyAoQiBeIEMgXiBEKSArIEUgKyBXW2ldICsgMHg2RUQ5RUJBMSkgJiAweDBmZmZmZmZmZjtcblx0XHRcdFx0XHRFID0gRDtcblx0XHRcdFx0XHREID0gQztcblx0XHRcdFx0XHRDID0gcm90YXRlX2xlZnQoQiwgMzApO1xuXHRcdFx0XHRcdEIgPSBBO1xuXHRcdFx0XHRcdEEgPSB0ZW1wO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGZvciAoaSA9IDQwOyBpIDw9IDU5OyBpKyspIHtcblx0XHRcdFx0XHR0ZW1wID0gKHJvdGF0ZV9sZWZ0KEEsIDUpICsgKChCICYgQykgfCAoQiAmIEQpIHwgKEMgJiBEKSkgKyBFICsgV1tpXSArIDB4OEYxQkJDREMpICYgMHgwZmZmZmZmZmY7XG5cdFx0XHRcdFx0RSA9IEQ7XG5cdFx0XHRcdFx0RCA9IEM7XG5cdFx0XHRcdFx0QyA9IHJvdGF0ZV9sZWZ0KEIsIDMwKTtcblx0XHRcdFx0XHRCID0gQTtcblx0XHRcdFx0XHRBID0gdGVtcDtcblx0XHRcdFx0fVxuXHRcdFx0XHRmb3IgKGkgPSA2MDsgaSA8PSA3OTsgaSsrKSB7XG5cdFx0XHRcdFx0dGVtcCA9IChyb3RhdGVfbGVmdChBLCA1KSArIChCIF4gQyBeIEQpICsgRSArIFdbaV0gKyAweENBNjJDMUQ2KSAmIDB4MGZmZmZmZmZmO1xuXHRcdFx0XHRcdEUgPSBEO1xuXHRcdFx0XHRcdEQgPSBDO1xuXHRcdFx0XHRcdEMgPSByb3RhdGVfbGVmdChCLCAzMCk7XG5cdFx0XHRcdFx0QiA9IEE7XG5cdFx0XHRcdFx0QSA9IHRlbXA7XG5cdFx0XHRcdH1cblx0XHRcdFx0SDAgPSAoSDAgKyBBKSAmIDB4MGZmZmZmZmZmO1xuXHRcdFx0XHRIMSA9IChIMSArIEIpICYgMHgwZmZmZmZmZmY7XG5cdFx0XHRcdEgyID0gKEgyICsgQykgJiAweDBmZmZmZmZmZjtcblx0XHRcdFx0SDMgPSAoSDMgKyBEKSAmIDB4MGZmZmZmZmZmO1xuXHRcdFx0XHRINCA9IChINCArIEUpICYgMHgwZmZmZmZmZmY7XG5cdFx0XHR9XG5cblx0XHRcdHZhciB0ZW1wID0gY3Z0X2hleChIMCkgKyBjdnRfaGV4KEgxKSArIGN2dF9oZXgoSDIpICsgY3Z0X2hleChIMykgKyBjdnRfaGV4KEg0KTtcblxuXHRcdFx0cmV0dXJuIHRlbXAudG9Mb3dlckNhc2UoKTtcblx0XHR9XG5cdH07XG5cblx0Y29uc3QgX1Rvb2xzID0ge1xuXHRcdGNsZWFuVXJsOiAodXJsKSA9PiB7XG5cdFx0XHRjb25zdCBVUkxfUFJFRklYID0gWydodHRwOi8vd3d3LicsICdodHRwOi8vJywgJ2h0dHBzOi8vd3d3LicsICdodHRwczovLycsICd3d3cuJ107XG5cdFx0XHRVUkxfUFJFRklYLmZvckVhY2goKHN0cikgPT4ge1xuXHRcdFx0XHR1cmwgPSB1cmwuc3RhcnRzV2l0aChzdHIpID8gdXJsLnJlcGxhY2Uoc3RyLCAnJykgOiB1cmw7XG5cdFx0XHR9KTtcblx0XHRcdHJldHVybiB1cmw7XG5cdFx0fSxcblx0XHR2YWxpZGF0ZVBhZ2VVUkw6IChjdXN0b21VUkwpID0+IHtcblx0XHRcdGNvbnN0IHJlZ2V4cCA9IC8oaHR0cHM/fGh0dHA/fGZ0cCk6XFwvXFwvW15cXHNcXC8kLj8jXS5bXlxcc10qJC87XG5cdFx0XHRsZXQgdGVzdCA9IHJlZ2V4cC50ZXN0KGN1c3RvbVVSTCk7XG5cdFx0XHRyZXR1cm4gdGVzdDtcblx0XHR9LFxuXHRcdHZhbGlkYXRlVXNlcklkTGVuZ3RoOiAodXNlcklkKSA9PiB7XG5cdFx0XHRpZiAodXNlcklkICYmIHVzZXJJZC5sZW5ndGggPiBfbWF4VXNlcklkU2l6ZSkge1xuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9LFxuXHRcdHZhbGlkYXRlVXNlcklkOiAodXNlcklkKSA9PiB7XG5cdFx0XHRpZiAodXNlcklkICYmXG5cdFx0XHRcdCh1c2VySWQgPT0gJyAnIHx8XG5cdFx0XHRcdFx0dXNlcklkLnRvTG93ZXJDYXNlKCkgPT0gXCJudWxsXCIgfHxcblx0XHRcdFx0XHR1c2VySWQudG9Mb3dlckNhc2UoKSA9PSBcIm5vbmVcIiB8fFxuXHRcdFx0XHRcdHVzZXJJZC50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKFwidW5kZWZpbmVcIikpXG5cdFx0XHQpIHtcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9LFxuXHRcdHZhbGlkYXRlRW1haWw6IChlbWFpbCkgPT4ge1xuXHRcdFx0Y29uc3QgcmVnZXhwID0gL14oKFtePD4oKVxcW1xcXVxcXFwuLDs6XFxzQFwiXSsoXFwuW148PigpXFxbXFxdXFxcXC4sOzpcXHNAXCJdKykqKXwoXCIuK1wiKSlAKChcXFtbMC05XXsxLDN9XFwuWzAtOV17MSwzfVxcLlswLTldezEsM31cXC5bMC05XXsxLDN9XSl8KChbYS16QS1aXFwtMC05XStcXC4pK1thLXpBLVpdezIsfSkpJC87XG5cdFx0XHRyZXR1cm4gcmVnZXhwLnRlc3QoZW1haWwpO1xuXHRcdH0sXG5cdFx0Z2V0VXJsUGFyYW1zOiBmdW5jdGlvbiAodXJsKSB7XG5cblx0XHRcdC8vIGdldCBxdWVyeSBzdHJpbmcgZnJvbSB1cmwgKG9wdGlvbmFsKSBvciB3aW5kb3dcblx0XHRcdHZhciBxdWVyeVN0cmluZyA9IHVybCA/IHVybC5zcGxpdCgnPycpWzFdIDogd2luZG93LmxvY2F0aW9uLnNlYXJjaC5zbGljZSgxKTtcblxuXHRcdFx0Ly8gd2UnbGwgc3RvcmUgdGhlIHBhcmFtZXRlcnMgaGVyZVxuXHRcdFx0dmFyIG9iaiA9IHt9O1xuXG5cdFx0XHQvLyBpZiBxdWVyeSBzdHJpbmcgZXhpc3RzXG5cdFx0XHRpZiAocXVlcnlTdHJpbmcpIHtcblxuXHRcdFx0XHQvLyBzdHVmZiBhZnRlciAjIGlzIG5vdCBwYXJ0IG9mIHF1ZXJ5IHN0cmluZywgc28gZ2V0IHJpZCBvZiBpdFxuXHRcdFx0XHRxdWVyeVN0cmluZyA9IHF1ZXJ5U3RyaW5nLnNwbGl0KCcjJylbMF07XG5cblx0XHRcdFx0Ly8gc3BsaXQgb3VyIHF1ZXJ5IHN0cmluZyBpbnRvIGl0cyBjb21wb25lbnQgcGFydHNcblx0XHRcdFx0dmFyIGFyciA9IHF1ZXJ5U3RyaW5nLnNwbGl0KCcmJyk7XG5cblx0XHRcdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBhcnIubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0XHQvLyBzZXBhcmF0ZSB0aGUga2V5cyBhbmQgdGhlIHZhbHVlc1xuXHRcdFx0XHRcdHZhciBhID0gYXJyW2ldLnNwbGl0KCc9Jyk7XG5cblx0XHRcdFx0XHQvLyBzZXQgcGFyYW1ldGVyIG5hbWUgYW5kIHZhbHVlICh1c2UgJ3RydWUnIGlmIGVtcHR5KVxuXHRcdFx0XHRcdHZhciBwYXJhbU5hbWUgPSBhWzBdO1xuXHRcdFx0XHRcdHZhciBwYXJhbVZhbHVlID0gdHlwZW9mIChhWzFdKSA9PT0gJ3VuZGVmaW5lZCcgPyB0cnVlIDogYVsxXTtcblxuXHRcdFx0XHRcdC8vIChvcHRpb25hbCkga2VlcCBjYXNlIGNvbnNpc3RlbnRcblx0XHRcdFx0XHRwYXJhbU5hbWUgPSBwYXJhbU5hbWUudG9Mb3dlckNhc2UoKTtcblx0XHRcdFx0XHRpZiAodHlwZW9mIHBhcmFtVmFsdWUgPT09ICdzdHJpbmcnKSBwYXJhbVZhbHVlID0gcGFyYW1WYWx1ZS50b0xvd2VyQ2FzZSgpO1xuXG5cdFx0XHRcdFx0Ly8gaWYgdGhlIHBhcmFtTmFtZSBlbmRzIHdpdGggc3F1YXJlIGJyYWNrZXRzLCBlLmcuIGNvbG9yc1tdIG9yIGNvbG9yc1syXVxuXHRcdFx0XHRcdGlmIChwYXJhbU5hbWUubWF0Y2goL1xcWyhcXGQrKT9cXF0kLykpIHtcblxuXHRcdFx0XHRcdFx0Ly8gY3JlYXRlIGtleSBpZiBpdCBkb2Vzbid0IGV4aXN0XG5cdFx0XHRcdFx0XHR2YXIga2V5ID0gcGFyYW1OYW1lLnJlcGxhY2UoL1xcWyhcXGQrKT9cXF0vLCAnJyk7XG5cdFx0XHRcdFx0XHRpZiAoIW9ialtrZXldKSBvYmpba2V5XSA9IFtdO1xuXG5cdFx0XHRcdFx0XHQvLyBpZiBpdCdzIGFuIGluZGV4ZWQgYXJyYXkgZS5nLiBjb2xvcnNbMl1cblx0XHRcdFx0XHRcdGlmIChwYXJhbU5hbWUubWF0Y2goL1xcW1xcZCtcXF0kLykpIHtcblx0XHRcdFx0XHRcdFx0Ly8gZ2V0IHRoZSBpbmRleCB2YWx1ZSBhbmQgYWRkIHRoZSBlbnRyeSBhdCB0aGUgYXBwcm9wcmlhdGUgcG9zaXRpb25cblx0XHRcdFx0XHRcdFx0dmFyIGluZGV4ID0gL1xcWyhcXGQrKVxcXS8uZXhlYyhwYXJhbU5hbWUpWzFdO1xuXHRcdFx0XHRcdFx0XHRvYmpba2V5XVtpbmRleF0gPSBwYXJhbVZhbHVlO1xuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0Ly8gb3RoZXJ3aXNlIGFkZCB0aGUgdmFsdWUgdG8gdGhlIGVuZCBvZiB0aGUgYXJyYXlcblx0XHRcdFx0XHRcdFx0b2JqW2tleV0ucHVzaChwYXJhbVZhbHVlKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0Ly8gd2UncmUgZGVhbGluZyB3aXRoIGEgc3RyaW5nXG5cdFx0XHRcdFx0XHRvYmpbcGFyYW1OYW1lXSA9IHBhcmFtVmFsdWU7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHQvL2NvbnZlcnQgYXJyYXlzIHRvIHN0cmluZ1xuXHRcdFx0T2JqZWN0LmtleXMob2JqKS5mb3JFYWNoKGtleSA9PiB7XG5cdFx0XHRcdGlmIChBcnJheS5pc0FycmF5KG9ialtrZXldKSkgb2JqW2tleV0gPSBfVG9vbHMuY29udmVydFVUTUFycmF5KG9ialtrZXldKTtcblx0XHRcdH0pO1xuXHRcdFx0cmV0dXJuIG9iajtcblx0XHR9LFxuXG5cdFx0Y29udmVydFVUTUFycmF5OiBmdW5jdGlvbiAocGFyYW1WYWx1ZSkge1xuXHRcdFx0cGFyYW1WYWx1ZSA9IHBhcmFtVmFsdWUudG9TdHJpbmcoKTtcblx0XHRcdHBhcmFtVmFsdWUgPSBwYXJhbVZhbHVlLnJlcGxhY2UoLywvZywgXCJfXCIpO1xuXHRcdFx0cGFyYW1WYWx1ZSA9IHBhcmFtVmFsdWUudG9Mb3dlckNhc2UoKTtcblx0XHRcdHJldHVybiBwYXJhbVZhbHVlO1xuXHRcdH0sXG5cblx0XHRnZXRVc2VyTGFuZ3VhZ2U6IGZ1bmN0aW9uICgpIHtcblx0XHRcdHZhciBsYW5ndWFnZSA9IG5hdmlnYXRvci5sYW5ndWFnZS50b0xvd2VyQ2FzZSgpO1xuXHRcdFx0aWYgKGxhbmd1YWdlID09ICdjaHJvbWU6Ly9nbG9iYWwvbG9jYWxlL2ludGwucHJvcGVydGllcycpIHtcblx0XHRcdFx0bGFuZ3VhZ2UgPSBudWxsO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIGxhbmd1YWdlO1xuXHRcdH0sXG5cblx0XHRnZW5lcmF0ZVVVSUQ6IGZ1bmN0aW9uICgpIHtcblx0XHRcdGxldCBkID0gbmV3IERhdGUoKS5nZXRUaW1lKCk7Ly9UaW1lc3RhbXBcblx0XHRcdGxldCBkMiA9IChwZXJmb3JtYW5jZSAmJiBwZXJmb3JtYW5jZS5ub3cgJiYgKHBlcmZvcm1hbmNlLm5vdygpICogMTAwMCkpIHx8IDA7IC8vVGltZSBpbiBtaWNyb3NlY29uZHMgc2luY2UgcGFnZS1sb2FkIG9yIDAgaWYgdW5zdXBwb3J0ZWRcblx0XHRcdHJldHVybiAneHh4eHh4eHgteHh4eC00eHh4LXl4eHgteHh4eHh4eHh4eHh4Jy5yZXBsYWNlKC9beHldL2csIGZ1bmN0aW9uIChjKSB7XG5cdFx0XHRcdGxldCByID0gTWF0aC5yYW5kb20oKSAqIDE2Oy8vcmFuZG9tIG51bWJlciBiZXR3ZWVuIDAgYW5kIDE2XG5cdFx0XHRcdGlmIChkID4gMCkgey8vVXNlIHRpbWVzdGFtcCB1bnRpbCBkZXBsZXRlZFxuXHRcdFx0XHRcdHIgPSAoZCArIHIpICUgMTYgfCAwO1xuXHRcdFx0XHRcdGQgPSBNYXRoLmZsb29yKGQgLyAxNik7XG5cdFx0XHRcdH0gZWxzZSB7Ly9Vc2UgbWljcm9zZWNvbmRzIHNpbmNlIHBhZ2UtbG9hZCBpZiBzdXBwb3J0ZWRcblx0XHRcdFx0XHRyID0gKGQyICsgcikgJSAxNiB8IDA7XG5cdFx0XHRcdFx0ZDIgPSBNYXRoLmZsb29yKGQyIC8gMTYpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiAoYyA9PT0gJ3gnID8gciA6IChyICYgMHgzIHwgMHg4KSkudG9TdHJpbmcoMTYpO1xuXHRcdFx0fSk7XG5cdFx0fVxuXHR9O1xuXG5cdC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXHQvLyBGdW5jdGlvbjogaW5pdFxuXHQvLyBBcmdzOiB0b2tlbiwgY29uZnZlcnNpb24sIGNhbGxiYWNrLCBsb2dMZXZlbFxuXHQvLyBUaGUgU0RLIGluaXRpYWxpemUgZnVuY3Rpb24uXG5cdC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXHRjb25zdCBpbml0ID0gKHRva2VuLCBjb25mdmVyc2lvbiA9IG51bGwsIGNhbGxiYWNrLCBsb2dMZXZlbCkgPT4ge1xuXHRcdGlmIChsb2dMZXZlbCkge1xuXHRcdFx0bG9nZ2VyLnNldExldmVsKGxvZ0xldmVsKTtcblx0XHR9XG5cdFx0X2VudiA9IGdldFBlcnNpc3RlZFNES0xvY2FsRGF0YShlbnZLZXkpIHx8IF9lbnY7XG5cdFx0cGVyc2lzdFNES0xvY2FsRGF0YShlbnZLZXksIF9lbnYpO1xuXG5cdFx0X2hvc3RuYW1lID0gd2luZG93LmxvY2F0aW9uLmhvc3RuYW1lO1xuXHRcdF9jb3JlRXZlbnRzID0gb3B0aW1vdmVDb3JlRXZlbnRzO1xuXHRcdC8vbG9hZCBzY3JpcHRcblx0XHRjb25mdmVyc2lvbiA9IF9lbnYgPT0gJ3Byb2QnID8gJ3dlYi1jb25maWd1cmF0aW9uLjEuMC4wJyA6ICd3ZWItY29uZmlndXJhdGlvbi4xLjAuMC1zdGcnO1xuXHRcdF9jb25maWd1cmF0aW9uID0gc2VsZi5vcHRpbW92ZVRlbmFudENvbmZpZ3VyYXRpb247XG5cdFx0aWYgKCFfY29uZmlndXJhdGlvbikge1xuXHRcdFx0X2NvbmZpZ0ZpbGVVcmwgPSBfc2RrRG9tYWluICsgJ3dlYmNvbmZpZy8nICsgdG9rZW4gKyAnLycgKyBjb25mdmVyc2lvbiArICcuanMnO1xuXHRcdFx0bG9hZFNjcmlwdChfY29uZmlnRmlsZVVybCwgKCkgPT4ge1xuXHRcdFx0XHRsb2dnZXIubG9nKCdpbmZvJywgJ2NvbmZpZ3VyYXRpb24gbG9hZGVkIHN1Y2Nlc3NmdWxseScpO1xuXHRcdFx0XHRsb2dnZXIubG9nKCdpbmZvJywgJ2NvcmUgZXZlbnRzIGxvYWRlZCBzdWNjZXNzZnVsbHknKTtcblxuXHRcdFx0XHRzZXRDb25maWd1cmF0aW9uKCgpID0+IHtcblx0XHRcdFx0XHQvLyBzZXQgYW4gaWRlbnRpdHlcblx0XHRcdFx0XHRnZW5lcmF0ZVZpc2l0b3JJZCgpO1xuXG5cdFx0XHRcdFx0Ly8gIyMjIGJlZ2luLiBPcHRpbW9iaWxlIG11c3QgYmUgaW5pdGlhbGl6ZWQgYmVmb3JlIGFueSB1c2FnZSFcblx0XHRcdFx0XHRpZiAoX2NvbmZpZ3VyYXRpb24uZW5hYmxlV2ViUHVzaCkge1xuXHRcdFx0XHRcdFx0bG9nZ2VyLmxvZygnaW5mbycsICdjYWxsIGluaXRpYWxpemVPcHRpbW9iaWxlJyk7XG5cdFx0XHRcdFx0XHRvcHRpbW9iaWxlTW9kdWxlLmluaXRpYWxpemVPcHRpbW9iaWxlKCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdC8vICMjIyBlbmRcblxuXHRcdFx0XHRcdGlmIChfY29uZmlndXJhdGlvbi5lbmFibGVPcHRpdHJhY2spIHtcblx0XHRcdFx0XHRcdGxvZ2dlci5sb2coJ2luZm8nLCAnY2FsbCBpbml0aWFsaXplT3B0aVRyYWNrJyk7XG5cdFx0XHRcdFx0XHRvcHRpdHJhY2tNb2R1bGUuaW5pdGlhbGl6ZU9wdGlUcmFjaygoKSA9PiB7XG5cdFx0XHRcdFx0XHRcdG9wdGl0cmFja01vZHVsZS5sb2dNZXRhZGF0YUNvcmVFdmVudCgpLnRoZW4oZGF0YSA9PiB7XG5cdFx0XHRcdFx0XHRcdFx0aWYgKGNhbGxiYWNrICYmIHR5cGVvZiBjYWxsYmFjayA9PT0gJ2Z1bmN0aW9uJykge1xuXHRcdFx0XHRcdFx0XHRcdFx0Y2FsbGJhY2soKTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGlmIChfY29uZmlndXJhdGlvbi5lbmFibGVSZWFsdGltZSkge1xuXHRcdFx0XHRcdFx0bG9nZ2VyLmxvZygnaW5mbycsICdjYWxsIGluaXRpYWxpemVSZWFsdGltZScpO1xuXHRcdFx0XHRcdFx0cmVhbHRpbWVNb2R1bGUuaW5pdGlhbGl6ZVJlYWx0aW1lKCk7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0aWYgKG9wdG12SXNPcGVuKCkpIHtcblx0XHRcdFx0XHRcdG9wdGltb3ZlU0RLLkFQSS5vcGVuV2ViVGVzdFRvb2woKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pO1xuXHRcdFx0fSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHNldENvbmZpZ3VyYXRpb24oKCkgPT4ge1xuXHRcdFx0XHQvLyBzZXQgYW4gaWRlbnRpdHlcblx0XHRcdFx0Z2VuZXJhdGVWaXNpdG9ySWQoKTtcblx0XHRcdFx0Ly8gIyMjIGJlZ2luLiBPcHRpbW9iaWxlIG11c3QgYmUgaW5pdGlhbGl6ZWQgYmVmb3JlIGFueSB1c2FnZSFcblx0XHRcdFx0aWYgKF9jb25maWd1cmF0aW9uLmVuYWJsZVdlYlB1c2gpIHtcblx0XHRcdFx0XHRsb2dnZXIubG9nKCdpbmZvJywgJ2NhbGwgaW5pdGlhbGl6ZU9wdGltb2JpbGUnKTtcblx0XHRcdFx0XHRvcHRpbW9iaWxlTW9kdWxlLmluaXRpYWxpemVPcHRpbW9iaWxlKCk7XG5cdFx0XHRcdH1cblx0XHRcdFx0Ly8gIyMjIGVuZFxuXG5cdFx0XHRcdGlmIChfY29uZmlndXJhdGlvbi5lbmFibGVPcHRpdHJhY2spIHtcblx0XHRcdFx0XHRsb2dnZXIubG9nKCdpbmZvJywgJ2NhbGwgaW5pdGlhbGl6ZU9wdGlUcmFjaycpO1xuXHRcdFx0XHRcdG9wdGl0cmFja01vZHVsZS5pbml0aWFsaXplT3B0aVRyYWNrKCgpID0+IHtcblx0XHRcdFx0XHRcdG9wdGl0cmFja01vZHVsZS5sb2dNZXRhZGF0YUNvcmVFdmVudCgpLnRoZW4oZGF0YSA9PiB7XG5cdFx0XHRcdFx0XHRcdGlmIChjYWxsYmFjayAmJiB0eXBlb2YgY2FsbGJhY2sgPT09ICdmdW5jdGlvbicpIHtcblx0XHRcdFx0XHRcdFx0XHRjYWxsYmFjaygpO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAoX2NvbmZpZ3VyYXRpb24uZW5hYmxlUmVhbHRpbWUpIHtcblx0XHRcdFx0XHRsb2dnZXIubG9nKCdpbmZvJywgJ2NhbGwgaW5pdGlhbGl6ZVJlYWx0aW1lJyk7XG5cdFx0XHRcdFx0cmVhbHRpbWVNb2R1bGUuaW5pdGlhbGl6ZVJlYWx0aW1lKCk7XG5cdFx0XHRcdH1cblxuXG5cdFx0XHR9KTtcblx0XHR9XG5cdH07XG5cblx0Y29uc3Qgc2V0Q29uZmlndXJhdGlvbiA9IChjYWxsYmFjaykgPT4ge1xuXHRcdF9jb25maWd1cmF0aW9uID0gc2VsZi5vcHRpbW92ZVRlbmFudENvbmZpZ3VyYXRpb247XG5cdFx0Z2V0UGxhZm9ybUluZm9Gcm9tVXNlckFnZW50KF9jb25maWd1cmF0aW9uKTtcblx0XHRpZiAoY2FsbGJhY2sgJiYgdHlwZW9mIGNhbGxiYWNrID09PSAnZnVuY3Rpb24nKSB7XG5cdFx0XHRjYWxsYmFjaygpO1xuXHRcdH1cblx0fTtcblxuXHQvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblx0Ly8gRnVuY3Rpb246IGxvYWRTY3JpcHRcblx0Ly8gQXJnczogdXJsLCBjYWxsYmFja1xuXHQvLyBsb2FkaW5nIFNjcmlwdHMuXG5cdC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXHRjb25zdCBsb2FkU2NyaXB0ID0gZnVuY3Rpb24gKHVybCwgY2FsbGJhY2spIHtcblx0XHRsZXQgc2NyaXB0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInNjcmlwdFwiKTtcblx0XHRzY3JpcHQudHlwZSA9IFwidGV4dC9qYXZhc2NyaXB0XCI7XG5cdFx0c2NyaXB0LmFzeW5jID0gZmFsc2U7XG5cdFx0c2NyaXB0LmRlZmVyID0gZmFsc2U7XG5cdFx0c2NyaXB0LnNyYyA9IHVybDtcblx0XHRkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZShcInNjcmlwdFwiKVsxXS5hcHBlbmRDaGlsZChzY3JpcHQpO1xuXHRcdGlmIChzY3JpcHQucmVhZHlTdGF0ZSkge1xuXHRcdFx0Ly9JRVxuXHRcdFx0c2NyaXB0Lm9ucmVhZHlzdGF0ZWNoYW5nZSA9IGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0aWYgKHNjcmlwdC5yZWFkeVN0YXRlID09IFwibG9hZGVkXCIgfHwgc2NyaXB0LnJlYWR5U3RhdGUgPT0gXCJjb21wbGV0ZVwiKSB7XG5cdFx0XHRcdFx0c2NyaXB0Lm9ucmVhZHlzdGF0ZWNoYW5nZSA9IG51bGw7XG5cdFx0XHRcdFx0Y2FsbGJhY2soKTtcblx0XHRcdFx0fVxuXHRcdFx0fTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0c2NyaXB0Lm9ubG9hZCA9IGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0Y2FsbGJhY2soKTtcblx0XHRcdH07XG5cdFx0fVxuXG5cdH07XG5cblx0Y29uc3QgZXZlbnRzSGFuZGxlciA9ICgoKSA9PiB7XG5cblx0XHRsZXQgZXZlbnRzID0gW107XG5cblx0XHQvKipcblx0XHQgKiBMb2cgZXZlbnQgaW50byBhcnJheSBvZiBldmVudHNcblx0XHQgKiBAcGFyYW0gZXZlbnROYW1lXG5cdFx0ICogQHBhcmFtIHBhcmFtZXRlcnNcblx0XHQgKiBAcGFyYW0gdXNlckluZm9cblx0XHQgKi9cblx0XHRjb25zdCBsb2dFdmVudCA9IChldmVudE5hbWUsIHBhcmFtZXRlcnMsIHVzZXJJbmZvKSA9PiB7XG5cdFx0XHR0cnkge1xuXHRcdFx0XHRwYXJhbWV0ZXJzID0gcGFyYW1ldGVycyB8fCB7fTtcblx0XHRcdFx0Ly9sZXQgdmFsaWRhdGlvbnMgPSB2YWxpZGF0ZUV2ZW50KGV2ZW50TmFtZSwgcGFyYW1ldGVycyk7XG5cdFx0XHRcdGxldCB2aXNpdG9yVmFsdWU7XG5cdFx0XHRcdGxldCBjdXN0b21lclZhbHVlO1xuXG5cdFx0XHRcdGlmICh0eXBlb2YgcGFyYW1ldGVycyA9PT0gJ29iamVjdCcgJiYgT2JqZWN0LmtleXMocGFyYW1ldGVycykubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRcdHBhcmFtZXRlcnMgPSBub3JtYWxpemVFdmVudFBhcmFtZXRlcnMocGFyYW1ldGVycyk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0cGFyYW1ldGVycyA9IHt9O1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0T2JqZWN0LmFzc2lnbihwYXJhbWV0ZXJzLCBnZXRBZGRpdGlvbmFsQXR0cmlidXRlc1RvRXZlbnQoKSk7XG5cblx0XHRcdFx0aWYgKHVzZXJJbmZvICYmIGV2ZW50TmFtZSAhPSBrZXlTZXRVc2VySWRFdmVudCkge1xuXHRcdFx0XHRcdHZpc2l0b3JWYWx1ZSA9IHVzZXJJbmZvLnVwZGF0ZWRWaXNpdG9ySWQ7XG5cdFx0XHRcdFx0Y3VzdG9tZXJWYWx1ZSA9IHVzZXJJbmZvLnVzZXJJZDtcblx0XHRcdFx0fSBlbHNlIGlmIChldmVudE5hbWUgPT0ga2V5U2V0VXNlcklkRXZlbnQpIHtcblx0XHRcdFx0XHR2aXNpdG9yVmFsdWUgPSBwYXJhbWV0ZXJzLnVwZGF0ZWRWaXNpdG9ySWQ7XG5cdFx0XHRcdFx0Y3VzdG9tZXJWYWx1ZSA9IHBhcmFtZXRlcnMudXNlcklkO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHZpc2l0b3JWYWx1ZSA9ICBnZXRWaXNpdG9ySWQoKTtcblx0XHRcdFx0XHRjdXN0b21lclZhbHVlID0gZ2V0VXNlcklkKCk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRsZXQgcGF5bG9hZCA9IHtcblx0XHRcdFx0XHR0ZW5hbnQ6IF9jb25maWd1cmF0aW9uLm9wdGl0cmFja01ldGFEYXRhLnNpdGVJZCxcblx0XHRcdFx0XHRjYXRlZ29yeTogZ2V0RXZlbnRDYXRlZ29yeShldmVudE5hbWUpLFxuXHRcdFx0XHRcdG9yaWdpbjogJ3NkaycsXG5cdFx0XHRcdFx0ZXZlbnQ6IGV2ZW50TmFtZSxcblx0XHRcdFx0XHRjb250ZXh0OiBwYXJhbWV0ZXJzLFxuXHRcdFx0XHRcdHRpbWVzdGFtcDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLFxuXHRcdFx0XHRcdG1ldGFkYXRhOiB7XG5cdFx0XHRcdFx0XHRmaXJzdFZpc2l0b3JEYXRlOiBnZXRGaXJzdFZpc2l0RGF0ZSgpLFxuXHRcdFx0XHRcdFx0ZXZlbnRJZDogX1Rvb2xzLmdlbmVyYXRlVVVJRCgpLFxuXHRcdFx0XHRcdFx0c2RrX3BsYXRmb3JtOiAnd2ViJyxcblx0XHRcdFx0XHRcdHNka192ZXJzaW9uOiBfdmVyc2lvblxuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0dmlzaXRvcjogdmlzaXRvclZhbHVlLFxuXHRcdFx0XHRcdGN1c3RvbWVyOiBjdXN0b21lclZhbHVlXG5cdFx0XHRcdH07XG5cdFx0XHRcdGV2ZW50cy5wdXNoKHBheWxvYWQpO1xuXHRcdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0XHRsb2dnZXIubG9nKCdlcnJvcicsIGBjb3VsZCBub3QgbG9nIGV2ZW50OiAke2V2ZW50TmFtZX0gZXJyb3IgbG9nOiAke2V9YCk7XG5cdFx0XHR9XG5cdFx0fTtcblxuXHRcdC8qKlxuXHRcdCAqIHZhbGlkYXRlRXZlbnRcblx0XHQgKiBWYWxpZGF0ZSB0aGUgRXZlbnRzIERhdGEgd2l0aCB0aGUgRXZlbnQgQ29uZmlndXJhdHJpb24uXG5cdFx0ICogVGhlIEV2ZW50IHNob3VsZCBoYXZlIGFzIG1pbmltdW0gdGhlIG1hbmRhdG9yaWMgcGFyYW1ldGVyc1xuXHRcdCAqIEBwYXJhbSBldmVudE5hbWVcblx0XHQgKiBAcGFyYW0gcGFyYW1ldGVyc1xuXHRcdCAqIEByZXR1cm5zIHtib29sZWFufFtdfVxuXHRcdCAqL1xuXHRcdGNvbnN0IHZhbGlkYXRlRXZlbnQgPSAoZXZlbnROYW1lLCBwYXJhbWV0ZXJzKSA9PiB7XG5cdFx0XHRsZXQgdmFsaWRFdmVudCA9IHt9O1xuXHRcdFx0bGV0IGV2ZW50Q29uZiA9IGdldEV2ZW50Q29uZmlndXJhdGlvbihldmVudE5hbWUpO1xuXHRcdFx0bGV0IHZhbGlkYXRpb25zID0gW107XG5cdFx0XHR2YWxpZEV2ZW50LmlzTWFpblJvdyA9IHRydWU7XG5cblx0XHRcdGlmICghZXZlbnRDb25mKSB7XG5cdFx0XHRcdGxvZ2dlci5sb2coJ2Vycm9yJywgYGV2ZW50OiAke2V2ZW50TmFtZX0gZG9lcyBub3QgZXhpc3RgKTtcblx0XHRcdFx0aWYgKG9wdG12SXNPcGVuKCkpIHtcblx0XHRcdFx0XHR2YWxpZEV2ZW50LmVycm9yTWVzc2FnZSA9ICdFdmVudCBuYW1lIGlzIHVuYXZhaWxhYmxlLiBJdCBoYXMgbm90IGJlZW4gY29uZmlndXJlZCBwcm9wZXJseSc7XG5cdFx0XHRcdFx0Ly9jb252ZXJ0T3B0aWV2ZW50VG9UZXN0VG9vbGV2ZW50KHZhbGlkRXZlbnQsIGZhbHNlKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHZhbGlkYXRpb25zLnB1c2goe1xuXHRcdFx0XHRcdHN0YXR1czogMTAxMCxcblx0XHRcdFx0XHRtZXNzYWdlOiBgJyR7ZXZlbnROYW1lfScgaXMgYW4gdW5kZWZpbmVkIGV2ZW50YFxuXHRcdFx0XHR9KTtcblxuXHRcdFx0XHRyZXR1cm4gdmFsaWRhdGlvbnM7XG5cdFx0XHR9XG5cblx0XHRcdHZhbGlkRXZlbnRbJ3VzZXJJZCddID0gcGFyYW1ldGVycyAmJiBwYXJhbWV0ZXJzLnVzZXJJZCA/IHBhcmFtZXRlcnMudXNlcklkIDogZ2V0VXNlcklkKCk7XG5cdFx0XHR2YWxpZEV2ZW50Wyd2aXNpdG9yRGF0YSddID0gbnVsbDtcblx0XHRcdHZhbGlkRXZlbnRbJ2V2ZW50TmFtZSddID0gZXZlbnROYW1lO1xuXHRcdFx0dmFsaWRFdmVudFsnZXZlbnRNZXRhZGF0YSddID0gZXZlbnRDb25mO1xuXHRcdFx0dmFsaWRFdmVudFsncGFyYW1ldGVycyddID0gcGFyYW1ldGVycztcblx0XHRcdHZhbGlkYXRpb25zID0gcGFyYW1ldGVyVmFsaWRhdGlvbihldmVudE5hbWUsIHBhcmFtZXRlcnMsIGV2ZW50Q29uZik7XG5cblx0XHRcdGlmICh2YWxpZGF0aW9ucy5sZW5ndGggJiYgb3B0bXZJc09wZW4oKSkge1xuXHRcdFx0XHQvLyBGb3IgdGhlIHVzZSBvZiB0aGUgU0RLIFRlc3QgVG9vbFxuXHRcdFx0XHR2YWxpZEV2ZW50LmVycm9yTWVzc2FnZSA9IHZhbGlkYXRpb25zWzBdLm1lc3NhZ2U7XG5cdFx0XHRcdC8vY29udmVydE9wdGlldmVudFRvVGVzdFRvb2xldmVudCh2YWxpZEV2ZW50LCBmYWxzZSk7XG5cblx0XHRcdFx0cmV0dXJuIHZhbGlkYXRpb25zO1xuXHRcdFx0fVxuXG5cblx0XHRcdGlmIChvcHRtdklzT3BlbigpKSB7XG5cdFx0XHRcdC8vY29udmVydE9wdGlldmVudFRvVGVzdFRvb2xldmVudCh2YWxpZEV2ZW50LCB0cnVlKTtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIHZhbGlkYXRpb25zO1xuXHRcdH07XG5cblx0XHQvKipcblx0XHQgKiBwYXJhbWV0ZXJWYWxpZGF0aW9uXG5cdFx0ICogVmFsaWRhdGUgdGhlIEV2ZW50cyBQYXJhbWV0ZXJzIERhdGEgd2l0aCB0aGUgRXZlbnQgQ29uZmlndXJhdHJpb24uXG5cdFx0ICogVGhlIEV2ZW50IHNob3VsZCBoYXZlIGFzIG1pbmltdW0gdGhlIG1hbmRhdG9yaWMgcGFyYW1ldGVycy5cblx0XHQgKiBIYW5kbGluZyB0aGUgU2NlbmFyaW8gb2YgcmVjZWl2aW5nIHBhcmFtZXRlcnMgPSBudWxsLlxuXHRcdCAqIEluIHRoaXMgY2FzZSAgd2UgY2hlY2sgd2hldGhlciB0aGUgRXZlbnRzIHBhcmFtZXRlcnMgaGF2ZSBhIG1hbmRhdG9yaWMgcGFyYW1ldGVycy5cblx0XHQgKiBAcGFyYW0gZXZlbnROYW1lXG5cdFx0ICogQHBhcmFtIHBhcmFtZXRlcnNcblx0XHQgKiBAcGFyYW0gZXZlbnRDb25mXG5cdFx0ICogQHJldHVybnMge1tdfVxuXHRcdCAqL1xuXHRcdGNvbnN0IHBhcmFtZXRlclZhbGlkYXRpb24gPSAoZXZlbnROYW1lLCBwYXJhbWV0ZXJzLCBldmVudENvbmYpID0+IHtcblx0XHRcdHRyeSB7XG5cdFx0XHRcdGxldCBwYXJhbU1ldGFkYXRhO1xuXHRcdFx0XHRsZXQgdmFsaWRhdGlvbnMgPSBbXTtcblx0XHRcdFx0ZXZlbnRDb25mID0gZXZlbnRDb25mIHx8IHt9O1xuXHRcdFx0XHRwYXJhbWV0ZXJzID0gcGFyYW1ldGVycyB8fCB7fTtcblxuXHRcdFx0XHQvL0NoZWNrIGlmIG51bWJlciBvZiBwYXJhbWV0ZXJzIG5vdCBleGNlZWRpbmcgdGhlIG1heGltdW0gbnVtYmVyIG9mIHBhcmFtcyBhbGxvd2VkXG5cdFx0XHRcdGxldCBwYXJhbXNOdW1iZXIgPSBPYmplY3Qua2V5cyhwYXJhbWV0ZXJzKS5sZW5ndGg7XG5cdFx0XHRcdGlmIChwYXJhbXNOdW1iZXIgPiBfY29uZmlndXJhdGlvbi5vcHRpdHJhY2tNZXRhRGF0YS5tYXhBY3Rpb25DdXN0b21EaW1lbnNpb25zKSB7XG5cdFx0XHRcdFx0bG9nZ2VyLmxvZygnd2FybmluZycsIGBldmVudCAke2V2ZW50TmFtZX0gY29udGFpbnMgJHtwYXJhbXNOdW1iZXJ9IHBhcmFtZXRlcnMgd2hpbGUgdGhlIGFsbG93ZWQgbnVtYmVyIG9mIHBhcmFtZXRlcnMgaXMgJHtfY29uZmlndXJhdGlvbi5vcHRpdHJhY2tNZXRhRGF0YS5tYXhBY3Rpb25DdXN0b21EaW1lbnNpb25zfS4gV2UgcmVtb3ZlZCBzb21lIG9mIHRoZW0gdG8gcHJvY2VzcyB0aGUgZXZlbnQuYCk7XG5cdFx0XHRcdFx0dmFsaWRhdGlvbnMucHVzaCh7XG5cdFx0XHRcdFx0XHRzdGF0dXM6IDEwMjAsXG5cdFx0XHRcdFx0XHRtZXNzYWdlOiBgZXZlbnQgJyR7ZXZlbnROYW1lfScgY29udGFpbnMgJHtwYXJhbXNOdW1iZXJ9IHBhcmFtZXRlcnMgd2hpbGUgdGhlIGFsbG93ZWQgbnVtYmVyIG9mIHBhcmFtZXRlcnMgaXMgJHtfY29uZmlndXJhdGlvbi5vcHRpdHJhY2tNZXRhRGF0YS5tYXhBY3Rpb25DdXN0b21EaW1lbnNpb25zfS4gU29tZSBwYXJhbWV0ZXJzIHdlcmUgcmVtb3ZlZCB0byBwcm9jZXNzIHRoZSBldmVudC5gXG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvL0NoZWNrIGlmIGFsbCBtYW5kYXRvcnkgcGFyYW1zIGFyZSByZXBvcnRlZCB3aXRoIHRoZSBldmVudFxuXHRcdFx0XHRpZiAoZXZlbnRDb25mLnBhcmFtZXRlcnMgIT0gbnVsbCkge1xuXHRcdFx0XHRcdGxldCBjb25maWdfcGFyYW1ldGVyc19rZXlzID0gT2JqZWN0LmtleXMoZXZlbnRDb25mLnBhcmFtZXRlcnMpO1xuXHRcdFx0XHRcdGNvbmZpZ19wYXJhbWV0ZXJzX2tleXMuZm9yRWFjaCgocGFyYW1fbmFtZSkgPT4ge1xuXHRcdFx0XHRcdFx0aWYgKGV2ZW50Q29uZi5wYXJhbWV0ZXJzW3BhcmFtX25hbWVdLm9wdGlvbmFsID09IGZhbHNlKSB7XG5cdFx0XHRcdFx0XHRcdGlmICghcGFyYW1ldGVycyB8fCAocGFyYW1ldGVycyAmJiAodHlwZW9mIHBhcmFtZXRlcnNbcGFyYW1fbmFtZV0gPT0gJ3VuZGVmaW5lZCcgfHwgcGFyYW1ldGVyc1twYXJhbV9uYW1lXSA9PSBudWxsKSkpIHtcblx0XHRcdFx0XHRcdFx0XHRsb2dnZXIubG9nKCdlcnJvcicsIGBldmVudCAke2V2ZW50TmFtZX0gaGFzIG1hbmRhdG9yeSBwYXJhbWV0ZXIgJHtwYXJhbV9uYW1lfSB3aGljaCBpcyB1bmRlZmluZWQgb3IgZW1wdHlgKTtcblx0XHRcdFx0XHRcdFx0XHR2YWxpZGF0aW9ucy5wdXNoKHtcblx0XHRcdFx0XHRcdFx0XHRcdHN0YXR1czogMTA0MCxcblx0XHRcdFx0XHRcdFx0XHRcdG1lc3NhZ2U6IGBldmVudCAke2V2ZW50TmFtZX0gaGFzIGEgbWFuZGF0b3J5IHBhcmFtZXRlciwgJyR7cGFyYW1fbmFtZX0nLCB3aGljaCBpcyB1bmRlZmluZWQgb3IgZW1wdHkuYFxuXHRcdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvL0NoZWNrIHRoYXQgdGhlIE9iamVjdCBvZiBwYXJhbWV0ZXJzIGlzIGxlZ2l0IGFuZCBwYXJhbWV0ZXJzJyB0eXBlcyBhcyBkZWZpbmVkLlxuXHRcdFx0XHRpZiAocGFyYW1ldGVycykge1xuXHRcdFx0XHRcdGZvciAobGV0IHBhcmFtZXRlck5hbWUgaW4gcGFyYW1ldGVycykge1xuXHRcdFx0XHRcdFx0aWYgKHBhcmFtZXRlcnNbcGFyYW1ldGVyTmFtZV0gJiYgdHlwZW9mIHBhcmFtZXRlcnNbcGFyYW1ldGVyTmFtZV0gPT0gJ3N0cmluZycgJiYgcGFyYW1ldGVyc1twYXJhbWV0ZXJOYW1lXS5sZW5ndGggPiBfbWF4UGFyYW1WYWx1ZVNpemUpIHtcblx0XHRcdFx0XHRcdFx0bG9nZ2VyLmxvZygnZXJyb3InLCBgcGFyYW1ldGVyICR7cGFyYW1ldGVyTmFtZX0gaGFzIGV4Y2VlZGVkIHRoZSBsaW1pdCBvZiBhbGxvd2VkIG51bWJlciBvZiBjaGFyYWN0ZXJzICgke19tYXhQYXJhbVZhbHVlU2l6ZX0pYCk7XG5cdFx0XHRcdFx0XHRcdHZhbGlkYXRpb25zLnB1c2goe1xuXHRcdFx0XHRcdFx0XHRcdHN0YXR1czogMTA1MCxcblx0XHRcdFx0XHRcdFx0XHRtZXNzYWdlOiBgJyR7cGFyYW1ldGVyTmFtZX0nIGhhcyBleGNlZWRlZCB0aGUgbGltaXQgb2YgYWxsb3dlZCBudW1iZXIgb2YgY2hhcmFjdGVycy4gVGhlIGNoYXJhY3RlciBsaW1pdCBpcyAke19tYXhQYXJhbVZhbHVlU2l6ZX0uYFxuXHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdHBhcmFtTWV0YWRhdGEgPSBldmVudENvbmYucGFyYW1ldGVyc1twYXJhbWV0ZXJOYW1lXTtcblx0XHRcdFx0XHRcdGxldCBwYXJhbWV0ZXJDb25maWd1cmF0aW9uQ2hlY2sgPSBjaGVja0ZvckNvbmZpZ3VyYXRpb25NYXRjaChwYXJhbWV0ZXJOYW1lLCBwYXJhbWV0ZXJzW3BhcmFtZXRlck5hbWVdLCBwYXJhbU1ldGFkYXRhKTtcblx0XHRcdFx0XHRcdGlmIChwYXJhbWV0ZXJDb25maWd1cmF0aW9uQ2hlY2subGVuZ3RoID4gMCkge1xuXHRcdFx0XHRcdFx0XHR2YWxpZGF0aW9ucyA9IHZhbGlkYXRpb25zLmNvbmNhdChwYXJhbWV0ZXJDb25maWd1cmF0aW9uQ2hlY2spO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRzd2l0Y2ggKGV2ZW50TmFtZSkge1xuXHRcdFx0XHRcdFx0Y2FzZSBrZXlTZXRVc2VySWRFdmVudDpcblx0XHRcdFx0XHRcdFx0aWYgKCFfVG9vbHMudmFsaWRhdGVVc2VySWRMZW5ndGgocGFyYW1ldGVycy51c2VySWQpKSB7XG5cdFx0XHRcdFx0XHRcdFx0bG9nZ2VyLmxvZygnZXJyb3InLCBgdXNlcklkLCAnJHtwYXJhbWV0ZXJzLnVzZXJJZH0nLCBpcyB0b28gbG9uZywgdGhlIHVzZXJJZCBsaW1pdCBpcyAke19tYXhVc2VySWRTaXplfS5gKTtcblx0XHRcdFx0XHRcdFx0XHR2YWxpZGF0aW9ucy5wdXNoKHtcblx0XHRcdFx0XHRcdFx0XHRcdHN0YXR1czogMTA3MSxcblx0XHRcdFx0XHRcdFx0XHRcdG1lc3NhZ2U6IGB1c2VySWQsICcke3BhcmFtZXRlcnMudXNlcklkfScsIGlzIHRvbyBsb25nLCB0aGUgdXNlcklkIGxpbWl0IGlzICR7X21heFVzZXJJZFNpemV9LmBcblx0XHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRpZiAoIV9Ub29scy52YWxpZGF0ZVVzZXJJZChwYXJhbWV0ZXJzLnVzZXJJZCkpIHtcblx0XHRcdFx0XHRcdFx0XHRsb2dnZXIubG9nKCdlcnJvcicsIGB1c2VySWQsICcke3BhcmFtZXRlcnMudXNlcklkfScsIGlzIGludmFsaWQuYCk7XG5cdFx0XHRcdFx0XHRcdFx0dmFsaWRhdGlvbnMucHVzaCh7XG5cdFx0XHRcdFx0XHRcdFx0XHRzdGF0dXM6IDEwNzAsXG5cdFx0XHRcdFx0XHRcdFx0XHRtZXNzYWdlOiBgdXNlcklkLCAnJHtwYXJhbWV0ZXJzLnVzZXJJZH0nLCBpcyBpbnZhbGlkLmBcblx0XHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRcdGNhc2Uga2V5U2V0RW1haWxFdmVudDpcblx0XHRcdFx0XHRcdFx0aWYgKCFfVG9vbHMudmFsaWRhdGVFbWFpbChwYXJhbWV0ZXJzLmVtYWlsKSkge1xuXHRcdFx0XHRcdFx0XHRcdGxvZ2dlci5sb2coJ2Vycm9yJywgYEVtYWlsLCAnJHtwYXJhbWV0ZXJzLmVtYWlsfScsIGlzIGludmFsaWQuYCk7XG5cdFx0XHRcdFx0XHRcdFx0dmFsaWRhdGlvbnMucHVzaCh7XG5cdFx0XHRcdFx0XHRcdFx0XHRzdGF0dXM6IDEwODAsXG5cdFx0XHRcdFx0XHRcdFx0XHRtZXNzYWdlOiBgRW1haWwsICcke3BhcmFtZXRlcnMuZW1haWx9JywgaXMgaW52YWxpZC5gXG5cdFx0XHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHRjYXNlIGtleVNldFBhZ2VWaXNpdEV2ZW50OlxuXHRcdFx0XHRcdFx0XHRpZiAoIV9Ub29scy52YWxpZGF0ZVBhZ2VVUkwocGFyYW1ldGVycy5jdXN0b21VUkwpKSB7XG5cdFx0XHRcdFx0XHRcdFx0bG9nZ2VyLmxvZygnZXJyb3InLCBgVVJMLCAnJHtwYXJhbWV0ZXJzLmN1c3RvbVVSTH0nLCBpcyBpbnZhbGlkLmApO1xuXHRcdFx0XHRcdFx0XHRcdHZhbGlkYXRpb25zLnB1c2goe1xuXHRcdFx0XHRcdFx0XHRcdFx0c3RhdHVzOiAxMDkwLFxuXHRcdFx0XHRcdFx0XHRcdFx0bWVzc2FnZTogYFVSTCwgJyR7cGFyYW1ldGVycy5jdXN0b21VUkx9JywgaXMgaW52YWxpZC5gXG5cdFx0XHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRyZXR1cm4gdmFsaWRhdGlvbnM7XG5cdFx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRcdGxvZ2dlci5sb2coJ2Vycm9yJywgYGNvdWxkIG5vdCB2YWxpZGF0ZSBwYXJhbWV0ZXJzIGZvciBldmVudCAke2V2ZW50TmFtZX0gZXJyb3I6ICR7ZX1gKTtcblx0XHRcdH1cblx0XHR9O1xuXG5cdFx0LyoqXG5cdFx0ICogY2hlY2tGb3JDb25maWd1cmF0aW9uTWF0Y2hcblx0XHQgKiBHbyBvdmVyIHRoZSBwYXJhbWV0ZXJzIHRyeWluZyB0byBtYXRjaCB0aGVpciB0eXBlIHRvIHRoZSBjb25maWd1cmF0aW9uIGRlZmluaXRpb24uXG5cdFx0ICogQHBhcmFtIHBhcmFtZXRlck5hbWVcblx0XHQgKiBAcGFyYW0gcGFyYW1ldGVyVmFsdWVcblx0XHQgKiBAcGFyYW0gcGFyYW1NZXRhZGF0YVxuXHRcdCAqIEByZXR1cm5zIHtbXX1cblx0XHQgKi9cblx0XHRjb25zdCBjaGVja0ZvckNvbmZpZ3VyYXRpb25NYXRjaCA9IChwYXJhbWV0ZXJOYW1lLCBwYXJhbWV0ZXJWYWx1ZSwgcGFyYW1NZXRhZGF0YSkgPT4ge1xuXHRcdFx0bGV0IHZhbGlkYXRpb25zID0gW107XG5cblx0XHRcdGlmIChwYXJhbWV0ZXJWYWx1ZSAhPSB1bmRlZmluZWQgJiYgIXBhcmFtTWV0YWRhdGEpIHtcblx0XHRcdFx0bG9nZ2VyLmxvZygnd2FybmluZycsIGBwYXJhbWV0ZXIgJyR7cGFyYW1ldGVyTmFtZX0nIGhhcyBub3QgYmVlbiBjb25maWd1cmVkIGZvciB0aGlzIGV2ZW50LiBJdCB3aWxsIG5vdCBiZSB0cmFja2VkIGFuZCBjYW5ub3QgYmUgdXNlZCB3aXRoaW4gYSB0cmlnZ2VyLmApO1xuXHRcdFx0XHR2YWxpZGF0aW9ucy5wdXNoKHtcblx0XHRcdFx0XHRzdGF0dXM6IDEwMzAsXG5cdFx0XHRcdFx0bWVzc2FnZTogYHBhcmFtZXRlciAnJHtwYXJhbWV0ZXJOYW1lfScgaGFzIG5vdCBiZWVuIGNvbmZpZ3VyZWQgZm9yIHRoaXMgZXZlbnQuIEl0IHdpbGwgbm90IGJlIHRyYWNrZWQgYW5kIGNhbm5vdCBiZSB1c2VkIHdpdGhpbiBhIHRyaWdnZXIuYFxuXHRcdFx0XHR9KTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKHBhcmFtZXRlclZhbHVlICE9IHVuZGVmaW5lZCAmJiBwYXJhbU1ldGFkYXRhKSB7XG5cdFx0XHRcdGxldCBtZXNzYWdlID0gJyc7XG5cdFx0XHRcdGlmIChwYXJhbU1ldGFkYXRhLnR5cGUgPT09IFwiU3RyaW5nXCIgJiYgdHlwZW9mIHBhcmFtZXRlclZhbHVlICE9PSBcInN0cmluZ1wiKSB7XG5cdFx0XHRcdFx0bG9nZ2VyLmxvZygnZXJyb3InLCBgcGFyYW1ldGVyICcke3BhcmFtZXRlck5hbWV9JyBzaG91bGQgYmUgb2YgVFlQRSBTdHJpbmcuYCk7XG5cdFx0XHRcdFx0bWVzc2FnZSA9IGBwYXJhbWV0ZXIgJyR7cGFyYW1ldGVyTmFtZX0nIHNob3VsZCBiZSBvZiBUWVBFIFN0cmluZy5gO1xuXHRcdFx0XHR9IGVsc2UgaWYgKHBhcmFtTWV0YWRhdGEudHlwZSA9PT0gXCJOdW1iZXJcIiAmJiB0eXBlb2YgcGFyYW1ldGVyVmFsdWUgIT0gXCJudW1iZXJcIikge1xuXHRcdFx0XHRcdGxvZ2dlci5sb2coJ2Vycm9yJywgYHBhcmFtZXRlciAnJHtwYXJhbWV0ZXJOYW1lfScgc2hvdWxkIGJlIG9mIFRZUEUgTnVtYmVyLmApO1xuXHRcdFx0XHRcdG1lc3NhZ2UgPSBgcGFyYW1ldGVyICcke3BhcmFtZXRlck5hbWV9JyBzaG91bGQgYmUgb2YgVFlQRSBOdW1iZXIuYDtcblx0XHRcdFx0fSBlbHNlIGlmIChwYXJhbU1ldGFkYXRhLnR5cGUgPT09IFwiQm9vbGVhblwiICYmIHR5cGVvZiBwYXJhbWV0ZXJWYWx1ZSAhPT0gXCJib29sZWFuXCIpIHtcblx0XHRcdFx0XHRsb2dnZXIubG9nKCdlcnJvcicsIGBwYXJhbWV0ZXIgJyR7cGFyYW1ldGVyTmFtZX0nIHNob3VsZCBiZSBvZiBUWVBFIEJvb2xlYW4uYCk7XG5cdFx0XHRcdFx0bWVzc2FnZSA9IGBwYXJhbWV0ZXIgJyR7cGFyYW1ldGVyTmFtZX0nIHNob3VsZCBiZSBvZiBUWVBFIEJvb2xlYW4uYDtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAobWVzc2FnZS5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdFx0dmFsaWRhdGlvbnMucHVzaCh7XG5cdFx0XHRcdFx0XHRzdGF0dXM6IDEwNjAsXG5cdFx0XHRcdFx0XHRtZXNzYWdlOiBtZXNzYWdlXG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIHZhbGlkYXRpb25zO1xuXHRcdH07XG5cbi8qXHRcdC8hKipcblx0XHQgKiBHZXQgZXZlbnQgY29uZmlndXJhdGlvbiBmcm9tIHRoZSBjb25maWd1cmF0aW9uIGdsb2JhbCBmaWxlIG9yIHRlbmFudCdzIGNvbmZpZ3VyYXRpb25cblx0XHQgKiBAcGFyYW0gZXZlbnROYW1lXG5cdFx0ICogQHJldHVybnMgeyp9XG5cdFx0ICohL1xuXHRcdGNvbnN0IGdldEV2ZW50Q29uZmlndXJhdGlvbiA9IChldmVudE5hbWUpID0+IHtcblx0XHRcdGxldCBldmVudENvbmY7XG5cblx0XHRcdGlmIChfY29yZUV2ZW50cy5ldmVudHMuaGFzT3duUHJvcGVydHkoZXZlbnROYW1lKSkge1xuXHRcdFx0XHRldmVudENvbmYgPSBfY29yZUV2ZW50cy5ldmVudHNbZXZlbnROYW1lXTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGV2ZW50Q29uZiA9IF9jb25maWd1cmF0aW9uLmV2ZW50c1tldmVudE5hbWVdIHx8IG51bGw7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBldmVudENvbmY7XG5cdFx0fTsqL1xuXG5cdFx0LyoqXG5cdFx0ICogUmVwb3J0IGV2ZW50IHRvIGVuZHBvaW50IHByb3ZpZGVkIHdpdGggdGhlIHBheWxvYWQgcHJvdmlkZWRcblx0XHQgKiBAcGFyYW0gZW5kcG9pbnRcblx0XHQgKiBAcGFyYW0gcGF5bG9hZFxuXHRcdCAvLyAqIEByZXR1cm5zIHtQcm9taXNlPHtyZXNwb25zZTogYW55LCBldmVudDogKn0+fVxuXHRcdCAqL1xuXHRcdGNvbnN0IHJlcG9ydCA9IGFzeW5jIChlbmRwb2ludCwgcGF5bG9hZCkgPT4ge1xuXHRcdFx0bGV0IGV2ZW50cyA9IFtdO1xuXHRcdFx0cGF5bG9hZC5mb3JFYWNoKChldmVudCkgPT4ge1xuXHRcdFx0XHRldmVudHMucHVzaChldmVudC5ldmVudCk7XG5cdFx0XHR9KTtcblx0XHRcdHJldHVybiBhd2FpdCBmZXRjaChlbmRwb2ludCwge1xuXHRcdFx0XHRtZXRob2Q6ICdQT1NUJyxcblx0XHRcdFx0aGVhZGVyczoge1xuXHRcdFx0XHRcdCdBY2NlcHQnOiAnYXBwbGljYXRpb24vanNvbicsXG5cdFx0XHRcdFx0J0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyxcblx0XHRcdFx0XHQnWC1SZXF1ZXN0LUlEJzogX1Rvb2xzLmdlbmVyYXRlVVVJRCgpXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGJvZHk6IEpTT04uc3RyaW5naWZ5KHBheWxvYWQpXG5cdFx0XHR9KVxuXHRcdFx0XHQudGhlbihyZXNwb25zZSA9PiByZXNwb25zZS5qc29uKCkpXG5cdFx0XHRcdC50aGVuKGRhdGEgPT4ge1xuXHRcdFx0XHRcdGxvZ2dlci5sb2coJ2luZm8nLCBgZXZlbnQke2V2ZW50cy5sZW5ndGggPiAxID8gJ3MnIDogJyd9ICR7ZXZlbnRzLmpvaW4oJywgJyl9IHJlcG9ydGVkIHRvICR7ZW5kcG9pbnR9IHN1Y2Nlc3NmdWxseWApO1xuXHRcdFx0XHRcdHJldHVybiB7XG5cdFx0XHRcdFx0XHRwYXlsb2FkOiBwYXlsb2FkLFxuXHRcdFx0XHRcdFx0cmVzcG9uc2U6IGRhdGFcblx0XHRcdFx0XHR9O1xuXHRcdFx0XHR9KVxuXHRcdFx0XHQuY2F0Y2goZXJyb3IgPT4ge1xuXHRcdFx0XHRcdGxvZ2dlci5sb2coJ2Vycm9yJywgYGV2ZW50JHtldmVudHMubGVuZ3RoID4gMSA/ICdzJyA6ICcnfSAke2V2ZW50cy5qb2luKCcsICcpfSBub3QgcmVwb3J0ZWQgdG8gJHtlbmRwb2ludH0gZHVlIHRvICR7ZXJyb3J9YClcblx0XHRcdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRcdFx0cGF5bG9hZDogcGF5bG9hZCxcblx0XHRcdFx0XHRcdHJlc3BvbnNlOiBlcnJvclxuXHRcdFx0XHRcdH07XG5cdFx0XHRcdH0pO1xuXHRcdH07XG5cblx0XHQvKipcblx0XHQgKiBEaXNwYXRjaCB0aGUgZXZlbnRzIGluIHRoZSBhcnJheSBvZiBldmVudHNcblx0XHQgKiBAcmV0dXJucyB7UHJvbWlzZTx1bmtub3duW10+fVxuXHRcdCAqL1xuXHRcdGNvbnN0IGRpc3BhdGNoID0gYXN5bmMgKCkgPT4ge1xuXHRcdFx0bGV0IG9wdGl0cmFja0V2ZW50cyA9IFtdO1xuXHRcdFx0bGV0IHJlYWx0aW1lRXZlbnRzID0gW107XG5cblx0XHRcdGlmICghZXZlbnRzLmxlbmd0aCkge1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cblx0XHRcdGV2ZW50cy5mb3JFYWNoKChldmVudCkgPT4ge1xuXHRcdFx0XHQvL2xldCBldmVudENvbmYgPSBnZXRFdmVudENvbmZpZ3VyYXRpb24oZXZlbnQuZXZlbnQpO1xuXHRcdFx0XHQvLyBFdmVudCBzaG91bGQgYWx3YXlzIGJlIHJlcG9ydGVkIHRvIE9wdGlTdHJlYW0sIGV2ZW4gaWYgbm90IGV4aXN0LlxuXHRcdFx0XHRvcHRpdHJhY2tFdmVudHMucHVzaChldmVudCk7XG5cdFx0XHRcdHJlYWx0aW1lRXZlbnRzLnB1c2goZXZlbnQpO1xuXHRcdFx0XHQvLyBFdmVudCBzaG91bGQgYmUgcmVwb3J0ZWQgdG8gUmVhbHRpbWUgb25seSBpZiBoYXMgY29uZmlndXJhdGlvbiBhbmQgdGhlcmUgYXJlIG5vIHZhbGlkYXRpb24gaXNzdWVzICh3ZSBzZW5kIGV2ZW50cyB3aXRoIHdhcm5pbmdzIGJ1dCB3aXRoIG5vIGVycm9ycykuXG4vKlx0XHRcdFx0aWYgKGV2ZW50Q29uZiAmJiBldmVudENvbmYuc3VwcG9ydGVkT25SZWFsVGltZSkge1xuXHRcdFx0XHRcdGxldCBzaG91bGRTZW5kVG9SZWFsVGltZSA9IHRydWU7XG5cdFx0XHRcdFx0aWYgKChldmVudC5tZXRhZGF0YSAmJiBldmVudC5tZXRhZGF0YS52YWxpZGF0aW9ucykgJiYgQXJyYXkuaXNBcnJheShldmVudC5tZXRhZGF0YS52YWxpZGF0aW9ucykgJiYgZXZlbnQubWV0YWRhdGEudmFsaWRhdGlvbnMubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRcdFx0Ly9sZXQgdmFsaWRhdGlvbkFycmF5TGVuZ3RoID0gZXZlbnQubWV0YWRhdGEudmFsaWRhdGlvbnMubGVuZ3RoO1xuXG5cdFx0XHRcdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8IHZhbGlkYXRpb25BcnJheUxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdFx0XHRcdGlmIChlcnJvclZhbGlkYXRpb25OdW1iZXJzLmluY2x1ZGVzKGV2ZW50Lm1ldGFkYXRhLnZhbGlkYXRpb25zW2ldLnN0YXR1cykpIHtcblx0XHRcdFx0XHRcdFx0XHRzaG91bGRTZW5kVG9SZWFsVGltZSA9IGZhbHNlO1xuXHRcdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0aWYgKHNob3VsZFNlbmRUb1JlYWxUaW1lKSB7XG5cdFx0XHRcdFx0XHRyZWFsdGltZUV2ZW50cy5wdXNoKGV2ZW50KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0qL1xuXHRcdFx0fSk7XG5cblx0XHRcdC8vICMjIyBiZWdpblxuICAgICAgICAgICAgaWYgKF9jb25maWd1cmF0aW9uLmVuYWJsZVdlYlB1c2gpIHtcbiAgICAgICAgICAgICAgICBvcHRpbW9iaWxlTW9kdWxlLnJlcG9ydEV2ZW50c1RvT3B0aW1vYmlsZShldmVudHMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gIyMjIGVuZFxuXG5cdFx0XHRldmVudHMgPSBbXTtcblx0XHRcdGxldCBkaXNwYXRjaFRvVHJhY2sgPSBfY29uZmlndXJhdGlvbi5lbmFibGVPcHRpdHJhY2sgJiYgb3B0aXRyYWNrRXZlbnRzLmxlbmd0aCA+IDAgPyBhd2FpdCByZXBvcnQob3B0aXRyYWNrTW9kdWxlLmdldE9wdGl0cmFja0VuZHBvaW50KCksIG9wdGl0cmFja0V2ZW50cykgOiBhd2FpdCBQcm9taXNlLnJlc29sdmUoKTtcblx0XHRcdGxldCBkaXNwYXRjaFRvUmVhbHRpbWUgPSBfY29uZmlndXJhdGlvbi5lbmFibGVSZWFsdGltZSAmJiByZWFsdGltZUV2ZW50cy5sZW5ndGggPiAwID8gYXdhaXQgcmVwb3J0KHJlYWx0aW1lTW9kdWxlLmdldFJlYWx0aW1lRW5kcG9pbnQoKSwgcmVhbHRpbWVFdmVudHMpLnRoZW4oZGF0YSA9PiB7XG5cdFx0XHRcdHJlYWx0aW1lTW9kdWxlLnBvc3RSZWFsdGltZUV2ZW50KGRhdGEpO1xuXHRcdFx0fSkgOiBhd2FpdCBQcm9taXNlLnJlc29sdmUoKTtcblxuXHRcdFx0cmV0dXJuIFByb21pc2UuYWxsKFtkaXNwYXRjaFRvVHJhY2ssIGRpc3BhdGNoVG9SZWFsdGltZV0pXG5cdFx0XHRcdC50aGVuKGRhdGEgPT4ge1xuXHRcdFx0XHRcdHJldHVybiBkYXRhO1xuXHRcdFx0XHR9KTtcblx0XHR9O1xuXG5cdFx0LyoqXG5cdFx0ICogR2V0IHRoZSBjYXRlZ29yeSBvZiB0aGUgZXZlbnQgYnkgdGhlIGV2ZW50IG5hbWUuXG5cdFx0ICogQHBhcmFtIGV2ZW50TmFtZVxuXHRcdCAqIEByZXR1cm5zIHtzdHJpbmd9XG5cdFx0ICovXG5cdFx0Y29uc3QgZ2V0RXZlbnRDYXRlZ29yeSA9IChldmVudE5hbWUpID0+IHtcblx0XHRcdGlmIChldmVudE5hbWUgPT0ga2V5V2ViUG9wdXBEaXNwbGF5ZWQpIHtcblx0XHRcdFx0cmV0dXJuICdwb3B1cCc7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gJ3RyYWNrJztcblx0XHR9O1xuXG5cdFx0cmV0dXJuIHtcblx0XHRcdGxvZ0V2ZW50OiBsb2dFdmVudCxcblx0XHRcdGRpc3BhdGNoOiBkaXNwYXRjaFxuXHRcdH07XG5cdH0pKCk7XG5cblx0LyoqXG5cdCAqIFNldCBkYXRhIGluIExvY2FsIFN0b3JhZ2Vcblx0ICogQHBhcmFtIGtleVxuXHQgKiBAcGFyYW0gdXBkYXRlZFZhbHVlXG5cdCAqL1xuXHRjb25zdCBwZXJzaXN0U0RLTG9jYWxEYXRhID0gKGtleSwgdXBkYXRlZFZhbHVlKSA9PiB7XG5cdFx0dHJ5IHtcblx0XHRcdGxldCBjdXJyVmFsdWUgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShrZXkpO1xuXHRcdFx0aWYgKGN1cnJWYWx1ZSA9PSBudWxsIHx8IGN1cnJWYWx1ZSAhPSB1cGRhdGVkVmFsdWUpIHtcblx0XHRcdFx0bG9jYWxTdG9yYWdlLnNldEl0ZW0oa2V5LCB1cGRhdGVkVmFsdWUpO1xuXHRcdFx0fVxuXHRcdH0gY2F0Y2ggKGVycm9yKSB7XG5cdFx0XHRsb2dnZXIubG9nKCdlcnJvcicsIGBPcHRpbW92ZVNESzogcGVyc2lzdFNES0xvY2FsRGF0YSgpIEZhaWxlZCBlcnJvciA9ICR7ZXJyb3J9YCk7XG5cdFx0fVxuXHR9O1xuXG5cdC8qKlxuXHQgKiBHZXQgZGF0YSBmcm9tIExvY2FsIFN0b3JhZ2Vcblx0ICogQHBhcmFtIGtleVxuXHQgKiBAcmV0dXJucyB7c3RyaW5nfG51bGx9XG5cdCAqL1xuXHRjb25zdCBnZXRQZXJzaXN0ZWRTREtMb2NhbERhdGEgPSAoa2V5KSA9PiB7XG5cdFx0dHJ5IHtcblx0XHRcdGxldCB2YWx1ZSA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKGtleSk7XG5cdFx0XHRpZiAodmFsdWUgIT0gbnVsbCkge1xuXHRcdFx0XHRyZXR1cm4gdmFsdWU7XG5cdFx0XHR9XG5cdFx0fSBjYXRjaCAoZXJyb3IpIHtcblx0XHRcdGxvZ2dlci5sb2coJ2Vycm9yJywgYE9wdGltb3ZlU0RLOiBnZXRQZXJzaXN0ZWRTREtMb2NhbERhdGFzICgpIEZhaWxlZCBlcnJvciA9ICR7ZXJyb3J9YCk7XG5cdFx0XHRyZXR1cm4gbnVsbDtcblx0XHR9XG5cdH07XG5cblx0LyoqXG5cdCAqIEdldCBWaXNpdG9yIElEXG5cdCAqIElmIHZpc2l0b3JJZCBub3QgZXhpc3QgaW4gTG9jYWwgU3RvcmFnZSwgdGhlbiByZXR1cm4gbnVsbFxuXHQgKiBAcmV0dXJucyB7e3ZhbHVlOiBzdHJpbmcsIGtleTogKn18bnVsbH1cblx0ICovXG5cdGNvbnN0IGdldFZpc2l0b3JJZCA9ICgpID0+IHtcblx0XHRyZXR1cm4gZ2V0UGVyc2lzdGVkU0RLTG9jYWxEYXRhKHZpc2l0b3JJREtleSkgfHwgbnVsbDtcblx0fTtcblxuXHQvKipcblx0ICogU2V0IFZpc2l0b3IgSURcblx0ICogVGhpcyByZWZsZWN0cyB0aGUgdXBkYXRlZCB2aXNpdG9ySWRcblx0ICogQHBhcmFtIHZpc2l0b3JJZFxuXHQgKi9cblx0Y29uc3Qgc2V0VmlzaXRvcklkID0gKHZpc2l0b3JJZCkgPT4ge1xuXHRcdHBlcnNpc3RTREtMb2NhbERhdGEodmlzaXRvcklES2V5LCB2aXNpdG9ySWQpO1xuXHR9O1xuXG5cdC8qKlxuXHQgKiBHZW5lcmF0ZXMgdmlzaXRvcklkIGFzIFVVSUQgaWYgbm90IGV4aXN0IGluIExvY2FsIFN0b3JhZ2Vcblx0ICogSW4gY2FzZSBnZW5lcmF0aW5nIGEgbmV3IHZpc2l0b3JJZCwgcGVyc2lzdGluZyBpdCBpbiBMb2NhbCBTdG9yYWdlXG5cdCAqIEByZXR1cm5zIHt7dmFsdWU6IHN0cmluZywga2V5OiAqfXxudWxsfHVuZGVmaW5lZH0gdGhlIGdlbmVyYXRlZCB2aXNpdG9ySWRcblx0ICovXG5cdGNvbnN0IGdlbmVyYXRlVmlzaXRvcklkID0gKCkgPT4ge1xuXHRcdGxldCB2aXNpdG9ySWQgPSBnZXRQZXJzaXN0ZWRTREtMb2NhbERhdGEodmlzaXRvcklES2V5KTtcblx0XHRsZXQgb3JpZ2luYWxWaXNpdG9ySWQgPSBnZXRQZXJzaXN0ZWRTREtMb2NhbERhdGEob3JpZ2luYWxWaXNpdG9ySURLZXkpO1xuXHRcdGlmICghdmlzaXRvcklkKSB7XG5cdFx0XHR2aXNpdG9ySWQgPSBfVG9vbHMuZ2VuZXJhdGVVVUlEKCk7XG5cdFx0XHRwZXJzaXN0U0RLTG9jYWxEYXRhKHZpc2l0b3JJREtleSwgdmlzaXRvcklkKTtcblx0XHR9XG5cdFx0aWYgKCFvcmlnaW5hbFZpc2l0b3JJZCkge1xuXHRcdFx0Ly8gQmFja3dhcmQgQ29tcGF0aWJpbGl0eSAtIGdldCBvbGQgT3JpZ2luYWwgVmlzaXRvciBJZCBmcm9tIFBpd2lrJ3MgY29va2llXG5cdFx0XHRsZXQgY29va2llTmFtZSA9IGBfcGtfaWQuJHtfY29uZmlndXJhdGlvbi5vcHRpdHJhY2tNZXRhRGF0YS5zaXRlSWR9LmA7XG5cdFx0XHRsZXQgY29va2llT3JpZ2luYWxWaXNpdG9ySWRTdHJpbmcgPSBkb2N1bWVudC5jb29raWUubWF0Y2gobmV3IFJlZ0V4cCgnKF58ICknICsgY29va2llTmFtZSArICcuezEsfT0oW147XSspJykpO1xuXHRcdFx0bGV0IGNvb2tpZU9yaWdpbmFsVmlzaXRvcklkID0gQXJyYXkuaXNBcnJheShjb29raWVPcmlnaW5hbFZpc2l0b3JJZFN0cmluZykgJiYgY29va2llT3JpZ2luYWxWaXNpdG9ySWRTdHJpbmdbMl0gIT0gbnVsbCA/IGNvb2tpZU9yaWdpbmFsVmlzaXRvcklkU3RyaW5nWzJdLnNwbGl0KCcuJylbMF0gOiBudWxsO1xuXHRcdFx0cGVyc2lzdFNES0xvY2FsRGF0YShvcmlnaW5hbFZpc2l0b3JJREtleSwgY29va2llT3JpZ2luYWxWaXNpdG9ySWQgfHwgdmlzaXRvcklkKTtcblx0XHRcdHBlcnNpc3RTREtMb2NhbERhdGEodmlzaXRGaXJzdERhdGVLZXksIG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSk7XG5cdFx0fVxuXHRcdHJldHVybiB2aXNpdG9ySWQ7XG5cdH07XG5cblx0LyoqXG5cdCAqIEdldCBPcmlnaW5hbCBWaXNpdG9yIElEXG5cdCAqIElmIG9yaWdpbmFsVmlzaXRvcklkIG5vdCBleGlzdCBpbiBMb2NhbCBTdG9yYWdlLCB0aGVuIHJldHVybiBudWxsXG5cdCAqIEByZXR1cm5zIHt7dmFsdWU6IHN0cmluZywga2V5OiAqfXxudWxsfVxuXHQgKi9cblx0Y29uc3QgZ2V0T3JpZ2luYWxWaXNpdG9ySWQgPSAoKSA9PiB7XG5cdFx0cmV0dXJuIGdldFBlcnNpc3RlZFNES0xvY2FsRGF0YShvcmlnaW5hbFZpc2l0b3JJREtleSkgfHwgbnVsbDtcblx0fTtcblxuXHQvKipcblx0ICogU2V0IE9yaWdpbmFsIFZpc2l0b3IgSURcblx0ICogVGhpcyByZWZsZWN0cyB0aGUgb3JpZ2luYWxWaXNpdG9ySWRcblx0ICogQHBhcmFtIHZpc2l0b3JJZFxuXHQgKi9cblx0Y29uc3Qgc2V0T3JpZ2luYWxWaXNpdG9ySWQgPSAob3JpZ2luYWxWaXNpdG9ySWQpID0+IHtcblx0XHRwZXJzaXN0U0RLTG9jYWxEYXRhKG9yaWdpbmFsVmlzaXRvcklES2V5LCBvcmlnaW5hbFZpc2l0b3JJZCk7XG5cdH07XG5cblx0LyoqXG5cdCAqIEdldCBVc2VyIElELlxuXHQgKiBJZiB1c2VySWQgbm90IGV4aXN0IGluIExvY2FsIFN0b3JhZ2UsIHRoZW4gcmV0dXJuIG51bGxcblx0ICogQHJldHVybnMge3t2YWx1ZTogc3RyaW5nLCBrZXk6ICp9fG51bGx9XG5cdCAqL1xuXHRjb25zdCBnZXRVc2VySWQgPSAoKSA9PiB7XG5cdFx0cmV0dXJuIGdldFBlcnNpc3RlZFNES0xvY2FsRGF0YShjbGllbnRDdXN0b21lcklES2V5KTtcblx0fTtcblxuXHQvKipcblx0ICogU2V0IFVzZXIgSURcblx0ICogU3RvcmUgaXQgaW4gTG9jYWwgU3RvcmFnZVxuXHQgKiBAcGFyYW0gdXNlcklkXG5cdCAqL1xuXHRjb25zdCBzZXRVc2VySWQgPSAodXNlcklkKSA9PiB7XG5cdFx0cGVyc2lzdFNES0xvY2FsRGF0YShjbGllbnRDdXN0b21lcklES2V5LCB1c2VySWQpO1xuXHR9O1xuXG5cdC8qKlxuXHQgKiBHZXQgdXNlciBpbmZvXG5cdCAqIEByZXR1cm5zIHt7dXNlcklkOiAoe3ZhbHVlOiBzdHJpbmcsIGtleTogKn18bnVsbCksIG9yaWdpbmFsVmlzaXRvcklkOiAqLCB1cGRhdGVkVmlzaXRvcklkOiAoe3ZhbHVlOiBzdHJpbmcsIGtleTogKn18bnVsbCl9fVxuXHQgKi9cblx0Y29uc3QgZ2V0VXNlckluZm8gPSAoKSA9PiB7XG5cdFx0cmV0dXJuIHtcblx0XHRcdHVzZXJJZDogZ2V0VXNlcklkKCksXG5cdFx0XHRvcmlnaW5hbFZpc2l0b3JJZDogZ2V0T3JpZ2luYWxWaXNpdG9ySWQoKSxcblx0XHRcdHVwZGF0ZWRWaXNpdG9ySWQ6IGdldFZpc2l0b3JJZCgpXG5cdFx0fTtcblx0fTtcblxuXHQvKipcblx0ICogR2V0IGZpcnN0IHZpc2l0IGRhdGUgZm9yIFJlYWx0aW1lIG1ldGFkYXRhXG5cdCAqIEByZXR1cm5zIHtzdHJpbmd8bnVsbH1cblx0ICovXG5cdGNvbnN0IGdldEZpcnN0VmlzaXREYXRlID0gKCkgPT4ge1xuXHRcdHJldHVybiBnZXRQZXJzaXN0ZWRTREtMb2NhbERhdGEodmlzaXRGaXJzdERhdGVLZXkpIHx8IG51bGw7XG5cdH07XG5cblx0LyoqXG5cdCAqIENoZWNrcyBpZiB0aGUgV2ViIFNESyBUZXN0IFRvb2wgaXMgb3BlbiBieSBjaGVja2luZyB3aGF0IGlzIGluIHRoZSBzZXNzaW9uIHN0b3JhZ2UuXG5cdCAqIEByZXR1cm5zIHtib29sZWFufVxuXHQgKi9cblx0Y29uc3Qgb3B0bXZJc09wZW4gPSAoKSA9PiB7XG5cdFx0dHJ5IHtcblx0XHRcdGxldCBhID0gd2luZG93LnNlc3Npb25TdG9yYWdlLmdldEl0ZW0oJ2lzU2lkZUJhclNob3VsZEJlT3BlbicpO1xuXHRcdFx0cmV0dXJuIGEgPT0gJ3RydWUnID8gdHJ1ZSA6IGZhbHNlO1xuXHRcdH0gY2F0Y2ggKGVycm9yKSB7XG5cdFx0bG9nZ2VyLmxvZygnZXJyb3InLCBgV2ViIHNkayB0ZXN0IHRvb2wgOiBzZXNzaW9uIHN0b3JhZ2UgYWNjZXNzIGhhcyBmYWlsZWQgOiAgJHtlcnJvcn1gKTtcblx0fVxuXHR9O1xuXG5cdC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXHQvLyBGdW5jdGlvbjogbm9ybWFsaXplRXZlbnRQYXJhbWV0ZXJzXG5cdC8vIEFyZ3M6IGV2ZW50X3BhcmFtZXRlcnNcblx0Ly8gTm9ybWFsaXppbmcgdGhlIGV2ZW50IHBhcmFtZXRlcnMgdmFsdWVzXG5cdC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXHRjb25zdCBub3JtYWxpemVFdmVudFBhcmFtZXRlcnMgPSAoZXZlbnRfcGFyYW1ldGVycykgPT4ge1xuXHRcdGlmIChldmVudF9wYXJhbWV0ZXJzID09IG51bGwpIHtcblx0XHRcdGxvZ2dlci5sb2coJ2luZm8nLCAnbm9ybWFsaXplRXZlbnRQYXJhbWV0ZXJzOiBldmVudCBwYXJhbWV0ZXIgaXMgbnVsbCcpO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGxldCBwYXJhbWV0ZXJOYW1lcyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGV2ZW50X3BhcmFtZXRlcnMpO1xuXHRcdGxldCBjb3VudGVyID0gMTtcblx0XHRwYXJhbWV0ZXJOYW1lcy5mb3JFYWNoKChwYXJhbU5hbWUpID0+IHtcblx0XHRcdGlmIChjb3VudGVyID4gX2NvbmZpZ3VyYXRpb24ub3B0aXRyYWNrTWV0YURhdGEubWF4QWN0aW9uQ3VzdG9tRGltZW5zaW9ucykge1xuXHRcdFx0XHQvL2luIGNhc2UgdGhlIG51bWJlciBvZiBwYXJhbWV0ZXJzIGlzIGV4Y2VlZGluZyB0aGUgYWxsb3dlZCBudW1iZXIsIHdlIHJlbW92ZSBzb21lIG9mIHRoZW0uXG5cdFx0XHRcdGRlbGV0ZSAoZXZlbnRfcGFyYW1ldGVyc1twYXJhbU5hbWVdKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGxldCBjdXJyUGFyYW1WYWx1ZSA9IGV2ZW50X3BhcmFtZXRlcnNbcGFyYW1OYW1lXTtcblx0XHRcdFx0aWYgKHR5cGVvZiBjdXJyUGFyYW1WYWx1ZSA9PSBcInN0cmluZ1wiKSB7XG5cdFx0XHRcdFx0bGV0IG5vcm1hbGl6ZWRWYWx1ZSA9IGN1cnJQYXJhbVZhbHVlLnRyaW0oKTtcblx0XHRcdFx0XHQvL25vcm1hbGl6ZWRWYWx1ZSA9IG5vcm1hbGl6ZWRWYWx1ZTsgLy8gcmVtb3ZlZCB0b0xvd2VyQ2FzZSBvbiBpdGVtIDI0Mjk2XG5cdFx0XHRcdFx0ZXZlbnRfcGFyYW1ldGVyc1twYXJhbU5hbWVdID0gbm9ybWFsaXplZFZhbHVlO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRpZiAocGFyYW1OYW1lID09ICdjdXN0b21VUkwnKSB7XG5cdFx0XHRcdC8vSW4gY2FzZSBvZiBVUkwgcGFyYW1ldGVyIGZyb20gc2V0IHBhZ2UgdmlzaXQgZXZlbnQsIHRoZSBVUkwgc2hvdWxkIGJlIGNsZWFuZWQgZnJvbSB0aGUgcHJvdG9jb2wgKGh0dHAvcylcblx0XHRcdFx0ZXZlbnRfcGFyYW1ldGVyc1twYXJhbU5hbWVdID0gX1Rvb2xzLmNsZWFuVXJsKGV2ZW50X3BhcmFtZXRlcnNbcGFyYW1OYW1lXSkudG9Mb3dlckNhc2UoKTtcblx0XHRcdH1cblx0XHRcdGNvdW50ZXIrKztcblx0XHR9KTtcblx0XHRyZXR1cm4gZXZlbnRfcGFyYW1ldGVycztcblx0fTtcblxuXHQvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblx0Ly8gRnVuY3Rpb246IGdldFBsYWZvcm1JbmZvRnJvbVVzZXJBZ2VudFxuXHQvLyBBcmdzOiBudWxsXG5cdC8vIERlc2NyaXB0aW9uOiBydW5zIHRocm91Z2ggdGhlIFVzZXItQWdlbnRcblx0Ly8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cdGNvbnN0IGdldFVBSW5mb0FzeW5jID0gKGNvbmZpZ3VyYXRpb24sIGNhbGxiYWNrKSA9PiB7XG5cblx0XHR2YXIgdXNlcmFnZW50ID0gd2luZG93Lm5hdmlnYXRvci51c2VyQWdlbnQ7XG5cdFx0dmFyIHhtbGh0dHAgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcblx0XHR2YXIgdXJsID0gY29uZmlndXJhdGlvbi5zZGtTZXJ2aWNlc0VuZFBvaW50O1xuXHRcdHZhciBYTUxIdHRwUmVxdWVzdF9Eb25lID0gNDtcblx0XHR4bWxodHRwLm9wZW4oXCJHRVRcIiwgdXJsLCB0cnVlKTtcblx0XHR4bWxodHRwLnNldFJlcXVlc3RIZWFkZXIoXCJDb250ZW50LVR5cGVcIiwgXCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQ7Y2hhcnNldD11dGYtOFwiKTtcblxuXHRcdHhtbGh0dHAub25yZWFkeXN0YXRlY2hhbmdlID0gZnVuY3Rpb24gKCkge1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0aWYgKHhtbGh0dHAucmVhZHlTdGF0ZSA9PSBYTUxIdHRwUmVxdWVzdF9Eb25lICYmIHhtbGh0dHAuc3RhdHVzID09IDIwMCkge1xuXHRcdFx0XHRcdHZhciByZXNwb25zZURhdGEgPSBKU09OLnBhcnNlKHhtbGh0dHAucmVzcG9uc2VUZXh0KTtcblx0XHRcdFx0XHRsb2dnZXIubG9nKFwiaW5mb1wiLCByZXNwb25zZURhdGEpO1xuXHRcdFx0XHRcdGlmIChjYWxsYmFjaykge1xuXHRcdFx0XHRcdFx0Y2FsbGJhY2socmVzcG9uc2VEYXRhKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH0gY2F0Y2ggKGVycikge1xuXHRcdFx0XHRsb2dnZXIubG9nKFwiZXJyb3JcIiwgZXJyKTtcblx0XHRcdH1cblx0XHR9O1xuXG5cdFx0eG1saHR0cC5zZW5kKCk7XG5cdH07XG5cblx0Ly8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cdC8vIEZ1bmN0aW9uOiBVc2VyQWdlbnRjYWxsQmFja0Z1bmNcblx0Ly8gQXJnczogbnVsbFxuXHQvLyBEZXNjcmlwdGlvbjogcnVucyB0aHJvdWdoIHRoZSBVc2VyLUFnZW50XG5cdC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXHQvL3VzZXJBZ2VudCBQYXJ0czogd2luZG93Lm5hdmlnYXRvci51c2VyQWdlbnRcblx0Ly8gYXBwQ29kZU5hbWUvYXBwVmVyc2lvbiBudW1iZXJcblx0Ly8gKFBsYXRmb3JtOyBTZWN1cml0eTsgT1Mtb3ItQ1BVO0xvY2FsaXphdGlvbjsgcnY6IHJldmlzaW9uLXZlcnNpb24tbnVtYmVyKVxuXHQvLyAgcHJvZHVjdC9wcm9kdWN0U3ViIEFwcGxpY2F0aW9uLU5hbWUgQXBwbGljYXRpb24tTmFtZS12ZXJzaW9uXG5cdC8ve1xuXHQvLyAgIFwidWFcIjogXCJNb3ppbGxhLzUuMCAoTGludXg7IEFuZHJvaWQgNS4xLjE7IE5leHVzIDUgQnVpbGQvTE1ZNDhCOyB3dikgQXBwbGVXZWJLaXQvNTM3LjM2IChLSFRNTCwgbGlrZSBHZWNrbykgVmVyc2lvbi80LjAgQ2hyb21lLzQzLjAuMjM1Ny42NSBNb2JpbGUgU2FmYXJpLzUzNy4zNlwiLFxuXHQvLyAgIFwiYnJvd3NlclwiOiB7XG5cdC8vICAgICBcIm5hbWVcIjogXCJDaHJvbWUgV2ViVmlld1wiLFxuXHQvLyAgICAgXCJ2ZXJzaW9uXCI6IFwiNDMuMC4yMzU3LjY1XCIsXG5cdC8vICAgICBcIm1ham9yXCI6IFwiNDNcIlxuXHQvLyAgIH0sXG5cdC8vICAgXCJlbmdpbmVcIjoge1xuXHQvLyAgICAgXCJuYW1lXCI6IFwiV2ViS2l0XCIsXG5cdC8vICAgICBcInZlcnNpb25cIjogXCI1MzcuMzZcIlxuXHQvLyAgIH0sXG5cdC8vICAgXCJvc1wiOiB7XG5cdC8vICAgICBcIm5hbWVcIjogXCJBbmRyb2lkXCIsXG5cdC8vICAgICBcInZlcnNpb25cIjogXCI1LjEuMVwiXG5cdC8vICAgfSxcblx0Ly8gICBcImRldmljZVwiOiB7XG5cdC8vICAgICBcInZlbmRvclwiOiBcIkxHXCIsXG5cdC8vICAgICBcIm1vZGVsXCI6IFwiTmV4dXMgNVwiLFxuXHQvLyAgICAgXCJ0eXBlXCI6IFwibW9iaWxlXCJcblx0Ly8gICB9LFxuXHQvLyAgIFwiY3B1XCI6IHt9XG5cdC8vIH1cblx0Ly8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cdGNvbnN0IFVzZXJBZ2VudGNhbGxCYWNrRnVuYyA9IChyZXNwb25zZURhdGEpID0+IHtcblx0XHRsZXQgZGV2aWNlVHlwZSA9IFwiZGVza3RvcFwiO1xuXHRcdGxldCBuYXRpdmVNb2JpbGUgPSBcImZhbHNlXCI7XG5cdFx0bGV0IHBsYXRmb3JtID0gXCJ3aW5kb3dzXCI7XG5cdFx0bGV0IGRldmljZU9TID0gXCJcIjtcblx0XHRpZiAodHlwZW9mIHJlc3BvbnNlRGF0YSAhPSAndW5kZWZpbmVkJykge1xuXHRcdFx0bGV0IG9zTmFtZSA9IHJlc3BvbnNlRGF0YS5vcy5uYW1lO1xuXHRcdFx0bGV0IG9zVmVyc2lvbiA9IHJlc3BvbnNlRGF0YS5vcy52ZXJzaW9uO1xuXHRcdFx0cGxhdGZvcm0gPSBvc05hbWU7XG5cdFx0XHRkZXZpY2VPUyA9IG9zTmFtZSArIFwiIFwiICsgb3NWZXJzaW9uO1xuXHRcdFx0bGV0IGRldmljZUluZm9LZXlzID0gT2JqZWN0LmtleXMocmVzcG9uc2VEYXRhLmRldmljZSk7XG5cdFx0XHRpZiAoZGV2aWNlSW5mb0tleXMubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRpZiAodHlwZW9mIHJlc3BvbnNlRGF0YS5kZXZpY2UudHlwZSAhPSAndW5kZWZpbmVkJykge1xuXHRcdFx0XHRcdGRldmljZVR5cGUgPSByZXNwb25zZURhdGEuZGV2aWNlLnR5cGU7XG5cdFx0XHRcdFx0bG9nZ2VyLmxvZyhcImluZm9cIiwgXCJmb3VuZCBkZXZpY2VUeXBlPVwiICsgZGV2aWNlVHlwZSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0cGVyc2lzdFNES0xvY2FsRGF0YShldmVudFBsYXRmb3JtSURLZXksIHBsYXRmb3JtKTtcblx0XHRcdHBlcnNpc3RTREtMb2NhbERhdGEoZXZlbnREZXZpY2VUeXBlSURLZXksIGRldmljZVR5cGUpO1xuXHRcdFx0cGVyc2lzdFNES0xvY2FsRGF0YShldmVudE9TSURLZXksIGRldmljZU9TKTtcblx0XHRcdHBlcnNpc3RTREtMb2NhbERhdGEoZXZlbnROYXRpdmVNb2JpbGUsIG5hdGl2ZU1vYmlsZSk7XG5cdFx0fVxuXHR9O1xuXG5cdC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXHQvLyBGdW5jdGlvbjogZ2V0UGxhZm9ybUluZm9Gcm9tVXNlckFnZW50XG5cdC8vIEFyZ3M6IG51bGxcblx0Ly8gRGVzY3JpcHRpb246IHJ1bnMgdGhyb3VnaCB0aGUgVXNlci1BZ2VudFxuXHQvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblx0Y29uc3QgZ2V0UGxhZm9ybUluZm9Gcm9tVXNlckFnZW50ID0gKGNvbmZpZ3VyYXRpb24pID0+IHtcblx0XHRsZXQgcGxhdGZvcm0gPSBnZXRQZXJzaXN0ZWRTREtMb2NhbERhdGEoZXZlbnRQbGF0Zm9ybUlES2V5KTtcblx0XHRpZiAodHlwZW9mIHBsYXRmb3JtID09ICd1bmRlZmluZWQnKSB7XG5cdFx0XHRnZXRVQUluZm9Bc3luYyhjb25maWd1cmF0aW9uLCBVc2VyQWdlbnRjYWxsQmFja0Z1bmMpO1xuXHRcdH1cblxuXHR9O1xuXG5cdC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXHQvLyBGdW5jdGlvbjogZ2V0VmlzaXRvcnNJbmZvT2JqXG5cdC8vIEFyZ3M6IG51bGxcblx0Ly8gRGVzY3JpcHRpb246IEdldCBPcHRpdHJhY2sgVmlzaXRvciBJbmZvXG5cdC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXHRjb25zdCBnZXRWaXNpdG9yc0luZm9PYmogPSAoKSA9PiB7XG5cdFx0bGV0IHZpc2l0b3JzSW5mbyA9IG9wdGl0cmFja01vZHVsZS5nZXRPcHRpdHJhY2tWaXNpdG9ySW5mbygpO1xuXHRcdGxldCB2aXNpdG9ySW5mb09iamVjdCA9IG5ldyBPYmplY3QoKTtcblxuXHRcdGlmICh2aXNpdG9yc0luZm8gIT0gdW5kZWZpbmVkKSB7XG5cdFx0XHR2aXNpdG9ySW5mb09iamVjdC52aXNpdG9ySWQgPSB2aXNpdG9yc0luZm9bMV07XG5cdFx0XHR2aXNpdG9ySW5mb09iamVjdC52aXNpdENvdW50ID0gdmlzaXRvcnNJbmZvWzNdO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRsb2dnZXIubG9nKFwiZXJyb3JcIiwgXCJpbiBnZXRWaXNpdG9yc0luZm9PYmogT3B0aXRyYWNrXCIpO1xuXHRcdFx0dmlzaXRvckluZm9PYmplY3QgPSB1bmRlZmluZWQ7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHZpc2l0b3JJbmZvT2JqZWN0O1xuXHR9O1xuXG5cdGNvbnN0IGdldEFkZGl0aW9uYWxBdHRyaWJ1dGVzVG9FdmVudCA9ICgpID0+IHtcblx0XHRyZXR1cm4ge1xuXHRcdFx0ZXZlbnRfcGxhdGZvcm06IGdldFBlcnNpc3RlZFNES0xvY2FsRGF0YShldmVudFBsYXRmb3JtSURLZXkpLFxuXHRcdFx0ZXZlbnRfZGV2aWNlX3R5cGU6IGdldFBlcnNpc3RlZFNES0xvY2FsRGF0YShldmVudERldmljZVR5cGVJREtleSksXG5cdFx0XHRldmVudF9vczogZ2V0UGVyc2lzdGVkU0RLTG9jYWxEYXRhKGV2ZW50T1NJREtleSksXG5cdFx0XHRldmVudF9uYXRpdmVfbW9iaWxlOiBnZXRQZXJzaXN0ZWRTREtMb2NhbERhdGEoZXZlbnROYXRpdmVNb2JpbGUpXG5cdFx0fTtcblx0fVxuXG5cdGNvbnN0IHJlYWx0aW1lTW9kdWxlID0gKCgpID0+IHtcblx0XHRsZXQgX3BvcHVwO1xuXHRcdGxldCBfZXhlY3V0aW9uSW5Qcm9jZXNzID0gZmFsc2U7XG5cdFx0bGV0IF9ydF9lbmRwb2ludCA9ICcnO1xuXG5cdFx0Y29uc3QgaW5pdGlhbGl6ZVJlYWx0aW1lID0gKGNhbGxiYWNrKSA9PiB7XG5cdFx0XHRfcnRfZW5kcG9pbnQgPSBnZXRSZWFsdGltZUVuZHBvaW50RnJvbUNvbmZpZygpO1xuXHRcdFx0aWYgKGNhbGxiYWNrICYmIHR5cGVvZiBjYWxsYmFjayA9PT0gJ2Z1bmN0aW9uJykge1xuXHRcdFx0XHRjYWxsYmFjaygpO1xuXHRcdFx0fVxuXHRcdH07XG5cblx0XHRjb25zdCBjbG9zZVBvcHVwID0gKGVsZW1lbnQpID0+IHtcblx0XHRcdGlmIChlbGVtZW50KSB7XG5cdFx0XHRcdGlmIChlbGVtZW50ID09PSB0cnVlIHx8IGVsZW1lbnQudGFyZ2V0ID09IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdvcHRpUmVhbFBvcHVwRGltbWVyJykgfHwgZWxlbWVudC50YXJnZXQuaWQgPT0gXCJvcHRpUmVhbGNsb3NlUG9wdXBJbWFnZVwiKSB7XG5cdFx0XHRcdFx0ZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChfcG9wdXApO1xuXHRcdFx0XHRcdGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNlZG93bicsIGNsb3NlUG9wdXApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fTtcblxuXHRcdGNvbnN0IGV4ZWN1dGVQb3B1cCA9IChodG1sKSA9PiB7XG5cdFx0XHR0cnkge1xuXHRcdFx0XHRsZXQgcG9wdXBEaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcblx0XHRcdFx0bGV0IGRpdkh0bWwgPSAnJztcblx0XHRcdFx0bGV0IG9wYWNpdHkgPSBfY29uZmlndXJhdGlvbi5yZWFsdGltZU1ldGFEYXRhLm9wdGlvbnMuc2hvd0RpbW1lciA/IDAuNSA6IDA7XG5cdFx0XHRcdGRpdkh0bWwgPVxuXHRcdFx0XHRcdFwiPGRpdiBpZD0nb3B0aVJlYWxQb3B1cERpbW1lcicgc3R5bGU9J3Bvc2l0aW9uOiBmaXhlZDtib3R0b206IDA7cmlnaHQ6IDA7dG9wOiAwO2xlZnQ6IDA7b3ZlcmZsb3c6IGhpZGRlbjtkaXNwbGF5OiBub25lOyB6LWluZGV4Ojk5OTk5OTk5OTtiYWNrZ3JvdW5kOiAjMDAwMDAwO29wYWNpdHkgOiBcIiArXG5cdFx0XHRcdFx0b3BhY2l0eSArXG5cdFx0XHRcdFx0XCI7ZGlzcGxheTpibG9jazt3aWR0aDogYXV0bztoZWlnaHQ6IGF1dG87Jz48L2Rpdj5cIjtcblx0XHRcdFx0ZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcIm1vdXNlZG93blwiLCBjbG9zZVBvcHVwKTtcblx0XHRcdFx0bGV0IHBvd2VyZWRCeUh0bWwgPVxuXHRcdFx0XHRcdFwiPGRpdiBzdHlsZT0ncG9zaXRpb246IGFic29sdXRlO3otaW5kZXg6OTk5OTk5OTk5OTsgY2xlYXI6Ym90aDtmb250LWZhbWlseSA6IEFyaWFsO2ZvbnQtc2l6ZSA6IDlweDtjb2xvciA6ICNDQ0NDQ0M7cGFkZGluZy10b3A6NnB4O21hcmdpbi1sZWZ0OiA1cHg7Jz5Qb3dlcmVkIGJ5IE9wdGltb3ZlPC9kaXY+XCI7XG5cdFx0XHRcdGRpdkh0bWwgKz1cblx0XHRcdFx0XHRcIjxkaXYgc3R5bGU9J21heC1oZWlnaHQ6OTAlO21heC13aWR0aDo5MCU7dG9wOiA1MCU7bGVmdDogNTAlO3RyYW5zZm9ybTp0cmFuc2xhdGUoLTUwJSwgLTUwJSk7cG9zaXRpb246IGZpeGVkO3otaW5kZXg6OTk5OTk5OTk5OTsnPjxkaXYgc3R5bGU9JyBjbGVhcjpib3RoO21pbi13aWR0aDogMTAwcHg7bWluLWhlaWdodDogMTAwcHg7YmFja2dyb3VuZC1jb2xvcjp3aGl0ZTsgdGV4dC1hbGlnbjpjZW50ZXI7Ym94LXNoYWRvdzowIDAgNXB4IDAgcmdiYSgwLCAwLCAwLCAwLjIpOyc+PGRpdiBzdHlsZT0ncG9zaXRpb246YWJzb2x1dGU7cmlnaHQ6LTEzcHg7dG9wOi0xM3B4O2N1cnNvcjpwb2ludGVyO3otaW5kZXg6OTk5OTk5OTk5OTk7IGNvbG9yOndoaXRlJyBvbmNsaWNrPSdvcHRpbW92ZVNESy5BUEkuY2xvc2VSZWFsdGltZVBvcHVwKCk7Jz48aW1nIGlkPSdvcHRpUmVhbGNsb3NlUG9wdXBJbWFnZScgc3JjPSdodHRwczovL2QzcXljeW5ic3k1cnNuLmNsb3VkZnJvbnQubmV0L2Jhbm5lcl9wb3BfeC5wbmcnIC8+PC9kaXY+PGRpdj5cIiArXG5cdFx0XHRcdFx0aHRtbCArXG5cdFx0XHRcdFx0XCI8L2Rpdj48L2Rpdj5cIiArXG5cdFx0XHRcdFx0KF9jb25maWd1cmF0aW9uLnJlYWx0aW1lTWV0YURhdGEub3B0aW9ucy5zaG93RGltbWVyICYmXG5cdFx0XHRcdFx0X2NvbmZpZ3VyYXRpb24ucmVhbHRpbWVNZXRhRGF0YS5vcHRpb25zLnNob3dXYXRlcm1hcmsgP1xuXHRcdFx0XHRcdFx0cG93ZXJlZEJ5SHRtbCA6XG5cdFx0XHRcdFx0XHRcIlwiKSArXG5cdFx0XHRcdFx0XCI8L2Rpdj5cIjtcblx0XHRcdFx0cG9wdXBEaXYuaW5uZXJIVE1MID0gZGl2SHRtbDtcblx0XHRcdFx0X3BvcHVwID0gcG9wdXBEaXY7XG5cdFx0XHRcdGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQocG9wdXBEaXYpO1xuXHRcdFx0XHRsZXQgc2NyaXB0VGFncyA9IHBvcHVwRGl2LmdldEVsZW1lbnRzQnlUYWdOYW1lKFwic2NyaXB0XCIpO1xuXHRcdFx0XHRpZiAoc2NyaXB0VGFncy5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdFx0d2luZG93LmV2YWwoc2NyaXB0VGFnc1swXS5pbm5lclRleHQpO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGNhdGNoIChlcnIpIHtcblx0XHRcdFx0bG9nZ2VyLmxvZygnZXJyb3InLCBgRXJyb3Igd2hpbGUgZXhlY3V0aW5nIHBvcHVwICR7ZXJyfWApO1xuXHRcdFx0fVxuXHRcdH07XG5cblx0XHQvKipcblx0XHQgKiBTaG91bGQgZXhlY3V0ZSBjaGVja3MgaWYgdGhlIHBvcHVwIHNob3VsZCBleGVjdXRlIGFuZCBkaXNwbGF5IG9uIHRoZSBzY3JlZW5cblx0XHQgKiBUaGUgbG9jYWwgc3RvcmFnZSBjb3VudGVyIGlzIHZhbGlkIG9ubHkgaWYgdGhlIGRhdGUgaW4gdGhlIGxvY2FsIHN0b3JhZ2UgaXMgdmFsaWQgPT4gZGF0ZXRpbWUgaGFzIG5vdCBwYXNzZWQuXG5cdFx0ICogaWYgaXQgcGFzc2VkIEkgc2hvdWxkIHRha2UgdGhlIGNvdW50ZXIgaW5mb3JtYXRpb24gZnJvbSB0aGUgcmVzcG9uc2UuXG5cdFx0ICogQHBhcmFtIHZpc2l0b3JJZFxuXHRcdCAqIEBwYXJhbSBjYW1wYWlnbklkXG5cdFx0ICogQHBhcmFtIHJlY3VycmVuY2VGcmFtZVN0b3BUaW1lXG5cdFx0ICogQHBhcmFtIHJlY3VycmVuY2VMZWZ0XG5cdFx0ICogQHJldHVybnMge2Jvb2xlYW59XG5cdFx0ICovXG5cdFx0Y29uc3Qgc2hvdWxkRXhlY3V0ZSA9ICh2aXNpdG9ySWQsIGNhbXBhaWduSWQsIHJlY3VycmVuY2VGcmFtZVN0b3BUaW1lLCByZWN1cnJlbmNlTGVmdCkgPT4ge1xuXHRcdFx0aWYgKCFjYW1wYWlnbklkIHx8IHR5cGVvZiAoY2FtcGFpZ25JZCkgPT0gJ3VuZGVmaW5lZCcgfHwgY2FtcGFpZ25JZCA9PSAwKSB7XG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdH1cblx0XHRcdGlmIChyZWN1cnJlbmNlTGVmdCA9PSBudWxsIHx8IHJlY3VycmVuY2VGcmFtZVN0b3BUaW1lID09IG51bGwpIHtcblx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHR9XG5cdFx0XHRsZXQgbHNDYW1wYWlnbiA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdvcHRpbW92ZV9wb3B1cF8nICsgY2FtcGFpZ25JZCArICdfJyArIHZpc2l0b3JJZCk7XG5cdFx0XHRsZXQgb2JqID0ge307XG5cdFx0XHRpZiAobHNDYW1wYWlnbikge1xuXHRcdFx0XHRsc0NhbXBhaWduID0gSlNPTi5wYXJzZShsc0NhbXBhaWduKTtcblx0XHRcdFx0bGV0IGQxID0gbmV3IERhdGUobHNDYW1wYWlnbi5yZWN1cnJlbmNlRnJhbWVTdG9wVGltZSk7IC8vIHRpbWVGcmFtZSB3ZSBoYXZlIGluIGxvY2FsIHN0b3JhZ2Vcblx0XHRcdFx0bGV0IGQyID0gbmV3IERhdGUobmV3IERhdGUoKS50b0lTT1N0cmluZygpKTsgLy8gQ3VycmVudCB0aW1lXG5cdFx0XHRcdGxldCBtaW5Db3VudGVyO1xuXHRcdFx0XHRpZiAoZDEgPiBkMikge1xuXHRcdFx0XHRcdG1pbkNvdW50ZXIgPSBNYXRoLm1pbihyZWN1cnJlbmNlTGVmdCwgbHNDYW1wYWlnbi5yZWN1cnJlbmNlTGVmdCk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0bWluQ291bnRlciA9IHJlY3VycmVuY2VMZWZ0O1xuXHRcdFx0XHRcdG9iai5yZWN1cnJlbmNlRnJhbWVTdG9wVGltZSA9IHJlY3VycmVuY2VGcmFtZVN0b3BUaW1lXG5cdFx0XHRcdH1cblx0XHRcdFx0cmVjdXJyZW5jZUxlZnQgPSBtaW5Db3VudGVyO1xuXHRcdFx0fVxuXHRcdFx0b2JqLnJlY3VycmVuY2VGcmFtZVN0b3BUaW1lID0gcmVjdXJyZW5jZUZyYW1lU3RvcFRpbWU7XG5cdFx0XHRvYmoucmVjdXJyZW5jZUxlZnQgPSByZWN1cnJlbmNlTGVmdCAtIDE7XG5cdFx0XHRsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgnb3B0aW1vdmVfcG9wdXBfJyArIGNhbXBhaWduSWQgKyAnXycgKyB2aXNpdG9ySWQsIEpTT04uc3RyaW5naWZ5KG9iaikpO1xuXHRcdFx0aWYgKHJlY3VycmVuY2VMZWZ0IDw9IDApIHtcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fTtcblxuXHRcdGNvbnN0IHBvc3RSZWFsdGltZUV2ZW50ID0gYXN5bmMgKGRhdGEpID0+IHtcblx0XHRcdHRyeSB7XG5cdFx0XHRcdGxldCByZXNwb25zZURhdGEgPSBkYXRhLnJlc3BvbnNlO1xuXHRcdFx0XHRpZiAocmVzcG9uc2VEYXRhLklzU3VjY2VzcyAmJiByZXNwb25zZURhdGEuRGF0YSAmJiByZXNwb25zZURhdGEuTWV0YWRhdGEpIHtcblx0XHRcdFx0XHRpZiAoIXJlc3BvbnNlRGF0YS5NZXRhZGF0YS5kZWxheVZhbHVlKSB7XG5cdFx0XHRcdFx0XHRyZXNwb25zZURhdGEuTWV0YWRhdGEuZGVsYXlWYWx1ZSA9IDA7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGxldCBjYW1wYWlnbklkID0gcmVzcG9uc2VEYXRhLk1ldGFkYXRhLmNhbXBhaWduRGV0YWlsSWQgPyBwYXJzZUludChyZXNwb25zZURhdGEuTWV0YWRhdGEuY2FtcGFpZ25EZXRhaWxJZCkgOiAxO1xuXHRcdFx0XHRcdGxldCB0ZW1wbGF0ZUlkID0gcmVzcG9uc2VEYXRhLk1ldGFkYXRhLnRlbXBsYXRlSWQgPyBwYXJzZUludChyZXNwb25zZURhdGEuTWV0YWRhdGEudGVtcGxhdGVJZCkgOiAwO1xuXHRcdFx0XHRcdGxldCBhY3Rpb25DaGFubmVsSWQgPSByZXNwb25zZURhdGEuTWV0YWRhdGEuYWN0aW9uQ2hhbm5lbElkID8gcGFyc2VJbnQocmVzcG9uc2VEYXRhLk1ldGFkYXRhLmFjdGlvbkNoYW5uZWxJZCkgOiAwO1xuXHRcdFx0XHRcdGxldCBzZW5kSWQgPSByZXNwb25zZURhdGEuTWV0YWRhdGEuc2VuZElkID8gcmVzcG9uc2VEYXRhLk1ldGFkYXRhLnNlbmRJZCA6IG51bGw7XG5cblx0XHRcdFx0XHRpZiAoIV9leGVjdXRpb25JblByb2Nlc3MpIHtcblx0XHRcdFx0XHRcdF9leGVjdXRpb25JblByb2Nlc3MgPSB0cnVlO1xuXHRcdFx0XHRcdFx0c2V0VGltZW91dCgoKSA9PiB7XG5cdFx0XHRcdFx0XHRcdGlmIChzaG91bGRFeGVjdXRlKGRhdGEudmlzaXRvcklkLCBjYW1wYWlnbklkLCByZXNwb25zZURhdGEuTWV0YWRhdGEucmVjdXJyZW5jZUZyYW1lU3RvcFRpbWUsIHJlc3BvbnNlRGF0YS5NZXRhZGF0YS5yZWN1cnJlbmNlTGVmdCkpIHtcblx0XHRcdFx0XHRcdFx0XHRpZiAoX2NvbmZpZ3VyYXRpb24ucmVhbHRpbWVNZXRhRGF0YS5vcHRpb25zLnBvcHVwQ2FsbGJhY2spIHtcblx0XHRcdFx0XHRcdFx0XHRcdC8vSW4gY2FzZSB0aGUgdXNlciBzZW5kcyB0aGVpciBvd24gcG9wdXAgaHRtbCBjb2RlIHdpdGggdGhlaXIgb3duIHJlbmRlcmluZyBmdW5jdGlvblxuXHRcdFx0XHRcdFx0XHRcdFx0X2NvbmZpZ3VyYXRpb24ucmVhbHRpbWVNZXRhRGF0YS5vcHRpb25zLnBvcHVwQ2FsbGJhY2socmVzcG9uc2VEYXRhKTtcblx0XHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdFx0Ly9PcHRpbW92ZSdzIGltcGxlbWVudGF0aW9uIG9mIHJlbmRlcmluZyB0aGUgcG9wdXAgdGVtcGxhdGUgLSBjcmVhdGVkIGluIE9wdGltb3ZlXG5cdFx0XHRcdFx0XHRcdFx0XHRleGVjdXRlUG9wdXAocmVzcG9uc2VEYXRhLkRhdGEpO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHQvLyByZXBvcnQgY29yZSBldmVudCAxMDA4XG5cdFx0XHRcdFx0XHRcdFx0bGV0IGV2ZW50SGFuZGxlciA9IGV2ZW50c0hhbmRsZXI7XG5cdFx0XHRcdFx0XHRcdFx0ZXZlbnRIYW5kbGVyLmxvZ0V2ZW50KGtleVdlYlBvcHVwRGlzcGxheWVkLCB7XG5cdFx0XHRcdFx0XHRcdFx0XHQnY2FtcGFpZ25fZGV0YWlsX2lkJzogY2FtcGFpZ25JZCxcblx0XHRcdFx0XHRcdFx0XHRcdCd0ZW1wbGF0ZV9pZCc6IHRlbXBsYXRlSWQsXG5cdFx0XHRcdFx0XHRcdFx0XHQnYWN0aW9uX2NoYW5uZWxfaWQnOiBhY3Rpb25DaGFubmVsSWQsXG5cdFx0XHRcdFx0XHRcdFx0XHQnc2VuZF9pZCc6IHNlbmRJZFxuXHRcdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0XHRcdGV2ZW50SGFuZGxlci5kaXNwYXRjaCgpLnRoZW4oZGF0YSA9PiB7XG5cdFx0XHRcdFx0XHRcdFx0XHRfZXhlY3V0aW9uSW5Qcm9jZXNzID0gZmFsc2U7XG5cdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gZGF0YTtcblx0XHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fSwgcmVzcG9uc2VEYXRhLk1ldGFkYXRhLmRlbGF5VmFsdWUgKiAxMDAwKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH0gY2F0Y2ggKGVycikge1xuXHRcdFx0XHRsb2dnZXIubG9nKCdlcnJvcicsIGVycik7XG5cdFx0XHR9XG5cdFx0fTtcblxuXHRcdGNvbnN0IGdldFJlYWx0aW1lRW5kcG9pbnRGcm9tQ29uZmlnID0gKCkgPT4ge1xuXHRcdFx0cmV0dXJuIGAke19jb25maWd1cmF0aW9uLnJlYWx0aW1lTWV0YURhdGEucmVhbHRpbWVHYXRld2F5fXJlcG9ydEV2ZW50YDtcblx0XHR9O1xuXG5cdFx0cmV0dXJuIHtcblx0XHRcdGluaXRpYWxpemVSZWFsdGltZTogaW5pdGlhbGl6ZVJlYWx0aW1lLFxuXHRcdFx0cG9zdFJlYWx0aW1lRXZlbnQ6IHBvc3RSZWFsdGltZUV2ZW50LFxuXHRcdFx0ZXhlY3V0ZVBvcHVwOiBleGVjdXRlUG9wdXAsXG5cdFx0XHRjbG9zZVBvcHVwOiBjbG9zZVBvcHVwLFxuXHRcdFx0Z2V0UmVhbHRpbWVFbmRwb2ludDogZ2V0UmVhbHRpbWVFbmRwb2ludEZyb21Db25maWdcblx0XHR9O1xuXHR9KSgpO1xuXG5cdGNvbnN0IG9wdGl0cmFja01vZHVsZSA9ICgoKSA9PiB7XG5cdFx0Ly8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEV2ZW50IENvbnN0IFZhbHVlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblx0XHR2YXIgU2V0VXNlcklkRXZlbnRfbmFtZSA9IFwic2V0X3VzZXJfaWRfZXZlbnRcIjtcblx0XHR2YXIgU2V0RW1haWxFdmVudF9uYW1lID0gXCJzZXRfZW1haWxfZXZlbnRcIjtcblx0XHR2YXIgb3JpZ2luYWxWaXNpdG9ySWRfcGFyYW1fbmFtZSA9IFwib3JpZ2luYWxWaXNpdG9ySWRcIjtcblx0XHR2YXIgdXNlcklkX3BhcmFtX25hbWUgPSBcInVzZXJJZFwiO1xuXHRcdHZhciB1cGRhdGVkVmlzaXRvcklkX3BhcmFtX25hbWUgPSBcInVwZGF0ZWRWaXNpdG9ySWRcIjtcblxuXHRcdHZhciB1c2VyQWdlbnRJREtleSA9IFwiMTE2MDJjOGI3NmZlNzYyNmNhNTg2MDgxYjk0ODkyZTRcIjtcblx0XHR2YXIgbGl2ZVJhbXBJREtleSA9IFwiNDAwN2QwYTQzMmFiNjI4OTcxMTk3NDE2M2IyNWEwNmRcIjtcblx0XHR2YXIgZGF0b25pY3NJREtleSA9IFwiNzVmOGM1ZmRhYjQzZGFjYTk5MWEzNWM4NTRhNWE2ZDJcIjtcblx0XHR2YXIgZ29vZ2xDb29raWVNYXRjaElES2V5ID0gXCI2MzRiZWI3Nzc3OWRjODAyNWU3NjE1Y2Y5NWZjZThmN1wiO1xuXHRcdHZhciBpc1JlcG9ydGVkQ29yZU1ldGFkYXRhID0gXCJhNWMxMjdlMTgwNjUyYzgyZTYxNWJlMTQzNjc3ZTI0OFwiO1xuXG5cdFx0Ly8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIE9wdGl0cmFjayBwcml2YXRlIHZhcmlhYmxlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblx0XHRsZXQgX290X2VuZHBvaW50ID0gbnVsbDtcblx0XHRsZXQgX3BhZ2VWaXNpdENvdW50ID0gMDtcblx0XHRsZXQgX3ByZXZpb3VzUGFnZVVybCA9IFwiXCI7XG5cblx0XHQvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gU0RLIHB1YmxpYyBtZW1iZXIgZnVuY3Rpb25zIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5cdFx0Ly8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cdFx0Ly8gRnVuY3Rpb246IGluaXRpYWxpemVcblx0XHQvLyBBcmdzOiBsb2dnZXIgLSBsb2cgb2JqZWN0LlxuXHRcdC8vIGNhbGxiYWNrX3JlYWR5IC0gY2FsbGJhIGNrd2hlbiBpbml0aWFsaXphdGlvbiBmaW5pc2hlZCBzdWNjZXNzZnVseVxuXHRcdC8vIEdldHMgdGhlIE9wdGltb3ZlIFNESyBWZXJpb25cblx0XHQvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblx0XHRjb25zdCBpbml0aWFsaXplT3B0aVRyYWNrID0gKGNhbGxiYWNrKSA9PiB7XG5cdFx0XHRfb3RfZW5kcG9pbnQgPSBnZXRPcHRpVHJhY2tFbmRwb2ludEZyb21Db25maWcoKTtcblx0XHRcdGlmIChjYWxsYmFjayAmJiB0eXBlb2YgY2FsbGJhY2sgPT09ICdmdW5jdGlvbicpIHtcblx0XHRcdFx0Y2FsbGJhY2soKTtcblx0XHRcdH1cblx0XHR9O1xuXG5cdFx0Y29uc3QgcmVwb3J0T3B0aXRyYWNrRXZlbnQgPSBhc3luYyAoZXZlbnQsIHBhcmFtcykgPT4ge1xuXHRcdFx0cmV0dXJuIHJlcG9ydEV2ZW50KGV2ZW50LCBwYXJhbXMsIF9vdF9lbmRwb2ludCk7XG5cdFx0fVxuXG5cdFx0Ly8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cdFx0Ly8gRnVuY3Rpb246IGxvZ1VzZXJFbWFpbFxuXHRcdC8vIEFyZ3M6IGVtYWlsXG5cdFx0Ly8gTG9nIFVzZXIgZW1haWxcblx0XHQvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblx0XHRjb25zdCBsb2dVc2VyRW1haWwgPSBmdW5jdGlvbiAoZW1haWwpIHtcblx0XHRcdHJlcG9ydEV2ZW50KFNldEVtYWlsRXZlbnRfbmFtZSwge1xuXHRcdFx0XHRlbWFpbDogZW1haWxcblx0XHRcdH0pLmNhdGNoKChlcnJvcikgPT4ge1xuXHRcdFx0XHRfbG9nZ2VyLmxvZyhcImVycm9yXCIsIFwiT3B0aVRyYWNrTW9kdWxlOmxvZ09wdGl0cmFja1VzZXJFbWFpbCBGYWlsZWQhISwgZXJyb3IgPSAgXCIgKyBlcnJvcik7XG5cdFx0XHR9KTtcblx0XHR9O1xuXG5cdFx0Ly8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIE9wdGl0cmFjayBQcml2YXRlIG1lbWJlciBmdW5jdGlvbnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cblx0XHQvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblx0XHQvLyBGdW5jdGlvbjogZ2V0T3B0aW1vdmVTdGl0Y2hEYXRhXG5cdFx0Ly8gQXJnczogVVJMXG5cdFx0Ly8gR2V0cyB0aGUgZGF0YSBmcm9tIHRoZSBVUkwgd2hpY2ggaXMgdXNlZCBieVxuXHRcdC8vIE9wdGltb3ZlIFN0aXRjaCBGbG93LlxuXHRcdC8vIHJldHVybiAtIEpTT04gb2JqIGNvbnRhaW5uZyB0aGUgb3B0aW1vdmVQdWJsaWNDdXN0b21lcklkXG5cdFx0Ly8gIGFuZCB0aGUgc3RhdHVzLlxuXHRcdC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXHRcdGNvbnN0IGdldE9wdGltb3ZlU3RpdGNoRGF0YSA9IGZ1bmN0aW9uIChjdXJyVVJMKSB7XG5cdFx0XHQvLyBXZSBtaWdodCBoYXZlIG5vdCBMb2FkIHRoZSBQaXdpayBZZXRcblx0XHRcdHZhciBqc29uRGF0YSA9IHt9O1xuXHRcdFx0anNvbkRhdGFbXCJPcHRpbW92ZVN0aXRjaERhdGFFeGlzdFwiXSA9IGZhbHNlO1xuXHRcdFx0dmFyIG9wdGltb3ZlUHVibGljQ3VzdG9tZXJJZCA9IFwiT3B0aW1vdmVQdWJsaWNDdXN0b21lcklkXCI7XG5cdFx0XHR2YXIgb3B0aW1vdmVWaXNpdG9ySWQgPSBcIm9wdGltb3ZlVmlzaXRvcklkXCI7XG5cdFx0XHR2YXIgb3B0aW1vdmVTdGl0Y2hGbG93ID0gXCJPcHRpbW92ZVN0aXRjaEZsb3dcIjtcblx0XHRcdHZhciBvcHRpbW92ZVN0aXRjaERhdGFFeGlzdCA9IFwiT3B0aW1vdmVTdGl0Y2hEYXRhRXhpc3RcIjtcblx0XHRcdHZhciBpc1N0aXRjaEZsb3cgPSBmYWxzZTtcblx0XHRcdHRyeSB7XG5cdFx0XHRcdHZhciBwYXJ0cyA9IGN1cnJVUkwuc3BsaXQoXCImXCIpO1xuXHRcdFx0XHRpZiAocGFydHMubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRcdHBhcnRzLmZvckVhY2goZnVuY3Rpb24gKGl0ZW0sIGluZGV4KSB7XG5cdFx0XHRcdFx0XHRpZiAoaXRlbS5zZWFyY2gob3B0aW1vdmVTdGl0Y2hGbG93KSA+IC0xKSB7XG5cdFx0XHRcdFx0XHRcdGlzU3RpdGNoRmxvdyA9XG5cdFx0XHRcdFx0XHRcdFx0aXRlbS5zbGljZShvcHRpbW92ZVN0aXRjaEZsb3cubGVuZ3RoICsgMSkgPT0gXCJ0cnVlXCI7XG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRpc1N0aXRjaEZsb3cgPSBmYWxzZTtcblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0aWYgKGlzU3RpdGNoRmxvdyA9PSB0cnVlKSB7XG5cdFx0XHRcdFx0XHRcdGlmIChpdGVtLnNlYXJjaChvcHRpbW92ZVB1YmxpY0N1c3RvbWVySWQpID4gLTEpIHtcblx0XHRcdFx0XHRcdFx0XHR2YXIgcHVibGljQ3VzdG9tZXJJZCA9IGl0ZW0uc2xpY2UoXG5cdFx0XHRcdFx0XHRcdFx0XHRvcHRpbW92ZVB1YmxpY0N1c3RvbWVySWQubGVuZ3RoICsgMVxuXHRcdFx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHRcdFx0anNvbkRhdGFbb3B0aW1vdmVQdWJsaWNDdXN0b21lcklkXSA9IHB1YmxpY0N1c3RvbWVySWQ7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0aWYgKGl0ZW0uc2VhcmNoKG9wdGltb3ZlVmlzaXRvcklkKSA+IC0xKSB7XG5cdFx0XHRcdFx0XHRcdFx0dmFyIHZpc3RvcklkID0gaXRlbS5zbGljZShvcHRpbW92ZVZpc2l0b3JJZC5sZW5ndGggKyAxKTtcblx0XHRcdFx0XHRcdFx0XHRqc29uRGF0YVtvcHRpbW92ZVZpc2l0b3JJZF0gPSB2aXN0b3JJZDtcblx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRcdGpzb25EYXRhW29wdGltb3ZlU3RpdGNoRGF0YUV4aXN0XSA9IHRydWU7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH1cblx0XHRcdH0gY2F0Y2ggKGVycm9yKSB7XG5cdFx0XHRcdHZhciBlcnJNc2cgPVxuXHRcdFx0XHRcdFwiT3B0aVRyYWNrTW9kdWxlOmdldE9wdGltb3ZlU3RpdGNoRGF0YSBGYWlsZWQhISwgZXJyb3IgPSAgXCIgKyBlcnJvcjtcblx0XHRcdFx0X2xvZ2dlci5sb2coXCJlcnJvclwiLCBlcnJNc2cpO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIGpzb25EYXRhO1xuXHRcdH07XG5cblx0XHQvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblx0XHQvLyBGdW5jdGlvbjogbG9nTWV0YWRhdGFDb3JlRXZlbnRcblx0XHQvLyBBcmdzOlxuXHRcdC8vIFJlcG9ydHMgbWV0YWRhdGEgY29yZSBldmVudCB0byBPcHRpdHJhY2sgaW4gYSBzZXNzaW9uLlxuXHRcdC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXHRcdGNvbnN0IGxvZ01ldGFkYXRhQ29yZUV2ZW50ID0gYXN5bmMgKCkgPT4ge1xuXHRcdFx0Ly8gY2hlY2sgaWYgcGFyYW0gXCJvcHRpdHJhY2ttZXRhZGF0YWNvcmVldmVudFwiIGlzIHRydWUgb3IgKGZhbHNlIG9yIG51bGwpXG5cdFx0XHQvLyBpZiB0cnVlLCBzaG91bGQgcmV0dXJuXG5cdFx0XHQvLyBpZiBmYWxzZSwgc2hvdWxkIHJlcG9ydCBhbiBldmVudCB3aXRoIG1ldGFkYXRhIHBhcmFtZXRlcnNcblx0XHRcdC8vIGFuZCB0aGVuIHN0b3JlIGluIHRoZSBzZXNzaW9uIHN0b3JhZ2UgdmFsdWUgdHJ1ZSBmb3IgdGhpcyBwYXJhbWV0ZXIuXG5cdFx0XHRsb2dnZXIubG9nKCdpbmZvJywgJ09wdGlUcmFja01vZHVsZTogaW4gbG9nTWV0YWRhdGFDb3JlRXZlbnQnKTtcblxuXHRcdFx0bGV0IGlzUmVwb3J0ZWQgPSBnZXRQZXJzaXN0ZWRTREtTZXNzaW9uRGF0YShpc1JlcG9ydGVkQ29yZU1ldGFkYXRhKTtcblx0XHRcdGlmIChpc1JlcG9ydGVkICYmIGlzUmVwb3J0ZWQudmFsdWUgPT09ICd0cnVlJykge1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cblx0XHRcdGxldCB1cmxQYXJhbXMgPSBfVG9vbHMuZ2V0VXJsUGFyYW1zKCk7XG5cblx0XHRcdGxldCBwYXJhbXMgPSB7XG5cdFx0XHRcdHNka19wbGF0Zm9ybTogJ1dlYicsXG5cdFx0XHRcdHNka192ZXJzaW9uOiBfdmVyc2lvbixcblx0XHRcdFx0YXBwX25zOiBfaG9zdG5hbWUsXG5cdFx0XHRcdGNhbXBhaWduX25hbWU6IHVybFBhcmFtcy51dG1fY2FtcGFpZ24gPyB1cmxQYXJhbXMudXRtX2NhbXBhaWduIDogbnVsbCxcblx0XHRcdFx0Y2FtcGFpZ25fa2V5d29yZDogdXJsUGFyYW1zLnV0bV90ZXJtID8gdXJsUGFyYW1zLnV0bV90ZXJtIDogbnVsbCxcblx0XHRcdFx0Y2FtcGFpZ25fc291cmNlOiB1cmxQYXJhbXMudXRtX3NvdXJjZSA/IHVybFBhcmFtcy51dG1fc291cmNlIDogbnVsbCxcblx0XHRcdFx0Y2FtcGFpZ25fbWVkaXVtOiB1cmxQYXJhbXMudXRtX21lZGl1bSA/IHVybFBhcmFtcy51dG1fbWVkaXVtIDogbnVsbCxcblx0XHRcdFx0Y2FtcGFpZ25fY29udGVudDogdXJsUGFyYW1zLnV0bV9jb250ZW50ID8gdXJsUGFyYW1zLnV0bV9jb250ZW50IDogbnVsbCxcblx0XHRcdFx0Y2FtcGFpZ25faWQ6IHVybFBhcmFtcy51dG1faWQgPyB1cmxQYXJhbXMudXRtX2lkIDogbnVsbCxcblx0XHRcdFx0bGFuZ3VhZ2U6IF9Ub29scy5nZXRVc2VyTGFuZ3VhZ2UoKVxuXHRcdFx0fTtcblxuXHRcdFx0aWYgKF9jb25maWdGaWxlVXJsICE9PSBcIlwiKVxuXHRcdFx0e1xuXHRcdFx0XHRwYXJhbXMuY29uZmlnX2ZpbGVfdXJsID0gX2NvbmZpZ0ZpbGVVcmw7XG5cdFx0XHR9XG5cblx0XHRcdGxldCBldmVudEhhbmRsZXIgPSBldmVudHNIYW5kbGVyO1xuXHRcdFx0ZXZlbnRIYW5kbGVyLmxvZ0V2ZW50KGtleUNvcmVNZXRhZGF0YUV2ZW50LCBwYXJhbXMpO1xuXHRcdFx0cmV0dXJuIGV2ZW50SGFuZGxlci5kaXNwYXRjaCgpXG5cdFx0XHRcdC50aGVuKGRhdGEgPT4ge1xuXHRcdFx0XHRcdHBlcnNpc3RTREtTZXNzaW9uRGF0YShpc1JlcG9ydGVkQ29yZU1ldGFkYXRhLCB0cnVlKTtcblx0XHRcdFx0XHRyZXR1cm4gZGF0YTtcblx0XHRcdFx0fSlcblx0XHRcdFx0LmNhdGNoKGVycm9yID0+IHtcblx0XHRcdFx0XHRsb2dnZXIubG9nKCd3YXJuaW5nJywgYE9wdGlUcmFja01vZHVsZTpsb2dNZXRhZGF0YUNvcmVFdmVudCBGYWlsZWQhISwgZXJyb3IgPSAke2Vycm9yfWApO1xuXHRcdFx0XHR9KTtcblxuXHRcdH07XG5cblx0XHQvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblx0XHQvLyBGdW5jdGlvbjogZ2V0S2V5SWRcblx0XHQvLyBBcmdzOiBUSElTXG5cdFx0Ly8gcmV0dXJucyB0aGUgVXNlciBJbmZvOiBpbmNsdWRpbmc6XG5cdFx0Ly8gdmlzaXRvcl9pZCwgdXNlcl9pZCwgdXBkYXRlZFZpc2l0b3JfaWQuXG5cdFx0Ly8gdXBkYXRlZFZpc2l0b3JfaWQgLSBpcyBjcmVhdGVkIGFmdGVyIHNldFVzZXJJZFxuXHRcdC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXHRcdHZhciBnZXRLZXlJZCA9IGZ1bmN0aW9uIChUSElTLCBrZXlOYW1lKSB7XG5cdFx0XHR0cnkge1xuXHRcdFx0XHR2YXIgcmVzdWx0S2V5SWQgPSBudWxsO1xuXHRcdFx0XHRzd2l0Y2ggKGtleU5hbWUpIHtcblx0XHRcdFx0XHRjYXNlIFwiZGF0b25pY3NcIjpcblx0XHRcdFx0XHRcdHJlc3VsdEtleUlkID0gZGF0b25pY3NJREtleTtcblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdGNhc2UgXCJsaXZlUmFtcFwiOlxuXHRcdFx0XHRcdFx0cmVzdWx0S2V5SWQgPSBsaXZlUmFtcElES2V5O1xuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0Y2FzZSBcImdvb2dsQ29va2llTWF0Y2hcIjpcblx0XHRcdFx0XHRcdHJlc3VsdEtleUlkID0gZ29vZ2xDb29raWVNYXRjaElES2V5O1xuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0XHRcdHJlc3VsdEtleUlkID0gbnVsbDtcblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiByZXN1bHRLZXlJZDtcblx0XHRcdH0gY2F0Y2ggKGVycm9yKSB7XG5cdFx0XHRcdHZhciBlcnJNc2cgPSBcIk9wdGlUcmFja01vZHVsZTpnZXRLZXlJZCAgRmFpbGVkISEsIGVycm9yID0gXCIgKyBlcnJvcjtcblx0XHRcdFx0X2xvZ2dlci5sb2coXCJlcnJvclwiLCBlcnJNc2cpO1xuXHRcdFx0fVxuXHRcdH07XG5cblx0XHQvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblx0XHQvLyBGdW5jdGlvbjogbG9nU2V0VXNlcklkRXZlbnRcblx0XHQvLyBBcmdzOiBUSElTLCBvcmlnVmlzaXRvcklkLCB1cGRhdGVkVXNlcklkXG5cdFx0Ly8gU2V0cyB0aGUgaW4gT3B0aXRyYWNrIEluZnJhc3RydWN0dXJlIFVzZXIgSURcblx0XHQvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblx0XHRjb25zdCBsb2dTZXRVc2VySWRFdmVudCA9IGZ1bmN0aW9uIChvcmlnVmlzaXRvcklkVmFsdWUsIHVwZGF0ZWRVc2VySWRWYWx1ZSwgdXBkYXRlZFZpc2l0b3JJZFZhbHVlKSB7XG5cdFx0XHR0cnkge1xuXHRcdFx0XHR2YXIgZXZlbnRDb25maWcgPSBnZXRDdXN0b21FdmVudENvbmZpZ0J5SWQoU2V0VXNlcklkRXZlbnRfbmFtZSk7XG5cblx0XHRcdFx0aWYgKG9yaWdWaXNpdG9ySWRWYWx1ZSA9PSB1bmRlZmluZWQgfHwgdXBkYXRlZFVzZXJJZFZhbHVlID09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRcdGxvZ2dlci5sb2coXCJlcnJvclwiLCBcIk9wdGlUcmFja01vZHVsZTpsb2dTZXRVc2VySWRFdmVudCBGYWlsZWQhISwgZXJyb3IgPSBvcmlnVmlzaXRvcklkVmFsdWUgPT0gdW5kZWZpbmVkIHx8IHVwZGF0ZWRVc2VySWRWYWx1ZSA9PSB1bmRlZmluZWQgXCIpO1xuXHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmIChldmVudENvbmZpZyAhPSBudWxsKSB7XG5cdFx0XHRcdFx0dmFyIG9yaWdpbmFsVmlzaXRvcklkQ29uZmlnID0gZ2V0Q3VzdG9tRXZlbnRQYXJhbUZyb21Db25maWcoXG5cdFx0XHRcdFx0XHRldmVudENvbmZpZyxcblx0XHRcdFx0XHRcdG9yaWdpbmFsVmlzaXRvcklkX3BhcmFtX25hbWVcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdHZhciB1cGRhdGVkVmlzaXRvcklkQ29uZmlnID0gZ2V0Q3VzdG9tRXZlbnRQYXJhbUZyb21Db25maWcoXG5cdFx0XHRcdFx0XHRldmVudENvbmZpZyxcblx0XHRcdFx0XHRcdHVwZGF0ZWRWaXNpdG9ySWRfcGFyYW1fbmFtZVxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0dmFyIHVzZXJJZFBhcmFtQ29uZmlnID0gZ2V0Q3VzdG9tRXZlbnRQYXJhbUZyb21Db25maWcoXG5cdFx0XHRcdFx0XHRldmVudENvbmZpZyxcblx0XHRcdFx0XHRcdHVzZXJJZF9wYXJhbV9uYW1lXG5cdFx0XHRcdFx0KTtcblxuXHRcdFx0XHRcdGxldCBldmVudF9wYXJhbWV0ZXJzID0ge1xuXHRcdFx0XHRcdFx0b3JpZ2luYWxWaXNpdG9ySWQ6IG9yaWdWaXNpdG9ySWRWYWx1ZSxcblx0XHRcdFx0XHRcdHVzZXJJZDogZ2V0VXNlcklkKCksXG5cdFx0XHRcdFx0XHR1cGRhdGVkVmlzaXRvcklkOiBnZXRWaXNpdG9ySWQoKVxuXHRcdFx0XHRcdH07XG5cblx0XHRcdFx0XHRyZXBvcnRFdmVudChTZXRVc2VySWRFdmVudF9uYW1lLCBldmVudF9wYXJhbWV0ZXJzKS50aGVuKGRhdGEgPT4ge1xuXG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH1cblx0XHRcdH0gY2F0Y2ggKGVycm9yKSB7XG5cdFx0XHRcdGxvZ2dlci5sb2coXCJlcnJvclwiLCBcIk9wdGlUcmFja01vZHVsZTpsb2dTZXRVc2VySWRFdmVudCBGYWlsZWQhISwgZXJyb3IgPSAgXCIgKyBlcnJvcik7XG5cdFx0XHR9XG5cdFx0fTtcblxuXHRcdC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXHRcdC8vIEZ1bmN0aW9uOiBnZXRPcHRpdHJhY2tWaXNpdG9ySW5mb1xuXHRcdC8vIEFyZ3M6IE5vbmVcblx0XHQvLyBTZXRzIHRoZSBPcHRpbW92ZSBTREsgTG9nZ2luZyBNb2RlXG5cdFx0Ly8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cdFx0Y29uc3QgZ2V0T3B0aXRyYWNrVmlzaXRvckluZm8gPSBmdW5jdGlvbiAoKSB7XG5cdFx0XHRsZXQgdmlzaXRvckluZm8gPSBbXTtcblx0XHRcdHRyeSB7XG5cdFx0XHRcdC8vVE9ETzogaW1wbGVtZW50IGdldCB1c2VyIGluZm9cblx0XHRcdH0gY2F0Y2ggKGVycm9yKSB7XG5cdFx0XHRcdF9sb2dnZXIubG9nKFwiZXJyb3JcIiwgXCJPcHRpVHJhY2tNb2R1bGU6IGdldE9wdGl0cmFja1Zpc2l0b3JJbmZvIFwiICsgZXJyb3IpO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHZpc2l0b3JJbmZvO1xuXHRcdH07XG5cblx0XHQvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gT3B0aXRyYWNrIFByaXZhdGUgVXRpbGl0eSBtZW1iZXIgZnVuY3Rpb25zIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXHRcdC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXHRcdC8vIEZ1bmN0aW9uOiBnZXRDdXN0b21FdmVudENvbmZpZ0J5SWRcblx0XHQvLyBBcmdzOiBldmVudElkXG5cdFx0Ly8gcmV0dXJucyB0aGUgZXZlbnQgQ29uZmlndXJhdGlvbi5cblx0XHQvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblx0XHR2YXIgZ2V0Q3VzdG9tRXZlbnRDb25maWdCeUlkID0gZnVuY3Rpb24gKGV2ZW50SWQpIHtcblx0XHRcdHZhciBjdXJyRXZlbnQgPSBfY29uZmlndXJhdGlvbi5ldmVudHNbZXZlbnRJZF07XG5cdFx0XHRpZiAoY3VyckV2ZW50ID09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRyZXR1cm4gbnVsbDtcblx0XHRcdH1cblx0XHRcdHJldHVybiBjdXJyRXZlbnQ7XG5cdFx0fTtcblxuXHRcdC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXHRcdC8vIEZ1bmN0aW9uOiBnZXRDdXN0b21FdmVudFBhcmFtRnJvbUNvbmZpZ1xuXHRcdC8vIEFyZ3M6IGV2ZW50Q29uZmlnLCBwYXJhbU5hbWVcblx0XHQvLyByZXR1cm5zIHRoZSBldmVudCBDb25maWd1cmF0aW9uLlxuXHRcdC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXHRcdHZhciBnZXRDdXN0b21FdmVudFBhcmFtRnJvbUNvbmZpZyA9IGZ1bmN0aW9uIChldmVudENvbmZpZywgcGFyYW1OYW1lKSB7XG5cdFx0XHR2YXIgY3VyclBhcmFtID0gZXZlbnRDb25maWcucGFyYW1ldGVyc1twYXJhbU5hbWVdO1xuXHRcdFx0aWYgKGN1cnJQYXJhbSA9PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0cmV0dXJuIG51bGw7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gY3VyclBhcmFtO1xuXHRcdH07XG5cblxuXHRcdC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXHRcdC8vIEZ1bmN0aW9uOiBlbmNvZGVVUkxDb21wb25lbnRzXG5cdFx0Ly8gQXJnczogVEhJUywgZXZlbnRDb25maWcsIGV2ZW50X3BhcmFtZXRlcnNcblx0XHQvLyByZXR1cm5zIHRoZSB2YWxpZGF0ZWQgY2hhbmdlZCBwYXJhbWV0ZXJzLlxuXHRcdC8vIGRlc2NyaXB0aW9uOlxuXHRcdC8vIHVzaW5nIHRoZSBmb2xsb3dpbmcgc3BlYzogaHR0cHM6Ly93d3cudzNzY2hvb2xzLmNvbS90YWdzL3JlZl91cmxlbmNvZGUuYXNwXG5cdFx0Ly8gcnVuIG9uIHRoZSBwYXJhbWV0ZXJzIGtleXMgYW5kIGNoZWNrIGlmIGl0IGlzIFN0cmluZyBUeXBlLlxuXHRcdC8vIElmIFN0cmluZyByZXBsYWNlIHRoZSBkaWZmZXJlbnQgY2hhcmFjdGVycyBhcyBmb2xsb3dzOlxuXHRcdC8vIFwiaHR0cDovL2EuY29tLz9xPXF1ZXJ5Jm49MTBcIiB3b3VsZCBiZSBjb252ZXJ0ZWQgdG86XG5cdFx0Ly8gaHR0cCUzQSUyRiUyRmEuY29tJTJGJTNGcSUzRHF1ZXJ5JTI2biUzRDEwXCJcblx0XHQvLyBcIiNcIiA9ICUyM1xuXHRcdC8vIFwiOlwiID0gJTNBXG5cdFx0Ly8gXCIvXCIgPSAlMkZcblx0XHQvLyBcIiZcIiA9ICUyNlxuXHRcdC8vIFwiPVwiID0gJTNEXG5cdFx0Ly8gXCIgXCIgPSAlMjBcblx0XHQvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblx0XHR2YXIgZW5jb2RlVVJMQ29tcG9uZW50cyA9IGZ1bmN0aW9uIChUSElTLCBldmVudENvbmZpZywgZXZlbnRfcGFyYW1ldGVycykge1xuXHRcdFx0Ly8gcnVuIG9uIHRoZSBwYXJhbWV0ZXJzIGtleXMgYW5kIGNoZWNrIGlmIGl0IGlzIFN0cmluZyBUeXBlLlxuXHRcdFx0Ly8gSWYgU3RyaW5nIHJlcGxhY2UgdGhlIGRpZmZlcmVudCBjaGFyYWN0ZXJzIGFzIGZvbGxvd3M6XG5cdFx0XHRpZiAoZXZlbnRDb25maWcucGFyYW1ldGVycyA9PSBudWxsKSB7XG5cdFx0XHRcdF9sb2dnZXIubG9nKFwiaW5mb1wiLCBcIkV2ZW50cyBQYXJhbWV0ZXJzIGlzIG51bGwgIVwiKTtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXHRcdFx0dmFyIHBhcmFtZXRlcnNOYW1lcyA9IE9iamVjdC5rZXlzKGV2ZW50X3BhcmFtZXRlcnMpO1xuXHRcdFx0cGFyYW1ldGVyc05hbWVzLmZvckVhY2goZnVuY3Rpb24gKHBhcmFtTmFtZSkge1xuXHRcdFx0XHR2YXIgY3VyclBhcmFtID0gZXZlbnRDb25maWcucGFyYW1ldGVyc1twYXJhbU5hbWVdO1xuXHRcdFx0XHRpZiAoY3VyclBhcmFtICE9IHVuZGVmaW5lZCAmJiBjdXJyUGFyYW0udHlwZSAhPSBcIk51bWJlclwiICYmIGN1cnJQYXJhbS50eXBlICE9IFwiQm9vbGVhblwiKSB7XG5cdFx0XHRcdFx0dmFyIHBhcmFtVmFsdWUgPSBldmVudF9wYXJhbWV0ZXJzW3BhcmFtTmFtZV07XG5cblx0XHRcdFx0XHRwYXJhbVZhbHVlID0gZW5jb2RlVVJJQ29tcG9uZW50KHBhcmFtVmFsdWUpO1xuXG5cdFx0XHRcdFx0ZXZlbnRfcGFyYW1ldGVyc1twYXJhbU5hbWVdID0gcGFyYW1WYWx1ZS50cmltKCk7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdFx0cmV0dXJuIGV2ZW50X3BhcmFtZXRlcnM7XG5cdFx0fTtcblxuXHRcdC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXHRcdC8vIEZ1bmN0aW9uOiBnZXREb21haW5cblx0XHQvLyBBcmdzOiBvbmVcblx0XHQvLyByZXR1cm4gdGhlIERvbWFpbiB3aXRob3V0IFN1YiBEb21haW5cblx0XHQvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblx0XHR2YXIgZ2V0RG9tYWluID0gZnVuY3Rpb24gKCkge1xuXHRcdFx0dmFyIGhvc3RuYW1lID0gd2luZG93LmxvY2F0aW9uLmhvc3RuYW1lO1xuXHRcdFx0dmFyIHNwbGl0QXJyYXkgPSBob3N0bmFtZS5zcGxpdChcIi5cIik7XG5cdFx0XHR2YXIgcmVzdWx0ID0gXCJcIjtcblx0XHRcdGlmIChzcGxpdEFycmF5Lmxlbmd0aCA+PSAzKSB7XG5cdFx0XHRcdHZhciBwb3N0Zml4ID0gc3BsaXRBcnJheVtzcGxpdEFycmF5Lmxlbmd0aCAtIDFdO1xuXHRcdFx0XHR2YXIgbWFpbiA9IHNwbGl0QXJyYXlbc3BsaXRBcnJheS5sZW5ndGggLSAyXTtcblx0XHRcdFx0cmVzdWx0ID0gbWFpbiArIFwiLlwiICsgcG9zdGZpeDtcblx0XHRcdH0gZWxzZSBpZiAoc3BsaXRBcnJheS5sZW5ndGggPT0gMikge1xuXHRcdFx0XHRyZXN1bHQgPSBob3N0bmFtZTtcblx0XHRcdH1cblx0XHRcdHJldHVybiByZXN1bHQ7XG5cdFx0fTtcblxuXHRcdC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXHRcdC8vIEZ1bmN0aW9uOiBwZXJzaXN0U0RLU2Vzc2lvbkRhdGFcblx0XHQvLyBBcmdzOiBrZXksIHVwZGF0ZWRWYWx1ZVxuXHRcdC8vIHBlcnNpc3RzIHRoZSBrZXksIHVwZGF0ZWRWYWx1ZSBpbiB0aGUgc2Vzc2lvblN0b3JhZ2UgZm9yIHNlc3Npb24gVExWXG5cdFx0Ly8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cdFx0Y29uc3QgcGVyc2lzdFNES1Nlc3Npb25EYXRhID0gKGtleSwgdXBkYXRlZFZhbHVlKSA9PiB7XG5cdFx0XHR0cnkge1xuXHRcdFx0XHRpZiAoX2NvbmZpZ3VyYXRpb24ub3B0aXRyYWNrTWV0YURhdGEudXNlU2Vzc2lvblN0b3JhZ2UgPT0gdHJ1ZSkge1xuXHRcdFx0XHRcdGxldCBjdXJyVmFsdWUgPSBzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKGtleSk7XG5cdFx0XHRcdFx0aWYgKGN1cnJWYWx1ZSA9PSBudWxsIHx8IGN1cnJWYWx1ZSAhPSB1cGRhdGVkVmFsdWUpIHtcblx0XHRcdFx0XHRcdHNlc3Npb25TdG9yYWdlLnNldEl0ZW0oa2V5LCB1cGRhdGVkVmFsdWUpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRsb2dnZXIubG9nKCdpbmZvJywgJ09wdGl0cmFjazogcGVyc2lzdFNES1Nlc3Npb25EYXRhKCkgTm90IFBlcnNpc3RlZCcpO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGNhdGNoIChlcnJvcikge1xuXHRcdFx0XHRsb2dnZXIubG9nKCdlcnJvcicsIGBPcHRpVHJhY2tNb2R1bGU6IHBlcnNpc3RTREtTZXNzaW9uRGF0YSAoKSBGYWlsZWQgZXJyb3IgPSAke2Vycm9yfWApO1xuXHRcdFx0fVxuXHRcdH07XG5cblx0XHQvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblx0XHQvLyBGdW5jdGlvbjogZ2V0UGVyc2lzdGVkU0RLU2Vzc2lvbkRhdGFcblx0XHQvLyBBcmdzOiBrZXlcblx0XHQvLyBwZXJzaXN0cyB0aGUga2V5LCB1cGRhdGVkVmFsdWUgaW4gdGhlIHNlc3Npb25TdG9yYWdlIGZvciBzZXNzaW9uIFRMVlxuXHRcdC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXHRcdGNvbnN0IGdldFBlcnNpc3RlZFNES1Nlc3Npb25EYXRhID0gZnVuY3Rpb24gKGtleSkge1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0aWYgKF9jb25maWd1cmF0aW9uLm9wdGl0cmFja01ldGFEYXRhLnVzZVNlc3Npb25TdG9yYWdlID09IHRydWUpIHtcblx0XHRcdFx0XHRsZXQgdmFsdWUgPSBzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKGtleSk7XG5cdFx0XHRcdFx0aWYgKHZhbHVlICE9IG51bGwpIHtcblx0XHRcdFx0XHRcdGxldCByZXN1bHRPYmplY3QgPSB7XG5cdFx0XHRcdFx0XHRcdGtleToga2V5LFxuXHRcdFx0XHRcdFx0XHR2YWx1ZTogdmFsdWVcblx0XHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0XHRyZXR1cm4gcmVzdWx0T2JqZWN0O1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRsb2dnZXIubG9nKCdpbmZvJywgYE9wdGl0cmFjazogcGVyc2lzdFNES1Nlc3Npb25EYXRhKCkga2V5OiAke2tleX0gTm90IFBlcnNpc3RlZGApO1xuXHRcdFx0XHRcdHJldHVybiBudWxsO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGNhdGNoIChlcnJvcikge1xuXHRcdFx0XHRsb2dnZXIubG9nKCdlcnJvcicsIGBPcHRpVHJhY2tNb2R1bGU6IGdldFBlcnNpc3RlZFNES1Nlc3Npb25EYXRhICgpIEZhaWxlZCBlcnJvciA9ICR7ZXJyb3J9YCk7XG5cdFx0XHRcdHJldHVybiBudWxsO1xuXHRcdFx0fVxuXHRcdH07XG5cblx0XHQvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblx0XHQvLyBGdW5jdGlvbjogZ2V0T3B0aVRyYWNrRW5kcG9pbnRGcm9tQ29uZmlnXG5cdFx0Ly8gQXJnczogU0RLQ29uZmlnXG5cdFx0Ly8gR2V0IHRoZSBUcmFja2VyIEVuZHBvaW50IGZyb20gdGhlIENvbmZpZ1xuXHRcdC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXHRcdGNvbnN0IGdldE9wdGlUcmFja0VuZHBvaW50RnJvbUNvbmZpZyA9ICgpID0+IHtcblx0XHRcdHJldHVybiBfY29uZmlndXJhdGlvbi5vcHRpdHJhY2tNZXRhRGF0YS5vcHRpdHJhY2tFbmRwb2ludDtcblx0XHR9O1xuXG5cdFx0cmV0dXJuIHtcblx0XHRcdGluaXRpYWxpemVPcHRpVHJhY2s6IGluaXRpYWxpemVPcHRpVHJhY2ssXG5cdFx0XHRsb2dTZXRVc2VySWQ6IGxvZ1NldFVzZXJJZEV2ZW50LFxuXHRcdFx0bG9nVXNlckVtYWlsOiBsb2dVc2VyRW1haWwsXG5cdFx0XHRsb2dNZXRhZGF0YUNvcmVFdmVudDogbG9nTWV0YWRhdGFDb3JlRXZlbnQsXG5cdFx0XHRnZXRPcHRpdHJhY2tWaXNpdG9ySW5mbzogZ2V0T3B0aXRyYWNrVmlzaXRvckluZm8sXG5cdFx0XHRnZXRVc2VySWQ6IGdldFVzZXJJZCxcblx0XHRcdGdldEtleUlkOiBnZXRLZXlJZCxcblx0XHRcdGdldE9wdGl0cmFja0VuZHBvaW50OiBnZXRPcHRpVHJhY2tFbmRwb2ludEZyb21Db25maWcsXG5cdFx0XHRyZXBvcnRPcHRpdHJhY2tFdmVudDogcmVwb3J0T3B0aXRyYWNrRXZlbnQsXG5cdFx0XHRnZXRQZXJzaXN0ZWRTREtTZXNzaW9uRGF0YTogZ2V0UGVyc2lzdGVkU0RLU2Vzc2lvbkRhdGEsXG5cdFx0XHRwZXJzaXN0U0RLU2Vzc2lvbkRhdGE6IHBlcnNpc3RTREtTZXNzaW9uRGF0YVxuXHRcdH07XG5cdH0pKCk7XG5cblx0Ly8gIyMjIGJlZ2luXG4gICAgY29uc3Qgb3B0aW1vYmlsZU1vZHVsZSA9ICgoKSA9PiB7XG5cdFx0Y29uc3Qgb25ET01SZWFkeSA9IChmbikgPT4ge1xuXHRcdFx0aWYgKGRvY3VtZW50LnJlYWR5U3RhdGUgIT09IFwibG9hZGluZ1wiKSB7XG5cdFx0XHRcdGZuKCk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKFwiRE9NQ29udGVudExvYWRlZFwiLCBmbik7XG5cdFx0XHR9XG5cdFx0fTtcblxuICAgICAgICBjb25zdCBpbml0aWFsaXplT3B0aW1vYmlsZSA9ICgpID0+IHtcbiAgICAgICAgICAgIChmdW5jdGlvbih3LHApe3dbcF09d1twXXx8ZnVuY3Rpb24oKXt3W3BdLnE9d1twXS5xfHxbXTt3W3BdLnEucHVzaChhcmd1bWVudHMpfX0pKHdpbmRvdyxcIkt1bXVsb3NcIik7XG5cblx0XHRcdGNvbnN0IGt1bXVsb3NNZXRhID0gX2NvbmZpZ3VyYXRpb24ua3VtdWxvc1dlYlNka01ldGFEYXRhO1xuXHRcdFx0Y29uc3Qgb3JpZ2luYWxWaXNpdG9ySWQgPSBnZXRPcmlnaW5hbFZpc2l0b3JJZCgpO1xuXHRcdFx0aWYgKG9yaWdpbmFsVmlzaXRvcklkID09PSBudWxsKXtcblx0XHRcdFx0Y29uc29sZS5lcnJvcignT3B0aW1vYmlsZSBjYW5ub3QgaW5pdGlhbGl6ZTogbm8gb3JpZ2luYWxWaXNpdG9ySWQgcHJlc2VudCcpO1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cblx0XHRcdGNvbnN0IGNvbmZpZyA9IHtcblx0XHRcdFx0YXBpS2V5OiBrdW11bG9zTWV0YS5hcGlLZXksXG5cdFx0XHRcdHNlY3JldEtleToga3VtdWxvc01ldGEuc2VjcmV0S2V5LFxuXHRcdFx0XHR2YXBpZFB1YmxpY0tleToga3VtdWxvc01ldGEudmFwaWRQdWJsaWNLZXksXG5cdFx0XHRcdHJlZ2lvbjoga3VtdWxvc01ldGEucmVnaW9uLFxuXHRcdFx0XHRvcmlnaW5hbFZpc2l0b3JJZFxuICAgICAgICAgICAgfTtcblxuXHRcdFx0Y29uc3QgdXNlcklkID0gZ2V0VXNlcklkKCk7XG5cdFx0XHRpZiAodXNlcklkKXtcblx0XHRcdFx0Y29uZmlnLmN1c3RvbWVySWQgPSB1c2VySWQ7XG5cdFx0XHR9XG5cbiAgICAgICAgICAgIEt1bXVsb3MoXCJpbml0XCIsIGNvbmZpZyk7XG5cdFx0XHRvbkRPTVJlYWR5KCgpID0+IHtcblx0XHRcdFx0Y29uc3Qgc2NyaXB0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc2NyaXB0Jyk7XG5cdFx0XHRcdHNjcmlwdC5pZCA9ICdrdW11bG9zJztcblx0XHRcdFx0c2NyaXB0LnNyYyA9ICdodHRwczovL3N0YXRpYy5hcHAuZGVsaXZlcnkvc2Rrcy93ZWIvb3B0aW1vdmUtd2ViLWJ1bmRsZS5qcydcblx0XHRcdFx0c2NyaXB0LmFzeW5jID0gdHJ1ZTtcblx0XHRcdFx0ZG9jdW1lbnQuYm9keS5hcHBlbmQoc2NyaXB0KTtcblx0XHRcdH0pO1xuXG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IHJlcG9ydEV2ZW50c1RvT3B0aW1vYmlsZSA9IChldmVudHMpID0+IHtcblx0XHRcdGV2ZW50cy5mb3JFYWNoKGZ1bmN0aW9uKGV2ZW50KXtcblx0XHRcdFx0bG9nZ2VyLmxvZygnaW5mbycsICdyZXBvcnRpbmcgdG8ga3VtdWxvcyBldmVudCAnICsgZXZlbnQuZXZlbnQpO1xuXHRcdFx0XHRLdW11bG9zKCd0cmFja0V2ZW50JywgZXZlbnQuZXZlbnQsIGV2ZW50LmNvbnRleHQpO1xuXHRcdFx0fSk7XG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IHB1c2hSZWdpc3RlciA9ICgpID0+IHtcbiAgICAgICAgICAgIEt1bXVsb3MoJ3B1c2hSZWdpc3RlcicpO1xuICAgICAgICB9O1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgaW5pdGlhbGl6ZU9wdGltb2JpbGUsXG4gICAgICAgICAgICByZXBvcnRFdmVudHNUb09wdGltb2JpbGUsXG4gICAgICAgICAgICBwdXNoUmVnaXN0ZXJcbiAgICAgICAgfTtcbiAgICB9KSgpO1xuICAgIC8vICMjIyBlbmRcblxuXHRjb25zdCBsaXZlUmFtcE1vZHVsZSA9IChmdW5jdGlvbiAoKSB7XG5cdFx0dmFyIHVwZGF0ZUxpdmVSYW1wRGF0YU1hdGNoaW5nID0gZnVuY3Rpb24gKCkge1xuXHRcdFx0Ly8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cdFx0XHQvLyBGdW5jdGlvbjogb3B0aW1vdmVMaXZlUmFtcERhdGFNYXRjaGluZ1xuXHRcdFx0Ly8gQXJnczogIExpdlJhbXAgVGVuYW50IFRva2VuLCBUZW5hbnRJZC4gVmlzaXRvcklkXG5cdFx0XHQvLyBTZXRzIHRoZSBPcHRpbW92ZSBTREsgTG9nZ2luZyBNb2RlXG5cdFx0XHQvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblx0XHRcdC8vIGxpdmVSYW1wQmFzZUVuZHBvaW50ID0gXCJodHRwczovL2lkLnJsY2RuLmNvbS9bbGl2ZVJhbXBUb2tlbl0uZ2lmP2NwYXJhbXM9XCJcblx0XHRcdC8vPGltZyBzcmM9XCJpZC5ybGNkbi5jb20vPGxpdmVSYW1wVGVuYW50VG9rZW4+LmdpZj9jcGFyYW1zPXRlbmFudFRva2VuX3RlbmFudElkX3Zpc2l0b3JJZF1cIj5cblx0XHRcdHZhciBvcHRpbW92ZUxpdmVSYW1wRGF0YU1hdGNoaW5nID0gZnVuY3Rpb24gKHNyY1VybCkge1xuXHRcdFx0XHRpZiAodGVuYW50VG9rZW4gIT0gc3JjVXJsKSB7XG5cdFx0XHRcdFx0dmFyIGQgPSBkb2N1bWVudDtcblx0XHRcdFx0XHR2YXIgZyA9IGQuY3JlYXRlRWxlbWVudChcImltZ1wiKTtcblx0XHRcdFx0XHR2YXIgcyA9IGQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCJzY3JpcHRcIilbMF07XG5cdFx0XHRcdFx0Zy50eXBlID0gXCJ0ZXh0L2phdmFzY3JpcHRcIjtcblx0XHRcdFx0XHRnLmFzeW5jID0gdHJ1ZTtcblx0XHRcdFx0XHRnLmRlZmVyID0gdHJ1ZTtcblx0XHRcdFx0XHRnLnNyYyA9IHNyY1VybDtcblx0XHRcdFx0XHRzLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGcsIHMpO1xuXHRcdFx0XHR9XG5cdFx0XHR9O1xuXG5cdFx0XHR2YXIgbGl2UmFtcElkID0gb3B0aXRyYWNrTW9kdWxlLmdldEtleUlkKG9wdGl0cmFja01vZHVsZSwgXCJsaXZlUmFtcFwiKTtcblx0XHRcdHZhciBsaXZlUmFtcE9uU2Vzc2lvblBlcnNpc3RlZCA9IG9wdGl0cmFja01vZHVsZS5nZXRQZXJzaXN0ZWRTREtTZXNzaW9uRGF0YShcblx0XHRcdFx0b3B0aXRyYWNrTW9kdWxlLFxuXHRcdFx0XHRsaXZSYW1wSWRcblx0XHRcdCk7XG5cdFx0XHR2YXIgdmlzaXRvcklkID0gdW5kZWZpbmVkO1xuXHRcdFx0dmFyIGluZm8gPSBnZXRWaXNpdG9yc0luZm9PYmooKTtcblx0XHRcdHZpc2l0b3JJZCA9IGluZm8udmlzaXRvcklkO1xuXG5cdFx0XHRpZiAoXG5cdFx0XHRcdGxpdmVSYW1wT25TZXNzaW9uUGVyc2lzdGVkID09IG51bGwgfHxcblx0XHRcdFx0bGl2ZVJhbXBPblNlc3Npb25QZXJzaXN0ZWQudmFsdWUgIT0gdmlzaXRvcklkXG5cdFx0XHQpIHtcblx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdHR5cGVvZiBfY29uZmlndXJhdGlvbi5MaXZlUmFtcE1ldGFEYXRhICE9IFwidW5kZWZpbmVkXCIgJiZcblx0XHRcdFx0XHR0eXBlb2YgX2NvbmZpZ3VyYXRpb24uTGl2ZVJhbXBNZXRhRGF0YS50ZW5hbnRUb2tlbiAhPSBcInVuZGVmaW5lZFwiICYmXG5cdFx0XHRcdFx0dHlwZW9mIF9jb25maWd1cmF0aW9uLkxpdmVSYW1wTWV0YURhdGEuYmFzZUVuZHBvaW50ICE9IFwidW5kZWZpbmVkXCJcblx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0dmFyIHRlbmFudFRva2VuID0gX2NvbmZpZ3VyYXRpb24uTGl2ZVJhbXBNZXRhRGF0YS50ZW5hbnRUb2tlbjtcblx0XHRcdFx0XHR2YXIgbGl2ZVJhbXBUZW5hbnRUb2tlbiA9XG5cdFx0XHRcdFx0XHRfY29uZmlndXJhdGlvbi5MaXZlUmFtcE1ldGFEYXRhLmxpdmVSYW1wVGVuYW50VG9rZW47XG5cdFx0XHRcdFx0dmFyIGxpdmVSYW1wVGVtcGxhdGVFbmRwb2ludCA9XG5cdFx0XHRcdFx0XHRfY29uZmlndXJhdGlvbi5MaXZlUmFtcE1ldGFEYXRhLmJhc2VFbmRwb2ludDtcblx0XHRcdFx0XHR2YXIgdGVuYW50SWQgPSBfY29uZmlndXJhdGlvbi5vcHRpdHJhY2tNZXRhRGF0YS5zaXRlSWQ7XG5cdFx0XHRcdFx0dmFyIHJlZyA9IG5ldyBSZWdFeHAoXCIoXFxcXFtsaXZlUmFtcFRva2VuXFxcXF0pXCIsIFwiZ1wiKTsgLy8gIC8oXFxbbGl2ZVJhbXBUb2tlblxcXFxcXF0pKy9nO1xuXHRcdFx0XHRcdHZhciBsaXZlUmFtcEJhc2VFbmRwb2ludCA9IGxpdmVSYW1wVGVtcGxhdGVFbmRwb2ludC5yZXBsYWNlKFxuXHRcdFx0XHRcdFx0cmVnLFxuXHRcdFx0XHRcdFx0bGl2ZVJhbXBUZW5hbnRUb2tlblxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0dmFyIHNyY1VybCA9XG5cdFx0XHRcdFx0XHRsaXZlUmFtcEJhc2VFbmRwb2ludCArXG5cdFx0XHRcdFx0XHR0ZW5hbnRUb2tlbiArXG5cdFx0XHRcdFx0XHRcIl9cIiArXG5cdFx0XHRcdFx0XHR0ZW5hbnRJZCArXG5cdFx0XHRcdFx0XHRcIl9cIiArXG5cdFx0XHRcdFx0XHR2aXNpdG9ySWQ7XG5cdFx0XHRcdFx0b3B0aW1vdmVMaXZlUmFtcERhdGFNYXRjaGluZyhzcmNVcmwpO1xuXG5cdFx0XHRcdFx0b3B0aXRyYWNrTW9kdWxlLnBlcnNpc3RTREtTZXNzaW9uRGF0YShcblx0XHRcdFx0XHRcdG9wdGl0cmFja01vZHVsZSxcblx0XHRcdFx0XHRcdGxpdlJhbXBJZCxcblx0XHRcdFx0XHRcdHZpc2l0b3JJZFxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9O1xuXHRcdHJldHVybiB7XG5cdFx0XHR1cGRhdGVMaXZlUmFtcERhdGFNYXRjaGluZzogdXBkYXRlTGl2ZVJhbXBEYXRhTWF0Y2hpbmdcblx0XHR9O1xuXHR9KSgpO1xuXG5cdGNvbnN0IGRhdG9uaWNzTW9kdWxlID0gKGZ1bmN0aW9uICgpIHtcblx0XHR2YXIgdXBkYXRlRGF0b25pY3NEYXRhTWF0Y2hpbmcgPSBmdW5jdGlvbiAoKSB7XG5cdFx0XHQvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblx0XHRcdC8vIEZ1bmN0aW9uOiB1cGRhdGVEYXRvbmljc1xuXHRcdFx0Ly8gQXJnczogY3VzdG9tZXIgdXNlcklkIG9yIG51bGwgaWYgdmlzaXRvclxuXHRcdFx0Ly8gU2V0cyB0aGUgT3B0aW1vdmUgU0RLIExvZ2dpbmcgTW9kZVxuXHRcdFx0Ly8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cdFx0XHQvLzxpbWcgc3JjPVwiZmVpLnByby1tYXJrZXQubmV0L2VuZ2luZT9kdT05Nztjc3luYz1bb3B0aW1vdmVfQ2xpZW50X0lEX09wdGltb3ZlX0Nvb2tpZV9JRF07cm5kPShSYW5kb21OdW1iZXIpXCI+XG5cblx0XHRcdHZhciBvcHRpbW92ZURhdGFNYXRjaGluZyA9IGZ1bmN0aW9uIChcblx0XHRcdFx0b3B0aW1vdmVfQ29va2llX0lELFxuXHRcdFx0XHRvcHRpbW92ZV9DbGllbnRfSURcblx0XHRcdCkge1xuXHRcdFx0XHRpZiAob3B0aW1vdmVfQ29va2llX0lEICE9IG51bGwpIHtcblx0XHRcdFx0XHR2YXIgYmFzZUVuZHBvaW50ID1cblx0XHRcdFx0XHRcdF9jb25maWd1cmF0aW9uLkRhdG9uaWNzQ29va2llTWF0Y2hpbmdNZXRhRGF0YS5iYXNlRW5kcG9pbnQ7XG5cdFx0XHRcdFx0dmFyIGQgPSBkb2N1bWVudDtcblx0XHRcdFx0XHR2YXIgZyA9IGQuY3JlYXRlRWxlbWVudChcImltZ1wiKTtcblx0XHRcdFx0XHR2YXIgcyA9IGQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCJzY3JpcHRcIilbMF07XG5cdFx0XHRcdFx0Zy50eXBlID0gXCJ0ZXh0L2phdmFzY3JpcHRcIjtcblx0XHRcdFx0XHRnLmFzeW5jID0gdHJ1ZTtcblx0XHRcdFx0XHRnLmRlZmVyID0gdHJ1ZTtcblx0XHRcdFx0XHR2YXIgcmFuZG9tID0gTWF0aC5yb3VuZChNYXRoLnJhbmRvbSgpICogMTAwMDAwMDAwMDAwMDAwMDApO1xuXHRcdFx0XHRcdGcuc3JjID1cblx0XHRcdFx0XHRcdGJhc2VFbmRwb2ludCArXG5cdFx0XHRcdFx0XHRcImNzeW5jPVwiICtcblx0XHRcdFx0XHRcdG9wdGltb3ZlX0NsaWVudF9JRCArXG5cdFx0XHRcdFx0XHRcIl9cIiArXG5cdFx0XHRcdFx0XHRvcHRpbW92ZV9Db29raWVfSUQgK1xuXHRcdFx0XHRcdFx0XCI7cm5kPShcIiArXG5cdFx0XHRcdFx0XHRyYW5kb20gK1xuXHRcdFx0XHRcdFx0XCIpXCI7XG5cdFx0XHRcdFx0cy5wYXJlbnROb2RlLmluc2VydEJlZm9yZShnLCBzKTtcblx0XHRcdFx0fVxuXHRcdFx0fTtcblx0XHRcdHZhciBkYXRvbmljc0lkID0gb3B0aXRyYWNrTW9kdWxlLmdldEtleUlkKG9wdGl0cmFja01vZHVsZSwgXCJkYXRvbmljc1wiKTtcblx0XHRcdHZhciBkYXRvbmljc09uU2Vzc2lvblBlcnNpc3RlZCA9IG9wdGl0cmFja01vZHVsZS5nZXRQZXJzaXN0ZWRTREtTZXNzaW9uRGF0YShcblx0XHRcdFx0b3B0aXRyYWNrTW9kdWxlLFxuXHRcdFx0XHRkYXRvbmljc0lkXG5cdFx0XHQpO1xuXHRcdFx0dmFyIHZpc2l0b3JJZCA9IHVuZGVmaW5lZDtcblx0XHRcdHZhciBpbmZvID0gZ2V0VmlzaXRvcnNJbmZvT2JqKCk7XG5cdFx0XHR2aXNpdG9ySWQgPSBpbmZvLnZpc2l0b3JJZDtcblx0XHRcdGlmIChcblx0XHRcdFx0ZGF0b25pY3NPblNlc3Npb25QZXJzaXN0ZWQgPT0gbnVsbCB8fFxuXHRcdFx0XHRkYXRvbmljc09uU2Vzc2lvblBlcnNpc3RlZC52YWx1ZSAhPSB2aXNpdG9ySWRcblx0XHRcdCkge1xuXHRcdFx0XHR2YXIgdGVuYW50SWQgPSBfY29uZmlndXJhdGlvbi5vcHRpdHJhY2tNZXRhRGF0YS5zaXRlSWQ7XG5cdFx0XHRcdG9wdGltb3ZlRGF0YU1hdGNoaW5nKHZpc2l0b3JJZCwgdGVuYW50SWQpO1xuXHRcdFx0XHRvcHRpdHJhY2tNb2R1bGUucGVyc2lzdFNES1Nlc3Npb25EYXRhKFxuXHRcdFx0XHRcdG9wdGl0cmFja01vZHVsZSxcblx0XHRcdFx0XHRkYXRvbmljc0lkLFxuXHRcdFx0XHRcdHZpc2l0b3JJZFxuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXHRcdH07XG5cdFx0cmV0dXJuIHtcblx0XHRcdHVwZGF0ZURhdG9uaWNzRGF0YU1hdGNoaW5nOiB1cGRhdGVEYXRvbmljc0RhdGFNYXRjaGluZ1xuXHRcdH07XG5cdH0pKCk7XG5cblx0Y29uc3QgY29va2llTWF0Y2hlck1vZHVsZSA9IChmdW5jdGlvbiAoKSB7XG5cdFx0Ly8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cdFx0Ly8gRnVuY3Rpb246IHVwZGF0ZUNvb2tpZU1hdGNoZXJcblx0XHQvLyBBcmdzOiBjdXN0b21lciB1c2VySWQgb3IgbnVsbCBpZiB2aXNpdG9yXG5cdFx0Ly8gU2V0cyB0aGUgT3B0aW1vdmUgU0RLIExvZ2dpbmcgTW9kZVxuXHRcdC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXHRcdHZhciB1cGRhdGVDb29raWVNYXRjaGVyID0gZnVuY3Rpb24gKHVzZXJJZCkge1xuXHRcdFx0dmFyIHNldE9wdGltb3ZlQ29va2llID0gZnVuY3Rpb24gKGNvb2tpZU1hdGNoZXJVc2VySWQpIHtcblx0XHRcdFx0dmFyIHNldENvb2tpZVVybCA9XG5cdFx0XHRcdFx0XCJodHRwczovL2djbS5vcHRpbW92ZS5ldmVudHMvc2V0Q29va2llP29wdGltb3ZlX2lkPVwiICtcblx0XHRcdFx0XHRjb29raWVNYXRjaGVyVXNlcklkO1xuXHRcdFx0XHR2YXIgc2V0Q29va2llTm9kZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJpbWdcIik7XG5cdFx0XHRcdHNldENvb2tpZU5vZGUuc3R5bGUuZGlzcGxheSA9IFwibm9uZVwiO1xuXHRcdFx0XHRzZXRDb29raWVOb2RlLnNldEF0dHJpYnV0ZShcInNyY1wiLCBzZXRDb29raWVVcmwpO1xuXHRcdFx0XHRkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHNldENvb2tpZU5vZGUpO1xuXHRcdFx0fTtcblxuXHRcdFx0dmFyIG1hdGNoQ29va2llID0gZnVuY3Rpb24gKHRlbmFudFRva2VuLCBvcHRpbW92ZUNvb2tpZU1hdGNoZXJJZCkge1xuXHRcdFx0XHQvL3ZhciB1cmwgPSBcImh0dHBzOi8vY20uZy5kb3VibGVjbGljay5uZXQvcGl4ZWw/Z29vZ2xlX25pZD1PcHRpbW92ZUNvb2tpZU1hdGNoZXJJRCZnb29nbGVfY20mdGVuYW50X2lkPVRlbmFudElEXCI7XG5cdFx0XHRcdHZhciB1cmwgPVxuXHRcdFx0XHRcdFwiaHR0cHM6Ly9jbS5nLmRvdWJsZWNsaWNrLm5ldC9waXhlbD9nb29nbGVfbmlkPVwiICtcblx0XHRcdFx0XHRvcHRpbW92ZUNvb2tpZU1hdGNoZXJJZCArXG5cdFx0XHRcdFx0XCImZ29vZ2xlX2NtJnRlbmFudF9pZD1cIiArXG5cdFx0XHRcdFx0dGVuYW50VG9rZW47XG5cdFx0XHRcdHZhciBub2RlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImltZ1wiKTtcblx0XHRcdFx0bm9kZS5zdHlsZS5kaXNwbGF5ID0gXCJub25lXCI7XG5cdFx0XHRcdG5vZGUuc2V0QXR0cmlidXRlKFwic3JjXCIsIHVybCk7XG5cdFx0XHRcdGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQobm9kZSk7XG5cdFx0XHR9O1xuXG5cdFx0XHR2YXIgZ29vZ2xDb29raWVNYXRjaElkID0gb3B0aXRyYWNrTW9kdWxlLmdldEtleUlkKFxuXHRcdFx0XHRvcHRpdHJhY2tNb2R1bGUsXG5cdFx0XHRcdFwiZ29vZ2xDb29raWVNYXRjaFwiXG5cdFx0XHQpO1xuXHRcdFx0dmFyIGdvb2dsQ29va2llTWF0Y2hPblNlc3Npb25QZXJzaXN0ZWQgPSBvcHRpdHJhY2tNb2R1bGUuZ2V0UGVyc2lzdGVkU0RLU2Vzc2lvbkRhdGEoXG5cdFx0XHRcdG9wdGl0cmFja01vZHVsZSxcblx0XHRcdFx0Z29vZ2xDb29raWVNYXRjaElkXG5cdFx0XHQpO1xuXHRcdFx0dmFyIHZpc2l0b3JJZCA9IHVuZGVmaW5lZDtcblx0XHRcdHZhciBpbmZvID0gZ2V0VmlzaXRvcnNJbmZvT2JqKCk7XG5cdFx0XHR2aXNpdG9ySWQgPSBpbmZvLnZpc2l0b3JJZDtcblx0XHRcdHZhciBjb29raWVNYXRjaGVyVXNlcklkID0gbnVsbDtcblx0XHRcdGlmICh0eXBlb2YgdXNlcklkICE9IFwidW5kZWZpbmVkXCIgJiYgdXNlcklkICE9IG51bGwpIHtcblx0XHRcdFx0Y29va2llTWF0Y2hlclVzZXJJZCA9IHVzZXJJZDtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGNvb2tpZU1hdGNoZXJVc2VySWQgPSB2aXNpdG9ySWQ7XG5cdFx0XHR9XG5cblx0XHRcdGlmIChcblx0XHRcdFx0Z29vZ2xDb29raWVNYXRjaE9uU2Vzc2lvblBlcnNpc3RlZCA9PSBudWxsIHx8XG5cdFx0XHRcdGdvb2dsQ29va2llTWF0Y2hPblNlc3Npb25QZXJzaXN0ZWQudmFsdWUgIT0gdmlzaXRvcklkXG5cdFx0XHQpIHtcblx0XHRcdFx0c2V0T3B0aW1vdmVDb29raWUoY29va2llTWF0Y2hlclVzZXJJZCk7XG5cblx0XHRcdFx0dmFyIHRlbmFudFRva2VuID0gX2NvbmZpZ3VyYXRpb24uY29va2llTWF0Y2hlck1ldGFEYXRhLnRlbmFudFRva2VuO1xuXHRcdFx0XHRtYXRjaENvb2tpZShcblx0XHRcdFx0XHR0ZW5hbnRUb2tlbixcblx0XHRcdFx0XHRfY29uZmlndXJhdGlvbi5jb29raWVNYXRjaGVyTWV0YURhdGEub3B0aW1vdmVDb29raWVNYXRjaGVySWRcblx0XHRcdFx0KTtcblx0XHRcdFx0b3B0aXRyYWNrTW9kdWxlLnBlcnNpc3RTREtTZXNzaW9uRGF0YShcblx0XHRcdFx0XHRvcHRpdHJhY2tNb2R1bGUsXG5cdFx0XHRcdFx0Z29vZ2xDb29raWVNYXRjaElkLFxuXHRcdFx0XHRcdHZpc2l0b3JJZFxuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXHRcdH07XG5cblx0XHRyZXR1cm4ge1xuXHRcdFx0dXBkYXRlQ29va2llTWF0Y2hlcjogdXBkYXRlQ29va2llTWF0Y2hlclxuXHRcdH07XG5cdH0pKCk7XG5cbi8qXHRjb25zdCBzZXRDdXN0b21Db25maWd1cmF0aW9uID0gZnVuY3Rpb24gKG9iaikge1xuXHRcdF9jb25maWd1cmF0aW9uID0gb2JqO1xuXHR9OyovXG5cblx0Y29uc3Qgc2V0VXNlcklkSGFuZGxlciA9ICh1cGRhdGVkVXNlcklkKSA9PiB7XG5cdFx0bGV0IHVzZXJJZCA9IHVwZGF0ZWRVc2VySWQ7XG5cdFx0bGV0IHVzZXJJbmZvID0gZ2V0VXNlckluZm8oKTtcblxuXHRcdGlmICh1c2VySW5mby51c2VySWQgJiYgdXNlckluZm8udXNlcklkID09PSB1c2VySWQpIHtcblx0XHRcdGxvZ2dlci5sb2coJ2luZm8nLCAnc2V0VXNlcklkOiBVc2VyIElEIGlzIGFscmVhZHkgc2V0Jyk7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXHRcdGxldCBvcmlnaW5hbFZpc2l0b3JJZCA9ICF1c2VySW5mby5vcmlnaW5hbFZpc2l0b3JJZCA/IGdlbmVyYXRlVmlzaXRvcklkKCkgOiBnZXRPcmlnaW5hbFZpc2l0b3JJZCgpO1xuXHRcdC8vIE5lZWQgMTYgZmlyc3QgY2hhcmFjdGVycyAoZm9sbG93aW5nIFBpd2lrIGJlaGF2aW91cilcblx0XHRyZXR1cm4ge1xuXHRcdFx0dXNlcklkOiB1c2VySWQsXG5cdFx0XHRvcmlnaW5hbFZpc2l0b3JJZDogb3JpZ2luYWxWaXNpdG9ySWQsXG5cdFx0XHR1cGRhdGVkVmlzaXRvcklkOiBfU0hBMS5TSEExKHVwZGF0ZWRVc2VySWQgfHwgJycpLnN1YnN0cmluZygwLCAxNilcblx0XHR9O1xuXHR9O1xuXG5cdGNvbnN0IF9BUEkgPSB7XG5cdFx0Z2V0VmVyc2lvbjogKCkgPT4ge1xuXHRcdFx0cmV0dXJuIF92ZXJzaW9uO1xuXHRcdH0sXG5cblx0XHQvKiB3ZWJwYWNrLXN0cmlwLWJsb2NrOnJlbW92ZWQgKi9cblx0XHRnZXRDb25maWd1cmF0aW9uVmVyc2lvbjogKCkgPT4ge1xuXHRcdFx0cmV0dXJuIF9jb25maWd1cmF0aW9uLnZlcnNpb247XG5cdFx0fSxcblx0XHRnZXRWaXNpdG9ySWQ6ICgpID0+IHtcblx0XHRcdHJldHVybiBnZXRWaXNpdG9ySWQoKTtcblx0XHR9LFxuXHRcdGdldFVzZXJJZDogKCkgPT4ge1xuXHRcdFx0cmV0dXJuIGdldFVzZXJJZCgpO1xuXHRcdH0sXG5cdFx0c2V0UmVhbFRpbWVPcHRpb25zOiAob3B0aW9ucykgPT4ge1xuXHRcdFx0aWYgKG9wdGlvbnMuc2hvd0RpbW1lciAhPSBudWxsKSB7XG5cdFx0XHRcdF9jb25maWd1cmF0aW9uLnJlYWx0aW1lTWV0YURhdGEub3B0aW9ucy5zaG93RGltbWVyID0gb3B0aW9ucy5zaG93RGltbWVyO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAob3B0aW9ucy5zaG93V2F0ZXJtYXJrICE9IG51bGwpIHtcblx0XHRcdFx0X2NvbmZpZ3VyYXRpb24ucmVhbHRpbWVNZXRhRGF0YS5vcHRpb25zLnNob3dXYXRlcm1hcmsgPSBvcHRpb25zLnNob3dXYXRlcm1hcms7XG5cdFx0XHR9XG5cblx0XHRcdGlmIChvcHRpb25zLnJlcG9ydEV2ZW50Q2FsbGJhY2sgIT0gbnVsbCkge1xuXHRcdFx0XHRfY29uZmlndXJhdGlvbi5yZWFsdGltZU1ldGFEYXRhLm9wdGlvbnMucG9wdXBDYWxsYmFjayA9IG9wdGlvbnMucmVwb3J0RXZlbnRDYWxsYmFjaztcblx0XHRcdH1cblx0XHR9LFxuXHRcdHNldFVzZXJJZDogKHVzZXJJZCwgY2FsbGJhY2spID0+IHtcblx0XHRcdGxldCB1cGRhdGVkVXNlcklkID0gdXNlcklkIHx8IG51bGw7XG5cblx0XHRcdGlmICghdXBkYXRlZFVzZXJJZCAmJiAhY2FsbGJhY2spIHtcblx0XHRcdFx0Y29uc29sZS5lcnJvcihgVXNlcklkIGlzIG5vdCBkZWZpbmVkICR7dXBkYXRlZFVzZXJJZH0sIG5vIHVzZXIgSUQgaGFkIGJlZW4gc2V0YCk7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblxuXHRcdFx0bGV0IHVzZXJJbmZvID0gc2V0VXNlcklkSGFuZGxlcih1cGRhdGVkVXNlcklkKTtcblxuXHRcdFx0aWYgKHVzZXJJbmZvKSB7XG5cdFx0XHRcdGxldCBldmVudEhhbmRsZXIgPSBldmVudHNIYW5kbGVyO1xuXHRcdFx0XHRldmVudEhhbmRsZXIubG9nRXZlbnQoa2V5U2V0VXNlcklkRXZlbnQsIHVzZXJJbmZvKTtcblx0XHRcdFx0ZXZlbnRIYW5kbGVyLmRpc3BhdGNoKClcblx0XHRcdFx0XHQudGhlbihkYXRhID0+IHtcblx0XHRcdFx0XHRcdGlmIChfVG9vbHMudmFsaWRhdGVVc2VySWQodXBkYXRlZFVzZXJJZCkgJiYgX1Rvb2xzLnZhbGlkYXRlVXNlcklkTGVuZ3RoKHVwZGF0ZWRVc2VySWQpKSB7XG5cdFx0XHRcdFx0XHRcdHNldFZpc2l0b3JJZCh1c2VySW5mby51cGRhdGVkVmlzaXRvcklkKTtcblx0XHRcdFx0XHRcdFx0c2V0VXNlcklkKHVwZGF0ZWRVc2VySWQpO1xuXHRcdFx0XHRcdFx0XHQvLyAjIyMgYmVnaW5cblx0XHRcdFx0XHRcdFx0aWYgKF9jb25maWd1cmF0aW9uLmVuYWJsZVdlYlB1c2gpIHtcblx0XHRcdFx0XHRcdFx0XHRsb2dnZXIubG9nKCdpbmZvJywgJ2t1bXVsb3MgYXNzb2NpYXRpbmcgdXNlciBpZGVudGlmaWVyOiAnICsgdXNlckluZm8udXNlcklkKTtcblx0XHRcdFx0XHRcdFx0XHRLdW11bG9zKCdhc3NvY2lhdGVVc2VyJywgdXNlckluZm8udXNlcklkKTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHQvLyAjIyMgZW5kXG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdGlmICh0eXBlb2YgY2FsbGJhY2sgPT09ICdmdW5jdGlvbicpIHtcblx0XHRcdFx0XHRcdFx0Y2FsbGJhY2soKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9KVxuXHRcdFx0XHRcdC5jYXRjaChlcnJvciA9PiB7XG5cdFx0XHRcdFx0XHRsb2dnZXIubG9nKCdlcnJvcicsIGBzZXRVc2VySWQgZXJyb3IgPSAke2Vycm9yfWApO1xuXHRcdFx0XHRcdH0pO1xuXG5cdFx0XHRcdGlmIChfY29uZmlndXJhdGlvbi5zdXBwb3J0Q29va2llTWF0Y2hlciA9PSB0cnVlKSB7XG5cdFx0XHRcdFx0Y29va2llTWF0Y2hlck1vZHVsZS51cGRhdGVDb29raWVNYXRjaGVyKHVwZGF0ZWRVc2VySWQpO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRpZiAodHlwZW9mIGNhbGxiYWNrID09PSAnZnVuY3Rpb24nKSB7XG5cdFx0XHRcdFx0Y2FsbGJhY2soKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0sXG5cdFx0c2V0VXNlckVtYWlsOiAoZW1haWwsIGNhbGxiYWNrLCB1c2VySWQpID0+IHtcblx0XHRcdGxldCB1cGRhdGVkVXNlcklkID0gdXNlcklkIHx8IG51bGw7XG5cdFx0XHRsZXQgZXZlbnRIYW5kbGVyID0gZXZlbnRzSGFuZGxlcjtcblx0XHRcdGxldCB1c2VySW5mbztcblx0XHRcdGlmICghZW1haWwpIHtcblx0XHRcdFx0bG9nZ2VyLmxvZygnZXJyb3InLCBgc2V0VXNlckVtYWlsOiBlbWFpbCBpcyBtaXNzaW5nYCk7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblx0XHRcdGxldCB1c2VyRW1haWwgPSBlbWFpbC50cmltKCk7XG5cblx0XHRcdGlmICh1c2VyRW1haWwpIHtcblx0XHRcdFx0bGV0IHBhcmFtcyA9IHtcblx0XHRcdFx0XHRlbWFpbDogZW1haWxcblx0XHRcdFx0fTtcblxuXHRcdFx0XHRpZiAodXBkYXRlZFVzZXJJZCkge1xuXHRcdFx0XHRcdHVzZXJJbmZvID0gc2V0VXNlcklkSGFuZGxlcih1cGRhdGVkVXNlcklkKTtcblx0XHRcdFx0XHRpZiAodXNlckluZm8pIHtcblx0XHRcdFx0XHRcdGV2ZW50SGFuZGxlci5sb2dFdmVudChrZXlTZXRVc2VySWRFdmVudCwgdXNlckluZm8pO1xuXHRcdFx0XHRcdFx0aWYgKF9jb25maWd1cmF0aW9uLnN1cHBvcnRDb29raWVNYXRjaGVyID09IHRydWUpIHtcblx0XHRcdFx0XHRcdFx0Y29va2llTWF0Y2hlck1vZHVsZS51cGRhdGVDb29raWVNYXRjaGVyKHVwZGF0ZWRVc2VySWQpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdGV2ZW50SGFuZGxlci5sb2dFdmVudChrZXlTZXRFbWFpbEV2ZW50LCBwYXJhbXMsIHVzZXJJbmZvKTtcblx0XHRcdFx0ZXZlbnRIYW5kbGVyLmRpc3BhdGNoKClcblx0XHRcdFx0XHQudGhlbihkYXRhID0+IHtcblx0XHRcdFx0XHRcdGlmICh1c2VySW5mbykge1xuXHRcdFx0XHRcdFx0XHRpZiAoX1Rvb2xzLnZhbGlkYXRlVXNlcklkKHVwZGF0ZWRVc2VySWQpICYmIF9Ub29scy52YWxpZGF0ZVVzZXJJZExlbmd0aCh1cGRhdGVkVXNlcklkKSkge1xuXHRcdFx0XHRcdFx0XHRcdHNldFZpc2l0b3JJZCh1c2VySW5mby51cGRhdGVkVmlzaXRvcklkKTtcblx0XHRcdFx0XHRcdFx0XHRzZXRVc2VySWQodXBkYXRlZFVzZXJJZCk7XG5cdFx0XHRcdFx0XHRcdFx0Ly8gIyMjIGJlZ2luXG5cdFx0XHRcdFx0XHRcdFx0aWYgKF9jb25maWd1cmF0aW9uLmVuYWJsZVdlYlB1c2gpIHtcblx0XHRcdFx0XHRcdFx0XHRcdGxvZ2dlci5sb2coJ2luZm8nLCAna3VtdWxvcyBhc3NvY2lhdGluZyB1c2VyIGlkZW50aWZpZXI6ICcgKyB1c2VySW5mby51c2VySWQpO1xuXHRcdFx0XHRcdFx0XHRcdFx0S3VtdWxvcygnYXNzb2NpYXRlVXNlcicsIHVzZXJJbmZvLnVzZXJJZCk7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdC8vICMjIyBlbmRcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0aWYgKGNhbGxiYWNrICYmIHR5cGVvZiBjYWxsYmFjayA9PT0gJ2Z1bmN0aW9uJykge1xuXHRcdFx0XHRcdFx0XHRjYWxsYmFjaygpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0pXG5cdFx0XHRcdFx0LmNhdGNoKGVycm9yID0+IHtcblx0XHRcdFx0XHRcdGxvZ2dlci5sb2coJ2Vycm9yJywgYHNldFVzZXJFbWFpbCBlcnJvciA9ICR7ZXJyb3J9YCk7XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0fSxcblx0XHRyZWdpc3RlclVzZXI6ICh1c2VySWQsIGVtYWlsLCBldmVudE5hbWUsIHBhcmFtZXRlcnMsIGNhbGxiYWNrKSA9PiB7XG5cdFx0XHRsZXQgdXBkYXRlZFVzZXJJZCA9IHVzZXJJZCB8fCBudWxsO1xuXHRcdFx0aWYgKCF1cGRhdGVkVXNlcklkICkge1xuXHRcdFx0XHRjb25zb2xlLmVycm9yKGBVc2VySWQgaXMgbm90IGRlZmluZWQgJHt1cGRhdGVkVXNlcklkfSwgbm8gdXNlciBJRCBoYWQgYmVlbiBzZXRgKTtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXHRcdFx0bGV0IHVzZXJJbmZvID0gc2V0VXNlcklkSGFuZGxlcih1cGRhdGVkVXNlcklkKTtcblx0XHRcdGlmICh1c2VySW5mbykge1xuXHRcdFx0XHRsZXQgZXZlbnRIYW5kbGVyID0gZXZlbnRzSGFuZGxlcjtcblx0XHRcdFx0ZXZlbnRIYW5kbGVyLmxvZ0V2ZW50KGtleVNldFVzZXJJZEV2ZW50LCB1c2VySW5mbyk7XG5cblx0XHRcdFx0aWYgKGVtYWlsKSB7XG5cdFx0XHRcdFx0ZXZlbnRIYW5kbGVyLmxvZ0V2ZW50KGtleVNldEVtYWlsRXZlbnQsIHtcblx0XHRcdFx0XHRcdGVtYWlsOiBlbWFpbFxuXHRcdFx0XHRcdH0sIHVzZXJJbmZvKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAoZXZlbnROYW1lKSB7XG5cdFx0XHRcdFx0ZXZlbnRIYW5kbGVyLmxvZ0V2ZW50KGV2ZW50TmFtZSwgcGFyYW1ldGVycywgdXNlckluZm8pO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGV2ZW50SGFuZGxlci5kaXNwYXRjaCgpLnRoZW4oKCkgPT4ge1xuXHRcdFx0XHRcdGlmICh1c2VySW5mbykge1xuXHRcdFx0XHRcdFx0aWYgKF9Ub29scy52YWxpZGF0ZVVzZXJJZCh1cGRhdGVkVXNlcklkKSAmJiBfVG9vbHMudmFsaWRhdGVVc2VySWRMZW5ndGgodXBkYXRlZFVzZXJJZCkpIHtcblx0XHRcdFx0XHRcdFx0c2V0VmlzaXRvcklkKHVzZXJJbmZvLnVwZGF0ZWRWaXNpdG9ySWQpO1xuXHRcdFx0XHRcdFx0XHRzZXRVc2VySWQodXBkYXRlZFVzZXJJZCk7XG5cdFx0XHRcdFx0XHRcdC8vICMjIyBiZWdpblxuXHRcdFx0XHRcdFx0XHRpZiAoX2NvbmZpZ3VyYXRpb24uZW5hYmxlV2ViUHVzaCkge1xuXHRcdFx0XHRcdFx0XHRcdGxvZ2dlci5sb2coJ2luZm8nLCAna3VtdWxvcyBhc3NvY2lhdGluZyB1c2VyIGlkZW50aWZpZXI6ICcgKyB1c2VySW5mby51c2VySWQpO1xuXHRcdFx0XHRcdFx0XHRcdEt1bXVsb3MoJ2Fzc29jaWF0ZVVzZXInLCB1c2VySW5mby51c2VySWQpO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdC8vICMjIyBlbmRcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0aWYgKGNhbGxiYWNrICYmIHR5cGVvZiBjYWxsYmFjayA9PT0gJ2Z1bmN0aW9uJykge1xuXHRcdFx0XHRcdFx0Y2FsbGJhY2soKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pO1xuXHRcdFx0fSBlbHNlIGlmIChjYWxsYmFjayAmJiB0eXBlb2YgY2FsbGJhY2sgPT09ICdmdW5jdGlvbicpIHtcblx0XHRcdFx0XHRjYWxsYmFjaygpO1xuXHRcdFx0fVxuXHRcdH0sXG5cdFx0cmVwb3J0RXZlbnQ6IChldmVudE5hbWUsIHBhcmFtZXRlcnMsIGNhbGxiYWNrLCB1c2VySWQpID0+IHtcblx0XHRcdGxldCB1cGRhdGVkVXNlcklkID0gdXNlcklkIHx8IG51bGw7XG5cdFx0XHRsZXQgZXZlbnRIYW5kbGVyID0gZXZlbnRzSGFuZGxlcjtcblx0XHRcdGxldCB1c2VySW5mbztcblxuXHRcdFx0aWYgKHVwZGF0ZWRVc2VySWQpIHtcblx0XHRcdFx0dXNlckluZm8gPSBzZXRVc2VySWRIYW5kbGVyKHVwZGF0ZWRVc2VySWQpO1xuXHRcdFx0XHRpZiAodXNlckluZm8pIHtcblx0XHRcdFx0XHRldmVudEhhbmRsZXIubG9nRXZlbnQoa2V5U2V0VXNlcklkRXZlbnQsIHVzZXJJbmZvKTtcblx0XHRcdFx0XHRpZiAoX2NvbmZpZ3VyYXRpb24uc3VwcG9ydENvb2tpZU1hdGNoZXIgPT0gdHJ1ZSkge1xuXHRcdFx0XHRcdFx0Y29va2llTWF0Y2hlck1vZHVsZS51cGRhdGVDb29raWVNYXRjaGVyKHVwZGF0ZWRVc2VySWQpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0ZXZlbnRIYW5kbGVyLmxvZ0V2ZW50KGV2ZW50TmFtZSwgcGFyYW1ldGVycywgdXNlckluZm8pO1xuXHRcdFx0ZXZlbnRIYW5kbGVyLmRpc3BhdGNoKCkudGhlbihkYXRhID0+IHtcblx0XHRcdFx0aWYgKHVzZXJJbmZvKSB7XG5cdFx0XHRcdFx0aWYgKF9Ub29scy52YWxpZGF0ZVVzZXJJZCh1cGRhdGVkVXNlcklkKSAmJiBfVG9vbHMudmFsaWRhdGVVc2VySWRMZW5ndGgodXBkYXRlZFVzZXJJZCkpIHtcblx0XHRcdFx0XHRcdHNldFZpc2l0b3JJZCh1c2VySW5mby51cGRhdGVkVmlzaXRvcklkKTtcblx0XHRcdFx0XHRcdHNldFVzZXJJZCh1cGRhdGVkVXNlcklkKTtcblx0XHRcdFx0XHRcdC8vICMjIyBiZWdpblxuXHRcdFx0XHRcdFx0aWYgKF9jb25maWd1cmF0aW9uLmVuYWJsZVdlYlB1c2gpIHtcblx0XHRcdFx0XHRcdFx0bG9nZ2VyLmxvZygnaW5mbycsICdrdW11bG9zIGFzc29jaWF0aW5nIHVzZXIgaWRlbnRpZmllcjogJyArIHVzZXJJbmZvLnVzZXJJZCk7XG5cdFx0XHRcdFx0XHRcdEt1bXVsb3MoJ2Fzc29jaWF0ZVVzZXInLCB1c2VySW5mby51c2VySWQpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0Ly8gIyMjIGVuZFxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAoY2FsbGJhY2sgJiYgdHlwZW9mIGNhbGxiYWNrID09PSAnZnVuY3Rpb24nKSB7XG5cdFx0XHRcdFx0Y2FsbGJhY2soKTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0fSxcblx0XHRzZXRQYWdlVmlzaXQ6IChjdXN0b21VUkxJbiwgcGFnZVRpdGxlSW4sIGNhdGVnb3J5SW4sIHVzZXJJZCkgPT4ge1xuXHRcdFx0bGV0IHBhZ2VUaXRsZSA9IHBhZ2VUaXRsZUluID8gcGFnZVRpdGxlSW4udHJpbSgpIDogbnVsbDtcblx0XHRcdGxldCBjYXRlZ29yeSA9IGNhdGVnb3J5SW4gIT0gdW5kZWZpbmVkID8gY2F0ZWdvcnlJbi50cmltKCkgOiBudWxsO1xuXHRcdFx0bGV0IGN1c3RvbVVSTCA9IGVuY29kZVVSSShjdXN0b21VUkxJbik7XG5cblx0XHRcdGN1c3RvbVVSTCA9IGN1c3RvbVVSTC50cmltKCkudG9Mb3dlckNhc2UoKTtcblxuXHRcdFx0bGV0IHBhcmFtcyA9IHtcblx0XHRcdFx0Y3VzdG9tVVJMOiBjdXN0b21VUkwsXG5cdFx0XHRcdHBhZ2VUaXRsZTogcGFnZVRpdGxlLFxuXHRcdFx0XHRjYXRlZ29yeTogY2F0ZWdvcnlcblx0XHRcdH07XG5cblx0XHRcdGxldCB1cGRhdGVkVXNlcklkID0gdXNlcklkIHx8IG51bGw7XG5cdFx0XHRsZXQgZXZlbnRIYW5kbGVyID0gZXZlbnRzSGFuZGxlcjtcblx0XHRcdGxldCB1c2VySW5mbztcblxuXHRcdFx0aWYgKHVwZGF0ZWRVc2VySWQpIHtcblx0XHRcdFx0dXNlckluZm8gPSBzZXRVc2VySWRIYW5kbGVyKHVwZGF0ZWRVc2VySWQpO1xuXHRcdFx0XHRpZiAodXNlckluZm8pIHtcblx0XHRcdFx0XHRldmVudEhhbmRsZXIubG9nRXZlbnQoa2V5U2V0VXNlcklkRXZlbnQsIHVzZXJJbmZvKTtcblx0XHRcdFx0XHRpZiAoX2NvbmZpZ3VyYXRpb24uc3VwcG9ydENvb2tpZU1hdGNoZXIgPT0gdHJ1ZSkge1xuXHRcdFx0XHRcdFx0Y29va2llTWF0Y2hlck1vZHVsZS51cGRhdGVDb29raWVNYXRjaGVyKHVwZGF0ZWRVc2VySWQpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0ZXZlbnRIYW5kbGVyLmxvZ0V2ZW50KGtleVNldFBhZ2VWaXNpdEV2ZW50LCBwYXJhbXMsIHVzZXJJbmZvKTtcblx0XHRcdGV2ZW50SGFuZGxlci5kaXNwYXRjaCgpXG5cdFx0XHRcdC50aGVuKGRhdGEgPT4ge1xuXHRcdFx0XHRcdGlmICh1c2VySW5mbykge1xuXHRcdFx0XHRcdFx0aWYgKF9Ub29scy52YWxpZGF0ZVVzZXJJZCh1cGRhdGVkVXNlcklkKSAmJiBfVG9vbHMudmFsaWRhdGVVc2VySWRMZW5ndGgodXBkYXRlZFVzZXJJZCkpIHtcblx0XHRcdFx0XHRcdFx0c2V0VmlzaXRvcklkKHVzZXJJbmZvLnVwZGF0ZWRWaXNpdG9ySWQpO1xuXHRcdFx0XHRcdFx0XHRzZXRVc2VySWQodXBkYXRlZFVzZXJJZCk7XG5cdFx0XHRcdFx0XHRcdC8vICMjIyBiZWdpblxuXHRcdFx0XHRcdFx0XHRpZiAoX2NvbmZpZ3VyYXRpb24uZW5hYmxlV2ViUHVzaCkge1xuXHRcdFx0XHRcdFx0XHRcdGxvZ2dlci5sb2coJ2luZm8nLCAna3VtdWxvcyBhc3NvY2lhdGluZyB1c2VyIGlkZW50aWZpZXI6ICcgKyB1c2VySW5mby51c2VySWQpO1xuXHRcdFx0XHRcdFx0XHRcdEt1bXVsb3MoJ2Fzc29jaWF0ZVVzZXInLCB1c2VySW5mby51c2VySWQpO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdC8vICMjIyBlbmRcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pO1xuXG5cdFx0XHRpZiAodHlwZW9mIF9jb25maWd1cmF0aW9uLnN1cHBvcnREYXRvbmljc0Nvb2tpZU1hdGNoaW5nICE9IFwidW5kZWZpbmVkXCIgJiYgX2NvbmZpZ3VyYXRpb24uc3VwcG9ydERhdG9uaWNzQ29va2llTWF0Y2hpbmcgPT0gdHJ1ZSkge1xuXHRcdFx0XHRsb2dnZXIubG9nKCdpbmZvJywgJ2NhbGwgc2V0UGFnZVZpc2l0IHN1cHBvcnQgRGF0b25pY3NDb29raWVNYXRjaGluZycpO1xuXHRcdFx0XHRkYXRvbmljc01vZHVsZS51cGRhdGVEYXRvbmljc0RhdGFNYXRjaGluZygpO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAodHlwZW9mIF9jb25maWd1cmF0aW9uLnN1cHBvcnRDb29raWVNYXRjaGVyICE9IFwidW5kZWZpbmVkXCIgJiYgX2NvbmZpZ3VyYXRpb24uc3VwcG9ydENvb2tpZU1hdGNoZXIgPT0gdHJ1ZSkge1xuXHRcdFx0XHRpZiAoX3VzZXJJZCA9PSBudWxsKSB7XG5cdFx0XHRcdFx0Y29va2llTWF0Y2hlck1vZHVsZS51cGRhdGVDb29raWVNYXRjaGVyKG51bGwpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdGlmICh0eXBlb2YgX2NvbmZpZ3VyYXRpb24uc3VwcG9ydExpdmVSYW1wICE9IFwidW5kZWZpbmVkXCIgJiYgX2NvbmZpZ3VyYXRpb24uc3VwcG9ydExpdmVSYW1wID09IHRydWUpIHtcblx0XHRcdFx0bGl2ZVJhbXBNb2R1bGUudXBkYXRlTGl2ZVJhbXBEYXRhTWF0Y2hpbmcoKTtcblx0XHRcdH1cblxuXHRcdH0sXG5cdFx0Ly8gIyMjIGJlZ2luXG4gICAgICAgIHB1c2hSZWdpc3RlcjogKCkgPT4ge1xuICAgICAgICAgICAgb3B0aW1vYmlsZU1vZHVsZS5wdXNoUmVnaXN0ZXIoKTtcbiAgICAgICAgfSxcbiAgICAgICAgLy8gIyMjIGVuZFxuXHRcdHNob3dSZWFsdGltZVBvcHVwOiByZWFsdGltZU1vZHVsZS5leGVjdXRlUG9wdXAsXG5cdFx0Y2xvc2VSZWFsdGltZVBvcHVwOiByZWFsdGltZU1vZHVsZS5jbG9zZVBvcHVwLFxuXHRcdG9wZW5XZWJUZXN0VG9vbDogKCkgPT4ge1xuXHRcdFx0bGV0IHdlYlNES1Rvb2xFbG0gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcIm9wdGltb3ZlU2RrV2ViVG9vbFwiKTtcblxuXHRcdFx0aWYgKCF3ZWJTREtUb29sRWxtKSB7XG5cdFx0XHRcdG9wZW5UZXN0VG9vbCgpO1xuXHRcdFx0fVxuXHRcdH0sXG5cdFx0Y2xvc2VXZWJUZXN0VG9vbDogKCkgPT4ge1xuXHRcdFx0bGV0IGEgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcIm9wdGltb3ZlU2RrV2ViVG9vbFwiKTtcblx0XHRcdGlmIChhICE9IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRhLnJlbW92ZSgpO1xuXHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdHdpbmRvdy5zZXNzaW9uU3RvcmFnZS5zZXRJdGVtKFwiaXNTaWRlQmFyU2hvdWxkQmVPcGVuXCIsIGZhbHNlKTtcblx0XHRcdFx0fSBjYXRjaCAoZXJyb3IpIHtcblx0XHRcdFx0bG9nZ2VyLmxvZygnZXJyb3InLCBgV2ViIHNkayB0ZXN0IHRvb2wgOiBzZXNzaW9uIHN0b3JhZ2UgYWNjZXNzIGhhcyBmYWlsZWQgOiAgJHtlcnJvcn1gKTtcblx0XHRcdH1cblx0XHRcdH1cblx0XHRcdGRvY3VtZW50LmJvZHkuY2xhc3NMaXN0LnJlbW92ZSgnb3B0aW1vdmVTZGtXZWJUb29sT3BlbicpO1xuXHRcdFx0ZG9jdW1lbnQuYm9keS5zdHlsZS53aWR0aCA9ICdhdXRvJztcblx0XHR9LFxuXHRcdHRvb2xzOiAoKSA9PiB7XG5cdFx0XHRyZXR1cm4gX1Rvb2xzO1xuXHRcdH1cblx0fTtcblxuXHQvKiB3ZWJwYWNrLXN0cmlwLWJsb2NrOnJlbW92ZWQgKi9cblxuXHRpZiAoc2VsZi5vcHRpbW92ZVRlbmFudENvbmZpZ3VyYXRpb24pIHtcblx0XHRpbml0KG51bGwsbnVsbCxudWxsLCBcImluZm9cIik7XG5cdH1cblxuXHRyZXR1cm4ge1xuXHRcdGluaXRpYWxpemU6IGluaXQsXG5cdFx0QVBJOiBfQVBJXG5cdH07XG5cbn0pKCk7XG5cbi8qIHdlYnBhY2stc3RyaXAtYmxvY2s6cmVtb3ZlZCAqL1xuIl0sInNvdXJjZVJvb3QiOiIifQ==