ezlibrary_v2 0.0.40 → 0.0.41

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -2457,10 +2457,10 @@ export class SubformComponent {
2457
2457
  }
2458
2458
  }
2459
2459
  /** @nocollapse */ SubformComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: SubformComponent, deps: [{ token: i1.Router }, { token: i1.ActivatedRoute }, { token: i2.ToastrService }, { token: i3.SystemServiceService }, { token: i4.UploadFileService }, { token: i5.NgxSpinnerService }, { token: i6.ContactServiceService }, { token: i7.CommanServiceService }], target: i0.ɵɵFactoryTarget.Component });
2460
- /** @nocollapse */ SubformComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: SubformComponent, selector: "app-subform", viewQueries: [{ propertyName: "closebtn", first: true, predicate: ["closebtn"], descendants: true }, { propertyName: "fileOptMapMDclsbtn", first: true, predicate: ["fileOptMapMDclsbtn"], descendants: true }, { propertyName: "productDetailMapclsbtn", first: true, predicate: ["productDetailMapclsbtn"], descendants: true }, { propertyName: "deleteclsbtn", first: true, predicate: ["deleteclsbtn"], descendants: true }, { propertyName: "input", first: true, predicate: ["inputs"], descendants: true }, { propertyName: "sortableComponent", first: true, predicate: SortableComponent, descendants: true }], ngImport: i0, template: "<div class=\"mt\">\r\n <div class=\"panel panel-default\">\r\n <div class=\"panel-heading\">\r\n <h3 class=\"panel-title\">\r\n <span class=\"fa fa-chevron-left cp\" (click)=\"pageBck();\"> Back</span>&nbsp;&nbsp;&nbsp; {{pageInfo?.title}}\r\n <span *ngIf=\"contactName==''\" class=\"f-12\">({{cDt | date:'medium'}})</span>\r\n <span *ngIf=\"contactName!=''\" class=\"f-12\">&nbsp;for <b> {{contactName}}</b> </span>\r\n </h3>\r\n <button type=\"button\" id=\"addBtn\" class=\"btn btn-info pull-right\" *ngIf=\"addNew?.is_compulsory == 1\"\r\n appAppNoDblClick (click)=\"userAction('', 'add', '', '');f.reset();\">{{addNew?.form_field_title}}</button>\r\n </div>\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"col-md-2\" *ngIf=\"navigation.length > 0\">\r\n <div class=\"panel panel-default\">\r\n <div class=\"panel-body\">\r\n <div class=\"list-group border-bottom\">\r\n <a href=\"javascript:void(0)\" class=\"list-group-item\" [ngClass]=\"{'active' :i == cLink}\"\r\n *ngFor=\"let nav of navigation;let i=index\" (click)=\"navigationFun(nav,i);\">{{nav.form_field_title}}</a>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div [ngClass]=\"navigation.length > 0 ? 'col-md-10' : 'col-md-12'\">\r\n <div class=\"panel panel-default\">\r\n <!-- primery form -->\r\n <div class=\"panel-body\" style=\"overflow-x: scroll\"\r\n *ngIf=\"navform != 'addtionalDtlMaster' && navform != 'documentUploadMaster' && navform != 'menuAccessMaster' && navform != 'termUserAssignForm' && navform != 'setPasswordForm' && navform!='ledgerBankDetails' && navform!='ledgerAccAdditinalDetails' && navform!='ledgerAddtionalDtlMaster' && navform!='accDeleteRulesForm' && navform!='accJournalAttrForm' && navform!='accLoanAttrForm' && navform!='accJournalSettingForm' && navform!='webMenuAccessMaster' \">\r\n <div class=\"row\">\r\n <div class=\"col-sm-6\">\r\n <form class=\"form-inline pull-left\">\r\n <div class=\"form-group\">\r\n <label for=\"ddlPagesize\">Page Size &nbsp; &nbsp;</label>\r\n <select class=\"form-control\" name=\"pageSize\" [(ngModel)]=\"pageSize\"\r\n (change)=\"onPageSizeChange(pageSize)\">\r\n <option value=\"All\">All</option>\r\n <option value=\"10\">10</option>\r\n <option value=\"25\">25</option>\r\n <option value=\"50\">50</option>\r\n <option value=\"100\">100</option>\r\n </select>\r\n </div>\r\n </form>\r\n <button class=\"btn btn-default\" style=\"padding: 4px 15px 4px 20px;margin-left: 10px;\"\r\n data-toggle=\"tooltip\" data-placement=\"right\" title=\"Refresh\" (click)=\"ngOnInit();\">\r\n <span class=\"fa fa-refresh\"></span>\r\n </button>\r\n </div>\r\n <div class=\"col-sm-6\">\r\n <form class=\"form-inline pull-right\">\r\n <div class=\"form-group\">\r\n <label for=\"exampleInputName2\">Search &nbsp;&nbsp;</label>\r\n <input type=\"text\" class=\"form-control\" id=\"exampleInputName2\" name=\"schtxt\" [(ngModel)]=\"searchF\" />\r\n </div>\r\n </form>\r\n </div>\r\n </div>\r\n <div class=\"table-responsive\" [ngClass]=\"{'table-responsive' :navigation.length > 0}\">\r\n <table class=\"table table-bordered table-hover table-hover-cells\">\r\n <thead>\r\n <tr>\r\n <th>SR No</th>\r\n <th>Action</th>\r\n <th *ngFor=\"let tbh of tblH; let i = index\" (click)=\"setOrder(tbh,i)\">{{tblDesc[tbh]}}\r\n <span [hidden]=\"reverse\" *ngIf=\"showarr === i\">\r\n <i class=\"fa fa-arrow-down\" aria-hidden=\"true\"></i>\r\n </span>\r\n <span [hidden]=\"!reverse\" *ngIf=\"showarr === i\">\r\n <i class=\"fa fa-arrow-up\" aria-hidden=\"true\"></i>\r\n </span>\r\n </th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <ng-container\r\n *ngFor=\"let data of datalist | searchPipe:searchF | orderBy: order:reverse | paginate: { itemsPerPage: pageSize, currentPage: p }; let i = index\">\r\n <tr [ngClass]=\"{'Inactive':data.stt=='InActive'}\">\r\n <td>{{i + 1}}</td>\r\n <td>\r\n <div class=\"btn-group\">\r\n <a href=\"#\" data-toggle=\"dropdown\" class=\"btn btn-info dropdown-toggle\">Action\r\n <span class=\"caret\"></span>\r\n </a>\r\n <ul class=\"dropdown-menu\" role=\"menu\">\r\n <li *ngFor=\"let action of actions\">\r\n <a href=\"javascript:void(0)\" (click)=\"userAction(data,action.form_field,action, i);\">\r\n {{action.form_field_title}}\r\n </a>\r\n </li>\r\n </ul>\r\n </div>\r\n </td>\r\n <td *ngFor=\"let tbh of tblH; let i=index\" on-mouseover=\"hoveredI=i\" on-mouseleave=\"hoveredI=-1\"\r\n style=\"max-width: 300px; word-break: break-word;\">{{data[tbh]}}\r\n <div class=\"onHoverDiv\"\r\n *ngIf=\"i==hoveredI && page_typ!='jsonForm' && navform!='buyertermsMaster'\">\r\n <ul>\r\n <li (click)=\"editCell(data,tbh);\">\r\n <span class=\"fa fa-pencil\"></span>\r\n </li>\r\n </ul>\r\n </div>\r\n </td>\r\n </tr>\r\n </ng-container>\r\n </tbody>\r\n </table>\r\n </div>\r\n <pagination-controls (pageChange)=\"p = $event\" class=\"pull-right\"></pagination-controls>\r\n </div>\r\n <!-- custom form -->\r\n <div class=\"panel-body\"\r\n *ngIf=\"navform == 'addtionalDtlMaster' || navform == 'ledgerAddtionalDtlMaster' || navform == 'ledgerAccAdditinalDetails' || navform=='accDeleteRulesForm' || navform=='accJournalAttrForm' || navform=='accLoanAttrForm' || navform=='accJournalSettingForm'\">\r\n <div class=\"row\">\r\n <div class=\"col-md-12\" *ngFor=\"let ugld of uiGrpList\">\r\n <p class=\"headingCls\">{{uiGrpListDtl[ugld]}}</p>\r\n <div class=\"col-md-6\" *ngFor=\"let formF of uiGrpListDtl[ugld+'#T'];let i = index\">\r\n <div class=\"form-group\" style=\"margin-bottom: 45px !important;\">\r\n <label class=\"col-md-4 control-label\">{{uiGrpListDtl[ugld+'#D'][i]}}</label>\r\n <div class=\"col-md-8\" *ngIf=\"formF == 'n'\">\r\n <div class=\"input-group w-100\">\r\n <input type=\"number\" class=\"form-control\" name=\"{{uiGrpListDtl[ugld+'#V'][i]}}\"\r\n [value]=\"dataDtl[uiGrpListDtl[ugld+'#V'][i]]\" [(ngModel)]=\"dataDtl[uiGrpListDtl[ugld+'#V'][i]]\"\r\n (change)=\"saveFun(uiGrpListDtl[ugld+'#V'][i],dataDtl[uiGrpListDtl[ugld+'#V'][i]],formF)\"\r\n [disabled]=\"uiGrpListDtl[ugld+'#E'][i] == 0 ? false : true\">\r\n </div>\r\n </div>\r\n <div class=\"col-md-8\" *ngIf=\"formF == 't'\">\r\n <div class=\"input-group w-100\">\r\n <input type=\"text\" class=\"form-control\" name=\"{{uiGrpListDtl[ugld+'#V'][i]}}\"\r\n [value]=\"dataDtl[uiGrpListDtl[ugld+'#V'][i]]\" [(ngModel)]=\"dataDtl[uiGrpListDtl[ugld+'#V'][i]]\"\r\n (change)=\"saveFun(uiGrpListDtl[ugld+'#V'][i],dataDtl[uiGrpListDtl[ugld+'#V'][i]],formF)\"\r\n [disabled]=\"uiGrpListDtl[ugld+'#E'][i] == 0 ? false : true\">\r\n </div>\r\n </div>\r\n\r\n\r\n\r\n <!-- added for testing only -->\r\n <div class=\"col-md-8\" *ngIf=\"formF == 'c'\">\r\n <div class=\"input-group w-100\">\r\n <select type=\"text\" class=\"form-control\" name=\"{{uiGrpListDtl[ugld+'#V'][i]}}\"\r\n [(ngModel)]=\"dataDtl[uiGrpListDtl[ugld+'#V'][i]]\"\r\n (change)=\"saveFun(uiGrpListDtl[ugld+'#V'][i],dataDtl[uiGrpListDtl[ugld+'#V'][i]],formF)\">\r\n <option *ngFor=\"let key of attrCListDtl[uiGrpListDtl[ugld+'#V'][i] +'#D'];let j=index\"\r\n value=\"{{attrCListDtl[uiGrpListDtl[ugld+'#V'][i] +'#V'][j]}}\">{{key}}</option>\r\n </select>\r\n <!-- <p *ngFor=\"let a of attrCListDtl[uiGrpListDtl[ugld+'#V'][i] +'#V']\">{{a |json}}:\r\n {{attrCListDtl[uiGrpListDtl[ugld+'#V'][i] +'#V'] |json}}\r\n </p> -->\r\n <!-- <input type=\"text\" class=\"form-control\" name=\"{{uiGrpListDtl[ugld+'#V'][i]}}\" [value]=\"dataDtl[uiGrpListDtl[ugld+'#V'][i]]\"\r\n [(ngModel)]=\"dataDtl[uiGrpListDtl[ugld+'#V'][i]]\" (blur)=\"saveFun(uiGrpListDtl[ugld+'#V'][i],dataDtl[uiGrpListDtl[ugld+'#V'][i]])\"\r\n [disabled]=\"uiGrpListDtl[ugld+'#E'][i] == 0 ? false : true\"> -->\r\n </div>\r\n </div>\r\n <div class=\"col-md-8\" *ngIf=\"formF == 'q'\">\r\n <div class=\"input-group w-100\">\r\n <select type=\"text\" class=\"form-control\" name=\"{{uiGrpListDtl[ugld+'#V'][i]}}\"\r\n [(ngModel)]=\"dataDtl[uiGrpListDtl[ugld+'#V'][i]]\"\r\n (change)=\"saveFun(uiGrpListDtl[ugld+'#V'][i],dataDtl[uiGrpListDtl[ugld+'#V'][i]],formF)\">\r\n <option *ngFor=\"let key of attrQListDtl[uiGrpListDtl[ugld+'#V'][i] +'#D'];let j=index\"\r\n value=\"{{attrQListDtl[uiGrpListDtl[ugld+'#V'][i] +'#D'][j]}}\">{{key}}</option>\r\n </select>\r\n <!-- <p *ngFor=\"let a of attrCListDtl[uiGrpListDtl[ugld+'#V'][i] +'#V']\">{{a |json}}:\r\n {{attrCListDtl[uiGrpListDtl[ugld+'#V'][i] +'#V'] |json}}\r\n </p> -->\r\n <!-- <input type=\"text\" class=\"form-control\" name=\"{{uiGrpListDtl[ugld+'#V'][i]}}\" [value]=\"dataDtl[uiGrpListDtl[ugld+'#V'][i]]\"\r\n [(ngModel)]=\"dataDtl[uiGrpListDtl[ugld+'#V'][i]]\" (blur)=\"saveFun(uiGrpListDtl[ugld+'#V'][i],dataDtl[uiGrpListDtl[ugld+'#V'][i]])\"\r\n [disabled]=\"uiGrpListDtl[ugld+'#E'][i] == 0 ? false : true\"> -->\r\n </div>\r\n </div>\r\n\r\n <div class=\"col-md-8\" *ngIf=\"formF == 'sa'\">\r\n <div class=\"input-group w-100\">\r\n <ng-select style=\"z-index: 5;\" [options]=\"sqlArray[uiGrpListDtl[ugld+'#V'][i]]\" #sfi=\"ngModel\"\r\n [(ngModel)]=\"dataDtl[uiGrpListDtl[ugld+'#V'][i]]\" name=\"{{uiGrpListDtl[ugld+'#V'][i]}}\"\r\n (selected)=\"saveFun(uiGrpListDtl[ugld+'#V'][i],dataDtl[uiGrpListDtl[ugld+'#V'][i]],formF)\"\r\n (filterInputChanged)=\"loadJnlSuggdata($event,uiGrpListDtl[ugld+'#V'][i],uiGrpListDtl[ugld+'#M'][i])\">\r\n </ng-select>\r\n\r\n </div>\r\n </div>\r\n\r\n <div class=\"col-md-8\" *ngIf=\"formF == 'd'\">\r\n <div class=\"input-group w-100\">\r\n <input type=\"date\" class=\"form-control\" name=\"{{uiGrpListDtl[ugld+'#V'][i]}}\"\r\n (change)=\"saveFun(uiGrpListDtl[ugld+'#V'][i],dataDtl[uiGrpListDtl[ugld+'#V'][i]],formF)\"\r\n [value]=\"dataDtl[uiGrpListDtl[ugld+'#V'][i]]\" [(ngModel)]=\"dataDtl[uiGrpListDtl[ugld+'#V'][i]]\"\r\n [disabled]=\"uiGrpListDtl[ugld+'#E'][i] == 0 ? false : true\">\r\n </div>\r\n </div>\r\n <div class=\"col-md-8\" *ngIf=\"formF == 'e'\">\r\n <div class=\"input-group w-100\">\r\n <input type=\"email\" class=\"form-control\" name=\"{{uiGrpListDtl[ugld+'#V'][i]}}\"\r\n (change)=\"saveFun(uiGrpListDtl[ugld+'#V'][i],dataDtl[uiGrpListDtl[ugld+'#V'][i]],formF)\"\r\n [value]=\"dataDtl[uiGrpListDtl[ugld+'#V'][i]]\" [(ngModel)]=\"dataDtl[uiGrpListDtl[ugld+'#V'][i]]\"\r\n (blur)=\"saveFun(uiGrpListDtl[ugld+'#V'][i],dataDtl[uiGrpListDtl[ugld+'#V'][i]],formF)\"\r\n [disabled]=\"uiGrpListDtl[ugld+'#E'][i] == 0 ? false : true\">\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"panel-body form\"\r\n *ngIf=\"navform == 'documentUploadMaster' && navform != 'menuAccessMaster' && navform != 'termUserAssignForm' && navform != 'setPasswordForm'\">\r\n <div class=\"row\">\r\n <form action=\"#\" class=\"form-horizontal form-bordered\">\r\n <div class=\"form-body\">\r\n\r\n <div class=\"col-md-4\">\r\n <select type=\"text\" class=\"form-control\" name=\"doctype\" [(ngModel)]=\"doctype\">\r\n <option *ngFor=\"let docs of documentUploadList\" value=\"{{docs}}\">{{documentUploadDtl[docs]}}\r\n </option>\r\n </select>\r\n </div>\r\n <div class=\"col-md-4\">\r\n <div class=\"fileinput fileinput-new\" data-provides=\"fileinput\">\r\n <span class=\"btn green btn-file\">\r\n <span> Upload </span>\r\n\r\n <input type=\"file\" name=\"...\" (change)=\"uploadDocs($event)\"> </span>\r\n <span class=\"fileinput-filename\"> </span> &nbsp;\r\n <a href=\"javascript:;\" class=\"close fileinput-exists\" data-dismiss=\"fileinput\"> </a>\r\n </div>\r\n <a *ngIf=\"routherDoc!=''\" style=\"cursor:pointer \" (click)=\"rediecttokyc()\"><b>\r\n << back</b></a>\r\n </div>\r\n </div>\r\n </form>\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <p class=\"headingCls\">Existing Documents</p>\r\n </div>\r\n <div class=\"col-md-12\">\r\n <table class=\"subDisplayTable\">\r\n <ng-container *ngFor=\"let docs of documentUploadList;let i = index \">\r\n <tr *ngIf=\"dataDtl[docs]!=undefined\">\r\n <td style=\"width: 10%\">{{documentUploadDtl[docs]}}</td>\r\n <td style=\"width: 90%;text-align: left\">\r\n <ng-container *ngFor=\"let docdtl of dataDtl[docs]\">\r\n <div class=\"fileinput fileinput-new\" *ngIf=\"doceditAction\" data-provides=\"fileinput\">\r\n <span class=\"btn-file\">\r\n <i class=\"fa fa-edit\" tooltip=\"Edit Document\" style=\"font-size:20px\"> </i>\r\n\r\n <input type=\"file\" name=\"...\" (change)=\"EditUploadDocs(docdtl,$event)\"> </span>\r\n <span class=\"fileinput-filename\"> </span> &nbsp;\r\n <a href=\"javascript:;\" class=\"close fileinput-exists\" data-dismiss=\"fileinput\"> </a>\r\n </div>\r\n\r\n &nbsp;&nbsp;\r\n <a><i class=\"fa fa-trash-o\" *ngIf=\"docdeleteAction\" (click)=\"ConfirmdeleteDoc(docdtl)\"\r\n style=\"font-size:20px;cursor: pointer\"> </i> </a>&nbsp;&nbsp;&nbsp;&nbsp;\r\n <a (click)=\"opendocs(docdtl)\"> <i class=\"fa fa-file-o\" style=\"font-size:20px\"> </i> </a>\r\n &nbsp;&nbsp;|&nbsp;&nbsp;\r\n </ng-container>\r\n\r\n </td>\r\n </tr>\r\n </ng-container>\r\n </table>\r\n </div>\r\n\r\n </div>\r\n\r\n\r\n\r\n\r\n </div>\r\n <div class=\"panel-body\"\r\n *ngIf=\"navform != 'documentUploadMaster' && navform == 'menuAccessMaster' && navform != 'termUserAssignForm' && navform != 'setPasswordForm' \">\r\n <div class=\"row\">\r\n <div class=\"col-md-2\">\r\n <div class=\"form-group\">\r\n <label class=\"control-label\" style=\"padding-left: 2px;\">Application</label>\r\n <select class=\"form-control\" [(ngModel)]=\"application\" name=\"User\" (change)=\"loadUsrMdl(application)\">\r\n <option *ngFor=\"let app of applicationList\" value=\"{{app.k}}\">{{app.v}}</option>\r\n </select>\r\n </div>\r\n </div>\r\n <div class=\"col-md-2\" *ngIf=\"userDtls.length>0\">\r\n <div class=\"form-group\">\r\n <label class=\"control-label\" style=\"padding-left: 2px;\">User</label>\r\n <select class=\"form-control\" [(ngModel)]=\"User\" name=\"User\">\r\n <option *ngFor=\"let lov of userDtls\" value=\"{{lov.user_idn}}\">{{lov.username}}</option>\r\n </select>\r\n </div>\r\n </div>\r\n <div class=\"col-md-2\" *ngIf=\"moduleDtls.length>0 && userDtls.length >0 \">\r\n <div class=\"form-group\">\r\n <label class=\"control-label\" style=\"padding-left: 2px;\">Module</label>\r\n <select class=\"form-control\" [(ngModel)]=\"Module\" name=\"Module\">\r\n <option *ngFor=\"let lov of moduleDtls\" value=\"{{lov.module_idn}}\">{{lov.print}}</option>\r\n </select>\r\n </div>\r\n </div>\r\n <div class=\"col-md-2 \">\r\n <button type=\"button\" id=\"addBtn\" class=\"btn btn-info\" style=\"margin-top: 23px;\"\r\n (click)=\"getUserRights(User,Module)\">Assign\r\n Rights\r\n </button>\r\n </div>\r\n </div>\r\n <div style=\"padding: 0 10px;\" *ngIf=\"menuList.length>0\">\r\n <div style=\"border:1px solid #e5e5e5;margin-top: 30px\">\r\n <div class=\"row\">\r\n <div class=\"panel panel-default\" style=\"margin-bottom: 25px;\">\r\n <div class=\"panel-heading\" style=\"padding: 0px;\">\r\n <h3 class=\"panel-title\" style=\"padding: 8px; font-size: 14px;\">Users</h3>\r\n <div class=\"col-md-2 chkAll\" style=\"margin: 0px;\">\r\n <div class=\"form-group\" style=\"padding: 10px;\">\r\n <div class=\"col-md-3\">\r\n <label class=\"switch\">\r\n <input type=\"checkbox\" class=\"switch\" name=\"chkAll\" id=\"chkAll\"\r\n (change)=\"onChangeAll($event,User,Module)\"\r\n [checked]=\"(false !== (userRightsMenuList.length == (menuList.length + totMenu)) ? 'checked' : '')\">\r\n <span></span>\r\n </label>\r\n </div>\r\n <label class=\"col-md-4 control-label text-left\" style=\"padding-top: 8px;\r\n padding-left: 40px;\">All\r\n </label>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"row\">\r\n <form class=\"form-horizontal\">\r\n <div class=\"col-md-12\" *ngFor=\"let mdl of menuList;let i=index\">\r\n <div class=\"form-group\">\r\n <div class=\"col-md-1\">\r\n <label class=\"switch\">\r\n <input type=\"checkbox\" class=\"switch\" name=\"chkMenu\" id=\"chkMenu{{mdl.menu_idn}}\"\r\n (change)=\"onChangeMenu($event,mdl.menu_idn,User,Module)\"\r\n [checked]=\"(false !== userRightsMenuList.includes(mdl?.menu_idn) ? 'checked' : '')\">\r\n <span></span>\r\n </label>\r\n </div>\r\n <label class=\"col-md-2 control-label text-left\" style=\"padding-top: 3px;\">{{mdl.menu}}</label>\r\n </div>\r\n <div class=\"col-md-12\" *ngIf=\"mdl.SubMenu.length > 0\">\r\n <div class=\"form-group\" *ngFor=\"let smdl of mdl.SubMenu\">\r\n <div class=\"col-md-1\" style=\"margin-left:10px;padding-left: 60px;\">\r\n <label class=\"switch\">\r\n <input type=\"checkbox\" class=\"switch\" name=\"chkSubMenu\" id=\"chkSubMenu{{smdl.menu_idn}}\"\r\n (change)=\"onChangeSubMenu($event,smdl.menu_idn,mdl.menu_idn,User,Module)\"\r\n [checked]=\"( false !== userRightsMenuList.includes(smdl?.menu_idn) ? 'checked' : '')\">\r\n <span></span>\r\n </label>\r\n </div>\r\n <label class=\"col-md-4 control-label text-left\"\r\n style=\"padding-top: 8px; font-weight: 100;padding-left: 40px;\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{{smdl.hdr}}</label>\r\n </div>\r\n </div>\r\n </div>\r\n </form>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"panel-body\" *ngIf=\"navform == 'webMenuAccessMaster'\">\r\n <div class=\"row\">\r\n <div class=\"col-md-2\">\r\n <div class=\"form-group\">\r\n <label class=\"control-label\" style=\"padding-left: 2px;\">Application</label>\r\n <select class=\"form-control\" [(ngModel)]=\"application\" name=\"User\" (change)=\"loadUsrMdl(application)\">\r\n <option *ngFor=\"let app of applicationList\" value=\"{{app.k}}\">{{app.v}}</option>\r\n </select>\r\n </div>\r\n </div>\r\n <div class=\"col-md-2\" *ngIf=\"userDtls.length>0\">\r\n <div class=\"form-group\">\r\n <label class=\"control-label\" style=\"padding-left: 2px;\">User</label>\r\n <select class=\"form-control\" [(ngModel)]=\"User\" name=\"User\">\r\n <option *ngFor=\"let lov of userDtls\" value=\"{{lov.user_idn}}\">{{lov.username}}</option>\r\n </select>\r\n </div>\r\n </div>\r\n <div class=\"col-md-2\" *ngIf=\"moduleDtls.length>0 && userDtls.length >0 \">\r\n <div class=\"form-group\">\r\n <label class=\"control-label\" style=\"padding-left: 2px;\">Module</label>\r\n <select class=\"form-control\" [(ngModel)]=\"Module\" name=\"Module\">\r\n <option *ngFor=\"let lov of moduleDtls\" value=\"{{lov.module_idn}}\">{{lov.print}}</option>\r\n </select>\r\n </div>\r\n </div>\r\n <div class=\"col-md-2 \">\r\n <button type=\"button\" id=\"addBtn\" class=\"btn btn-info\" style=\"margin-top: 23px;\"\r\n (click)=\"getUserRights(User,Module)\">Assign\r\n Rights\r\n </button>\r\n </div>\r\n </div>\r\n <div style=\"padding: 0 10px;\" *ngIf=\"menuList.length>0\">\r\n <div style=\"border:1px solid #e5e5e5;margin-top: 30px\">\r\n <div class=\"row\">\r\n <div class=\"panel panel-default\" style=\"margin-bottom: 25px;\">\r\n <div class=\"panel-heading\" style=\"padding: 0px;\">\r\n <h3 class=\"panel-title\" style=\"padding: 8px; font-size: 14px;\">Users</h3>\r\n <div class=\"col-md-2 chkAll\" style=\"margin: 0px;\">\r\n <div class=\"form-group\" style=\"padding: 10px;\">\r\n <div class=\"col-md-3\">\r\n <label class=\"switch\">\r\n <input type=\"checkbox\" class=\"switch\" name=\"chkAll\" id=\"chkAll\"\r\n (change)=\"onChangeAll($event,User,Module)\"\r\n [checked]=\"(false !== (userRightsMenuList.length == (menuList.length + totMenu)) ? 'checked' : '')\">\r\n <span></span>\r\n </label>\r\n </div>\r\n <label class=\"col-md-4 control-label text-left\" style=\"padding-top: 8px;\r\n padding-left: 40px;\">All\r\n </label>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"row\">\r\n <form class=\"form-horizontal\">\r\n <div class=\"col-md-12\" *ngFor=\"let mdl of menuList;let i=index\">\r\n <div class=\"form-group\">\r\n <div class=\"col-md-1\">\r\n <label class=\"switch\">\r\n <input type=\"checkbox\" class=\"switch\" name=\"chkMenu\" id=\"chkMenu{{mdl.menu_idn}}\"\r\n (change)=\"onChangeWebMenu($event,mdl.menu_idn,User,Module)\"\r\n [checked]=\"(false == userRightsMenuList.includes(mdl?.menu_idn) ? 'checked' : '')\">\r\n <span></span>\r\n </label>\r\n </div>\r\n <label class=\"col-md-2 control-label text-left\" style=\"padding-top: 3px;\">{{mdl.menu}}</label>\r\n </div>\r\n <div class=\"col-md-12\" *ngIf=\"mdl.SubMenu.length > 0\">\r\n <div class=\"form-group\" *ngFor=\"let smdl of mdl.SubMenu\">\r\n <div class=\"col-md-1\" style=\"margin-left:10px;padding-left: 60px;\">\r\n <label class=\"switch\">\r\n <input type=\"checkbox\" class=\"switch\" name=\"chkSubMenu\" id=\"chkSubMenu{{smdl.menu_idn}}\"\r\n (change)=\"onChangeWebSubMenu($event,smdl.menu_idn,mdl.menu_idn,User,Module)\"\r\n [checked]=\"( false == userRightsMenuList.includes(smdl?.menu_idn) ? 'checked' : '')\">\r\n <span></span>\r\n </label>\r\n </div>\r\n <label class=\"col-md-4 control-label text-left\"\r\n style=\"padding-top: 8px; font-weight: 100;padding-left: 40px;\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{{smdl.hdr}}</label>\r\n </div>\r\n </div>\r\n </div>\r\n </form>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"panel-body\" style=\"background: #fff;min-height: 550px;\"\r\n *ngIf=\"navform != 'addtionalDtlMaster' && navform != 'documentUploadMaster' && navform != 'menuAccessMaster' && navform == 'termUserAssignForm' && navform != 'setPasswordForm' \">\r\n <div class=\"row\" style=\"margin-top: 10px;\">\r\n <div class=\"col-md-2\">\r\n <div class=\"form-group\">\r\n <label class=\"control-label\">Terms</label>\r\n </div>\r\n </div>\r\n <div class=\"col-md-1\" style=\"margin-left: 85px;\">\r\n <div class=\"form-group\">\r\n <label class=\"control-label\">Users</label>\r\n </div>\r\n </div>\r\n </div>\r\n <ng-container *ngFor=\"let term of termsList; let i=index;\">\r\n <div class=\"row\">\r\n <div class=\"col-md-3\">\r\n <div class=\"form-group\">\r\n\r\n <label for=\"{{term.buyer_terms_idn}}\" class=\"control-label\"\r\n style=\"padding: 10px;\">{{term.dsc}}</label>\r\n </div>\r\n </div>\r\n <div class=\"col-md-3\" *ngIf=\"term.userIdnList != undefined\">\r\n <div class=\"form-group w-100\">\r\n <div class=\"input-group w-100\">\r\n\r\n <!-- <ng-select [items]=\"applUserList\" [multiple]=\"true\" [addTag]=\"addTag\" (change)=\"onchaneVals(null,term.buyer_terms_idn,term.userIdnList)\"\r\n bindLabel=\"v\" bindValue=\"k\" name=\"{{term ?.buyer_terms_idn}}\" [(ngModel)]=\"term.userIdnList\">\r\n </ng-select> -->\r\n <ng-select placeholder=\"Select user\" [options]=\"term.TermUserList\" [(ngModel)]=\"term.userIdnList\"\r\n (deselected)=\"onchangeUserList($event,term,'delete')\"\r\n (selected)=\"onchangeUserList($event,term,'add')\" name=\"status\" [multiple]=\"true\"\r\n [allowClear]=\"true\">\r\n <ng-template #optionTemplate let-option=\"option\">\r\n <div class=\"famfamfam-flags {{option?.value}}\"></div>\r\n {{option?.label}}\r\n </ng-template>\r\n </ng-select>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"col-md-6\"></div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n\r\n <div class=\"panel-body\" style=\"background: #fff;min-height: 550px;\"\r\n *ngIf=\"navform != 'addtionalDtlMaster' && navform != 'documentUploadMaster' && navform != 'menuAccessMaster' && navform != 'termUserAssignForm' && navform == 'setPasswordForm' \">\r\n <div class=\"row\" style=\"margin-top: 10px;\">\r\n <div class=\"col-md-12\">\r\n <p class=\"headingCls\">Change User Password</p>\r\n </div>\r\n <div class=\"col-md-2\">\r\n <div class=\"form-group\">\r\n <label class=\"control-label\" style=\"padding: 8px;\">Username</label>\r\n </div>\r\n </div>\r\n <div class=\"col-md-1\" style=\"margin-left: 85px;\">\r\n <div class=\"form-group\">\r\n <label class=\"control-label\" style=\"padding: 8px;\">Password</label>\r\n </div>\r\n </div>\r\n </div>\r\n <ng-container *ngFor=\"let user of userDetails; let i=index;\">\r\n <div class=\"row\">\r\n <div class=\"col-md-3\">\r\n <div class=\"form-group\">\r\n <label class=\"control-label\" style=\"padding: 10px;font-weight: normal;\">{{user?.username}}</label>\r\n </div>\r\n </div>\r\n <div class=\"col-md-6\">\r\n <div class=\"form-group w-100\">\r\n <input type=\"text\" class=\"form-control\" [(ngModel)]=\"user.password\" [value]=\"user?.password\" />\r\n <!-- (blur)=\"changePswd($event,user.userIdn)\" -->\r\n </div>\r\n </div>\r\n <div class=\"col-md-3\">\r\n <div class=\"form-group\">\r\n <button type=\"submit\" class=\"btn btn-success\" (click)=\"changePassword(user)\">save</button>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n <!-- <button type=\"submit\" class=\"btn btn-success\" (click)=\"saveAppUserterms(applUsrLst)\">save</button> -->\r\n </div>\r\n <div class=\"panel-body\" style=\"background: #fff;min-height: 550px;\" *ngIf=\"navform=='ledgerBankDetails'\">\r\n <div class=\"row\">\r\n <div class=\"col-md-12\" style=\"margin:5px\">\r\n <div class=\"form-group w-100\">\r\n <label class=\"col-md-2 control-label\">Bank</label>\r\n <div class=\"col-md-4\">\r\n <ng-select placeholder=\"Select Bank\" [options]=\"bankList\" [(ngModel)]=\"bank\" name=\"bank\"\r\n (selected)=\"getBankBranch(bank)\" (filterInputChanged)=\"ledgerBankDetails($event)\"\r\n [allowClear]=\"true\">\r\n </ng-select>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"col-md-12\" style=\"margin:5px\">\r\n <div class=\"form-group w-100\">\r\n <label class=\"col-md-2 control-label\">Branch Details</label>\r\n <div class=\"col-md-4\">\r\n <select name=\"branch\" (change)=\"selectBranch(branch)\" [(ngModel)]=\"branch\" class=\"form-control\">\r\n <option value=\"\">Select branch</option>\r\n <option *ngFor=\"let bnkDtl of bankDtlList\" [ngValue]=\"bnkDtl.nme_idn\">{{bnkDtl.person_nme}}</option>\r\n </select>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"col-md-12\" *ngIf=\"selectBranchAddress!=''\" style=\"margin:5px\">\r\n <div class=\"form-group w-100\">\r\n <label class=\"col-md-2 control-label\">&nbsp;</label>\r\n <div class=\"col-md-4\">\r\n <div class=\"col-md-3\">Address:</div>\r\n <div class=\"col-md-9\">{{selectBranchAddress}}</div>\r\n <div class=\"col-md-3\">IFSC Code:</div>\r\n <div class=\"col-md-9\">{{selectIfsc}}</div>\r\n\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"col-md-12\" style=\"margin:5px\">\r\n <div class=\"form-group w-100\">\r\n <label class=\"col-md-2 control-label\">Account Type</label>\r\n <div class=\"col-md-4\">\r\n <select name=\"accountType\" [(ngModel)]=\"accountType\" class=\"form-control\">\r\n <option value=\"current\">Current</option>\r\n <option value=\"savings\">Savings</option>\r\n </select>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"col-md-12\" style=\"margin:5px\">\r\n <div class=\"form-group w-100\">\r\n <label class=\"col-md-2 control-label\">Account No</label>\r\n <div class=\"col-md-4\">\r\n <textarea class=\"form-control\" cols=\"45\" rows=\"2\" name=\"accountno\" [(ngModel)]=\"accountno\"></textarea>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"col-md-12\" style=\"margin:5px\">\r\n <div class=\"form-group w-100\">\r\n <div class=\"col-md-2\">&nbsp;</div>\r\n <div class=\"col-md-4\">\r\n <button type=\"button\" *ngIf=\"editbank_dtl_idn==''\" (click)=\"SaveLedgerBank()\"\r\n class=\"btn btn-success\">Add</button>\r\n <button type=\"button\" *ngIf=\"editbank_dtl_idn!=''\" (click)=\"SaveLedgerBank()\"\r\n class=\"btn btn-success\">Edit</button>\r\n\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"row\" *ngIf=\"exitBankDtlList.length>0\">\r\n <div class=\"col-md-1 pull-left\">\r\n &nbsp;\r\n </div>\r\n <div class=\"col-md-6 pull-right\">\r\n <form class=\"form-inline pull-right\">\r\n <div class=\"form-group\">\r\n <label for=\"exampleInputName2\">Search &nbsp;&nbsp;</label>\r\n <input type=\"text\" class=\"form-control\" id=\"exampleInputName2\" name=\"searchF\" [(ngModel)]=\"searchF\" />\r\n </div>\r\n </form>\r\n </div>\r\n </div>\r\n <div class=\"row\" *ngIf=\"exitBankDtlList.length>0\">\r\n <div class=\"col-md-12\">\r\n <table class=\"displayTable\">\r\n <thead>\r\n <th>Actions</th>\r\n <th>Account Type</th>\r\n <th>Account No</th>\r\n <th>Name</th>\r\n <th>Branch</th>\r\n <th>Address</th>\r\n <th>IFSC Code</th>\r\n </thead>\r\n <tbody>\r\n <ng-container *ngFor=\"let bankdtl of exitBankDtlList ; let i = index\">\r\n <tr [ngClass]=\"{'even':i%2==0,'odd':i%2==1}\">\r\n <td> <i class=\"fa fa-edit\" (click)=\"loadEditBankDtl(bankdtl)\" tooltip=\"Edit Bank\"\r\n style=\"font-size:15px;cursor: pointer\"> </i>&nbsp;|\r\n <i class=\"fa fa-trash-o\" (click)=\"ConfirmDeleteLedgerBank(bankdtl)\" tooltip=\"Delete Bank\"\r\n style=\"font-size:15px;cursor: pointer\"> </i>\r\n <td>{{bankdtl.accountType}}</td>\r\n <td>{{bankdtl.accountNo}}</td>\r\n <td>{{bankdtl.bankname}}</td>\r\n <td>{{bankdtl.branchname}}</td>\r\n <td>{{bankdtl.address}}</td>\r\n <td>{{bankdtl.ifsc}}</td>\r\n </tr>\r\n </ng-container>\r\n </tbody>\r\n </table>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"modal\" id=\"datamodal\" role=\"dialog\" aria-labelledby=\"defModalHead\" aria-hidden=\"true\"\r\n data-backdrop=\"static\" data-keyboard=\"false\">\r\n <div class=\"modal-dialog\">\r\n <div class=\"modal-content\">\r\n <form class=\"form-horizontal\" #f=\"ngForm\" name=\"appForm\">\r\n <div class=\"modal-header\">\r\n <button type=\"button\" class=\"close\" data-dismiss=\"modal\" (click)=\"closeNull();\" #closebtn>\r\n <span aria-hidden=\"true\">&times;</span>\r\n <span class=\"sr-only\">Close</span>\r\n </button>\r\n <h4 class=\"modal-title\" id=\"defModalHead\">{{btnName}} Record</h4>\r\n </div>\r\n <div class=\"modal-body\">\r\n <div class=\"row\">\r\n <div class=\"col-md-12\" *ngFor=\"let fl of formFilds | orderByPipe: 'srt': 'asc'\">\r\n <div class=\"form-group\"\r\n *ngIf=\"fl?.form_field_typ == 't' && fl?.is_hidden == 0 && fl?.dta_typ =='c' || fl?.dta_typ =='t'\">\r\n <label class=\"col-md-3 control-label\">{{fl?.form_field_title}}\r\n <span class=\"text-danger\" *ngIf=\"fl.is_compulsory == 1\">*</span>\r\n </label>\r\n <div class=\"col-md-9\">\r\n <div class=\"input-group w-100\">\r\n <input type=\"text\" class=\"form-control posrel\" name=\"{{fl?.form_field}}\"\r\n [value]=\"fl?.default_value\" [(ngModel)]=\"fl.default_value\" #textInput=\"ngModel\"\r\n (blur)=\"chkFun(fl,fl.default_value);\" [required]=\"fl?.is_compulsory == '1'\" />\r\n <span class=\"fa fa-{{ico}} eye\" [ngStyle]=\"{'color':ico == 'check' ? 'green' : 'red' }\"\r\n *ngIf=\"usrisExist && onErr == fl.form_field \"></span>\r\n </div>\r\n <div *ngIf=\"textInput.invalid && (textInput.dirty || textInput.touched)\"\r\n class=\"alert alert-danger ca\">\r\n <div *ngIf=\"textInput.errors.required\">\r\n {{fl.form_field_title}} is required.\r\n </div>\r\n\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"form-group\" *ngIf=\"fl?.form_field_typ == 't' && fl?.is_hidden == 0 && fl?.dta_typ =='n'\">\r\n <label class=\"col-md-3 control-label\">{{fl?.form_field_title}}\r\n <span class=\"text-danger\" *ngIf=\"fl.is_compulsory == 1\">*</span>\r\n </label>\r\n <div class=\"col-md-9\">\r\n <div class=\"input-group w-100\">\r\n <input type=\"number\" class=\"form-control\" name=\"{{fl?.form_field}}\" [value]=\"fl?.default_value\"\r\n [(ngModel)]=\"fl.default_value\" #numberInput=\"ngModel\" [required]=\"fl?.is_compulsory==1\">\r\n </div>\r\n <div *ngIf=\"numberInput.invalid && (numberInput.dirty || numberInput.touched)\"\r\n class=\"alert alert-danger ca\">\r\n <div *ngIf=\"numberInput.errors.required\">\r\n {{fl.form_field_title}} is required.\r\n </div>\r\n <div *ngIf=\"numberInput.invalid && (numberInput.dirty || numberInput.touched)\"\r\n class=\"alert alert-danger ca\">\r\n <div *ngIf=\"numberInput.errors.required\">\r\n {{fl.form_field_title}} is required.\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"form-group\"\r\n *ngIf=\"fl?.form_field_typ == 'pw' && fl?.is_hidden == 0 && fl?.dta_typ =='pw'\">\r\n <label class=\"col-md-3 control-label\">{{fl?.form_field_title}}\r\n <span class=\"text-danger\" *ngIf=\"fl.is_compulsory == 1\">*</span>\r\n </label>\r\n <div class=\"col-md-9\">\r\n <div class=\"input-group w-100\">\r\n <input type=\"{{inputtype}}\" class=\"form-control posrel\" name=\"{{fl?.form_field}}\"\r\n [value]=\"fl?.default_value\" [(ngModel)]=\"fl.default_value\" #passInput=\"ngModel\"\r\n [required]=\"fl?.is_compulsory == '1'\" />\r\n <span class=\"fa {{eveC}} eye\" (click)=\"showHIdePass();\"></span>\r\n </div>\r\n <div *ngIf=\"passInput.invalid && (passInput.dirty || passInput.touched)\"\r\n class=\"alert alert-danger ca\">\r\n <div *ngIf=\"passInput.errors.required\">\r\n {{fl.form_field_title}} is required.\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"form-group\" *ngIf=\"fl?.form_field_typ == 't' && fl?.dta_typ =='a'\">\r\n <label class=\"col-md-3 control-label\">{{fl?.form_field_title}}\r\n <span class=\"text-danger\" *ngIf=\"fl.is_compulsory == 1\">*</span>\r\n </label>\r\n <div class=\"col-md-9\">\r\n <div class=\"input-group w-100\">\r\n\r\n <!-- <ng-select [items]=\"[]\" [addTag]=\"true\" bindValue=\"label\" [multiple]=\"true\" name=\"{{fl?.form_field}}\"\r\n [(ngModel)]=\"fl.default_value\" [isOpen]=\"false\" #afield=\"ngModel\" [required]=\"fl?.is_compulsory == '1'\">\r\n </ng-select> -->\r\n\r\n <!-- <ng-select style=\"z-index: 5;\" [options]=\"[]\" [(ngModel)]=\"fl.default_value\" name=\"{{fl?.form_field}}\"\r\n #afield=\"ngModel\" [required]=\"fl?.is_compulsory == '1'\">\r\n </ng-select> last commented-->\r\n\r\n <tag-input [(ngModel)]=\"fl.default_value\" name=\"{{fl?.form_field}}\" [modelAsStrings]=\"true\"\r\n [allowDupes]=\"true\" [editable]='true'></tag-input>\r\n\r\n\r\n </div>\r\n <!-- <div *ngIf=\"afield.invalid && (afield.dirty || afield.touched)\" class=\"alert alert-danger ca\">\r\n <div *ngIf=\"afield.errors.required\">\r\n {{fl.form_field_title}} is required.\r\n </div>\r\n </div> -->\r\n </div>\r\n </div>\r\n <div class=\"form-group\" *ngIf=\"fl?.form_field_typ == 't' && fl?.dta_typ =='sr'\">\r\n <div class=\"row\">\r\n <label class=\"col-md-3 control-label\">{{fl?.form_field_title}}\r\n <span class=\"text-danger\" *ngIf=\"fl.is_compulsory == 1\">*</span>\r\n </label>\r\n <div class=\"col-md-7\">\r\n <div class=\"input-group w-100\">\r\n <!-- <ng-select [items]=\"sqlArray[fl.form_field]\" [dropdownPosition]=\"'bottom'\" bindLabel=\"v\"\r\n [(ngModel)]=\"pageDisplay\" [ngModelOptions]=\"{standalone: true}\">\r\n </ng-select> -->\r\n <ng-select style=\"z-index: 5;\" [options]=\"sqlArray[fl.form_field]\" [(ngModel)]=\"pageDisplay\"\r\n name=\"{{fl?.form_field}}\">\r\n </ng-select>\r\n </div>\r\n </div>\r\n <div class=\"col-md-2\">\r\n <button class=\"btn btn-info\" type=\"button\" style=\"width:100%;\"\r\n (click)=\"addAttr(pageDisplay, sqlArray[fl.form_field], fl.default_value);\">Add</button>\r\n </div>\r\n </div>\r\n <div class=\"row\">\r\n <label class=\"col-md-3 control-label\">Selected Modules</label>\r\n <div cclass=\"col-md-9\">\r\n <div class=\"mds\">\r\n <ng-template #itemTemplate let-item=\"item\" let-index=\"index\">\r\n <span\r\n style=\"padding: 4px;border: 1px solid #c9c9c9;border-radius: 6px;display: inline-block;width: 100%;position: relative;\">\r\n <span>{{index+1}}</span> - {{item.value}}\r\n <span class=\"rm\" (click)=\"remove(fl.default_value,item.value,index,fl?.form_field);\">\r\n <i class=\"fa fa-times\" aria-hidden=\"true\"></i>\r\n </span>\r\n </span>\r\n </ng-template>\r\n <div class=\"row\">\r\n <div>\r\n <bs-sortable [(ngModel)]=\"fl.default_value\" name=\"{{fl?.form_field}}\"\r\n [itemTemplate]=\"itemTemplate\" itemClass=\"sortable-item\"\r\n itemActiveClass=\"sortable-item-active\" placeholderClass=\"placeholderStyle\"\r\n wrapperClass=\"sortable-wrapper\" #srf=\"ngModel\" [required]=\"fl?.is_compulsory == '1'\">\r\n </bs-sortable>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div *ngIf=\"srf.invalid && (srf.dirty || srf.touched)\" class=\"alert alert-danger ca\">\r\n <div *ngIf=\"srf.errors.required\">\r\n {{fl.form_field_title}} is required.\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"form-group\" *ngIf=\"fl?.form_field_typ == 't' && fl?.dta_typ =='sa'\">\r\n <label class=\"col-md-3 control-label\">{{fl?.form_field_title}}\r\n <span class=\"text-danger\" *ngIf=\"fl.is_compulsory == 1\">*</span>\r\n </label>\r\n <div class=\"col-md-9\">\r\n <div class=\"input-group w-100\">\r\n <!-- <ng-select [items]=\"sqlArray[fl.form_field]\" [addTag]=\"addTag\" bindValue=\"k\" [hideSelected]=\"true\"\r\n multiple=\"true\" bindLabel=\"v\" name=\"{{fl?.form_field}}\" [(ngModel)]=\"fl.default_value\"\r\n #safield=\"ngModel\" [required]=\"fl?.is_compulsory == '1'\">\r\n </ng-select> -->\r\n\r\n <ng-select style=\"z-index: 5;\" [options]=\"sqlArray[fl.form_field]\"\r\n [(ngModel)]=\"fl.default_value\" [multiple]=\"true\" [allowClear]=\"true\" name=\"{{fl?.form_field}}\"\r\n #safield=\"ngModel\" [required]=\"fl?.is_compulsory == '1'\">\r\n <ng-template #optionTemplate let-option=\"option\">\r\n <div class=\"famfamfam-flags {{option?.value}}\"></div>\r\n {{option?.label}}\r\n </ng-template>\r\n </ng-select>\r\n\r\n </div>\r\n <div *ngIf=\"safield.invalid && (safield.dirty || safield.touched)\" class=\"alert alert-danger ca\">\r\n <div *ngIf=\"safield.errors.required\">\r\n {{fl.form_field_title}} is required.\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"form-group\" *ngIf=\"fl?.form_field_typ == 'ta' && fl?.is_hidden == 0 && fl?.dta_typ =='c'\">\r\n <label class=\"col-md-3 control-label\">{{fl?.form_field_title}}\r\n <span class=\"text-danger\" *ngIf=\"fl.is_compulsory == 1\">*</span>\r\n </label>\r\n <div class=\"col-md-9\">\r\n <div class=\"input-group w-100\">\r\n <textarea class=\"form-control\" rows=\"3\" name=\"{{fl?.form_field}}\" [value]=\"fl?.default_value\"\r\n [(ngModel)]=\"fl.default_value\" #textArea=\"ngModel\" (blur)=\"chkFun(fl,fl.default_value);\"\r\n [ngClass]=\"{'uniqErrMsg': fl?.form_field == onErr}\"\r\n [required]=\"fl?.is_compulsory == '1'\"></textarea>\r\n </div>\r\n <div *ngIf=\"textArea.invalid && (textArea.dirty || textArea.touched)\"\r\n class=\"alert alert-danger ca\">\r\n <div *ngIf=\"textArea.errors.required\">\r\n {{fl.form_field_title}} is required.\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div\r\n *ngIf=\"fl?.form_field_typ == 'hd' || fl?.form_field_typ == 'hc' || fl?.form_field_typ == 'df' || fl?.form_field_typ == 'fk' || fl?.form_field_typ == 'ck' && fl?.is_hidden == 0\"\r\n [ngClass]=\"{'mt0': fl?.form_field_typ == 'hd'}\">\r\n <input type=\"hidden\" class=\"form-control\" name=\"{{fl?.form_field}}\" [value]=\"fl?.default_value\"\r\n [(ngModel)]=\"fl.default_value\" #hdf=\"ngModel\" />\r\n </div>\r\n <div class=\"form-group\" *ngIf=\"fl?.form_field_typ == 'sq' && fl?.is_hidden == 0\">\r\n <label class=\"col-md-3 control-label\"></label>\r\n <div class=\"col-md-9\">\r\n <div class=\"input-group w-100\">\r\n <input type=\"hidden\" class=\"form-control\" name=\"{{fl?.form_field}}\" [value]=\"fl?.default_value\"\r\n [(ngModel)]=\"fl.default_value\" />\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"form-group\" *ngIf=\"fl?.form_field_typ == 'tb' && fl?.is_hidden == 0\">\r\n <label class=\"col-md-3 control-label\">{{fl?.form_field_title}}\r\n <span class=\"text-danger\" *ngIf=\"fl.is_compulsory == 1\">*</span>\r\n </label>\r\n\r\n <div class=\"col-md-9\">\r\n <div class=\"input-group w-100\">\r\n <select class=\"form-control select\" name=\"{{fl?.form_field}}\" [value]=\"fl?.default_value\"\r\n [(ngModel)]=\"fl.default_value\" #tdf=\"ngModel\" [required]=\"fl?.is_compulsory == '1'\">\r\n <option *ngFor=\"let dynamic of sqlArray[fl.form_field]\" value=\"{{dynamic.value}}\">\r\n {{dynamic.label}}</option>\r\n </select>\r\n </div>\r\n <div *ngIf=\"tdf.invalid && (tdf.dirty || tdf.touched)\" class=\"alert alert-danger ca\">\r\n <div *ngIf=\"tdf.errors.required\">\r\n {{fl.form_field_title}} is required.\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"form-group\" *ngIf=\"fl?.form_field_typ == 'l' && fl?.is_hidden == 0\">\r\n <label class=\"col-md-3 control-label\">{{fl?.form_field_title}}\r\n <span class=\"text-danger\" *ngIf=\"fl.is_compulsory == 1\">*</span>\r\n </label>\r\n <div class=\"col-md-9\">\r\n <div class=\"input-group w-100\">\r\n <select class=\"form-control select\" name=\"{{fl?.form_field}}\" [value]=\"fl?.default_value\"\r\n [(ngModel)]=\"fl.default_value\" #lInput=\"ngModel\" [required]=\"fl?.is_compulsory == '1'\">\r\n <option *ngFor=\"let lov of fl.kv\" value=\"{{lov.k}}\">{{lov.v}}</option>\r\n </select>\r\n </div>\r\n <div *ngIf=\"lInput.invalid && (lInput.dirty || lInput.touched)\" class=\"alert alert-danger ca\">\r\n <div *ngIf=\"lInput.errors.required\">\r\n {{fl.form_field_title}} is required.\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"form-group\" *ngIf=\"fl?.form_field_typ == 'ld' && fl?.is_hidden == 0\">\r\n <label class=\"col-md-3 control-label\">{{fl?.form_field_title}}\r\n <span class=\"text-danger\" *ngIf=\"fl.is_compulsory == 1\">*</span>\r\n </label>\r\n <div class=\"col-md-9\">\r\n <div class=\"input-group w-100\">\r\n <select class=\"form-control select\" name=\"{{fl?.form_field}}\" [value]=\"fl?.default_value\"\r\n [(ngModel)]=\"fl.default_value\" #ldInput=\"ngModel\" [required]=\"fl?.is_compulsory == '1'\">\r\n <option *ngFor=\"let dynamic of sqlArray[fl.form_field]\" value=\"{{dynamic.value}}\">\r\n {{dynamic.label}}</option>\r\n </select>\r\n </div>\r\n <div *ngIf=\"ldInput.invalid && (ldInput.dirty || ldInput.touched)\" class=\"alert alert-danger ca\">\r\n <div *ngIf=\"ldInput.errors.required\">\r\n {{fl.form_field_title}} is required.\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"form-group\" *ngIf=\"fl?.form_field_typ == 's' && fl?.is_hidden == 0\">\r\n <label class=\"col-md-3 control-label\">{{fl?.form_field_title}}\r\n <span class=\"text-danger\" *ngIf=\"fl.is_compulsory == 1\">*</span>\r\n </label>\r\n <div class=\"col-md-9\">\r\n <div class=\"input-group w-100\">\r\n <select class=\"form-control select\" name=\"{{fl?.form_field}}\" [value]=\"fl?.default_value\"\r\n [(ngModel)]=\"fl.default_value\" (change)=\"chkFun(fl,fl.default_value)\" id=\"{{fl.column_key}}\"\r\n #sfi=\"ngModel\" [required]=\"fl?.is_compulsory == '1'\">\r\n <option *ngFor=\"let dynamic of sqlArray[fl.form_field]\" value=\"{{dynamic.value}}\">\r\n {{dynamic.label}}</option>\r\n </select>\r\n </div>\r\n <div *ngIf=\"sfi.invalid && (sfi.dirty || sfi.touched)\" class=\"alert alert-danger ca\">\r\n <div *ngIf=\"sfi.errors.required\">\r\n {{fl.form_field_title}} is required.\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"form-group\" *ngIf=\"fl?.form_field_typ == 'sb'\">\r\n <label class=\"col-md-3 control-label\">{{fl?.form_field_title}}\r\n <span class=\"text-danger\" *ngIf=\"fl.is_compulsory == 1\">*</span>\r\n </label>\r\n <div class=\"col-md-8\">\r\n <div class=\"input-group w-100\">\r\n <ng-select style=\"z-index: 5;\" [options]=\"sqlArray[fl.form_field]\" #sfi=\"ngModel\"\r\n [(ngModel)]=\"fl.default_value\" name=\"{{fl?.form_field}}\"\r\n (selected)=\"chkFun(fl,fl.default_value)\"\r\n (filterInputChanged)=\"loadSuggdata($event,fl.page_item_idn,fl.form_field)\">\r\n </ng-select>\r\n </div>\r\n <div *ngIf=\"sfi.invalid && (sfi.dirty || sfi.touched)\" class=\"alert alert-danger ca\">\r\n <div *ngIf=\"sfi.errors.required\">\r\n {{fl.form_field_title}} is required.\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"col-md-1\" *ngIf=\"fl?.form_field_icon == 'add'\">\r\n <button type=\"button\" class=\"btn btn-success btn-rounded\"><span><i\r\n class=\"fa fa-plus\"></i></span></button>\r\n\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"modal-footer\">\r\n <button type=\"submit\" class=\"btn btn-success\" (click)=\"submitForm(f,submitBtn)\" appAppNoDblClick\r\n #submitBtn>{{btnName}}</button>\r\n <button type=\"reset\" class=\"btn btn-danger\" (click)=\"reset(f)\" *ngIf=\"btnName == 'Add'\">Reset</button>\r\n </div>\r\n </form>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"modal\" id=\"deleteTermsmodal\" role=\"dialog\" aria-labelledby=\"smallModalHead\" aria-hidden=\"true\"\r\n data-backdrop=\"static\" data-keyboard=\"false\">\r\n <div class=\"modal-dialog modal-sm\">\r\n <div class=\"modal-content\">\r\n <div class=\"modal-header\">\r\n <button type=\"button\" class=\"close\" data-dismiss=\"modal\" (click)=\"closeNull();\" #deleteclsbtn>\r\n <span aria-hidden=\"true\">&times;</span>\r\n <span class=\"sr-only\">Close</span>\r\n </button>\r\n <h4 class=\"modal-title\" id=\"smallModalHead\">Warning</h4>\r\n </div>\r\n <div class=\"modal-body\">\r\n Are you sure want to delete term?\r\n </div>\r\n <div class=\"modal-footer\">\r\n <button type=\"button\" class=\"btn btn-default\" data-dismiss=\"modal\">Close</button>\r\n <button type=\"button\" class=\"btn btn-danger\" data-dismiss=\"modal\" (click)=\"DeleteTerms();\">Delete</button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"modal\" id=\"deletemodal\" role=\"dialog\" aria-labelledby=\"smallModalHead\" aria-hidden=\"true\"\r\n data-backdrop=\"static\" data-keyboard=\"false\">\r\n <div class=\"modal-dialog modal-sm\">\r\n <div class=\"modal-content\">\r\n <div class=\"modal-header\">\r\n <button type=\"button\" class=\"close\" data-dismiss=\"modal\" (click)=\"closeNull();\" #deleteclsbtn>\r\n <span aria-hidden=\"true\">&times;</span>\r\n <span class=\"sr-only\">Close</span>\r\n </button>\r\n <h4 class=\"modal-title\" id=\"smallModalHead\">Warning</h4>\r\n </div>\r\n <div class=\"modal-body\">\r\n Are you sure want to delete?\r\n </div>\r\n <div class=\"modal-footer\">\r\n <button type=\"button\" class=\"btn btn-default\" data-dismiss=\"modal\">Close</button>\r\n <button type=\"button\" class=\"btn btn-danger\" data-dismiss=\"modal\"\r\n (click)=\"deleteDataList();\">Delete</button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n\r\n <div class=\"modal\" id=\"modal_sys\" tabindex=\"-1\" role=\"dialog\" aria-labelledby=\"defModalHead\" aria-hidden=\"true\">\r\n <div class=\"modal-dialog\">\r\n <div class=\"modal-content\">\r\n <div class=\"modal-header\">\r\n <button type=\"button\" class=\"close\" data-dismiss=\"modal\">\r\n <span aria-hidden=\"true\">&times;</span>\r\n <span class=\"sr-only\">Close</span>\r\n </button>\r\n <h4 class=\"modal-title\" id=\"defModalHead\">Basic Modal</h4>\r\n </div>\r\n <div class=\"modal-body\">\r\n Some content in modal example\r\n </div>\r\n <div class=\"modal-footer\">\r\n <button type=\"button\" class=\"btn btn-default\" data-dismiss=\"modal\">Close</button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"modal\" id=\"rowGrpmodal\" tabindex=\"-2\" role=\"dialog\" aria-labelledby=\"rowGrpmodal\" aria-hidden=\"true\"\r\n data-backdrop=\"static\" data-keyboard=\"false\">\r\n <div class=\"modal-dialog\">\r\n <div class=\"modal-content\">\r\n <form class=\"form-horizontal\" #frg=\"ngForm\" name=\"appFormRowGrp\">\r\n <div class=\"modal-header\">\r\n <button type=\"button\" class=\"close\" data-dismiss=\"modal\" (click)=\"closeNull();\" #closebtn>\r\n <span aria-hidden=\"true\">&times;</span>\r\n <span class=\"sr-only\">Close</span>\r\n </button>\r\n <h4 class=\"modal-title\" id=\"rowGrpHead\">Row Group</h4>\r\n </div>\r\n <div class=\"modal-body\">\r\n <div class=\"row\">\r\n <div class=\"col-md-12\" style=\"padding-bottom: 10px;\">\r\n <label class=\"col-md-2 control-label\">Attributes</label>\r\n <label class=\"col-md-5 control-label\" style=\"padding-right: 90px;\">Row Display</label>\r\n <label class=\"col-md-5 control-label\" style=\"padding-right: 76px;\">Row Group </label>\r\n </div>\r\n <div class=\"col-md-12\">\r\n <div class=\"form-group\" *ngFor=\"let att of display_attr;\">\r\n <label class=\"col-md-2 control-label\">{{att.attr}}</label>\r\n <div class=\"col-md-5\">\r\n <div class=\"input-group w-100\">\r\n <select class=\"form-control\" name=\"dr_{{att.attr}}\" [disabled]=\"disableselc\"\r\n id=\"row_{{att.attr}}\" value=\"{{att.display_row}}\" (change)=\"onChangeDispRow($event)\">\r\n <!-- [value]=\"att.display_row\" -->\r\n <option *ngFor=\"let dr of display_row;\" value=\"{{dr.idn}}\">{{dr.print}}</option>\r\n </select>\r\n </div>\r\n </div>\r\n <div class=\"col-md-5\">\r\n <div class=\"input-group w-100\">\r\n <select class=\"form-control\" name=\"grp_{{att.attr}}\" [disabled]=\"disableselc\"\r\n id=\"grp_{{att.attr}}\" [value]=\"att.display_group\" (change)=\"onChangeDispGrp($event)\">\r\n <option value = ''></option>\r\n <option *ngFor=\"let dg of display_group;\" value=\"{{dg.idn}}\">{{dg.print}}</option>\r\n </select>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"modal-footer\">\r\n <button type=\"reset\" class=\"btn btn-danger\" data-dismiss=\"modal\">close</button>\r\n </div>\r\n </form>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n\r\n\r\n\r\n <div class=\"modal\" id=\"productDetailMapMD\" role=\"dialog\" aria-labelledby=\"smallModalHead\" aria-hidden=\"true\"\r\n data-backdrop=\"static\" data-keyboard=\"false\">\r\n <div class=\"modal-dialog modal-sm mwidth\">\r\n <div class=\"modal-content\">\r\n <div class=\"modal-header\">\r\n <button type=\"button\" class=\"close\" data-dismiss=\"modal\" (click)=\"closeNull();\" #productMapclsbtn>\r\n <span aria-hidden=\"true\">&times;</span>\r\n <span class=\"sr-only\" productDetailMapclsbtn>Close</span>\r\n </button>\r\n <h4 class=\"modal-title\" id=\"smallModalHead\">Product Mapping of&nbsp;{{producDetailModelTitle}}</h4>\r\n </div>\r\n <div class=\"modal-body\">\r\n <div class=\"table-responsive\">\r\n <table class=\"table table-bordered table-hover table-hover-cells\">\r\n <thead>\r\n <tr>\r\n <th>\r\n Name\r\n </th>\r\n <th>\r\n Value\r\n </th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <ng-container *ngFor=\"let key of attrDtl?.prpList\">\r\n <tr>\r\n <td>\r\n {{key.print}}\r\n </td>\r\n <td>\r\n <input type=\"text\" class=\"form-control\" [(ngModel)]=\"attrMappingDtl[key?.val]\" />\r\n </td>\r\n </tr>\r\n </ng-container>\r\n </tbody>\r\n </table>\r\n </div>\r\n <div class=\"modal-footer\">\r\n <button type=\"button\" class=\"btn btn-default\" data-dismiss=\"modal\" #productDetailMapclsbtn>Close</button>\r\n <button type=\"button\" class=\"btn btn-success\" data-dismiss=\"modal\"\r\n (click)=\"saveProductDetailMapping();\">Save</button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"modal\" id=\"docdeletemodal\" role=\"dialog\" aria-labelledby=\"smallModalHead\" aria-hidden=\"true\"\r\n data-backdrop=\"static\" data-keyboard=\"false\">\r\n <div class=\"modal-dialog modal-sm\">\r\n <div class=\"modal-content\">\r\n <div class=\"modal-header\">\r\n <button type=\"button\" class=\"close\" data-dismiss=\"modal\" (click)=\"closeNull();\" #deleteclsbtn>\r\n <span aria-hidden=\"true\">&times;</span>\r\n <span class=\"sr-only\">Close</span>\r\n </button>\r\n <h4 class=\"modal-title\" id=\"smallModalHead\">Warning</h4>\r\n </div>\r\n <div class=\"modal-body\">\r\n Are you sure want to delete?\r\n </div>\r\n <div class=\"modal-footer\">\r\n <button type=\"button\" class=\"btn btn-default\" data-dismiss=\"modal\">Close</button>\r\n <button type=\"button\" class=\"btn btn-danger\" data-dismiss=\"modal\" (click)=\"deleteDoc();\">Delete</button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"modal\" id=\"bnkdeletemodal\" role=\"dialog\" aria-labelledby=\"smallModalHead\" aria-hidden=\"true\"\r\n data-backdrop=\"static\" data-keyboard=\"false\">\r\n <div class=\"modal-dialog modal-sm\">\r\n <div class=\"modal-content\">\r\n <div class=\"modal-header\">\r\n <button type=\"button\" class=\"close\" data-dismiss=\"modal\" (click)=\"closeNull();\" #deleteclsbtn>\r\n <span aria-hidden=\"true\">&times;</span>\r\n <span class=\"sr-only\">Close</span>\r\n </button>\r\n <h4 class=\"modal-title\" id=\"smallModalHead\">Warning</h4>\r\n </div>\r\n <div class=\"modal-body\">\r\n Are you sure want to delete?\r\n </div>\r\n <div class=\"modal-footer\">\r\n <button type=\"button\" class=\"btn btn-default\" data-dismiss=\"modal\">Close</button>\r\n <button type=\"button\" class=\"btn btn-danger\" data-dismiss=\"modal\"\r\n (click)=\"DeleteLedgerBank()\">Delete</button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <button id=\"bnkdeletemodalbtn\" [hidden]=\"true\" data-toggle=\"modal\" data-target=\"#bnkdeletemodal\"></button>\r\n\r\n <button id=\"docdeletebtn\" [hidden]=\"true\" data-toggle=\"modal\" data-target=\"#docdeletemodal\"></button>\r\n <button id=\"deletebtn\" [hidden]=\"true\" data-toggle=\"modal\" data-target=\"#deletemodal\"></button>\r\n <button id=\"deleteTerms\" [hidden]=\"true\" data-toggle=\"modal\" data-target=\"#deleteTermsmodal\"></button>\r\n\r\n <button id=\"datamdbtn\" [hidden]=\"true\" data-toggle=\"modal\" data-target=\"#datamodal\"></button>\r\n <button id=\"clsMd\" [hidden]=\"true\" data-dismiss=\"modal\" data-target=\"#datamodal\"></button>\r\n <button id=\"sysmd\" [hidden]=\"true\" data-dismiss=\"modal\" data-target=\"#modal_sys\"></button>\r\n <button id=\"btnproductDetailMapMD\" [hidden]=\"true\" data-toggle=\"modal\" data-target=\"#productDetailMapMD\"></button>\r\n\r\n <button id=\"rowGrpbtn\" [hidden]=\"true\" data-dismiss=\"modal\" data-toggle=\"modal\" data-target=\"#rowGrpmodal\"></button>\r\n </div>", styles: [".btn-default.btn-on-1.active,.btn-default.btn-off-1.active{background-color:#3b5998;color:#fff}.btn.btn-xs,.btn-group-xs>.btn{font-size:12px;padding:5px 15px}.tbactive{background:#3B5998;color:#fff}input[type=radio]{display:none}.content-frame-body{padding:0 10px 10px!important}.content-frame-left{background:transparent!important;width:250px!important}.f-12{font-size:12px}.mt0{margin-bottom:0!important}.headingCls{padding:10px;background:#f0efef;font-size:14px;font-weight:400;margin-bottom:20px}.onHover{position:absolute;top:50%;transform:translate(-50%,-50%);left:50%;width:100%;text-align:center}.sortable-item{display:inline-block!important}.mds{border:1px solid #c9c9c9;height:265px;overflow:auto;margin-top:15px;width:175px;position:relative;right:-10px}.mds ul{padding-left:10px;list-style:none}.mds ul li{margin:5px 0;-webkit-user-select:all;user-select:all}.page-container .page-content .content-frame .content-frame-left{padding:0 10px!important}.mwidth{width:500px}.thcenter,.tdcenter{text-align:center}.Inactive{background-color:#ebebe0}btn-file>input{position:absolute;top:0;right:0;width:100%;height:100%;margin:0;font-size:23px;cursor:pointer;filter:alpha(opacity=0);opacity:0;direction:ltr;background-color:#32c5d2;border-color:#32c5d2}.btn.green{color:#fff;background:#3b5998!important;border-color:#3b5998!important}.btn.red{color:#fff;background-color:#e7505a;border-color:#e7505a}\n"], dependencies: [{ kind: "directive", type: i8.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i8.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i8.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i8.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: i9.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i9.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i9.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i9.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i9.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i9.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i9.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i9.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i9.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i9.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i9.NgForm, selector: "form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "component", type: i10.SelectComponent, selector: "ng-select", inputs: ["options", "allowClear", "disabled", "multiple", "noFilter", "notFoundMsg", "placeholder", "filterPlaceholder", "label", "highlightColor", "highlightTextColor"], outputs: ["opened", "closed", "selected", "deselected", "focus", "blur", "noOptionsFound", "filterInputChanged"] }, { kind: "component", type: i11.TagInputComponent, selector: "tag-input", inputs: ["separatorKeys", "separatorKeyCodes", "placeholder", "secondaryPlaceholder", "maxItems", "validators", "asyncValidators", "onlyFromAutocomplete", "errorMessages", "theme", "onTextChangeDebounce", "inputId", "inputClass", "clearOnBlur", "hideForm", "addOnBlur", "addOnPaste", "pasteSplitPattern", "blinkIfDupe", "removable", "editable", "allowDupes", "modelAsStrings", "trimTags", "inputText", "ripple", "tabindex", "disable", "dragZone", "onRemoving", "onAdding", "animationDuration"], outputs: ["onAdd", "onRemove", "onSelect", "onFocus", "onBlur", "onTextChange", "onPaste", "onValidationError", "onTagEdited", "inputTextChange"] }, { kind: "component", type: i12.PaginationControlsComponent, selector: "pagination-controls", inputs: ["id", "maxSize", "directionLinks", "autoHide", "responsive", "previousLabel", "nextLabel", "screenReaderPaginationLabel", "screenReaderPageLabel", "screenReaderCurrentLabel"], outputs: ["pageChange", "pageBoundsCorrection"] }, { kind: "component", type: i13.SortableComponent, selector: "bs-sortable", inputs: ["wrapperClass", "wrapperStyle", "itemClass", "itemStyle", "itemActiveClass", "itemActiveStyle", "placeholderClass", "placeholderStyle", "placeholderItem", "fieldName", "itemTemplate"], outputs: ["onChange"], exportAs: ["bs-sortable"] }, { kind: "directive", type: i14.AppNoDblClickDirective, selector: "[appAppNoDblClick]" }, { kind: "pipe", type: i8.DatePipe, name: "date" }, { kind: "pipe", type: i15.OrderPipe, name: "orderBy" }, { kind: "pipe", type: i12.PaginatePipe, name: "paginate" }, { kind: "pipe", type: i16.SearchPipePipe, name: "searchPipe" }, { kind: "pipe", type: i17.OrderByPipePipe, name: "orderByPipe" }] });
2460
+ /** @nocollapse */ SubformComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: SubformComponent, selector: "app-subform", viewQueries: [{ propertyName: "closebtn", first: true, predicate: ["closebtn"], descendants: true }, { propertyName: "fileOptMapMDclsbtn", first: true, predicate: ["fileOptMapMDclsbtn"], descendants: true }, { propertyName: "productDetailMapclsbtn", first: true, predicate: ["productDetailMapclsbtn"], descendants: true }, { propertyName: "deleteclsbtn", first: true, predicate: ["deleteclsbtn"], descendants: true }, { propertyName: "input", first: true, predicate: ["inputs"], descendants: true }, { propertyName: "sortableComponent", first: true, predicate: SortableComponent, descendants: true }], ngImport: i0, template: "<div class=\"mt\">\r\n <div class=\"panel panel-default\">\r\n <div class=\"panel-heading\">\r\n <h3 class=\"panel-title\">\r\n <span class=\"fa fa-chevron-left cp\" (click)=\"pageBck();\"> Back</span>&nbsp;&nbsp;&nbsp; {{pageInfo?.title}}\r\n <span *ngIf=\"contactName==''\" class=\"f-12\">({{cDt | date:'medium'}})</span>\r\n <span *ngIf=\"contactName!=''\" class=\"f-12\">&nbsp;for <b> {{contactName}}</b> </span>\r\n </h3>\r\n <button type=\"button\" id=\"addBtn\" class=\"btn btn-info pull-right\" *ngIf=\"addNew?.is_compulsory == 1\"\r\n appAppNoDblClick (click)=\"userAction('', 'add', '', '');f.reset();\">{{addNew?.form_field_title}}</button>\r\n </div>\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"col-md-2\" *ngIf=\"navigation.length > 0\">\r\n <div class=\"panel panel-default\">\r\n <div class=\"panel-body\">\r\n <div class=\"list-group border-bottom\">\r\n <a href=\"javascript:void(0)\" class=\"list-group-item\" [ngClass]=\"{'active' :i == cLink}\"\r\n *ngFor=\"let nav of navigation;let i=index\" (click)=\"navigationFun(nav,i);\">{{nav.form_field_title}}</a>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div [ngClass]=\"navigation.length > 0 ? 'col-md-10' : 'col-md-12'\">\r\n <div class=\"panel panel-default\">\r\n <!-- primery form -->\r\n <div class=\"panel-body\" style=\"overflow-x: scroll\"\r\n *ngIf=\"navform != 'addtionalDtlMaster' && navform != 'documentUploadMaster' && navform != 'menuAccessMaster' && navform != 'termUserAssignForm' && navform != 'setPasswordForm' && navform!='ledgerBankDetails' && navform!='ledgerAccAdditinalDetails' && navform!='ledgerAddtionalDtlMaster' && navform!='accDeleteRulesForm' && navform!='accJournalAttrForm' && navform!='accLoanAttrForm' && navform!='accJournalSettingForm' && navform!='webMenuAccessMaster' \">\r\n <div class=\"row\">\r\n <div class=\"col-sm-6\">\r\n <form class=\"form-inline pull-left\">\r\n <div class=\"form-group\">\r\n <label for=\"ddlPagesize\">Page Size &nbsp; &nbsp;</label>\r\n <select class=\"form-control\" name=\"pageSize\" [(ngModel)]=\"pageSize\"\r\n (change)=\"onPageSizeChange(pageSize)\">\r\n <option value=\"All\">All</option>\r\n <option value=\"10\">10</option>\r\n <option value=\"25\">25</option>\r\n <option value=\"50\">50</option>\r\n <option value=\"100\">100</option>\r\n </select>\r\n </div>\r\n </form>\r\n <button class=\"btn btn-default\" style=\"padding: 4px 15px 4px 20px;margin-left: 10px;\"\r\n data-toggle=\"tooltip\" data-placement=\"right\" title=\"Refresh\" (click)=\"ngOnInit();\">\r\n <span class=\"fa fa-refresh\"></span>\r\n </button>\r\n </div>\r\n <div class=\"col-sm-6\">\r\n <form class=\"form-inline pull-right\">\r\n <div class=\"form-group\">\r\n <label for=\"exampleInputName2\">Search &nbsp;&nbsp;</label>\r\n <input type=\"text\" class=\"form-control\" id=\"exampleInputName2\" name=\"schtxt\" [(ngModel)]=\"searchF\" />\r\n </div>\r\n </form>\r\n </div>\r\n </div>\r\n <div class=\"table-responsive\" [ngClass]=\"{'table-responsive' :navigation.length > 0}\">\r\n <table class=\"table table-bordered table-hover table-hover-cells\">\r\n <thead>\r\n <tr>\r\n <th>SR No</th>\r\n <th>Action</th>\r\n <th *ngFor=\"let tbh of tblH; let i = index\" (click)=\"setOrder(tbh,i)\">{{tblDesc[tbh]}}\r\n <span [hidden]=\"reverse\" *ngIf=\"showarr === i\">\r\n <i class=\"fa fa-arrow-down\" aria-hidden=\"true\"></i>\r\n </span>\r\n <span [hidden]=\"!reverse\" *ngIf=\"showarr === i\">\r\n <i class=\"fa fa-arrow-up\" aria-hidden=\"true\"></i>\r\n </span>\r\n </th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <ng-container\r\n *ngFor=\"let data of datalist | searchPipe:searchF | orderBy: order:reverse | paginate: { itemsPerPage: pageSize, currentPage: p }; let i = index\">\r\n <tr [ngClass]=\"{'Inactive':data.stt=='InActive'}\">\r\n <td>{{i + 1}}</td>\r\n <td>\r\n <div class=\"btn-group\">\r\n <a href=\"#\" data-toggle=\"dropdown\" class=\"btn btn-info dropdown-toggle\">Action\r\n <span class=\"caret\"></span>\r\n </a>\r\n <ul class=\"dropdown-menu\" role=\"menu\">\r\n <li *ngFor=\"let action of actions\">\r\n <a href=\"javascript:void(0)\" (click)=\"userAction(data,action.form_field,action, i);\">\r\n {{action.form_field_title}}\r\n </a>\r\n </li>\r\n </ul>\r\n </div>\r\n </td>\r\n <td *ngFor=\"let tbh of tblH; let i=index\" on-mouseover=\"hoveredI=i\" on-mouseleave=\"hoveredI=-1\"\r\n style=\"max-width: 300px; word-break: break-word;\">{{data[tbh]}}\r\n <div class=\"onHoverDiv\"\r\n *ngIf=\"i==hoveredI && page_typ!='jsonForm' && navform!='buyertermsMaster'\">\r\n <ul>\r\n <li (click)=\"editCell(data,tbh);\">\r\n <span class=\"fa fa-pencil\"></span>\r\n </li>\r\n </ul>\r\n </div>\r\n </td>\r\n </tr>\r\n </ng-container>\r\n </tbody>\r\n </table>\r\n </div>\r\n <pagination-controls (pageChange)=\"p = $event\" class=\"pull-right\"></pagination-controls>\r\n </div>\r\n <!-- custom form -->\r\n <div class=\"panel-body\"\r\n *ngIf=\"navform == 'addtionalDtlMaster' || navform == 'ledgerAddtionalDtlMaster' || navform == 'ledgerAccAdditinalDetails' || navform=='accDeleteRulesForm' || navform=='accJournalAttrForm' || navform=='accLoanAttrForm' || navform=='accJournalSettingForm'\">\r\n <div class=\"row\">\r\n <div class=\"col-md-12\" *ngFor=\"let ugld of uiGrpList\">\r\n <p class=\"headingCls\">{{uiGrpListDtl[ugld]}}</p>\r\n <div class=\"col-md-6\" *ngFor=\"let formF of uiGrpListDtl[ugld+'#T'];let i = index\">\r\n <div class=\"form-group\" style=\"margin-bottom: 45px !important;\">\r\n <label class=\"col-md-4 control-label\">{{uiGrpListDtl[ugld+'#D'][i]}}</label>\r\n <div class=\"col-md-8\" *ngIf=\"formF == 'n'\">\r\n <div class=\"input-group w-100\">\r\n <input type=\"number\" class=\"form-control\" name=\"{{uiGrpListDtl[ugld+'#V'][i]}}\"\r\n [value]=\"dataDtl[uiGrpListDtl[ugld+'#V'][i]]\" [(ngModel)]=\"dataDtl[uiGrpListDtl[ugld+'#V'][i]]\"\r\n (change)=\"saveFun(uiGrpListDtl[ugld+'#V'][i],dataDtl[uiGrpListDtl[ugld+'#V'][i]],formF)\"\r\n [disabled]=\"uiGrpListDtl[ugld+'#E'][i] == 0 ? false : true\">\r\n </div>\r\n </div>\r\n <div class=\"col-md-8\" *ngIf=\"formF == 't'\">\r\n <div class=\"input-group w-100\">\r\n <input type=\"text\" class=\"form-control\" name=\"{{uiGrpListDtl[ugld+'#V'][i]}}\"\r\n [value]=\"dataDtl[uiGrpListDtl[ugld+'#V'][i]]\" [(ngModel)]=\"dataDtl[uiGrpListDtl[ugld+'#V'][i]]\"\r\n (change)=\"saveFun(uiGrpListDtl[ugld+'#V'][i],dataDtl[uiGrpListDtl[ugld+'#V'][i]],formF)\"\r\n [disabled]=\"uiGrpListDtl[ugld+'#E'][i] == 0 ? false : true\">\r\n </div>\r\n </div>\r\n\r\n\r\n\r\n <!-- added for testing only -->\r\n <div class=\"col-md-8\" *ngIf=\"formF == 'c'\">\r\n <div class=\"input-group w-100\">\r\n <select type=\"text\" class=\"form-control\" name=\"{{uiGrpListDtl[ugld+'#V'][i]}}\"\r\n [(ngModel)]=\"dataDtl[uiGrpListDtl[ugld+'#V'][i]]\"\r\n (change)=\"saveFun(uiGrpListDtl[ugld+'#V'][i],dataDtl[uiGrpListDtl[ugld+'#V'][i]],formF)\">\r\n <option *ngFor=\"let key of attrCListDtl[uiGrpListDtl[ugld+'#V'][i] +'#D'];let j=index\"\r\n value=\"{{attrCListDtl[uiGrpListDtl[ugld+'#V'][i] +'#V'][j]}}\">{{key}}</option>\r\n </select>\r\n <!-- <p *ngFor=\"let a of attrCListDtl[uiGrpListDtl[ugld+'#V'][i] +'#V']\">{{a |json}}:\r\n {{attrCListDtl[uiGrpListDtl[ugld+'#V'][i] +'#V'] |json}}\r\n </p> -->\r\n <!-- <input type=\"text\" class=\"form-control\" name=\"{{uiGrpListDtl[ugld+'#V'][i]}}\" [value]=\"dataDtl[uiGrpListDtl[ugld+'#V'][i]]\"\r\n [(ngModel)]=\"dataDtl[uiGrpListDtl[ugld+'#V'][i]]\" (blur)=\"saveFun(uiGrpListDtl[ugld+'#V'][i],dataDtl[uiGrpListDtl[ugld+'#V'][i]])\"\r\n [disabled]=\"uiGrpListDtl[ugld+'#E'][i] == 0 ? false : true\"> -->\r\n </div>\r\n </div>\r\n <div class=\"col-md-8\" *ngIf=\"formF == 'q'\">\r\n <div class=\"input-group w-100\">\r\n <select type=\"text\" class=\"form-control\" name=\"{{uiGrpListDtl[ugld+'#V'][i]}}\"\r\n [(ngModel)]=\"dataDtl[uiGrpListDtl[ugld+'#V'][i]]\"\r\n (change)=\"saveFun(uiGrpListDtl[ugld+'#V'][i],dataDtl[uiGrpListDtl[ugld+'#V'][i]],formF)\">\r\n <option *ngFor=\"let key of attrQListDtl[uiGrpListDtl[ugld+'#V'][i] +'#D'];let j=index\"\r\n value=\"{{attrQListDtl[uiGrpListDtl[ugld+'#V'][i] +'#D'][j]}}\">{{key}}</option>\r\n </select>\r\n <!-- <p *ngFor=\"let a of attrCListDtl[uiGrpListDtl[ugld+'#V'][i] +'#V']\">{{a |json}}:\r\n {{attrCListDtl[uiGrpListDtl[ugld+'#V'][i] +'#V'] |json}}\r\n </p> -->\r\n <!-- <input type=\"text\" class=\"form-control\" name=\"{{uiGrpListDtl[ugld+'#V'][i]}}\" [value]=\"dataDtl[uiGrpListDtl[ugld+'#V'][i]]\"\r\n [(ngModel)]=\"dataDtl[uiGrpListDtl[ugld+'#V'][i]]\" (blur)=\"saveFun(uiGrpListDtl[ugld+'#V'][i],dataDtl[uiGrpListDtl[ugld+'#V'][i]])\"\r\n [disabled]=\"uiGrpListDtl[ugld+'#E'][i] == 0 ? false : true\"> -->\r\n </div>\r\n </div>\r\n\r\n <div class=\"col-md-8\" *ngIf=\"formF == 'sa'\">\r\n <div class=\"input-group w-100\">\r\n <ng-select style=\"z-index: 5;\" [options]=\"sqlArray[uiGrpListDtl[ugld+'#V'][i]]\" #sfi=\"ngModel\"\r\n [(ngModel)]=\"dataDtl[uiGrpListDtl[ugld+'#V'][i]]\" name=\"{{uiGrpListDtl[ugld+'#V'][i]}}\"\r\n (selected)=\"saveFun(uiGrpListDtl[ugld+'#V'][i],dataDtl[uiGrpListDtl[ugld+'#V'][i]],formF)\"\r\n (filterInputChanged)=\"loadJnlSuggdata($event,uiGrpListDtl[ugld+'#V'][i],uiGrpListDtl[ugld+'#M'][i])\">\r\n </ng-select>\r\n\r\n </div>\r\n </div>\r\n\r\n <div class=\"col-md-8\" *ngIf=\"formF == 'd'\">\r\n <div class=\"input-group w-100\">\r\n <input type=\"date\" class=\"form-control\" name=\"{{uiGrpListDtl[ugld+'#V'][i]}}\"\r\n (change)=\"saveFun(uiGrpListDtl[ugld+'#V'][i],dataDtl[uiGrpListDtl[ugld+'#V'][i]],formF)\"\r\n [value]=\"dataDtl[uiGrpListDtl[ugld+'#V'][i]]\" [(ngModel)]=\"dataDtl[uiGrpListDtl[ugld+'#V'][i]]\"\r\n [disabled]=\"uiGrpListDtl[ugld+'#E'][i] == 0 ? false : true\">\r\n </div>\r\n </div>\r\n <div class=\"col-md-8\" *ngIf=\"formF == 'e'\">\r\n <div class=\"input-group w-100\">\r\n <input type=\"email\" class=\"form-control\" name=\"{{uiGrpListDtl[ugld+'#V'][i]}}\"\r\n (change)=\"saveFun(uiGrpListDtl[ugld+'#V'][i],dataDtl[uiGrpListDtl[ugld+'#V'][i]],formF)\"\r\n [value]=\"dataDtl[uiGrpListDtl[ugld+'#V'][i]]\" [(ngModel)]=\"dataDtl[uiGrpListDtl[ugld+'#V'][i]]\"\r\n (blur)=\"saveFun(uiGrpListDtl[ugld+'#V'][i],dataDtl[uiGrpListDtl[ugld+'#V'][i]],formF)\"\r\n [disabled]=\"uiGrpListDtl[ugld+'#E'][i] == 0 ? false : true\">\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"panel-body form\"\r\n *ngIf=\"navform == 'documentUploadMaster' && navform != 'menuAccessMaster' && navform != 'termUserAssignForm' && navform != 'setPasswordForm'\">\r\n <div class=\"row\">\r\n <form action=\"#\" class=\"form-horizontal form-bordered\">\r\n <div class=\"form-body\">\r\n\r\n <div class=\"col-md-4\">\r\n <select type=\"text\" class=\"form-control\" name=\"doctype\" [(ngModel)]=\"doctype\">\r\n <option *ngFor=\"let docs of documentUploadList\" value=\"{{docs}}\">{{documentUploadDtl[docs]}}\r\n </option>\r\n </select>\r\n </div>\r\n <div class=\"col-md-4\">\r\n <div class=\"fileinput fileinput-new\" data-provides=\"fileinput\">\r\n <span class=\"btn green btn-file\">\r\n <span> Upload </span>\r\n\r\n <input type=\"file\" name=\"...\" (change)=\"uploadDocs($event)\"> </span>\r\n <span class=\"fileinput-filename\"> </span> &nbsp;\r\n <a href=\"javascript:;\" class=\"close fileinput-exists\" data-dismiss=\"fileinput\"> </a>\r\n </div>\r\n <a *ngIf=\"routherDoc!=''\" style=\"cursor:pointer \" (click)=\"rediecttokyc()\"><b>\r\n << back</b></a>\r\n </div>\r\n </div>\r\n </form>\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <p class=\"headingCls\">Existing Documents</p>\r\n </div>\r\n <div class=\"col-md-12\">\r\n <table class=\"subDisplayTable\">\r\n <ng-container *ngFor=\"let docs of documentUploadList;let i = index \">\r\n <tr *ngIf=\"dataDtl[docs]!=undefined\">\r\n <td style=\"width: 10%\">{{documentUploadDtl[docs]}}</td>\r\n <td style=\"width: 90%;text-align: left\">\r\n <ng-container *ngFor=\"let docdtl of dataDtl[docs]\">\r\n <div class=\"fileinput fileinput-new\" *ngIf=\"doceditAction\" data-provides=\"fileinput\">\r\n <span class=\"btn-file\">\r\n <i class=\"fa fa-edit\" tooltip=\"Edit Document\" style=\"font-size:20px\"> </i>\r\n\r\n <input type=\"file\" name=\"...\" (change)=\"EditUploadDocs(docdtl,$event)\"> </span>\r\n <span class=\"fileinput-filename\"> </span> &nbsp;\r\n <a href=\"javascript:;\" class=\"close fileinput-exists\" data-dismiss=\"fileinput\"> </a>\r\n </div>\r\n\r\n &nbsp;&nbsp;\r\n <a><i class=\"fa fa-trash-o\" *ngIf=\"docdeleteAction\" (click)=\"ConfirmdeleteDoc(docdtl)\"\r\n style=\"font-size:20px;cursor: pointer\"> </i> </a>&nbsp;&nbsp;&nbsp;&nbsp;\r\n <a (click)=\"opendocs(docdtl)\"> <i class=\"fa fa-file-o\" style=\"font-size:20px\"> </i> </a>\r\n &nbsp;&nbsp;|&nbsp;&nbsp;\r\n </ng-container>\r\n\r\n </td>\r\n </tr>\r\n </ng-container>\r\n </table>\r\n </div>\r\n\r\n </div>\r\n\r\n\r\n\r\n\r\n </div>\r\n <div class=\"panel-body\"\r\n *ngIf=\"navform != 'documentUploadMaster' && navform == 'menuAccessMaster' && navform != 'termUserAssignForm' && navform != 'setPasswordForm' \">\r\n <div class=\"row\">\r\n <div class=\"col-md-2\">\r\n <div class=\"form-group\">\r\n <label class=\"control-label\" style=\"padding-left: 2px;\">Application</label>\r\n <select class=\"form-control\" [(ngModel)]=\"application\" name=\"User\" (change)=\"loadUsrMdl(application)\">\r\n <option *ngFor=\"let app of applicationList\" value=\"{{app.k}}\">{{app.v}}</option>\r\n </select>\r\n </div>\r\n </div>\r\n <div class=\"col-md-2\" *ngIf=\"userDtls.length>0\">\r\n <div class=\"form-group\">\r\n <label class=\"control-label\" style=\"padding-left: 2px;\">User</label>\r\n <select class=\"form-control\" [(ngModel)]=\"User\" name=\"User\">\r\n <option *ngFor=\"let lov of userDtls\" value=\"{{lov.user_idn}}\">{{lov.username}}</option>\r\n </select>\r\n </div>\r\n </div>\r\n <div class=\"col-md-2\" *ngIf=\"moduleDtls.length>0 && userDtls.length >0 \">\r\n <div class=\"form-group\">\r\n <label class=\"control-label\" style=\"padding-left: 2px;\">Module</label>\r\n <select class=\"form-control\" [(ngModel)]=\"Module\" name=\"Module\">\r\n <option *ngFor=\"let lov of moduleDtls\" value=\"{{lov.module_idn}}\">{{lov.print}}</option>\r\n </select>\r\n </div>\r\n </div>\r\n <div class=\"col-md-2 \">\r\n <button type=\"button\" id=\"addBtn\" class=\"btn btn-info\" style=\"margin-top: 23px;\"\r\n (click)=\"getUserRights(User,Module)\">Assign\r\n Rights\r\n </button>\r\n </div>\r\n </div>\r\n <div style=\"padding: 0 10px;\" *ngIf=\"menuList.length>0\">\r\n <div style=\"border:1px solid #e5e5e5;margin-top: 30px\">\r\n <div class=\"row\">\r\n <div class=\"panel panel-default\" style=\"margin-bottom: 25px;\">\r\n <div class=\"panel-heading\" style=\"padding: 0px;\">\r\n <h3 class=\"panel-title\" style=\"padding: 8px; font-size: 14px;\">Users</h3>\r\n <div class=\"col-md-2 chkAll\" style=\"margin: 0px;\">\r\n <div class=\"form-group\" style=\"padding: 10px;\">\r\n <div class=\"col-md-3\">\r\n <label class=\"switch\">\r\n <input type=\"checkbox\" class=\"switch\" name=\"chkAll\" id=\"chkAll\"\r\n (change)=\"onChangeAll($event,User,Module)\"\r\n [checked]=\"(false !== (userRightsMenuList.length == (menuList.length + totMenu)) ? 'checked' : '')\">\r\n <span></span>\r\n </label>\r\n </div>\r\n <label class=\"col-md-4 control-label text-left\" style=\"padding-top: 8px;\r\n padding-left: 40px;\">All\r\n </label>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"row\">\r\n <form class=\"form-horizontal\">\r\n <div class=\"col-md-12\" *ngFor=\"let mdl of menuList;let i=index\">\r\n <div class=\"form-group\">\r\n <div class=\"col-md-1\">\r\n <label class=\"switch\">\r\n <input type=\"checkbox\" class=\"switch\" name=\"chkMenu\" id=\"chkMenu{{mdl.menu_idn}}\"\r\n (change)=\"onChangeMenu($event,mdl.menu_idn,User,Module)\"\r\n [checked]=\"(false !== userRightsMenuList.includes(mdl?.menu_idn) ? 'checked' : '')\">\r\n <span></span>\r\n </label>\r\n </div>\r\n <label class=\"col-md-2 control-label text-left\" style=\"padding-top: 3px;\">{{mdl.menu}}</label>\r\n </div>\r\n <div class=\"col-md-12\" *ngIf=\"mdl.SubMenu.length > 0\">\r\n <div class=\"form-group\" *ngFor=\"let smdl of mdl.SubMenu\">\r\n <div class=\"col-md-1\" style=\"margin-left:10px;padding-left: 60px;\">\r\n <label class=\"switch\">\r\n <input type=\"checkbox\" class=\"switch\" name=\"chkSubMenu\" id=\"chkSubMenu{{smdl.menu_idn}}\"\r\n (change)=\"onChangeSubMenu($event,smdl.menu_idn,mdl.menu_idn,User,Module)\"\r\n [checked]=\"( false !== userRightsMenuList.includes(smdl?.menu_idn) ? 'checked' : '')\">\r\n <span></span>\r\n </label>\r\n </div>\r\n <label class=\"col-md-4 control-label text-left\"\r\n style=\"padding-top: 8px; font-weight: 100;padding-left: 40px;\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{{smdl.hdr}}</label>\r\n </div>\r\n </div>\r\n </div>\r\n </form>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"panel-body\" *ngIf=\"navform == 'webMenuAccessMaster'\">\r\n <div class=\"row\">\r\n <div class=\"col-md-2\">\r\n <div class=\"form-group\">\r\n <label class=\"control-label\" style=\"padding-left: 2px;\">Application</label>\r\n <select class=\"form-control\" [(ngModel)]=\"application\" name=\"User\" (change)=\"loadUsrMdl(application)\">\r\n <option *ngFor=\"let app of applicationList\" value=\"{{app.k}}\">{{app.v}}</option>\r\n </select>\r\n </div>\r\n </div>\r\n <div class=\"col-md-2\" *ngIf=\"userDtls.length>0\">\r\n <div class=\"form-group\">\r\n <label class=\"control-label\" style=\"padding-left: 2px;\">User</label>\r\n <select class=\"form-control\" [(ngModel)]=\"User\" name=\"User\">\r\n <option *ngFor=\"let lov of userDtls\" value=\"{{lov.user_idn}}\">{{lov.username}}</option>\r\n </select>\r\n </div>\r\n </div>\r\n <div class=\"col-md-2\" *ngIf=\"moduleDtls.length>0 && userDtls.length >0 \">\r\n <div class=\"form-group\">\r\n <label class=\"control-label\" style=\"padding-left: 2px;\">Module</label>\r\n <select class=\"form-control\" [(ngModel)]=\"Module\" name=\"Module\">\r\n <option *ngFor=\"let lov of moduleDtls\" value=\"{{lov.module_idn}}\">{{lov.print}}</option>\r\n </select>\r\n </div>\r\n </div>\r\n <div class=\"col-md-2 \">\r\n <button type=\"button\" id=\"addBtn\" class=\"btn btn-info\" style=\"margin-top: 23px;\"\r\n (click)=\"getUserRights(User,Module)\">Assign\r\n Rights\r\n </button>\r\n </div>\r\n </div>\r\n <div style=\"padding: 0 10px;\" *ngIf=\"menuList.length>0\">\r\n <div style=\"border:1px solid #e5e5e5;margin-top: 30px\">\r\n <div class=\"row\">\r\n <div class=\"panel panel-default\" style=\"margin-bottom: 25px;\">\r\n <div class=\"panel-heading\" style=\"padding: 0px;\">\r\n <h3 class=\"panel-title\" style=\"padding: 8px; font-size: 14px;\">Users</h3>\r\n <div class=\"col-md-2 chkAll\" style=\"margin: 0px;\">\r\n <div class=\"form-group\" style=\"padding: 10px;\">\r\n <div class=\"col-md-3\">\r\n <label class=\"switch\">\r\n <input type=\"checkbox\" class=\"switch\" name=\"chkAll\" id=\"chkAll\"\r\n (change)=\"onChangeAll($event,User,Module)\"\r\n [checked]=\"(false !== (userRightsMenuList.length == (menuList.length + totMenu)) ? 'checked' : '')\">\r\n <span></span>\r\n </label>\r\n </div>\r\n <label class=\"col-md-4 control-label text-left\" style=\"padding-top: 8px;\r\n padding-left: 40px;\">All\r\n </label>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"row\">\r\n <form class=\"form-horizontal\">\r\n <div class=\"col-md-12\" *ngFor=\"let mdl of menuList;let i=index\">\r\n <div class=\"form-group\">\r\n <div class=\"col-md-1\">\r\n <label class=\"switch\">\r\n <input type=\"checkbox\" class=\"switch\" name=\"chkMenu\" id=\"chkMenu{{mdl.menu_idn}}\"\r\n (change)=\"onChangeWebMenu($event,mdl.menu_idn,User,Module)\"\r\n [checked]=\"(false == userRightsMenuList.includes(mdl?.menu_idn) ? 'checked' : '')\">\r\n <span></span>\r\n </label>\r\n </div>\r\n <label class=\"col-md-2 control-label text-left\" style=\"padding-top: 3px;\">{{mdl.menu}}</label>\r\n </div>\r\n <div class=\"col-md-12\" *ngIf=\"mdl.SubMenu.length > 0\">\r\n <div class=\"form-group\" *ngFor=\"let smdl of mdl.SubMenu\">\r\n <div class=\"col-md-1\" style=\"margin-left:10px;padding-left: 60px;\">\r\n <label class=\"switch\">\r\n <input type=\"checkbox\" class=\"switch\" name=\"chkSubMenu\" id=\"chkSubMenu{{smdl.menu_idn}}\"\r\n (change)=\"onChangeWebSubMenu($event,smdl.menu_idn,mdl.menu_idn,User,Module)\"\r\n [checked]=\"( false == userRightsMenuList.includes(smdl?.menu_idn) ? 'checked' : '')\">\r\n <span></span>\r\n </label>\r\n </div>\r\n <label class=\"col-md-4 control-label text-left\"\r\n style=\"padding-top: 8px; font-weight: 100;padding-left: 40px;\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{{smdl.hdr}}</label>\r\n </div>\r\n </div>\r\n </div>\r\n </form>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"panel-body\" style=\"background: #fff;min-height: 550px;\"\r\n *ngIf=\"navform != 'addtionalDtlMaster' && navform != 'documentUploadMaster' && navform != 'menuAccessMaster' && navform == 'termUserAssignForm' && navform != 'setPasswordForm' \">\r\n <div class=\"row\" style=\"margin-top: 10px;\">\r\n <div class=\"col-md-2\">\r\n <div class=\"form-group\">\r\n <label class=\"control-label\">Terms</label>\r\n </div>\r\n </div>\r\n <div class=\"col-md-1\" style=\"margin-left: 85px;\">\r\n <div class=\"form-group\">\r\n <label class=\"control-label\">Users</label>\r\n </div>\r\n </div>\r\n </div>\r\n <ng-container *ngFor=\"let term of termsList; let i=index;\">\r\n <div class=\"row\">\r\n <div class=\"col-md-3\">\r\n <div class=\"form-group\">\r\n\r\n <label for=\"{{term.buyer_terms_idn}}\" class=\"control-label\"\r\n style=\"padding: 10px;\">{{term.dsc}}</label>\r\n </div>\r\n </div>\r\n <div class=\"col-md-3\" *ngIf=\"term.userIdnList != undefined\">\r\n <div class=\"form-group w-100\">\r\n <div class=\"input-group w-100\">\r\n\r\n <!-- <ng-select [items]=\"applUserList\" [multiple]=\"true\" [addTag]=\"addTag\" (change)=\"onchaneVals(null,term.buyer_terms_idn,term.userIdnList)\"\r\n bindLabel=\"v\" bindValue=\"k\" name=\"{{term ?.buyer_terms_idn}}\" [(ngModel)]=\"term.userIdnList\">\r\n </ng-select> -->\r\n <ng-select placeholder=\"Select user\" [options]=\"term.TermUserList\" [(ngModel)]=\"term.userIdnList\"\r\n (deselected)=\"onchangeUserList($event,term,'delete')\"\r\n (selected)=\"onchangeUserList($event,term,'add')\" name=\"status\" [multiple]=\"true\"\r\n [allowClear]=\"true\">\r\n <ng-template #optionTemplate let-option=\"option\">\r\n <div class=\"famfamfam-flags {{option?.value}}\"></div>\r\n {{option?.label}}\r\n </ng-template>\r\n </ng-select>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"col-md-6\"></div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n\r\n <div class=\"panel-body\" style=\"background: #fff;min-height: 550px;\"\r\n *ngIf=\"navform != 'addtionalDtlMaster' && navform != 'documentUploadMaster' && navform != 'menuAccessMaster' && navform != 'termUserAssignForm' && navform == 'setPasswordForm' \">\r\n <div class=\"row\" style=\"margin-top: 10px;\">\r\n <div class=\"col-md-12\">\r\n <p class=\"headingCls\">Change User Password</p>\r\n </div>\r\n <div class=\"col-md-2\">\r\n <div class=\"form-group\">\r\n <label class=\"control-label\" style=\"padding: 8px;\">Username</label>\r\n </div>\r\n </div>\r\n <div class=\"col-md-1\" style=\"margin-left: 85px;\">\r\n <div class=\"form-group\">\r\n <label class=\"control-label\" style=\"padding: 8px;\">Password</label>\r\n </div>\r\n </div>\r\n </div>\r\n <ng-container *ngFor=\"let user of userDetails; let i=index;\">\r\n <div class=\"row\">\r\n <div class=\"col-md-3\">\r\n <div class=\"form-group\">\r\n <label class=\"control-label\" style=\"padding: 10px;font-weight: normal;\">{{user?.username}}</label>\r\n </div>\r\n </div>\r\n <div class=\"col-md-6\">\r\n <div class=\"form-group w-100\">\r\n <input type=\"text\" class=\"form-control\" [(ngModel)]=\"user.password\" [value]=\"user?.password\" />\r\n <!-- (blur)=\"changePswd($event,user.userIdn)\" -->\r\n </div>\r\n </div>\r\n <div class=\"col-md-3\">\r\n <div class=\"form-group\">\r\n <button type=\"submit\" class=\"btn btn-success\" (click)=\"changePassword(user)\">save</button>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n <!-- <button type=\"submit\" class=\"btn btn-success\" (click)=\"saveAppUserterms(applUsrLst)\">save</button> -->\r\n </div>\r\n <div class=\"panel-body\" style=\"background: #fff;min-height: 550px;\" *ngIf=\"navform=='ledgerBankDetails'\">\r\n <div class=\"row\">\r\n <div class=\"col-md-12\" style=\"margin:5px\">\r\n <div class=\"form-group w-100\">\r\n <label class=\"col-md-2 control-label\">Bank</label>\r\n <div class=\"col-md-4\">\r\n <ng-select placeholder=\"Select Bank\" [options]=\"bankList\" [(ngModel)]=\"bank\" name=\"bank\"\r\n (selected)=\"getBankBranch(bank)\" (filterInputChanged)=\"ledgerBankDetails($event)\"\r\n [allowClear]=\"true\">\r\n </ng-select>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"col-md-12\" style=\"margin:5px\">\r\n <div class=\"form-group w-100\">\r\n <label class=\"col-md-2 control-label\">Branch Details</label>\r\n <div class=\"col-md-4\">\r\n <select name=\"branch\" (change)=\"selectBranch(branch)\" [(ngModel)]=\"branch\" class=\"form-control\">\r\n <option value=\"\">Select branch</option>\r\n <option *ngFor=\"let bnkDtl of bankDtlList\" [ngValue]=\"bnkDtl.nme_idn\">{{bnkDtl.person_nme}}</option>\r\n </select>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"col-md-12\" *ngIf=\"selectBranchAddress!=''\" style=\"margin:5px\">\r\n <div class=\"form-group w-100\">\r\n <label class=\"col-md-2 control-label\">&nbsp;</label>\r\n <div class=\"col-md-4\">\r\n <div class=\"col-md-3\">Address:</div>\r\n <div class=\"col-md-9\">{{selectBranchAddress}}</div>\r\n <div class=\"col-md-3\">IFSC Code:</div>\r\n <div class=\"col-md-9\">{{selectIfsc}}</div>\r\n\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"col-md-12\" style=\"margin:5px\">\r\n <div class=\"form-group w-100\">\r\n <label class=\"col-md-2 control-label\">Account Type</label>\r\n <div class=\"col-md-4\">\r\n <select name=\"accountType\" [(ngModel)]=\"accountType\" class=\"form-control\">\r\n <option value=\"current\">Current</option>\r\n <option value=\"savings\">Savings</option>\r\n </select>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"col-md-12\" style=\"margin:5px\">\r\n <div class=\"form-group w-100\">\r\n <label class=\"col-md-2 control-label\">Account No</label>\r\n <div class=\"col-md-4\">\r\n <textarea class=\"form-control\" cols=\"45\" rows=\"2\" name=\"accountno\" [(ngModel)]=\"accountno\"></textarea>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"col-md-12\" style=\"margin:5px\">\r\n <div class=\"form-group w-100\">\r\n <div class=\"col-md-2\">&nbsp;</div>\r\n <div class=\"col-md-4\">\r\n <button type=\"button\" *ngIf=\"editbank_dtl_idn==''\" (click)=\"SaveLedgerBank()\"\r\n class=\"btn btn-success\">Add</button>\r\n <button type=\"button\" *ngIf=\"editbank_dtl_idn!=''\" (click)=\"SaveLedgerBank()\"\r\n class=\"btn btn-success\">Edit</button>\r\n\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"row\" *ngIf=\"exitBankDtlList.length>0\">\r\n <div class=\"col-md-1 pull-left\">\r\n &nbsp;\r\n </div>\r\n <div class=\"col-md-6 pull-right\">\r\n <form class=\"form-inline pull-right\">\r\n <div class=\"form-group\">\r\n <label for=\"exampleInputName2\">Search &nbsp;&nbsp;</label>\r\n <input type=\"text\" class=\"form-control\" id=\"exampleInputName2\" name=\"searchF\" [(ngModel)]=\"searchF\" />\r\n </div>\r\n </form>\r\n </div>\r\n </div>\r\n <div class=\"row\" *ngIf=\"exitBankDtlList.length>0\">\r\n <div class=\"col-md-12\">\r\n <table class=\"displayTable\">\r\n <thead>\r\n <th>Actions</th>\r\n <th>Account Type</th>\r\n <th>Account No</th>\r\n <th>Name</th>\r\n <th>Branch</th>\r\n <th>Address</th>\r\n <th>IFSC Code</th>\r\n </thead>\r\n <tbody>\r\n <ng-container *ngFor=\"let bankdtl of exitBankDtlList ; let i = index\">\r\n <tr [ngClass]=\"{'even':i%2==0,'odd':i%2==1}\">\r\n <td> <i class=\"fa fa-edit\" (click)=\"loadEditBankDtl(bankdtl)\" tooltip=\"Edit Bank\"\r\n style=\"font-size:15px;cursor: pointer\"> </i>&nbsp;|\r\n <i class=\"fa fa-trash-o\" (click)=\"ConfirmDeleteLedgerBank(bankdtl)\" tooltip=\"Delete Bank\"\r\n style=\"font-size:15px;cursor: pointer\"> </i>\r\n <td>{{bankdtl.accountType}}</td>\r\n <td>{{bankdtl.accountNo}}</td>\r\n <td>{{bankdtl.bankname}}</td>\r\n <td>{{bankdtl.branchname}}</td>\r\n <td>{{bankdtl.address}}</td>\r\n <td>{{bankdtl.ifsc}}</td>\r\n </tr>\r\n </ng-container>\r\n </tbody>\r\n </table>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"modal\" id=\"datamodal\" role=\"dialog\" aria-labelledby=\"defModalHead\" aria-hidden=\"true\"\r\n data-backdrop=\"static\" data-keyboard=\"false\">\r\n <div class=\"modal-dialog\">\r\n <div class=\"modal-content\">\r\n <form class=\"form-horizontal\" #f=\"ngForm\" name=\"appForm\">\r\n <div class=\"modal-header\">\r\n <button type=\"button\" class=\"close\" data-dismiss=\"modal\" (click)=\"closeNull();\" #closebtn>\r\n <span aria-hidden=\"true\">&times;</span>\r\n <span class=\"sr-only\">Close</span>\r\n </button>\r\n <h4 class=\"modal-title\" id=\"defModalHead\">{{btnName}} Record</h4>\r\n </div>\r\n <div class=\"modal-body\">\r\n <div class=\"row\">\r\n <div class=\"col-md-12\" *ngFor=\"let fl of formFilds | orderByPipe: 'srt': 'asc'\">\r\n <div class=\"form-group\"\r\n *ngIf=\"fl?.form_field_typ == 't' && fl?.is_hidden == 0 && fl?.dta_typ =='c' || fl?.dta_typ =='t'\">\r\n <label class=\"col-md-3 control-label\">{{fl?.form_field_title}}\r\n <span class=\"text-danger\" *ngIf=\"fl.is_compulsory == 1\">*</span>\r\n </label>\r\n <div class=\"col-md-9\">\r\n <div class=\"input-group w-100\">\r\n <input type=\"text\" class=\"form-control posrel\" name=\"{{fl?.form_field}}\"\r\n [value]=\"fl?.default_value\" [(ngModel)]=\"fl.default_value\" #textInput=\"ngModel\"\r\n (blur)=\"chkFun(fl,fl.default_value);\" [required]=\"fl?.is_compulsory == '1'\" />\r\n <span class=\"fa fa-{{ico}} eye\" [ngStyle]=\"{'color':ico == 'check' ? 'green' : 'red' }\"\r\n *ngIf=\"usrisExist && onErr == fl.form_field \"></span>\r\n </div>\r\n <div *ngIf=\"textInput.invalid && (textInput.dirty || textInput.touched)\"\r\n class=\"alert alert-danger ca\">\r\n <div *ngIf=\"textInput.errors.required\">\r\n {{fl.form_field_title}} is required.\r\n </div>\r\n\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"form-group\" *ngIf=\"fl?.form_field_typ == 't' && fl?.is_hidden == 0 && fl?.dta_typ =='n'\">\r\n <label class=\"col-md-3 control-label\">{{fl?.form_field_title}}\r\n <span class=\"text-danger\" *ngIf=\"fl.is_compulsory == 1\">*</span>\r\n </label>\r\n <div class=\"col-md-9\">\r\n <div class=\"input-group w-100\">\r\n <input type=\"number\" class=\"form-control\" name=\"{{fl?.form_field}}\" [value]=\"fl?.default_value\"\r\n [(ngModel)]=\"fl.default_value\" #numberInput=\"ngModel\" [required]=\"fl?.is_compulsory==1\">\r\n </div>\r\n <div *ngIf=\"numberInput.invalid && (numberInput.dirty || numberInput.touched)\"\r\n class=\"alert alert-danger ca\">\r\n <div *ngIf=\"numberInput.errors.required\">\r\n {{fl.form_field_title}} is required.\r\n </div>\r\n <div *ngIf=\"numberInput.invalid && (numberInput.dirty || numberInput.touched)\"\r\n class=\"alert alert-danger ca\">\r\n <div *ngIf=\"numberInput.errors.required\">\r\n {{fl.form_field_title}} is required.\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"form-group\"\r\n *ngIf=\"fl?.form_field_typ == 'pw' && fl?.is_hidden == 0 && fl?.dta_typ =='pw'\">\r\n <label class=\"col-md-3 control-label\">{{fl?.form_field_title}}\r\n <span class=\"text-danger\" *ngIf=\"fl.is_compulsory == 1\">*</span>\r\n </label>\r\n <div class=\"col-md-9\">\r\n <div class=\"input-group w-100\">\r\n <input type=\"{{inputtype}}\" class=\"form-control posrel\" name=\"{{fl?.form_field}}\"\r\n [value]=\"fl?.default_value\" [(ngModel)]=\"fl.default_value\" #passInput=\"ngModel\"\r\n [required]=\"fl?.is_compulsory == '1'\" />\r\n <span class=\"fa {{eveC}} eye\" (click)=\"showHIdePass();\"></span>\r\n </div>\r\n <div *ngIf=\"passInput.invalid && (passInput.dirty || passInput.touched)\"\r\n class=\"alert alert-danger ca\">\r\n <div *ngIf=\"passInput.errors.required\">\r\n {{fl.form_field_title}} is required.\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"form-group\" *ngIf=\"fl?.form_field_typ == 't' && fl?.dta_typ =='a'\">\r\n <label class=\"col-md-3 control-label\">{{fl?.form_field_title}}\r\n <span class=\"text-danger\" *ngIf=\"fl.is_compulsory == 1\">*</span>\r\n </label>\r\n <div class=\"col-md-9\">\r\n <div class=\"input-group w-100\">\r\n\r\n <!-- <ng-select [items]=\"[]\" [addTag]=\"true\" bindValue=\"label\" [multiple]=\"true\" name=\"{{fl?.form_field}}\"\r\n [(ngModel)]=\"fl.default_value\" [isOpen]=\"false\" #afield=\"ngModel\" [required]=\"fl?.is_compulsory == '1'\">\r\n </ng-select> -->\r\n\r\n <!-- <ng-select style=\"z-index: 5;\" [options]=\"[]\" [(ngModel)]=\"fl.default_value\" name=\"{{fl?.form_field}}\"\r\n #afield=\"ngModel\" [required]=\"fl?.is_compulsory == '1'\">\r\n </ng-select> last commented-->\r\n\r\n <tag-input [(ngModel)]=\"fl.default_value\" name=\"{{fl?.form_field}}\" [modelAsStrings]=\"true\"\r\n [allowDupes]=\"true\" [editable]='true'></tag-input>\r\n\r\n\r\n </div>\r\n <!-- <div *ngIf=\"afield.invalid && (afield.dirty || afield.touched)\" class=\"alert alert-danger ca\">\r\n <div *ngIf=\"afield.errors.required\">\r\n {{fl.form_field_title}} is required.\r\n </div>\r\n </div> -->\r\n </div>\r\n </div>\r\n <div class=\"form-group\" *ngIf=\"fl?.form_field_typ == 't' && fl?.dta_typ =='sr'\">\r\n <div class=\"row\">\r\n <label class=\"col-md-3 control-label\">{{fl?.form_field_title}}\r\n <span class=\"text-danger\" *ngIf=\"fl.is_compulsory == 1\">*</span>\r\n </label>\r\n <div class=\"col-md-7\">\r\n <div class=\"input-group w-100\">\r\n <!-- <ng-select [items]=\"sqlArray[fl.form_field]\" [dropdownPosition]=\"'bottom'\" bindLabel=\"v\"\r\n [(ngModel)]=\"pageDisplay\" [ngModelOptions]=\"{standalone: true}\">\r\n </ng-select> -->\r\n <ng-select style=\"z-index: 5;\" [options]=\"sqlArray[fl.form_field]\" [(ngModel)]=\"pageDisplay\"\r\n name=\"{{fl?.form_field}}\">\r\n </ng-select>\r\n </div>\r\n </div>\r\n <div class=\"col-md-2\">\r\n <button class=\"btn btn-info\" type=\"button\" style=\"width:100%;\"\r\n (click)=\"addAttr(pageDisplay, sqlArray[fl.form_field], fl.default_value);\">Add</button>\r\n </div>\r\n </div>\r\n <div class=\"row\">\r\n <label class=\"col-md-3 control-label\">Selected Modules</label>\r\n <div cclass=\"col-md-9\">\r\n <div class=\"mds\">\r\n <ng-template #itemTemplate let-item=\"item\" let-index=\"index\">\r\n <span\r\n style=\"padding: 4px;border: 1px solid #c9c9c9;border-radius: 6px;display: inline-block;width: 100%;position: relative;\">\r\n <span>{{index+1}}</span> - {{item.value}}\r\n <span class=\"rm\" (click)=\"remove(fl.default_value,item.value,index,fl?.form_field);\">\r\n <i class=\"fa fa-times\" aria-hidden=\"true\"></i>\r\n </span>\r\n </span>\r\n </ng-template>\r\n <div class=\"row\">\r\n <div>\r\n <bs-sortable [(ngModel)]=\"fl.default_value\" name=\"{{fl?.form_field}}\"\r\n [itemTemplate]=\"itemTemplate\" itemClass=\"sortable-item\"\r\n itemActiveClass=\"sortable-item-active\" placeholderClass=\"placeholderStyle\"\r\n wrapperClass=\"sortable-wrapper\" #srf=\"ngModel\" [required]=\"fl?.is_compulsory == '1'\">\r\n </bs-sortable>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div *ngIf=\"srf.invalid && (srf.dirty || srf.touched)\" class=\"alert alert-danger ca\">\r\n <div *ngIf=\"srf.errors.required\">\r\n {{fl.form_field_title}} is required.\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"form-group\" *ngIf=\"fl?.form_field_typ == 't' && fl?.dta_typ =='sa'\">\r\n <label class=\"col-md-3 control-label\">{{fl?.form_field_title}}\r\n <span class=\"text-danger\" *ngIf=\"fl.is_compulsory == 1\">*</span>\r\n </label>\r\n <div class=\"col-md-9\">\r\n <div class=\"input-group w-100\">\r\n <!-- <ng-select [items]=\"sqlArray[fl.form_field]\" [addTag]=\"addTag\" bindValue=\"k\" [hideSelected]=\"true\"\r\n multiple=\"true\" bindLabel=\"v\" name=\"{{fl?.form_field}}\" [(ngModel)]=\"fl.default_value\"\r\n #safield=\"ngModel\" [required]=\"fl?.is_compulsory == '1'\">\r\n </ng-select> -->\r\n\r\n <ng-select style=\"z-index: 5;\" [options]=\"sqlArray[fl.form_field]\"\r\n [(ngModel)]=\"fl.default_value\" [multiple]=\"true\" [allowClear]=\"true\" name=\"{{fl?.form_field}}\"\r\n #safield=\"ngModel\" [required]=\"fl?.is_compulsory == '1'\">\r\n <ng-template #optionTemplate let-option=\"option\">\r\n <div class=\"famfamfam-flags {{option?.value}}\"></div>\r\n {{option?.label}}\r\n </ng-template>\r\n </ng-select>\r\n\r\n </div>\r\n <div *ngIf=\"safield.invalid && (safield.dirty || safield.touched)\" class=\"alert alert-danger ca\">\r\n <div *ngIf=\"safield.errors.required\">\r\n {{fl.form_field_title}} is required.\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"form-group\" *ngIf=\"fl?.form_field_typ == 'ta' && fl?.is_hidden == 0 && fl?.dta_typ =='c'\">\r\n <label class=\"col-md-3 control-label\">{{fl?.form_field_title}}\r\n <span class=\"text-danger\" *ngIf=\"fl.is_compulsory == 1\">*</span>\r\n </label>\r\n <div class=\"col-md-9\">\r\n <div class=\"input-group w-100\">\r\n <textarea class=\"form-control\" rows=\"3\" name=\"{{fl?.form_field}}\" [value]=\"fl?.default_value\"\r\n [(ngModel)]=\"fl.default_value\" #textArea=\"ngModel\" (blur)=\"chkFun(fl,fl.default_value);\"\r\n [ngClass]=\"{'uniqErrMsg': fl?.form_field == onErr}\"\r\n [required]=\"fl?.is_compulsory == '1'\"></textarea>\r\n </div>\r\n <div *ngIf=\"textArea.invalid && (textArea.dirty || textArea.touched)\"\r\n class=\"alert alert-danger ca\">\r\n <div *ngIf=\"textArea.errors.required\">\r\n {{fl.form_field_title}} is required.\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div\r\n *ngIf=\"fl?.form_field_typ == 'hd' || fl?.form_field_typ == 'hc' || fl?.form_field_typ == 'df' || fl?.form_field_typ == 'fk' || fl?.form_field_typ == 'ck' && fl?.is_hidden == 0\"\r\n [ngClass]=\"{'mt0': fl?.form_field_typ == 'hd'}\">\r\n <input type=\"hidden\" class=\"form-control\" name=\"{{fl?.form_field}}\" [value]=\"fl?.default_value\"\r\n [(ngModel)]=\"fl.default_value\" #hdf=\"ngModel\" />\r\n </div>\r\n <div class=\"form-group\" *ngIf=\"fl?.form_field_typ == 'sq' && fl?.is_hidden == 0\">\r\n <label class=\"col-md-3 control-label\"></label>\r\n <div class=\"col-md-9\">\r\n <div class=\"input-group w-100\">\r\n <input type=\"hidden\" class=\"form-control\" name=\"{{fl?.form_field}}\" [value]=\"fl?.default_value\"\r\n [(ngModel)]=\"fl.default_value\" />\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"form-group\" *ngIf=\"fl?.form_field_typ == 'tb' && fl?.is_hidden == 0\">\r\n <label class=\"col-md-3 control-label\">{{fl?.form_field_title}}\r\n <span class=\"text-danger\" *ngIf=\"fl.is_compulsory == 1\">*</span>\r\n </label>\r\n\r\n <div class=\"col-md-9\">\r\n <div class=\"input-group w-100\">\r\n <select class=\"form-control select\" name=\"{{fl?.form_field}}\" [value]=\"fl?.default_value\"\r\n [(ngModel)]=\"fl.default_value\" #tdf=\"ngModel\" [required]=\"fl?.is_compulsory == '1'\">\r\n <option *ngFor=\"let dynamic of sqlArray[fl.form_field]\" value=\"{{dynamic.value}}\">\r\n {{dynamic.label}}</option>\r\n </select>\r\n </div>\r\n <div *ngIf=\"tdf.invalid && (tdf.dirty || tdf.touched)\" class=\"alert alert-danger ca\">\r\n <div *ngIf=\"tdf.errors.required\">\r\n {{fl.form_field_title}} is required.\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"form-group\" *ngIf=\"fl?.form_field_typ == 'l' && fl?.is_hidden == 0\">\r\n <label class=\"col-md-3 control-label\">{{fl?.form_field_title}}\r\n <span class=\"text-danger\" *ngIf=\"fl.is_compulsory == 1\">*</span>\r\n </label>\r\n <div class=\"col-md-9\">\r\n <div class=\"input-group w-100\">\r\n <select class=\"form-control select\" name=\"{{fl?.form_field}}\" [value]=\"fl?.default_value\"\r\n [(ngModel)]=\"fl.default_value\" #lInput=\"ngModel\" [required]=\"fl?.is_compulsory == '1'\">\r\n <option *ngFor=\"let lov of fl.kv\" value=\"{{lov.k}}\">{{lov.v}}</option>\r\n </select>\r\n </div>\r\n <div *ngIf=\"lInput.invalid && (lInput.dirty || lInput.touched)\" class=\"alert alert-danger ca\">\r\n <div *ngIf=\"lInput.errors.required\">\r\n {{fl.form_field_title}} is required.\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"form-group\" *ngIf=\"fl?.form_field_typ == 'ld' && fl?.is_hidden == 0\">\r\n <label class=\"col-md-3 control-label\">{{fl?.form_field_title}}\r\n <span class=\"text-danger\" *ngIf=\"fl.is_compulsory == 1\">*</span>\r\n </label>\r\n <div class=\"col-md-9\">\r\n <div class=\"input-group w-100\">\r\n <select class=\"form-control select\" name=\"{{fl?.form_field}}\" [value]=\"fl?.default_value\"\r\n [(ngModel)]=\"fl.default_value\" #ldInput=\"ngModel\" [required]=\"fl?.is_compulsory == '1'\">\r\n <option *ngFor=\"let dynamic of sqlArray[fl.form_field]\" value=\"{{dynamic.value}}\">\r\n {{dynamic.label}}</option>\r\n </select>\r\n </div>\r\n <div *ngIf=\"ldInput.invalid && (ldInput.dirty || ldInput.touched)\" class=\"alert alert-danger ca\">\r\n <div *ngIf=\"ldInput.errors.required\">\r\n {{fl.form_field_title}} is required.\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"form-group\" *ngIf=\"fl?.form_field_typ == 's' && fl?.is_hidden == 0\">\r\n <label class=\"col-md-3 control-label\">{{fl?.form_field_title}}\r\n <span class=\"text-danger\" *ngIf=\"fl.is_compulsory == 1\">*</span>\r\n </label>\r\n <div class=\"col-md-9\">\r\n <div class=\"input-group w-100\">\r\n <select class=\"form-control select\" name=\"{{fl?.form_field}}\" [value]=\"fl?.default_value\"\r\n [(ngModel)]=\"fl.default_value\" (change)=\"chkFun(fl,fl.default_value)\" id=\"{{fl.column_key}}\"\r\n #sfi=\"ngModel\" [required]=\"fl?.is_compulsory == '1'\">\r\n <option *ngFor=\"let dynamic of sqlArray[fl.form_field]\" value=\"{{dynamic.value}}\">\r\n {{dynamic.label}}</option>\r\n </select>\r\n </div>\r\n <div *ngIf=\"sfi.invalid && (sfi.dirty || sfi.touched)\" class=\"alert alert-danger ca\">\r\n <div *ngIf=\"sfi.errors.required\">\r\n {{fl.form_field_title}} is required.\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"form-group\" *ngIf=\"fl?.form_field_typ == 'sb'\">\r\n <label class=\"col-md-3 control-label\">{{fl?.form_field_title}}\r\n <span class=\"text-danger\" *ngIf=\"fl.is_compulsory == 1\">*</span>\r\n </label>\r\n <div class=\"col-md-8\">\r\n <div class=\"input-group w-100\">\r\n <ng-select style=\"z-index: 5;\" [options]=\"sqlArray[fl.form_field]\" #sfi=\"ngModel\"\r\n [(ngModel)]=\"fl.default_value\" name=\"{{fl?.form_field}}\"\r\n (selected)=\"chkFun(fl,fl.default_value)\"\r\n (filterInputChanged)=\"loadSuggdata($event,fl.page_item_idn,fl.form_field)\">\r\n </ng-select>\r\n </div>\r\n <div *ngIf=\"sfi.invalid && (sfi.dirty || sfi.touched)\" class=\"alert alert-danger ca\">\r\n <div *ngIf=\"sfi.errors.required\">\r\n {{fl.form_field_title}} is required.\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"col-md-1\" *ngIf=\"fl?.form_field_icon == 'add'\">\r\n <button type=\"button\" class=\"btn btn-success btn-rounded\"><span><i\r\n class=\"fa fa-plus\"></i></span></button>\r\n\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"modal-footer\">\r\n <button type=\"submit\" class=\"btn btn-success\" (click)=\"submitForm(f,submitBtn)\" appAppNoDblClick\r\n #submitBtn>{{btnName}}</button>\r\n <button type=\"reset\" class=\"btn btn-danger\" (click)=\"reset(f)\" *ngIf=\"btnName == 'Add'\">Reset</button>\r\n </div>\r\n </form>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"modal\" id=\"deleteTermsmodal\" role=\"dialog\" aria-labelledby=\"smallModalHead\" aria-hidden=\"true\"\r\n data-backdrop=\"static\" data-keyboard=\"false\">\r\n <div class=\"modal-dialog modal-sm\">\r\n <div class=\"modal-content\">\r\n <div class=\"modal-header\">\r\n <button type=\"button\" class=\"close\" data-dismiss=\"modal\" (click)=\"closeNull();\" #deleteclsbtn>\r\n <span aria-hidden=\"true\">&times;</span>\r\n <span class=\"sr-only\">Close</span>\r\n </button>\r\n <h4 class=\"modal-title\" id=\"smallModalHead\">Warning</h4>\r\n </div>\r\n <div class=\"modal-body\">\r\n Are you sure want to delete term?\r\n </div>\r\n <div class=\"modal-footer\">\r\n <button type=\"button\" class=\"btn btn-default\" data-dismiss=\"modal\">Close</button>\r\n <button type=\"button\" class=\"btn btn-danger\" data-dismiss=\"modal\" (click)=\"DeleteTerms();\">Delete</button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"modal\" id=\"deletemodal\" role=\"dialog\" aria-labelledby=\"smallModalHead\" aria-hidden=\"true\"\r\n data-backdrop=\"static\" data-keyboard=\"false\">\r\n <div class=\"modal-dialog modal-sm\">\r\n <div class=\"modal-content\">\r\n <div class=\"modal-header\">\r\n <button type=\"button\" class=\"close\" data-dismiss=\"modal\" (click)=\"closeNull();\" #deleteclsbtn>\r\n <span aria-hidden=\"true\">&times;</span>\r\n <span class=\"sr-only\">Close</span>\r\n </button>\r\n <h4 class=\"modal-title\" id=\"smallModalHead\">Warning</h4>\r\n </div>\r\n <div class=\"modal-body\">\r\n Are you sure want to delete?\r\n </div>\r\n <div class=\"modal-footer\">\r\n <button type=\"button\" class=\"btn btn-default\" data-dismiss=\"modal\">Close</button>\r\n <button type=\"button\" class=\"btn btn-danger\" data-dismiss=\"modal\"\r\n (click)=\"deleteDataList();\">Delete</button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n\r\n <div class=\"modal\" id=\"modal_sys\" tabindex=\"-1\" role=\"dialog\" aria-labelledby=\"defModalHead\" aria-hidden=\"true\">\r\n <div class=\"modal-dialog\">\r\n <div class=\"modal-content\">\r\n <div class=\"modal-header\">\r\n <button type=\"button\" class=\"close\" data-dismiss=\"modal\">\r\n <span aria-hidden=\"true\">&times;</span>\r\n <span class=\"sr-only\">Close</span>\r\n </button>\r\n <h4 class=\"modal-title\" id=\"defModalHead\">Basic Modal</h4>\r\n </div>\r\n <div class=\"modal-body\">\r\n Some content in modal example\r\n </div>\r\n <div class=\"modal-footer\">\r\n <button type=\"button\" class=\"btn btn-default\" data-dismiss=\"modal\">Close</button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"modal\" id=\"rowGrpmodal\" tabindex=\"-2\" role=\"dialog\" aria-labelledby=\"rowGrpmodal\" aria-hidden=\"true\"\r\n data-backdrop=\"static\" data-keyboard=\"false\">\r\n <div class=\"modal-dialog\">\r\n <div class=\"modal-content\">\r\n <form class=\"form-horizontal\" #frg=\"ngForm\" name=\"appFormRowGrp\">\r\n <div class=\"modal-header\">\r\n <button type=\"button\" class=\"close\" data-dismiss=\"modal\" (click)=\"closeNull();\" #closebtn>\r\n <span aria-hidden=\"true\">&times;</span>\r\n <span class=\"sr-only\">Close</span>\r\n </button>\r\n <h4 class=\"modal-title\" id=\"rowGrpHead\">Row Group</h4>\r\n </div>\r\n <div class=\"modal-body\">\r\n <div class=\"row\">\r\n <div class=\"col-md-12\" style=\"padding-bottom: 10px;\">\r\n <label class=\"col-md-2 control-label\">Attributes</label>\r\n <label class=\"col-md-5 control-label\" style=\"padding-right: 90px;\">Row Display</label>\r\n <label class=\"col-md-5 control-label\" style=\"padding-right: 76px;\">Row Group </label>\r\n </div>\r\n <div class=\"col-md-12\">\r\n <div class=\"form-group\" *ngFor=\"let att of display_attr;\">\r\n <label class=\"col-md-2 control-label\">{{att.attr}}</label>\r\n <div class=\"col-md-5\">\r\n <div class=\"input-group w-100\">\r\n <select class=\"form-control\" name=\"dr_{{att.attr}}\" [disabled]=\"disableselc\"\r\n id=\"row_{{att.attr}}\" value=\"\" (change)=\"onChangeDispRow($event)\">\r\n <!-- [value]=\"att.display_row\" -->\r\n <option *ngFor=\"let dr of display_row;\" value=\"{{dr.idn}}\">{{dr.print}}</option>\r\n </select>\r\n </div>\r\n </div>\r\n <div class=\"col-md-5\">\r\n <div class=\"input-group w-100\">\r\n <select class=\"form-control\" name=\"grp_{{att.attr}}\" [disabled]=\"disableselc\"\r\n id=\"grp_{{att.attr}}\" [value]=\"att.display_group\" (change)=\"onChangeDispGrp($event)\">\r\n <option *ngFor=\"let dg of display_group;\" value=\"{{dg.idn}}\">{{dg.print}}</option>\r\n </select>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"modal-footer\">\r\n <button type=\"reset\" class=\"btn btn-danger\" data-dismiss=\"modal\">close</button>\r\n </div>\r\n </form>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n\r\n\r\n\r\n <div class=\"modal\" id=\"productDetailMapMD\" role=\"dialog\" aria-labelledby=\"smallModalHead\" aria-hidden=\"true\"\r\n data-backdrop=\"static\" data-keyboard=\"false\">\r\n <div class=\"modal-dialog modal-sm mwidth\">\r\n <div class=\"modal-content\">\r\n <div class=\"modal-header\">\r\n <button type=\"button\" class=\"close\" data-dismiss=\"modal\" (click)=\"closeNull();\" #productMapclsbtn>\r\n <span aria-hidden=\"true\">&times;</span>\r\n <span class=\"sr-only\" productDetailMapclsbtn>Close</span>\r\n </button>\r\n <h4 class=\"modal-title\" id=\"smallModalHead\">Product Mapping of&nbsp;{{producDetailModelTitle}}</h4>\r\n </div>\r\n <div class=\"modal-body\">\r\n <div class=\"table-responsive\">\r\n <table class=\"table table-bordered table-hover table-hover-cells\">\r\n <thead>\r\n <tr>\r\n <th>\r\n Name\r\n </th>\r\n <th>\r\n Value\r\n </th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <ng-container *ngFor=\"let key of attrDtl?.prpList\">\r\n <tr>\r\n <td>\r\n {{key.print}}\r\n </td>\r\n <td>\r\n <input type=\"text\" class=\"form-control\" [(ngModel)]=\"attrMappingDtl[key?.val]\" />\r\n </td>\r\n </tr>\r\n </ng-container>\r\n </tbody>\r\n </table>\r\n </div>\r\n <div class=\"modal-footer\">\r\n <button type=\"button\" class=\"btn btn-default\" data-dismiss=\"modal\" #productDetailMapclsbtn>Close</button>\r\n <button type=\"button\" class=\"btn btn-success\" data-dismiss=\"modal\"\r\n (click)=\"saveProductDetailMapping();\">Save</button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"modal\" id=\"docdeletemodal\" role=\"dialog\" aria-labelledby=\"smallModalHead\" aria-hidden=\"true\"\r\n data-backdrop=\"static\" data-keyboard=\"false\">\r\n <div class=\"modal-dialog modal-sm\">\r\n <div class=\"modal-content\">\r\n <div class=\"modal-header\">\r\n <button type=\"button\" class=\"close\" data-dismiss=\"modal\" (click)=\"closeNull();\" #deleteclsbtn>\r\n <span aria-hidden=\"true\">&times;</span>\r\n <span class=\"sr-only\">Close</span>\r\n </button>\r\n <h4 class=\"modal-title\" id=\"smallModalHead\">Warning</h4>\r\n </div>\r\n <div class=\"modal-body\">\r\n Are you sure want to delete?\r\n </div>\r\n <div class=\"modal-footer\">\r\n <button type=\"button\" class=\"btn btn-default\" data-dismiss=\"modal\">Close</button>\r\n <button type=\"button\" class=\"btn btn-danger\" data-dismiss=\"modal\" (click)=\"deleteDoc();\">Delete</button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"modal\" id=\"bnkdeletemodal\" role=\"dialog\" aria-labelledby=\"smallModalHead\" aria-hidden=\"true\"\r\n data-backdrop=\"static\" data-keyboard=\"false\">\r\n <div class=\"modal-dialog modal-sm\">\r\n <div class=\"modal-content\">\r\n <div class=\"modal-header\">\r\n <button type=\"button\" class=\"close\" data-dismiss=\"modal\" (click)=\"closeNull();\" #deleteclsbtn>\r\n <span aria-hidden=\"true\">&times;</span>\r\n <span class=\"sr-only\">Close</span>\r\n </button>\r\n <h4 class=\"modal-title\" id=\"smallModalHead\">Warning</h4>\r\n </div>\r\n <div class=\"modal-body\">\r\n Are you sure want to delete?\r\n </div>\r\n <div class=\"modal-footer\">\r\n <button type=\"button\" class=\"btn btn-default\" data-dismiss=\"modal\">Close</button>\r\n <button type=\"button\" class=\"btn btn-danger\" data-dismiss=\"modal\"\r\n (click)=\"DeleteLedgerBank()\">Delete</button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <button id=\"bnkdeletemodalbtn\" [hidden]=\"true\" data-toggle=\"modal\" data-target=\"#bnkdeletemodal\"></button>\r\n\r\n <button id=\"docdeletebtn\" [hidden]=\"true\" data-toggle=\"modal\" data-target=\"#docdeletemodal\"></button>\r\n <button id=\"deletebtn\" [hidden]=\"true\" data-toggle=\"modal\" data-target=\"#deletemodal\"></button>\r\n <button id=\"deleteTerms\" [hidden]=\"true\" data-toggle=\"modal\" data-target=\"#deleteTermsmodal\"></button>\r\n\r\n <button id=\"datamdbtn\" [hidden]=\"true\" data-toggle=\"modal\" data-target=\"#datamodal\"></button>\r\n <button id=\"clsMd\" [hidden]=\"true\" data-dismiss=\"modal\" data-target=\"#datamodal\"></button>\r\n <button id=\"sysmd\" [hidden]=\"true\" data-dismiss=\"modal\" data-target=\"#modal_sys\"></button>\r\n <button id=\"btnproductDetailMapMD\" [hidden]=\"true\" data-toggle=\"modal\" data-target=\"#productDetailMapMD\"></button>\r\n\r\n <button id=\"rowGrpbtn\" [hidden]=\"true\" data-dismiss=\"modal\" data-toggle=\"modal\" data-target=\"#rowGrpmodal\"></button>\r\n </div>", styles: [".btn-default.btn-on-1.active,.btn-default.btn-off-1.active{background-color:#3b5998;color:#fff}.btn.btn-xs,.btn-group-xs>.btn{font-size:12px;padding:5px 15px}.tbactive{background:#3B5998;color:#fff}input[type=radio]{display:none}.content-frame-body{padding:0 10px 10px!important}.content-frame-left{background:transparent!important;width:250px!important}.f-12{font-size:12px}.mt0{margin-bottom:0!important}.headingCls{padding:10px;background:#f0efef;font-size:14px;font-weight:400;margin-bottom:20px}.onHover{position:absolute;top:50%;transform:translate(-50%,-50%);left:50%;width:100%;text-align:center}.sortable-item{display:inline-block!important}.mds{border:1px solid #c9c9c9;height:265px;overflow:auto;margin-top:15px;width:175px;position:relative;right:-10px}.mds ul{padding-left:10px;list-style:none}.mds ul li{margin:5px 0;-webkit-user-select:all;user-select:all}.page-container .page-content .content-frame .content-frame-left{padding:0 10px!important}.mwidth{width:500px}.thcenter,.tdcenter{text-align:center}.Inactive{background-color:#ebebe0}btn-file>input{position:absolute;top:0;right:0;width:100%;height:100%;margin:0;font-size:23px;cursor:pointer;filter:alpha(opacity=0);opacity:0;direction:ltr;background-color:#32c5d2;border-color:#32c5d2}.btn.green{color:#fff;background:#3b5998!important;border-color:#3b5998!important}.btn.red{color:#fff;background-color:#e7505a;border-color:#e7505a}\n"], dependencies: [{ kind: "directive", type: i8.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i8.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i8.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i8.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: i9.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i9.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i9.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i9.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i9.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i9.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i9.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i9.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i9.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i9.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i9.NgForm, selector: "form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "component", type: i10.SelectComponent, selector: "ng-select", inputs: ["options", "allowClear", "disabled", "multiple", "noFilter", "notFoundMsg", "placeholder", "filterPlaceholder", "label", "highlightColor", "highlightTextColor"], outputs: ["opened", "closed", "selected", "deselected", "focus", "blur", "noOptionsFound", "filterInputChanged"] }, { kind: "component", type: i11.TagInputComponent, selector: "tag-input", inputs: ["separatorKeys", "separatorKeyCodes", "placeholder", "secondaryPlaceholder", "maxItems", "validators", "asyncValidators", "onlyFromAutocomplete", "errorMessages", "theme", "onTextChangeDebounce", "inputId", "inputClass", "clearOnBlur", "hideForm", "addOnBlur", "addOnPaste", "pasteSplitPattern", "blinkIfDupe", "removable", "editable", "allowDupes", "modelAsStrings", "trimTags", "inputText", "ripple", "tabindex", "disable", "dragZone", "onRemoving", "onAdding", "animationDuration"], outputs: ["onAdd", "onRemove", "onSelect", "onFocus", "onBlur", "onTextChange", "onPaste", "onValidationError", "onTagEdited", "inputTextChange"] }, { kind: "component", type: i12.PaginationControlsComponent, selector: "pagination-controls", inputs: ["id", "maxSize", "directionLinks", "autoHide", "responsive", "previousLabel", "nextLabel", "screenReaderPaginationLabel", "screenReaderPageLabel", "screenReaderCurrentLabel"], outputs: ["pageChange", "pageBoundsCorrection"] }, { kind: "component", type: i13.SortableComponent, selector: "bs-sortable", inputs: ["wrapperClass", "wrapperStyle", "itemClass", "itemStyle", "itemActiveClass", "itemActiveStyle", "placeholderClass", "placeholderStyle", "placeholderItem", "fieldName", "itemTemplate"], outputs: ["onChange"], exportAs: ["bs-sortable"] }, { kind: "directive", type: i14.AppNoDblClickDirective, selector: "[appAppNoDblClick]" }, { kind: "pipe", type: i8.DatePipe, name: "date" }, { kind: "pipe", type: i15.OrderPipe, name: "orderBy" }, { kind: "pipe", type: i12.PaginatePipe, name: "paginate" }, { kind: "pipe", type: i16.SearchPipePipe, name: "searchPipe" }, { kind: "pipe", type: i17.OrderByPipePipe, name: "orderByPipe" }] });
2461
2461
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: SubformComponent, decorators: [{
2462
2462
  type: Component,
2463
- args: [{ selector: "app-subform", template: "<div class=\"mt\">\r\n <div class=\"panel panel-default\">\r\n <div class=\"panel-heading\">\r\n <h3 class=\"panel-title\">\r\n <span class=\"fa fa-chevron-left cp\" (click)=\"pageBck();\"> Back</span>&nbsp;&nbsp;&nbsp; {{pageInfo?.title}}\r\n <span *ngIf=\"contactName==''\" class=\"f-12\">({{cDt | date:'medium'}})</span>\r\n <span *ngIf=\"contactName!=''\" class=\"f-12\">&nbsp;for <b> {{contactName}}</b> </span>\r\n </h3>\r\n <button type=\"button\" id=\"addBtn\" class=\"btn btn-info pull-right\" *ngIf=\"addNew?.is_compulsory == 1\"\r\n appAppNoDblClick (click)=\"userAction('', 'add', '', '');f.reset();\">{{addNew?.form_field_title}}</button>\r\n </div>\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"col-md-2\" *ngIf=\"navigation.length > 0\">\r\n <div class=\"panel panel-default\">\r\n <div class=\"panel-body\">\r\n <div class=\"list-group border-bottom\">\r\n <a href=\"javascript:void(0)\" class=\"list-group-item\" [ngClass]=\"{'active' :i == cLink}\"\r\n *ngFor=\"let nav of navigation;let i=index\" (click)=\"navigationFun(nav,i);\">{{nav.form_field_title}}</a>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div [ngClass]=\"navigation.length > 0 ? 'col-md-10' : 'col-md-12'\">\r\n <div class=\"panel panel-default\">\r\n <!-- primery form -->\r\n <div class=\"panel-body\" style=\"overflow-x: scroll\"\r\n *ngIf=\"navform != 'addtionalDtlMaster' && navform != 'documentUploadMaster' && navform != 'menuAccessMaster' && navform != 'termUserAssignForm' && navform != 'setPasswordForm' && navform!='ledgerBankDetails' && navform!='ledgerAccAdditinalDetails' && navform!='ledgerAddtionalDtlMaster' && navform!='accDeleteRulesForm' && navform!='accJournalAttrForm' && navform!='accLoanAttrForm' && navform!='accJournalSettingForm' && navform!='webMenuAccessMaster' \">\r\n <div class=\"row\">\r\n <div class=\"col-sm-6\">\r\n <form class=\"form-inline pull-left\">\r\n <div class=\"form-group\">\r\n <label for=\"ddlPagesize\">Page Size &nbsp; &nbsp;</label>\r\n <select class=\"form-control\" name=\"pageSize\" [(ngModel)]=\"pageSize\"\r\n (change)=\"onPageSizeChange(pageSize)\">\r\n <option value=\"All\">All</option>\r\n <option value=\"10\">10</option>\r\n <option value=\"25\">25</option>\r\n <option value=\"50\">50</option>\r\n <option value=\"100\">100</option>\r\n </select>\r\n </div>\r\n </form>\r\n <button class=\"btn btn-default\" style=\"padding: 4px 15px 4px 20px;margin-left: 10px;\"\r\n data-toggle=\"tooltip\" data-placement=\"right\" title=\"Refresh\" (click)=\"ngOnInit();\">\r\n <span class=\"fa fa-refresh\"></span>\r\n </button>\r\n </div>\r\n <div class=\"col-sm-6\">\r\n <form class=\"form-inline pull-right\">\r\n <div class=\"form-group\">\r\n <label for=\"exampleInputName2\">Search &nbsp;&nbsp;</label>\r\n <input type=\"text\" class=\"form-control\" id=\"exampleInputName2\" name=\"schtxt\" [(ngModel)]=\"searchF\" />\r\n </div>\r\n </form>\r\n </div>\r\n </div>\r\n <div class=\"table-responsive\" [ngClass]=\"{'table-responsive' :navigation.length > 0}\">\r\n <table class=\"table table-bordered table-hover table-hover-cells\">\r\n <thead>\r\n <tr>\r\n <th>SR No</th>\r\n <th>Action</th>\r\n <th *ngFor=\"let tbh of tblH; let i = index\" (click)=\"setOrder(tbh,i)\">{{tblDesc[tbh]}}\r\n <span [hidden]=\"reverse\" *ngIf=\"showarr === i\">\r\n <i class=\"fa fa-arrow-down\" aria-hidden=\"true\"></i>\r\n </span>\r\n <span [hidden]=\"!reverse\" *ngIf=\"showarr === i\">\r\n <i class=\"fa fa-arrow-up\" aria-hidden=\"true\"></i>\r\n </span>\r\n </th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <ng-container\r\n *ngFor=\"let data of datalist | searchPipe:searchF | orderBy: order:reverse | paginate: { itemsPerPage: pageSize, currentPage: p }; let i = index\">\r\n <tr [ngClass]=\"{'Inactive':data.stt=='InActive'}\">\r\n <td>{{i + 1}}</td>\r\n <td>\r\n <div class=\"btn-group\">\r\n <a href=\"#\" data-toggle=\"dropdown\" class=\"btn btn-info dropdown-toggle\">Action\r\n <span class=\"caret\"></span>\r\n </a>\r\n <ul class=\"dropdown-menu\" role=\"menu\">\r\n <li *ngFor=\"let action of actions\">\r\n <a href=\"javascript:void(0)\" (click)=\"userAction(data,action.form_field,action, i);\">\r\n {{action.form_field_title}}\r\n </a>\r\n </li>\r\n </ul>\r\n </div>\r\n </td>\r\n <td *ngFor=\"let tbh of tblH; let i=index\" on-mouseover=\"hoveredI=i\" on-mouseleave=\"hoveredI=-1\"\r\n style=\"max-width: 300px; word-break: break-word;\">{{data[tbh]}}\r\n <div class=\"onHoverDiv\"\r\n *ngIf=\"i==hoveredI && page_typ!='jsonForm' && navform!='buyertermsMaster'\">\r\n <ul>\r\n <li (click)=\"editCell(data,tbh);\">\r\n <span class=\"fa fa-pencil\"></span>\r\n </li>\r\n </ul>\r\n </div>\r\n </td>\r\n </tr>\r\n </ng-container>\r\n </tbody>\r\n </table>\r\n </div>\r\n <pagination-controls (pageChange)=\"p = $event\" class=\"pull-right\"></pagination-controls>\r\n </div>\r\n <!-- custom form -->\r\n <div class=\"panel-body\"\r\n *ngIf=\"navform == 'addtionalDtlMaster' || navform == 'ledgerAddtionalDtlMaster' || navform == 'ledgerAccAdditinalDetails' || navform=='accDeleteRulesForm' || navform=='accJournalAttrForm' || navform=='accLoanAttrForm' || navform=='accJournalSettingForm'\">\r\n <div class=\"row\">\r\n <div class=\"col-md-12\" *ngFor=\"let ugld of uiGrpList\">\r\n <p class=\"headingCls\">{{uiGrpListDtl[ugld]}}</p>\r\n <div class=\"col-md-6\" *ngFor=\"let formF of uiGrpListDtl[ugld+'#T'];let i = index\">\r\n <div class=\"form-group\" style=\"margin-bottom: 45px !important;\">\r\n <label class=\"col-md-4 control-label\">{{uiGrpListDtl[ugld+'#D'][i]}}</label>\r\n <div class=\"col-md-8\" *ngIf=\"formF == 'n'\">\r\n <div class=\"input-group w-100\">\r\n <input type=\"number\" class=\"form-control\" name=\"{{uiGrpListDtl[ugld+'#V'][i]}}\"\r\n [value]=\"dataDtl[uiGrpListDtl[ugld+'#V'][i]]\" [(ngModel)]=\"dataDtl[uiGrpListDtl[ugld+'#V'][i]]\"\r\n (change)=\"saveFun(uiGrpListDtl[ugld+'#V'][i],dataDtl[uiGrpListDtl[ugld+'#V'][i]],formF)\"\r\n [disabled]=\"uiGrpListDtl[ugld+'#E'][i] == 0 ? false : true\">\r\n </div>\r\n </div>\r\n <div class=\"col-md-8\" *ngIf=\"formF == 't'\">\r\n <div class=\"input-group w-100\">\r\n <input type=\"text\" class=\"form-control\" name=\"{{uiGrpListDtl[ugld+'#V'][i]}}\"\r\n [value]=\"dataDtl[uiGrpListDtl[ugld+'#V'][i]]\" [(ngModel)]=\"dataDtl[uiGrpListDtl[ugld+'#V'][i]]\"\r\n (change)=\"saveFun(uiGrpListDtl[ugld+'#V'][i],dataDtl[uiGrpListDtl[ugld+'#V'][i]],formF)\"\r\n [disabled]=\"uiGrpListDtl[ugld+'#E'][i] == 0 ? false : true\">\r\n </div>\r\n </div>\r\n\r\n\r\n\r\n <!-- added for testing only -->\r\n <div class=\"col-md-8\" *ngIf=\"formF == 'c'\">\r\n <div class=\"input-group w-100\">\r\n <select type=\"text\" class=\"form-control\" name=\"{{uiGrpListDtl[ugld+'#V'][i]}}\"\r\n [(ngModel)]=\"dataDtl[uiGrpListDtl[ugld+'#V'][i]]\"\r\n (change)=\"saveFun(uiGrpListDtl[ugld+'#V'][i],dataDtl[uiGrpListDtl[ugld+'#V'][i]],formF)\">\r\n <option *ngFor=\"let key of attrCListDtl[uiGrpListDtl[ugld+'#V'][i] +'#D'];let j=index\"\r\n value=\"{{attrCListDtl[uiGrpListDtl[ugld+'#V'][i] +'#V'][j]}}\">{{key}}</option>\r\n </select>\r\n <!-- <p *ngFor=\"let a of attrCListDtl[uiGrpListDtl[ugld+'#V'][i] +'#V']\">{{a |json}}:\r\n {{attrCListDtl[uiGrpListDtl[ugld+'#V'][i] +'#V'] |json}}\r\n </p> -->\r\n <!-- <input type=\"text\" class=\"form-control\" name=\"{{uiGrpListDtl[ugld+'#V'][i]}}\" [value]=\"dataDtl[uiGrpListDtl[ugld+'#V'][i]]\"\r\n [(ngModel)]=\"dataDtl[uiGrpListDtl[ugld+'#V'][i]]\" (blur)=\"saveFun(uiGrpListDtl[ugld+'#V'][i],dataDtl[uiGrpListDtl[ugld+'#V'][i]])\"\r\n [disabled]=\"uiGrpListDtl[ugld+'#E'][i] == 0 ? false : true\"> -->\r\n </div>\r\n </div>\r\n <div class=\"col-md-8\" *ngIf=\"formF == 'q'\">\r\n <div class=\"input-group w-100\">\r\n <select type=\"text\" class=\"form-control\" name=\"{{uiGrpListDtl[ugld+'#V'][i]}}\"\r\n [(ngModel)]=\"dataDtl[uiGrpListDtl[ugld+'#V'][i]]\"\r\n (change)=\"saveFun(uiGrpListDtl[ugld+'#V'][i],dataDtl[uiGrpListDtl[ugld+'#V'][i]],formF)\">\r\n <option *ngFor=\"let key of attrQListDtl[uiGrpListDtl[ugld+'#V'][i] +'#D'];let j=index\"\r\n value=\"{{attrQListDtl[uiGrpListDtl[ugld+'#V'][i] +'#D'][j]}}\">{{key}}</option>\r\n </select>\r\n <!-- <p *ngFor=\"let a of attrCListDtl[uiGrpListDtl[ugld+'#V'][i] +'#V']\">{{a |json}}:\r\n {{attrCListDtl[uiGrpListDtl[ugld+'#V'][i] +'#V'] |json}}\r\n </p> -->\r\n <!-- <input type=\"text\" class=\"form-control\" name=\"{{uiGrpListDtl[ugld+'#V'][i]}}\" [value]=\"dataDtl[uiGrpListDtl[ugld+'#V'][i]]\"\r\n [(ngModel)]=\"dataDtl[uiGrpListDtl[ugld+'#V'][i]]\" (blur)=\"saveFun(uiGrpListDtl[ugld+'#V'][i],dataDtl[uiGrpListDtl[ugld+'#V'][i]])\"\r\n [disabled]=\"uiGrpListDtl[ugld+'#E'][i] == 0 ? false : true\"> -->\r\n </div>\r\n </div>\r\n\r\n <div class=\"col-md-8\" *ngIf=\"formF == 'sa'\">\r\n <div class=\"input-group w-100\">\r\n <ng-select style=\"z-index: 5;\" [options]=\"sqlArray[uiGrpListDtl[ugld+'#V'][i]]\" #sfi=\"ngModel\"\r\n [(ngModel)]=\"dataDtl[uiGrpListDtl[ugld+'#V'][i]]\" name=\"{{uiGrpListDtl[ugld+'#V'][i]}}\"\r\n (selected)=\"saveFun(uiGrpListDtl[ugld+'#V'][i],dataDtl[uiGrpListDtl[ugld+'#V'][i]],formF)\"\r\n (filterInputChanged)=\"loadJnlSuggdata($event,uiGrpListDtl[ugld+'#V'][i],uiGrpListDtl[ugld+'#M'][i])\">\r\n </ng-select>\r\n\r\n </div>\r\n </div>\r\n\r\n <div class=\"col-md-8\" *ngIf=\"formF == 'd'\">\r\n <div class=\"input-group w-100\">\r\n <input type=\"date\" class=\"form-control\" name=\"{{uiGrpListDtl[ugld+'#V'][i]}}\"\r\n (change)=\"saveFun(uiGrpListDtl[ugld+'#V'][i],dataDtl[uiGrpListDtl[ugld+'#V'][i]],formF)\"\r\n [value]=\"dataDtl[uiGrpListDtl[ugld+'#V'][i]]\" [(ngModel)]=\"dataDtl[uiGrpListDtl[ugld+'#V'][i]]\"\r\n [disabled]=\"uiGrpListDtl[ugld+'#E'][i] == 0 ? false : true\">\r\n </div>\r\n </div>\r\n <div class=\"col-md-8\" *ngIf=\"formF == 'e'\">\r\n <div class=\"input-group w-100\">\r\n <input type=\"email\" class=\"form-control\" name=\"{{uiGrpListDtl[ugld+'#V'][i]}}\"\r\n (change)=\"saveFun(uiGrpListDtl[ugld+'#V'][i],dataDtl[uiGrpListDtl[ugld+'#V'][i]],formF)\"\r\n [value]=\"dataDtl[uiGrpListDtl[ugld+'#V'][i]]\" [(ngModel)]=\"dataDtl[uiGrpListDtl[ugld+'#V'][i]]\"\r\n (blur)=\"saveFun(uiGrpListDtl[ugld+'#V'][i],dataDtl[uiGrpListDtl[ugld+'#V'][i]],formF)\"\r\n [disabled]=\"uiGrpListDtl[ugld+'#E'][i] == 0 ? false : true\">\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"panel-body form\"\r\n *ngIf=\"navform == 'documentUploadMaster' && navform != 'menuAccessMaster' && navform != 'termUserAssignForm' && navform != 'setPasswordForm'\">\r\n <div class=\"row\">\r\n <form action=\"#\" class=\"form-horizontal form-bordered\">\r\n <div class=\"form-body\">\r\n\r\n <div class=\"col-md-4\">\r\n <select type=\"text\" class=\"form-control\" name=\"doctype\" [(ngModel)]=\"doctype\">\r\n <option *ngFor=\"let docs of documentUploadList\" value=\"{{docs}}\">{{documentUploadDtl[docs]}}\r\n </option>\r\n </select>\r\n </div>\r\n <div class=\"col-md-4\">\r\n <div class=\"fileinput fileinput-new\" data-provides=\"fileinput\">\r\n <span class=\"btn green btn-file\">\r\n <span> Upload </span>\r\n\r\n <input type=\"file\" name=\"...\" (change)=\"uploadDocs($event)\"> </span>\r\n <span class=\"fileinput-filename\"> </span> &nbsp;\r\n <a href=\"javascript:;\" class=\"close fileinput-exists\" data-dismiss=\"fileinput\"> </a>\r\n </div>\r\n <a *ngIf=\"routherDoc!=''\" style=\"cursor:pointer \" (click)=\"rediecttokyc()\"><b>\r\n << back</b></a>\r\n </div>\r\n </div>\r\n </form>\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <p class=\"headingCls\">Existing Documents</p>\r\n </div>\r\n <div class=\"col-md-12\">\r\n <table class=\"subDisplayTable\">\r\n <ng-container *ngFor=\"let docs of documentUploadList;let i = index \">\r\n <tr *ngIf=\"dataDtl[docs]!=undefined\">\r\n <td style=\"width: 10%\">{{documentUploadDtl[docs]}}</td>\r\n <td style=\"width: 90%;text-align: left\">\r\n <ng-container *ngFor=\"let docdtl of dataDtl[docs]\">\r\n <div class=\"fileinput fileinput-new\" *ngIf=\"doceditAction\" data-provides=\"fileinput\">\r\n <span class=\"btn-file\">\r\n <i class=\"fa fa-edit\" tooltip=\"Edit Document\" style=\"font-size:20px\"> </i>\r\n\r\n <input type=\"file\" name=\"...\" (change)=\"EditUploadDocs(docdtl,$event)\"> </span>\r\n <span class=\"fileinput-filename\"> </span> &nbsp;\r\n <a href=\"javascript:;\" class=\"close fileinput-exists\" data-dismiss=\"fileinput\"> </a>\r\n </div>\r\n\r\n &nbsp;&nbsp;\r\n <a><i class=\"fa fa-trash-o\" *ngIf=\"docdeleteAction\" (click)=\"ConfirmdeleteDoc(docdtl)\"\r\n style=\"font-size:20px;cursor: pointer\"> </i> </a>&nbsp;&nbsp;&nbsp;&nbsp;\r\n <a (click)=\"opendocs(docdtl)\"> <i class=\"fa fa-file-o\" style=\"font-size:20px\"> </i> </a>\r\n &nbsp;&nbsp;|&nbsp;&nbsp;\r\n </ng-container>\r\n\r\n </td>\r\n </tr>\r\n </ng-container>\r\n </table>\r\n </div>\r\n\r\n </div>\r\n\r\n\r\n\r\n\r\n </div>\r\n <div class=\"panel-body\"\r\n *ngIf=\"navform != 'documentUploadMaster' && navform == 'menuAccessMaster' && navform != 'termUserAssignForm' && navform != 'setPasswordForm' \">\r\n <div class=\"row\">\r\n <div class=\"col-md-2\">\r\n <div class=\"form-group\">\r\n <label class=\"control-label\" style=\"padding-left: 2px;\">Application</label>\r\n <select class=\"form-control\" [(ngModel)]=\"application\" name=\"User\" (change)=\"loadUsrMdl(application)\">\r\n <option *ngFor=\"let app of applicationList\" value=\"{{app.k}}\">{{app.v}}</option>\r\n </select>\r\n </div>\r\n </div>\r\n <div class=\"col-md-2\" *ngIf=\"userDtls.length>0\">\r\n <div class=\"form-group\">\r\n <label class=\"control-label\" style=\"padding-left: 2px;\">User</label>\r\n <select class=\"form-control\" [(ngModel)]=\"User\" name=\"User\">\r\n <option *ngFor=\"let lov of userDtls\" value=\"{{lov.user_idn}}\">{{lov.username}}</option>\r\n </select>\r\n </div>\r\n </div>\r\n <div class=\"col-md-2\" *ngIf=\"moduleDtls.length>0 && userDtls.length >0 \">\r\n <div class=\"form-group\">\r\n <label class=\"control-label\" style=\"padding-left: 2px;\">Module</label>\r\n <select class=\"form-control\" [(ngModel)]=\"Module\" name=\"Module\">\r\n <option *ngFor=\"let lov of moduleDtls\" value=\"{{lov.module_idn}}\">{{lov.print}}</option>\r\n </select>\r\n </div>\r\n </div>\r\n <div class=\"col-md-2 \">\r\n <button type=\"button\" id=\"addBtn\" class=\"btn btn-info\" style=\"margin-top: 23px;\"\r\n (click)=\"getUserRights(User,Module)\">Assign\r\n Rights\r\n </button>\r\n </div>\r\n </div>\r\n <div style=\"padding: 0 10px;\" *ngIf=\"menuList.length>0\">\r\n <div style=\"border:1px solid #e5e5e5;margin-top: 30px\">\r\n <div class=\"row\">\r\n <div class=\"panel panel-default\" style=\"margin-bottom: 25px;\">\r\n <div class=\"panel-heading\" style=\"padding: 0px;\">\r\n <h3 class=\"panel-title\" style=\"padding: 8px; font-size: 14px;\">Users</h3>\r\n <div class=\"col-md-2 chkAll\" style=\"margin: 0px;\">\r\n <div class=\"form-group\" style=\"padding: 10px;\">\r\n <div class=\"col-md-3\">\r\n <label class=\"switch\">\r\n <input type=\"checkbox\" class=\"switch\" name=\"chkAll\" id=\"chkAll\"\r\n (change)=\"onChangeAll($event,User,Module)\"\r\n [checked]=\"(false !== (userRightsMenuList.length == (menuList.length + totMenu)) ? 'checked' : '')\">\r\n <span></span>\r\n </label>\r\n </div>\r\n <label class=\"col-md-4 control-label text-left\" style=\"padding-top: 8px;\r\n padding-left: 40px;\">All\r\n </label>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"row\">\r\n <form class=\"form-horizontal\">\r\n <div class=\"col-md-12\" *ngFor=\"let mdl of menuList;let i=index\">\r\n <div class=\"form-group\">\r\n <div class=\"col-md-1\">\r\n <label class=\"switch\">\r\n <input type=\"checkbox\" class=\"switch\" name=\"chkMenu\" id=\"chkMenu{{mdl.menu_idn}}\"\r\n (change)=\"onChangeMenu($event,mdl.menu_idn,User,Module)\"\r\n [checked]=\"(false !== userRightsMenuList.includes(mdl?.menu_idn) ? 'checked' : '')\">\r\n <span></span>\r\n </label>\r\n </div>\r\n <label class=\"col-md-2 control-label text-left\" style=\"padding-top: 3px;\">{{mdl.menu}}</label>\r\n </div>\r\n <div class=\"col-md-12\" *ngIf=\"mdl.SubMenu.length > 0\">\r\n <div class=\"form-group\" *ngFor=\"let smdl of mdl.SubMenu\">\r\n <div class=\"col-md-1\" style=\"margin-left:10px;padding-left: 60px;\">\r\n <label class=\"switch\">\r\n <input type=\"checkbox\" class=\"switch\" name=\"chkSubMenu\" id=\"chkSubMenu{{smdl.menu_idn}}\"\r\n (change)=\"onChangeSubMenu($event,smdl.menu_idn,mdl.menu_idn,User,Module)\"\r\n [checked]=\"( false !== userRightsMenuList.includes(smdl?.menu_idn) ? 'checked' : '')\">\r\n <span></span>\r\n </label>\r\n </div>\r\n <label class=\"col-md-4 control-label text-left\"\r\n style=\"padding-top: 8px; font-weight: 100;padding-left: 40px;\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{{smdl.hdr}}</label>\r\n </div>\r\n </div>\r\n </div>\r\n </form>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"panel-body\" *ngIf=\"navform == 'webMenuAccessMaster'\">\r\n <div class=\"row\">\r\n <div class=\"col-md-2\">\r\n <div class=\"form-group\">\r\n <label class=\"control-label\" style=\"padding-left: 2px;\">Application</label>\r\n <select class=\"form-control\" [(ngModel)]=\"application\" name=\"User\" (change)=\"loadUsrMdl(application)\">\r\n <option *ngFor=\"let app of applicationList\" value=\"{{app.k}}\">{{app.v}}</option>\r\n </select>\r\n </div>\r\n </div>\r\n <div class=\"col-md-2\" *ngIf=\"userDtls.length>0\">\r\n <div class=\"form-group\">\r\n <label class=\"control-label\" style=\"padding-left: 2px;\">User</label>\r\n <select class=\"form-control\" [(ngModel)]=\"User\" name=\"User\">\r\n <option *ngFor=\"let lov of userDtls\" value=\"{{lov.user_idn}}\">{{lov.username}}</option>\r\n </select>\r\n </div>\r\n </div>\r\n <div class=\"col-md-2\" *ngIf=\"moduleDtls.length>0 && userDtls.length >0 \">\r\n <div class=\"form-group\">\r\n <label class=\"control-label\" style=\"padding-left: 2px;\">Module</label>\r\n <select class=\"form-control\" [(ngModel)]=\"Module\" name=\"Module\">\r\n <option *ngFor=\"let lov of moduleDtls\" value=\"{{lov.module_idn}}\">{{lov.print}}</option>\r\n </select>\r\n </div>\r\n </div>\r\n <div class=\"col-md-2 \">\r\n <button type=\"button\" id=\"addBtn\" class=\"btn btn-info\" style=\"margin-top: 23px;\"\r\n (click)=\"getUserRights(User,Module)\">Assign\r\n Rights\r\n </button>\r\n </div>\r\n </div>\r\n <div style=\"padding: 0 10px;\" *ngIf=\"menuList.length>0\">\r\n <div style=\"border:1px solid #e5e5e5;margin-top: 30px\">\r\n <div class=\"row\">\r\n <div class=\"panel panel-default\" style=\"margin-bottom: 25px;\">\r\n <div class=\"panel-heading\" style=\"padding: 0px;\">\r\n <h3 class=\"panel-title\" style=\"padding: 8px; font-size: 14px;\">Users</h3>\r\n <div class=\"col-md-2 chkAll\" style=\"margin: 0px;\">\r\n <div class=\"form-group\" style=\"padding: 10px;\">\r\n <div class=\"col-md-3\">\r\n <label class=\"switch\">\r\n <input type=\"checkbox\" class=\"switch\" name=\"chkAll\" id=\"chkAll\"\r\n (change)=\"onChangeAll($event,User,Module)\"\r\n [checked]=\"(false !== (userRightsMenuList.length == (menuList.length + totMenu)) ? 'checked' : '')\">\r\n <span></span>\r\n </label>\r\n </div>\r\n <label class=\"col-md-4 control-label text-left\" style=\"padding-top: 8px;\r\n padding-left: 40px;\">All\r\n </label>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"row\">\r\n <form class=\"form-horizontal\">\r\n <div class=\"col-md-12\" *ngFor=\"let mdl of menuList;let i=index\">\r\n <div class=\"form-group\">\r\n <div class=\"col-md-1\">\r\n <label class=\"switch\">\r\n <input type=\"checkbox\" class=\"switch\" name=\"chkMenu\" id=\"chkMenu{{mdl.menu_idn}}\"\r\n (change)=\"onChangeWebMenu($event,mdl.menu_idn,User,Module)\"\r\n [checked]=\"(false == userRightsMenuList.includes(mdl?.menu_idn) ? 'checked' : '')\">\r\n <span></span>\r\n </label>\r\n </div>\r\n <label class=\"col-md-2 control-label text-left\" style=\"padding-top: 3px;\">{{mdl.menu}}</label>\r\n </div>\r\n <div class=\"col-md-12\" *ngIf=\"mdl.SubMenu.length > 0\">\r\n <div class=\"form-group\" *ngFor=\"let smdl of mdl.SubMenu\">\r\n <div class=\"col-md-1\" style=\"margin-left:10px;padding-left: 60px;\">\r\n <label class=\"switch\">\r\n <input type=\"checkbox\" class=\"switch\" name=\"chkSubMenu\" id=\"chkSubMenu{{smdl.menu_idn}}\"\r\n (change)=\"onChangeWebSubMenu($event,smdl.menu_idn,mdl.menu_idn,User,Module)\"\r\n [checked]=\"( false == userRightsMenuList.includes(smdl?.menu_idn) ? 'checked' : '')\">\r\n <span></span>\r\n </label>\r\n </div>\r\n <label class=\"col-md-4 control-label text-left\"\r\n style=\"padding-top: 8px; font-weight: 100;padding-left: 40px;\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{{smdl.hdr}}</label>\r\n </div>\r\n </div>\r\n </div>\r\n </form>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"panel-body\" style=\"background: #fff;min-height: 550px;\"\r\n *ngIf=\"navform != 'addtionalDtlMaster' && navform != 'documentUploadMaster' && navform != 'menuAccessMaster' && navform == 'termUserAssignForm' && navform != 'setPasswordForm' \">\r\n <div class=\"row\" style=\"margin-top: 10px;\">\r\n <div class=\"col-md-2\">\r\n <div class=\"form-group\">\r\n <label class=\"control-label\">Terms</label>\r\n </div>\r\n </div>\r\n <div class=\"col-md-1\" style=\"margin-left: 85px;\">\r\n <div class=\"form-group\">\r\n <label class=\"control-label\">Users</label>\r\n </div>\r\n </div>\r\n </div>\r\n <ng-container *ngFor=\"let term of termsList; let i=index;\">\r\n <div class=\"row\">\r\n <div class=\"col-md-3\">\r\n <div class=\"form-group\">\r\n\r\n <label for=\"{{term.buyer_terms_idn}}\" class=\"control-label\"\r\n style=\"padding: 10px;\">{{term.dsc}}</label>\r\n </div>\r\n </div>\r\n <div class=\"col-md-3\" *ngIf=\"term.userIdnList != undefined\">\r\n <div class=\"form-group w-100\">\r\n <div class=\"input-group w-100\">\r\n\r\n <!-- <ng-select [items]=\"applUserList\" [multiple]=\"true\" [addTag]=\"addTag\" (change)=\"onchaneVals(null,term.buyer_terms_idn,term.userIdnList)\"\r\n bindLabel=\"v\" bindValue=\"k\" name=\"{{term ?.buyer_terms_idn}}\" [(ngModel)]=\"term.userIdnList\">\r\n </ng-select> -->\r\n <ng-select placeholder=\"Select user\" [options]=\"term.TermUserList\" [(ngModel)]=\"term.userIdnList\"\r\n (deselected)=\"onchangeUserList($event,term,'delete')\"\r\n (selected)=\"onchangeUserList($event,term,'add')\" name=\"status\" [multiple]=\"true\"\r\n [allowClear]=\"true\">\r\n <ng-template #optionTemplate let-option=\"option\">\r\n <div class=\"famfamfam-flags {{option?.value}}\"></div>\r\n {{option?.label}}\r\n </ng-template>\r\n </ng-select>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"col-md-6\"></div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n\r\n <div class=\"panel-body\" style=\"background: #fff;min-height: 550px;\"\r\n *ngIf=\"navform != 'addtionalDtlMaster' && navform != 'documentUploadMaster' && navform != 'menuAccessMaster' && navform != 'termUserAssignForm' && navform == 'setPasswordForm' \">\r\n <div class=\"row\" style=\"margin-top: 10px;\">\r\n <div class=\"col-md-12\">\r\n <p class=\"headingCls\">Change User Password</p>\r\n </div>\r\n <div class=\"col-md-2\">\r\n <div class=\"form-group\">\r\n <label class=\"control-label\" style=\"padding: 8px;\">Username</label>\r\n </div>\r\n </div>\r\n <div class=\"col-md-1\" style=\"margin-left: 85px;\">\r\n <div class=\"form-group\">\r\n <label class=\"control-label\" style=\"padding: 8px;\">Password</label>\r\n </div>\r\n </div>\r\n </div>\r\n <ng-container *ngFor=\"let user of userDetails; let i=index;\">\r\n <div class=\"row\">\r\n <div class=\"col-md-3\">\r\n <div class=\"form-group\">\r\n <label class=\"control-label\" style=\"padding: 10px;font-weight: normal;\">{{user?.username}}</label>\r\n </div>\r\n </div>\r\n <div class=\"col-md-6\">\r\n <div class=\"form-group w-100\">\r\n <input type=\"text\" class=\"form-control\" [(ngModel)]=\"user.password\" [value]=\"user?.password\" />\r\n <!-- (blur)=\"changePswd($event,user.userIdn)\" -->\r\n </div>\r\n </div>\r\n <div class=\"col-md-3\">\r\n <div class=\"form-group\">\r\n <button type=\"submit\" class=\"btn btn-success\" (click)=\"changePassword(user)\">save</button>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n <!-- <button type=\"submit\" class=\"btn btn-success\" (click)=\"saveAppUserterms(applUsrLst)\">save</button> -->\r\n </div>\r\n <div class=\"panel-body\" style=\"background: #fff;min-height: 550px;\" *ngIf=\"navform=='ledgerBankDetails'\">\r\n <div class=\"row\">\r\n <div class=\"col-md-12\" style=\"margin:5px\">\r\n <div class=\"form-group w-100\">\r\n <label class=\"col-md-2 control-label\">Bank</label>\r\n <div class=\"col-md-4\">\r\n <ng-select placeholder=\"Select Bank\" [options]=\"bankList\" [(ngModel)]=\"bank\" name=\"bank\"\r\n (selected)=\"getBankBranch(bank)\" (filterInputChanged)=\"ledgerBankDetails($event)\"\r\n [allowClear]=\"true\">\r\n </ng-select>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"col-md-12\" style=\"margin:5px\">\r\n <div class=\"form-group w-100\">\r\n <label class=\"col-md-2 control-label\">Branch Details</label>\r\n <div class=\"col-md-4\">\r\n <select name=\"branch\" (change)=\"selectBranch(branch)\" [(ngModel)]=\"branch\" class=\"form-control\">\r\n <option value=\"\">Select branch</option>\r\n <option *ngFor=\"let bnkDtl of bankDtlList\" [ngValue]=\"bnkDtl.nme_idn\">{{bnkDtl.person_nme}}</option>\r\n </select>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"col-md-12\" *ngIf=\"selectBranchAddress!=''\" style=\"margin:5px\">\r\n <div class=\"form-group w-100\">\r\n <label class=\"col-md-2 control-label\">&nbsp;</label>\r\n <div class=\"col-md-4\">\r\n <div class=\"col-md-3\">Address:</div>\r\n <div class=\"col-md-9\">{{selectBranchAddress}}</div>\r\n <div class=\"col-md-3\">IFSC Code:</div>\r\n <div class=\"col-md-9\">{{selectIfsc}}</div>\r\n\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"col-md-12\" style=\"margin:5px\">\r\n <div class=\"form-group w-100\">\r\n <label class=\"col-md-2 control-label\">Account Type</label>\r\n <div class=\"col-md-4\">\r\n <select name=\"accountType\" [(ngModel)]=\"accountType\" class=\"form-control\">\r\n <option value=\"current\">Current</option>\r\n <option value=\"savings\">Savings</option>\r\n </select>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"col-md-12\" style=\"margin:5px\">\r\n <div class=\"form-group w-100\">\r\n <label class=\"col-md-2 control-label\">Account No</label>\r\n <div class=\"col-md-4\">\r\n <textarea class=\"form-control\" cols=\"45\" rows=\"2\" name=\"accountno\" [(ngModel)]=\"accountno\"></textarea>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"col-md-12\" style=\"margin:5px\">\r\n <div class=\"form-group w-100\">\r\n <div class=\"col-md-2\">&nbsp;</div>\r\n <div class=\"col-md-4\">\r\n <button type=\"button\" *ngIf=\"editbank_dtl_idn==''\" (click)=\"SaveLedgerBank()\"\r\n class=\"btn btn-success\">Add</button>\r\n <button type=\"button\" *ngIf=\"editbank_dtl_idn!=''\" (click)=\"SaveLedgerBank()\"\r\n class=\"btn btn-success\">Edit</button>\r\n\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"row\" *ngIf=\"exitBankDtlList.length>0\">\r\n <div class=\"col-md-1 pull-left\">\r\n &nbsp;\r\n </div>\r\n <div class=\"col-md-6 pull-right\">\r\n <form class=\"form-inline pull-right\">\r\n <div class=\"form-group\">\r\n <label for=\"exampleInputName2\">Search &nbsp;&nbsp;</label>\r\n <input type=\"text\" class=\"form-control\" id=\"exampleInputName2\" name=\"searchF\" [(ngModel)]=\"searchF\" />\r\n </div>\r\n </form>\r\n </div>\r\n </div>\r\n <div class=\"row\" *ngIf=\"exitBankDtlList.length>0\">\r\n <div class=\"col-md-12\">\r\n <table class=\"displayTable\">\r\n <thead>\r\n <th>Actions</th>\r\n <th>Account Type</th>\r\n <th>Account No</th>\r\n <th>Name</th>\r\n <th>Branch</th>\r\n <th>Address</th>\r\n <th>IFSC Code</th>\r\n </thead>\r\n <tbody>\r\n <ng-container *ngFor=\"let bankdtl of exitBankDtlList ; let i = index\">\r\n <tr [ngClass]=\"{'even':i%2==0,'odd':i%2==1}\">\r\n <td> <i class=\"fa fa-edit\" (click)=\"loadEditBankDtl(bankdtl)\" tooltip=\"Edit Bank\"\r\n style=\"font-size:15px;cursor: pointer\"> </i>&nbsp;|\r\n <i class=\"fa fa-trash-o\" (click)=\"ConfirmDeleteLedgerBank(bankdtl)\" tooltip=\"Delete Bank\"\r\n style=\"font-size:15px;cursor: pointer\"> </i>\r\n <td>{{bankdtl.accountType}}</td>\r\n <td>{{bankdtl.accountNo}}</td>\r\n <td>{{bankdtl.bankname}}</td>\r\n <td>{{bankdtl.branchname}}</td>\r\n <td>{{bankdtl.address}}</td>\r\n <td>{{bankdtl.ifsc}}</td>\r\n </tr>\r\n </ng-container>\r\n </tbody>\r\n </table>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"modal\" id=\"datamodal\" role=\"dialog\" aria-labelledby=\"defModalHead\" aria-hidden=\"true\"\r\n data-backdrop=\"static\" data-keyboard=\"false\">\r\n <div class=\"modal-dialog\">\r\n <div class=\"modal-content\">\r\n <form class=\"form-horizontal\" #f=\"ngForm\" name=\"appForm\">\r\n <div class=\"modal-header\">\r\n <button type=\"button\" class=\"close\" data-dismiss=\"modal\" (click)=\"closeNull();\" #closebtn>\r\n <span aria-hidden=\"true\">&times;</span>\r\n <span class=\"sr-only\">Close</span>\r\n </button>\r\n <h4 class=\"modal-title\" id=\"defModalHead\">{{btnName}} Record</h4>\r\n </div>\r\n <div class=\"modal-body\">\r\n <div class=\"row\">\r\n <div class=\"col-md-12\" *ngFor=\"let fl of formFilds | orderByPipe: 'srt': 'asc'\">\r\n <div class=\"form-group\"\r\n *ngIf=\"fl?.form_field_typ == 't' && fl?.is_hidden == 0 && fl?.dta_typ =='c' || fl?.dta_typ =='t'\">\r\n <label class=\"col-md-3 control-label\">{{fl?.form_field_title}}\r\n <span class=\"text-danger\" *ngIf=\"fl.is_compulsory == 1\">*</span>\r\n </label>\r\n <div class=\"col-md-9\">\r\n <div class=\"input-group w-100\">\r\n <input type=\"text\" class=\"form-control posrel\" name=\"{{fl?.form_field}}\"\r\n [value]=\"fl?.default_value\" [(ngModel)]=\"fl.default_value\" #textInput=\"ngModel\"\r\n (blur)=\"chkFun(fl,fl.default_value);\" [required]=\"fl?.is_compulsory == '1'\" />\r\n <span class=\"fa fa-{{ico}} eye\" [ngStyle]=\"{'color':ico == 'check' ? 'green' : 'red' }\"\r\n *ngIf=\"usrisExist && onErr == fl.form_field \"></span>\r\n </div>\r\n <div *ngIf=\"textInput.invalid && (textInput.dirty || textInput.touched)\"\r\n class=\"alert alert-danger ca\">\r\n <div *ngIf=\"textInput.errors.required\">\r\n {{fl.form_field_title}} is required.\r\n </div>\r\n\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"form-group\" *ngIf=\"fl?.form_field_typ == 't' && fl?.is_hidden == 0 && fl?.dta_typ =='n'\">\r\n <label class=\"col-md-3 control-label\">{{fl?.form_field_title}}\r\n <span class=\"text-danger\" *ngIf=\"fl.is_compulsory == 1\">*</span>\r\n </label>\r\n <div class=\"col-md-9\">\r\n <div class=\"input-group w-100\">\r\n <input type=\"number\" class=\"form-control\" name=\"{{fl?.form_field}}\" [value]=\"fl?.default_value\"\r\n [(ngModel)]=\"fl.default_value\" #numberInput=\"ngModel\" [required]=\"fl?.is_compulsory==1\">\r\n </div>\r\n <div *ngIf=\"numberInput.invalid && (numberInput.dirty || numberInput.touched)\"\r\n class=\"alert alert-danger ca\">\r\n <div *ngIf=\"numberInput.errors.required\">\r\n {{fl.form_field_title}} is required.\r\n </div>\r\n <div *ngIf=\"numberInput.invalid && (numberInput.dirty || numberInput.touched)\"\r\n class=\"alert alert-danger ca\">\r\n <div *ngIf=\"numberInput.errors.required\">\r\n {{fl.form_field_title}} is required.\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"form-group\"\r\n *ngIf=\"fl?.form_field_typ == 'pw' && fl?.is_hidden == 0 && fl?.dta_typ =='pw'\">\r\n <label class=\"col-md-3 control-label\">{{fl?.form_field_title}}\r\n <span class=\"text-danger\" *ngIf=\"fl.is_compulsory == 1\">*</span>\r\n </label>\r\n <div class=\"col-md-9\">\r\n <div class=\"input-group w-100\">\r\n <input type=\"{{inputtype}}\" class=\"form-control posrel\" name=\"{{fl?.form_field}}\"\r\n [value]=\"fl?.default_value\" [(ngModel)]=\"fl.default_value\" #passInput=\"ngModel\"\r\n [required]=\"fl?.is_compulsory == '1'\" />\r\n <span class=\"fa {{eveC}} eye\" (click)=\"showHIdePass();\"></span>\r\n </div>\r\n <div *ngIf=\"passInput.invalid && (passInput.dirty || passInput.touched)\"\r\n class=\"alert alert-danger ca\">\r\n <div *ngIf=\"passInput.errors.required\">\r\n {{fl.form_field_title}} is required.\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"form-group\" *ngIf=\"fl?.form_field_typ == 't' && fl?.dta_typ =='a'\">\r\n <label class=\"col-md-3 control-label\">{{fl?.form_field_title}}\r\n <span class=\"text-danger\" *ngIf=\"fl.is_compulsory == 1\">*</span>\r\n </label>\r\n <div class=\"col-md-9\">\r\n <div class=\"input-group w-100\">\r\n\r\n <!-- <ng-select [items]=\"[]\" [addTag]=\"true\" bindValue=\"label\" [multiple]=\"true\" name=\"{{fl?.form_field}}\"\r\n [(ngModel)]=\"fl.default_value\" [isOpen]=\"false\" #afield=\"ngModel\" [required]=\"fl?.is_compulsory == '1'\">\r\n </ng-select> -->\r\n\r\n <!-- <ng-select style=\"z-index: 5;\" [options]=\"[]\" [(ngModel)]=\"fl.default_value\" name=\"{{fl?.form_field}}\"\r\n #afield=\"ngModel\" [required]=\"fl?.is_compulsory == '1'\">\r\n </ng-select> last commented-->\r\n\r\n <tag-input [(ngModel)]=\"fl.default_value\" name=\"{{fl?.form_field}}\" [modelAsStrings]=\"true\"\r\n [allowDupes]=\"true\" [editable]='true'></tag-input>\r\n\r\n\r\n </div>\r\n <!-- <div *ngIf=\"afield.invalid && (afield.dirty || afield.touched)\" class=\"alert alert-danger ca\">\r\n <div *ngIf=\"afield.errors.required\">\r\n {{fl.form_field_title}} is required.\r\n </div>\r\n </div> -->\r\n </div>\r\n </div>\r\n <div class=\"form-group\" *ngIf=\"fl?.form_field_typ == 't' && fl?.dta_typ =='sr'\">\r\n <div class=\"row\">\r\n <label class=\"col-md-3 control-label\">{{fl?.form_field_title}}\r\n <span class=\"text-danger\" *ngIf=\"fl.is_compulsory == 1\">*</span>\r\n </label>\r\n <div class=\"col-md-7\">\r\n <div class=\"input-group w-100\">\r\n <!-- <ng-select [items]=\"sqlArray[fl.form_field]\" [dropdownPosition]=\"'bottom'\" bindLabel=\"v\"\r\n [(ngModel)]=\"pageDisplay\" [ngModelOptions]=\"{standalone: true}\">\r\n </ng-select> -->\r\n <ng-select style=\"z-index: 5;\" [options]=\"sqlArray[fl.form_field]\" [(ngModel)]=\"pageDisplay\"\r\n name=\"{{fl?.form_field}}\">\r\n </ng-select>\r\n </div>\r\n </div>\r\n <div class=\"col-md-2\">\r\n <button class=\"btn btn-info\" type=\"button\" style=\"width:100%;\"\r\n (click)=\"addAttr(pageDisplay, sqlArray[fl.form_field], fl.default_value);\">Add</button>\r\n </div>\r\n </div>\r\n <div class=\"row\">\r\n <label class=\"col-md-3 control-label\">Selected Modules</label>\r\n <div cclass=\"col-md-9\">\r\n <div class=\"mds\">\r\n <ng-template #itemTemplate let-item=\"item\" let-index=\"index\">\r\n <span\r\n style=\"padding: 4px;border: 1px solid #c9c9c9;border-radius: 6px;display: inline-block;width: 100%;position: relative;\">\r\n <span>{{index+1}}</span> - {{item.value}}\r\n <span class=\"rm\" (click)=\"remove(fl.default_value,item.value,index,fl?.form_field);\">\r\n <i class=\"fa fa-times\" aria-hidden=\"true\"></i>\r\n </span>\r\n </span>\r\n </ng-template>\r\n <div class=\"row\">\r\n <div>\r\n <bs-sortable [(ngModel)]=\"fl.default_value\" name=\"{{fl?.form_field}}\"\r\n [itemTemplate]=\"itemTemplate\" itemClass=\"sortable-item\"\r\n itemActiveClass=\"sortable-item-active\" placeholderClass=\"placeholderStyle\"\r\n wrapperClass=\"sortable-wrapper\" #srf=\"ngModel\" [required]=\"fl?.is_compulsory == '1'\">\r\n </bs-sortable>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div *ngIf=\"srf.invalid && (srf.dirty || srf.touched)\" class=\"alert alert-danger ca\">\r\n <div *ngIf=\"srf.errors.required\">\r\n {{fl.form_field_title}} is required.\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"form-group\" *ngIf=\"fl?.form_field_typ == 't' && fl?.dta_typ =='sa'\">\r\n <label class=\"col-md-3 control-label\">{{fl?.form_field_title}}\r\n <span class=\"text-danger\" *ngIf=\"fl.is_compulsory == 1\">*</span>\r\n </label>\r\n <div class=\"col-md-9\">\r\n <div class=\"input-group w-100\">\r\n <!-- <ng-select [items]=\"sqlArray[fl.form_field]\" [addTag]=\"addTag\" bindValue=\"k\" [hideSelected]=\"true\"\r\n multiple=\"true\" bindLabel=\"v\" name=\"{{fl?.form_field}}\" [(ngModel)]=\"fl.default_value\"\r\n #safield=\"ngModel\" [required]=\"fl?.is_compulsory == '1'\">\r\n </ng-select> -->\r\n\r\n <ng-select style=\"z-index: 5;\" [options]=\"sqlArray[fl.form_field]\"\r\n [(ngModel)]=\"fl.default_value\" [multiple]=\"true\" [allowClear]=\"true\" name=\"{{fl?.form_field}}\"\r\n #safield=\"ngModel\" [required]=\"fl?.is_compulsory == '1'\">\r\n <ng-template #optionTemplate let-option=\"option\">\r\n <div class=\"famfamfam-flags {{option?.value}}\"></div>\r\n {{option?.label}}\r\n </ng-template>\r\n </ng-select>\r\n\r\n </div>\r\n <div *ngIf=\"safield.invalid && (safield.dirty || safield.touched)\" class=\"alert alert-danger ca\">\r\n <div *ngIf=\"safield.errors.required\">\r\n {{fl.form_field_title}} is required.\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"form-group\" *ngIf=\"fl?.form_field_typ == 'ta' && fl?.is_hidden == 0 && fl?.dta_typ =='c'\">\r\n <label class=\"col-md-3 control-label\">{{fl?.form_field_title}}\r\n <span class=\"text-danger\" *ngIf=\"fl.is_compulsory == 1\">*</span>\r\n </label>\r\n <div class=\"col-md-9\">\r\n <div class=\"input-group w-100\">\r\n <textarea class=\"form-control\" rows=\"3\" name=\"{{fl?.form_field}}\" [value]=\"fl?.default_value\"\r\n [(ngModel)]=\"fl.default_value\" #textArea=\"ngModel\" (blur)=\"chkFun(fl,fl.default_value);\"\r\n [ngClass]=\"{'uniqErrMsg': fl?.form_field == onErr}\"\r\n [required]=\"fl?.is_compulsory == '1'\"></textarea>\r\n </div>\r\n <div *ngIf=\"textArea.invalid && (textArea.dirty || textArea.touched)\"\r\n class=\"alert alert-danger ca\">\r\n <div *ngIf=\"textArea.errors.required\">\r\n {{fl.form_field_title}} is required.\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div\r\n *ngIf=\"fl?.form_field_typ == 'hd' || fl?.form_field_typ == 'hc' || fl?.form_field_typ == 'df' || fl?.form_field_typ == 'fk' || fl?.form_field_typ == 'ck' && fl?.is_hidden == 0\"\r\n [ngClass]=\"{'mt0': fl?.form_field_typ == 'hd'}\">\r\n <input type=\"hidden\" class=\"form-control\" name=\"{{fl?.form_field}}\" [value]=\"fl?.default_value\"\r\n [(ngModel)]=\"fl.default_value\" #hdf=\"ngModel\" />\r\n </div>\r\n <div class=\"form-group\" *ngIf=\"fl?.form_field_typ == 'sq' && fl?.is_hidden == 0\">\r\n <label class=\"col-md-3 control-label\"></label>\r\n <div class=\"col-md-9\">\r\n <div class=\"input-group w-100\">\r\n <input type=\"hidden\" class=\"form-control\" name=\"{{fl?.form_field}}\" [value]=\"fl?.default_value\"\r\n [(ngModel)]=\"fl.default_value\" />\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"form-group\" *ngIf=\"fl?.form_field_typ == 'tb' && fl?.is_hidden == 0\">\r\n <label class=\"col-md-3 control-label\">{{fl?.form_field_title}}\r\n <span class=\"text-danger\" *ngIf=\"fl.is_compulsory == 1\">*</span>\r\n </label>\r\n\r\n <div class=\"col-md-9\">\r\n <div class=\"input-group w-100\">\r\n <select class=\"form-control select\" name=\"{{fl?.form_field}}\" [value]=\"fl?.default_value\"\r\n [(ngModel)]=\"fl.default_value\" #tdf=\"ngModel\" [required]=\"fl?.is_compulsory == '1'\">\r\n <option *ngFor=\"let dynamic of sqlArray[fl.form_field]\" value=\"{{dynamic.value}}\">\r\n {{dynamic.label}}</option>\r\n </select>\r\n </div>\r\n <div *ngIf=\"tdf.invalid && (tdf.dirty || tdf.touched)\" class=\"alert alert-danger ca\">\r\n <div *ngIf=\"tdf.errors.required\">\r\n {{fl.form_field_title}} is required.\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"form-group\" *ngIf=\"fl?.form_field_typ == 'l' && fl?.is_hidden == 0\">\r\n <label class=\"col-md-3 control-label\">{{fl?.form_field_title}}\r\n <span class=\"text-danger\" *ngIf=\"fl.is_compulsory == 1\">*</span>\r\n </label>\r\n <div class=\"col-md-9\">\r\n <div class=\"input-group w-100\">\r\n <select class=\"form-control select\" name=\"{{fl?.form_field}}\" [value]=\"fl?.default_value\"\r\n [(ngModel)]=\"fl.default_value\" #lInput=\"ngModel\" [required]=\"fl?.is_compulsory == '1'\">\r\n <option *ngFor=\"let lov of fl.kv\" value=\"{{lov.k}}\">{{lov.v}}</option>\r\n </select>\r\n </div>\r\n <div *ngIf=\"lInput.invalid && (lInput.dirty || lInput.touched)\" class=\"alert alert-danger ca\">\r\n <div *ngIf=\"lInput.errors.required\">\r\n {{fl.form_field_title}} is required.\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"form-group\" *ngIf=\"fl?.form_field_typ == 'ld' && fl?.is_hidden == 0\">\r\n <label class=\"col-md-3 control-label\">{{fl?.form_field_title}}\r\n <span class=\"text-danger\" *ngIf=\"fl.is_compulsory == 1\">*</span>\r\n </label>\r\n <div class=\"col-md-9\">\r\n <div class=\"input-group w-100\">\r\n <select class=\"form-control select\" name=\"{{fl?.form_field}}\" [value]=\"fl?.default_value\"\r\n [(ngModel)]=\"fl.default_value\" #ldInput=\"ngModel\" [required]=\"fl?.is_compulsory == '1'\">\r\n <option *ngFor=\"let dynamic of sqlArray[fl.form_field]\" value=\"{{dynamic.value}}\">\r\n {{dynamic.label}}</option>\r\n </select>\r\n </div>\r\n <div *ngIf=\"ldInput.invalid && (ldInput.dirty || ldInput.touched)\" class=\"alert alert-danger ca\">\r\n <div *ngIf=\"ldInput.errors.required\">\r\n {{fl.form_field_title}} is required.\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"form-group\" *ngIf=\"fl?.form_field_typ == 's' && fl?.is_hidden == 0\">\r\n <label class=\"col-md-3 control-label\">{{fl?.form_field_title}}\r\n <span class=\"text-danger\" *ngIf=\"fl.is_compulsory == 1\">*</span>\r\n </label>\r\n <div class=\"col-md-9\">\r\n <div class=\"input-group w-100\">\r\n <select class=\"form-control select\" name=\"{{fl?.form_field}}\" [value]=\"fl?.default_value\"\r\n [(ngModel)]=\"fl.default_value\" (change)=\"chkFun(fl,fl.default_value)\" id=\"{{fl.column_key}}\"\r\n #sfi=\"ngModel\" [required]=\"fl?.is_compulsory == '1'\">\r\n <option *ngFor=\"let dynamic of sqlArray[fl.form_field]\" value=\"{{dynamic.value}}\">\r\n {{dynamic.label}}</option>\r\n </select>\r\n </div>\r\n <div *ngIf=\"sfi.invalid && (sfi.dirty || sfi.touched)\" class=\"alert alert-danger ca\">\r\n <div *ngIf=\"sfi.errors.required\">\r\n {{fl.form_field_title}} is required.\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"form-group\" *ngIf=\"fl?.form_field_typ == 'sb'\">\r\n <label class=\"col-md-3 control-label\">{{fl?.form_field_title}}\r\n <span class=\"text-danger\" *ngIf=\"fl.is_compulsory == 1\">*</span>\r\n </label>\r\n <div class=\"col-md-8\">\r\n <div class=\"input-group w-100\">\r\n <ng-select style=\"z-index: 5;\" [options]=\"sqlArray[fl.form_field]\" #sfi=\"ngModel\"\r\n [(ngModel)]=\"fl.default_value\" name=\"{{fl?.form_field}}\"\r\n (selected)=\"chkFun(fl,fl.default_value)\"\r\n (filterInputChanged)=\"loadSuggdata($event,fl.page_item_idn,fl.form_field)\">\r\n </ng-select>\r\n </div>\r\n <div *ngIf=\"sfi.invalid && (sfi.dirty || sfi.touched)\" class=\"alert alert-danger ca\">\r\n <div *ngIf=\"sfi.errors.required\">\r\n {{fl.form_field_title}} is required.\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"col-md-1\" *ngIf=\"fl?.form_field_icon == 'add'\">\r\n <button type=\"button\" class=\"btn btn-success btn-rounded\"><span><i\r\n class=\"fa fa-plus\"></i></span></button>\r\n\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"modal-footer\">\r\n <button type=\"submit\" class=\"btn btn-success\" (click)=\"submitForm(f,submitBtn)\" appAppNoDblClick\r\n #submitBtn>{{btnName}}</button>\r\n <button type=\"reset\" class=\"btn btn-danger\" (click)=\"reset(f)\" *ngIf=\"btnName == 'Add'\">Reset</button>\r\n </div>\r\n </form>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"modal\" id=\"deleteTermsmodal\" role=\"dialog\" aria-labelledby=\"smallModalHead\" aria-hidden=\"true\"\r\n data-backdrop=\"static\" data-keyboard=\"false\">\r\n <div class=\"modal-dialog modal-sm\">\r\n <div class=\"modal-content\">\r\n <div class=\"modal-header\">\r\n <button type=\"button\" class=\"close\" data-dismiss=\"modal\" (click)=\"closeNull();\" #deleteclsbtn>\r\n <span aria-hidden=\"true\">&times;</span>\r\n <span class=\"sr-only\">Close</span>\r\n </button>\r\n <h4 class=\"modal-title\" id=\"smallModalHead\">Warning</h4>\r\n </div>\r\n <div class=\"modal-body\">\r\n Are you sure want to delete term?\r\n </div>\r\n <div class=\"modal-footer\">\r\n <button type=\"button\" class=\"btn btn-default\" data-dismiss=\"modal\">Close</button>\r\n <button type=\"button\" class=\"btn btn-danger\" data-dismiss=\"modal\" (click)=\"DeleteTerms();\">Delete</button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"modal\" id=\"deletemodal\" role=\"dialog\" aria-labelledby=\"smallModalHead\" aria-hidden=\"true\"\r\n data-backdrop=\"static\" data-keyboard=\"false\">\r\n <div class=\"modal-dialog modal-sm\">\r\n <div class=\"modal-content\">\r\n <div class=\"modal-header\">\r\n <button type=\"button\" class=\"close\" data-dismiss=\"modal\" (click)=\"closeNull();\" #deleteclsbtn>\r\n <span aria-hidden=\"true\">&times;</span>\r\n <span class=\"sr-only\">Close</span>\r\n </button>\r\n <h4 class=\"modal-title\" id=\"smallModalHead\">Warning</h4>\r\n </div>\r\n <div class=\"modal-body\">\r\n Are you sure want to delete?\r\n </div>\r\n <div class=\"modal-footer\">\r\n <button type=\"button\" class=\"btn btn-default\" data-dismiss=\"modal\">Close</button>\r\n <button type=\"button\" class=\"btn btn-danger\" data-dismiss=\"modal\"\r\n (click)=\"deleteDataList();\">Delete</button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n\r\n <div class=\"modal\" id=\"modal_sys\" tabindex=\"-1\" role=\"dialog\" aria-labelledby=\"defModalHead\" aria-hidden=\"true\">\r\n <div class=\"modal-dialog\">\r\n <div class=\"modal-content\">\r\n <div class=\"modal-header\">\r\n <button type=\"button\" class=\"close\" data-dismiss=\"modal\">\r\n <span aria-hidden=\"true\">&times;</span>\r\n <span class=\"sr-only\">Close</span>\r\n </button>\r\n <h4 class=\"modal-title\" id=\"defModalHead\">Basic Modal</h4>\r\n </div>\r\n <div class=\"modal-body\">\r\n Some content in modal example\r\n </div>\r\n <div class=\"modal-footer\">\r\n <button type=\"button\" class=\"btn btn-default\" data-dismiss=\"modal\">Close</button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"modal\" id=\"rowGrpmodal\" tabindex=\"-2\" role=\"dialog\" aria-labelledby=\"rowGrpmodal\" aria-hidden=\"true\"\r\n data-backdrop=\"static\" data-keyboard=\"false\">\r\n <div class=\"modal-dialog\">\r\n <div class=\"modal-content\">\r\n <form class=\"form-horizontal\" #frg=\"ngForm\" name=\"appFormRowGrp\">\r\n <div class=\"modal-header\">\r\n <button type=\"button\" class=\"close\" data-dismiss=\"modal\" (click)=\"closeNull();\" #closebtn>\r\n <span aria-hidden=\"true\">&times;</span>\r\n <span class=\"sr-only\">Close</span>\r\n </button>\r\n <h4 class=\"modal-title\" id=\"rowGrpHead\">Row Group</h4>\r\n </div>\r\n <div class=\"modal-body\">\r\n <div class=\"row\">\r\n <div class=\"col-md-12\" style=\"padding-bottom: 10px;\">\r\n <label class=\"col-md-2 control-label\">Attributes</label>\r\n <label class=\"col-md-5 control-label\" style=\"padding-right: 90px;\">Row Display</label>\r\n <label class=\"col-md-5 control-label\" style=\"padding-right: 76px;\">Row Group </label>\r\n </div>\r\n <div class=\"col-md-12\">\r\n <div class=\"form-group\" *ngFor=\"let att of display_attr;\">\r\n <label class=\"col-md-2 control-label\">{{att.attr}}</label>\r\n <div class=\"col-md-5\">\r\n <div class=\"input-group w-100\">\r\n <select class=\"form-control\" name=\"dr_{{att.attr}}\" [disabled]=\"disableselc\"\r\n id=\"row_{{att.attr}}\" value=\"{{att.display_row}}\" (change)=\"onChangeDispRow($event)\">\r\n <!-- [value]=\"att.display_row\" -->\r\n <option *ngFor=\"let dr of display_row;\" value=\"{{dr.idn}}\">{{dr.print}}</option>\r\n </select>\r\n </div>\r\n </div>\r\n <div class=\"col-md-5\">\r\n <div class=\"input-group w-100\">\r\n <select class=\"form-control\" name=\"grp_{{att.attr}}\" [disabled]=\"disableselc\"\r\n id=\"grp_{{att.attr}}\" [value]=\"att.display_group\" (change)=\"onChangeDispGrp($event)\">\r\n <option value = ''></option>\r\n <option *ngFor=\"let dg of display_group;\" value=\"{{dg.idn}}\">{{dg.print}}</option>\r\n </select>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"modal-footer\">\r\n <button type=\"reset\" class=\"btn btn-danger\" data-dismiss=\"modal\">close</button>\r\n </div>\r\n </form>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n\r\n\r\n\r\n <div class=\"modal\" id=\"productDetailMapMD\" role=\"dialog\" aria-labelledby=\"smallModalHead\" aria-hidden=\"true\"\r\n data-backdrop=\"static\" data-keyboard=\"false\">\r\n <div class=\"modal-dialog modal-sm mwidth\">\r\n <div class=\"modal-content\">\r\n <div class=\"modal-header\">\r\n <button type=\"button\" class=\"close\" data-dismiss=\"modal\" (click)=\"closeNull();\" #productMapclsbtn>\r\n <span aria-hidden=\"true\">&times;</span>\r\n <span class=\"sr-only\" productDetailMapclsbtn>Close</span>\r\n </button>\r\n <h4 class=\"modal-title\" id=\"smallModalHead\">Product Mapping of&nbsp;{{producDetailModelTitle}}</h4>\r\n </div>\r\n <div class=\"modal-body\">\r\n <div class=\"table-responsive\">\r\n <table class=\"table table-bordered table-hover table-hover-cells\">\r\n <thead>\r\n <tr>\r\n <th>\r\n Name\r\n </th>\r\n <th>\r\n Value\r\n </th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <ng-container *ngFor=\"let key of attrDtl?.prpList\">\r\n <tr>\r\n <td>\r\n {{key.print}}\r\n </td>\r\n <td>\r\n <input type=\"text\" class=\"form-control\" [(ngModel)]=\"attrMappingDtl[key?.val]\" />\r\n </td>\r\n </tr>\r\n </ng-container>\r\n </tbody>\r\n </table>\r\n </div>\r\n <div class=\"modal-footer\">\r\n <button type=\"button\" class=\"btn btn-default\" data-dismiss=\"modal\" #productDetailMapclsbtn>Close</button>\r\n <button type=\"button\" class=\"btn btn-success\" data-dismiss=\"modal\"\r\n (click)=\"saveProductDetailMapping();\">Save</button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"modal\" id=\"docdeletemodal\" role=\"dialog\" aria-labelledby=\"smallModalHead\" aria-hidden=\"true\"\r\n data-backdrop=\"static\" data-keyboard=\"false\">\r\n <div class=\"modal-dialog modal-sm\">\r\n <div class=\"modal-content\">\r\n <div class=\"modal-header\">\r\n <button type=\"button\" class=\"close\" data-dismiss=\"modal\" (click)=\"closeNull();\" #deleteclsbtn>\r\n <span aria-hidden=\"true\">&times;</span>\r\n <span class=\"sr-only\">Close</span>\r\n </button>\r\n <h4 class=\"modal-title\" id=\"smallModalHead\">Warning</h4>\r\n </div>\r\n <div class=\"modal-body\">\r\n Are you sure want to delete?\r\n </div>\r\n <div class=\"modal-footer\">\r\n <button type=\"button\" class=\"btn btn-default\" data-dismiss=\"modal\">Close</button>\r\n <button type=\"button\" class=\"btn btn-danger\" data-dismiss=\"modal\" (click)=\"deleteDoc();\">Delete</button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"modal\" id=\"bnkdeletemodal\" role=\"dialog\" aria-labelledby=\"smallModalHead\" aria-hidden=\"true\"\r\n data-backdrop=\"static\" data-keyboard=\"false\">\r\n <div class=\"modal-dialog modal-sm\">\r\n <div class=\"modal-content\">\r\n <div class=\"modal-header\">\r\n <button type=\"button\" class=\"close\" data-dismiss=\"modal\" (click)=\"closeNull();\" #deleteclsbtn>\r\n <span aria-hidden=\"true\">&times;</span>\r\n <span class=\"sr-only\">Close</span>\r\n </button>\r\n <h4 class=\"modal-title\" id=\"smallModalHead\">Warning</h4>\r\n </div>\r\n <div class=\"modal-body\">\r\n Are you sure want to delete?\r\n </div>\r\n <div class=\"modal-footer\">\r\n <button type=\"button\" class=\"btn btn-default\" data-dismiss=\"modal\">Close</button>\r\n <button type=\"button\" class=\"btn btn-danger\" data-dismiss=\"modal\"\r\n (click)=\"DeleteLedgerBank()\">Delete</button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <button id=\"bnkdeletemodalbtn\" [hidden]=\"true\" data-toggle=\"modal\" data-target=\"#bnkdeletemodal\"></button>\r\n\r\n <button id=\"docdeletebtn\" [hidden]=\"true\" data-toggle=\"modal\" data-target=\"#docdeletemodal\"></button>\r\n <button id=\"deletebtn\" [hidden]=\"true\" data-toggle=\"modal\" data-target=\"#deletemodal\"></button>\r\n <button id=\"deleteTerms\" [hidden]=\"true\" data-toggle=\"modal\" data-target=\"#deleteTermsmodal\"></button>\r\n\r\n <button id=\"datamdbtn\" [hidden]=\"true\" data-toggle=\"modal\" data-target=\"#datamodal\"></button>\r\n <button id=\"clsMd\" [hidden]=\"true\" data-dismiss=\"modal\" data-target=\"#datamodal\"></button>\r\n <button id=\"sysmd\" [hidden]=\"true\" data-dismiss=\"modal\" data-target=\"#modal_sys\"></button>\r\n <button id=\"btnproductDetailMapMD\" [hidden]=\"true\" data-toggle=\"modal\" data-target=\"#productDetailMapMD\"></button>\r\n\r\n <button id=\"rowGrpbtn\" [hidden]=\"true\" data-dismiss=\"modal\" data-toggle=\"modal\" data-target=\"#rowGrpmodal\"></button>\r\n </div>", styles: [".btn-default.btn-on-1.active,.btn-default.btn-off-1.active{background-color:#3b5998;color:#fff}.btn.btn-xs,.btn-group-xs>.btn{font-size:12px;padding:5px 15px}.tbactive{background:#3B5998;color:#fff}input[type=radio]{display:none}.content-frame-body{padding:0 10px 10px!important}.content-frame-left{background:transparent!important;width:250px!important}.f-12{font-size:12px}.mt0{margin-bottom:0!important}.headingCls{padding:10px;background:#f0efef;font-size:14px;font-weight:400;margin-bottom:20px}.onHover{position:absolute;top:50%;transform:translate(-50%,-50%);left:50%;width:100%;text-align:center}.sortable-item{display:inline-block!important}.mds{border:1px solid #c9c9c9;height:265px;overflow:auto;margin-top:15px;width:175px;position:relative;right:-10px}.mds ul{padding-left:10px;list-style:none}.mds ul li{margin:5px 0;-webkit-user-select:all;user-select:all}.page-container .page-content .content-frame .content-frame-left{padding:0 10px!important}.mwidth{width:500px}.thcenter,.tdcenter{text-align:center}.Inactive{background-color:#ebebe0}btn-file>input{position:absolute;top:0;right:0;width:100%;height:100%;margin:0;font-size:23px;cursor:pointer;filter:alpha(opacity=0);opacity:0;direction:ltr;background-color:#32c5d2;border-color:#32c5d2}.btn.green{color:#fff;background:#3b5998!important;border-color:#3b5998!important}.btn.red{color:#fff;background-color:#e7505a;border-color:#e7505a}\n"] }]
2463
+ args: [{ selector: "app-subform", template: "<div class=\"mt\">\r\n <div class=\"panel panel-default\">\r\n <div class=\"panel-heading\">\r\n <h3 class=\"panel-title\">\r\n <span class=\"fa fa-chevron-left cp\" (click)=\"pageBck();\"> Back</span>&nbsp;&nbsp;&nbsp; {{pageInfo?.title}}\r\n <span *ngIf=\"contactName==''\" class=\"f-12\">({{cDt | date:'medium'}})</span>\r\n <span *ngIf=\"contactName!=''\" class=\"f-12\">&nbsp;for <b> {{contactName}}</b> </span>\r\n </h3>\r\n <button type=\"button\" id=\"addBtn\" class=\"btn btn-info pull-right\" *ngIf=\"addNew?.is_compulsory == 1\"\r\n appAppNoDblClick (click)=\"userAction('', 'add', '', '');f.reset();\">{{addNew?.form_field_title}}</button>\r\n </div>\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"col-md-2\" *ngIf=\"navigation.length > 0\">\r\n <div class=\"panel panel-default\">\r\n <div class=\"panel-body\">\r\n <div class=\"list-group border-bottom\">\r\n <a href=\"javascript:void(0)\" class=\"list-group-item\" [ngClass]=\"{'active' :i == cLink}\"\r\n *ngFor=\"let nav of navigation;let i=index\" (click)=\"navigationFun(nav,i);\">{{nav.form_field_title}}</a>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div [ngClass]=\"navigation.length > 0 ? 'col-md-10' : 'col-md-12'\">\r\n <div class=\"panel panel-default\">\r\n <!-- primery form -->\r\n <div class=\"panel-body\" style=\"overflow-x: scroll\"\r\n *ngIf=\"navform != 'addtionalDtlMaster' && navform != 'documentUploadMaster' && navform != 'menuAccessMaster' && navform != 'termUserAssignForm' && navform != 'setPasswordForm' && navform!='ledgerBankDetails' && navform!='ledgerAccAdditinalDetails' && navform!='ledgerAddtionalDtlMaster' && navform!='accDeleteRulesForm' && navform!='accJournalAttrForm' && navform!='accLoanAttrForm' && navform!='accJournalSettingForm' && navform!='webMenuAccessMaster' \">\r\n <div class=\"row\">\r\n <div class=\"col-sm-6\">\r\n <form class=\"form-inline pull-left\">\r\n <div class=\"form-group\">\r\n <label for=\"ddlPagesize\">Page Size &nbsp; &nbsp;</label>\r\n <select class=\"form-control\" name=\"pageSize\" [(ngModel)]=\"pageSize\"\r\n (change)=\"onPageSizeChange(pageSize)\">\r\n <option value=\"All\">All</option>\r\n <option value=\"10\">10</option>\r\n <option value=\"25\">25</option>\r\n <option value=\"50\">50</option>\r\n <option value=\"100\">100</option>\r\n </select>\r\n </div>\r\n </form>\r\n <button class=\"btn btn-default\" style=\"padding: 4px 15px 4px 20px;margin-left: 10px;\"\r\n data-toggle=\"tooltip\" data-placement=\"right\" title=\"Refresh\" (click)=\"ngOnInit();\">\r\n <span class=\"fa fa-refresh\"></span>\r\n </button>\r\n </div>\r\n <div class=\"col-sm-6\">\r\n <form class=\"form-inline pull-right\">\r\n <div class=\"form-group\">\r\n <label for=\"exampleInputName2\">Search &nbsp;&nbsp;</label>\r\n <input type=\"text\" class=\"form-control\" id=\"exampleInputName2\" name=\"schtxt\" [(ngModel)]=\"searchF\" />\r\n </div>\r\n </form>\r\n </div>\r\n </div>\r\n <div class=\"table-responsive\" [ngClass]=\"{'table-responsive' :navigation.length > 0}\">\r\n <table class=\"table table-bordered table-hover table-hover-cells\">\r\n <thead>\r\n <tr>\r\n <th>SR No</th>\r\n <th>Action</th>\r\n <th *ngFor=\"let tbh of tblH; let i = index\" (click)=\"setOrder(tbh,i)\">{{tblDesc[tbh]}}\r\n <span [hidden]=\"reverse\" *ngIf=\"showarr === i\">\r\n <i class=\"fa fa-arrow-down\" aria-hidden=\"true\"></i>\r\n </span>\r\n <span [hidden]=\"!reverse\" *ngIf=\"showarr === i\">\r\n <i class=\"fa fa-arrow-up\" aria-hidden=\"true\"></i>\r\n </span>\r\n </th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <ng-container\r\n *ngFor=\"let data of datalist | searchPipe:searchF | orderBy: order:reverse | paginate: { itemsPerPage: pageSize, currentPage: p }; let i = index\">\r\n <tr [ngClass]=\"{'Inactive':data.stt=='InActive'}\">\r\n <td>{{i + 1}}</td>\r\n <td>\r\n <div class=\"btn-group\">\r\n <a href=\"#\" data-toggle=\"dropdown\" class=\"btn btn-info dropdown-toggle\">Action\r\n <span class=\"caret\"></span>\r\n </a>\r\n <ul class=\"dropdown-menu\" role=\"menu\">\r\n <li *ngFor=\"let action of actions\">\r\n <a href=\"javascript:void(0)\" (click)=\"userAction(data,action.form_field,action, i);\">\r\n {{action.form_field_title}}\r\n </a>\r\n </li>\r\n </ul>\r\n </div>\r\n </td>\r\n <td *ngFor=\"let tbh of tblH; let i=index\" on-mouseover=\"hoveredI=i\" on-mouseleave=\"hoveredI=-1\"\r\n style=\"max-width: 300px; word-break: break-word;\">{{data[tbh]}}\r\n <div class=\"onHoverDiv\"\r\n *ngIf=\"i==hoveredI && page_typ!='jsonForm' && navform!='buyertermsMaster'\">\r\n <ul>\r\n <li (click)=\"editCell(data,tbh);\">\r\n <span class=\"fa fa-pencil\"></span>\r\n </li>\r\n </ul>\r\n </div>\r\n </td>\r\n </tr>\r\n </ng-container>\r\n </tbody>\r\n </table>\r\n </div>\r\n <pagination-controls (pageChange)=\"p = $event\" class=\"pull-right\"></pagination-controls>\r\n </div>\r\n <!-- custom form -->\r\n <div class=\"panel-body\"\r\n *ngIf=\"navform == 'addtionalDtlMaster' || navform == 'ledgerAddtionalDtlMaster' || navform == 'ledgerAccAdditinalDetails' || navform=='accDeleteRulesForm' || navform=='accJournalAttrForm' || navform=='accLoanAttrForm' || navform=='accJournalSettingForm'\">\r\n <div class=\"row\">\r\n <div class=\"col-md-12\" *ngFor=\"let ugld of uiGrpList\">\r\n <p class=\"headingCls\">{{uiGrpListDtl[ugld]}}</p>\r\n <div class=\"col-md-6\" *ngFor=\"let formF of uiGrpListDtl[ugld+'#T'];let i = index\">\r\n <div class=\"form-group\" style=\"margin-bottom: 45px !important;\">\r\n <label class=\"col-md-4 control-label\">{{uiGrpListDtl[ugld+'#D'][i]}}</label>\r\n <div class=\"col-md-8\" *ngIf=\"formF == 'n'\">\r\n <div class=\"input-group w-100\">\r\n <input type=\"number\" class=\"form-control\" name=\"{{uiGrpListDtl[ugld+'#V'][i]}}\"\r\n [value]=\"dataDtl[uiGrpListDtl[ugld+'#V'][i]]\" [(ngModel)]=\"dataDtl[uiGrpListDtl[ugld+'#V'][i]]\"\r\n (change)=\"saveFun(uiGrpListDtl[ugld+'#V'][i],dataDtl[uiGrpListDtl[ugld+'#V'][i]],formF)\"\r\n [disabled]=\"uiGrpListDtl[ugld+'#E'][i] == 0 ? false : true\">\r\n </div>\r\n </div>\r\n <div class=\"col-md-8\" *ngIf=\"formF == 't'\">\r\n <div class=\"input-group w-100\">\r\n <input type=\"text\" class=\"form-control\" name=\"{{uiGrpListDtl[ugld+'#V'][i]}}\"\r\n [value]=\"dataDtl[uiGrpListDtl[ugld+'#V'][i]]\" [(ngModel)]=\"dataDtl[uiGrpListDtl[ugld+'#V'][i]]\"\r\n (change)=\"saveFun(uiGrpListDtl[ugld+'#V'][i],dataDtl[uiGrpListDtl[ugld+'#V'][i]],formF)\"\r\n [disabled]=\"uiGrpListDtl[ugld+'#E'][i] == 0 ? false : true\">\r\n </div>\r\n </div>\r\n\r\n\r\n\r\n <!-- added for testing only -->\r\n <div class=\"col-md-8\" *ngIf=\"formF == 'c'\">\r\n <div class=\"input-group w-100\">\r\n <select type=\"text\" class=\"form-control\" name=\"{{uiGrpListDtl[ugld+'#V'][i]}}\"\r\n [(ngModel)]=\"dataDtl[uiGrpListDtl[ugld+'#V'][i]]\"\r\n (change)=\"saveFun(uiGrpListDtl[ugld+'#V'][i],dataDtl[uiGrpListDtl[ugld+'#V'][i]],formF)\">\r\n <option *ngFor=\"let key of attrCListDtl[uiGrpListDtl[ugld+'#V'][i] +'#D'];let j=index\"\r\n value=\"{{attrCListDtl[uiGrpListDtl[ugld+'#V'][i] +'#V'][j]}}\">{{key}}</option>\r\n </select>\r\n <!-- <p *ngFor=\"let a of attrCListDtl[uiGrpListDtl[ugld+'#V'][i] +'#V']\">{{a |json}}:\r\n {{attrCListDtl[uiGrpListDtl[ugld+'#V'][i] +'#V'] |json}}\r\n </p> -->\r\n <!-- <input type=\"text\" class=\"form-control\" name=\"{{uiGrpListDtl[ugld+'#V'][i]}}\" [value]=\"dataDtl[uiGrpListDtl[ugld+'#V'][i]]\"\r\n [(ngModel)]=\"dataDtl[uiGrpListDtl[ugld+'#V'][i]]\" (blur)=\"saveFun(uiGrpListDtl[ugld+'#V'][i],dataDtl[uiGrpListDtl[ugld+'#V'][i]])\"\r\n [disabled]=\"uiGrpListDtl[ugld+'#E'][i] == 0 ? false : true\"> -->\r\n </div>\r\n </div>\r\n <div class=\"col-md-8\" *ngIf=\"formF == 'q'\">\r\n <div class=\"input-group w-100\">\r\n <select type=\"text\" class=\"form-control\" name=\"{{uiGrpListDtl[ugld+'#V'][i]}}\"\r\n [(ngModel)]=\"dataDtl[uiGrpListDtl[ugld+'#V'][i]]\"\r\n (change)=\"saveFun(uiGrpListDtl[ugld+'#V'][i],dataDtl[uiGrpListDtl[ugld+'#V'][i]],formF)\">\r\n <option *ngFor=\"let key of attrQListDtl[uiGrpListDtl[ugld+'#V'][i] +'#D'];let j=index\"\r\n value=\"{{attrQListDtl[uiGrpListDtl[ugld+'#V'][i] +'#D'][j]}}\">{{key}}</option>\r\n </select>\r\n <!-- <p *ngFor=\"let a of attrCListDtl[uiGrpListDtl[ugld+'#V'][i] +'#V']\">{{a |json}}:\r\n {{attrCListDtl[uiGrpListDtl[ugld+'#V'][i] +'#V'] |json}}\r\n </p> -->\r\n <!-- <input type=\"text\" class=\"form-control\" name=\"{{uiGrpListDtl[ugld+'#V'][i]}}\" [value]=\"dataDtl[uiGrpListDtl[ugld+'#V'][i]]\"\r\n [(ngModel)]=\"dataDtl[uiGrpListDtl[ugld+'#V'][i]]\" (blur)=\"saveFun(uiGrpListDtl[ugld+'#V'][i],dataDtl[uiGrpListDtl[ugld+'#V'][i]])\"\r\n [disabled]=\"uiGrpListDtl[ugld+'#E'][i] == 0 ? false : true\"> -->\r\n </div>\r\n </div>\r\n\r\n <div class=\"col-md-8\" *ngIf=\"formF == 'sa'\">\r\n <div class=\"input-group w-100\">\r\n <ng-select style=\"z-index: 5;\" [options]=\"sqlArray[uiGrpListDtl[ugld+'#V'][i]]\" #sfi=\"ngModel\"\r\n [(ngModel)]=\"dataDtl[uiGrpListDtl[ugld+'#V'][i]]\" name=\"{{uiGrpListDtl[ugld+'#V'][i]}}\"\r\n (selected)=\"saveFun(uiGrpListDtl[ugld+'#V'][i],dataDtl[uiGrpListDtl[ugld+'#V'][i]],formF)\"\r\n (filterInputChanged)=\"loadJnlSuggdata($event,uiGrpListDtl[ugld+'#V'][i],uiGrpListDtl[ugld+'#M'][i])\">\r\n </ng-select>\r\n\r\n </div>\r\n </div>\r\n\r\n <div class=\"col-md-8\" *ngIf=\"formF == 'd'\">\r\n <div class=\"input-group w-100\">\r\n <input type=\"date\" class=\"form-control\" name=\"{{uiGrpListDtl[ugld+'#V'][i]}}\"\r\n (change)=\"saveFun(uiGrpListDtl[ugld+'#V'][i],dataDtl[uiGrpListDtl[ugld+'#V'][i]],formF)\"\r\n [value]=\"dataDtl[uiGrpListDtl[ugld+'#V'][i]]\" [(ngModel)]=\"dataDtl[uiGrpListDtl[ugld+'#V'][i]]\"\r\n [disabled]=\"uiGrpListDtl[ugld+'#E'][i] == 0 ? false : true\">\r\n </div>\r\n </div>\r\n <div class=\"col-md-8\" *ngIf=\"formF == 'e'\">\r\n <div class=\"input-group w-100\">\r\n <input type=\"email\" class=\"form-control\" name=\"{{uiGrpListDtl[ugld+'#V'][i]}}\"\r\n (change)=\"saveFun(uiGrpListDtl[ugld+'#V'][i],dataDtl[uiGrpListDtl[ugld+'#V'][i]],formF)\"\r\n [value]=\"dataDtl[uiGrpListDtl[ugld+'#V'][i]]\" [(ngModel)]=\"dataDtl[uiGrpListDtl[ugld+'#V'][i]]\"\r\n (blur)=\"saveFun(uiGrpListDtl[ugld+'#V'][i],dataDtl[uiGrpListDtl[ugld+'#V'][i]],formF)\"\r\n [disabled]=\"uiGrpListDtl[ugld+'#E'][i] == 0 ? false : true\">\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"panel-body form\"\r\n *ngIf=\"navform == 'documentUploadMaster' && navform != 'menuAccessMaster' && navform != 'termUserAssignForm' && navform != 'setPasswordForm'\">\r\n <div class=\"row\">\r\n <form action=\"#\" class=\"form-horizontal form-bordered\">\r\n <div class=\"form-body\">\r\n\r\n <div class=\"col-md-4\">\r\n <select type=\"text\" class=\"form-control\" name=\"doctype\" [(ngModel)]=\"doctype\">\r\n <option *ngFor=\"let docs of documentUploadList\" value=\"{{docs}}\">{{documentUploadDtl[docs]}}\r\n </option>\r\n </select>\r\n </div>\r\n <div class=\"col-md-4\">\r\n <div class=\"fileinput fileinput-new\" data-provides=\"fileinput\">\r\n <span class=\"btn green btn-file\">\r\n <span> Upload </span>\r\n\r\n <input type=\"file\" name=\"...\" (change)=\"uploadDocs($event)\"> </span>\r\n <span class=\"fileinput-filename\"> </span> &nbsp;\r\n <a href=\"javascript:;\" class=\"close fileinput-exists\" data-dismiss=\"fileinput\"> </a>\r\n </div>\r\n <a *ngIf=\"routherDoc!=''\" style=\"cursor:pointer \" (click)=\"rediecttokyc()\"><b>\r\n << back</b></a>\r\n </div>\r\n </div>\r\n </form>\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <p class=\"headingCls\">Existing Documents</p>\r\n </div>\r\n <div class=\"col-md-12\">\r\n <table class=\"subDisplayTable\">\r\n <ng-container *ngFor=\"let docs of documentUploadList;let i = index \">\r\n <tr *ngIf=\"dataDtl[docs]!=undefined\">\r\n <td style=\"width: 10%\">{{documentUploadDtl[docs]}}</td>\r\n <td style=\"width: 90%;text-align: left\">\r\n <ng-container *ngFor=\"let docdtl of dataDtl[docs]\">\r\n <div class=\"fileinput fileinput-new\" *ngIf=\"doceditAction\" data-provides=\"fileinput\">\r\n <span class=\"btn-file\">\r\n <i class=\"fa fa-edit\" tooltip=\"Edit Document\" style=\"font-size:20px\"> </i>\r\n\r\n <input type=\"file\" name=\"...\" (change)=\"EditUploadDocs(docdtl,$event)\"> </span>\r\n <span class=\"fileinput-filename\"> </span> &nbsp;\r\n <a href=\"javascript:;\" class=\"close fileinput-exists\" data-dismiss=\"fileinput\"> </a>\r\n </div>\r\n\r\n &nbsp;&nbsp;\r\n <a><i class=\"fa fa-trash-o\" *ngIf=\"docdeleteAction\" (click)=\"ConfirmdeleteDoc(docdtl)\"\r\n style=\"font-size:20px;cursor: pointer\"> </i> </a>&nbsp;&nbsp;&nbsp;&nbsp;\r\n <a (click)=\"opendocs(docdtl)\"> <i class=\"fa fa-file-o\" style=\"font-size:20px\"> </i> </a>\r\n &nbsp;&nbsp;|&nbsp;&nbsp;\r\n </ng-container>\r\n\r\n </td>\r\n </tr>\r\n </ng-container>\r\n </table>\r\n </div>\r\n\r\n </div>\r\n\r\n\r\n\r\n\r\n </div>\r\n <div class=\"panel-body\"\r\n *ngIf=\"navform != 'documentUploadMaster' && navform == 'menuAccessMaster' && navform != 'termUserAssignForm' && navform != 'setPasswordForm' \">\r\n <div class=\"row\">\r\n <div class=\"col-md-2\">\r\n <div class=\"form-group\">\r\n <label class=\"control-label\" style=\"padding-left: 2px;\">Application</label>\r\n <select class=\"form-control\" [(ngModel)]=\"application\" name=\"User\" (change)=\"loadUsrMdl(application)\">\r\n <option *ngFor=\"let app of applicationList\" value=\"{{app.k}}\">{{app.v}}</option>\r\n </select>\r\n </div>\r\n </div>\r\n <div class=\"col-md-2\" *ngIf=\"userDtls.length>0\">\r\n <div class=\"form-group\">\r\n <label class=\"control-label\" style=\"padding-left: 2px;\">User</label>\r\n <select class=\"form-control\" [(ngModel)]=\"User\" name=\"User\">\r\n <option *ngFor=\"let lov of userDtls\" value=\"{{lov.user_idn}}\">{{lov.username}}</option>\r\n </select>\r\n </div>\r\n </div>\r\n <div class=\"col-md-2\" *ngIf=\"moduleDtls.length>0 && userDtls.length >0 \">\r\n <div class=\"form-group\">\r\n <label class=\"control-label\" style=\"padding-left: 2px;\">Module</label>\r\n <select class=\"form-control\" [(ngModel)]=\"Module\" name=\"Module\">\r\n <option *ngFor=\"let lov of moduleDtls\" value=\"{{lov.module_idn}}\">{{lov.print}}</option>\r\n </select>\r\n </div>\r\n </div>\r\n <div class=\"col-md-2 \">\r\n <button type=\"button\" id=\"addBtn\" class=\"btn btn-info\" style=\"margin-top: 23px;\"\r\n (click)=\"getUserRights(User,Module)\">Assign\r\n Rights\r\n </button>\r\n </div>\r\n </div>\r\n <div style=\"padding: 0 10px;\" *ngIf=\"menuList.length>0\">\r\n <div style=\"border:1px solid #e5e5e5;margin-top: 30px\">\r\n <div class=\"row\">\r\n <div class=\"panel panel-default\" style=\"margin-bottom: 25px;\">\r\n <div class=\"panel-heading\" style=\"padding: 0px;\">\r\n <h3 class=\"panel-title\" style=\"padding: 8px; font-size: 14px;\">Users</h3>\r\n <div class=\"col-md-2 chkAll\" style=\"margin: 0px;\">\r\n <div class=\"form-group\" style=\"padding: 10px;\">\r\n <div class=\"col-md-3\">\r\n <label class=\"switch\">\r\n <input type=\"checkbox\" class=\"switch\" name=\"chkAll\" id=\"chkAll\"\r\n (change)=\"onChangeAll($event,User,Module)\"\r\n [checked]=\"(false !== (userRightsMenuList.length == (menuList.length + totMenu)) ? 'checked' : '')\">\r\n <span></span>\r\n </label>\r\n </div>\r\n <label class=\"col-md-4 control-label text-left\" style=\"padding-top: 8px;\r\n padding-left: 40px;\">All\r\n </label>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"row\">\r\n <form class=\"form-horizontal\">\r\n <div class=\"col-md-12\" *ngFor=\"let mdl of menuList;let i=index\">\r\n <div class=\"form-group\">\r\n <div class=\"col-md-1\">\r\n <label class=\"switch\">\r\n <input type=\"checkbox\" class=\"switch\" name=\"chkMenu\" id=\"chkMenu{{mdl.menu_idn}}\"\r\n (change)=\"onChangeMenu($event,mdl.menu_idn,User,Module)\"\r\n [checked]=\"(false !== userRightsMenuList.includes(mdl?.menu_idn) ? 'checked' : '')\">\r\n <span></span>\r\n </label>\r\n </div>\r\n <label class=\"col-md-2 control-label text-left\" style=\"padding-top: 3px;\">{{mdl.menu}}</label>\r\n </div>\r\n <div class=\"col-md-12\" *ngIf=\"mdl.SubMenu.length > 0\">\r\n <div class=\"form-group\" *ngFor=\"let smdl of mdl.SubMenu\">\r\n <div class=\"col-md-1\" style=\"margin-left:10px;padding-left: 60px;\">\r\n <label class=\"switch\">\r\n <input type=\"checkbox\" class=\"switch\" name=\"chkSubMenu\" id=\"chkSubMenu{{smdl.menu_idn}}\"\r\n (change)=\"onChangeSubMenu($event,smdl.menu_idn,mdl.menu_idn,User,Module)\"\r\n [checked]=\"( false !== userRightsMenuList.includes(smdl?.menu_idn) ? 'checked' : '')\">\r\n <span></span>\r\n </label>\r\n </div>\r\n <label class=\"col-md-4 control-label text-left\"\r\n style=\"padding-top: 8px; font-weight: 100;padding-left: 40px;\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{{smdl.hdr}}</label>\r\n </div>\r\n </div>\r\n </div>\r\n </form>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"panel-body\" *ngIf=\"navform == 'webMenuAccessMaster'\">\r\n <div class=\"row\">\r\n <div class=\"col-md-2\">\r\n <div class=\"form-group\">\r\n <label class=\"control-label\" style=\"padding-left: 2px;\">Application</label>\r\n <select class=\"form-control\" [(ngModel)]=\"application\" name=\"User\" (change)=\"loadUsrMdl(application)\">\r\n <option *ngFor=\"let app of applicationList\" value=\"{{app.k}}\">{{app.v}}</option>\r\n </select>\r\n </div>\r\n </div>\r\n <div class=\"col-md-2\" *ngIf=\"userDtls.length>0\">\r\n <div class=\"form-group\">\r\n <label class=\"control-label\" style=\"padding-left: 2px;\">User</label>\r\n <select class=\"form-control\" [(ngModel)]=\"User\" name=\"User\">\r\n <option *ngFor=\"let lov of userDtls\" value=\"{{lov.user_idn}}\">{{lov.username}}</option>\r\n </select>\r\n </div>\r\n </div>\r\n <div class=\"col-md-2\" *ngIf=\"moduleDtls.length>0 && userDtls.length >0 \">\r\n <div class=\"form-group\">\r\n <label class=\"control-label\" style=\"padding-left: 2px;\">Module</label>\r\n <select class=\"form-control\" [(ngModel)]=\"Module\" name=\"Module\">\r\n <option *ngFor=\"let lov of moduleDtls\" value=\"{{lov.module_idn}}\">{{lov.print}}</option>\r\n </select>\r\n </div>\r\n </div>\r\n <div class=\"col-md-2 \">\r\n <button type=\"button\" id=\"addBtn\" class=\"btn btn-info\" style=\"margin-top: 23px;\"\r\n (click)=\"getUserRights(User,Module)\">Assign\r\n Rights\r\n </button>\r\n </div>\r\n </div>\r\n <div style=\"padding: 0 10px;\" *ngIf=\"menuList.length>0\">\r\n <div style=\"border:1px solid #e5e5e5;margin-top: 30px\">\r\n <div class=\"row\">\r\n <div class=\"panel panel-default\" style=\"margin-bottom: 25px;\">\r\n <div class=\"panel-heading\" style=\"padding: 0px;\">\r\n <h3 class=\"panel-title\" style=\"padding: 8px; font-size: 14px;\">Users</h3>\r\n <div class=\"col-md-2 chkAll\" style=\"margin: 0px;\">\r\n <div class=\"form-group\" style=\"padding: 10px;\">\r\n <div class=\"col-md-3\">\r\n <label class=\"switch\">\r\n <input type=\"checkbox\" class=\"switch\" name=\"chkAll\" id=\"chkAll\"\r\n (change)=\"onChangeAll($event,User,Module)\"\r\n [checked]=\"(false !== (userRightsMenuList.length == (menuList.length + totMenu)) ? 'checked' : '')\">\r\n <span></span>\r\n </label>\r\n </div>\r\n <label class=\"col-md-4 control-label text-left\" style=\"padding-top: 8px;\r\n padding-left: 40px;\">All\r\n </label>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"row\">\r\n <form class=\"form-horizontal\">\r\n <div class=\"col-md-12\" *ngFor=\"let mdl of menuList;let i=index\">\r\n <div class=\"form-group\">\r\n <div class=\"col-md-1\">\r\n <label class=\"switch\">\r\n <input type=\"checkbox\" class=\"switch\" name=\"chkMenu\" id=\"chkMenu{{mdl.menu_idn}}\"\r\n (change)=\"onChangeWebMenu($event,mdl.menu_idn,User,Module)\"\r\n [checked]=\"(false == userRightsMenuList.includes(mdl?.menu_idn) ? 'checked' : '')\">\r\n <span></span>\r\n </label>\r\n </div>\r\n <label class=\"col-md-2 control-label text-left\" style=\"padding-top: 3px;\">{{mdl.menu}}</label>\r\n </div>\r\n <div class=\"col-md-12\" *ngIf=\"mdl.SubMenu.length > 0\">\r\n <div class=\"form-group\" *ngFor=\"let smdl of mdl.SubMenu\">\r\n <div class=\"col-md-1\" style=\"margin-left:10px;padding-left: 60px;\">\r\n <label class=\"switch\">\r\n <input type=\"checkbox\" class=\"switch\" name=\"chkSubMenu\" id=\"chkSubMenu{{smdl.menu_idn}}\"\r\n (change)=\"onChangeWebSubMenu($event,smdl.menu_idn,mdl.menu_idn,User,Module)\"\r\n [checked]=\"( false == userRightsMenuList.includes(smdl?.menu_idn) ? 'checked' : '')\">\r\n <span></span>\r\n </label>\r\n </div>\r\n <label class=\"col-md-4 control-label text-left\"\r\n style=\"padding-top: 8px; font-weight: 100;padding-left: 40px;\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{{smdl.hdr}}</label>\r\n </div>\r\n </div>\r\n </div>\r\n </form>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"panel-body\" style=\"background: #fff;min-height: 550px;\"\r\n *ngIf=\"navform != 'addtionalDtlMaster' && navform != 'documentUploadMaster' && navform != 'menuAccessMaster' && navform == 'termUserAssignForm' && navform != 'setPasswordForm' \">\r\n <div class=\"row\" style=\"margin-top: 10px;\">\r\n <div class=\"col-md-2\">\r\n <div class=\"form-group\">\r\n <label class=\"control-label\">Terms</label>\r\n </div>\r\n </div>\r\n <div class=\"col-md-1\" style=\"margin-left: 85px;\">\r\n <div class=\"form-group\">\r\n <label class=\"control-label\">Users</label>\r\n </div>\r\n </div>\r\n </div>\r\n <ng-container *ngFor=\"let term of termsList; let i=index;\">\r\n <div class=\"row\">\r\n <div class=\"col-md-3\">\r\n <div class=\"form-group\">\r\n\r\n <label for=\"{{term.buyer_terms_idn}}\" class=\"control-label\"\r\n style=\"padding: 10px;\">{{term.dsc}}</label>\r\n </div>\r\n </div>\r\n <div class=\"col-md-3\" *ngIf=\"term.userIdnList != undefined\">\r\n <div class=\"form-group w-100\">\r\n <div class=\"input-group w-100\">\r\n\r\n <!-- <ng-select [items]=\"applUserList\" [multiple]=\"true\" [addTag]=\"addTag\" (change)=\"onchaneVals(null,term.buyer_terms_idn,term.userIdnList)\"\r\n bindLabel=\"v\" bindValue=\"k\" name=\"{{term ?.buyer_terms_idn}}\" [(ngModel)]=\"term.userIdnList\">\r\n </ng-select> -->\r\n <ng-select placeholder=\"Select user\" [options]=\"term.TermUserList\" [(ngModel)]=\"term.userIdnList\"\r\n (deselected)=\"onchangeUserList($event,term,'delete')\"\r\n (selected)=\"onchangeUserList($event,term,'add')\" name=\"status\" [multiple]=\"true\"\r\n [allowClear]=\"true\">\r\n <ng-template #optionTemplate let-option=\"option\">\r\n <div class=\"famfamfam-flags {{option?.value}}\"></div>\r\n {{option?.label}}\r\n </ng-template>\r\n </ng-select>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"col-md-6\"></div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n\r\n <div class=\"panel-body\" style=\"background: #fff;min-height: 550px;\"\r\n *ngIf=\"navform != 'addtionalDtlMaster' && navform != 'documentUploadMaster' && navform != 'menuAccessMaster' && navform != 'termUserAssignForm' && navform == 'setPasswordForm' \">\r\n <div class=\"row\" style=\"margin-top: 10px;\">\r\n <div class=\"col-md-12\">\r\n <p class=\"headingCls\">Change User Password</p>\r\n </div>\r\n <div class=\"col-md-2\">\r\n <div class=\"form-group\">\r\n <label class=\"control-label\" style=\"padding: 8px;\">Username</label>\r\n </div>\r\n </div>\r\n <div class=\"col-md-1\" style=\"margin-left: 85px;\">\r\n <div class=\"form-group\">\r\n <label class=\"control-label\" style=\"padding: 8px;\">Password</label>\r\n </div>\r\n </div>\r\n </div>\r\n <ng-container *ngFor=\"let user of userDetails; let i=index;\">\r\n <div class=\"row\">\r\n <div class=\"col-md-3\">\r\n <div class=\"form-group\">\r\n <label class=\"control-label\" style=\"padding: 10px;font-weight: normal;\">{{user?.username}}</label>\r\n </div>\r\n </div>\r\n <div class=\"col-md-6\">\r\n <div class=\"form-group w-100\">\r\n <input type=\"text\" class=\"form-control\" [(ngModel)]=\"user.password\" [value]=\"user?.password\" />\r\n <!-- (blur)=\"changePswd($event,user.userIdn)\" -->\r\n </div>\r\n </div>\r\n <div class=\"col-md-3\">\r\n <div class=\"form-group\">\r\n <button type=\"submit\" class=\"btn btn-success\" (click)=\"changePassword(user)\">save</button>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n <!-- <button type=\"submit\" class=\"btn btn-success\" (click)=\"saveAppUserterms(applUsrLst)\">save</button> -->\r\n </div>\r\n <div class=\"panel-body\" style=\"background: #fff;min-height: 550px;\" *ngIf=\"navform=='ledgerBankDetails'\">\r\n <div class=\"row\">\r\n <div class=\"col-md-12\" style=\"margin:5px\">\r\n <div class=\"form-group w-100\">\r\n <label class=\"col-md-2 control-label\">Bank</label>\r\n <div class=\"col-md-4\">\r\n <ng-select placeholder=\"Select Bank\" [options]=\"bankList\" [(ngModel)]=\"bank\" name=\"bank\"\r\n (selected)=\"getBankBranch(bank)\" (filterInputChanged)=\"ledgerBankDetails($event)\"\r\n [allowClear]=\"true\">\r\n </ng-select>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"col-md-12\" style=\"margin:5px\">\r\n <div class=\"form-group w-100\">\r\n <label class=\"col-md-2 control-label\">Branch Details</label>\r\n <div class=\"col-md-4\">\r\n <select name=\"branch\" (change)=\"selectBranch(branch)\" [(ngModel)]=\"branch\" class=\"form-control\">\r\n <option value=\"\">Select branch</option>\r\n <option *ngFor=\"let bnkDtl of bankDtlList\" [ngValue]=\"bnkDtl.nme_idn\">{{bnkDtl.person_nme}}</option>\r\n </select>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"col-md-12\" *ngIf=\"selectBranchAddress!=''\" style=\"margin:5px\">\r\n <div class=\"form-group w-100\">\r\n <label class=\"col-md-2 control-label\">&nbsp;</label>\r\n <div class=\"col-md-4\">\r\n <div class=\"col-md-3\">Address:</div>\r\n <div class=\"col-md-9\">{{selectBranchAddress}}</div>\r\n <div class=\"col-md-3\">IFSC Code:</div>\r\n <div class=\"col-md-9\">{{selectIfsc}}</div>\r\n\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"col-md-12\" style=\"margin:5px\">\r\n <div class=\"form-group w-100\">\r\n <label class=\"col-md-2 control-label\">Account Type</label>\r\n <div class=\"col-md-4\">\r\n <select name=\"accountType\" [(ngModel)]=\"accountType\" class=\"form-control\">\r\n <option value=\"current\">Current</option>\r\n <option value=\"savings\">Savings</option>\r\n </select>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"col-md-12\" style=\"margin:5px\">\r\n <div class=\"form-group w-100\">\r\n <label class=\"col-md-2 control-label\">Account No</label>\r\n <div class=\"col-md-4\">\r\n <textarea class=\"form-control\" cols=\"45\" rows=\"2\" name=\"accountno\" [(ngModel)]=\"accountno\"></textarea>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"col-md-12\" style=\"margin:5px\">\r\n <div class=\"form-group w-100\">\r\n <div class=\"col-md-2\">&nbsp;</div>\r\n <div class=\"col-md-4\">\r\n <button type=\"button\" *ngIf=\"editbank_dtl_idn==''\" (click)=\"SaveLedgerBank()\"\r\n class=\"btn btn-success\">Add</button>\r\n <button type=\"button\" *ngIf=\"editbank_dtl_idn!=''\" (click)=\"SaveLedgerBank()\"\r\n class=\"btn btn-success\">Edit</button>\r\n\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"row\" *ngIf=\"exitBankDtlList.length>0\">\r\n <div class=\"col-md-1 pull-left\">\r\n &nbsp;\r\n </div>\r\n <div class=\"col-md-6 pull-right\">\r\n <form class=\"form-inline pull-right\">\r\n <div class=\"form-group\">\r\n <label for=\"exampleInputName2\">Search &nbsp;&nbsp;</label>\r\n <input type=\"text\" class=\"form-control\" id=\"exampleInputName2\" name=\"searchF\" [(ngModel)]=\"searchF\" />\r\n </div>\r\n </form>\r\n </div>\r\n </div>\r\n <div class=\"row\" *ngIf=\"exitBankDtlList.length>0\">\r\n <div class=\"col-md-12\">\r\n <table class=\"displayTable\">\r\n <thead>\r\n <th>Actions</th>\r\n <th>Account Type</th>\r\n <th>Account No</th>\r\n <th>Name</th>\r\n <th>Branch</th>\r\n <th>Address</th>\r\n <th>IFSC Code</th>\r\n </thead>\r\n <tbody>\r\n <ng-container *ngFor=\"let bankdtl of exitBankDtlList ; let i = index\">\r\n <tr [ngClass]=\"{'even':i%2==0,'odd':i%2==1}\">\r\n <td> <i class=\"fa fa-edit\" (click)=\"loadEditBankDtl(bankdtl)\" tooltip=\"Edit Bank\"\r\n style=\"font-size:15px;cursor: pointer\"> </i>&nbsp;|\r\n <i class=\"fa fa-trash-o\" (click)=\"ConfirmDeleteLedgerBank(bankdtl)\" tooltip=\"Delete Bank\"\r\n style=\"font-size:15px;cursor: pointer\"> </i>\r\n <td>{{bankdtl.accountType}}</td>\r\n <td>{{bankdtl.accountNo}}</td>\r\n <td>{{bankdtl.bankname}}</td>\r\n <td>{{bankdtl.branchname}}</td>\r\n <td>{{bankdtl.address}}</td>\r\n <td>{{bankdtl.ifsc}}</td>\r\n </tr>\r\n </ng-container>\r\n </tbody>\r\n </table>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"modal\" id=\"datamodal\" role=\"dialog\" aria-labelledby=\"defModalHead\" aria-hidden=\"true\"\r\n data-backdrop=\"static\" data-keyboard=\"false\">\r\n <div class=\"modal-dialog\">\r\n <div class=\"modal-content\">\r\n <form class=\"form-horizontal\" #f=\"ngForm\" name=\"appForm\">\r\n <div class=\"modal-header\">\r\n <button type=\"button\" class=\"close\" data-dismiss=\"modal\" (click)=\"closeNull();\" #closebtn>\r\n <span aria-hidden=\"true\">&times;</span>\r\n <span class=\"sr-only\">Close</span>\r\n </button>\r\n <h4 class=\"modal-title\" id=\"defModalHead\">{{btnName}} Record</h4>\r\n </div>\r\n <div class=\"modal-body\">\r\n <div class=\"row\">\r\n <div class=\"col-md-12\" *ngFor=\"let fl of formFilds | orderByPipe: 'srt': 'asc'\">\r\n <div class=\"form-group\"\r\n *ngIf=\"fl?.form_field_typ == 't' && fl?.is_hidden == 0 && fl?.dta_typ =='c' || fl?.dta_typ =='t'\">\r\n <label class=\"col-md-3 control-label\">{{fl?.form_field_title}}\r\n <span class=\"text-danger\" *ngIf=\"fl.is_compulsory == 1\">*</span>\r\n </label>\r\n <div class=\"col-md-9\">\r\n <div class=\"input-group w-100\">\r\n <input type=\"text\" class=\"form-control posrel\" name=\"{{fl?.form_field}}\"\r\n [value]=\"fl?.default_value\" [(ngModel)]=\"fl.default_value\" #textInput=\"ngModel\"\r\n (blur)=\"chkFun(fl,fl.default_value);\" [required]=\"fl?.is_compulsory == '1'\" />\r\n <span class=\"fa fa-{{ico}} eye\" [ngStyle]=\"{'color':ico == 'check' ? 'green' : 'red' }\"\r\n *ngIf=\"usrisExist && onErr == fl.form_field \"></span>\r\n </div>\r\n <div *ngIf=\"textInput.invalid && (textInput.dirty || textInput.touched)\"\r\n class=\"alert alert-danger ca\">\r\n <div *ngIf=\"textInput.errors.required\">\r\n {{fl.form_field_title}} is required.\r\n </div>\r\n\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"form-group\" *ngIf=\"fl?.form_field_typ == 't' && fl?.is_hidden == 0 && fl?.dta_typ =='n'\">\r\n <label class=\"col-md-3 control-label\">{{fl?.form_field_title}}\r\n <span class=\"text-danger\" *ngIf=\"fl.is_compulsory == 1\">*</span>\r\n </label>\r\n <div class=\"col-md-9\">\r\n <div class=\"input-group w-100\">\r\n <input type=\"number\" class=\"form-control\" name=\"{{fl?.form_field}}\" [value]=\"fl?.default_value\"\r\n [(ngModel)]=\"fl.default_value\" #numberInput=\"ngModel\" [required]=\"fl?.is_compulsory==1\">\r\n </div>\r\n <div *ngIf=\"numberInput.invalid && (numberInput.dirty || numberInput.touched)\"\r\n class=\"alert alert-danger ca\">\r\n <div *ngIf=\"numberInput.errors.required\">\r\n {{fl.form_field_title}} is required.\r\n </div>\r\n <div *ngIf=\"numberInput.invalid && (numberInput.dirty || numberInput.touched)\"\r\n class=\"alert alert-danger ca\">\r\n <div *ngIf=\"numberInput.errors.required\">\r\n {{fl.form_field_title}} is required.\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"form-group\"\r\n *ngIf=\"fl?.form_field_typ == 'pw' && fl?.is_hidden == 0 && fl?.dta_typ =='pw'\">\r\n <label class=\"col-md-3 control-label\">{{fl?.form_field_title}}\r\n <span class=\"text-danger\" *ngIf=\"fl.is_compulsory == 1\">*</span>\r\n </label>\r\n <div class=\"col-md-9\">\r\n <div class=\"input-group w-100\">\r\n <input type=\"{{inputtype}}\" class=\"form-control posrel\" name=\"{{fl?.form_field}}\"\r\n [value]=\"fl?.default_value\" [(ngModel)]=\"fl.default_value\" #passInput=\"ngModel\"\r\n [required]=\"fl?.is_compulsory == '1'\" />\r\n <span class=\"fa {{eveC}} eye\" (click)=\"showHIdePass();\"></span>\r\n </div>\r\n <div *ngIf=\"passInput.invalid && (passInput.dirty || passInput.touched)\"\r\n class=\"alert alert-danger ca\">\r\n <div *ngIf=\"passInput.errors.required\">\r\n {{fl.form_field_title}} is required.\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"form-group\" *ngIf=\"fl?.form_field_typ == 't' && fl?.dta_typ =='a'\">\r\n <label class=\"col-md-3 control-label\">{{fl?.form_field_title}}\r\n <span class=\"text-danger\" *ngIf=\"fl.is_compulsory == 1\">*</span>\r\n </label>\r\n <div class=\"col-md-9\">\r\n <div class=\"input-group w-100\">\r\n\r\n <!-- <ng-select [items]=\"[]\" [addTag]=\"true\" bindValue=\"label\" [multiple]=\"true\" name=\"{{fl?.form_field}}\"\r\n [(ngModel)]=\"fl.default_value\" [isOpen]=\"false\" #afield=\"ngModel\" [required]=\"fl?.is_compulsory == '1'\">\r\n </ng-select> -->\r\n\r\n <!-- <ng-select style=\"z-index: 5;\" [options]=\"[]\" [(ngModel)]=\"fl.default_value\" name=\"{{fl?.form_field}}\"\r\n #afield=\"ngModel\" [required]=\"fl?.is_compulsory == '1'\">\r\n </ng-select> last commented-->\r\n\r\n <tag-input [(ngModel)]=\"fl.default_value\" name=\"{{fl?.form_field}}\" [modelAsStrings]=\"true\"\r\n [allowDupes]=\"true\" [editable]='true'></tag-input>\r\n\r\n\r\n </div>\r\n <!-- <div *ngIf=\"afield.invalid && (afield.dirty || afield.touched)\" class=\"alert alert-danger ca\">\r\n <div *ngIf=\"afield.errors.required\">\r\n {{fl.form_field_title}} is required.\r\n </div>\r\n </div> -->\r\n </div>\r\n </div>\r\n <div class=\"form-group\" *ngIf=\"fl?.form_field_typ == 't' && fl?.dta_typ =='sr'\">\r\n <div class=\"row\">\r\n <label class=\"col-md-3 control-label\">{{fl?.form_field_title}}\r\n <span class=\"text-danger\" *ngIf=\"fl.is_compulsory == 1\">*</span>\r\n </label>\r\n <div class=\"col-md-7\">\r\n <div class=\"input-group w-100\">\r\n <!-- <ng-select [items]=\"sqlArray[fl.form_field]\" [dropdownPosition]=\"'bottom'\" bindLabel=\"v\"\r\n [(ngModel)]=\"pageDisplay\" [ngModelOptions]=\"{standalone: true}\">\r\n </ng-select> -->\r\n <ng-select style=\"z-index: 5;\" [options]=\"sqlArray[fl.form_field]\" [(ngModel)]=\"pageDisplay\"\r\n name=\"{{fl?.form_field}}\">\r\n </ng-select>\r\n </div>\r\n </div>\r\n <div class=\"col-md-2\">\r\n <button class=\"btn btn-info\" type=\"button\" style=\"width:100%;\"\r\n (click)=\"addAttr(pageDisplay, sqlArray[fl.form_field], fl.default_value);\">Add</button>\r\n </div>\r\n </div>\r\n <div class=\"row\">\r\n <label class=\"col-md-3 control-label\">Selected Modules</label>\r\n <div cclass=\"col-md-9\">\r\n <div class=\"mds\">\r\n <ng-template #itemTemplate let-item=\"item\" let-index=\"index\">\r\n <span\r\n style=\"padding: 4px;border: 1px solid #c9c9c9;border-radius: 6px;display: inline-block;width: 100%;position: relative;\">\r\n <span>{{index+1}}</span> - {{item.value}}\r\n <span class=\"rm\" (click)=\"remove(fl.default_value,item.value,index,fl?.form_field);\">\r\n <i class=\"fa fa-times\" aria-hidden=\"true\"></i>\r\n </span>\r\n </span>\r\n </ng-template>\r\n <div class=\"row\">\r\n <div>\r\n <bs-sortable [(ngModel)]=\"fl.default_value\" name=\"{{fl?.form_field}}\"\r\n [itemTemplate]=\"itemTemplate\" itemClass=\"sortable-item\"\r\n itemActiveClass=\"sortable-item-active\" placeholderClass=\"placeholderStyle\"\r\n wrapperClass=\"sortable-wrapper\" #srf=\"ngModel\" [required]=\"fl?.is_compulsory == '1'\">\r\n </bs-sortable>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div *ngIf=\"srf.invalid && (srf.dirty || srf.touched)\" class=\"alert alert-danger ca\">\r\n <div *ngIf=\"srf.errors.required\">\r\n {{fl.form_field_title}} is required.\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"form-group\" *ngIf=\"fl?.form_field_typ == 't' && fl?.dta_typ =='sa'\">\r\n <label class=\"col-md-3 control-label\">{{fl?.form_field_title}}\r\n <span class=\"text-danger\" *ngIf=\"fl.is_compulsory == 1\">*</span>\r\n </label>\r\n <div class=\"col-md-9\">\r\n <div class=\"input-group w-100\">\r\n <!-- <ng-select [items]=\"sqlArray[fl.form_field]\" [addTag]=\"addTag\" bindValue=\"k\" [hideSelected]=\"true\"\r\n multiple=\"true\" bindLabel=\"v\" name=\"{{fl?.form_field}}\" [(ngModel)]=\"fl.default_value\"\r\n #safield=\"ngModel\" [required]=\"fl?.is_compulsory == '1'\">\r\n </ng-select> -->\r\n\r\n <ng-select style=\"z-index: 5;\" [options]=\"sqlArray[fl.form_field]\"\r\n [(ngModel)]=\"fl.default_value\" [multiple]=\"true\" [allowClear]=\"true\" name=\"{{fl?.form_field}}\"\r\n #safield=\"ngModel\" [required]=\"fl?.is_compulsory == '1'\">\r\n <ng-template #optionTemplate let-option=\"option\">\r\n <div class=\"famfamfam-flags {{option?.value}}\"></div>\r\n {{option?.label}}\r\n </ng-template>\r\n </ng-select>\r\n\r\n </div>\r\n <div *ngIf=\"safield.invalid && (safield.dirty || safield.touched)\" class=\"alert alert-danger ca\">\r\n <div *ngIf=\"safield.errors.required\">\r\n {{fl.form_field_title}} is required.\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"form-group\" *ngIf=\"fl?.form_field_typ == 'ta' && fl?.is_hidden == 0 && fl?.dta_typ =='c'\">\r\n <label class=\"col-md-3 control-label\">{{fl?.form_field_title}}\r\n <span class=\"text-danger\" *ngIf=\"fl.is_compulsory == 1\">*</span>\r\n </label>\r\n <div class=\"col-md-9\">\r\n <div class=\"input-group w-100\">\r\n <textarea class=\"form-control\" rows=\"3\" name=\"{{fl?.form_field}}\" [value]=\"fl?.default_value\"\r\n [(ngModel)]=\"fl.default_value\" #textArea=\"ngModel\" (blur)=\"chkFun(fl,fl.default_value);\"\r\n [ngClass]=\"{'uniqErrMsg': fl?.form_field == onErr}\"\r\n [required]=\"fl?.is_compulsory == '1'\"></textarea>\r\n </div>\r\n <div *ngIf=\"textArea.invalid && (textArea.dirty || textArea.touched)\"\r\n class=\"alert alert-danger ca\">\r\n <div *ngIf=\"textArea.errors.required\">\r\n {{fl.form_field_title}} is required.\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div\r\n *ngIf=\"fl?.form_field_typ == 'hd' || fl?.form_field_typ == 'hc' || fl?.form_field_typ == 'df' || fl?.form_field_typ == 'fk' || fl?.form_field_typ == 'ck' && fl?.is_hidden == 0\"\r\n [ngClass]=\"{'mt0': fl?.form_field_typ == 'hd'}\">\r\n <input type=\"hidden\" class=\"form-control\" name=\"{{fl?.form_field}}\" [value]=\"fl?.default_value\"\r\n [(ngModel)]=\"fl.default_value\" #hdf=\"ngModel\" />\r\n </div>\r\n <div class=\"form-group\" *ngIf=\"fl?.form_field_typ == 'sq' && fl?.is_hidden == 0\">\r\n <label class=\"col-md-3 control-label\"></label>\r\n <div class=\"col-md-9\">\r\n <div class=\"input-group w-100\">\r\n <input type=\"hidden\" class=\"form-control\" name=\"{{fl?.form_field}}\" [value]=\"fl?.default_value\"\r\n [(ngModel)]=\"fl.default_value\" />\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"form-group\" *ngIf=\"fl?.form_field_typ == 'tb' && fl?.is_hidden == 0\">\r\n <label class=\"col-md-3 control-label\">{{fl?.form_field_title}}\r\n <span class=\"text-danger\" *ngIf=\"fl.is_compulsory == 1\">*</span>\r\n </label>\r\n\r\n <div class=\"col-md-9\">\r\n <div class=\"input-group w-100\">\r\n <select class=\"form-control select\" name=\"{{fl?.form_field}}\" [value]=\"fl?.default_value\"\r\n [(ngModel)]=\"fl.default_value\" #tdf=\"ngModel\" [required]=\"fl?.is_compulsory == '1'\">\r\n <option *ngFor=\"let dynamic of sqlArray[fl.form_field]\" value=\"{{dynamic.value}}\">\r\n {{dynamic.label}}</option>\r\n </select>\r\n </div>\r\n <div *ngIf=\"tdf.invalid && (tdf.dirty || tdf.touched)\" class=\"alert alert-danger ca\">\r\n <div *ngIf=\"tdf.errors.required\">\r\n {{fl.form_field_title}} is required.\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"form-group\" *ngIf=\"fl?.form_field_typ == 'l' && fl?.is_hidden == 0\">\r\n <label class=\"col-md-3 control-label\">{{fl?.form_field_title}}\r\n <span class=\"text-danger\" *ngIf=\"fl.is_compulsory == 1\">*</span>\r\n </label>\r\n <div class=\"col-md-9\">\r\n <div class=\"input-group w-100\">\r\n <select class=\"form-control select\" name=\"{{fl?.form_field}}\" [value]=\"fl?.default_value\"\r\n [(ngModel)]=\"fl.default_value\" #lInput=\"ngModel\" [required]=\"fl?.is_compulsory == '1'\">\r\n <option *ngFor=\"let lov of fl.kv\" value=\"{{lov.k}}\">{{lov.v}}</option>\r\n </select>\r\n </div>\r\n <div *ngIf=\"lInput.invalid && (lInput.dirty || lInput.touched)\" class=\"alert alert-danger ca\">\r\n <div *ngIf=\"lInput.errors.required\">\r\n {{fl.form_field_title}} is required.\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"form-group\" *ngIf=\"fl?.form_field_typ == 'ld' && fl?.is_hidden == 0\">\r\n <label class=\"col-md-3 control-label\">{{fl?.form_field_title}}\r\n <span class=\"text-danger\" *ngIf=\"fl.is_compulsory == 1\">*</span>\r\n </label>\r\n <div class=\"col-md-9\">\r\n <div class=\"input-group w-100\">\r\n <select class=\"form-control select\" name=\"{{fl?.form_field}}\" [value]=\"fl?.default_value\"\r\n [(ngModel)]=\"fl.default_value\" #ldInput=\"ngModel\" [required]=\"fl?.is_compulsory == '1'\">\r\n <option *ngFor=\"let dynamic of sqlArray[fl.form_field]\" value=\"{{dynamic.value}}\">\r\n {{dynamic.label}}</option>\r\n </select>\r\n </div>\r\n <div *ngIf=\"ldInput.invalid && (ldInput.dirty || ldInput.touched)\" class=\"alert alert-danger ca\">\r\n <div *ngIf=\"ldInput.errors.required\">\r\n {{fl.form_field_title}} is required.\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"form-group\" *ngIf=\"fl?.form_field_typ == 's' && fl?.is_hidden == 0\">\r\n <label class=\"col-md-3 control-label\">{{fl?.form_field_title}}\r\n <span class=\"text-danger\" *ngIf=\"fl.is_compulsory == 1\">*</span>\r\n </label>\r\n <div class=\"col-md-9\">\r\n <div class=\"input-group w-100\">\r\n <select class=\"form-control select\" name=\"{{fl?.form_field}}\" [value]=\"fl?.default_value\"\r\n [(ngModel)]=\"fl.default_value\" (change)=\"chkFun(fl,fl.default_value)\" id=\"{{fl.column_key}}\"\r\n #sfi=\"ngModel\" [required]=\"fl?.is_compulsory == '1'\">\r\n <option *ngFor=\"let dynamic of sqlArray[fl.form_field]\" value=\"{{dynamic.value}}\">\r\n {{dynamic.label}}</option>\r\n </select>\r\n </div>\r\n <div *ngIf=\"sfi.invalid && (sfi.dirty || sfi.touched)\" class=\"alert alert-danger ca\">\r\n <div *ngIf=\"sfi.errors.required\">\r\n {{fl.form_field_title}} is required.\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"form-group\" *ngIf=\"fl?.form_field_typ == 'sb'\">\r\n <label class=\"col-md-3 control-label\">{{fl?.form_field_title}}\r\n <span class=\"text-danger\" *ngIf=\"fl.is_compulsory == 1\">*</span>\r\n </label>\r\n <div class=\"col-md-8\">\r\n <div class=\"input-group w-100\">\r\n <ng-select style=\"z-index: 5;\" [options]=\"sqlArray[fl.form_field]\" #sfi=\"ngModel\"\r\n [(ngModel)]=\"fl.default_value\" name=\"{{fl?.form_field}}\"\r\n (selected)=\"chkFun(fl,fl.default_value)\"\r\n (filterInputChanged)=\"loadSuggdata($event,fl.page_item_idn,fl.form_field)\">\r\n </ng-select>\r\n </div>\r\n <div *ngIf=\"sfi.invalid && (sfi.dirty || sfi.touched)\" class=\"alert alert-danger ca\">\r\n <div *ngIf=\"sfi.errors.required\">\r\n {{fl.form_field_title}} is required.\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"col-md-1\" *ngIf=\"fl?.form_field_icon == 'add'\">\r\n <button type=\"button\" class=\"btn btn-success btn-rounded\"><span><i\r\n class=\"fa fa-plus\"></i></span></button>\r\n\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"modal-footer\">\r\n <button type=\"submit\" class=\"btn btn-success\" (click)=\"submitForm(f,submitBtn)\" appAppNoDblClick\r\n #submitBtn>{{btnName}}</button>\r\n <button type=\"reset\" class=\"btn btn-danger\" (click)=\"reset(f)\" *ngIf=\"btnName == 'Add'\">Reset</button>\r\n </div>\r\n </form>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"modal\" id=\"deleteTermsmodal\" role=\"dialog\" aria-labelledby=\"smallModalHead\" aria-hidden=\"true\"\r\n data-backdrop=\"static\" data-keyboard=\"false\">\r\n <div class=\"modal-dialog modal-sm\">\r\n <div class=\"modal-content\">\r\n <div class=\"modal-header\">\r\n <button type=\"button\" class=\"close\" data-dismiss=\"modal\" (click)=\"closeNull();\" #deleteclsbtn>\r\n <span aria-hidden=\"true\">&times;</span>\r\n <span class=\"sr-only\">Close</span>\r\n </button>\r\n <h4 class=\"modal-title\" id=\"smallModalHead\">Warning</h4>\r\n </div>\r\n <div class=\"modal-body\">\r\n Are you sure want to delete term?\r\n </div>\r\n <div class=\"modal-footer\">\r\n <button type=\"button\" class=\"btn btn-default\" data-dismiss=\"modal\">Close</button>\r\n <button type=\"button\" class=\"btn btn-danger\" data-dismiss=\"modal\" (click)=\"DeleteTerms();\">Delete</button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"modal\" id=\"deletemodal\" role=\"dialog\" aria-labelledby=\"smallModalHead\" aria-hidden=\"true\"\r\n data-backdrop=\"static\" data-keyboard=\"false\">\r\n <div class=\"modal-dialog modal-sm\">\r\n <div class=\"modal-content\">\r\n <div class=\"modal-header\">\r\n <button type=\"button\" class=\"close\" data-dismiss=\"modal\" (click)=\"closeNull();\" #deleteclsbtn>\r\n <span aria-hidden=\"true\">&times;</span>\r\n <span class=\"sr-only\">Close</span>\r\n </button>\r\n <h4 class=\"modal-title\" id=\"smallModalHead\">Warning</h4>\r\n </div>\r\n <div class=\"modal-body\">\r\n Are you sure want to delete?\r\n </div>\r\n <div class=\"modal-footer\">\r\n <button type=\"button\" class=\"btn btn-default\" data-dismiss=\"modal\">Close</button>\r\n <button type=\"button\" class=\"btn btn-danger\" data-dismiss=\"modal\"\r\n (click)=\"deleteDataList();\">Delete</button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n\r\n <div class=\"modal\" id=\"modal_sys\" tabindex=\"-1\" role=\"dialog\" aria-labelledby=\"defModalHead\" aria-hidden=\"true\">\r\n <div class=\"modal-dialog\">\r\n <div class=\"modal-content\">\r\n <div class=\"modal-header\">\r\n <button type=\"button\" class=\"close\" data-dismiss=\"modal\">\r\n <span aria-hidden=\"true\">&times;</span>\r\n <span class=\"sr-only\">Close</span>\r\n </button>\r\n <h4 class=\"modal-title\" id=\"defModalHead\">Basic Modal</h4>\r\n </div>\r\n <div class=\"modal-body\">\r\n Some content in modal example\r\n </div>\r\n <div class=\"modal-footer\">\r\n <button type=\"button\" class=\"btn btn-default\" data-dismiss=\"modal\">Close</button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"modal\" id=\"rowGrpmodal\" tabindex=\"-2\" role=\"dialog\" aria-labelledby=\"rowGrpmodal\" aria-hidden=\"true\"\r\n data-backdrop=\"static\" data-keyboard=\"false\">\r\n <div class=\"modal-dialog\">\r\n <div class=\"modal-content\">\r\n <form class=\"form-horizontal\" #frg=\"ngForm\" name=\"appFormRowGrp\">\r\n <div class=\"modal-header\">\r\n <button type=\"button\" class=\"close\" data-dismiss=\"modal\" (click)=\"closeNull();\" #closebtn>\r\n <span aria-hidden=\"true\">&times;</span>\r\n <span class=\"sr-only\">Close</span>\r\n </button>\r\n <h4 class=\"modal-title\" id=\"rowGrpHead\">Row Group</h4>\r\n </div>\r\n <div class=\"modal-body\">\r\n <div class=\"row\">\r\n <div class=\"col-md-12\" style=\"padding-bottom: 10px;\">\r\n <label class=\"col-md-2 control-label\">Attributes</label>\r\n <label class=\"col-md-5 control-label\" style=\"padding-right: 90px;\">Row Display</label>\r\n <label class=\"col-md-5 control-label\" style=\"padding-right: 76px;\">Row Group </label>\r\n </div>\r\n <div class=\"col-md-12\">\r\n <div class=\"form-group\" *ngFor=\"let att of display_attr;\">\r\n <label class=\"col-md-2 control-label\">{{att.attr}}</label>\r\n <div class=\"col-md-5\">\r\n <div class=\"input-group w-100\">\r\n <select class=\"form-control\" name=\"dr_{{att.attr}}\" [disabled]=\"disableselc\"\r\n id=\"row_{{att.attr}}\" value=\"\" (change)=\"onChangeDispRow($event)\">\r\n <!-- [value]=\"att.display_row\" -->\r\n <option *ngFor=\"let dr of display_row;\" value=\"{{dr.idn}}\">{{dr.print}}</option>\r\n </select>\r\n </div>\r\n </div>\r\n <div class=\"col-md-5\">\r\n <div class=\"input-group w-100\">\r\n <select class=\"form-control\" name=\"grp_{{att.attr}}\" [disabled]=\"disableselc\"\r\n id=\"grp_{{att.attr}}\" [value]=\"att.display_group\" (change)=\"onChangeDispGrp($event)\">\r\n <option *ngFor=\"let dg of display_group;\" value=\"{{dg.idn}}\">{{dg.print}}</option>\r\n </select>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"modal-footer\">\r\n <button type=\"reset\" class=\"btn btn-danger\" data-dismiss=\"modal\">close</button>\r\n </div>\r\n </form>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n\r\n\r\n\r\n <div class=\"modal\" id=\"productDetailMapMD\" role=\"dialog\" aria-labelledby=\"smallModalHead\" aria-hidden=\"true\"\r\n data-backdrop=\"static\" data-keyboard=\"false\">\r\n <div class=\"modal-dialog modal-sm mwidth\">\r\n <div class=\"modal-content\">\r\n <div class=\"modal-header\">\r\n <button type=\"button\" class=\"close\" data-dismiss=\"modal\" (click)=\"closeNull();\" #productMapclsbtn>\r\n <span aria-hidden=\"true\">&times;</span>\r\n <span class=\"sr-only\" productDetailMapclsbtn>Close</span>\r\n </button>\r\n <h4 class=\"modal-title\" id=\"smallModalHead\">Product Mapping of&nbsp;{{producDetailModelTitle}}</h4>\r\n </div>\r\n <div class=\"modal-body\">\r\n <div class=\"table-responsive\">\r\n <table class=\"table table-bordered table-hover table-hover-cells\">\r\n <thead>\r\n <tr>\r\n <th>\r\n Name\r\n </th>\r\n <th>\r\n Value\r\n </th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <ng-container *ngFor=\"let key of attrDtl?.prpList\">\r\n <tr>\r\n <td>\r\n {{key.print}}\r\n </td>\r\n <td>\r\n <input type=\"text\" class=\"form-control\" [(ngModel)]=\"attrMappingDtl[key?.val]\" />\r\n </td>\r\n </tr>\r\n </ng-container>\r\n </tbody>\r\n </table>\r\n </div>\r\n <div class=\"modal-footer\">\r\n <button type=\"button\" class=\"btn btn-default\" data-dismiss=\"modal\" #productDetailMapclsbtn>Close</button>\r\n <button type=\"button\" class=\"btn btn-success\" data-dismiss=\"modal\"\r\n (click)=\"saveProductDetailMapping();\">Save</button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"modal\" id=\"docdeletemodal\" role=\"dialog\" aria-labelledby=\"smallModalHead\" aria-hidden=\"true\"\r\n data-backdrop=\"static\" data-keyboard=\"false\">\r\n <div class=\"modal-dialog modal-sm\">\r\n <div class=\"modal-content\">\r\n <div class=\"modal-header\">\r\n <button type=\"button\" class=\"close\" data-dismiss=\"modal\" (click)=\"closeNull();\" #deleteclsbtn>\r\n <span aria-hidden=\"true\">&times;</span>\r\n <span class=\"sr-only\">Close</span>\r\n </button>\r\n <h4 class=\"modal-title\" id=\"smallModalHead\">Warning</h4>\r\n </div>\r\n <div class=\"modal-body\">\r\n Are you sure want to delete?\r\n </div>\r\n <div class=\"modal-footer\">\r\n <button type=\"button\" class=\"btn btn-default\" data-dismiss=\"modal\">Close</button>\r\n <button type=\"button\" class=\"btn btn-danger\" data-dismiss=\"modal\" (click)=\"deleteDoc();\">Delete</button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"modal\" id=\"bnkdeletemodal\" role=\"dialog\" aria-labelledby=\"smallModalHead\" aria-hidden=\"true\"\r\n data-backdrop=\"static\" data-keyboard=\"false\">\r\n <div class=\"modal-dialog modal-sm\">\r\n <div class=\"modal-content\">\r\n <div class=\"modal-header\">\r\n <button type=\"button\" class=\"close\" data-dismiss=\"modal\" (click)=\"closeNull();\" #deleteclsbtn>\r\n <span aria-hidden=\"true\">&times;</span>\r\n <span class=\"sr-only\">Close</span>\r\n </button>\r\n <h4 class=\"modal-title\" id=\"smallModalHead\">Warning</h4>\r\n </div>\r\n <div class=\"modal-body\">\r\n Are you sure want to delete?\r\n </div>\r\n <div class=\"modal-footer\">\r\n <button type=\"button\" class=\"btn btn-default\" data-dismiss=\"modal\">Close</button>\r\n <button type=\"button\" class=\"btn btn-danger\" data-dismiss=\"modal\"\r\n (click)=\"DeleteLedgerBank()\">Delete</button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <button id=\"bnkdeletemodalbtn\" [hidden]=\"true\" data-toggle=\"modal\" data-target=\"#bnkdeletemodal\"></button>\r\n\r\n <button id=\"docdeletebtn\" [hidden]=\"true\" data-toggle=\"modal\" data-target=\"#docdeletemodal\"></button>\r\n <button id=\"deletebtn\" [hidden]=\"true\" data-toggle=\"modal\" data-target=\"#deletemodal\"></button>\r\n <button id=\"deleteTerms\" [hidden]=\"true\" data-toggle=\"modal\" data-target=\"#deleteTermsmodal\"></button>\r\n\r\n <button id=\"datamdbtn\" [hidden]=\"true\" data-toggle=\"modal\" data-target=\"#datamodal\"></button>\r\n <button id=\"clsMd\" [hidden]=\"true\" data-dismiss=\"modal\" data-target=\"#datamodal\"></button>\r\n <button id=\"sysmd\" [hidden]=\"true\" data-dismiss=\"modal\" data-target=\"#modal_sys\"></button>\r\n <button id=\"btnproductDetailMapMD\" [hidden]=\"true\" data-toggle=\"modal\" data-target=\"#productDetailMapMD\"></button>\r\n\r\n <button id=\"rowGrpbtn\" [hidden]=\"true\" data-dismiss=\"modal\" data-toggle=\"modal\" data-target=\"#rowGrpmodal\"></button>\r\n </div>", styles: [".btn-default.btn-on-1.active,.btn-default.btn-off-1.active{background-color:#3b5998;color:#fff}.btn.btn-xs,.btn-group-xs>.btn{font-size:12px;padding:5px 15px}.tbactive{background:#3B5998;color:#fff}input[type=radio]{display:none}.content-frame-body{padding:0 10px 10px!important}.content-frame-left{background:transparent!important;width:250px!important}.f-12{font-size:12px}.mt0{margin-bottom:0!important}.headingCls{padding:10px;background:#f0efef;font-size:14px;font-weight:400;margin-bottom:20px}.onHover{position:absolute;top:50%;transform:translate(-50%,-50%);left:50%;width:100%;text-align:center}.sortable-item{display:inline-block!important}.mds{border:1px solid #c9c9c9;height:265px;overflow:auto;margin-top:15px;width:175px;position:relative;right:-10px}.mds ul{padding-left:10px;list-style:none}.mds ul li{margin:5px 0;-webkit-user-select:all;user-select:all}.page-container .page-content .content-frame .content-frame-left{padding:0 10px!important}.mwidth{width:500px}.thcenter,.tdcenter{text-align:center}.Inactive{background-color:#ebebe0}btn-file>input{position:absolute;top:0;right:0;width:100%;height:100%;margin:0;font-size:23px;cursor:pointer;filter:alpha(opacity=0);opacity:0;direction:ltr;background-color:#32c5d2;border-color:#32c5d2}.btn.green{color:#fff;background:#3b5998!important;border-color:#3b5998!important}.btn.red{color:#fff;background-color:#e7505a;border-color:#e7505a}\n"] }]
2464
2464
  }], ctorParameters: function () { return [{ type: i1.Router }, { type: i1.ActivatedRoute }, { type: i2.ToastrService }, { type: i3.SystemServiceService }, { type: i4.UploadFileService }, { type: i5.NgxSpinnerService }, { type: i6.ContactServiceService }, { type: i7.CommanServiceService }]; }, propDecorators: { closebtn: [{
2465
2465
  type: ViewChild,
2466
2466
  args: ["closebtn"]
@@ -2480,4 +2480,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImpor
2480
2480
  type: ViewChild,
2481
2481
  args: [SortableComponent]
2482
2482
  }] } });
2483
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3ViZm9ybS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9lemxpYi9zcmMvbGliL3N5c3RlbS1tb2R1bGUvc3ViZm9ybS9zdWJmb3JtLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2V6bGliL3NyYy9saWIvc3lzdGVtLW1vZHVsZS9zdWJmb3JtL3N1YmZvcm0uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBVSxTQUFTLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3pFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNuRCxPQUFPLEVBQUUsTUFBTSxFQUFFLGNBQWMsRUFBVSxNQUFNLGlCQUFpQixDQUFDO0FBRWpFLE9BQU8sRUFBRSxhQUFhLEVBQUcsTUFBTSxZQUFZLENBQUM7QUFDNUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ2pELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUNoRCxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQztBQUNoRixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQUMxRSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSwrQ0FBK0MsQ0FBQztBQUN0Rix5Q0FBeUM7QUFDekMsT0FBTyxLQUFLLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUN6QyxxREFBcUQ7QUFDckQsc0VBQXNFO0FBQ3RFLHdDQUF3QztBQUN4QyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUMzRCx3RUFBd0U7QUFDeEUsaURBQWlEO0FBQ2pELDREQUE0RDtBQUM1RCxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSw2Q0FBNkMs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RCxTQUFTO3VCQUFDLG9CQUFvQjtnQkFDTSxzQkFBc0I7c0JBQTFELFNBQVM7dUJBQUMsd0JBQXdCO2dCQUNSLFlBQVk7c0JBQXRDLFNBQVM7dUJBQUMsY0FBYztnQkFDSixLQUFLO3NCQUF6QixTQUFTO3VCQUFDLFFBQVE7Z0JBQ1csaUJBQWlCO3NCQUE5QyxTQUFTO3VCQUFDLGlCQUFpQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0LCBWaWV3Q2hpbGQsIEVsZW1lbnRSZWYgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5pbXBvcnQgeyBIdHRwSGVhZGVycyB9IGZyb20gXCJAYW5ndWxhci9jb21tb24vaHR0cFwiO1xyXG5pbXBvcnQgeyBSb3V0ZXIsIEFjdGl2YXRlZFJvdXRlLCBQYXJhbXMgfSBmcm9tIFwiQGFuZ3VsYXIvcm91dGVyXCI7XHJcbmltcG9ydCB7IEZvcm1Db250cm9sLCBGb3JtR3JvdXAsIFZhbGlkYXRvcnMgfSBmcm9tIFwiQGFuZ3VsYXIvZm9ybXNcIjtcclxuaW1wb3J0IHsgVG9hc3RyU2VydmljZSAgfSBmcm9tIFwibmd4LXRvYXN0clwiO1xyXG5pbXBvcnQgeyBDb29raWUgfSBmcm9tIFwibmcyLWNvb2tpZXMvbmcyLWNvb2tpZXNcIjtcclxuaW1wb3J0IHsgTmd4U3Bpbm5lclNlcnZpY2UgfSBmcm9tIFwibmd4LXNwaW5uZXJcIjtcclxuaW1wb3J0IHsgU3lzdGVtU2VydmljZVNlcnZpY2UgfSBmcm9tIFwiLi4vc3lzdGVtLXNlcnZpY2Uvc3lzdGVtLXNlcnZpY2Uuc2VydmljZVwiO1xyXG5pbXBvcnQgeyBVcGxvYWRGaWxlU2VydmljZSB9IGZyb20gXCIuLi9zeXN0ZW0tc2VydmljZS91cGxvYWQtZmlsZS5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7IENvbnRhY3RTZXJ2aWNlU2VydmljZSB9IGZyb20gXCIuLi8uLi9jb250YWN0LXNlcnZpY2UvY29udGFjdC1zZXJ2aWNlLnNlcnZpY2VcIjtcclxuLy8gaW1wb3J0ICogYXMgQVdTIGZyb20gJ2F3cy1zZGsvZ2xvYmFsJztcclxuaW1wb3J0ICogYXMgUzMgZnJvbSBcImF3cy1zZGsvY2xpZW50cy9zM1wiO1xyXG4vLyBpbXBvcnQgKiBhcyBhd3NzZXJ2aWNlIGZyb20gXCJhd3Mtc2RrL2xpYi9zZXJ2aWNlXCI7XHJcbi8vIGltcG9ydCAqIGFzIENvZ25pdG9JZGVudGl0eSBmcm9tIFwiYXdzLXNkay9jbGllbnRzL2NvZ25pdG9pZGVudGl0eVwiO1xyXG4vLyBpbXBvcnQgeyBwcm9taXNlIH0gZnJvbSBcInByb3RyYWN0b3JcIjtcclxuaW1wb3J0IHsgU29ydGFibGVDb21wb25lbnQgfSBmcm9tIFwibmd4LWJvb3RzdHJhcC9zb3J0YWJsZVwiO1xyXG4vLyBpbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSB9IGZyb20gXCJAYW5ndWxhci9jb21waWxlci9zcmMvY29yZVwiO1xyXG4vLyBpbXBvcnQgeyBhc3luYyB9IGZyb20gXCJAYW5ndWxhci9jb3JlL3Rlc3RpbmdcIjtcclxuLy8gaW1wb3J0IHsgZGVib3VuY2UgfSBmcm9tIFwicnhqcy1jb21wYXQvb3BlcmF0b3IvZGVib3VuY2VcIjtcclxuaW1wb3J0IHsgQ29tbWFuU2VydmljZVNlcnZpY2UgfSBmcm9tIFwiLi4vLi4vY29tbWFuLXNlcnZpY2UvY29tbWFuLXNlcnZpY2Uuc2VydmljZVwiO1xyXG4vLyBpbXBvcnQgeyBzdHJpbmdpZnkgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZS9zcmMvcmVuZGVyMy91dGlsXCI7XHJcblxyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6IFwiYXBwLXN1YmZvcm1cIixcclxuICB0ZW1wbGF0ZVVybDogXCIuL3N1YmZvcm0uY29tcG9uZW50Lmh0bWxcIixcclxuICBzdHlsZVVybHM6IFtcIi4vc3ViZm9ybS5jb21wb25lbnQuY3NzXCJdXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBTdWJmb3JtQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcclxuICBAVmlld0NoaWxkKFwiY2xvc2VidG5cIikgY2xvc2VidG46IEVsZW1lbnRSZWY7XHJcbiAgQFZpZXdDaGlsZChcImZpbGVPcHRNYXBNRGNsc2J0blwiKSBmaWxlT3B0TWFwTURjbHNidG46IEVsZW1lbnRSZWY7XHJcbiAgQFZpZXdDaGlsZChcInByb2R1Y3REZXRhaWxNYXBjbHNidG5cIikgcHJvZHVjdERldGFpbE1hcGNsc2J0bjogRWxlbWVudFJlZjtcclxuICBAVmlld0NoaWxkKFwiZGVsZXRlY2xzYnRuXCIpIGRlbGV0ZWNsc2J0bjogRWxlbWVudFJlZjtcclxuICBAVmlld0NoaWxkKFwiaW5wdXRzXCIpIGlucHV0OiBFbGVtZW50UmVmO1xyXG4gIEBWaWV3Q2hpbGQoU29ydGFibGVDb21wb25lbnQpIHNvcnRhYmxlQ29tcG9uZW50OiBTb3J0YWJsZUNvbXBvbmVudDtcclxuXHJcbiAgLy8jcmVnaW9uIHZhcnMgYW5kIG9iaiBkZWNsYXJhdGlvbiBzZWN0aW9uXHJcbiAgY0R0ID0gbmV3IERhdGUoKTtcclxuXHJcbiAgZm9ybUZpbGRzID0gW107XHJcbiAgZGF0YWxpc3QgPSBbXTtcclxuICBhY3Rpb25zID0gW107XHJcbiAgbG92cyA9IFtdO1xyXG4gIGFkZE5ldzogYW55ID0gW107XHJcbiAgdGJsSCA9IFtdO1xyXG4gIHRibERlc2MgPSBbXTtcclxuICBuYXZpZ2F0aW9uID0gW107XHJcbiAgY0xpbmsgPSAwO1xyXG4gIGdsYk9iaiA9IHt9O1xyXG5cclxuICBzaG93YXJyO1xyXG4gIHBhZ2VJbmZvO1xyXG4gIGhlYWRlcjtcclxuICBidG5OYW1lO1xyXG4gIHBpZDtcclxuICBzZWFyY2hGO1xyXG4gIHdocks7XHJcbiAgd2hyVjtcclxuICBzdWJGcm1XaztcclxuICBzdWJGcm1XdjtcclxuICBuYXZmb3JtO1xyXG4gIG9uRXJyO1xyXG4gIGhvdmVyZWRJO1xyXG4gIHRiQ2VsbDtcclxuICB0aXRsZTtcclxuICBwa2Y7XHJcbiAgY3VybDtcclxuICB1aUdycExpc3Q7XHJcbiAgdWlHcnBMaXN0RHRsO1xyXG4gIGF0dHJDTGlzdER0bCA9IFtdO1xyXG4gIGF0dHJRTGlzdER0bCA9IFtdO1xyXG5cclxuICBkZnY7XHJcbiAgY2k7XHJcbiAgZGlzYWJsZXNlbGMgPSBmYWxzZTtcclxuXHJcbiAgZGF0YUR0bGlzdCA9IFtdO1xyXG4gIGRhdGFEdGwgPSBbXTtcclxuICBpdGVtU3RyaW5nc0xlZnQ6IGFueSA9IFtdO1xyXG5cclxuICBhZGRGcm1ObWU7XHJcbiAgZG9jdW1lbnRVcGxvYWRMaXN0O1xyXG4gIGRvY3VtZW50VXBsb2FkRHRsO1xyXG4gIHNlbGVjdGVkRmlsZXM7XHJcbiAgYXBwbGljYXRpb25MaXN0ID0gW107XHJcbiAgdXNlckR0bHMgPSBbXTtcclxuICBtb2R1bGVEdGxzID0gW107XHJcbiAgbWVudUxpc3QgPSBbXTtcclxuICB1c2VyUmlnaHRzTWVudUxpc3QgPSBbXTtcclxuICB0b3RNZW51O1xyXG4gIHN1Yk1lbnVJZG5zID0gW107XHJcbiAgd2hlcmVNYXAgPSB7fTtcclxuICBwYXJhT2JqID0ge307XHJcbiAgY3Vyck9iaiA9IHt9O1xyXG4gIHNxbEFycmF5ID0ge307XHJcbiAgczNkZXRhaWxzID0ge307XHJcblxyXG4gIGRvY3R5cGU7XHJcbiAgcGsgPSB0aGlzLnJvdXRlLnNuYXBzaG90LnBhcmFtTWFwLmdldChcInN1YmtcIik7XHJcbiAgcHYgPSB0aGlzLnJvdXRlLnNuYXBzaG90LnBhcmFtTWFwLmdldChcInN1YnZcIik7XHJcblxyXG4gIEdGT0xERVIgPSBcImV6Yml6LzIwNS9kb2MvXCI7XHJcbiAgR0JVQ0tFVCA9IFwicXNcIjtcclxuICBmaWxlVXBsb2FkcyA9IFtdO1xyXG4gIG5hbWVBdHRyID0gW107XHJcblxyXG4gIGZpbGU7XHJcblxyXG4gIHJlc0ZpbGVzO1xyXG4gIGltYWdlVXJsTHN0ID0gW107XHJcbiAgcCA9IDE7XHJcbiAgcGFnZVNpemUgPSAxMDtcclxuICBvcmRlciA9IFwiXCI7XHJcbiAgZXZlQyA9IFwiZmEtZXllLXNsYXNoXCI7XHJcbiAgZXN0c3QgPSBmYWxzZTtcclxuICBpbnB1dHR5cGUgPSBcInBhc3N3b3JkXCI7XHJcblxyXG4gIHJldmVyc2UgPSB0cnVlO1xyXG4gIHN1YmZvcm0gPSBmYWxzZTtcclxuICB1c3Jpc0V4aXN0ID0gZmFsc2U7XHJcbiAgaWNvO1xyXG5cclxuICBkaXNwbGF5X2dyb3VwID0gW107XHJcbiAgZGlzcGxheV9yb3cgPSBbXTtcclxuICBkaXNwbGF5X2F0dHIgPSBbXTtcclxuICBjb2xWYWxzID0gW107XHJcblxyXG4gIHRlcm1zTGlzdCA9IFtdO1xyXG4gIGFwcGxVc2VyTGlzdCA9IFtdO1xyXG4gIHJvdXRoZXJEb2NcclxuICBkYXRhVHJuc0xpc3QgPSBbXTtcclxuICBieXJPYmogPSB7fTtcclxuICB1c2VyRGV0YWlscyA9IFtdO1xyXG4gIHBhZ2VEZWZpbmF0aW9uUHN3ZENuZztcclxuICBwYWdlX3R5cDtcclxuICBhdHRyRHRsO1xyXG4gIGF0dHJNYXBwaW5nRHRsO1xyXG4gIGF0dHJfZHRsX2lkbjtcclxuICBvdXRNYXBwaW5nTGlzdCA9IFtdO1xyXG4gIGF0dHJMaXN0ID0gW107XHJcbiAgY29udGFjdE5hbWU7XHJcbiAgcHJvZHVjRGV0YWlsTW9kZWxUaXRsZTtcclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHB1YmxpYyByb3V0ZXI6IFJvdXRlcixcclxuICAgIHByaXZhdGUgcm91dGU6IEFjdGl2YXRlZFJvdXRlLFxyXG4gICAgcHJpdmF0ZSB0b2FzdHI6IFRvYXN0clNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHNzOiBTeXN0ZW1TZXJ2aWNlU2VydmljZSxcclxuICAgIHByaXZhdGUgdXBsb2FkU2VydmljZTogVXBsb2FkRmlsZVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHNwaW5uZXJTZXJ2aWNlOiBOZ3hTcGlubmVyU2VydmljZSAsXHJcbiAgICBwdWJsaWMgY3M6IENvbnRhY3RTZXJ2aWNlU2VydmljZSxcclxuICAgIHB1YmxpYyBjbTogQ29tbWFuU2VydmljZVNlcnZpY2VcclxuICApIHsgfVxyXG5cclxuICBnZXRQYWdlRGVmaW5hdGlvbigpIHtcclxuICAgIHRoaXMucm91dGhlckRvYyA9IFwiXCI7XHJcbiAgICB0aGlzLmRhdGFsaXN0ID0gW107XHJcbiAgICB0aGlzLndoZXJlTWFwID0gW107XHJcbiAgICBsZXQgZnJtbm1lID0gdGhpcy5yb3V0ZS5zbmFwc2hvdC5wYXJhbXNbXCJpdG1mb3JtXCJdIHx8IFwiXCI7XHJcbiAgICBsZXQgZG9jdHlwID0gdGhpcy5yb3V0ZS5zbmFwc2hvdC5wYXJhbXNbXCJkb2N0eXBcIl0gfHwgXCJcIjtcclxuICAgIGRlYnVnZ2VyXHJcbiAgICB0aGlzLnNwaW5uZXJTZXJ2aWNlLnNob3coKTtcclxuICAgIGlmICh0aGlzLnBrICE9IG51bGwgJiYgdGhpcy5zdWJGcm1XayAhPSBudWxsKSB7XHJcbiAgICAgIC8vc3ViRnJtV2sgPT0gbmF2aWdhdGlvbiBwYW5lbCdzIG1lbnVcclxuICAgICAgaWYgKHRoaXMuc3ViRnJtV3YgIT0gXCJBTExcIikge1xyXG4gICAgICAgIHRoaXMucGFyYU9ialtcIndoZXJlS2V5c1wiXSA9IHRoaXMucGsgKyBcIn5cIiArIHRoaXMuc3ViRnJtV2s7XHJcbiAgICAgICAgdGhpcy5wYXJhT2JqW1wid2hlcmVWbHVzXCJdID0gXCJcIiArIHRoaXMucHYgKyBcIn5cIiArIHRoaXMuc3ViRnJtV3Y7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5wYXJhT2JqW1wid2hlcmVLZXlzXCJdID0gdGhpcy5waztcclxuICAgICAgICB0aGlzLnBhcmFPYmpbXCJ3aGVyZVZsdXNcIl0gPSBcIlwiICsgdGhpcy5wdjtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLndoZXJlTWFwW3RoaXMuc3ViRnJtV2tdID0gdGhpcy5zdWJGcm1XdjtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMucGFyYU9ialtcIndoZXJlS2V5c1wiXSA9IHRoaXMucGs7XHJcbiAgICAgIHRoaXMucGFyYU9ialtcIndoZXJlVmx1c1wiXSA9IFwiXCIgKyB0aGlzLnB2O1xyXG4gICAgICB0aGlzLndoZXJlTWFwW3RoaXMucGtdID0gdGhpcy5wdjtcclxuICAgIH1cclxuICAgIHRoaXMuaGVhZGVyW1wibWV0aG9kXCJdID0gXCJsb2FkTGlzdFwiO1xyXG4gICAgLy8gaWYgKHRoaXMucGFnZUluZm8gIT0gbnVsbCkge1xyXG4gICAgLy8gICB0aGlzLnBhZ2VfdHlwPXRoaXMucGFnZUluZm8ucGFnZV90eXA7XHJcbiAgICAvLyAgIHZhciBwYWdlVFAgPSB0aGlzLnBhZ2VJbmZvLnBhZ2VfdHlwO1xyXG4gICAgLy8gICBpZiAocGFnZVRQID09IFwianNvbkZvcm1cIikge1xyXG4gICAgLy8gICAgIHRoaXMucGFyYU9ialtcIndoZXJlS2V5c1wiXSA9IHRoaXMucGFnZUluZm8ud2hlcmVfY2xhdXNlO1xyXG4gICAgLy8gICAgIHRoaXMucGFyYU9ialtcIndoZXJlVmx1c1wiXSA9IHRoaXMud2hlcmVNYXBbdGhpcy5wYWdlSW5mby53aGVyZV9jbGF1c2VdO1xyXG4gICAgLy8gICB9XHJcbiAgICAvLyB9XHJcbiAgICBjb25zb2xlLmxvZyhKU09OLnN0cmluZ2lmeSh0aGlzLmhlYWRlcikpO1xyXG4gICAgY29uc29sZS5sb2coSlNPTi5zdHJpbmdpZnkodGhpcy5wYXJhT2JqKSk7XHJcbiAgICBsZXQgb3B0aW9ucyA9ICh7IGhlYWRlcnM6IG5ldyBIdHRwSGVhZGVycyh0aGlzLmhlYWRlcikgfSk7XHJcbiAgICB0aGlzLnNzXHJcbiAgICAgIC5nZXREYXRhKHRoaXMucGFyYU9iaiwgb3B0aW9ucylcclxuICAgICAgLnRoZW4oKHJlc3BvbnNlOiBhbnkpID0+IHtcclxuICAgICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzID09IFwiU1VDQ0VTU1wiKSB7XHJcbiAgICAgICAgICBkZWJ1Z2dlcjtcclxuICAgICAgICAgIGNvbnNvbGUubG9nKHJlc3BvbnNlKTtcclxuICAgICAgICAgIHRoaXMuc3Bpbm5lclNlcnZpY2UuaGlkZSgpO1xyXG4gICAgICAgICAgdGhpcy50YmxIID0gcmVzcG9uc2UuZGF0YUhlYWRlcjtcclxuICAgICAgICAgIHRoaXMudGJsRGVzYyA9IHJlc3BvbnNlLmRhdGFIZWFkZXJQcmludDtcclxuICAgICAgICAgIHRoaXMuYWRkTmV3ID0gcmVzcG9uc2UuYnV0dG9uc1swXTtcclxuICAgICAgICAgIHRoaXMucGFnZUluZm8gPSByZXNwb25zZS5wYWdlSW5mbztcclxuICAgICAgICAgIHRoaXMucGtmID0gcmVzcG9uc2UucGFnZUluZm8ucHJpbWFyeV9rZXlfZmllbGQ7XHJcbiAgICAgICAgICB0aGlzLmRhdGFsaXN0ID0gcmVzcG9uc2UuZGF0YUxpc3Q7XHJcbiAgICAgICAgICB0aGlzLmFjdGlvbnMgPSByZXNwb25zZS5hY3Rpb25zO1xyXG4gICAgICAgICAgdGhpcy5uYXZpZ2F0aW9uID0gcmVzcG9uc2UubmF2aWdhdGlvbjtcclxuXHJcbiAgICAgICAgICBpZiAodGhpcy5wYXJhT2JqW1wid2hlcmVLZXlzXCJdID09IFwibm1lX2lkblwiIHx8IHRoaXMucGFyYU9ialtcIndoZXJlS2V5c1wiXSA9PSBcImxlZGdlcl9pZG5cIikge1xyXG4gICAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICAgKHRoaXMucGFyYU9ialtcImZvcm1ObWVcIl0gPT0gXCJuYW1lTWFzdGVyXCIgfHwgdGhpcy5wYXJhT2JqW1wiZm9ybU5tZVwiXSA9PSBcImxlZGdlck1hc3RlclwiIHx8IHRoaXMucGFyYU9ialtcImZvcm1ObWVcIl0gPT0gXCJhY2NOYW1lTWFzdGVyXCIpICYmXHJcbiAgICAgICAgICAgICAgdGhpcy5kYXRhbGlzdC5sZW5ndGggPT0gMVxyXG4gICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICBsZXQgZHREdGwgPSB0aGlzLmRhdGFsaXN0WzBdO1xyXG4gICAgICAgICAgICAgIGxldCBubWUgPSBkdER0bFtcIm5tZVwiXSB8fCBcIlwiO1xyXG4gICAgICAgICAgICAgIGxldCBwbm1lID0gZHREdGxbXCJwZXJzb25fbm1lXCJdIHx8IFwiXCI7XHJcbiAgICAgICAgICAgICAgaWYgKG5tZSAhPSBcIlwiIHx8IHBubWUgIT0gXCJcIikge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jb250YWN0TmFtZSA9IG5tZSArIFwiL1wiICsgcG5tZTtcclxuICAgICAgICAgICAgICAgIHRoaXMuY29udGFjdE5hbWUgPSB0aGlzLmNvbnRhY3ROYW1lLnRvVXBwZXJDYXNlKCk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmNvbnRhY3ROYW1lID0gXCJcIjtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICBpZiAoZG9jdHlwICE9ICcnKSB7XHJcbiAgICAgICAgICAgIHRoaXMucm91dGhlckRvYyA9IGRvY3R5cDtcclxuICAgICAgICAgICAgdGhpcy5uYXZpZ2F0aW9uLmZvckVhY2goKGVsZW1lbnQsIGluZGV4KSA9PiB7XHJcbiAgICAgICAgICAgICAgaWYgKGVsZW1lbnQuZm9ybV9maWVsZCA9PSAndXBsb2FkRG9jdW1lbnQnKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm5hdmlnYXRpb25GdW4oZWxlbWVudCwgaW5kZXgpO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5zcGlubmVyU2VydmljZS5oaWRlKCk7XHJcbiAgICAgICAgICB0aGlzLnRvYXN0ci5lcnJvcihyZXNwb25zZS5tZXNzYWdlKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pXHJcbiAgICAgIC5jYXRjaCgoZXJyOiBhbnkpID0+IHtcclxuICAgICAgICB0aGlzLnNwaW5uZXJTZXJ2aWNlLmhpZGUoKTtcclxuICAgICAgICB0aGlzLnRvYXN0ci5lcnJvcihlcnIubWVzc2FnZSk7XHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgZ2V0Um93R3JvdXAoZGlzcGxheUF0dHJJZG4pIHtcclxuICAgIGxldCByZXFPYmogPSB7fTtcclxuICAgIHJlcU9ialtcImRpc3BsYXlBdHRySWRuXCJdID0gZGlzcGxheUF0dHJJZG47XHJcbiAgICB0aGlzLmhlYWRlcltcIm1ldGhvZFwiXSA9IFwiZ2V0UGFnZURpc3BsYXlBdHRyXCI7XHJcbiAgICBsZXQgb3B0aW9ucyA9ICh7IGhlYWRlcnM6IG5ldyBIdHRwSGVhZGVycyh0aGlzLmhlYWRlcikgfSk7XHJcbiAgICB0aGlzLnNzXHJcbiAgICAgIC5nZXRSb3dHcm91cChyZXFPYmosIG9wdGlvbnMsIFwiYWRtaW4vbWVudVJpZ2h0c1wiKVxyXG4gICAgICAudGhlbigocmVzcG9uc2U6IGFueSkgPT4ge1xyXG4gICAgICAgIGlmIChyZXNwb25zZS5zdGF0dXMgPT0gXCJTVUNDRVNTXCIpIHtcclxuICAgICAgICAgIHRoaXMuZGlzcGxheV9ncm91cCA9IHJlc3BvbnNlLnJlc3VsdC5kaXNwbGF5X2dyb3VwO1xyXG4gICAgICAgICAgdGhpcy5kaXNwbGF5X3JvdyA9IHJlc3BvbnNlLnJlc3VsdC5kaXNwbGF5X3JvdztcclxuICAgICAgICAgIHRoaXMuZGlzcGxheV9hdHRyID0gcmVzcG9uc2UucmVzdWx0LmRpc3BsYXlfYXR0cjtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy50b2FzdHIuZXJyb3IocmVzcG9uc2UubWVzc2FnZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KVxyXG4gICAgICAuY2F0Y2goKGVycjogYW55KSA9PiB7XHJcbiAgICAgICAgdGhpcy50b2FzdHIuZXJyb3IoZXJyLm1lc3NhZ2UpO1xyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIFNhdmVSb3dHcm91cChkaXNwbGF5QXR0cklkbiwgY29sbmFtZSwgY29sVmFscykge1xyXG4gICAgdGhpcy5zcGlubmVyU2VydmljZS5zaG93KCk7XHJcbiAgICBsZXQgcmVxT2JqID0ge307XHJcbiAgICByZXFPYmpbXCJkaXNwbGF5QXR0cklkblwiXSA9IGRpc3BsYXlBdHRySWRuO1xyXG4gICAgcmVxT2JqW1wiY29sdW1uTmFtZVwiXSA9IGNvbG5hbWU7XHJcbiAgICByZXFPYmpbXCJjb2x1bW5WYWx1ZVwiXSA9IGNvbFZhbHM7XHJcbiAgICB0aGlzLmhlYWRlcltcIm1ldGhvZFwiXSA9IFwic2F2ZVBhZ2VEaXNwbGF5QXR0clwiO1xyXG4gICAgbGV0IG9wdGlvbnMgPSAoeyBoZWFkZXJzOiBuZXcgSHR0cEhlYWRlcnModGhpcy5oZWFkZXIpIH0pO1xyXG4gICAgdGhpcy5zc1xyXG4gICAgICAuZ2V0Um93R3JvdXAocmVxT2JqLCBvcHRpb25zLCBcImFkbWluL21lbnVSaWdodHNcIilcclxuICAgICAgLnRoZW4oKHJlc3BvbnNlOiBhbnkpID0+IHtcclxuICAgICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzID09IFwiU1VDQ0VTU1wiKSB7XHJcbiAgICAgICAgICB0aGlzLmRpc2FibGVzZWxjID0gZmFsc2U7XHJcbiAgICAgICAgICB0aGlzLnNwaW5uZXJTZXJ2aWNlLmhpZGUoKTtcclxuICAgICAgICAgIHRoaXMudG9hc3RyLnN1Y2Nlc3MocmVzcG9uc2UubWVzc2FnZSk7XHJcbiAgICAgICAgICB0aGlzLmNvbFZhbHMgPSBbXTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5zcGlubmVyU2VydmljZS5oaWRlKCk7XHJcbiAgICAgICAgICB0aGlzLnRvYXN0ci5lcnJvcihyZXNwb25zZS5tZXNzYWdlKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pXHJcbiAgICAgIC5jYXRjaCgoZXJyOiBhbnkpID0+IHtcclxuICAgICAgICB0aGlzLnNwaW5uZXJTZXJ2aWNlLmhpZGUoKTtcclxuICAgICAgICB0aGlzLnRvYXN0ci5lcnJvcihlcnIubWVzc2FnZSk7XHJcbiAgICAgIH0pO1xyXG4gIH1cclxuICBvbkNoYW5nZURpc3BSb3coZSkge1xyXG4gICAgdGhpcy5kaXNhYmxlc2VsYyA9IHRydWU7XHJcbiAgICBmb3IgKHZhciBrZXkgaW4gZS50YXJnZXQuZm9ybS5lbGVtZW50cykge1xyXG4gICAgICBpZiAoXHJcbiAgICAgICAgZS50YXJnZXQuZm9ybS5lbGVtZW50c1trZXldLmlkICE9IFwiXCIgJiZcclxuICAgICAgICBlLnRhcmdldC5mb3JtLmVsZW1lbnRzW2tleV0uaWQgIT0gdW5kZWZpbmVkICYmXHJcbiAgICAgICAgZS50YXJnZXQuZm9ybS5lbGVtZW50c1trZXldLmlkICE9IFwidW5kZWZpbmVkXCJcclxuICAgICAgKVxyXG4gICAgICAgIGlmIChlLnRhcmdldC5mb3JtLmVsZW1lbnRzW2tleV0uaWQuc3RhcnRzV2l0aChcInJvd19cIikpIHtcclxuICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgZS50YXJnZXQuZm9ybS5lbGVtZW50c1trZXldLnZhbHVlICE9IFwiXCIgJiZcclxuICAgICAgICAgICAgZS50YXJnZXQuZm9ybS5lbGVtZW50c1trZXldLnZhbHVlICE9IHVuZGVmaW5lZCAmJlxyXG4gICAgICAgICAgICBlLnRhcmdldC5mb3JtLmVsZW1lbnRzW2tleV0udmFsdWUgIT0gXCJ1bmRlZmluZWRcIlxyXG4gICAgICAgICAgKVxyXG4gICAgICAgICAgICB0aGlzLmNvbFZhbHMucHVzaChlLnRhcmdldC5mb3JtLmVsZW1lbnRzW2tleV0udmFsdWUpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHRoaXMuU2F2ZVJvd0dyb3VwKHRoaXMucGlkLCBcImRpc3BsYXlfcm93XCIsIHRoaXMuY29sVmFscyk7XHJcbiAgfVxyXG5cclxuICBvbkNoYW5nZURpc3BHcnAoZSkge1xyXG4gICAgdGhpcy5kaXNhYmxlc2VsYyA9IHRydWU7XHJcbiAgICBmb3IgKHZhciBrZXkgaW4gZS50YXJnZXQuZm9ybS5lbGVtZW50cykge1xyXG4gICAgICBpZiAoXHJcbiAgICAgICAgZS50YXJnZXQuZm9ybS5lbGVtZW50c1trZXldLmlkICE9IFwiXCIgJiZcclxuICAgICAgICBlLnRhcmdldC5mb3JtLmVsZW1lbnRzW2tleV0uaWQgIT0gdW5kZWZpbmVkICYmXHJcbiAgICAgICAgZS50YXJnZXQuZm9ybS5lbGVtZW50c1trZXldLmlkICE9IFwidW5kZWZpbmVkXCJcclxuICAgICAgKVxyXG4gICAgICAgIGlmIChlLnRhcmdldC5mb3JtLmVsZW1lbnRzW2tleV0uaWQuc3RhcnRzV2l0aChcImdycF9cIikpIHtcclxuICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgZS50YXJnZXQuZm9ybS5lbGVtZW50c1trZXldLnZhbHVlICE9IFwiXCIgJiZcclxuICAgICAgICAgICAgZS50YXJnZXQuZm9ybS5lbGVtZW50c1trZXldLnZhbHVlICE9IHVuZGVmaW5lZCAmJlxyXG4gICAgICAgICAgICBlLnRhcmdldC5mb3JtLmVsZW1lbnRzW2tleV0udmFsdWUgIT0gXCJ1bmRlZmluZWRcIlxyXG4gICAgICAgICAgKVxyXG4gICAgICAgICAgICB0aGlzLmNvbFZhbHMucHVzaChlLnRhcmdldC5mb3JtLmVsZW1lbnRzW2tleV0udmFsdWUpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHRoaXMuU2F2ZVJvd0dyb3VwKHRoaXMucGlkLCBcImRpc3BsYXlfZ3JvdXBcIiwgdGhpcy5jb2xWYWxzKTtcclxuICB9XHJcbiAgZ2V0Rm9ybUZpZWxkcygpIHtcclxuICAgIHRoaXMuc3Bpbm5lclNlcnZpY2Uuc2hvdygpO1xyXG4gICAgdGhpcy5kZnYgPSBudWxsO1xyXG4gICAgdGhpcy5wYXJhT2JqW1wid2hlcmVLZXlzXCJdID0gdGhpcy5waztcclxuICAgIHRoaXMucGFyYU9ialtcIndoZXJlVmx1c1wiXSA9IHRoaXMucHY7XHJcbiAgICB0aGlzLmhlYWRlcltcIm1ldGhvZFwiXSA9IFwibG9hZEFkZEVkaXRcIjtcclxuICAgIGNvbnNvbGUubG9nKHRoaXMucGFyYU9iaik7XHJcbiAgICBjb25zb2xlLmxvZyh0aGlzLmhlYWRlcik7XHJcbiAgICBsZXQgb3B0aW9ucyA9ICh7IGhlYWRlcnM6IG5ldyBIdHRwSGVhZGVycyh0aGlzLmhlYWRlcikgfSk7XHJcbiAgICB0aGlzLnNzXHJcbiAgICAgIC5nZXRGb3JtRih0aGlzLnBhcmFPYmosIG9wdGlvbnMpXHJcbiAgICAgIC50aGVuKChyZXNwb25zZTogYW55KSA9PiB7XHJcbiAgICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1cyA9PSBcIlNVQ0NFU1NcIiAmJiByZXNwb25zZS5tZXNzYWdlICE9IFwiU1VDQ0VTU1wiKSB7XHJcbiAgICAgICAgICB0aGlzLnRvYXN0ci5lcnJvcihyZXNwb25zZS5tZXNzYWdlKTtcclxuICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1cyA9PSBcIlNVQ0NFU1NcIikge1xyXG4gICAgICAgICAgY29uc29sZS5sb2cocmVzcG9uc2UpO1xyXG4gICAgICAgICAgdGhpcy5mb3JtRmlsZHMgPSByZXNwb25zZS5mb3JtRmllbGRzO1xyXG4gICAgICAgICAgdGhpcy5zcGlubmVyU2VydmljZS5oaWRlKCk7XHJcbiAgICAgICAgICB0aGlzLmZvcm1GaWxkcy5mb3JFYWNoKGVsZW1lbnQgPT4ge1xyXG4gICAgICAgICAgICBpZiAoZWxlbWVudC5mb3JtX2ZpZWxkX3R5cCA9PSBcInRiXCIpIHtcclxuICAgICAgICAgICAgICB0aGlzLmdldExvdkxpc3QoZWxlbWVudC5mb3JtX2ZpZWxkLCBlbGVtZW50LnBhZ2VfaXRlbV9pZG4pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChlbGVtZW50LmZvcm1fZmllbGRfdHlwID09IFwic1wiKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5nZXRMb3ZMaXN0KGVsZW1lbnQuZm9ybV9maWVsZCwgZWxlbWVudC5wYWdlX2l0ZW1faWRuKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoZWxlbWVudC5mb3JtX2ZpZWxkX3R5cCA9PSBcImhkXCIpIHtcclxuICAgICAgICAgICAgICBlbGVtZW50LmRlZmF1bHRfdmFsdWUgPSB0aGlzLndoZXJlTWFwW2VsZW1lbnQuZm9ybV9maWVsZF07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKGVsZW1lbnQuZm9ybV9maWVsZF90eXAgPT0gXCJma1wiKSB7XHJcbiAgICAgICAgICAgICAgZWxlbWVudC5kZWZhdWx0X3ZhbHVlID0gdGhpcy5yb3V0ZS5zbmFwc2hvdC5wYXJhbU1hcC5nZXQoXCJzdWJ2XCIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChlbGVtZW50LmZvcm1fZmllbGRfdHlwID09IFwiY2tcIikge1xyXG4gICAgICAgICAgICAgIGVsZW1lbnQuZGVmYXVsdF92YWx1ZSA9IHRoaXMud2hlcmVNYXBbZWxlbWVudC5jb2x1bW5fa2V5XTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoZWxlbWVudC5mb3JtX2ZpZWxkX3R5cCA9PSBcInNxXCIpIHtcclxuICAgICAgICAgICAgICB0aGlzLmdldFNlcXVlbmNlKGVsZW1lbnQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChlbGVtZW50LmR0YV90eXAgPT0gXCJzYVwiKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5nZXRMb3ZMaXN0KGVsZW1lbnQuZm9ybV9maWVsZCwgZWxlbWVudC5wYWdlX2l0ZW1faWRuKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoZWxlbWVudC5kdGFfdHlwID09IFwic3JcIikge1xyXG4gICAgICAgICAgICAgIHRoaXMuZ2V0TG92TGlzdChlbGVtZW50LmZvcm1fZmllbGQsIGVsZW1lbnQucGFnZV9pdGVtX2lkbik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLnNwaW5uZXJTZXJ2aWNlLmhpZGUoKTtcclxuICAgICAgICAgIHRoaXMudG9hc3RyLmVycm9yKHJlc3BvbnNlLm1lc3NhZ2UpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSlcclxuICAgICAgLmNhdGNoKChlcnI6IGFueSkgPT4ge1xyXG4gICAgICAgIHRoaXMuc3Bpbm5lclNlcnZpY2UuaGlkZSgpO1xyXG4gICAgICAgIHRoaXMudG9hc3RyLmVycm9yKGVyci5tZXNzYWdlKTtcclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuICB1c2VyQWN0aW9uKHVhLCBjLCBhLCBpKSB7XHJcbiAgICBkZWJ1Z2dlclxyXG4gICAgaWYgKGMudHJpbSgpID09IFwiYWRkXCIpIHtcclxuICAgICAgdGhpcy5zcGlubmVyU2VydmljZS5zaG93KCk7XHJcbiAgICAgIHRoaXMuZm9ybUZpbGRzID0gW107XHJcbiAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiZGF0YW1kYnRuXCIpLmNsaWNrKCk7XHJcbiAgICAgIHRoaXMuZ2V0Rm9ybUZpZWxkcygpO1xyXG4gICAgICB0aGlzLmJ0bk5hbWUgPSBcIkFkZFwiO1xyXG4gICAgfSBlbHNlIGlmICh1YSAmJiBjLnRyaW0oKSA9PSBcImVkaXRcIikge1xyXG4gICAgICB0aGlzLmdsYk9iaiA9IHVhO1xyXG4gICAgICB0aGlzLnNwaW5uZXJTZXJ2aWNlLnNob3coKTtcclxuICAgICAgdGhpcy5mb3JtRmlsZHMgPSBbXTtcclxuICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJkYXRhbWRidG5cIikuY2xpY2soKTtcclxuICAgICAgdGhpcy5waWQgPSB1YVt0aGlzLnBrZl07XHJcbiAgICAgIHRoaXMuZ2V0RWRpdERhdGEodWEpO1xyXG4gICAgICB0aGlzLmJ0bk5hbWUgPSBcIkVkaXRcIjtcclxuICAgIH0gZWxzZSBpZiAoXHJcbiAgICAgIHVhICYmXHJcbiAgICAgIGMudHJpbSgpID09IFwiYWRkSXRlbVwiICYmXHJcbiAgICAgIGEuZm9ybV9maWVsZF90aXRsZSAhPSBcIkFkZCBNYXBwaW5nXCJcclxuICAgICkge1xyXG4gICAgICB0aGlzLnNwaW5uZXJTZXJ2aWNlLnNob3coKTtcclxuICAgICAgdGhpcy5mb3JtRmlsZHMgPSBbXTtcclxuICAgICAgdGhpcy5jdXJsID0gYS5sb3ZfcXJ5O1xyXG4gICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbYS5sb3ZfcXJ5LCB0aGlzLnBrZiwgdWFbdGhpcy5wa2ZdXSk7XHJcbiAgICB9IGVsc2UgaWYgKHVhICYmIGMudHJpbSgpID09IFwiZGVsZXRldGVybXNcIikge1xyXG5cclxuICAgICAgdGhpcy5jaSA9IGk7XHJcbiAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiZGVsZXRlVGVybXNcIikuY2xpY2soKTtcclxuICAgICAgdGhpcy5waWQgPSB1YVt0aGlzLnBrZl07XHJcbiAgICB9IGVsc2UgaWYgKHVhICYmIGMudHJpbSgpID09IFwiZGVsZXRlXCIpIHtcclxuXHJcbiAgICAgIHRoaXMuY2kgPSBpO1xyXG4gICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImRlbGV0ZWJ0blwiKS5jbGljaygpO1xyXG4gICAgICB0aGlzLnBpZCA9IHVhW3RoaXMucGtmXTtcclxuICAgIH0gZWxzZSBpZiAodWEgJiYgYy50cmltKCkgPT0gXCJkZWZpbmF0aW9uXCIpIHtcclxuICAgICAgdGhpcy5jaSA9IGk7XHJcbiAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwicm93R3JwYnRuXCIpLmNsaWNrKCk7XHJcbiAgICAgIHRoaXMucGlkID0gdWFbdGhpcy5wa2ZdO1xyXG4gICAgICB0aGlzLmdldFJvd0dyb3VwKHRoaXMucGlkKTtcclxuICAgIH0gZWxzZSBpZiAoXHJcbiAgICAgIHVhICYmXHJcbiAgICAgIGMudHJpbSgpID09IFwiYWRkSXRlbVwiICYmXHJcbiAgICAgIGEuZm9ybV9maWVsZF90aXRsZSA9PSBcIkFkZCBNYXBwaW5nXCJcclxuICAgICkge1xyXG4gICAgICB0aGlzLnByb2R1Y0RldGFpbE1vZGVsVGl0bGUgPSB1YS5kaXNwbGF5O1xyXG4gICAgICB0aGlzLmxvYWRQcm9kdWN0RGV0YWlsTWFwcGluZyh1YVtcImF0dHJfZF9pZG5cIl0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbG9hZFByb2R1Y3REZXRhaWxNYXBwaW5nKGF0dHJEdGFpbElkbikge1xyXG4gICAgdGhpcy5hdHRyX2R0bF9pZG4gPSBhdHRyRHRhaWxJZG47XHJcbiAgICB0aGlzLnNwaW5uZXJTZXJ2aWNlLnNob3coKTtcclxuICAgIGxldCBvYmogPSB7fTtcclxuICAgIG9ialtcImZvcm1ObWVcIl0gPSBcImZpbGVVcGxvYWRcIjtcclxuICAgIG9ialtcImF0dHJfZHRsX2lkblwiXSA9IGF0dHJEdGFpbElkbjtcclxuICAgIHRoaXMuaGVhZGVyW1wibWV0aG9kXCJdID0gXCJsb2FkUHJkTWFzdGVyTWFwcGluZ1wiO1xyXG4gICAgbGV0IG9wdGlvbnMgPSAoeyBoZWFkZXJzOiBuZXcgSHR0cEhlYWRlcnModGhpcy5oZWFkZXIpIH0pO1xyXG4gICAgdGhpcy5zc1xyXG4gICAgICAuU2F2ZShvYmosIG9wdGlvbnMsIFwiZmlsZVVwbG9hZC9sb2FkXCIpXHJcbiAgICAgIC50aGVuKChyZXNwb25zZTogYW55KSA9PiB7XHJcbiAgICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1cyA9PSBcIlNVQ0NFU1NcIikge1xyXG4gICAgICAgICAgY29uc29sZS5sb2cocmVzcG9uc2UpO1xyXG4gICAgICAgICAgbGV0IHJlc3VsdCA9IHJlc3BvbnNlLnJlc3VsdDtcclxuICAgICAgICAgIHRoaXMuYXR0ckR0bCA9IHJlc3VsdC5hdHRyRHRsO1xyXG4gICAgICAgICAgdGhpcy5hdHRyTWFwcGluZ0R0bCA9IHJlc3VsdC5hdHRyTWFwcGluZ0R0bDtcclxuICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiYnRucHJvZHVjdERldGFpbE1hcE1EXCIpLmNsaWNrKCk7XHJcbiAgICAgICAgICB0aGlzLnNwaW5uZXJTZXJ2aWNlLmhpZGUoKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5zcGlubmVyU2VydmljZS5oaWRlKCk7XHJcbiAgICAgICAgICB0aGlzLnRvYXN0ci5lcnJvcihyZXNwb25zZS5tZXNzYWdlKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pXHJcbiAgICAgIC5jYXRjaCgoZXJyOiBhbnkpID0+IHtcclxuICAgICAgICB0aGlzLnNwaW5uZXJTZXJ2aWNlLmhpZGUoKTtcclxuICAgICAgICB0aGlzLnRvYXN0ci5lcnJvcihlcnIubWVzc2FnZSk7XHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgc2F2ZVByb2R1Y3REZXRhaWxNYXBwaW5nKCkge1xyXG4gICAgdGhpcy5zcGlubmVyU2VydmljZS5zaG93KCk7XHJcbiAgICBsZXQgb2JqID0ge307XHJcbiAgICBvYmpbXCJmb3JtTm1lXCJdID0gXCJmaWxlVXBsb2FkXCI7XHJcbiAgICBvYmpbXCJhdHRyX2R0bF9pZG5cIl0gPSB0aGlzLmF0dHJfZHRsX2lkbjtcclxuICAgIG9ialtcImF0dHJEdGxNYXBcIl0gPSB0aGlzLmF0dHJNYXBwaW5nRHRsO1xyXG4gICAgdGhpcy5oZWFkZXJbXCJtZXRob2RcIl0gPSBcInVwZGF0ZVByb2R1Y3RBdHRyXCI7XHJcbiAgICBjb25zb2xlLmxvZyhKU09OLnN0cmluZ2lmeShvYmopKTtcclxuICAgIGxldCBvcHRpb25zID0gKHsgaGVhZGVyczogbmV3IEh0dHBIZWFkZXJzKHRoaXMuaGVhZGVyKSB9KTtcclxuICAgIHRoaXMuc3NcclxuICAgICAgLlNhdmUob2JqLCBvcHRpb25zLCBcImZpbGVVcGxvYWQvbG9hZFwiKVxyXG4gICAgICAudGhlbigocmVzcG9uc2U6IGFueSkgPT4ge1xyXG4gICAgICAgIGlmIChyZXNwb25zZS5zdGF0dXMgPT0gXCJTVUNDRVNTXCIpIHtcclxuICAgICAgICAgIGNvbnNvbGUubG9nKHJlc3BvbnNlKTtcclxuICAgICAgICAgIHRoaXMudG9hc3RyLnN1Y2Nlc3MocmVzcG9uc2UubWVzc2FnZSk7XHJcbiAgICAgICAgICB0aGlzLnNwaW5uZXJTZXJ2aWNlLmhpZGUoKTtcclxuICAgICAgICAgIHRoaXMucHJvZHVjdERldGFpbE1hcGNsc2J0bi5uYXRpdmVFbGVtZW50LmNsaWNrKCk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMuc3Bpbm5lclNlcnZpY2UuaGlkZSgpO1xyXG4gICAgICAgICAgdGhpcy50b2FzdHIuZXJyb3IocmVzcG9uc2UubWVzc2FnZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KVxyXG4gICAgICAuY2F0Y2goKGVycjogYW55KSA9PiB7XHJcbiAgICAgICAgdGhpcy5zcGlubmVyU2VydmljZS5oaWRlKCk7XHJcbiAgICAgICAgdGhpcy50b2FzdHIuZXJyb3IoZXJyLm1lc3NhZ2UpO1xyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIG5hdmlnYXRpb25GdW4obmF2LCBpKSB7XHJcbiAgICBkZWJ1Z2dlclxyXG4gICAgdGhpcy5jTGluayA9IGk7XHJcbiAgICB0aGlzLnN1YkZybVdrID0gbmF2LmNvbHVtbl9rZXkudHJpbSgpIHx8ICcnO1xyXG4gICAgdGhpcy5zdWJGcm1XdiA9IG5hdi5mb3JtX2ZpZWxkLnRyaW0oKSB8fCAnJztcclxuICAgIGlmICh0aGlzLnN1YkZybVd2ID09IFwiMFwiKVxyXG4gICAgICB0aGlzLnN1YkZybVd2ID0gXCJcIjtcclxuICAgIHRoaXMubmF2Zm9ybSA9IG5hdi5sb3ZfcXJ5LnRyaW0oKTtcclxuICAgIGlmICh0aGlzLnN1YkZybVd2ID09IFwiXCIpIHtcclxuICAgICAgdGhpcy5zdWJGcm1XayA9IG51bGw7XHJcbiAgICAgIHRoaXMuc3ViRnJtV3YgPSBudWxsO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMubmF2Zm9ybSAhPSBcIlwiKSB7XHJcbiAgICAgIGlmICh0aGlzLm5hdmZvcm0gPT0gXCJhZGR0aW9uYWxEdGxNYXN0ZXJcIikge1xyXG4gICAgICAgIHRoaXMuYWRkRnJtTm1lID0gdGhpcy5uYXZmb3JtO1xyXG4gICAgICAgIGxldCBtZGwgPSBbJ2NvbnRhY3QnXTtcclxuICAgICAgICB0aGlzLmdldE5hbWVBdHRyKHRoaXMuYWRkRnJtTm1lLCBtZGwpO1xyXG4gICAgICB9IGVsc2UgaWYgKHRoaXMubmF2Zm9ybSA9PSBcImxlZGdlckFkZHRpb25hbER0bE1hc3RlclwiKSB7XHJcbiAgICAgICAgdGhpcy5hZGRGcm1ObWUgPSB0aGlzLm5hdmZvcm07XHJcbiAgICAgICAgbGV0IG1kbCA9IFsnbGVkZ19hdHRyJ107XHJcbiAgICAgICAgdGhpcy5nZXRMZWRnZXJBdHRyKHRoaXMuYWRkRnJtTm1lLCBtZGwsICdhdHRyJyk7XHJcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5uYXZmb3JtID09IFwibGVkZ2VyQWNjQWRkaXRpbmFsRGV0YWlsc1wiKSB7XHJcbiAgICAgICAgdGhpcy5hZGRGcm1ObWUgPSB0aGlzLm5hdmZvcm07XHJcbiAgICAgICAgbGV0IG1kbCA9IFsnbGVkZ2FjY19hdHRyJ107XHJcbiAgICAgICAgdGhpcy5nZXRMZWRnZXJBdHRyKHRoaXMuYWRkRnJtTm1lLCBtZGwsICdhY2NfYXR0cicpO1xyXG4gICAgICB9IGVsc2UgaWYgKHRoaXMubmF2Zm9ybSA9PSBcImFjY0RlbGV0ZVJ1bGVzRm9ybVwiKSB7XHJcbiAgICAgICAgdGhpcy5hZGRGcm1ObWUgPSB0aGlzLm5hdmZvcm07XHJcbiAgICAgICAgbGV0IG1kbCA9IFsnZGVsZXRlX3J1bGUnXTtcclxuICAgICAgICB0aGlzLmdldExlZGdlckF0dHIodGhpcy5hZGRGcm1ObWUsIG1kbCwgJ2RlbGV0ZV9ydWxlJyk7XHJcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5uYXZmb3JtID09IFwiYWNjSm91cm5hbEF0dHJGb3JtXCIpIHtcclxuICAgICAgICB0aGlzLmFkZEZybU5tZSA9IHRoaXMubmF2Zm9ybTtcclxuICAgICAgICBsZXQgbWRsID0gWydqbmxhY2NfYXR0ciddO1xyXG4gICAgICAgIHRoaXMuZ2V0TGVkZ2VyQXR0cih0aGlzLmFkZEZybU5tZSwgbWRsLCAnam5sYWNjX2F0dHInKTtcclxuICAgICAgfSBlbHNlIGlmICh0aGlzLm5hdmZvcm0gPT0gXCJhY2NMb2FuQXR0ckZvcm1cIikge1xyXG4gICAgICAgIHRoaXMuYWRkRnJtTm1lID0gdGhpcy5uYXZmb3JtO1xyXG4gICAgICAgIGxldCBtZGwgPSBbJ2xvYW4nXTtcclxuICAgICAgICB0aGlzLmdldExlZGdlckF0dHIodGhpcy5hZGRGcm1ObWUsIG1kbCwgJ2xvYW4nKTtcclxuICAgICAgfSBlbHNlIGlmICh0aGlzLm5hdmZvcm0gPT0gXCJhY2NKb3VybmFsU2V0dGluZ0Zvcm1cIikge1xyXG4gICAgICAgIHRoaXMuYWRkRnJtTm1lID0gdGhpcy5uYXZmb3JtO1xyXG4gICAgICAgIGxldCBtZGwgPSBbJ2pubF9zZXR0J107XHJcbiAgICAgICAgdGhpcy5nZXRKb3VybmFsQXR0cih0aGlzLmFkZEZybU5tZSwgbWRsLCAnam5sX3NldHQnKTtcclxuICAgICAgfVxyXG4gICAgICBlbHNlIGlmICh0aGlzLm5hdmZvcm0gPT0gXCJkb2N1bWVudFVwbG9hZE1hc3RlclwiKSB7XHJcbiAgICAgICAgdGhpcy5hZGRGcm1ObWUgPSB0aGlzLm5hdmZvcm07XHJcbiAgICAgICAgdGhpcy5nZXRGaWxlcyh0aGlzLnB2KTtcclxuICAgICAgfSBlbHNlIGlmICh0aGlzLm5hdmZvcm0gPT0gXCJtZW51QWNjZXNzTWFzdGVyXCIpIHtcclxuICAgICAgICB0aGlzLmFkZEZybU5tZSA9IHRoaXMubmF2Zm9ybTtcclxuICAgICAgICAvLyAgdGhpcy5sb2FkVXNyTWRsKHRoaXMucHYpOy8vXHJcbiAgICAgICAgdGhpcy5sb2FkQXBwbGljYXRpb24oKTtcclxuICAgICAgfSBlbHNlIGlmICh0aGlzLm5hdmZvcm0gPT0gXCJ3ZWJNZW51QWNjZXNzTWFzdGVyXCIpIHtcclxuICAgICAgICB0aGlzLmFkZEZybU5tZSA9IHRoaXMubmF2Zm9ybTtcclxuICAgICAgICAvLyAgdGhpcy5sb2FkVXNyTWRsKHRoaXMucHYpOy8vXHJcbiAgICAgICAgdGhpcy5sb2FkV2ViQXBwbGljYXRpb24oKTtcclxuICAgICAgfVxyXG4gICAgICBlbHNlIGlmICh0aGlzLm5hdmZvcm0gPT0gXCJtb2R1bGVBY2Nlc3NNYXN0ZXJcIikge1xyXG4gICAgICAgIHRoaXMuYWRkRnJtTm1lID0gdGhpcy5uYXZmb3JtO1xyXG4gICAgICAgIHRoaXMubG9hZFVzck1kbCh0aGlzLnB2KTtcclxuICAgICAgfSBlbHNlIGlmICh0aGlzLm5hdmZvcm0gPT0gXCJ0ZXJtVXNlckFzc2lnbkZvcm1cIikge1xyXG4gICAgICAgIHRoaXMuYWRkRnJtTm1lID0gdGhpcy5uYXZmb3JtO1xyXG4gICAgICAgIHRoaXMubG9hZEFwcGxpY2F0aW9uVXNlclRlcm1zKHRoaXMucHYpO1xyXG4gICAgICB9IGVsc2UgaWYgKHRoaXMubmF2Zm9ybSA9PSBcInNldFBhc3N3b3JkRm9ybVwiKSB7XHJcbiAgICAgICAgdGhpcy5hZGRGcm1ObWUgPSB0aGlzLm5hdmZvcm07XHJcbiAgICAgICAgdGhpcy5sb2FkVXNlclBhc3N3b3JkKCk7XHJcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5uYXZmb3JtID09IFwibGVkZ2VyQmFua0RldGFpbHNcIikge1xyXG4gICAgICAgIHRoaXMuYWRkRnJtTm1lID0gdGhpcy5uYXZmb3JtO1xyXG4gICAgICAgIHRoaXMubG9hZGxlZGdlckJhbmtEZXRhaWxzKCk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5wYXJhT2JqW1wiZm9ybU5tZVwiXSA9IHRoaXMubmF2Zm9ybTtcclxuICAgICAgICB0aGlzLmdldFBhZ2VEZWZpbmF0aW9uKCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcbiAgZXhpdEJhbmtEdGxMaXN0ID0gW107XHJcbiAgbG9hZGxlZGdlckJhbmtEZXRhaWxzKCkge1xyXG4gICAgdGhpcy5zcGlubmVyU2VydmljZS5zaG93KCk7XHJcbiAgICBsZXQgcmVxT2JqID0ge307XHJcbiAgICByZXFPYmpbJ2Zvcm1ObWUnXSA9ICdsZWRnZXJCYW5rRGV0YWlscyc7XHJcbiAgICByZXFPYmpbJ2xlZGdlcl9pZG4nXSA9IHRoaXMucm91dGUuc25hcHNob3QucGFyYW1NYXAuZ2V0KCdzdWJ2Jyk7XHJcbiAgICB0aGlzLmhlYWRlclsnbWV0aG9kJ10gPSAnbG9hZGxlZGdlckJhbmtEZXRhaWwnO1xyXG4gICAgbGV0IG9wdGlvbnMgPSAoeyBoZWFkZXJzOiBuZXcgSHR0cEhlYWRlcnModGhpcy5oZWFkZXIpIH0pO1xyXG4gICAgdGhpcy5jcy5sb2FkKHJlcU9iaiwgb3B0aW9ucywgJ2FjY291bnRzL2FjY0xlZGdlcicpLnRoZW4oKHJlc3BvbnNlOiBhbnkpID0+IHtcclxuICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1cyA9PSAnU1VDQ0VTUycpIHtcclxuICAgICAgICB0aGlzLnNwaW5uZXJTZXJ2aWNlLmhpZGUoKTtcclxuICAgICAgICBsZXQgcmVzdWx0ID0gcmVzcG9uc2UucmVzdWx0O1xyXG4gICAgICAgIHRoaXMuZXhpdEJhbmtEdGxMaXN0ID0gcmVzdWx0LmJhbmtEdGxMaXN0IHx8IFtdO1xyXG4gICAgICAgIHRoaXMuZWRpdGJhbmtfZHRsX2lkbiA9IFwiXCI7XHJcbiAgICAgICAgdGhpcy5icmFuY2ggPSBcIlwiO1xyXG4gICAgICAgIHRoaXMuYWNjb3VudG5vID0gXCJcIjtcclxuICAgICAgICB0aGlzLnNlbGVjdEJyYW5jaEFkZHJlc3MgPSBcIlwiO1xyXG4gICAgICAgIHRoaXMuYmFuayA9IFwiXCI7XHJcbiAgICAgICAgdGhpcy5iYW5rTGlzdCA9IFtdO1xyXG4gICAgICAgIHRoaXMuYmFua0R0bExpc3QgPSBbXTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLnNwaW5uZXJTZXJ2aWNlLmhpZGUoKTtcclxuICAgICAgICB0aGlzLnRvYXN0ci5lcnJvcihyZXNwb25zZS5tZXNzYWdlKVxyXG4gICAgICB9XHJcbiAgICB9KS5jYXRjaCgoZXJyOiBhbnkpID0+IHtcclxuICAgICAgdGhpcy5zcGlubmVyU2VydmljZS5oaWRlKCk7XHJcbiAgICAgIHRoaXMudG9hc3RyLmVycm9yKGVyci5tZXNzYWdlKVxyXG4gICAgfSk7XHJcblxyXG4gIH1cclxuICBiYW5rTGlzdCA9IFtdO1xyXG4gIGJhbmtEdGxMaXN0ID0gW107XHJcbiAgYmFuaztcclxuICBicmFuY2ggPSBcIlwiO1xyXG4gIGFjY291bnRubztcclxuICBhY2NvdW50VHlwZSA9IFwic2F2aW5nc1wiXHJcbiAgbGVkZ2VyQmFua0RldGFpbHMoc3RyKSB7XHJcbiAgICB0aGlzLnNwaW5uZXJTZXJ2aWNlLnNob3coKTtcclxuICAgIGxldCByZXFPYmogPSB7fTtcclxuICAgIHJlcU9ialsnZm9ybU5tZSddID0gJ2xlZGdlckJhbmtEZXRhaWxzJztcclxuICAgIHJlcU9ialsnbGlrZVN0ciddID0gc3RyO1xyXG4gICAgdGhpcy5oZWFkZXJbJ21ldGhvZCddID0gJ2xvYWRQYXJ0eUJhbmsnO1xyXG4gICAgbGV0IG9wdGlvbnMgPSAoeyBoZWFkZXJzOiBuZXcgSHR0cEhlYWRlcnModGhpcy5oZWFkZXIpIH0pO1xyXG4gICAgdGhpcy5jcy5sb2FkKHJlcU9iaiwgb3B0aW9ucywgJ2FjY291bnRzL2FjY0xlZGdlcicpLnRoZW4oKHJlc3BvbnNlOiBhbnkpID0+IHtcclxuICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1cyA9PSAnU1VDQ0VTUycpIHtcclxuICAgICAgICB0aGlzLnNwaW5uZXJTZXJ2aWNlLmhpZGUoKTtcclxuICAgICAgICBsZXQgcmVzdWx0ID0gcmVzcG9uc2UucmVzdWx0O1xyXG4gICAgICAgIHRoaXMuYmFua0xpc3QgPSByZXN1bHQuYmFua0xpc3QubWFwKG9wdGlvbiA9PiAoe1xyXG4gICAgICAgICAgdmFsdWU6IG9wdGlvbixcclxuICAgICAgICAgIGxhYmVsOiBvcHRpb25cclxuICAgICAgICB9KSk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5zcGlubmVyU2VydmljZS5oaWRlKCk7XHJcbiAgICAgICAgdGhpcy50b2FzdHIuZXJyb3IocmVzcG9uc2UubWVzc2FnZSlcclxuICAgICAgfVxyXG4gICAgfSkuY2F0Y2goKGVycjogYW55KSA9PiB7XHJcbiAgICAgIHRoaXMuc3Bpbm5lclNlcnZpY2UuaGlkZSgpO1xyXG4gICAgICB0aGlzLnRvYXN0ci5lcnJvcihlcnIubWVzc2FnZSlcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgZ2V0QmFua0JyYW5jaChiYW5rKSB7XHJcbiAgICB0aGlzLmJyYW5jaCA9IFwiXCI7XHJcbiAgICB0aGlzLnNlbGVjdEJyYW5jaEFkZHJlc3MgPSBcIlwiO1xyXG4gICAgdGhpcy5zZWxlY3RJZnNjID0gXCJcIjtcclxuICAgIHRoaXMuc3Bpbm5lclNlcnZpY2Uuc2hvdygpO1xyXG4gICAgbGV0IHJlcU9iaiA9IHt9O1xyXG4gICAgcmVxT2JqWydmb3JtTm1lJ10gPSAnbGVkZ2VyQmFua0RldGFpbHMnO1xyXG4gICAgcmVxT2JqWydiYW5rTm1lJ10gPSBiYW5rO1xyXG4gICAgdGhpcy5oZWFkZXJbJ21ldGhvZCddID0gJ2dldFBhcnR5QmFua0R0bCc7XHJcbiAgICBsZXQgb3B0aW9ucyA9ICh7IGhlYWRlcnM6IG5ldyBIdHRwSGVhZGVycyh0aGlzLmhlYWRlcikgfSk7XHJcbiAgICB0aGlzLmNzLmxvYWQocmVxT2JqLCBvcHRpb25zLCAnYWNjb3VudHMvYWNjTGVkZ2VyJykudGhlbigocmVzcG9uc2U6IGFueSkgPT4ge1xyXG4gICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzID09ICdTVUNDRVNTJykge1xyXG4gICAgICAgIHRoaXMuc3Bpbm5lclNlcnZpY2UuaGlkZSgpO1xyXG4gICAgICAgIGxldCByZXN1bHQgPSByZXNwb25zZS5yZXN1bHQ7XHJcbiAgICAgICAgdGhpcy5iYW5rRHRsTGlzdCA9IHJlc3VsdC5iYW5rRHRsTGlzdCB8fCBbXTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLnNwaW5uZXJTZXJ2aWNlLmhpZGUoKTtcclxuICAgICAgICB0aGlzLnRvYXN0ci5lcnJvcihyZXNwb25zZS5tZXNzYWdlKVxyXG4gICAgICB9XHJcbiAgICB9KS5jYXRjaCgoZXJyOiBhbnkpID0+IHtcclxuICAgICAgdGhpcy5zcGlubmVyU2VydmljZS5oaWRlKCk7XHJcbiAgICAgIHRoaXMudG9hc3RyLmVycm9yKGVyci5tZXNzYWdlKVxyXG4gICAgfSk7XHJcblxyXG4gIH1cclxuICBzZWxlY3RCcmFuY2hEdGwgPSB7fTtcclxuICBzZWxlY3RCcmFuY2hBZGRyZXNzID0gXCJcIjtcclxuICBzZWxlY3RJZnNjID0gXCJcIjtcclxuICBzZWxlY3RCcmFuY2goYnJhbmNoKSB7XHJcbiAgICB0aGlzLnNlbGVjdEJyYW5jaEFkZHJlc3MgPSBcIlwiO1xyXG4gICAgdGhpcy5zZWxlY3RCcmFuY2hEdGwgPSB0aGlzLmJhbmtEdGxMaXN0LmZpbmQoeCA9PiB4Lm5tZV9pZG4gPT0gYnJhbmNoKSB8fCAnJztcclxuICAgIGxldCBhZGRyZXNzID0gdGhpcy5zZWxlY3RCcmFuY2hEdGxbJ2FkZHJlc3MnXSB8fCBbXTtcclxuICAgIGlmIChhZGRyZXNzLmxlbmd0aCA+IDApIHtcclxuICAgICAgbGV0IGFkZHJlc3NEdGwgPSBhZGRyZXNzWzBdO1xyXG4gICAgICBsZXQgYXJlYSA9IGFkZHJlc3NEdGxbJ2FyZWEnXSB8fCBcIlwiO1xyXG4gICAgICBpZiAoYXJlYSA9PSBcIm51bGxcIilcclxuICAgICAgICBhcmVhID0gXCJcIjtcclxuICAgICAgbGV0IHN0cmVldCA9IGFkZHJlc3NEdGxbJ3N0cmVldCddIHx8IFwiXCI7XHJcbiAgICAgIGlmIChzdHJlZXQgPT0gXCJudWxsXCIpXHJcbiAgICAgICAgc3RyZWV0ID0gXCJcIjtcclxuICAgICAgbGV0IHVuaXRfbm8gPSBhZGRyZXNzRHRsWyd1bml0X25vJ10gfHwgXCJcIjtcclxuICAgICAgaWYgKHVuaXRfbm8gPT0gXCJudWxsXCIpXHJcbiAgICAgICAgdW5pdF9ubyA9IFwiXCI7XHJcbiAgICAgIGxldCBidWlsZGluZyA9IGFkZHJlc3NEdGxbJ2J1aWxkaW5nJ10gfHwgXCJcIjtcclxuICAgICAgaWYgKGJ1aWxkaW5nID09IFwibnVsbFwiKVxyXG4gICAgICAgIGJ1aWxkaW5nID0gXCJcIjtcclxuICAgICAgbGV0IGxhbmRtYXJrID0gYWRkcmVzc0R0bFsnbGFuZG1hcmsnXSB8fCBcIlwiO1xyXG4gICAgICBpZiAobGFuZG1hcmsgPT0gXCJudWxsXCIpXHJcbiAgICAgICAgbGFuZG1hcmsgPSBcIlwiO1xyXG4gICAgICBsZXQgemlwID0gYWRkcmVzc0R0bFsnemlwJ10gfHwgXCJcIjtcclxuICAgICAgaWYgKHppcCA9PSBcIm51bGxcIilcclxuICAgICAgICB6aXAgPSBcIlwiO1xyXG4gICAgICBsZXQgY2l0eV9ubSA9IGFkZHJlc3NEdGxbJ2NpdHlfbm0nXSB8fCBcIlwiO1xyXG4gICAgICBpZiAoY2l0eV9ubSA9PSBcIm51bGxcIilcclxuICAgICAgICBjaXR5X25tID0gXCJcIjtcclxuICAgICAgbGV0IGNvdW50cnlfbm0gPSBhZGRyZXNzRHRsWydjb3VudHJ5X25tJ10gfHwgXCJcIjtcclxuICAgICAgaWYgKGNvdW50cnlfbm0gPT0gXCJudWxsXCIpXHJcbiAgICAgICAgY291bnRyeV9ubSA9IFwiXCI7XHJcbiAgICAgIGxldCBzdGF0ZV9ubSA9IGFkZHJlc3NEdGxbJ3N0YXRlX25tJ10gfHwgXCJcIjtcclxuICAgICAgaWYgKHN0YXRlX25tID09IFwibnVsbFwiKVxyXG4gICAgICAgIHN0YXRlX25tID0gXCJcIjtcclxuICAgICAgdGhpcy5zZWxlY3RJZnNjID0gdGhpcy5zZWxlY3RCcmFuY2hEdGxbJ2F0dHInXVsnaWZzYyddO1xyXG4gICAgICB0aGlzLnNlbGVjdEJyYW5jaEFkZHJlc3MgPSB1bml0X25vICsgXCIgXCIgKyBidWlsZGluZyArIFwiIFwiICsgc3RyZWV0ICsgXCIgXCIgKyBhcmVhICsgXCIgXCIgKyBsYW5kbWFyayArIFwiIFwiICsgY2l0eV9ubSArIFwiIFwiICsgc3RhdGVfbm0gKyBcIiBcIiArIHppcFxyXG5cclxuICAgIH1cclxuXHJcbiAgfVxyXG5cclxuICBsb2FkTGVkZ2VyQmFuaygpIHtcclxuXHJcbiAgfVxyXG4gIGVkaXRiYW5rX2R0bF9pZG4gPSBcIlwiO1xyXG4gIGxvYWRFZGl0QmFua0R0bChiYW5rZHRsKSB7XHJcbiAgICBkZWJ1Z2dlclxyXG4gICAgbGV0IGJhbmtOYW1lID0gYmFua2R0bC5iYW5rbmFtZTtcclxuICAgIHRoaXMuYmFua0xpc3QgPSBbe1xyXG4gICAgICB2YWx1ZTogYmFua05hbWUsXHJcbiAgICAgIGxhYmVsOiBiYW5rTmFtZVxyXG4gICAgfV07XHJcbiAgICB0aGlzLmJhbmsgPSBiYW5rTmFtZTtcclxuICAgIHRoaXMuZ2V0QmFua0JyYW5jaChiYW5rTmFtZSk7XHJcbiAgICB0aGlzLmVkaXRiYW5rX2R0bF9pZG4gPSBiYW5rZHRsLmJhbmtkdGxJZG47XHJcbiAgICB0aGlzLmFjY291bnRUeXBlID0gYmFua2R0bC5hY2NvdW50VHlwZTtcclxuICAgIHRoaXMuYWNjb3VudG5vID0gYmFua2R0bC5hY2NvdW50Tm87XHJcbiAgICB0aGlzLnNlbGVjdEJyYW5jaEFkZHJlc3MgPSBiYW5rZHRsLmFkZHJlc3M7XHJcbiAgICB0aGlzLnNlbGVjdElmc2MgPSBiYW5rZHRsLmlmc2M7XHJcbiAgICB0aGlzLmJyYW5jaCA9IGJhbmtkdGwuYmFua1JlZklkbjtcclxuICB9XHJcbiAgU2F2ZUxlZGdlckJhbmsoKSB7XHJcbiAgICB0aGlzLnNwaW5uZXJTZXJ2aWNlLnNob3coKTtcclxuICAgIGxldCByZXFPYmogPSB7fTtcclxuICAgIHJlcU9ialsnZm9ybU5tZSddID0gJ2xlZGdlckJhbmtEZXRhaWxzJztcclxuICAgIHJlcU9ialsnbGVkZ2VyX2lkbiddID0gdGhpcy5yb3V0ZS5zbmFwc2hvdC5wYXJhbU1hcC5nZXQoJ3N1YnYnKTtcclxuICAgIHJlcU9ialsnYmFua19yZWZfaWRuJ10gPSB0aGlzLmJyYW5jaDtcclxuICAgIHJlcU9ialsnYWNjb3VudF90eXBlJ10gPSB0aGlzLmFjY291bnRUeXBlO1xyXG4gICAgcmVxT2JqWydhY2NvdW50X25vJ10gPSB0aGlzLmFjY291bnRubztcclxuICAgIGlmICh0aGlzLmVkaXRiYW5rX2R0bF9pZG4gPT0gJycpXHJcbiAgICAgIHJlcU9ialsnYWN0aW9uJ10gPSAnYWRkJztcclxuICAgIGVsc2Uge1xyXG4gICAgICByZXFPYmpbJ2FjdGlvbiddID0gJ2VkaXQnO1xyXG4gICAgICByZXFPYmpbJ2JhbmtfZHRsX2lkbiddID0gdGhpcy5lZGl0YmFua19kdGxfaWRuO1xyXG4gICAgfVxyXG4gICAgdGhpcy5oZWFkZXJbJ21ldGhvZCddID0gJ3NhdmVCYW5rRHRsSW50b0FjY0xlZGdlcic7XHJcbiAgICBjb25zb2xlLmxvZyhKU09OLnN0cmluZ2lmeShyZXFPYmopKTtcclxuICAgIGxldCBvcHRpb25zID0gKHsgaGVhZGVyczogbmV3IEh0dHBIZWFkZXJzKHRoaXMuaGVhZGVyKSB9KTtcclxuICAgIHRoaXMuc3Muc3ViRmdldERhdGEocmVxT2JqLCBvcHRpb25zLCAnYWNjb3VudHMvYWNjTGVkZ2VyJykudGhlbigocmVzcG9uc2U6IGFueSkgPT4ge1xyXG4gICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzID09ICdTVUNDRVNTJykge1xyXG4gICAgICAgIGxldCByZXN1bHQgPSByZXNwb25zZS5yZXN1bHQ7XHJcbiAgICAgICAgdGhpcy5leGl0QmFua0R0bExpc3QgPSByZXN1bHQuYmFua0R0bExpc3QgfHwgW107XHJcbiAgICAgICAgdGhpcy5icmFuY2ggPSBcIlwiO1xyXG4gICAgICAgIHRoaXMuYWNjb3VudG5vID0gXCJcIjtcclxuICAgICAgICB0aGlzLnNlbGVjdEJyYW5jaEFkZHJlc3MgPSBcIlwiO1xyXG4gICAgICAgIHRoaXMuYmFuayA9IFwiXCI7XHJcbiAgICAgICAgdGhpcy5iYW5rTGlzdCA9IFtdO1xyXG4gICAgICAgIHRoaXMuYmFua0R0bExpc3QgPSBbXTtcclxuICAgICAgICB0aGlzLmVkaXRiYW5rX2R0bF9pZG4gPSBcIlwiO1xyXG4gICAgICAgIHRoaXMuc3Bpbm5lclNlcnZpY2UuaGlkZSgpO1xyXG4gICAgICAgIGlmICh0aGlzLmVkaXRiYW5rX2R0bF9pZG4gPT0gXCJcIilcclxuICAgICAgICAgIHRoaXMudG9hc3RyLnN1Y2Nlc3MoXCJOZXcgQmFuayBhZGQgc3VjY2Vzc2Z1bGx5XCIpO1xyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy50b2FzdHIuc3VjY2VzcyhcIkJhbmsgZWRpdCBzdWNjZXNzZnVseVwiKTtcclxuICAgICAgICAgIHRoaXMuZWRpdGJhbmtfZHRsX2lkbiA9IFwiXCI7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLnNwaW5uZXJTZXJ2aWNlLmhpZGUoKTtcclxuICAgICAgICB0aGlzLnRvYXN0ci5lcnJvcihyZXNwb25zZS5tZXNzYWdlKVxyXG4gICAgICB9XHJcbiAgICB9KS5jYXRjaCgoZXJyOiBhbnkpID0+IHtcclxuICAgICAgdGhpcy5zcGlubmVyU2VydmljZS5oaWRlKCk7XHJcbiAgICAgIHRoaXMudG9hc3RyLmVycm9yKGVyci5tZXNzYWdlKVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBkZWxldEJhbmtJZG4gPSBcIlwiO1xyXG4gIENvbmZpcm1EZWxldGVMZWRnZXJCYW5rKGJhbmtkdGwpIHtcclxuICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdibmtkZWxldGVtb2RhbGJ0bicpLmNsaWNrKCk7XHJcbiAgICB0aGlzLmRlbGV0QmFua0lkbiA9IGJhbmtkdGwuYmFua2R0bElkbjtcclxuICB9XHJcblxyXG4gIERlbGV0ZUxlZGdlckJhbmsoKSB7XHJcbiAgICB0aGlzLnNwaW5uZXJTZXJ2aWNlLnNob3coKTtcclxuICAgIGxldCByZXFPYmogPSB7fTtcclxuICAgIHJlcU9ialsnZm9ybU5tZSddID0gJ2xlZGdlckJhbmtEZXRhaWxzJztcclxuICAgIHJlcU9ialsnbGVkZ2VyX2lkbiddID0gdGhpcy5yb3V0ZS5zbmFwc2hvdC5wYXJhbU1hcC5nZXQoJ3N1YnYnKTtcclxuICAgIHJlcU9ialsnYWN0aW9uJ10gPSAnZGVsZXRlJztcclxuICAgIHJlcU9ialsnYmFua19kdGxfaWRuJ10gPSB0aGlzLmRlbGV0QmFua0lkbjtcclxuXHJcbiAgICB0aGlzLmhlYWRlclsnbWV0aG9kJ10gPSAnc2F2ZUJhbmtEdGxJbnRvQWNjTGVkZ2VyJztcclxuICAgIGNvbnNvbGUubG9nKEpTT04uc3RyaW5naWZ5KHJlcU9iaikpO1xyXG4gICAgbGV0IG9wdGlvbnMgPSAoeyBoZWFkZXJzOiBuZXcgSHR0cEhlYWRlcnModGhpcy5oZWFkZXIpIH0pO1xyXG4gICAgdGhpcy5zcy5zdWJGZ2V0RGF0YShyZXFPYmosIG9wdGlvbnMsICdhY2NvdW50cy9hY2NMZWRnZXInKS50aGVuKChyZXNwb25zZTogYW55KSA9PiB7XHJcbiAgICAgIGlmIChyZXNwb25zZS5zdGF0dXMgPT0gJ1NVQ0NFU1MnKSB7XHJcbiAgICAgICAgbGV0IHJlc3VsdCA9IHJlc3BvbnNlLnJlc3VsdDtcclxuICAgICAgICB0aGlzLmV4aXRCYW5rRHRsTGlzdCA9IHJlc3VsdC5iYW5rRHRsTGlzdCB8fCBbXTtcclxuICAgICAgICB0aGlzLmRlbGV0QmFua0lkbiA9IFwiXCI7XHJcbiAgICAgICAgdGhpcy5zcGlubmVyU2VydmljZS5oaWRlKCk7XHJcbiAgICAgICAgdGhpcy50b2FzdHIuc3VjY2VzcyhcIkJhbmsgRGVsZXRlIHN1Y2Nlc3NmdWxseVwiKTtcclxuXHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5zcGlubmVyU2VydmljZS5oaWRlKCk7XHJcbiAgICAgICAgdGhpcy50b2FzdHIuZXJyb3IocmVzcG9uc2UubWVzc2FnZSk7XHJcbiAgICAgIH1cclxuICAgIH0pLmNhdGNoKChlcnI6IGFueSkgPT4ge1xyXG4gICAgICB0aGlzLnNwaW5uZXJTZXJ2aWNlLmhpZGUoKTtcclxuICAgICAgdGhpcy50b2FzdHIuZXJyb3IoZXJyLm1lc3NhZ2UpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBnZXRMZWRnZXJBdHRyKGZvcm1uYW1lLCBtZGwsIHR5cGUpIHtcclxuICAgIGRlYnVnZ2VyO1xyXG4gICAgbGV0IHJlcU9iaiA9IHt9O1xyXG4gICAgcmVxT2JqW1wiZm9ybU5tZVwiXSA9IGZvcm1uYW1lO1xyXG4gICAgcmVxT2JqW1wibGVkZ2VyX2lkblwiXSA9IHRoaXMucm91dGUuc25hcHNob3QucGFyYW1NYXAuZ2V0KFwic3VidlwiKTtcclxuICAgIHJlcU9ialsnbWRsTGlzdCddID0gbWRsO1xyXG4gICAgcmVxT2JqWyd0eXBlJ10gPSB0eXBlO1xyXG4gICAgdGhpcy5oZWFkZXJbXCJtZXRob2RcIl0gPSBcImxvYWRMZWRnZXJBdHRyXCI7XHJcbiAgICBjb25zb2xlLmxvZyhKU09OLnN0cmluZ2lmeShyZXFPYmopKTtcclxuICAgIGxldCBvcHRpb25zID0gKHsgaGVhZGVyczogbmV3IEh0dHBIZWFkZXJzKHRoaXMuaGVhZGVyKSB9KTtcclxuICAgIHRoaXMuc3Muc3ViRmdldERhdGEocmVxT2JqLCBvcHRpb25zLCBcImFjY291bnRzL2FjY0xlZGdlclwiKVxyXG4gICAgICAudGhlbigocmVzcG9uc2U6IGFueSkgPT4ge1xyXG4gICAgICAgIGlmIChyZXNwb25zZS5zdGF0dXMgPT0gXCJTVUNDRVNTXCIpIHtcclxuICAgICAgICAgIHRoaXMucGFnZUluZm8gPSByZXNwb25zZS5wYWdlSW5mbyB8fCB7fTtcclxuICAgICAgICAgIHRoaXMudWlHcnBMaXN0ID0gcmVzcG9uc2UudWlHcnBMaXN0O1xyXG4gICAgICAgICAgdGhpcy51aUdycExpc3REdGwgPSByZXNwb25zZS51aUdycExpc3REdGw7XHJcbiAgICAgICAgICB0aGlzLmF0dHJDTGlzdER0bCA9IHJlc3BvbnNlLmF0dHJDTGlzdER0bDtcclxuICAgICAgICAgIHRoaXMuYXR0clFMaXN0RHRsID0gcmVzcG9uc2UuYXR0clFMaXN0RHRsO1xyXG5cclxuICAgICAgICAgIHRoaXMuZGF0YUR0bCA9IHJlc3BvbnNlLmRhdGFEdGw7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMuc3Bpbm5lclNlcnZpY2UuaGlkZSgpO1xyXG4gICAgICAgICAgdGhpcy50b2FzdHIuZXJyb3IocmVzcG9uc2UubWVzc2FnZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KVxyXG4gICAgICAuY2F0Y2goKGVycjogYW55KSA9PiB7XHJcbiAgICAgICAgdGhpcy5zcGlubmVyU2VydmljZS5oaWRlKCk7XHJcbiAgICAgICAgdGhpcy50b2FzdHIuZXJyb3IoZXJyLm1lc3NhZ2UpO1xyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIGdldEpvdXJuYWxBdHRyKGZvcm1uYW1lLCBtZGwsIHR5cGUpIHtcclxuICAgIGRlYnVnZ2VyO1xyXG4gICAgbGV0IHJlcU9iaiA9IHt9O1xyXG4gICAgcmVxT2JqW1wiZm9ybU5tZVwiXSA9IGZvcm1uYW1lO1xyXG4gICAgcmVxT2JqW1wiam91cm5hbF9pZG5cIl0gPSB0aGlzLnJvdXRlLnNuYXBzaG90LnBhcmFtTWFwLmdldChcInN1YnZcIik7XHJcbiAgICByZXFPYmpbJ21kbExpc3QnXSA9IG1kbDtcclxuICAgIHJlcU9ialsndHlwZSddID0gdHlwZTtcclxuICAgIHRoaXMuaGVhZGVyW1wibWV0aG9kXCJdID0gXCJsb2FkSm91cm5hbEF0dHJcIjtcclxuICAgIGNvbnNvbGUubG9nKEpTT04uc3RyaW5naWZ5KHJlcU9iaikpO1xyXG4gICAgbGV0IG9wdGlvbnMgPSAoeyBoZWFkZXJzOiBuZXcgSHR0cEhlYWRlcnModGhpcy5oZWFkZXIpIH0pO1xyXG4gICAgdGhpcy5zcy5zdWJGZ2V0RGF0YShyZXFPYmosIG9wdGlvbnMsIFwiYWNjb3VudHMvYWNjTGVkZ2VyXCIpXHJcbiAgICAgIC50aGVuKChyZXNwb25zZTogYW55KSA9PiB7XHJcbiAgICAgICAgY29uc29sZS5sb2cocmVzcG9uc2UpO1xyXG4gICAgICAgIGlmIChyZXNwb25zZS5zdGF0dXMgPT0gXCJTVUNDRVNTXCIpIHtcclxuICAgICAgICAgIHRoaXMucGFnZUluZm8gPSByZXNwb25zZS5wYWdlSW5mbyB8fCB7fTtcclxuICAgICAgICAgIHRoaXMudWlHcnBMaXN0ID0gcmVzcG9uc2UudWlHcnBMaXN0O1xyXG4gICAgICAgICAgdGhpcy51aUdycExpc3REdGwgPSByZXNwb25zZS51aUdycExpc3REdGwgfHwge307XHJcbiAgICAgICAgICBsZXQgZGF0YXR5cGVsaXN0ID0gdGhpcy51aUdycExpc3REdGxbXCJiYXNpYyNUXCJdIHx8IFtdO1xyXG4gICAgICAgICAgbGV0IGF0dHJsaXN0ID0gdGhpcy51aUdycExpc3REdGxbXCJiYXNpYyNWXCJdIHx8IFtdO1xyXG4gICAgICAgICAgdGhpcy5hdHRyQ0xpc3REdGwgPSByZXNwb25zZS5hdHRyQ0xpc3REdGw7XHJcbiAgICAgICAgICB0aGlzLmF0dHJRTGlzdER0bCA9IHJlc3BvbnNlLmF0dHJRTGlzdER0bDtcclxuICAgICAgICAgIHRoaXMuZGF0YUR0bCA9IHJlc3BvbnNlLmRhdGFEdGwgfHwge307XHJcbiAgICAgICAgICB0aGlzLmNvbnRhY3ROYW1lID0gdGhpcy5kYXRhRHRsW1wiY29udGFjdE5hbWVcIl0gfHwgXCJcIjtcclxuICAgICAgICAgIGF0dHJsaXN0LmZvckVhY2goKGtleSwgaW5kZXgpID0+IHtcclxuICAgICAgICAgICAgbGV0IHR5cGUgPSBkYXRhdHlwZWxpc3RbaW5kZXhdO1xyXG4gICAgICAgICAgICBpZiAodHlwZSA9PSAnc2EnKSB7XHJcbiAgICAgICAgICAgICAgbGV0IGF0dHJWYWwgPSB0aGlzLmRhdGFEdGxba2V5XSB8fCAnJztcclxuICAgICAgICAgICAgICBsZXQgbGlzdCA9IFt7IHZhbHVlOiBhdHRyVmFsLCBsYWJlbDogYXR0clZhbCB9XTtcclxuICAgICAgICAgICAgICB0aGlzLnNxbEFycmF5W2tleV0gPSBsaXN0O1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgICB0aGlzLnNwaW5uZXJTZXJ2aWNlLmhpZGUoKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5zcGlubmVyU2VydmljZS5oaWRlKCk7XHJcbiAgICAgICAgICB0aGlzLnRvYXN0ci5lcnJvcihyZXNwb25zZS5tZXNzYWdlKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pXHJcbiAgICAgIC5jYXRjaCgoZXJyOiBhbnkpID0+IHtcclxuICAgICAgICB0aGlzLnNwaW5uZXJTZXJ2aWNlLmhpZGUoKTtcclxuICAgICAgICB0aGlzLnRvYXN0ci5lcnJvcihlcnIubWVzc2FnZSk7XHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgbG9hZFVzZXJQYXNzd29yZCgpIHtcclxuICAgIHRoaXMuc3Bpbm5lclNlcnZpY2Uuc2hvdygpO1xyXG4gICAgbGV0IHJlcU9iaiA9IHt9O1xyXG4gICAgcmVxT2JqW1wiZm9ybU5tZVwiXSA9IFwiYXBwbGljYXRpb25BY2Nlc3NNYXN0ZXJcIjtcclxuICAgIHJlcU9ialtcIm5tZUlkblwiXSA9IHRoaXMucm91dGUuc25hcHNob3QucGFyYW1NYXAuZ2V0KFwic3VidlwiKTtcclxuICAgIHRoaXMuaGVhZGVyW1wibWV0aG9kXCJdID0gXCJsb2FkQ2hhbmdlUGFzc1wiO1xyXG4gICAgdGhpcy5oZWFkZXJbXCJzb3VyY2VcIl0gPSBcInFzXCI7XHJcbiAgICBsZXQgb3B0aW9ucyA9ICh7IGhlYWRlcnM6IG5ldyBIdHRwSGVhZGVycyh0aGlzLmhlYWRlcikgfSk7XHJcbiAgICB0aGlzLnNzXHJcbiAgICAgIC5zdWJGZ2V0RGF0YShyZXFPYmosIG9wdGlvbnMsIFwiY29udGFjdC9sb2FkQ29udGFjdFwiKVxyXG4gICAgICAudGhlbigocmVzcG9uc2U6IGFueSkgPT4ge1xyXG4gICAgICAgIGlmIChyZXNwb25zZS5zdGF0dXMgPT0gXCJTVUNDRVNTXCIpIHtcclxuICAgICAgICAgIHRoaXMuc3Bpbm5lclNlcnZpY2UuaGlkZSgpO1xyXG4gICAgICAgICAgbGV0IHJlc3VsdCA9IHJlc3BvbnNlLnJlc3VsdDtcclxuICAgICAgICAgIHRoaXMudXNlckRldGFpbHMgPSByZXN1bHQudXNlckRldGFpbHM7XHJcbiAgICAgICAgICB0aGlzLnBhZ2VEZWZpbmF0aW9uUHN3ZENuZyA9IHJlc3VsdC5wYWdlRGVmaW5hdGlvbjtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5zcGlubmVyU2VydmljZS5oaWRlKCk7XHJcbiAgICAgICAgICB0aGlzLnRvYXN0ci5lcnJvcihyZXNwb25zZS5tZXNzYWdlKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pXHJcbiAgICAgIC5jYXRjaCgoZXJyOiBhbnkpID0+IHtcclxuICAgICAgICB0aGlzLnNwaW5uZXJTZXJ2aWNlLmhpZGUoKTtcclxuICAgICAgICB0aGlzLnRvYXN0ci5lcnJvcihlcnIubWVzc2FnZSk7XHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgY2hhbmdlUHN3ZChlLCB1c2VySWRuKSB7XHJcbiAgICB0aGlzLnNwaW5uZXJTZXJ2aWNlLnNob3coKTtcclxuICAgIGxldCByZXFPYmogPSB7fTtcclxuICAgIHJlcU9ialtcImZvcm1ObWVcIl0gPSBcInNldFBhc3N3b3JkRm9ybVwiO1xyXG4gICAgcmVxT2JqW1widXNlcklkblwiXSA9IHVzZXJJZG47XHJcbiAgICByZXFPYmpbXCJwYXNzd29yZFwiXSA9IGUudGFyZ2V0LnZhbHVlO1xyXG4gICAgdGhpcy5oZWFkZXJbXCJtZXRob2RcIl0gPSBcImNoYW5nZVBhc3N3b3JkXCI7XHJcbiAgICB0aGlzLmhlYWRlcltcInNvdXJjZVwiXSA9IFwicXNcIjtcclxuICAgIGNvbnNvbGUubG9nKEpTT04uc3RyaW5naWZ5KHJlcU9iaikpO1xyXG4gICAgbGV0IG9wdGlvbnMgPSAoeyBoZWFkZXJzOiBuZXcgSHR0cEhlYWRlcnModGhpcy5oZWFkZXIpIH0pO1xyXG4gICAgdGhpcy5zc1xyXG4gICAgICAuU2F2ZShyZXFPYmosIG9wdGlvbnMsIFwiY29udGFjdC9sb2FkQ29udGFjdFwiKVxyXG4gICAgICAudGhlbigocmVzcG9uc2U6IGFueSkgPT4ge1xyXG4gICAgICAgIGlmIChyZXNwb25zZS5zdGF0dXMgPT0gXCJTVUNDRVNTXCIpIHtcclxuICAgICAgICAgIGxldCByZXN1bHQgPSByZXNwb25zZS5yZXN1bHQ7XHJcbiAgICAgICAgICB0aGlzLnVzZXJEZXRhaWxzID0gcmVzdWx0LnVzZXJEZXRhaWxzO1xyXG4gICAgICAgICAgdGhpcy5wYWdlRGVmaW5hdGlvblBzd2RDbmcgPSByZXN1bHQucGFnZURlZmluYXRpb247XHJcbiAgICAgICAgICB0aGlzLnRvYXN0ci5zdWNjZXNzKHJlc3BvbnNlLm1lc3NhZ2UpO1xyXG4gICAgICAgICAgdGhpcy5sb2FkVXNlclBhc3N3b3JkKCk7XHJcbiAgICAgICAgICB0aGlzLnNwaW5uZXJTZXJ2aWNlLmhpZGUoKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5zcGlubmVyU2VydmljZS5oaWRlKCk7XHJcbiAgICAgICAgICB0aGlzLnRvYXN0ci5lcnJvcihyZXNwb25zZS5tZXNzYWdlKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pXHJcbiAgICAgIC5jYXRjaCgoZXJyOiBhbnkpID0+IHtcclxuICAgICAgICB0aGlzLnNwaW5uZXJTZXJ2aWNlLmhpZGUoKTtcclxuICAgICAgICB0aGlzLnRvYXN0ci5lcnJvcihlcnIubWVzc2FnZSk7XHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgY2hhbmdlUGFzc3dvcmQob2JqKSB7XHJcbiAgICB0aGlzLnNwaW5uZXJTZXJ2aWNlLnNob3coKTtcclxuICAgIGxldCByZXFPYmogPSB7fTtcclxuICAgIHJlcU9ialtcImZvcm1ObWVcIl0gPSBcInNldFBhc3N3b3JkRm9ybVwiO1xyXG4gICAgcmVxT2JqW1widXNlcklkblwiXSA9IG9iai51c2VySWRuO1xyXG4gICAgcmVxT2JqW1wicGFzc3dvcmRcIl0gPSBvYmoucGFzc3dvcmQ7XHJcbiAgICB0aGlzLmhlYWRlcltcIm1ldGhvZFwiXSA9IFwiY2hhbmdlUGFzc3dvcmRcIjtcclxuICAgIHRoaXMuaGVhZGVyW1wic291cmNlXCJdID0gXCJxc1wiO1xyXG4gICAgY29uc29sZS5sb2coSlNPTi5zdHJpbmdpZnkocmVxT2JqKSk7XHJcbiAgICBsZXQgb3B0aW9ucyA9ICh7IGhlYWRlcnM6IG5ldyBIdHRwSGVhZGVycyh0aGlzLmhlYWRlcikgfSk7XHJcbiAgICB0aGlzLnNzXHJcbiAgICAgIC5TYXZlKHJlcU9iaiwgb3B0aW9ucywgXCJjb250YWN0L2xvYWRDb250YWN0XCIpXHJcbiAgICAgIC50aGVuKChyZXNwb25zZTogYW55KSA9PiB7XHJcbiAgICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1cyA9PSBcIlNVQ0NFU1NcIikge1xyXG4gICAgICAgICAgbGV0IHJlc3VsdCA9IHJlc3BvbnNlLnJlc3VsdDtcclxuICAgICAgICAgIHRoaXMudXNlckRldGFpbHMgPSByZXN1bHQudXNlckRldGFpbHM7XHJcbiAgICAgICAgICB0aGlzLnBhZ2VEZWZpbmF0aW9uUHN3ZENuZyA9IHJlc3VsdC5wYWdlRGVmaW5hdGlvbjtcclxuICAgICAgICAgIHRoaXMudG9hc3RyLnN1Y2Nlc3MocmVzcG9uc2UubWVzc2FnZSk7XHJcbiAgICAgICAgICB0aGlzLmxvYWRVc2VyUGFzc3dvcmQoKTtcclxuICAgICAgICAgIHRoaXMuc3Bpbm5lclNlcnZpY2UuaGlkZSgpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLnNwaW5uZXJTZXJ2aWNlLmhpZGUoKTtcclxuICAgICAgICAgIHRoaXMudG9hc3RyLmVycm9yKHJlc3BvbnNlLm1lc3NhZ2UpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSlcclxuICAgICAgLmNhdGNoKChlcnI6IGFueSkgPT4ge1xyXG4gICAgICAgIHRoaXMuc3Bpbm5lclNlcnZpY2UuaGlkZSgpO1xyXG4gICAgICAgIHRoaXMudG9hc3RyLmVycm9yKGVyci5tZXNzYWdlKTtcclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuXHJcbiAgZ2JsT2JqO1xyXG4gIGV4aXRzaW5nVXNlckxpc3QgPSBbXTtcclxuICBsb2FkQXBwbGljYXRpb25Vc2VyVGVybXMobm1laWRuKSB7XHJcbiAgICB0aGlzLnNwaW5uZXJTZXJ2aWNlLnNob3coKTtcclxuICAgIGNvbnN0IHJlcU9iaiA9IHt9O1xyXG4gICAgcmVxT2JqW1wibm1lX2lkblwiXSA9IHRoaXMucm91dGUuc25hcHNob3QucGFyYW1NYXAuZ2V0KFwic3VidlwiKTtcclxuICAgIHJlcU9ialtcImZvcm1ObWVcIl0gPSBcImNvbnRhY3RTZWFyY2hGb3JtXCI7XHJcbiAgICB0aGlzLmhlYWRlcltcIm1ldGhvZFwiXSA9IFwibG9hZEFzc2lnbkFwcGxpY2F0aW9uVXNlcnRlcm1zXCI7XHJcbiAgIGNvbnN0IG9wdGlvbnMgPSAoeyBoZWFkZXJzOiBuZXcgSHR0cEhlYWRlcnModGhpcy5oZWFkZXIpIH0pO1xyXG4gICAgdGhpcy5jc1xyXG4gICAgICAubG9hZChyZXFPYmosIG9wdGlvbnMsIFwiY29udGFjdC9sb2FkQ29udGFjdFwiKVxyXG4gICAgICAudGhlbigocmVzcG9uc2U6IGFueSkgPT4ge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKHJlc3BvbnNlKTtcclxuICAgICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzID09IFwiU1VDQ0VTU1wiKSB7XHJcbiAgICAgICAgICBsZXQgcmVzdWx0ID0gcmVzcG9uc2UucmVzdWx0O1xyXG4gICAgICAgICAgdGhpcy5nYmxPYmogPSByZXN1bHQ7XHJcbiAgICAgICAgICB0aGlzLnRlcm1zTGlzdCA9IHJlc3VsdC50ZXJtc0xpc3Q7XHJcbiAgICAgICAgICBsZXQgYXBwbFVzZXJMaXN0ID0gcmVzdWx0LmFwcGxVc2VyTGlzdDtcclxuICAgICAgICAgIHRoaXMuZXhpdHNpbmdVc2VyTGlzdCA9IFtdO1xyXG4gICAgICAgICAgdGhpcy50ZXJtc0xpc3QuZm9yRWFjaChlbGVtZW50ID0+IHtcclxuICAgICAgICAgICAgbGV0IHVzZXJJZG5MaXN0ID0gZWxlbWVudC51c2VySWRuTGlzdCB8fCBbXTtcclxuICAgICAgICAgICAgdXNlcklkbkxpc3QuZm9yRWFjaCh1c2VySWRuID0+IHtcclxuICAgICAgICAgICAgICBpZiAodGhpcy5leGl0c2luZ1VzZXJMaXN0LmluZGV4T2YodXNlcklkbikgPT0gLTEpXHJcbiAgICAgICAgICAgICAgICB0aGlzLmV4aXRzaW5nVXNlckxpc3QucHVzaCh1c2VySWRuKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICAgIGRlYnVnZ2VyXHJcbiAgICAgICAgICBsZXQgcGVuZGluZ1VzZXJMaXN0ID0gW11cclxuICAgICAgICAgIGFwcGxVc2VyTGlzdC5mb3JFYWNoKGVsZW1lbnQgPT4ge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5leGl0c2luZ1VzZXJMaXN0LmluZGV4T2YoZWxlbWVudC5rKSA9PSAtMSlcclxuICAgICAgICAgICAgICBwZW5kaW5nVXNlckxpc3QucHVzaChlbGVtZW50KTtcclxuICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgIHRoaXMudGVybXNMaXN0LmZvckVhY2goZWxlbWVudCA9PiB7XHJcbiAgICAgICAgICAgIGxldCB1c2VySWRuTGlzdCA9IGVsZW1lbnQudXNlcklkbkxpc3QgfHwgW107XHJcbiAgICAgICAgICAgIGxldCBUZXJtVXNlckxpc3QgPSBwZW5kaW5nVXNlckxpc3QubWFwKG9wdGlvbiA9PiAoe1xyXG4gICAgICAgICAgICAgIHZhbHVlOiBvcHRpb24uayxcclxuICAgICAgICAgICAgICBsYWJlbDogb3B0aW9uLnZcclxuICAgICAgICAgICAgfSkpO1xyXG4gICAgICAgICAgICBpZiAodXNlcklkbkxpc3QubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgIGFwcGxVc2VyTGlzdC5mb3JFYWNoKGVsZW1lbnQgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKHVzZXJJZG5MaXN0LmluZGV4T2YoZWxlbWVudC5rKSAhPSAtMSkge1xyXG4gICAgICAgICAgICAgICAgICBUZXJtVXNlckxpc3QucHVzaCh7IFwidmFsdWVcIjogZWxlbWVudC5rLCBcImxhYmVsXCI6IGVsZW1lbnQudiB9KTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsZW1lbnQuVGVybVVzZXJMaXN0ID0gVGVybVVzZXJMaXN0O1xyXG5cclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgY29uc29sZS5sb2codGhpcy50ZXJtc0xpc3QpO1xyXG4gICAgICAgICAgLy8gIHRoaXMuYXBwbFVzZXJMaXN0ID0gcmVzdWx0LmFwcGxVc2VyTGlzdDtcclxuICAgICAgICAgIC8vICBsZXQgdGVtcGFyciA9IFtdO1xyXG4gICAgICAgICAgLy90aGlzLmV4aXRzaW5nVXNlcj1bXTtcclxuICAgICAgICAgIC8vIHRoaXMudGVybXNMaXN0LmZvckVhY2goZWxlbWVudCA9PiB7XHJcbiAgICAgICAgICAvLyBkZWJ1Z2dlclxyXG4gICAgICAgICAgLy8gZWxlbWVudC51c2VySWRuTGlzdC5mb3JFYWNoKGEgPT4ge1xyXG4gICAgICAgICAgLy8gICB0ZW1wYXJyLnB1c2goYS50b1N0cmluZygpKTtcclxuICAgICAgICAgIC8vICBpZih0aGlzLmV4aXRzaW5nVXNlci5pbmRleE9mKGEudG9TdHJpbmcoKSk9PS0xKVxyXG4gICAgICAgICAgLy8gIHRoaXMuZXhpdHNpbmdVc2VyLnB1c2goYS50b1N0cmluZygpKTtcclxuICAgICAgICAgIC8vIH0pO1xyXG4gICAgICAgICAgLy8gZWxlbWVudC51c2VySWRuTGlzdCA9IHRlbXBhcnI7XHJcbiAgICAgICAgICAvLyB0ZW1wYXJyID0gW107XHJcbiAgICAgICAgICAvLyAgZWxlbWVudC5zZWxlY3RlZFZhbHMgPSBbXTtcclxuICAgICAgICAgIC8vIH0pO1xyXG4gICAgICAgICAgLy8gbGV0IGFwcGxVc2VyTGlzdD1yZXN1bHQuYXBwbFVzZXJMaXN0O1xyXG4gICAgICAgICAgLy8gdGhpcy5hcHBsVXNlckxpc3Q9W11cclxuICAgICAgICAgIC8vIGFwcGxVc2VyTGlzdC5mb3JFYWNoKGVsZW1lbnQgPT4ge1xyXG4gICAgICAgICAgLy8gICBpZih0aGlzLmV4aXRzaW5nVXNlci5pbmRleE9mKGVsZW1lbnQuayk9PS0xKVxyXG4gICAgICAgICAgLy8gICB0aGlzLmFwcGxVc2VyTGlzdC5wdXNoKGVsZW1lbnQpO1xyXG4gICAgICAgICAgLy8gfSk7XHJcblxyXG5cclxuICAgICAgICAgIHRoaXMuYXBwbFVzZXJMaXN0ID0gdGhpcy5hcHBsVXNlckxpc3QubWFwKG9wdGlvbiA9PiAoe1xyXG4gICAgICAgICAgICB2YWx1ZTogb3B0aW9uLmssXHJcbiAgICAgICAgICAgIGxhYmVsOiBvcHRpb24udlxyXG4gICAgICAgICAgfSkpO1xyXG5cclxuICAgICAgICAgIGNvbnNvbGUubG9nKHRoaXMuYXBwbFVzZXJMaXN0KTtcclxuICAgICAgICAgIC8vIHNldFRpbWVvdXQoKCkgPT4ge1xyXG5cclxuICAgICAgICAgIC8vIH0sIDEwMDApO1xyXG5cclxuICAgICAgICAgIHRoaXMuc3Bpbm5lclNlcnZpY2UuaGlkZSgpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLnNwaW5uZXJTZXJ2aWNlLmhpZGUoKTtcclxuICAgICAgICAgIHRoaXMudG9hc3RyLmVycm9yKHJlc3BvbnNlLm1lc3NhZ2UpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSlcclxuICAgICAgLmNhdGNoKChlcnI6IGFueSkgPT4ge1xyXG4gICAgICAgIHRoaXMuc3Bpbm5lclNlcnZpY2UuaGlkZSgpO1xyXG4gICAgICAgIHRoaXMudG9hc3RyLmVycm9yKGVyci5tZXNzYWdlKTtcclxuICAgICAgfSk7XHJcbiAgfVxyXG4gIHNlbGVjdGVkUGVvcGxlMyA9IFtdO1xyXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcclxuICAgIGNvbnNvbGUubG9nKFwiaW4gdmlld2FmdGVyXCIpO1xyXG4gIH1cclxuXHJcbiAgbG9hZFN1Z2dkYXRhKHN0ciwgcGFnZV9pdGVtX2lkbiwgZm9ybV9maWVsZCkge1xyXG4gICAgaWYgKHN0ciA9PSB1bmRlZmluZWQgfHwgc3RyID09ICcnIHx8IHN0ci5sZW5ndGggPCAzKSByZXR1cm47XHJcbiAgICBsZXQgcmVxT2JqID0ge307XHJcbiAgICByZXFPYmpbXCJmb3JtTm1lXCJdID0gdGhpcy5yb3V0ZS5zbmFwc2hvdC5wYXJhbXNbXCJmcm1ubWVcIl0gfHwgJ2xvYWRTdWdnZXN0aW9uRGF0YSc7XHJcbiAgICByZXFPYmpbJ3BhZ2VfaXRlbV9pZG4nXSA9IHBhZ2VfaXRlbV9pZG47XHJcbiAgICByZXFPYmpbJ2xpa2VTdHInXSA9IHN0cjtcclxuICAgIHRoaXMuaGVhZGVyWydtZXRob2QnXSA9ICdsb2FkU3VnZ2VzdGlvbkRhdGFCeUl0ZW1JZG4nO1xyXG4gICAgY29uc29sZS5sb2codGhpcy5oZWFkZXIpO1xyXG4gICAgbGV0IG9wdGlvbnMgPSAoeyBoZWFkZXJzOiBuZXcgSHR0cEhlYWRlcnModGhpcy5oZWFkZXIpIH0pO1xyXG4gICAgY29uc29sZS5sb2coSlNPTi5zdHJpbmdpZnkocmVxT2JqKSk7XHJcbiAgICAvLyBjb25zb2xlLmxvZyh0aGlzLmhlYWRlcik7XHJcbiAgICB0aGlzLmNzLmxvYWQocmVxT2JqLCBvcHRpb25zLCBcImNvbnRhY3QvcmVnaXN0ZXJEYXRhXCIpLnRoZW4oKHJlc3BvbnNlOiBhbnkpID0+IHtcclxuICAgICAgY29uc29sZS5sb2cocmVzcG9uc2UpO1xyXG4gICAgICBsZXQgcmVzdWx0ID0gcmVzcG9uc2UucmVzdWx0O1xyXG4gICAgICBsZXQgc3VnZ2VzdGlvbkRhdGEgPSByZXN1bHQuc3VnZ2VzdGlvbkRhdGEgfHwgW107XHJcbiAgICAgIGxldCBsaXN0ID0gc3VnZ2VzdGlvbkRhdGEubWFwKG9wdGlvbiA9PiAoe1xyXG4gICAgICAgIHZhbHVlOiBvcHRpb24uayxcclxuICAgICAgICBsYWJlbDogb3B0aW9uLnZcclxuICAgICAgfSkpO1xyXG4gICAgICB0aGlzLnNxbEFycmF5W2Zvcm1fZmllbGRdID0gbGlzdDtcclxuICAgIH0pXHJcblxyXG4gIH1cclxuXHJcbiAgbG9hZEpubFN1Z2dkYXRhKHN0ciwgYXR0cl9ubWUsIG1kbCkge1xyXG4gICAgaWYgKHN0ciA9PSB1bmRlZmluZWQgfHwgc3RyID09ICcnIHx8IHN0ci5sZW5ndGggPCAzKSByZXR1cm47XHJcbiAgICBsZXQgcmVxT2JqID0ge307XHJcbiAgICByZXFPYmpbXCJmb3JtTm1lXCJdID0gdGhpcy5yb3V0ZS5zbmFwc2hvdC5wYXJhbXNbXCJmcm1ubWVcIl0gfHwgJ2xvYWRTdWdnZXN0aW9uRGF0YSc7XHJcbiAgICByZXFPYmpbJ2F0dHJfbm1lJ10gPSBhdHRyX25tZTtcclxuICAgIHJlcU9ialsnbWRsJ10gPSBtZGw7XHJcbiAgICByZXFPYmpbJ2xpa2VTdHInXSA9IHN0cjtcclxuICAgIHRoaXMuaGVhZGVyWydtZXRob2QnXSA9ICdsb2FkU3VnZ2VzdGlvbkRhdGFCeUF0dHJObWUnO1xyXG4gICAgY29uc29sZS5sb2codGhpcy5oZWFkZXIpO1xyXG4gICAgbGV0IG9wdGlvbnMgPSAoeyBoZWFkZXJzOiBuZXcgSHR0cEhlYWRlcnModGhpcy5oZWFkZXIpIH0pO1xyXG4gICAgY29uc29sZS5sb2coSlNPTi5zdHJpbmdpZnkocmVxT2JqKSk7XHJcbiAgICAvLyBjb25zb2xlLmxvZyh0aGlzLmhlYWRlcik7XHJcbiAgICB0aGlzLmNzLmxvYWQocmVxT2JqLCBvcHRpb25zLCBcImFjY291bnRzL2FjY0xlZGdlclwiKS50aGVuKChyZXNwb25zZTogYW55KSA9PiB7XHJcbiAgICAgIGNvbnNvbGUubG9nKHJlc3BvbnNlKTtcclxuICAgICAgbGV0IHJlc3VsdCA9IHJlc3BvbnNlLnJlc3VsdDtcclxuICAgICAgbGV0IHN1Z2dlc3Rpb25EYXRhID0gcmVzdWx0LnN1Z2dlc3Rpb25EYXRhIHx8IFtdO1xyXG4gICAgICBsZXQgbGlzdCA9IHN1Z2dlc3Rpb25EYXRhLm1hcChvcHRpb24gPT4gKHtcclxuICAgICAgICB2YWx1ZTogb3B0aW9uLnYsXHJcbiAgICAgICAgbGFiZWw6IG9wdGlvbi52XHJcbiAgICAgIH0pKTtcclxuICAgICAgdGhpcy5zcWxBcnJheVthdHRyX25tZV0gPSBsaXN0O1xyXG4gICAgfSlcclxuXHJcbiAgfVxyXG5cclxuICBvbmNoYW5lVmFscyhlLCBieXJ0cm1pZCwgc2VsZWN0ZWRVc2VySWRuKSB7XHJcbiAgICB0aGlzLmRhdGFUcm5zTGlzdCA9IFsuLi50aGlzLnRlcm1zTGlzdF07XHJcbiAgICB0aGlzLmJ5ck9ialtcImJ1eWVyX3Rlcm1zX2lkblwiXSA9IGJ5cnRybWlkO1xyXG4gICAgaWYgKHNlbGVjdGVkVXNlcklkbiAhPSB1bmRlZmluZWQpXHJcbiAgICAgIHRoaXMuYnlyT2JqW1widXNlcklkbkxpc3RcIl0gPSBzZWxlY3RlZFVzZXJJZG47XHJcblxyXG4gICAgbGV0IGNoZWNrQm94ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoYnlydHJtaWQpO1xyXG4gICAgaWYgKFxyXG4gICAgICAoY2hlY2tCb3ggYXMgYW55KS5jaGVja2VkID09IHRydWUgJiZcclxuICAgICAgc2VsZWN0ZWRVc2VySWRuICE9IHVuZGVmaW5lZCAmJlxyXG4gICAgICBzZWxlY3RlZFVzZXJJZG4gIT0gXCJcIlxyXG4gICAgKSB7XHJcbiAgICAgIHZhciBpbmRleCA9IHRoaXMuZGF0YVRybnNMaXN0LmZpbmRJbmRleChcclxuICAgICAgICB4ID0+IHguYnV5ZXJfdGVybXNfaWRuID09IGJ5cnRybWlkXHJcbiAgICAgICk7XHJcbiAgICAgIGlmIChpbmRleCA+IC0xKSB7XHJcbiAgICAgICAgY29uc3QgZmlsdGVyZWRBcnIgPSB0aGlzLmRhdGFUcm5zTGlzdC5maWx0ZXIoXHJcbiAgICAgICAgICBpdGVtID0+IGl0ZW0uYnV5ZXJfdGVybXNfaWRuICE9PSBieXJ0cm1pZFxyXG4gICAgICAgICk7XHJcbiAgICAgICAgdGhpcy5kYXRhVHJuc0xpc3QgPSBmaWx0ZXJlZEFycjtcclxuICAgICAgfVxyXG4gICAgICAvLyB9XHJcbiAgICAgIHRoaXMuZGF0YVRybnNMaXN0LnB1c2godGhpcy5ieXJPYmopO1xyXG4gICAgICB0aGlzLmJ5ck9iaiA9IHt9O1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY29uc3QgZmlsdGVyZWRBcnIgPSB0aGlzLmRhdGFUcm5zTGlzdC5maWx0ZXIoXHJcbiAgICAgICAgaXRlbSA9PiBpdGVtLmJ1eWVyX3Rlcm1zX2lkbiAhPT0gYnlydHJtaWRcclxuICAgICAgKTtcclxuICAgICAgdGhpcy5kYXRhVHJuc0xpc3QgPSBmaWx0ZXJlZEFycjtcclxuICAgIH1cclxuICB9XHJcbiAgb25jaGFuZ2VVc2VyU2VsZWN0KGUsIHRybW9iaikge1xyXG4gICAgbGV0IG9iajogYW55ID0ge307XHJcbiAgICBvYmogPSB7IC4uLnRybW9iaiB9O1xyXG5cclxuICAgIC8vIG9iai5zZWxlY3RlZFZhbHMgPSBbLi4udHJtb2JqLnVzZXJJZG5MaXN0XTtcclxuICAgIC8vIGlmIChvYmouc2VsZWN0ZWRWYWxzLmluZGV4T2YoZS52YWx1ZSkgIT0gLTEpIHtcclxuICAgIC8vICAgb2JqLnNlbGVjdGVkVmFscy5wdXNoKGUudmFsdWUpO1xyXG4gICAgLy8gfVxyXG5cclxuICAgIGlmIChvYmouc2VsZWN0ZWRWYWxzLmluZGV4T2YoZS52YWx1ZSkgIT0gLTEpIHtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIG9iai5zZWxlY3RlZFZhbHMucHVzaChlLnZhbHVlKTtcclxuICAgIH1cclxuICAgIHRybW9iaiA9IG9iajtcclxuICAgIGNvbnNvbGUubG9nKHRoaXMudGVybXNMaXN0KTtcclxuICB9XHJcbiAgb25jaGFuZ2VVc2VyRGVzZWxlY3QoZSwgdHJtb2JqKSB7XHJcbiAgICBkZWJ1Z2dlclxyXG4gICAgbGV0IG9iajogYW55ID0ge307XHJcbiAgICBvYmogPSB7IC4uLnRybW9iaiB9O1xyXG4gICAgb2JqLnNlbGVjdGVkVmFscy5zcGxpY2UodGhpcy50ZXJtc0xpc3QuaW5kZXhPZihlLnZhbHVlKSwgMSk7XHJcbiAgICB0cm1vYmogPSBvYmo7XHJcbiAgICBjb25zb2xlLmxvZyh0aGlzLnRlcm1zTGlzdCk7XHJcbiAgfVxyXG5cclxuICBvbmNoYW5nZVVzZXJMaXN0KGUsIHRybW9iaiwgdHlwKSB7XHJcblxyXG4gICAgdGhpcy5zcGlubmVyU2VydmljZS5zaG93KCk7XHJcbiAgICBjb25zdCByZXFPYmogPSB7fTtcclxuICAgIHJlcU9ialtcImJ1eWVyX3Rlcm1zX2lkblwiXSA9IHRybW9iai5idXllcl90ZXJtc19pZG47XHJcbiAgICByZXFPYmpbXCJ1c2VyX2lkblwiXSA9IGUudmFsdWU7XHJcbiAgICByZXFPYmpbJ2FjdGlvbiddID0gdHlwO1xyXG4gICAgcmVxT2JqW1wiZm9ybU5tZVwiXSA9IFwiY29udGFjdFNlYXJjaEZvcm1cIjtcclxuICAgIHRoaXMuaGVhZGVyW1wibWV0aG9kXCJdID0gXCJhc3NpZ25Vc2VyVGVybVwiO1xyXG4gICBjb25zdCBvcHRpb25zID0gKHsgaGVhZGVyczogbmV3IEh0dHBIZWFkZXJzKHRoaXMuaGVhZGVyKSB9KTtcclxuICAgIHRoaXMuY3NcclxuICAgICAgLmxvYWQocmVxT2JqLCBvcHRpb25zLCBcImNvbnRhY3QvbG9hZENvbnRhY3RcIilcclxuICAgICAgLnRoZW4oKHJlc3BvbnNlOiBhbnkpID0+IHtcclxuICAgICAgICBjb25zb2xlLmxvZyhyZXNwb25zZSk7XHJcbiAgICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1cyA9PSBcIlNVQ0NFU1NcIikge1xyXG5cclxuICAgICAgICAgIHRoaXMubG9hZEFwcGxpY2F0aW9uVXNlclRlcm1zKCcnKTtcclxuICAgICAgICAgIHRoaXMuc3Bpbm5lclNlcnZpY2UuaGlkZSgpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLnNwaW5uZXJTZXJ2aWNlLmhpZGUoKTtcclxuICAgICAgICAgIHRoaXMudG9hc3RyLmVycm9yKHJlc3BvbnNlLm1lc3NhZ2UpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSlcclxuICAgICAgLmNhdGNoKChlcnI6IGFueSkgPT4ge1xyXG4gICAgICAgIHRoaXMuc3Bpbm5lclNlcnZpY2UuaGlkZSgpO1xyXG4gICAgICAgIHRoaXMudG9hc3RyLmVycm9yKGVyci5tZXNzYWdlKTtcclxuICAgICAgfSk7XHJcblxyXG5cclxuICB9XHJcbiAgc2F2ZUFwcFVzZXJ0ZXJtcygpIHtcclxuICAgIGxldCB2YWxBcnIgPSBbXTtcclxuICAgIHRoaXMudGVybXNMaXN0LmZvckVhY2goZWxlbWVudCA9PiB7XHJcbiAgICAgIGxldCBjaGVja0JveCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGVsZW1lbnQuYnV5ZXJfdGVybXNfaWRuKTtcclxuICAgICAgaWYgKChjaGVja0JveCBhcyBhbnkpLmNoZWNrZWQgPT0gdHJ1ZSkge1xyXG4gICAgICAgIGxldCBvYmogPSB7fTtcclxuICAgICAgICBvYmpbXCJidXllcl90ZXJtc19pZG5cIl0gPSBlbGVtZW50LmJ1eWVyX3Rlcm1zX2lkbjtcclxuICAgICAgICBvYmpbXCJ1c2VySWRuTGlzdFwiXSA9IGVsZW1lbnQudXNlcklkbkxpc3Q7XHJcbiAgICAgICAgdmFsQXJyLnB1c2gob2JqKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgY29uc3QgcmVxT2JqID0ge307XHJcbiAgICByZXFPYmpbXCJubWVfaWRuXCJdID0gdGhpcy5yb3V0ZS5zbmFwc2hvdC5wYXJhbU1hcC5nZXQoXCJzdWJ2XCIpO1xyXG4gICAgcmVxT2JqW1wiZm9ybU5tZVwiXSA9IFwiY29udGFjdFNlYXJjaEZvcm1cIjtcclxuICAgIHRoaXMuaGVhZGVyW1wibWV0aG9kXCJdID0gXCJzYXZlQXNzaWduQXBwbGljYXRpb25Vc2VydGVybXNcIjtcclxuICAgIHJlcU9ialtcImRhdGFUcm5zTGlzdFwiXSA9IHZhbEFycjtcclxuXHJcbiAgICBjb25zb2xlLmxvZyhyZXFPYmopO1xyXG4gICAgY29uc29sZS5sb2coSlNPTi5zdHJpbmdpZnkocmVxT2JqKSk7XHJcblxyXG4gICBjb25zdCBvcHRpb25zID0gKHsgaGVhZGVyczogbmV3IEh0dHBIZWFkZXJzKHRoaXMuaGVhZGVyKSB9KTtcclxuICAgIHRoaXMuc3NcclxuICAgICAgLlNhdmUocmVxT2JqLCBvcHRpb25zLCBcImNvbnRhY3QvbG9hZENvbnRhY3RcIilcclxuICAgICAgLnRoZW4oKHJlc3BvbnNlOiBhbnkpID0+IHtcclxuICAgICAgICBjb25zb2xlLmxvZyhyZXNwb25zZSk7XHJcbiAgICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1cyA9PSBcIlNVQ0NFU1NcIikge1xyXG4gICAgICAgICAgY29uc29sZS5sb2cocmVzcG9uc2Uuc3RhdHVzKTtcclxuICAgICAgICAgIHRoaXMuc3Bpbm5lclNlcnZpY2UuaGlkZSgpO1xyXG4gICAgICAgICAgdGhpcy50b2FzdHIuc3VjY2VzcyhyZXNwb25zZS5tZXNzYWdlKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5zcGlubmVyU2VydmljZS5oaWRlKCk7XHJcbiAgICAgICAgICB0aGlzLnRvYXN0ci5lcnJvcihyZXNwb25zZS5tZXNzYWdlKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pXHJcbiAgICAgIC5jYXRjaCgoZXJyOiBhbnkpID0+IHtcclxuICAgICAgICB0aGlzLnNwaW5uZXJTZXJ2aWNlLmhpZGUoKTtcclxuICAgICAgICB0aGlzLnRvYXN0ci5lcnJvcihlcnIubWVzc2FnZSk7XHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgZ2V0RWRpdERhdGEoZGF0YSkge1xyXG4gICAgdGhpcy5mb3JtRmlsZHMgPSBbXTtcclxuICAgIGxldCByZXFPYmogPSB7fTtcclxuICAgIHZhciBwYWdlVFAgPSB0aGlzLnBhZ2VJbmZvLnBhZ2VfdHlwO1xyXG4gICAgcmVxT2JqW1wiZm9ybU5tZVwiXSA9IHRoaXMucGFnZUluZm8uZm9ybV9ubWU7XHJcbiAgICByZXFPYmpbXCJwcmltYXJ5S2V5XCJdID0gdGhpcy5wYWdlSW5mby5wcmltYXJ5X2tleV9maWVsZDtcclxuICAgIHJlcU9ialtcInBhZ2VUeXBcIl0gPSB0aGlzLnBhZ2VJbmZvLnBhZ2VfdHlwO1xyXG4gICAgcmVxT2JqW1wic2Vjb25kS2V5RmllbGRcIl0gPSB0aGlzLnBhZ2VJbmZvLnNlY29uZF9rZXlfZmllbGQ7XHJcbiAgICBpZiAodGhpcy50YkNlbGwgIT0gbnVsbCkge1xyXG4gICAgICByZXFPYmpbXCJpbkxpbmVFZGl0Q29sdW1uXCJdID0gdGhpcy50YkNlbGw7XHJcbiAgICB9XHJcbiAgICByZXFPYmpbXCJwcmltYXJ5SWRcIl0gPSB0aGlzLnBpZDtcclxuICAgIGlmIChwYWdlVFAgPT0gXCJqc29uRm9ybVwiKSB7XHJcbiAgICAgIHJlcU9ialtcIndoZXJlS2V5c1wiXSA9IHRoaXMucGFnZUluZm8ud2hlcmVfY2xhdXNlO1xyXG4gICAgICByZXFPYmpbXCJ3aGVyZVZsdXNcIl0gPSB0aGlzLndoZXJlTWFwW3RoaXMucGFnZUluZm8ud2hlcmVfY2xhdXNlXTtcclxuICAgIH1cclxuICAgIGNvbnNvbGUubG9nKHJlcU9iaik7XHJcbiAgICB0aGlzLmhlYWRlcltcIm1ldGhvZFwiXSA9IFwibG9hZEFkZEVkaXRcIjtcclxuICAgIGxldCBvcHRpb25zID0gKHsgaGVhZGVyczogbmV3IEh0dHBIZWFkZXJzKHRoaXMuaGVhZGVyKSB9KTtcclxuICAgIHRoaXMuc3NcclxuICAgICAgLmdldEVkaXREKHJlcU9iaiwgb3B0aW9ucylcclxuICAgICAgLnRoZW4oKHJlc3BvbnNlOiBhbnkpID0+IHtcclxuICAgICAgICBjb25zb2xlLmxvZyhyZXNwb25zZSk7XHJcbiAgICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1cyA9PSBcIlNVQ0NFU1NcIiAmJiByZXNwb25zZS5tZXNzYWdlICE9IFwiU1VDQ0VTU1wiKSB7XHJcbiAgICAgICAgICB0aGlzLnNwaW5uZXJTZXJ2aWNlLmhpZGUoKTtcclxuICAgICAgICAgIHRoaXMudG9hc3RyLmVycm9yKHJlc3BvbnNlLm1lc3NhZ2UpO1xyXG4gICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzID09IFwiU1VDQ0VTU1wiKSB7XHJcbiAgICAgICAgICB0aGlzLnNwaW5uZXJTZXJ2aWNlLmhpZGUoKTtcclxuICAgICAgICAgIGlmICh0aGlzLnRiQ2VsbCAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiZGF0YW1kYnRuXCIpLmNsaWNrKCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB0aGlzLmZvcm1GaWxkcyA9IHJlc3BvbnNlLmZvcm1GaWVsZHM7XHJcbiAgICAgICAgICB0aGlzLmZvcm1GaWxkcy5mb3JFYWNoKChlbGVtZW50LCBpbmRleCkgPT4ge1xyXG4gICAgICAgICAgICBpZiAoZWxlbWVudC5mb3JtX2ZpZWxkX3R5cCA9PSBcInRiXCIpIHtcclxuICAgICAgICAgICAgICB0aGlzLmdldExvdkxpc3QoZWxlbWVudC5mb3JtX2ZpZWxkLCBlbGVtZW50LnBhZ2VfaXRlbV9pZG4pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChlbGVtZW50LmZvcm1fZmllbGRfdHlwID09IFwic1wiKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5nZXRMb3ZMaXN0KGVsZW1lbnQuZm9ybV9maWVsZCwgZWxlbWVudC5wYWdlX2l0ZW1faWRuKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoZWxlbWVudC5mb3JtX2ZpZWxkX3R5cCA9PSBcInNiXCIpIHtcclxuXHJcbiAgICAgICAgICAgICAgbGV0IHFyeSA9IGVsZW1lbnQuaGVscCB8fCAnJztcclxuICAgICAgICAgICAgICBpZiAocXJ5ICE9ICcnICYmIGVsZW1lbnQuZGVmYXVsdF92YWx1ZSAhPSBcIlwiKSB7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMucGFnZUluZm8uZm9ybV9ubWUgPT0gJ2FkZHJlc3NNYXN0ZXInIHx8IHRoaXMucGFnZUluZm8uZm9ybV9ubWUgPT0gJ2FjY0FkZHJlc3NNYXN0ZXInIHx8IHRoaXMucGFnZUluZm8uZm9ybV9ubWUgPT0gJ2FjY0FkZHJlc3NEZXRhaWxzJykge1xyXG4gICAgICAgICAgICAgICAgICBsZXQgY2l0eSA9IGRhdGEuY2l0eV9ubSB8fCAnJztcclxuICAgICAgICAgICAgICAgICAgbGV0IHN0YXRlID0gZGF0YS5zdGF0ZV9ubSB8fCAnJztcclxuICAgICAgICAgICAgICAgICAgbGV0IGNvdW50cnkgPSBkYXRhLmNvdW50cnlfbm0gfHwgJyc7XHJcbiAgICAgICAgICAgICAgICAgIGlmIChjaXR5ICE9ICcnICYmIGNvdW50cnkgIT0gJycpIHtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgc3RyID0gY2l0eSArIFwiI1wiICsgY291bnRyeTtcclxuICAgICAgICAgICAgICAgICAgICBzdHIgPSBzdHIudG9Mb3dlckNhc2UoKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmdldExvdkNpdHlMaXN0KGVsZW1lbnQsIHN0cik7XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgIHFyeSA9IHFyeS5yZXBsYWNlKFwiI0lETlwiLCBcIidcIiArIGVsZW1lbnQuZGVmYXVsdF92YWx1ZSArIFwiJ1wiKVxyXG4gICAgICAgICAgICAgICAgICB0aGlzLmdldExvdkxpc3RkYXRhKGVsZW1lbnQpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoZWxlbWVudC5mb3JtX2ZpZWxkX3R5cCA9PSBcImhkXCIpIHtcclxuICAgICAgICAgICAgICBlbGVtZW50LmRlZmF1bHRfdmFsdWUgPSB0aGlzLndoZXJlTWFwW2VsZW1lbnQuZm9ybV9maWVsZF07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKGVsZW1lbnQuZm9ybV9maWVsZF90eXAgPT0gXCJzcVwiKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5nZXRTZXF1ZW5jZShlbGVtZW50KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoZWxlbWVudC5kdGFfdHlwID09IFwic2FcIikge1xyXG4gICAgICAgICAgICAgIHRoaXMuZ2V0TG92TGlzdChlbGVtZW50LmZvcm1fZmllbGQsIGVsZW1lbnQucGFnZV9pdGVtX2lkbik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKGVsZW1lbnQuZHRhX3R5cCA9PSBcInNyXCIpIHtcclxuICAgICAgICAgICAgICB0aGlzLmdldExvdkxpc3QoZWxlbWVudC5mb3JtX2ZpZWxkLCBlbGVtZW50LnBhZ2VfaXRlbV9pZG4pO1xyXG4gICAgICAgICAgICAgIHRoaXMuZGZ2ID0gZWxlbWVudC5kZWZhdWx0X3ZhbHVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChlbGVtZW50LmZvcm1fZmllbGRfdHlwID09IFwiaGNcIikge1xyXG4gICAgICAgICAgICAgIGVsZW1lbnQuZGVmYXVsdF92YWx1ZSA9IGVsZW1lbnQubG92X3FyeTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAvLyBpZiAoZWxlbWVudC5mb3JtX2ZpZWxkX3R5cCA9PSAnbCcpIHtcclxuICAgICAgICAgICAgLy8gICBlbGVtZW50Lmt2Lm1hcChvcHRpb24gPT4gKHtcclxuICAgICAgICAgICAgLy8gICAgIHZhbHVlOiBvcHRpb24uayxcclxuICAgICAgICAgICAgLy8gICAgIGxhYmVsOiBvcHRpb24udlxyXG4gICAgICAgICAgICAvLyAgIH0pKTtcclxuICAgICAgICAgICAgLy8gfVxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgICB0aGlzLnNwaW5uZXJTZXJ2aWNlLmhpZGUoKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5zcGlubmVyU2VydmljZS5oaWRlKCk7XHJcbiAgICAgICAgICB0aGlzLnRvYXN0ci5lcnJvcihyZXNwb25zZS5tZXNzYWdlKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pXHJcbiAgICAgIC5jYXRjaCgoZXJyOiBhbnkpID0+IHtcclxuICAgICAgICB0aGlzLnNwaW5uZXJTZXJ2aWNlLmhpZGUoKTtcclxuICAgICAgICB0aGlzLnRvYXN0ci5lcnJvcihlcnIubWVzc2FnZSk7XHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgZ2V0U2VxdWVuY2UoZWxlbWVudCkge1xyXG4gICAgbGV0IHJlcU9iaiA9IHt9O1xyXG4gICAgcmVxT2JqW1wic2VxXCJdID0gZWxlbWVudC5sb3ZfcXJ5O1xyXG4gICAgdGhpcy5oZWFkZXJbXCJtZXRob2RcIl0gPSBcImdldFNlcVwiO1xyXG4gICAgbGV0IG9wdGlvbnMgPSAoeyBoZWFkZXJzOiBuZXcgSHR0cEhlYWRlcnModGhpcy5oZWFkZXIpIH0pO1xyXG4gICAgdGhpcy5zc1xyXG4gICAgICAuZ2V0RGF0YShyZXFPYmosIG9wdGlvbnMpXHJcbiAgICAgIC50aGVuKChyZXNwb25zZTogYW55KSA9PiB7XHJcbiAgICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1cyA9PSBcIlNVQ0NFU1NcIikge1xyXG4gICAgICAgICAgdmFyIHNlcSA9IHJlc3BvbnNlLnNlcTtcclxuICAgICAgICAgIGVsZW1lbnQuZGVmYXVsdF92YWx1ZSA9IHNlcTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy50b2FzdHIuZXJyb3IocmVzcG9uc2UubWVzc2FnZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KVxyXG4gICAgICAuY2F0Y2goKGVycjogYW55KSA9PiB7XHJcbiAgICAgICAgdGhpcy50b2FzdHIuZXJyb3IoZXJyLm1lc3NhZ2UpO1xyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIGdldFNlcXVlbmNlMShzZXFubWUpIHtcclxuICAgIHZhciBzZXEgPSBcIlwiO1xyXG4gICAgZGVidWdnZXI7XHJcbiAgICBsZXQgcmVxT2JqID0ge307XHJcbiAgICByZXFPYmpbXCJzZXFcIl0gPSBzZXFubWU7XHJcbiAgICB0aGlzLmhlYWRlcltcIm1ldGhvZFwiXSA9IFwiZ2V0U2VxXCI7XHJcbiAgICBsZXQgb3B0aW9ucyA9ICh7IGhlYWRlcnM6IG5ldyBIdHRwSGVhZGVycyh0aGlzLmhlYWRlcikgfSk7XHJcbiAgICB0aGlzLnNzXHJcbiAgICAgIC5nZXREYXRhKHJlcU9iaiwgb3B0aW9ucylcclxuICAgICAgLnRoZW4oKHJlc3BvbnNlOiBhbnkpID0+IHtcclxuICAgICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzID09IFwiU1VDQ0VTU1wiKSB7XHJcbiAgICAgICAgICBzZXEgPSByZXNwb25zZS5zZXE7XHJcbiAgICAgICAgICByZXR1cm4gc2VxO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLnRvYXN0ci5lcnJvcihyZXNwb25zZS5tZXNzYWdlKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pXHJcbiAgICAgIC5jYXRjaCgoZXJyOiBhbnkpID0+IHtcclxuICAgICAgICB0aGlzLnRvYXN0ci5lcnJvcihlcnIubWVzc2FnZSk7XHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgZ2V0TG92TGlzdGRhdGEodGJsRikge1xyXG4gICAgbGV0IHJlcU9iaiA9IHt9O1xyXG4gICAgcmVxT2JqW1wicGFnZV9pdGVtX2lkblwiXSA9IHRibEYucGFnZV9pdGVtX2lkbjtcclxuICAgIHJlcU9ialtcInN0clwiXSA9IHRibEYuZGVmYXVsdF92YWx1ZTtcclxuICAgIHRoaXMuaGVhZGVyW1wibWV0aG9kXCJdID0gXCJsb2FkQ2l0eUNvdW50cnlEYXRhXCI7XHJcbiAgICBsZXQgb3B0aW9ucyA9ICh7IGhlYWRlcnM6IG5ldyBIdHRwSGVhZGVycyh0aGlzLmhlYWRlcikgfSk7XHJcbiAgICB0aGlzLnNzXHJcbiAgICAgIC5nZXREYXRhKHJlcU9iaiwgb3B0aW9ucylcclxuICAgICAgLnRoZW4oKHJlc3BvbnNlOiBhbnkpID0+IHtcclxuICAgICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzID09IFwiU1VDQ0VTU1wiKSB7XHJcbiAgICAgICAgICB0aGlzLmxvdnMgPSByZXNwb25zZS5rdi5tYXAob3B0aW9uID0+ICh7XHJcbiAgICAgICAgICAgIHZhbHVlOiBvcHRpb24uayxcclxuICAgICAgICAgICAgbGFiZWw6IG9wdGlvbi52XHJcbiAgICAgICAgICB9KSk7XHJcblxyXG4gICAgICAgICAgdGhpcy5zcWxBcnJheVt0YmxGLmZvcm1fZmllbGRdID0gdGhpcy5sb3ZzO1xyXG5cclxuICAgICAgICAgIGlmICh0aGlzLmRmdiA9PSBudWxsKSByZXR1cm47XHJcbiAgICAgICAgICBpZiAodGJsRiA9PSBcImF0dHJcIikge1xyXG4gICAgICAgICAgICB0aGlzLnNxbEFycmF5W3RibEZdLmZvckVhY2goKGVsZW1lbnQsIGluZGV4KSA9PiB7XHJcbiAgICAgICAgICAgICAgdGhpcy5kZnYuZm9yRWFjaChlbGVtZW50MiA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAoZWxlbWVudC52ID09IGVsZW1lbnQyKSB7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuc3FsQXJyYXlbdGJsRl0uc3BsaWNlKGluZGV4LCAxKTtcclxuICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy50b2FzdHIuZXJyb3IocmVzcG9uc2UubWVzc2FnZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KVxyXG4gICAgICAuY2F0Y2goKGVycjogYW55KSA9PiB7XHJcbiAgICAgICAgdGhpcy50b2FzdHIuZXJyb3IoZXJyLm1lc3NhZ2UpO1xyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIGdldExvdkxpc3QodGJsRiwgcGFnZV9pdGVtX2lkbikge1xyXG4gICAgbGV0IHJlcU9iaiA9IHt9O1xyXG4gICAgcmVxT2JqW1wicGFnZV9pdGVtX2lkblwiXSA9IHBhZ2VfaXRlbV9pZG47XHJcbiAgICB0aGlzLmhlYWRlcltcIm1ldGhvZFwiXSA9IFwiZ2V0RGF0YUJ5SXRlbUlkblwiO1xyXG4gICAgbGV0IG9wdGlvbnMgPSAoeyBoZWFkZXJzOiBuZXcgSHR0cEhlYWRlcnModGhpcy5oZWFkZXIpIH0pO1xyXG4gICAgdGhpcy5zc1xyXG4gICAgICAuZ2V0RGF0YShyZXFPYmosIG9wdGlvbnMpXHJcbiAgICAgIC50aGVuKChyZXNwb25zZTogYW55KSA9PiB7XHJcbiAgICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1cyA9PSBcIlNVQ0NFU1NcIikge1xyXG4gICAgICAgICAgdGhpcy5sb3ZzID0gcmVzcG9uc2Uua3YubWFwKG9wdGlvbiA9PiAoe1xyXG4gICAgICAgICAgICB2YWx1ZTogb3B0aW9uLmssXHJcbiAgICAgICAgICAgIGxhYmVsOiBvcHRpb24udlxyXG4gICAgICAgICAgfSkpO1xyXG5cclxuICAgICAgICAgIHRoaXMuc3FsQXJyYXlbdGJsRl0gPSB0aGlzLmxvdnM7XHJcblxyXG4gICAgICAgICAgaWYgKHRoaXMuZGZ2ID09IG51bGwpIHJldHVybjtcclxuICAgICAgICAgIGlmICh0YmxGID09IFwiYXR0clwiKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc3FsQXJyYXlbdGJsRl0uZm9yRWFjaCgoZWxlbWVudCwgaW5kZXgpID0+IHtcclxuICAgICAgICAgICAgICB0aGlzLmRmdi5mb3JFYWNoKGVsZW1lbnQyID0+IHtcclxuICAgICAgICAgICAgICAgIGlmIChlbGVtZW50LnYgPT0gZWxlbWVudDIpIHtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5zcWxBcnJheVt0YmxGXS5zcGxpY2UoaW5kZXgsIDEpO1xyXG4gICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLnRvYXN0ci5lcnJvcihyZXNwb25zZS5tZXNzYWdlKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pXHJcbiAgICAgIC5jYXRjaCgoZXJyOiBhbnkpID0+IHtcclxuICAgICAgICB0aGlzLnRvYXN0ci5lcnJvcihlcnIubWVzc2FnZSk7XHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgZ2V0TG92Q2l0eUxpc3QodGJsRiwgc3RyKSB7XHJcbiAgICBkZWJ1Z2dlcjtcclxuICAgIGxldCByZXFPYmogPSB7fTtcclxuICAgIHJlcU9ialtcInBhZ2VfaXRlbV9pZG5cIl0gPSB0YmxGLnBhZ2VfaXRlbV9pZG47XHJcbiAgICByZXFPYmpbXCJzdHJcIl0gPSBzdHI7XHJcbiAgICB0aGlzLmhlYWRlcltcIm1ldGhvZFwiXSA9IFwibG9hZENpdHlDb3VudHJ5RGF0YVwiO1xyXG4gICAgY29uc29sZS5sb2coSlNPTi5zdHJpbmdpZnkocmVxT2JqKSk7XHJcbiAgICBsZXQgb3B0aW9ucyA9ICh7IGhlYWRlcnM6IG5ldyBIdHRwSGVhZGVycyh0aGlzLmhlYWRlcikgfSk7XHJcbiAgICB0aGlzLnNzXHJcbiAgICAgIC5nZXREYXRhKHJlcU9iaiwgb3B0aW9ucylcclxuICAgICAgLnRoZW4oKHJlc3BvbnNlOiBhbnkpID0+IHtcclxuICAgICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzID09IFwiU1VDQ0VTU1wiKSB7XHJcbiAgICAgICAgICBkZWJ1Z2dlcjtcclxuXHJcbiAgICAgICAgICB0aGlzLmxvdnMgPSByZXNwb25zZS5rdi5tYXAob3B0aW9uID0+ICh7XHJcbiAgICAgICAgICAgIHZhbHVlOiBvcHRpb24uayxcclxuICAgICAgICAgICAgbGFiZWw6IG9wdGlvbi52XHJcbiAgICAgICAgICB9KSk7XHJcbiAgICAgICAgICBkZWJ1Z2dlcjtcclxuXHJcbiAgICAgICAgICB0aGlzLnNxbEFycmF5W3RibEYuZm9ybV9maWVsZF0gPSB0aGlzLmxvdnM7XHJcbiAgICAgICAgICBpZiAodGhpcy5sb3ZzLmxlbmd0aCA+IDEpXHJcbiAgICAgICAgICAgIHRibEYuZGVmYXVsdF92YWx1ZSA9IHRoaXMubG92c1sxXS52YWx1ZTtcclxuXHJcblxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLnRvYXN0ci5lcnJvcihyZXNwb25zZS5tZXNzYWdlKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pXHJcbiAgICAgIC5jYXRjaCgoZXJyOiBhbnkpID0+IHtcclxuICAgICAgICB0aGlzLnRvYXN0ci5lcnJvcihlcnIubWVzc2FnZSk7XHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgRGVsZXRlVGVybXMoKSB7XHJcbiAgICB0aGlzLnNwaW5uZXJTZXJ2aWNlLnNob3coKTtcclxuICAgIGxldCByZXFPYmogPSB7fTtcclxuICAgIHJlcU9ialtcImZvcm1ObWVcIl0gPSB0aGlzLnBhZ2VJbmZvLmZvcm1fbm1lO1xyXG4gICAgcmVxT2JqW1wiYnV5ZXJUZXJtc0lkblwiXSA9IHRoaXMucGlkO1xyXG4gICAgdGhpcy5oZWFkZXJbXCJtZXRob2RcIl0gPSBcImRlbGV0ZUJ1eWVyVGVybXNcIjtcclxuICAgIGNvbnNvbGUubG9nKEpTT04uc3RyaW5naWZ5KHJlcU9iaikpO1xyXG4gICBjb25zdCBvcHRpb25zID0gKHsgaGVhZGVyczogbmV3IEh0dHBIZWFkZXJzKHRoaXMuaGVhZGVyKSB9KTtcclxuICAgIHRoaXMuY3MubG9hZChyZXFPYmosIG9wdGlvbnMsIFwiY29udGFjdC9sb2FkQ29udGFjdFwiKS50aGVuKChyZXNwb25zZTogYW55KSA9PiB7XHJcbiAgICAgIGlmIChyZXNwb25zZS5zdGF0dXMgPT0gXCJTVUNDRVNTXCIpIHtcclxuICAgICAgICB0aGlzLnBhcmFPYmpbXCJmb3JtTm1lXCJdID0gdGhpcy5uYXZmb3JtO1xyXG4gICAgICAgIHRoaXMuZ2V0UGFnZURlZmluYXRpb24oKTtcclxuICAgICAgICB0aGlzLnNwaW5uZXJTZXJ2aWNlLmhpZGUoKTtcclxuXHJcbiAgICAgICAgdGhpcy50b2FzdHIuc3VjY2VzcyhyZXNwb25zZS5tZXNzYWdlKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLnNwaW5uZXJTZXJ2aWNlLmhpZGUoKTtcclxuXHJcbiAgICAgICAgdGhpcy50b2FzdHIuZXJyb3IocmVzcG9uc2UubWVzc2FnZSk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgZGVsZXRlRGF0YUxpc3QoKSB7XHJcbiAgICBkZWJ1Z2dlclxyXG4gICAgdGhpcy5zcGlubmVyU2VydmljZS5zaG93KCk7XHJcbiAgICBsZXQgcmVxT2JqID0ge307XHJcbiAgICByZXFPYmpbXCJmb3JtTm1lXCJdID0gdGhpcy5wYWdlSW5mby5mb3JtX25tZTtcclxuICAgIHJlcU9ialtcInBhZ2VUeXBcIl0gPSB0aGlzLnBhZ2VJbmZvLnBhZ2VfdHlwO1xyXG4gICAgcmVxT2JqW1wicHJpbWFyeUtleVwiXSA9IHRoaXMucGFnZUluZm8ucHJpbWFyeV9rZXlfZmllbGQ7XHJcbiAgICByZXFPYmpbXCJwcmltYXJ5SWRcIl0gPSB0aGlzLnBpZDtcclxuICAgIHJlcU9ialtcInRhYmxlTmFtZVwiXSA9IHRoaXMucGFnZUluZm8udGFibGVfbmFtZTtcclxuICAgIHJlcU9ialtcInRybnNUeXBlXCJdID0gXCJERUxFVEVcIjtcclxuICAgIGlmICh0aGlzLnBrICE9IFwiXCIgJiYgdGhpcy5wdiAhPSBcIlwiKSB7XHJcbiAgICAgIHJlcU9ialtcIndoZXJlS2V5c1wiXSA9IHRoaXMucGs7XHJcbiAgICAgIHJlcU9ialtcIndoZXJlVmx1c1wiXSA9IFwiXCIgKyB0aGlzLnB2O1xyXG4gICAgfVxyXG4gICAgdGhpcy5oZWFkZXJbXCJtZXRob2RcIl0gPSBcInNhdmVcIjtcclxuICAgIGNvbnNvbGUubG9nKHJlcU9iaik7XHJcbiAgICBsZXQgb3B0aW9ucyA9ICh7IGhlYWRlcnM6IG5ldyBIdHRwSGVhZGVycyh0aGlzLmhlYWRlcikgfSk7XHJcbiAgICB0aGlzLnNzXHJcbiAgICAgIC5kZWxldGVEYXRhKHJlcU9iaiwgb3B0aW9ucylcclxuICAgICAgLnRoZW4oKHJlc3BvbnNlOiBhbnkpID0+IHtcclxuICAgICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzID09IFwiU1VDQ0VTU1wiKSB7XHJcbiAgICAgICAgICB0aGlzLmdldFBhZ2VEZWZpbmF0aW9uKCk7XHJcbiAgICAgICAgICAvLyB0aGlzLmRhdGFsaXN0LnNsaWNlKHRoaXMuY2ksIDEpO1xyXG4gICAgICAgICAgdGhpcy5kZWxldGVjbHNidG4ubmF0aXZlRWxlbWVudC5jbGljaygpO1xyXG4gICAgICAgICAgdGhpcy5zcGlubmVyU2VydmljZS5oaWRlKCk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMuc3Bpbm5lclNlcnZpY2UuaGlkZSgpO1xyXG4gICAgICAgICAgdGhpcy50b2FzdHIuZXJyb3IocmVzcG9uc2UubWVzc2FnZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KVxyXG4gICAgICAuY2F0Y2goKGVycjogYW55KSA9PiB7XHJcbiAgICAgICAgdGhpcy5zcGlubmVyU2VydmljZS5oaWRlKCk7XHJcbiAgICAgICAgdGhpcy50b2FzdHIuZXJyb3IoZXJyLm1lc3NhZ2UpO1xyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIGNoa0Z1bihmbCwgZkRhdGEpIHtcclxuICAgIGlmIChmbC52YWxpZGF0aW9ucyA9PSBcIlwiIHx8IGZsLnZhbGlkYXRpb25zID09IG51bGwpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgaWYgKGZsLnZhbGlkYXRpb25zID09IFwidmFsaWRhdGVRdWVyeVwiKSB7XHJcbiAgICAgICAgdGhpcy52YWxpZGF0ZVF1ZXJ5KGZsLCBmRGF0YSk7XHJcbiAgICAgIH0gZWxzZSBpZiAoZmwudmFsaWRhdGlvbnMgPT0gXCJpc1VuaXF1ZVwiKSB7XHJcbiAgICAgICAgdGhpcy5pc1VuaXF1ZShmbCwgZkRhdGEpO1xyXG4gICAgICB9IGVsc2UgaWYgKGZsLnZhbGlkYXRpb25zID09ICdzZXRuYW1lcHJpbnQnKSB7XHJcbiAgICAgICAgdGhpcy5zZXRuYW1lcHJpbnQoZmwsIGZEYXRhKTtcclxuICAgICAgfSBlbHNlIGlmIChmbC52YWxpZGF0aW9ucyA9PSAnc2V0ZmFjdG9yJykge1xyXG4gICAgICAgIHRoaXMuc2V0ZmFjdG9yKGZsLCBmRGF0YSk7XHJcbiAgICAgIH0gZWxzZSBpZiAoZmwuZm9ybV9maWVsZF90eXAgPT0gXCJzXCIpIHtcclxuICAgICAgICBpZiAoZmwudmFsaWRhdGlvbnMgPT0gbnVsbCkge1xyXG4gICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBsZXQgc3EgPSBmbC52YWxpZGF0aW9ucy5yZXBsYWNlKC8jUVZBTC9nLCBmRGF0YSk7XHJcbiAgICAgICAgLy90aGlzLmdldExvdkxpc3RkYXRhKGZsLmNvbHVtbl9rZXksIHNxKTtcclxuICAgICAgfVxyXG4gICAgICBlbHNlIGlmIChmbC52YWxpZGF0aW9ucyA9PSBcImlzRXhpc3RcIikge1xyXG4gICAgICAgIGlmIChmbC52YWxpZGF0aW9ucyA9PSBudWxsKSB7XHJcbiAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuaXNFeGlzdChmbCwgZkRhdGEpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzZXRuYW1lcHJpbnQoZmwsIGZEYXRhKSB7XHJcbiAgICBkZWJ1Z2dlclxyXG4gICAgbGV0IG5tZUlkbiA9IGZEYXRhO1xyXG4gICAgbGV0IGxpc3QgPSB0aGlzLnNxbEFycmF5W2ZsLmZvcm1fZmllbGRdIHx8IFtdO1xyXG4gICAgbGV0IG5td0R0bCA9IGxpc3QuZmluZCh4ID0+IHgudmFsdWUgPT0gbm1lSWRuKSB8fCAnJztcclxuICAgIGlmIChubXdEdGwgIT0gJycpIHtcclxuICAgICAgdGhpcy5mb3JtRmlsZHMuZm9yRWFjaChlbGVtZW50ID0+IHtcclxuICAgICAgICBpZiAoZWxlbWVudC5mb3JtX2ZpZWxkID09ICdubWUnKVxyXG4gICAgICAgICAgZWxlbWVudC5kZWZhdWx0X3ZhbHVlID0gbm13RHRsLmxhYmVsXHJcbiAgICAgICAgaWYgKGVsZW1lbnQuZm9ybV9maWVsZCA9PSAncHJpbnRfbm1lJylcclxuICAgICAgICAgIGVsZW1lbnQuZGVmYXVsdF92YWx1ZSA9IG5td0R0bC5sYWJlbFxyXG5cclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzZXRmYWN0b3IoZmwsIGZEYXRhKSB7XHJcbiAgICBsZXQgZmN0ciA9IC0xO1xyXG4gICAgaWYgKGZEYXRhID09ICdpbmNvbWUnIHx8IGZEYXRhID09ICdhc3NldHMnKVxyXG4gICAgICBmY3RyID0gMTtcclxuICAgIHRoaXMuZm9ybUZpbGRzLmZvckVhY2goZWxlbWVudCA9PiB7XHJcbiAgICAgIGlmIChlbGVtZW50LmZvcm1fZmllbGQgPT0gJ2ZjdHInKVxyXG4gICAgICAgIGVsZW1lbnQuZGVmYXVsdF92YWx1ZSA9IGZjdHJcclxuICAgIH0pO1xyXG4gIH1cclxuICBpc0V4aXN0KGR0YU9iaiwgZkRhdGEpIHtcclxuICAgIGNvbnNvbGUubG9nKGZEYXRhKTtcclxuICAgIGlmIChmRGF0YSA9PSBcIlwiIHx8IGZEYXRhID09IG51bGwpIHJldHVybjtcclxuICAgIGxldCByZXFPYmogPSB7fTtcclxuICAgIHJlcU9ialtcInVzZXJuYW1lXCJdID0gZkRhdGE7XHJcbiAgICB0aGlzLmhlYWRlcltcIm1ldGhvZFwiXSA9IFwiaXNVc2VyRXhpc3RcIjtcclxuICAgIGxldCBvcHRpb25zID0gKHsgaGVhZGVyczogbmV3IEh0dHBIZWFkZXJzKHRoaXMuaGVhZGVyKSB9KTtcclxuICAgIHRoaXMuc3NcclxuICAgICAgLnZhbGlkYXRlKHJlcU9iaiwgb3B0aW9ucywgXCJjb250YWN0L2xvYWRDb250YWN0XCIpXHJcbiAgICAgIC50aGVuKChyZXNwb25zZTogYW55KSA9PiB7XHJcbiAgICAgICAgaWYgKHJlc3BvbnNlLm1lc3NhZ2UgPT0gXCJcIikge1xyXG4gICAgICAgICAgdGhpcy51c3Jpc0V4aXN0ID0gdHJ1ZTtcclxuICAgICAgICAgIHRoaXMuaWNvID0gXCJjaGVja1wiO1xyXG4gICAgICAgICAgdGhpcy5vbkVyciA9IGR0YU9iai5mb3JtX2ZpZWxkO1xyXG4gICAgICAgICAgLy8gdGhpcy5mbGFzaE1lc3NhZ2VzU2VydmljZS5zaG93KHJlc3BvbnNlLm1lc3NhZ2UsIHsgY3NzQ2xhc3M6ICdhbGVydC1kYW5nZXInLCB0aW1lb3V0OiAzMDAwIH0pO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBkdGFPYmouZGVmYXVsdF92YWx1ZSA9IFwiXCI7XHJcbiAgICAgICAgICB0aGlzLnVzcmlzRXhpc3QgPSB0cnVlO1xyXG4gICAgICAgICAgdGhpcy5pY28gPSBcInRpbWVzXCI7XHJcbiAgICAgICAgICB0aGlzLnNwaW5uZXJTZXJ2aWNlLmhpZGUoKTtcclxuICAgICAgICAgIHRoaXMub25FcnIgPSBkdGFPYmouZm9ybV9maWVsZDtcclxuICAgICAgICAgIHRoaXMudG9hc3RyLmVycm9yKHJlc3BvbnNlLm1lc3NhZ2UpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSlcclxuICAgICAgLmNhdGNoKChlcnI6IGFueSkgPT4ge1xyXG4gICAgICAgIHRoaXMuc3Bpbm5lclNlcnZpY2UuaGlkZSgpO1xyXG4gICAgICAgIHRoaXMudG9hc3RyLmVycm9yKGVyci5tZXNzYWdlKTtcclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuICBzdWJtaXRGb3JtKGZvcm1WYWwsIGJ0bikge1xyXG4gICAgdGhpcy5vblN1Ym1pdChmb3JtVmFsLCBidG4pO1xyXG4gIH1cclxuXHJcbiAgb25TdWJtaXQoZm9ybVZhbCwgYnRuKSB7XHJcbiAgICB2YXIgdCA9IE9iamVjdC5rZXlzKGZvcm1WYWwuZm9ybS5jb250cm9scykuZm9yRWFjaChmaWVsZCA9PiB7XHJcbiAgICAgIGNvbnN0IGNvbnRyb2wgPSBmb3JtVmFsLmZvcm0uZ2V0KGZpZWxkKTtcclxuICAgICAgY29udHJvbC5tYXJrQXNUb3VjaGVkKHsgb25seVNlbGY6IHRydWUgfSk7XHJcbiAgICB9KTtcclxuICAgIGlmIChmb3JtVmFsLmZvcm0udmFsaWQgPT0gdHJ1ZSkge1xyXG4gICAgICB0aGlzLmFkZGVkaXQoZm9ybVZhbC52YWx1ZSwgYnRuKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGFkZGVkaXQodiwgYnRuKSB7XHJcblxyXG4gICAgdGhpcy5zcGlubmVyU2VydmljZS5zaG93KCk7XHJcbiAgICBpZiAodGhpcy5wYWdlSW5mby5mb3JtX25tZSA9PSAnYWRkcmVzc01hc3RlcicgfHwgdGhpcy5wYWdlSW5mby5mb3JtX25tZSA9PSAnYWNjQWRkcmVzc01hc3RlcicgfHwgdGhpcy5wYWdlSW5mby5mb3JtX25tZSA9PSAnYWNjQWRkcmVzc0RldGFpbHMnKSB7XHJcbiAgICAgIGxldCBjaXR5U3RyID0gdi5jaXR5X25tIHx8ICcnO1xyXG4gICAgICBsZXQgY2l0eVN0ckxzdCA9IGNpdHlTdHIuc3BsaXQoJyMnKTtcclxuICAgICAgaWYgKGNpdHlTdHJMc3QubGVuZ3RoID09IDMpIHtcclxuICAgICAgICB2LmNvdW50cnlfbm0gPSBjaXR5U3RyTHN0WzJdO1xyXG4gICAgICAgIHYuc3RhdGVfbm0gPSBjaXR5U3RyTHN0WzFdO1xyXG4gICAgICAgIHYuY2l0eV9ubSA9IGNpdHlTdHJMc3RbMF07XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy50b2FzdHIuc3VjY2VzcyhcIlBsZWFzZSBjaGVjayBjaXR5XCIpO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgICBpZiAodGhpcy5idG5OYW1lICE9IFwiQWRkXCIpXHJcbiAgICAgICAgdlsnYWRkcmVzc19pZG4nXSA9IHRoaXMucGlkO1xyXG4gICAgfVxyXG5cclxuICAgIGxldCByZXFPYmogPSB7fTtcclxuICAgIHZhciBwYWdlVFAgPSB0aGlzLnBhZ2VJbmZvLnBhZ2VfdHlwLnRyaW0oKTtcclxuICAgIHJlcU9ialtcImZvcm1ObWVcIl0gPSB0aGlzLnBhZ2VJbmZvLmZvcm1fbm1lO1xyXG4gICAgcmVxT2JqW1wicHJpbWFyeUtleVwiXSA9IHRoaXMucGFnZUluZm8ucHJpbWFyeV9rZXlfZmllbGQ7XHJcbiAgICByZXFPYmpbXCJwYWdlVHlwXCJdID0gdGhpcy5wYWdlSW5mby5wYWdlX3R5cDtcclxuICAgIHJlcU9ialtcInNlY29uZEtleUZpZWxkXCJdID0gdGhpcy5wYWdlSW5mby5zZWNvbmRfa2V5X2ZpZWxkO1xyXG4gICAgcmVxT2JqW1wicHJpbWFyeUlkXCJdID0gdGhpcy5idG5OYW1lID09IFwiQWRkXCIgPyBcIlwiIDogXCJcIiArIHRoaXMucGlkO1xyXG4gICAgcmVxT2JqW1widGFibGVOYW1lXCJdID0gdGhpcy5wYWdlSW5mby50YWJsZV9uYW1lO1xyXG4gICAgcmVxT2JqW1widHJuc1R5cGVcIl0gPSB0aGlzLmJ0bk5hbWUgPT0gXCJBZGRcIiA/IFwiQUREXCIgOiBcIkVESVRcIjtcclxuICAgIHJlcU9ialtcImRhdGFUcm5zRHRsXCJdID0gdjtcclxuICAgIGlmIChwYWdlVFAgPT0gXCJqc29uRm9ybVwiKSB7XHJcbiAgICAgIHJlcU9ialtcIndoZXJlS2V5c1wiXSA9IHRoaXMucGFnZUluZm8ud2hlcmVfY2xhdXNlO1xyXG4gICAgICByZXFPYmpbXCJ3aGVyZVZsdXNcIl0gPSB0aGlzLndoZXJlTWFwW3RoaXMucGFnZUluZm8ud2hlcmVfY2xhdXNlXTtcclxuICAgIH1cclxuICAgIGNvbnNvbGUubG9nKEpTT04uc3RyaW5naWZ5KHJlcU9iaikpO1xyXG4gICAgdGhpcy5oZWFkZXJbXCJtZXRob2RcIl0gPSBcInNhdmVcIjtcclxuICAgIGxldCBvcHRpb25zID0gKHsgaGVhZGVyczogbmV3IEh0dHBIZWFkZXJzKHRoaXMuaGVhZGVyKSB9KTtcclxuICAgIHRoaXMuc3NcclxuICAgICAgLmFkZERhdGEocmVxT2JqLCBvcHRpb25zKVxyXG4gICAgICAudGhlbigocmVzcG9uc2U6IGFueSkgPT4ge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKHJlc3BvbnNlKTtcclxuICAgICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzID09IFwiU1VDQ0VTU1wiKSB7XHJcbiAgICAgICAgICBidG4uZGlzYWJsZWQgPSBmYWxzZTtcclxuICAgICAgICAgIHRoaXMudGJDZWxsID0gbnVsbDtcclxuICAgICAgICAgIHRoaXMuc2VhcmNoRiA9IG51bGw7XHJcbiAgICAgICAgICB0aGlzLmNsb3NlYnRuLm5hdGl2ZUVsZW1lbnQuY2xpY2soKTtcclxuICAgICAgICAgIC8vIGlmICh0aGlzLmJ0bk5hbWUgIT0gJ0FkZCcpIHtcclxuICAgICAgICAgIC8vICAgZm9yIChjb25zdCBrZXkgaW4gdGhpcy5nbGJPYmopIHtcclxuICAgICAgICAgIC8vICAgICBpZiAodi5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XHJcbiAgICAgICAgICAvLyAgICAgICB0aGlzLmdsYk9ialtrZXldID0gdltrZXldXHJcbiAgICAgICAgICAvLyAgICAgfVxyXG4gICAgICAgICAgLy8gICB9XHJcbiAgICAgICAgICAvLyB9IGVsc2Uge1xyXG4gICAgICAgICAgLy8gZm9yIChjb25zdCBrZXkgaW4gdGhpcy5kYXRhbGlzdFswXSkge1xyXG4gICAgICAgICAgLy8gICBpZiAoIXYuaGFzT3duUHJvcGVydHkoa2V5KSkge1xyXG4gICAgICAgICAgLy8gICAgIHRoaXMuZ2xiT2JqW2tleV0gPSByZXNwb25zZS5faWQ7XHJcbiAgICAgICAgICAvLyAgIH1cclxuICAgICAgICAgIC8vICAgaWYgKHYuaGFzT3duUHJvcGVydHkoa2V5KSkge1xyXG4gICAgICAgICAgLy8gICAgIHRoaXMuZ2xiT2JqW2tleV0gPSB2W2tleV1cclxuICAgICAgICAgIC8vICAgfVxyXG4gICAgICAgICAgLy8gfVxyXG4gICAgICAgICAgLy8gdGhpcy5kYXRhbGlzdC5wdXNoKHRoaXMuZ2xiT2JqKTtcclxuICAgICAgICAgIHRoaXMuZ2V0UGFnZURlZmluYXRpb24oKTtcclxuICAgICAgICAgIC8vIH1cclxuICAgICAgICAgIHRoaXMuc3Bpbm5lclNlcnZpY2UuaGlkZSgpO1xyXG4gICAgICAgICAgdGhpcy50b2FzdHIuc3VjY2VzcyhyZXNwb25zZS5tZXNzYWdlKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgYnRuLmRpc2FibGVkID0gZmFsc2U7XHJcbiAgICAgICAgICB0aGlzLnRiQ2VsbCA9IG51bGw7XHJcbiAgICAgICAgICB0aGlzLnNwaW5uZXJTZXJ2aWNlLmhpZGUoKTtcclxuICAgICAgICAgIHRoaXMudG9hc3RyLmVycm9yKHJlc3BvbnNlLm1lc3NhZ2UpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSlcclxuICAgICAgLmNhdGNoKChlcnI6IGFueSkgPT4ge1xyXG4gICAgICAgIGJ0bi5kaXNhYmxlZCA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMudGJDZWxsID0gbnVsbDtcclxuICAgICAgICB0aGlzLnNwaW5uZXJTZXJ2aWNlLmhpZGUoKTtcclxuICAgICAgICB0aGlzLnRvYXN0ci5lcnJvcihlcnIubWVzc2FnZSk7XHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgdmFsaWRhdGVRdWVyeSh0YmxPYmosIGYpIHtcclxuICAgIGlmIChmID09IFwiXCIgfHwgZiA9PSBudWxsKSByZXR1cm47XHJcbiAgICBsZXQgcmVxT2JqID0ge307XHJcbiAgICByZXFPYmpbXCJzcWxcIl0gPSBmO1xyXG4gICAgdGhpcy5oZWFkZXJbXCJtZXRob2RcIl0gPSBcInZhbGlkYXRlUXVlcnlcIjtcclxuICAgIGxldCBvcHRpb25zID0gKHsgaGVhZGVyczogbmV3IEh0dHBIZWFkZXJzKHRoaXMuaGVhZGVyKSB9KTtcclxuICAgIHRoaXMuc3NcclxuICAgICAgLnZhbGlkYXRlKHJlcU9iaiwgb3B0aW9ucywgXCJzeXN0ZW0vYXBwcGFnZXNcIilcclxuICAgICAgLnRoZW4oKHJlc3BvbnNlOiBhbnkpID0+IHtcclxuICAgICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzID09IFwiU1VDQ0VTU1wiKSB7XHJcbiAgICAgICAgICB0aGlzLm9uRXJyID0gXCJcIjtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5zcGlubmVyU2VydmljZS5oaWRlKCk7XHJcbiAgICAgICAgICB0aGlzLm9uRXJyID0gdGJsT2JqLmZvcm1fZmllbGQ7XHJcbiAgICAgICAgICB0aGlzLnRvYXN0ci5lcnJvcihyZXNwb25zZS5tZXNzYWdlKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pXHJcbiAgICAgIC5jYXRjaCgoZXJyOiBhbnkpID0+IHtcclxuICAgICAgICB0aGlzLnNwaW5uZXJTZXJ2aWNlLmhpZGUoKTtcclxuICAgICAgICB0aGlzLnRvYXN0ci5lcnJvcihlcnIubWVzc2FnZSk7XHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgaXNVbmlxdWUoZHRhT2JqLCBpbnB1VmFsKSB7XHJcbiAgICBpZiAoaW5wdVZhbCA9PSBcIlwiIHx8IGlucHVWYWwgPT0gbnVsbCkgcmV0dXJuO1xyXG4gICAgbGV0IHJlcU9iaiA9IHt9O1xyXG4gICAgcmVxT2JqW1widGFibGVOYW1lXCJdID0gdGhpcy5wYWdlSW5mby50YWJsZV9uYW1lO1xyXG4gICAgcmVxT2JqW1wid2hlcmVLZXlzXCJdID0gZHRhT2JqLmZvcm1fZmllbGQ7XHJcbiAgICByZXFPYmpbXCJ3aGVyZVZsdXNcIl0gPSBpbnB1VmFsO1xyXG4gICAgcmVxT2JqW1wicHJpbWFyeUtleVwiXSA9IHRoaXMucGFnZUluZm8ucHJpbWFyeV9rZXlfZmllbGQ7XHJcbiAgICByZXFPYmpbXCJwcmltYXJ5SWRcIl0gPSB0aGlzLmJ0bk5hbWUgPT0gXCJBZGRcIiA/IFwiXCIgOiB0aGlzLnBpZDtcclxuICAgIHRoaXMuaGVhZGVyW1wibWV0aG9kXCJdID0gXCJ1bmlxdWVDb25RXCI7XHJcbiAgICBsZXQgb3B0aW9ucyA9ICh7IGhlYWRlcnM6IG5ldyBIdHRwSGVhZGVycyh0aGlzLmhlYWRlcikgfSk7XHJcbiAgICB0aGlzLnNzXHJcbiAgICAgIC52YWxpZGF0ZShyZXFPYmosIG9wdGlvbnMsIFwic3lzdGVtL2FwcHBhZ2VzXCIpXHJcbiAgICAgIC50aGVuKChyZXNwb25zZTogYW55KSA9PiB7XHJcbiAgICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1cyA9PSBcIlNVQ0NFU1NcIikge1xyXG4gICAgICAgICAgdGhpcy5vbkVyciA9IFwiXCI7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMuc3Bpbm5lclNlcnZpY2UuaGlkZSgpO1xyXG4gICAgICAgICAgdGhpcy5vbkVyciA9IGR0YU9iai5mb3JtX2ZpZWxkO1xyXG4gICAgICAgICAgdGhpcy50b2FzdHIuZXJyb3IocmVzcG9uc2UubWVzc2FnZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KVxyXG4gICAgICAuY2F0Y2goKGVycjogYW55KSA9PiB7XHJcbiAgICAgICAgdGhpcy5zcGlubmVyU2VydmljZS5oaWRlKCk7XHJcbiAgICAgICAgdGhpcy50b2FzdHIuZXJyb3IoZXJyLm1lc3NhZ2UpO1xyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIG9uUGFnZVNpemVDaGFuZ2UocCkge1xyXG4gICAgaWYgKHAgPT0gXCJBbGxcIikge1xyXG4gICAgICB0aGlzLnBhZ2VTaXplID0gdGhpcy5kYXRhbGlzdC5sZW5ndGg7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnBhZ2VTaXplID0gcDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHNldE9yZGVyKHZhbHVlOiBzdHJpbmcsIGkpIHtcclxuICAgIHRoaXMuc2hvd2FyciA9IGk7XHJcbiAgICBpZiAodGhpcy5vcmRlciA9PT0gdmFsdWUpIHtcclxuICAgICAgdGhpcy5yZXZlcnNlID0gIXRoaXMucmV2ZXJzZTtcclxuICAgIH1cclxuICAgIHRoaXMub3JkZXIgPSB2YWx1ZTtcclxuICB9XHJcblxyXG4gIGVkaXRDZWxsKGQsIHRiaCkge1xyXG4gICAgdGhpcy5nbGJPYmogPSBkO1xyXG4gICAgdGhpcy50YkNlbGwgPSB0Ymg7XHJcbiAgICB0aGlzLnRpdGxlID0gZC50aXRsZTtcclxuICAgIHRoaXMuYnRuTmFtZSA9IFwiRWRpdFwiO1xyXG4gICAgdGhpcy5waWQgPSBkW3RoaXMucGtmXTtcclxuICAgIHRoaXMuZ2V0RWRpdERhdGEoZCk7XHJcbiAgfVxyXG5cclxuICBnZXROYW1lQXR0cihmcm1ubWUsIG1kbCkge1xyXG4gICAgbGV0IHJlcU9iaiA9IHt9O1xyXG4gICAgcmVxT2JqW1wiZm9ybU5tZVwiXSA9IGZybW5tZTtcclxuICAgIHJlcU9ialtcIm5tZUlkblwiXSA9IHRoaXMucm91dGUuc25hcHNob3QucGFyYW1NYXAuZ2V0KFwic3VidlwiKTtcclxuICAgIHJlcU9ialsnbWRsTGlzdCddID0gbWRsO1xyXG4gICAgdGhpcy5oZWFkZXJbXCJtZXRob2RcIl0gPSBcImxvYWRObWVBdHRyXCI7XHJcbiAgICBjb25zb2xlLmxvZyhKU09OLnN0cmluZ2lmeShyZXFPYmopKTtcclxuICAgIGxldCBvcHRpb25zID0gKHsgaGVhZGVyczogbmV3IEh0dHBIZWFkZXJzKHRoaXMuaGVhZGVyKSB9KTtcclxuICAgIHRoaXMuc3NcclxuICAgICAgLnZhbGlkYXRlKHJlcU9iaiwgb3B0aW9ucywgXCJzeXN0ZW0vYXBwcGFnZXNcIilcclxuICAgICAgLnRoZW4oKHJlc3BvbnNlOiBhbnkpID0+IHtcclxuICAgICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzID09IFwiU1VDQ0VTU1wiKSB7XHJcbiAgICAgICAgICBjb25zb2xlLmxvZyhyZXNwb25zZSlcclxuICAgICAgICAgIHRoaXMudWlHcnBMaXN0ID0gcmVzcG9uc2UudWlHcnBMaXN0O1xyXG4gICAgICAgICAgdGhpcy51aUdycExpc3REdGwgPSByZXNwb25zZS51aUdycExpc3REdGw7XHJcbiAgICAgICAgICB0aGlzLmF0dHJDTGlzdER0bCA9IHJlc3BvbnNlLmF0dHJDTGlzdER0bDtcclxuICAgICAgICAgIHRoaXMuYXR0clFMaXN0RHRsID0gcmVzcG9uc2UuYXR0clFMaXN0RHRsO1xyXG4gICAgICAgICAgdGhpcy5kYXRhRHRsID0gcmVzcG9uc2UuZGF0YUR0bDtcclxuICAgICAgICAgIGNvbnNvbGUubG9nKHJlc3BvbnNlKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5zcGlubmVyU2VydmljZS5oaWRlKCk7XHJcbiAgICAgICAgICB0aGlzLnRvYXN0ci5lcnJvcihyZXNwb25zZS5tZXNzYWdlKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pXHJcbiAgICAgIC5jYXRjaCgoZXJyOiBhbnkpID0+IHtcclxuICAgICAgICB0aGlzLnNwaW5uZXJTZXJ2aWNlLmhpZGUoKTtcclxuICAgICAgICB0aGlzLnRvYXN0ci5lcnJvcihlcnIubWVzc2FnZSk7XHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgZG9jZWRpdEFjdGlvbjtcclxuICBkb2NkZWxldGVBY3Rpb247XHJcblxyXG4gIGdldEZpbGVzKG5tZUlkbikge1xyXG5cclxuICAgIHRoaXMuc3Bpbm5lclNlcnZpY2Uuc2hvdygpO1xyXG4gICAgdGhpcy5kb2NlZGl0QWN0aW9uID0gZmFsc2U7XHJcbiAgICB0aGlzLmRvY2RlbGV0ZUFjdGlvbiA9IGZhbHNlO1xyXG4gICAgY29uc3QgcmVxT2JqID0ge307XHJcbiAgICByZXFPYmpbXCJmb3JtTm1lXCJdID0gXCJkb2N1bWVudFVwbG9hZE1hc3RlclwiO1xyXG4gICAgcmVxT2JqW1wibm1lSWRuXCJdID0gbm1lSWRuO1xyXG4gICAgdGhpcy5oZWFkZXJbXCJtZXRob2RcIl0gPSBcImxvYWREb2NzXCI7XHJcbiAgIGNvbnN0IG9wdGlvbnMgPSAoeyBoZWFkZXJzOiBuZXcgSHR0cEhlYWRlcnModGhpcy5oZWFkZXIpIH0pO1xyXG4gICAgY29uc29sZS5sb2coSlNPTi5zdHJpbmdpZnkocmVxT2JqKSk7XHJcbiAgICB0aGlzLnVwbG9hZFNlcnZpY2UuZ2V0RmlsZXNMaXN0KHJlcU9iaiwgb3B0aW9ucykudGhlbigocmVzcG9uc2U6IGFueSkgPT4ge1xyXG4gICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzID09IFwiU1VDQ0VTU1wiKSB7XHJcbiAgICAgICAgY29uc29sZS5sb2cocmVzcG9uc2UpO1xyXG4gICAgICAgIHRoaXMuc3Bpbm5lclNlcnZpY2UuaGlkZSgpO1xyXG4gICAgICAgIHRoaXMuczNkZXRhaWxzID0gcmVzcG9uc2UuczNkZXRhaWxzIHx8IHt9O1xyXG4gICAgICAgIGxldCBkb2NBY3Rpb25idG4gPSByZXNwb25zZS5wYWdlRGVmaW5hdGlvbi5hY3Rpb24gfHwgW107XHJcbiAgICAgICAgZG9jQWN0aW9uYnRuLmZvckVhY2goZWxlbWVudCA9PiB7XHJcbiAgICAgICAgICBkZWJ1Z2dlcjtcclxuICAgICAgICAgIGlmIChlbGVtZW50LmZvcm1fZmllbGQgPT0gJ2VkaXQnKVxyXG4gICAgICAgICAgICB0aGlzLmRvY2VkaXRBY3Rpb24gPSB0cnVlO1xyXG4gICAgICAgICAgaWYgKGVsZW1lbnQuZm9ybV9maWVsZCA9PSAnZGVsZXRlJylcclxuICAgICAgICAgICAgdGhpcy5kb2NkZWxldGVBY3Rpb24gPSB0cnVlO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGxldCBidWNrZXROYW1lID0gdGhpcy5zM2RldGFpbHNbXCJkb2NidWNrZXRcIl0gfHwgXCJcIjtcclxuICAgICAgICBsZXQgZm9sZGVyTmFtZSA9IHRoaXMuczNkZXRhaWxzW1wiZG9jZm9sZGVyXCJdIHx8IFwiXCI7XHJcbiAgICAgICAgZm9sZGVyTmFtZSA9IGZvbGRlck5hbWUucmVwbGFjZShcIiNEU1wiLCBDb29raWUuZ2V0KFwiX2RzXCIpLnRvVXBwZXJDYXNlKCkpO1xyXG4gICAgICAgIHRoaXMuczNkZXRhaWxzW1wiZG9jZm9sZGVyXCJdID0gZm9sZGVyTmFtZTtcclxuICAgICAgICBsZXQgczNBY2Nlc3NLZXkgPSB0aGlzLnMzZGV0YWlsc1tcImRvY1MzYWNjZXNzS2V5XCJdIHx8IFwiXCI7XHJcbiAgICAgICAgbGV0IHMzU2VjcmV0S2V5ID0gdGhpcy5zM2RldGFpbHNbXCJkb2NTM3NlY3JldEtleVwiXSB8fCBcIlwiO1xyXG4gICAgICAgIGxldCBzM3JlZ2lvbiA9IHRoaXMuczNkZXRhaWxzW1wiZG9jUzNyZWdpb25cIl0gfHwgXCJcIjtcclxuICAgICAgICBsZXQgaXN2YWlsZCA9IHRydWU7XHJcbiAgICAgICAgaWYgKGJ1Y2tldE5hbWUgPT0gXCJcIikge1xyXG4gICAgICAgICAgaXN2YWlsZCA9IGZhbHNlO1xyXG4gICAgICAgICAgdGhpcy50b2FzdHIuZXJyb3IoXCJEb2N1bWVudCBCdWNrZXQgbm90IGZvdW5kXCIpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoZm9sZGVyTmFtZSA9PSBcIlwiKSB7XHJcbiAgICAgICAgICBpc3ZhaWxkID0gZmFsc2U7XHJcbiAgICAgICAgICB0aGlzLnRvYXN0ci5lcnJvcihcIkRvY3VtZW50IEZsb2RlciBub3QgZm91bmRcIik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChzM0FjY2Vzc0tleSA9PSBcIlwiKSB7XHJcbiAgICAgICAgICBpc3ZhaWxkID0gZmFsc2U7XHJcbiAgICAgICAgICB0aGlzLnRvYXN0ci5lcnJvcihcIkRvY3VtZW50IHMzQWNjZXNzS2V5IG5vdCBmb3VuZFwiKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHMzU2VjcmV0S2V5ID09IFwiXCIpIHtcclxuICAgICAgICAgIGlzdmFpbGQgPSBmYWxzZTtcclxuICAgICAgICAgIHRoaXMudG9hc3RyLmVycm9yKFwiRG9jdW1lbnQgczNTZWNyZXRLZXkgbm90IGZvdW5kXCIpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoczNyZWdpb24gPT0gXCJcIikge1xyXG4gICAgICAgICAgaXN2YWlsZCA9IGZhbHNlO1xyXG4gICAgICAgICAgdGhpcy50b2FzdHIuZXJyb3IoXCJEb2N1bWVudCBzM3JlZ2lvbiBub3QgZm91bmRcIik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChpc3ZhaWxkKSB7XHJcbiAgICAgICAgICB0aGlzLmRhdGFEdGwgPSByZXNwb25zZS5kYXRhRHRsIHx8IHt9O1xyXG4gICAgICAgICAgdGhpcy5kb2N1bWVudFVwbG9hZExpc3QgPSByZXNwb25zZS5kb2N1bWVudFVwbG9hZER0bC5kb2N1bWVudFVwbG9hZExpc3Q7XHJcbiAgICAgICAgICB0aGlzLmRvY3VtZW50VXBsb2FkTGlzdC5zb3J0KCk7XHJcbiAgICAgICAgICBpZiAodGhpcy5kb2N1bWVudFVwbG9hZExpc3QubGVuZ3RoID4gMClcclxuICAgICAgICAgICAgdGhpcy5kb2N0eXBlID0gdGhpcy5kb2N1bWVudFVwbG9hZExpc3RbMF07XHJcblxyXG4gICAgICAgICAgbGV0IGRvY3R5cCA9IHRoaXMucm91dGUuc25hcHNob3QucGFyYW1zW1wiZG9jdHlwXCJdIHx8IFwiXCI7XHJcbiAgICAgICAgICBpZiAoZG9jdHlwICE9ICcnKVxyXG4gICAgICAgICAgICB0aGlzLmRvY3R5cGUgPSBkb2N0eXA7XHJcblxyXG4gICAgICAgICAgdGhpcy5kb2N1bWVudFVwbG9hZER0bCA9IHJlc3BvbnNlLmRvY3VtZW50VXBsb2FkRHRsO1xyXG5cclxuICAgICAgICAgIGNvbnN0IGJ1Y2tldCA9IG5ldyBTMyh7XHJcbiAgICAgICAgICAgIGFjY2Vzc0tleUlkOiB0aGlzLnMzZGV0YWlsc1tcImRvY1MzYWNjZXNzS2V5XCJdLFxyXG4gICAgICAgICAgICBzZWNyZXRBY2Nlc3NLZXk6IHRoaXMuczNkZXRhaWxzW1wiZG9jUzNzZWNyZXRLZXlcIl0sXHJcbiAgICAgICAgICAgIHJlZ2lvbjogczNyZWdpb25cclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgZGVidWdnZXJcclxuICAgICAgICAgIHRoaXMuZG9jdW1lbnRVcGxvYWRMaXN0LmZvckVhY2goZG9jdHlwZSA9PiB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmRhdGFEdGxbZG9jdHlwZV0gIT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5kYXRhRHRsW2RvY3R5cGVdLmZvckVhY2goZHRsID0+IHtcclxuICAgICAgICAgICAgICAgIGxldCB1cmxQYXJhbXMgPSB7XHJcbiAgICAgICAgICAgICAgICAgIEJ1Y2tldDogdGhpcy5zM2RldGFpbHNbXCJkb2NidWNrZXRcIl0sXHJcbiAgICAgICAgICAgICAgICAgIEtleTogdGhpcy5zM2RldGFpbHNbXCJkb2Nmb2xkZXJcIl0gKyBcIi9cIiArIGR0bFtcImRvY19ubWVcIl1cclxuICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICBidWNrZXQuZ2V0U2lnbmVkVXJsKFwiZ2V0T2JqZWN0XCIsIHVybFBhcmFtcywgZnVuY3Rpb24gKGVyciwgdXJsKSB7XHJcbiAgICAgICAgICAgICAgICAgIGRlYnVnZ2VyXHJcbiAgICAgICAgICAgICAgICAgIGR0bFtcInNpZ25VcmxcIl0gPSB1cmw7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMuZG9jdW1lbnRVcGxvYWRMaXN0ID0gW107XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9KVxyXG4gICAgICAuY2F0Y2goKGVycjogYW55KSA9PiB7XHJcbiAgICAgICAgdGhpcy5zcGlubmVyU2VydmljZS5oaWRlKCk7XHJcbiAgICAgICAgdGhpcy50b2FzdHIuZXJyb3IoZXJyLm1lc3NhZ2UpO1xyXG4gICAgICB9KTtcclxuICAgIGNvbnNvbGUubG9nKFwiZG9jdW1lbnRVcGxvYWRMaXN0XCIsIHRoaXMuZG9jdW1lbnRVcGxvYWRMaXN0KVxyXG4gIH1cclxuICBvcGVuZG9jcyhkdGwpIHtcclxuICAgIGxldCB1cmwgPSBkdGwuc2lnblVybDtcclxuICAgIHdpbmRvdy5vcGVuKHVybCwgJ19ibGFuaycpO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgdXBsb2FkRG9jcyhldmVudCkge1xyXG4gICAgZGVidWdnZXI7XHJcbiAgICB0aGlzLnNwaW5uZXJTZXJ2aWNlLnNob3coKTtcclxuICAgIGxldCBubWVJZG4gPSB0aGlzLnJvdXRlLnNuYXBzaG90LnBhcmFtTWFwLmdldChcInN1YnZcIik7XHJcbiAgICBsZXQgcmVxT2JqID0ge307XHJcbiAgICByZXFPYmpbXCJzZXFcIl0gPSBcIm5tZV9kb2NzX3NlcVwiO1xyXG4gICAgdGhpcy5oZWFkZXJbXCJtZXRob2RcIl0gPSBcImdldFNlcVwiO1xyXG4gICAgbGV0IG9wdGlvbnMgPSAoeyBoZWFkZXJzOiBuZXcgSHR0cEhlYWRlcnModGhpcy5oZWFkZXIpIH0pO1xyXG4gICAgbGV0IHNlcUR0bCA9IGF3YWl0IHRoaXMuc3MuZ2V0RGF0YShyZXFPYmosIG9wdGlvbnMpIHx8IHt9O1xyXG4gICAgaWYgKHNlcUR0bFsnc3RhdHVzJ10gPT0gXCJTVUNDRVNTXCIpIHtcclxuICAgICAgdmFyIHNlcSA9IHNlcUR0bFsnc2VxJ107XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRGaWxlcyA9IGV2ZW50LnRhcmdldC5maWxlcztcclxuICAgICAgdGhpcy5maWxlID0gdGhpcy5zZWxlY3RlZEZpbGVzLml0ZW0oMCk7XHJcbiAgICAgIGxldCBmaWxlTmFtZSA9IHRoaXMuZmlsZS5uYW1lO1xyXG4gICAgICBsZXQgZXh0ID0gZmlsZU5hbWUuc3Vic3RyaW5nKGZpbGVOYW1lLmxhc3RJbmRleE9mKFwiLlwiKSArIDEpO1xyXG4gICAgICBmaWxlTmFtZSA9IG5tZUlkbiArIFwiX1wiICsgc2VxICsgXCJfXCIgKyB0aGlzLmRvY3R5cGUgKyBcIi5cIiArIGV4dDtcclxuICAgICAgbGV0IHVwbG9hZEZpbGUgPSBhd2FpdCB0aGlzLnVwbG9hZEZpbGUodGhpcy5maWxlLCBmaWxlTmFtZSkgfHwgJyc7XHJcbiAgICAgIGRlYnVnZ2VyO1xyXG4gICAgICBpZiAodXBsb2FkRmlsZSAhPSAnJykge1xyXG4gICAgICAgIGxldCByZXFPYmogPSB7fTtcclxuICAgICAgICBsZXQgdHJhbnNkdGwgPSB7fTtcclxuICAgICAgICB0cmFuc2R0bFtcImRvY19leHRcIl0gPSB0aGlzLmZpbGUudHlwZTtcclxuICAgICAgICB0cmFuc2R0bFtcImRvY190eXBcIl0gPSB0aGlzLmRvY3R5cGU7XHJcbiAgICAgICAgdHJhbnNkdGxbXCJkb2NzX2lkblwiXSA9IHNlcTtcclxuICAgICAgICB0cmFuc2R0bFtcImRvY19ubWVcIl0gPSBmaWxlTmFtZTtcclxuICAgICAgICB0cmFuc2R0bFtcInN0dFwiXSA9IFwiMVwiO1xyXG4gICAgICAgIHJlcU9ialtcInRybnNUeXBlXCJdID0gXCJBRERcIjtcclxuICAgICAgICByZXFPYmpbXCJkYXRhVHJuc0R0bFwiXSA9IHRyYW5zZHRsO1xyXG4gICAgICAgIHJlcU9ialtcIm5tZUlkblwiXSA9IG5tZUlkbjtcclxuICAgICAgICB0aGlzLmhlYWRlcltcIm1ldGhvZFwiXSA9IFwic2F2ZURvY3NcIjtcclxuICAgICAgICBjb25zb2xlLmxvZyhyZXFPYmopO1xyXG4gICAgICAgIGxldCBvcHRpb25zID0gKHsgaGVhZGVyczogbmV3IEh0dHBIZWFkZXJzKHRoaXMuaGVhZGVyKSB9KTtcclxuICAgICAgICB0aGlzLnVwbG9hZFNlcnZpY2Uuc2F2ZURvY3RvREIocmVxT2JqLCBvcHRpb25zKS50aGVuKChyZXNwb25zZTogYW55KSA9PiB7XHJcbiAgICAgICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzID09IFwiU1VDQ0VTU1wiKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZ2V0RmlsZXMocmVxT2JqWydubWVJZG4nXSk7IC8vLy8gcmVmcmFzaCBhZnRlciBkb2Mgc2F2ZWRcclxuICAgICAgICAgICAgdGhpcy5zcGlubmVyU2VydmljZS5oaWRlKCk7XHJcbiAgICAgICAgICAgIHRoaXMudG9hc3RyLnN1Y2Nlc3MocmVzcG9uc2UubWVzc2FnZSk7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnNwaW5uZXJTZXJ2aWNlLmhpZGUoKTtcclxuICAgICAgICAgICAgdGhpcy50b2FzdHIuZXJyb3IocmVzcG9uc2UubWVzc2FnZSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSlcclxuICAgICAgICAgIC5jYXRjaCgoZXJyOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5zcGlubmVyU2VydmljZS5oaWRlKCk7XHJcbiAgICAgICAgICAgIHRoaXMudG9hc3RyLmVycm9yKGVyci5tZXNzYWdlKTtcclxuICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLnNwaW5uZXJTZXJ2aWNlLmhpZGUoKTtcclxuICAgICAgICB0aGlzLnRvYXN0ci5lcnJvcihcIkZpbGUgdXBsb2FkIGZhaWxlZFwiKTtcclxuICAgICAgfVxyXG5cclxuXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnNwaW5uZXJTZXJ2aWNlLmhpZGUoKTtcclxuICAgICAgdGhpcy50b2FzdHIuZXJyb3IoXCJkb2N1bWVudCBTZXEuIGdlbmFyYXRpb24gZXJyb3JcIik7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuXHJcblxyXG5cclxuICB1cGxvYWRGaWxlKGZpbGUsIGZpbGVOYW1lKSB7XHJcbiAgICBjb25zdCBidWNrZXQgPSBuZXcgUzMoe1xyXG4gICAgICBhY2Nlc3NLZXlJZDogdGhpcy5zM2RldGFpbHNbXCJkb2NTM2FjY2Vzc0tleVwiXSxcclxuICAgICAgc2VjcmV0QWNjZXNzS2V5OiB0aGlzLnMzZGV0YWlsc1tcImRvY1Mzc2VjcmV0S2V5XCJdLFxyXG4gICAgICByZWdpb246IHRoaXMuczNkZXRhaWxzW1wiZG9jUzNyZWdpb25cIl1cclxuICAgIH0pO1xyXG4gICAgY29uc3QgcGFyYW1zID0ge1xyXG4gICAgICBCdWNrZXQ6IHRoaXMuczNkZXRhaWxzW1wiZG9jYnVja2V0XCJdLFxyXG4gICAgICBLZXk6IHRoaXMuczNkZXRhaWxzW1wiZG9jZm9sZGVyXCJdICsgXCIvXCIgKyBmaWxlTmFtZSxcclxuICAgICAgQm9keTogZmlsZSxcclxuICAgICAgQ29udGVudFR5cGU6IGZpbGUudHlwZVxyXG4gICAgfTtcclxuICAgIGRlYnVnZ2VyO1xyXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcclxuICAgICAgYnVja2V0LnVwbG9hZChwYXJhbXMsIGZ1bmN0aW9uIChlcnJvciwgcmVzdWx0KSB7XHJcbiAgICAgICAgaWYgKGVycm9yKSB7XHJcbiAgICAgICAgICBjb25zb2xlLmxvZyhcIlRoZXJlIHdhcyBhbiBlcnJvciB1cGxvYWRpbmcgeW91ciBmaWxlOiBcIiwgZXJyb3IpO1xyXG4gICAgICAgICAgcmVqZWN0KGVycm9yKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc29sZS5sb2coXCJTdWNjZXNzZnVsbHkgdXBsb2FkZWQgZmlsZS5cIiwgcmVzdWx0KTtcclxuICAgICAgICByZXNvbHZlKHJlc3VsdCk7XHJcbiAgICAgIH0pO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuXHJcbiAgZGVsZXRlRG9jKCkge1xyXG4gICAgdGhpcy5zcGlubmVyU2VydmljZS5zaG93KCk7XHJcbiAgICB0aGlzLkRlbGV0ZURvY3NGcm9tUzModGhpcy5kb2NEZWxldGVEdGwpO1xyXG4gICAgLy8gbGV0IGRlbGV0ZUR0bCA9IGF3YWl0IHRoaXMuRGVsZXRlRG9jc0Zyb21TMyh0aGlzLmRvY0RlbGV0ZUR0bCkgfHwgJyc7XHJcbiAgICAvLyBpZiAoZGVsZXRlRHRsICE9ICcnKSB7XHJcbiAgICBjb25zdCByZXFPYmogPSB7fTtcclxuICAgIHJlcU9ialtcImRvY3NfaWRuXCJdID0gdGhpcy5kb2NEZWxldGVEdGxbJ2RvY3NfaWRuJ107XHJcbiAgICByZXFPYmpbXCJ0cm5zVHlwZVwiXSA9IFwiREVMRVRFXCI7XHJcbiAgICByZXFPYmpbXCJubWVJZG5cIl0gPSB0aGlzLnJvdXRlLnNuYXBzaG90LnBhcmFtTWFwLmdldChcInN1YnZcIik7XHJcbiAgICB0aGlzLmhlYWRlcltcIm1ldGhvZFwiXSA9IFwic2F2ZURvY3NcIjtcclxuICAgIGNvbnNvbGUubG9nKHJlcU9iaik7XHJcbiAgIGNvbnN0IG9wdGlvbnMgPSAoeyBoZWFkZXJzOiBuZXcgSHR0cEhlYWRlcnModGhpcy5oZWFkZXIpIH0pO1xyXG4gICAgdGhpcy51cGxvYWRTZXJ2aWNlLnNhdmVEb2N0b0RCKHJlcU9iaiwgb3B0aW9ucykudGhlbigocmVzcG9uc2U6IGFueSkgPT4ge1xyXG4gICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzID09IFwiU1VDQ0VTU1wiKSB7XHJcbiAgICAgICAgdGhpcy5nZXRGaWxlcyh0aGlzLnJvdXRlLnNuYXBzaG90LnBhcmFtTWFwLmdldChcInN1YnZcIikpOyAvLy8vIHJlZnJhc2ggYWZ0ZXIgZG9jIHNhdmVkXHJcbiAgICAgICAgdGhpcy5zcGlubmVyU2VydmljZS5oaWRlKCk7XHJcbiAgICAgICAgdGhpcy50b2FzdHIuc3VjY2VzcyhyZXNwb25zZS5tZXNzYWdlKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLnNwaW5uZXJTZXJ2aWNlLmhpZGUoKTtcclxuICAgICAgICB0aGlzLnRvYXN0ci5lcnJvcihyZXNwb25zZS5tZXNzYWdlKTtcclxuICAgICAgfVxyXG4gICAgfSkuY2F0Y2goKGVycjogYW55KSA9PiB7XHJcbiAgICAgIHRoaXMuc3Bpbm5lclNlcnZpY2UuaGlkZSgpO1xyXG4gICAgICB0aGlzLnRvYXN0ci5lcnJvcihlcnIubWVzc2FnZSk7XHJcbiAgICB9KTtcclxuICAgIC8vIH0gZWxzZSB7XHJcbiAgICAvLyAgIHRoaXMuc3Bpbm5lclNlcnZpY2UuaGlkZSgpO1xyXG4gICAgLy8gICB0aGlzLmZsYXNoTWVzc2FnZXNTZXJ2aWNlLnNob3coXCJFcnJvciBpbiBmaWxlIGRlbGV0aW9uXCIsIHsgY3NzQ2xhc3M6IFwiYWxlcnQtZGFuZ2VyXCIsIHRpbWVvdXQ6IDMwMDAgfSk7XHJcbiAgICAvLyB9XHJcbiAgfVxyXG5cclxuXHJcbiAgRGVsZXRlRG9jc0Zyb21TMyhkb2NEdGwpIHtcclxuICAgIGNvbnN0IGJ1Y2tldCA9IG5ldyBTMyh7XHJcbiAgICAgIGFjY2Vzc0tleUlkOiB0aGlzLnMzZGV0YWlsc1tcImRvY1MzYWNjZXNzS2V5XCJdLFxyXG4gICAgICBzZWNyZXRBY2Nlc3NLZXk6IHRoaXMuczNkZXRhaWxzW1wiZG9jUzNzZWNyZXRLZXlcIl0sXHJcbiAgICAgIHJlZ2lvbjogdGhpcy5zM2RldGFpbHNbXCJkb2NTM3JlZ2lvblwiXVxyXG4gICAgfSk7XHJcbiAgICBjb25zdCBwYXJhbXMgPSB7XHJcbiAgICAgIEJ1Y2tldDogdGhpcy5zM2RldGFpbHNbXCJkb2NidWNrZXRcIl0sXHJcbiAgICAgIEtleTogdGhpcy5zM2RldGFpbHNbXCJkb2Nmb2xkZXJcIl0gKyBcIi9cIiArIGRvY0R0bFsnZG9jX25tZSddLFxyXG4gICAgfTtcclxuXHJcbiAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xyXG4gICAgICBidWNrZXQuZGVsZXRlT2JqZWN0KHBhcmFtcywgZnVuY3Rpb24gKGVycm9yLCByZXN1bHQpIHtcclxuICAgICAgICBpZiAoZXJyb3IpIHtcclxuICAgICAgICAgIGNvbnNvbGUubG9nKFwiVGhlcmUgd2FzIGFuIGVycm9yIGRlbGV0ZSB5b3VyIGZpbGU6IFwiLCBlcnJvcik7XHJcbiAgICAgICAgICByZWplY3QoXCJcIik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnNvbGUubG9nKFwiZGVsZXRlZCB1cGxvYWRlZCBmaWxlLlwiLCByZXN1bHQpO1xyXG4gICAgICAgIHJlc29sdmUocmVzdWx0KTtcclxuICAgICAgfSk7XHJcbiAgICB9KTtcclxuXHJcbiAgfVxyXG4gIGRvY0RlbGV0ZUR0bCA9IHt9O1xyXG4gIENvbmZpcm1kZWxldGVEb2MoZG9jRHRsKSB7XHJcbiAgICB0aGlzLmRvY0RlbGV0ZUR0bCA9IGRvY0R0bDtcclxuICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkb2NkZWxldGVidG4nKS5jbGljaygpO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgRWRpdFVwbG9hZERvY3MoZG9jRHRsLCBldmVudCkge1xyXG4gICAgZGVidWdnZXI7XHJcbiAgICBsZXQgZGVsZXRlRHRsID0gYXdhaXQgdGhpcy5EZWxldGVEb2NzRnJvbVMzKHRoaXMuZG9jRGVsZXRlRHRsKSB8fCAnJztcclxuICAgIGRlYnVnZ2VyO1xyXG4gICAgaWYgKGRlbGV0ZUR0bCAhPSAnJykge1xyXG4gICAgICBjb25zdCByZXFPYmogPSB7fTtcclxuICAgICAgcmVxT2JqW1wiZG9jc19pZG5cIl0gPSBkb2NEdGxbJ2RvY3NfaWRuJ107XHJcbiAgICAgIHJlcU9ialtcInRybnNUeXBlXCJdID0gXCJERUxFVEVcIjtcclxuICAgICAgcmVxT2JqW1wibm1lSWRuXCJdID0gdGhpcy5yb3V0ZS5zbmFwc2hvdC5wYXJhbU1hcC5nZXQoXCJzdWJ2XCIpO1xyXG4gICAgICB0aGlzLmhlYWRlcltcIm1ldGhvZFwiXSA9IFwic2F2ZURvY3NcIjtcclxuICAgICBjb25zdCBvcHRpb25zID0gKHsgaGVhZGVyczogbmV3IEh0dHBIZWFkZXJzKHRoaXMuaGVhZGVyKSB9KTtcclxuICAgICAgbGV0IGRlbGV0ZURiRHRsID0gYXdhaXQgdGhpcy51cGxvYWRTZXJ2aWNlLnNhdmVEb2N0b0RCKHJlcU9iaiwgb3B0aW9ucyk7XHJcbiAgICAgIGRlYnVnZ2VyO1xyXG4gICAgICBpZiAoZGVsZXRlRGJEdGxbJ3N0YXR1cyddID09IFwiU1VDQ0VTU1wiKSB7XHJcbiAgICAgICAgdGhpcy51cGxvYWREb2NzKGV2ZW50KVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMudG9hc3RyLmVycm9yKFwiRXJyb3IgaW4gZmlsZSBFZGl0XCIpO1xyXG4gICAgICB9XHJcblxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbG9hZEFwcGxpY2F0aW9uKCkge1xyXG4gICAgdGhpcy5hcHBsaWNhdGlvbiA9IFwiXCI7XHJcbiAgICB0aGlzLnNwaW5uZXJTZXJ2aWNlLnNob3coKTtcclxuICAgIGNvbnN0IHJlcU9iaiA9IHt9O1xyXG4gICAgcmVxT2JqW1wiZm9ybU5tZVwiXSA9IFwiY29udGFjdFNlYXJjaEZvcm1cIjtcclxuICAgIHRoaXMuaGVhZGVyW1wibWV0aG9kXCJdID0gXCJsb2FkQXBwbGljYXRpb25zXCI7XHJcbiAgIGNvbnN0IG9wdGlvbnMgPSAoeyBoZWFkZXJzOiBuZXcgSHR0cEhlYWRlcnModGhpcy5oZWFkZXIpIH0pO1xyXG4gICAgdGhpcy5jc1xyXG4gICAgICAubG9hZChyZXFPYmosIG9wdGlvbnMsIFwiY29udGFjdC9sb2FkQ29udGFjdFwiKVxyXG4gICAgICAudGhlbigocmVzcG9uc2U6IGFueSkgPT4ge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKHJlc3BvbnNlKTtcclxuICAgICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzID09IFwiU1VDQ0VTU1wiKSB7XHJcbiAgICAgICAgICB0aGlzLmFwcGxpY2F0aW9uTGlzdCA9IHJlc3BvbnNlLmFwcGxpY2F0aW9uTGlzdDtcclxuICAgICAgICAgIHRoaXMuc3Bpbm5lclNlcnZpY2UuaGlkZSgpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLnNwaW5uZXJTZXJ2aWNlLmhpZGUoKTtcclxuICAgICAgICAgIHRoaXMudG9hc3RyLmVycm9yKHJlc3BvbnNlLm1lc3NhZ2UpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSlcclxuICAgICAgLmNhdGNoKChlcnI6IGFueSkgPT4ge1xyXG4gICAgICAgIHRoaXMuc3Bpbm5lclNlcnZpY2UuaGlkZSgpO1xyXG4gICAgICAgIHRoaXMudG9hc3RyLmVycm9yKGVyci5tZXNzYWdlKTtcclxuICAgICAgfSk7XHJcbiAgfVxyXG4gIGFwcGxpY2F0aW9uO1xyXG4gIE1vZHVsZTtcclxuICBVc2VyO1xyXG4gIGxvYWRXZWJBcHBsaWNhdGlvbigpIHtcclxuICAgIHRoaXMuc3Bpbm5lclNlcnZpY2Uuc2hvdygpO1xyXG4gICAgY29uc3QgcmVxT2JqID0ge307XHJcbiAgICByZXFPYmpbXCJmb3JtTm1lXCJdID0gXCJjb250YWN0U2VhcmNoRm9ybVwiO1xyXG4gICAgcmVxT2JqW1wiYXBwbGljYXRpb25TdHJcIl0gPSBcIldXV1wiO1xyXG4gICAgdGhpcy5oZWFkZXJbXCJtZXRob2RcIl0gPSBcImxvYWRBcHBsaWNhdGlvbnNcIjtcclxuICAgY29uc3Qgb3B0aW9ucyA9ICh7IGhlYWRlcnM6IG5ldyBIdHRwSGVhZGVycyh0aGlzLmhlYWRlcikgfSk7XHJcbiAgICB0aGlzLmNzXHJcbiAgICAgIC5sb2FkKHJlcU9iaiwgb3B0aW9ucywgXCJjb250YWN0L2xvYWRDb250YWN0XCIpXHJcbiAgICAgIC50aGVuKChyZXNwb25zZTogYW55KSA9PiB7XHJcbiAgICAgICAgY29uc29sZS5sb2cocmVzcG9uc2UpO1xyXG4gICAgICAgIGlmIChyZXNwb25zZS5zdGF0dXMgPT0gXCJTVUNDRVNTXCIpIHtcclxuICAgICAgICAgIHRoaXMuYXBwbGljYXRpb25MaXN0ID0gcmVzcG9uc2UuYXBwbGljYXRpb25MaXN0O1xyXG4gICAgICAgICAgaWYgKHRoaXMuYXBwbGljYXRpb25MaXN0Lmxlbmd0aCA9PSAyKSB7XHJcbiAgICAgICAgICAgIHRoaXMuYXBwbGljYXRpb24gPSB0aGlzLmFwcGxpY2F0aW9uTGlzdFsxXS5rO1xyXG4gICAgICAgICAgICB0aGlzLmxvYWRVc3JNZGwodGhpcy5hcHBsaWNhdGlvbik7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB0aGlzLnNwaW5uZXJTZXJ2aWNlLmhpZGUoKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5zcGlubmVyU2VydmljZS5oaWRlKCk7XHJcbiAgICAgICAgICB0aGlzLnRvYXN0ci5lcnJvcihyZXNwb25zZS5tZXNzYWdlKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pXHJcbiAgICAgIC5jYXRjaCgoZXJyOiBhbnkpID0+IHtcclxuICAgICAgICB0aGlzLnNwaW5uZXJTZXJ2aWNlLmhpZGUoKTtcclxuICAgICAgICB0aGlzLnRvYXN0ci5lcnJvcihlcnIubWVzc2FnZSk7XHJcbiAgICAgIH0pO1xyXG4gIH1cclxuICBsb2FkVXNyTWRsKGFwcGxJZCkge1xyXG4gICAgdGhpcy5Nb2R1bGUgPSBcIlwiO1xyXG4gICAgdGhpcy5Vc2VyID0gXCJcIjtcclxuICAgIHRoaXMuc3Bpbm5lclNlcnZpY2Uuc2hvdygpO1xyXG4gICAgY29uc3QgcmVxT2JqID0ge307XHJcbiAgICByZXFPYmpbXCJubWVJZG5cIl0gPSB0aGlzLnJvdXRlLnNuYXBzaG90LnBhcmFtTWFwLmdldChcInN1YnZcIik7XHJcbiAgICByZXFPYmpbXCJhcHBsSWRcIl0gPSBhcHBsSWQ7XHJcbiAgICByZXFPYmpbXCJmb3JtTm1lXCJdID0gXCJVc2VyTW9kdWxlTGlzdFwiO1xyXG4gICAgdGhpcy5oZWFkZXJbXCJtZXRob2RcIl0gPSBcImdldFVzZXJNb2R1bGVMaXN0XCI7XHJcbiAgICBjb25zb2xlLmxvZyhKU09OLnN0cmluZ2lmeShyZXFPYmopKTtcclxuICAgY29uc3Qgb3B0aW9ucyA9ICh7IGhlYWRlcnM6IG5ldyBIdHRwSGVhZGVycyh0aGlzLmhlYWRlcikgfSk7XHJcbiAgICB0aGlzLmNzXHJcbiAgICAgIC5sb2FkTWVudVJpZ2h0c1VzZXJXaXNlKHJlcU9iaiwgb3B0aW9ucylcclxuICAgICAgLnRoZW4oKHJlc3BvbnNlOiBhbnkpID0+IHtcclxuICAgICAgICBjb25zb2xlLmxvZyhyZXNwb25zZSk7XHJcbiAgICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1cyA9PSBcIlNVQ0NFU1NcIikge1xyXG4gICAgICAgICAgdGhpcy51c2VyRHRscyA9IHJlc3BvbnNlLnVzZXJEdGxzO1xyXG4gICAgICAgICAgaWYgKHRoaXMudXNlckR0bHMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICB0aGlzLlVzZXIgPSB0aGlzLnVzZXJEdGxzWzBdWyd1c2VyX2lkbiddO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgdGhpcy5tb2R1bGVEdGxzID0gcmVzcG9uc2UubW9kdWxlRHRscztcclxuICAgICAgICAgIGlmICh0aGlzLm1vZHVsZUR0bHMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICB0aGlzLk1vZHVsZSA9IHRoaXMubW9kdWxlRHRsc1swXVsnbW9kdWxlX2lkbiddO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgdGhpcy5zcGlubmVyU2VydmljZS5oaWRlKCk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMuc3Bpbm5lclNlcnZpY2UuaGlkZSgpO1xyXG4gICAgICAgICAgdGhpcy50b2FzdHIuZXJyb3IocmVzcG9uc2UubWVzc2FnZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KVxyXG4gICAgICAuY2F0Y2goKGVycjogYW55KSA9PiB7XHJcbiAgICAgICAgdGhpcy5zcGlubmVyU2VydmljZS5oaWRlKCk7XHJcbiAgICAgICAgdGhpcy50b2FzdHIuZXJyb3IoZXJyLm1lc3NhZ2UpO1xyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIGdldFVzZXJSaWdodHModXNlcklkLCBNb2R1bGVJZCkge1xyXG4gICAgdGhpcy5zcGlubmVyU2VydmljZS5zaG93KCk7XHJcbiAgICBjb25zdCByZXFPYmogPSB7fTtcclxuICAgIHJlcU9ialtcIm1vZHVsZUlkbnNcIl0gPSBNb2R1bGVJZDtcclxuICAgIHJlcU9ialtcInVzZXJJZFwiXSA9IHVzZXJJZDtcclxuICAgIHRoaXMuaGVhZGVyW1wibWV0aG9kXCJdID0gXCJnZXRNZW51TGlzdEJ5TW9kdWxlXCI7XHJcbiAgICBjb25zb2xlLmxvZyhyZXFPYmopO1xyXG4gICBjb25zdCBvcHRpb25zID0gKHsgaGVhZGVyczogbmV3IEh0dHBIZWFkZXJzKHRoaXMuaGVhZGVyKSB9KTtcclxuICAgIHRoaXMuY3NcclxuICAgICAgLmxvYWRNZW51UmlnaHRzVXNlcldpc2UocmVxT2JqLCBvcHRpb25zKVxyXG4gICAgICAudGhlbigocmVzcG9uc2U6IGFueSkgPT4ge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKHJlc3BvbnNlKTtcclxuICAgICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzID09IFwiU1VDQ0VTU1wiKSB7XHJcbiAgICAgICAgICB0aGlzLnRvdE1lbnUgPSAwO1xyXG4gICAgICAgICAgdGhpcy5tZW51TGlzdCA9IHJlc3BvbnNlLm1lbnVMaXN0O1xyXG4gICAgICAgICAgdGhpcy51c2VyUmlnaHRzTWVudUxpc3QgPSByZXNwb25zZS51c2VyUmlnaHRzTWVudUxpc3Q7XHJcbiAgICAgICAgICB0aGlzLm1lbnVMaXN0LmZvckVhY2goZWxlbWVudCA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMudG90TWVudSArPSBlbGVtZW50LlN1Yk1lbnUubGVuZ3RoO1xyXG4gICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgdGhpcy5zcGlubmVyU2VydmljZS5oaWRlKCk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMuc3Bpbm5lclNlcnZpY2UuaGlkZSgpO1xyXG4gICAgICAgICAgdGhpcy50b2FzdHIuZXJyb3IocmVzcG9uc2UubWVzc2FnZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KVxyXG4gICAgICAuY2F0Y2goKGVycjogYW55KSA9PiB7XHJcbiAgICAgICAgdGhpcy5zcGlubmVyU2VydmljZS5oaWRlKCk7XHJcbiAgICAgICAgdGhpcy50b2FzdHIuZXJyb3IoZXJyLm1lc3NhZ2UpO1xyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIG9uQ2hhbmdlU3ViTWVudShlLCBzdWJNZW51SWQsIE1lbnVJZCwgVXNlcklkLCBtb2R1bGVJZCkge1xyXG4gICAgY29uc3QgcmVxT2JqID0ge307XHJcbiAgICByZXFPYmpbXCJ1c2VySWRcIl0gPSBVc2VySWQ7XHJcbiAgICByZXFPYmpbXCJtZW51SWRuXCJdID1cclxuICAgICAgZS50YXJnZXQuY2hlY2tlZCA9PSB0cnVlID8gW3N1Yk1lbnVJZCwgTWVudUlkXSA6IFtzdWJNZW51SWRdO1xyXG4gICAgcmVxT2JqW1wic3R0XCJdID0gZS50YXJnZXQuY2hlY2tlZCA9PSB0cnVlID8gXCIxXCIgOiBcIjBcIjtcclxuICAgIHJlcU9ialtcImZvcm1ObWVcIl0gPSBcInNhdmVVc2VyUmlnaHRNYXN0ZXJcIjtcclxuICAgIHRoaXMuaGVhZGVyW1wibWV0aG9kXCJdID0gXCJzYXZlVXNlclJpZ2h0c1wiO1xyXG4gICAgY29uc29sZS5sb2cocmVxT2JqKTtcclxuICAgY29uc3Qgb3B0aW9ucyA9ICh7IGhlYWRlcnM6IG5ldyBIdHRwSGVhZGVycyh0aGlzLmhlYWRlcikgfSk7XHJcbiAgICB0aGlzLmNzXHJcbiAgICAgIC5zYXZlVXNlck1lbnVSaWdodHNDb250YWN0KHJlcU9iaiwgb3B0aW9ucylcclxuICAgICAgLnRoZW4oKHJlc3BvbnNlOiBhbnkpID0+IHtcclxuICAgICAgICBjb25zb2xlLmxvZyhyZXNwb25zZSk7XHJcbiAgICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1cyA9PSBcIlNVQ0NFU1NcIikge1xyXG4gICAgICAgICAgdGhpcy5nZXRVc2VyUmlnaHRzKFVzZXJJZCwgbW9kdWxlSWQpO1xyXG4gICAgICAgICAgdGhpcy5zcGlubmVyU2VydmljZS5oaWRlKCk7XHJcbiAgICAgICAgICB0aGlzLnRvYXN0ci5zdWNjZXNzKHJlc3BvbnNlLm1lc3NhZ2UpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLnNwaW5uZXJTZXJ2aWNlLmhpZGUoKTtcclxuICAgICAgICAgIHRoaXMudG9hc3RyLmVycm9yKHJlc3BvbnNlLm1lc3NhZ2UpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSlcclxuICAgICAgLmNhdGNoKChlcnI6IGFueSkgPT4ge1xyXG4gICAgICAgIHRoaXMuc3Bpbm5lclNlcnZpY2UuaGlkZSgpO1xyXG4gICAgICAgIHRoaXMudG9hc3RyLmVycm9yKGVyci5tZXNzYWdlKTtcclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuICBvbkNoYW5nZU1lbnUoZSwgbWVudUlkLCBVc2VySWQsIG1vZHVsZUlkKSB7XHJcbiAgICB0aGlzLnNwaW5uZXJTZXJ2aWNlLnNob3coKTtcclxuICAgIGxldCBzdWJNZW51T2JqID0gdGhpcy5tZW51TGlzdC5maW5kKG8gPT4gby5tZW51X2lkbiA9PT0gbWVudUlkKTtcclxuICAgIHRoaXMuc3ViTWVudUlkbnMucHVzaChtZW51SWQpO1xyXG5cclxuICAgIGlmIChzdWJNZW51T2JqLlN1Yk1lbnUubGVuZ3RoID4gMCkge1xyXG4gICAgICBzdWJNZW51T2JqLlN1Yk1lbnUuZm9yRWFjaChlbGVtZW50ID0+IHtcclxuICAgICAgICB0aGlzLnN1Yk1lbnVJZG5zLnB1c2goZWxlbWVudC5tZW51X2lkbik7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgY29uc3QgcmVxT2JqID0ge307XHJcbiAgICByZXFPYmpbXCJ1c2VySWRcIl0gPSBVc2VySWQ7XHJcbiAgICByZXFPYmpbXCJtZW51SWRuXCJdID0gdGhpcy5zdWJNZW51SWRucztcclxuICAgIHJlcU9ialtcInN0dFwiXSA9IGUudGFyZ2V0LmNoZWNrZWQgPT0gdHJ1ZSA/IFwiMVwiIDogXCIwXCI7XHJcbiAgICByZXFPYmpbXCJmb3JtTm1lXCJdID0gXCJzYXZlVXNlclJpZ2h0TWFzdGVyXCI7XHJcbiAgICB0aGlzLmhlYWRlcltcIm1ldGhvZFwiXSA9IFwic2F2ZVVzZXJSaWdodHNcIjtcclxuICAgIGNvbnNvbGUubG9nKHJlcU9iaik7XHJcbiAgIGNvbnN0IG9wdGlvbnMgPSAoeyBoZWFkZXJzOiBuZXcgSHR0cEhlYWRlcnModGhpcy5oZWFkZXIpIH0pO1xyXG4gICAgdGhpcy5jc1xyXG4gICAgICAuc2F2ZVVzZXJNZW51UmlnaHRzQ29udGFjdChyZXFPYmosIG9wdGlvbnMpXHJcbiAgICAgIC50aGVuKChyZXNwb25zZTogYW55KSA9PiB7XHJcbiAgICAgICAgY29uc29sZS5sb2cocmVzcG9uc2UpO1xyXG4gICAgICAgIGlmIChyZXNwb25zZS5zdGF0dXMgPT0gXCJTVUNDRVNTXCIpIHtcclxuICAgICAgICAgIHRoaXMuZ2V0VXNlclJpZ2h0cyhVc2VySWQsIG1vZHVsZUlkKTtcclxuICAgICAgICAgIHRoaXMuc3ViTWVudUlkbnMgPSBbXTtcclxuICAgICAgICAgIHRoaXMuc3Bpbm5lclNlcnZpY2UuaGlkZSgpO1xyXG4gICAgICAgICAgdGhpcy50b2FzdHIuc3VjY2VzcyhyZXNwb25zZS5tZXNzYWdlKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5zcGlubmVyU2VydmljZS5oaWRlKCk7XHJcbiAgICAgICAgICB0aGlzLnRvYXN0ci5lcnJvcihyZXNwb25zZS5tZXNzYWdlKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pXHJcbiAgICAgIC5jYXRjaCgoZXJyOiBhbnkpID0+IHtcclxuICAgICAgICB0aGlzLnNwaW5uZXJTZXJ2aWNlLmhpZGUoKTtcclxuICAgICAgICB0aGlzLnRvYXN0ci5lcnJvcihlcnIubWVzc2FnZSk7XHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcblxyXG4gIG9uQ2hhbmdlV2ViU3ViTWVudShlLCBzdWJNZW51SWQsIE1lbnVJZCwgVXNlcklkLCBtb2R1bGVJZCkge1xyXG4gICAgY29uc3QgcmVxT2JqID0ge307XHJcbiAgICByZXFPYmpbXCJ1c2VySWRcIl0gPSBVc2VySWQ7XHJcbiAgICByZXFPYmpbXCJtZW51SWRuXCJdID1cclxuICAgICAgZS50YXJnZXQuY2hlY2tlZCA9PSB0cnVlID8gW3N1Yk1lbnVJZCwgTWVudUlkXSA6IFtzdWJNZW51SWRdO1xyXG4gICAgcmVxT2JqW1wic3R0XCJdID0gZS50YXJnZXQuY2hlY2tlZCA9PSB0cnVlID8gXCIwXCIgOiBcIjFcIjtcclxuICAgIHJlcU9ialtcImZvcm1ObWVcIl0gPSBcInNhdmVVc2VyUmlnaHRNYXN0ZXJcIjtcclxuICAgIHRoaXMuaGVhZGVyW1wibWV0aG9kXCJdID0gXCJzYXZlVXNlclJpZ2h0c1wiO1xyXG4gICAgY29uc29sZS5sb2cocmVxT2JqKTtcclxuICAgY29uc3Qgb3B0aW9ucyA9ICh7IGhlYWRlcnM6IG5ldyBIdHRwSGVhZGVycyh0aGlzLmhlYWRlcikgfSk7XHJcbiAgICB0aGlzLmNzXHJcbiAgICAgIC5zYXZlVXNlck1lbnVSaWdodHNDb250YWN0KHJlcU9iaiwgb3B0aW9ucylcclxuICAgICAgLnRoZW4oKHJlc3BvbnNlOiBhbnkpID0+IHtcclxuICAgICAgICBjb25zb2xlLmxvZyhyZXNwb25zZSk7XHJcbiAgICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1cyA9PSBcIlNVQ0NFU1NcIikge1xyXG4gICAgICAgICAgdGhpcy5nZXRVc2VyUmlnaHRzKFVzZXJJZCwgbW9kdWxlSWQpO1xyXG4gICAgICAgICAgdGhpcy5zcGlubmVyU2VydmljZS5oaWRlKCk7XHJcbiAgICAgICAgICB0aGlzLnRvYXN0ci5zdWNjZXNzKHJlc3BvbnNlLm1lc3NhZ2UpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLnNwaW5uZXJTZXJ2aWNlLmhpZGUoKTtcclxuICAgICAgICAgIHRoaXMudG9hc3RyLmVycm9yKHJlc3BvbnNlLm1lc3NhZ2UpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSlcclxuICAgICAgLmNhdGNoKChlcnI6IGFueSkgPT4ge1xyXG4gICAgICAgIHRoaXMuc3Bpbm5lclNlcnZpY2UuaGlkZSgpO1xyXG4gICAgICAgIHRoaXMudG9hc3RyLmVycm9yKGVyci5tZXNzYWdlKTtcclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuICBvbkNoYW5nZVdlYk1lbnUoZSwgbWVudUlkLCBVc2VySWQsIG1vZHVsZUlkKSB7XHJcbiAgICB0aGlzLnNwaW5uZXJTZXJ2aWNlLnNob3coKTtcclxuICAgIGxldCBzdWJNZW51T2JqID0gdGhpcy5tZW51TGlzdC5maW5kKG8gPT4gby5tZW51X2lkbiA9PT0gbWVudUlkKTtcclxuICAgIHRoaXMuc3ViTWVudUlkbnMucHVzaChtZW51SWQpO1xyXG5cclxuICAgIGlmIChzdWJNZW51T2JqLlN1Yk1lbnUubGVuZ3RoID4gMCkge1xyXG4gICAgICBzdWJNZW51T2JqLlN1Yk1lbnUuZm9yRWFjaChlbGVtZW50ID0+IHtcclxuICAgICAgICB0aGlzLnN1Yk1lbnVJZG5zLnB1c2goZWxlbWVudC5tZW51X2lkbik7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgY29uc3QgcmVxT2JqID0ge307XHJcbiAgICByZXFPYmpbXCJ1c2VySWRcIl0gPSBVc2VySWQ7XHJcbiAgICByZXFPYmpbXCJtZW51SWRuXCJdID0gdGhpcy5zdWJNZW51SWRucztcclxuICAgIHJlcU9ialtcInN0dFwiXSA9IGUudGFyZ2V0LmNoZWNrZWQgPT0gdHJ1ZSA/IFwiMFwiIDogXCIxXCI7XHJcbiAgICByZXFPYmpbXCJmb3JtTm1lXCJdID0gXCJzYXZlVXNlclJpZ2h0TWFzdGVyXCI7XHJcbiAgICB0aGlzLmhlYWRlcltcIm1ldGhvZFwiXSA9IFwic2F2ZVVzZXJSaWdodHNcIjtcclxuICAgIGNvbnNvbGUubG9nKHJlcU9iaik7XHJcbiAgIGNvbnN0IG9wdGlvbnMgPSAoeyBoZWFkZXJzOiBuZXcgSHR0cEhlYWRlcnModGhpcy5oZWFkZXIpIH0pO1xyXG4gICAgdGhpcy5jc1xyXG4gICAgICAuc2F2ZVVzZXJNZW51UmlnaHRzQ29udGFjdChyZXFPYmosIG9wdGlvbnMpXHJcbiAgICAgIC50aGVuKChyZXNwb25zZTogYW55KSA9PiB7XHJcbiAgICAgICAgY29uc29sZS5sb2cocmVzcG9uc2UpO1xyXG4gICAgICAgIGlmIChyZXNwb25zZS5zdGF0dXMgPT0gXCJTVUNDRVNTXCIpIHtcclxuICAgICAgICAgIHRoaXMuZ2V0VXNlclJpZ2h0cyhVc2VySWQsIG1vZHVsZUlkKTtcclxuICAgICAgICAgIHRoaXMuc3ViTWVudUlkbnMgPSBbXTtcclxuICAgICAgICAgIHRoaXMuc3Bpbm5lclNlcnZpY2UuaGlkZSgpO1xyXG4gICAgICAgICAgdGhpcy50b2FzdHIuc3VjY2VzcyhyZXNwb25zZS5tZXNzYWdlKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5zcGlubmVyU2VydmljZS5oaWRlKCk7XHJcbiAgICAgICAgICB0aGlzLnRvYXN0ci5lcnJvcihyZXNwb25zZS5tZXNzYWdlKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pXHJcbiAgICAgIC5jYXRjaCgoZXJyOiBhbnkpID0+IHtcclxuICAgICAgICB0aGlzLnNwaW5uZXJTZXJ2aWNlLmhpZGUoKTtcclxuICAgICAgICB0aGlzLnRvYXN0ci5lcnJvcihlcnIubWVzc2FnZSk7XHJcbiAgICAgIH0pO1xyXG4gIH1cclxuICBvbkNoYW5nZUFsbChlLCBVc2VySWQsIG1vZHVsZUlkKSB7XHJcbiAgICB0aGlzLnNwaW5uZXJTZXJ2aWNlLnNob3coKTtcclxuXHJcbiAgICB0aGlzLm1lbnVMaXN0LmZvckVhY2goZWxlbWVudCA9PiB7XHJcbiAgICAgIHRoaXMuc3ViTWVudUlkbnMucHVzaChlbGVtZW50Lm1lbnVfaWRuKTtcclxuICAgICAgaWYgKGVsZW1lbnQuU3ViTWVudS5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgZWxlbWVudC5TdWJNZW51LmZvckVhY2goc3ViZWxlbWVudCA9PiB7XHJcbiAgICAgICAgICB0aGlzLnN1Yk1lbnVJZG5zLnB1c2goc3ViZWxlbWVudC5tZW51X2lkbik7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIGNvbnN0IHJlcU9iaiA9IHt9O1xyXG4gICAgcmVxT2JqW1widXNlcklkXCJdID0gVXNlcklkO1xyXG4gICAgcmVxT2JqW1wibWVudUlkblwiXSA9IHRoaXMuc3ViTWVudUlkbnM7XHJcbiAgICByZXFPYmpbXCJzdHRcIl0gPSBlLnRhcmdldC5jaGVja2VkID09IHRydWUgPyBcIjFcIiA6IFwiMFwiO1xyXG4gICAgcmVxT2JqW1wiZm9ybU5tZVwiXSA9IFwic2F2ZVVzZXJSaWdodE1hc3RlclwiO1xyXG4gICAgdGhpcy5oZWFkZXJbXCJtZXRob2RcIl0gPSBcInNhdmVVc2VyUmlnaHRzXCI7XHJcbiAgICBjb25zb2xlLmxvZyhyZXFPYmopO1xyXG4gICBjb25zdCBvcHRpb25zID0gKHsgaGVhZGVyczogbmV3IEh0dHBIZWFkZXJzKHRoaXMuaGVhZGVyKSB9KTtcclxuICAgIHRoaXMuY3NcclxuICAgICAgLnNhdmVVc2VyTWVudVJpZ2h0c0NvbnRhY3QocmVxT2JqLCBvcHRpb25zKVxyXG4gICAgICAudGhlbigocmVzcG9uc2U6IGFueSkgPT4ge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKHJlc3BvbnNlKTtcclxuICAgICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzID09IFwiU1VDQ0VTU1wiKSB7XHJcbiAgICAgICAgICB0aGlzLnNwaW5uZXJTZXJ2aWNlLmhpZGUoKTtcclxuICAgICAgICAgIHRoaXMuZ2V0VXNlclJpZ2h0cyhVc2VySWQsIG1vZHVsZUlkKTtcclxuICAgICAgICAgIHRoaXMuc3ViTWVudUlkbnMgPSBbXTtcclxuICAgICAgICAgIHRoaXMudG9hc3RyLnN1Y2Nlc3MocmVzcG9uc2UubWVzc2FnZSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMuc3Bpbm5lclNlcnZpY2UuaGlkZSgpO1xyXG4gICAgICAgICAgdGhpcy50b2FzdHIuZXJyb3IocmVzcG9uc2UubWVzc2FnZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KVxyXG4gICAgICAuY2F0Y2goKGVycjogYW55KSA9PiB7XHJcbiAgICAgICAgdGhpcy5zcGlubmVyU2VydmljZS5oaWRlKCk7XHJcbiAgICAgICAgdGhpcy50b2FzdHIuZXJyb3IoZXJyLm1lc3NhZ2UpO1xyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIHNhdmVGdW4oaywgdiwgdHlwZSkge1xyXG4gICAgdGhpcy5zcGlubmVyU2VydmljZS5zaG93KCk7XHJcbiAgICBsZXQgcmVxT2JqID0ge307XHJcbiAgICBsZXQgc3ViT2JqID0ge307XHJcbiAgICBsZXQgdXJsID0gXCJzeXN0ZW0vYXBwcGFnZXNcIjtcclxuICAgIGlmICh0eXBlID09ICdkJylcclxuICAgICAgdiA9IHRoaXMuY20uRm9ybWF0RGF0ZSh2LCAnZGQtTU1NLXl5eXknKTtcclxuICAgIGlmICh0eXBlID09ICduJylcclxuICAgICAgdiA9IFwiXCIgKyB2ICsgXCJcIjtcclxuICAgIHN1Yk9ialtrXSA9IHY7XHJcbiAgICByZXFPYmpbXCJmb3JtTm1lXCJdID0gdGhpcy5hZGRGcm1ObWU7XHJcbiAgICByZXFPYmpbXCJkYXRhVHJuc0R0bFwiXSA9IHN1Yk9iajtcclxuICAgIGlmICh0aGlzLmFkZEZybU5tZSA9PSAnYWRkdGlvbmFsRHRsTWFzdGVyJykge1xyXG4gICAgICByZXFPYmpbXCJubWVJZG5cIl0gPSB0aGlzLnJvdXRlLnNuYXBzaG90LnBhcmFtTWFwLmdldChcInN1YnZcIik7IC8vdGhpcy53aHJWO1xyXG4gICAgICB0aGlzLmhlYWRlcltcIm1ldGhvZFwiXSA9IFwic2F2ZU5tZUF0dHJcIjtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLmFkZEZybU5tZSA9PSAnbGVkZ2VyQWNjQWRkaXRpbmFsRGV0YWlscycpIHtcclxuICAgICAgcmVxT2JqW1wibGVkZ2VyX2lkblwiXSA9IHRoaXMucm91dGUuc25hcHNob3QucGFyYW1NYXAuZ2V0KFwic3VidlwiKTsgLy90aGlzLndoclY7XHJcbiAgICAgIHJlcU9ialtcInR5cGVcIl0gPSBcImFjY19hdHRyXCI7XHJcbiAgICAgIHRoaXMuaGVhZGVyW1wibWV0aG9kXCJdID0gXCJzYXZlTGVkZ2VyQXR0clwiO1xyXG4gICAgICB1cmwgPSBcImFjY291bnRzL2FjY0xlZGdlclwiO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuYWRkRnJtTm1lID09ICdsZWRnZXJBZGR0aW9uYWxEdGxNYXN0ZXInKSB7XHJcbiAgICAgIHJlcU9ialtcImxlZGdlcl9pZG5cIl0gPSB0aGlzLnJvdXRlLnNuYXBzaG90LnBhcmFtTWFwLmdldChcInN1YnZcIik7IC8vdGhpcy53aHJWO1xyXG4gICAgICByZXFPYmpbXCJ0eXBlXCJdID0gXCJhdHRyXCI7XHJcbiAgICAgIHRoaXMuaGVhZGVyW1wibWV0aG9kXCJdID0gXCJzYXZlTGVkZ2VyQXR0clwiO1xyXG4gICAgICB1cmwgPSBcImFjY291bnRzL2FjY0xlZGdlclwiO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuYWRkRnJtTm1lID09ICdhY2NEZWxldGVSdWxlc0Zvcm0nKSB7XHJcbiAgICAgIHJlcU9ialtcImpvdXJuYWxfaWRuXCJdID0gdGhpcy5yb3V0ZS5zbmFwc2hvdC5wYXJhbU1hcC5nZXQoXCJzdWJ2XCIpOyAvL3RoaXMud2hyVjtcclxuICAgICAgcmVxT2JqW1widHlwZVwiXSA9IFwiZGVsZXRlX3J1bGVzXCI7XHJcbiAgICAgIHRoaXMuaGVhZGVyW1wibWV0aG9kXCJdID0gXCJzYXZlSm91cm5hbEF0dHJcIjtcclxuICAgICAgdXJsID0gXCJhY2NvdW50cy9hY2NMZWRnZXJcIjtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLmFkZEZybU5tZSA9PSAnYWNjSm91cm5hbEF0dHJGb3JtJykge1xyXG4gICAgICByZXFPYmpbXCJqb3VybmFsX2lkblwiXSA9IHRoaXMucm91dGUuc25hcHNob3QucGFyYW1NYXAuZ2V0KFwic3VidlwiKTsgLy90aGlzLndoclY7XHJcbiAgICAgIHJlcU9ialtcInR5cGVcIl0gPSBcImF0dHJcIjtcclxuICAgICAgdGhpcy5oZWFkZXJbXCJtZXRob2RcIl0gPSBcInNhdmVKb3VybmFsQXR0clwiO1xyXG4gICAgICB1cmwgPSBcImFjY291bnRzL2FjY0xlZGdlclwiO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuYWRkRnJtTm1lID09ICdhY2NMb2FuQXR0ckZvcm0nKSB7XHJcbiAgICAgIHJlcU9ialtcImpvdXJuYWxfaWRuXCJdID0gdGhpcy5yb3V0ZS5zbmFwc2hvdC5wYXJhbU1hcC5nZXQoXCJzdWJ2XCIpOyAvL3RoaXMud2hyVjtcclxuICAgICAgcmVxT2JqW1widHlwZVwiXSA9IFwiYXR0clwiO1xyXG4gICAgICB0aGlzLmhlYWRlcltcIm1ldGhvZFwiXSA9IFwic2F2ZUpvdXJuYWxBdHRyXCI7XHJcbiAgICAgIHVybCA9IFwiYWNjb3VudHMvYWNjTGVkZ2VyXCI7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5hZGRGcm1ObWUgPT0gJ2FjY0pvdXJuYWxTZXR0aW5nRm9ybScpIHtcclxuICAgICAgcmVxT2JqW1wiam91cm5hbF9pZG5cIl0gPSB0aGlzLnJvdXRlLnNuYXBzaG90LnBhcmFtTWFwLmdldChcInN1YnZcIik7IC8vdGhpcy53aHJWO1xyXG4gICAgICByZXFPYmpbXCJ0eXBlXCJdID0gXCJzZXR0aW5nc1wiO1xyXG4gICAgICB0aGlzLmhlYWRlcltcIm1ldGhvZFwiXSA9IFwic2F2ZUpvdXJuYWxBdHRyXCI7XHJcbiAgICAgIHVybCA9IFwiYWNjb3VudHMvYWNjTGVkZ2VyXCI7XHJcbiAgICB9XHJcbiAgICBjb25zb2xlLmxvZyhKU09OLnN0cmluZ2lmeShyZXFPYmopKTtcclxuICAgIGxldCBvcHRpb25zID0gKHsgaGVhZGVyczogbmV3IEh0dHBIZWFkZXJzKHRoaXMuaGVhZGVyKSB9KTtcclxuXHJcbiAgICB0aGlzLmNzXHJcbiAgICAgIC5sb2FkKHJlcU9iaiwgb3B0aW9ucywgdXJsKVxyXG4gICAgICAudGhlbigocmVzcG9uc2U6IGFueSkgPT4ge1xyXG5cclxuICAgICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzID09IFwiU1VDQ0VTU1wiKSB7XHJcbiAgICAgICAgICB0aGlzLnNwaW5uZXJTZXJ2aWNlLmhpZGUoKTtcclxuICAgICAgICAgIHRoaXMudG9hc3RyLnN1Y2Nlc3MocmVzcG9uc2UubWVzc2FnZSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMuc3Bpbm5lclNlcnZpY2UuaGlkZSgpO1xyXG4gICAgICAgICAgdGhpcy50b2FzdHIuZXJyb3IocmVzcG9uc2UubWVzc2FnZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KVxyXG4gICAgICAuY2F0Y2goKGVycjogYW55KSA9PiB7XHJcbiAgICAgICAgdGhpcy5zcGlubmVyU2VydmljZS5oaWRlKCk7XHJcbiAgICAgICAgdGhpcy50b2FzdHIuZXJyb3IoZXJyLm1lc3NhZ2UpO1xyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIHBhZ2VEaXNwbGF5O1xyXG4gIC8vIEFERCBQQUdFIERJU1BMQVkgQVRUUklCVVRFXHJcbiAgYWRkQXR0cih2LCBhLCBkZikge1xyXG4gICAgaWYgKHYgPT0gdW5kZWZpbmVkKSByZXR1cm47XHJcbiAgICB0aGlzLmFkZFRleHQodiwgYSwgZGYpO1xyXG4gIH1cclxuXHJcbiAgYWRkVGV4dCh2LCBhLCBkZikge1xyXG4gICAgaWYgKGRmLmluZGV4T2YodikgIT0gLTEpIHtcclxuICAgICAgdGhpcy50b2FzdHIuZXJyb3IoXCJBbHJlYWR5IEFkZGVkXCIpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnRvYXN0ci5zdWNjZXNzKFwiQWRkZWRcIik7XHJcbiAgICAgIGRmLnB1c2godik7XHJcbiAgICAgIC8vIGEuc3BsaWNlKGksIDEpO1xyXG4gICAgICB0aGlzLnNvcnRhYmxlQ29tcG9uZW50LndyaXRlVmFsdWUoZGYpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcmVtb3ZlKGRmLCBpdCwgaSwgZmYpIHtcclxuICAgIGlmIChkZi5pbmRleE9mKGl0KSAhPSAtMSkge1xyXG4gICAgICBkZi5zcGxpY2UoaSwgMSk7XHJcbiAgICAgIHRoaXMuc3FsQXJyYXlbZmZdLnVuc2hpZnQoeyB2OiBpdCB9KTtcclxuICAgICAgdGhpcy5zb3J0YWJsZUNvbXBvbmVudC53cml0ZVZhbHVlKGRmKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHNob3dISWRlUGFzcygpIHtcclxuICAgIHRoaXMuZXN0c3QgPSAhdGhpcy5lc3RzdDtcclxuICAgIGlmICh0aGlzLmVzdHN0KSB7XHJcbiAgICAgIHRoaXMuZXZlQyA9IFwiZmEtZXllXCI7XHJcbiAgICAgIHRoaXMuaW5wdXR0eXBlID0gXCJ0ZXh0XCI7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmV2ZUMgPSBcImZhLWV5ZS1zbGFzaFwiO1xyXG4gICAgICB0aGlzLmlucHV0dHlwZSA9IFwicGFzc3dvcmRcIjtcclxuICAgIH1cclxuICB9XHJcbiAgcmVkaWVjdHRva3ljKCkge1xyXG4gICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWydjb250YWN0L3BlbmRpbmcta3ljL3BlbmRpbmdLeWNGb3JtJ10pO1xyXG4gIH1cclxuXHJcblxyXG5cclxuICBmb3JtYXREYXRlU0NNb250aEJlZm9yZShkYXRlLCBhdHRyKSB7XHJcbiAgICBpZiAoZGF0ZSAhPSB1bmRlZmluZWQgJiYgZGF0ZSAhPSBcIlwiKSB7XHJcblxyXG4gICAgICBsZXQgZCA9IG5ldyBEYXRlKGRhdGUpLFxyXG4gICAgICAgIG1vbnRoID0gJycgKyAoZC5nZXRNb250aCgpKSxcclxuICAgICAgICBkYXkgPSAnJyArIGQuZ2V0RGF0ZSgpLFxyXG4gICAgICAgIHllYXIgPSBkLmdldEZ1bGxZZWFyKCk7XHJcbiAgICAgIGQuc2V0RGF0ZShkLmdldERhdGUoKSAtIDMwKTtcclxuXHJcbiAgICAgIGlmIChtb250aC5sZW5ndGggPCAyKSBtb250aCA9ICcwJyArIG1vbnRoO1xyXG4gICAgICBpZiAoZGF5Lmxlbmd0aCA8IDIpIGRheSA9ICcwJyArIGRheTtcclxuXHJcbiAgICAgIGxldCBuZXdEYXRlID0gW3llYXIsIG1vbnRoLCBkYXldLmpvaW4oJy0nKTtcclxuXHJcbiAgICAgIHRoaXMuZGF0YUR0bFthdHRyXSA9IG5ld0RhdGU7XHJcbiAgICB9XHJcbiAgfVxyXG4gIHJlc2V0ID0gdiA9PiB2LmZvcm0ucmVzZXQoKTtcclxuICBjbG9zZU51bGwgPSAoKSA9PiAodGhpcy50YkNlbGwgPSBudWxsKTtcclxuICBwYWdlQmNrID0gKCkgPT4gd2luZG93Lmhpc3RvcnkuYmFjaygpO1xyXG4gIGNVcmw7XHJcbiAgbmdPbkluaXQoKSB7XHJcbiAgICB0aGlzLnNlbGVjdGVkUGVvcGxlMyA9IFtcclxuICAgICAgeyBrOiBcIjIwNFwiLCB2OiBcIm5pbGFtXCIgfSxcclxuICAgICAgeyBrOiBcIjQ3ODFcIiwgdjogXCJuaWxhbXdlYlwiIH1cclxuICAgIF07XHJcbiAgICBsZXQgbWRsayA9IEpTT04ucGFyc2UobG9jYWxTdG9yYWdlLmdldEl0ZW0oXCJtZGxLZXlcIikpO1xyXG4gICAgbGV0IG1kbEtleSA9IE9iamVjdC5rZXlzKG1kbGspO1xyXG4gICAgZGVidWdnZXJcclxuICAgIHRoaXMuY1VybCA9IHRoaXMucm91dGVyLnVybDtcclxuICAgIHRoaXMuaGVhZGVyID0ge1xyXG4gICAgICBjbGllbnRrZXk6IENvb2tpZS5nZXQoXCJfY2tcIiksXHJcbiAgICAgIFwiQ29udGVudC1UeXBlXCI6IFwiYXBwbGljYXRpb24vanNvblwiLFxyXG4gICAgICBtb2R1bGVrZXk6IG1kbGtbdGhpcy5jVXJsLnNwbGl0KCcvJylbMV1dLFxyXG4gICAgICBsb2dpbmlkOiBDb29raWUuZ2V0KFwiX2xvZ2lkXCIpLFxyXG4gICAgICBzb3VyY2U6IFwicXNcIlxyXG4gICAgfTtcclxuICAgIGxldCBjb21wYW55RHRsID0gSlNPTi5wYXJzZShDb29raWUuZ2V0KCdfYWNjQ29tcGFueScpKSB8fCB7fTtcclxuICAgIGxldCB5ZWFyRHRsID0gSlNPTi5wYXJzZShDb29raWUuZ2V0KCdfYWNjeWVhcicpKSB8fCB7fTtcclxuICAgIGxldCBzdWJfY29faWRuID0gKGNvbXBhbnlEdGxbXCJzdWJfY29faWRuXCJdIHx8ICcnKS50b1N0cmluZygpO1xyXG4gICAgbGV0IGZpbl95ZWFyX2lkbiA9ICh5ZWFyRHRsW1wiZmluX3llYXJfaWRuXCJdIHx8ICcnKS50b1N0cmluZygpO1xyXG4gICAgaWYgKHN1Yl9jb19pZG4gIT0gJycpIHtcclxuICAgICAgdGhpcy5oZWFkZXJbJ3N1YmNvbWlkbiddID0gc3ViX2NvX2lkbjtcclxuICAgICAgdGhpcy5oZWFkZXJbJ3llYXJpZG4nXSA9IGZpbl95ZWFyX2lkbjtcclxuICAgIH1cclxuICAgIHRoaXMucm91dGUucGFyYW1zLnN1YnNjcmliZSgocGFyYW1zOiBQYXJhbXMpID0+IHtcclxuICAgICAgdGhpcy5zdWJGcm1XayA9IG51bGw7XHJcbiAgICAgIHRoaXMuc2VhcmNoRiA9IG51bGw7XHJcbiAgICAgIGRlYnVnZ2VyXHJcbiAgICAgIHRoaXMubmF2Zm9ybSA9IHBhcmFtc1tcIml0bWZvcm1cIl07XHJcbiAgICAgIHRoaXMucGFyYU9ialtcImZvcm1ObWVcIl0gPSBwYXJhbXNbXCJpdG1mb3JtXCJdO1xyXG4gICAgICB0aGlzLnBhcmFPYmpbXCJ3aGVyZUtleXNcIl0gPSBwYXJhbXNbXCJzdWJrXCJdO1xyXG4gICAgICB0aGlzLnBhcmFPYmpbXCJ3aGVyZVZsdXNcIl0gPSBwYXJhbXNbXCJzdWJ2XCJdO1xyXG4gICAgICBpZiAocGFyYW1zW1wiaXRtZm9ybVwiXSA9PSAnYWNjRGVsZXRlUnVsZXNGb3JtJykge1xyXG4gICAgICAgIHRoaXMuYWRkRnJtTm1lID0gcGFyYW1zW1wiaXRtZm9ybVwiXTtcclxuICAgICAgICBsZXQgbWRsID0gWydkZWxldGVfcnVsZSddO1xyXG4gICAgICAgIHRoaXMuZ2V0Sm91cm5hbEF0dHIodGhpcy5hZGRGcm1ObWUsIG1kbCwgJ2RlbGV0ZV9ydWxlcycpO1xyXG4gICAgICB9IGVsc2UgaWYgKHBhcmFtc1tcIml0bWZvcm1cIl0gPT0gJ2FjY0pvdXJuYWxBdHRyRm9ybScpIHtcclxuICAgICAgICB0aGlzLmFkZEZybU5tZSA9IHBhcmFtc1tcIml0bWZvcm1cIl07XHJcbiAgICAgICAgbGV0IG1kbCA9IFsnam5sYWNjX2F0dHInXTtcclxuICAgICAgICB0aGlzLmdldEpvdXJuYWxBdHRyKHRoaXMuYWRkRnJtTm1lLCBtZGwsICdhdHRyJyk7XHJcbiAgICAgIH0gZWxzZSBpZiAocGFyYW1zW1wiaXRtZm9ybVwiXSA9PSAnYWNjTG9hbkF0dHJGb3JtJykge1xyXG4gICAgICAgIHRoaXMuYWRkRnJtTm1lID0gcGFyYW1zW1wiaXRtZm9ybVwiXTtcclxuICAgICAgICBsZXQgbWRsID0gWydsb2FuJ107XHJcbiAgICAgICAgdGhpcy5nZXRKb3VybmFsQXR0cih0aGlzLmFkZEZybU5tZSwgbWRsLCAnYXR0cicpO1xyXG4gICAgICB9IGVsc2UgaWYgKHBhcmFtc1tcIml0bWZvcm1cIl0gPT0gXCJhY2NKb3VybmFsU2V0dGluZ0Zvcm1cIikge1xyXG4gICAgICAgIHRoaXMuYWRkRnJtTm1lID0gcGFyYW1zW1wiaXRtZm9ybVwiXTtcclxuICAgICAgICBsZXQgbWRsID0gWydqbmxfc2V0dCddO1xyXG4gICAgICAgIHRoaXMuZ2V0Sm91cm5hbEF0dHIodGhpcy5hZGRGcm1ObWUsIG1kbCwgJ3NldHRpbmdzJyk7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgdGhpcy5nZXRQYWdlRGVmaW5hdGlvbigpO1xyXG4gICAgICAgIHRoaXMuY0xpbmsgPSAwO1xyXG4gICAgICAgIHRoaXMucCA9IDE7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxufVxyXG4iLCI8ZGl2IGNsYXNzPVwibXRcIj5cclxuICA8ZGl2IGNsYXNzPVwicGFuZWwgcGFuZWwtZGVmYXVsdFwiPlxyXG4gICAgPGRpdiBjbGFzcz1cInBhbmVsLWhlYWRpbmdcIj5cclxuICAgICAgPGgzIGNsYXNzPVwicGFuZWwtdGl0bGVcIj5cclxuICAgICAgICA8c3BhbiBjbGFzcz1cImZhIGZhLWNoZXZyb24tbGVmdCBjcFwiIChjbGljayk9XCJwYWdlQmNrKCk7XCI+IEJhY2s8L3NwYW4+Jm5ic3A7Jm5ic3A7Jm5ic3A7IHt7cGFnZUluZm8/LnRpdGxlfX1cclxuICAgICAgICA8c3BhbiAqbmdJZj1cImNvbnRhY3ROYW1lPT0nJ1wiIGNsYXNzPVwiZi0xMlwiPih7e2NEdCB8IGRhdGU6J21lZGl1bSd9fSk8L3NwYW4+XHJcbiAgICAgICAgPHNwYW4gKm5nSWY9XCJjb250YWN0TmFtZSE9JydcIiBjbGFzcz1cImYtMTJcIj4mbmJzcDtmb3IgPGI+IHt7Y29udGFjdE5hbWV9fTwvYj4gPC9zcGFuPlxyXG4gICAgICA8L2gzPlxyXG4gICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBpZD1cImFkZEJ0blwiIGNsYXNzPVwiYnRuIGJ0bi1pbmZvIHB1bGwtcmlnaHRcIiAqbmdJZj1cImFkZE5ldz8uaXNfY29tcHVsc29yeSA9PSAxXCJcclxuICAgICAgICBhcHBBcHBOb0RibENsaWNrIChjbGljayk9XCJ1c2VyQWN0aW9uKCcnLCAnYWRkJywgJycsICcnKTtmLnJlc2V0KCk7XCI+e3thZGROZXc/LmZvcm1fZmllbGRfdGl0bGV9fTwvYnV0dG9uPlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcbiAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgPGRpdiBjbGFzcz1cImNvbC1tZC0yXCIgKm5nSWY9XCJuYXZpZ2F0aW9uLmxlbmd0aCA+IDBcIj5cclxuICAgICAgPGRpdiBjbGFzcz1cInBhbmVsIHBhbmVsLWRlZmF1bHRcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwicGFuZWwtYm9keVwiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImxpc3QtZ3JvdXAgYm9yZGVyLWJvdHRvbVwiPlxyXG4gICAgICAgICAgICA8YSBocmVmPVwiamF2YXNjcmlwdDp2b2lkKDApXCIgY2xhc3M9XCJsaXN0LWdyb3VwLWl0ZW1cIiBbbmdDbGFzc109XCJ7J2FjdGl2ZScgOmkgPT0gY0xpbmt9XCJcclxuICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgbmF2IG9mIG5hdmlnYXRpb247bGV0IGk9aW5kZXhcIiAoY2xpY2spPVwibmF2aWdhdGlvbkZ1bihuYXYsaSk7XCI+e3tuYXYuZm9ybV9maWVsZF90aXRsZX19PC9hPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2IFtuZ0NsYXNzXT1cIm5hdmlnYXRpb24ubGVuZ3RoID4gMCA/ICdjb2wtbWQtMTAnIDogJ2NvbC1tZC0xMidcIj5cclxuICAgICAgPGRpdiBjbGFzcz1cInBhbmVsIHBhbmVsLWRlZmF1bHRcIj5cclxuICAgICAgICA8IS0tIHByaW1lcnkgZm9ybSAtLT5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwicGFuZWwtYm9keVwiIHN0eWxlPVwib3ZlcmZsb3cteDogc2Nyb2xsXCJcclxuICAgICAgICAgICpuZ0lmPVwibmF2Zm9ybSAhPSAnYWRkdGlvbmFsRHRsTWFzdGVyJyAmJiBuYXZmb3JtICE9ICdkb2N1bWVudFVwbG9hZE1hc3RlcicgICYmIG5hdmZvcm0gIT0gJ21lbnVBY2Nlc3NNYXN0ZXInICAmJiBuYXZmb3JtICE9ICd0ZXJtVXNlckFzc2lnbkZvcm0nICYmIG5hdmZvcm0gIT0gJ3NldFBhc3N3b3JkRm9ybScgJiYgbmF2Zm9ybSE9J2xlZGdlckJhbmtEZXRhaWxzJyAmJiBuYXZmb3JtIT0nbGVkZ2VyQWNjQWRkaXRpbmFsRGV0YWlscycgJiYgbmF2Zm9ybSE9J2xlZGdlckFkZHRpb25hbER0bE1hc3RlcicgJiYgbmF2Zm9ybSE9J2FjY0RlbGV0ZVJ1bGVzRm9ybScgJiYgbmF2Zm9ybSE9J2FjY0pvdXJuYWxBdHRyRm9ybScgJiYgbmF2Zm9ybSE9J2FjY0xvYW5BdHRyRm9ybScgJiYgbmF2Zm9ybSE9J2FjY0pvdXJuYWxTZXR0aW5nRm9ybScgJiYgbmF2Zm9ybSE9J3dlYk1lbnVBY2Nlc3NNYXN0ZXInIFwiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTZcIj5cclxuICAgICAgICAgICAgICA8Zm9ybSBjbGFzcz1cImZvcm0taW5saW5lIHB1bGwtbGVmdFwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXBcIj5cclxuICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj1cImRkbFBhZ2VzaXplXCI+UGFnZSBTaXplICZuYnNwOyAmbmJzcDs8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICA8c2VsZWN0IGNsYXNzPVwiZm9ybS1jb250cm9sXCIgbmFtZT1cInBhZ2VTaXplXCIgWyhuZ01vZGVsKV09XCJwYWdlU2l6ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgKGNoYW5nZSk9XCJvblBhZ2VTaXplQ2hhbmdlKHBhZ2VTaXplKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJBbGxcIj5BbGw8L29wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiMTBcIj4xMDwvb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCIyNVwiPjI1PC9vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIjUwXCI+NTA8L29wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiMTAwXCI+MTAwPC9vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgIDwvc2VsZWN0PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPC9mb3JtPlxyXG4gICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLWRlZmF1bHRcIiBzdHlsZT1cInBhZGRpbmc6IDRweCAxNXB4IDRweCAyMHB4O21hcmdpbi1sZWZ0OiAxMHB4O1wiXHJcbiAgICAgICAgICAgICAgICBkYXRhLXRvZ2dsZT1cInRvb2x0aXBcIiBkYXRhLXBsYWNlbWVudD1cInJpZ2h0XCIgdGl0bGU9XCJSZWZyZXNoXCIgKGNsaWNrKT1cIm5nT25Jbml0KCk7XCI+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImZhIGZhLXJlZnJlc2hcIj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTZcIj5cclxuICAgICAgICAgICAgICA8Zm9ybSBjbGFzcz1cImZvcm0taW5saW5lIHB1bGwtcmlnaHRcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9XCJleGFtcGxlSW5wdXROYW1lMlwiPlNlYXJjaCAmbmJzcDsmbmJzcDs8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBjbGFzcz1cImZvcm0tY29udHJvbFwiIGlkPVwiZXhhbXBsZUlucHV0TmFtZTJcIiBuYW1lPVwic2NodHh0XCIgWyhuZ01vZGVsKV09XCJzZWFyY2hGXCIgLz5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDwvZm9ybT5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0YWJsZS1yZXNwb25zaXZlXCIgW25nQ2xhc3NdPVwieyd0YWJsZS1yZXNwb25zaXZlJyA6bmF2aWdhdGlvbi5sZW5ndGggPiAwfVwiPlxyXG4gICAgICAgICAgICA8dGFibGUgY2xhc3M9XCJ0YWJsZSB0YWJsZS1ib3JkZXJlZCB0YWJsZS1ob3ZlciB0YWJsZS1ob3Zlci1jZWxsc1wiPlxyXG4gICAgICAgICAgICAgIDx0aGVhZD5cclxuICAgICAgICAgICAgICAgIDx0cj5cclxuICAgICAgICAgICAgICAgICAgPHRoPlNSIE5vPC90aD5cclxuICAgICAgICAgICAgICAgICAgPHRoPkFjdGlvbjwvdGg+XHJcbiAgICAgICAgICAgICAgICAgIDx0aCAqbmdGb3I9XCJsZXQgdGJoIG9mIHRibEg7IGxldCBpID0gaW5kZXhcIiAoY2xpY2spPVwic2V0T3JkZXIodGJoLGkpXCI+e3t0YmxEZXNjW3RiaF19fVxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIFtoaWRkZW5dPVwicmV2ZXJzZVwiICpuZ0lmPVwic2hvd2FyciA9PT0gaVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1hcnJvdy1kb3duXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBbaGlkZGVuXT1cIiFyZXZlcnNlXCIgKm5nSWY9XCJzaG93YXJyID09PSBpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLWFycm93LXVwXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgPC90aD5cclxuICAgICAgICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgICAgICAgPC90aGVhZD5cclxuICAgICAgICAgICAgICA8dGJvZHk+XHJcbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXHJcbiAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBkYXRhIG9mIGRhdGFsaXN0IHwgc2VhcmNoUGlwZTpzZWFyY2hGIHwgb3JkZXJCeTogb3JkZXI6cmV2ZXJzZSB8IHBhZ2luYXRlOiB7IGl0ZW1zUGVyUGFnZTogcGFnZVNpemUsIGN1cnJlbnRQYWdlOiBwIH07IGxldCBpID0gaW5kZXhcIj5cclxuICAgICAgICAgICAgICAgICAgPHRyIFtuZ0NsYXNzXT1cInsnSW5hY3RpdmUnOmRhdGEuc3R0PT0nSW5BY3RpdmUnfVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDx0ZD57e2kgKyAxfX08L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgIDx0ZD5cclxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJidG4tZ3JvdXBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj1cIiNcIiBkYXRhLXRvZ2dsZT1cImRyb3Bkb3duXCIgY2xhc3M9XCJidG4gYnRuLWluZm8gZHJvcGRvd24tdG9nZ2xlXCI+QWN0aW9uXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjYXJldFwiPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9hPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dWwgY2xhc3M9XCJkcm9wZG93bi1tZW51XCIgcm9sZT1cIm1lbnVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8bGkgKm5nRm9yPVwibGV0IGFjdGlvbiBvZiBhY3Rpb25zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPVwiamF2YXNjcmlwdDp2b2lkKDApXCIgKGNsaWNrKT1cInVzZXJBY3Rpb24oZGF0YSxhY3Rpb24uZm9ybV9maWVsZCxhY3Rpb24sIGkpO1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e2FjdGlvbi5mb3JtX2ZpZWxkX3RpdGxlfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3VsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICAgICAgICA8dGQgKm5nRm9yPVwibGV0IHRiaCBvZiB0YmxIOyBsZXQgaT1pbmRleFwiIG9uLW1vdXNlb3Zlcj1cImhvdmVyZWRJPWlcIiBvbi1tb3VzZWxlYXZlPVwiaG92ZXJlZEk9LTFcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCJtYXgtd2lkdGg6IDMwMHB4OyB3b3JkLWJyZWFrOiBicmVhay13b3JkO1wiPnt7ZGF0YVt0YmhdfX1cclxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJvbkhvdmVyRGl2XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJpPT1ob3ZlcmVkSSAmJiBwYWdlX3R5cCE9J2pzb25Gb3JtJyAmJiBuYXZmb3JtIT0nYnV5ZXJ0ZXJtc01hc3RlcidcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxsaSAoY2xpY2spPVwiZWRpdENlbGwoZGF0YSx0YmgpO1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmYSBmYS1wZW5jaWxcIj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC91bD5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICA8L3Rib2R5PlxyXG4gICAgICAgICAgICA8L3RhYmxlPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8cGFnaW5hdGlvbi1jb250cm9scyAocGFnZUNoYW5nZSk9XCJwID0gJGV2ZW50XCIgY2xhc3M9XCJwdWxsLXJpZ2h0XCI+PC9wYWdpbmF0aW9uLWNvbnRyb2xzPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwhLS0gY3VzdG9tIGZvcm0gLS0+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInBhbmVsLWJvZHlcIlxyXG4gICAgICAgICAgKm5nSWY9XCJuYXZmb3JtID09ICdhZGR0aW9uYWxEdGxNYXN0ZXInIHx8IG5hdmZvcm0gPT0gJ2xlZGdlckFkZHRpb25hbER0bE1hc3RlcicgfHwgbmF2Zm9ybSA9PSAnbGVkZ2VyQWNjQWRkaXRpbmFsRGV0YWlscycgfHwgbmF2Zm9ybT09J2FjY0RlbGV0ZVJ1bGVzRm9ybScgfHwgbmF2Zm9ybT09J2FjY0pvdXJuYWxBdHRyRm9ybScgfHwgbmF2Zm9ybT09J2FjY0xvYW5BdHRyRm9ybScgfHwgbmF2Zm9ybT09J2FjY0pvdXJuYWxTZXR0aW5nRm9ybSdcIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0xMlwiICpuZ0Zvcj1cImxldCB1Z2xkIG9mIHVpR3JwTGlzdFwiPlxyXG4gICAgICAgICAgICAgIDxwIGNsYXNzPVwiaGVhZGluZ0Nsc1wiPnt7dWlHcnBMaXN0RHRsW3VnbGRdfX08L3A+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC02XCIgKm5nRm9yPVwibGV0IGZvcm1GIG9mIHVpR3JwTGlzdER0bFt1Z2xkKycjVCddO2xldCBpID0gaW5kZXhcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwXCIgc3R5bGU9XCJtYXJnaW4tYm90dG9tOiA0NXB4ICFpbXBvcnRhbnQ7XCI+XHJcbiAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImNvbC1tZC00IGNvbnRyb2wtbGFiZWxcIj57e3VpR3JwTGlzdER0bFt1Z2xkKycjRCddW2ldfX08L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLThcIiAqbmdJZj1cImZvcm1GID09ICduJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ncm91cCB3LTEwMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJudW1iZXJcIiBjbGFzcz1cImZvcm0tY29udHJvbFwiIG5hbWU9XCJ7e3VpR3JwTGlzdER0bFt1Z2xkKycjViddW2ldfX1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPVwiZGF0YUR0bFt1aUdycExpc3REdGxbdWdsZCsnI1YnXVtpXV1cIiBbKG5nTW9kZWwpXT1cImRhdGFEdGxbdWlHcnBMaXN0RHRsW3VnbGQrJyNWJ11baV1dXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgKGNoYW5nZSk9XCJzYXZlRnVuKHVpR3JwTGlzdER0bFt1Z2xkKycjViddW2ldLGRhdGFEdGxbdWlHcnBMaXN0RHRsW3VnbGQrJyNWJ11baV1dLGZvcm1GKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJ1aUdycExpc3REdGxbdWdsZCsnI0UnXVtpXSA9PSAwID8gZmFsc2UgOiB0cnVlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLThcIiAqbmdJZj1cImZvcm1GID09ICd0J1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ncm91cCB3LTEwMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBuYW1lPVwie3t1aUdycExpc3REdGxbdWdsZCsnI1YnXVtpXX19XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cImRhdGFEdGxbdWlHcnBMaXN0RHRsW3VnbGQrJyNWJ11baV1dXCIgWyhuZ01vZGVsKV09XCJkYXRhRHRsW3VpR3JwTGlzdER0bFt1Z2xkKycjViddW2ldXVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwic2F2ZUZ1bih1aUdycExpc3REdGxbdWdsZCsnI1YnXVtpXSxkYXRhRHRsW3VpR3JwTGlzdER0bFt1Z2xkKycjViddW2ldXSxmb3JtRilcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwidWlHcnBMaXN0RHRsW3VnbGQrJyNFJ11baV0gPT0gMCA/IGZhbHNlIDogdHJ1ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcblxyXG5cclxuICAgICAgICAgICAgICAgICAgPCEtLSBhZGRlZCBmb3IgdGVzdGluZyBvbmx5IC0tPlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLThcIiAqbmdJZj1cImZvcm1GID09ICdjJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ncm91cCB3LTEwMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPHNlbGVjdCB0eXBlPVwidGV4dFwiIGNsYXNzPVwiZm9ybS1jb250cm9sXCIgbmFtZT1cInt7dWlHcnBMaXN0RHRsW3VnbGQrJyNWJ11baV19fVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiZGF0YUR0bFt1aUdycExpc3REdGxbdWdsZCsnI1YnXVtpXV1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAoY2hhbmdlKT1cInNhdmVGdW4odWlHcnBMaXN0RHRsW3VnbGQrJyNWJ11baV0sZGF0YUR0bFt1aUdycExpc3REdGxbdWdsZCsnI1YnXVtpXV0sZm9ybUYpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gKm5nRm9yPVwibGV0IGtleSBvZiBhdHRyQ0xpc3REdGxbdWlHcnBMaXN0RHRsW3VnbGQrJyNWJ11baV0gKycjRCddO2xldCBqPWluZGV4XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT1cInt7YXR0ckNMaXN0RHRsW3VpR3JwTGlzdER0bFt1Z2xkKycjViddW2ldICsnI1YnXVtqXX19XCI+e3trZXl9fTwvb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9zZWxlY3Q+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8IS0tIDxwICpuZ0Zvcj1cImxldCBhIG9mIGF0dHJDTGlzdER0bFt1aUdycExpc3REdGxbdWdsZCsnI1YnXVtpXSArJyNWJ11cIj57e2EgfGpzb259fTpcclxuICAgICAgICAgICAgICAgICAgICAgICAge3thdHRyQ0xpc3REdGxbdWlHcnBMaXN0RHRsW3VnbGQrJyNWJ11baV0gKycjViddIHxqc29ufX1cclxuICAgICAgICAgICAgICAgICAgICAgIDwvcD4gLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8IS0tIDxpbnB1dCB0eXBlPVwidGV4dFwiIGNsYXNzPVwiZm9ybS1jb250cm9sXCIgbmFtZT1cInt7dWlHcnBMaXN0RHRsW3VnbGQrJyNWJ11baV19fVwiIFt2YWx1ZV09XCJkYXRhRHRsW3VpR3JwTGlzdER0bFt1Z2xkKycjViddW2ldXVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiZGF0YUR0bFt1aUdycExpc3REdGxbdWdsZCsnI1YnXVtpXV1cIiAoYmx1cik9XCJzYXZlRnVuKHVpR3JwTGlzdER0bFt1Z2xkKycjViddW2ldLGRhdGFEdGxbdWlHcnBMaXN0RHRsW3VnbGQrJyNWJ11baV1dKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJ1aUdycExpc3REdGxbdWdsZCsnI0UnXVtpXSA9PSAwID8gZmFsc2UgOiB0cnVlXCI+IC0tPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC04XCIgKm5nSWY9XCJmb3JtRiA9PSAncSdcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtZ3JvdXAgdy0xMDBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxzZWxlY3QgdHlwZT1cInRleHRcIiBjbGFzcz1cImZvcm0tY29udHJvbFwiIG5hbWU9XCJ7e3VpR3JwTGlzdER0bFt1Z2xkKycjViddW2ldfX1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImRhdGFEdGxbdWlHcnBMaXN0RHRsW3VnbGQrJyNWJ11baV1dXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgKGNoYW5nZSk9XCJzYXZlRnVuKHVpR3JwTGlzdER0bFt1Z2xkKycjViddW2ldLGRhdGFEdGxbdWlHcnBMaXN0RHRsW3VnbGQrJyNWJ11baV1dLGZvcm1GKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uICpuZ0Zvcj1cImxldCBrZXkgb2YgYXR0clFMaXN0RHRsW3VpR3JwTGlzdER0bFt1Z2xkKycjViddW2ldICsnI0QnXTtsZXQgaj1pbmRleFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU9XCJ7e2F0dHJRTGlzdER0bFt1aUdycExpc3REdGxbdWdsZCsnI1YnXVtpXSArJyNEJ11bal19fVwiPnt7a2V5fX08L29wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvc2VsZWN0PlxyXG4gICAgICAgICAgICAgICAgICAgICAgPCEtLSA8cCAqbmdGb3I9XCJsZXQgYSBvZiBhdHRyQ0xpc3REdGxbdWlHcnBMaXN0RHRsW3VnbGQrJyNWJ11baV0gKycjViddXCI+e3thIHxqc29ufX06XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHt7YXR0ckNMaXN0RHRsW3VpR3JwTGlzdER0bFt1Z2xkKycjViddW2ldICsnI1YnXSB8anNvbn19XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L3A+IC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPCEtLSA8aW5wdXQgdHlwZT1cInRleHRcIiBjbGFzcz1cImZvcm0tY29udHJvbFwiIG5hbWU9XCJ7e3VpR3JwTGlzdER0bFt1Z2xkKycjViddW2ldfX1cIiBbdmFsdWVdPVwiZGF0YUR0bFt1aUdycExpc3REdGxbdWdsZCsnI1YnXVtpXV1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImRhdGFEdGxbdWlHcnBMaXN0RHRsW3VnbGQrJyNWJ11baV1dXCIgKGJsdXIpPVwic2F2ZUZ1bih1aUdycExpc3REdGxbdWdsZCsnI1YnXVtpXSxkYXRhRHRsW3VpR3JwTGlzdER0bFt1Z2xkKycjViddW2ldXSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwidWlHcnBMaXN0RHRsW3VnbGQrJyNFJ11baV0gPT0gMCA/IGZhbHNlIDogdHJ1ZVwiPiAtLT5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLThcIiAqbmdJZj1cImZvcm1GID09ICdzYSdcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtZ3JvdXAgdy0xMDBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxuZy1zZWxlY3Qgc3R5bGU9XCJ6LWluZGV4OiA1O1wiIFtvcHRpb25zXT1cInNxbEFycmF5W3VpR3JwTGlzdER0bFt1Z2xkKycjViddW2ldXVwiICNzZmk9XCJuZ01vZGVsXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJkYXRhRHRsW3VpR3JwTGlzdER0bFt1Z2xkKycjViddW2ldXVwiIG5hbWU9XCJ7e3VpR3JwTGlzdER0bFt1Z2xkKycjViddW2ldfX1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAoc2VsZWN0ZWQpPVwic2F2ZUZ1bih1aUdycExpc3REdGxbdWdsZCsnI1YnXVtpXSxkYXRhRHRsW3VpR3JwTGlzdER0bFt1Z2xkKycjViddW2ldXSxmb3JtRilcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAoZmlsdGVySW5wdXRDaGFuZ2VkKT1cImxvYWRKbmxTdWdnZGF0YSgkZXZlbnQsdWlHcnBMaXN0RHRsW3VnbGQrJyNWJ11baV0sdWlHcnBMaXN0RHRsW3VnbGQrJyNNJ11baV0pXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L25nLXNlbGVjdD5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC04XCIgKm5nSWY9XCJmb3JtRiA9PSAnZCdcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtZ3JvdXAgdy0xMDBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiZGF0ZVwiIGNsYXNzPVwiZm9ybS1jb250cm9sXCIgbmFtZT1cInt7dWlHcnBMaXN0RHRsW3VnbGQrJyNWJ11baV19fVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwic2F2ZUZ1bih1aUdycExpc3REdGxbdWdsZCsnI1YnXVtpXSxkYXRhRHRsW3VpR3JwTGlzdER0bFt1Z2xkKycjViddW2ldXSxmb3JtRilcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPVwiZGF0YUR0bFt1aUdycExpc3REdGxbdWdsZCsnI1YnXVtpXV1cIiBbKG5nTW9kZWwpXT1cImRhdGFEdGxbdWlHcnBMaXN0RHRsW3VnbGQrJyNWJ11baV1dXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cInVpR3JwTGlzdER0bFt1Z2xkKycjRSddW2ldID09IDAgPyBmYWxzZSA6IHRydWVcIj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtOFwiICpuZ0lmPVwiZm9ybUYgPT0gJ2UnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWdyb3VwIHctMTAwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImVtYWlsXCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBuYW1lPVwie3t1aUdycExpc3REdGxbdWdsZCsnI1YnXVtpXX19XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgKGNoYW5nZSk9XCJzYXZlRnVuKHVpR3JwTGlzdER0bFt1Z2xkKycjViddW2ldLGRhdGFEdGxbdWlHcnBMaXN0RHRsW3VnbGQrJyNWJ11baV1dLGZvcm1GKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJkYXRhRHRsW3VpR3JwTGlzdER0bFt1Z2xkKycjViddW2ldXVwiIFsobmdNb2RlbCldPVwiZGF0YUR0bFt1aUdycExpc3REdGxbdWdsZCsnI1YnXVtpXV1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAoYmx1cik9XCJzYXZlRnVuKHVpR3JwTGlzdER0bFt1Z2xkKycjViddW2ldLGRhdGFEdGxbdWlHcnBMaXN0RHRsW3VnbGQrJyNWJ11baV1dLGZvcm1GKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJ1aUdycExpc3REdGxbdWdsZCsnI0UnXVtpXSA9PSAwID8gZmFsc2UgOiB0cnVlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInBhbmVsLWJvZHkgZm9ybVwiXHJcbiAgICAgICAgICAqbmdJZj1cIm5hdmZvcm0gPT0gJ2RvY3VtZW50VXBsb2FkTWFzdGVyJyAgJiYgbmF2Zm9ybSAhPSAnbWVudUFjY2Vzc01hc3RlcicgICYmIG5hdmZvcm0gIT0gJ3Rlcm1Vc2VyQXNzaWduRm9ybScgJiYgbmF2Zm9ybSAhPSAnc2V0UGFzc3dvcmRGb3JtJ1wiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgICAgICA8Zm9ybSBhY3Rpb249XCIjXCIgY2xhc3M9XCJmb3JtLWhvcml6b250YWwgZm9ybS1ib3JkZXJlZFwiPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWJvZHlcIj5cclxuXHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTRcIj5cclxuICAgICAgICAgICAgICAgICAgPHNlbGVjdCB0eXBlPVwidGV4dFwiIGNsYXNzPVwiZm9ybS1jb250cm9sXCIgbmFtZT1cImRvY3R5cGVcIiBbKG5nTW9kZWwpXT1cImRvY3R5cGVcIj5cclxuICAgICAgICAgICAgICAgICAgICA8b3B0aW9uICpuZ0Zvcj1cImxldCBkb2NzIG9mIGRvY3VtZW50VXBsb2FkTGlzdFwiIHZhbHVlPVwie3tkb2NzfX1cIj57e2RvY3VtZW50VXBsb2FkRHRsW2RvY3NdfX1cclxuICAgICAgICAgICAgICAgICAgICA8L29wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgPC9zZWxlY3Q+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNFwiPlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmlsZWlucHV0IGZpbGVpbnB1dC1uZXdcIiBkYXRhLXByb3ZpZGVzPVwiZmlsZWlucHV0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJidG4gZ3JlZW4gYnRuLWZpbGVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPiBVcGxvYWQgPC9zcGFuPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiZmlsZVwiIG5hbWU9XCIuLi5cIiAoY2hhbmdlKT1cInVwbG9hZERvY3MoJGV2ZW50KVwiPiA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmaWxlaW5wdXQtZmlsZW5hbWVcIj4gPC9zcGFuPiAmbmJzcDtcclxuICAgICAgICAgICAgICAgICAgICA8YSBocmVmPVwiamF2YXNjcmlwdDo7XCIgY2xhc3M9XCJjbG9zZSBmaWxlaW5wdXQtZXhpc3RzXCIgZGF0YS1kaXNtaXNzPVwiZmlsZWlucHV0XCI+IDwvYT5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDxhICpuZ0lmPVwicm91dGhlckRvYyE9JydcIiBzdHlsZT1cImN1cnNvcjpwb2ludGVyIFwiIChjbGljayk9XCJyZWRpZWN0dG9reWMoKVwiPjxiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPDwgYmFjazwvYj48L2E+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9mb3JtPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMTJcIj5cclxuICAgICAgICAgICAgICA8cCBjbGFzcz1cImhlYWRpbmdDbHNcIj5FeGlzdGluZyBEb2N1bWVudHM8L3A+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTEyXCI+XHJcbiAgICAgICAgICAgICAgPHRhYmxlIGNsYXNzPVwic3ViRGlzcGxheVRhYmxlXCI+XHJcbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBkb2NzIG9mIGRvY3VtZW50VXBsb2FkTGlzdDtsZXQgaSA9IGluZGV4IFwiPlxyXG4gICAgICAgICAgICAgICAgICA8dHIgKm5nSWY9XCJkYXRhRHRsW2RvY3NdIT11bmRlZmluZWRcIj5cclxuICAgICAgICAgICAgICAgICAgICA8dGQgc3R5bGU9XCJ3aWR0aDogMTAlXCI+e3tkb2N1bWVudFVwbG9hZER0bFtkb2NzXX19PC90ZD5cclxuICAgICAgICAgICAgICAgICAgICA8dGQgc3R5bGU9XCJ3aWR0aDogOTAlO3RleHQtYWxpZ246IGxlZnRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGRvY2R0bCBvZiBkYXRhRHRsW2RvY3NdXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmaWxlaW5wdXQgZmlsZWlucHV0LW5ld1wiICpuZ0lmPVwiZG9jZWRpdEFjdGlvblwiIGRhdGEtcHJvdmlkZXM9XCJmaWxlaW5wdXRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImJ0bi1maWxlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLWVkaXRcIiB0b29sdGlwPVwiRWRpdCBEb2N1bWVudFwiIHN0eWxlPVwiZm9udC1zaXplOjIwcHhcIj4gPC9pPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiZmlsZVwiIG5hbWU9XCIuLi5cIiAoY2hhbmdlKT1cIkVkaXRVcGxvYWREb2NzKGRvY2R0bCwkZXZlbnQpXCI+IDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImZpbGVpbnB1dC1maWxlbmFtZVwiPiA8L3NwYW4+ICZuYnNwO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9XCJqYXZhc2NyaXB0OjtcIiBjbGFzcz1cImNsb3NlIGZpbGVpbnB1dC1leGlzdHNcIiBkYXRhLWRpc21pc3M9XCJmaWxlaW5wdXRcIj4gPC9hPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICZuYnNwOyZuYnNwO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICA8YT48aSBjbGFzcz1cImZhIGZhLXRyYXNoLW9cIiAqbmdJZj1cImRvY2RlbGV0ZUFjdGlvblwiIChjbGljayk9XCJDb25maXJtZGVsZXRlRG9jKGRvY2R0bClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCJmb250LXNpemU6MjBweDtjdXJzb3I6IHBvaW50ZXJcIj4gPC9pPiA8L2E+Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxhIChjbGljayk9XCJvcGVuZG9jcyhkb2NkdGwpXCI+IDxpIGNsYXNzPVwiZmEgZmEtZmlsZS1vXCIgc3R5bGU9XCJmb250LXNpemU6MjBweFwiPiA8L2k+IDwvYT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7fCZuYnNwOyZuYnNwO1xyXG4gICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICA8L3RhYmxlPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICA8L2Rpdj5cclxuXHJcblxyXG5cclxuXHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInBhbmVsLWJvZHlcIlxyXG4gICAgICAgICAgKm5nSWY9XCJuYXZmb3JtICE9ICdkb2N1bWVudFVwbG9hZE1hc3RlcicgJiYgbmF2Zm9ybSA9PSAnbWVudUFjY2Vzc01hc3RlcicgICYmIG5hdmZvcm0gIT0gJ3Rlcm1Vc2VyQXNzaWduRm9ybScgJiYgbmF2Zm9ybSAhPSAnc2V0UGFzc3dvcmRGb3JtJyBcIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0yXCI+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXBcIj5cclxuICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImNvbnRyb2wtbGFiZWxcIiBzdHlsZT1cInBhZGRpbmctbGVmdDogMnB4O1wiPkFwcGxpY2F0aW9uPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgIDxzZWxlY3QgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBbKG5nTW9kZWwpXT1cImFwcGxpY2F0aW9uXCIgbmFtZT1cIlVzZXJcIiAoY2hhbmdlKT1cImxvYWRVc3JNZGwoYXBwbGljYXRpb24pXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxvcHRpb24gKm5nRm9yPVwibGV0IGFwcCBvZiBhcHBsaWNhdGlvbkxpc3RcIiB2YWx1ZT1cInt7YXBwLmt9fVwiPnt7YXBwLnZ9fTwvb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgPC9zZWxlY3Q+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTJcIiAqbmdJZj1cInVzZXJEdGxzLmxlbmd0aD4wXCI+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXBcIj5cclxuICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImNvbnRyb2wtbGFiZWxcIiBzdHlsZT1cInBhZGRpbmctbGVmdDogMnB4O1wiPlVzZXI8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgPHNlbGVjdCBjbGFzcz1cImZvcm0tY29udHJvbFwiIFsobmdNb2RlbCldPVwiVXNlclwiIG5hbWU9XCJVc2VyXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxvcHRpb24gKm5nRm9yPVwibGV0IGxvdiBvZiB1c2VyRHRsc1wiIHZhbHVlPVwie3tsb3YudXNlcl9pZG59fVwiPnt7bG92LnVzZXJuYW1lfX08L29wdGlvbj5cclxuICAgICAgICAgICAgICAgIDwvc2VsZWN0PlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0yXCIgKm5nSWY9XCJtb2R1bGVEdGxzLmxlbmd0aD4wICYmIHVzZXJEdGxzLmxlbmd0aCA+MCBcIj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cFwiPlxyXG4gICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiY29udHJvbC1sYWJlbFwiIHN0eWxlPVwicGFkZGluZy1sZWZ0OiAycHg7XCI+TW9kdWxlPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgIDxzZWxlY3QgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBbKG5nTW9kZWwpXT1cIk1vZHVsZVwiIG5hbWU9XCJNb2R1bGVcIj5cclxuICAgICAgICAgICAgICAgICAgPG9wdGlvbiAqbmdGb3I9XCJsZXQgbG92IG9mIG1vZHVsZUR0bHNcIiB2YWx1ZT1cInt7bG92Lm1vZHVsZV9pZG59fVwiPnt7bG92LnByaW50fX08L29wdGlvbj5cclxuICAgICAgICAgICAgICAgIDwvc2VsZWN0PlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0yIFwiPlxyXG4gICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGlkPVwiYWRkQnRuXCIgY2xhc3M9XCJidG4gYnRuLWluZm9cIiBzdHlsZT1cIm1hcmdpbi10b3A6IDIzcHg7XCJcclxuICAgICAgICAgICAgICAgIChjbGljayk9XCJnZXRVc2VyUmlnaHRzKFVzZXIsTW9kdWxlKVwiPkFzc2lnblxyXG4gICAgICAgICAgICAgICAgUmlnaHRzXHJcbiAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8ZGl2IHN0eWxlPVwicGFkZGluZzogMCAxMHB4O1wiICpuZ0lmPVwibWVudUxpc3QubGVuZ3RoPjBcIj5cclxuICAgICAgICAgICAgPGRpdiBzdHlsZT1cImJvcmRlcjoxcHggc29saWQgI2U1ZTVlNTttYXJnaW4tdG9wOiAzMHB4XCI+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInBhbmVsIHBhbmVsLWRlZmF1bHRcIiBzdHlsZT1cIm1hcmdpbi1ib3R0b206IDI1cHg7XCI+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwYW5lbC1oZWFkaW5nXCIgc3R5bGU9XCJwYWRkaW5nOiAwcHg7XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGgzIGNsYXNzPVwicGFuZWwtdGl0bGVcIiBzdHlsZT1cInBhZGRpbmc6IDhweDsgZm9udC1zaXplOiAxNHB4O1wiPlVzZXJzPC9oMz5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTIgY2hrQWxsXCIgc3R5bGU9XCJtYXJnaW46IDBweDtcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwXCIgc3R5bGU9XCJwYWRkaW5nOiAxMHB4O1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJzd2l0Y2hcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBjbGFzcz1cInN3aXRjaFwiIG5hbWU9XCJjaGtBbGxcIiBpZD1cImNoa0FsbFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwib25DaGFuZ2VBbGwoJGV2ZW50LFVzZXIsTW9kdWxlKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjaGVja2VkXT1cIihmYWxzZSAhPT0gKHVzZXJSaWdodHNNZW51TGlzdC5sZW5ndGggPT0gKG1lbnVMaXN0Lmxlbmd0aCArIHRvdE1lbnUpKSA/ICdjaGVja2VkJyA6ICcnKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJjb2wtbWQtNCBjb250cm9sLWxhYmVsIHRleHQtbGVmdFwiIHN0eWxlPVwicGFkZGluZy10b3A6IDhweDtcclxuICAgICAgICAgICAgICAgICAgICAgICBwYWRkaW5nLWxlZnQ6IDQwcHg7XCI+QWxsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgICAgICAgICA8Zm9ybSBjbGFzcz1cImZvcm0taG9yaXpvbnRhbFwiPlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTEyXCIgKm5nRm9yPVwibGV0IG1kbCBvZiBtZW51TGlzdDtsZXQgaT1pbmRleFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTFcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwic3dpdGNoXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJjaGVja2JveFwiIGNsYXNzPVwic3dpdGNoXCIgbmFtZT1cImNoa01lbnVcIiBpZD1cImNoa01lbnV7e21kbC5tZW51X2lkbn19XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwib25DaGFuZ2VNZW51KCRldmVudCxtZGwubWVudV9pZG4sVXNlcixNb2R1bGUpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjaGVja2VkXT1cIihmYWxzZSAhPT0gdXNlclJpZ2h0c01lbnVMaXN0LmluY2x1ZGVzKG1kbD8ubWVudV9pZG4pID8gJ2NoZWNrZWQnIDogJycpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJjb2wtbWQtMiBjb250cm9sLWxhYmVsIHRleHQtbGVmdFwiIHN0eWxlPVwicGFkZGluZy10b3A6IDNweDtcIj57e21kbC5tZW51fX08L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMTJcIiAqbmdJZj1cIm1kbC5TdWJNZW51Lmxlbmd0aCA+IDBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwXCIgKm5nRm9yPVwibGV0IHNtZGwgb2YgbWRsLlN1Yk1lbnVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0xXCIgc3R5bGU9XCJtYXJnaW4tbGVmdDoxMHB4O3BhZGRpbmctbGVmdDogNjBweDtcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJzd2l0Y2hcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBjbGFzcz1cInN3aXRjaFwiIG5hbWU9XCJjaGtTdWJNZW51XCIgaWQ9XCJjaGtTdWJNZW51e3tzbWRsLm1lbnVfaWRufX1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hhbmdlKT1cIm9uQ2hhbmdlU3ViTWVudSgkZXZlbnQsc21kbC5tZW51X2lkbixtZGwubWVudV9pZG4sVXNlcixNb2R1bGUpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NoZWNrZWRdPVwiKCBmYWxzZSAhPT0gdXNlclJpZ2h0c01lbnVMaXN0LmluY2x1ZGVzKHNtZGw/Lm1lbnVfaWRuKSA/ICdjaGVja2VkJyA6ICcnKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJjb2wtbWQtNCBjb250cm9sLWxhYmVsIHRleHQtbGVmdFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCJwYWRkaW5nLXRvcDogOHB4OyBmb250LXdlaWdodDogMTAwO3BhZGRpbmctbGVmdDogNDBweDtcIj4mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDt7e3NtZGwuaGRyfX08L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9mb3JtPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwicGFuZWwtYm9keVwiICpuZ0lmPVwibmF2Zm9ybSA9PSAnd2ViTWVudUFjY2Vzc01hc3RlcidcIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0yXCI+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXBcIj5cclxuICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImNvbnRyb2wtbGFiZWxcIiBzdHlsZT1cInBhZGRpbmctbGVmdDogMnB4O1wiPkFwcGxpY2F0aW9uPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgIDxzZWxlY3QgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBbKG5nTW9kZWwpXT1cImFwcGxpY2F0aW9uXCIgbmFtZT1cIlVzZXJcIiAoY2hhbmdlKT1cImxvYWRVc3JNZGwoYXBwbGljYXRpb24pXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxvcHRpb24gKm5nRm9yPVwibGV0IGFwcCBvZiBhcHBsaWNhdGlvbkxpc3RcIiB2YWx1ZT1cInt7YXBwLmt9fVwiPnt7YXBwLnZ9fTwvb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgPC9zZWxlY3Q+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTJcIiAqbmdJZj1cInVzZXJEdGxzLmxlbmd0aD4wXCI+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXBcIj5cclxuICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImNvbnRyb2wtbGFiZWxcIiBzdHlsZT1cInBhZGRpbmctbGVmdDogMnB4O1wiPlVzZXI8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgPHNlbGVjdCBjbGFzcz1cImZvcm0tY29udHJvbFwiIFsobmdNb2RlbCldPVwiVXNlclwiIG5hbWU9XCJVc2VyXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxvcHRpb24gKm5nRm9yPVwibGV0IGxvdiBvZiB1c2VyRHRsc1wiIHZhbHVlPVwie3tsb3YudXNlcl9pZG59fVwiPnt7bG92LnVzZXJuYW1lfX08L29wdGlvbj5cclxuICAgICAgICAgICAgICAgIDwvc2VsZWN0PlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0yXCIgKm5nSWY9XCJtb2R1bGVEdGxzLmxlbmd0aD4wICYmIHVzZXJEdGxzLmxlbmd0aCA+MCBcIj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cFwiPlxyXG4gICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiY29udHJvbC1sYWJlbFwiIHN0eWxlPVwicGFkZGluZy1sZWZ0OiAycHg7XCI+TW9kdWxlPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgIDxzZWxlY3QgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBbKG5nTW9kZWwpXT1cIk1vZHVsZVwiIG5hbWU9XCJNb2R1bGVcIj5cclxuICAgICAgICAgICAgICAgICAgPG9wdGlvbiAqbmdGb3I9XCJsZXQgbG92IG9mIG1vZHVsZUR0bHNcIiB2YWx1ZT1cInt7bG92Lm1vZHVsZV9pZG59fVwiPnt7bG92LnByaW50fX08L29wdGlvbj5cclxuICAgICAgICAgICAgICAgIDwvc2VsZWN0PlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0yIFwiPlxyXG4gICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGlkPVwiYWRkQnRuXCIgY2xhc3M9XCJidG4gYnRuLWluZm9cIiBzdHlsZT1cIm1hcmdpbi10b3A6IDIzcHg7XCJcclxuICAgICAgICAgICAgICAgIChjbGljayk9XCJnZXRVc2VyUmlnaHRzKFVzZXIsTW9kdWxlKVwiPkFzc2lnblxyXG4gICAgICAgICAgICAgICAgUmlnaHRzXHJcbiAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8ZGl2IHN0eWxlPVwicGFkZGluZzogMCAxMHB4O1wiICpuZ0lmPVwibWVudUxpc3QubGVuZ3RoPjBcIj5cclxuICAgICAgICAgICAgPGRpdiBzdHlsZT1cImJvcmRlcjoxcHggc29saWQgI2U1ZTVlNTttYXJnaW4tdG9wOiAzMHB4XCI+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInBhbmVsIHBhbmVsLWRlZmF1bHRcIiBzdHlsZT1cIm1hcmdpbi1ib3R0b206IDI1cHg7XCI+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwYW5lbC1oZWFkaW5nXCIgc3R5bGU9XCJwYWRkaW5nOiAwcHg7XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGgzIGNsYXNzPVwicGFuZWwtdGl0bGVcIiBzdHlsZT1cInBhZGRpbmc6IDhweDsgZm9udC1zaXplOiAxNHB4O1wiPlVzZXJzPC9oMz5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTIgY2hrQWxsXCIgc3R5bGU9XCJtYXJnaW46IDBweDtcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwXCIgc3R5bGU9XCJwYWRkaW5nOiAxMHB4O1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJzd2l0Y2hcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBjbGFzcz1cInN3aXRjaFwiIG5hbWU9XCJjaGtBbGxcIiBpZD1cImNoa0FsbFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwib25DaGFuZ2VBbGwoJGV2ZW50LFVzZXIsTW9kdWxlKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjaGVja2VkXT1cIihmYWxzZSAhPT0gKHVzZXJSaWdodHNNZW51TGlzdC5sZW5ndGggPT0gKG1lbnVMaXN0Lmxlbmd0aCArIHRvdE1lbnUpKSA/ICdjaGVja2VkJyA6ICcnKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJjb2wtbWQtNCBjb250cm9sLWxhYmVsIHRleHQtbGVmdFwiIHN0eWxlPVwicGFkZGluZy10b3A6IDhweDtcclxuICAgICAgICAgICAgICAgICAgICAgICBwYWRkaW5nLWxlZnQ6IDQwcHg7XCI+QWxsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgICAgICAgICA8Zm9ybSBjbGFzcz1cImZvcm0taG9yaXpvbnRhbFwiPlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTEyXCIgKm5nRm9yPVwibGV0IG1kbCBvZiBtZW51TGlzdDtsZXQgaT1pbmRleFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTFcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwic3dpdGNoXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJjaGVja2JveFwiIGNsYXNzPVwic3dpdGNoXCIgbmFtZT1cImNoa01lbnVcIiBpZD1cImNoa01lbnV7e21kbC5tZW51X2lkbn19XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwib25DaGFuZ2VXZWJNZW51KCRldmVudCxtZGwubWVudV9pZG4sVXNlcixNb2R1bGUpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjaGVja2VkXT1cIihmYWxzZSA9PSB1c2VyUmlnaHRzTWVudUxpc3QuaW5jbHVkZXMobWRsPy5tZW51X2lkbikgPyAnY2hlY2tlZCcgOiAnJylcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImNvbC1tZC0yIGNvbnRyb2wtbGFiZWwgdGV4dC1sZWZ0XCIgc3R5bGU9XCJwYWRkaW5nLXRvcDogM3B4O1wiPnt7bWRsLm1lbnV9fTwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0xMlwiICpuZ0lmPVwibWRsLlN1Yk1lbnUubGVuZ3RoID4gMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXBcIiAqbmdGb3I9XCJsZXQgc21kbCBvZiBtZGwuU3ViTWVudVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTFcIiBzdHlsZT1cIm1hcmdpbi1sZWZ0OjEwcHg7cGFkZGluZy1sZWZ0OiA2MHB4O1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cInN3aXRjaFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJjaGVja2JveFwiIGNsYXNzPVwic3dpdGNoXCIgbmFtZT1cImNoa1N1Yk1lbnVcIiBpZD1cImNoa1N1Yk1lbnV7e3NtZGwubWVudV9pZG59fVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwib25DaGFuZ2VXZWJTdWJNZW51KCRldmVudCxzbWRsLm1lbnVfaWRuLG1kbC5tZW51X2lkbixVc2VyLE1vZHVsZSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2hlY2tlZF09XCIoIGZhbHNlID09IHVzZXJSaWdodHNNZW51TGlzdC5pbmNsdWRlcyhzbWRsPy5tZW51X2lkbikgPyAnY2hlY2tlZCcgOiAnJylcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiY29sLW1kLTQgY29udHJvbC1sYWJlbCB0ZXh0LWxlZnRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPVwicGFkZGluZy10b3A6IDhweDsgZm9udC13ZWlnaHQ6IDEwMDtwYWRkaW5nLWxlZnQ6IDQwcHg7XCI+Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7e3tzbWRsLmhkcn19PC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZm9ybT5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwicGFuZWwtYm9keVwiIHN0eWxlPVwiYmFja2dyb3VuZDogI2ZmZjttaW4taGVpZ2h0OiA1NTBweDtcIlxyXG4gICAgICAgICAgKm5nSWY9XCJuYXZmb3JtICE9ICdhZGR0aW9uYWxEdGxNYXN0ZXInICYmICBuYXZmb3JtICE9ICdkb2N1bWVudFVwbG9hZE1hc3RlcicgJiYgbmF2Zm9ybSAhPSAnbWVudUFjY2Vzc01hc3RlcicgJiYgbmF2Zm9ybSA9PSAndGVybVVzZXJBc3NpZ25Gb3JtJyAmJiBuYXZmb3JtICE9ICdzZXRQYXNzd29yZEZvcm0nICBcIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIiBzdHlsZT1cIm1hcmdpbi10b3A6IDEwcHg7XCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMlwiPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwXCI+XHJcbiAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJjb250cm9sLWxhYmVsXCI+VGVybXM8L2xhYmVsPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0xXCIgc3R5bGU9XCJtYXJnaW4tbGVmdDogODVweDtcIj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cFwiPlxyXG4gICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiY29udHJvbC1sYWJlbFwiPlVzZXJzPC9sYWJlbD5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IHRlcm0gb2YgdGVybXNMaXN0OyBsZXQgaT1pbmRleDtcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtM1wiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXBcIj5cclxuXHJcbiAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9XCJ7e3Rlcm0uYnV5ZXJfdGVybXNfaWRufX1cIiBjbGFzcz1cImNvbnRyb2wtbGFiZWxcIlxyXG4gICAgICAgICAgICAgICAgICAgIHN0eWxlPVwicGFkZGluZzogMTBweDtcIj57e3Rlcm0uZHNjfX08L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0zXCIgKm5nSWY9XCJ0ZXJtLnVzZXJJZG5MaXN0ICE9IHVuZGVmaW5lZFwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXAgdy0xMDBcIj5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWdyb3VwIHctMTAwXCI+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIDwhLS0gPG5nLXNlbGVjdCBbaXRlbXNdPVwiYXBwbFVzZXJMaXN0XCIgW211bHRpcGxlXT1cInRydWVcIiBbYWRkVGFnXT1cImFkZFRhZ1wiIChjaGFuZ2UpPVwib25jaGFuZVZhbHMobnVsbCx0ZXJtLmJ1eWVyX3Rlcm1zX2lkbix0ZXJtLnVzZXJJZG5MaXN0KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBiaW5kTGFiZWw9XCJ2XCIgYmluZFZhbHVlPVwia1wiIG5hbWU9XCJ7e3Rlcm0gPy5idXllcl90ZXJtc19pZG59fVwiIFsobmdNb2RlbCldPVwidGVybS51c2VySWRuTGlzdFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbmctc2VsZWN0PiAtLT5cclxuICAgICAgICAgICAgICAgICAgICA8bmctc2VsZWN0IHBsYWNlaG9sZGVyPVwiU2VsZWN0IHVzZXJcIiBbb3B0aW9uc109XCJ0ZXJtLlRlcm1Vc2VyTGlzdFwiIFsobmdNb2RlbCldPVwidGVybS51c2VySWRuTGlzdFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAoZGVzZWxlY3RlZCk9XCJvbmNoYW5nZVVzZXJMaXN0KCRldmVudCx0ZXJtLCdkZWxldGUnKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAoc2VsZWN0ZWQpPVwib25jaGFuZ2VVc2VyTGlzdCgkZXZlbnQsdGVybSwnYWRkJylcIiBuYW1lPVwic3RhdHVzXCIgW211bHRpcGxlXT1cInRydWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgW2FsbG93Q2xlYXJdPVwidHJ1ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNvcHRpb25UZW1wbGF0ZSBsZXQtb3B0aW9uPVwib3B0aW9uXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmYW1mYW1mYW0tZmxhZ3Mge3tvcHRpb24/LnZhbHVlfX1cIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAge3tvcHRpb24/LmxhYmVsfX1cclxuICAgICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9uZy1zZWxlY3Q+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC02XCI+PC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJwYW5lbC1ib2R5XCIgc3R5bGU9XCJiYWNrZ3JvdW5kOiAjZmZmO21pbi1oZWlnaHQ6IDU1MHB4O1wiXHJcbiAgICAgICAgICAqbmdJZj1cIm5hdmZvcm0gIT0gJ2FkZHRpb25hbER0bE1hc3RlcicgJiYgIG5hdmZvcm0gIT0gJ2RvY3VtZW50VXBsb2FkTWFzdGVyJyAmJiBuYXZmb3JtICE9ICdtZW51QWNjZXNzTWFzdGVyJyAmJiBuYXZmb3JtICE9ICd0ZXJtVXNlckFzc2lnbkZvcm0nICYmIG5hdmZvcm0gPT0gJ3NldFBhc3N3b3JkRm9ybScgXCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCIgc3R5bGU9XCJtYXJnaW4tdG9wOiAxMHB4O1wiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTEyXCI+XHJcbiAgICAgICAgICAgICAgPHAgY2xhc3M9XCJoZWFkaW5nQ2xzXCI+Q2hhbmdlIFVzZXIgUGFzc3dvcmQ8L3A+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTJcIj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cFwiPlxyXG4gICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiY29udHJvbC1sYWJlbFwiIHN0eWxlPVwicGFkZGluZzogOHB4O1wiPlVzZXJuYW1lPC9sYWJlbD5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMVwiIHN0eWxlPVwibWFyZ2luLWxlZnQ6IDg1cHg7XCI+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXBcIj5cclxuICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImNvbnRyb2wtbGFiZWxcIiBzdHlsZT1cInBhZGRpbmc6IDhweDtcIj5QYXNzd29yZDwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCB1c2VyIG9mIHVzZXJEZXRhaWxzOyBsZXQgaT1pbmRleDtcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtM1wiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXBcIj5cclxuICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiY29udHJvbC1sYWJlbFwiIHN0eWxlPVwicGFkZGluZzogMTBweDtmb250LXdlaWdodDogbm9ybWFsO1wiPnt7dXNlcj8udXNlcm5hbWV9fTwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTZcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwIHctMTAwXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIGNsYXNzPVwiZm9ybS1jb250cm9sXCIgIFsobmdNb2RlbCldPVwidXNlci5wYXNzd29yZFwiIFt2YWx1ZV09XCJ1c2VyPy5wYXNzd29yZFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgIDwhLS0gKGJsdXIpPVwiY2hhbmdlUHN3ZCgkZXZlbnQsdXNlci51c2VySWRuKVwiIC0tPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0zXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cFwiPlxyXG4gICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJzdWJtaXRcIiBjbGFzcz1cImJ0biBidG4tc3VjY2Vzc1wiIChjbGljayk9XCJjaGFuZ2VQYXNzd29yZCh1c2VyKVwiPnNhdmU8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgPCEtLSA8YnV0dG9uIHR5cGU9XCJzdWJtaXRcIiBjbGFzcz1cImJ0biBidG4tc3VjY2Vzc1wiIChjbGljayk9XCJzYXZlQXBwVXNlcnRlcm1zKGFwcGxVc3JMc3QpXCI+c2F2ZTwvYnV0dG9uPiAtLT5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwicGFuZWwtYm9keVwiIHN0eWxlPVwiYmFja2dyb3VuZDogI2ZmZjttaW4taGVpZ2h0OiA1NTBweDtcIiAqbmdJZj1cIm5hdmZvcm09PSdsZWRnZXJCYW5rRGV0YWlscydcIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0xMlwiIHN0eWxlPVwibWFyZ2luOjVweFwiPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwIHctMTAwXCI+XHJcbiAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJjb2wtbWQtMiBjb250cm9sLWxhYmVsXCI+QmFuazwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTRcIj5cclxuICAgICAgICAgICAgICAgICAgPG5nLXNlbGVjdCBwbGFjZWhvbGRlcj1cIlNlbGVjdCBCYW5rXCIgW29wdGlvbnNdPVwiYmFua0xpc3RcIiBbKG5nTW9kZWwpXT1cImJhbmtcIiBuYW1lPVwiYmFua1wiXHJcbiAgICAgICAgICAgICAgICAgICAgKHNlbGVjdGVkKT1cImdldEJhbmtCcmFuY2goYmFuaylcIiAoZmlsdGVySW5wdXRDaGFuZ2VkKT1cImxlZGdlckJhbmtEZXRhaWxzKCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgIFthbGxvd0NsZWFyXT1cInRydWVcIj5cclxuICAgICAgICAgICAgICAgICAgPC9uZy1zZWxlY3Q+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMTJcIiBzdHlsZT1cIm1hcmdpbjo1cHhcIj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cCB3LTEwMFwiPlxyXG4gICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiY29sLW1kLTIgY29udHJvbC1sYWJlbFwiPkJyYW5jaCBEZXRhaWxzPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNFwiPlxyXG4gICAgICAgICAgICAgICAgICA8c2VsZWN0IG5hbWU9XCJicmFuY2hcIiAoY2hhbmdlKT1cInNlbGVjdEJyYW5jaChicmFuY2gpXCIgWyhuZ01vZGVsKV09XCJicmFuY2hcIiBjbGFzcz1cImZvcm0tY29udHJvbFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJcIj5TZWxlY3QgYnJhbmNoPC9vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiAqbmdGb3I9XCJsZXQgYm5rRHRsIG9mIGJhbmtEdGxMaXN0XCIgW25nVmFsdWVdPVwiYm5rRHRsLm5tZV9pZG5cIj57e2Jua0R0bC5wZXJzb25fbm1lfX08L29wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgPC9zZWxlY3Q+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMTJcIiAqbmdJZj1cInNlbGVjdEJyYW5jaEFkZHJlc3MhPScnXCIgc3R5bGU9XCJtYXJnaW46NXB4XCI+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXAgdy0xMDBcIj5cclxuICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImNvbC1tZC0yIGNvbnRyb2wtbGFiZWxcIj4mbmJzcDs8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC00XCI+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtM1wiPkFkZHJlc3M6PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtOVwiPnt7c2VsZWN0QnJhbmNoQWRkcmVzc319PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtM1wiPklGU0MgQ29kZTo8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC05XCI+e3tzZWxlY3RJZnNjfX08L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMTJcIiBzdHlsZT1cIm1hcmdpbjo1cHhcIj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cCB3LTEwMFwiPlxyXG4gICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiY29sLW1kLTIgY29udHJvbC1sYWJlbFwiPkFjY291bnQgVHlwZTwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTRcIj5cclxuICAgICAgICAgICAgICAgICAgPHNlbGVjdCBuYW1lPVwiYWNjb3VudFR5cGVcIiBbKG5nTW9kZWwpXT1cImFjY291bnRUeXBlXCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIj5cclxuICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiY3VycmVudFwiPkN1cnJlbnQ8L29wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwic2F2aW5nc1wiPlNhdmluZ3M8L29wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgPC9zZWxlY3Q+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMTJcIiBzdHlsZT1cIm1hcmdpbjo1cHhcIj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cCB3LTEwMFwiPlxyXG4gICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiY29sLW1kLTIgY29udHJvbC1sYWJlbFwiPkFjY291bnQgTm88L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC00XCI+XHJcbiAgICAgICAgICAgICAgICAgIDx0ZXh0YXJlYSBjbGFzcz1cImZvcm0tY29udHJvbFwiIGNvbHM9XCI0NVwiIHJvd3M9XCIyXCIgbmFtZT1cImFjY291bnRub1wiIFsobmdNb2RlbCldPVwiYWNjb3VudG5vXCI+PC90ZXh0YXJlYT5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0xMlwiIHN0eWxlPVwibWFyZ2luOjVweFwiPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwIHctMTAwXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTJcIj4mbmJzcDs8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNFwiPlxyXG4gICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiAqbmdJZj1cImVkaXRiYW5rX2R0bF9pZG49PScnXCIgKGNsaWNrKT1cIlNhdmVMZWRnZXJCYW5rKClcIlxyXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1zdWNjZXNzXCI+QWRkPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiICpuZ0lmPVwiZWRpdGJhbmtfZHRsX2lkbiE9JydcIiAoY2xpY2spPVwiU2F2ZUxlZGdlckJhbmsoKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJidG4gYnRuLXN1Y2Nlc3NcIj5FZGl0PC9idXR0b24+XHJcblxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCIgKm5nSWY9XCJleGl0QmFua0R0bExpc3QubGVuZ3RoPjBcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0xIHB1bGwtbGVmdFwiPlxyXG4gICAgICAgICAgICAgICZuYnNwO1xyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC02IHB1bGwtcmlnaHRcIj5cclxuICAgICAgICAgICAgICA8Zm9ybSBjbGFzcz1cImZvcm0taW5saW5lIHB1bGwtcmlnaHRcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9XCJleGFtcGxlSW5wdXROYW1lMlwiPlNlYXJjaCAmbmJzcDsmbmJzcDs8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBjbGFzcz1cImZvcm0tY29udHJvbFwiIGlkPVwiZXhhbXBsZUlucHV0TmFtZTJcIiBuYW1lPVwic2VhcmNoRlwiIFsobmdNb2RlbCldPVwic2VhcmNoRlwiIC8+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8L2Zvcm0+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCIgKm5nSWY9XCJleGl0QmFua0R0bExpc3QubGVuZ3RoPjBcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0xMlwiPlxyXG4gICAgICAgICAgICAgIDx0YWJsZSBjbGFzcz1cImRpc3BsYXlUYWJsZVwiPlxyXG4gICAgICAgICAgICAgICAgPHRoZWFkPlxyXG4gICAgICAgICAgICAgICAgICA8dGg+QWN0aW9uczwvdGg+XHJcbiAgICAgICAgICAgICAgICAgIDx0aD5BY2NvdW50IFR5cGU8L3RoPlxyXG4gICAgICAgICAgICAgICAgICA8dGg+QWNjb3VudCBObzwvdGg+XHJcbiAgICAgICAgICAgICAgICAgIDx0aD5OYW1lPC90aD5cclxuICAgICAgICAgICAgICAgICAgPHRoPkJyYW5jaDwvdGg+XHJcbiAgICAgICAgICAgICAgICAgIDx0aD5BZGRyZXNzPC90aD5cclxuICAgICAgICAgICAgICAgICAgPHRoPklGU0MgQ29kZTwvdGg+XHJcbiAgICAgICAgICAgICAgICA8L3RoZWFkPlxyXG4gICAgICAgICAgICAgICAgPHRib2R5PlxyXG4gICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBiYW5rZHRsIG9mIGV4aXRCYW5rRHRsTGlzdCA7IGxldCBpID0gaW5kZXhcIj5cclxuICAgICAgICAgICAgICAgICAgICA8dHIgW25nQ2xhc3NdPVwieydldmVuJzppJTI9PTAsJ29kZCc6aSUyPT0xfVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPHRkPiA8aSBjbGFzcz1cImZhIGZhLWVkaXRcIiAoY2xpY2spPVwibG9hZEVkaXRCYW5rRHRsKGJhbmtkdGwpXCIgdG9vbHRpcD1cIkVkaXQgQmFua1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCJmb250LXNpemU6MTVweDtjdXJzb3I6IHBvaW50ZXJcIj4gPC9pPiZuYnNwO3xcclxuICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS10cmFzaC1vXCIgKGNsaWNrKT1cIkNvbmZpcm1EZWxldGVMZWRnZXJCYW5rKGJhbmtkdGwpXCIgdG9vbHRpcD1cIkRlbGV0ZSBCYW5rXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT1cImZvbnQtc2l6ZToxNXB4O2N1cnNvcjogcG9pbnRlclwiPiA8L2k+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8dGQ+e3tiYW5rZHRsLmFjY291bnRUeXBlfX08L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPHRkPnt7YmFua2R0bC5hY2NvdW50Tm99fTwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8dGQ+e3tiYW5rZHRsLmJhbmtuYW1lfX08L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPHRkPnt7YmFua2R0bC5icmFuY2huYW1lfX08L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPHRkPnt7YmFua2R0bC5hZGRyZXNzfX08L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPHRkPnt7YmFua2R0bC5pZnNjfX08L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgPC90Ym9keT5cclxuICAgICAgICAgICAgICA8L3RhYmxlPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiBjbGFzcz1cIm1vZGFsXCIgaWQ9XCJkYXRhbW9kYWxcIiByb2xlPVwiZGlhbG9nXCIgYXJpYS1sYWJlbGxlZGJ5PVwiZGVmTW9kYWxIZWFkXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCJcclxuICAgICAgZGF0YS1iYWNrZHJvcD1cInN0YXRpY1wiIGRhdGEta2V5Ym9hcmQ9XCJmYWxzZVwiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtZGlhbG9nXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWNvbnRlbnRcIj5cclxuICAgICAgICAgIDxmb3JtIGNsYXNzPVwiZm9ybS1ob3Jpem9udGFsXCIgI2Y9XCJuZ0Zvcm1cIiBuYW1lPVwiYXBwRm9ybVwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtaGVhZGVyXCI+XHJcbiAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJjbG9zZVwiIGRhdGEtZGlzbWlzcz1cIm1vZGFsXCIgKGNsaWNrKT1cImNsb3NlTnVsbCgpO1wiICNjbG9zZWJ0bj5cclxuICAgICAgICAgICAgICAgIDxzcGFuIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPiZ0aW1lczs8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInNyLW9ubHlcIj5DbG9zZTwvc3Bhbj5cclxuICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICA8aDQgY2xhc3M9XCJtb2RhbC10aXRsZVwiIGlkPVwiZGVmTW9kYWxIZWFkXCI+e3tidG5OYW1lfX0gUmVjb3JkPC9oND5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1ib2R5XCI+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0xMlwiICpuZ0Zvcj1cImxldCBmbCBvZiBmb3JtRmlsZHMgfCBvcmRlckJ5UGlwZTogJ3NydCc6ICdhc2MnXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwXCJcclxuICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImZsPy5mb3JtX2ZpZWxkX3R5cCA9PSAndCcgJiYgZmw/LmlzX2hpZGRlbiA9PSAwICYmIGZsPy5kdGFfdHlwID09J2MnIHx8IGZsPy5kdGFfdHlwID09J3QnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiY29sLW1kLTMgY29udHJvbC1sYWJlbFwiPnt7Zmw/LmZvcm1fZmllbGRfdGl0bGV9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LWRhbmdlclwiICpuZ0lmPVwiZmwuaXNfY29tcHVsc29yeSA9PSAxXCI+Kjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtOVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWdyb3VwIHctMTAwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIGNsYXNzPVwiZm9ybS1jb250cm9sIHBvc3JlbFwiIG5hbWU9XCJ7e2ZsPy5mb3JtX2ZpZWxkfX1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJmbD8uZGVmYXVsdF92YWx1ZVwiIFsobmdNb2RlbCldPVwiZmwuZGVmYXVsdF92YWx1ZVwiICN0ZXh0SW5wdXQ9XCJuZ01vZGVsXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAoYmx1cik9XCJjaGtGdW4oZmwsZmwuZGVmYXVsdF92YWx1ZSk7XCIgW3JlcXVpcmVkXT1cImZsPy5pc19jb21wdWxzb3J5ID09ICcxJ1wiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZmEgZmEte3tpY299fSBleWVcIiBbbmdTdHlsZV09XCJ7J2NvbG9yJzppY28gPT0gJ2NoZWNrJyA/ICdncmVlbicgOiAncmVkJyB9XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cInVzcmlzRXhpc3QgJiYgb25FcnIgPT0gZmwuZm9ybV9maWVsZCBcIj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJ0ZXh0SW5wdXQuaW52YWxpZCAmJiAodGV4dElucHV0LmRpcnR5IHx8IHRleHRJbnB1dC50b3VjaGVkKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYWxlcnQgYWxlcnQtZGFuZ2VyIGNhXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJ0ZXh0SW5wdXQuZXJyb3JzLnJlcXVpcmVkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAge3tmbC5mb3JtX2ZpZWxkX3RpdGxlfX0gaXMgcmVxdWlyZWQuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXBcIiAqbmdJZj1cImZsPy5mb3JtX2ZpZWxkX3R5cCA9PSAndCcgJiYgZmw/LmlzX2hpZGRlbiA9PSAwICYmIGZsPy5kdGFfdHlwID09J24nXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiY29sLW1kLTMgY29udHJvbC1sYWJlbFwiPnt7Zmw/LmZvcm1fZmllbGRfdGl0bGV9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LWRhbmdlclwiICpuZ0lmPVwiZmwuaXNfY29tcHVsc29yeSA9PSAxXCI+Kjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtOVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWdyb3VwIHctMTAwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwibnVtYmVyXCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBuYW1lPVwie3tmbD8uZm9ybV9maWVsZH19XCIgW3ZhbHVlXT1cImZsPy5kZWZhdWx0X3ZhbHVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImZsLmRlZmF1bHRfdmFsdWVcIiAjbnVtYmVySW5wdXQ9XCJuZ01vZGVsXCIgW3JlcXVpcmVkXT1cImZsPy5pc19jb21wdWxzb3J5PT0xXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJudW1iZXJJbnB1dC5pbnZhbGlkICYmIChudW1iZXJJbnB1dC5kaXJ0eSB8fCBudW1iZXJJbnB1dC50b3VjaGVkKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYWxlcnQgYWxlcnQtZGFuZ2VyIGNhXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJudW1iZXJJbnB1dC5lcnJvcnMucmVxdWlyZWRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICB7e2ZsLmZvcm1fZmllbGRfdGl0bGV9fSBpcyByZXF1aXJlZC5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJudW1iZXJJbnB1dC5pbnZhbGlkICYmIChudW1iZXJJbnB1dC5kaXJ0eSB8fCBudW1iZXJJbnB1dC50b3VjaGVkKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJhbGVydCBhbGVydC1kYW5nZXIgY2FcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwibnVtYmVySW5wdXQuZXJyb3JzLnJlcXVpcmVkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e2ZsLmZvcm1fZmllbGRfdGl0bGV9fSBpcyByZXF1aXJlZC5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwXCJcclxuICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImZsPy5mb3JtX2ZpZWxkX3R5cCA9PSAncHcnICYmIGZsPy5pc19oaWRkZW4gPT0gMCAmJiBmbD8uZHRhX3R5cCA9PSdwdydcIj5cclxuICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJjb2wtbWQtMyBjb250cm9sLWxhYmVsXCI+e3tmbD8uZm9ybV9maWVsZF90aXRsZX19XHJcbiAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtZGFuZ2VyXCIgKm5nSWY9XCJmbC5pc19jb21wdWxzb3J5ID09IDFcIj4qPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC05XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtZ3JvdXAgdy0xMDBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ7e2lucHV0dHlwZX19XCIgY2xhc3M9XCJmb3JtLWNvbnRyb2wgcG9zcmVsXCIgbmFtZT1cInt7Zmw/LmZvcm1fZmllbGR9fVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cImZsPy5kZWZhdWx0X3ZhbHVlXCIgWyhuZ01vZGVsKV09XCJmbC5kZWZhdWx0X3ZhbHVlXCIgI3Bhc3NJbnB1dD1cIm5nTW9kZWxcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFtyZXF1aXJlZF09XCJmbD8uaXNfY29tcHVsc29yeSA9PSAnMSdcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImZhIHt7ZXZlQ319IGV5ZVwiIChjbGljayk9XCJzaG93SElkZVBhc3MoKTtcIj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJwYXNzSW5wdXQuaW52YWxpZCAmJiAocGFzc0lucHV0LmRpcnR5IHx8IHBhc3NJbnB1dC50b3VjaGVkKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYWxlcnQgYWxlcnQtZGFuZ2VyIGNhXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJwYXNzSW5wdXQuZXJyb3JzLnJlcXVpcmVkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAge3tmbC5mb3JtX2ZpZWxkX3RpdGxlfX0gaXMgcmVxdWlyZWQuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cFwiICpuZ0lmPVwiZmw/LmZvcm1fZmllbGRfdHlwID09ICd0JyAmJiBmbD8uZHRhX3R5cCA9PSdhJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImNvbC1tZC0zIGNvbnRyb2wtbGFiZWxcIj57e2ZsPy5mb3JtX2ZpZWxkX3RpdGxlfX1cclxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC1kYW5nZXJcIiAqbmdJZj1cImZsLmlzX2NvbXB1bHNvcnkgPT0gMVwiPio8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ncm91cCB3LTEwMFwiPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSA8bmctc2VsZWN0IFtpdGVtc109XCJbXVwiIFthZGRUYWddPVwidHJ1ZVwiIGJpbmRWYWx1ZT1cImxhYmVsXCIgW211bHRpcGxlXT1cInRydWVcIiBuYW1lPVwie3tmbD8uZm9ybV9maWVsZH19XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImZsLmRlZmF1bHRfdmFsdWVcIiBbaXNPcGVuXT1cImZhbHNlXCIgI2FmaWVsZD1cIm5nTW9kZWxcIiBbcmVxdWlyZWRdPVwiZmw/LmlzX2NvbXB1bHNvcnkgPT0gJzEnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctc2VsZWN0PiAtLT5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gPG5nLXNlbGVjdCBzdHlsZT1cInotaW5kZXg6IDU7XCIgW29wdGlvbnNdPVwiW11cIiBbKG5nTW9kZWwpXT1cImZsLmRlZmF1bHRfdmFsdWVcIiBuYW1lPVwie3tmbD8uZm9ybV9maWVsZH19XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAjYWZpZWxkPVwibmdNb2RlbFwiIFtyZXF1aXJlZF09XCJmbD8uaXNfY29tcHVsc29yeSA9PSAnMSdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1zZWxlY3Q+IGxhc3QgY29tbWVudGVkLS0+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dGFnLWlucHV0IFsobmdNb2RlbCldPVwiZmwuZGVmYXVsdF92YWx1ZVwiIG5hbWU9XCJ7e2ZsPy5mb3JtX2ZpZWxkfX1cIiBbbW9kZWxBc1N0cmluZ3NdPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW2FsbG93RHVwZXNdPVwidHJ1ZVwiIFtlZGl0YWJsZV09J3RydWUnPjwvdGFnLWlucHV0PlxyXG5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgIDwhLS0gPGRpdiAqbmdJZj1cImFmaWVsZC5pbnZhbGlkICYmIChhZmllbGQuZGlydHkgfHwgYWZpZWxkLnRvdWNoZWQpXCIgY2xhc3M9XCJhbGVydCBhbGVydC1kYW5nZXIgY2FcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImFmaWVsZC5lcnJvcnMucmVxdWlyZWRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICB7e2ZsLmZvcm1fZmllbGRfdGl0bGV9fSBpcyByZXF1aXJlZC5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4gLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cFwiICpuZ0lmPVwiZmw/LmZvcm1fZmllbGRfdHlwID09ICd0JyAmJiBmbD8uZHRhX3R5cCA9PSdzcidcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJjb2wtbWQtMyBjb250cm9sLWxhYmVsXCI+e3tmbD8uZm9ybV9maWVsZF90aXRsZX19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC1kYW5nZXJcIiAqbmdJZj1cImZsLmlzX2NvbXB1bHNvcnkgPT0gMVwiPio8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC03XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ncm91cCB3LTEwMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gPG5nLXNlbGVjdCBbaXRlbXNdPVwic3FsQXJyYXlbZmwuZm9ybV9maWVsZF1cIiBbZHJvcGRvd25Qb3NpdGlvbl09XCInYm90dG9tJ1wiIGJpbmRMYWJlbD1cInZcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJwYWdlRGlzcGxheVwiIFtuZ01vZGVsT3B0aW9uc109XCJ7c3RhbmRhbG9uZTogdHJ1ZX1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLXNlbGVjdD4gLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLXNlbGVjdCBzdHlsZT1cInotaW5kZXg6IDU7XCIgW29wdGlvbnNdPVwic3FsQXJyYXlbZmwuZm9ybV9maWVsZF1cIiBbKG5nTW9kZWwpXT1cInBhZ2VEaXNwbGF5XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU9XCJ7e2ZsPy5mb3JtX2ZpZWxkfX1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLXNlbGVjdD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1pbmZvXCIgdHlwZT1cImJ1dHRvblwiIHN0eWxlPVwid2lkdGg6MTAwJTtcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJhZGRBdHRyKHBhZ2VEaXNwbGF5LCBzcWxBcnJheVtmbC5mb3JtX2ZpZWxkXSwgZmwuZGVmYXVsdF92YWx1ZSk7XCI+QWRkPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJjb2wtbWQtMyBjb250cm9sLWxhYmVsXCI+U2VsZWN0ZWQgTW9kdWxlczwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNjbGFzcz1cImNvbC1tZC05XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtZHNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI2l0ZW1UZW1wbGF0ZSBsZXQtaXRlbT1cIml0ZW1cIiBsZXQtaW5kZXg9XCJpbmRleFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCJwYWRkaW5nOiA0cHg7Ym9yZGVyOiAxcHggc29saWQgI2M5YzljOTtib3JkZXItcmFkaXVzOiA2cHg7ZGlzcGxheTogaW5saW5lLWJsb2NrO3dpZHRoOiAxMDAlO3Bvc2l0aW9uOiByZWxhdGl2ZTtcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+e3tpbmRleCsxfX08L3NwYW4+IC0ge3tpdGVtLnZhbHVlfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJybVwiIChjbGljayk9XCJyZW1vdmUoZmwuZGVmYXVsdF92YWx1ZSxpdGVtLnZhbHVlLGluZGV4LGZsPy5mb3JtX2ZpZWxkKTtcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLXRpbWVzXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnMtc29ydGFibGUgWyhuZ01vZGVsKV09XCJmbC5kZWZhdWx0X3ZhbHVlXCIgbmFtZT1cInt7Zmw/LmZvcm1fZmllbGR9fVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2l0ZW1UZW1wbGF0ZV09XCJpdGVtVGVtcGxhdGVcIiBpdGVtQ2xhc3M9XCJzb3J0YWJsZS1pdGVtXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtQWN0aXZlQ2xhc3M9XCJzb3J0YWJsZS1pdGVtLWFjdGl2ZVwiIHBsYWNlaG9sZGVyQ2xhc3M9XCJwbGFjZWhvbGRlclN0eWxlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cmFwcGVyQ2xhc3M9XCJzb3J0YWJsZS13cmFwcGVyXCIgI3NyZj1cIm5nTW9kZWxcIiBbcmVxdWlyZWRdPVwiZmw/LmlzX2NvbXB1bHNvcnkgPT0gJzEnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnMtc29ydGFibGU+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJzcmYuaW52YWxpZCAmJiAoc3JmLmRpcnR5IHx8IHNyZi50b3VjaGVkKVwiIGNsYXNzPVwiYWxlcnQgYWxlcnQtZGFuZ2VyIGNhXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJzcmYuZXJyb3JzLnJlcXVpcmVkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAge3tmbC5mb3JtX2ZpZWxkX3RpdGxlfX0gaXMgcmVxdWlyZWQuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXBcIiAqbmdJZj1cImZsPy5mb3JtX2ZpZWxkX3R5cCA9PSAndCcgJiYgZmw/LmR0YV90eXAgPT0nc2EnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiY29sLW1kLTMgY29udHJvbC1sYWJlbFwiPnt7Zmw/LmZvcm1fZmllbGRfdGl0bGV9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LWRhbmdlclwiICpuZ0lmPVwiZmwuaXNfY29tcHVsc29yeSA9PSAxXCI+Kjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtOVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWdyb3VwIHctMTAwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gPG5nLXNlbGVjdCBbaXRlbXNdPVwic3FsQXJyYXlbZmwuZm9ybV9maWVsZF1cIiBbYWRkVGFnXT1cImFkZFRhZ1wiIGJpbmRWYWx1ZT1cImtcIiBbaGlkZVNlbGVjdGVkXT1cInRydWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIG11bHRpcGxlPVwidHJ1ZVwiIGJpbmRMYWJlbD1cInZcIiBuYW1lPVwie3tmbD8uZm9ybV9maWVsZH19XCIgWyhuZ01vZGVsKV09XCJmbC5kZWZhdWx0X3ZhbHVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAjc2FmaWVsZD1cIm5nTW9kZWxcIiBbcmVxdWlyZWRdPVwiZmw/LmlzX2NvbXB1bHNvcnkgPT0gJzEnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctc2VsZWN0PiAtLT5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1zZWxlY3Qgc3R5bGU9XCJ6LWluZGV4OiA1O1wiIFtvcHRpb25zXT1cInNxbEFycmF5W2ZsLmZvcm1fZmllbGRdXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImZsLmRlZmF1bHRfdmFsdWVcIiBbbXVsdGlwbGVdPVwidHJ1ZVwiIFthbGxvd0NsZWFyXT1cInRydWVcIiBuYW1lPVwie3tmbD8uZm9ybV9maWVsZH19XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAjc2FmaWVsZD1cIm5nTW9kZWxcIiBbcmVxdWlyZWRdPVwiZmw/LmlzX2NvbXB1bHNvcnkgPT0gJzEnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNvcHRpb25UZW1wbGF0ZSBsZXQtb3B0aW9uPVwib3B0aW9uXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmFtZmFtZmFtLWZsYWdzIHt7b3B0aW9uPy52YWx1ZX19XCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e29wdGlvbj8ubGFiZWx9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctc2VsZWN0PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cInNhZmllbGQuaW52YWxpZCAmJiAoc2FmaWVsZC5kaXJ0eSB8fCBzYWZpZWxkLnRvdWNoZWQpXCIgY2xhc3M9XCJhbGVydCBhbGVydC1kYW5nZXIgY2FcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cInNhZmllbGQuZXJyb3JzLnJlcXVpcmVkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAge3tmbC5mb3JtX2ZpZWxkX3RpdGxlfX0gaXMgcmVxdWlyZWQuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cFwiICpuZ0lmPVwiZmw/LmZvcm1fZmllbGRfdHlwID09ICd0YScgJiYgZmw/LmlzX2hpZGRlbiA9PSAwICYmIGZsPy5kdGFfdHlwID09J2MnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiY29sLW1kLTMgY29udHJvbC1sYWJlbFwiPnt7Zmw/LmZvcm1fZmllbGRfdGl0bGV9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LWRhbmdlclwiICpuZ0lmPVwiZmwuaXNfY29tcHVsc29yeSA9PSAxXCI+Kjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtOVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWdyb3VwIHctMTAwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZXh0YXJlYSBjbGFzcz1cImZvcm0tY29udHJvbFwiIHJvd3M9XCIzXCIgbmFtZT1cInt7Zmw/LmZvcm1fZmllbGR9fVwiIFt2YWx1ZV09XCJmbD8uZGVmYXVsdF92YWx1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJmbC5kZWZhdWx0X3ZhbHVlXCIgI3RleHRBcmVhPVwibmdNb2RlbFwiIChibHVyKT1cImNoa0Z1bihmbCxmbC5kZWZhdWx0X3ZhbHVlKTtcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsndW5pcUVyck1zZyc6IGZsPy5mb3JtX2ZpZWxkID09IG9uRXJyfVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW3JlcXVpcmVkXT1cImZsPy5pc19jb21wdWxzb3J5ID09ICcxJ1wiPjwvdGV4dGFyZWE+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJ0ZXh0QXJlYS5pbnZhbGlkICYmICh0ZXh0QXJlYS5kaXJ0eSB8fCB0ZXh0QXJlYS50b3VjaGVkKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYWxlcnQgYWxlcnQtZGFuZ2VyIGNhXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJ0ZXh0QXJlYS5lcnJvcnMucmVxdWlyZWRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICB7e2ZsLmZvcm1fZmllbGRfdGl0bGV9fSBpcyByZXF1aXJlZC5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJmbD8uZm9ybV9maWVsZF90eXAgPT0gJ2hkJyB8fCBmbD8uZm9ybV9maWVsZF90eXAgPT0gJ2hjJyB8fCBmbD8uZm9ybV9maWVsZF90eXAgPT0gJ2RmJyB8fCBmbD8uZm9ybV9maWVsZF90eXAgPT0gJ2ZrJyB8fCBmbD8uZm9ybV9maWVsZF90eXAgPT0gJ2NrJyAmJiBmbD8uaXNfaGlkZGVuID09IDBcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsnbXQwJzogZmw/LmZvcm1fZmllbGRfdHlwID09ICdoZCd9XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJoaWRkZW5cIiBjbGFzcz1cImZvcm0tY29udHJvbFwiIG5hbWU9XCJ7e2ZsPy5mb3JtX2ZpZWxkfX1cIiBbdmFsdWVdPVwiZmw/LmRlZmF1bHRfdmFsdWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJmbC5kZWZhdWx0X3ZhbHVlXCIgI2hkZj1cIm5nTW9kZWxcIiAvPlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXBcIiAqbmdJZj1cImZsPy5mb3JtX2ZpZWxkX3R5cCA9PSAnc3EnICYmIGZsPy5pc19oaWRkZW4gPT0gMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImNvbC1tZC0zIGNvbnRyb2wtbGFiZWxcIj48L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtOVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWdyb3VwIHctMTAwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiaGlkZGVuXCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBuYW1lPVwie3tmbD8uZm9ybV9maWVsZH19XCIgW3ZhbHVlXT1cImZsPy5kZWZhdWx0X3ZhbHVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImZsLmRlZmF1bHRfdmFsdWVcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cFwiICpuZ0lmPVwiZmw/LmZvcm1fZmllbGRfdHlwID09ICd0YicgJiYgZmw/LmlzX2hpZGRlbiA9PSAwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiY29sLW1kLTMgY29udHJvbC1sYWJlbFwiPnt7Zmw/LmZvcm1fZmllbGRfdGl0bGV9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LWRhbmdlclwiICpuZ0lmPVwiZmwuaXNfY29tcHVsc29yeSA9PSAxXCI+Kjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ncm91cCB3LTEwMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c2VsZWN0IGNsYXNzPVwiZm9ybS1jb250cm9sIHNlbGVjdFwiIG5hbWU9XCJ7e2ZsPy5mb3JtX2ZpZWxkfX1cIiBbdmFsdWVdPVwiZmw/LmRlZmF1bHRfdmFsdWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiZmwuZGVmYXVsdF92YWx1ZVwiICN0ZGY9XCJuZ01vZGVsXCIgW3JlcXVpcmVkXT1cImZsPy5pc19jb21wdWxzb3J5ID09ICcxJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gKm5nRm9yPVwibGV0IGR5bmFtaWMgb2Ygc3FsQXJyYXlbZmwuZm9ybV9maWVsZF1cIiB2YWx1ZT1cInt7ZHluYW1pYy52YWx1ZX19XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e2R5bmFtaWMubGFiZWx9fTwvb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3NlbGVjdD5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cInRkZi5pbnZhbGlkICYmICh0ZGYuZGlydHkgfHwgdGRmLnRvdWNoZWQpXCIgY2xhc3M9XCJhbGVydCBhbGVydC1kYW5nZXIgY2FcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cInRkZi5lcnJvcnMucmVxdWlyZWRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICB7e2ZsLmZvcm1fZmllbGRfdGl0bGV9fSBpcyByZXF1aXJlZC5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwXCIgKm5nSWY9XCJmbD8uZm9ybV9maWVsZF90eXAgPT0gJ2wnICYmIGZsPy5pc19oaWRkZW4gPT0gMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImNvbC1tZC0zIGNvbnRyb2wtbGFiZWxcIj57e2ZsPy5mb3JtX2ZpZWxkX3RpdGxlfX1cclxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC1kYW5nZXJcIiAqbmdJZj1cImZsLmlzX2NvbXB1bHNvcnkgPT0gMVwiPio8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ncm91cCB3LTEwMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c2VsZWN0IGNsYXNzPVwiZm9ybS1jb250cm9sIHNlbGVjdFwiIG5hbWU9XCJ7e2ZsPy5mb3JtX2ZpZWxkfX1cIiBbdmFsdWVdPVwiZmw/LmRlZmF1bHRfdmFsdWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiZmwuZGVmYXVsdF92YWx1ZVwiICNsSW5wdXQ9XCJuZ01vZGVsXCIgW3JlcXVpcmVkXT1cImZsPy5pc19jb21wdWxzb3J5ID09ICcxJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gKm5nRm9yPVwibGV0IGxvdiBvZiBmbC5rdlwiIHZhbHVlPVwie3tsb3Yua319XCI+e3tsb3Yudn19PC9vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc2VsZWN0PlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwibElucHV0LmludmFsaWQgJiYgKGxJbnB1dC5kaXJ0eSB8fCBsSW5wdXQudG91Y2hlZClcIiBjbGFzcz1cImFsZXJ0IGFsZXJ0LWRhbmdlciBjYVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwibElucHV0LmVycm9ycy5yZXF1aXJlZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHt7ZmwuZm9ybV9maWVsZF90aXRsZX19IGlzIHJlcXVpcmVkLlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXBcIiAqbmdJZj1cImZsPy5mb3JtX2ZpZWxkX3R5cCA9PSAnbGQnICAmJiBmbD8uaXNfaGlkZGVuID09IDBcIj5cclxuICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJjb2wtbWQtMyBjb250cm9sLWxhYmVsXCI+e3tmbD8uZm9ybV9maWVsZF90aXRsZX19XHJcbiAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtZGFuZ2VyXCIgKm5nSWY9XCJmbC5pc19jb21wdWxzb3J5ID09IDFcIj4qPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC05XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtZ3JvdXAgdy0xMDBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHNlbGVjdCBjbGFzcz1cImZvcm0tY29udHJvbCBzZWxlY3RcIiBuYW1lPVwie3tmbD8uZm9ybV9maWVsZH19XCIgW3ZhbHVlXT1cImZsPy5kZWZhdWx0X3ZhbHVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImZsLmRlZmF1bHRfdmFsdWVcIiAjbGRJbnB1dD1cIm5nTW9kZWxcIiBbcmVxdWlyZWRdPVwiZmw/LmlzX2NvbXB1bHNvcnkgPT0gJzEnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiAqbmdGb3I9XCJsZXQgZHluYW1pYyBvZiBzcWxBcnJheVtmbC5mb3JtX2ZpZWxkXVwiIHZhbHVlPVwie3tkeW5hbWljLnZhbHVlfX1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7ZHluYW1pYy5sYWJlbH19PC9vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc2VsZWN0PlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwibGRJbnB1dC5pbnZhbGlkICYmIChsZElucHV0LmRpcnR5IHx8IGxkSW5wdXQudG91Y2hlZClcIiBjbGFzcz1cImFsZXJ0IGFsZXJ0LWRhbmdlciBjYVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwibGRJbnB1dC5lcnJvcnMucmVxdWlyZWRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICB7e2ZsLmZvcm1fZmllbGRfdGl0bGV9fSBpcyByZXF1aXJlZC5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwXCIgKm5nSWY9XCJmbD8uZm9ybV9maWVsZF90eXAgPT0gJ3MnICYmIGZsPy5pc19oaWRkZW4gPT0gMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImNvbC1tZC0zIGNvbnRyb2wtbGFiZWxcIj57e2ZsPy5mb3JtX2ZpZWxkX3RpdGxlfX1cclxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC1kYW5nZXJcIiAqbmdJZj1cImZsLmlzX2NvbXB1bHNvcnkgPT0gMVwiPio8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ncm91cCB3LTEwMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c2VsZWN0IGNsYXNzPVwiZm9ybS1jb250cm9sIHNlbGVjdFwiIG5hbWU9XCJ7e2ZsPy5mb3JtX2ZpZWxkfX1cIiBbdmFsdWVdPVwiZmw/LmRlZmF1bHRfdmFsdWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiZmwuZGVmYXVsdF92YWx1ZVwiIChjaGFuZ2UpPVwiY2hrRnVuKGZsLGZsLmRlZmF1bHRfdmFsdWUpXCIgaWQ9XCJ7e2ZsLmNvbHVtbl9rZXl9fVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgI3NmaT1cIm5nTW9kZWxcIiBbcmVxdWlyZWRdPVwiZmw/LmlzX2NvbXB1bHNvcnkgPT0gJzEnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiAqbmdGb3I9XCJsZXQgZHluYW1pYyBvZiBzcWxBcnJheVtmbC5mb3JtX2ZpZWxkXVwiIHZhbHVlPVwie3tkeW5hbWljLnZhbHVlfX1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7ZHluYW1pYy5sYWJlbH19PC9vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc2VsZWN0PlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwic2ZpLmludmFsaWQgJiYgKHNmaS5kaXJ0eSB8fCBzZmkudG91Y2hlZClcIiBjbGFzcz1cImFsZXJ0IGFsZXJ0LWRhbmdlciBjYVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwic2ZpLmVycm9ycy5yZXF1aXJlZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHt7ZmwuZm9ybV9maWVsZF90aXRsZX19IGlzIHJlcXVpcmVkLlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwXCIgKm5nSWY9XCJmbD8uZm9ybV9maWVsZF90eXAgPT0gJ3NiJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImNvbC1tZC0zIGNvbnRyb2wtbGFiZWxcIj57e2ZsPy5mb3JtX2ZpZWxkX3RpdGxlfX1cclxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC1kYW5nZXJcIiAqbmdJZj1cImZsLmlzX2NvbXB1bHNvcnkgPT0gMVwiPio8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLThcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ncm91cCB3LTEwMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctc2VsZWN0IHN0eWxlPVwiei1pbmRleDogNTtcIiBbb3B0aW9uc109XCJzcWxBcnJheVtmbC5mb3JtX2ZpZWxkXVwiICNzZmk9XCJuZ01vZGVsXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImZsLmRlZmF1bHRfdmFsdWVcIiBuYW1lPVwie3tmbD8uZm9ybV9maWVsZH19XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAoc2VsZWN0ZWQpPVwiY2hrRnVuKGZsLGZsLmRlZmF1bHRfdmFsdWUpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAoZmlsdGVySW5wdXRDaGFuZ2VkKT1cImxvYWRTdWdnZGF0YSgkZXZlbnQsZmwucGFnZV9pdGVtX2lkbixmbC5mb3JtX2ZpZWxkKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L25nLXNlbGVjdD5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cInNmaS5pbnZhbGlkICYmIChzZmkuZGlydHkgfHwgc2ZpLnRvdWNoZWQpXCIgY2xhc3M9XCJhbGVydCBhbGVydC1kYW5nZXIgY2FcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cInNmaS5lcnJvcnMucmVxdWlyZWRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICB7e2ZsLmZvcm1fZmllbGRfdGl0bGV9fSBpcyByZXF1aXJlZC5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTFcIiAqbmdJZj1cImZsPy5mb3JtX2ZpZWxkX2ljb24gPT0gJ2FkZCdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1zdWNjZXNzIGJ0bi1yb3VuZGVkXCI+PHNwYW4+PGlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZmEgZmEtcGx1c1wiPjwvaT48L3NwYW4+PC9idXR0b24+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWZvb3RlclwiPlxyXG4gICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cInN1Ym1pdFwiIGNsYXNzPVwiYnRuIGJ0bi1zdWNjZXNzXCIgKGNsaWNrKT1cInN1Ym1pdEZvcm0oZixzdWJtaXRCdG4pXCIgYXBwQXBwTm9EYmxDbGlja1xyXG4gICAgICAgICAgICAgICAgI3N1Ym1pdEJ0bj57e2J0bk5hbWV9fTwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cInJlc2V0XCIgY2xhc3M9XCJidG4gYnRuLWRhbmdlclwiIChjbGljayk9XCJyZXNldChmKVwiICpuZ0lmPVwiYnRuTmFtZSA9PSAnQWRkJ1wiPlJlc2V0PC9idXR0b24+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9mb3JtPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiBjbGFzcz1cIm1vZGFsXCIgaWQ9XCJkZWxldGVUZXJtc21vZGFsXCIgcm9sZT1cImRpYWxvZ1wiIGFyaWEtbGFiZWxsZWRieT1cInNtYWxsTW9kYWxIZWFkXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCJcclxuICAgICAgZGF0YS1iYWNrZHJvcD1cInN0YXRpY1wiIGRhdGEta2V5Ym9hcmQ9XCJmYWxzZVwiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtZGlhbG9nIG1vZGFsLXNtXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWNvbnRlbnRcIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1oZWFkZXJcIj5cclxuICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJjbG9zZVwiIGRhdGEtZGlzbWlzcz1cIm1vZGFsXCIgKGNsaWNrKT1cImNsb3NlTnVsbCgpO1wiICNkZWxldGVjbHNidG4+XHJcbiAgICAgICAgICAgICAgPHNwYW4gYXJpYS1oaWRkZW49XCJ0cnVlXCI+JnRpbWVzOzwvc3Bhbj5cclxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInNyLW9ubHlcIj5DbG9zZTwvc3Bhbj5cclxuICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgIDxoNCBjbGFzcz1cIm1vZGFsLXRpdGxlXCIgaWQ9XCJzbWFsbE1vZGFsSGVhZFwiPldhcm5pbmc8L2g0PlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtYm9keVwiPlxyXG4gICAgICAgICAgICBBcmUgeW91IHN1cmUgd2FudCB0byBkZWxldGUgdGVybT9cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWZvb3RlclwiPlxyXG4gICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tZGVmYXVsdFwiIGRhdGEtZGlzbWlzcz1cIm1vZGFsXCI+Q2xvc2U8L2J1dHRvbj5cclxuICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLWRhbmdlclwiIGRhdGEtZGlzbWlzcz1cIm1vZGFsXCIgKGNsaWNrKT1cIkRlbGV0ZVRlcm1zKCk7XCI+RGVsZXRlPC9idXR0b24+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgICA8ZGl2IGNsYXNzPVwibW9kYWxcIiBpZD1cImRlbGV0ZW1vZGFsXCIgcm9sZT1cImRpYWxvZ1wiIGFyaWEtbGFiZWxsZWRieT1cInNtYWxsTW9kYWxIZWFkXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCJcclxuICAgICAgZGF0YS1iYWNrZHJvcD1cInN0YXRpY1wiIGRhdGEta2V5Ym9hcmQ9XCJmYWxzZVwiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtZGlhbG9nIG1vZGFsLXNtXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWNvbnRlbnRcIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1oZWFkZXJcIj5cclxuICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJjbG9zZVwiIGRhdGEtZGlzbWlzcz1cIm1vZGFsXCIgKGNsaWNrKT1cImNsb3NlTnVsbCgpO1wiICNkZWxldGVjbHNidG4+XHJcbiAgICAgICAgICAgICAgPHNwYW4gYXJpYS1oaWRkZW49XCJ0cnVlXCI+JnRpbWVzOzwvc3Bhbj5cclxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInNyLW9ubHlcIj5DbG9zZTwvc3Bhbj5cclxuICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgIDxoNCBjbGFzcz1cIm1vZGFsLXRpdGxlXCIgaWQ9XCJzbWFsbE1vZGFsSGVhZFwiPldhcm5pbmc8L2g0PlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtYm9keVwiPlxyXG4gICAgICAgICAgICBBcmUgeW91IHN1cmUgd2FudCB0byBkZWxldGU/XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1mb290ZXJcIj5cclxuICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLWRlZmF1bHRcIiBkYXRhLWRpc21pc3M9XCJtb2RhbFwiPkNsb3NlPC9idXR0b24+XHJcbiAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1kYW5nZXJcIiBkYXRhLWRpc21pc3M9XCJtb2RhbFwiXHJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cImRlbGV0ZURhdGFMaXN0KCk7XCI+RGVsZXRlPC9idXR0b24+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuXHJcblxyXG4gICAgPGRpdiBjbGFzcz1cIm1vZGFsXCIgaWQ9XCJtb2RhbF9zeXNcIiB0YWJpbmRleD1cIi0xXCIgcm9sZT1cImRpYWxvZ1wiIGFyaWEtbGFiZWxsZWRieT1cImRlZk1vZGFsSGVhZFwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtZGlhbG9nXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWNvbnRlbnRcIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1oZWFkZXJcIj5cclxuICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJjbG9zZVwiIGRhdGEtZGlzbWlzcz1cIm1vZGFsXCI+XHJcbiAgICAgICAgICAgICAgPHNwYW4gYXJpYS1oaWRkZW49XCJ0cnVlXCI+JnRpbWVzOzwvc3Bhbj5cclxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInNyLW9ubHlcIj5DbG9zZTwvc3Bhbj5cclxuICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgIDxoNCBjbGFzcz1cIm1vZGFsLXRpdGxlXCIgaWQ9XCJkZWZNb2RhbEhlYWRcIj5CYXNpYyBNb2RhbDwvaDQ+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1ib2R5XCI+XHJcbiAgICAgICAgICAgIFNvbWUgY29udGVudCBpbiBtb2RhbCBleGFtcGxlXHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1mb290ZXJcIj5cclxuICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLWRlZmF1bHRcIiBkYXRhLWRpc21pc3M9XCJtb2RhbFwiPkNsb3NlPC9idXR0b24+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJtb2RhbFwiIGlkPVwicm93R3JwbW9kYWxcIiB0YWJpbmRleD1cIi0yXCIgcm9sZT1cImRpYWxvZ1wiIGFyaWEtbGFiZWxsZWRieT1cInJvd0dycG1vZGFsXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCJcclxuICAgICAgZGF0YS1iYWNrZHJvcD1cInN0YXRpY1wiIGRhdGEta2V5Ym9hcmQ9XCJmYWxzZVwiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtZGlhbG9nXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWNvbnRlbnRcIj5cclxuICAgICAgICAgIDxmb3JtIGNsYXNzPVwiZm9ybS1ob3Jpem9udGFsXCIgI2ZyZz1cIm5nRm9ybVwiIG5hbWU9XCJhcHBGb3JtUm93R3JwXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1oZWFkZXJcIj5cclxuICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImNsb3NlXCIgZGF0YS1kaXNtaXNzPVwibW9kYWxcIiAoY2xpY2spPVwiY2xvc2VOdWxsKCk7XCIgI2Nsb3NlYnRuPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gYXJpYS1oaWRkZW49XCJ0cnVlXCI+JnRpbWVzOzwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwic3Itb25seVwiPkNsb3NlPC9zcGFuPlxyXG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgIDxoNCBjbGFzcz1cIm1vZGFsLXRpdGxlXCIgaWQ9XCJyb3dHcnBIZWFkXCI+Um93IEdyb3VwPC9oND5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1ib2R5XCI+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0xMlwiIHN0eWxlPVwicGFkZGluZy1ib3R0b206IDEwcHg7XCI+XHJcbiAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImNvbC1tZC0yIGNvbnRyb2wtbGFiZWxcIj5BdHRyaWJ1dGVzPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiY29sLW1kLTUgY29udHJvbC1sYWJlbFwiIHN0eWxlPVwicGFkZGluZy1yaWdodDogOTBweDtcIj5Sb3cgRGlzcGxheTwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImNvbC1tZC01IGNvbnRyb2wtbGFiZWxcIiBzdHlsZT1cInBhZGRpbmctcmlnaHQ6IDc2cHg7XCI+Um93IEdyb3VwIDwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMTJcIj5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXBcIiAqbmdGb3I9XCJsZXQgYXR0IG9mIGRpc3BsYXlfYXR0cjtcIj5cclxuICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJjb2wtbWQtMiBjb250cm9sLWxhYmVsXCI+e3thdHQuYXR0cn19PC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ncm91cCB3LTEwMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c2VsZWN0IGNsYXNzPVwiZm9ybS1jb250cm9sXCIgbmFtZT1cImRyX3t7YXR0LmF0dHJ9fVwiIFtkaXNhYmxlZF09XCJkaXNhYmxlc2VsY1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ9XCJyb3dfe3thdHQuYXR0cn19XCIgdmFsdWU9XCJ7e2F0dC5kaXNwbGF5X3Jvd319XCIgKGNoYW5nZSk9XCJvbkNoYW5nZURpc3BSb3coJGV2ZW50KVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gW3ZhbHVlXT1cImF0dC5kaXNwbGF5X3Jvd1wiIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gKm5nRm9yPVwibGV0IGRyIG9mIGRpc3BsYXlfcm93O1wiIHZhbHVlPVwie3tkci5pZG59fVwiPnt7ZHIucHJpbnR9fTwvb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3NlbGVjdD5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWdyb3VwIHctMTAwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzZWxlY3QgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBuYW1lPVwiZ3JwX3t7YXR0LmF0dHJ9fVwiIFtkaXNhYmxlZF09XCJkaXNhYmxlc2VsY1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ9XCJncnBfe3thdHQuYXR0cn19XCIgW3ZhbHVlXT1cImF0dC5kaXNwbGF5X2dyb3VwXCIgKGNoYW5nZSk9XCJvbkNoYW5nZURpc3BHcnAoJGV2ZW50KVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWUgPSAnJz48L29wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uICpuZ0Zvcj1cImxldCBkZyBvZiBkaXNwbGF5X2dyb3VwO1wiIHZhbHVlPVwie3tkZy5pZG59fVwiPnt7ZGcucHJpbnR9fTwvb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3NlbGVjdD5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWZvb3RlclwiPlxyXG4gICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cInJlc2V0XCIgY2xhc3M9XCJidG4gYnRuLWRhbmdlclwiIGRhdGEtZGlzbWlzcz1cIm1vZGFsXCI+Y2xvc2U8L2J1dHRvbj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L2Zvcm0+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcblxyXG5cclxuXHJcblxyXG4gICAgPGRpdiBjbGFzcz1cIm1vZGFsXCIgaWQ9XCJwcm9kdWN0RGV0YWlsTWFwTURcIiByb2xlPVwiZGlhbG9nXCIgYXJpYS1sYWJlbGxlZGJ5PVwic21hbGxNb2RhbEhlYWRcIiBhcmlhLWhpZGRlbj1cInRydWVcIlxyXG4gICAgICBkYXRhLWJhY2tkcm9wPVwic3RhdGljXCIgZGF0YS1rZXlib2FyZD1cImZhbHNlXCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1kaWFsb2cgbW9kYWwtc20gbXdpZHRoXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWNvbnRlbnRcIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1oZWFkZXJcIj5cclxuICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJjbG9zZVwiIGRhdGEtZGlzbWlzcz1cIm1vZGFsXCIgKGNsaWNrKT1cImNsb3NlTnVsbCgpO1wiICNwcm9kdWN0TWFwY2xzYnRuPlxyXG4gICAgICAgICAgICAgIDxzcGFuIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPiZ0aW1lczs8L3NwYW4+XHJcbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzci1vbmx5XCIgcHJvZHVjdERldGFpbE1hcGNsc2J0bj5DbG9zZTwvc3Bhbj5cclxuICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgIDxoNCBjbGFzcz1cIm1vZGFsLXRpdGxlXCIgaWQ9XCJzbWFsbE1vZGFsSGVhZFwiPlByb2R1Y3QgTWFwcGluZyBvZiZuYnNwO3t7cHJvZHVjRGV0YWlsTW9kZWxUaXRsZX19PC9oND5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWJvZHlcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRhYmxlLXJlc3BvbnNpdmVcIj5cclxuICAgICAgICAgICAgICA8dGFibGUgY2xhc3M9XCJ0YWJsZSB0YWJsZS1ib3JkZXJlZCB0YWJsZS1ob3ZlciB0YWJsZS1ob3Zlci1jZWxsc1wiPlxyXG4gICAgICAgICAgICAgICAgPHRoZWFkPlxyXG4gICAgICAgICAgICAgICAgICA8dHI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHRoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgTmFtZVxyXG4gICAgICAgICAgICAgICAgICAgIDwvdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgPHRoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgVmFsdWVcclxuICAgICAgICAgICAgICAgICAgICA8L3RoPlxyXG4gICAgICAgICAgICAgICAgICA8L3RyPlxyXG4gICAgICAgICAgICAgICAgPC90aGVhZD5cclxuICAgICAgICAgICAgICAgIDx0Ym9keT5cclxuICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQga2V5IG9mIGF0dHJEdGw/LnBycExpc3RcIj5cclxuICAgICAgICAgICAgICAgICAgICA8dHI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8dGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHt7a2V5LnByaW50fX1cclxuICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8dGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIGNsYXNzPVwiZm9ybS1jb250cm9sXCIgWyhuZ01vZGVsKV09XCJhdHRyTWFwcGluZ0R0bFtrZXk/LnZhbF1cIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICAgICAgICA8L3RyPlxyXG4gICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgIDwvdGJvZHk+XHJcbiAgICAgICAgICAgICAgPC90YWJsZT5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1mb290ZXJcIj5cclxuICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tZGVmYXVsdFwiIGRhdGEtZGlzbWlzcz1cIm1vZGFsXCIgI3Byb2R1Y3REZXRhaWxNYXBjbHNidG4+Q2xvc2U8L2J1dHRvbj5cclxuICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tc3VjY2Vzc1wiIGRhdGEtZGlzbWlzcz1cIm1vZGFsXCJcclxuICAgICAgICAgICAgICAgIChjbGljayk9XCJzYXZlUHJvZHVjdERldGFpbE1hcHBpbmcoKTtcIj5TYXZlPC9idXR0b24+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcblxyXG4gICAgPGRpdiBjbGFzcz1cIm1vZGFsXCIgaWQ9XCJkb2NkZWxldGVtb2RhbFwiIHJvbGU9XCJkaWFsb2dcIiBhcmlhLWxhYmVsbGVkYnk9XCJzbWFsbE1vZGFsSGVhZFwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiXHJcbiAgICAgIGRhdGEtYmFja2Ryb3A9XCJzdGF0aWNcIiBkYXRhLWtleWJvYXJkPVwiZmFsc2VcIj5cclxuICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWRpYWxvZyBtb2RhbC1zbVwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1jb250ZW50XCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtaGVhZGVyXCI+XHJcbiAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiY2xvc2VcIiBkYXRhLWRpc21pc3M9XCJtb2RhbFwiIChjbGljayk9XCJjbG9zZU51bGwoKTtcIiAjZGVsZXRlY2xzYnRuPlxyXG4gICAgICAgICAgICAgIDxzcGFuIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPiZ0aW1lczs8L3NwYW4+XHJcbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzci1vbmx5XCI+Q2xvc2U8L3NwYW4+XHJcbiAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8aDQgY2xhc3M9XCJtb2RhbC10aXRsZVwiIGlkPVwic21hbGxNb2RhbEhlYWRcIj5XYXJuaW5nPC9oND5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWJvZHlcIj5cclxuICAgICAgICAgICAgQXJlIHlvdSBzdXJlIHdhbnQgdG8gZGVsZXRlP1xyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtZm9vdGVyXCI+XHJcbiAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1kZWZhdWx0XCIgZGF0YS1kaXNtaXNzPVwibW9kYWxcIj5DbG9zZTwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tZGFuZ2VyXCIgZGF0YS1kaXNtaXNzPVwibW9kYWxcIiAoY2xpY2spPVwiZGVsZXRlRG9jKCk7XCI+RGVsZXRlPC9idXR0b24+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgICA8ZGl2IGNsYXNzPVwibW9kYWxcIiBpZD1cImJua2RlbGV0ZW1vZGFsXCIgcm9sZT1cImRpYWxvZ1wiIGFyaWEtbGFiZWxsZWRieT1cInNtYWxsTW9kYWxIZWFkXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCJcclxuICAgICAgZGF0YS1iYWNrZHJvcD1cInN0YXRpY1wiIGRhdGEta2V5Ym9hcmQ9XCJmYWxzZVwiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtZGlhbG9nIG1vZGFsLXNtXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWNvbnRlbnRcIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1oZWFkZXJcIj5cclxuICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJjbG9zZVwiIGRhdGEtZGlzbWlzcz1cIm1vZGFsXCIgKGNsaWNrKT1cImNsb3NlTnVsbCgpO1wiICNkZWxldGVjbHNidG4+XHJcbiAgICAgICAgICAgICAgPHNwYW4gYXJpYS1oaWRkZW49XCJ0cnVlXCI+JnRpbWVzOzwvc3Bhbj5cclxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInNyLW9ubHlcIj5DbG9zZTwvc3Bhbj5cclxuICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgIDxoNCBjbGFzcz1cIm1vZGFsLXRpdGxlXCIgaWQ9XCJzbWFsbE1vZGFsSGVhZFwiPldhcm5pbmc8L2g0PlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtYm9keVwiPlxyXG4gICAgICAgICAgICBBcmUgeW91IHN1cmUgd2FudCB0byBkZWxldGU/XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1mb290ZXJcIj5cclxuICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLWRlZmF1bHRcIiBkYXRhLWRpc21pc3M9XCJtb2RhbFwiPkNsb3NlPC9idXR0b24+XHJcbiAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1kYW5nZXJcIiBkYXRhLWRpc21pc3M9XCJtb2RhbFwiXHJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cIkRlbGV0ZUxlZGdlckJhbmsoKVwiPkRlbGV0ZTwvYnV0dG9uPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgICA8YnV0dG9uIGlkPVwiYm5rZGVsZXRlbW9kYWxidG5cIiBbaGlkZGVuXT1cInRydWVcIiBkYXRhLXRvZ2dsZT1cIm1vZGFsXCIgZGF0YS10YXJnZXQ9XCIjYm5rZGVsZXRlbW9kYWxcIj48L2J1dHRvbj5cclxuXHJcbiAgICA8YnV0dG9uIGlkPVwiZG9jZGVsZXRlYnRuXCIgW2hpZGRlbl09XCJ0cnVlXCIgZGF0YS10b2dnbGU9XCJtb2RhbFwiIGRhdGEtdGFyZ2V0PVwiI2RvY2RlbGV0ZW1vZGFsXCI+PC9idXR0b24+XHJcbiAgICA8YnV0dG9uIGlkPVwiZGVsZXRlYnRuXCIgW2hpZGRlbl09XCJ0cnVlXCIgZGF0YS10b2dnbGU9XCJtb2RhbFwiIGRhdGEtdGFyZ2V0PVwiI2RlbGV0ZW1vZGFsXCI+PC9idXR0b24+XHJcbiAgICA8YnV0dG9uIGlkPVwiZGVsZXRlVGVybXNcIiBbaGlkZGVuXT1cInRydWVcIiBkYXRhLXRvZ2dsZT1cIm1vZGFsXCIgZGF0YS10YXJnZXQ9XCIjZGVsZXRlVGVybXNtb2RhbFwiPjwvYnV0dG9uPlxyXG5cclxuICAgIDxidXR0b24gaWQ9XCJkYXRhbWRidG5cIiBbaGlkZGVuXT1cInRydWVcIiBkYXRhLXRvZ2dsZT1cIm1vZGFsXCIgZGF0YS10YXJnZXQ9XCIjZGF0YW1vZGFsXCI+PC9idXR0b24+XHJcbiAgICA8YnV0dG9uIGlkPVwiY2xzTWRcIiBbaGlkZGVuXT1cInRydWVcIiBkYXRhLWRpc21pc3M9XCJtb2RhbFwiIGRhdGEtdGFyZ2V0PVwiI2RhdGFtb2RhbFwiPjwvYnV0dG9uPlxyXG4gICAgPGJ1dHRvbiBpZD1cInN5c21kXCIgW2hpZGRlbl09XCJ0cnVlXCIgZGF0YS1kaXNtaXNzPVwibW9kYWxcIiBkYXRhLXRhcmdldD1cIiNtb2RhbF9zeXNcIj48L2J1dHRvbj5cclxuICAgIDxidXR0b24gaWQ9XCJidG5wcm9kdWN0RGV0YWlsTWFwTURcIiBbaGlkZGVuXT1cInRydWVcIiBkYXRhLXRvZ2dsZT1cIm1vZGFsXCIgZGF0YS10YXJnZXQ9XCIjcHJvZHVjdERldGFpbE1hcE1EXCI+PC9idXR0b24+XHJcblxyXG4gICAgPGJ1dHRvbiBpZD1cInJvd0dycGJ0blwiIFtoaWRkZW5dPVwidHJ1ZVwiIGRhdGEtZGlzbWlzcz1cIm1vZGFsXCIgZGF0YS10b2dnbGU9XCJtb2RhbFwiIGRhdGEtdGFyZ2V0PVwiI3Jvd0dycG1vZGFsXCI+PC9idXR0b24+XHJcbiAgPC9kaXY+Il19
2483
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3ViZm9ybS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9lemxpYi9zcmMvbGliL3N5c3RlbS1tb2R1bGUvc3ViZm9ybS9zdWJmb3JtLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2V6bGliL3NyYy9saWIvc3lzdGVtLW1vZHVsZS9zdWJmb3JtL3N1YmZvcm0uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBVSxTQUFTLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3pFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNuRCxPQUFPLEVBQUUsTUFBTSxFQUFFLGNBQWMsRUFBVSxNQUFNLGlCQUFpQixDQUFDO0FBRWpFLE9BQU8sRUFBRSxhQUFhLEVBQUcsTUFBTSxZQUFZLENBQUM7QUFDNUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ2pELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUNoRCxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQztBQUNoRixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQUMxRSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSwrQ0FBK0MsQ0FBQztBQUN0Rix5Q0FBeUM7QUFDekMsT0FBTyxLQUFLLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUN6QyxxREFBcUQ7QUFDckQsc0VBQXNFO0FBQ3RFLHdDQUF3QztBQUN4QyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUMzRCx3RUFBd0U7QUFDeEUsaURBQWlEO0FBQ2pELDREQUE0RDtBQUM1RCxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSw2Q0FBNkMs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RCxTQUFTO3VCQUFDLG9CQUFvQjtnQkFDTSxzQkFBc0I7c0JBQTFELFNBQVM7dUJBQUMsd0JBQXdCO2dCQUNSLFlBQVk7c0JBQXRDLFNBQVM7dUJBQUMsY0FBYztnQkFDSixLQUFLO3NCQUF6QixTQUFTO3VCQUFDLFFBQVE7Z0JBQ1csaUJBQWlCO3NCQUE5QyxTQUFTO3VCQUFDLGlCQUFpQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0LCBWaWV3Q2hpbGQsIEVsZW1lbnRSZWYgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5pbXBvcnQgeyBIdHRwSGVhZGVycyB9IGZyb20gXCJAYW5ndWxhci9jb21tb24vaHR0cFwiO1xyXG5pbXBvcnQgeyBSb3V0ZXIsIEFjdGl2YXRlZFJvdXRlLCBQYXJhbXMgfSBmcm9tIFwiQGFuZ3VsYXIvcm91dGVyXCI7XHJcbmltcG9ydCB7IEZvcm1Db250cm9sLCBGb3JtR3JvdXAsIFZhbGlkYXRvcnMgfSBmcm9tIFwiQGFuZ3VsYXIvZm9ybXNcIjtcclxuaW1wb3J0IHsgVG9hc3RyU2VydmljZSAgfSBmcm9tIFwibmd4LXRvYXN0clwiO1xyXG5pbXBvcnQgeyBDb29raWUgfSBmcm9tIFwibmcyLWNvb2tpZXMvbmcyLWNvb2tpZXNcIjtcclxuaW1wb3J0IHsgTmd4U3Bpbm5lclNlcnZpY2UgfSBmcm9tIFwibmd4LXNwaW5uZXJcIjtcclxuaW1wb3J0IHsgU3lzdGVtU2VydmljZVNlcnZpY2UgfSBmcm9tIFwiLi4vc3lzdGVtLXNlcnZpY2Uvc3lzdGVtLXNlcnZpY2Uuc2VydmljZVwiO1xyXG5pbXBvcnQgeyBVcGxvYWRGaWxlU2VydmljZSB9IGZyb20gXCIuLi9zeXN0ZW0tc2VydmljZS91cGxvYWQtZmlsZS5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7IENvbnRhY3RTZXJ2aWNlU2VydmljZSB9IGZyb20gXCIuLi8uLi9jb250YWN0LXNlcnZpY2UvY29udGFjdC1zZXJ2aWNlLnNlcnZpY2VcIjtcclxuLy8gaW1wb3J0ICogYXMgQVdTIGZyb20gJ2F3cy1zZGsvZ2xvYmFsJztcclxuaW1wb3J0ICogYXMgUzMgZnJvbSBcImF3cy1zZGsvY2xpZW50cy9zM1wiO1xyXG4vLyBpbXBvcnQgKiBhcyBhd3NzZXJ2aWNlIGZyb20gXCJhd3Mtc2RrL2xpYi9zZXJ2aWNlXCI7XHJcbi8vIGltcG9ydCAqIGFzIENvZ25pdG9JZGVudGl0eSBmcm9tIFwiYXdzLXNkay9jbGllbnRzL2NvZ25pdG9pZGVudGl0eVwiO1xyXG4vLyBpbXBvcnQgeyBwcm9taXNlIH0gZnJvbSBcInByb3RyYWN0b3JcIjtcclxuaW1wb3J0IHsgU29ydGFibGVDb21wb25lbnQgfSBmcm9tIFwibmd4LWJvb3RzdHJhcC9zb3J0YWJsZVwiO1xyXG4vLyBpbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSB9IGZyb20gXCJAYW5ndWxhci9jb21waWxlci9zcmMvY29yZVwiO1xyXG4vLyBpbXBvcnQgeyBhc3luYyB9IGZyb20gXCJAYW5ndWxhci9jb3JlL3Rlc3RpbmdcIjtcclxuLy8gaW1wb3J0IHsgZGVib3VuY2UgfSBmcm9tIFwicnhqcy1jb21wYXQvb3BlcmF0b3IvZGVib3VuY2VcIjtcclxuaW1wb3J0IHsgQ29tbWFuU2VydmljZVNlcnZpY2UgfSBmcm9tIFwiLi4vLi4vY29tbWFuLXNlcnZpY2UvY29tbWFuLXNlcnZpY2Uuc2VydmljZVwiO1xyXG4vLyBpbXBvcnQgeyBzdHJpbmdpZnkgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZS9zcmMvcmVuZGVyMy91dGlsXCI7XHJcblxyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6IFwiYXBwLXN1YmZvcm1cIixcclxuICB0ZW1wbGF0ZVVybDogXCIuL3N1YmZvcm0uY29tcG9uZW50Lmh0bWxcIixcclxuICBzdHlsZVVybHM6IFtcIi4vc3ViZm9ybS5jb21wb25lbnQuY3NzXCJdXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBTdWJmb3JtQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcclxuICBAVmlld0NoaWxkKFwiY2xvc2VidG5cIikgY2xvc2VidG46IEVsZW1lbnRSZWY7XHJcbiAgQFZpZXdDaGlsZChcImZpbGVPcHRNYXBNRGNsc2J0blwiKSBmaWxlT3B0TWFwTURjbHNidG46IEVsZW1lbnRSZWY7XHJcbiAgQFZpZXdDaGlsZChcInByb2R1Y3REZXRhaWxNYXBjbHNidG5cIikgcHJvZHVjdERldGFpbE1hcGNsc2J0bjogRWxlbWVudFJlZjtcclxuICBAVmlld0NoaWxkKFwiZGVsZXRlY2xzYnRuXCIpIGRlbGV0ZWNsc2J0bjogRWxlbWVudFJlZjtcclxuICBAVmlld0NoaWxkKFwiaW5wdXRzXCIpIGlucHV0OiBFbGVtZW50UmVmO1xyXG4gIEBWaWV3Q2hpbGQoU29ydGFibGVDb21wb25lbnQpIHNvcnRhYmxlQ29tcG9uZW50OiBTb3J0YWJsZUNvbXBvbmVudDtcclxuXHJcbiAgLy8jcmVnaW9uIHZhcnMgYW5kIG9iaiBkZWNsYXJhdGlvbiBzZWN0aW9uXHJcbiAgY0R0ID0gbmV3IERhdGUoKTtcclxuXHJcbiAgZm9ybUZpbGRzID0gW107XHJcbiAgZGF0YWxpc3QgPSBbXTtcclxuICBhY3Rpb25zID0gW107XHJcbiAgbG92cyA9IFtdO1xyXG4gIGFkZE5ldzogYW55ID0gW107XHJcbiAgdGJsSCA9IFtdO1xyXG4gIHRibERlc2MgPSBbXTtcclxuICBuYXZpZ2F0aW9uID0gW107XHJcbiAgY0xpbmsgPSAwO1xyXG4gIGdsYk9iaiA9IHt9O1xyXG5cclxuICBzaG93YXJyO1xyXG4gIHBhZ2VJbmZvO1xyXG4gIGhlYWRlcjtcclxuICBidG5OYW1lO1xyXG4gIHBpZDtcclxuICBzZWFyY2hGO1xyXG4gIHdocks7XHJcbiAgd2hyVjtcclxuICBzdWJGcm1XaztcclxuICBzdWJGcm1XdjtcclxuICBuYXZmb3JtO1xyXG4gIG9uRXJyO1xyXG4gIGhvdmVyZWRJO1xyXG4gIHRiQ2VsbDtcclxuICB0aXRsZTtcclxuICBwa2Y7XHJcbiAgY3VybDtcclxuICB1aUdycExpc3Q7XHJcbiAgdWlHcnBMaXN0RHRsO1xyXG4gIGF0dHJDTGlzdER0bCA9IFtdO1xyXG4gIGF0dHJRTGlzdER0bCA9IFtdO1xyXG5cclxuICBkZnY7XHJcbiAgY2k7XHJcbiAgZGlzYWJsZXNlbGMgPSBmYWxzZTtcclxuXHJcbiAgZGF0YUR0bGlzdCA9IFtdO1xyXG4gIGRhdGFEdGwgPSBbXTtcclxuICBpdGVtU3RyaW5nc0xlZnQ6IGFueSA9IFtdO1xyXG5cclxuICBhZGRGcm1ObWU7XHJcbiAgZG9jdW1lbnRVcGxvYWRMaXN0O1xyXG4gIGRvY3VtZW50VXBsb2FkRHRsO1xyXG4gIHNlbGVjdGVkRmlsZXM7XHJcbiAgYXBwbGljYXRpb25MaXN0ID0gW107XHJcbiAgdXNlckR0bHMgPSBbXTtcclxuICBtb2R1bGVEdGxzID0gW107XHJcbiAgbWVudUxpc3QgPSBbXTtcclxuICB1c2VyUmlnaHRzTWVudUxpc3QgPSBbXTtcclxuICB0b3RNZW51O1xyXG4gIHN1Yk1lbnVJZG5zID0gW107XHJcbiAgd2hlcmVNYXAgPSB7fTtcclxuICBwYXJhT2JqID0ge307XHJcbiAgY3Vyck9iaiA9IHt9O1xyXG4gIHNxbEFycmF5ID0ge307XHJcbiAgczNkZXRhaWxzID0ge307XHJcblxyXG4gIGRvY3R5cGU7XHJcbiAgcGsgPSB0aGlzLnJvdXRlLnNuYXBzaG90LnBhcmFtTWFwLmdldChcInN1YmtcIik7XHJcbiAgcHYgPSB0aGlzLnJvdXRlLnNuYXBzaG90LnBhcmFtTWFwLmdldChcInN1YnZcIik7XHJcblxyXG4gIEdGT0xERVIgPSBcImV6Yml6LzIwNS9kb2MvXCI7XHJcbiAgR0JVQ0tFVCA9IFwicXNcIjtcclxuICBmaWxlVXBsb2FkcyA9IFtdO1xyXG4gIG5hbWVBdHRyID0gW107XHJcblxyXG4gIGZpbGU7XHJcblxyXG4gIHJlc0ZpbGVzO1xyXG4gIGltYWdlVXJsTHN0ID0gW107XHJcbiAgcCA9IDE7XHJcbiAgcGFnZVNpemUgPSAxMDtcclxuICBvcmRlciA9IFwiXCI7XHJcbiAgZXZlQyA9IFwiZmEtZXllLXNsYXNoXCI7XHJcbiAgZXN0c3QgPSBmYWxzZTtcclxuICBpbnB1dHR5cGUgPSBcInBhc3N3b3JkXCI7XHJcblxyXG4gIHJldmVyc2UgPSB0cnVlO1xyXG4gIHN1YmZvcm0gPSBmYWxzZTtcclxuICB1c3Jpc0V4aXN0ID0gZmFsc2U7XHJcbiAgaWNvO1xyXG5cclxuICBkaXNwbGF5X2dyb3VwID0gW107XHJcbiAgZGlzcGxheV9yb3cgPSBbXTtcclxuICBkaXNwbGF5X2F0dHIgPSBbXTtcclxuICBjb2xWYWxzID0gW107XHJcblxyXG4gIHRlcm1zTGlzdCA9IFtdO1xyXG4gIGFwcGxVc2VyTGlzdCA9IFtdO1xyXG4gIHJvdXRoZXJEb2NcclxuICBkYXRhVHJuc0xpc3QgPSBbXTtcclxuICBieXJPYmogPSB7fTtcclxuICB1c2VyRGV0YWlscyA9IFtdO1xyXG4gIHBhZ2VEZWZpbmF0aW9uUHN3ZENuZztcclxuICBwYWdlX3R5cDtcclxuICBhdHRyRHRsO1xyXG4gIGF0dHJNYXBwaW5nRHRsO1xyXG4gIGF0dHJfZHRsX2lkbjtcclxuICBvdXRNYXBwaW5nTGlzdCA9IFtdO1xyXG4gIGF0dHJMaXN0ID0gW107XHJcbiAgY29udGFjdE5hbWU7XHJcbiAgcHJvZHVjRGV0YWlsTW9kZWxUaXRsZTtcclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHB1YmxpYyByb3V0ZXI6IFJvdXRlcixcclxuICAgIHByaXZhdGUgcm91dGU6IEFjdGl2YXRlZFJvdXRlLFxyXG4gICAgcHJpdmF0ZSB0b2FzdHI6IFRvYXN0clNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHNzOiBTeXN0ZW1TZXJ2aWNlU2VydmljZSxcclxuICAgIHByaXZhdGUgdXBsb2FkU2VydmljZTogVXBsb2FkRmlsZVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHNwaW5uZXJTZXJ2aWNlOiBOZ3hTcGlubmVyU2VydmljZSAsXHJcbiAgICBwdWJsaWMgY3M6IENvbnRhY3RTZXJ2aWNlU2VydmljZSxcclxuICAgIHB1YmxpYyBjbTogQ29tbWFuU2VydmljZVNlcnZpY2VcclxuICApIHsgfVxyXG5cclxuICBnZXRQYWdlRGVmaW5hdGlvbigpIHtcclxuICAgIHRoaXMucm91dGhlckRvYyA9IFwiXCI7XHJcbiAgICB0aGlzLmRhdGFsaXN0ID0gW107XHJcbiAgICB0aGlzLndoZXJlTWFwID0gW107XHJcbiAgICBsZXQgZnJtbm1lID0gdGhpcy5yb3V0ZS5zbmFwc2hvdC5wYXJhbXNbXCJpdG1mb3JtXCJdIHx8IFwiXCI7XHJcbiAgICBsZXQgZG9jdHlwID0gdGhpcy5yb3V0ZS5zbmFwc2hvdC5wYXJhbXNbXCJkb2N0eXBcIl0gfHwgXCJcIjtcclxuICAgIGRlYnVnZ2VyXHJcbiAgICB0aGlzLnNwaW5uZXJTZXJ2aWNlLnNob3coKTtcclxuICAgIGlmICh0aGlzLnBrICE9IG51bGwgJiYgdGhpcy5zdWJGcm1XayAhPSBudWxsKSB7XHJcbiAgICAgIC8vc3ViRnJtV2sgPT0gbmF2aWdhdGlvbiBwYW5lbCdzIG1lbnVcclxuICAgICAgaWYgKHRoaXMuc3ViRnJtV3YgIT0gXCJBTExcIikge1xyXG4gICAgICAgIHRoaXMucGFyYU9ialtcIndoZXJlS2V5c1wiXSA9IHRoaXMucGsgKyBcIn5cIiArIHRoaXMuc3ViRnJtV2s7XHJcbiAgICAgICAgdGhpcy5wYXJhT2JqW1wid2hlcmVWbHVzXCJdID0gXCJcIiArIHRoaXMucHYgKyBcIn5cIiArIHRoaXMuc3ViRnJtV3Y7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5wYXJhT2JqW1wid2hlcmVLZXlzXCJdID0gdGhpcy5waztcclxuICAgICAgICB0aGlzLnBhcmFPYmpbXCJ3aGVyZVZsdXNcIl0gPSBcIlwiICsgdGhpcy5wdjtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLndoZXJlTWFwW3RoaXMuc3ViRnJtV2tdID0gdGhpcy5zdWJGcm1XdjtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMucGFyYU9ialtcIndoZXJlS2V5c1wiXSA9IHRoaXMucGs7XHJcbiAgICAgIHRoaXMucGFyYU9ialtcIndoZXJlVmx1c1wiXSA9IFwiXCIgKyB0aGlzLnB2O1xyXG4gICAgICB0aGlzLndoZXJlTWFwW3RoaXMucGtdID0gdGhpcy5wdjtcclxuICAgIH1cclxuICAgIHRoaXMuaGVhZGVyW1wibWV0aG9kXCJdID0gXCJsb2FkTGlzdFwiO1xyXG4gICAgLy8gaWYgKHRoaXMucGFnZUluZm8gIT0gbnVsbCkge1xyXG4gICAgLy8gICB0aGlzLnBhZ2VfdHlwPXRoaXMucGFnZUluZm8ucGFnZV90eXA7XHJcbiAgICAvLyAgIHZhciBwYWdlVFAgPSB0aGlzLnBhZ2VJbmZvLnBhZ2VfdHlwO1xyXG4gICAgLy8gICBpZiAocGFnZVRQID09IFwianNvbkZvcm1cIikge1xyXG4gICAgLy8gICAgIHRoaXMucGFyYU9ialtcIndoZXJlS2V5c1wiXSA9IHRoaXMucGFnZUluZm8ud2hlcmVfY2xhdXNlO1xyXG4gICAgLy8gICAgIHRoaXMucGFyYU9ialtcIndoZXJlVmx1c1wiXSA9IHRoaXMud2hlcmVNYXBbdGhpcy5wYWdlSW5mby53aGVyZV9jbGF1c2VdO1xyXG4gICAgLy8gICB9XHJcbiAgICAvLyB9XHJcbiAgICBjb25zb2xlLmxvZyhKU09OLnN0cmluZ2lmeSh0aGlzLmhlYWRlcikpO1xyXG4gICAgY29uc29sZS5sb2coSlNPTi5zdHJpbmdpZnkodGhpcy5wYXJhT2JqKSk7XHJcbiAgICBsZXQgb3B0aW9ucyA9ICh7IGhlYWRlcnM6IG5ldyBIdHRwSGVhZGVycyh0aGlzLmhlYWRlcikgfSk7XHJcbiAgICB0aGlzLnNzXHJcbiAgICAgIC5nZXREYXRhKHRoaXMucGFyYU9iaiwgb3B0aW9ucylcclxuICAgICAgLnRoZW4oKHJlc3BvbnNlOiBhbnkpID0+IHtcclxuICAgICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzID09IFwiU1VDQ0VTU1wiKSB7XHJcbiAgICAgICAgICBkZWJ1Z2dlcjtcclxuICAgICAgICAgIGNvbnNvbGUubG9nKHJlc3BvbnNlKTtcclxuICAgICAgICAgIHRoaXMuc3Bpbm5lclNlcnZpY2UuaGlkZSgpO1xyXG4gICAgICAgICAgdGhpcy50YmxIID0gcmVzcG9uc2UuZGF0YUhlYWRlcjtcclxuICAgICAgICAgIHRoaXMudGJsRGVzYyA9IHJlc3BvbnNlLmRhdGFIZWFkZXJQcmludDtcclxuICAgICAgICAgIHRoaXMuYWRkTmV3ID0gcmVzcG9uc2UuYnV0dG9uc1swXTtcclxuICAgICAgICAgIHRoaXMucGFnZUluZm8gPSByZXNwb25zZS5wYWdlSW5mbztcclxuICAgICAgICAgIHRoaXMucGtmID0gcmVzcG9uc2UucGFnZUluZm8ucHJpbWFyeV9rZXlfZmllbGQ7XHJcbiAgICAgICAgICB0aGlzLmRhdGFsaXN0ID0gcmVzcG9uc2UuZGF0YUxpc3Q7XHJcbiAgICAgICAgICB0aGlzLmFjdGlvbnMgPSByZXNwb25zZS5hY3Rpb25zO1xyXG4gICAgICAgICAgdGhpcy5uYXZpZ2F0aW9uID0gcmVzcG9uc2UubmF2aWdhdGlvbjtcclxuXHJcbiAgICAgICAgICBpZiAodGhpcy5wYXJhT2JqW1wid2hlcmVLZXlzXCJdID09IFwibm1lX2lkblwiIHx8IHRoaXMucGFyYU9ialtcIndoZXJlS2V5c1wiXSA9PSBcImxlZGdlcl9pZG5cIikge1xyXG4gICAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICAgKHRoaXMucGFyYU9ialtcImZvcm1ObWVcIl0gPT0gXCJuYW1lTWFzdGVyXCIgfHwgdGhpcy5wYXJhT2JqW1wiZm9ybU5tZVwiXSA9PSBcImxlZGdlck1hc3RlclwiIHx8IHRoaXMucGFyYU9ialtcImZvcm1ObWVcIl0gPT0gXCJhY2NOYW1lTWFzdGVyXCIpICYmXHJcbiAgICAgICAgICAgICAgdGhpcy5kYXRhbGlzdC5sZW5ndGggPT0gMVxyXG4gICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICBsZXQgZHREdGwgPSB0aGlzLmRhdGFsaXN0WzBdO1xyXG4gICAgICAgICAgICAgIGxldCBubWUgPSBkdER0bFtcIm5tZVwiXSB8fCBcIlwiO1xyXG4gICAgICAgICAgICAgIGxldCBwbm1lID0gZHREdGxbXCJwZXJzb25fbm1lXCJdIHx8IFwiXCI7XHJcbiAgICAgICAgICAgICAgaWYgKG5tZSAhPSBcIlwiIHx8IHBubWUgIT0gXCJcIikge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jb250YWN0TmFtZSA9IG5tZSArIFwiL1wiICsgcG5tZTtcclxuICAgICAgICAgICAgICAgIHRoaXMuY29udGFjdE5hbWUgPSB0aGlzLmNvbnRhY3ROYW1lLnRvVXBwZXJDYXNlKCk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmNvbnRhY3ROYW1lID0gXCJcIjtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICBpZiAoZG9jdHlwICE9ICcnKSB7XHJcbiAgICAgICAgICAgIHRoaXMucm91dGhlckRvYyA9IGRvY3R5cDtcclxuICAgICAgICAgICAgdGhpcy5uYXZpZ2F0aW9uLmZvckVhY2goKGVsZW1lbnQsIGluZGV4KSA9PiB7XHJcbiAgICAgICAgICAgICAgaWYgKGVsZW1lbnQuZm9ybV9maWVsZCA9PSAndXBsb2FkRG9jdW1lbnQnKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm5hdmlnYXRpb25GdW4oZWxlbWVudCwgaW5kZXgpO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5zcGlubmVyU2VydmljZS5oaWRlKCk7XHJcbiAgICAgICAgICB0aGlzLnRvYXN0ci5lcnJvcihyZXNwb25zZS5tZXNzYWdlKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pXHJcbiAgICAgIC5jYXRjaCgoZXJyOiBhbnkpID0+IHtcclxuICAgICAgICB0aGlzLnNwaW5uZXJTZXJ2aWNlLmhpZGUoKTtcclxuICAgICAgICB0aGlzLnRvYXN0ci5lcnJvcihlcnIubWVzc2FnZSk7XHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgZ2V0Um93R3JvdXAoZGlzcGxheUF0dHJJZG4pIHtcclxuICAgIGxldCByZXFPYmogPSB7fTtcclxuICAgIHJlcU9ialtcImRpc3BsYXlBdHRySWRuXCJdID0gZGlzcGxheUF0dHJJZG47XHJcbiAgICB0aGlzLmhlYWRlcltcIm1ldGhvZFwiXSA9IFwiZ2V0UGFnZURpc3BsYXlBdHRyXCI7XHJcbiAgICBsZXQgb3B0aW9ucyA9ICh7IGhlYWRlcnM6IG5ldyBIdHRwSGVhZGVycyh0aGlzLmhlYWRlcikgfSk7XHJcbiAgICB0aGlzLnNzXHJcbiAgICAgIC5nZXRSb3dHcm91cChyZXFPYmosIG9wdGlvbnMsIFwiYWRtaW4vbWVudVJpZ2h0c1wiKVxyXG4gICAgICAudGhlbigocmVzcG9uc2U6IGFueSkgPT4ge1xyXG4gICAgICAgIGlmIChyZXNwb25zZS5zdGF0dXMgPT0gXCJTVUNDRVNTXCIpIHtcclxuICAgICAgICAgIHRoaXMuZGlzcGxheV9ncm91cCA9IHJlc3BvbnNlLnJlc3VsdC5kaXNwbGF5X2dyb3VwO1xyXG4gICAgICAgICAgdGhpcy5kaXNwbGF5X3JvdyA9IHJlc3BvbnNlLnJlc3VsdC5kaXNwbGF5X3JvdztcclxuICAgICAgICAgIHRoaXMuZGlzcGxheV9hdHRyID0gcmVzcG9uc2UucmVzdWx0LmRpc3BsYXlfYXR0cjtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy50b2FzdHIuZXJyb3IocmVzcG9uc2UubWVzc2FnZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KVxyXG4gICAgICAuY2F0Y2goKGVycjogYW55KSA9PiB7XHJcbiAgICAgICAgdGhpcy50b2FzdHIuZXJyb3IoZXJyLm1lc3NhZ2UpO1xyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIFNhdmVSb3dHcm91cChkaXNwbGF5QXR0cklkbiwgY29sbmFtZSwgY29sVmFscykge1xyXG4gICAgdGhpcy5zcGlubmVyU2VydmljZS5zaG93KCk7XHJcbiAgICBsZXQgcmVxT2JqID0ge307XHJcbiAgICByZXFPYmpbXCJkaXNwbGF5QXR0cklkblwiXSA9IGRpc3BsYXlBdHRySWRuO1xyXG4gICAgcmVxT2JqW1wiY29sdW1uTmFtZVwiXSA9IGNvbG5hbWU7XHJcbiAgICByZXFPYmpbXCJjb2x1bW5WYWx1ZVwiXSA9IGNvbFZhbHM7XHJcbiAgICB0aGlzLmhlYWRlcltcIm1ldGhvZFwiXSA9IFwic2F2ZVBhZ2VEaXNwbGF5QXR0clwiO1xyXG4gICAgbGV0IG9wdGlvbnMgPSAoeyBoZWFkZXJzOiBuZXcgSHR0cEhlYWRlcnModGhpcy5oZWFkZXIpIH0pO1xyXG4gICAgdGhpcy5zc1xyXG4gICAgICAuZ2V0Um93R3JvdXAocmVxT2JqLCBvcHRpb25zLCBcImFkbWluL21lbnVSaWdodHNcIilcclxuICAgICAgLnRoZW4oKHJlc3BvbnNlOiBhbnkpID0+IHtcclxuICAgICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzID09IFwiU1VDQ0VTU1wiKSB7XHJcbiAgICAgICAgICB0aGlzLmRpc2FibGVzZWxjID0gZmFsc2U7XHJcbiAgICAgICAgICB0aGlzLnNwaW5uZXJTZXJ2aWNlLmhpZGUoKTtcclxuICAgICAgICAgIHRoaXMudG9hc3RyLnN1Y2Nlc3MocmVzcG9uc2UubWVzc2FnZSk7XHJcbiAgICAgICAgICB0aGlzLmNvbFZhbHMgPSBbXTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5zcGlubmVyU2VydmljZS5oaWRlKCk7XHJcbiAgICAgICAgICB0aGlzLnRvYXN0ci5lcnJvcihyZXNwb25zZS5tZXNzYWdlKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pXHJcbiAgICAgIC5jYXRjaCgoZXJyOiBhbnkpID0+IHtcclxuICAgICAgICB0aGlzLnNwaW5uZXJTZXJ2aWNlLmhpZGUoKTtcclxuICAgICAgICB0aGlzLnRvYXN0ci5lcnJvcihlcnIubWVzc2FnZSk7XHJcbiAgICAgIH0pO1xyXG4gIH1cclxuICBvbkNoYW5nZURpc3BSb3coZSkge1xyXG4gICAgdGhpcy5kaXNhYmxlc2VsYyA9IHRydWU7XHJcbiAgICBmb3IgKHZhciBrZXkgaW4gZS50YXJnZXQuZm9ybS5lbGVtZW50cykge1xyXG4gICAgICBpZiAoXHJcbiAgICAgICAgZS50YXJnZXQuZm9ybS5lbGVtZW50c1trZXldLmlkICE9IFwiXCIgJiZcclxuICAgICAgICBlLnRhcmdldC5mb3JtLmVsZW1lbnRzW2tleV0uaWQgIT0gdW5kZWZpbmVkICYmXHJcbiAgICAgICAgZS50YXJnZXQuZm9ybS5lbGVtZW50c1trZXldLmlkICE9IFwidW5kZWZpbmVkXCJcclxuICAgICAgKVxyXG4gICAgICAgIGlmIChlLnRhcmdldC5mb3JtLmVsZW1lbnRzW2tleV0uaWQuc3RhcnRzV2l0aChcInJvd19cIikpIHtcclxuICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgZS50YXJnZXQuZm9ybS5lbGVtZW50c1trZXldLnZhbHVlICE9IFwiXCIgJiZcclxuICAgICAgICAgICAgZS50YXJnZXQuZm9ybS5lbGVtZW50c1trZXldLnZhbHVlICE9IHVuZGVmaW5lZCAmJlxyXG4gICAgICAgICAgICBlLnRhcmdldC5mb3JtLmVsZW1lbnRzW2tleV0udmFsdWUgIT0gXCJ1bmRlZmluZWRcIlxyXG4gICAgICAgICAgKVxyXG4gICAgICAgICAgICB0aGlzLmNvbFZhbHMucHVzaChlLnRhcmdldC5mb3JtLmVsZW1lbnRzW2tleV0udmFsdWUpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHRoaXMuU2F2ZVJvd0dyb3VwKHRoaXMucGlkLCBcImRpc3BsYXlfcm93XCIsIHRoaXMuY29sVmFscyk7XHJcbiAgfVxyXG5cclxuICBvbkNoYW5nZURpc3BHcnAoZSkge1xyXG4gICAgdGhpcy5kaXNhYmxlc2VsYyA9IHRydWU7XHJcbiAgICBmb3IgKHZhciBrZXkgaW4gZS50YXJnZXQuZm9ybS5lbGVtZW50cykge1xyXG4gICAgICBpZiAoXHJcbiAgICAgICAgZS50YXJnZXQuZm9ybS5lbGVtZW50c1trZXldLmlkICE9IFwiXCIgJiZcclxuICAgICAgICBlLnRhcmdldC5mb3JtLmVsZW1lbnRzW2tleV0uaWQgIT0gdW5kZWZpbmVkICYmXHJcbiAgICAgICAgZS50YXJnZXQuZm9ybS5lbGVtZW50c1trZXldLmlkICE9IFwidW5kZWZpbmVkXCJcclxuICAgICAgKVxyXG4gICAgICAgIGlmIChlLnRhcmdldC5mb3JtLmVsZW1lbnRzW2tleV0uaWQuc3RhcnRzV2l0aChcImdycF9cIikpIHtcclxuICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgZS50YXJnZXQuZm9ybS5lbGVtZW50c1trZXldLnZhbHVlICE9IFwiXCIgJiZcclxuICAgICAgICAgICAgZS50YXJnZXQuZm9ybS5lbGVtZW50c1trZXldLnZhbHVlICE9IHVuZGVmaW5lZCAmJlxyXG4gICAgICAgICAgICBlLnRhcmdldC5mb3JtLmVsZW1lbnRzW2tleV0udmFsdWUgIT0gXCJ1bmRlZmluZWRcIlxyXG4gICAgICAgICAgKVxyXG4gICAgICAgICAgICB0aGlzLmNvbFZhbHMucHVzaChlLnRhcmdldC5mb3JtLmVsZW1lbnRzW2tleV0udmFsdWUpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHRoaXMuU2F2ZVJvd0dyb3VwKHRoaXMucGlkLCBcImRpc3BsYXlfZ3JvdXBcIiwgdGhpcy5jb2xWYWxzKTtcclxuICB9XHJcbiAgZ2V0Rm9ybUZpZWxkcygpIHtcclxuICAgIHRoaXMuc3Bpbm5lclNlcnZpY2Uuc2hvdygpO1xyXG4gICAgdGhpcy5kZnYgPSBudWxsO1xyXG4gICAgdGhpcy5wYXJhT2JqW1wid2hlcmVLZXlzXCJdID0gdGhpcy5waztcclxuICAgIHRoaXMucGFyYU9ialtcIndoZXJlVmx1c1wiXSA9IHRoaXMucHY7XHJcbiAgICB0aGlzLmhlYWRlcltcIm1ldGhvZFwiXSA9IFwibG9hZEFkZEVkaXRcIjtcclxuICAgIGNvbnNvbGUubG9nKHRoaXMucGFyYU9iaik7XHJcbiAgICBjb25zb2xlLmxvZyh0aGlzLmhlYWRlcik7XHJcbiAgICBsZXQgb3B0aW9ucyA9ICh7IGhlYWRlcnM6IG5ldyBIdHRwSGVhZGVycyh0aGlzLmhlYWRlcikgfSk7XHJcbiAgICB0aGlzLnNzXHJcbiAgICAgIC5nZXRGb3JtRih0aGlzLnBhcmFPYmosIG9wdGlvbnMpXHJcbiAgICAgIC50aGVuKChyZXNwb25zZTogYW55KSA9PiB7XHJcbiAgICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1cyA9PSBcIlNVQ0NFU1NcIiAmJiByZXNwb25zZS5tZXNzYWdlICE9IFwiU1VDQ0VTU1wiKSB7XHJcbiAgICAgICAgICB0aGlzLnRvYXN0ci5lcnJvcihyZXNwb25zZS5tZXNzYWdlKTtcclxuICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1cyA9PSBcIlNVQ0NFU1NcIikge1xyXG4gICAgICAgICAgY29uc29sZS5sb2cocmVzcG9uc2UpO1xyXG4gICAgICAgICAgdGhpcy5mb3JtRmlsZHMgPSByZXNwb25zZS5mb3JtRmllbGRzO1xyXG4gICAgICAgICAgdGhpcy5zcGlubmVyU2VydmljZS5oaWRlKCk7XHJcbiAgICAgICAgICB0aGlzLmZvcm1GaWxkcy5mb3JFYWNoKGVsZW1lbnQgPT4ge1xyXG4gICAgICAgICAgICBpZiAoZWxlbWVudC5mb3JtX2ZpZWxkX3R5cCA9PSBcInRiXCIpIHtcclxuICAgICAgICAgICAgICB0aGlzLmdldExvdkxpc3QoZWxlbWVudC5mb3JtX2ZpZWxkLCBlbGVtZW50LnBhZ2VfaXRlbV9pZG4pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChlbGVtZW50LmZvcm1fZmllbGRfdHlwID09IFwic1wiKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5nZXRMb3ZMaXN0KGVsZW1lbnQuZm9ybV9maWVsZCwgZWxlbWVudC5wYWdlX2l0ZW1faWRuKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoZWxlbWVudC5mb3JtX2ZpZWxkX3R5cCA9PSBcImhkXCIpIHtcclxuICAgICAgICAgICAgICBlbGVtZW50LmRlZmF1bHRfdmFsdWUgPSB0aGlzLndoZXJlTWFwW2VsZW1lbnQuZm9ybV9maWVsZF07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKGVsZW1lbnQuZm9ybV9maWVsZF90eXAgPT0gXCJma1wiKSB7XHJcbiAgICAgICAgICAgICAgZWxlbWVudC5kZWZhdWx0X3ZhbHVlID0gdGhpcy5yb3V0ZS5zbmFwc2hvdC5wYXJhbU1hcC5nZXQoXCJzdWJ2XCIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChlbGVtZW50LmZvcm1fZmllbGRfdHlwID09IFwiY2tcIikge1xyXG4gICAgICAgICAgICAgIGVsZW1lbnQuZGVmYXVsdF92YWx1ZSA9IHRoaXMud2hlcmVNYXBbZWxlbWVudC5jb2x1bW5fa2V5XTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoZWxlbWVudC5mb3JtX2ZpZWxkX3R5cCA9PSBcInNxXCIpIHtcclxuICAgICAgICAgICAgICB0aGlzLmdldFNlcXVlbmNlKGVsZW1lbnQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChlbGVtZW50LmR0YV90eXAgPT0gXCJzYVwiKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5nZXRMb3ZMaXN0KGVsZW1lbnQuZm9ybV9maWVsZCwgZWxlbWVudC5wYWdlX2l0ZW1faWRuKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoZWxlbWVudC5kdGFfdHlwID09IFwic3JcIikge1xyXG4gICAgICAgICAgICAgIHRoaXMuZ2V0TG92TGlzdChlbGVtZW50LmZvcm1fZmllbGQsIGVsZW1lbnQucGFnZV9pdGVtX2lkbik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLnNwaW5uZXJTZXJ2aWNlLmhpZGUoKTtcclxuICAgICAgICAgIHRoaXMudG9hc3RyLmVycm9yKHJlc3BvbnNlLm1lc3NhZ2UpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSlcclxuICAgICAgLmNhdGNoKChlcnI6IGFueSkgPT4ge1xyXG4gICAgICAgIHRoaXMuc3Bpbm5lclNlcnZpY2UuaGlkZSgpO1xyXG4gICAgICAgIHRoaXMudG9hc3RyLmVycm9yKGVyci5tZXNzYWdlKTtcclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuICB1c2VyQWN0aW9uKHVhLCBjLCBhLCBpKSB7XHJcbiAgICBkZWJ1Z2dlclxyXG4gICAgaWYgKGMudHJpbSgpID09IFwiYWRkXCIpIHtcclxuICAgICAgdGhpcy5zcGlubmVyU2VydmljZS5zaG93KCk7XHJcbiAgICAgIHRoaXMuZm9ybUZpbGRzID0gW107XHJcbiAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiZGF0YW1kYnRuXCIpLmNsaWNrKCk7XHJcbiAgICAgIHRoaXMuZ2V0Rm9ybUZpZWxkcygpO1xyXG4gICAgICB0aGlzLmJ0bk5hbWUgPSBcIkFkZFwiO1xyXG4gICAgfSBlbHNlIGlmICh1YSAmJiBjLnRyaW0oKSA9PSBcImVkaXRcIikge1xyXG4gICAgICB0aGlzLmdsYk9iaiA9IHVhO1xyXG4gICAgICB0aGlzLnNwaW5uZXJTZXJ2aWNlLnNob3coKTtcclxuICAgICAgdGhpcy5mb3JtRmlsZHMgPSBbXTtcclxuICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJkYXRhbWRidG5cIikuY2xpY2soKTtcclxuICAgICAgdGhpcy5waWQgPSB1YVt0aGlzLnBrZl07XHJcbiAgICAgIHRoaXMuZ2V0RWRpdERhdGEodWEpO1xyXG4gICAgICB0aGlzLmJ0bk5hbWUgPSBcIkVkaXRcIjtcclxuICAgIH0gZWxzZSBpZiAoXHJcbiAgICAgIHVhICYmXHJcbiAgICAgIGMudHJpbSgpID09IFwiYWRkSXRlbVwiICYmXHJcbiAgICAgIGEuZm9ybV9maWVsZF90aXRsZSAhPSBcIkFkZCBNYXBwaW5nXCJcclxuICAgICkge1xyXG4gICAgICB0aGlzLnNwaW5uZXJTZXJ2aWNlLnNob3coKTtcclxuICAgICAgdGhpcy5mb3JtRmlsZHMgPSBbXTtcclxuICAgICAgdGhpcy5jdXJsID0gYS5sb3ZfcXJ5O1xyXG4gICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbYS5sb3ZfcXJ5LCB0aGlzLnBrZiwgdWFbdGhpcy5wa2ZdXSk7XHJcbiAgICB9IGVsc2UgaWYgKHVhICYmIGMudHJpbSgpID09IFwiZGVsZXRldGVybXNcIikge1xyXG5cclxuICAgICAgdGhpcy5jaSA9IGk7XHJcbiAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiZGVsZXRlVGVybXNcIikuY2xpY2soKTtcclxuICAgICAgdGhpcy5waWQgPSB1YVt0aGlzLnBrZl07XHJcbiAgICB9IGVsc2UgaWYgKHVhICYmIGMudHJpbSgpID09IFwiZGVsZXRlXCIpIHtcclxuXHJcbiAgICAgIHRoaXMuY2kgPSBpO1xyXG4gICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImRlbGV0ZWJ0blwiKS5jbGljaygpO1xyXG4gICAgICB0aGlzLnBpZCA9IHVhW3RoaXMucGtmXTtcclxuICAgIH0gZWxzZSBpZiAodWEgJiYgYy50cmltKCkgPT0gXCJkZWZpbmF0aW9uXCIpIHtcclxuICAgICAgdGhpcy5jaSA9IGk7XHJcbiAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwicm93R3JwYnRuXCIpLmNsaWNrKCk7XHJcbiAgICAgIHRoaXMucGlkID0gdWFbdGhpcy5wa2ZdO1xyXG4gICAgICB0aGlzLmdldFJvd0dyb3VwKHRoaXMucGlkKTtcclxuICAgIH0gZWxzZSBpZiAoXHJcbiAgICAgIHVhICYmXHJcbiAgICAgIGMudHJpbSgpID09IFwiYWRkSXRlbVwiICYmXHJcbiAgICAgIGEuZm9ybV9maWVsZF90aXRsZSA9PSBcIkFkZCBNYXBwaW5nXCJcclxuICAgICkge1xyXG4gICAgICB0aGlzLnByb2R1Y0RldGFpbE1vZGVsVGl0bGUgPSB1YS5kaXNwbGF5O1xyXG4gICAgICB0aGlzLmxvYWRQcm9kdWN0RGV0YWlsTWFwcGluZyh1YVtcImF0dHJfZF9pZG5cIl0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbG9hZFByb2R1Y3REZXRhaWxNYXBwaW5nKGF0dHJEdGFpbElkbikge1xyXG4gICAgdGhpcy5hdHRyX2R0bF9pZG4gPSBhdHRyRHRhaWxJZG47XHJcbiAgICB0aGlzLnNwaW5uZXJTZXJ2aWNlLnNob3coKTtcclxuICAgIGxldCBvYmogPSB7fTtcclxuICAgIG9ialtcImZvcm1ObWVcIl0gPSBcImZpbGVVcGxvYWRcIjtcclxuICAgIG9ialtcImF0dHJfZHRsX2lkblwiXSA9IGF0dHJEdGFpbElkbjtcclxuICAgIHRoaXMuaGVhZGVyW1wibWV0aG9kXCJdID0gXCJsb2FkUHJkTWFzdGVyTWFwcGluZ1wiO1xyXG4gICAgbGV0IG9wdGlvbnMgPSAoeyBoZWFkZXJzOiBuZXcgSHR0cEhlYWRlcnModGhpcy5oZWFkZXIpIH0pO1xyXG4gICAgdGhpcy5zc1xyXG4gICAgICAuU2F2ZShvYmosIG9wdGlvbnMsIFwiZmlsZVVwbG9hZC9sb2FkXCIpXHJcbiAgICAgIC50aGVuKChyZXNwb25zZTogYW55KSA9PiB7XHJcbiAgICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1cyA9PSBcIlNVQ0NFU1NcIikge1xyXG4gICAgICAgICAgY29uc29sZS5sb2cocmVzcG9uc2UpO1xyXG4gICAgICAgICAgbGV0IHJlc3VsdCA9IHJlc3BvbnNlLnJlc3VsdDtcclxuICAgICAgICAgIHRoaXMuYXR0ckR0bCA9IHJlc3VsdC5hdHRyRHRsO1xyXG4gICAgICAgICAgdGhpcy5hdHRyTWFwcGluZ0R0bCA9IHJlc3VsdC5hdHRyTWFwcGluZ0R0bDtcclxuICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiYnRucHJvZHVjdERldGFpbE1hcE1EXCIpLmNsaWNrKCk7XHJcbiAgICAgICAgICB0aGlzLnNwaW5uZXJTZXJ2aWNlLmhpZGUoKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5zcGlubmVyU2VydmljZS5oaWRlKCk7XHJcbiAgICAgICAgICB0aGlzLnRvYXN0ci5lcnJvcihyZXNwb25zZS5tZXNzYWdlKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pXHJcbiAgICAgIC5jYXRjaCgoZXJyOiBhbnkpID0+IHtcclxuICAgICAgICB0aGlzLnNwaW5uZXJTZXJ2aWNlLmhpZGUoKTtcclxuICAgICAgICB0aGlzLnRvYXN0ci5lcnJvcihlcnIubWVzc2FnZSk7XHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgc2F2ZVByb2R1Y3REZXRhaWxNYXBwaW5nKCkge1xyXG4gICAgdGhpcy5zcGlubmVyU2VydmljZS5zaG93KCk7XHJcbiAgICBsZXQgb2JqID0ge307XHJcbiAgICBvYmpbXCJmb3JtTm1lXCJdID0gXCJmaWxlVXBsb2FkXCI7XHJcbiAgICBvYmpbXCJhdHRyX2R0bF9pZG5cIl0gPSB0aGlzLmF0dHJfZHRsX2lkbjtcclxuICAgIG9ialtcImF0dHJEdGxNYXBcIl0gPSB0aGlzLmF0dHJNYXBwaW5nRHRsO1xyXG4gICAgdGhpcy5oZWFkZXJbXCJtZXRob2RcIl0gPSBcInVwZGF0ZVByb2R1Y3RBdHRyXCI7XHJcbiAgICBjb25zb2xlLmxvZyhKU09OLnN0cmluZ2lmeShvYmopKTtcclxuICAgIGxldCBvcHRpb25zID0gKHsgaGVhZGVyczogbmV3IEh0dHBIZWFkZXJzKHRoaXMuaGVhZGVyKSB9KTtcclxuICAgIHRoaXMuc3NcclxuICAgICAgLlNhdmUob2JqLCBvcHRpb25zLCBcImZpbGVVcGxvYWQvbG9hZFwiKVxyXG4gICAgICAudGhlbigocmVzcG9uc2U6IGFueSkgPT4ge1xyXG4gICAgICAgIGlmIChyZXNwb25zZS5zdGF0dXMgPT0gXCJTVUNDRVNTXCIpIHtcclxuICAgICAgICAgIGNvbnNvbGUubG9nKHJlc3BvbnNlKTtcclxuICAgICAgICAgIHRoaXMudG9hc3RyLnN1Y2Nlc3MocmVzcG9uc2UubWVzc2FnZSk7XHJcbiAgICAgICAgICB0aGlzLnNwaW5uZXJTZXJ2aWNlLmhpZGUoKTtcclxuICAgICAgICAgIHRoaXMucHJvZHVjdERldGFpbE1hcGNsc2J0bi5uYXRpdmVFbGVtZW50LmNsaWNrKCk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMuc3Bpbm5lclNlcnZpY2UuaGlkZSgpO1xyXG4gICAgICAgICAgdGhpcy50b2FzdHIuZXJyb3IocmVzcG9uc2UubWVzc2FnZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KVxyXG4gICAgICAuY2F0Y2goKGVycjogYW55KSA9PiB7XHJcbiAgICAgICAgdGhpcy5zcGlubmVyU2VydmljZS5oaWRlKCk7XHJcbiAgICAgICAgdGhpcy50b2FzdHIuZXJyb3IoZXJyLm1lc3NhZ2UpO1xyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIG5hdmlnYXRpb25GdW4obmF2LCBpKSB7XHJcbiAgICBkZWJ1Z2dlclxyXG4gICAgdGhpcy5jTGluayA9IGk7XHJcbiAgICB0aGlzLnN1YkZybVdrID0gbmF2LmNvbHVtbl9rZXkudHJpbSgpIHx8ICcnO1xyXG4gICAgdGhpcy5zdWJGcm1XdiA9IG5hdi5mb3JtX2ZpZWxkLnRyaW0oKSB8fCAnJztcclxuICAgIGlmICh0aGlzLnN1YkZybVd2ID09IFwiMFwiKVxyXG4gICAgICB0aGlzLnN1YkZybVd2ID0gXCJcIjtcclxuICAgIHRoaXMubmF2Zm9ybSA9IG5hdi5sb3ZfcXJ5LnRyaW0oKTtcclxuICAgIGlmICh0aGlzLnN1YkZybVd2ID09IFwiXCIpIHtcclxuICAgICAgdGhpcy5zdWJGcm1XayA9IG51bGw7XHJcbiAgICAgIHRoaXMuc3ViRnJtV3YgPSBudWxsO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMubmF2Zm9ybSAhPSBcIlwiKSB7XHJcbiAgICAgIGlmICh0aGlzLm5hdmZvcm0gPT0gXCJhZGR0aW9uYWxEdGxNYXN0ZXJcIikge1xyXG4gICAgICAgIHRoaXMuYWRkRnJtTm1lID0gdGhpcy5uYXZmb3JtO1xyXG4gICAgICAgIGxldCBtZGwgPSBbJ2NvbnRhY3QnXTtcclxuICAgICAgICB0aGlzLmdldE5hbWVBdHRyKHRoaXMuYWRkRnJtTm1lLCBtZGwpO1xyXG4gICAgICB9IGVsc2UgaWYgKHRoaXMubmF2Zm9ybSA9PSBcImxlZGdlckFkZHRpb25hbER0bE1hc3RlclwiKSB7XHJcbiAgICAgICAgdGhpcy5hZGRGcm1ObWUgPSB0aGlzLm5hdmZvcm07XHJcbiAgICAgICAgbGV0IG1kbCA9IFsnbGVkZ19hdHRyJ107XHJcbiAgICAgICAgdGhpcy5nZXRMZWRnZXJBdHRyKHRoaXMuYWRkRnJtTm1lLCBtZGwsICdhdHRyJyk7XHJcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5uYXZmb3JtID09IFwibGVkZ2VyQWNjQWRkaXRpbmFsRGV0YWlsc1wiKSB7XHJcbiAgICAgICAgdGhpcy5hZGRGcm1ObWUgPSB0aGlzLm5hdmZvcm07XHJcbiAgICAgICAgbGV0IG1kbCA9IFsnbGVkZ2FjY19hdHRyJ107XHJcbiAgICAgICAgdGhpcy5nZXRMZWRnZXJBdHRyKHRoaXMuYWRkRnJtTm1lLCBtZGwsICdhY2NfYXR0cicpO1xyXG4gICAgICB9IGVsc2UgaWYgKHRoaXMubmF2Zm9ybSA9PSBcImFjY0RlbGV0ZVJ1bGVzRm9ybVwiKSB7XHJcbiAgICAgICAgdGhpcy5hZGRGcm1ObWUgPSB0aGlzLm5hdmZvcm07XHJcbiAgICAgICAgbGV0IG1kbCA9IFsnZGVsZXRlX3J1bGUnXTtcclxuICAgICAgICB0aGlzLmdldExlZGdlckF0dHIodGhpcy5hZGRGcm1ObWUsIG1kbCwgJ2RlbGV0ZV9ydWxlJyk7XHJcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5uYXZmb3JtID09IFwiYWNjSm91cm5hbEF0dHJGb3JtXCIpIHtcclxuICAgICAgICB0aGlzLmFkZEZybU5tZSA9IHRoaXMubmF2Zm9ybTtcclxuICAgICAgICBsZXQgbWRsID0gWydqbmxhY2NfYXR0ciddO1xyXG4gICAgICAgIHRoaXMuZ2V0TGVkZ2VyQXR0cih0aGlzLmFkZEZybU5tZSwgbWRsLCAnam5sYWNjX2F0dHInKTtcclxuICAgICAgfSBlbHNlIGlmICh0aGlzLm5hdmZvcm0gPT0gXCJhY2NMb2FuQXR0ckZvcm1cIikge1xyXG4gICAgICAgIHRoaXMuYWRkRnJtTm1lID0gdGhpcy5uYXZmb3JtO1xyXG4gICAgICAgIGxldCBtZGwgPSBbJ2xvYW4nXTtcclxuICAgICAgICB0aGlzLmdldExlZGdlckF0dHIodGhpcy5hZGRGcm1ObWUsIG1kbCwgJ2xvYW4nKTtcclxuICAgICAgfSBlbHNlIGlmICh0aGlzLm5hdmZvcm0gPT0gXCJhY2NKb3VybmFsU2V0dGluZ0Zvcm1cIikge1xyXG4gICAgICAgIHRoaXMuYWRkRnJtTm1lID0gdGhpcy5uYXZmb3JtO1xyXG4gICAgICAgIGxldCBtZGwgPSBbJ2pubF9zZXR0J107XHJcbiAgICAgICAgdGhpcy5nZXRKb3VybmFsQXR0cih0aGlzLmFkZEZybU5tZSwgbWRsLCAnam5sX3NldHQnKTtcclxuICAgICAgfVxyXG4gICAgICBlbHNlIGlmICh0aGlzLm5hdmZvcm0gPT0gXCJkb2N1bWVudFVwbG9hZE1hc3RlclwiKSB7XHJcbiAgICAgICAgdGhpcy5hZGRGcm1ObWUgPSB0aGlzLm5hdmZvcm07XHJcbiAgICAgICAgdGhpcy5nZXRGaWxlcyh0aGlzLnB2KTtcclxuICAgICAgfSBlbHNlIGlmICh0aGlzLm5hdmZvcm0gPT0gXCJtZW51QWNjZXNzTWFzdGVyXCIpIHtcclxuICAgICAgICB0aGlzLmFkZEZybU5tZSA9IHRoaXMubmF2Zm9ybTtcclxuICAgICAgICAvLyAgdGhpcy5sb2FkVXNyTWRsKHRoaXMucHYpOy8vXHJcbiAgICAgICAgdGhpcy5sb2FkQXBwbGljYXRpb24oKTtcclxuICAgICAgfSBlbHNlIGlmICh0aGlzLm5hdmZvcm0gPT0gXCJ3ZWJNZW51QWNjZXNzTWFzdGVyXCIpIHtcclxuICAgICAgICB0aGlzLmFkZEZybU5tZSA9IHRoaXMubmF2Zm9ybTtcclxuICAgICAgICAvLyAgdGhpcy5sb2FkVXNyTWRsKHRoaXMucHYpOy8vXHJcbiAgICAgICAgdGhpcy5sb2FkV2ViQXBwbGljYXRpb24oKTtcclxuICAgICAgfVxyXG4gICAgICBlbHNlIGlmICh0aGlzLm5hdmZvcm0gPT0gXCJtb2R1bGVBY2Nlc3NNYXN0ZXJcIikge1xyXG4gICAgICAgIHRoaXMuYWRkRnJtTm1lID0gdGhpcy5uYXZmb3JtO1xyXG4gICAgICAgIHRoaXMubG9hZFVzck1kbCh0aGlzLnB2KTtcclxuICAgICAgfSBlbHNlIGlmICh0aGlzLm5hdmZvcm0gPT0gXCJ0ZXJtVXNlckFzc2lnbkZvcm1cIikge1xyXG4gICAgICAgIHRoaXMuYWRkRnJtTm1lID0gdGhpcy5uYXZmb3JtO1xyXG4gICAgICAgIHRoaXMubG9hZEFwcGxpY2F0aW9uVXNlclRlcm1zKHRoaXMucHYpO1xyXG4gICAgICB9IGVsc2UgaWYgKHRoaXMubmF2Zm9ybSA9PSBcInNldFBhc3N3b3JkRm9ybVwiKSB7XHJcbiAgICAgICAgdGhpcy5hZGRGcm1ObWUgPSB0aGlzLm5hdmZvcm07XHJcbiAgICAgICAgdGhpcy5sb2FkVXNlclBhc3N3b3JkKCk7XHJcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5uYXZmb3JtID09IFwibGVkZ2VyQmFua0RldGFpbHNcIikge1xyXG4gICAgICAgIHRoaXMuYWRkRnJtTm1lID0gdGhpcy5uYXZmb3JtO1xyXG4gICAgICAgIHRoaXMubG9hZGxlZGdlckJhbmtEZXRhaWxzKCk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5wYXJhT2JqW1wiZm9ybU5tZVwiXSA9IHRoaXMubmF2Zm9ybTtcclxuICAgICAgICB0aGlzLmdldFBhZ2VEZWZpbmF0aW9uKCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcbiAgZXhpdEJhbmtEdGxMaXN0ID0gW107XHJcbiAgbG9hZGxlZGdlckJhbmtEZXRhaWxzKCkge1xyXG4gICAgdGhpcy5zcGlubmVyU2VydmljZS5zaG93KCk7XHJcbiAgICBsZXQgcmVxT2JqID0ge307XHJcbiAgICByZXFPYmpbJ2Zvcm1ObWUnXSA9ICdsZWRnZXJCYW5rRGV0YWlscyc7XHJcbiAgICByZXFPYmpbJ2xlZGdlcl9pZG4nXSA9IHRoaXMucm91dGUuc25hcHNob3QucGFyYW1NYXAuZ2V0KCdzdWJ2Jyk7XHJcbiAgICB0aGlzLmhlYWRlclsnbWV0aG9kJ10gPSAnbG9hZGxlZGdlckJhbmtEZXRhaWwnO1xyXG4gICAgbGV0IG9wdGlvbnMgPSAoeyBoZWFkZXJzOiBuZXcgSHR0cEhlYWRlcnModGhpcy5oZWFkZXIpIH0pO1xyXG4gICAgdGhpcy5jcy5sb2FkKHJlcU9iaiwgb3B0aW9ucywgJ2FjY291bnRzL2FjY0xlZGdlcicpLnRoZW4oKHJlc3BvbnNlOiBhbnkpID0+IHtcclxuICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1cyA9PSAnU1VDQ0VTUycpIHtcclxuICAgICAgICB0aGlzLnNwaW5uZXJTZXJ2aWNlLmhpZGUoKTtcclxuICAgICAgICBsZXQgcmVzdWx0ID0gcmVzcG9uc2UucmVzdWx0O1xyXG4gICAgICAgIHRoaXMuZXhpdEJhbmtEdGxMaXN0ID0gcmVzdWx0LmJhbmtEdGxMaXN0IHx8IFtdO1xyXG4gICAgICAgIHRoaXMuZWRpdGJhbmtfZHRsX2lkbiA9IFwiXCI7XHJcbiAgICAgICAgdGhpcy5icmFuY2ggPSBcIlwiO1xyXG4gICAgICAgIHRoaXMuYWNjb3VudG5vID0gXCJcIjtcclxuICAgICAgICB0aGlzLnNlbGVjdEJyYW5jaEFkZHJlc3MgPSBcIlwiO1xyXG4gICAgICAgIHRoaXMuYmFuayA9IFwiXCI7XHJcbiAgICAgICAgdGhpcy5iYW5rTGlzdCA9IFtdO1xyXG4gICAgICAgIHRoaXMuYmFua0R0bExpc3QgPSBbXTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLnNwaW5uZXJTZXJ2aWNlLmhpZGUoKTtcclxuICAgICAgICB0aGlzLnRvYXN0ci5lcnJvcihyZXNwb25zZS5tZXNzYWdlKVxyXG4gICAgICB9XHJcbiAgICB9KS5jYXRjaCgoZXJyOiBhbnkpID0+IHtcclxuICAgICAgdGhpcy5zcGlubmVyU2VydmljZS5oaWRlKCk7XHJcbiAgICAgIHRoaXMudG9hc3RyLmVycm9yKGVyci5tZXNzYWdlKVxyXG4gICAgfSk7XHJcblxyXG4gIH1cclxuICBiYW5rTGlzdCA9IFtdO1xyXG4gIGJhbmtEdGxMaXN0ID0gW107XHJcbiAgYmFuaztcclxuICBicmFuY2ggPSBcIlwiO1xyXG4gIGFjY291bnRubztcclxuICBhY2NvdW50VHlwZSA9IFwic2F2aW5nc1wiXHJcbiAgbGVkZ2VyQmFua0RldGFpbHMoc3RyKSB7XHJcbiAgICB0aGlzLnNwaW5uZXJTZXJ2aWNlLnNob3coKTtcclxuICAgIGxldCByZXFPYmogPSB7fTtcclxuICAgIHJlcU9ialsnZm9ybU5tZSddID0gJ2xlZGdlckJhbmtEZXRhaWxzJztcclxuICAgIHJlcU9ialsnbGlrZVN0ciddID0gc3RyO1xyXG4gICAgdGhpcy5oZWFkZXJbJ21ldGhvZCddID0gJ2xvYWRQYXJ0eUJhbmsnO1xyXG4gICAgbGV0IG9wdGlvbnMgPSAoeyBoZWFkZXJzOiBuZXcgSHR0cEhlYWRlcnModGhpcy5oZWFkZXIpIH0pO1xyXG4gICAgdGhpcy5jcy5sb2FkKHJlcU9iaiwgb3B0aW9ucywgJ2FjY291bnRzL2FjY0xlZGdlcicpLnRoZW4oKHJlc3BvbnNlOiBhbnkpID0+IHtcclxuICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1cyA9PSAnU1VDQ0VTUycpIHtcclxuICAgICAgICB0aGlzLnNwaW5uZXJTZXJ2aWNlLmhpZGUoKTtcclxuICAgICAgICBsZXQgcmVzdWx0ID0gcmVzcG9uc2UucmVzdWx0O1xyXG4gICAgICAgIHRoaXMuYmFua0xpc3QgPSByZXN1bHQuYmFua0xpc3QubWFwKG9wdGlvbiA9PiAoe1xyXG4gICAgICAgICAgdmFsdWU6IG9wdGlvbixcclxuICAgICAgICAgIGxhYmVsOiBvcHRpb25cclxuICAgICAgICB9KSk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5zcGlubmVyU2VydmljZS5oaWRlKCk7XHJcbiAgICAgICAgdGhpcy50b2FzdHIuZXJyb3IocmVzcG9uc2UubWVzc2FnZSlcclxuICAgICAgfVxyXG4gICAgfSkuY2F0Y2goKGVycjogYW55KSA9PiB7XHJcbiAgICAgIHRoaXMuc3Bpbm5lclNlcnZpY2UuaGlkZSgpO1xyXG4gICAgICB0aGlzLnRvYXN0ci5lcnJvcihlcnIubWVzc2FnZSlcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgZ2V0QmFua0JyYW5jaChiYW5rKSB7XHJcbiAgICB0aGlzLmJyYW5jaCA9IFwiXCI7XHJcbiAgICB0aGlzLnNlbGVjdEJyYW5jaEFkZHJlc3MgPSBcIlwiO1xyXG4gICAgdGhpcy5zZWxlY3RJZnNjID0gXCJcIjtcclxuICAgIHRoaXMuc3Bpbm5lclNlcnZpY2Uuc2hvdygpO1xyXG4gICAgbGV0IHJlcU9iaiA9IHt9O1xyXG4gICAgcmVxT2JqWydmb3JtTm1lJ10gPSAnbGVkZ2VyQmFua0RldGFpbHMnO1xyXG4gICAgcmVxT2JqWydiYW5rTm1lJ10gPSBiYW5rO1xyXG4gICAgdGhpcy5oZWFkZXJbJ21ldGhvZCddID0gJ2dldFBhcnR5QmFua0R0bCc7XHJcbiAgICBsZXQgb3B0aW9ucyA9ICh7IGhlYWRlcnM6IG5ldyBIdHRwSGVhZGVycyh0aGlzLmhlYWRlcikgfSk7XHJcbiAgICB0aGlzLmNzLmxvYWQocmVxT2JqLCBvcHRpb25zLCAnYWNjb3VudHMvYWNjTGVkZ2VyJykudGhlbigocmVzcG9uc2U6IGFueSkgPT4ge1xyXG4gICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzID09ICdTVUNDRVNTJykge1xyXG4gICAgICAgIHRoaXMuc3Bpbm5lclNlcnZpY2UuaGlkZSgpO1xyXG4gICAgICAgIGxldCByZXN1bHQgPSByZXNwb25zZS5yZXN1bHQ7XHJcbiAgICAgICAgdGhpcy5iYW5rRHRsTGlzdCA9IHJlc3VsdC5iYW5rRHRsTGlzdCB8fCBbXTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLnNwaW5uZXJTZXJ2aWNlLmhpZGUoKTtcclxuICAgICAgICB0aGlzLnRvYXN0ci5lcnJvcihyZXNwb25zZS5tZXNzYWdlKVxyXG4gICAgICB9XHJcbiAgICB9KS5jYXRjaCgoZXJyOiBhbnkpID0+IHtcclxuICAgICAgdGhpcy5zcGlubmVyU2VydmljZS5oaWRlKCk7XHJcbiAgICAgIHRoaXMudG9hc3RyLmVycm9yKGVyci5tZXNzYWdlKVxyXG4gICAgfSk7XHJcblxyXG4gIH1cclxuICBzZWxlY3RCcmFuY2hEdGwgPSB7fTtcclxuICBzZWxlY3RCcmFuY2hBZGRyZXNzID0gXCJcIjtcclxuICBzZWxlY3RJZnNjID0gXCJcIjtcclxuICBzZWxlY3RCcmFuY2goYnJhbmNoKSB7XHJcbiAgICB0aGlzLnNlbGVjdEJyYW5jaEFkZHJlc3MgPSBcIlwiO1xyXG4gICAgdGhpcy5zZWxlY3RCcmFuY2hEdGwgPSB0aGlzLmJhbmtEdGxMaXN0LmZpbmQoeCA9PiB4Lm5tZV9pZG4gPT0gYnJhbmNoKSB8fCAnJztcclxuICAgIGxldCBhZGRyZXNzID0gdGhpcy5zZWxlY3RCcmFuY2hEdGxbJ2FkZHJlc3MnXSB8fCBbXTtcclxuICAgIGlmIChhZGRyZXNzLmxlbmd0aCA+IDApIHtcclxuICAgICAgbGV0IGFkZHJlc3NEdGwgPSBhZGRyZXNzWzBdO1xyXG4gICAgICBsZXQgYXJlYSA9IGFkZHJlc3NEdGxbJ2FyZWEnXSB8fCBcIlwiO1xyXG4gICAgICBpZiAoYXJlYSA9PSBcIm51bGxcIilcclxuICAgICAgICBhcmVhID0gXCJcIjtcclxuICAgICAgbGV0IHN0cmVldCA9IGFkZHJlc3NEdGxbJ3N0cmVldCddIHx8IFwiXCI7XHJcbiAgICAgIGlmIChzdHJlZXQgPT0gXCJudWxsXCIpXHJcbiAgICAgICAgc3RyZWV0ID0gXCJcIjtcclxuICAgICAgbGV0IHVuaXRfbm8gPSBhZGRyZXNzRHRsWyd1bml0X25vJ10gfHwgXCJcIjtcclxuICAgICAgaWYgKHVuaXRfbm8gPT0gXCJudWxsXCIpXHJcbiAgICAgICAgdW5pdF9ubyA9IFwiXCI7XHJcbiAgICAgIGxldCBidWlsZGluZyA9IGFkZHJlc3NEdGxbJ2J1aWxkaW5nJ10gfHwgXCJcIjtcclxuICAgICAgaWYgKGJ1aWxkaW5nID09IFwibnVsbFwiKVxyXG4gICAgICAgIGJ1aWxkaW5nID0gXCJcIjtcclxuICAgICAgbGV0IGxhbmRtYXJrID0gYWRkcmVzc0R0bFsnbGFuZG1hcmsnXSB8fCBcIlwiO1xyXG4gICAgICBpZiAobGFuZG1hcmsgPT0gXCJudWxsXCIpXHJcbiAgICAgICAgbGFuZG1hcmsgPSBcIlwiO1xyXG4gICAgICBsZXQgemlwID0gYWRkcmVzc0R0bFsnemlwJ10gfHwgXCJcIjtcclxuICAgICAgaWYgKHppcCA9PSBcIm51bGxcIilcclxuICAgICAgICB6aXAgPSBcIlwiO1xyXG4gICAgICBsZXQgY2l0eV9ubSA9IGFkZHJlc3NEdGxbJ2NpdHlfbm0nXSB8fCBcIlwiO1xyXG4gICAgICBpZiAoY2l0eV9ubSA9PSBcIm51bGxcIilcclxuICAgICAgICBjaXR5X25tID0gXCJcIjtcclxuICAgICAgbGV0IGNvdW50cnlfbm0gPSBhZGRyZXNzRHRsWydjb3VudHJ5X25tJ10gfHwgXCJcIjtcclxuICAgICAgaWYgKGNvdW50cnlfbm0gPT0gXCJudWxsXCIpXHJcbiAgICAgICAgY291bnRyeV9ubSA9IFwiXCI7XHJcbiAgICAgIGxldCBzdGF0ZV9ubSA9IGFkZHJlc3NEdGxbJ3N0YXRlX25tJ10gfHwgXCJcIjtcclxuICAgICAgaWYgKHN0YXRlX25tID09IFwibnVsbFwiKVxyXG4gICAgICAgIHN0YXRlX25tID0gXCJcIjtcclxuICAgICAgdGhpcy5zZWxlY3RJZnNjID0gdGhpcy5zZWxlY3RCcmFuY2hEdGxbJ2F0dHInXVsnaWZzYyddO1xyXG4gICAgICB0aGlzLnNlbGVjdEJyYW5jaEFkZHJlc3MgPSB1bml0X25vICsgXCIgXCIgKyBidWlsZGluZyArIFwiIFwiICsgc3RyZWV0ICsgXCIgXCIgKyBhcmVhICsgXCIgXCIgKyBsYW5kbWFyayArIFwiIFwiICsgY2l0eV9ubSArIFwiIFwiICsgc3RhdGVfbm0gKyBcIiBcIiArIHppcFxyXG5cclxuICAgIH1cclxuXHJcbiAgfVxyXG5cclxuICBsb2FkTGVkZ2VyQmFuaygpIHtcclxuXHJcbiAgfVxyXG4gIGVkaXRiYW5rX2R0bF9pZG4gPSBcIlwiO1xyXG4gIGxvYWRFZGl0QmFua0R0bChiYW5rZHRsKSB7XHJcbiAgICBkZWJ1Z2dlclxyXG4gICAgbGV0IGJhbmtOYW1lID0gYmFua2R0bC5iYW5rbmFtZTtcclxuICAgIHRoaXMuYmFua0xpc3QgPSBbe1xyXG4gICAgICB2YWx1ZTogYmFua05hbWUsXHJcbiAgICAgIGxhYmVsOiBiYW5rTmFtZVxyXG4gICAgfV07XHJcbiAgICB0aGlzLmJhbmsgPSBiYW5rTmFtZTtcclxuICAgIHRoaXMuZ2V0QmFua0JyYW5jaChiYW5rTmFtZSk7XHJcbiAgICB0aGlzLmVkaXRiYW5rX2R0bF9pZG4gPSBiYW5rZHRsLmJhbmtkdGxJZG47XHJcbiAgICB0aGlzLmFjY291bnRUeXBlID0gYmFua2R0bC5hY2NvdW50VHlwZTtcclxuICAgIHRoaXMuYWNjb3VudG5vID0gYmFua2R0bC5hY2NvdW50Tm87XHJcbiAgICB0aGlzLnNlbGVjdEJyYW5jaEFkZHJlc3MgPSBiYW5rZHRsLmFkZHJlc3M7XHJcbiAgICB0aGlzLnNlbGVjdElmc2MgPSBiYW5rZHRsLmlmc2M7XHJcbiAgICB0aGlzLmJyYW5jaCA9IGJhbmtkdGwuYmFua1JlZklkbjtcclxuICB9XHJcbiAgU2F2ZUxlZGdlckJhbmsoKSB7XHJcbiAgICB0aGlzLnNwaW5uZXJTZXJ2aWNlLnNob3coKTtcclxuICAgIGxldCByZXFPYmogPSB7fTtcclxuICAgIHJlcU9ialsnZm9ybU5tZSddID0gJ2xlZGdlckJhbmtEZXRhaWxzJztcclxuICAgIHJlcU9ialsnbGVkZ2VyX2lkbiddID0gdGhpcy5yb3V0ZS5zbmFwc2hvdC5wYXJhbU1hcC5nZXQoJ3N1YnYnKTtcclxuICAgIHJlcU9ialsnYmFua19yZWZfaWRuJ10gPSB0aGlzLmJyYW5jaDtcclxuICAgIHJlcU9ialsnYWNjb3VudF90eXBlJ10gPSB0aGlzLmFjY291bnRUeXBlO1xyXG4gICAgcmVxT2JqWydhY2NvdW50X25vJ10gPSB0aGlzLmFjY291bnRubztcclxuICAgIGlmICh0aGlzLmVkaXRiYW5rX2R0bF9pZG4gPT0gJycpXHJcbiAgICAgIHJlcU9ialsnYWN0aW9uJ10gPSAnYWRkJztcclxuICAgIGVsc2Uge1xyXG4gICAgICByZXFPYmpbJ2FjdGlvbiddID0gJ2VkaXQnO1xyXG4gICAgICByZXFPYmpbJ2JhbmtfZHRsX2lkbiddID0gdGhpcy5lZGl0YmFua19kdGxfaWRuO1xyXG4gICAgfVxyXG4gICAgdGhpcy5oZWFkZXJbJ21ldGhvZCddID0gJ3NhdmVCYW5rRHRsSW50b0FjY0xlZGdlcic7XHJcbiAgICBjb25zb2xlLmxvZyhKU09OLnN0cmluZ2lmeShyZXFPYmopKTtcclxuICAgIGxldCBvcHRpb25zID0gKHsgaGVhZGVyczogbmV3IEh0dHBIZWFkZXJzKHRoaXMuaGVhZGVyKSB9KTtcclxuICAgIHRoaXMuc3Muc3ViRmdldERhdGEocmVxT2JqLCBvcHRpb25zLCAnYWNjb3VudHMvYWNjTGVkZ2VyJykudGhlbigocmVzcG9uc2U6IGFueSkgPT4ge1xyXG4gICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzID09ICdTVUNDRVNTJykge1xyXG4gICAgICAgIGxldCByZXN1bHQgPSByZXNwb25zZS5yZXN1bHQ7XHJcbiAgICAgICAgdGhpcy5leGl0QmFua0R0bExpc3QgPSByZXN1bHQuYmFua0R0bExpc3QgfHwgW107XHJcbiAgICAgICAgdGhpcy5icmFuY2ggPSBcIlwiO1xyXG4gICAgICAgIHRoaXMuYWNjb3VudG5vID0gXCJcIjtcclxuICAgICAgICB0aGlzLnNlbGVjdEJyYW5jaEFkZHJlc3MgPSBcIlwiO1xyXG4gICAgICAgIHRoaXMuYmFuayA9IFwiXCI7XHJcbiAgICAgICAgdGhpcy5iYW5rTGlzdCA9IFtdO1xyXG4gICAgICAgIHRoaXMuYmFua0R0bExpc3QgPSBbXTtcclxuICAgICAgICB0aGlzLmVkaXRiYW5rX2R0bF9pZG4gPSBcIlwiO1xyXG4gICAgICAgIHRoaXMuc3Bpbm5lclNlcnZpY2UuaGlkZSgpO1xyXG4gICAgICAgIGlmICh0aGlzLmVkaXRiYW5rX2R0bF9pZG4gPT0gXCJcIilcclxuICAgICAgICAgIHRoaXMudG9hc3RyLnN1Y2Nlc3MoXCJOZXcgQmFuayBhZGQgc3VjY2Vzc2Z1bGx5XCIpO1xyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy50b2FzdHIuc3VjY2VzcyhcIkJhbmsgZWRpdCBzdWNjZXNzZnVseVwiKTtcclxuICAgICAgICAgIHRoaXMuZWRpdGJhbmtfZHRsX2lkbiA9IFwiXCI7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLnNwaW5uZXJTZXJ2aWNlLmhpZGUoKTtcclxuICAgICAgICB0aGlzLnRvYXN0ci5lcnJvcihyZXNwb25zZS5tZXNzYWdlKVxyXG4gICAgICB9XHJcbiAgICB9KS5jYXRjaCgoZXJyOiBhbnkpID0+IHtcclxuICAgICAgdGhpcy5zcGlubmVyU2VydmljZS5oaWRlKCk7XHJcbiAgICAgIHRoaXMudG9hc3RyLmVycm9yKGVyci5tZXNzYWdlKVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBkZWxldEJhbmtJZG4gPSBcIlwiO1xyXG4gIENvbmZpcm1EZWxldGVMZWRnZXJCYW5rKGJhbmtkdGwpIHtcclxuICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdibmtkZWxldGVtb2RhbGJ0bicpLmNsaWNrKCk7XHJcbiAgICB0aGlzLmRlbGV0QmFua0lkbiA9IGJhbmtkdGwuYmFua2R0bElkbjtcclxuICB9XHJcblxyXG4gIERlbGV0ZUxlZGdlckJhbmsoKSB7XHJcbiAgICB0aGlzLnNwaW5uZXJTZXJ2aWNlLnNob3coKTtcclxuICAgIGxldCByZXFPYmogPSB7fTtcclxuICAgIHJlcU9ialsnZm9ybU5tZSddID0gJ2xlZGdlckJhbmtEZXRhaWxzJztcclxuICAgIHJlcU9ialsnbGVkZ2VyX2lkbiddID0gdGhpcy5yb3V0ZS5zbmFwc2hvdC5wYXJhbU1hcC5nZXQoJ3N1YnYnKTtcclxuICAgIHJlcU9ialsnYWN0aW9uJ10gPSAnZGVsZXRlJztcclxuICAgIHJlcU9ialsnYmFua19kdGxfaWRuJ10gPSB0aGlzLmRlbGV0QmFua0lkbjtcclxuXHJcbiAgICB0aGlzLmhlYWRlclsnbWV0aG9kJ10gPSAnc2F2ZUJhbmtEdGxJbnRvQWNjTGVkZ2VyJztcclxuICAgIGNvbnNvbGUubG9nKEpTT04uc3RyaW5naWZ5KHJlcU9iaikpO1xyXG4gICAgbGV0IG9wdGlvbnMgPSAoeyBoZWFkZXJzOiBuZXcgSHR0cEhlYWRlcnModGhpcy5oZWFkZXIpIH0pO1xyXG4gICAgdGhpcy5zcy5zdWJGZ2V0RGF0YShyZXFPYmosIG9wdGlvbnMsICdhY2NvdW50cy9hY2NMZWRnZXInKS50aGVuKChyZXNwb25zZTogYW55KSA9PiB7XHJcbiAgICAgIGlmIChyZXNwb25zZS5zdGF0dXMgPT0gJ1NVQ0NFU1MnKSB7XHJcbiAgICAgICAgbGV0IHJlc3VsdCA9IHJlc3BvbnNlLnJlc3VsdDtcclxuICAgICAgICB0aGlzLmV4aXRCYW5rRHRsTGlzdCA9IHJlc3VsdC5iYW5rRHRsTGlzdCB8fCBbXTtcclxuICAgICAgICB0aGlzLmRlbGV0QmFua0lkbiA9IFwiXCI7XHJcbiAgICAgICAgdGhpcy5zcGlubmVyU2VydmljZS5oaWRlKCk7XHJcbiAgICAgICAgdGhpcy50b2FzdHIuc3VjY2VzcyhcIkJhbmsgRGVsZXRlIHN1Y2Nlc3NmdWxseVwiKTtcclxuXHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5zcGlubmVyU2VydmljZS5oaWRlKCk7XHJcbiAgICAgICAgdGhpcy50b2FzdHIuZXJyb3IocmVzcG9uc2UubWVzc2FnZSk7XHJcbiAgICAgIH1cclxuICAgIH0pLmNhdGNoKChlcnI6IGFueSkgPT4ge1xyXG4gICAgICB0aGlzLnNwaW5uZXJTZXJ2aWNlLmhpZGUoKTtcclxuICAgICAgdGhpcy50b2FzdHIuZXJyb3IoZXJyLm1lc3NhZ2UpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBnZXRMZWRnZXJBdHRyKGZvcm1uYW1lLCBtZGwsIHR5cGUpIHtcclxuICAgIGRlYnVnZ2VyO1xyXG4gICAgbGV0IHJlcU9iaiA9IHt9O1xyXG4gICAgcmVxT2JqW1wiZm9ybU5tZVwiXSA9IGZvcm1uYW1lO1xyXG4gICAgcmVxT2JqW1wibGVkZ2VyX2lkblwiXSA9IHRoaXMucm91dGUuc25hcHNob3QucGFyYW1NYXAuZ2V0KFwic3VidlwiKTtcclxuICAgIHJlcU9ialsnbWRsTGlzdCddID0gbWRsO1xyXG4gICAgcmVxT2JqWyd0eXBlJ10gPSB0eXBlO1xyXG4gICAgdGhpcy5oZWFkZXJbXCJtZXRob2RcIl0gPSBcImxvYWRMZWRnZXJBdHRyXCI7XHJcbiAgICBjb25zb2xlLmxvZyhKU09OLnN0cmluZ2lmeShyZXFPYmopKTtcclxuICAgIGxldCBvcHRpb25zID0gKHsgaGVhZGVyczogbmV3IEh0dHBIZWFkZXJzKHRoaXMuaGVhZGVyKSB9KTtcclxuICAgIHRoaXMuc3Muc3ViRmdldERhdGEocmVxT2JqLCBvcHRpb25zLCBcImFjY291bnRzL2FjY0xlZGdlclwiKVxyXG4gICAgICAudGhlbigocmVzcG9uc2U6IGFueSkgPT4ge1xyXG4gICAgICAgIGlmIChyZXNwb25zZS5zdGF0dXMgPT0gXCJTVUNDRVNTXCIpIHtcclxuICAgICAgICAgIHRoaXMucGFnZUluZm8gPSByZXNwb25zZS5wYWdlSW5mbyB8fCB7fTtcclxuICAgICAgICAgIHRoaXMudWlHcnBMaXN0ID0gcmVzcG9uc2UudWlHcnBMaXN0O1xyXG4gICAgICAgICAgdGhpcy51aUdycExpc3REdGwgPSByZXNwb25zZS51aUdycExpc3REdGw7XHJcbiAgICAgICAgICB0aGlzLmF0dHJDTGlzdER0bCA9IHJlc3BvbnNlLmF0dHJDTGlzdER0bDtcclxuICAgICAgICAgIHRoaXMuYXR0clFMaXN0RHRsID0gcmVzcG9uc2UuYXR0clFMaXN0RHRsO1xyXG5cclxuICAgICAgICAgIHRoaXMuZGF0YUR0bCA9IHJlc3BvbnNlLmRhdGFEdGw7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMuc3Bpbm5lclNlcnZpY2UuaGlkZSgpO1xyXG4gICAgICAgICAgdGhpcy50b2FzdHIuZXJyb3IocmVzcG9uc2UubWVzc2FnZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KVxyXG4gICAgICAuY2F0Y2goKGVycjogYW55KSA9PiB7XHJcbiAgICAgICAgdGhpcy5zcGlubmVyU2VydmljZS5oaWRlKCk7XHJcbiAgICAgICAgdGhpcy50b2FzdHIuZXJyb3IoZXJyLm1lc3NhZ2UpO1xyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIGdldEpvdXJuYWxBdHRyKGZvcm1uYW1lLCBtZGwsIHR5cGUpIHtcclxuICAgIGRlYnVnZ2VyO1xyXG4gICAgbGV0IHJlcU9iaiA9IHt9O1xyXG4gICAgcmVxT2JqW1wiZm9ybU5tZVwiXSA9IGZvcm1uYW1lO1xyXG4gICAgcmVxT2JqW1wiam91cm5hbF9pZG5cIl0gPSB0aGlzLnJvdXRlLnNuYXBzaG90LnBhcmFtTWFwLmdldChcInN1YnZcIik7XHJcbiAgICByZXFPYmpbJ21kbExpc3QnXSA9IG1kbDtcclxuICAgIHJlcU9ialsndHlwZSddID0gdHlwZTtcclxuICAgIHRoaXMuaGVhZGVyW1wibWV0aG9kXCJdID0gXCJsb2FkSm91cm5hbEF0dHJcIjtcclxuICAgIGNvbnNvbGUubG9nKEpTT04uc3RyaW5naWZ5KHJlcU9iaikpO1xyXG4gICAgbGV0IG9wdGlvbnMgPSAoeyBoZWFkZXJzOiBuZXcgSHR0cEhlYWRlcnModGhpcy5oZWFkZXIpIH0pO1xyXG4gICAgdGhpcy5zcy5zdWJGZ2V0RGF0YShyZXFPYmosIG9wdGlvbnMsIFwiYWNjb3VudHMvYWNjTGVkZ2VyXCIpXHJcbiAgICAgIC50aGVuKChyZXNwb25zZTogYW55KSA9PiB7XHJcbiAgICAgICAgY29uc29sZS5sb2cocmVzcG9uc2UpO1xyXG4gICAgICAgIGlmIChyZXNwb25zZS5zdGF0dXMgPT0gXCJTVUNDRVNTXCIpIHtcclxuICAgICAgICAgIHRoaXMucGFnZUluZm8gPSByZXNwb25zZS5wYWdlSW5mbyB8fCB7fTtcclxuICAgICAgICAgIHRoaXMudWlHcnBMaXN0ID0gcmVzcG9uc2UudWlHcnBMaXN0O1xyXG4gICAgICAgICAgdGhpcy51aUdycExpc3REdGwgPSByZXNwb25zZS51aUdycExpc3REdGwgfHwge307XHJcbiAgICAgICAgICBsZXQgZGF0YXR5cGVsaXN0ID0gdGhpcy51aUdycExpc3REdGxbXCJiYXNpYyNUXCJdIHx8IFtdO1xyXG4gICAgICAgICAgbGV0IGF0dHJsaXN0ID0gdGhpcy51aUdycExpc3REdGxbXCJiYXNpYyNWXCJdIHx8IFtdO1xyXG4gICAgICAgICAgdGhpcy5hdHRyQ0xpc3REdGwgPSByZXNwb25zZS5hdHRyQ0xpc3REdGw7XHJcbiAgICAgICAgICB0aGlzLmF0dHJRTGlzdER0bCA9IHJlc3BvbnNlLmF0dHJRTGlzdER0bDtcclxuICAgICAgICAgIHRoaXMuZGF0YUR0bCA9IHJlc3BvbnNlLmRhdGFEdGwgfHwge307XHJcbiAgICAgICAgICB0aGlzLmNvbnRhY3ROYW1lID0gdGhpcy5kYXRhRHRsW1wiY29udGFjdE5hbWVcIl0gfHwgXCJcIjtcclxuICAgICAgICAgIGF0dHJsaXN0LmZvckVhY2goKGtleSwgaW5kZXgpID0+IHtcclxuICAgICAgICAgICAgbGV0IHR5cGUgPSBkYXRhdHlwZWxpc3RbaW5kZXhdO1xyXG4gICAgICAgICAgICBpZiAodHlwZSA9PSAnc2EnKSB7XHJcbiAgICAgICAgICAgICAgbGV0IGF0dHJWYWwgPSB0aGlzLmRhdGFEdGxba2V5XSB8fCAnJztcclxuICAgICAgICAgICAgICBsZXQgbGlzdCA9IFt7IHZhbHVlOiBhdHRyVmFsLCBsYWJlbDogYXR0clZhbCB9XTtcclxuICAgICAgICAgICAgICB0aGlzLnNxbEFycmF5W2tleV0gPSBsaXN0O1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgICB0aGlzLnNwaW5uZXJTZXJ2aWNlLmhpZGUoKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5zcGlubmVyU2VydmljZS5oaWRlKCk7XHJcbiAgICAgICAgICB0aGlzLnRvYXN0ci5lcnJvcihyZXNwb25zZS5tZXNzYWdlKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pXHJcbiAgICAgIC5jYXRjaCgoZXJyOiBhbnkpID0+IHtcclxuICAgICAgICB0aGlzLnNwaW5uZXJTZXJ2aWNlLmhpZGUoKTtcclxuICAgICAgICB0aGlzLnRvYXN0ci5lcnJvcihlcnIubWVzc2FnZSk7XHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgbG9hZFVzZXJQYXNzd29yZCgpIHtcclxuICAgIHRoaXMuc3Bpbm5lclNlcnZpY2Uuc2hvdygpO1xyXG4gICAgbGV0IHJlcU9iaiA9IHt9O1xyXG4gICAgcmVxT2JqW1wiZm9ybU5tZVwiXSA9IFwiYXBwbGljYXRpb25BY2Nlc3NNYXN0ZXJcIjtcclxuICAgIHJlcU9ialtcIm5tZUlkblwiXSA9IHRoaXMucm91dGUuc25hcHNob3QucGFyYW1NYXAuZ2V0KFwic3VidlwiKTtcclxuICAgIHRoaXMuaGVhZGVyW1wibWV0aG9kXCJdID0gXCJsb2FkQ2hhbmdlUGFzc1wiO1xyXG4gICAgdGhpcy5oZWFkZXJbXCJzb3VyY2VcIl0gPSBcInFzXCI7XHJcbiAgICBsZXQgb3B0aW9ucyA9ICh7IGhlYWRlcnM6IG5ldyBIdHRwSGVhZGVycyh0aGlzLmhlYWRlcikgfSk7XHJcbiAgICB0aGlzLnNzXHJcbiAgICAgIC5zdWJGZ2V0RGF0YShyZXFPYmosIG9wdGlvbnMsIFwiY29udGFjdC9sb2FkQ29udGFjdFwiKVxyXG4gICAgICAudGhlbigocmVzcG9uc2U6IGFueSkgPT4ge1xyXG4gICAgICAgIGlmIChyZXNwb25zZS5zdGF0dXMgPT0gXCJTVUNDRVNTXCIpIHtcclxuICAgICAgICAgIHRoaXMuc3Bpbm5lclNlcnZpY2UuaGlkZSgpO1xyXG4gICAgICAgICAgbGV0IHJlc3VsdCA9IHJlc3BvbnNlLnJlc3VsdDtcclxuICAgICAgICAgIHRoaXMudXNlckRldGFpbHMgPSByZXN1bHQudXNlckRldGFpbHM7XHJcbiAgICAgICAgICB0aGlzLnBhZ2VEZWZpbmF0aW9uUHN3ZENuZyA9IHJlc3VsdC5wYWdlRGVmaW5hdGlvbjtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5zcGlubmVyU2VydmljZS5oaWRlKCk7XHJcbiAgICAgICAgICB0aGlzLnRvYXN0ci5lcnJvcihyZXNwb25zZS5tZXNzYWdlKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pXHJcbiAgICAgIC5jYXRjaCgoZXJyOiBhbnkpID0+IHtcclxuICAgICAgICB0aGlzLnNwaW5uZXJTZXJ2aWNlLmhpZGUoKTtcclxuICAgICAgICB0aGlzLnRvYXN0ci5lcnJvcihlcnIubWVzc2FnZSk7XHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgY2hhbmdlUHN3ZChlLCB1c2VySWRuKSB7XHJcbiAgICB0aGlzLnNwaW5uZXJTZXJ2aWNlLnNob3coKTtcclxuICAgIGxldCByZXFPYmogPSB7fTtcclxuICAgIHJlcU9ialtcImZvcm1ObWVcIl0gPSBcInNldFBhc3N3b3JkRm9ybVwiO1xyXG4gICAgcmVxT2JqW1widXNlcklkblwiXSA9IHVzZXJJZG47XHJcbiAgICByZXFPYmpbXCJwYXNzd29yZFwiXSA9IGUudGFyZ2V0LnZhbHVlO1xyXG4gICAgdGhpcy5oZWFkZXJbXCJtZXRob2RcIl0gPSBcImNoYW5nZVBhc3N3b3JkXCI7XHJcbiAgICB0aGlzLmhlYWRlcltcInNvdXJjZVwiXSA9IFwicXNcIjtcclxuICAgIGNvbnNvbGUubG9nKEpTT04uc3RyaW5naWZ5KHJlcU9iaikpO1xyXG4gICAgbGV0IG9wdGlvbnMgPSAoeyBoZWFkZXJzOiBuZXcgSHR0cEhlYWRlcnModGhpcy5oZWFkZXIpIH0pO1xyXG4gICAgdGhpcy5zc1xyXG4gICAgICAuU2F2ZShyZXFPYmosIG9wdGlvbnMsIFwiY29udGFjdC9sb2FkQ29udGFjdFwiKVxyXG4gICAgICAudGhlbigocmVzcG9uc2U6IGFueSkgPT4ge1xyXG4gICAgICAgIGlmIChyZXNwb25zZS5zdGF0dXMgPT0gXCJTVUNDRVNTXCIpIHtcclxuICAgICAgICAgIGxldCByZXN1bHQgPSByZXNwb25zZS5yZXN1bHQ7XHJcbiAgICAgICAgICB0aGlzLnVzZXJEZXRhaWxzID0gcmVzdWx0LnVzZXJEZXRhaWxzO1xyXG4gICAgICAgICAgdGhpcy5wYWdlRGVmaW5hdGlvblBzd2RDbmcgPSByZXN1bHQucGFnZURlZmluYXRpb247XHJcbiAgICAgICAgICB0aGlzLnRvYXN0ci5zdWNjZXNzKHJlc3BvbnNlLm1lc3NhZ2UpO1xyXG4gICAgICAgICAgdGhpcy5sb2FkVXNlclBhc3N3b3JkKCk7XHJcbiAgICAgICAgICB0aGlzLnNwaW5uZXJTZXJ2aWNlLmhpZGUoKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5zcGlubmVyU2VydmljZS5oaWRlKCk7XHJcbiAgICAgICAgICB0aGlzLnRvYXN0ci5lcnJvcihyZXNwb25zZS5tZXNzYWdlKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pXHJcbiAgICAgIC5jYXRjaCgoZXJyOiBhbnkpID0+IHtcclxuICAgICAgICB0aGlzLnNwaW5uZXJTZXJ2aWNlLmhpZGUoKTtcclxuICAgICAgICB0aGlzLnRvYXN0ci5lcnJvcihlcnIubWVzc2FnZSk7XHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgY2hhbmdlUGFzc3dvcmQob2JqKSB7XHJcbiAgICB0aGlzLnNwaW5uZXJTZXJ2aWNlLnNob3coKTtcclxuICAgIGxldCByZXFPYmogPSB7fTtcclxuICAgIHJlcU9ialtcImZvcm1ObWVcIl0gPSBcInNldFBhc3N3b3JkRm9ybVwiO1xyXG4gICAgcmVxT2JqW1widXNlcklkblwiXSA9IG9iai51c2VySWRuO1xyXG4gICAgcmVxT2JqW1wicGFzc3dvcmRcIl0gPSBvYmoucGFzc3dvcmQ7XHJcbiAgICB0aGlzLmhlYWRlcltcIm1ldGhvZFwiXSA9IFwiY2hhbmdlUGFzc3dvcmRcIjtcclxuICAgIHRoaXMuaGVhZGVyW1wic291cmNlXCJdID0gXCJxc1wiO1xyXG4gICAgY29uc29sZS5sb2coSlNPTi5zdHJpbmdpZnkocmVxT2JqKSk7XHJcbiAgICBsZXQgb3B0aW9ucyA9ICh7IGhlYWRlcnM6IG5ldyBIdHRwSGVhZGVycyh0aGlzLmhlYWRlcikgfSk7XHJcbiAgICB0aGlzLnNzXHJcbiAgICAgIC5TYXZlKHJlcU9iaiwgb3B0aW9ucywgXCJjb250YWN0L2xvYWRDb250YWN0XCIpXHJcbiAgICAgIC50aGVuKChyZXNwb25zZTogYW55KSA9PiB7XHJcbiAgICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1cyA9PSBcIlNVQ0NFU1NcIikge1xyXG4gICAgICAgICAgbGV0IHJlc3VsdCA9IHJlc3BvbnNlLnJlc3VsdDtcclxuICAgICAgICAgIHRoaXMudXNlckRldGFpbHMgPSByZXN1bHQudXNlckRldGFpbHM7XHJcbiAgICAgICAgICB0aGlzLnBhZ2VEZWZpbmF0aW9uUHN3ZENuZyA9IHJlc3VsdC5wYWdlRGVmaW5hdGlvbjtcclxuICAgICAgICAgIHRoaXMudG9hc3RyLnN1Y2Nlc3MocmVzcG9uc2UubWVzc2FnZSk7XHJcbiAgICAgICAgICB0aGlzLmxvYWRVc2VyUGFzc3dvcmQoKTtcclxuICAgICAgICAgIHRoaXMuc3Bpbm5lclNlcnZpY2UuaGlkZSgpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLnNwaW5uZXJTZXJ2aWNlLmhpZGUoKTtcclxuICAgICAgICAgIHRoaXMudG9hc3RyLmVycm9yKHJlc3BvbnNlLm1lc3NhZ2UpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSlcclxuICAgICAgLmNhdGNoKChlcnI6IGFueSkgPT4ge1xyXG4gICAgICAgIHRoaXMuc3Bpbm5lclNlcnZpY2UuaGlkZSgpO1xyXG4gICAgICAgIHRoaXMudG9hc3RyLmVycm9yKGVyci5tZXNzYWdlKTtcclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuXHJcbiAgZ2JsT2JqO1xyXG4gIGV4aXRzaW5nVXNlckxpc3QgPSBbXTtcclxuICBsb2FkQXBwbGljYXRpb25Vc2VyVGVybXMobm1laWRuKSB7XHJcbiAgICB0aGlzLnNwaW5uZXJTZXJ2aWNlLnNob3coKTtcclxuICAgIGNvbnN0IHJlcU9iaiA9IHt9O1xyXG4gICAgcmVxT2JqW1wibm1lX2lkblwiXSA9IHRoaXMucm91dGUuc25hcHNob3QucGFyYW1NYXAuZ2V0KFwic3VidlwiKTtcclxuICAgIHJlcU9ialtcImZvcm1ObWVcIl0gPSBcImNvbnRhY3RTZWFyY2hGb3JtXCI7XHJcbiAgICB0aGlzLmhlYWRlcltcIm1ldGhvZFwiXSA9IFwibG9hZEFzc2lnbkFwcGxpY2F0aW9uVXNlcnRlcm1zXCI7XHJcbiAgIGNvbnN0IG9wdGlvbnMgPSAoeyBoZWFkZXJzOiBuZXcgSHR0cEhlYWRlcnModGhpcy5oZWFkZXIpIH0pO1xyXG4gICAgdGhpcy5jc1xyXG4gICAgICAubG9hZChyZXFPYmosIG9wdGlvbnMsIFwiY29udGFjdC9sb2FkQ29udGFjdFwiKVxyXG4gICAgICAudGhlbigocmVzcG9uc2U6IGFueSkgPT4ge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKHJlc3BvbnNlKTtcclxuICAgICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzID09IFwiU1VDQ0VTU1wiKSB7XHJcbiAgICAgICAgICBsZXQgcmVzdWx0ID0gcmVzcG9uc2UucmVzdWx0O1xyXG4gICAgICAgICAgdGhpcy5nYmxPYmogPSByZXN1bHQ7XHJcbiAgICAgICAgICB0aGlzLnRlcm1zTGlzdCA9IHJlc3VsdC50ZXJtc0xpc3Q7XHJcbiAgICAgICAgICBsZXQgYXBwbFVzZXJMaXN0ID0gcmVzdWx0LmFwcGxVc2VyTGlzdDtcclxuICAgICAgICAgIHRoaXMuZXhpdHNpbmdVc2VyTGlzdCA9IFtdO1xyXG4gICAgICAgICAgdGhpcy50ZXJtc0xpc3QuZm9yRWFjaChlbGVtZW50ID0+IHtcclxuICAgICAgICAgICAgbGV0IHVzZXJJZG5MaXN0ID0gZWxlbWVudC51c2VySWRuTGlzdCB8fCBbXTtcclxuICAgICAgICAgICAgdXNlcklkbkxpc3QuZm9yRWFjaCh1c2VySWRuID0+IHtcclxuICAgICAgICAgICAgICBpZiAodGhpcy5leGl0c2luZ1VzZXJMaXN0LmluZGV4T2YodXNlcklkbikgPT0gLTEpXHJcbiAgICAgICAgICAgICAgICB0aGlzLmV4aXRzaW5nVXNlckxpc3QucHVzaCh1c2VySWRuKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICAgIGRlYnVnZ2VyXHJcbiAgICAgICAgICBsZXQgcGVuZGluZ1VzZXJMaXN0ID0gW11cclxuICAgICAgICAgIGFwcGxVc2VyTGlzdC5mb3JFYWNoKGVsZW1lbnQgPT4ge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5leGl0c2luZ1VzZXJMaXN0LmluZGV4T2YoZWxlbWVudC5rKSA9PSAtMSlcclxuICAgICAgICAgICAgICBwZW5kaW5nVXNlckxpc3QucHVzaChlbGVtZW50KTtcclxuICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgIHRoaXMudGVybXNMaXN0LmZvckVhY2goZWxlbWVudCA9PiB7XHJcbiAgICAgICAgICAgIGxldCB1c2VySWRuTGlzdCA9IGVsZW1lbnQudXNlcklkbkxpc3QgfHwgW107XHJcbiAgICAgICAgICAgIGxldCBUZXJtVXNlckxpc3QgPSBwZW5kaW5nVXNlckxpc3QubWFwKG9wdGlvbiA9PiAoe1xyXG4gICAgICAgICAgICAgIHZhbHVlOiBvcHRpb24uayxcclxuICAgICAgICAgICAgICBsYWJlbDogb3B0aW9uLnZcclxuICAgICAgICAgICAgfSkpO1xyXG4gICAgICAgICAgICBpZiAodXNlcklkbkxpc3QubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgIGFwcGxVc2VyTGlzdC5mb3JFYWNoKGVsZW1lbnQgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKHVzZXJJZG5MaXN0LmluZGV4T2YoZWxlbWVudC5rKSAhPSAtMSkge1xyXG4gICAgICAgICAgICAgICAgICBUZXJtVXNlckxpc3QucHVzaCh7IFwidmFsdWVcIjogZWxlbWVudC5rLCBcImxhYmVsXCI6IGVsZW1lbnQudiB9KTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsZW1lbnQuVGVybVVzZXJMaXN0ID0gVGVybVVzZXJMaXN0O1xyXG5cclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgY29uc29sZS5sb2codGhpcy50ZXJtc0xpc3QpO1xyXG4gICAgICAgICAgLy8gIHRoaXMuYXBwbFVzZXJMaXN0ID0gcmVzdWx0LmFwcGxVc2VyTGlzdDtcclxuICAgICAgICAgIC8vICBsZXQgdGVtcGFyciA9IFtdO1xyXG4gICAgICAgICAgLy90aGlzLmV4aXRzaW5nVXNlcj1bXTtcclxuICAgICAgICAgIC8vIHRoaXMudGVybXNMaXN0LmZvckVhY2goZWxlbWVudCA9PiB7XHJcbiAgICAgICAgICAvLyBkZWJ1Z2dlclxyXG4gICAgICAgICAgLy8gZWxlbWVudC51c2VySWRuTGlzdC5mb3JFYWNoKGEgPT4ge1xyXG4gICAgICAgICAgLy8gICB0ZW1wYXJyLnB1c2goYS50b1N0cmluZygpKTtcclxuICAgICAgICAgIC8vICBpZih0aGlzLmV4aXRzaW5nVXNlci5pbmRleE9mKGEudG9TdHJpbmcoKSk9PS0xKVxyXG4gICAgICAgICAgLy8gIHRoaXMuZXhpdHNpbmdVc2VyLnB1c2goYS50b1N0cmluZygpKTtcclxuICAgICAgICAgIC8vIH0pO1xyXG4gICAgICAgICAgLy8gZWxlbWVudC51c2VySWRuTGlzdCA9IHRlbXBhcnI7XHJcbiAgICAgICAgICAvLyB0ZW1wYXJyID0gW107XHJcbiAgICAgICAgICAvLyAgZWxlbWVudC5zZWxlY3RlZFZhbHMgPSBbXTtcclxuICAgICAgICAgIC8vIH0pO1xyXG4gICAgICAgICAgLy8gbGV0IGFwcGxVc2VyTGlzdD1yZXN1bHQuYXBwbFVzZXJMaXN0O1xyXG4gICAgICAgICAgLy8gdGhpcy5hcHBsVXNlckxpc3Q9W11cclxuICAgICAgICAgIC8vIGFwcGxVc2VyTGlzdC5mb3JFYWNoKGVsZW1lbnQgPT4ge1xyXG4gICAgICAgICAgLy8gICBpZih0aGlzLmV4aXRzaW5nVXNlci5pbmRleE9mKGVsZW1lbnQuayk9PS0xKVxyXG4gICAgICAgICAgLy8gICB0aGlzLmFwcGxVc2VyTGlzdC5wdXNoKGVsZW1lbnQpO1xyXG4gICAgICAgICAgLy8gfSk7XHJcblxyXG5cclxuICAgICAgICAgIHRoaXMuYXBwbFVzZXJMaXN0ID0gdGhpcy5hcHBsVXNlckxpc3QubWFwKG9wdGlvbiA9PiAoe1xyXG4gICAgICAgICAgICB2YWx1ZTogb3B0aW9uLmssXHJcbiAgICAgICAgICAgIGxhYmVsOiBvcHRpb24udlxyXG4gICAgICAgICAgfSkpO1xyXG5cclxuICAgICAgICAgIGNvbnNvbGUubG9nKHRoaXMuYXBwbFVzZXJMaXN0KTtcclxuICAgICAgICAgIC8vIHNldFRpbWVvdXQoKCkgPT4ge1xyXG5cclxuICAgICAgICAgIC8vIH0sIDEwMDApO1xyXG5cclxuICAgICAgICAgIHRoaXMuc3Bpbm5lclNlcnZpY2UuaGlkZSgpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLnNwaW5uZXJTZXJ2aWNlLmhpZGUoKTtcclxuICAgICAgICAgIHRoaXMudG9hc3RyLmVycm9yKHJlc3BvbnNlLm1lc3NhZ2UpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSlcclxuICAgICAgLmNhdGNoKChlcnI6IGFueSkgPT4ge1xyXG4gICAgICAgIHRoaXMuc3Bpbm5lclNlcnZpY2UuaGlkZSgpO1xyXG4gICAgICAgIHRoaXMudG9hc3RyLmVycm9yKGVyci5tZXNzYWdlKTtcclxuICAgICAgfSk7XHJcbiAgfVxyXG4gIHNlbGVjdGVkUGVvcGxlMyA9IFtdO1xyXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcclxuICAgIGNvbnNvbGUubG9nKFwiaW4gdmlld2FmdGVyXCIpO1xyXG4gIH1cclxuXHJcbiAgbG9hZFN1Z2dkYXRhKHN0ciwgcGFnZV9pdGVtX2lkbiwgZm9ybV9maWVsZCkge1xyXG4gICAgaWYgKHN0ciA9PSB1bmRlZmluZWQgfHwgc3RyID09ICcnIHx8IHN0ci5sZW5ndGggPCAzKSByZXR1cm47XHJcbiAgICBsZXQgcmVxT2JqID0ge307XHJcbiAgICByZXFPYmpbXCJmb3JtTm1lXCJdID0gdGhpcy5yb3V0ZS5zbmFwc2hvdC5wYXJhbXNbXCJmcm1ubWVcIl0gfHwgJ2xvYWRTdWdnZXN0aW9uRGF0YSc7XHJcbiAgICByZXFPYmpbJ3BhZ2VfaXRlbV9pZG4nXSA9IHBhZ2VfaXRlbV9pZG47XHJcbiAgICByZXFPYmpbJ2xpa2VTdHInXSA9IHN0cjtcclxuICAgIHRoaXMuaGVhZGVyWydtZXRob2QnXSA9ICdsb2FkU3VnZ2VzdGlvbkRhdGFCeUl0ZW1JZG4nO1xyXG4gICAgY29uc29sZS5sb2codGhpcy5oZWFkZXIpO1xyXG4gICAgbGV0IG9wdGlvbnMgPSAoeyBoZWFkZXJzOiBuZXcgSHR0cEhlYWRlcnModGhpcy5oZWFkZXIpIH0pO1xyXG4gICAgY29uc29sZS5sb2coSlNPTi5zdHJpbmdpZnkocmVxT2JqKSk7XHJcbiAgICAvLyBjb25zb2xlLmxvZyh0aGlzLmhlYWRlcik7XHJcbiAgICB0aGlzLmNzLmxvYWQocmVxT2JqLCBvcHRpb25zLCBcImNvbnRhY3QvcmVnaXN0ZXJEYXRhXCIpLnRoZW4oKHJlc3BvbnNlOiBhbnkpID0+IHtcclxuICAgICAgY29uc29sZS5sb2cocmVzcG9uc2UpO1xyXG4gICAgICBsZXQgcmVzdWx0ID0gcmVzcG9uc2UucmVzdWx0O1xyXG4gICAgICBsZXQgc3VnZ2VzdGlvbkRhdGEgPSByZXN1bHQuc3VnZ2VzdGlvbkRhdGEgfHwgW107XHJcbiAgICAgIGxldCBsaXN0ID0gc3VnZ2VzdGlvbkRhdGEubWFwKG9wdGlvbiA9PiAoe1xyXG4gICAgICAgIHZhbHVlOiBvcHRpb24uayxcclxuICAgICAgICBsYWJlbDogb3B0aW9uLnZcclxuICAgICAgfSkpO1xyXG4gICAgICB0aGlzLnNxbEFycmF5W2Zvcm1fZmllbGRdID0gbGlzdDtcclxuICAgIH0pXHJcblxyXG4gIH1cclxuXHJcbiAgbG9hZEpubFN1Z2dkYXRhKHN0ciwgYXR0cl9ubWUsIG1kbCkge1xyXG4gICAgaWYgKHN0ciA9PSB1bmRlZmluZWQgfHwgc3RyID09ICcnIHx8IHN0ci5sZW5ndGggPCAzKSByZXR1cm47XHJcbiAgICBsZXQgcmVxT2JqID0ge307XHJcbiAgICByZXFPYmpbXCJmb3JtTm1lXCJdID0gdGhpcy5yb3V0ZS5zbmFwc2hvdC5wYXJhbXNbXCJmcm1ubWVcIl0gfHwgJ2xvYWRTdWdnZXN0aW9uRGF0YSc7XHJcbiAgICByZXFPYmpbJ2F0dHJfbm1lJ10gPSBhdHRyX25tZTtcclxuICAgIHJlcU9ialsnbWRsJ10gPSBtZGw7XHJcbiAgICByZXFPYmpbJ2xpa2VTdHInXSA9IHN0cjtcclxuICAgIHRoaXMuaGVhZGVyWydtZXRob2QnXSA9ICdsb2FkU3VnZ2VzdGlvbkRhdGFCeUF0dHJObWUnO1xyXG4gICAgY29uc29sZS5sb2codGhpcy5oZWFkZXIpO1xyXG4gICAgbGV0IG9wdGlvbnMgPSAoeyBoZWFkZXJzOiBuZXcgSHR0cEhlYWRlcnModGhpcy5oZWFkZXIpIH0pO1xyXG4gICAgY29uc29sZS5sb2coSlNPTi5zdHJpbmdpZnkocmVxT2JqKSk7XHJcbiAgICAvLyBjb25zb2xlLmxvZyh0aGlzLmhlYWRlcik7XHJcbiAgICB0aGlzLmNzLmxvYWQocmVxT2JqLCBvcHRpb25zLCBcImFjY291bnRzL2FjY0xlZGdlclwiKS50aGVuKChyZXNwb25zZTogYW55KSA9PiB7XHJcbiAgICAgIGNvbnNvbGUubG9nKHJlc3BvbnNlKTtcclxuICAgICAgbGV0IHJlc3VsdCA9IHJlc3BvbnNlLnJlc3VsdDtcclxuICAgICAgbGV0IHN1Z2dlc3Rpb25EYXRhID0gcmVzdWx0LnN1Z2dlc3Rpb25EYXRhIHx8IFtdO1xyXG4gICAgICBsZXQgbGlzdCA9IHN1Z2dlc3Rpb25EYXRhLm1hcChvcHRpb24gPT4gKHtcclxuICAgICAgICB2YWx1ZTogb3B0aW9uLnYsXHJcbiAgICAgICAgbGFiZWw6IG9wdGlvbi52XHJcbiAgICAgIH0pKTtcclxuICAgICAgdGhpcy5zcWxBcnJheVthdHRyX25tZV0gPSBsaXN0O1xyXG4gICAgfSlcclxuXHJcbiAgfVxyXG5cclxuICBvbmNoYW5lVmFscyhlLCBieXJ0cm1pZCwgc2VsZWN0ZWRVc2VySWRuKSB7XHJcbiAgICB0aGlzLmRhdGFUcm5zTGlzdCA9IFsuLi50aGlzLnRlcm1zTGlzdF07XHJcbiAgICB0aGlzLmJ5ck9ialtcImJ1eWVyX3Rlcm1zX2lkblwiXSA9IGJ5cnRybWlkO1xyXG4gICAgaWYgKHNlbGVjdGVkVXNlcklkbiAhPSB1bmRlZmluZWQpXHJcbiAgICAgIHRoaXMuYnlyT2JqW1widXNlcklkbkxpc3RcIl0gPSBzZWxlY3RlZFVzZXJJZG47XHJcblxyXG4gICAgbGV0IGNoZWNrQm94ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoYnlydHJtaWQpO1xyXG4gICAgaWYgKFxyXG4gICAgICAoY2hlY2tCb3ggYXMgYW55KS5jaGVja2VkID09IHRydWUgJiZcclxuICAgICAgc2VsZWN0ZWRVc2VySWRuICE9IHVuZGVmaW5lZCAmJlxyXG4gICAgICBzZWxlY3RlZFVzZXJJZG4gIT0gXCJcIlxyXG4gICAgKSB7XHJcbiAgICAgIHZhciBpbmRleCA9IHRoaXMuZGF0YVRybnNMaXN0LmZpbmRJbmRleChcclxuICAgICAgICB4ID0+IHguYnV5ZXJfdGVybXNfaWRuID09IGJ5cnRybWlkXHJcbiAgICAgICk7XHJcbiAgICAgIGlmIChpbmRleCA+IC0xKSB7XHJcbiAgICAgICAgY29uc3QgZmlsdGVyZWRBcnIgPSB0aGlzLmRhdGFUcm5zTGlzdC5maWx0ZXIoXHJcbiAgICAgICAgICBpdGVtID0+IGl0ZW0uYnV5ZXJfdGVybXNfaWRuICE9PSBieXJ0cm1pZFxyXG4gICAgICAgICk7XHJcbiAgICAgICAgdGhpcy5kYXRhVHJuc0xpc3QgPSBmaWx0ZXJlZEFycjtcclxuICAgICAgfVxyXG4gICAgICAvLyB9XHJcbiAgICAgIHRoaXMuZGF0YVRybnNMaXN0LnB1c2godGhpcy5ieXJPYmopO1xyXG4gICAgICB0aGlzLmJ5ck9iaiA9IHt9O1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY29uc3QgZmlsdGVyZWRBcnIgPSB0aGlzLmRhdGFUcm5zTGlzdC5maWx0ZXIoXHJcbiAgICAgICAgaXRlbSA9PiBpdGVtLmJ1eWVyX3Rlcm1zX2lkbiAhPT0gYnlydHJtaWRcclxuICAgICAgKTtcclxuICAgICAgdGhpcy5kYXRhVHJuc0xpc3QgPSBmaWx0ZXJlZEFycjtcclxuICAgIH1cclxuICB9XHJcbiAgb25jaGFuZ2VVc2VyU2VsZWN0KGUsIHRybW9iaikge1xyXG4gICAgbGV0IG9iajogYW55ID0ge307XHJcbiAgICBvYmogPSB7IC4uLnRybW9iaiB9O1xyXG5cclxuICAgIC8vIG9iai5zZWxlY3RlZFZhbHMgPSBbLi4udHJtb2JqLnVzZXJJZG5MaXN0XTtcclxuICAgIC8vIGlmIChvYmouc2VsZWN0ZWRWYWxzLmluZGV4T2YoZS52YWx1ZSkgIT0gLTEpIHtcclxuICAgIC8vICAgb2JqLnNlbGVjdGVkVmFscy5wdXNoKGUudmFsdWUpO1xyXG4gICAgLy8gfVxyXG5cclxuICAgIGlmIChvYmouc2VsZWN0ZWRWYWxzLmluZGV4T2YoZS52YWx1ZSkgIT0gLTEpIHtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIG9iai5zZWxlY3RlZFZhbHMucHVzaChlLnZhbHVlKTtcclxuICAgIH1cclxuICAgIHRybW9iaiA9IG9iajtcclxuICAgIGNvbnNvbGUubG9nKHRoaXMudGVybXNMaXN0KTtcclxuICB9XHJcbiAgb25jaGFuZ2VVc2VyRGVzZWxlY3QoZSwgdHJtb2JqKSB7XHJcbiAgICBkZWJ1Z2dlclxyXG4gICAgbGV0IG9iajogYW55ID0ge307XHJcbiAgICBvYmogPSB7IC4uLnRybW9iaiB9O1xyXG4gICAgb2JqLnNlbGVjdGVkVmFscy5zcGxpY2UodGhpcy50ZXJtc0xpc3QuaW5kZXhPZihlLnZhbHVlKSwgMSk7XHJcbiAgICB0cm1vYmogPSBvYmo7XHJcbiAgICBjb25zb2xlLmxvZyh0aGlzLnRlcm1zTGlzdCk7XHJcbiAgfVxyXG5cclxuICBvbmNoYW5nZVVzZXJMaXN0KGUsIHRybW9iaiwgdHlwKSB7XHJcblxyXG4gICAgdGhpcy5zcGlubmVyU2VydmljZS5zaG93KCk7XHJcbiAgICBjb25zdCByZXFPYmogPSB7fTtcclxuICAgIHJlcU9ialtcImJ1eWVyX3Rlcm1zX2lkblwiXSA9IHRybW9iai5idXllcl90ZXJtc19pZG47XHJcbiAgICByZXFPYmpbXCJ1c2VyX2lkblwiXSA9IGUudmFsdWU7XHJcbiAgICByZXFPYmpbJ2FjdGlvbiddID0gdHlwO1xyXG4gICAgcmVxT2JqW1wiZm9ybU5tZVwiXSA9IFwiY29udGFjdFNlYXJjaEZvcm1cIjtcclxuICAgIHRoaXMuaGVhZGVyW1wibWV0aG9kXCJdID0gXCJhc3NpZ25Vc2VyVGVybVwiO1xyXG4gICBjb25zdCBvcHRpb25zID0gKHsgaGVhZGVyczogbmV3IEh0dHBIZWFkZXJzKHRoaXMuaGVhZGVyKSB9KTtcclxuICAgIHRoaXMuY3NcclxuICAgICAgLmxvYWQocmVxT2JqLCBvcHRpb25zLCBcImNvbnRhY3QvbG9hZENvbnRhY3RcIilcclxuICAgICAgLnRoZW4oKHJlc3BvbnNlOiBhbnkpID0+IHtcclxuICAgICAgICBjb25zb2xlLmxvZyhyZXNwb25zZSk7XHJcbiAgICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1cyA9PSBcIlNVQ0NFU1NcIikge1xyXG5cclxuICAgICAgICAgIHRoaXMubG9hZEFwcGxpY2F0aW9uVXNlclRlcm1zKCcnKTtcclxuICAgICAgICAgIHRoaXMuc3Bpbm5lclNlcnZpY2UuaGlkZSgpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLnNwaW5uZXJTZXJ2aWNlLmhpZGUoKTtcclxuICAgICAgICAgIHRoaXMudG9hc3RyLmVycm9yKHJlc3BvbnNlLm1lc3NhZ2UpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSlcclxuICAgICAgLmNhdGNoKChlcnI6IGFueSkgPT4ge1xyXG4gICAgICAgIHRoaXMuc3Bpbm5lclNlcnZpY2UuaGlkZSgpO1xyXG4gICAgICAgIHRoaXMudG9hc3RyLmVycm9yKGVyci5tZXNzYWdlKTtcclxuICAgICAgfSk7XHJcblxyXG5cclxuICB9XHJcbiAgc2F2ZUFwcFVzZXJ0ZXJtcygpIHtcclxuICAgIGxldCB2YWxBcnIgPSBbXTtcclxuICAgIHRoaXMudGVybXNMaXN0LmZvckVhY2goZWxlbWVudCA9PiB7XHJcbiAgICAgIGxldCBjaGVja0JveCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGVsZW1lbnQuYnV5ZXJfdGVybXNfaWRuKTtcclxuICAgICAgaWYgKChjaGVja0JveCBhcyBhbnkpLmNoZWNrZWQgPT0gdHJ1ZSkge1xyXG4gICAgICAgIGxldCBvYmogPSB7fTtcclxuICAgICAgICBvYmpbXCJidXllcl90ZXJtc19pZG5cIl0gPSBlbGVtZW50LmJ1eWVyX3Rlcm1zX2lkbjtcclxuICAgICAgICBvYmpbXCJ1c2VySWRuTGlzdFwiXSA9IGVsZW1lbnQudXNlcklkbkxpc3Q7XHJcbiAgICAgICAgdmFsQXJyLnB1c2gob2JqKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgY29uc3QgcmVxT2JqID0ge307XHJcbiAgICByZXFPYmpbXCJubWVfaWRuXCJdID0gdGhpcy5yb3V0ZS5zbmFwc2hvdC5wYXJhbU1hcC5nZXQoXCJzdWJ2XCIpO1xyXG4gICAgcmVxT2JqW1wiZm9ybU5tZVwiXSA9IFwiY29udGFjdFNlYXJjaEZvcm1cIjtcclxuICAgIHRoaXMuaGVhZGVyW1wibWV0aG9kXCJdID0gXCJzYXZlQXNzaWduQXBwbGljYXRpb25Vc2VydGVybXNcIjtcclxuICAgIHJlcU9ialtcImRhdGFUcm5zTGlzdFwiXSA9IHZhbEFycjtcclxuXHJcbiAgICBjb25zb2xlLmxvZyhyZXFPYmopO1xyXG4gICAgY29uc29sZS5sb2coSlNPTi5zdHJpbmdpZnkocmVxT2JqKSk7XHJcblxyXG4gICBjb25zdCBvcHRpb25zID0gKHsgaGVhZGVyczogbmV3IEh0dHBIZWFkZXJzKHRoaXMuaGVhZGVyKSB9KTtcclxuICAgIHRoaXMuc3NcclxuICAgICAgLlNhdmUocmVxT2JqLCBvcHRpb25zLCBcImNvbnRhY3QvbG9hZENvbnRhY3RcIilcclxuICAgICAgLnRoZW4oKHJlc3BvbnNlOiBhbnkpID0+IHtcclxuICAgICAgICBjb25zb2xlLmxvZyhyZXNwb25zZSk7XHJcbiAgICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1cyA9PSBcIlNVQ0NFU1NcIikge1xyXG4gICAgICAgICAgY29uc29sZS5sb2cocmVzcG9uc2Uuc3RhdHVzKTtcclxuICAgICAgICAgIHRoaXMuc3Bpbm5lclNlcnZpY2UuaGlkZSgpO1xyXG4gICAgICAgICAgdGhpcy50b2FzdHIuc3VjY2VzcyhyZXNwb25zZS5tZXNzYWdlKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5zcGlubmVyU2VydmljZS5oaWRlKCk7XHJcbiAgICAgICAgICB0aGlzLnRvYXN0ci5lcnJvcihyZXNwb25zZS5tZXNzYWdlKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pXHJcbiAgICAgIC5jYXRjaCgoZXJyOiBhbnkpID0+IHtcclxuICAgICAgICB0aGlzLnNwaW5uZXJTZXJ2aWNlLmhpZGUoKTtcclxuICAgICAgICB0aGlzLnRvYXN0ci5lcnJvcihlcnIubWVzc2FnZSk7XHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgZ2V0RWRpdERhdGEoZGF0YSkge1xyXG4gICAgdGhpcy5mb3JtRmlsZHMgPSBbXTtcclxuICAgIGxldCByZXFPYmogPSB7fTtcclxuICAgIHZhciBwYWdlVFAgPSB0aGlzLnBhZ2VJbmZvLnBhZ2VfdHlwO1xyXG4gICAgcmVxT2JqW1wiZm9ybU5tZVwiXSA9IHRoaXMucGFnZUluZm8uZm9ybV9ubWU7XHJcbiAgICByZXFPYmpbXCJwcmltYXJ5S2V5XCJdID0gdGhpcy5wYWdlSW5mby5wcmltYXJ5X2tleV9maWVsZDtcclxuICAgIHJlcU9ialtcInBhZ2VUeXBcIl0gPSB0aGlzLnBhZ2VJbmZvLnBhZ2VfdHlwO1xyXG4gICAgcmVxT2JqW1wic2Vjb25kS2V5RmllbGRcIl0gPSB0aGlzLnBhZ2VJbmZvLnNlY29uZF9rZXlfZmllbGQ7XHJcbiAgICBpZiAodGhpcy50YkNlbGwgIT0gbnVsbCkge1xyXG4gICAgICByZXFPYmpbXCJpbkxpbmVFZGl0Q29sdW1uXCJdID0gdGhpcy50YkNlbGw7XHJcbiAgICB9XHJcbiAgICByZXFPYmpbXCJwcmltYXJ5SWRcIl0gPSB0aGlzLnBpZDtcclxuICAgIGlmIChwYWdlVFAgPT0gXCJqc29uRm9ybVwiKSB7XHJcbiAgICAgIHJlcU9ialtcIndoZXJlS2V5c1wiXSA9IHRoaXMucGFnZUluZm8ud2hlcmVfY2xhdXNlO1xyXG4gICAgICByZXFPYmpbXCJ3aGVyZVZsdXNcIl0gPSB0aGlzLndoZXJlTWFwW3RoaXMucGFnZUluZm8ud2hlcmVfY2xhdXNlXTtcclxuICAgIH1cclxuICAgIGNvbnNvbGUubG9nKHJlcU9iaik7XHJcbiAgICB0aGlzLmhlYWRlcltcIm1ldGhvZFwiXSA9IFwibG9hZEFkZEVkaXRcIjtcclxuICAgIGxldCBvcHRpb25zID0gKHsgaGVhZGVyczogbmV3IEh0dHBIZWFkZXJzKHRoaXMuaGVhZGVyKSB9KTtcclxuICAgIHRoaXMuc3NcclxuICAgICAgLmdldEVkaXREKHJlcU9iaiwgb3B0aW9ucylcclxuICAgICAgLnRoZW4oKHJlc3BvbnNlOiBhbnkpID0+IHtcclxuICAgICAgICBjb25zb2xlLmxvZyhyZXNwb25zZSk7XHJcbiAgICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1cyA9PSBcIlNVQ0NFU1NcIiAmJiByZXNwb25zZS5tZXNzYWdlICE9IFwiU1VDQ0VTU1wiKSB7XHJcbiAgICAgICAgICB0aGlzLnNwaW5uZXJTZXJ2aWNlLmhpZGUoKTtcclxuICAgICAgICAgIHRoaXMudG9hc3RyLmVycm9yKHJlc3BvbnNlLm1lc3NhZ2UpO1xyXG4gICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzID09IFwiU1VDQ0VTU1wiKSB7XHJcbiAgICAgICAgICB0aGlzLnNwaW5uZXJTZXJ2aWNlLmhpZGUoKTtcclxuICAgICAgICAgIGlmICh0aGlzLnRiQ2VsbCAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiZGF0YW1kYnRuXCIpLmNsaWNrKCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB0aGlzLmZvcm1GaWxkcyA9IHJlc3BvbnNlLmZvcm1GaWVsZHM7XHJcbiAgICAgICAgICB0aGlzLmZvcm1GaWxkcy5mb3JFYWNoKChlbGVtZW50LCBpbmRleCkgPT4ge1xyXG4gICAgICAgICAgICBpZiAoZWxlbWVudC5mb3JtX2ZpZWxkX3R5cCA9PSBcInRiXCIpIHtcclxuICAgICAgICAgICAgICB0aGlzLmdldExvdkxpc3QoZWxlbWVudC5mb3JtX2ZpZWxkLCBlbGVtZW50LnBhZ2VfaXRlbV9pZG4pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChlbGVtZW50LmZvcm1fZmllbGRfdHlwID09IFwic1wiKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5nZXRMb3ZMaXN0KGVsZW1lbnQuZm9ybV9maWVsZCwgZWxlbWVudC5wYWdlX2l0ZW1faWRuKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoZWxlbWVudC5mb3JtX2ZpZWxkX3R5cCA9PSBcInNiXCIpIHtcclxuXHJcbiAgICAgICAgICAgICAgbGV0IHFyeSA9IGVsZW1lbnQuaGVscCB8fCAnJztcclxuICAgICAgICAgICAgICBpZiAocXJ5ICE9ICcnICYmIGVsZW1lbnQuZGVmYXVsdF92YWx1ZSAhPSBcIlwiKSB7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMucGFnZUluZm8uZm9ybV9ubWUgPT0gJ2FkZHJlc3NNYXN0ZXInIHx8IHRoaXMucGFnZUluZm8uZm9ybV9ubWUgPT0gJ2FjY0FkZHJlc3NNYXN0ZXInIHx8IHRoaXMucGFnZUluZm8uZm9ybV9ubWUgPT0gJ2FjY0FkZHJlc3NEZXRhaWxzJykge1xyXG4gICAgICAgICAgICAgICAgICBsZXQgY2l0eSA9IGRhdGEuY2l0eV9ubSB8fCAnJztcclxuICAgICAgICAgICAgICAgICAgbGV0IHN0YXRlID0gZGF0YS5zdGF0ZV9ubSB8fCAnJztcclxuICAgICAgICAgICAgICAgICAgbGV0IGNvdW50cnkgPSBkYXRhLmNvdW50cnlfbm0gfHwgJyc7XHJcbiAgICAgICAgICAgICAgICAgIGlmIChjaXR5ICE9ICcnICYmIGNvdW50cnkgIT0gJycpIHtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgc3RyID0gY2l0eSArIFwiI1wiICsgY291bnRyeTtcclxuICAgICAgICAgICAgICAgICAgICBzdHIgPSBzdHIudG9Mb3dlckNhc2UoKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmdldExvdkNpdHlMaXN0KGVsZW1lbnQsIHN0cik7XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgIHFyeSA9IHFyeS5yZXBsYWNlKFwiI0lETlwiLCBcIidcIiArIGVsZW1lbnQuZGVmYXVsdF92YWx1ZSArIFwiJ1wiKVxyXG4gICAgICAgICAgICAgICAgICB0aGlzLmdldExvdkxpc3RkYXRhKGVsZW1lbnQpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoZWxlbWVudC5mb3JtX2ZpZWxkX3R5cCA9PSBcImhkXCIpIHtcclxuICAgICAgICAgICAgICBlbGVtZW50LmRlZmF1bHRfdmFsdWUgPSB0aGlzLndoZXJlTWFwW2VsZW1lbnQuZm9ybV9maWVsZF07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKGVsZW1lbnQuZm9ybV9maWVsZF90eXAgPT0gXCJzcVwiKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5nZXRTZXF1ZW5jZShlbGVtZW50KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoZWxlbWVudC5kdGFfdHlwID09IFwic2FcIikge1xyXG4gICAgICAgICAgICAgIHRoaXMuZ2V0TG92TGlzdChlbGVtZW50LmZvcm1fZmllbGQsIGVsZW1lbnQucGFnZV9pdGVtX2lkbik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKGVsZW1lbnQuZHRhX3R5cCA9PSBcInNyXCIpIHtcclxuICAgICAgICAgICAgICB0aGlzLmdldExvdkxpc3QoZWxlbWVudC5mb3JtX2ZpZWxkLCBlbGVtZW50LnBhZ2VfaXRlbV9pZG4pO1xyXG4gICAgICAgICAgICAgIHRoaXMuZGZ2ID0gZWxlbWVudC5kZWZhdWx0X3ZhbHVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChlbGVtZW50LmZvcm1fZmllbGRfdHlwID09IFwiaGNcIikge1xyXG4gICAgICAgICAgICAgIGVsZW1lbnQuZGVmYXVsdF92YWx1ZSA9IGVsZW1lbnQubG92X3FyeTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAvLyBpZiAoZWxlbWVudC5mb3JtX2ZpZWxkX3R5cCA9PSAnbCcpIHtcclxuICAgICAgICAgICAgLy8gICBlbGVtZW50Lmt2Lm1hcChvcHRpb24gPT4gKHtcclxuICAgICAgICAgICAgLy8gICAgIHZhbHVlOiBvcHRpb24uayxcclxuICAgICAgICAgICAgLy8gICAgIGxhYmVsOiBvcHRpb24udlxyXG4gICAgICAgICAgICAvLyAgIH0pKTtcclxuICAgICAgICAgICAgLy8gfVxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgICB0aGlzLnNwaW5uZXJTZXJ2aWNlLmhpZGUoKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5zcGlubmVyU2VydmljZS5oaWRlKCk7XHJcbiAgICAgICAgICB0aGlzLnRvYXN0ci5lcnJvcihyZXNwb25zZS5tZXNzYWdlKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pXHJcbiAgICAgIC5jYXRjaCgoZXJyOiBhbnkpID0+IHtcclxuICAgICAgICB0aGlzLnNwaW5uZXJTZXJ2aWNlLmhpZGUoKTtcclxuICAgICAgICB0aGlzLnRvYXN0ci5lcnJvcihlcnIubWVzc2FnZSk7XHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgZ2V0U2VxdWVuY2UoZWxlbWVudCkge1xyXG4gICAgbGV0IHJlcU9iaiA9IHt9O1xyXG4gICAgcmVxT2JqW1wic2VxXCJdID0gZWxlbWVudC5sb3ZfcXJ5O1xyXG4gICAgdGhpcy5oZWFkZXJbXCJtZXRob2RcIl0gPSBcImdldFNlcVwiO1xyXG4gICAgbGV0IG9wdGlvbnMgPSAoeyBoZWFkZXJzOiBuZXcgSHR0cEhlYWRlcnModGhpcy5oZWFkZXIpIH0pO1xyXG4gICAgdGhpcy5zc1xyXG4gICAgICAuZ2V0RGF0YShyZXFPYmosIG9wdGlvbnMpXHJcbiAgICAgIC50aGVuKChyZXNwb25zZTogYW55KSA9PiB7XHJcbiAgICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1cyA9PSBcIlNVQ0NFU1NcIikge1xyXG4gICAgICAgICAgdmFyIHNlcSA9IHJlc3BvbnNlLnNlcTtcclxuICAgICAgICAgIGVsZW1lbnQuZGVmYXVsdF92YWx1ZSA9IHNlcTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy50b2FzdHIuZXJyb3IocmVzcG9uc2UubWVzc2FnZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KVxyXG4gICAgICAuY2F0Y2goKGVycjogYW55KSA9PiB7XHJcbiAgICAgICAgdGhpcy50b2FzdHIuZXJyb3IoZXJyLm1lc3NhZ2UpO1xyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIGdldFNlcXVlbmNlMShzZXFubWUpIHtcclxuICAgIHZhciBzZXEgPSBcIlwiO1xyXG4gICAgZGVidWdnZXI7XHJcbiAgICBsZXQgcmVxT2JqID0ge307XHJcbiAgICByZXFPYmpbXCJzZXFcIl0gPSBzZXFubWU7XHJcbiAgICB0aGlzLmhlYWRlcltcIm1ldGhvZFwiXSA9IFwiZ2V0U2VxXCI7XHJcbiAgICBsZXQgb3B0aW9ucyA9ICh7IGhlYWRlcnM6IG5ldyBIdHRwSGVhZGVycyh0aGlzLmhlYWRlcikgfSk7XHJcbiAgICB0aGlzLnNzXHJcbiAgICAgIC5nZXREYXRhKHJlcU9iaiwgb3B0aW9ucylcclxuICAgICAgLnRoZW4oKHJlc3BvbnNlOiBhbnkpID0+IHtcclxuICAgICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzID09IFwiU1VDQ0VTU1wiKSB7XHJcbiAgICAgICAgICBzZXEgPSByZXNwb25zZS5zZXE7XHJcbiAgICAgICAgICByZXR1cm4gc2VxO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLnRvYXN0ci5lcnJvcihyZXNwb25zZS5tZXNzYWdlKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pXHJcbiAgICAgIC5jYXRjaCgoZXJyOiBhbnkpID0+IHtcclxuICAgICAgICB0aGlzLnRvYXN0ci5lcnJvcihlcnIubWVzc2FnZSk7XHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgZ2V0TG92TGlzdGRhdGEodGJsRikge1xyXG4gICAgbGV0IHJlcU9iaiA9IHt9O1xyXG4gICAgcmVxT2JqW1wicGFnZV9pdGVtX2lkblwiXSA9IHRibEYucGFnZV9pdGVtX2lkbjtcclxuICAgIHJlcU9ialtcInN0clwiXSA9IHRibEYuZGVmYXVsdF92YWx1ZTtcclxuICAgIHRoaXMuaGVhZGVyW1wibWV0aG9kXCJdID0gXCJsb2FkQ2l0eUNvdW50cnlEYXRhXCI7XHJcbiAgICBsZXQgb3B0aW9ucyA9ICh7IGhlYWRlcnM6IG5ldyBIdHRwSGVhZGVycyh0aGlzLmhlYWRlcikgfSk7XHJcbiAgICB0aGlzLnNzXHJcbiAgICAgIC5nZXREYXRhKHJlcU9iaiwgb3B0aW9ucylcclxuICAgICAgLnRoZW4oKHJlc3BvbnNlOiBhbnkpID0+IHtcclxuICAgICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzID09IFwiU1VDQ0VTU1wiKSB7XHJcbiAgICAgICAgICB0aGlzLmxvdnMgPSByZXNwb25zZS5rdi5tYXAob3B0aW9uID0+ICh7XHJcbiAgICAgICAgICAgIHZhbHVlOiBvcHRpb24uayxcclxuICAgICAgICAgICAgbGFiZWw6IG9wdGlvbi52XHJcbiAgICAgICAgICB9KSk7XHJcblxyXG4gICAgICAgICAgdGhpcy5zcWxBcnJheVt0YmxGLmZvcm1fZmllbGRdID0gdGhpcy5sb3ZzO1xyXG5cclxuICAgICAgICAgIGlmICh0aGlzLmRmdiA9PSBudWxsKSByZXR1cm47XHJcbiAgICAgICAgICBpZiAodGJsRiA9PSBcImF0dHJcIikge1xyXG4gICAgICAgICAgICB0aGlzLnNxbEFycmF5W3RibEZdLmZvckVhY2goKGVsZW1lbnQsIGluZGV4KSA9PiB7XHJcbiAgICAgICAgICAgICAgdGhpcy5kZnYuZm9yRWFjaChlbGVtZW50MiA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAoZWxlbWVudC52ID09IGVsZW1lbnQyKSB7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuc3FsQXJyYXlbdGJsRl0uc3BsaWNlKGluZGV4LCAxKTtcclxuICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy50b2FzdHIuZXJyb3IocmVzcG9uc2UubWVzc2FnZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KVxyXG4gICAgICAuY2F0Y2goKGVycjogYW55KSA9PiB7XHJcbiAgICAgICAgdGhpcy50b2FzdHIuZXJyb3IoZXJyLm1lc3NhZ2UpO1xyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIGdldExvdkxpc3QodGJsRiwgcGFnZV9pdGVtX2lkbikge1xyXG4gICAgbGV0IHJlcU9iaiA9IHt9O1xyXG4gICAgcmVxT2JqW1wicGFnZV9pdGVtX2lkblwiXSA9IHBhZ2VfaXRlbV9pZG47XHJcbiAgICB0aGlzLmhlYWRlcltcIm1ldGhvZFwiXSA9IFwiZ2V0RGF0YUJ5SXRlbUlkblwiO1xyXG4gICAgbGV0IG9wdGlvbnMgPSAoeyBoZWFkZXJzOiBuZXcgSHR0cEhlYWRlcnModGhpcy5oZWFkZXIpIH0pO1xyXG4gICAgdGhpcy5zc1xyXG4gICAgICAuZ2V0RGF0YShyZXFPYmosIG9wdGlvbnMpXHJcbiAgICAgIC50aGVuKChyZXNwb25zZTogYW55KSA9PiB7XHJcbiAgICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1cyA9PSBcIlNVQ0NFU1NcIikge1xyXG4gICAgICAgICAgdGhpcy5sb3ZzID0gcmVzcG9uc2Uua3YubWFwKG9wdGlvbiA9PiAoe1xyXG4gICAgICAgICAgICB2YWx1ZTogb3B0aW9uLmssXHJcbiAgICAgICAgICAgIGxhYmVsOiBvcHRpb24udlxyXG4gICAgICAgICAgfSkpO1xyXG5cclxuICAgICAgICAgIHRoaXMuc3FsQXJyYXlbdGJsRl0gPSB0aGlzLmxvdnM7XHJcblxyXG4gICAgICAgICAgaWYgKHRoaXMuZGZ2ID09IG51bGwpIHJldHVybjtcclxuICAgICAgICAgIGlmICh0YmxGID09IFwiYXR0clwiKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc3FsQXJyYXlbdGJsRl0uZm9yRWFjaCgoZWxlbWVudCwgaW5kZXgpID0+IHtcclxuICAgICAgICAgICAgICB0aGlzLmRmdi5mb3JFYWNoKGVsZW1lbnQyID0+IHtcclxuICAgICAgICAgICAgICAgIGlmIChlbGVtZW50LnYgPT0gZWxlbWVudDIpIHtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5zcWxBcnJheVt0YmxGXS5zcGxpY2UoaW5kZXgsIDEpO1xyXG4gICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLnRvYXN0ci5lcnJvcihyZXNwb25zZS5tZXNzYWdlKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pXHJcbiAgICAgIC5jYXRjaCgoZXJyOiBhbnkpID0+IHtcclxuICAgICAgICB0aGlzLnRvYXN0ci5lcnJvcihlcnIubWVzc2FnZSk7XHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgZ2V0TG92Q2l0eUxpc3QodGJsRiwgc3RyKSB7XHJcbiAgICBkZWJ1Z2dlcjtcclxuICAgIGxldCByZXFPYmogPSB7fTtcclxuICAgIHJlcU9ialtcInBhZ2VfaXRlbV9pZG5cIl0gPSB0YmxGLnBhZ2VfaXRlbV9pZG47XHJcbiAgICByZXFPYmpbXCJzdHJcIl0gPSBzdHI7XHJcbiAgICB0aGlzLmhlYWRlcltcIm1ldGhvZFwiXSA9IFwibG9hZENpdHlDb3VudHJ5RGF0YVwiO1xyXG4gICAgY29uc29sZS5sb2coSlNPTi5zdHJpbmdpZnkocmVxT2JqKSk7XHJcbiAgICBsZXQgb3B0aW9ucyA9ICh7IGhlYWRlcnM6IG5ldyBIdHRwSGVhZGVycyh0aGlzLmhlYWRlcikgfSk7XHJcbiAgICB0aGlzLnNzXHJcbiAgICAgIC5nZXREYXRhKHJlcU9iaiwgb3B0aW9ucylcclxuICAgICAgLnRoZW4oKHJlc3BvbnNlOiBhbnkpID0+IHtcclxuICAgICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzID09IFwiU1VDQ0VTU1wiKSB7XHJcbiAgICAgICAgICBkZWJ1Z2dlcjtcclxuXHJcbiAgICAgICAgICB0aGlzLmxvdnMgPSByZXNwb25zZS5rdi5tYXAob3B0aW9uID0+ICh7XHJcbiAgICAgICAgICAgIHZhbHVlOiBvcHRpb24uayxcclxuICAgICAgICAgICAgbGFiZWw6IG9wdGlvbi52XHJcbiAgICAgICAgICB9KSk7XHJcbiAgICAgICAgICBkZWJ1Z2dlcjtcclxuXHJcbiAgICAgICAgICB0aGlzLnNxbEFycmF5W3RibEYuZm9ybV9maWVsZF0gPSB0aGlzLmxvdnM7XHJcbiAgICAgICAgICBpZiAodGhpcy5sb3ZzLmxlbmd0aCA+IDEpXHJcbiAgICAgICAgICAgIHRibEYuZGVmYXVsdF92YWx1ZSA9IHRoaXMubG92c1sxXS52YWx1ZTtcclxuXHJcblxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLnRvYXN0ci5lcnJvcihyZXNwb25zZS5tZXNzYWdlKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pXHJcbiAgICAgIC5jYXRjaCgoZXJyOiBhbnkpID0+IHtcclxuICAgICAgICB0aGlzLnRvYXN0ci5lcnJvcihlcnIubWVzc2FnZSk7XHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgRGVsZXRlVGVybXMoKSB7XHJcbiAgICB0aGlzLnNwaW5uZXJTZXJ2aWNlLnNob3coKTtcclxuICAgIGxldCByZXFPYmogPSB7fTtcclxuICAgIHJlcU9ialtcImZvcm1ObWVcIl0gPSB0aGlzLnBhZ2VJbmZvLmZvcm1fbm1lO1xyXG4gICAgcmVxT2JqW1wiYnV5ZXJUZXJtc0lkblwiXSA9IHRoaXMucGlkO1xyXG4gICAgdGhpcy5oZWFkZXJbXCJtZXRob2RcIl0gPSBcImRlbGV0ZUJ1eWVyVGVybXNcIjtcclxuICAgIGNvbnNvbGUubG9nKEpTT04uc3RyaW5naWZ5KHJlcU9iaikpO1xyXG4gICBjb25zdCBvcHRpb25zID0gKHsgaGVhZGVyczogbmV3IEh0dHBIZWFkZXJzKHRoaXMuaGVhZGVyKSB9KTtcclxuICAgIHRoaXMuY3MubG9hZChyZXFPYmosIG9wdGlvbnMsIFwiY29udGFjdC9sb2FkQ29udGFjdFwiKS50aGVuKChyZXNwb25zZTogYW55KSA9PiB7XHJcbiAgICAgIGlmIChyZXNwb25zZS5zdGF0dXMgPT0gXCJTVUNDRVNTXCIpIHtcclxuICAgICAgICB0aGlzLnBhcmFPYmpbXCJmb3JtTm1lXCJdID0gdGhpcy5uYXZmb3JtO1xyXG4gICAgICAgIHRoaXMuZ2V0UGFnZURlZmluYXRpb24oKTtcclxuICAgICAgICB0aGlzLnNwaW5uZXJTZXJ2aWNlLmhpZGUoKTtcclxuXHJcbiAgICAgICAgdGhpcy50b2FzdHIuc3VjY2VzcyhyZXNwb25zZS5tZXNzYWdlKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLnNwaW5uZXJTZXJ2aWNlLmhpZGUoKTtcclxuXHJcbiAgICAgICAgdGhpcy50b2FzdHIuZXJyb3IocmVzcG9uc2UubWVzc2FnZSk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgZGVsZXRlRGF0YUxpc3QoKSB7XHJcbiAgICBkZWJ1Z2dlclxyXG4gICAgdGhpcy5zcGlubmVyU2VydmljZS5zaG93KCk7XHJcbiAgICBsZXQgcmVxT2JqID0ge307XHJcbiAgICByZXFPYmpbXCJmb3JtTm1lXCJdID0gdGhpcy5wYWdlSW5mby5mb3JtX25tZTtcclxuICAgIHJlcU9ialtcInBhZ2VUeXBcIl0gPSB0aGlzLnBhZ2VJbmZvLnBhZ2VfdHlwO1xyXG4gICAgcmVxT2JqW1wicHJpbWFyeUtleVwiXSA9IHRoaXMucGFnZUluZm8ucHJpbWFyeV9rZXlfZmllbGQ7XHJcbiAgICByZXFPYmpbXCJwcmltYXJ5SWRcIl0gPSB0aGlzLnBpZDtcclxuICAgIHJlcU9ialtcInRhYmxlTmFtZVwiXSA9IHRoaXMucGFnZUluZm8udGFibGVfbmFtZTtcclxuICAgIHJlcU9ialtcInRybnNUeXBlXCJdID0gXCJERUxFVEVcIjtcclxuICAgIGlmICh0aGlzLnBrICE9IFwiXCIgJiYgdGhpcy5wdiAhPSBcIlwiKSB7XHJcbiAgICAgIHJlcU9ialtcIndoZXJlS2V5c1wiXSA9IHRoaXMucGs7XHJcbiAgICAgIHJlcU9ialtcIndoZXJlVmx1c1wiXSA9IFwiXCIgKyB0aGlzLnB2O1xyXG4gICAgfVxyXG4gICAgdGhpcy5oZWFkZXJbXCJtZXRob2RcIl0gPSBcInNhdmVcIjtcclxuICAgIGNvbnNvbGUubG9nKHJlcU9iaik7XHJcbiAgICBsZXQgb3B0aW9ucyA9ICh7IGhlYWRlcnM6IG5ldyBIdHRwSGVhZGVycyh0aGlzLmhlYWRlcikgfSk7XHJcbiAgICB0aGlzLnNzXHJcbiAgICAgIC5kZWxldGVEYXRhKHJlcU9iaiwgb3B0aW9ucylcclxuICAgICAgLnRoZW4oKHJlc3BvbnNlOiBhbnkpID0+IHtcclxuICAgICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzID09IFwiU1VDQ0VTU1wiKSB7XHJcbiAgICAgICAgICB0aGlzLmdldFBhZ2VEZWZpbmF0aW9uKCk7XHJcbiAgICAgICAgICAvLyB0aGlzLmRhdGFsaXN0LnNsaWNlKHRoaXMuY2ksIDEpO1xyXG4gICAgICAgICAgdGhpcy5kZWxldGVjbHNidG4ubmF0aXZlRWxlbWVudC5jbGljaygpO1xyXG4gICAgICAgICAgdGhpcy5zcGlubmVyU2VydmljZS5oaWRlKCk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMuc3Bpbm5lclNlcnZpY2UuaGlkZSgpO1xyXG4gICAgICAgICAgdGhpcy50b2FzdHIuZXJyb3IocmVzcG9uc2UubWVzc2FnZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KVxyXG4gICAgICAuY2F0Y2goKGVycjogYW55KSA9PiB7XHJcbiAgICAgICAgdGhpcy5zcGlubmVyU2VydmljZS5oaWRlKCk7XHJcbiAgICAgICAgdGhpcy50b2FzdHIuZXJyb3IoZXJyLm1lc3NhZ2UpO1xyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIGNoa0Z1bihmbCwgZkRhdGEpIHtcclxuICAgIGlmIChmbC52YWxpZGF0aW9ucyA9PSBcIlwiIHx8IGZsLnZhbGlkYXRpb25zID09IG51bGwpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgaWYgKGZsLnZhbGlkYXRpb25zID09IFwidmFsaWRhdGVRdWVyeVwiKSB7XHJcbiAgICAgICAgdGhpcy52YWxpZGF0ZVF1ZXJ5KGZsLCBmRGF0YSk7XHJcbiAgICAgIH0gZWxzZSBpZiAoZmwudmFsaWRhdGlvbnMgPT0gXCJpc1VuaXF1ZVwiKSB7XHJcbiAgICAgICAgdGhpcy5pc1VuaXF1ZShmbCwgZkRhdGEpO1xyXG4gICAgICB9IGVsc2UgaWYgKGZsLnZhbGlkYXRpb25zID09ICdzZXRuYW1lcHJpbnQnKSB7XHJcbiAgICAgICAgdGhpcy5zZXRuYW1lcHJpbnQoZmwsIGZEYXRhKTtcclxuICAgICAgfSBlbHNlIGlmIChmbC52YWxpZGF0aW9ucyA9PSAnc2V0ZmFjdG9yJykge1xyXG4gICAgICAgIHRoaXMuc2V0ZmFjdG9yKGZsLCBmRGF0YSk7XHJcbiAgICAgIH0gZWxzZSBpZiAoZmwuZm9ybV9maWVsZF90eXAgPT0gXCJzXCIpIHtcclxuICAgICAgICBpZiAoZmwudmFsaWRhdGlvbnMgPT0gbnVsbCkge1xyXG4gICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBsZXQgc3EgPSBmbC52YWxpZGF0aW9ucy5yZXBsYWNlKC8jUVZBTC9nLCBmRGF0YSk7XHJcbiAgICAgICAgLy90aGlzLmdldExvdkxpc3RkYXRhKGZsLmNvbHVtbl9rZXksIHNxKTtcclxuICAgICAgfVxyXG4gICAgICBlbHNlIGlmIChmbC52YWxpZGF0aW9ucyA9PSBcImlzRXhpc3RcIikge1xyXG4gICAgICAgIGlmIChmbC52YWxpZGF0aW9ucyA9PSBudWxsKSB7XHJcbiAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuaXNFeGlzdChmbCwgZkRhdGEpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzZXRuYW1lcHJpbnQoZmwsIGZEYXRhKSB7XHJcbiAgICBkZWJ1Z2dlclxyXG4gICAgbGV0IG5tZUlkbiA9IGZEYXRhO1xyXG4gICAgbGV0IGxpc3QgPSB0aGlzLnNxbEFycmF5W2ZsLmZvcm1fZmllbGRdIHx8IFtdO1xyXG4gICAgbGV0IG5td0R0bCA9IGxpc3QuZmluZCh4ID0+IHgudmFsdWUgPT0gbm1lSWRuKSB8fCAnJztcclxuICAgIGlmIChubXdEdGwgIT0gJycpIHtcclxuICAgICAgdGhpcy5mb3JtRmlsZHMuZm9yRWFjaChlbGVtZW50ID0+IHtcclxuICAgICAgICBpZiAoZWxlbWVudC5mb3JtX2ZpZWxkID09ICdubWUnKVxyXG4gICAgICAgICAgZWxlbWVudC5kZWZhdWx0X3ZhbHVlID0gbm13RHRsLmxhYmVsXHJcbiAgICAgICAgaWYgKGVsZW1lbnQuZm9ybV9maWVsZCA9PSAncHJpbnRfbm1lJylcclxuICAgICAgICAgIGVsZW1lbnQuZGVmYXVsdF92YWx1ZSA9IG5td0R0bC5sYWJlbFxyXG5cclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzZXRmYWN0b3IoZmwsIGZEYXRhKSB7XHJcbiAgICBsZXQgZmN0ciA9IC0xO1xyXG4gICAgaWYgKGZEYXRhID09ICdpbmNvbWUnIHx8IGZEYXRhID09ICdhc3NldHMnKVxyXG4gICAgICBmY3RyID0gMTtcclxuICAgIHRoaXMuZm9ybUZpbGRzLmZvckVhY2goZWxlbWVudCA9PiB7XHJcbiAgICAgIGlmIChlbGVtZW50LmZvcm1fZmllbGQgPT0gJ2ZjdHInKVxyXG4gICAgICAgIGVsZW1lbnQuZGVmYXVsdF92YWx1ZSA9IGZjdHJcclxuICAgIH0pO1xyXG4gIH1cclxuICBpc0V4aXN0KGR0YU9iaiwgZkRhdGEpIHtcclxuICAgIGNvbnNvbGUubG9nKGZEYXRhKTtcclxuICAgIGlmIChmRGF0YSA9PSBcIlwiIHx8IGZEYXRhID09IG51bGwpIHJldHVybjtcclxuICAgIGxldCByZXFPYmogPSB7fTtcclxuICAgIHJlcU9ialtcInVzZXJuYW1lXCJdID0gZkRhdGE7XHJcbiAgICB0aGlzLmhlYWRlcltcIm1ldGhvZFwiXSA9IFwiaXNVc2VyRXhpc3RcIjtcclxuICAgIGxldCBvcHRpb25zID0gKHsgaGVhZGVyczogbmV3IEh0dHBIZWFkZXJzKHRoaXMuaGVhZGVyKSB9KTtcclxuICAgIHRoaXMuc3NcclxuICAgICAgLnZhbGlkYXRlKHJlcU9iaiwgb3B0aW9ucywgXCJjb250YWN0L2xvYWRDb250YWN0XCIpXHJcbiAgICAgIC50aGVuKChyZXNwb25zZTogYW55KSA9PiB7XHJcbiAgICAgICAgaWYgKHJlc3BvbnNlLm1lc3NhZ2UgPT0gXCJcIikge1xyXG4gICAgICAgICAgdGhpcy51c3Jpc0V4aXN0ID0gdHJ1ZTtcclxuICAgICAgICAgIHRoaXMuaWNvID0gXCJjaGVja1wiO1xyXG4gICAgICAgICAgdGhpcy5vbkVyciA9IGR0YU9iai5mb3JtX2ZpZWxkO1xyXG4gICAgICAgICAgLy8gdGhpcy5mbGFzaE1lc3NhZ2VzU2VydmljZS5zaG93KHJlc3BvbnNlLm1lc3NhZ2UsIHsgY3NzQ2xhc3M6ICdhbGVydC1kYW5nZXInLCB0aW1lb3V0OiAzMDAwIH0pO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBkdGFPYmouZGVmYXVsdF92YWx1ZSA9IFwiXCI7XHJcbiAgICAgICAgICB0aGlzLnVzcmlzRXhpc3QgPSB0cnVlO1xyXG4gICAgICAgICAgdGhpcy5pY28gPSBcInRpbWVzXCI7XHJcbiAgICAgICAgICB0aGlzLnNwaW5uZXJTZXJ2aWNlLmhpZGUoKTtcclxuICAgICAgICAgIHRoaXMub25FcnIgPSBkdGFPYmouZm9ybV9maWVsZDtcclxuICAgICAgICAgIHRoaXMudG9hc3RyLmVycm9yKHJlc3BvbnNlLm1lc3NhZ2UpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSlcclxuICAgICAgLmNhdGNoKChlcnI6IGFueSkgPT4ge1xyXG4gICAgICAgIHRoaXMuc3Bpbm5lclNlcnZpY2UuaGlkZSgpO1xyXG4gICAgICAgIHRoaXMudG9hc3RyLmVycm9yKGVyci5tZXNzYWdlKTtcclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuICBzdWJtaXRGb3JtKGZvcm1WYWwsIGJ0bikge1xyXG4gICAgdGhpcy5vblN1Ym1pdChmb3JtVmFsLCBidG4pO1xyXG4gIH1cclxuXHJcbiAgb25TdWJtaXQoZm9ybVZhbCwgYnRuKSB7XHJcbiAgICB2YXIgdCA9IE9iamVjdC5rZXlzKGZvcm1WYWwuZm9ybS5jb250cm9scykuZm9yRWFjaChmaWVsZCA9PiB7XHJcbiAgICAgIGNvbnN0IGNvbnRyb2wgPSBmb3JtVmFsLmZvcm0uZ2V0KGZpZWxkKTtcclxuICAgICAgY29udHJvbC5tYXJrQXNUb3VjaGVkKHsgb25seVNlbGY6IHRydWUgfSk7XHJcbiAgICB9KTtcclxuICAgIGlmIChmb3JtVmFsLmZvcm0udmFsaWQgPT0gdHJ1ZSkge1xyXG4gICAgICB0aGlzLmFkZGVkaXQoZm9ybVZhbC52YWx1ZSwgYnRuKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGFkZGVkaXQodiwgYnRuKSB7XHJcblxyXG4gICAgdGhpcy5zcGlubmVyU2VydmljZS5zaG93KCk7XHJcbiAgICBpZiAodGhpcy5wYWdlSW5mby5mb3JtX25tZSA9PSAnYWRkcmVzc01hc3RlcicgfHwgdGhpcy5wYWdlSW5mby5mb3JtX25tZSA9PSAnYWNjQWRkcmVzc01hc3RlcicgfHwgdGhpcy5wYWdlSW5mby5mb3JtX25tZSA9PSAnYWNjQWRkcmVzc0RldGFpbHMnKSB7XHJcbiAgICAgIGxldCBjaXR5U3RyID0gdi5jaXR5X25tIHx8ICcnO1xyXG4gICAgICBsZXQgY2l0eVN0ckxzdCA9IGNpdHlTdHIuc3BsaXQoJyMnKTtcclxuICAgICAgaWYgKGNpdHlTdHJMc3QubGVuZ3RoID09IDMpIHtcclxuICAgICAgICB2LmNvdW50cnlfbm0gPSBjaXR5U3RyTHN0WzJdO1xyXG4gICAgICAgIHYuc3RhdGVfbm0gPSBjaXR5U3RyTHN0WzFdO1xyXG4gICAgICAgIHYuY2l0eV9ubSA9IGNpdHlTdHJMc3RbMF07XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy50b2FzdHIuc3VjY2VzcyhcIlBsZWFzZSBjaGVjayBjaXR5XCIpO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgICBpZiAodGhpcy5idG5OYW1lICE9IFwiQWRkXCIpXHJcbiAgICAgICAgdlsnYWRkcmVzc19pZG4nXSA9IHRoaXMucGlkO1xyXG4gICAgfVxyXG5cclxuICAgIGxldCByZXFPYmogPSB7fTtcclxuICAgIHZhciBwYWdlVFAgPSB0aGlzLnBhZ2VJbmZvLnBhZ2VfdHlwLnRyaW0oKTtcclxuICAgIHJlcU9ialtcImZvcm1ObWVcIl0gPSB0aGlzLnBhZ2VJbmZvLmZvcm1fbm1lO1xyXG4gICAgcmVxT2JqW1wicHJpbWFyeUtleVwiXSA9IHRoaXMucGFnZUluZm8ucHJpbWFyeV9rZXlfZmllbGQ7XHJcbiAgICByZXFPYmpbXCJwYWdlVHlwXCJdID0gdGhpcy5wYWdlSW5mby5wYWdlX3R5cDtcclxuICAgIHJlcU9ialtcInNlY29uZEtleUZpZWxkXCJdID0gdGhpcy5wYWdlSW5mby5zZWNvbmRfa2V5X2ZpZWxkO1xyXG4gICAgcmVxT2JqW1wicHJpbWFyeUlkXCJdID0gdGhpcy5idG5OYW1lID09IFwiQWRkXCIgPyBcIlwiIDogXCJcIiArIHRoaXMucGlkO1xyXG4gICAgcmVxT2JqW1widGFibGVOYW1lXCJdID0gdGhpcy5wYWdlSW5mby50YWJsZV9uYW1lO1xyXG4gICAgcmVxT2JqW1widHJuc1R5cGVcIl0gPSB0aGlzLmJ0bk5hbWUgPT0gXCJBZGRcIiA/IFwiQUREXCIgOiBcIkVESVRcIjtcclxuICAgIHJlcU9ialtcImRhdGFUcm5zRHRsXCJdID0gdjtcclxuICAgIGlmIChwYWdlVFAgPT0gXCJqc29uRm9ybVwiKSB7XHJcbiAgICAgIHJlcU9ialtcIndoZXJlS2V5c1wiXSA9IHRoaXMucGFnZUluZm8ud2hlcmVfY2xhdXNlO1xyXG4gICAgICByZXFPYmpbXCJ3aGVyZVZsdXNcIl0gPSB0aGlzLndoZXJlTWFwW3RoaXMucGFnZUluZm8ud2hlcmVfY2xhdXNlXTtcclxuICAgIH1cclxuICAgIGNvbnNvbGUubG9nKEpTT04uc3RyaW5naWZ5KHJlcU9iaikpO1xyXG4gICAgdGhpcy5oZWFkZXJbXCJtZXRob2RcIl0gPSBcInNhdmVcIjtcclxuICAgIGxldCBvcHRpb25zID0gKHsgaGVhZGVyczogbmV3IEh0dHBIZWFkZXJzKHRoaXMuaGVhZGVyKSB9KTtcclxuICAgIHRoaXMuc3NcclxuICAgICAgLmFkZERhdGEocmVxT2JqLCBvcHRpb25zKVxyXG4gICAgICAudGhlbigocmVzcG9uc2U6IGFueSkgPT4ge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKHJlc3BvbnNlKTtcclxuICAgICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzID09IFwiU1VDQ0VTU1wiKSB7XHJcbiAgICAgICAgICBidG4uZGlzYWJsZWQgPSBmYWxzZTtcclxuICAgICAgICAgIHRoaXMudGJDZWxsID0gbnVsbDtcclxuICAgICAgICAgIHRoaXMuc2VhcmNoRiA9IG51bGw7XHJcbiAgICAgICAgICB0aGlzLmNsb3NlYnRuLm5hdGl2ZUVsZW1lbnQuY2xpY2soKTtcclxuICAgICAgICAgIC8vIGlmICh0aGlzLmJ0bk5hbWUgIT0gJ0FkZCcpIHtcclxuICAgICAgICAgIC8vICAgZm9yIChjb25zdCBrZXkgaW4gdGhpcy5nbGJPYmopIHtcclxuICAgICAgICAgIC8vICAgICBpZiAodi5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XHJcbiAgICAgICAgICAvLyAgICAgICB0aGlzLmdsYk9ialtrZXldID0gdltrZXldXHJcbiAgICAgICAgICAvLyAgICAgfVxyXG4gICAgICAgICAgLy8gICB9XHJcbiAgICAgICAgICAvLyB9IGVsc2Uge1xyXG4gICAgICAgICAgLy8gZm9yIChjb25zdCBrZXkgaW4gdGhpcy5kYXRhbGlzdFswXSkge1xyXG4gICAgICAgICAgLy8gICBpZiAoIXYuaGFzT3duUHJvcGVydHkoa2V5KSkge1xyXG4gICAgICAgICAgLy8gICAgIHRoaXMuZ2xiT2JqW2tleV0gPSByZXNwb25zZS5faWQ7XHJcbiAgICAgICAgICAvLyAgIH1cclxuICAgICAgICAgIC8vICAgaWYgKHYuaGFzT3duUHJvcGVydHkoa2V5KSkge1xyXG4gICAgICAgICAgLy8gICAgIHRoaXMuZ2xiT2JqW2tleV0gPSB2W2tleV1cclxuICAgICAgICAgIC8vICAgfVxyXG4gICAgICAgICAgLy8gfVxyXG4gICAgICAgICAgLy8gdGhpcy5kYXRhbGlzdC5wdXNoKHRoaXMuZ2xiT2JqKTtcclxuICAgICAgICAgIHRoaXMuZ2V0UGFnZURlZmluYXRpb24oKTtcclxuICAgICAgICAgIC8vIH1cclxuICAgICAgICAgIHRoaXMuc3Bpbm5lclNlcnZpY2UuaGlkZSgpO1xyXG4gICAgICAgICAgdGhpcy50b2FzdHIuc3VjY2VzcyhyZXNwb25zZS5tZXNzYWdlKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgYnRuLmRpc2FibGVkID0gZmFsc2U7XHJcbiAgICAgICAgICB0aGlzLnRiQ2VsbCA9IG51bGw7XHJcbiAgICAgICAgICB0aGlzLnNwaW5uZXJTZXJ2aWNlLmhpZGUoKTtcclxuICAgICAgICAgIHRoaXMudG9hc3RyLmVycm9yKHJlc3BvbnNlLm1lc3NhZ2UpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSlcclxuICAgICAgLmNhdGNoKChlcnI6IGFueSkgPT4ge1xyXG4gICAgICAgIGJ0bi5kaXNhYmxlZCA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMudGJDZWxsID0gbnVsbDtcclxuICAgICAgICB0aGlzLnNwaW5uZXJTZXJ2aWNlLmhpZGUoKTtcclxuICAgICAgICB0aGlzLnRvYXN0ci5lcnJvcihlcnIubWVzc2FnZSk7XHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgdmFsaWRhdGVRdWVyeSh0YmxPYmosIGYpIHtcclxuICAgIGlmIChmID09IFwiXCIgfHwgZiA9PSBudWxsKSByZXR1cm47XHJcbiAgICBsZXQgcmVxT2JqID0ge307XHJcbiAgICByZXFPYmpbXCJzcWxcIl0gPSBmO1xyXG4gICAgdGhpcy5oZWFkZXJbXCJtZXRob2RcIl0gPSBcInZhbGlkYXRlUXVlcnlcIjtcclxuICAgIGxldCBvcHRpb25zID0gKHsgaGVhZGVyczogbmV3IEh0dHBIZWFkZXJzKHRoaXMuaGVhZGVyKSB9KTtcclxuICAgIHRoaXMuc3NcclxuICAgICAgLnZhbGlkYXRlKHJlcU9iaiwgb3B0aW9ucywgXCJzeXN0ZW0vYXBwcGFnZXNcIilcclxuICAgICAgLnRoZW4oKHJlc3BvbnNlOiBhbnkpID0+IHtcclxuICAgICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzID09IFwiU1VDQ0VTU1wiKSB7XHJcbiAgICAgICAgICB0aGlzLm9uRXJyID0gXCJcIjtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5zcGlubmVyU2VydmljZS5oaWRlKCk7XHJcbiAgICAgICAgICB0aGlzLm9uRXJyID0gdGJsT2JqLmZvcm1fZmllbGQ7XHJcbiAgICAgICAgICB0aGlzLnRvYXN0ci5lcnJvcihyZXNwb25zZS5tZXNzYWdlKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pXHJcbiAgICAgIC5jYXRjaCgoZXJyOiBhbnkpID0+IHtcclxuICAgICAgICB0aGlzLnNwaW5uZXJTZXJ2aWNlLmhpZGUoKTtcclxuICAgICAgICB0aGlzLnRvYXN0ci5lcnJvcihlcnIubWVzc2FnZSk7XHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgaXNVbmlxdWUoZHRhT2JqLCBpbnB1VmFsKSB7XHJcbiAgICBpZiAoaW5wdVZhbCA9PSBcIlwiIHx8IGlucHVWYWwgPT0gbnVsbCkgcmV0dXJuO1xyXG4gICAgbGV0IHJlcU9iaiA9IHt9O1xyXG4gICAgcmVxT2JqW1widGFibGVOYW1lXCJdID0gdGhpcy5wYWdlSW5mby50YWJsZV9uYW1lO1xyXG4gICAgcmVxT2JqW1wid2hlcmVLZXlzXCJdID0gZHRhT2JqLmZvcm1fZmllbGQ7XHJcbiAgICByZXFPYmpbXCJ3aGVyZVZsdXNcIl0gPSBpbnB1VmFsO1xyXG4gICAgcmVxT2JqW1wicHJpbWFyeUtleVwiXSA9IHRoaXMucGFnZUluZm8ucHJpbWFyeV9rZXlfZmllbGQ7XHJcbiAgICByZXFPYmpbXCJwcmltYXJ5SWRcIl0gPSB0aGlzLmJ0bk5hbWUgPT0gXCJBZGRcIiA/IFwiXCIgOiB0aGlzLnBpZDtcclxuICAgIHRoaXMuaGVhZGVyW1wibWV0aG9kXCJdID0gXCJ1bmlxdWVDb25RXCI7XHJcbiAgICBsZXQgb3B0aW9ucyA9ICh7IGhlYWRlcnM6IG5ldyBIdHRwSGVhZGVycyh0aGlzLmhlYWRlcikgfSk7XHJcbiAgICB0aGlzLnNzXHJcbiAgICAgIC52YWxpZGF0ZShyZXFPYmosIG9wdGlvbnMsIFwic3lzdGVtL2FwcHBhZ2VzXCIpXHJcbiAgICAgIC50aGVuKChyZXNwb25zZTogYW55KSA9PiB7XHJcbiAgICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1cyA9PSBcIlNVQ0NFU1NcIikge1xyXG4gICAgICAgICAgdGhpcy5vbkVyciA9IFwiXCI7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMuc3Bpbm5lclNlcnZpY2UuaGlkZSgpO1xyXG4gICAgICAgICAgdGhpcy5vbkVyciA9IGR0YU9iai5mb3JtX2ZpZWxkO1xyXG4gICAgICAgICAgdGhpcy50b2FzdHIuZXJyb3IocmVzcG9uc2UubWVzc2FnZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KVxyXG4gICAgICAuY2F0Y2goKGVycjogYW55KSA9PiB7XHJcbiAgICAgICAgdGhpcy5zcGlubmVyU2VydmljZS5oaWRlKCk7XHJcbiAgICAgICAgdGhpcy50b2FzdHIuZXJyb3IoZXJyLm1lc3NhZ2UpO1xyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIG9uUGFnZVNpemVDaGFuZ2UocCkge1xyXG4gICAgaWYgKHAgPT0gXCJBbGxcIikge1xyXG4gICAgICB0aGlzLnBhZ2VTaXplID0gdGhpcy5kYXRhbGlzdC5sZW5ndGg7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnBhZ2VTaXplID0gcDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHNldE9yZGVyKHZhbHVlOiBzdHJpbmcsIGkpIHtcclxuICAgIHRoaXMuc2hvd2FyciA9IGk7XHJcbiAgICBpZiAodGhpcy5vcmRlciA9PT0gdmFsdWUpIHtcclxuICAgICAgdGhpcy5yZXZlcnNlID0gIXRoaXMucmV2ZXJzZTtcclxuICAgIH1cclxuICAgIHRoaXMub3JkZXIgPSB2YWx1ZTtcclxuICB9XHJcblxyXG4gIGVkaXRDZWxsKGQsIHRiaCkge1xyXG4gICAgdGhpcy5nbGJPYmogPSBkO1xyXG4gICAgdGhpcy50YkNlbGwgPSB0Ymg7XHJcbiAgICB0aGlzLnRpdGxlID0gZC50aXRsZTtcclxuICAgIHRoaXMuYnRuTmFtZSA9IFwiRWRpdFwiO1xyXG4gICAgdGhpcy5waWQgPSBkW3RoaXMucGtmXTtcclxuICAgIHRoaXMuZ2V0RWRpdERhdGEoZCk7XHJcbiAgfVxyXG5cclxuICBnZXROYW1lQXR0cihmcm1ubWUsIG1kbCkge1xyXG4gICAgbGV0IHJlcU9iaiA9IHt9O1xyXG4gICAgcmVxT2JqW1wiZm9ybU5tZVwiXSA9IGZybW5tZTtcclxuICAgIHJlcU9ialtcIm5tZUlkblwiXSA9IHRoaXMucm91dGUuc25hcHNob3QucGFyYW1NYXAuZ2V0KFwic3VidlwiKTtcclxuICAgIHJlcU9ialsnbWRsTGlzdCddID0gbWRsO1xyXG4gICAgdGhpcy5oZWFkZXJbXCJtZXRob2RcIl0gPSBcImxvYWRObWVBdHRyXCI7XHJcbiAgICBjb25zb2xlLmxvZyhKU09OLnN0cmluZ2lmeShyZXFPYmopKTtcclxuICAgIGxldCBvcHRpb25zID0gKHsgaGVhZGVyczogbmV3IEh0dHBIZWFkZXJzKHRoaXMuaGVhZGVyKSB9KTtcclxuICAgIHRoaXMuc3NcclxuICAgICAgLnZhbGlkYXRlKHJlcU9iaiwgb3B0aW9ucywgXCJzeXN0ZW0vYXBwcGFnZXNcIilcclxuICAgICAgLnRoZW4oKHJlc3BvbnNlOiBhbnkpID0+IHtcclxuICAgICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzID09IFwiU1VDQ0VTU1wiKSB7XHJcbiAgICAgICAgICBjb25zb2xlLmxvZyhyZXNwb25zZSlcclxuICAgICAgICAgIHRoaXMudWlHcnBMaXN0ID0gcmVzcG9uc2UudWlHcnBMaXN0O1xyXG4gICAgICAgICAgdGhpcy51aUdycExpc3REdGwgPSByZXNwb25zZS51aUdycExpc3REdGw7XHJcbiAgICAgICAgICB0aGlzLmF0dHJDTGlzdER0bCA9IHJlc3BvbnNlLmF0dHJDTGlzdER0bDtcclxuICAgICAgICAgIHRoaXMuYXR0clFMaXN0RHRsID0gcmVzcG9uc2UuYXR0clFMaXN0RHRsO1xyXG4gICAgICAgICAgdGhpcy5kYXRhRHRsID0gcmVzcG9uc2UuZGF0YUR0bDtcclxuICAgICAgICAgIGNvbnNvbGUubG9nKHJlc3BvbnNlKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5zcGlubmVyU2VydmljZS5oaWRlKCk7XHJcbiAgICAgICAgICB0aGlzLnRvYXN0ci5lcnJvcihyZXNwb25zZS5tZXNzYWdlKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pXHJcbiAgICAgIC5jYXRjaCgoZXJyOiBhbnkpID0+IHtcclxuICAgICAgICB0aGlzLnNwaW5uZXJTZXJ2aWNlLmhpZGUoKTtcclxuICAgICAgICB0aGlzLnRvYXN0ci5lcnJvcihlcnIubWVzc2FnZSk7XHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgZG9jZWRpdEFjdGlvbjtcclxuICBkb2NkZWxldGVBY3Rpb247XHJcblxyXG4gIGdldEZpbGVzKG5tZUlkbikge1xyXG5cclxuICAgIHRoaXMuc3Bpbm5lclNlcnZpY2Uuc2hvdygpO1xyXG4gICAgdGhpcy5kb2NlZGl0QWN0aW9uID0gZmFsc2U7XHJcbiAgICB0aGlzLmRvY2RlbGV0ZUFjdGlvbiA9IGZhbHNlO1xyXG4gICAgY29uc3QgcmVxT2JqID0ge307XHJcbiAgICByZXFPYmpbXCJmb3JtTm1lXCJdID0gXCJkb2N1bWVudFVwbG9hZE1hc3RlclwiO1xyXG4gICAgcmVxT2JqW1wibm1lSWRuXCJdID0gbm1lSWRuO1xyXG4gICAgdGhpcy5oZWFkZXJbXCJtZXRob2RcIl0gPSBcImxvYWREb2NzXCI7XHJcbiAgIGNvbnN0IG9wdGlvbnMgPSAoeyBoZWFkZXJzOiBuZXcgSHR0cEhlYWRlcnModGhpcy5oZWFkZXIpIH0pO1xyXG4gICAgY29uc29sZS5sb2coSlNPTi5zdHJpbmdpZnkocmVxT2JqKSk7XHJcbiAgICB0aGlzLnVwbG9hZFNlcnZpY2UuZ2V0RmlsZXNMaXN0KHJlcU9iaiwgb3B0aW9ucykudGhlbigocmVzcG9uc2U6IGFueSkgPT4ge1xyXG4gICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzID09IFwiU1VDQ0VTU1wiKSB7XHJcbiAgICAgICAgY29uc29sZS5sb2cocmVzcG9uc2UpO1xyXG4gICAgICAgIHRoaXMuc3Bpbm5lclNlcnZpY2UuaGlkZSgpO1xyXG4gICAgICAgIHRoaXMuczNkZXRhaWxzID0gcmVzcG9uc2UuczNkZXRhaWxzIHx8IHt9O1xyXG4gICAgICAgIGxldCBkb2NBY3Rpb25idG4gPSByZXNwb25zZS5wYWdlRGVmaW5hdGlvbi5hY3Rpb24gfHwgW107XHJcbiAgICAgICAgZG9jQWN0aW9uYnRuLmZvckVhY2goZWxlbWVudCA9PiB7XHJcbiAgICAgICAgICBkZWJ1Z2dlcjtcclxuICAgICAgICAgIGlmIChlbGVtZW50LmZvcm1fZmllbGQgPT0gJ2VkaXQnKVxyXG4gICAgICAgICAgICB0aGlzLmRvY2VkaXRBY3Rpb24gPSB0cnVlO1xyXG4gICAgICAgICAgaWYgKGVsZW1lbnQuZm9ybV9maWVsZCA9PSAnZGVsZXRlJylcclxuICAgICAgICAgICAgdGhpcy5kb2NkZWxldGVBY3Rpb24gPSB0cnVlO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGxldCBidWNrZXROYW1lID0gdGhpcy5zM2RldGFpbHNbXCJkb2NidWNrZXRcIl0gfHwgXCJcIjtcclxuICAgICAgICBsZXQgZm9sZGVyTmFtZSA9IHRoaXMuczNkZXRhaWxzW1wiZG9jZm9sZGVyXCJdIHx8IFwiXCI7XHJcbiAgICAgICAgZm9sZGVyTmFtZSA9IGZvbGRlck5hbWUucmVwbGFjZShcIiNEU1wiLCBDb29raWUuZ2V0KFwiX2RzXCIpLnRvVXBwZXJDYXNlKCkpO1xyXG4gICAgICAgIHRoaXMuczNkZXRhaWxzW1wiZG9jZm9sZGVyXCJdID0gZm9sZGVyTmFtZTtcclxuICAgICAgICBsZXQgczNBY2Nlc3NLZXkgPSB0aGlzLnMzZGV0YWlsc1tcImRvY1MzYWNjZXNzS2V5XCJdIHx8IFwiXCI7XHJcbiAgICAgICAgbGV0IHMzU2VjcmV0S2V5ID0gdGhpcy5zM2RldGFpbHNbXCJkb2NTM3NlY3JldEtleVwiXSB8fCBcIlwiO1xyXG4gICAgICAgIGxldCBzM3JlZ2lvbiA9IHRoaXMuczNkZXRhaWxzW1wiZG9jUzNyZWdpb25cIl0gfHwgXCJcIjtcclxuICAgICAgICBsZXQgaXN2YWlsZCA9IHRydWU7XHJcbiAgICAgICAgaWYgKGJ1Y2tldE5hbWUgPT0gXCJcIikge1xyXG4gICAgICAgICAgaXN2YWlsZCA9IGZhbHNlO1xyXG4gICAgICAgICAgdGhpcy50b2FzdHIuZXJyb3IoXCJEb2N1bWVudCBCdWNrZXQgbm90IGZvdW5kXCIpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoZm9sZGVyTmFtZSA9PSBcIlwiKSB7XHJcbiAgICAgICAgICBpc3ZhaWxkID0gZmFsc2U7XHJcbiAgICAgICAgICB0aGlzLnRvYXN0ci5lcnJvcihcIkRvY3VtZW50IEZsb2RlciBub3QgZm91bmRcIik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChzM0FjY2Vzc0tleSA9PSBcIlwiKSB7XHJcbiAgICAgICAgICBpc3ZhaWxkID0gZmFsc2U7XHJcbiAgICAgICAgICB0aGlzLnRvYXN0ci5lcnJvcihcIkRvY3VtZW50IHMzQWNjZXNzS2V5IG5vdCBmb3VuZFwiKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHMzU2VjcmV0S2V5ID09IFwiXCIpIHtcclxuICAgICAgICAgIGlzdmFpbGQgPSBmYWxzZTtcclxuICAgICAgICAgIHRoaXMudG9hc3RyLmVycm9yKFwiRG9jdW1lbnQgczNTZWNyZXRLZXkgbm90IGZvdW5kXCIpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoczNyZWdpb24gPT0gXCJcIikge1xyXG4gICAgICAgICAgaXN2YWlsZCA9IGZhbHNlO1xyXG4gICAgICAgICAgdGhpcy50b2FzdHIuZXJyb3IoXCJEb2N1bWVudCBzM3JlZ2lvbiBub3QgZm91bmRcIik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChpc3ZhaWxkKSB7XHJcbiAgICAgICAgICB0aGlzLmRhdGFEdGwgPSByZXNwb25zZS5kYXRhRHRsIHx8IHt9O1xyXG4gICAgICAgICAgdGhpcy5kb2N1bWVudFVwbG9hZExpc3QgPSByZXNwb25zZS5kb2N1bWVudFVwbG9hZER0bC5kb2N1bWVudFVwbG9hZExpc3Q7XHJcbiAgICAgICAgICB0aGlzLmRvY3VtZW50VXBsb2FkTGlzdC5zb3J0KCk7XHJcbiAgICAgICAgICBpZiAodGhpcy5kb2N1bWVudFVwbG9hZExpc3QubGVuZ3RoID4gMClcclxuICAgICAgICAgICAgdGhpcy5kb2N0eXBlID0gdGhpcy5kb2N1bWVudFVwbG9hZExpc3RbMF07XHJcblxyXG4gICAgICAgICAgbGV0IGRvY3R5cCA9IHRoaXMucm91dGUuc25hcHNob3QucGFyYW1zW1wiZG9jdHlwXCJdIHx8IFwiXCI7XHJcbiAgICAgICAgICBpZiAoZG9jdHlwICE9ICcnKVxyXG4gICAgICAgICAgICB0aGlzLmRvY3R5cGUgPSBkb2N0eXA7XHJcblxyXG4gICAgICAgICAgdGhpcy5kb2N1bWVudFVwbG9hZER0bCA9IHJlc3BvbnNlLmRvY3VtZW50VXBsb2FkRHRsO1xyXG5cclxuICAgICAgICAgIGNvbnN0IGJ1Y2tldCA9IG5ldyBTMyh7XHJcbiAgICAgICAgICAgIGFjY2Vzc0tleUlkOiB0aGlzLnMzZGV0YWlsc1tcImRvY1MzYWNjZXNzS2V5XCJdLFxyXG4gICAgICAgICAgICBzZWNyZXRBY2Nlc3NLZXk6IHRoaXMuczNkZXRhaWxzW1wiZG9jUzNzZWNyZXRLZXlcIl0sXHJcbiAgICAgICAgICAgIHJlZ2lvbjogczNyZWdpb25cclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgZGVidWdnZXJcclxuICAgICAgICAgIHRoaXMuZG9jdW1lbnRVcGxvYWRMaXN0LmZvckVhY2goZG9jdHlwZSA9PiB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmRhdGFEdGxbZG9jdHlwZV0gIT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5kYXRhRHRsW2RvY3R5cGVdLmZvckVhY2goZHRsID0+IHtcclxuICAgICAgICAgICAgICAgIGxldCB1cmxQYXJhbXMgPSB7XHJcbiAgICAgICAgICAgICAgICAgIEJ1Y2tldDogdGhpcy5zM2RldGFpbHNbXCJkb2NidWNrZXRcIl0sXHJcbiAgICAgICAgICAgICAgICAgIEtleTogdGhpcy5zM2RldGFpbHNbXCJkb2Nmb2xkZXJcIl0gKyBcIi9cIiArIGR0bFtcImRvY19ubWVcIl1cclxuICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICBidWNrZXQuZ2V0U2lnbmVkVXJsKFwiZ2V0T2JqZWN0XCIsIHVybFBhcmFtcywgZnVuY3Rpb24gKGVyciwgdXJsKSB7XHJcbiAgICAgICAgICAgICAgICAgIGRlYnVnZ2VyXHJcbiAgICAgICAgICAgICAgICAgIGR0bFtcInNpZ25VcmxcIl0gPSB1cmw7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMuZG9jdW1lbnRVcGxvYWRMaXN0ID0gW107XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9KVxyXG4gICAgICAuY2F0Y2goKGVycjogYW55KSA9PiB7XHJcbiAgICAgICAgdGhpcy5zcGlubmVyU2VydmljZS5oaWRlKCk7XHJcbiAgICAgICAgdGhpcy50b2FzdHIuZXJyb3IoZXJyLm1lc3NhZ2UpO1xyXG4gICAgICB9KTtcclxuICAgIGNvbnNvbGUubG9nKFwiZG9jdW1lbnRVcGxvYWRMaXN0XCIsIHRoaXMuZG9jdW1lbnRVcGxvYWRMaXN0KVxyXG4gIH1cclxuICBvcGVuZG9jcyhkdGwpIHtcclxuICAgIGxldCB1cmwgPSBkdGwuc2lnblVybDtcclxuICAgIHdpbmRvdy5vcGVuKHVybCwgJ19ibGFuaycpO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgdXBsb2FkRG9jcyhldmVudCkge1xyXG4gICAgZGVidWdnZXI7XHJcbiAgICB0aGlzLnNwaW5uZXJTZXJ2aWNlLnNob3coKTtcclxuICAgIGxldCBubWVJZG4gPSB0aGlzLnJvdXRlLnNuYXBzaG90LnBhcmFtTWFwLmdldChcInN1YnZcIik7XHJcbiAgICBsZXQgcmVxT2JqID0ge307XHJcbiAgICByZXFPYmpbXCJzZXFcIl0gPSBcIm5tZV9kb2NzX3NlcVwiO1xyXG4gICAgdGhpcy5oZWFkZXJbXCJtZXRob2RcIl0gPSBcImdldFNlcVwiO1xyXG4gICAgbGV0IG9wdGlvbnMgPSAoeyBoZWFkZXJzOiBuZXcgSHR0cEhlYWRlcnModGhpcy5oZWFkZXIpIH0pO1xyXG4gICAgbGV0IHNlcUR0bCA9IGF3YWl0IHRoaXMuc3MuZ2V0RGF0YShyZXFPYmosIG9wdGlvbnMpIHx8IHt9O1xyXG4gICAgaWYgKHNlcUR0bFsnc3RhdHVzJ10gPT0gXCJTVUNDRVNTXCIpIHtcclxuICAgICAgdmFyIHNlcSA9IHNlcUR0bFsnc2VxJ107XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRGaWxlcyA9IGV2ZW50LnRhcmdldC5maWxlcztcclxuICAgICAgdGhpcy5maWxlID0gdGhpcy5zZWxlY3RlZEZpbGVzLml0ZW0oMCk7XHJcbiAgICAgIGxldCBmaWxlTmFtZSA9IHRoaXMuZmlsZS5uYW1lO1xyXG4gICAgICBsZXQgZXh0ID0gZmlsZU5hbWUuc3Vic3RyaW5nKGZpbGVOYW1lLmxhc3RJbmRleE9mKFwiLlwiKSArIDEpO1xyXG4gICAgICBmaWxlTmFtZSA9IG5tZUlkbiArIFwiX1wiICsgc2VxICsgXCJfXCIgKyB0aGlzLmRvY3R5cGUgKyBcIi5cIiArIGV4dDtcclxuICAgICAgbGV0IHVwbG9hZEZpbGUgPSBhd2FpdCB0aGlzLnVwbG9hZEZpbGUodGhpcy5maWxlLCBmaWxlTmFtZSkgfHwgJyc7XHJcbiAgICAgIGRlYnVnZ2VyO1xyXG4gICAgICBpZiAodXBsb2FkRmlsZSAhPSAnJykge1xyXG4gICAgICAgIGxldCByZXFPYmogPSB7fTtcclxuICAgICAgICBsZXQgdHJhbnNkdGwgPSB7fTtcclxuICAgICAgICB0cmFuc2R0bFtcImRvY19leHRcIl0gPSB0aGlzLmZpbGUudHlwZTtcclxuICAgICAgICB0cmFuc2R0bFtcImRvY190eXBcIl0gPSB0aGlzLmRvY3R5cGU7XHJcbiAgICAgICAgdHJhbnNkdGxbXCJkb2NzX2lkblwiXSA9IHNlcTtcclxuICAgICAgICB0cmFuc2R0bFtcImRvY19ubWVcIl0gPSBmaWxlTmFtZTtcclxuICAgICAgICB0cmFuc2R0bFtcInN0dFwiXSA9IFwiMVwiO1xyXG4gICAgICAgIHJlcU9ialtcInRybnNUeXBlXCJdID0gXCJBRERcIjtcclxuICAgICAgICByZXFPYmpbXCJkYXRhVHJuc0R0bFwiXSA9IHRyYW5zZHRsO1xyXG4gICAgICAgIHJlcU9ialtcIm5tZUlkblwiXSA9IG5tZUlkbjtcclxuICAgICAgICB0aGlzLmhlYWRlcltcIm1ldGhvZFwiXSA9IFwic2F2ZURvY3NcIjtcclxuICAgICAgICBjb25zb2xlLmxvZyhyZXFPYmopO1xyXG4gICAgICAgIGxldCBvcHRpb25zID0gKHsgaGVhZGVyczogbmV3IEh0dHBIZWFkZXJzKHRoaXMuaGVhZGVyKSB9KTtcclxuICAgICAgICB0aGlzLnVwbG9hZFNlcnZpY2Uuc2F2ZURvY3RvREIocmVxT2JqLCBvcHRpb25zKS50aGVuKChyZXNwb25zZTogYW55KSA9PiB7XHJcbiAgICAgICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzID09IFwiU1VDQ0VTU1wiKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZ2V0RmlsZXMocmVxT2JqWydubWVJZG4nXSk7IC8vLy8gcmVmcmFzaCBhZnRlciBkb2Mgc2F2ZWRcclxuICAgICAgICAgICAgdGhpcy5zcGlubmVyU2VydmljZS5oaWRlKCk7XHJcbiAgICAgICAgICAgIHRoaXMudG9hc3RyLnN1Y2Nlc3MocmVzcG9uc2UubWVzc2FnZSk7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnNwaW5uZXJTZXJ2aWNlLmhpZGUoKTtcclxuICAgICAgICAgICAgdGhpcy50b2FzdHIuZXJyb3IocmVzcG9uc2UubWVzc2FnZSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSlcclxuICAgICAgICAgIC5jYXRjaCgoZXJyOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5zcGlubmVyU2VydmljZS5oaWRlKCk7XHJcbiAgICAgICAgICAgIHRoaXMudG9hc3RyLmVycm9yKGVyci5tZXNzYWdlKTtcclxuICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLnNwaW5uZXJTZXJ2aWNlLmhpZGUoKTtcclxuICAgICAgICB0aGlzLnRvYXN0ci5lcnJvcihcIkZpbGUgdXBsb2FkIGZhaWxlZFwiKTtcclxuICAgICAgfVxyXG5cclxuXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnNwaW5uZXJTZXJ2aWNlLmhpZGUoKTtcclxuICAgICAgdGhpcy50b2FzdHIuZXJyb3IoXCJkb2N1bWVudCBTZXEuIGdlbmFyYXRpb24gZXJyb3JcIik7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuXHJcblxyXG5cclxuICB1cGxvYWRGaWxlKGZpbGUsIGZpbGVOYW1lKSB7XHJcbiAgICBjb25zdCBidWNrZXQgPSBuZXcgUzMoe1xyXG4gICAgICBhY2Nlc3NLZXlJZDogdGhpcy5zM2RldGFpbHNbXCJkb2NTM2FjY2Vzc0tleVwiXSxcclxuICAgICAgc2VjcmV0QWNjZXNzS2V5OiB0aGlzLnMzZGV0YWlsc1tcImRvY1Mzc2VjcmV0S2V5XCJdLFxyXG4gICAgICByZWdpb246IHRoaXMuczNkZXRhaWxzW1wiZG9jUzNyZWdpb25cIl1cclxuICAgIH0pO1xyXG4gICAgY29uc3QgcGFyYW1zID0ge1xyXG4gICAgICBCdWNrZXQ6IHRoaXMuczNkZXRhaWxzW1wiZG9jYnVja2V0XCJdLFxyXG4gICAgICBLZXk6IHRoaXMuczNkZXRhaWxzW1wiZG9jZm9sZGVyXCJdICsgXCIvXCIgKyBmaWxlTmFtZSxcclxuICAgICAgQm9keTogZmlsZSxcclxuICAgICAgQ29udGVudFR5cGU6IGZpbGUudHlwZVxyXG4gICAgfTtcclxuICAgIGRlYnVnZ2VyO1xyXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcclxuICAgICAgYnVja2V0LnVwbG9hZChwYXJhbXMsIGZ1bmN0aW9uIChlcnJvciwgcmVzdWx0KSB7XHJcbiAgICAgICAgaWYgKGVycm9yKSB7XHJcbiAgICAgICAgICBjb25zb2xlLmxvZyhcIlRoZXJlIHdhcyBhbiBlcnJvciB1cGxvYWRpbmcgeW91ciBmaWxlOiBcIiwgZXJyb3IpO1xyXG4gICAgICAgICAgcmVqZWN0KGVycm9yKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc29sZS5sb2coXCJTdWNjZXNzZnVsbHkgdXBsb2FkZWQgZmlsZS5cIiwgcmVzdWx0KTtcclxuICAgICAgICByZXNvbHZlKHJlc3VsdCk7XHJcbiAgICAgIH0pO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuXHJcbiAgZGVsZXRlRG9jKCkge1xyXG4gICAgdGhpcy5zcGlubmVyU2VydmljZS5zaG93KCk7XHJcbiAgICB0aGlzLkRlbGV0ZURvY3NGcm9tUzModGhpcy5kb2NEZWxldGVEdGwpO1xyXG4gICAgLy8gbGV0IGRlbGV0ZUR0bCA9IGF3YWl0IHRoaXMuRGVsZXRlRG9jc0Zyb21TMyh0aGlzLmRvY0RlbGV0ZUR0bCkgfHwgJyc7XHJcbiAgICAvLyBpZiAoZGVsZXRlRHRsICE9ICcnKSB7XHJcbiAgICBjb25zdCByZXFPYmogPSB7fTtcclxuICAgIHJlcU9ialtcImRvY3NfaWRuXCJdID0gdGhpcy5kb2NEZWxldGVEdGxbJ2RvY3NfaWRuJ107XHJcbiAgICByZXFPYmpbXCJ0cm5zVHlwZVwiXSA9IFwiREVMRVRFXCI7XHJcbiAgICByZXFPYmpbXCJubWVJZG5cIl0gPSB0aGlzLnJvdXRlLnNuYXBzaG90LnBhcmFtTWFwLmdldChcInN1YnZcIik7XHJcbiAgICB0aGlzLmhlYWRlcltcIm1ldGhvZFwiXSA9IFwic2F2ZURvY3NcIjtcclxuICAgIGNvbnNvbGUubG9nKHJlcU9iaik7XHJcbiAgIGNvbnN0IG9wdGlvbnMgPSAoeyBoZWFkZXJzOiBuZXcgSHR0cEhlYWRlcnModGhpcy5oZWFkZXIpIH0pO1xyXG4gICAgdGhpcy51cGxvYWRTZXJ2aWNlLnNhdmVEb2N0b0RCKHJlcU9iaiwgb3B0aW9ucykudGhlbigocmVzcG9uc2U6IGFueSkgPT4ge1xyXG4gICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzID09IFwiU1VDQ0VTU1wiKSB7XHJcbiAgICAgICAgdGhpcy5nZXRGaWxlcyh0aGlzLnJvdXRlLnNuYXBzaG90LnBhcmFtTWFwLmdldChcInN1YnZcIikpOyAvLy8vIHJlZnJhc2ggYWZ0ZXIgZG9jIHNhdmVkXHJcbiAgICAgICAgdGhpcy5zcGlubmVyU2VydmljZS5oaWRlKCk7XHJcbiAgICAgICAgdGhpcy50b2FzdHIuc3VjY2VzcyhyZXNwb25zZS5tZXNzYWdlKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLnNwaW5uZXJTZXJ2aWNlLmhpZGUoKTtcclxuICAgICAgICB0aGlzLnRvYXN0ci5lcnJvcihyZXNwb25zZS5tZXNzYWdlKTtcclxuICAgICAgfVxyXG4gICAgfSkuY2F0Y2goKGVycjogYW55KSA9PiB7XHJcbiAgICAgIHRoaXMuc3Bpbm5lclNlcnZpY2UuaGlkZSgpO1xyXG4gICAgICB0aGlzLnRvYXN0ci5lcnJvcihlcnIubWVzc2FnZSk7XHJcbiAgICB9KTtcclxuICAgIC8vIH0gZWxzZSB7XHJcbiAgICAvLyAgIHRoaXMuc3Bpbm5lclNlcnZpY2UuaGlkZSgpO1xyXG4gICAgLy8gICB0aGlzLmZsYXNoTWVzc2FnZXNTZXJ2aWNlLnNob3coXCJFcnJvciBpbiBmaWxlIGRlbGV0aW9uXCIsIHsgY3NzQ2xhc3M6IFwiYWxlcnQtZGFuZ2VyXCIsIHRpbWVvdXQ6IDMwMDAgfSk7XHJcbiAgICAvLyB9XHJcbiAgfVxyXG5cclxuXHJcbiAgRGVsZXRlRG9jc0Zyb21TMyhkb2NEdGwpIHtcclxuICAgIGNvbnN0IGJ1Y2tldCA9IG5ldyBTMyh7XHJcbiAgICAgIGFjY2Vzc0tleUlkOiB0aGlzLnMzZGV0YWlsc1tcImRvY1MzYWNjZXNzS2V5XCJdLFxyXG4gICAgICBzZWNyZXRBY2Nlc3NLZXk6IHRoaXMuczNkZXRhaWxzW1wiZG9jUzNzZWNyZXRLZXlcIl0sXHJcbiAgICAgIHJlZ2lvbjogdGhpcy5zM2RldGFpbHNbXCJkb2NTM3JlZ2lvblwiXVxyXG4gICAgfSk7XHJcbiAgICBjb25zdCBwYXJhbXMgPSB7XHJcbiAgICAgIEJ1Y2tldDogdGhpcy5zM2RldGFpbHNbXCJkb2NidWNrZXRcIl0sXHJcbiAgICAgIEtleTogdGhpcy5zM2RldGFpbHNbXCJkb2Nmb2xkZXJcIl0gKyBcIi9cIiArIGRvY0R0bFsnZG9jX25tZSddLFxyXG4gICAgfTtcclxuXHJcbiAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xyXG4gICAgICBidWNrZXQuZGVsZXRlT2JqZWN0KHBhcmFtcywgZnVuY3Rpb24gKGVycm9yLCByZXN1bHQpIHtcclxuICAgICAgICBpZiAoZXJyb3IpIHtcclxuICAgICAgICAgIGNvbnNvbGUubG9nKFwiVGhlcmUgd2FzIGFuIGVycm9yIGRlbGV0ZSB5b3VyIGZpbGU6IFwiLCBlcnJvcik7XHJcbiAgICAgICAgICByZWplY3QoXCJcIik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnNvbGUubG9nKFwiZGVsZXRlZCB1cGxvYWRlZCBmaWxlLlwiLCByZXN1bHQpO1xyXG4gICAgICAgIHJlc29sdmUocmVzdWx0KTtcclxuICAgICAgfSk7XHJcbiAgICB9KTtcclxuXHJcbiAgfVxyXG4gIGRvY0RlbGV0ZUR0bCA9IHt9O1xyXG4gIENvbmZpcm1kZWxldGVEb2MoZG9jRHRsKSB7XHJcbiAgICB0aGlzLmRvY0RlbGV0ZUR0bCA9IGRvY0R0bDtcclxuICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkb2NkZWxldGVidG4nKS5jbGljaygpO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgRWRpdFVwbG9hZERvY3MoZG9jRHRsLCBldmVudCkge1xyXG4gICAgZGVidWdnZXI7XHJcbiAgICBsZXQgZGVsZXRlRHRsID0gYXdhaXQgdGhpcy5EZWxldGVEb2NzRnJvbVMzKHRoaXMuZG9jRGVsZXRlRHRsKSB8fCAnJztcclxuICAgIGRlYnVnZ2VyO1xyXG4gICAgaWYgKGRlbGV0ZUR0bCAhPSAnJykge1xyXG4gICAgICBjb25zdCByZXFPYmogPSB7fTtcclxuICAgICAgcmVxT2JqW1wiZG9jc19pZG5cIl0gPSBkb2NEdGxbJ2RvY3NfaWRuJ107XHJcbiAgICAgIHJlcU9ialtcInRybnNUeXBlXCJdID0gXCJERUxFVEVcIjtcclxuICAgICAgcmVxT2JqW1wibm1lSWRuXCJdID0gdGhpcy5yb3V0ZS5zbmFwc2hvdC5wYXJhbU1hcC5nZXQoXCJzdWJ2XCIpO1xyXG4gICAgICB0aGlzLmhlYWRlcltcIm1ldGhvZFwiXSA9IFwic2F2ZURvY3NcIjtcclxuICAgICBjb25zdCBvcHRpb25zID0gKHsgaGVhZGVyczogbmV3IEh0dHBIZWFkZXJzKHRoaXMuaGVhZGVyKSB9KTtcclxuICAgICAgbGV0IGRlbGV0ZURiRHRsID0gYXdhaXQgdGhpcy51cGxvYWRTZXJ2aWNlLnNhdmVEb2N0b0RCKHJlcU9iaiwgb3B0aW9ucyk7XHJcbiAgICAgIGRlYnVnZ2VyO1xyXG4gICAgICBpZiAoZGVsZXRlRGJEdGxbJ3N0YXR1cyddID09IFwiU1VDQ0VTU1wiKSB7XHJcbiAgICAgICAgdGhpcy51cGxvYWREb2NzKGV2ZW50KVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMudG9hc3RyLmVycm9yKFwiRXJyb3IgaW4gZmlsZSBFZGl0XCIpO1xyXG4gICAgICB9XHJcblxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbG9hZEFwcGxpY2F0aW9uKCkge1xyXG4gICAgdGhpcy5hcHBsaWNhdGlvbiA9IFwiXCI7XHJcbiAgICB0aGlzLnNwaW5uZXJTZXJ2aWNlLnNob3coKTtcclxuICAgIGNvbnN0IHJlcU9iaiA9IHt9O1xyXG4gICAgcmVxT2JqW1wiZm9ybU5tZVwiXSA9IFwiY29udGFjdFNlYXJjaEZvcm1cIjtcclxuICAgIHRoaXMuaGVhZGVyW1wibWV0aG9kXCJdID0gXCJsb2FkQXBwbGljYXRpb25zXCI7XHJcbiAgIGNvbnN0IG9wdGlvbnMgPSAoeyBoZWFkZXJzOiBuZXcgSHR0cEhlYWRlcnModGhpcy5oZWFkZXIpIH0pO1xyXG4gICAgdGhpcy5jc1xyXG4gICAgICAubG9hZChyZXFPYmosIG9wdGlvbnMsIFwiY29udGFjdC9sb2FkQ29udGFjdFwiKVxyXG4gICAgICAudGhlbigocmVzcG9uc2U6IGFueSkgPT4ge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKHJlc3BvbnNlKTtcclxuICAgICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzID09IFwiU1VDQ0VTU1wiKSB7XHJcbiAgICAgICAgICB0aGlzLmFwcGxpY2F0aW9uTGlzdCA9IHJlc3BvbnNlLmFwcGxpY2F0aW9uTGlzdDtcclxuICAgICAgICAgIHRoaXMuc3Bpbm5lclNlcnZpY2UuaGlkZSgpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLnNwaW5uZXJTZXJ2aWNlLmhpZGUoKTtcclxuICAgICAgICAgIHRoaXMudG9hc3RyLmVycm9yKHJlc3BvbnNlLm1lc3NhZ2UpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSlcclxuICAgICAgLmNhdGNoKChlcnI6IGFueSkgPT4ge1xyXG4gICAgICAgIHRoaXMuc3Bpbm5lclNlcnZpY2UuaGlkZSgpO1xyXG4gICAgICAgIHRoaXMudG9hc3RyLmVycm9yKGVyci5tZXNzYWdlKTtcclxuICAgICAgfSk7XHJcbiAgfVxyXG4gIGFwcGxpY2F0aW9uO1xyXG4gIE1vZHVsZTtcclxuICBVc2VyO1xyXG4gIGxvYWRXZWJBcHBsaWNhdGlvbigpIHtcclxuICAgIHRoaXMuc3Bpbm5lclNlcnZpY2Uuc2hvdygpO1xyXG4gICAgY29uc3QgcmVxT2JqID0ge307XHJcbiAgICByZXFPYmpbXCJmb3JtTm1lXCJdID0gXCJjb250YWN0U2VhcmNoRm9ybVwiO1xyXG4gICAgcmVxT2JqW1wiYXBwbGljYXRpb25TdHJcIl0gPSBcIldXV1wiO1xyXG4gICAgdGhpcy5oZWFkZXJbXCJtZXRob2RcIl0gPSBcImxvYWRBcHBsaWNhdGlvbnNcIjtcclxuICAgY29uc3Qgb3B0aW9ucyA9ICh7IGhlYWRlcnM6IG5ldyBIdHRwSGVhZGVycyh0aGlzLmhlYWRlcikgfSk7XHJcbiAgICB0aGlzLmNzXHJcbiAgICAgIC5sb2FkKHJlcU9iaiwgb3B0aW9ucywgXCJjb250YWN0L2xvYWRDb250YWN0XCIpXHJcbiAgICAgIC50aGVuKChyZXNwb25zZTogYW55KSA9PiB7XHJcbiAgICAgICAgY29uc29sZS5sb2cocmVzcG9uc2UpO1xyXG4gICAgICAgIGlmIChyZXNwb25zZS5zdGF0dXMgPT0gXCJTVUNDRVNTXCIpIHtcclxuICAgICAgICAgIHRoaXMuYXBwbGljYXRpb25MaXN0ID0gcmVzcG9uc2UuYXBwbGljYXRpb25MaXN0O1xyXG4gICAgICAgICAgaWYgKHRoaXMuYXBwbGljYXRpb25MaXN0Lmxlbmd0aCA9PSAyKSB7XHJcbiAgICAgICAgICAgIHRoaXMuYXBwbGljYXRpb24gPSB0aGlzLmFwcGxpY2F0aW9uTGlzdFsxXS5rO1xyXG4gICAgICAgICAgICB0aGlzLmxvYWRVc3JNZGwodGhpcy5hcHBsaWNhdGlvbik7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB0aGlzLnNwaW5uZXJTZXJ2aWNlLmhpZGUoKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5zcGlubmVyU2VydmljZS5oaWRlKCk7XHJcbiAgICAgICAgICB0aGlzLnRvYXN0ci5lcnJvcihyZXNwb25zZS5tZXNzYWdlKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pXHJcbiAgICAgIC5jYXRjaCgoZXJyOiBhbnkpID0+IHtcclxuICAgICAgICB0aGlzLnNwaW5uZXJTZXJ2aWNlLmhpZGUoKTtcclxuICAgICAgICB0aGlzLnRvYXN0ci5lcnJvcihlcnIubWVzc2FnZSk7XHJcbiAgICAgIH0pO1xyXG4gIH1cclxuICBsb2FkVXNyTWRsKGFwcGxJZCkge1xyXG4gICAgdGhpcy5Nb2R1bGUgPSBcIlwiO1xyXG4gICAgdGhpcy5Vc2VyID0gXCJcIjtcclxuICAgIHRoaXMuc3Bpbm5lclNlcnZpY2Uuc2hvdygpO1xyXG4gICAgY29uc3QgcmVxT2JqID0ge307XHJcbiAgICByZXFPYmpbXCJubWVJZG5cIl0gPSB0aGlzLnJvdXRlLnNuYXBzaG90LnBhcmFtTWFwLmdldChcInN1YnZcIik7XHJcbiAgICByZXFPYmpbXCJhcHBsSWRcIl0gPSBhcHBsSWQ7XHJcbiAgICByZXFPYmpbXCJmb3JtTm1lXCJdID0gXCJVc2VyTW9kdWxlTGlzdFwiO1xyXG4gICAgdGhpcy5oZWFkZXJbXCJtZXRob2RcIl0gPSBcImdldFVzZXJNb2R1bGVMaXN0XCI7XHJcbiAgICBjb25zb2xlLmxvZyhKU09OLnN0cmluZ2lmeShyZXFPYmopKTtcclxuICAgY29uc3Qgb3B0aW9ucyA9ICh7IGhlYWRlcnM6IG5ldyBIdHRwSGVhZGVycyh0aGlzLmhlYWRlcikgfSk7XHJcbiAgICB0aGlzLmNzXHJcbiAgICAgIC5sb2FkTWVudVJpZ2h0c1VzZXJXaXNlKHJlcU9iaiwgb3B0aW9ucylcclxuICAgICAgLnRoZW4oKHJlc3BvbnNlOiBhbnkpID0+IHtcclxuICAgICAgICBjb25zb2xlLmxvZyhyZXNwb25zZSk7XHJcbiAgICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1cyA9PSBcIlNVQ0NFU1NcIikge1xyXG4gICAgICAgICAgdGhpcy51c2VyRHRscyA9IHJlc3BvbnNlLnVzZXJEdGxzO1xyXG4gICAgICAgICAgaWYgKHRoaXMudXNlckR0bHMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICB0aGlzLlVzZXIgPSB0aGlzLnVzZXJEdGxzWzBdWyd1c2VyX2lkbiddO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgdGhpcy5tb2R1bGVEdGxzID0gcmVzcG9uc2UubW9kdWxlRHRscztcclxuICAgICAgICAgIGlmICh0aGlzLm1vZHVsZUR0bHMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICB0aGlzLk1vZHVsZSA9IHRoaXMubW9kdWxlRHRsc1swXVsnbW9kdWxlX2lkbiddO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgdGhpcy5zcGlubmVyU2VydmljZS5oaWRlKCk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMuc3Bpbm5lclNlcnZpY2UuaGlkZSgpO1xyXG4gICAgICAgICAgdGhpcy50b2FzdHIuZXJyb3IocmVzcG9uc2UubWVzc2FnZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KVxyXG4gICAgICAuY2F0Y2goKGVycjogYW55KSA9PiB7XHJcbiAgICAgICAgdGhpcy5zcGlubmVyU2VydmljZS5oaWRlKCk7XHJcbiAgICAgICAgdGhpcy50b2FzdHIuZXJyb3IoZXJyLm1lc3NhZ2UpO1xyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIGdldFVzZXJSaWdodHModXNlcklkLCBNb2R1bGVJZCkge1xyXG4gICAgdGhpcy5zcGlubmVyU2VydmljZS5zaG93KCk7XHJcbiAgICBjb25zdCByZXFPYmogPSB7fTtcclxuICAgIHJlcU9ialtcIm1vZHVsZUlkbnNcIl0gPSBNb2R1bGVJZDtcclxuICAgIHJlcU9ialtcInVzZXJJZFwiXSA9IHVzZXJJZDtcclxuICAgIHRoaXMuaGVhZGVyW1wibWV0aG9kXCJdID0gXCJnZXRNZW51TGlzdEJ5TW9kdWxlXCI7XHJcbiAgICBjb25zb2xlLmxvZyhyZXFPYmopO1xyXG4gICBjb25zdCBvcHRpb25zID0gKHsgaGVhZGVyczogbmV3IEh0dHBIZWFkZXJzKHRoaXMuaGVhZGVyKSB9KTtcclxuICAgIHRoaXMuY3NcclxuICAgICAgLmxvYWRNZW51UmlnaHRzVXNlcldpc2UocmVxT2JqLCBvcHRpb25zKVxyXG4gICAgICAudGhlbigocmVzcG9uc2U6IGFueSkgPT4ge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKHJlc3BvbnNlKTtcclxuICAgICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzID09IFwiU1VDQ0VTU1wiKSB7XHJcbiAgICAgICAgICB0aGlzLnRvdE1lbnUgPSAwO1xyXG4gICAgICAgICAgdGhpcy5tZW51TGlzdCA9IHJlc3BvbnNlLm1lbnVMaXN0O1xyXG4gICAgICAgICAgdGhpcy51c2VyUmlnaHRzTWVudUxpc3QgPSByZXNwb25zZS51c2VyUmlnaHRzTWVudUxpc3Q7XHJcbiAgICAgICAgICB0aGlzLm1lbnVMaXN0LmZvckVhY2goZWxlbWVudCA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMudG90TWVudSArPSBlbGVtZW50LlN1Yk1lbnUubGVuZ3RoO1xyXG4gICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgdGhpcy5zcGlubmVyU2VydmljZS5oaWRlKCk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMuc3Bpbm5lclNlcnZpY2UuaGlkZSgpO1xyXG4gICAgICAgICAgdGhpcy50b2FzdHIuZXJyb3IocmVzcG9uc2UubWVzc2FnZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KVxyXG4gICAgICAuY2F0Y2goKGVycjogYW55KSA9PiB7XHJcbiAgICAgICAgdGhpcy5zcGlubmVyU2VydmljZS5oaWRlKCk7XHJcbiAgICAgICAgdGhpcy50b2FzdHIuZXJyb3IoZXJyLm1lc3NhZ2UpO1xyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIG9uQ2hhbmdlU3ViTWVudShlLCBzdWJNZW51SWQsIE1lbnVJZCwgVXNlcklkLCBtb2R1bGVJZCkge1xyXG4gICAgY29uc3QgcmVxT2JqID0ge307XHJcbiAgICByZXFPYmpbXCJ1c2VySWRcIl0gPSBVc2VySWQ7XHJcbiAgICByZXFPYmpbXCJtZW51SWRuXCJdID1cclxuICAgICAgZS50YXJnZXQuY2hlY2tlZCA9PSB0cnVlID8gW3N1Yk1lbnVJZCwgTWVudUlkXSA6IFtzdWJNZW51SWRdO1xyXG4gICAgcmVxT2JqW1wic3R0XCJdID0gZS50YXJnZXQuY2hlY2tlZCA9PSB0cnVlID8gXCIxXCIgOiBcIjBcIjtcclxuICAgIHJlcU9ialtcImZvcm1ObWVcIl0gPSBcInNhdmVVc2VyUmlnaHRNYXN0ZXJcIjtcclxuICAgIHRoaXMuaGVhZGVyW1wibWV0aG9kXCJdID0gXCJzYXZlVXNlclJpZ2h0c1wiO1xyXG4gICAgY29uc29sZS5sb2cocmVxT2JqKTtcclxuICAgY29uc3Qgb3B0aW9ucyA9ICh7IGhlYWRlcnM6IG5ldyBIdHRwSGVhZGVycyh0aGlzLmhlYWRlcikgfSk7XHJcbiAgICB0aGlzLmNzXHJcbiAgICAgIC5zYXZlVXNlck1lbnVSaWdodHNDb250YWN0KHJlcU9iaiwgb3B0aW9ucylcclxuICAgICAgLnRoZW4oKHJlc3BvbnNlOiBhbnkpID0+IHtcclxuICAgICAgICBjb25zb2xlLmxvZyhyZXNwb25zZSk7XHJcbiAgICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1cyA9PSBcIlNVQ0NFU1NcIikge1xyXG4gICAgICAgICAgdGhpcy5nZXRVc2VyUmlnaHRzKFVzZXJJZCwgbW9kdWxlSWQpO1xyXG4gICAgICAgICAgdGhpcy5zcGlubmVyU2VydmljZS5oaWRlKCk7XHJcbiAgICAgICAgICB0aGlzLnRvYXN0ci5zdWNjZXNzKHJlc3BvbnNlLm1lc3NhZ2UpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLnNwaW5uZXJTZXJ2aWNlLmhpZGUoKTtcclxuICAgICAgICAgIHRoaXMudG9hc3RyLmVycm9yKHJlc3BvbnNlLm1lc3NhZ2UpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSlcclxuICAgICAgLmNhdGNoKChlcnI6IGFueSkgPT4ge1xyXG4gICAgICAgIHRoaXMuc3Bpbm5lclNlcnZpY2UuaGlkZSgpO1xyXG4gICAgICAgIHRoaXMudG9hc3RyLmVycm9yKGVyci5tZXNzYWdlKTtcclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuICBvbkNoYW5nZU1lbnUoZSwgbWVudUlkLCBVc2VySWQsIG1vZHVsZUlkKSB7XHJcbiAgICB0aGlzLnNwaW5uZXJTZXJ2aWNlLnNob3coKTtcclxuICAgIGxldCBzdWJNZW51T2JqID0gdGhpcy5tZW51TGlzdC5maW5kKG8gPT4gby5tZW51X2lkbiA9PT0gbWVudUlkKTtcclxuICAgIHRoaXMuc3ViTWVudUlkbnMucHVzaChtZW51SWQpO1xyXG5cclxuICAgIGlmIChzdWJNZW51T2JqLlN1Yk1lbnUubGVuZ3RoID4gMCkge1xyXG4gICAgICBzdWJNZW51T2JqLlN1Yk1lbnUuZm9yRWFjaChlbGVtZW50ID0+IHtcclxuICAgICAgICB0aGlzLnN1Yk1lbnVJZG5zLnB1c2goZWxlbWVudC5tZW51X2lkbik7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgY29uc3QgcmVxT2JqID0ge307XHJcbiAgICByZXFPYmpbXCJ1c2VySWRcIl0gPSBVc2VySWQ7XHJcbiAgICByZXFPYmpbXCJtZW51SWRuXCJdID0gdGhpcy5zdWJNZW51SWRucztcclxuICAgIHJlcU9ialtcInN0dFwiXSA9IGUudGFyZ2V0LmNoZWNrZWQgPT0gdHJ1ZSA/IFwiMVwiIDogXCIwXCI7XHJcbiAgICByZXFPYmpbXCJmb3JtTm1lXCJdID0gXCJzYXZlVXNlclJpZ2h0TWFzdGVyXCI7XHJcbiAgICB0aGlzLmhlYWRlcltcIm1ldGhvZFwiXSA9IFwic2F2ZVVzZXJSaWdodHNcIjtcclxuICAgIGNvbnNvbGUubG9nKHJlcU9iaik7XHJcbiAgIGNvbnN0IG9wdGlvbnMgPSAoeyBoZWFkZXJzOiBuZXcgSHR0cEhlYWRlcnModGhpcy5oZWFkZXIpIH0pO1xyXG4gICAgdGhpcy5jc1xyXG4gICAgICAuc2F2ZVVzZXJNZW51UmlnaHRzQ29udGFjdChyZXFPYmosIG9wdGlvbnMpXHJcbiAgICAgIC50aGVuKChyZXNwb25zZTogYW55KSA9PiB7XHJcbiAgICAgICAgY29uc29sZS5sb2cocmVzcG9uc2UpO1xyXG4gICAgICAgIGlmIChyZXNwb25zZS5zdGF0dXMgPT0gXCJTVUNDRVNTXCIpIHtcclxuICAgICAgICAgIHRoaXMuZ2V0VXNlclJpZ2h0cyhVc2VySWQsIG1vZHVsZUlkKTtcclxuICAgICAgICAgIHRoaXMuc3ViTWVudUlkbnMgPSBbXTtcclxuICAgICAgICAgIHRoaXMuc3Bpbm5lclNlcnZpY2UuaGlkZSgpO1xyXG4gICAgICAgICAgdGhpcy50b2FzdHIuc3VjY2VzcyhyZXNwb25zZS5tZXNzYWdlKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5zcGlubmVyU2VydmljZS5oaWRlKCk7XHJcbiAgICAgICAgICB0aGlzLnRvYXN0ci5lcnJvcihyZXNwb25zZS5tZXNzYWdlKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pXHJcbiAgICAgIC5jYXRjaCgoZXJyOiBhbnkpID0+IHtcclxuICAgICAgICB0aGlzLnNwaW5uZXJTZXJ2aWNlLmhpZGUoKTtcclxuICAgICAgICB0aGlzLnRvYXN0ci5lcnJvcihlcnIubWVzc2FnZSk7XHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcblxyXG4gIG9uQ2hhbmdlV2ViU3ViTWVudShlLCBzdWJNZW51SWQsIE1lbnVJZCwgVXNlcklkLCBtb2R1bGVJZCkge1xyXG4gICAgY29uc3QgcmVxT2JqID0ge307XHJcbiAgICByZXFPYmpbXCJ1c2VySWRcIl0gPSBVc2VySWQ7XHJcbiAgICByZXFPYmpbXCJtZW51SWRuXCJdID1cclxuICAgICAgZS50YXJnZXQuY2hlY2tlZCA9PSB0cnVlID8gW3N1Yk1lbnVJZCwgTWVudUlkXSA6IFtzdWJNZW51SWRdO1xyXG4gICAgcmVxT2JqW1wic3R0XCJdID0gZS50YXJnZXQuY2hlY2tlZCA9PSB0cnVlID8gXCIwXCIgOiBcIjFcIjtcclxuICAgIHJlcU9ialtcImZvcm1ObWVcIl0gPSBcInNhdmVVc2VyUmlnaHRNYXN0ZXJcIjtcclxuICAgIHRoaXMuaGVhZGVyW1wibWV0aG9kXCJdID0gXCJzYXZlVXNlclJpZ2h0c1wiO1xyXG4gICAgY29uc29sZS5sb2cocmVxT2JqKTtcclxuICAgY29uc3Qgb3B0aW9ucyA9ICh7IGhlYWRlcnM6IG5ldyBIdHRwSGVhZGVycyh0aGlzLmhlYWRlcikgfSk7XHJcbiAgICB0aGlzLmNzXHJcbiAgICAgIC5zYXZlVXNlck1lbnVSaWdodHNDb250YWN0KHJlcU9iaiwgb3B0aW9ucylcclxuICAgICAgLnRoZW4oKHJlc3BvbnNlOiBhbnkpID0+IHtcclxuICAgICAgICBjb25zb2xlLmxvZyhyZXNwb25zZSk7XHJcbiAgICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1cyA9PSBcIlNVQ0NFU1NcIikge1xyXG4gICAgICAgICAgdGhpcy5nZXRVc2VyUmlnaHRzKFVzZXJJZCwgbW9kdWxlSWQpO1xyXG4gICAgICAgICAgdGhpcy5zcGlubmVyU2VydmljZS5oaWRlKCk7XHJcbiAgICAgICAgICB0aGlzLnRvYXN0ci5zdWNjZXNzKHJlc3BvbnNlLm1lc3NhZ2UpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLnNwaW5uZXJTZXJ2aWNlLmhpZGUoKTtcclxuICAgICAgICAgIHRoaXMudG9hc3RyLmVycm9yKHJlc3BvbnNlLm1lc3NhZ2UpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSlcclxuICAgICAgLmNhdGNoKChlcnI6IGFueSkgPT4ge1xyXG4gICAgICAgIHRoaXMuc3Bpbm5lclNlcnZpY2UuaGlkZSgpO1xyXG4gICAgICAgIHRoaXMudG9hc3RyLmVycm9yKGVyci5tZXNzYWdlKTtcclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuICBvbkNoYW5nZVdlYk1lbnUoZSwgbWVudUlkLCBVc2VySWQsIG1vZHVsZUlkKSB7XHJcbiAgICB0aGlzLnNwaW5uZXJTZXJ2aWNlLnNob3coKTtcclxuICAgIGxldCBzdWJNZW51T2JqID0gdGhpcy5tZW51TGlzdC5maW5kKG8gPT4gby5tZW51X2lkbiA9PT0gbWVudUlkKTtcclxuICAgIHRoaXMuc3ViTWVudUlkbnMucHVzaChtZW51SWQpO1xyXG5cclxuICAgIGlmIChzdWJNZW51T2JqLlN1Yk1lbnUubGVuZ3RoID4gMCkge1xyXG4gICAgICBzdWJNZW51T2JqLlN1Yk1lbnUuZm9yRWFjaChlbGVtZW50ID0+IHtcclxuICAgICAgICB0aGlzLnN1Yk1lbnVJZG5zLnB1c2goZWxlbWVudC5tZW51X2lkbik7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgY29uc3QgcmVxT2JqID0ge307XHJcbiAgICByZXFPYmpbXCJ1c2VySWRcIl0gPSBVc2VySWQ7XHJcbiAgICByZXFPYmpbXCJtZW51SWRuXCJdID0gdGhpcy5zdWJNZW51SWRucztcclxuICAgIHJlcU9ialtcInN0dFwiXSA9IGUudGFyZ2V0LmNoZWNrZWQgPT0gdHJ1ZSA/IFwiMFwiIDogXCIxXCI7XHJcbiAgICByZXFPYmpbXCJmb3JtTm1lXCJdID0gXCJzYXZlVXNlclJpZ2h0TWFzdGVyXCI7XHJcbiAgICB0aGlzLmhlYWRlcltcIm1ldGhvZFwiXSA9IFwic2F2ZVVzZXJSaWdodHNcIjtcclxuICAgIGNvbnNvbGUubG9nKHJlcU9iaik7XHJcbiAgIGNvbnN0IG9wdGlvbnMgPSAoeyBoZWFkZXJzOiBuZXcgSHR0cEhlYWRlcnModGhpcy5oZWFkZXIpIH0pO1xyXG4gICAgdGhpcy5jc1xyXG4gICAgICAuc2F2ZVVzZXJNZW51UmlnaHRzQ29udGFjdChyZXFPYmosIG9wdGlvbnMpXHJcbiAgICAgIC50aGVuKChyZXNwb25zZTogYW55KSA9PiB7XHJcbiAgICAgICAgY29uc29sZS5sb2cocmVzcG9uc2UpO1xyXG4gICAgICAgIGlmIChyZXNwb25zZS5zdGF0dXMgPT0gXCJTVUNDRVNTXCIpIHtcclxuICAgICAgICAgIHRoaXMuZ2V0VXNlclJpZ2h0cyhVc2VySWQsIG1vZHVsZUlkKTtcclxuICAgICAgICAgIHRoaXMuc3ViTWVudUlkbnMgPSBbXTtcclxuICAgICAgICAgIHRoaXMuc3Bpbm5lclNlcnZpY2UuaGlkZSgpO1xyXG4gICAgICAgICAgdGhpcy50b2FzdHIuc3VjY2VzcyhyZXNwb25zZS5tZXNzYWdlKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5zcGlubmVyU2VydmljZS5oaWRlKCk7XHJcbiAgICAgICAgICB0aGlzLnRvYXN0ci5lcnJvcihyZXNwb25zZS5tZXNzYWdlKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pXHJcbiAgICAgIC5jYXRjaCgoZXJyOiBhbnkpID0+IHtcclxuICAgICAgICB0aGlzLnNwaW5uZXJTZXJ2aWNlLmhpZGUoKTtcclxuICAgICAgICB0aGlzLnRvYXN0ci5lcnJvcihlcnIubWVzc2FnZSk7XHJcbiAgICAgIH0pO1xyXG4gIH1cclxuICBvbkNoYW5nZUFsbChlLCBVc2VySWQsIG1vZHVsZUlkKSB7XHJcbiAgICB0aGlzLnNwaW5uZXJTZXJ2aWNlLnNob3coKTtcclxuXHJcbiAgICB0aGlzLm1lbnVMaXN0LmZvckVhY2goZWxlbWVudCA9PiB7XHJcbiAgICAgIHRoaXMuc3ViTWVudUlkbnMucHVzaChlbGVtZW50Lm1lbnVfaWRuKTtcclxuICAgICAgaWYgKGVsZW1lbnQuU3ViTWVudS5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgZWxlbWVudC5TdWJNZW51LmZvckVhY2goc3ViZWxlbWVudCA9PiB7XHJcbiAgICAgICAgICB0aGlzLnN1Yk1lbnVJZG5zLnB1c2goc3ViZWxlbWVudC5tZW51X2lkbik7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIGNvbnN0IHJlcU9iaiA9IHt9O1xyXG4gICAgcmVxT2JqW1widXNlcklkXCJdID0gVXNlcklkO1xyXG4gICAgcmVxT2JqW1wibWVudUlkblwiXSA9IHRoaXMuc3ViTWVudUlkbnM7XHJcbiAgICByZXFPYmpbXCJzdHRcIl0gPSBlLnRhcmdldC5jaGVja2VkID09IHRydWUgPyBcIjFcIiA6IFwiMFwiO1xyXG4gICAgcmVxT2JqW1wiZm9ybU5tZVwiXSA9IFwic2F2ZVVzZXJSaWdodE1hc3RlclwiO1xyXG4gICAgdGhpcy5oZWFkZXJbXCJtZXRob2RcIl0gPSBcInNhdmVVc2VyUmlnaHRzXCI7XHJcbiAgICBjb25zb2xlLmxvZyhyZXFPYmopO1xyXG4gICBjb25zdCBvcHRpb25zID0gKHsgaGVhZGVyczogbmV3IEh0dHBIZWFkZXJzKHRoaXMuaGVhZGVyKSB9KTtcclxuICAgIHRoaXMuY3NcclxuICAgICAgLnNhdmVVc2VyTWVudVJpZ2h0c0NvbnRhY3QocmVxT2JqLCBvcHRpb25zKVxyXG4gICAgICAudGhlbigocmVzcG9uc2U6IGFueSkgPT4ge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKHJlc3BvbnNlKTtcclxuICAgICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzID09IFwiU1VDQ0VTU1wiKSB7XHJcbiAgICAgICAgICB0aGlzLnNwaW5uZXJTZXJ2aWNlLmhpZGUoKTtcclxuICAgICAgICAgIHRoaXMuZ2V0VXNlclJpZ2h0cyhVc2VySWQsIG1vZHVsZUlkKTtcclxuICAgICAgICAgIHRoaXMuc3ViTWVudUlkbnMgPSBbXTtcclxuICAgICAgICAgIHRoaXMudG9hc3RyLnN1Y2Nlc3MocmVzcG9uc2UubWVzc2FnZSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMuc3Bpbm5lclNlcnZpY2UuaGlkZSgpO1xyXG4gICAgICAgICAgdGhpcy50b2FzdHIuZXJyb3IocmVzcG9uc2UubWVzc2FnZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KVxyXG4gICAgICAuY2F0Y2goKGVycjogYW55KSA9PiB7XHJcbiAgICAgICAgdGhpcy5zcGlubmVyU2VydmljZS5oaWRlKCk7XHJcbiAgICAgICAgdGhpcy50b2FzdHIuZXJyb3IoZXJyLm1lc3NhZ2UpO1xyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIHNhdmVGdW4oaywgdiwgdHlwZSkge1xyXG4gICAgdGhpcy5zcGlubmVyU2VydmljZS5zaG93KCk7XHJcbiAgICBsZXQgcmVxT2JqID0ge307XHJcbiAgICBsZXQgc3ViT2JqID0ge307XHJcbiAgICBsZXQgdXJsID0gXCJzeXN0ZW0vYXBwcGFnZXNcIjtcclxuICAgIGlmICh0eXBlID09ICdkJylcclxuICAgICAgdiA9IHRoaXMuY20uRm9ybWF0RGF0ZSh2LCAnZGQtTU1NLXl5eXknKTtcclxuICAgIGlmICh0eXBlID09ICduJylcclxuICAgICAgdiA9IFwiXCIgKyB2ICsgXCJcIjtcclxuICAgIHN1Yk9ialtrXSA9IHY7XHJcbiAgICByZXFPYmpbXCJmb3JtTm1lXCJdID0gdGhpcy5hZGRGcm1ObWU7XHJcbiAgICByZXFPYmpbXCJkYXRhVHJuc0R0bFwiXSA9IHN1Yk9iajtcclxuICAgIGlmICh0aGlzLmFkZEZybU5tZSA9PSAnYWRkdGlvbmFsRHRsTWFzdGVyJykge1xyXG4gICAgICByZXFPYmpbXCJubWVJZG5cIl0gPSB0aGlzLnJvdXRlLnNuYXBzaG90LnBhcmFtTWFwLmdldChcInN1YnZcIik7IC8vdGhpcy53aHJWO1xyXG4gICAgICB0aGlzLmhlYWRlcltcIm1ldGhvZFwiXSA9IFwic2F2ZU5tZUF0dHJcIjtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLmFkZEZybU5tZSA9PSAnbGVkZ2VyQWNjQWRkaXRpbmFsRGV0YWlscycpIHtcclxuICAgICAgcmVxT2JqW1wibGVkZ2VyX2lkblwiXSA9IHRoaXMucm91dGUuc25hcHNob3QucGFyYW1NYXAuZ2V0KFwic3VidlwiKTsgLy90aGlzLndoclY7XHJcbiAgICAgIHJlcU9ialtcInR5cGVcIl0gPSBcImFjY19hdHRyXCI7XHJcbiAgICAgIHRoaXMuaGVhZGVyW1wibWV0aG9kXCJdID0gXCJzYXZlTGVkZ2VyQXR0clwiO1xyXG4gICAgICB1cmwgPSBcImFjY291bnRzL2FjY0xlZGdlclwiO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuYWRkRnJtTm1lID09ICdsZWRnZXJBZGR0aW9uYWxEdGxNYXN0ZXInKSB7XHJcbiAgICAgIHJlcU9ialtcImxlZGdlcl9pZG5cIl0gPSB0aGlzLnJvdXRlLnNuYXBzaG90LnBhcmFtTWFwLmdldChcInN1YnZcIik7IC8vdGhpcy53aHJWO1xyXG4gICAgICByZXFPYmpbXCJ0eXBlXCJdID0gXCJhdHRyXCI7XHJcbiAgICAgIHRoaXMuaGVhZGVyW1wibWV0aG9kXCJdID0gXCJzYXZlTGVkZ2VyQXR0clwiO1xyXG4gICAgICB1cmwgPSBcImFjY291bnRzL2FjY0xlZGdlclwiO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuYWRkRnJtTm1lID09ICdhY2NEZWxldGVSdWxlc0Zvcm0nKSB7XHJcbiAgICAgIHJlcU9ialtcImpvdXJuYWxfaWRuXCJdID0gdGhpcy5yb3V0ZS5zbmFwc2hvdC5wYXJhbU1hcC5nZXQoXCJzdWJ2XCIpOyAvL3RoaXMud2hyVjtcclxuICAgICAgcmVxT2JqW1widHlwZVwiXSA9IFwiZGVsZXRlX3J1bGVzXCI7XHJcbiAgICAgIHRoaXMuaGVhZGVyW1wibWV0aG9kXCJdID0gXCJzYXZlSm91cm5hbEF0dHJcIjtcclxuICAgICAgdXJsID0gXCJhY2NvdW50cy9hY2NMZWRnZXJcIjtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLmFkZEZybU5tZSA9PSAnYWNjSm91cm5hbEF0dHJGb3JtJykge1xyXG4gICAgICByZXFPYmpbXCJqb3VybmFsX2lkblwiXSA9IHRoaXMucm91dGUuc25hcHNob3QucGFyYW1NYXAuZ2V0KFwic3VidlwiKTsgLy90aGlzLndoclY7XHJcbiAgICAgIHJlcU9ialtcInR5cGVcIl0gPSBcImF0dHJcIjtcclxuICAgICAgdGhpcy5oZWFkZXJbXCJtZXRob2RcIl0gPSBcInNhdmVKb3VybmFsQXR0clwiO1xyXG4gICAgICB1cmwgPSBcImFjY291bnRzL2FjY0xlZGdlclwiO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuYWRkRnJtTm1lID09ICdhY2NMb2FuQXR0ckZvcm0nKSB7XHJcbiAgICAgIHJlcU9ialtcImpvdXJuYWxfaWRuXCJdID0gdGhpcy5yb3V0ZS5zbmFwc2hvdC5wYXJhbU1hcC5nZXQoXCJzdWJ2XCIpOyAvL3RoaXMud2hyVjtcclxuICAgICAgcmVxT2JqW1widHlwZVwiXSA9IFwiYXR0clwiO1xyXG4gICAgICB0aGlzLmhlYWRlcltcIm1ldGhvZFwiXSA9IFwic2F2ZUpvdXJuYWxBdHRyXCI7XHJcbiAgICAgIHVybCA9IFwiYWNjb3VudHMvYWNjTGVkZ2VyXCI7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5hZGRGcm1ObWUgPT0gJ2FjY0pvdXJuYWxTZXR0aW5nRm9ybScpIHtcclxuICAgICAgcmVxT2JqW1wiam91cm5hbF9pZG5cIl0gPSB0aGlzLnJvdXRlLnNuYXBzaG90LnBhcmFtTWFwLmdldChcInN1YnZcIik7IC8vdGhpcy53aHJWO1xyXG4gICAgICByZXFPYmpbXCJ0eXBlXCJdID0gXCJzZXR0aW5nc1wiO1xyXG4gICAgICB0aGlzLmhlYWRlcltcIm1ldGhvZFwiXSA9IFwic2F2ZUpvdXJuYWxBdHRyXCI7XHJcbiAgICAgIHVybCA9IFwiYWNjb3VudHMvYWNjTGVkZ2VyXCI7XHJcbiAgICB9XHJcbiAgICBjb25zb2xlLmxvZyhKU09OLnN0cmluZ2lmeShyZXFPYmopKTtcclxuICAgIGxldCBvcHRpb25zID0gKHsgaGVhZGVyczogbmV3IEh0dHBIZWFkZXJzKHRoaXMuaGVhZGVyKSB9KTtcclxuXHJcbiAgICB0aGlzLmNzXHJcbiAgICAgIC5sb2FkKHJlcU9iaiwgb3B0aW9ucywgdXJsKVxyXG4gICAgICAudGhlbigocmVzcG9uc2U6IGFueSkgPT4ge1xyXG5cclxuICAgICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzID09IFwiU1VDQ0VTU1wiKSB7XHJcbiAgICAgICAgICB0aGlzLnNwaW5uZXJTZXJ2aWNlLmhpZGUoKTtcclxuICAgICAgICAgIHRoaXMudG9hc3RyLnN1Y2Nlc3MocmVzcG9uc2UubWVzc2FnZSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMuc3Bpbm5lclNlcnZpY2UuaGlkZSgpO1xyXG4gICAgICAgICAgdGhpcy50b2FzdHIuZXJyb3IocmVzcG9uc2UubWVzc2FnZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KVxyXG4gICAgICAuY2F0Y2goKGVycjogYW55KSA9PiB7XHJcbiAgICAgICAgdGhpcy5zcGlubmVyU2VydmljZS5oaWRlKCk7XHJcbiAgICAgICAgdGhpcy50b2FzdHIuZXJyb3IoZXJyLm1lc3NhZ2UpO1xyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIHBhZ2VEaXNwbGF5O1xyXG4gIC8vIEFERCBQQUdFIERJU1BMQVkgQVRUUklCVVRFXHJcbiAgYWRkQXR0cih2LCBhLCBkZikge1xyXG4gICAgaWYgKHYgPT0gdW5kZWZpbmVkKSByZXR1cm47XHJcbiAgICB0aGlzLmFkZFRleHQodiwgYSwgZGYpO1xyXG4gIH1cclxuXHJcbiAgYWRkVGV4dCh2LCBhLCBkZikge1xyXG4gICAgaWYgKGRmLmluZGV4T2YodikgIT0gLTEpIHtcclxuICAgICAgdGhpcy50b2FzdHIuZXJyb3IoXCJBbHJlYWR5IEFkZGVkXCIpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnRvYXN0ci5zdWNjZXNzKFwiQWRkZWRcIik7XHJcbiAgICAgIGRmLnB1c2godik7XHJcbiAgICAgIC8vIGEuc3BsaWNlKGksIDEpO1xyXG4gICAgICB0aGlzLnNvcnRhYmxlQ29tcG9uZW50LndyaXRlVmFsdWUoZGYpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcmVtb3ZlKGRmLCBpdCwgaSwgZmYpIHtcclxuICAgIGlmIChkZi5pbmRleE9mKGl0KSAhPSAtMSkge1xyXG4gICAgICBkZi5zcGxpY2UoaSwgMSk7XHJcbiAgICAgIHRoaXMuc3FsQXJyYXlbZmZdLnVuc2hpZnQoeyB2OiBpdCB9KTtcclxuICAgICAgdGhpcy5zb3J0YWJsZUNvbXBvbmVudC53cml0ZVZhbHVlKGRmKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHNob3dISWRlUGFzcygpIHtcclxuICAgIHRoaXMuZXN0c3QgPSAhdGhpcy5lc3RzdDtcclxuICAgIGlmICh0aGlzLmVzdHN0KSB7XHJcbiAgICAgIHRoaXMuZXZlQyA9IFwiZmEtZXllXCI7XHJcbiAgICAgIHRoaXMuaW5wdXR0eXBlID0gXCJ0ZXh0XCI7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmV2ZUMgPSBcImZhLWV5ZS1zbGFzaFwiO1xyXG4gICAgICB0aGlzLmlucHV0dHlwZSA9IFwicGFzc3dvcmRcIjtcclxuICAgIH1cclxuICB9XHJcbiAgcmVkaWVjdHRva3ljKCkge1xyXG4gICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWydjb250YWN0L3BlbmRpbmcta3ljL3BlbmRpbmdLeWNGb3JtJ10pO1xyXG4gIH1cclxuXHJcblxyXG5cclxuICBmb3JtYXREYXRlU0NNb250aEJlZm9yZShkYXRlLCBhdHRyKSB7XHJcbiAgICBpZiAoZGF0ZSAhPSB1bmRlZmluZWQgJiYgZGF0ZSAhPSBcIlwiKSB7XHJcblxyXG4gICAgICBsZXQgZCA9IG5ldyBEYXRlKGRhdGUpLFxyXG4gICAgICAgIG1vbnRoID0gJycgKyAoZC5nZXRNb250aCgpKSxcclxuICAgICAgICBkYXkgPSAnJyArIGQuZ2V0RGF0ZSgpLFxyXG4gICAgICAgIHllYXIgPSBkLmdldEZ1bGxZZWFyKCk7XHJcbiAgICAgIGQuc2V0RGF0ZShkLmdldERhdGUoKSAtIDMwKTtcclxuXHJcbiAgICAgIGlmIChtb250aC5sZW5ndGggPCAyKSBtb250aCA9ICcwJyArIG1vbnRoO1xyXG4gICAgICBpZiAoZGF5Lmxlbmd0aCA8IDIpIGRheSA9ICcwJyArIGRheTtcclxuXHJcbiAgICAgIGxldCBuZXdEYXRlID0gW3llYXIsIG1vbnRoLCBkYXldLmpvaW4oJy0nKTtcclxuXHJcbiAgICAgIHRoaXMuZGF0YUR0bFthdHRyXSA9IG5ld0RhdGU7XHJcbiAgICB9XHJcbiAgfVxyXG4gIHJlc2V0ID0gdiA9PiB2LmZvcm0ucmVzZXQoKTtcclxuICBjbG9zZU51bGwgPSAoKSA9PiAodGhpcy50YkNlbGwgPSBudWxsKTtcclxuICBwYWdlQmNrID0gKCkgPT4gd2luZG93Lmhpc3RvcnkuYmFjaygpO1xyXG4gIGNVcmw7XHJcbiAgbmdPbkluaXQoKSB7XHJcbiAgICB0aGlzLnNlbGVjdGVkUGVvcGxlMyA9IFtcclxuICAgICAgeyBrOiBcIjIwNFwiLCB2OiBcIm5pbGFtXCIgfSxcclxuICAgICAgeyBrOiBcIjQ3ODFcIiwgdjogXCJuaWxhbXdlYlwiIH1cclxuICAgIF07XHJcbiAgICBsZXQgbWRsayA9IEpTT04ucGFyc2UobG9jYWxTdG9yYWdlLmdldEl0ZW0oXCJtZGxLZXlcIikpO1xyXG4gICAgbGV0IG1kbEtleSA9IE9iamVjdC5rZXlzKG1kbGspO1xyXG4gICAgZGVidWdnZXJcclxuICAgIHRoaXMuY1VybCA9IHRoaXMucm91dGVyLnVybDtcclxuICAgIHRoaXMuaGVhZGVyID0ge1xyXG4gICAgICBjbGllbnRrZXk6IENvb2tpZS5nZXQoXCJfY2tcIiksXHJcbiAgICAgIFwiQ29udGVudC1UeXBlXCI6IFwiYXBwbGljYXRpb24vanNvblwiLFxyXG4gICAgICBtb2R1bGVrZXk6IG1kbGtbdGhpcy5jVXJsLnNwbGl0KCcvJylbMV1dLFxyXG4gICAgICBsb2dpbmlkOiBDb29raWUuZ2V0KFwiX2xvZ2lkXCIpLFxyXG4gICAgICBzb3VyY2U6IFwicXNcIlxyXG4gICAgfTtcclxuICAgIGxldCBjb21wYW55RHRsID0gSlNPTi5wYXJzZShDb29raWUuZ2V0KCdfYWNjQ29tcGFueScpKSB8fCB7fTtcclxuICAgIGxldCB5ZWFyRHRsID0gSlNPTi5wYXJzZShDb29raWUuZ2V0KCdfYWNjeWVhcicpKSB8fCB7fTtcclxuICAgIGxldCBzdWJfY29faWRuID0gKGNvbXBhbnlEdGxbXCJzdWJfY29faWRuXCJdIHx8ICcnKS50b1N0cmluZygpO1xyXG4gICAgbGV0IGZpbl95ZWFyX2lkbiA9ICh5ZWFyRHRsW1wiZmluX3llYXJfaWRuXCJdIHx8ICcnKS50b1N0cmluZygpO1xyXG4gICAgaWYgKHN1Yl9jb19pZG4gIT0gJycpIHtcclxuICAgICAgdGhpcy5oZWFkZXJbJ3N1YmNvbWlkbiddID0gc3ViX2NvX2lkbjtcclxuICAgICAgdGhpcy5oZWFkZXJbJ3llYXJpZG4nXSA9IGZpbl95ZWFyX2lkbjtcclxuICAgIH1cclxuICAgIHRoaXMucm91dGUucGFyYW1zLnN1YnNjcmliZSgocGFyYW1zOiBQYXJhbXMpID0+IHtcclxuICAgICAgdGhpcy5zdWJGcm1XayA9IG51bGw7XHJcbiAgICAgIHRoaXMuc2VhcmNoRiA9IG51bGw7XHJcbiAgICAgIGRlYnVnZ2VyXHJcbiAgICAgIHRoaXMubmF2Zm9ybSA9IHBhcmFtc1tcIml0bWZvcm1cIl07XHJcbiAgICAgIHRoaXMucGFyYU9ialtcImZvcm1ObWVcIl0gPSBwYXJhbXNbXCJpdG1mb3JtXCJdO1xyXG4gICAgICB0aGlzLnBhcmFPYmpbXCJ3aGVyZUtleXNcIl0gPSBwYXJhbXNbXCJzdWJrXCJdO1xyXG4gICAgICB0aGlzLnBhcmFPYmpbXCJ3aGVyZVZsdXNcIl0gPSBwYXJhbXNbXCJzdWJ2XCJdO1xyXG4gICAgICBpZiAocGFyYW1zW1wiaXRtZm9ybVwiXSA9PSAnYWNjRGVsZXRlUnVsZXNGb3JtJykge1xyXG4gICAgICAgIHRoaXMuYWRkRnJtTm1lID0gcGFyYW1zW1wiaXRtZm9ybVwiXTtcclxuICAgICAgICBsZXQgbWRsID0gWydkZWxldGVfcnVsZSddO1xyXG4gICAgICAgIHRoaXMuZ2V0Sm91cm5hbEF0dHIodGhpcy5hZGRGcm1ObWUsIG1kbCwgJ2RlbGV0ZV9ydWxlcycpO1xyXG4gICAgICB9IGVsc2UgaWYgKHBhcmFtc1tcIml0bWZvcm1cIl0gPT0gJ2FjY0pvdXJuYWxBdHRyRm9ybScpIHtcclxuICAgICAgICB0aGlzLmFkZEZybU5tZSA9IHBhcmFtc1tcIml0bWZvcm1cIl07XHJcbiAgICAgICAgbGV0IG1kbCA9IFsnam5sYWNjX2F0dHInXTtcclxuICAgICAgICB0aGlzLmdldEpvdXJuYWxBdHRyKHRoaXMuYWRkRnJtTm1lLCBtZGwsICdhdHRyJyk7XHJcbiAgICAgIH0gZWxzZSBpZiAocGFyYW1zW1wiaXRtZm9ybVwiXSA9PSAnYWNjTG9hbkF0dHJGb3JtJykge1xyXG4gICAgICAgIHRoaXMuYWRkRnJtTm1lID0gcGFyYW1zW1wiaXRtZm9ybVwiXTtcclxuICAgICAgICBsZXQgbWRsID0gWydsb2FuJ107XHJcbiAgICAgICAgdGhpcy5nZXRKb3VybmFsQXR0cih0aGlzLmFkZEZybU5tZSwgbWRsLCAnYXR0cicpO1xyXG4gICAgICB9IGVsc2UgaWYgKHBhcmFtc1tcIml0bWZvcm1cIl0gPT0gXCJhY2NKb3VybmFsU2V0dGluZ0Zvcm1cIikge1xyXG4gICAgICAgIHRoaXMuYWRkRnJtTm1lID0gcGFyYW1zW1wiaXRtZm9ybVwiXTtcclxuICAgICAgICBsZXQgbWRsID0gWydqbmxfc2V0dCddO1xyXG4gICAgICAgIHRoaXMuZ2V0Sm91cm5hbEF0dHIodGhpcy5hZGRGcm1ObWUsIG1kbCwgJ3NldHRpbmdzJyk7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgdGhpcy5nZXRQYWdlRGVmaW5hdGlvbigpO1xyXG4gICAgICAgIHRoaXMuY0xpbmsgPSAwO1xyXG4gICAgICAgIHRoaXMucCA9IDE7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxufVxyXG4iLCI8ZGl2IGNsYXNzPVwibXRcIj5cclxuICA8ZGl2IGNsYXNzPVwicGFuZWwgcGFuZWwtZGVmYXVsdFwiPlxyXG4gICAgPGRpdiBjbGFzcz1cInBhbmVsLWhlYWRpbmdcIj5cclxuICAgICAgPGgzIGNsYXNzPVwicGFuZWwtdGl0bGVcIj5cclxuICAgICAgICA8c3BhbiBjbGFzcz1cImZhIGZhLWNoZXZyb24tbGVmdCBjcFwiIChjbGljayk9XCJwYWdlQmNrKCk7XCI+IEJhY2s8L3NwYW4+Jm5ic3A7Jm5ic3A7Jm5ic3A7IHt7cGFnZUluZm8/LnRpdGxlfX1cclxuICAgICAgICA8c3BhbiAqbmdJZj1cImNvbnRhY3ROYW1lPT0nJ1wiIGNsYXNzPVwiZi0xMlwiPih7e2NEdCB8IGRhdGU6J21lZGl1bSd9fSk8L3NwYW4+XHJcbiAgICAgICAgPHNwYW4gKm5nSWY9XCJjb250YWN0TmFtZSE9JydcIiBjbGFzcz1cImYtMTJcIj4mbmJzcDtmb3IgPGI+IHt7Y29udGFjdE5hbWV9fTwvYj4gPC9zcGFuPlxyXG4gICAgICA8L2gzPlxyXG4gICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBpZD1cImFkZEJ0blwiIGNsYXNzPVwiYnRuIGJ0bi1pbmZvIHB1bGwtcmlnaHRcIiAqbmdJZj1cImFkZE5ldz8uaXNfY29tcHVsc29yeSA9PSAxXCJcclxuICAgICAgICBhcHBBcHBOb0RibENsaWNrIChjbGljayk9XCJ1c2VyQWN0aW9uKCcnLCAnYWRkJywgJycsICcnKTtmLnJlc2V0KCk7XCI+e3thZGROZXc/LmZvcm1fZmllbGRfdGl0bGV9fTwvYnV0dG9uPlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcbiAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgPGRpdiBjbGFzcz1cImNvbC1tZC0yXCIgKm5nSWY9XCJuYXZpZ2F0aW9uLmxlbmd0aCA+IDBcIj5cclxuICAgICAgPGRpdiBjbGFzcz1cInBhbmVsIHBhbmVsLWRlZmF1bHRcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwicGFuZWwtYm9keVwiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImxpc3QtZ3JvdXAgYm9yZGVyLWJvdHRvbVwiPlxyXG4gICAgICAgICAgICA8YSBocmVmPVwiamF2YXNjcmlwdDp2b2lkKDApXCIgY2xhc3M9XCJsaXN0LWdyb3VwLWl0ZW1cIiBbbmdDbGFzc109XCJ7J2FjdGl2ZScgOmkgPT0gY0xpbmt9XCJcclxuICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgbmF2IG9mIG5hdmlnYXRpb247bGV0IGk9aW5kZXhcIiAoY2xpY2spPVwibmF2aWdhdGlvbkZ1bihuYXYsaSk7XCI+e3tuYXYuZm9ybV9maWVsZF90aXRsZX19PC9hPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2IFtuZ0NsYXNzXT1cIm5hdmlnYXRpb24ubGVuZ3RoID4gMCA/ICdjb2wtbWQtMTAnIDogJ2NvbC1tZC0xMidcIj5cclxuICAgICAgPGRpdiBjbGFzcz1cInBhbmVsIHBhbmVsLWRlZmF1bHRcIj5cclxuICAgICAgICA8IS0tIHByaW1lcnkgZm9ybSAtLT5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwicGFuZWwtYm9keVwiIHN0eWxlPVwib3ZlcmZsb3cteDogc2Nyb2xsXCJcclxuICAgICAgICAgICpuZ0lmPVwibmF2Zm9ybSAhPSAnYWRkdGlvbmFsRHRsTWFzdGVyJyAmJiBuYXZmb3JtICE9ICdkb2N1bWVudFVwbG9hZE1hc3RlcicgICYmIG5hdmZvcm0gIT0gJ21lbnVBY2Nlc3NNYXN0ZXInICAmJiBuYXZmb3JtICE9ICd0ZXJtVXNlckFzc2lnbkZvcm0nICYmIG5hdmZvcm0gIT0gJ3NldFBhc3N3b3JkRm9ybScgJiYgbmF2Zm9ybSE9J2xlZGdlckJhbmtEZXRhaWxzJyAmJiBuYXZmb3JtIT0nbGVkZ2VyQWNjQWRkaXRpbmFsRGV0YWlscycgJiYgbmF2Zm9ybSE9J2xlZGdlckFkZHRpb25hbER0bE1hc3RlcicgJiYgbmF2Zm9ybSE9J2FjY0RlbGV0ZVJ1bGVzRm9ybScgJiYgbmF2Zm9ybSE9J2FjY0pvdXJuYWxBdHRyRm9ybScgJiYgbmF2Zm9ybSE9J2FjY0xvYW5BdHRyRm9ybScgJiYgbmF2Zm9ybSE9J2FjY0pvdXJuYWxTZXR0aW5nRm9ybScgJiYgbmF2Zm9ybSE9J3dlYk1lbnVBY2Nlc3NNYXN0ZXInIFwiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTZcIj5cclxuICAgICAgICAgICAgICA8Zm9ybSBjbGFzcz1cImZvcm0taW5saW5lIHB1bGwtbGVmdFwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXBcIj5cclxuICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj1cImRkbFBhZ2VzaXplXCI+UGFnZSBTaXplICZuYnNwOyAmbmJzcDs8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICA8c2VsZWN0IGNsYXNzPVwiZm9ybS1jb250cm9sXCIgbmFtZT1cInBhZ2VTaXplXCIgWyhuZ01vZGVsKV09XCJwYWdlU2l6ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgKGNoYW5nZSk9XCJvblBhZ2VTaXplQ2hhbmdlKHBhZ2VTaXplKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJBbGxcIj5BbGw8L29wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiMTBcIj4xMDwvb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCIyNVwiPjI1PC9vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIjUwXCI+NTA8L29wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiMTAwXCI+MTAwPC9vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgIDwvc2VsZWN0PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPC9mb3JtPlxyXG4gICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLWRlZmF1bHRcIiBzdHlsZT1cInBhZGRpbmc6IDRweCAxNXB4IDRweCAyMHB4O21hcmdpbi1sZWZ0OiAxMHB4O1wiXHJcbiAgICAgICAgICAgICAgICBkYXRhLXRvZ2dsZT1cInRvb2x0aXBcIiBkYXRhLXBsYWNlbWVudD1cInJpZ2h0XCIgdGl0bGU9XCJSZWZyZXNoXCIgKGNsaWNrKT1cIm5nT25Jbml0KCk7XCI+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImZhIGZhLXJlZnJlc2hcIj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTZcIj5cclxuICAgICAgICAgICAgICA8Zm9ybSBjbGFzcz1cImZvcm0taW5saW5lIHB1bGwtcmlnaHRcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9XCJleGFtcGxlSW5wdXROYW1lMlwiPlNlYXJjaCAmbmJzcDsmbmJzcDs8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBjbGFzcz1cImZvcm0tY29udHJvbFwiIGlkPVwiZXhhbXBsZUlucHV0TmFtZTJcIiBuYW1lPVwic2NodHh0XCIgWyhuZ01vZGVsKV09XCJzZWFyY2hGXCIgLz5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDwvZm9ybT5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0YWJsZS1yZXNwb25zaXZlXCIgW25nQ2xhc3NdPVwieyd0YWJsZS1yZXNwb25zaXZlJyA6bmF2aWdhdGlvbi5sZW5ndGggPiAwfVwiPlxyXG4gICAgICAgICAgICA8dGFibGUgY2xhc3M9XCJ0YWJsZSB0YWJsZS1ib3JkZXJlZCB0YWJsZS1ob3ZlciB0YWJsZS1ob3Zlci1jZWxsc1wiPlxyXG4gICAgICAgICAgICAgIDx0aGVhZD5cclxuICAgICAgICAgICAgICAgIDx0cj5cclxuICAgICAgICAgICAgICAgICAgPHRoPlNSIE5vPC90aD5cclxuICAgICAgICAgICAgICAgICAgPHRoPkFjdGlvbjwvdGg+XHJcbiAgICAgICAgICAgICAgICAgIDx0aCAqbmdGb3I9XCJsZXQgdGJoIG9mIHRibEg7IGxldCBpID0gaW5kZXhcIiAoY2xpY2spPVwic2V0T3JkZXIodGJoLGkpXCI+e3t0YmxEZXNjW3RiaF19fVxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIFtoaWRkZW5dPVwicmV2ZXJzZVwiICpuZ0lmPVwic2hvd2FyciA9PT0gaVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1hcnJvdy1kb3duXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBbaGlkZGVuXT1cIiFyZXZlcnNlXCIgKm5nSWY9XCJzaG93YXJyID09PSBpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLWFycm93LXVwXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgPC90aD5cclxuICAgICAgICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgICAgICAgPC90aGVhZD5cclxuICAgICAgICAgICAgICA8dGJvZHk+XHJcbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXHJcbiAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBkYXRhIG9mIGRhdGFsaXN0IHwgc2VhcmNoUGlwZTpzZWFyY2hGIHwgb3JkZXJCeTogb3JkZXI6cmV2ZXJzZSB8IHBhZ2luYXRlOiB7IGl0ZW1zUGVyUGFnZTogcGFnZVNpemUsIGN1cnJlbnRQYWdlOiBwIH07IGxldCBpID0gaW5kZXhcIj5cclxuICAgICAgICAgICAgICAgICAgPHRyIFtuZ0NsYXNzXT1cInsnSW5hY3RpdmUnOmRhdGEuc3R0PT0nSW5BY3RpdmUnfVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDx0ZD57e2kgKyAxfX08L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgIDx0ZD5cclxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJidG4tZ3JvdXBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj1cIiNcIiBkYXRhLXRvZ2dsZT1cImRyb3Bkb3duXCIgY2xhc3M9XCJidG4gYnRuLWluZm8gZHJvcGRvd24tdG9nZ2xlXCI+QWN0aW9uXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjYXJldFwiPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9hPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dWwgY2xhc3M9XCJkcm9wZG93bi1tZW51XCIgcm9sZT1cIm1lbnVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8bGkgKm5nRm9yPVwibGV0IGFjdGlvbiBvZiBhY3Rpb25zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPVwiamF2YXNjcmlwdDp2b2lkKDApXCIgKGNsaWNrKT1cInVzZXJBY3Rpb24oZGF0YSxhY3Rpb24uZm9ybV9maWVsZCxhY3Rpb24sIGkpO1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e2FjdGlvbi5mb3JtX2ZpZWxkX3RpdGxlfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3VsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICAgICAgICA8dGQgKm5nRm9yPVwibGV0IHRiaCBvZiB0YmxIOyBsZXQgaT1pbmRleFwiIG9uLW1vdXNlb3Zlcj1cImhvdmVyZWRJPWlcIiBvbi1tb3VzZWxlYXZlPVwiaG92ZXJlZEk9LTFcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCJtYXgtd2lkdGg6IDMwMHB4OyB3b3JkLWJyZWFrOiBicmVhay13b3JkO1wiPnt7ZGF0YVt0YmhdfX1cclxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJvbkhvdmVyRGl2XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJpPT1ob3ZlcmVkSSAmJiBwYWdlX3R5cCE9J2pzb25Gb3JtJyAmJiBuYXZmb3JtIT0nYnV5ZXJ0ZXJtc01hc3RlcidcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxsaSAoY2xpY2spPVwiZWRpdENlbGwoZGF0YSx0YmgpO1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmYSBmYS1wZW5jaWxcIj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC91bD5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICA8L3Rib2R5PlxyXG4gICAgICAgICAgICA8L3RhYmxlPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8cGFnaW5hdGlvbi1jb250cm9scyAocGFnZUNoYW5nZSk9XCJwID0gJGV2ZW50XCIgY2xhc3M9XCJwdWxsLXJpZ2h0XCI+PC9wYWdpbmF0aW9uLWNvbnRyb2xzPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwhLS0gY3VzdG9tIGZvcm0gLS0+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInBhbmVsLWJvZHlcIlxyXG4gICAgICAgICAgKm5nSWY9XCJuYXZmb3JtID09ICdhZGR0aW9uYWxEdGxNYXN0ZXInIHx8IG5hdmZvcm0gPT0gJ2xlZGdlckFkZHRpb25hbER0bE1hc3RlcicgfHwgbmF2Zm9ybSA9PSAnbGVkZ2VyQWNjQWRkaXRpbmFsRGV0YWlscycgfHwgbmF2Zm9ybT09J2FjY0RlbGV0ZVJ1bGVzRm9ybScgfHwgbmF2Zm9ybT09J2FjY0pvdXJuYWxBdHRyRm9ybScgfHwgbmF2Zm9ybT09J2FjY0xvYW5BdHRyRm9ybScgfHwgbmF2Zm9ybT09J2FjY0pvdXJuYWxTZXR0aW5nRm9ybSdcIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0xMlwiICpuZ0Zvcj1cImxldCB1Z2xkIG9mIHVpR3JwTGlzdFwiPlxyXG4gICAgICAgICAgICAgIDxwIGNsYXNzPVwiaGVhZGluZ0Nsc1wiPnt7dWlHcnBMaXN0RHRsW3VnbGRdfX08L3A+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC02XCIgKm5nRm9yPVwibGV0IGZvcm1GIG9mIHVpR3JwTGlzdER0bFt1Z2xkKycjVCddO2xldCBpID0gaW5kZXhcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwXCIgc3R5bGU9XCJtYXJnaW4tYm90dG9tOiA0NXB4ICFpbXBvcnRhbnQ7XCI+XHJcbiAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImNvbC1tZC00IGNvbnRyb2wtbGFiZWxcIj57e3VpR3JwTGlzdER0bFt1Z2xkKycjRCddW2ldfX08L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLThcIiAqbmdJZj1cImZvcm1GID09ICduJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ncm91cCB3LTEwMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJudW1iZXJcIiBjbGFzcz1cImZvcm0tY29udHJvbFwiIG5hbWU9XCJ7e3VpR3JwTGlzdER0bFt1Z2xkKycjViddW2ldfX1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPVwiZGF0YUR0bFt1aUdycExpc3REdGxbdWdsZCsnI1YnXVtpXV1cIiBbKG5nTW9kZWwpXT1cImRhdGFEdGxbdWlHcnBMaXN0RHRsW3VnbGQrJyNWJ11baV1dXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgKGNoYW5nZSk9XCJzYXZlRnVuKHVpR3JwTGlzdER0bFt1Z2xkKycjViddW2ldLGRhdGFEdGxbdWlHcnBMaXN0RHRsW3VnbGQrJyNWJ11baV1dLGZvcm1GKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJ1aUdycExpc3REdGxbdWdsZCsnI0UnXVtpXSA9PSAwID8gZmFsc2UgOiB0cnVlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLThcIiAqbmdJZj1cImZvcm1GID09ICd0J1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ncm91cCB3LTEwMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBuYW1lPVwie3t1aUdycExpc3REdGxbdWdsZCsnI1YnXVtpXX19XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cImRhdGFEdGxbdWlHcnBMaXN0RHRsW3VnbGQrJyNWJ11baV1dXCIgWyhuZ01vZGVsKV09XCJkYXRhRHRsW3VpR3JwTGlzdER0bFt1Z2xkKycjViddW2ldXVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwic2F2ZUZ1bih1aUdycExpc3REdGxbdWdsZCsnI1YnXVtpXSxkYXRhRHRsW3VpR3JwTGlzdER0bFt1Z2xkKycjViddW2ldXSxmb3JtRilcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwidWlHcnBMaXN0RHRsW3VnbGQrJyNFJ11baV0gPT0gMCA/IGZhbHNlIDogdHJ1ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcblxyXG5cclxuICAgICAgICAgICAgICAgICAgPCEtLSBhZGRlZCBmb3IgdGVzdGluZyBvbmx5IC0tPlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLThcIiAqbmdJZj1cImZvcm1GID09ICdjJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ncm91cCB3LTEwMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPHNlbGVjdCB0eXBlPVwidGV4dFwiIGNsYXNzPVwiZm9ybS1jb250cm9sXCIgbmFtZT1cInt7dWlHcnBMaXN0RHRsW3VnbGQrJyNWJ11baV19fVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiZGF0YUR0bFt1aUdycExpc3REdGxbdWdsZCsnI1YnXVtpXV1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAoY2hhbmdlKT1cInNhdmVGdW4odWlHcnBMaXN0RHRsW3VnbGQrJyNWJ11baV0sZGF0YUR0bFt1aUdycExpc3REdGxbdWdsZCsnI1YnXVtpXV0sZm9ybUYpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gKm5nRm9yPVwibGV0IGtleSBvZiBhdHRyQ0xpc3REdGxbdWlHcnBMaXN0RHRsW3VnbGQrJyNWJ11baV0gKycjRCddO2xldCBqPWluZGV4XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT1cInt7YXR0ckNMaXN0RHRsW3VpR3JwTGlzdER0bFt1Z2xkKycjViddW2ldICsnI1YnXVtqXX19XCI+e3trZXl9fTwvb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9zZWxlY3Q+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8IS0tIDxwICpuZ0Zvcj1cImxldCBhIG9mIGF0dHJDTGlzdER0bFt1aUdycExpc3REdGxbdWdsZCsnI1YnXVtpXSArJyNWJ11cIj57e2EgfGpzb259fTpcclxuICAgICAgICAgICAgICAgICAgICAgICAge3thdHRyQ0xpc3REdGxbdWlHcnBMaXN0RHRsW3VnbGQrJyNWJ11baV0gKycjViddIHxqc29ufX1cclxuICAgICAgICAgICAgICAgICAgICAgIDwvcD4gLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8IS0tIDxpbnB1dCB0eXBlPVwidGV4dFwiIGNsYXNzPVwiZm9ybS1jb250cm9sXCIgbmFtZT1cInt7dWlHcnBMaXN0RHRsW3VnbGQrJyNWJ11baV19fVwiIFt2YWx1ZV09XCJkYXRhRHRsW3VpR3JwTGlzdER0bFt1Z2xkKycjViddW2ldXVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiZGF0YUR0bFt1aUdycExpc3REdGxbdWdsZCsnI1YnXVtpXV1cIiAoYmx1cik9XCJzYXZlRnVuKHVpR3JwTGlzdER0bFt1Z2xkKycjViddW2ldLGRhdGFEdGxbdWlHcnBMaXN0RHRsW3VnbGQrJyNWJ11baV1dKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJ1aUdycExpc3REdGxbdWdsZCsnI0UnXVtpXSA9PSAwID8gZmFsc2UgOiB0cnVlXCI+IC0tPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC04XCIgKm5nSWY9XCJmb3JtRiA9PSAncSdcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtZ3JvdXAgdy0xMDBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxzZWxlY3QgdHlwZT1cInRleHRcIiBjbGFzcz1cImZvcm0tY29udHJvbFwiIG5hbWU9XCJ7e3VpR3JwTGlzdER0bFt1Z2xkKycjViddW2ldfX1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImRhdGFEdGxbdWlHcnBMaXN0RHRsW3VnbGQrJyNWJ11baV1dXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgKGNoYW5nZSk9XCJzYXZlRnVuKHVpR3JwTGlzdER0bFt1Z2xkKycjViddW2ldLGRhdGFEdGxbdWlHcnBMaXN0RHRsW3VnbGQrJyNWJ11baV1dLGZvcm1GKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uICpuZ0Zvcj1cImxldCBrZXkgb2YgYXR0clFMaXN0RHRsW3VpR3JwTGlzdER0bFt1Z2xkKycjViddW2ldICsnI0QnXTtsZXQgaj1pbmRleFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU9XCJ7e2F0dHJRTGlzdER0bFt1aUdycExpc3REdGxbdWdsZCsnI1YnXVtpXSArJyNEJ11bal19fVwiPnt7a2V5fX08L29wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvc2VsZWN0PlxyXG4gICAgICAgICAgICAgICAgICAgICAgPCEtLSA8cCAqbmdGb3I9XCJsZXQgYSBvZiBhdHRyQ0xpc3REdGxbdWlHcnBMaXN0RHRsW3VnbGQrJyNWJ11baV0gKycjViddXCI+e3thIHxqc29ufX06XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHt7YXR0ckNMaXN0RHRsW3VpR3JwTGlzdER0bFt1Z2xkKycjViddW2ldICsnI1YnXSB8anNvbn19XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L3A+IC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPCEtLSA8aW5wdXQgdHlwZT1cInRleHRcIiBjbGFzcz1cImZvcm0tY29udHJvbFwiIG5hbWU9XCJ7e3VpR3JwTGlzdER0bFt1Z2xkKycjViddW2ldfX1cIiBbdmFsdWVdPVwiZGF0YUR0bFt1aUdycExpc3REdGxbdWdsZCsnI1YnXVtpXV1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImRhdGFEdGxbdWlHcnBMaXN0RHRsW3VnbGQrJyNWJ11baV1dXCIgKGJsdXIpPVwic2F2ZUZ1bih1aUdycExpc3REdGxbdWdsZCsnI1YnXVtpXSxkYXRhRHRsW3VpR3JwTGlzdER0bFt1Z2xkKycjViddW2ldXSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwidWlHcnBMaXN0RHRsW3VnbGQrJyNFJ11baV0gPT0gMCA/IGZhbHNlIDogdHJ1ZVwiPiAtLT5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLThcIiAqbmdJZj1cImZvcm1GID09ICdzYSdcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtZ3JvdXAgdy0xMDBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxuZy1zZWxlY3Qgc3R5bGU9XCJ6LWluZGV4OiA1O1wiIFtvcHRpb25zXT1cInNxbEFycmF5W3VpR3JwTGlzdER0bFt1Z2xkKycjViddW2ldXVwiICNzZmk9XCJuZ01vZGVsXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJkYXRhRHRsW3VpR3JwTGlzdER0bFt1Z2xkKycjViddW2ldXVwiIG5hbWU9XCJ7e3VpR3JwTGlzdER0bFt1Z2xkKycjViddW2ldfX1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAoc2VsZWN0ZWQpPVwic2F2ZUZ1bih1aUdycExpc3REdGxbdWdsZCsnI1YnXVtpXSxkYXRhRHRsW3VpR3JwTGlzdER0bFt1Z2xkKycjViddW2ldXSxmb3JtRilcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAoZmlsdGVySW5wdXRDaGFuZ2VkKT1cImxvYWRKbmxTdWdnZGF0YSgkZXZlbnQsdWlHcnBMaXN0RHRsW3VnbGQrJyNWJ11baV0sdWlHcnBMaXN0RHRsW3VnbGQrJyNNJ11baV0pXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L25nLXNlbGVjdD5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC04XCIgKm5nSWY9XCJmb3JtRiA9PSAnZCdcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtZ3JvdXAgdy0xMDBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiZGF0ZVwiIGNsYXNzPVwiZm9ybS1jb250cm9sXCIgbmFtZT1cInt7dWlHcnBMaXN0RHRsW3VnbGQrJyNWJ11baV19fVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwic2F2ZUZ1bih1aUdycExpc3REdGxbdWdsZCsnI1YnXVtpXSxkYXRhRHRsW3VpR3JwTGlzdER0bFt1Z2xkKycjViddW2ldXSxmb3JtRilcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPVwiZGF0YUR0bFt1aUdycExpc3REdGxbdWdsZCsnI1YnXVtpXV1cIiBbKG5nTW9kZWwpXT1cImRhdGFEdGxbdWlHcnBMaXN0RHRsW3VnbGQrJyNWJ11baV1dXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cInVpR3JwTGlzdER0bFt1Z2xkKycjRSddW2ldID09IDAgPyBmYWxzZSA6IHRydWVcIj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtOFwiICpuZ0lmPVwiZm9ybUYgPT0gJ2UnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWdyb3VwIHctMTAwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImVtYWlsXCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBuYW1lPVwie3t1aUdycExpc3REdGxbdWdsZCsnI1YnXVtpXX19XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgKGNoYW5nZSk9XCJzYXZlRnVuKHVpR3JwTGlzdER0bFt1Z2xkKycjViddW2ldLGRhdGFEdGxbdWlHcnBMaXN0RHRsW3VnbGQrJyNWJ11baV1dLGZvcm1GKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJkYXRhRHRsW3VpR3JwTGlzdER0bFt1Z2xkKycjViddW2ldXVwiIFsobmdNb2RlbCldPVwiZGF0YUR0bFt1aUdycExpc3REdGxbdWdsZCsnI1YnXVtpXV1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAoYmx1cik9XCJzYXZlRnVuKHVpR3JwTGlzdER0bFt1Z2xkKycjViddW2ldLGRhdGFEdGxbdWlHcnBMaXN0RHRsW3VnbGQrJyNWJ11baV1dLGZvcm1GKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJ1aUdycExpc3REdGxbdWdsZCsnI0UnXVtpXSA9PSAwID8gZmFsc2UgOiB0cnVlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInBhbmVsLWJvZHkgZm9ybVwiXHJcbiAgICAgICAgICAqbmdJZj1cIm5hdmZvcm0gPT0gJ2RvY3VtZW50VXBsb2FkTWFzdGVyJyAgJiYgbmF2Zm9ybSAhPSAnbWVudUFjY2Vzc01hc3RlcicgICYmIG5hdmZvcm0gIT0gJ3Rlcm1Vc2VyQXNzaWduRm9ybScgJiYgbmF2Zm9ybSAhPSAnc2V0UGFzc3dvcmRGb3JtJ1wiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgICAgICA8Zm9ybSBhY3Rpb249XCIjXCIgY2xhc3M9XCJmb3JtLWhvcml6b250YWwgZm9ybS1ib3JkZXJlZFwiPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWJvZHlcIj5cclxuXHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTRcIj5cclxuICAgICAgICAgICAgICAgICAgPHNlbGVjdCB0eXBlPVwidGV4dFwiIGNsYXNzPVwiZm9ybS1jb250cm9sXCIgbmFtZT1cImRvY3R5cGVcIiBbKG5nTW9kZWwpXT1cImRvY3R5cGVcIj5cclxuICAgICAgICAgICAgICAgICAgICA8b3B0aW9uICpuZ0Zvcj1cImxldCBkb2NzIG9mIGRvY3VtZW50VXBsb2FkTGlzdFwiIHZhbHVlPVwie3tkb2NzfX1cIj57e2RvY3VtZW50VXBsb2FkRHRsW2RvY3NdfX1cclxuICAgICAgICAgICAgICAgICAgICA8L29wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgPC9zZWxlY3Q+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNFwiPlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmlsZWlucHV0IGZpbGVpbnB1dC1uZXdcIiBkYXRhLXByb3ZpZGVzPVwiZmlsZWlucHV0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJidG4gZ3JlZW4gYnRuLWZpbGVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPiBVcGxvYWQgPC9zcGFuPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiZmlsZVwiIG5hbWU9XCIuLi5cIiAoY2hhbmdlKT1cInVwbG9hZERvY3MoJGV2ZW50KVwiPiA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmaWxlaW5wdXQtZmlsZW5hbWVcIj4gPC9zcGFuPiAmbmJzcDtcclxuICAgICAgICAgICAgICAgICAgICA8YSBocmVmPVwiamF2YXNjcmlwdDo7XCIgY2xhc3M9XCJjbG9zZSBmaWxlaW5wdXQtZXhpc3RzXCIgZGF0YS1kaXNtaXNzPVwiZmlsZWlucHV0XCI+IDwvYT5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDxhICpuZ0lmPVwicm91dGhlckRvYyE9JydcIiBzdHlsZT1cImN1cnNvcjpwb2ludGVyIFwiIChjbGljayk9XCJyZWRpZWN0dG9reWMoKVwiPjxiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPDwgYmFjazwvYj48L2E+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9mb3JtPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMTJcIj5cclxuICAgICAgICAgICAgICA8cCBjbGFzcz1cImhlYWRpbmdDbHNcIj5FeGlzdGluZyBEb2N1bWVudHM8L3A+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTEyXCI+XHJcbiAgICAgICAgICAgICAgPHRhYmxlIGNsYXNzPVwic3ViRGlzcGxheVRhYmxlXCI+XHJcbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBkb2NzIG9mIGRvY3VtZW50VXBsb2FkTGlzdDtsZXQgaSA9IGluZGV4IFwiPlxyXG4gICAgICAgICAgICAgICAgICA8dHIgKm5nSWY9XCJkYXRhRHRsW2RvY3NdIT11bmRlZmluZWRcIj5cclxuICAgICAgICAgICAgICAgICAgICA8dGQgc3R5bGU9XCJ3aWR0aDogMTAlXCI+e3tkb2N1bWVudFVwbG9hZER0bFtkb2NzXX19PC90ZD5cclxuICAgICAgICAgICAgICAgICAgICA8dGQgc3R5bGU9XCJ3aWR0aDogOTAlO3RleHQtYWxpZ246IGxlZnRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGRvY2R0bCBvZiBkYXRhRHRsW2RvY3NdXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmaWxlaW5wdXQgZmlsZWlucHV0LW5ld1wiICpuZ0lmPVwiZG9jZWRpdEFjdGlvblwiIGRhdGEtcHJvdmlkZXM9XCJmaWxlaW5wdXRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImJ0bi1maWxlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLWVkaXRcIiB0b29sdGlwPVwiRWRpdCBEb2N1bWVudFwiIHN0eWxlPVwiZm9udC1zaXplOjIwcHhcIj4gPC9pPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiZmlsZVwiIG5hbWU9XCIuLi5cIiAoY2hhbmdlKT1cIkVkaXRVcGxvYWREb2NzKGRvY2R0bCwkZXZlbnQpXCI+IDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImZpbGVpbnB1dC1maWxlbmFtZVwiPiA8L3NwYW4+ICZuYnNwO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9XCJqYXZhc2NyaXB0OjtcIiBjbGFzcz1cImNsb3NlIGZpbGVpbnB1dC1leGlzdHNcIiBkYXRhLWRpc21pc3M9XCJmaWxlaW5wdXRcIj4gPC9hPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICZuYnNwOyZuYnNwO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICA8YT48aSBjbGFzcz1cImZhIGZhLXRyYXNoLW9cIiAqbmdJZj1cImRvY2RlbGV0ZUFjdGlvblwiIChjbGljayk9XCJDb25maXJtZGVsZXRlRG9jKGRvY2R0bClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCJmb250LXNpemU6MjBweDtjdXJzb3I6IHBvaW50ZXJcIj4gPC9pPiA8L2E+Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxhIChjbGljayk9XCJvcGVuZG9jcyhkb2NkdGwpXCI+IDxpIGNsYXNzPVwiZmEgZmEtZmlsZS1vXCIgc3R5bGU9XCJmb250LXNpemU6MjBweFwiPiA8L2k+IDwvYT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7fCZuYnNwOyZuYnNwO1xyXG4gICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICA8L3RhYmxlPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICA8L2Rpdj5cclxuXHJcblxyXG5cclxuXHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInBhbmVsLWJvZHlcIlxyXG4gICAgICAgICAgKm5nSWY9XCJuYXZmb3JtICE9ICdkb2N1bWVudFVwbG9hZE1hc3RlcicgJiYgbmF2Zm9ybSA9PSAnbWVudUFjY2Vzc01hc3RlcicgICYmIG5hdmZvcm0gIT0gJ3Rlcm1Vc2VyQXNzaWduRm9ybScgJiYgbmF2Zm9ybSAhPSAnc2V0UGFzc3dvcmRGb3JtJyBcIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0yXCI+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXBcIj5cclxuICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImNvbnRyb2wtbGFiZWxcIiBzdHlsZT1cInBhZGRpbmctbGVmdDogMnB4O1wiPkFwcGxpY2F0aW9uPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgIDxzZWxlY3QgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBbKG5nTW9kZWwpXT1cImFwcGxpY2F0aW9uXCIgbmFtZT1cIlVzZXJcIiAoY2hhbmdlKT1cImxvYWRVc3JNZGwoYXBwbGljYXRpb24pXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxvcHRpb24gKm5nRm9yPVwibGV0IGFwcCBvZiBhcHBsaWNhdGlvbkxpc3RcIiB2YWx1ZT1cInt7YXBwLmt9fVwiPnt7YXBwLnZ9fTwvb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgPC9zZWxlY3Q+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTJcIiAqbmdJZj1cInVzZXJEdGxzLmxlbmd0aD4wXCI+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXBcIj5cclxuICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImNvbnRyb2wtbGFiZWxcIiBzdHlsZT1cInBhZGRpbmctbGVmdDogMnB4O1wiPlVzZXI8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgPHNlbGVjdCBjbGFzcz1cImZvcm0tY29udHJvbFwiIFsobmdNb2RlbCldPVwiVXNlclwiIG5hbWU9XCJVc2VyXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxvcHRpb24gKm5nRm9yPVwibGV0IGxvdiBvZiB1c2VyRHRsc1wiIHZhbHVlPVwie3tsb3YudXNlcl9pZG59fVwiPnt7bG92LnVzZXJuYW1lfX08L29wdGlvbj5cclxuICAgICAgICAgICAgICAgIDwvc2VsZWN0PlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0yXCIgKm5nSWY9XCJtb2R1bGVEdGxzLmxlbmd0aD4wICYmIHVzZXJEdGxzLmxlbmd0aCA+MCBcIj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cFwiPlxyXG4gICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiY29udHJvbC1sYWJlbFwiIHN0eWxlPVwicGFkZGluZy1sZWZ0OiAycHg7XCI+TW9kdWxlPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgIDxzZWxlY3QgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBbKG5nTW9kZWwpXT1cIk1vZHVsZVwiIG5hbWU9XCJNb2R1bGVcIj5cclxuICAgICAgICAgICAgICAgICAgPG9wdGlvbiAqbmdGb3I9XCJsZXQgbG92IG9mIG1vZHVsZUR0bHNcIiB2YWx1ZT1cInt7bG92Lm1vZHVsZV9pZG59fVwiPnt7bG92LnByaW50fX08L29wdGlvbj5cclxuICAgICAgICAgICAgICAgIDwvc2VsZWN0PlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0yIFwiPlxyXG4gICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGlkPVwiYWRkQnRuXCIgY2xhc3M9XCJidG4gYnRuLWluZm9cIiBzdHlsZT1cIm1hcmdpbi10b3A6IDIzcHg7XCJcclxuICAgICAgICAgICAgICAgIChjbGljayk9XCJnZXRVc2VyUmlnaHRzKFVzZXIsTW9kdWxlKVwiPkFzc2lnblxyXG4gICAgICAgICAgICAgICAgUmlnaHRzXHJcbiAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8ZGl2IHN0eWxlPVwicGFkZGluZzogMCAxMHB4O1wiICpuZ0lmPVwibWVudUxpc3QubGVuZ3RoPjBcIj5cclxuICAgICAgICAgICAgPGRpdiBzdHlsZT1cImJvcmRlcjoxcHggc29saWQgI2U1ZTVlNTttYXJnaW4tdG9wOiAzMHB4XCI+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInBhbmVsIHBhbmVsLWRlZmF1bHRcIiBzdHlsZT1cIm1hcmdpbi1ib3R0b206IDI1cHg7XCI+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwYW5lbC1oZWFkaW5nXCIgc3R5bGU9XCJwYWRkaW5nOiAwcHg7XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGgzIGNsYXNzPVwicGFuZWwtdGl0bGVcIiBzdHlsZT1cInBhZGRpbmc6IDhweDsgZm9udC1zaXplOiAxNHB4O1wiPlVzZXJzPC9oMz5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTIgY2hrQWxsXCIgc3R5bGU9XCJtYXJnaW46IDBweDtcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwXCIgc3R5bGU9XCJwYWRkaW5nOiAxMHB4O1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJzd2l0Y2hcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBjbGFzcz1cInN3aXRjaFwiIG5hbWU9XCJjaGtBbGxcIiBpZD1cImNoa0FsbFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwib25DaGFuZ2VBbGwoJGV2ZW50LFVzZXIsTW9kdWxlKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjaGVja2VkXT1cIihmYWxzZSAhPT0gKHVzZXJSaWdodHNNZW51TGlzdC5sZW5ndGggPT0gKG1lbnVMaXN0Lmxlbmd0aCArIHRvdE1lbnUpKSA/ICdjaGVja2VkJyA6ICcnKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJjb2wtbWQtNCBjb250cm9sLWxhYmVsIHRleHQtbGVmdFwiIHN0eWxlPVwicGFkZGluZy10b3A6IDhweDtcclxuICAgICAgICAgICAgICAgICAgICAgICBwYWRkaW5nLWxlZnQ6IDQwcHg7XCI+QWxsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgICAgICAgICA8Zm9ybSBjbGFzcz1cImZvcm0taG9yaXpvbnRhbFwiPlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTEyXCIgKm5nRm9yPVwibGV0IG1kbCBvZiBtZW51TGlzdDtsZXQgaT1pbmRleFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTFcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwic3dpdGNoXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJjaGVja2JveFwiIGNsYXNzPVwic3dpdGNoXCIgbmFtZT1cImNoa01lbnVcIiBpZD1cImNoa01lbnV7e21kbC5tZW51X2lkbn19XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwib25DaGFuZ2VNZW51KCRldmVudCxtZGwubWVudV9pZG4sVXNlcixNb2R1bGUpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjaGVja2VkXT1cIihmYWxzZSAhPT0gdXNlclJpZ2h0c01lbnVMaXN0LmluY2x1ZGVzKG1kbD8ubWVudV9pZG4pID8gJ2NoZWNrZWQnIDogJycpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJjb2wtbWQtMiBjb250cm9sLWxhYmVsIHRleHQtbGVmdFwiIHN0eWxlPVwicGFkZGluZy10b3A6IDNweDtcIj57e21kbC5tZW51fX08L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMTJcIiAqbmdJZj1cIm1kbC5TdWJNZW51Lmxlbmd0aCA+IDBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwXCIgKm5nRm9yPVwibGV0IHNtZGwgb2YgbWRsLlN1Yk1lbnVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0xXCIgc3R5bGU9XCJtYXJnaW4tbGVmdDoxMHB4O3BhZGRpbmctbGVmdDogNjBweDtcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJzd2l0Y2hcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBjbGFzcz1cInN3aXRjaFwiIG5hbWU9XCJjaGtTdWJNZW51XCIgaWQ9XCJjaGtTdWJNZW51e3tzbWRsLm1lbnVfaWRufX1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hhbmdlKT1cIm9uQ2hhbmdlU3ViTWVudSgkZXZlbnQsc21kbC5tZW51X2lkbixtZGwubWVudV9pZG4sVXNlcixNb2R1bGUpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NoZWNrZWRdPVwiKCBmYWxzZSAhPT0gdXNlclJpZ2h0c01lbnVMaXN0LmluY2x1ZGVzKHNtZGw/Lm1lbnVfaWRuKSA/ICdjaGVja2VkJyA6ICcnKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJjb2wtbWQtNCBjb250cm9sLWxhYmVsIHRleHQtbGVmdFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCJwYWRkaW5nLXRvcDogOHB4OyBmb250LXdlaWdodDogMTAwO3BhZGRpbmctbGVmdDogNDBweDtcIj4mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDt7e3NtZGwuaGRyfX08L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9mb3JtPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwicGFuZWwtYm9keVwiICpuZ0lmPVwibmF2Zm9ybSA9PSAnd2ViTWVudUFjY2Vzc01hc3RlcidcIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0yXCI+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXBcIj5cclxuICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImNvbnRyb2wtbGFiZWxcIiBzdHlsZT1cInBhZGRpbmctbGVmdDogMnB4O1wiPkFwcGxpY2F0aW9uPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgIDxzZWxlY3QgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBbKG5nTW9kZWwpXT1cImFwcGxpY2F0aW9uXCIgbmFtZT1cIlVzZXJcIiAoY2hhbmdlKT1cImxvYWRVc3JNZGwoYXBwbGljYXRpb24pXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxvcHRpb24gKm5nRm9yPVwibGV0IGFwcCBvZiBhcHBsaWNhdGlvbkxpc3RcIiB2YWx1ZT1cInt7YXBwLmt9fVwiPnt7YXBwLnZ9fTwvb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgPC9zZWxlY3Q+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTJcIiAqbmdJZj1cInVzZXJEdGxzLmxlbmd0aD4wXCI+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXBcIj5cclxuICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImNvbnRyb2wtbGFiZWxcIiBzdHlsZT1cInBhZGRpbmctbGVmdDogMnB4O1wiPlVzZXI8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgPHNlbGVjdCBjbGFzcz1cImZvcm0tY29udHJvbFwiIFsobmdNb2RlbCldPVwiVXNlclwiIG5hbWU9XCJVc2VyXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxvcHRpb24gKm5nRm9yPVwibGV0IGxvdiBvZiB1c2VyRHRsc1wiIHZhbHVlPVwie3tsb3YudXNlcl9pZG59fVwiPnt7bG92LnVzZXJuYW1lfX08L29wdGlvbj5cclxuICAgICAgICAgICAgICAgIDwvc2VsZWN0PlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0yXCIgKm5nSWY9XCJtb2R1bGVEdGxzLmxlbmd0aD4wICYmIHVzZXJEdGxzLmxlbmd0aCA+MCBcIj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cFwiPlxyXG4gICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiY29udHJvbC1sYWJlbFwiIHN0eWxlPVwicGFkZGluZy1sZWZ0OiAycHg7XCI+TW9kdWxlPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgIDxzZWxlY3QgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBbKG5nTW9kZWwpXT1cIk1vZHVsZVwiIG5hbWU9XCJNb2R1bGVcIj5cclxuICAgICAgICAgICAgICAgICAgPG9wdGlvbiAqbmdGb3I9XCJsZXQgbG92IG9mIG1vZHVsZUR0bHNcIiB2YWx1ZT1cInt7bG92Lm1vZHVsZV9pZG59fVwiPnt7bG92LnByaW50fX08L29wdGlvbj5cclxuICAgICAgICAgICAgICAgIDwvc2VsZWN0PlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0yIFwiPlxyXG4gICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGlkPVwiYWRkQnRuXCIgY2xhc3M9XCJidG4gYnRuLWluZm9cIiBzdHlsZT1cIm1hcmdpbi10b3A6IDIzcHg7XCJcclxuICAgICAgICAgICAgICAgIChjbGljayk9XCJnZXRVc2VyUmlnaHRzKFVzZXIsTW9kdWxlKVwiPkFzc2lnblxyXG4gICAgICAgICAgICAgICAgUmlnaHRzXHJcbiAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8ZGl2IHN0eWxlPVwicGFkZGluZzogMCAxMHB4O1wiICpuZ0lmPVwibWVudUxpc3QubGVuZ3RoPjBcIj5cclxuICAgICAgICAgICAgPGRpdiBzdHlsZT1cImJvcmRlcjoxcHggc29saWQgI2U1ZTVlNTttYXJnaW4tdG9wOiAzMHB4XCI+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInBhbmVsIHBhbmVsLWRlZmF1bHRcIiBzdHlsZT1cIm1hcmdpbi1ib3R0b206IDI1cHg7XCI+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwYW5lbC1oZWFkaW5nXCIgc3R5bGU9XCJwYWRkaW5nOiAwcHg7XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGgzIGNsYXNzPVwicGFuZWwtdGl0bGVcIiBzdHlsZT1cInBhZGRpbmc6IDhweDsgZm9udC1zaXplOiAxNHB4O1wiPlVzZXJzPC9oMz5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTIgY2hrQWxsXCIgc3R5bGU9XCJtYXJnaW46IDBweDtcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwXCIgc3R5bGU9XCJwYWRkaW5nOiAxMHB4O1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJzd2l0Y2hcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBjbGFzcz1cInN3aXRjaFwiIG5hbWU9XCJjaGtBbGxcIiBpZD1cImNoa0FsbFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwib25DaGFuZ2VBbGwoJGV2ZW50LFVzZXIsTW9kdWxlKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjaGVja2VkXT1cIihmYWxzZSAhPT0gKHVzZXJSaWdodHNNZW51TGlzdC5sZW5ndGggPT0gKG1lbnVMaXN0Lmxlbmd0aCArIHRvdE1lbnUpKSA/ICdjaGVja2VkJyA6ICcnKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJjb2wtbWQtNCBjb250cm9sLWxhYmVsIHRleHQtbGVmdFwiIHN0eWxlPVwicGFkZGluZy10b3A6IDhweDtcclxuICAgICAgICAgICAgICAgICAgICAgICBwYWRkaW5nLWxlZnQ6IDQwcHg7XCI+QWxsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgICAgICAgICA8Zm9ybSBjbGFzcz1cImZvcm0taG9yaXpvbnRhbFwiPlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTEyXCIgKm5nRm9yPVwibGV0IG1kbCBvZiBtZW51TGlzdDtsZXQgaT1pbmRleFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTFcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwic3dpdGNoXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJjaGVja2JveFwiIGNsYXNzPVwic3dpdGNoXCIgbmFtZT1cImNoa01lbnVcIiBpZD1cImNoa01lbnV7e21kbC5tZW51X2lkbn19XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwib25DaGFuZ2VXZWJNZW51KCRldmVudCxtZGwubWVudV9pZG4sVXNlcixNb2R1bGUpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjaGVja2VkXT1cIihmYWxzZSA9PSB1c2VyUmlnaHRzTWVudUxpc3QuaW5jbHVkZXMobWRsPy5tZW51X2lkbikgPyAnY2hlY2tlZCcgOiAnJylcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImNvbC1tZC0yIGNvbnRyb2wtbGFiZWwgdGV4dC1sZWZ0XCIgc3R5bGU9XCJwYWRkaW5nLXRvcDogM3B4O1wiPnt7bWRsLm1lbnV9fTwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0xMlwiICpuZ0lmPVwibWRsLlN1Yk1lbnUubGVuZ3RoID4gMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXBcIiAqbmdGb3I9XCJsZXQgc21kbCBvZiBtZGwuU3ViTWVudVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTFcIiBzdHlsZT1cIm1hcmdpbi1sZWZ0OjEwcHg7cGFkZGluZy1sZWZ0OiA2MHB4O1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cInN3aXRjaFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJjaGVja2JveFwiIGNsYXNzPVwic3dpdGNoXCIgbmFtZT1cImNoa1N1Yk1lbnVcIiBpZD1cImNoa1N1Yk1lbnV7e3NtZGwubWVudV9pZG59fVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwib25DaGFuZ2VXZWJTdWJNZW51KCRldmVudCxzbWRsLm1lbnVfaWRuLG1kbC5tZW51X2lkbixVc2VyLE1vZHVsZSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2hlY2tlZF09XCIoIGZhbHNlID09IHVzZXJSaWdodHNNZW51TGlzdC5pbmNsdWRlcyhzbWRsPy5tZW51X2lkbikgPyAnY2hlY2tlZCcgOiAnJylcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiY29sLW1kLTQgY29udHJvbC1sYWJlbCB0ZXh0LWxlZnRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPVwicGFkZGluZy10b3A6IDhweDsgZm9udC13ZWlnaHQ6IDEwMDtwYWRkaW5nLWxlZnQ6IDQwcHg7XCI+Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7e3tzbWRsLmhkcn19PC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZm9ybT5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwicGFuZWwtYm9keVwiIHN0eWxlPVwiYmFja2dyb3VuZDogI2ZmZjttaW4taGVpZ2h0OiA1NTBweDtcIlxyXG4gICAgICAgICAgKm5nSWY9XCJuYXZmb3JtICE9ICdhZGR0aW9uYWxEdGxNYXN0ZXInICYmICBuYXZmb3JtICE9ICdkb2N1bWVudFVwbG9hZE1hc3RlcicgJiYgbmF2Zm9ybSAhPSAnbWVudUFjY2Vzc01hc3RlcicgJiYgbmF2Zm9ybSA9PSAndGVybVVzZXJBc3NpZ25Gb3JtJyAmJiBuYXZmb3JtICE9ICdzZXRQYXNzd29yZEZvcm0nICBcIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIiBzdHlsZT1cIm1hcmdpbi10b3A6IDEwcHg7XCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMlwiPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwXCI+XHJcbiAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJjb250cm9sLWxhYmVsXCI+VGVybXM8L2xhYmVsPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0xXCIgc3R5bGU9XCJtYXJnaW4tbGVmdDogODVweDtcIj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cFwiPlxyXG4gICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiY29udHJvbC1sYWJlbFwiPlVzZXJzPC9sYWJlbD5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IHRlcm0gb2YgdGVybXNMaXN0OyBsZXQgaT1pbmRleDtcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtM1wiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXBcIj5cclxuXHJcbiAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9XCJ7e3Rlcm0uYnV5ZXJfdGVybXNfaWRufX1cIiBjbGFzcz1cImNvbnRyb2wtbGFiZWxcIlxyXG4gICAgICAgICAgICAgICAgICAgIHN0eWxlPVwicGFkZGluZzogMTBweDtcIj57e3Rlcm0uZHNjfX08L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0zXCIgKm5nSWY9XCJ0ZXJtLnVzZXJJZG5MaXN0ICE9IHVuZGVmaW5lZFwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXAgdy0xMDBcIj5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWdyb3VwIHctMTAwXCI+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIDwhLS0gPG5nLXNlbGVjdCBbaXRlbXNdPVwiYXBwbFVzZXJMaXN0XCIgW211bHRpcGxlXT1cInRydWVcIiBbYWRkVGFnXT1cImFkZFRhZ1wiIChjaGFuZ2UpPVwib25jaGFuZVZhbHMobnVsbCx0ZXJtLmJ1eWVyX3Rlcm1zX2lkbix0ZXJtLnVzZXJJZG5MaXN0KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBiaW5kTGFiZWw9XCJ2XCIgYmluZFZhbHVlPVwia1wiIG5hbWU9XCJ7e3Rlcm0gPy5idXllcl90ZXJtc19pZG59fVwiIFsobmdNb2RlbCldPVwidGVybS51c2VySWRuTGlzdFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbmctc2VsZWN0PiAtLT5cclxuICAgICAgICAgICAgICAgICAgICA8bmctc2VsZWN0IHBsYWNlaG9sZGVyPVwiU2VsZWN0IHVzZXJcIiBbb3B0aW9uc109XCJ0ZXJtLlRlcm1Vc2VyTGlzdFwiIFsobmdNb2RlbCldPVwidGVybS51c2VySWRuTGlzdFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAoZGVzZWxlY3RlZCk9XCJvbmNoYW5nZVVzZXJMaXN0KCRldmVudCx0ZXJtLCdkZWxldGUnKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAoc2VsZWN0ZWQpPVwib25jaGFuZ2VVc2VyTGlzdCgkZXZlbnQsdGVybSwnYWRkJylcIiBuYW1lPVwic3RhdHVzXCIgW211bHRpcGxlXT1cInRydWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgW2FsbG93Q2xlYXJdPVwidHJ1ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNvcHRpb25UZW1wbGF0ZSBsZXQtb3B0aW9uPVwib3B0aW9uXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmYW1mYW1mYW0tZmxhZ3Mge3tvcHRpb24/LnZhbHVlfX1cIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAge3tvcHRpb24/LmxhYmVsfX1cclxuICAgICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9uZy1zZWxlY3Q+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC02XCI+PC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJwYW5lbC1ib2R5XCIgc3R5bGU9XCJiYWNrZ3JvdW5kOiAjZmZmO21pbi1oZWlnaHQ6IDU1MHB4O1wiXHJcbiAgICAgICAgICAqbmdJZj1cIm5hdmZvcm0gIT0gJ2FkZHRpb25hbER0bE1hc3RlcicgJiYgIG5hdmZvcm0gIT0gJ2RvY3VtZW50VXBsb2FkTWFzdGVyJyAmJiBuYXZmb3JtICE9ICdtZW51QWNjZXNzTWFzdGVyJyAmJiBuYXZmb3JtICE9ICd0ZXJtVXNlckFzc2lnbkZvcm0nICYmIG5hdmZvcm0gPT0gJ3NldFBhc3N3b3JkRm9ybScgXCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCIgc3R5bGU9XCJtYXJnaW4tdG9wOiAxMHB4O1wiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTEyXCI+XHJcbiAgICAgICAgICAgICAgPHAgY2xhc3M9XCJoZWFkaW5nQ2xzXCI+Q2hhbmdlIFVzZXIgUGFzc3dvcmQ8L3A+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTJcIj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cFwiPlxyXG4gICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiY29udHJvbC1sYWJlbFwiIHN0eWxlPVwicGFkZGluZzogOHB4O1wiPlVzZXJuYW1lPC9sYWJlbD5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMVwiIHN0eWxlPVwibWFyZ2luLWxlZnQ6IDg1cHg7XCI+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXBcIj5cclxuICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImNvbnRyb2wtbGFiZWxcIiBzdHlsZT1cInBhZGRpbmc6IDhweDtcIj5QYXNzd29yZDwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCB1c2VyIG9mIHVzZXJEZXRhaWxzOyBsZXQgaT1pbmRleDtcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtM1wiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXBcIj5cclxuICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiY29udHJvbC1sYWJlbFwiIHN0eWxlPVwicGFkZGluZzogMTBweDtmb250LXdlaWdodDogbm9ybWFsO1wiPnt7dXNlcj8udXNlcm5hbWV9fTwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTZcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwIHctMTAwXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIGNsYXNzPVwiZm9ybS1jb250cm9sXCIgIFsobmdNb2RlbCldPVwidXNlci5wYXNzd29yZFwiIFt2YWx1ZV09XCJ1c2VyPy5wYXNzd29yZFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgIDwhLS0gKGJsdXIpPVwiY2hhbmdlUHN3ZCgkZXZlbnQsdXNlci51c2VySWRuKVwiIC0tPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0zXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cFwiPlxyXG4gICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJzdWJtaXRcIiBjbGFzcz1cImJ0biBidG4tc3VjY2Vzc1wiIChjbGljayk9XCJjaGFuZ2VQYXNzd29yZCh1c2VyKVwiPnNhdmU8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgPCEtLSA8YnV0dG9uIHR5cGU9XCJzdWJtaXRcIiBjbGFzcz1cImJ0biBidG4tc3VjY2Vzc1wiIChjbGljayk9XCJzYXZlQXBwVXNlcnRlcm1zKGFwcGxVc3JMc3QpXCI+c2F2ZTwvYnV0dG9uPiAtLT5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwicGFuZWwtYm9keVwiIHN0eWxlPVwiYmFja2dyb3VuZDogI2ZmZjttaW4taGVpZ2h0OiA1NTBweDtcIiAqbmdJZj1cIm5hdmZvcm09PSdsZWRnZXJCYW5rRGV0YWlscydcIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0xMlwiIHN0eWxlPVwibWFyZ2luOjVweFwiPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwIHctMTAwXCI+XHJcbiAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJjb2wtbWQtMiBjb250cm9sLWxhYmVsXCI+QmFuazwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTRcIj5cclxuICAgICAgICAgICAgICAgICAgPG5nLXNlbGVjdCBwbGFjZWhvbGRlcj1cIlNlbGVjdCBCYW5rXCIgW29wdGlvbnNdPVwiYmFua0xpc3RcIiBbKG5nTW9kZWwpXT1cImJhbmtcIiBuYW1lPVwiYmFua1wiXHJcbiAgICAgICAgICAgICAgICAgICAgKHNlbGVjdGVkKT1cImdldEJhbmtCcmFuY2goYmFuaylcIiAoZmlsdGVySW5wdXRDaGFuZ2VkKT1cImxlZGdlckJhbmtEZXRhaWxzKCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgIFthbGxvd0NsZWFyXT1cInRydWVcIj5cclxuICAgICAgICAgICAgICAgICAgPC9uZy1zZWxlY3Q+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMTJcIiBzdHlsZT1cIm1hcmdpbjo1cHhcIj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cCB3LTEwMFwiPlxyXG4gICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiY29sLW1kLTIgY29udHJvbC1sYWJlbFwiPkJyYW5jaCBEZXRhaWxzPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNFwiPlxyXG4gICAgICAgICAgICAgICAgICA8c2VsZWN0IG5hbWU9XCJicmFuY2hcIiAoY2hhbmdlKT1cInNlbGVjdEJyYW5jaChicmFuY2gpXCIgWyhuZ01vZGVsKV09XCJicmFuY2hcIiBjbGFzcz1cImZvcm0tY29udHJvbFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJcIj5TZWxlY3QgYnJhbmNoPC9vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiAqbmdGb3I9XCJsZXQgYm5rRHRsIG9mIGJhbmtEdGxMaXN0XCIgW25nVmFsdWVdPVwiYm5rRHRsLm5tZV9pZG5cIj57e2Jua0R0bC5wZXJzb25fbm1lfX08L29wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgPC9zZWxlY3Q+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMTJcIiAqbmdJZj1cInNlbGVjdEJyYW5jaEFkZHJlc3MhPScnXCIgc3R5bGU9XCJtYXJnaW46NXB4XCI+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXAgdy0xMDBcIj5cclxuICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImNvbC1tZC0yIGNvbnRyb2wtbGFiZWxcIj4mbmJzcDs8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC00XCI+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtM1wiPkFkZHJlc3M6PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtOVwiPnt7c2VsZWN0QnJhbmNoQWRkcmVzc319PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtM1wiPklGU0MgQ29kZTo8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC05XCI+e3tzZWxlY3RJZnNjfX08L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMTJcIiBzdHlsZT1cIm1hcmdpbjo1cHhcIj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cCB3LTEwMFwiPlxyXG4gICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiY29sLW1kLTIgY29udHJvbC1sYWJlbFwiPkFjY291bnQgVHlwZTwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTRcIj5cclxuICAgICAgICAgICAgICAgICAgPHNlbGVjdCBuYW1lPVwiYWNjb3VudFR5cGVcIiBbKG5nTW9kZWwpXT1cImFjY291bnRUeXBlXCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIj5cclxuICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiY3VycmVudFwiPkN1cnJlbnQ8L29wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwic2F2aW5nc1wiPlNhdmluZ3M8L29wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgPC9zZWxlY3Q+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMTJcIiBzdHlsZT1cIm1hcmdpbjo1cHhcIj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cCB3LTEwMFwiPlxyXG4gICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiY29sLW1kLTIgY29udHJvbC1sYWJlbFwiPkFjY291bnQgTm88L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC00XCI+XHJcbiAgICAgICAgICAgICAgICAgIDx0ZXh0YXJlYSBjbGFzcz1cImZvcm0tY29udHJvbFwiIGNvbHM9XCI0NVwiIHJvd3M9XCIyXCIgbmFtZT1cImFjY291bnRub1wiIFsobmdNb2RlbCldPVwiYWNjb3VudG5vXCI+PC90ZXh0YXJlYT5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0xMlwiIHN0eWxlPVwibWFyZ2luOjVweFwiPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwIHctMTAwXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTJcIj4mbmJzcDs8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNFwiPlxyXG4gICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiAqbmdJZj1cImVkaXRiYW5rX2R0bF9pZG49PScnXCIgKGNsaWNrKT1cIlNhdmVMZWRnZXJCYW5rKClcIlxyXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1zdWNjZXNzXCI+QWRkPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiICpuZ0lmPVwiZWRpdGJhbmtfZHRsX2lkbiE9JydcIiAoY2xpY2spPVwiU2F2ZUxlZGdlckJhbmsoKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJidG4gYnRuLXN1Y2Nlc3NcIj5FZGl0PC9idXR0b24+XHJcblxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCIgKm5nSWY9XCJleGl0QmFua0R0bExpc3QubGVuZ3RoPjBcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0xIHB1bGwtbGVmdFwiPlxyXG4gICAgICAgICAgICAgICZuYnNwO1xyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC02IHB1bGwtcmlnaHRcIj5cclxuICAgICAgICAgICAgICA8Zm9ybSBjbGFzcz1cImZvcm0taW5saW5lIHB1bGwtcmlnaHRcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9XCJleGFtcGxlSW5wdXROYW1lMlwiPlNlYXJjaCAmbmJzcDsmbmJzcDs8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBjbGFzcz1cImZvcm0tY29udHJvbFwiIGlkPVwiZXhhbXBsZUlucHV0TmFtZTJcIiBuYW1lPVwic2VhcmNoRlwiIFsobmdNb2RlbCldPVwic2VhcmNoRlwiIC8+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8L2Zvcm0+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCIgKm5nSWY9XCJleGl0QmFua0R0bExpc3QubGVuZ3RoPjBcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0xMlwiPlxyXG4gICAgICAgICAgICAgIDx0YWJsZSBjbGFzcz1cImRpc3BsYXlUYWJsZVwiPlxyXG4gICAgICAgICAgICAgICAgPHRoZWFkPlxyXG4gICAgICAgICAgICAgICAgICA8dGg+QWN0aW9uczwvdGg+XHJcbiAgICAgICAgICAgICAgICAgIDx0aD5BY2NvdW50IFR5cGU8L3RoPlxyXG4gICAgICAgICAgICAgICAgICA8dGg+QWNjb3VudCBObzwvdGg+XHJcbiAgICAgICAgICAgICAgICAgIDx0aD5OYW1lPC90aD5cclxuICAgICAgICAgICAgICAgICAgPHRoPkJyYW5jaDwvdGg+XHJcbiAgICAgICAgICAgICAgICAgIDx0aD5BZGRyZXNzPC90aD5cclxuICAgICAgICAgICAgICAgICAgPHRoPklGU0MgQ29kZTwvdGg+XHJcbiAgICAgICAgICAgICAgICA8L3RoZWFkPlxyXG4gICAgICAgICAgICAgICAgPHRib2R5PlxyXG4gICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBiYW5rZHRsIG9mIGV4aXRCYW5rRHRsTGlzdCA7IGxldCBpID0gaW5kZXhcIj5cclxuICAgICAgICAgICAgICAgICAgICA8dHIgW25nQ2xhc3NdPVwieydldmVuJzppJTI9PTAsJ29kZCc6aSUyPT0xfVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPHRkPiA8aSBjbGFzcz1cImZhIGZhLWVkaXRcIiAoY2xpY2spPVwibG9hZEVkaXRCYW5rRHRsKGJhbmtkdGwpXCIgdG9vbHRpcD1cIkVkaXQgQmFua1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCJmb250LXNpemU6MTVweDtjdXJzb3I6IHBvaW50ZXJcIj4gPC9pPiZuYnNwO3xcclxuICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS10cmFzaC1vXCIgKGNsaWNrKT1cIkNvbmZpcm1EZWxldGVMZWRnZXJCYW5rKGJhbmtkdGwpXCIgdG9vbHRpcD1cIkRlbGV0ZSBCYW5rXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT1cImZvbnQtc2l6ZToxNXB4O2N1cnNvcjogcG9pbnRlclwiPiA8L2k+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8dGQ+e3tiYW5rZHRsLmFjY291bnRUeXBlfX08L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPHRkPnt7YmFua2R0bC5hY2NvdW50Tm99fTwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8dGQ+e3tiYW5rZHRsLmJhbmtuYW1lfX08L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPHRkPnt7YmFua2R0bC5icmFuY2huYW1lfX08L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPHRkPnt7YmFua2R0bC5hZGRyZXNzfX08L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPHRkPnt7YmFua2R0bC5pZnNjfX08L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgPC90Ym9keT5cclxuICAgICAgICAgICAgICA8L3RhYmxlPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiBjbGFzcz1cIm1vZGFsXCIgaWQ9XCJkYXRhbW9kYWxcIiByb2xlPVwiZGlhbG9nXCIgYXJpYS1sYWJlbGxlZGJ5PVwiZGVmTW9kYWxIZWFkXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCJcclxuICAgICAgZGF0YS1iYWNrZHJvcD1cInN0YXRpY1wiIGRhdGEta2V5Ym9hcmQ9XCJmYWxzZVwiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtZGlhbG9nXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWNvbnRlbnRcIj5cclxuICAgICAgICAgIDxmb3JtIGNsYXNzPVwiZm9ybS1ob3Jpem9udGFsXCIgI2Y9XCJuZ0Zvcm1cIiBuYW1lPVwiYXBwRm9ybVwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtaGVhZGVyXCI+XHJcbiAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJjbG9zZVwiIGRhdGEtZGlzbWlzcz1cIm1vZGFsXCIgKGNsaWNrKT1cImNsb3NlTnVsbCgpO1wiICNjbG9zZWJ0bj5cclxuICAgICAgICAgICAgICAgIDxzcGFuIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPiZ0aW1lczs8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInNyLW9ubHlcIj5DbG9zZTwvc3Bhbj5cclxuICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICA8aDQgY2xhc3M9XCJtb2RhbC10aXRsZVwiIGlkPVwiZGVmTW9kYWxIZWFkXCI+e3tidG5OYW1lfX0gUmVjb3JkPC9oND5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1ib2R5XCI+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0xMlwiICpuZ0Zvcj1cImxldCBmbCBvZiBmb3JtRmlsZHMgfCBvcmRlckJ5UGlwZTogJ3NydCc6ICdhc2MnXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwXCJcclxuICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImZsPy5mb3JtX2ZpZWxkX3R5cCA9PSAndCcgJiYgZmw/LmlzX2hpZGRlbiA9PSAwICYmIGZsPy5kdGFfdHlwID09J2MnIHx8IGZsPy5kdGFfdHlwID09J3QnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiY29sLW1kLTMgY29udHJvbC1sYWJlbFwiPnt7Zmw/LmZvcm1fZmllbGRfdGl0bGV9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LWRhbmdlclwiICpuZ0lmPVwiZmwuaXNfY29tcHVsc29yeSA9PSAxXCI+Kjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtOVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWdyb3VwIHctMTAwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIGNsYXNzPVwiZm9ybS1jb250cm9sIHBvc3JlbFwiIG5hbWU9XCJ7e2ZsPy5mb3JtX2ZpZWxkfX1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJmbD8uZGVmYXVsdF92YWx1ZVwiIFsobmdNb2RlbCldPVwiZmwuZGVmYXVsdF92YWx1ZVwiICN0ZXh0SW5wdXQ9XCJuZ01vZGVsXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAoYmx1cik9XCJjaGtGdW4oZmwsZmwuZGVmYXVsdF92YWx1ZSk7XCIgW3JlcXVpcmVkXT1cImZsPy5pc19jb21wdWxzb3J5ID09ICcxJ1wiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZmEgZmEte3tpY299fSBleWVcIiBbbmdTdHlsZV09XCJ7J2NvbG9yJzppY28gPT0gJ2NoZWNrJyA/ICdncmVlbicgOiAncmVkJyB9XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cInVzcmlzRXhpc3QgJiYgb25FcnIgPT0gZmwuZm9ybV9maWVsZCBcIj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJ0ZXh0SW5wdXQuaW52YWxpZCAmJiAodGV4dElucHV0LmRpcnR5IHx8IHRleHRJbnB1dC50b3VjaGVkKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYWxlcnQgYWxlcnQtZGFuZ2VyIGNhXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJ0ZXh0SW5wdXQuZXJyb3JzLnJlcXVpcmVkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAge3tmbC5mb3JtX2ZpZWxkX3RpdGxlfX0gaXMgcmVxdWlyZWQuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXBcIiAqbmdJZj1cImZsPy5mb3JtX2ZpZWxkX3R5cCA9PSAndCcgJiYgZmw/LmlzX2hpZGRlbiA9PSAwICYmIGZsPy5kdGFfdHlwID09J24nXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiY29sLW1kLTMgY29udHJvbC1sYWJlbFwiPnt7Zmw/LmZvcm1fZmllbGRfdGl0bGV9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LWRhbmdlclwiICpuZ0lmPVwiZmwuaXNfY29tcHVsc29yeSA9PSAxXCI+Kjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtOVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWdyb3VwIHctMTAwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwibnVtYmVyXCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBuYW1lPVwie3tmbD8uZm9ybV9maWVsZH19XCIgW3ZhbHVlXT1cImZsPy5kZWZhdWx0X3ZhbHVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImZsLmRlZmF1bHRfdmFsdWVcIiAjbnVtYmVySW5wdXQ9XCJuZ01vZGVsXCIgW3JlcXVpcmVkXT1cImZsPy5pc19jb21wdWxzb3J5PT0xXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJudW1iZXJJbnB1dC5pbnZhbGlkICYmIChudW1iZXJJbnB1dC5kaXJ0eSB8fCBudW1iZXJJbnB1dC50b3VjaGVkKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYWxlcnQgYWxlcnQtZGFuZ2VyIGNhXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJudW1iZXJJbnB1dC5lcnJvcnMucmVxdWlyZWRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICB7e2ZsLmZvcm1fZmllbGRfdGl0bGV9fSBpcyByZXF1aXJlZC5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJudW1iZXJJbnB1dC5pbnZhbGlkICYmIChudW1iZXJJbnB1dC5kaXJ0eSB8fCBudW1iZXJJbnB1dC50b3VjaGVkKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJhbGVydCBhbGVydC1kYW5nZXIgY2FcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwibnVtYmVySW5wdXQuZXJyb3JzLnJlcXVpcmVkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e2ZsLmZvcm1fZmllbGRfdGl0bGV9fSBpcyByZXF1aXJlZC5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwXCJcclxuICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImZsPy5mb3JtX2ZpZWxkX3R5cCA9PSAncHcnICYmIGZsPy5pc19oaWRkZW4gPT0gMCAmJiBmbD8uZHRhX3R5cCA9PSdwdydcIj5cclxuICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJjb2wtbWQtMyBjb250cm9sLWxhYmVsXCI+e3tmbD8uZm9ybV9maWVsZF90aXRsZX19XHJcbiAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtZGFuZ2VyXCIgKm5nSWY9XCJmbC5pc19jb21wdWxzb3J5ID09IDFcIj4qPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC05XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtZ3JvdXAgdy0xMDBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ7e2lucHV0dHlwZX19XCIgY2xhc3M9XCJmb3JtLWNvbnRyb2wgcG9zcmVsXCIgbmFtZT1cInt7Zmw/LmZvcm1fZmllbGR9fVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cImZsPy5kZWZhdWx0X3ZhbHVlXCIgWyhuZ01vZGVsKV09XCJmbC5kZWZhdWx0X3ZhbHVlXCIgI3Bhc3NJbnB1dD1cIm5nTW9kZWxcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFtyZXF1aXJlZF09XCJmbD8uaXNfY29tcHVsc29yeSA9PSAnMSdcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImZhIHt7ZXZlQ319IGV5ZVwiIChjbGljayk9XCJzaG93SElkZVBhc3MoKTtcIj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJwYXNzSW5wdXQuaW52YWxpZCAmJiAocGFzc0lucHV0LmRpcnR5IHx8IHBhc3NJbnB1dC50b3VjaGVkKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYWxlcnQgYWxlcnQtZGFuZ2VyIGNhXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJwYXNzSW5wdXQuZXJyb3JzLnJlcXVpcmVkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAge3tmbC5mb3JtX2ZpZWxkX3RpdGxlfX0gaXMgcmVxdWlyZWQuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cFwiICpuZ0lmPVwiZmw/LmZvcm1fZmllbGRfdHlwID09ICd0JyAmJiBmbD8uZHRhX3R5cCA9PSdhJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImNvbC1tZC0zIGNvbnRyb2wtbGFiZWxcIj57e2ZsPy5mb3JtX2ZpZWxkX3RpdGxlfX1cclxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC1kYW5nZXJcIiAqbmdJZj1cImZsLmlzX2NvbXB1bHNvcnkgPT0gMVwiPio8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ncm91cCB3LTEwMFwiPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSA8bmctc2VsZWN0IFtpdGVtc109XCJbXVwiIFthZGRUYWddPVwidHJ1ZVwiIGJpbmRWYWx1ZT1cImxhYmVsXCIgW211bHRpcGxlXT1cInRydWVcIiBuYW1lPVwie3tmbD8uZm9ybV9maWVsZH19XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImZsLmRlZmF1bHRfdmFsdWVcIiBbaXNPcGVuXT1cImZhbHNlXCIgI2FmaWVsZD1cIm5nTW9kZWxcIiBbcmVxdWlyZWRdPVwiZmw/LmlzX2NvbXB1bHNvcnkgPT0gJzEnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctc2VsZWN0PiAtLT5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gPG5nLXNlbGVjdCBzdHlsZT1cInotaW5kZXg6IDU7XCIgW29wdGlvbnNdPVwiW11cIiBbKG5nTW9kZWwpXT1cImZsLmRlZmF1bHRfdmFsdWVcIiBuYW1lPVwie3tmbD8uZm9ybV9maWVsZH19XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAjYWZpZWxkPVwibmdNb2RlbFwiIFtyZXF1aXJlZF09XCJmbD8uaXNfY29tcHVsc29yeSA9PSAnMSdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1zZWxlY3Q+IGxhc3QgY29tbWVudGVkLS0+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dGFnLWlucHV0IFsobmdNb2RlbCldPVwiZmwuZGVmYXVsdF92YWx1ZVwiIG5hbWU9XCJ7e2ZsPy5mb3JtX2ZpZWxkfX1cIiBbbW9kZWxBc1N0cmluZ3NdPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW2FsbG93RHVwZXNdPVwidHJ1ZVwiIFtlZGl0YWJsZV09J3RydWUnPjwvdGFnLWlucHV0PlxyXG5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgIDwhLS0gPGRpdiAqbmdJZj1cImFmaWVsZC5pbnZhbGlkICYmIChhZmllbGQuZGlydHkgfHwgYWZpZWxkLnRvdWNoZWQpXCIgY2xhc3M9XCJhbGVydCBhbGVydC1kYW5nZXIgY2FcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImFmaWVsZC5lcnJvcnMucmVxdWlyZWRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICB7e2ZsLmZvcm1fZmllbGRfdGl0bGV9fSBpcyByZXF1aXJlZC5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4gLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cFwiICpuZ0lmPVwiZmw/LmZvcm1fZmllbGRfdHlwID09ICd0JyAmJiBmbD8uZHRhX3R5cCA9PSdzcidcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJjb2wtbWQtMyBjb250cm9sLWxhYmVsXCI+e3tmbD8uZm9ybV9maWVsZF90aXRsZX19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC1kYW5nZXJcIiAqbmdJZj1cImZsLmlzX2NvbXB1bHNvcnkgPT0gMVwiPio8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC03XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ncm91cCB3LTEwMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gPG5nLXNlbGVjdCBbaXRlbXNdPVwic3FsQXJyYXlbZmwuZm9ybV9maWVsZF1cIiBbZHJvcGRvd25Qb3NpdGlvbl09XCInYm90dG9tJ1wiIGJpbmRMYWJlbD1cInZcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJwYWdlRGlzcGxheVwiIFtuZ01vZGVsT3B0aW9uc109XCJ7c3RhbmRhbG9uZTogdHJ1ZX1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLXNlbGVjdD4gLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLXNlbGVjdCBzdHlsZT1cInotaW5kZXg6IDU7XCIgW29wdGlvbnNdPVwic3FsQXJyYXlbZmwuZm9ybV9maWVsZF1cIiBbKG5nTW9kZWwpXT1cInBhZ2VEaXNwbGF5XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU9XCJ7e2ZsPy5mb3JtX2ZpZWxkfX1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLXNlbGVjdD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1pbmZvXCIgdHlwZT1cImJ1dHRvblwiIHN0eWxlPVwid2lkdGg6MTAwJTtcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJhZGRBdHRyKHBhZ2VEaXNwbGF5LCBzcWxBcnJheVtmbC5mb3JtX2ZpZWxkXSwgZmwuZGVmYXVsdF92YWx1ZSk7XCI+QWRkPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJjb2wtbWQtMyBjb250cm9sLWxhYmVsXCI+U2VsZWN0ZWQgTW9kdWxlczwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNjbGFzcz1cImNvbC1tZC05XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtZHNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI2l0ZW1UZW1wbGF0ZSBsZXQtaXRlbT1cIml0ZW1cIiBsZXQtaW5kZXg9XCJpbmRleFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCJwYWRkaW5nOiA0cHg7Ym9yZGVyOiAxcHggc29saWQgI2M5YzljOTtib3JkZXItcmFkaXVzOiA2cHg7ZGlzcGxheTogaW5saW5lLWJsb2NrO3dpZHRoOiAxMDAlO3Bvc2l0aW9uOiByZWxhdGl2ZTtcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+e3tpbmRleCsxfX08L3NwYW4+IC0ge3tpdGVtLnZhbHVlfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJybVwiIChjbGljayk9XCJyZW1vdmUoZmwuZGVmYXVsdF92YWx1ZSxpdGVtLnZhbHVlLGluZGV4LGZsPy5mb3JtX2ZpZWxkKTtcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLXRpbWVzXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnMtc29ydGFibGUgWyhuZ01vZGVsKV09XCJmbC5kZWZhdWx0X3ZhbHVlXCIgbmFtZT1cInt7Zmw/LmZvcm1fZmllbGR9fVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2l0ZW1UZW1wbGF0ZV09XCJpdGVtVGVtcGxhdGVcIiBpdGVtQ2xhc3M9XCJzb3J0YWJsZS1pdGVtXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtQWN0aXZlQ2xhc3M9XCJzb3J0YWJsZS1pdGVtLWFjdGl2ZVwiIHBsYWNlaG9sZGVyQ2xhc3M9XCJwbGFjZWhvbGRlclN0eWxlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cmFwcGVyQ2xhc3M9XCJzb3J0YWJsZS13cmFwcGVyXCIgI3NyZj1cIm5nTW9kZWxcIiBbcmVxdWlyZWRdPVwiZmw/LmlzX2NvbXB1bHNvcnkgPT0gJzEnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnMtc29ydGFibGU+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJzcmYuaW52YWxpZCAmJiAoc3JmLmRpcnR5IHx8IHNyZi50b3VjaGVkKVwiIGNsYXNzPVwiYWxlcnQgYWxlcnQtZGFuZ2VyIGNhXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJzcmYuZXJyb3JzLnJlcXVpcmVkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAge3tmbC5mb3JtX2ZpZWxkX3RpdGxlfX0gaXMgcmVxdWlyZWQuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXBcIiAqbmdJZj1cImZsPy5mb3JtX2ZpZWxkX3R5cCA9PSAndCcgJiYgZmw/LmR0YV90eXAgPT0nc2EnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiY29sLW1kLTMgY29udHJvbC1sYWJlbFwiPnt7Zmw/LmZvcm1fZmllbGRfdGl0bGV9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LWRhbmdlclwiICpuZ0lmPVwiZmwuaXNfY29tcHVsc29yeSA9PSAxXCI+Kjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtOVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWdyb3VwIHctMTAwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gPG5nLXNlbGVjdCBbaXRlbXNdPVwic3FsQXJyYXlbZmwuZm9ybV9maWVsZF1cIiBbYWRkVGFnXT1cImFkZFRhZ1wiIGJpbmRWYWx1ZT1cImtcIiBbaGlkZVNlbGVjdGVkXT1cInRydWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIG11bHRpcGxlPVwidHJ1ZVwiIGJpbmRMYWJlbD1cInZcIiBuYW1lPVwie3tmbD8uZm9ybV9maWVsZH19XCIgWyhuZ01vZGVsKV09XCJmbC5kZWZhdWx0X3ZhbHVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAjc2FmaWVsZD1cIm5nTW9kZWxcIiBbcmVxdWlyZWRdPVwiZmw/LmlzX2NvbXB1bHNvcnkgPT0gJzEnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctc2VsZWN0PiAtLT5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1zZWxlY3Qgc3R5bGU9XCJ6LWluZGV4OiA1O1wiIFtvcHRpb25zXT1cInNxbEFycmF5W2ZsLmZvcm1fZmllbGRdXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImZsLmRlZmF1bHRfdmFsdWVcIiBbbXVsdGlwbGVdPVwidHJ1ZVwiIFthbGxvd0NsZWFyXT1cInRydWVcIiBuYW1lPVwie3tmbD8uZm9ybV9maWVsZH19XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAjc2FmaWVsZD1cIm5nTW9kZWxcIiBbcmVxdWlyZWRdPVwiZmw/LmlzX2NvbXB1bHNvcnkgPT0gJzEnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNvcHRpb25UZW1wbGF0ZSBsZXQtb3B0aW9uPVwib3B0aW9uXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmFtZmFtZmFtLWZsYWdzIHt7b3B0aW9uPy52YWx1ZX19XCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e29wdGlvbj8ubGFiZWx9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctc2VsZWN0PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cInNhZmllbGQuaW52YWxpZCAmJiAoc2FmaWVsZC5kaXJ0eSB8fCBzYWZpZWxkLnRvdWNoZWQpXCIgY2xhc3M9XCJhbGVydCBhbGVydC1kYW5nZXIgY2FcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cInNhZmllbGQuZXJyb3JzLnJlcXVpcmVkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAge3tmbC5mb3JtX2ZpZWxkX3RpdGxlfX0gaXMgcmVxdWlyZWQuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cFwiICpuZ0lmPVwiZmw/LmZvcm1fZmllbGRfdHlwID09ICd0YScgJiYgZmw/LmlzX2hpZGRlbiA9PSAwICYmIGZsPy5kdGFfdHlwID09J2MnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiY29sLW1kLTMgY29udHJvbC1sYWJlbFwiPnt7Zmw/LmZvcm1fZmllbGRfdGl0bGV9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LWRhbmdlclwiICpuZ0lmPVwiZmwuaXNfY29tcHVsc29yeSA9PSAxXCI+Kjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtOVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWdyb3VwIHctMTAwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZXh0YXJlYSBjbGFzcz1cImZvcm0tY29udHJvbFwiIHJvd3M9XCIzXCIgbmFtZT1cInt7Zmw/LmZvcm1fZmllbGR9fVwiIFt2YWx1ZV09XCJmbD8uZGVmYXVsdF92YWx1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJmbC5kZWZhdWx0X3ZhbHVlXCIgI3RleHRBcmVhPVwibmdNb2RlbFwiIChibHVyKT1cImNoa0Z1bihmbCxmbC5kZWZhdWx0X3ZhbHVlKTtcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsndW5pcUVyck1zZyc6IGZsPy5mb3JtX2ZpZWxkID09IG9uRXJyfVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW3JlcXVpcmVkXT1cImZsPy5pc19jb21wdWxzb3J5ID09ICcxJ1wiPjwvdGV4dGFyZWE+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJ0ZXh0QXJlYS5pbnZhbGlkICYmICh0ZXh0QXJlYS5kaXJ0eSB8fCB0ZXh0QXJlYS50b3VjaGVkKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYWxlcnQgYWxlcnQtZGFuZ2VyIGNhXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJ0ZXh0QXJlYS5lcnJvcnMucmVxdWlyZWRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICB7e2ZsLmZvcm1fZmllbGRfdGl0bGV9fSBpcyByZXF1aXJlZC5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJmbD8uZm9ybV9maWVsZF90eXAgPT0gJ2hkJyB8fCBmbD8uZm9ybV9maWVsZF90eXAgPT0gJ2hjJyB8fCBmbD8uZm9ybV9maWVsZF90eXAgPT0gJ2RmJyB8fCBmbD8uZm9ybV9maWVsZF90eXAgPT0gJ2ZrJyB8fCBmbD8uZm9ybV9maWVsZF90eXAgPT0gJ2NrJyAmJiBmbD8uaXNfaGlkZGVuID09IDBcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsnbXQwJzogZmw/LmZvcm1fZmllbGRfdHlwID09ICdoZCd9XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJoaWRkZW5cIiBjbGFzcz1cImZvcm0tY29udHJvbFwiIG5hbWU9XCJ7e2ZsPy5mb3JtX2ZpZWxkfX1cIiBbdmFsdWVdPVwiZmw/LmRlZmF1bHRfdmFsdWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJmbC5kZWZhdWx0X3ZhbHVlXCIgI2hkZj1cIm5nTW9kZWxcIiAvPlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXBcIiAqbmdJZj1cImZsPy5mb3JtX2ZpZWxkX3R5cCA9PSAnc3EnICYmIGZsPy5pc19oaWRkZW4gPT0gMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImNvbC1tZC0zIGNvbnRyb2wtbGFiZWxcIj48L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtOVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWdyb3VwIHctMTAwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiaGlkZGVuXCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBuYW1lPVwie3tmbD8uZm9ybV9maWVsZH19XCIgW3ZhbHVlXT1cImZsPy5kZWZhdWx0X3ZhbHVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImZsLmRlZmF1bHRfdmFsdWVcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cFwiICpuZ0lmPVwiZmw/LmZvcm1fZmllbGRfdHlwID09ICd0YicgJiYgZmw/LmlzX2hpZGRlbiA9PSAwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiY29sLW1kLTMgY29udHJvbC1sYWJlbFwiPnt7Zmw/LmZvcm1fZmllbGRfdGl0bGV9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LWRhbmdlclwiICpuZ0lmPVwiZmwuaXNfY29tcHVsc29yeSA9PSAxXCI+Kjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ncm91cCB3LTEwMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c2VsZWN0IGNsYXNzPVwiZm9ybS1jb250cm9sIHNlbGVjdFwiIG5hbWU9XCJ7e2ZsPy5mb3JtX2ZpZWxkfX1cIiBbdmFsdWVdPVwiZmw/LmRlZmF1bHRfdmFsdWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiZmwuZGVmYXVsdF92YWx1ZVwiICN0ZGY9XCJuZ01vZGVsXCIgW3JlcXVpcmVkXT1cImZsPy5pc19jb21wdWxzb3J5ID09ICcxJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gKm5nRm9yPVwibGV0IGR5bmFtaWMgb2Ygc3FsQXJyYXlbZmwuZm9ybV9maWVsZF1cIiB2YWx1ZT1cInt7ZHluYW1pYy52YWx1ZX19XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e2R5bmFtaWMubGFiZWx9fTwvb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3NlbGVjdD5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cInRkZi5pbnZhbGlkICYmICh0ZGYuZGlydHkgfHwgdGRmLnRvdWNoZWQpXCIgY2xhc3M9XCJhbGVydCBhbGVydC1kYW5nZXIgY2FcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cInRkZi5lcnJvcnMucmVxdWlyZWRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICB7e2ZsLmZvcm1fZmllbGRfdGl0bGV9fSBpcyByZXF1aXJlZC5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwXCIgKm5nSWY9XCJmbD8uZm9ybV9maWVsZF90eXAgPT0gJ2wnICYmIGZsPy5pc19oaWRkZW4gPT0gMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImNvbC1tZC0zIGNvbnRyb2wtbGFiZWxcIj57e2ZsPy5mb3JtX2ZpZWxkX3RpdGxlfX1cclxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC1kYW5nZXJcIiAqbmdJZj1cImZsLmlzX2NvbXB1bHNvcnkgPT0gMVwiPio8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ncm91cCB3LTEwMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c2VsZWN0IGNsYXNzPVwiZm9ybS1jb250cm9sIHNlbGVjdFwiIG5hbWU9XCJ7e2ZsPy5mb3JtX2ZpZWxkfX1cIiBbdmFsdWVdPVwiZmw/LmRlZmF1bHRfdmFsdWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiZmwuZGVmYXVsdF92YWx1ZVwiICNsSW5wdXQ9XCJuZ01vZGVsXCIgW3JlcXVpcmVkXT1cImZsPy5pc19jb21wdWxzb3J5ID09ICcxJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gKm5nRm9yPVwibGV0IGxvdiBvZiBmbC5rdlwiIHZhbHVlPVwie3tsb3Yua319XCI+e3tsb3Yudn19PC9vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc2VsZWN0PlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwibElucHV0LmludmFsaWQgJiYgKGxJbnB1dC5kaXJ0eSB8fCBsSW5wdXQudG91Y2hlZClcIiBjbGFzcz1cImFsZXJ0IGFsZXJ0LWRhbmdlciBjYVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwibElucHV0LmVycm9ycy5yZXF1aXJlZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHt7ZmwuZm9ybV9maWVsZF90aXRsZX19IGlzIHJlcXVpcmVkLlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXBcIiAqbmdJZj1cImZsPy5mb3JtX2ZpZWxkX3R5cCA9PSAnbGQnICAmJiBmbD8uaXNfaGlkZGVuID09IDBcIj5cclxuICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJjb2wtbWQtMyBjb250cm9sLWxhYmVsXCI+e3tmbD8uZm9ybV9maWVsZF90aXRsZX19XHJcbiAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtZGFuZ2VyXCIgKm5nSWY9XCJmbC5pc19jb21wdWxzb3J5ID09IDFcIj4qPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC05XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtZ3JvdXAgdy0xMDBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHNlbGVjdCBjbGFzcz1cImZvcm0tY29udHJvbCBzZWxlY3RcIiBuYW1lPVwie3tmbD8uZm9ybV9maWVsZH19XCIgW3ZhbHVlXT1cImZsPy5kZWZhdWx0X3ZhbHVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImZsLmRlZmF1bHRfdmFsdWVcIiAjbGRJbnB1dD1cIm5nTW9kZWxcIiBbcmVxdWlyZWRdPVwiZmw/LmlzX2NvbXB1bHNvcnkgPT0gJzEnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiAqbmdGb3I9XCJsZXQgZHluYW1pYyBvZiBzcWxBcnJheVtmbC5mb3JtX2ZpZWxkXVwiIHZhbHVlPVwie3tkeW5hbWljLnZhbHVlfX1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7ZHluYW1pYy5sYWJlbH19PC9vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc2VsZWN0PlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwibGRJbnB1dC5pbnZhbGlkICYmIChsZElucHV0LmRpcnR5IHx8IGxkSW5wdXQudG91Y2hlZClcIiBjbGFzcz1cImFsZXJ0IGFsZXJ0LWRhbmdlciBjYVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwibGRJbnB1dC5lcnJvcnMucmVxdWlyZWRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICB7e2ZsLmZvcm1fZmllbGRfdGl0bGV9fSBpcyByZXF1aXJlZC5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwXCIgKm5nSWY9XCJmbD8uZm9ybV9maWVsZF90eXAgPT0gJ3MnICYmIGZsPy5pc19oaWRkZW4gPT0gMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImNvbC1tZC0zIGNvbnRyb2wtbGFiZWxcIj57e2ZsPy5mb3JtX2ZpZWxkX3RpdGxlfX1cclxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC1kYW5nZXJcIiAqbmdJZj1cImZsLmlzX2NvbXB1bHNvcnkgPT0gMVwiPio8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ncm91cCB3LTEwMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c2VsZWN0IGNsYXNzPVwiZm9ybS1jb250cm9sIHNlbGVjdFwiIG5hbWU9XCJ7e2ZsPy5mb3JtX2ZpZWxkfX1cIiBbdmFsdWVdPVwiZmw/LmRlZmF1bHRfdmFsdWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiZmwuZGVmYXVsdF92YWx1ZVwiIChjaGFuZ2UpPVwiY2hrRnVuKGZsLGZsLmRlZmF1bHRfdmFsdWUpXCIgaWQ9XCJ7e2ZsLmNvbHVtbl9rZXl9fVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgI3NmaT1cIm5nTW9kZWxcIiBbcmVxdWlyZWRdPVwiZmw/LmlzX2NvbXB1bHNvcnkgPT0gJzEnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiAqbmdGb3I9XCJsZXQgZHluYW1pYyBvZiBzcWxBcnJheVtmbC5mb3JtX2ZpZWxkXVwiIHZhbHVlPVwie3tkeW5hbWljLnZhbHVlfX1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7ZHluYW1pYy5sYWJlbH19PC9vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc2VsZWN0PlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwic2ZpLmludmFsaWQgJiYgKHNmaS5kaXJ0eSB8fCBzZmkudG91Y2hlZClcIiBjbGFzcz1cImFsZXJ0IGFsZXJ0LWRhbmdlciBjYVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwic2ZpLmVycm9ycy5yZXF1aXJlZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHt7ZmwuZm9ybV9maWVsZF90aXRsZX19IGlzIHJlcXVpcmVkLlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwXCIgKm5nSWY9XCJmbD8uZm9ybV9maWVsZF90eXAgPT0gJ3NiJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImNvbC1tZC0zIGNvbnRyb2wtbGFiZWxcIj57e2ZsPy5mb3JtX2ZpZWxkX3RpdGxlfX1cclxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC1kYW5nZXJcIiAqbmdJZj1cImZsLmlzX2NvbXB1bHNvcnkgPT0gMVwiPio8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLThcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ncm91cCB3LTEwMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctc2VsZWN0IHN0eWxlPVwiei1pbmRleDogNTtcIiBbb3B0aW9uc109XCJzcWxBcnJheVtmbC5mb3JtX2ZpZWxkXVwiICNzZmk9XCJuZ01vZGVsXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImZsLmRlZmF1bHRfdmFsdWVcIiBuYW1lPVwie3tmbD8uZm9ybV9maWVsZH19XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAoc2VsZWN0ZWQpPVwiY2hrRnVuKGZsLGZsLmRlZmF1bHRfdmFsdWUpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAoZmlsdGVySW5wdXRDaGFuZ2VkKT1cImxvYWRTdWdnZGF0YSgkZXZlbnQsZmwucGFnZV9pdGVtX2lkbixmbC5mb3JtX2ZpZWxkKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L25nLXNlbGVjdD5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cInNmaS5pbnZhbGlkICYmIChzZmkuZGlydHkgfHwgc2ZpLnRvdWNoZWQpXCIgY2xhc3M9XCJhbGVydCBhbGVydC1kYW5nZXIgY2FcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cInNmaS5lcnJvcnMucmVxdWlyZWRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICB7e2ZsLmZvcm1fZmllbGRfdGl0bGV9fSBpcyByZXF1aXJlZC5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTFcIiAqbmdJZj1cImZsPy5mb3JtX2ZpZWxkX2ljb24gPT0gJ2FkZCdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1zdWNjZXNzIGJ0bi1yb3VuZGVkXCI+PHNwYW4+PGlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZmEgZmEtcGx1c1wiPjwvaT48L3NwYW4+PC9idXR0b24+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWZvb3RlclwiPlxyXG4gICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cInN1Ym1pdFwiIGNsYXNzPVwiYnRuIGJ0bi1zdWNjZXNzXCIgKGNsaWNrKT1cInN1Ym1pdEZvcm0oZixzdWJtaXRCdG4pXCIgYXBwQXBwTm9EYmxDbGlja1xyXG4gICAgICAgICAgICAgICAgI3N1Ym1pdEJ0bj57e2J0bk5hbWV9fTwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cInJlc2V0XCIgY2xhc3M9XCJidG4gYnRuLWRhbmdlclwiIChjbGljayk9XCJyZXNldChmKVwiICpuZ0lmPVwiYnRuTmFtZSA9PSAnQWRkJ1wiPlJlc2V0PC9idXR0b24+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9mb3JtPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiBjbGFzcz1cIm1vZGFsXCIgaWQ9XCJkZWxldGVUZXJtc21vZGFsXCIgcm9sZT1cImRpYWxvZ1wiIGFyaWEtbGFiZWxsZWRieT1cInNtYWxsTW9kYWxIZWFkXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCJcclxuICAgICAgZGF0YS1iYWNrZHJvcD1cInN0YXRpY1wiIGRhdGEta2V5Ym9hcmQ9XCJmYWxzZVwiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtZGlhbG9nIG1vZGFsLXNtXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWNvbnRlbnRcIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1oZWFkZXJcIj5cclxuICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJjbG9zZVwiIGRhdGEtZGlzbWlzcz1cIm1vZGFsXCIgKGNsaWNrKT1cImNsb3NlTnVsbCgpO1wiICNkZWxldGVjbHNidG4+XHJcbiAgICAgICAgICAgICAgPHNwYW4gYXJpYS1oaWRkZW49XCJ0cnVlXCI+JnRpbWVzOzwvc3Bhbj5cclxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInNyLW9ubHlcIj5DbG9zZTwvc3Bhbj5cclxuICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgIDxoNCBjbGFzcz1cIm1vZGFsLXRpdGxlXCIgaWQ9XCJzbWFsbE1vZGFsSGVhZFwiPldhcm5pbmc8L2g0PlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtYm9keVwiPlxyXG4gICAgICAgICAgICBBcmUgeW91IHN1cmUgd2FudCB0byBkZWxldGUgdGVybT9cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWZvb3RlclwiPlxyXG4gICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tZGVmYXVsdFwiIGRhdGEtZGlzbWlzcz1cIm1vZGFsXCI+Q2xvc2U8L2J1dHRvbj5cclxuICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLWRhbmdlclwiIGRhdGEtZGlzbWlzcz1cIm1vZGFsXCIgKGNsaWNrKT1cIkRlbGV0ZVRlcm1zKCk7XCI+RGVsZXRlPC9idXR0b24+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgICA8ZGl2IGNsYXNzPVwibW9kYWxcIiBpZD1cImRlbGV0ZW1vZGFsXCIgcm9sZT1cImRpYWxvZ1wiIGFyaWEtbGFiZWxsZWRieT1cInNtYWxsTW9kYWxIZWFkXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCJcclxuICAgICAgZGF0YS1iYWNrZHJvcD1cInN0YXRpY1wiIGRhdGEta2V5Ym9hcmQ9XCJmYWxzZVwiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtZGlhbG9nIG1vZGFsLXNtXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWNvbnRlbnRcIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1oZWFkZXJcIj5cclxuICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJjbG9zZVwiIGRhdGEtZGlzbWlzcz1cIm1vZGFsXCIgKGNsaWNrKT1cImNsb3NlTnVsbCgpO1wiICNkZWxldGVjbHNidG4+XHJcbiAgICAgICAgICAgICAgPHNwYW4gYXJpYS1oaWRkZW49XCJ0cnVlXCI+JnRpbWVzOzwvc3Bhbj5cclxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInNyLW9ubHlcIj5DbG9zZTwvc3Bhbj5cclxuICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgIDxoNCBjbGFzcz1cIm1vZGFsLXRpdGxlXCIgaWQ9XCJzbWFsbE1vZGFsSGVhZFwiPldhcm5pbmc8L2g0PlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtYm9keVwiPlxyXG4gICAgICAgICAgICBBcmUgeW91IHN1cmUgd2FudCB0byBkZWxldGU/XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1mb290ZXJcIj5cclxuICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLWRlZmF1bHRcIiBkYXRhLWRpc21pc3M9XCJtb2RhbFwiPkNsb3NlPC9idXR0b24+XHJcbiAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1kYW5nZXJcIiBkYXRhLWRpc21pc3M9XCJtb2RhbFwiXHJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cImRlbGV0ZURhdGFMaXN0KCk7XCI+RGVsZXRlPC9idXR0b24+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuXHJcblxyXG4gICAgPGRpdiBjbGFzcz1cIm1vZGFsXCIgaWQ9XCJtb2RhbF9zeXNcIiB0YWJpbmRleD1cIi0xXCIgcm9sZT1cImRpYWxvZ1wiIGFyaWEtbGFiZWxsZWRieT1cImRlZk1vZGFsSGVhZFwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtZGlhbG9nXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWNvbnRlbnRcIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1oZWFkZXJcIj5cclxuICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJjbG9zZVwiIGRhdGEtZGlzbWlzcz1cIm1vZGFsXCI+XHJcbiAgICAgICAgICAgICAgPHNwYW4gYXJpYS1oaWRkZW49XCJ0cnVlXCI+JnRpbWVzOzwvc3Bhbj5cclxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInNyLW9ubHlcIj5DbG9zZTwvc3Bhbj5cclxuICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgIDxoNCBjbGFzcz1cIm1vZGFsLXRpdGxlXCIgaWQ9XCJkZWZNb2RhbEhlYWRcIj5CYXNpYyBNb2RhbDwvaDQ+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1ib2R5XCI+XHJcbiAgICAgICAgICAgIFNvbWUgY29udGVudCBpbiBtb2RhbCBleGFtcGxlXHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1mb290ZXJcIj5cclxuICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLWRlZmF1bHRcIiBkYXRhLWRpc21pc3M9XCJtb2RhbFwiPkNsb3NlPC9idXR0b24+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJtb2RhbFwiIGlkPVwicm93R3JwbW9kYWxcIiB0YWJpbmRleD1cIi0yXCIgcm9sZT1cImRpYWxvZ1wiIGFyaWEtbGFiZWxsZWRieT1cInJvd0dycG1vZGFsXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCJcclxuICAgICAgZGF0YS1iYWNrZHJvcD1cInN0YXRpY1wiIGRhdGEta2V5Ym9hcmQ9XCJmYWxzZVwiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtZGlhbG9nXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWNvbnRlbnRcIj5cclxuICAgICAgICAgIDxmb3JtIGNsYXNzPVwiZm9ybS1ob3Jpem9udGFsXCIgI2ZyZz1cIm5nRm9ybVwiIG5hbWU9XCJhcHBGb3JtUm93R3JwXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1oZWFkZXJcIj5cclxuICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImNsb3NlXCIgZGF0YS1kaXNtaXNzPVwibW9kYWxcIiAoY2xpY2spPVwiY2xvc2VOdWxsKCk7XCIgI2Nsb3NlYnRuPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gYXJpYS1oaWRkZW49XCJ0cnVlXCI+JnRpbWVzOzwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwic3Itb25seVwiPkNsb3NlPC9zcGFuPlxyXG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgIDxoNCBjbGFzcz1cIm1vZGFsLXRpdGxlXCIgaWQ9XCJyb3dHcnBIZWFkXCI+Um93IEdyb3VwPC9oND5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1ib2R5XCI+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0xMlwiIHN0eWxlPVwicGFkZGluZy1ib3R0b206IDEwcHg7XCI+XHJcbiAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImNvbC1tZC0yIGNvbnRyb2wtbGFiZWxcIj5BdHRyaWJ1dGVzPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiY29sLW1kLTUgY29udHJvbC1sYWJlbFwiIHN0eWxlPVwicGFkZGluZy1yaWdodDogOTBweDtcIj5Sb3cgRGlzcGxheTwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImNvbC1tZC01IGNvbnRyb2wtbGFiZWxcIiBzdHlsZT1cInBhZGRpbmctcmlnaHQ6IDc2cHg7XCI+Um93IEdyb3VwIDwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMTJcIj5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXBcIiAqbmdGb3I9XCJsZXQgYXR0IG9mIGRpc3BsYXlfYXR0cjtcIj5cclxuICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJjb2wtbWQtMiBjb250cm9sLWxhYmVsXCI+e3thdHQuYXR0cn19PC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ncm91cCB3LTEwMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c2VsZWN0IGNsYXNzPVwiZm9ybS1jb250cm9sXCIgbmFtZT1cImRyX3t7YXR0LmF0dHJ9fVwiIFtkaXNhYmxlZF09XCJkaXNhYmxlc2VsY1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ9XCJyb3dfe3thdHQuYXR0cn19XCIgdmFsdWU9XCJcIiAoY2hhbmdlKT1cIm9uQ2hhbmdlRGlzcFJvdygkZXZlbnQpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBbdmFsdWVdPVwiYXR0LmRpc3BsYXlfcm93XCIgLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiAqbmdGb3I9XCJsZXQgZHIgb2YgZGlzcGxheV9yb3c7XCIgdmFsdWU9XCJ7e2RyLmlkbn19XCI+e3tkci5wcmludH19PC9vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc2VsZWN0PlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC01XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtZ3JvdXAgdy0xMDBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHNlbGVjdCBjbGFzcz1cImZvcm0tY29udHJvbFwiIG5hbWU9XCJncnBfe3thdHQuYXR0cn19XCIgW2Rpc2FibGVkXT1cImRpc2FibGVzZWxjXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBpZD1cImdycF97e2F0dC5hdHRyfX1cIiBbdmFsdWVdPVwiYXR0LmRpc3BsYXlfZ3JvdXBcIiAoY2hhbmdlKT1cIm9uQ2hhbmdlRGlzcEdycCgkZXZlbnQpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiAqbmdGb3I9XCJsZXQgZGcgb2YgZGlzcGxheV9ncm91cDtcIiB2YWx1ZT1cInt7ZGcuaWRufX1cIj57e2RnLnByaW50fX08L29wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zZWxlY3Q+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1mb290ZXJcIj5cclxuICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJyZXNldFwiIGNsYXNzPVwiYnRuIGJ0bi1kYW5nZXJcIiBkYXRhLWRpc21pc3M9XCJtb2RhbFwiPmNsb3NlPC9idXR0b24+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9mb3JtPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG5cclxuXHJcblxyXG5cclxuICAgIDxkaXYgY2xhc3M9XCJtb2RhbFwiIGlkPVwicHJvZHVjdERldGFpbE1hcE1EXCIgcm9sZT1cImRpYWxvZ1wiIGFyaWEtbGFiZWxsZWRieT1cInNtYWxsTW9kYWxIZWFkXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCJcclxuICAgICAgZGF0YS1iYWNrZHJvcD1cInN0YXRpY1wiIGRhdGEta2V5Ym9hcmQ9XCJmYWxzZVwiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtZGlhbG9nIG1vZGFsLXNtIG13aWR0aFwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1jb250ZW50XCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtaGVhZGVyXCI+XHJcbiAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiY2xvc2VcIiBkYXRhLWRpc21pc3M9XCJtb2RhbFwiIChjbGljayk9XCJjbG9zZU51bGwoKTtcIiAjcHJvZHVjdE1hcGNsc2J0bj5cclxuICAgICAgICAgICAgICA8c3BhbiBhcmlhLWhpZGRlbj1cInRydWVcIj4mdGltZXM7PC9zcGFuPlxyXG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwic3Itb25seVwiIHByb2R1Y3REZXRhaWxNYXBjbHNidG4+Q2xvc2U8L3NwYW4+XHJcbiAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8aDQgY2xhc3M9XCJtb2RhbC10aXRsZVwiIGlkPVwic21hbGxNb2RhbEhlYWRcIj5Qcm9kdWN0IE1hcHBpbmcgb2YmbmJzcDt7e3Byb2R1Y0RldGFpbE1vZGVsVGl0bGV9fTwvaDQ+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1ib2R5XCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0YWJsZS1yZXNwb25zaXZlXCI+XHJcbiAgICAgICAgICAgICAgPHRhYmxlIGNsYXNzPVwidGFibGUgdGFibGUtYm9yZGVyZWQgdGFibGUtaG92ZXIgdGFibGUtaG92ZXItY2VsbHNcIj5cclxuICAgICAgICAgICAgICAgIDx0aGVhZD5cclxuICAgICAgICAgICAgICAgICAgPHRyPlxyXG4gICAgICAgICAgICAgICAgICAgIDx0aD5cclxuICAgICAgICAgICAgICAgICAgICAgIE5hbWVcclxuICAgICAgICAgICAgICAgICAgICA8L3RoPlxyXG4gICAgICAgICAgICAgICAgICAgIDx0aD5cclxuICAgICAgICAgICAgICAgICAgICAgIFZhbHVlXHJcbiAgICAgICAgICAgICAgICAgICAgPC90aD5cclxuICAgICAgICAgICAgICAgICAgPC90cj5cclxuICAgICAgICAgICAgICAgIDwvdGhlYWQ+XHJcbiAgICAgICAgICAgICAgICA8dGJvZHk+XHJcbiAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGtleSBvZiBhdHRyRHRsPy5wcnBMaXN0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHRyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPHRkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7e2tleS5wcmludH19XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPHRkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBjbGFzcz1cImZvcm0tY29udHJvbFwiIFsobmdNb2RlbCldPVwiYXR0ck1hcHBpbmdEdGxba2V5Py52YWxdXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgPC90cj5cclxuICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICA8L3Rib2R5PlxyXG4gICAgICAgICAgICAgIDwvdGFibGU+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtZm9vdGVyXCI+XHJcbiAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLWRlZmF1bHRcIiBkYXRhLWRpc21pc3M9XCJtb2RhbFwiICNwcm9kdWN0RGV0YWlsTWFwY2xzYnRuPkNsb3NlPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLXN1Y2Nlc3NcIiBkYXRhLWRpc21pc3M9XCJtb2RhbFwiXHJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwic2F2ZVByb2R1Y3REZXRhaWxNYXBwaW5nKCk7XCI+U2F2ZTwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIDxkaXYgY2xhc3M9XCJtb2RhbFwiIGlkPVwiZG9jZGVsZXRlbW9kYWxcIiByb2xlPVwiZGlhbG9nXCIgYXJpYS1sYWJlbGxlZGJ5PVwic21hbGxNb2RhbEhlYWRcIiBhcmlhLWhpZGRlbj1cInRydWVcIlxyXG4gICAgICBkYXRhLWJhY2tkcm9wPVwic3RhdGljXCIgZGF0YS1rZXlib2FyZD1cImZhbHNlXCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1kaWFsb2cgbW9kYWwtc21cIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtY29udGVudFwiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWhlYWRlclwiPlxyXG4gICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImNsb3NlXCIgZGF0YS1kaXNtaXNzPVwibW9kYWxcIiAoY2xpY2spPVwiY2xvc2VOdWxsKCk7XCIgI2RlbGV0ZWNsc2J0bj5cclxuICAgICAgICAgICAgICA8c3BhbiBhcmlhLWhpZGRlbj1cInRydWVcIj4mdGltZXM7PC9zcGFuPlxyXG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwic3Itb25seVwiPkNsb3NlPC9zcGFuPlxyXG4gICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgPGg0IGNsYXNzPVwibW9kYWwtdGl0bGVcIiBpZD1cInNtYWxsTW9kYWxIZWFkXCI+V2FybmluZzwvaDQ+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1ib2R5XCI+XHJcbiAgICAgICAgICAgIEFyZSB5b3Ugc3VyZSB3YW50IHRvIGRlbGV0ZT9cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWZvb3RlclwiPlxyXG4gICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tZGVmYXVsdFwiIGRhdGEtZGlzbWlzcz1cIm1vZGFsXCI+Q2xvc2U8L2J1dHRvbj5cclxuICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLWRhbmdlclwiIGRhdGEtZGlzbWlzcz1cIm1vZGFsXCIgKGNsaWNrKT1cImRlbGV0ZURvYygpO1wiPkRlbGV0ZTwvYnV0dG9uPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcblxyXG4gICAgPGRpdiBjbGFzcz1cIm1vZGFsXCIgaWQ9XCJibmtkZWxldGVtb2RhbFwiIHJvbGU9XCJkaWFsb2dcIiBhcmlhLWxhYmVsbGVkYnk9XCJzbWFsbE1vZGFsSGVhZFwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiXHJcbiAgICAgIGRhdGEtYmFja2Ryb3A9XCJzdGF0aWNcIiBkYXRhLWtleWJvYXJkPVwiZmFsc2VcIj5cclxuICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWRpYWxvZyBtb2RhbC1zbVwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1jb250ZW50XCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtaGVhZGVyXCI+XHJcbiAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiY2xvc2VcIiBkYXRhLWRpc21pc3M9XCJtb2RhbFwiIChjbGljayk9XCJjbG9zZU51bGwoKTtcIiAjZGVsZXRlY2xzYnRuPlxyXG4gICAgICAgICAgICAgIDxzcGFuIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPiZ0aW1lczs8L3NwYW4+XHJcbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzci1vbmx5XCI+Q2xvc2U8L3NwYW4+XHJcbiAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8aDQgY2xhc3M9XCJtb2RhbC10aXRsZVwiIGlkPVwic21hbGxNb2RhbEhlYWRcIj5XYXJuaW5nPC9oND5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWJvZHlcIj5cclxuICAgICAgICAgICAgQXJlIHlvdSBzdXJlIHdhbnQgdG8gZGVsZXRlP1xyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtZm9vdGVyXCI+XHJcbiAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1kZWZhdWx0XCIgZGF0YS1kaXNtaXNzPVwibW9kYWxcIj5DbG9zZTwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tZGFuZ2VyXCIgZGF0YS1kaXNtaXNzPVwibW9kYWxcIlxyXG4gICAgICAgICAgICAgIChjbGljayk9XCJEZWxldGVMZWRnZXJCYW5rKClcIj5EZWxldGU8L2J1dHRvbj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gICAgPGJ1dHRvbiBpZD1cImJua2RlbGV0ZW1vZGFsYnRuXCIgW2hpZGRlbl09XCJ0cnVlXCIgZGF0YS10b2dnbGU9XCJtb2RhbFwiIGRhdGEtdGFyZ2V0PVwiI2Jua2RlbGV0ZW1vZGFsXCI+PC9idXR0b24+XHJcblxyXG4gICAgPGJ1dHRvbiBpZD1cImRvY2RlbGV0ZWJ0blwiIFtoaWRkZW5dPVwidHJ1ZVwiIGRhdGEtdG9nZ2xlPVwibW9kYWxcIiBkYXRhLXRhcmdldD1cIiNkb2NkZWxldGVtb2RhbFwiPjwvYnV0dG9uPlxyXG4gICAgPGJ1dHRvbiBpZD1cImRlbGV0ZWJ0blwiIFtoaWRkZW5dPVwidHJ1ZVwiIGRhdGEtdG9nZ2xlPVwibW9kYWxcIiBkYXRhLXRhcmdldD1cIiNkZWxldGVtb2RhbFwiPjwvYnV0dG9uPlxyXG4gICAgPGJ1dHRvbiBpZD1cImRlbGV0ZVRlcm1zXCIgW2hpZGRlbl09XCJ0cnVlXCIgZGF0YS10b2dnbGU9XCJtb2RhbFwiIGRhdGEtdGFyZ2V0PVwiI2RlbGV0ZVRlcm1zbW9kYWxcIj48L2J1dHRvbj5cclxuXHJcbiAgICA8YnV0dG9uIGlkPVwiZGF0YW1kYnRuXCIgW2hpZGRlbl09XCJ0cnVlXCIgZGF0YS10b2dnbGU9XCJtb2RhbFwiIGRhdGEtdGFyZ2V0PVwiI2RhdGFtb2RhbFwiPjwvYnV0dG9uPlxyXG4gICAgPGJ1dHRvbiBpZD1cImNsc01kXCIgW2hpZGRlbl09XCJ0cnVlXCIgZGF0YS1kaXNtaXNzPVwibW9kYWxcIiBkYXRhLXRhcmdldD1cIiNkYXRhbW9kYWxcIj48L2J1dHRvbj5cclxuICAgIDxidXR0b24gaWQ9XCJzeXNtZFwiIFtoaWRkZW5dPVwidHJ1ZVwiIGRhdGEtZGlzbWlzcz1cIm1vZGFsXCIgZGF0YS10YXJnZXQ9XCIjbW9kYWxfc3lzXCI+PC9idXR0b24+XHJcbiAgICA8YnV0dG9uIGlkPVwiYnRucHJvZHVjdERldGFpbE1hcE1EXCIgW2hpZGRlbl09XCJ0cnVlXCIgZGF0YS10b2dnbGU9XCJtb2RhbFwiIGRhdGEtdGFyZ2V0PVwiI3Byb2R1Y3REZXRhaWxNYXBNRFwiPjwvYnV0dG9uPlxyXG5cclxuICAgIDxidXR0b24gaWQ9XCJyb3dHcnBidG5cIiBbaGlkZGVuXT1cInRydWVcIiBkYXRhLWRpc21pc3M9XCJtb2RhbFwiIGRhdGEtdG9nZ2xlPVwibW9kYWxcIiBkYXRhLXRhcmdldD1cIiNyb3dHcnBtb2RhbFwiPjwvYnV0dG9uPlxyXG4gIDwvZGl2PiJdfQ==