ezlibrary_v2 0.0.56 → 0.0.57

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.
@@ -117,8 +117,6 @@ export class SystemComponent {
117
117
  this.paraObj['level'] = this.level;
118
118
  }
119
119
  let options = ({ headers: new HttpHeaders(this.header) });
120
- console.log(options);
121
- console.log(JSON.stringify(this.paraObj));
122
120
  this.ss.getData(this.paraObj, options).then((response) => {
123
121
  if (response.status == 'SUCCESS') {
124
122
  console.log(response);
@@ -129,11 +127,13 @@ export class SystemComponent {
129
127
  this.pageInfo = response.pageInfo;
130
128
  this.pkf = response.pageInfo.primary_key_field;
131
129
  this.datalist = response.dataList || [];
130
+ if (this.datalist.length > 0) {
131
+ this.p = 1;
132
+ }
132
133
  this.isOpen = false;
133
134
  this.icon = 'fa fa-indent';
134
135
  this.actions = response.actions;
135
136
  this.navigation = response.navigation;
136
- debugger;
137
137
  if (action == 'newcontact' || action == 'newledger' || action == 'newacccontact') {
138
138
  this.action = action;
139
139
  this.navigation = response.navigation[0];
@@ -1095,10 +1095,10 @@ export class SystemComponent {
1095
1095
  }
1096
1096
  }
1097
1097
  /** @nocollapse */ SystemComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: SystemComponent, deps: [{ token: i1.Router }, { token: i1.ActivatedRoute }, { token: i2.ToastrService }, { token: i3.SystemServiceService }, { token: i4.NgxSpinnerService }, { token: i5.CommanServiceService }, { token: i6.AdminServiceService }], target: i0.ɵɵFactoryTarget.Component });
1098
- /** @nocollapse */ SystemComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: SystemComponent, selector: "app-system", viewQueries: [{ propertyName: "closebtn", first: true, predicate: ["closebtn"], descendants: true }, { propertyName: "deleteclsbtn", first: true, predicate: ["deleteclsbtn"], descendants: true }, { propertyName: "input", first: true, predicate: ["inputs"], descendants: true }, { propertyName: "popclosebtn", first: true, predicate: ["popclosebtn"], descendants: true }, { propertyName: "submitbtn", first: true, predicate: ["submitBtn"], descendants: true }, { propertyName: "productMapclsbtn", first: true, predicate: ["productMapclsbtn"], 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\">{{pageInfo?.title}}\r\n <span class=\"f-12\">({{cDt | date:'medium'}})</span>\r\n </h3>\r\n <button type=\"button\" id=\"addBtn\" class=\"btn btn-info pull-right\" *ngIf=\"addNew?.is_compulsory == 1\"\r\n (click)=\"userAction(data, 'add', '');f.reset();\">{{addNew?.form_field_title}}</button>\r\n\r\n\r\n </div>\r\n </div>\r\n <div class=\"row\" *ngIf=\"router.url != curl\">\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\"\r\n (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]=\"isOpen == true ? 'col-md-4' : 'hidden'\" *ngIf=\"route.snapshot.params['frmnme'] == 'menuMaster'\">\r\n <div class=\"row form-group\">\r\n <div class=\"col-md-4\">\r\n <label class=\"control-label\" style=\"text-align: right\">Application</label>\r\n </div>\r\n <div class=\"col-md-8\">\r\n <div class=\"input-group w-100\">\r\n <select class=\"form-control\" [(ngModel)]=\"app\" name=\"app\" (change)=\"fillModule(app)\">\r\n <option *ngFor=\"let lov of applicationList\" value=\"{{lov.k}}\">{{lov.v}}</option>\r\n </select>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"row form-group\" *ngIf=\"mdllist?.length > 1 \">\r\n <div class='col-md-4'>\r\n <label class=\"control-label\" style=\"text-align: right\">Module</label>\r\n </div>\r\n <div class=\"col-md-8\">\r\n <div class=\"input-group w-100\">\r\n <select class=\"form-control\" [(ngModel)]=\"v\" name=\"v\" (change)=\"fillLevel1(v)\">\r\n <option *ngFor=\"let lov of mdllist\" value=\"{{lov.k}}\">{{lov.v}}</option>\r\n </select>\r\n </div>\r\n </div>\r\n </div>\r\n <!-- <div class=\"row form-group\" *ngIf=\"menulvl1List?.length > 1 \">\r\n <div class=\"col-md-4\">\r\n <label class=\"control-label\" style=\"text-align: right\">Main Menu</label>\r\n </div>\r\n <div class=\"col-md-8\">\r\n <div class=\"input-group w-100\">\r\n <select class=\"form-control\" [(ngModel)]=\"v1\" name=\"v1\" (change)=\"fillLevel2(v,v1)\">\r\n <option *ngFor=\"let lov of menulvl1List\" value=\"{{lov.k}}\">{{lov.v}}</option>\r\n </select>\r\n </div>\r\n </div>\r\n </div> -->\r\n\r\n <!-- <div class=\"row form-group\" *ngIf=\"menulvl2List?.length > 1 \">\r\n <div class=\"col-md-4\">\r\n <label class=\"control-label\" style=\"text-align: right\">Sub Menu</label>\r\n </div>\r\n <div class=\"col-md-8\">\r\n <div class=\"input-group w-100\">\r\n <select class=\"form-control\" [(ngModel)]=\"v2\" name=\"v2\" (change)=\"submenuChange(v, v2)\">\r\n <option *ngFor=\"let lov of menulvl2List\" value=\"{{lov.k}}\">{{lov.v}}</option>\r\n </select>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"row form-group\" *ngIf=\"menulvl3List?.length > 1 \">\r\n <div class=\"col-md-4\">\r\n <label class=\"control-label\" style=\"text-align: right\">Page</label>\r\n </div>\r\n <div class=\"col-md-8\">\r\n <div class=\"input-group w-100\">\r\n <select class=\"form-control\" [(ngModel)]=\"v3\" name=\"v3\">\r\n <option *ngFor=\"let lov of menulvl3List\" value=\"{{lov.k}}\">{{lov.v}}</option>\r\n </select>\r\n </div>\r\n </div>\r\n </div> -->\r\n <div class=\"row form-group\" *ngIf=\"mdllist?.length > 1 \">\r\n <div class=\"col-md-4\">\r\n <label class=\"control-label\" style=\"text-align: right\">Level</label>\r\n </div>\r\n <div class=\"col-md-8\">\r\n <div class=\"input-group w-100\">\r\n <select class=\"form-control\" [(ngModel)]=\"level\" name=\"level\">\r\n <option value=\"''\">Select</option>\r\n <option value=\"1\">Level 1</option>\r\n <option value=\"2\">Level 2</option>\r\n <option value=\"3\">Level 3</option>\r\n </select>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div [ngClass]=\"navigation.length > 0 ? 'col-md-10' : route.snapshot.params['frmnme'] == 'menuMaster' ? isOpen == false ? 'col-md-12' : 'col-md-8' : 'col-md-12'\">\r\n <div class=\"panel panel-default\">\r\n <div class=\"panel-body\" [style]=\"route.snapshot.params['frmnme'] == 'menuMaster' ? 'margin-bottom: 35px;' : ''\">\r\n <!-- <div class=\"row\">\r\n <div class=\"col-sm-8\"></div>\r\n <div class=\"col-sm-4\">\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=\"row\">\r\n <div class=\"col-sm-6\">\r\n <form class=\"form-inline pull-left\" > \r\n <button *ngIf=\"route.snapshot.params['frmnme'] == 'menuMaster'\" class=\"btn btn-default\" style=\"padding: 4px 15px 4px 20px; margin-right: 10px; margin-bottom: 15px;\"\r\n data-toggle=\"tooltip\" data-placement=\"right\" title=\"Filter results\" (click)=\"openTog();\">\r\n <span class=\"{{icon}}\" style=\"color:#3b5998;\"></span>\r\n </button>\r\n <!-- </form>\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 \r\n <button class=\"btn btn-default\" style=\"padding: 4px 15px 4px 20px;margin-left: 10px; margin-bottom: 15px;\"\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 </form>\r\n <!-- <label>{{datalist.length}}</label> -->\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\"\r\n [(ngModel)]=\"searchF\" />\r\n </div>\r\n </form>\r\n </div>\r\n </div>\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>SR No</th>\r\n <th>Action</th>\r\n <th *ngFor=\"let tbh of tblH; let i = index \" (click)=\"setOrder(tbh,i)\">\r\n {{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 <tr\r\n *ngFor=\"let data of datalist | searchPipe:searchF | orderBy: order:reverse | paginate: { itemsPerPage: pageSize, currentPage: p }; let i = index;\">\r\n <td>{{i + 1}}</td>\r\n <td>\r\n <div class=\"btn-group\">\r\n <a href=\"#\" data-toggle=\"dropdown\"\r\n 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)\"\r\n (click)=\"userAction(data, action.form_field_typ, action);\">\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\"\r\n on-mouseleave=\"hoveredI=-1\">\r\n {{data[tbh]}}\r\n <div class=\"onHoverDiv\" *ngIf=\"i==hoveredI\">\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 </tbody>\r\n </table>\r\n </div>\r\n <pagination-controls (pageChange)=\"p = $event\" class=\"pull-right\"></pagination-controls>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"actionFooter\" *ngIf=\"route.snapshot.params['frmnme'] == 'menuMaster'\">\r\n <button type=\"button\" id=\"addBtn\" class=\"btn btn-success ttip\" (click)=\"getPageDefination()\">Filter</button>\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 <!-- (change)=\"removeInvalid(fl)\" -->\r\n <input type=\"text\" class=\"form-control\" name=\"{{fl?.form_field}}\"\r\n [value]=\"fl?.default_value\" [(ngModel)]=\"fl.default_value\"\r\n #textInput=\"ngModel\" (blur)=\"chkFun(fl,fl.default_value);\"\r\n [ngClass]=\"{'uniqErrMsg': fl?.form_field == onErr}\"\r\n [required]=\"fl?.is_compulsory == 1\" />\r\n </div>\r\n <!-- (blur)=\"this[fl?.validations](fl.default_value)\" -->\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 <!-- <div *ngIf=\"textInput.errors.minlength\">\r\n {{fl.form_field_title}} must be at least {{fl.form_field_min_length}} characters long.\r\n </div>\r\n <div *ngIf=\"textInput.errors.maxlength\">\r\n {{fl.form_field_title}} Maxmimum limit {{fl.form_field_max_length}} characters long.\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 == '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}}\"\r\n [value]=\"fl?.default_value\" [(ngModel)]=\"fl.default_value\"\r\n #numberInput=\"ngModel\" [required]=\"fl?.is_compulsory == 1\">\r\n <!-- minlength={{fl?.form_field_min_length}} maxlength={{fl?.form_field_max_length}}/ -->\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.errors.minlength\">\r\n {{fl.form_field_title}} must be at least {{fl.form_field_min_length}} characters long.\r\n </div>\r\n <div *ngIf=\"numberInput.errors.maxlength\">\r\n {{fl.form_field_title}} Maxmimum limit {{fl.form_field_max_length}} characters long.\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\"\r\n name=\"{{fl?.form_field}}\" [value]=\"fl?.default_value\"\r\n [(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 <!-- (blur)=\"this[fl?.validations](fl.default_value)\" -->\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 <tag-input [(ngModel)]=\"fl.default_value\" name=\"{{fl?.form_field}}\"\r\n [modelAsStrings]=\"true\" [allowDupes]=\"true\" [editable]='true'>\r\n </tag-input>\r\n </div>\r\n\r\n </div>\r\n </div>\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 [options]=\"sqlArray[fl?.form_field]\" style=\"z-index:9;\"\r\n [(ngModel)]=\"fl.default_value\" #safield=\"ngModel\"\r\n [required]=\"fl?.is_compulsory == 1\" name=\"{{fl?.form_field}}\"\r\n [multiple]=\"true\" [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 <!-- <ng-select [items]=\"sqlArray[fl?.form_field]\" [addTag]=\"addTag\" bindValue=\"k\" multiple=\"true\" bindLabel=\"v\" name=\"{{fl?.form_field}}\"\r\n [(ngModel)]=\"fl.default_value\" #safield=\"ngModel\" [required]=\"fl?.is_compulsory == 1\">\r\n </ng-select> -->\r\n </div>\r\n <div *ngIf=\"safield.invalid && (safield.dirty || safield.touched)\"\r\n 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\"\r\n *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}}\"\r\n [value]=\"fl?.default_value\" [(ngModel)]=\"fl.default_value\"\r\n #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 <div class=\"form-group\"\r\n *ngIf=\"fl?.form_field_typ == 'hd' || fl?.form_field_typ == 'df' || fl?.form_field_typ == 'fk' && fl?.is_hidden == 0\"\r\n [ngClass]=\"{'mt0': fl?.form_field_typ == 'hd'}\">\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}}\"\r\n [value]=\"fl?.default_value\" [(ngModel)]=\"fl.default_value\"\r\n #hdf=\"ngModel\" />\r\n </div>\r\n </div>\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}}\"\r\n [value]=\"fl?.default_value\" [(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 <!-- <div class=\"col-md-9\">\r\n <div class=\"btn-group\" data-toggle=\"buttons\">\r\n <label class=\"btn btn-default btn-on btn-xs\" *ngFor=\"let lov of sqlArray[fl.form_field];let i=index\">\r\n <input type=\"radio\" [value]=\"lov.k\" id=\"{{i}}\" name=\"{{fl?.form_field}}\" [value]=\"\" [(ngModel)]=\"fl.default_value\">{{lov.v}}</label>\r\n </div>\r\n </div> -->\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}}\"\r\n [value]=\"fl?.default_value\" [(ngModel)]=\"fl.default_value\"\r\n #tdf=\"ngModel\" [required]=\"fl?.is_compulsory == '1'\">\r\n <option *ngFor=\"let dynamic of sqlArray[fl.form_field]\"\r\n value=\"{{dynamic.value}}\">\r\n {{dynamic.label}}</option>\r\n </select>\r\n </div>\r\n <div *ngIf=\"tdf.invalid && (tdf.dirty || tdf.touched)\"\r\n 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}}\"\r\n [value]=\"fl?.default_value\" [(ngModel)]=\"fl.default_value\"\r\n #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)\"\r\n 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}}\"\r\n [value]=\"fl?.default_value\" [(ngModel)]=\"fl.default_value\"\r\n #ldInput=\"ngModel\" [required]=\"fl?.is_compulsory == '1'\">\r\n <option *ngFor=\"let dynamic of sqlArray[fl.form_field]\"\r\n value=\"{{dynamic.k}}\">{{dynamic.v}}\r\n </option>\r\n </select>\r\n </div>\r\n <div *ngIf=\"ldInput.invalid && (ldInput.dirty || ldInput.touched)\"\r\n 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}}\"\r\n [value]=\"fl?.default_value\" [(ngModel)]=\"fl.default_value\"\r\n (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]\"\r\n value=\"{{dynamic.value}}\">\r\n {{dynamic.label}}</option>\r\n </select>\r\n </div>\r\n <div *ngIf=\"sfi.invalid && (sfi.dirty || sfi.touched)\"\r\n 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]\"\r\n #sfi=\"ngModel\" [(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)\"\r\n 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\r\n </div>\r\n\r\n </div>\r\n </div>\r\n <div class=\"modal-footer\">\r\n <button type=\"button\" appAppNoDblClick class=\"btn btn-success\" (click)=\"onSubmit(f,submitBtn)\"\r\n #submitBtn>{{btnName}}</button>\r\n <button type=\"reset\" class=\"btn btn-danger\" (click)=\"reset(f)\"\r\n *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=\"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 <div class=\"modal\" id=\"popdatamodal\" 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\" #fpop=\"ngForm\" name=\"appForm\">\r\n <div class=\"modal-header\">\r\n <button type=\"button\" class=\"close\" data-dismiss=\"modal\" (click)=\"closeNull();\" #popclosebtn>\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 formFildsPopup | 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\" name=\"{{fl?.form_field}}\"\r\n [value]=\"fl?.default_value\" [(ngModel)]=\"fl.default_value\"\r\n #textInput=\"ngModel\" (blur)=\"chkFun(fl,fl.default_value);\"\r\n [ngClass]=\"{'uniqErrMsg': fl?.form_field == onErr}\"\r\n [required]=\"fl?.is_compulsory == '1'\" />\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\"\r\n *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}}\"\r\n [value]=\"fl?.default_value\" [(ngModel)]=\"fl.default_value\"\r\n #numberInput=\"ngModel\" [required]=\"fl?.is_compulsory==1\">\r\n <!-- minlength={{fl?.form_field_min_length}} maxlength={{fl?.form_field_max_length}}/ -->\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 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\"\r\n name=\"{{fl?.form_field}}\" [value]=\"fl?.default_value\"\r\n [(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 <div class=\"input-group w-100\">\r\n <tag-input [(ngModel)]=\"fl.default_value\" name=\"{{fl?.form_field}}\"\r\n [modelAsStrings]=\"true\" [allowDupes]=\"true\" [editable]='true'>\r\n </tag-input>\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 =='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 [options]=\"sqlArray[fl?.form_field]\" style=\"z-index:9;\"\r\n [(ngModel)]=\"fl.default_value\" #safield=\"ngModel\"\r\n [required]=\"fl?.is_compulsory == 1\" name=\"{{fl?.form_field}}\"\r\n [multiple]=\"true\" [allowClear]=\"true\">\r\n <ng-template #optionTemplate let-option=\"option\">\r\n <div class=\"famfamfam-flags {{option?.value.toLowerCase()}}\"></div>\r\n {{option?.label}}\r\n </ng-template>\r\n </ng-select>\r\n <!-- <ng-select [items]=\"sqlArray[fl.form_field]\" [addTag]=\"addTag\" bindValue=\"k\" multiple=\"true\" bindLabel=\"v\" name=\"{{fl?.form_field}}\"\r\n [(ngModel)]=\"fl.default_value\" #safield=\"ngModel\" [required]=\"fl?.is_compulsory == '1'\">\r\n </ng-select> -->\r\n </div>\r\n <div *ngIf=\"safield.invalid && (safield.dirty || safield.touched)\"\r\n 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\"\r\n *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}}\"\r\n [value]=\"fl?.default_value\" [(ngModel)]=\"fl.default_value\"\r\n #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 <div class=\"form-group\"\r\n *ngIf=\"fl?.form_field_typ == 'hd' || fl?.form_field_typ == 'df' || fl?.form_field_typ == 'fk' && fl?.is_hidden == 0\"\r\n [ngClass]=\"{'mt0': fl?.form_field_typ == 'hd'}\">\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}}\"\r\n [value]=\"fl?.default_value\" [(ngModel)]=\"fl.default_value\"\r\n #hdf=\"ngModel\" />\r\n </div>\r\n </div>\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}}\"\r\n [value]=\"fl?.default_value\" [(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 <div class=\"col-md-9\">\r\n <div class=\"input-group w-100\">\r\n <select class=\"form-control select\" name=\"{{fl?.form_field}}\"\r\n [value]=\"fl?.default_value\" [(ngModel)]=\"fl.default_value\"\r\n #tdf=\"ngModel\" [required]=\"fl?.is_compulsory == '1'\">\r\n <option *ngFor=\"let dynamic of sqlArray[fl.form_field]\"\r\n value=\"{{dynamic.value}}\">\r\n {{dynamic.label}}</option>\r\n </select>\r\n </div>\r\n <div *ngIf=\"tdf.invalid && (tdf.dirty || tdf.touched)\"\r\n 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}}\"\r\n [value]=\"fl?.default_value\" [(ngModel)]=\"fl.default_value\"\r\n #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)\"\r\n 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}}\"\r\n [value]=\"fl?.default_value\" [(ngModel)]=\"fl.default_value\"\r\n #ldInput=\"ngModel\" [required]=\"fl?.is_compulsory == '1'\">\r\n <option *ngFor=\"let dynamic of sqlArray[fl.form_field]\"\r\n value=\"{{dynamic.k}}\">{{dynamic.v}}\r\n </option>\r\n </select>\r\n </div>\r\n <div *ngIf=\"ldInput.invalid && (ldInput.dirty || ldInput.touched)\"\r\n 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}}\"\r\n [value]=\"fl?.default_value\" [(ngModel)]=\"fl.default_value\"\r\n (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]\"\r\n value=\"{{dynamic.value}}\">{{dynamic.label}}\r\n </option>\r\n </select>\r\n </div>\r\n <div *ngIf=\"sfi.invalid && (sfi.dirty || sfi.touched)\"\r\n 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 </div>\r\n </div>\r\n </div>\r\n <div class=\"modal-footer\">\r\n <button type=\"button\" appAppNoDblClick class=\"btn btn-success\"\r\n (click)=\"onPopupSubmit(fpop,popsubmitBtn)\" #popsubmitBtn>Add</button>\r\n <button type=\"reset\" class=\"btn btn-danger\" (click)=\"reset(f)\">Reset</button>\r\n </div>\r\n </form>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"modal\" id=\"popResmodal\" 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\" name=\"appFormres\">\r\n <div class=\"modal-header\">\r\n <button type=\"button\" class=\"close\" data-dismiss=\"modal\" (click)=\"closeNull();\">\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=\"popModalHead\"> Record</h4>\r\n </div>\r\n <div class=\"modal-body\">\r\n <div class=\"row\">\r\n <p *ngFor=\"let res of Sysresult\">{{res}}</p>\r\n </div>\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 </form>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n\r\n\r\n <div class=\"modal\" id=\"productMapMasMD\" 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\">Close</span>\r\n </button>\r\n <h4 class=\"modal-title\" id=\"smallModalHead\">Product Mapping of&nbsp;{{attMapModelTitle}}</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\"\r\n [(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\">Close</button>\r\n <button type=\"button\" class=\"btn btn-success\" data-dismiss=\"modal\"\r\n (click)=\"saveProductMasterMapping();\" #productMapclsbtn>Save</button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n \r\n\r\n\r\n \r\n\r\n\r\n <button id=\"deletebtn\" [hidden]=\"true\" data-toggle=\"modal\" data-target=\"#deletemodal\"></button>\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=\"popdatamdbtn\" [hidden]=\"true\" data-toggle=\"modal\" data-target=\"#popdatamodal\"></button>\r\n <button id=\"popResmodalbtn\" [hidden]=\"true\" data-toggle=\"modal\" data-target=\"#popResmodal\"></button>\r\n <button id=\"productMapMasMDbtn\" [hidden]=\"true\" data-toggle=\"modal\" data-target=\"#productMapMasMD\"></button>", 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-left{background:transparent!important;width:250px!important}.mt0{margin-bottom:0!important}.headingCls{padding:10px;background:#f0efef;font-size:14px;font-weight:400;margin-bottom:20px}.tooltip{display:none!important}.mwidth{width:500px}.actionFooter{position:fixed;bottom:0;width:100%;text-align:left;padding:6px 6px 6px 65px;background:#1b1e24}\n"], dependencies: [{ kind: "directive", type: i7.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i7.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i7.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i8.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i8.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i8.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i8.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: i8.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i8.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i8.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i8.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i8.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i8.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i8.NgForm, selector: "form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "component", type: i9.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: i10.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: i11.PaginationControlsComponent, selector: "pagination-controls", inputs: ["id", "maxSize", "directionLinks", "autoHide", "responsive", "previousLabel", "nextLabel", "screenReaderPaginationLabel", "screenReaderPageLabel", "screenReaderCurrentLabel"], outputs: ["pageChange", "pageBoundsCorrection"] }, { kind: "directive", type: i12.AppNoDblClickDirective, selector: "[appAppNoDblClick]" }, { kind: "pipe", type: i7.DatePipe, name: "date" }, { kind: "pipe", type: i13.OrderPipe, name: "orderBy" }, { kind: "pipe", type: i11.PaginatePipe, name: "paginate" }, { kind: "pipe", type: i14.SearchPipePipe, name: "searchPipe" }, { kind: "pipe", type: i15.OrderByPipePipe, name: "orderByPipe" }] });
1098
+ /** @nocollapse */ SystemComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: SystemComponent, selector: "app-system", viewQueries: [{ propertyName: "closebtn", first: true, predicate: ["closebtn"], descendants: true }, { propertyName: "deleteclsbtn", first: true, predicate: ["deleteclsbtn"], descendants: true }, { propertyName: "input", first: true, predicate: ["inputs"], descendants: true }, { propertyName: "popclosebtn", first: true, predicate: ["popclosebtn"], descendants: true }, { propertyName: "submitbtn", first: true, predicate: ["submitBtn"], descendants: true }, { propertyName: "productMapclsbtn", first: true, predicate: ["productMapclsbtn"], 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\">{{pageInfo?.title}}\r\n <span class=\"f-12\">({{cDt | date:'medium'}})</span>\r\n </h3>\r\n <button type=\"button\" id=\"addBtn\" class=\"btn btn-info pull-right\" *ngIf=\"addNew?.is_compulsory == 1\"\r\n (click)=\"userAction(data, 'add', '');f.reset();\">{{addNew?.form_field_title}}</button>\r\n\r\n\r\n </div>\r\n </div>\r\n <div class=\"row\" *ngIf=\"router.url != curl\">\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\"\r\n (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]=\"isOpen == true ? 'col-md-4' : 'hidden'\" *ngIf=\"route.snapshot.params['frmnme'] == 'menuMaster'\">\r\n <div class=\"row form-group\">\r\n <div class=\"col-md-4\">\r\n <label class=\"control-label\" style=\"text-align: right\">Application</label>\r\n </div>\r\n <div class=\"col-md-8\">\r\n <div class=\"input-group w-100\">\r\n <select class=\"form-control\" [(ngModel)]=\"app\" name=\"app\" (change)=\"fillModule(app)\">\r\n <option *ngFor=\"let lov of applicationList\" value=\"{{lov.k}}\">{{lov.v}}</option>\r\n </select>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"row form-group\" *ngIf=\"mdllist?.length > 1 \">\r\n <div class='col-md-4'>\r\n <label class=\"control-label\" style=\"text-align: right\">Module</label>\r\n </div>\r\n <div class=\"col-md-8\">\r\n <div class=\"input-group w-100\">\r\n <select class=\"form-control\" [(ngModel)]=\"v\" name=\"v\" (change)=\"fillLevel1(v)\">\r\n <option *ngFor=\"let lov of mdllist\" value=\"{{lov.k}}\">{{lov.v}}</option>\r\n </select>\r\n </div>\r\n </div>\r\n </div>\r\n <!-- <div class=\"row form-group\" *ngIf=\"menulvl1List?.length > 1 \">\r\n <div class=\"col-md-4\">\r\n <label class=\"control-label\" style=\"text-align: right\">Main Menu</label>\r\n </div>\r\n <div class=\"col-md-8\">\r\n <div class=\"input-group w-100\">\r\n <select class=\"form-control\" [(ngModel)]=\"v1\" name=\"v1\" (change)=\"fillLevel2(v,v1)\">\r\n <option *ngFor=\"let lov of menulvl1List\" value=\"{{lov.k}}\">{{lov.v}}</option>\r\n </select>\r\n </div>\r\n </div>\r\n </div> -->\r\n\r\n <!-- <div class=\"row form-group\" *ngIf=\"menulvl2List?.length > 1 \">\r\n <div class=\"col-md-4\">\r\n <label class=\"control-label\" style=\"text-align: right\">Sub Menu</label>\r\n </div>\r\n <div class=\"col-md-8\">\r\n <div class=\"input-group w-100\">\r\n <select class=\"form-control\" [(ngModel)]=\"v2\" name=\"v2\" (change)=\"submenuChange(v, v2)\">\r\n <option *ngFor=\"let lov of menulvl2List\" value=\"{{lov.k}}\">{{lov.v}}</option>\r\n </select>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"row form-group\" *ngIf=\"menulvl3List?.length > 1 \">\r\n <div class=\"col-md-4\">\r\n <label class=\"control-label\" style=\"text-align: right\">Page</label>\r\n </div>\r\n <div class=\"col-md-8\">\r\n <div class=\"input-group w-100\">\r\n <select class=\"form-control\" [(ngModel)]=\"v3\" name=\"v3\">\r\n <option *ngFor=\"let lov of menulvl3List\" value=\"{{lov.k}}\">{{lov.v}}</option>\r\n </select>\r\n </div>\r\n </div>\r\n </div> -->\r\n <div class=\"row form-group\" *ngIf=\"mdllist?.length > 1 \">\r\n <div class=\"col-md-4\">\r\n <label class=\"control-label\" style=\"text-align: right\">Level</label>\r\n </div>\r\n <div class=\"col-md-8\">\r\n <div class=\"input-group w-100\">\r\n <select class=\"form-control\" [(ngModel)]=\"level\" name=\"level\">\r\n <option value=\"\">Select</option>\r\n <option value=\"1\">Level 1</option>\r\n <option value=\"2\">Level 2</option>\r\n <option value=\"3\">Level 3</option>\r\n </select>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div [ngClass]=\"navigation.length > 0 ? 'col-md-10' : route.snapshot.params['frmnme'] == 'menuMaster' ? isOpen == false ? 'col-md-12' : 'col-md-8' : 'col-md-12'\">\r\n <div class=\"panel panel-default\">\r\n <div class=\"panel-body\" [style]=\"route.snapshot.params['frmnme'] == 'menuMaster' ? 'margin-bottom: 35px;' : ''\">\r\n <!-- <div class=\"row\">\r\n <div class=\"col-sm-8\"></div>\r\n <div class=\"col-sm-4\">\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=\"row\">\r\n <div class=\"col-sm-6\">\r\n <form class=\"form-inline pull-left\" > \r\n <button *ngIf=\"route.snapshot.params['frmnme'] == 'menuMaster'\" class=\"btn btn-default\" style=\"padding: 4px 15px 4px 20px; margin-right: 10px; margin-bottom: 15px;\"\r\n data-toggle=\"tooltip\" data-placement=\"right\" title=\"Filter results\" (click)=\"openTog();\">\r\n <span class=\"{{icon}}\" style=\"color:#3b5998;\"></span>\r\n </button>\r\n <!-- </form>\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 \r\n <button class=\"btn btn-default\" style=\"padding: 4px 15px 4px 20px;margin-left: 10px; margin-bottom: 15px;\"\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 </form>\r\n <!-- <label>{{datalist.length}}</label> -->\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\"\r\n [(ngModel)]=\"searchF\" />\r\n </div>\r\n </form>\r\n </div>\r\n </div>\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>SR No</th>\r\n <th>Action</th>\r\n <th *ngFor=\"let tbh of tblH; let i = index \" (click)=\"setOrder(tbh,i)\">\r\n {{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 <tr\r\n *ngFor=\"let data of datalist | searchPipe:searchF | orderBy: order:reverse | paginate: { itemsPerPage: pageSize, currentPage: p }; let i = index;\">\r\n <td>{{i + 1}}</td>\r\n <td>\r\n <div class=\"btn-group\">\r\n <a href=\"#\" data-toggle=\"dropdown\"\r\n 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)\"\r\n (click)=\"userAction(data, action.form_field_typ, action);\">\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\"\r\n on-mouseleave=\"hoveredI=-1\">\r\n {{data[tbh]}}\r\n <div class=\"onHoverDiv\" *ngIf=\"i==hoveredI\">\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 </tbody>\r\n </table>\r\n </div>\r\n <pagination-controls (pageChange)=\"p = $event\" class=\"pull-right\"></pagination-controls>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"actionFooter\" *ngIf=\"route.snapshot.params['frmnme'] == 'menuMaster'\">\r\n <button type=\"button\" id=\"addBtn\" class=\"btn btn-success ttip\" (click)=\"getPageDefination()\">Filter</button>\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 <!-- (change)=\"removeInvalid(fl)\" -->\r\n <input type=\"text\" class=\"form-control\" name=\"{{fl?.form_field}}\"\r\n [value]=\"fl?.default_value\" [(ngModel)]=\"fl.default_value\"\r\n #textInput=\"ngModel\" (blur)=\"chkFun(fl,fl.default_value);\"\r\n [ngClass]=\"{'uniqErrMsg': fl?.form_field == onErr}\"\r\n [required]=\"fl?.is_compulsory == 1\" />\r\n </div>\r\n <!-- (blur)=\"this[fl?.validations](fl.default_value)\" -->\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 <!-- <div *ngIf=\"textInput.errors.minlength\">\r\n {{fl.form_field_title}} must be at least {{fl.form_field_min_length}} characters long.\r\n </div>\r\n <div *ngIf=\"textInput.errors.maxlength\">\r\n {{fl.form_field_title}} Maxmimum limit {{fl.form_field_max_length}} characters long.\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 == '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}}\"\r\n [value]=\"fl?.default_value\" [(ngModel)]=\"fl.default_value\"\r\n #numberInput=\"ngModel\" [required]=\"fl?.is_compulsory == 1\">\r\n <!-- minlength={{fl?.form_field_min_length}} maxlength={{fl?.form_field_max_length}}/ -->\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.errors.minlength\">\r\n {{fl.form_field_title}} must be at least {{fl.form_field_min_length}} characters long.\r\n </div>\r\n <div *ngIf=\"numberInput.errors.maxlength\">\r\n {{fl.form_field_title}} Maxmimum limit {{fl.form_field_max_length}} characters long.\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\"\r\n name=\"{{fl?.form_field}}\" [value]=\"fl?.default_value\"\r\n [(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 <!-- (blur)=\"this[fl?.validations](fl.default_value)\" -->\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 <tag-input [(ngModel)]=\"fl.default_value\" name=\"{{fl?.form_field}}\"\r\n [modelAsStrings]=\"true\" [allowDupes]=\"true\" [editable]='true'>\r\n </tag-input>\r\n </div>\r\n\r\n </div>\r\n </div>\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 [options]=\"sqlArray[fl?.form_field]\" style=\"z-index:9;\"\r\n [(ngModel)]=\"fl.default_value\" #safield=\"ngModel\"\r\n [required]=\"fl?.is_compulsory == 1\" name=\"{{fl?.form_field}}\"\r\n [multiple]=\"true\" [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 <!-- <ng-select [items]=\"sqlArray[fl?.form_field]\" [addTag]=\"addTag\" bindValue=\"k\" multiple=\"true\" bindLabel=\"v\" name=\"{{fl?.form_field}}\"\r\n [(ngModel)]=\"fl.default_value\" #safield=\"ngModel\" [required]=\"fl?.is_compulsory == 1\">\r\n </ng-select> -->\r\n </div>\r\n <div *ngIf=\"safield.invalid && (safield.dirty || safield.touched)\"\r\n 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\"\r\n *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}}\"\r\n [value]=\"fl?.default_value\" [(ngModel)]=\"fl.default_value\"\r\n #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 <div class=\"form-group\"\r\n *ngIf=\"fl?.form_field_typ == 'hd' || fl?.form_field_typ == 'df' || fl?.form_field_typ == 'fk' && fl?.is_hidden == 0\"\r\n [ngClass]=\"{'mt0': fl?.form_field_typ == 'hd'}\">\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}}\"\r\n [value]=\"fl?.default_value\" [(ngModel)]=\"fl.default_value\"\r\n #hdf=\"ngModel\" />\r\n </div>\r\n </div>\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}}\"\r\n [value]=\"fl?.default_value\" [(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 <!-- <div class=\"col-md-9\">\r\n <div class=\"btn-group\" data-toggle=\"buttons\">\r\n <label class=\"btn btn-default btn-on btn-xs\" *ngFor=\"let lov of sqlArray[fl.form_field];let i=index\">\r\n <input type=\"radio\" [value]=\"lov.k\" id=\"{{i}}\" name=\"{{fl?.form_field}}\" [value]=\"\" [(ngModel)]=\"fl.default_value\">{{lov.v}}</label>\r\n </div>\r\n </div> -->\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}}\"\r\n [value]=\"fl?.default_value\" [(ngModel)]=\"fl.default_value\"\r\n #tdf=\"ngModel\" [required]=\"fl?.is_compulsory == '1'\">\r\n <option *ngFor=\"let dynamic of sqlArray[fl.form_field]\"\r\n value=\"{{dynamic.value}}\">\r\n {{dynamic.label}}</option>\r\n </select>\r\n </div>\r\n <div *ngIf=\"tdf.invalid && (tdf.dirty || tdf.touched)\"\r\n 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}}\"\r\n [value]=\"fl?.default_value\" [(ngModel)]=\"fl.default_value\"\r\n #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)\"\r\n 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}}\"\r\n [value]=\"fl?.default_value\" [(ngModel)]=\"fl.default_value\"\r\n #ldInput=\"ngModel\" [required]=\"fl?.is_compulsory == '1'\">\r\n <option *ngFor=\"let dynamic of sqlArray[fl.form_field]\"\r\n value=\"{{dynamic.k}}\">{{dynamic.v}}\r\n </option>\r\n </select>\r\n </div>\r\n <div *ngIf=\"ldInput.invalid && (ldInput.dirty || ldInput.touched)\"\r\n 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}}\"\r\n [value]=\"fl?.default_value\" [(ngModel)]=\"fl.default_value\"\r\n (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]\"\r\n value=\"{{dynamic.value}}\">\r\n {{dynamic.label}}</option>\r\n </select>\r\n </div>\r\n <div *ngIf=\"sfi.invalid && (sfi.dirty || sfi.touched)\"\r\n 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]\"\r\n #sfi=\"ngModel\" [(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)\"\r\n 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\r\n </div>\r\n\r\n </div>\r\n </div>\r\n <div class=\"modal-footer\">\r\n <button type=\"button\" appAppNoDblClick class=\"btn btn-success\" (click)=\"onSubmit(f,submitBtn)\"\r\n #submitBtn>{{btnName}}</button>\r\n <button type=\"reset\" class=\"btn btn-danger\" (click)=\"reset(f)\"\r\n *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=\"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 <div class=\"modal\" id=\"popdatamodal\" 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\" #fpop=\"ngForm\" name=\"appForm\">\r\n <div class=\"modal-header\">\r\n <button type=\"button\" class=\"close\" data-dismiss=\"modal\" (click)=\"closeNull();\" #popclosebtn>\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 formFildsPopup | 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\" name=\"{{fl?.form_field}}\"\r\n [value]=\"fl?.default_value\" [(ngModel)]=\"fl.default_value\"\r\n #textInput=\"ngModel\" (blur)=\"chkFun(fl,fl.default_value);\"\r\n [ngClass]=\"{'uniqErrMsg': fl?.form_field == onErr}\"\r\n [required]=\"fl?.is_compulsory == '1'\" />\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\"\r\n *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}}\"\r\n [value]=\"fl?.default_value\" [(ngModel)]=\"fl.default_value\"\r\n #numberInput=\"ngModel\" [required]=\"fl?.is_compulsory==1\">\r\n <!-- minlength={{fl?.form_field_min_length}} maxlength={{fl?.form_field_max_length}}/ -->\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 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\"\r\n name=\"{{fl?.form_field}}\" [value]=\"fl?.default_value\"\r\n [(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 <div class=\"input-group w-100\">\r\n <tag-input [(ngModel)]=\"fl.default_value\" name=\"{{fl?.form_field}}\"\r\n [modelAsStrings]=\"true\" [allowDupes]=\"true\" [editable]='true'>\r\n </tag-input>\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 =='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 [options]=\"sqlArray[fl?.form_field]\" style=\"z-index:9;\"\r\n [(ngModel)]=\"fl.default_value\" #safield=\"ngModel\"\r\n [required]=\"fl?.is_compulsory == 1\" name=\"{{fl?.form_field}}\"\r\n [multiple]=\"true\" [allowClear]=\"true\">\r\n <ng-template #optionTemplate let-option=\"option\">\r\n <div class=\"famfamfam-flags {{option?.value.toLowerCase()}}\"></div>\r\n {{option?.label}}\r\n </ng-template>\r\n </ng-select>\r\n <!-- <ng-select [items]=\"sqlArray[fl.form_field]\" [addTag]=\"addTag\" bindValue=\"k\" multiple=\"true\" bindLabel=\"v\" name=\"{{fl?.form_field}}\"\r\n [(ngModel)]=\"fl.default_value\" #safield=\"ngModel\" [required]=\"fl?.is_compulsory == '1'\">\r\n </ng-select> -->\r\n </div>\r\n <div *ngIf=\"safield.invalid && (safield.dirty || safield.touched)\"\r\n 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\"\r\n *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}}\"\r\n [value]=\"fl?.default_value\" [(ngModel)]=\"fl.default_value\"\r\n #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 <div class=\"form-group\"\r\n *ngIf=\"fl?.form_field_typ == 'hd' || fl?.form_field_typ == 'df' || fl?.form_field_typ == 'fk' && fl?.is_hidden == 0\"\r\n [ngClass]=\"{'mt0': fl?.form_field_typ == 'hd'}\">\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}}\"\r\n [value]=\"fl?.default_value\" [(ngModel)]=\"fl.default_value\"\r\n #hdf=\"ngModel\" />\r\n </div>\r\n </div>\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}}\"\r\n [value]=\"fl?.default_value\" [(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 <div class=\"col-md-9\">\r\n <div class=\"input-group w-100\">\r\n <select class=\"form-control select\" name=\"{{fl?.form_field}}\"\r\n [value]=\"fl?.default_value\" [(ngModel)]=\"fl.default_value\"\r\n #tdf=\"ngModel\" [required]=\"fl?.is_compulsory == '1'\">\r\n <option *ngFor=\"let dynamic of sqlArray[fl.form_field]\"\r\n value=\"{{dynamic.value}}\">\r\n {{dynamic.label}}</option>\r\n </select>\r\n </div>\r\n <div *ngIf=\"tdf.invalid && (tdf.dirty || tdf.touched)\"\r\n 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}}\"\r\n [value]=\"fl?.default_value\" [(ngModel)]=\"fl.default_value\"\r\n #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)\"\r\n 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}}\"\r\n [value]=\"fl?.default_value\" [(ngModel)]=\"fl.default_value\"\r\n #ldInput=\"ngModel\" [required]=\"fl?.is_compulsory == '1'\">\r\n <option *ngFor=\"let dynamic of sqlArray[fl.form_field]\"\r\n value=\"{{dynamic.k}}\">{{dynamic.v}}\r\n </option>\r\n </select>\r\n </div>\r\n <div *ngIf=\"ldInput.invalid && (ldInput.dirty || ldInput.touched)\"\r\n 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}}\"\r\n [value]=\"fl?.default_value\" [(ngModel)]=\"fl.default_value\"\r\n (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]\"\r\n value=\"{{dynamic.value}}\">{{dynamic.label}}\r\n </option>\r\n </select>\r\n </div>\r\n <div *ngIf=\"sfi.invalid && (sfi.dirty || sfi.touched)\"\r\n 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 </div>\r\n </div>\r\n </div>\r\n <div class=\"modal-footer\">\r\n <button type=\"button\" appAppNoDblClick class=\"btn btn-success\"\r\n (click)=\"onPopupSubmit(fpop,popsubmitBtn)\" #popsubmitBtn>Add</button>\r\n <button type=\"reset\" class=\"btn btn-danger\" (click)=\"reset(f)\">Reset</button>\r\n </div>\r\n </form>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"modal\" id=\"popResmodal\" 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\" name=\"appFormres\">\r\n <div class=\"modal-header\">\r\n <button type=\"button\" class=\"close\" data-dismiss=\"modal\" (click)=\"closeNull();\">\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=\"popModalHead\"> Record</h4>\r\n </div>\r\n <div class=\"modal-body\">\r\n <div class=\"row\">\r\n <p *ngFor=\"let res of Sysresult\">{{res}}</p>\r\n </div>\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 </form>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n\r\n\r\n <div class=\"modal\" id=\"productMapMasMD\" 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\">Close</span>\r\n </button>\r\n <h4 class=\"modal-title\" id=\"smallModalHead\">Product Mapping of&nbsp;{{attMapModelTitle}}</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\"\r\n [(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\">Close</button>\r\n <button type=\"button\" class=\"btn btn-success\" data-dismiss=\"modal\"\r\n (click)=\"saveProductMasterMapping();\" #productMapclsbtn>Save</button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n \r\n\r\n\r\n \r\n\r\n\r\n <button id=\"deletebtn\" [hidden]=\"true\" data-toggle=\"modal\" data-target=\"#deletemodal\"></button>\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=\"popdatamdbtn\" [hidden]=\"true\" data-toggle=\"modal\" data-target=\"#popdatamodal\"></button>\r\n <button id=\"popResmodalbtn\" [hidden]=\"true\" data-toggle=\"modal\" data-target=\"#popResmodal\"></button>\r\n <button id=\"productMapMasMDbtn\" [hidden]=\"true\" data-toggle=\"modal\" data-target=\"#productMapMasMD\"></button>", 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-left{background:transparent!important;width:250px!important}.mt0{margin-bottom:0!important}.headingCls{padding:10px;background:#f0efef;font-size:14px;font-weight:400;margin-bottom:20px}.tooltip{display:none!important}.mwidth{width:500px}.actionFooter{position:fixed;bottom:0;width:100%;text-align:left;padding:6px 6px 6px 65px;background:#1b1e24}\n"], dependencies: [{ kind: "directive", type: i7.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i7.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i7.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i8.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i8.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i8.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i8.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: i8.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i8.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i8.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i8.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i8.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i8.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i8.NgForm, selector: "form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "component", type: i9.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: i10.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: i11.PaginationControlsComponent, selector: "pagination-controls", inputs: ["id", "maxSize", "directionLinks", "autoHide", "responsive", "previousLabel", "nextLabel", "screenReaderPaginationLabel", "screenReaderPageLabel", "screenReaderCurrentLabel"], outputs: ["pageChange", "pageBoundsCorrection"] }, { kind: "directive", type: i12.AppNoDblClickDirective, selector: "[appAppNoDblClick]" }, { kind: "pipe", type: i7.DatePipe, name: "date" }, { kind: "pipe", type: i13.OrderPipe, name: "orderBy" }, { kind: "pipe", type: i11.PaginatePipe, name: "paginate" }, { kind: "pipe", type: i14.SearchPipePipe, name: "searchPipe" }, { kind: "pipe", type: i15.OrderByPipePipe, name: "orderByPipe" }] });
1099
1099
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: SystemComponent, decorators: [{
1100
1100
  type: Component,
1101
- args: [{ selector: 'app-system', template: "<div class=\"mt\">\r\n <div class=\"panel panel-default\">\r\n <div class=\"panel-heading\">\r\n <h3 class=\"panel-title\">{{pageInfo?.title}}\r\n <span class=\"f-12\">({{cDt | date:'medium'}})</span>\r\n </h3>\r\n <button type=\"button\" id=\"addBtn\" class=\"btn btn-info pull-right\" *ngIf=\"addNew?.is_compulsory == 1\"\r\n (click)=\"userAction(data, 'add', '');f.reset();\">{{addNew?.form_field_title}}</button>\r\n\r\n\r\n </div>\r\n </div>\r\n <div class=\"row\" *ngIf=\"router.url != curl\">\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\"\r\n (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]=\"isOpen == true ? 'col-md-4' : 'hidden'\" *ngIf=\"route.snapshot.params['frmnme'] == 'menuMaster'\">\r\n <div class=\"row form-group\">\r\n <div class=\"col-md-4\">\r\n <label class=\"control-label\" style=\"text-align: right\">Application</label>\r\n </div>\r\n <div class=\"col-md-8\">\r\n <div class=\"input-group w-100\">\r\n <select class=\"form-control\" [(ngModel)]=\"app\" name=\"app\" (change)=\"fillModule(app)\">\r\n <option *ngFor=\"let lov of applicationList\" value=\"{{lov.k}}\">{{lov.v}}</option>\r\n </select>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"row form-group\" *ngIf=\"mdllist?.length > 1 \">\r\n <div class='col-md-4'>\r\n <label class=\"control-label\" style=\"text-align: right\">Module</label>\r\n </div>\r\n <div class=\"col-md-8\">\r\n <div class=\"input-group w-100\">\r\n <select class=\"form-control\" [(ngModel)]=\"v\" name=\"v\" (change)=\"fillLevel1(v)\">\r\n <option *ngFor=\"let lov of mdllist\" value=\"{{lov.k}}\">{{lov.v}}</option>\r\n </select>\r\n </div>\r\n </div>\r\n </div>\r\n <!-- <div class=\"row form-group\" *ngIf=\"menulvl1List?.length > 1 \">\r\n <div class=\"col-md-4\">\r\n <label class=\"control-label\" style=\"text-align: right\">Main Menu</label>\r\n </div>\r\n <div class=\"col-md-8\">\r\n <div class=\"input-group w-100\">\r\n <select class=\"form-control\" [(ngModel)]=\"v1\" name=\"v1\" (change)=\"fillLevel2(v,v1)\">\r\n <option *ngFor=\"let lov of menulvl1List\" value=\"{{lov.k}}\">{{lov.v}}</option>\r\n </select>\r\n </div>\r\n </div>\r\n </div> -->\r\n\r\n <!-- <div class=\"row form-group\" *ngIf=\"menulvl2List?.length > 1 \">\r\n <div class=\"col-md-4\">\r\n <label class=\"control-label\" style=\"text-align: right\">Sub Menu</label>\r\n </div>\r\n <div class=\"col-md-8\">\r\n <div class=\"input-group w-100\">\r\n <select class=\"form-control\" [(ngModel)]=\"v2\" name=\"v2\" (change)=\"submenuChange(v, v2)\">\r\n <option *ngFor=\"let lov of menulvl2List\" value=\"{{lov.k}}\">{{lov.v}}</option>\r\n </select>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"row form-group\" *ngIf=\"menulvl3List?.length > 1 \">\r\n <div class=\"col-md-4\">\r\n <label class=\"control-label\" style=\"text-align: right\">Page</label>\r\n </div>\r\n <div class=\"col-md-8\">\r\n <div class=\"input-group w-100\">\r\n <select class=\"form-control\" [(ngModel)]=\"v3\" name=\"v3\">\r\n <option *ngFor=\"let lov of menulvl3List\" value=\"{{lov.k}}\">{{lov.v}}</option>\r\n </select>\r\n </div>\r\n </div>\r\n </div> -->\r\n <div class=\"row form-group\" *ngIf=\"mdllist?.length > 1 \">\r\n <div class=\"col-md-4\">\r\n <label class=\"control-label\" style=\"text-align: right\">Level</label>\r\n </div>\r\n <div class=\"col-md-8\">\r\n <div class=\"input-group w-100\">\r\n <select class=\"form-control\" [(ngModel)]=\"level\" name=\"level\">\r\n <option value=\"''\">Select</option>\r\n <option value=\"1\">Level 1</option>\r\n <option value=\"2\">Level 2</option>\r\n <option value=\"3\">Level 3</option>\r\n </select>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div [ngClass]=\"navigation.length > 0 ? 'col-md-10' : route.snapshot.params['frmnme'] == 'menuMaster' ? isOpen == false ? 'col-md-12' : 'col-md-8' : 'col-md-12'\">\r\n <div class=\"panel panel-default\">\r\n <div class=\"panel-body\" [style]=\"route.snapshot.params['frmnme'] == 'menuMaster' ? 'margin-bottom: 35px;' : ''\">\r\n <!-- <div class=\"row\">\r\n <div class=\"col-sm-8\"></div>\r\n <div class=\"col-sm-4\">\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=\"row\">\r\n <div class=\"col-sm-6\">\r\n <form class=\"form-inline pull-left\" > \r\n <button *ngIf=\"route.snapshot.params['frmnme'] == 'menuMaster'\" class=\"btn btn-default\" style=\"padding: 4px 15px 4px 20px; margin-right: 10px; margin-bottom: 15px;\"\r\n data-toggle=\"tooltip\" data-placement=\"right\" title=\"Filter results\" (click)=\"openTog();\">\r\n <span class=\"{{icon}}\" style=\"color:#3b5998;\"></span>\r\n </button>\r\n <!-- </form>\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 \r\n <button class=\"btn btn-default\" style=\"padding: 4px 15px 4px 20px;margin-left: 10px; margin-bottom: 15px;\"\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 </form>\r\n <!-- <label>{{datalist.length}}</label> -->\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\"\r\n [(ngModel)]=\"searchF\" />\r\n </div>\r\n </form>\r\n </div>\r\n </div>\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>SR No</th>\r\n <th>Action</th>\r\n <th *ngFor=\"let tbh of tblH; let i = index \" (click)=\"setOrder(tbh,i)\">\r\n {{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 <tr\r\n *ngFor=\"let data of datalist | searchPipe:searchF | orderBy: order:reverse | paginate: { itemsPerPage: pageSize, currentPage: p }; let i = index;\">\r\n <td>{{i + 1}}</td>\r\n <td>\r\n <div class=\"btn-group\">\r\n <a href=\"#\" data-toggle=\"dropdown\"\r\n 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)\"\r\n (click)=\"userAction(data, action.form_field_typ, action);\">\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\"\r\n on-mouseleave=\"hoveredI=-1\">\r\n {{data[tbh]}}\r\n <div class=\"onHoverDiv\" *ngIf=\"i==hoveredI\">\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 </tbody>\r\n </table>\r\n </div>\r\n <pagination-controls (pageChange)=\"p = $event\" class=\"pull-right\"></pagination-controls>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"actionFooter\" *ngIf=\"route.snapshot.params['frmnme'] == 'menuMaster'\">\r\n <button type=\"button\" id=\"addBtn\" class=\"btn btn-success ttip\" (click)=\"getPageDefination()\">Filter</button>\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 <!-- (change)=\"removeInvalid(fl)\" -->\r\n <input type=\"text\" class=\"form-control\" name=\"{{fl?.form_field}}\"\r\n [value]=\"fl?.default_value\" [(ngModel)]=\"fl.default_value\"\r\n #textInput=\"ngModel\" (blur)=\"chkFun(fl,fl.default_value);\"\r\n [ngClass]=\"{'uniqErrMsg': fl?.form_field == onErr}\"\r\n [required]=\"fl?.is_compulsory == 1\" />\r\n </div>\r\n <!-- (blur)=\"this[fl?.validations](fl.default_value)\" -->\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 <!-- <div *ngIf=\"textInput.errors.minlength\">\r\n {{fl.form_field_title}} must be at least {{fl.form_field_min_length}} characters long.\r\n </div>\r\n <div *ngIf=\"textInput.errors.maxlength\">\r\n {{fl.form_field_title}} Maxmimum limit {{fl.form_field_max_length}} characters long.\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 == '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}}\"\r\n [value]=\"fl?.default_value\" [(ngModel)]=\"fl.default_value\"\r\n #numberInput=\"ngModel\" [required]=\"fl?.is_compulsory == 1\">\r\n <!-- minlength={{fl?.form_field_min_length}} maxlength={{fl?.form_field_max_length}}/ -->\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.errors.minlength\">\r\n {{fl.form_field_title}} must be at least {{fl.form_field_min_length}} characters long.\r\n </div>\r\n <div *ngIf=\"numberInput.errors.maxlength\">\r\n {{fl.form_field_title}} Maxmimum limit {{fl.form_field_max_length}} characters long.\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\"\r\n name=\"{{fl?.form_field}}\" [value]=\"fl?.default_value\"\r\n [(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 <!-- (blur)=\"this[fl?.validations](fl.default_value)\" -->\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 <tag-input [(ngModel)]=\"fl.default_value\" name=\"{{fl?.form_field}}\"\r\n [modelAsStrings]=\"true\" [allowDupes]=\"true\" [editable]='true'>\r\n </tag-input>\r\n </div>\r\n\r\n </div>\r\n </div>\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 [options]=\"sqlArray[fl?.form_field]\" style=\"z-index:9;\"\r\n [(ngModel)]=\"fl.default_value\" #safield=\"ngModel\"\r\n [required]=\"fl?.is_compulsory == 1\" name=\"{{fl?.form_field}}\"\r\n [multiple]=\"true\" [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 <!-- <ng-select [items]=\"sqlArray[fl?.form_field]\" [addTag]=\"addTag\" bindValue=\"k\" multiple=\"true\" bindLabel=\"v\" name=\"{{fl?.form_field}}\"\r\n [(ngModel)]=\"fl.default_value\" #safield=\"ngModel\" [required]=\"fl?.is_compulsory == 1\">\r\n </ng-select> -->\r\n </div>\r\n <div *ngIf=\"safield.invalid && (safield.dirty || safield.touched)\"\r\n 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\"\r\n *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}}\"\r\n [value]=\"fl?.default_value\" [(ngModel)]=\"fl.default_value\"\r\n #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 <div class=\"form-group\"\r\n *ngIf=\"fl?.form_field_typ == 'hd' || fl?.form_field_typ == 'df' || fl?.form_field_typ == 'fk' && fl?.is_hidden == 0\"\r\n [ngClass]=\"{'mt0': fl?.form_field_typ == 'hd'}\">\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}}\"\r\n [value]=\"fl?.default_value\" [(ngModel)]=\"fl.default_value\"\r\n #hdf=\"ngModel\" />\r\n </div>\r\n </div>\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}}\"\r\n [value]=\"fl?.default_value\" [(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 <!-- <div class=\"col-md-9\">\r\n <div class=\"btn-group\" data-toggle=\"buttons\">\r\n <label class=\"btn btn-default btn-on btn-xs\" *ngFor=\"let lov of sqlArray[fl.form_field];let i=index\">\r\n <input type=\"radio\" [value]=\"lov.k\" id=\"{{i}}\" name=\"{{fl?.form_field}}\" [value]=\"\" [(ngModel)]=\"fl.default_value\">{{lov.v}}</label>\r\n </div>\r\n </div> -->\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}}\"\r\n [value]=\"fl?.default_value\" [(ngModel)]=\"fl.default_value\"\r\n #tdf=\"ngModel\" [required]=\"fl?.is_compulsory == '1'\">\r\n <option *ngFor=\"let dynamic of sqlArray[fl.form_field]\"\r\n value=\"{{dynamic.value}}\">\r\n {{dynamic.label}}</option>\r\n </select>\r\n </div>\r\n <div *ngIf=\"tdf.invalid && (tdf.dirty || tdf.touched)\"\r\n 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}}\"\r\n [value]=\"fl?.default_value\" [(ngModel)]=\"fl.default_value\"\r\n #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)\"\r\n 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}}\"\r\n [value]=\"fl?.default_value\" [(ngModel)]=\"fl.default_value\"\r\n #ldInput=\"ngModel\" [required]=\"fl?.is_compulsory == '1'\">\r\n <option *ngFor=\"let dynamic of sqlArray[fl.form_field]\"\r\n value=\"{{dynamic.k}}\">{{dynamic.v}}\r\n </option>\r\n </select>\r\n </div>\r\n <div *ngIf=\"ldInput.invalid && (ldInput.dirty || ldInput.touched)\"\r\n 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}}\"\r\n [value]=\"fl?.default_value\" [(ngModel)]=\"fl.default_value\"\r\n (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]\"\r\n value=\"{{dynamic.value}}\">\r\n {{dynamic.label}}</option>\r\n </select>\r\n </div>\r\n <div *ngIf=\"sfi.invalid && (sfi.dirty || sfi.touched)\"\r\n 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]\"\r\n #sfi=\"ngModel\" [(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)\"\r\n 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\r\n </div>\r\n\r\n </div>\r\n </div>\r\n <div class=\"modal-footer\">\r\n <button type=\"button\" appAppNoDblClick class=\"btn btn-success\" (click)=\"onSubmit(f,submitBtn)\"\r\n #submitBtn>{{btnName}}</button>\r\n <button type=\"reset\" class=\"btn btn-danger\" (click)=\"reset(f)\"\r\n *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=\"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 <div class=\"modal\" id=\"popdatamodal\" 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\" #fpop=\"ngForm\" name=\"appForm\">\r\n <div class=\"modal-header\">\r\n <button type=\"button\" class=\"close\" data-dismiss=\"modal\" (click)=\"closeNull();\" #popclosebtn>\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 formFildsPopup | 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\" name=\"{{fl?.form_field}}\"\r\n [value]=\"fl?.default_value\" [(ngModel)]=\"fl.default_value\"\r\n #textInput=\"ngModel\" (blur)=\"chkFun(fl,fl.default_value);\"\r\n [ngClass]=\"{'uniqErrMsg': fl?.form_field == onErr}\"\r\n [required]=\"fl?.is_compulsory == '1'\" />\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\"\r\n *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}}\"\r\n [value]=\"fl?.default_value\" [(ngModel)]=\"fl.default_value\"\r\n #numberInput=\"ngModel\" [required]=\"fl?.is_compulsory==1\">\r\n <!-- minlength={{fl?.form_field_min_length}} maxlength={{fl?.form_field_max_length}}/ -->\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 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\"\r\n name=\"{{fl?.form_field}}\" [value]=\"fl?.default_value\"\r\n [(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 <div class=\"input-group w-100\">\r\n <tag-input [(ngModel)]=\"fl.default_value\" name=\"{{fl?.form_field}}\"\r\n [modelAsStrings]=\"true\" [allowDupes]=\"true\" [editable]='true'>\r\n </tag-input>\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 =='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 [options]=\"sqlArray[fl?.form_field]\" style=\"z-index:9;\"\r\n [(ngModel)]=\"fl.default_value\" #safield=\"ngModel\"\r\n [required]=\"fl?.is_compulsory == 1\" name=\"{{fl?.form_field}}\"\r\n [multiple]=\"true\" [allowClear]=\"true\">\r\n <ng-template #optionTemplate let-option=\"option\">\r\n <div class=\"famfamfam-flags {{option?.value.toLowerCase()}}\"></div>\r\n {{option?.label}}\r\n </ng-template>\r\n </ng-select>\r\n <!-- <ng-select [items]=\"sqlArray[fl.form_field]\" [addTag]=\"addTag\" bindValue=\"k\" multiple=\"true\" bindLabel=\"v\" name=\"{{fl?.form_field}}\"\r\n [(ngModel)]=\"fl.default_value\" #safield=\"ngModel\" [required]=\"fl?.is_compulsory == '1'\">\r\n </ng-select> -->\r\n </div>\r\n <div *ngIf=\"safield.invalid && (safield.dirty || safield.touched)\"\r\n 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\"\r\n *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}}\"\r\n [value]=\"fl?.default_value\" [(ngModel)]=\"fl.default_value\"\r\n #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 <div class=\"form-group\"\r\n *ngIf=\"fl?.form_field_typ == 'hd' || fl?.form_field_typ == 'df' || fl?.form_field_typ == 'fk' && fl?.is_hidden == 0\"\r\n [ngClass]=\"{'mt0': fl?.form_field_typ == 'hd'}\">\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}}\"\r\n [value]=\"fl?.default_value\" [(ngModel)]=\"fl.default_value\"\r\n #hdf=\"ngModel\" />\r\n </div>\r\n </div>\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}}\"\r\n [value]=\"fl?.default_value\" [(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 <div class=\"col-md-9\">\r\n <div class=\"input-group w-100\">\r\n <select class=\"form-control select\" name=\"{{fl?.form_field}}\"\r\n [value]=\"fl?.default_value\" [(ngModel)]=\"fl.default_value\"\r\n #tdf=\"ngModel\" [required]=\"fl?.is_compulsory == '1'\">\r\n <option *ngFor=\"let dynamic of sqlArray[fl.form_field]\"\r\n value=\"{{dynamic.value}}\">\r\n {{dynamic.label}}</option>\r\n </select>\r\n </div>\r\n <div *ngIf=\"tdf.invalid && (tdf.dirty || tdf.touched)\"\r\n 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}}\"\r\n [value]=\"fl?.default_value\" [(ngModel)]=\"fl.default_value\"\r\n #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)\"\r\n 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}}\"\r\n [value]=\"fl?.default_value\" [(ngModel)]=\"fl.default_value\"\r\n #ldInput=\"ngModel\" [required]=\"fl?.is_compulsory == '1'\">\r\n <option *ngFor=\"let dynamic of sqlArray[fl.form_field]\"\r\n value=\"{{dynamic.k}}\">{{dynamic.v}}\r\n </option>\r\n </select>\r\n </div>\r\n <div *ngIf=\"ldInput.invalid && (ldInput.dirty || ldInput.touched)\"\r\n 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}}\"\r\n [value]=\"fl?.default_value\" [(ngModel)]=\"fl.default_value\"\r\n (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]\"\r\n value=\"{{dynamic.value}}\">{{dynamic.label}}\r\n </option>\r\n </select>\r\n </div>\r\n <div *ngIf=\"sfi.invalid && (sfi.dirty || sfi.touched)\"\r\n 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 </div>\r\n </div>\r\n </div>\r\n <div class=\"modal-footer\">\r\n <button type=\"button\" appAppNoDblClick class=\"btn btn-success\"\r\n (click)=\"onPopupSubmit(fpop,popsubmitBtn)\" #popsubmitBtn>Add</button>\r\n <button type=\"reset\" class=\"btn btn-danger\" (click)=\"reset(f)\">Reset</button>\r\n </div>\r\n </form>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"modal\" id=\"popResmodal\" 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\" name=\"appFormres\">\r\n <div class=\"modal-header\">\r\n <button type=\"button\" class=\"close\" data-dismiss=\"modal\" (click)=\"closeNull();\">\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=\"popModalHead\"> Record</h4>\r\n </div>\r\n <div class=\"modal-body\">\r\n <div class=\"row\">\r\n <p *ngFor=\"let res of Sysresult\">{{res}}</p>\r\n </div>\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 </form>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n\r\n\r\n <div class=\"modal\" id=\"productMapMasMD\" 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\">Close</span>\r\n </button>\r\n <h4 class=\"modal-title\" id=\"smallModalHead\">Product Mapping of&nbsp;{{attMapModelTitle}}</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\"\r\n [(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\">Close</button>\r\n <button type=\"button\" class=\"btn btn-success\" data-dismiss=\"modal\"\r\n (click)=\"saveProductMasterMapping();\" #productMapclsbtn>Save</button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n \r\n\r\n\r\n \r\n\r\n\r\n <button id=\"deletebtn\" [hidden]=\"true\" data-toggle=\"modal\" data-target=\"#deletemodal\"></button>\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=\"popdatamdbtn\" [hidden]=\"true\" data-toggle=\"modal\" data-target=\"#popdatamodal\"></button>\r\n <button id=\"popResmodalbtn\" [hidden]=\"true\" data-toggle=\"modal\" data-target=\"#popResmodal\"></button>\r\n <button id=\"productMapMasMDbtn\" [hidden]=\"true\" data-toggle=\"modal\" data-target=\"#productMapMasMD\"></button>", 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-left{background:transparent!important;width:250px!important}.mt0{margin-bottom:0!important}.headingCls{padding:10px;background:#f0efef;font-size:14px;font-weight:400;margin-bottom:20px}.tooltip{display:none!important}.mwidth{width:500px}.actionFooter{position:fixed;bottom:0;width:100%;text-align:left;padding:6px 6px 6px 65px;background:#1b1e24}\n"] }]
1101
+ args: [{ selector: 'app-system', template: "<div class=\"mt\">\r\n <div class=\"panel panel-default\">\r\n <div class=\"panel-heading\">\r\n <h3 class=\"panel-title\">{{pageInfo?.title}}\r\n <span class=\"f-12\">({{cDt | date:'medium'}})</span>\r\n </h3>\r\n <button type=\"button\" id=\"addBtn\" class=\"btn btn-info pull-right\" *ngIf=\"addNew?.is_compulsory == 1\"\r\n (click)=\"userAction(data, 'add', '');f.reset();\">{{addNew?.form_field_title}}</button>\r\n\r\n\r\n </div>\r\n </div>\r\n <div class=\"row\" *ngIf=\"router.url != curl\">\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\"\r\n (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]=\"isOpen == true ? 'col-md-4' : 'hidden'\" *ngIf=\"route.snapshot.params['frmnme'] == 'menuMaster'\">\r\n <div class=\"row form-group\">\r\n <div class=\"col-md-4\">\r\n <label class=\"control-label\" style=\"text-align: right\">Application</label>\r\n </div>\r\n <div class=\"col-md-8\">\r\n <div class=\"input-group w-100\">\r\n <select class=\"form-control\" [(ngModel)]=\"app\" name=\"app\" (change)=\"fillModule(app)\">\r\n <option *ngFor=\"let lov of applicationList\" value=\"{{lov.k}}\">{{lov.v}}</option>\r\n </select>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"row form-group\" *ngIf=\"mdllist?.length > 1 \">\r\n <div class='col-md-4'>\r\n <label class=\"control-label\" style=\"text-align: right\">Module</label>\r\n </div>\r\n <div class=\"col-md-8\">\r\n <div class=\"input-group w-100\">\r\n <select class=\"form-control\" [(ngModel)]=\"v\" name=\"v\" (change)=\"fillLevel1(v)\">\r\n <option *ngFor=\"let lov of mdllist\" value=\"{{lov.k}}\">{{lov.v}}</option>\r\n </select>\r\n </div>\r\n </div>\r\n </div>\r\n <!-- <div class=\"row form-group\" *ngIf=\"menulvl1List?.length > 1 \">\r\n <div class=\"col-md-4\">\r\n <label class=\"control-label\" style=\"text-align: right\">Main Menu</label>\r\n </div>\r\n <div class=\"col-md-8\">\r\n <div class=\"input-group w-100\">\r\n <select class=\"form-control\" [(ngModel)]=\"v1\" name=\"v1\" (change)=\"fillLevel2(v,v1)\">\r\n <option *ngFor=\"let lov of menulvl1List\" value=\"{{lov.k}}\">{{lov.v}}</option>\r\n </select>\r\n </div>\r\n </div>\r\n </div> -->\r\n\r\n <!-- <div class=\"row form-group\" *ngIf=\"menulvl2List?.length > 1 \">\r\n <div class=\"col-md-4\">\r\n <label class=\"control-label\" style=\"text-align: right\">Sub Menu</label>\r\n </div>\r\n <div class=\"col-md-8\">\r\n <div class=\"input-group w-100\">\r\n <select class=\"form-control\" [(ngModel)]=\"v2\" name=\"v2\" (change)=\"submenuChange(v, v2)\">\r\n <option *ngFor=\"let lov of menulvl2List\" value=\"{{lov.k}}\">{{lov.v}}</option>\r\n </select>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"row form-group\" *ngIf=\"menulvl3List?.length > 1 \">\r\n <div class=\"col-md-4\">\r\n <label class=\"control-label\" style=\"text-align: right\">Page</label>\r\n </div>\r\n <div class=\"col-md-8\">\r\n <div class=\"input-group w-100\">\r\n <select class=\"form-control\" [(ngModel)]=\"v3\" name=\"v3\">\r\n <option *ngFor=\"let lov of menulvl3List\" value=\"{{lov.k}}\">{{lov.v}}</option>\r\n </select>\r\n </div>\r\n </div>\r\n </div> -->\r\n <div class=\"row form-group\" *ngIf=\"mdllist?.length > 1 \">\r\n <div class=\"col-md-4\">\r\n <label class=\"control-label\" style=\"text-align: right\">Level</label>\r\n </div>\r\n <div class=\"col-md-8\">\r\n <div class=\"input-group w-100\">\r\n <select class=\"form-control\" [(ngModel)]=\"level\" name=\"level\">\r\n <option value=\"\">Select</option>\r\n <option value=\"1\">Level 1</option>\r\n <option value=\"2\">Level 2</option>\r\n <option value=\"3\">Level 3</option>\r\n </select>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div [ngClass]=\"navigation.length > 0 ? 'col-md-10' : route.snapshot.params['frmnme'] == 'menuMaster' ? isOpen == false ? 'col-md-12' : 'col-md-8' : 'col-md-12'\">\r\n <div class=\"panel panel-default\">\r\n <div class=\"panel-body\" [style]=\"route.snapshot.params['frmnme'] == 'menuMaster' ? 'margin-bottom: 35px;' : ''\">\r\n <!-- <div class=\"row\">\r\n <div class=\"col-sm-8\"></div>\r\n <div class=\"col-sm-4\">\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=\"row\">\r\n <div class=\"col-sm-6\">\r\n <form class=\"form-inline pull-left\" > \r\n <button *ngIf=\"route.snapshot.params['frmnme'] == 'menuMaster'\" class=\"btn btn-default\" style=\"padding: 4px 15px 4px 20px; margin-right: 10px; margin-bottom: 15px;\"\r\n data-toggle=\"tooltip\" data-placement=\"right\" title=\"Filter results\" (click)=\"openTog();\">\r\n <span class=\"{{icon}}\" style=\"color:#3b5998;\"></span>\r\n </button>\r\n <!-- </form>\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 \r\n <button class=\"btn btn-default\" style=\"padding: 4px 15px 4px 20px;margin-left: 10px; margin-bottom: 15px;\"\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 </form>\r\n <!-- <label>{{datalist.length}}</label> -->\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\"\r\n [(ngModel)]=\"searchF\" />\r\n </div>\r\n </form>\r\n </div>\r\n </div>\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>SR No</th>\r\n <th>Action</th>\r\n <th *ngFor=\"let tbh of tblH; let i = index \" (click)=\"setOrder(tbh,i)\">\r\n {{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 <tr\r\n *ngFor=\"let data of datalist | searchPipe:searchF | orderBy: order:reverse | paginate: { itemsPerPage: pageSize, currentPage: p }; let i = index;\">\r\n <td>{{i + 1}}</td>\r\n <td>\r\n <div class=\"btn-group\">\r\n <a href=\"#\" data-toggle=\"dropdown\"\r\n 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)\"\r\n (click)=\"userAction(data, action.form_field_typ, action);\">\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\"\r\n on-mouseleave=\"hoveredI=-1\">\r\n {{data[tbh]}}\r\n <div class=\"onHoverDiv\" *ngIf=\"i==hoveredI\">\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 </tbody>\r\n </table>\r\n </div>\r\n <pagination-controls (pageChange)=\"p = $event\" class=\"pull-right\"></pagination-controls>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"actionFooter\" *ngIf=\"route.snapshot.params['frmnme'] == 'menuMaster'\">\r\n <button type=\"button\" id=\"addBtn\" class=\"btn btn-success ttip\" (click)=\"getPageDefination()\">Filter</button>\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 <!-- (change)=\"removeInvalid(fl)\" -->\r\n <input type=\"text\" class=\"form-control\" name=\"{{fl?.form_field}}\"\r\n [value]=\"fl?.default_value\" [(ngModel)]=\"fl.default_value\"\r\n #textInput=\"ngModel\" (blur)=\"chkFun(fl,fl.default_value);\"\r\n [ngClass]=\"{'uniqErrMsg': fl?.form_field == onErr}\"\r\n [required]=\"fl?.is_compulsory == 1\" />\r\n </div>\r\n <!-- (blur)=\"this[fl?.validations](fl.default_value)\" -->\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 <!-- <div *ngIf=\"textInput.errors.minlength\">\r\n {{fl.form_field_title}} must be at least {{fl.form_field_min_length}} characters long.\r\n </div>\r\n <div *ngIf=\"textInput.errors.maxlength\">\r\n {{fl.form_field_title}} Maxmimum limit {{fl.form_field_max_length}} characters long.\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 == '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}}\"\r\n [value]=\"fl?.default_value\" [(ngModel)]=\"fl.default_value\"\r\n #numberInput=\"ngModel\" [required]=\"fl?.is_compulsory == 1\">\r\n <!-- minlength={{fl?.form_field_min_length}} maxlength={{fl?.form_field_max_length}}/ -->\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.errors.minlength\">\r\n {{fl.form_field_title}} must be at least {{fl.form_field_min_length}} characters long.\r\n </div>\r\n <div *ngIf=\"numberInput.errors.maxlength\">\r\n {{fl.form_field_title}} Maxmimum limit {{fl.form_field_max_length}} characters long.\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\"\r\n name=\"{{fl?.form_field}}\" [value]=\"fl?.default_value\"\r\n [(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 <!-- (blur)=\"this[fl?.validations](fl.default_value)\" -->\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 <tag-input [(ngModel)]=\"fl.default_value\" name=\"{{fl?.form_field}}\"\r\n [modelAsStrings]=\"true\" [allowDupes]=\"true\" [editable]='true'>\r\n </tag-input>\r\n </div>\r\n\r\n </div>\r\n </div>\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 [options]=\"sqlArray[fl?.form_field]\" style=\"z-index:9;\"\r\n [(ngModel)]=\"fl.default_value\" #safield=\"ngModel\"\r\n [required]=\"fl?.is_compulsory == 1\" name=\"{{fl?.form_field}}\"\r\n [multiple]=\"true\" [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 <!-- <ng-select [items]=\"sqlArray[fl?.form_field]\" [addTag]=\"addTag\" bindValue=\"k\" multiple=\"true\" bindLabel=\"v\" name=\"{{fl?.form_field}}\"\r\n [(ngModel)]=\"fl.default_value\" #safield=\"ngModel\" [required]=\"fl?.is_compulsory == 1\">\r\n </ng-select> -->\r\n </div>\r\n <div *ngIf=\"safield.invalid && (safield.dirty || safield.touched)\"\r\n 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\"\r\n *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}}\"\r\n [value]=\"fl?.default_value\" [(ngModel)]=\"fl.default_value\"\r\n #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 <div class=\"form-group\"\r\n *ngIf=\"fl?.form_field_typ == 'hd' || fl?.form_field_typ == 'df' || fl?.form_field_typ == 'fk' && fl?.is_hidden == 0\"\r\n [ngClass]=\"{'mt0': fl?.form_field_typ == 'hd'}\">\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}}\"\r\n [value]=\"fl?.default_value\" [(ngModel)]=\"fl.default_value\"\r\n #hdf=\"ngModel\" />\r\n </div>\r\n </div>\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}}\"\r\n [value]=\"fl?.default_value\" [(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 <!-- <div class=\"col-md-9\">\r\n <div class=\"btn-group\" data-toggle=\"buttons\">\r\n <label class=\"btn btn-default btn-on btn-xs\" *ngFor=\"let lov of sqlArray[fl.form_field];let i=index\">\r\n <input type=\"radio\" [value]=\"lov.k\" id=\"{{i}}\" name=\"{{fl?.form_field}}\" [value]=\"\" [(ngModel)]=\"fl.default_value\">{{lov.v}}</label>\r\n </div>\r\n </div> -->\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}}\"\r\n [value]=\"fl?.default_value\" [(ngModel)]=\"fl.default_value\"\r\n #tdf=\"ngModel\" [required]=\"fl?.is_compulsory == '1'\">\r\n <option *ngFor=\"let dynamic of sqlArray[fl.form_field]\"\r\n value=\"{{dynamic.value}}\">\r\n {{dynamic.label}}</option>\r\n </select>\r\n </div>\r\n <div *ngIf=\"tdf.invalid && (tdf.dirty || tdf.touched)\"\r\n 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}}\"\r\n [value]=\"fl?.default_value\" [(ngModel)]=\"fl.default_value\"\r\n #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)\"\r\n 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}}\"\r\n [value]=\"fl?.default_value\" [(ngModel)]=\"fl.default_value\"\r\n #ldInput=\"ngModel\" [required]=\"fl?.is_compulsory == '1'\">\r\n <option *ngFor=\"let dynamic of sqlArray[fl.form_field]\"\r\n value=\"{{dynamic.k}}\">{{dynamic.v}}\r\n </option>\r\n </select>\r\n </div>\r\n <div *ngIf=\"ldInput.invalid && (ldInput.dirty || ldInput.touched)\"\r\n 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}}\"\r\n [value]=\"fl?.default_value\" [(ngModel)]=\"fl.default_value\"\r\n (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]\"\r\n value=\"{{dynamic.value}}\">\r\n {{dynamic.label}}</option>\r\n </select>\r\n </div>\r\n <div *ngIf=\"sfi.invalid && (sfi.dirty || sfi.touched)\"\r\n 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]\"\r\n #sfi=\"ngModel\" [(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)\"\r\n 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\r\n </div>\r\n\r\n </div>\r\n </div>\r\n <div class=\"modal-footer\">\r\n <button type=\"button\" appAppNoDblClick class=\"btn btn-success\" (click)=\"onSubmit(f,submitBtn)\"\r\n #submitBtn>{{btnName}}</button>\r\n <button type=\"reset\" class=\"btn btn-danger\" (click)=\"reset(f)\"\r\n *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=\"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 <div class=\"modal\" id=\"popdatamodal\" 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\" #fpop=\"ngForm\" name=\"appForm\">\r\n <div class=\"modal-header\">\r\n <button type=\"button\" class=\"close\" data-dismiss=\"modal\" (click)=\"closeNull();\" #popclosebtn>\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 formFildsPopup | 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\" name=\"{{fl?.form_field}}\"\r\n [value]=\"fl?.default_value\" [(ngModel)]=\"fl.default_value\"\r\n #textInput=\"ngModel\" (blur)=\"chkFun(fl,fl.default_value);\"\r\n [ngClass]=\"{'uniqErrMsg': fl?.form_field == onErr}\"\r\n [required]=\"fl?.is_compulsory == '1'\" />\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\"\r\n *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}}\"\r\n [value]=\"fl?.default_value\" [(ngModel)]=\"fl.default_value\"\r\n #numberInput=\"ngModel\" [required]=\"fl?.is_compulsory==1\">\r\n <!-- minlength={{fl?.form_field_min_length}} maxlength={{fl?.form_field_max_length}}/ -->\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 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\"\r\n name=\"{{fl?.form_field}}\" [value]=\"fl?.default_value\"\r\n [(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 <div class=\"input-group w-100\">\r\n <tag-input [(ngModel)]=\"fl.default_value\" name=\"{{fl?.form_field}}\"\r\n [modelAsStrings]=\"true\" [allowDupes]=\"true\" [editable]='true'>\r\n </tag-input>\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 =='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 [options]=\"sqlArray[fl?.form_field]\" style=\"z-index:9;\"\r\n [(ngModel)]=\"fl.default_value\" #safield=\"ngModel\"\r\n [required]=\"fl?.is_compulsory == 1\" name=\"{{fl?.form_field}}\"\r\n [multiple]=\"true\" [allowClear]=\"true\">\r\n <ng-template #optionTemplate let-option=\"option\">\r\n <div class=\"famfamfam-flags {{option?.value.toLowerCase()}}\"></div>\r\n {{option?.label}}\r\n </ng-template>\r\n </ng-select>\r\n <!-- <ng-select [items]=\"sqlArray[fl.form_field]\" [addTag]=\"addTag\" bindValue=\"k\" multiple=\"true\" bindLabel=\"v\" name=\"{{fl?.form_field}}\"\r\n [(ngModel)]=\"fl.default_value\" #safield=\"ngModel\" [required]=\"fl?.is_compulsory == '1'\">\r\n </ng-select> -->\r\n </div>\r\n <div *ngIf=\"safield.invalid && (safield.dirty || safield.touched)\"\r\n 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\"\r\n *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}}\"\r\n [value]=\"fl?.default_value\" [(ngModel)]=\"fl.default_value\"\r\n #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 <div class=\"form-group\"\r\n *ngIf=\"fl?.form_field_typ == 'hd' || fl?.form_field_typ == 'df' || fl?.form_field_typ == 'fk' && fl?.is_hidden == 0\"\r\n [ngClass]=\"{'mt0': fl?.form_field_typ == 'hd'}\">\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}}\"\r\n [value]=\"fl?.default_value\" [(ngModel)]=\"fl.default_value\"\r\n #hdf=\"ngModel\" />\r\n </div>\r\n </div>\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}}\"\r\n [value]=\"fl?.default_value\" [(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 <div class=\"col-md-9\">\r\n <div class=\"input-group w-100\">\r\n <select class=\"form-control select\" name=\"{{fl?.form_field}}\"\r\n [value]=\"fl?.default_value\" [(ngModel)]=\"fl.default_value\"\r\n #tdf=\"ngModel\" [required]=\"fl?.is_compulsory == '1'\">\r\n <option *ngFor=\"let dynamic of sqlArray[fl.form_field]\"\r\n value=\"{{dynamic.value}}\">\r\n {{dynamic.label}}</option>\r\n </select>\r\n </div>\r\n <div *ngIf=\"tdf.invalid && (tdf.dirty || tdf.touched)\"\r\n 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}}\"\r\n [value]=\"fl?.default_value\" [(ngModel)]=\"fl.default_value\"\r\n #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)\"\r\n 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}}\"\r\n [value]=\"fl?.default_value\" [(ngModel)]=\"fl.default_value\"\r\n #ldInput=\"ngModel\" [required]=\"fl?.is_compulsory == '1'\">\r\n <option *ngFor=\"let dynamic of sqlArray[fl.form_field]\"\r\n value=\"{{dynamic.k}}\">{{dynamic.v}}\r\n </option>\r\n </select>\r\n </div>\r\n <div *ngIf=\"ldInput.invalid && (ldInput.dirty || ldInput.touched)\"\r\n 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}}\"\r\n [value]=\"fl?.default_value\" [(ngModel)]=\"fl.default_value\"\r\n (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]\"\r\n value=\"{{dynamic.value}}\">{{dynamic.label}}\r\n </option>\r\n </select>\r\n </div>\r\n <div *ngIf=\"sfi.invalid && (sfi.dirty || sfi.touched)\"\r\n 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 </div>\r\n </div>\r\n </div>\r\n <div class=\"modal-footer\">\r\n <button type=\"button\" appAppNoDblClick class=\"btn btn-success\"\r\n (click)=\"onPopupSubmit(fpop,popsubmitBtn)\" #popsubmitBtn>Add</button>\r\n <button type=\"reset\" class=\"btn btn-danger\" (click)=\"reset(f)\">Reset</button>\r\n </div>\r\n </form>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"modal\" id=\"popResmodal\" 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\" name=\"appFormres\">\r\n <div class=\"modal-header\">\r\n <button type=\"button\" class=\"close\" data-dismiss=\"modal\" (click)=\"closeNull();\">\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=\"popModalHead\"> Record</h4>\r\n </div>\r\n <div class=\"modal-body\">\r\n <div class=\"row\">\r\n <p *ngFor=\"let res of Sysresult\">{{res}}</p>\r\n </div>\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 </form>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n\r\n\r\n <div class=\"modal\" id=\"productMapMasMD\" 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\">Close</span>\r\n </button>\r\n <h4 class=\"modal-title\" id=\"smallModalHead\">Product Mapping of&nbsp;{{attMapModelTitle}}</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\"\r\n [(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\">Close</button>\r\n <button type=\"button\" class=\"btn btn-success\" data-dismiss=\"modal\"\r\n (click)=\"saveProductMasterMapping();\" #productMapclsbtn>Save</button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n \r\n\r\n\r\n \r\n\r\n\r\n <button id=\"deletebtn\" [hidden]=\"true\" data-toggle=\"modal\" data-target=\"#deletemodal\"></button>\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=\"popdatamdbtn\" [hidden]=\"true\" data-toggle=\"modal\" data-target=\"#popdatamodal\"></button>\r\n <button id=\"popResmodalbtn\" [hidden]=\"true\" data-toggle=\"modal\" data-target=\"#popResmodal\"></button>\r\n <button id=\"productMapMasMDbtn\" [hidden]=\"true\" data-toggle=\"modal\" data-target=\"#productMapMasMD\"></button>", 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-left{background:transparent!important;width:250px!important}.mt0{margin-bottom:0!important}.headingCls{padding:10px;background:#f0efef;font-size:14px;font-weight:400;margin-bottom:20px}.tooltip{display:none!important}.mwidth{width:500px}.actionFooter{position:fixed;bottom:0;width:100%;text-align:left;padding:6px 6px 6px 65px;background:#1b1e24}\n"] }]
1102
1102
  }], ctorParameters: function () { return [{ type: i1.Router }, { type: i1.ActivatedRoute }, { type: i2.ToastrService }, { type: i3.SystemServiceService }, { type: i4.NgxSpinnerService }, { type: i5.CommanServiceService }, { type: i6.AdminServiceService }]; }, propDecorators: { closebtn: [{
1103
1103
  type: ViewChild,
1104
1104
  args: ['closebtn']
@@ -1118,4 +1118,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImpor
1118
1118
  type: ViewChild,
1119
1119
  args: ['productMapclsbtn']
1120
1120
  }] } });
1121
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3lzdGVtLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2V6bGliL3NyYy9saWIvc3lzdGVtLW1vZHVsZS9zeXN0ZW0vc3lzdGVtLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2V6bGliL3NyYy9saWIvc3lzdGVtLW1vZHVsZS9zeXN0ZW0vc3lzdGVtLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQVUsU0FBUyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6RSxPQUFPLEVBQUUsV0FBVyxFQUFHLE1BQU0sc0JBQXNCLENBQUM7QUFDcEQsT0FBTyxFQUFFLE1BQU0sRUFBRSxjQUFjLEVBQXlCLE1BQU0saUJBQWlCLENBQUM7QUFFaEYsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUMzQyxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDakQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ2hELE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDBDQUEwQyxDQUFDO0FBQ2hGLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDZDQUE2QyxDQUFDO0FBQ25GLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLDJDQUEyQyxDQUFDOzs7Ozs7Ozs7Ozs7Ozs7OztBQVNoRixNQUFNLE9BQU8sZUFBZTtJQXFGMUIsWUFDUyxNQUFjLEVBQ2QsS0FBcUIsRUFDcEIsTUFBcUIsRUFDckIsRUFBd0IsRUFDeEIsY0FBaUMsRUFDbEMsRUFBd0IsRUFDdkIsRUFBdUI7UUFOeEIsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUNkLFVBQUssR0FBTCxLQUFLLENBQWdCO1FBQ3BCLFdBQU0sR0FBTixNQUFNLENBQWU7UUFDckIsT0FBRSxHQUFG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Q2hpbGQsIEVsZW1lbnRSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgSHR0cEhlYWRlcnMgIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xyXG5pbXBvcnQgeyBSb3V0ZXIsIEFjdGl2YXRlZFJvdXRlLCBQYXJhbXMsIE5hdmlnYXRpb25FbmQgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG5pbXBvcnQgeyBGb3JtQ29udHJvbCwgRm9ybUdyb3VwLCBWYWxpZGF0b3JzIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBUb2FzdHJTZXJ2aWNlIH0gZnJvbSAnbmd4LXRvYXN0cic7XHJcbmltcG9ydCB7IENvb2tpZSB9IGZyb20gJ25nMi1jb29raWVzL25nMi1jb29raWVzJztcclxuaW1wb3J0IHsgTmd4U3Bpbm5lclNlcnZpY2UgfSBmcm9tIFwibmd4LXNwaW5uZXJcIjtcclxuaW1wb3J0IHsgU3lzdGVtU2VydmljZVNlcnZpY2UgfSBmcm9tICcuLi9zeXN0ZW0tc2VydmljZS9zeXN0ZW0tc2VydmljZS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQ29tbWFuU2VydmljZVNlcnZpY2UgfSBmcm9tICcuLi8uLi9jb21tYW4tc2VydmljZS9jb21tYW4tc2VydmljZS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQWRtaW5TZXJ2aWNlU2VydmljZSB9IGZyb20gJy4uLy4uL2FkbWluLXNlcnZpY2UvYWRtaW4tc2VydmljZS5zZXJ2aWNlJztcclxuXHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2FwcC1zeXN0ZW0nLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9zeXN0ZW0uY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL3N5c3RlbS5jb21wb25lbnQuY3NzJ11cclxufSlcclxuXHJcbmV4cG9ydCBjbGFzcyBTeXN0ZW1Db21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xyXG4gIC8vIGl0ZW1zID0gWydQaXp6YScsICdQYXN0YScsICdQYXJtZXNhbiddO1xyXG5cclxuICBAVmlld0NoaWxkKCdjbG9zZWJ0bicpIGNsb3NlYnRuOiBFbGVtZW50UmVmO1xyXG4gIEBWaWV3Q2hpbGQoJ2RlbGV0ZWNsc2J0bicpIGRlbGV0ZWNsc2J0bjogRWxlbWVudFJlZjtcclxuICBAVmlld0NoaWxkKCdpbnB1dHMnKSBpbnB1dDogRWxlbWVudFJlZjtcclxuICBAVmlld0NoaWxkKCdwb3BjbG9zZWJ0bicpIHBvcGNsb3NlYnRuOiBFbGVtZW50UmVmO1xyXG4gIEBWaWV3Q2hpbGQoJ3N1Ym1pdEJ0bicpIHN1Ym1pdGJ0bjogRWxlbWVudFJlZjtcclxuICBAVmlld0NoaWxkKCdwcm9kdWN0TWFwY2xzYnRuJykgcHJvZHVjdE1hcGNsc2J0bjogRWxlbWVudFJlZjtcclxuICBjRHQgPSBuZXcgRGF0ZSgpO1xyXG5cclxuICBmb3JtRmlsZHMgPSBbXTtcclxuICBmb3JtRmlsZHNQb3B1cCA9IFtdO1xyXG4gIGRhdGFsaXN0ID0gW107XHJcbiAgYWN0aW9ucyA9IFtdO1xyXG4gIGxvdnMgPSBbXTtcclxuICBhZGROZXc6IGFueSA9IFtdO1xyXG4gIHRibEggPSBbXTtcclxuICB0YmxEZXNjID0gW107XHJcbiAgbmF2aWdhdGlvbiA9IFtdO1xyXG4gIFN5c3Jlc3VsdCA9IFtdO1xyXG4gIGRhdGE7XHJcblxyXG4gIHdoZXJlTWFwID0ge307XHJcbiAgcGFyYU9iaiA9IHt9O1xyXG4gIGN1cnJPYmogPSB7fTtcclxuICBzcWxBcnJheSA9IHt9O1xyXG4gIGdsYk9iaiA9IHt9XHJcblxyXG4gIHBhZ2VTaXplID0gMTA7XHJcbiAgY0xpbmsgPSAwO1xyXG4gIHAgPSAxO1xyXG5cclxuICBldmVDID0gJ2ZhLWV5ZS1zbGFzaCc7XHJcbiAgaW5wdXR0eXBlID0gJ3Bhc3N3b3JkJztcclxuICBvcmRlciA9ICcnO1xyXG5cclxuICByZXZlcnNlID0gZmFsc2U7XHJcbiAgc3ViZm9ybSA9IGZhbHNlO1xyXG4gIGVzdHN0ID0gZmFsc2U7XHJcblxyXG4gIHNob3dhcnI7XHJcbiAgcGFnZUluZm87XHJcbiAgcG9wdXBwYWdlSW5mbztcclxuICBoZWFkZXI7XHJcbiAgYnRuTmFtZTtcclxuICBwaWQ7XHJcbiAgc2VhcmNoRjtcclxuICB3aHJLO1xyXG4gIHdoclY7XHJcbiAgc3ViRnJtV2s7XHJcbiAgc3ViRnJtV3Y7XHJcbiAgbmF2Zm9ybTtcclxuICBvbkVycjtcclxuICBob3ZlcmVkSTtcclxuICB0YkNlbGw7XHJcbiAgdGl0bGVcclxuICBwa2Y7XHJcbiAgY3VybDtcclxuICB1aUdycExpc3Q7XHJcbiAgdWlHcnBMaXN0RHRsO1xyXG4gIGRhdGFEdGxcclxuICBhZGRGcm1ObWU7XHJcbiAgY29pZG47XHJcbiAgY3VycnN0YXQ7XHJcbiAgY1VybDtcclxuICBhY3Rpb247XHJcbiAgYXR0ckR0bDtcclxuICBhdHRyTWFwcGluZ0R0bDtcclxuICBwcm9kdWN0TWFzQXR0cklkO1xyXG4gIGF0dE1hcE1vZGVsVGl0bGU7XHJcbiAgY29udGFjdE5hbWUgPSBcIlwiO1xyXG4gIGlzT3Blbj0gdHJ1ZVxyXG4gIGljb24gPSAnZmEgZmEtZGVkZW50JztcclxuICBhcHBsaWNhdGlvbkxpc3Q6IGFueSA9IFtdO1xyXG4gIGFwcCA9ICcnO1xyXG4gIHY9ICcnO1xyXG4gIHYxID0gJyc7XHJcbiAgdjIgPSAnJztcclxuICB2MyA9ICcnO1xyXG4gIGxldmVsID0gJyc7XHJcbiAgbWRsbGlzdCA9IFtdO1xyXG4gIG1lbnVsdmwxTGlzdCA9IFtdO1xyXG4gIG1lbnVsdmwyTGlzdCA9IFtdO1xyXG4gIG1lbnVsdmwzTGlzdCA9IFtdO1xyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHVibGljIHJvdXRlcjogUm91dGVyLFxyXG4gICAgcHVibGljIHJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSxcclxuICAgIHByaXZhdGUgdG9hc3RyOiBUb2FzdHJTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBzczogU3lzdGVtU2VydmljZVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHNwaW5uZXJTZXJ2aWNlOiBOZ3hTcGlubmVyU2VydmljZSAsXHJcbiAgICBwdWJsaWMgY3M6IENvbW1hblNlcnZpY2VTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBhczogQWRtaW5TZXJ2aWNlU2VydmljZVxyXG5cclxuICApIHtcclxuXHJcbiAgfVxyXG5cclxuICAvL2xvYWQgcGFnZSBkZWZpbmF0aW9uXHJcbiAgZ2V0UGFnZURlZmluYXRpb24oKSB7XHJcbiAgICB0aGlzLmRhdGFsaXN0ID0gW107XHJcbiAgICB0aGlzLndoZXJlTWFwID0gW107XHJcbiAgICB0aGlzLnNwaW5uZXJTZXJ2aWNlLnNob3coKTtcclxuXHJcbiAgICBsZXQgYWN0aW9uID0gdGhpcy5yb3V0ZS5zbmFwc2hvdC5wYXJhbXNbJ2FjdGlvbiddIHx8ICcnO1xyXG4gICAgaWYgKHRoaXMud2hyViAhPSBudWxsICYmIHRoaXMuc3ViRnJtV2sgPT0gbnVsbCkge1xyXG4gICAgICB0aGlzLnBhcmFPYmpbJ3doZXJlS2V5cyddID0gdGhpcy53aHJLO1xyXG4gICAgICB0aGlzLnBhcmFPYmpbJ3doZXJlVmx1cyddID0gJycgKyB0aGlzLndoclY7XHJcbiAgICAgIHRoaXMud2hlcmVNYXBbdGhpcy53aHJLXSA9IHRoaXMud2hyVjtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMucGFyYU9ialsnd2hlcmVLZXlzJ10gPSAnMSc7XHJcbiAgICAgIHRoaXMucGFyYU9ialsnd2hlcmVWbHVzJ10gPSAnMSc7XHJcbiAgICB9XHJcbiAgICB0aGlzLmhlYWRlclsnbWV0aG9kJ10gPSAnbG9hZExpc3QnO1xyXG4gICAgaWYgKHRoaXMucGFnZUluZm8gIT0gbnVsbCkge1xyXG4gICAgICB2YXIgcGFnZVRQID0gdGhpcy5wYWdlSW5mby5wYWdlX3R5cDtcclxuICAgICAgaWYgKHBhZ2VUUCA9PSAnanNvbkZvcm0nKSB7XHJcbiAgICAgICAgdGhpcy5wYXJhT2JqWyd3aGVyZUtleXMnXSA9IHRoaXMucGFnZUluZm8ud2hlcmVfY2xhdXNlO1xyXG4gICAgICAgIHRoaXMucGFyYU9ialsnd2hlcmVWbHVzJ10gPSB0aGlzLndoZXJlTWFwW3RoaXMucGFnZUluZm8ud2hlcmVfY2xhdXNlXTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYgKGFjdGlvbiA9PSAnbmV3Y29udGFjdCcpIHtcclxuICAgICAgdGhpcy5wYXJhT2JqWyd3aGVyZUtleXMnXSA9IFwibm1lX2lkblwiO1xyXG4gICAgICB0aGlzLnBhcmFPYmpbJ3doZXJlVmx1cyddID0gXCIwXCI7XHJcblxyXG4gICAgfVxyXG4gICAgaWYgKGFjdGlvbiA9PSAnbmV3YWNjY29udGFjdCcpIHtcclxuICAgICAgdGhpcy5wYXJhT2JqWyd3aGVyZUtleXMnXSA9IFwibm1lX2lkblwiO1xyXG4gICAgICB0aGlzLnBhcmFPYmpbJ3doZXJlVmx1cyddID0gXCIwXCI7XHJcblxyXG4gICAgfVxyXG4gICAgaWYgKGFjdGlvbiA9PSAnbmV3bGVkZ2VyJykge1xyXG4gICAgICB0aGlzLnBhcmFPYmpbJ3doZXJlS2V5cyddID0gXCJsZWRnZXJfaWRuXCI7XHJcbiAgICAgIHRoaXMucGFyYU9ialsnd2hlcmVWbHVzJ10gPSBcIjBcIjtcclxuXHJcbiAgICB9XHJcbiAgICBpZih0aGlzLnJvdXRlLnNuYXBzaG90LnBhcmFtc1snZnJtbm1lJ10gPT0gJ21lbnVNYXN0ZXInKSB7XHJcbiAgICAgIHRoaXMucGFyYU9ialsnaGVhZGVySWRuJ10gPSB0aGlzLmFwcDtcclxuICAgICAgdGhpcy5wYXJhT2JqWydtb2R1bGVJZG4nXSA9IHRoaXMudjtcclxuICAgICAgdGhpcy5wYXJhT2JqWydsZXZlbCddID0gdGhpcy5sZXZlbFxyXG4gICAgfVxyXG4gICAgbGV0IG9wdGlvbnMgPSAoeyBoZWFkZXJzOiBuZXcgSHR0cEhlYWRlcnModGhpcy5oZWFkZXIpIH0pO1xyXG4gICAgY29uc29sZS5sb2cob3B0aW9ucyk7XHJcbiAgICBjb25zb2xlLmxvZyhKU09OLnN0cmluZ2lmeSh0aGlzLnBhcmFPYmopKTtcclxuICAgIHRoaXMuc3MuZ2V0RGF0YSh0aGlzLnBhcmFPYmosIG9wdGlvbnMpLnRoZW4oKHJlc3BvbnNlOiBhbnkpID0+IHtcclxuICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1cyA9PSAnU1VDQ0VTUycpIHtcclxuICAgICAgICBjb25zb2xlLmxvZyhyZXNwb25zZSk7XHJcbiAgICAgICAgdGhpcy5zcGlubmVyU2VydmljZS5oaWRlKCk7XHJcbiAgICAgICAgdGhpcy50YmxIID0gcmVzcG9uc2UuZGF0YUhlYWRlcjtcclxuICAgICAgICB0aGlzLnRibERlc2MgPSByZXNwb25zZS5kYXRhSGVhZGVyUHJpbnQ7XHJcbiAgICAgICAgdGhpcy5hZGROZXcgPSByZXNwb25zZS5idXR0b25zWzBdIHx8IHt9O1xyXG4gICAgICAgIHRoaXMucGFnZUluZm8gPSByZXNwb25zZS5wYWdlSW5mbztcclxuICAgICAgICB0aGlzLnBrZiA9IHJlc3BvbnNlLnBhZ2VJbmZvLnByaW1hcnlfa2V5X2ZpZWxkO1xyXG4gICAgICAgIHRoaXMuZGF0YWxpc3QgPSByZXNwb25zZS5kYXRhTGlzdCB8fCBbXTtcclxuICAgICAgICB0aGlzLmlzT3BlbiA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuaWNvbiA9ICdmYSBmYS1pbmRlbnQnO1xyXG4gICAgICAgIHRoaXMuYWN0aW9ucyA9IHJlc3BvbnNlLmFjdGlvbnM7XHJcbiAgICAgICAgdGhpcy5uYXZpZ2F0aW9uID0gcmVzcG9uc2UubmF2aWdhdGlvbjtcclxuICAgICAgICBkZWJ1Z2dlclxyXG5cclxuXHJcblxyXG4gICAgICAgIGlmIChhY3Rpb24gPT0gJ25ld2NvbnRhY3QnIHx8IGFjdGlvbiA9PSAnbmV3bGVkZ2VyJyB8fCBhY3Rpb24gPT0gJ25ld2FjY2NvbnRhY3QnKSB7XHJcbiAgICAgICAgICB0aGlzLmFjdGlvbiA9IGFjdGlvbjtcclxuICAgICAgICAgIHRoaXMubmF2aWdhdGlvbiA9IHJlc3BvbnNlLm5hdmlnYXRpb25bMF07XHJcbiAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5mb3JtRmlsZHMgPSBbXTtcclxuICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2RhdGFtZGJ0bicpLmNsaWNrKCk7XHJcbiAgICAgICAgICAgIHRoaXMucGFyYU9ialsnZm9ybU5tZSddID0gdGhpcy5yb3V0ZS5zbmFwc2hvdC5wYXJhbXNbJ2ZybW5tZSddO1xyXG4gICAgICAgICAgICB0aGlzLmdldEZvcm1GaWVsZHMoKTtcclxuICAgICAgICAgICAgdGhpcy5idG5OYW1lID0gJ0FkZCc7XHJcbiAgICAgICAgICB9LCA1MDApXHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuc3Bpbm5lclNlcnZpY2UuaGlkZSgpO1xyXG4gICAgICAgIHRoaXMudG9hc3RyLmVycm9yKHJlc3BvbnNlLm1lc3NhZ2UpXHJcbiAgICAgIH1cclxuICAgIH0pLmNhdGNoKChlcnI6IGFueSkgPT4ge1xyXG4gICAgICB0aGlzLnNwaW5uZXJTZXJ2aWNlLmhpZGUoKTtcclxuICAgICAgdGhpcy50b2FzdHIuZXJyb3IoZXJyLm1lc3NhZ2UpXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIC8vbG9hZCBmb3JtIGZpZWxkc1xyXG4gIGdldEZvcm1GaWVsZHMoKSB7XHJcbiAgICB0aGlzLnNwaW5uZXJTZXJ2aWNlLnNob3coKTtcclxuICAgIGlmICh0aGlzLndoclYgIT0gbnVsbCkge1xyXG4gICAgICB0aGlzLnBhcmFPYmpbJ3doZXJlS2V5cyddID0gdGhpcy53aHJLO1xyXG4gICAgICB0aGlzLnBhcmFPYmpbJ3doZXJlVmx1cyddID0gdGhpcy53aHJWO1xyXG4gICAgfVxyXG4gICAgdGhpcy5oZWFkZXJbJ21ldGhvZCddID0gJ2xvYWRBZGRFZGl0JztcclxuICAgIGNvbnNvbGUubG9nKEpTT04uc3RyaW5naWZ5KHRoaXMucGFyYU9iaikpXHJcbiAgICBjb25zb2xlLmxvZyhKU09OLnN0cmluZ2lmeSh0aGlzLmhlYWRlcikpXHJcbiAgICBsZXQgb3B0aW9ucyA9ICh7IGhlYWRlcnM6IG5ldyBIdHRwSGVhZGVycyh0aGlzLmhlYWRlcikgfSk7XHJcbiAgICB0aGlzLnNzLmdldEZvcm1GKHRoaXMucGFyYU9iaiwgb3B0aW9ucykudGhlbigocmVzcG9uc2U6IGFueSkgPT4ge1xyXG4gICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzID09ICdTVUNDRVNTJyAmJiByZXNwb25zZS5tZXNzYWdlICE9ICdTVUNDRVNTJykge1xyXG4gICAgICAgIHRoaXMudG9hc3RyLmVycm9yKHJlc3BvbnNlLm1lc3NhZ2UpXHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9O1xyXG4gICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzID09ICdTVUNDRVNTJykge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKHJlc3BvbnNlKTtcclxuICAgICAgICB0aGlzLmZvcm1GaWxkcyA9IHJlc3BvbnNlLmZvcm1GaWVsZHM7XHJcbiAgICAgICAgZGVidWdnZXJcclxuICAgICAgICB0aGlzLnNwaW5uZXJTZXJ2aWNlLmhpZGUoKTtcclxuICAgICAgICB0aGlzLmZvcm1GaWxkcy5mb3JFYWNoKGVsZW1lbnQgPT4ge1xyXG4gICAgICAgICAgaWYgKGVsZW1lbnQuZm9ybV9maWVsZF90eXAgPT0gJ3RiJykge1xyXG4gICAgICAgICAgICB0aGlzLmdldExvdkxpc3QoZWxlbWVudC5mb3JtX2ZpZWxkLCBlbGVtZW50LnBhZ2VfaXRlbV9pZG4pO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaWYgKGVsZW1lbnQuZm9ybV9maWVsZF90eXAgPT0gJ3MnKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZ2V0TG92TGlzdChlbGVtZW50LmZvcm1fZmllbGQsIGVsZW1lbnQucGFnZV9pdGVtX2lkbik7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZiAoZWxlbWVudC5mb3JtX2ZpZWxkX3R5cCA9PSAnaGQnKSB7XHJcbiAgICAgICAgICAgIGVsZW1lbnQuZGVmYXVsdF92YWx1ZSA9IHRoaXMud2hlcmVNYXBbZWxlbWVudC5mb3JtX2ZpZWxkXTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGlmIChlbGVtZW50LmZvcm1fZmllbGRfdHlwID09ICdzcScpIHtcclxuICAgICAgICAgICAgdGhpcy5nZXRTZXF1ZW5jZShlbGVtZW50KTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGlmIChlbGVtZW50LmR0YV90eXAgPT0gJ3NhJykge1xyXG4gICAgICAgICAgICB0aGlzLmdldExvdkxpc3QoZWxlbWVudC5mb3JtX2ZpZWxkLCBlbGVtZW50LnBhZ2VfaXRlbV9pZG4pO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuc3Bpbm5lclNlcnZpY2UuaGlkZSgpO1xyXG4gICAgICAgIHRoaXMudG9hc3RyLmVycm9yKHJlc3BvbnNlLm1lc3NhZ2UpXHJcbiAgICAgIH1cclxuICAgIH0pLmNhdGNoKChlcnI6IGFueSkgPT4ge1xyXG4gICAgICB0aGlzLnNwaW5uZXJTZXJ2aWNlLmhpZGUoKTtcclxuICAgICAgdGhpcy50b2FzdHIuZXJyb3IoZXJyLm1lc3NhZ2UpXHJcbiAgICB9KTtcclxuICB9XHJcbiAgLy9sb2FkIGZvcm0gZmllbGRzXHJcbiAgZ2V0Rm9ybUZpZWxkc1BvcHVwKCkge1xyXG4gICAgdGhpcy5zcGlubmVyU2VydmljZS5zaG93KCk7XHJcbiAgICBpZiAodGhpcy53aHJWICE9IG51bGwpIHtcclxuICAgICAgdGhpcy5wYXJhT2JqWyd3aGVyZUtleXMnXSA9IHRoaXMud2hySztcclxuICAgICAgdGhpcy5wYXJhT2JqWyd3aGVyZVZsdXMnXSA9IHRoaXMud2hyVjtcclxuXHJcbiAgICAgIHRoaXMud2hlcmVNYXBbdGhpcy53aHJLXSA9IHRoaXMud2hyVjtcclxuICAgIH1cclxuICAgIHRoaXMuaGVhZGVyWydtZXRob2QnXSA9ICdsb2FkQWRkRWRpdCc7XHJcbiAgICBsZXQgb3B0aW9ucyA9ICh7IGhlYWRlcnM6IG5ldyBIdHRwSGVhZGVycyh0aGlzLmhlYWRlcikgfSk7XHJcbiAgICB0aGlzLnNzLmdldEZvcm1GKHRoaXMucGFyYU9iaiwgb3B0aW9ucykudGhlbigocmVzcG9uc2U6IGFueSkgPT4ge1xyXG4gICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzID09ICdTVUNDRVNTJyAmJiByZXNwb25zZS5tZXNzYWdlICE9ICdTVUNDRVNTJykge1xyXG4gICAgICAgIHRoaXMudG9hc3RyLmVycm9yKHJlc3BvbnNlLm1lc3NhZ2UpXHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9O1xyXG4gICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzID09ICdTVUNDRVNTJykge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKHJlc3BvbnNlKTtcclxuICAgICAgICBkZWJ1Z2dlcjtcclxuICAgICAgICB0aGlzLmZvcm1GaWxkc1BvcHVwID0gcmVzcG9uc2UuZm9ybUZpZWxkcztcclxuICAgICAgICB0aGlzLnBvcHVwcGFnZUluZm8gPSByZXNwb25zZS5wYWdlSW5mbztcclxuICAgICAgICB0aGlzLnNwaW5uZXJTZXJ2aWNlLmhpZGUoKTtcclxuICAgICAgICB0aGlzLmZvcm1GaWxkc1BvcHVwLmZvckVhY2goZWxlbWVudCA9PiB7XHJcbiAgICAgICAgICBkZWJ1Z2dlcjtcclxuICAgICAgICAgIGlmIChlbGVtZW50LmZvcm1fZmllbGRfdHlwID09ICd0YicpIHtcclxuICAgICAgICAgICAgdGhpcy5nZXRMb3ZMaXN0KGVsZW1lbnQuZm9ybV9maWVsZCwgZWxlbWVudC5wYWdlX2l0ZW1faWRuKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGlmIChlbGVtZW50LmZvcm1fZmllbGRfdHlwID09ICdzJykge1xyXG4gICAgICAgICAgICB0aGlzLmdldExvdkxpc3QoZWxlbWVudC5mb3JtX2ZpZWxkLCBlbGVtZW50LnBhZ2VfaXRlbV9pZG4pO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaWYgKGVsZW1lbnQuZm9ybV9maWVsZF90eXAgPT0gJ2hkJykge1xyXG4gICAgICAgICAgICBlbGVtZW50LmRlZmF1bHRfdmFsdWUgPSB0aGlzLndoZXJlTWFwW2VsZW1lbnQuZm9ybV9maWVsZF07XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZiAoZWxlbWVudC5mb3JtX2ZpZWxkX3R5cCA9PSAnc3EnKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZ2V0U2VxdWVuY2UoZWxlbWVudCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZiAoZWxlbWVudC5mb3JtX2ZpZWxkX3R5cCA9PSAnZmsnKSB7XHJcbiAgICAgICAgICAgIGVsZW1lbnQuZGVmYXVsdF92YWx1ZSA9IHRoaXMud2hyVjtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGlmIChlbGVtZW50LmR0YV90eXAgPT0gJ3NhJykge1xyXG4gICAgICAgICAgICB0aGlzLmdldExvdkxpc3QoZWxlbWVudC5mb3JtX2ZpZWxkLCBlbGVtZW50LnBhZ2VfaXRlbV9pZG4pO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuc3Bpbm5lclNlcnZpY2UuaGlkZSgpO1xyXG4gICAgICAgIHRoaXMudG9hc3RyLmVycm9yKHJlc3BvbnNlLm1lc3NhZ2UpXHJcbiAgICAgIH1cclxuICAgIH0pLmNhdGNoKChlcnI6IGFueSkgPT4ge1xyXG4gICAgICB0aGlzLnNwaW5uZXJTZXJ2aWNlLmhpZGUoKTtcclxuICAgICAgdGhpcy50b2FzdHIuZXJyb3IoZXJyLm1lc3NhZ2UpXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIC8vIGZ1bmN0aW9uIHRvIHJlbW92ZSBpbnZhbGlkIGNoYXJhY3RlcnNcclxuICAvLyByZW1vdmVJbnZhbGlkKGZsKSB7XHJcbiAgLy8gICBpZiAoZmwuZm9ybV9maWVsZCA9PSBcIm5tZVwiIHx8IGZsLmZvcm1fZmllbGQgPT0gXCJwcmludF9ubWVcIikge1xyXG4gIC8vICAgICBmbC5kZWZhdWx0X3ZhbHVlID0gZmwuZGVmYXVsdF92YWx1ZS5yZXBsYWNlKC9bXmEteiBdL2dpLCAnJyk7XHJcbiAgLy8gICB9XHJcbiAgLy8gfTtcclxuXHJcbiAgLy91c2VycyBhY3Rpb24gbGlrZSAnYWRkJywgJ2VkaXQnLCAnZGVsZXRlJyBhbmQgJ2FkIEl0ZW0nXHJcbiAgdXNlckFjdGlvbih1YSwgYywgYSkge1xyXG4gICAgZGVidWdnZXJcclxuICAgIGNvbnNvbGUubG9nKHVhLCBjLCBhKTtcclxuICAgIGlmIChjID09ICdhZGQnKSB7XHJcbiAgICAgIHRoaXMuc3Bpbm5lclNlcnZpY2Uuc2hvdygpO1xyXG4gICAgICB0aGlzLmZvcm1GaWxkcyA9IFtdO1xyXG4gICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZGF0YW1kYnRuJykuY2xpY2soKTtcclxuICAgICAgdGhpcy5wYXJhT2JqWydmb3JtTm1lJ10gPSB0aGlzLnJvdXRlLnNuYXBzaG90LnBhcmFtc1snZnJtbm1lJ107XHJcbiAgICAgIHRoaXMuZ2V0Rm9ybUZpZWxkcygpO1xyXG4gICAgICB0aGlzLmJ0bk5hbWUgPSAnQWRkJztcclxuICAgIH0gZWxzZSBpZiAodWEgJiYgYy50cmltKCkgPT0gJ2VkaXQnKSB7XHJcbiAgICAgIHRoaXMuZ2xiT2JqID0gdWE7XHJcbiAgICAgIHRoaXMuc3Bpbm5lclNlcnZpY2Uuc2hvdygpO1xyXG4gICAgICB0aGlzLmZvcm1GaWxkcyA9IFtdO1xyXG4gICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZGF0YW1kYnRuJykuY2xpY2soKTtcclxuICAgICAgdGhpcy5waWQgPSB1YVt0aGlzLnBrZl07XHJcbiAgICAgIHRoaXMucGFyYU9ialsnZm9ybU5tZSddID0gdGhpcy5yb3V0ZS5zbmFwc2hvdC5wYXJhbXNbJ2ZybW5tZSddO1xyXG4gICAgICB0aGlzLmdldEVkaXREYXRhKHVhW3RoaXMucGtmXSk7XHJcbiAgICAgIHRoaXMuYnRuTmFtZSA9ICdFZGl0JztcclxuICAgIH0gZWxzZSBpZiAoYS5mb3JtX2ZpZWxkID09ICdhZGRBdHRyJykge1xyXG4gICAgICB0aGlzLnNwaW5uZXJTZXJ2aWNlLnNob3coKTtcclxuICAgICAgdGhpcy5mb3JtRmlsZHMgPSBbXTtcclxuICAgICAgdGhpcy5jdXJsID0gYS5sb3ZfcXJ5O1xyXG4gICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbYS5sb3ZfcXJ5LnRyaW0oKSwgdGhpcy5wa2YsIHVhW3RoaXMucGtmXV0pO1xyXG4gICAgICB0aGlzLndocksgPSB0aGlzLnBrZjtcclxuICAgICAgdGhpcy53aHJWID0gdWFbdGhpcy5wa2ZdO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAodWEgJiYgYy50cmltKCkgPT0gJ3N1YmZvcm0nICYmIGEuZm9ybV9maWVsZCAhPSBcIm91dF9tYXBwaW5nXCIpIHtcclxuICAgICAgdGhpcy5zcGlubmVyU2VydmljZS5zaG93KCk7XHJcbiAgICAgIHRoaXMuZm9ybUZpbGRzID0gW107XHJcbiAgICAgIHRoaXMuY3VybCA9IGEubG92X3FyeTtcclxuICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW2EubG92X3FyeS50cmltKCksIHRoaXMucGtmLCB1YVt0aGlzLnBrZl1dKTtcclxuICAgICAgdGhpcy53aHJLID0gdGhpcy5wa2Y7XHJcbiAgICAgIHRoaXMud2hyViA9IHVhW3RoaXMucGtmXTtcclxuICAgIH0gZWxzZSBpZiAodWEgJiYgYy50cmltKCkgPT0gJ2RlbGV0ZScpIHtcclxuICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2RlbGV0ZWJ0bicpLmNsaWNrKCk7XHJcbiAgICAgIHRoaXMucGlkID0gdWFbdGhpcy5wa2ZdO1xyXG4gICAgICB0aGlzLnBhcmFPYmpbJ2Zvcm1ObWUnXSA9IHRoaXMucm91dGUuc25hcHNob3QucGFyYW1zWydmcm1ubWUnXTtcclxuICAgIH0gZWxzZSBpZiAoYy50cmltKCkgPT0gJ3BvcHVwJykge1xyXG4gICAgICBkZWJ1Z2dlcjtcclxuICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3BvcGRhdGFtZGJ0bicpLmNsaWNrKCk7XHJcbiAgICAgIHRoaXMucGFyYU9ialsnZm9ybU5tZSddID0gYS5sb3ZfcXJ5LnNwbGl0KCcvJylbMl07XHJcbiAgICAgIHRoaXMud2hySyA9IHRoaXMucGtmO1xyXG4gICAgICB0aGlzLndoclYgPSB1YVt0aGlzLnBrZl07XHJcbiAgICAgIHRoaXMuZ2V0Rm9ybUZpZWxkc1BvcHVwKCk7XHJcbiAgICAgIHRoaXMucGlkID0gdWFbdGhpcy5wa2ZdO1xyXG4gICAgICB0aGlzLmJ0bk5hbWUgPSAnQWRkJztcclxuICAgIH0gZWxzZSBpZiAoYy50cmltKCkgPT0gJ2RlZmluYXRpb24nKSB7XHJcbiAgICAgIGNvbnNvbGUubG9nKGEubG92X3FyeS50cmltKCksIHVhW3RoaXMucGtmXSlcclxuICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW2EubG92X3FyeS50cmltKCksIHVhW3RoaXMucGtmXV0pO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAoYy50cmltKCkgPT0gJ3N1YmZvcm0nICYmIGEuZm9ybV9maWVsZCA9PSBcIm91dF9tYXBwaW5nXCIpIHtcclxuICAgICAgdGhpcy5sb2FkUHJvZHVjdE1hc3Rlck1hcHBpbmcodWFbJ2F0dHJfaWRuJ10pO1xyXG4gICAgICB0aGlzLmF0dE1hcE1vZGVsVGl0bGUgPSB1YS5kaXNwbGF5O1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbG9hZFByb2R1Y3RNYXN0ZXJNYXBwaW5nKGF0dHJJZG4pIHtcclxuICAgIHRoaXMucHJvZHVjdE1hc0F0dHJJZCA9IGF0dHJJZG47XHJcbiAgICB0aGlzLnNwaW5uZXJTZXJ2aWNlLnNob3coKTtcclxuICAgIGxldCBvYmogPSB7fTtcclxuICAgIG9ialsnZm9ybU5tZSddID0gJ2ZpbGVVcGxvYWQnO1xyXG4gICAgb2JqWydhdHRyX2lkbiddID0gYXR0cklkbjtcclxuICAgIHRoaXMuaGVhZGVyWydtZXRob2QnXSA9ICdsb2FkUHJkTWFzdGVyTWFwcGluZydcclxuICAgIGxldCBvcHRpb25zID0gKHsgaGVhZGVyczogbmV3IEh0dHBIZWFkZXJzKHRoaXMuaGVhZGVyKSB9KTtcclxuICAgIHRoaXMuc3MuU2F2ZShvYmosIG9wdGlvbnMsICdmaWxlVXBsb2FkL2xvYWQnKS50aGVuKChyZXNwb25zZTogYW55KSA9PiB7XHJcbiAgICAgIGlmIChyZXNwb25zZS5zdGF0dXMgPT0gJ1NVQ0NFU1MnKSB7XHJcbiAgICAgICAgY29uc29sZS5sb2cocmVzcG9uc2UpO1xyXG4gICAgICAgIGxldCByZXN1bHQgPSByZXNwb25zZS5yZXN1bHQ7XHJcbiAgICAgICAgdGhpcy5hdHRyRHRsID0gcmVzdWx0LmF0dHJEdGw7XHJcbiAgICAgICAgdGhpcy5hdHRyTWFwcGluZ0R0bCA9IHJlc3VsdC5hdHRyTWFwcGluZ0R0bDtcclxuICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncHJvZHVjdE1hcE1hc01EYnRuJykuY2xpY2soKTtcclxuICAgICAgICB0aGlzLnNwaW5uZXJTZXJ2aWNlLmhpZGUoKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLnNwaW5uZXJTZXJ2aWNlLmhpZGUoKTtcclxuICAgICAgICB0aGlzLnRvYXN0ci5lcnJvcihyZXNwb25zZS5tZXNzYWdlKVxyXG4gICAgICB9XHJcbiAgICB9KS5jYXRjaCgoZXJyOiBhbnkpID0+IHtcclxuICAgICAgdGhpcy5zcGlubmVyU2VydmljZS5oaWRlKCk7XHJcbiAgICAgIHRoaXMudG9hc3RyLmVycm9yKGVyci5tZXNzYWdlKVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBzYXZlUHJvZHVjdE1hc3Rlck1hcHBpbmcoKSB7XHJcbiAgICB0aGlzLnNwaW5uZXJTZXJ2aWNlLnNob3coKTtcclxuICAgIGxldCBvYmogPSB7fTtcclxuICAgIG9ialsnZm9ybU5tZSddID0gJ2ZpbGVVcGxvYWQnO1xyXG4gICAgb2JqWydhdHRyX2lkbiddID0gdGhpcy5wcm9kdWN0TWFzQXR0cklkO1xyXG4gICAgb2JqWydhdHRyRHRsTWFwJ10gPSB0aGlzLmF0dHJNYXBwaW5nRHRsO1xyXG4gICAgdGhpcy5oZWFkZXJbJ21ldGhvZCddID0gJ3VwZGF0ZVByb2R1Y3RBdHRyJ1xyXG4gICAgY29uc29sZS5sb2coSlNPTi5zdHJpbmdpZnkob2JqKSk7XHJcbiAgICBsZXQgb3B0aW9ucyA9ICh7IGhlYWRlcnM6IG5ldyBIdHRwSGVhZGVycyh0aGlzLmhlYWRlcikgfSk7XHJcbiAgICB0aGlzLnNzLlNhdmUob2JqLCBvcHRpb25zLCAnZmlsZVVwbG9hZC9sb2FkJykudGhlbigocmVzcG9uc2U6IGFueSkgPT4ge1xyXG4gICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzID09ICdTVUNDRVNTJykge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKHJlc3BvbnNlKTtcclxuICAgICAgICB0aGlzLnRvYXN0ci5zdWNjZXNzKHJlc3BvbnNlLm1lc3NhZ2UpO1xyXG4gICAgICAgIHRoaXMuc3Bpbm5lclNlcnZpY2UuaGlkZSgpO1xyXG4gICAgICAgIHRoaXMucHJvZHVjdE1hcGNsc2J0bi5uYXRpdmVFbGVtZW50LmNsaWNrKCk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5zcGlubmVyU2VydmljZS5oaWRlKCk7XHJcbiAgICAgICAgdGhpcy50b2FzdHIuZXJyb3IocmVzcG9uc2UubWVzc2FnZSlcclxuICAgICAgfVxyXG4gICAgfSkuY2F0Y2goKGVycjogYW55KSA9PiB7XHJcbiAgICAgIHRoaXMuc3Bpbm5lclNlcnZpY2UuaGlkZSgpO1xyXG4gICAgICB0aGlzLnRvYXN0ci5lcnJvcihlcnIubWVzc2FnZSlcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcblxyXG4gIC8vc2lkZSBuZXZpZ2F0aW9uIFxyXG4gIG5hdmlnYXRpb25GdW4obmF2LCBpKSB7XHJcbiAgICB0aGlzLmNMaW5rID0gaTtcclxuICAgIHRoaXMud2hySyA9IG5hdi5jb2x1bW5fa2V5LnRyaW0oKTtcclxuICAgIHRoaXMud2hyViA9IG5hdi5mb3JtX2ZpZWxkLnRyaW0oKTtcclxuICAgIHRoaXMubmF2Zm9ybSA9IG5hdi5sb3ZfcXJ5LnRyaW0oKTtcclxuICAgIGlmICh0aGlzLnN1YkZybVd2ID09ICcnKSB7XHJcbiAgICAgIHRoaXMuc3ViRnJtV2sgPSBudWxsO1xyXG4gICAgICB0aGlzLnN1YkZybVd2ID0gbnVsbDtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLm5hdmZvcm0gIT0gJycpIHtcclxuICAgICAgaWYgKHRoaXMubmF2Zm9ybSA9PSAnYWRkdGlvbmFsRHRsTWFzdGVyJykge1xyXG4gICAgICAgIHRoaXMuYWRkRnJtTm1lID0gdGhpcy5uYXZmb3JtO1xyXG4gICAgICAgIHRoaXMuZ2V0TmFtZUF0dHIodGhpcy5hZGRGcm1ObWUpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMucGFyYU9ialsnZm9ybU5tZSddID0gdGhpcy5uYXZmb3JtO1xyXG4gICAgICAgIHRoaXMuZ2V0UGFnZURlZmluYXRpb24oKTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5nZXRQYWdlRGVmaW5hdGlvbigpO1xyXG4gICAgfVxyXG4gIH1cclxuICAvL2xvYWQgZWRpdCB0YWJsZSBkYXRhIHdpdGggZGVmYXVsdCB2YWx1ZVxyXG4gIGdldEVkaXREYXRhKHBpZCkge1xyXG4gICAgdGhpcy5zcGlubmVyU2VydmljZS5zaG93KCk7XHJcbiAgICB0aGlzLmZvcm1GaWxkcyA9IFtdO1xyXG4gICAgbGV0IHJlcU9iaiA9IHt9O1xyXG4gICAgdmFyIHBhZ2VUUCA9IHRoaXMucGFnZUluZm8ucGFnZV90eXA7XHJcbiAgICByZXFPYmpbJ2Zvcm1ObWUnXSA9IHRoaXMucGFnZUluZm8uZm9ybV9ubWU7XHJcbiAgICByZXFPYmpbJ3ByaW1hcnlLZXknXSA9IHRoaXMucGFnZUluZm8ucHJpbWFyeV9rZXlfZmllbGQ7XHJcbiAgICByZXFPYmpbJ3BhZ2VUeXAnXSA9IHRoaXMucGFnZUluZm8ucGFnZV90eXA7XHJcbiAgICByZXFPYmpbJ3NlY29uZEtleUZpZWxkJ10gPSB0aGlzLnBhZ2VJbmZvLnNlY29uZF9rZXlfZmllbGQ7XHJcbiAgICBpZiAodGhpcy50YkNlbGwgIT0gbnVsbCkge1xyXG4gICAgICByZXFPYmpbJ2luTGluZUVkaXRDb2x1bW4nXSA9IHRoaXMudGJDZWxsO1xyXG4gICAgfVxyXG4gICAgcmVxT2JqWydwcmltYXJ5SWQnXSA9IHBpZDtcclxuICAgIGlmIChwYWdlVFAgPT0gJ2pzb25Gb3JtJykge1xyXG4gICAgICByZXFPYmpbJ3doZXJlS2V5cyddID0gdGhpcy5wYWdlSW5mby53aGVyZV9jbGF1c2U7XHJcbiAgICAgIHJlcU9ialsnd2hlcmVWbHVzJ10gPSB0aGlzLndoZXJlTWFwW3RoaXMucGFnZUluZm8ud2hlcmVfY2xhdXNlXTtcclxuICAgIH1cclxuICAgIGNvbnNvbGUubG9nKEpTT04uc3RyaW5naWZ5KHJlcU9iaikpO1xyXG4gICAgdGhpcy5oZWFkZXJbJ21ldGhvZCddID0gJ2xvYWRBZGRFZGl0JztcclxuICAgIGxldCBvcHRpb25zID0gKHsgaGVhZGVyczogbmV3IEh0dHBIZWFkZXJzKHRoaXMuaGVhZGVyKSB9KTtcclxuICAgIHRoaXMuc3MuZ2V0RWRpdEQocmVxT2JqLCBvcHRpb25zKS50aGVuKChyZXNwb25zZTogYW55KSA9PiB7XHJcbiAgICAgIGNvbnNvbGUubG9nKHJlc3BvbnNlKTtcclxuICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1cyA9PSAnU1VDQ0VTUycgJiYgcmVzcG9uc2UubWVzc2FnZSAhPSAnU1VDQ0VTUycpIHtcclxuICAgICAgICB0aGlzLnNwaW5uZXJTZXJ2aWNlLmhpZGUoKTtcclxuICAgICAgICB0aGlzLnRvYXN0ci5lcnJvcihyZXNwb25zZS5tZXNzYWdlKVxyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfTtcclxuICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1cyA9PSAnU1VDQ0VTUycpIHtcclxuICAgICAgICB0aGlzLnNwaW5uZXJTZXJ2aWNlLmhpZGUoKTtcclxuICAgICAgICBpZiAodGhpcy50YkNlbGwgIT0gbnVsbCkge1xyXG4gICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2RhdGFtZGJ0bicpLmNsaWNrKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuZm9ybUZpbGRzID0gcmVzcG9uc2UuZm9ybUZpZWxkcztcclxuICAgICAgICB0aGlzLmZvcm1GaWxkcy5mb3JFYWNoKGVsZW1lbnQgPT4ge1xyXG4gICAgICAgICAgaWYgKGVsZW1lbnQuZm9ybV9maWVsZF90eXAgPT0gJ3RiJykge1xyXG4gICAgICAgICAgICB0aGlzLmdldExvdkxpc3QoZWxlbWVudC5mb3JtX2ZpZWxkLCBlbGVtZW50LnBhZ2VfaXRlbV9pZG4pO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaWYgKGVsZW1lbnQuZm9ybV9maWVsZF90eXAgPT0gJ3MnKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZ2V0TG92TGlzdChlbGVtZW50LmZvcm1fZmllbGQsIGVsZW1lbnQucGFnZV9pdGVtX2lkbik7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZiAoZWxlbWVudC5mb3JtX2ZpZWxkX3R5cCA9PSAnaGQnKSB7XHJcbiAgICAgICAgICAgIGVsZW1lbnQuZGVmYXVsdF92YWx1ZSA9IHRoaXMud2hlcmVNYXBbZWxlbWVudC5mb3JtX2ZpZWxkXTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGlmIChlbGVtZW50LmZvcm1fZmllbGRfdHlwID09ICdzcScpIHtcclxuICAgICAgICAgICAgdGhpcy5nZXRTZXF1ZW5jZShlbGVtZW50KTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGlmIChlbGVtZW50LmR0YV90eXAgPT0gJ3NhJykge1xyXG4gICAgICAgICAgICB0aGlzLmdldExvdkxpc3QoZWxlbWVudC5mb3JtX2ZpZWxkLCBlbGVtZW50LnBhZ2VfaXRlbV9pZG4pO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRoaXMuc3Bpbm5lclNlcnZpY2UuaGlkZSgpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuc3Bpbm5lclNlcnZpY2UuaGlkZSgpO1xyXG4gICAgICAgIHRoaXMudG9hc3RyLmVycm9yKHJlc3BvbnNlLm1lc3NhZ2UpXHJcbiAgICAgIH1cclxuICAgIH0pLmNhdGNoKChlcnI6IGFueSkgPT4ge1xyXG4gICAgICB0aGlzLnNwaW5uZXJTZXJ2aWNlLmhpZGUoKTtcclxuICAgICAgdGhpcy50b2FzdHIuZXJyb3IoZXJyLm1lc3NhZ2UpXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGdldFNlcXVlbmNlKGVsZW1lbnQpIHtcclxuICAgIGxldCByZXFPYmogPSB7fTtcclxuICAgIHJlcU9ialsnc2VxJ10gPSBlbGVtZW50Lmxvdl9xcnk7XHJcbiAgICB0aGlzLmhlYWRlclsnbWV0aG9kJ10gPSAnZ2V0U2VxJztcclxuICAgIGxldCBvcHRpb25zID0gKHsgaGVhZGVyczogbmV3IEh0dHBIZWFkZXJzKHRoaXMuaGVhZGVyKSB9KTtcclxuICAgIHRoaXMuc3MuZ2V0RGF0YShyZXFPYmosIG9wdGlvbnMpLnRoZW4oKHJlc3BvbnNlOiBhbnkpID0+IHtcclxuICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1cyA9PSAnU1VDQ0VTUycpIHtcclxuICAgICAgICB2YXIgc2VxID0gcmVzcG9uc2Uuc2VxO1xyXG4gICAgICAgIGVsZW1lbnQuZGVmYXVsdF92YWx1ZSA9IHNlcTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLnRvYXN0ci5lcnJvcihyZXNwb25zZS5tZXNzYWdlKVxyXG4gICAgICB9XHJcbiAgICB9KS5jYXRjaCgoZXJyOiBhbnkpID0+IHtcclxuICAgICAgdGhpcy50b2FzdHIuZXJyb3IoZXJyLm1lc3NhZ2UpXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIC8vbG9hZCBsb3YgZGF0YSBieSBwYXNzaW5nIHF1ZXJ5IHRvIGl0XHJcbiAgZ2V0TG92TGlzdCh0YmxGLCBwYWdlX2l0ZW1faWRuKSB7XHJcbiAgICBsZXQgcmVxT2JqID0ge307XHJcbiAgICByZXFPYmpbJ3BhZ2VfaXRlbV9pZG4nXSA9IHBhZ2VfaXRlbV9pZG47XHJcbiAgICB0aGlzLmhlYWRlclsnbWV0aG9kJ10gPSAnZ2V0RGF0YUJ5SXRlbUlkbic7XHJcbiAgICBsZXQgb3B0aW9ucyA9ICh7IGhlYWRlcnM6IG5ldyBIdHRwSGVhZGVycyh0aGlzLmhlYWRlcikgfSk7XHJcbiAgICB0aGlzLnNzLmdldERhdGEocmVxT2JqLCBvcHRpb25zKS50aGVuKChyZXNwb25zZTogYW55KSA9PiB7XHJcbiAgICAgIGlmIChyZXNwb25zZS5zdGF0dXMgPT0gJ1NVQ0NFU1MnKSB7XHJcbiAgICAgICAgZGVidWdnZXI7XHJcbiAgICAgICAgdGhpcy5sb3ZzID0gcmVzcG9uc2Uua3YubWFwKG9wdGlvbiA9PiAoe1xyXG4gICAgICAgICAgdmFsdWU6IG9wdGlvbi5rLFxyXG4gICAgICAgICAgbGFiZWw6IG9wdGlvbi52XHJcbiAgICAgICAgfSkpO1xyXG4gICAgICAgIHRoaXMuc3FsQXJyYXlbdGJsRl0gPSB0aGlzLmxvdnM7XHJcbiAgICAgICAgLy8gY29uc29sZS5sb2codGJsRiwgc3FsLCB0aGlzLmxvdnMpO1xyXG4gICAgICAgIC8vIGNvbnNvbGUubG9nKHRoaXMuc3FsQXJyYXlbdGJsRl0pXHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy50b2FzdHIuZXJyb3IocmVzcG9uc2UubWVzc2FnZSlcclxuICAgICAgfVxyXG4gICAgfSkuY2F0Y2goKGVycjogYW55KSA9PiB7XHJcbiAgICAgIHRoaXMudG9hc3RyLmVycm9yKGVyci5tZXNzYWdlKVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAvL2RlbGV0ZSBzcGVmaWNlZmljIGRhdGEgbGlzdFxyXG4gIGRlbGV0ZURhdGFMaXN0KCkge1xyXG4gICAgdGhpcy5zcGlubmVyU2VydmljZS5zaG93KCk7XHJcbiAgICBsZXQgcmVxT2JqID0ge307XHJcbiAgICByZXFPYmpbJ2Zvcm1ObWUnXSA9IHRoaXMucGFnZUluZm8uZm9ybV9ubWU7XHJcbiAgICByZXFPYmpbJ3BhZ2VUeXAnXSA9IHRoaXMucGFnZUluZm8ucGFnZV90eXA7XHJcbiAgICByZXFPYmpbJ3ByaW1hcnlLZXknXSA9IHRoaXMucGFnZUluZm8ucHJpbWFyeV9rZXlfZmllbGQ7XHJcbiAgICByZXFPYmpbJ3ByaW1hcnlJZCddID0gdGhpcy5waWQ7XHJcbiAgICByZXFPYmpbJ3RhYmxlTmFtZSddID0gdGhpcy5wYWdlSW5mby50YWJsZV9uYW1lO1xyXG4gICAgcmVxT2JqWyd0cm5zVHlwZSddID0gJ0RFTEVURSc7XHJcblxyXG4gICAgdGhpcy5oZWFkZXJbJ21ldGhvZCddID0gJ3NhdmUnO1xyXG4gICAgY29uc29sZS5sb2coSlNPTi5zdHJpbmdpZnkocmVxT2JqKSk7XHJcbiAgICBsZXQgb3B0aW9ucyA9ICh7IGhlYWRlcnM6IG5ldyBIdHRwSGVhZGVycyh0aGlzLmhlYWRlcikgfSk7XHJcbiAgICB0aGlzLnNzLmRlbGV0ZURhdGEocmVxT2JqLCBvcHRpb25zKS50aGVuKChyZXNwb25zZTogYW55KSA9PiB7XHJcbiAgICAgIGlmIChyZXNwb25zZS5zdGF0dXMgPT0gJ1NVQ0NFU1MnKSB7XHJcbiAgICAgICAgdGhpcy5nZXRQYWdlRGVmaW5hdGlvbigpO1xyXG4gICAgICAgIHRoaXMuZGVsZXRlY2xzYnRuLm5hdGl2ZUVsZW1lbnQuY2xpY2soKTtcclxuICAgICAgICB0aGlzLnNwaW5uZXJTZXJ2aWNlLmhpZGUoKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLnNwaW5uZXJTZXJ2aWNlLmhpZGUoKTtcclxuICAgICAgICB0aGlzLnRvYXN0ci5lcnJvcihyZXNwb25zZS5tZXNzYWdlKVxyXG4gICAgICB9XHJcbiAgICB9KS5jYXRjaCgoZXJyOiBhbnkpID0+IHtcclxuICAgICAgdGhpcy5zcGlubmVyU2VydmljZS5oaWRlKCk7XHJcbiAgICAgIHRoaXMudG9hc3RyLmVycm9yKGVyci5tZXNzYWdlKVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAvL2R5YW5hbWljIGZ1bmNhdGlvblxyXG4gIGNoa0Z1bihmbCwgZkRhdGEpIHtcclxuICAgIGlmIChmbC52YWxpZGF0aW9ucyA9PSAnJyB8fCBmbC52YWxpZGF0aW9ucyA9PSBudWxsKSB7IHJldHVybiB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgaWYgKGZsLnZhbGlkYXRpb25zID09ICd2YWxpZGF0ZVF1ZXJ5Jykge1xyXG4gICAgICAgIHRoaXMudmFsaWRhdGVRdWVyeShmbCwgZkRhdGEpXHJcbiAgICAgIH0gZWxzZSBpZiAoZmwudmFsaWRhdGlvbnMgPT0gJ2lzVW5pcXVlJykge1xyXG4gICAgICAgIHRoaXMuaXNVbmlxdWUoZmwsIGZEYXRhKTtcclxuICAgICAgfSBlbHNlIGlmIChmbC52YWxpZGF0aW9ucyA9PSAnc2V0bmFtZXByaW50Jykge1xyXG4gICAgICAgIHRoaXMuc2V0bmFtZXByaW50KGZsLCBmRGF0YSk7XHJcbiAgICAgIH0gZWxzZSBpZiAoZmwudmFsaWRhdGlvbnMgPT0gJ3NldGZhY3RvcicpIHtcclxuICAgICAgICB0aGlzLnNldGZhY3RvcihmbCwgZkRhdGEpO1xyXG4gICAgICB9IGVsc2UgaWYgKGZsLmZvcm1fZmllbGRfdHlwID09ICdzJykge1xyXG4gICAgICAgIGlmIChmbC52YWxpZGF0aW9ucyA9PSBudWxsKSB7IHJldHVybjsgfVxyXG4gICAgICAgIGxldCBzcSA9IGZsLnZhbGlkYXRpb25zLnJlcGxhY2UoLyNRVkFML2csIGZEYXRhKTtcclxuICAgICAgICAvLyB0aGlzLmdldExvdkxpc3QoZmwuY29sdW1uX2tleSwgc3EpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvL29uIHN1Ym1pdCBhY3Rpb24gY2hlY2tzIHZhbGlkYXRpb25cclxuICBvblN1Ym1pdChmb3JtVmFsLCBidG4pIHtcclxuICAgIGRlYnVnZ2VyXHJcbiAgICB2YXIgdCA9IE9iamVjdC5rZXlzKGZvcm1WYWwuZm9ybS5jb250cm9scykuZm9yRWFjaChmaWVsZCA9PiB7XHJcbiAgICAgIGRlYnVnZ2VyXHJcbiAgICAgIGNvbnN0IGNvbnRyb2wgPSBmb3JtVmFsLmZvcm0uZ2V0KGZpZWxkKTtcclxuICAgICAgY29udHJvbC5tYXJrQXNUb3VjaGVkKHsgb25seVNlbGY6IHRydWUgfSk7XHJcbiAgICB9KTtcclxuICAgIGlmIChmb3JtVmFsLmZvcm0udmFsaWQgPT0gdHJ1ZSkge1xyXG4gICAgICB0aGlzLmFkZGVkaXQoZm9ybVZhbC52YWx1ZSwgYnRuKTtcclxuICAgICAgLy8gIHRoaXMubG93ZXIoZm9ybVZhbC52YWx1ZSk7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc2V0bmFtZXByaW50KGZsLCBmRGF0YSkge1xyXG4gICAgZGVidWdnZXJcclxuICAgIGxldCBubWVJZG4gPSBmRGF0YTtcclxuICAgIGxldCBsaXN0ID0gdGhpcy5zcWxBcnJheVtmbC5mb3JtX2ZpZWxkXSB8fCBbXTtcclxuICAgIGxldCBubXdEdGwgPSBsaXN0LmZpbmQoeCA9PiB4LnZhbHVlID09IG5tZUlkbikgfHwgJyc7XHJcbiAgICBpZiAobm13RHRsICE9ICcnKSB7XHJcbiAgICAgIHRoaXMuZm9ybUZpbGRzLmZvckVhY2goZWxlbWVudCA9PiB7XHJcbiAgICAgICAgaWYgKGVsZW1lbnQuZm9ybV9maWVsZCA9PSAnbm1lJylcclxuICAgICAgICAgIGVsZW1lbnQuZGVmYXVsdF92YWx1ZSA9IG5td0R0bC5sYWJlbFxyXG4gICAgICAgIGlmIChlbGVtZW50LmZvcm1fZmllbGQgPT0gJ3ByaW50X25tZScpXHJcbiAgICAgICAgICBlbGVtZW50LmRlZmF1bHRfdmFsdWUgPSBubXdEdGwubGFiZWxcclxuXHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc2V0ZmFjdG9yKGZsLCBmRGF0YSkge1xyXG4gICAgbGV0IGZjdHIgPSAtMTtcclxuICAgIGlmIChmRGF0YSA9PSAnaW5jb21lJyB8fCBmRGF0YSA9PSAnYXNzZXRzJylcclxuICAgICAgZmN0ciA9IDE7XHJcbiAgICB0aGlzLmZvcm1GaWxkcy5mb3JFYWNoKGVsZW1lbnQgPT4ge1xyXG4gICAgICBpZiAoZWxlbWVudC5mb3JtX2ZpZWxkID09ICdmY3RyJylcclxuICAgICAgICBlbGVtZW50LmRlZmF1bHRfdmFsdWUgPSBmY3RyXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIG9uUG9wdXBTdWJtaXQoZm9ybVZhbCwgYnRuKSB7XHJcbiAgICBkZWJ1Z2dlclxyXG4gICAgdmFyIHQgPSBPYmplY3Qua2V5cyhmb3JtVmFsLmZvcm0uY29udHJvbHMpLmZvckVhY2goZmllbGQgPT4ge1xyXG4gICAgICBjb25zdCBjb250cm9sID0gZm9ybVZhbC5mb3JtLmdldChmaWVsZCk7XHJcbiAgICAgIGNvbnRyb2wubWFya0FzVG91Y2hlZCh7IG9ubHlTZWxmOiB0cnVlIH0pO1xyXG4gICAgfSk7XHJcbiAgICBpZiAoZm9ybVZhbC5mb3JtLnZhbGlkID09IHRydWUpIHtcclxuICAgICAgZGVidWdnZXJcclxuICAgICAgdGhpcy5hZGRQb3B1cEZybShmb3JtVmFsLnZhbHVlLCBidG4pO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGxvd2VyKHYpIHtcclxuICAgIHZhciBrZXksIGtleXMgPSBPYmplY3Qua2V5cyh2KTtcclxuICAgIHZhciBuID0ga2V5cy5sZW5ndGg7XHJcbiAgICB2YXIgbmV3b2JqID0ge31cclxuICAgIHdoaWxlIChuLS0pIHtcclxuICAgICAga2V5ID0ga2V5c1tuXTtcclxuICAgICAgbmV3b2JqW2tleV0gPSB0eXBlb2YgdltrZXldID09IFwic3RyaW5nXCIgPyB2W2tleV0udG9Mb3dlckNhc2UoKSA6IHZba2V5XTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vc3VibWl0IGRhdGFcclxuICBhZGRlZGl0KHYsIGJ0bikge1xyXG4gICAgdGhpcy5zcGlubmVyU2VydmljZS5zaG93KCk7XHJcbiAgICBsZXQgcmVxT2JqID0ge307XHJcbiAgICB2YXIgcGFnZVRQID0gdGhpcy5wYWdlSW5mby5wYWdlX3R5cC50cmltKCk7XHJcbiAgICByZXFPYmpbJ2Zvcm1ObWUnXSA9IHRoaXMucGFnZUluZm8uZm9ybV9ubWU7XHJcbiAgICByZXFPYmpbJ3ByaW1hcnlLZXknXSA9IHRoaXMucGFnZUluZm8ucHJpbWFyeV9rZXlfZmllbGQ7XHJcbiAgICByZXFPYmpbJ3BhZ2VUeXAnXSA9IHRoaXMucGFnZUluZm8ucGFnZV90eXA7XHJcbiAgICByZXFPYmpbJ3NlY29uZEtleUZpZWxkJ10gPSB0aGlzLnBhZ2VJbmZvLnNlY29uZF9rZXlfZmllbGQ7XHJcbiAgICByZXFPYmpbJ3ByaW1hcnlJZCddID0gdGhpcy5idG5OYW1lID09ICdBZGQnID8gJycgOiBcIlwiICsgdGhpcy5waWQ7XHJcbiAgICByZXFPYmpbJ3RhYmxlTmFtZSddID0gdGhpcy5wYWdlSW5mby50YWJsZV9uYW1lO1xyXG4gICAgcmVxT2JqWyd0cm5zVHlwZSddID0gdGhpcy5idG5OYW1lID09ICdBZGQnID8gJ0FERCcgOiAnRURJVCc7XHJcbiAgICByZXFPYmpbJ2RhdGFUcm5zRHRsJ10gPSB2O1xyXG4gICAgaWYgKHBhZ2VUUCA9PSAnanNvbkZvcm0nKSB7XHJcbiAgICAgIHJlcU9ialsnd2hlcmVLZXlzJ10gPSB0aGlzLnBhZ2VJbmZvLndoZXJlX2NsYXVzZTtcclxuICAgICAgcmVxT2JqWyd3aGVyZVZsdXMnXSA9IHRoaXMud2hlcmVNYXBbdGhpcy5wYWdlSW5mby53aGVyZV9jbGF1c2VdO1xyXG4gICAgfVxyXG4gICAgY29uc29sZS5sb2coSlNPTi5zdHJpbmdpZnkocmVxT2JqKSk7XHJcbiAgICB0aGlzLmhlYWRlclsnbWV0aG9kJ10gPSAnc2F2ZSc7XHJcbiAgICBsZXQgb3B0aW9ucyA9ICh7IGhlYWRlcnM6IG5ldyBIdHRwSGVhZGVycyh0aGlzLmhlYWRlcikgfSk7XHJcbiAgICBjb25zb2xlLmxvZyhKU09OLnN0cmluZ2lmeSh0aGlzLmhlYWRlcikpO1xyXG4gICAgdGhpcy5zcy5hZGREYXRhKHJlcU9iaiwgb3B0aW9ucykudGhlbigocmVzcG9uc2U6IGFueSkgPT4ge1xyXG4gICAgICBjb25zb2xlLmxvZyhyZXNwb25zZSk7XHJcbiAgICAgIGlmIChyZXNwb25zZS5zdGF0dXMgPT0gJ1NVQ0NFU1MnKSB7XHJcbiAgICAgICAgYnRuLmRpc2FibGVkID0gZmFsc2U7XHJcbiAgICAgICAgZGVidWdnZXI7XHJcbiAgICAgICAgaWYgKHRoaXMuYWN0aW9uID09ICduZXdjb250YWN0Jykge1xyXG4gICAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWycvY29udGFjdC9tYXN0ZXIvbmFtZU1hc3Rlci9ubWVfaWRuLycgKyByZXNwb25zZS5faWRdKTtcclxuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuYWN0aW9uID09ICduZXdhY2Njb250YWN0Jykge1xyXG4gICAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWycvYWNjb3VudHMvY29udGFjdC9tYXN0ZXIvYWNjTmFtZU1hc3Rlci9ubWVfaWRuLycgKyByZXNwb25zZS5faWRdKTtcclxuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuYWN0aW9uID09ICduZXdsZWRnZXInKSB7XHJcbiAgICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJy9hY2NvdW50cy9hZG1pbi9tYXN0ZXIvbGVkZ2VyTWFzdGVyL2xlZGdlcl9pZG4vJyArIHJlc3BvbnNlLl9pZF0pO1xyXG5cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy50YkNlbGwgPSBudWxsOyB0aGlzLnNlYXJjaEYgPSBudWxsO1xyXG4gICAgICAgICAgdGhpcy5jbG9zZWJ0bi5uYXRpdmVFbGVtZW50LmNsaWNrKCk7XHJcbiAgICAgICAgICBpZiAodGhpcy5hZGROZXcubG92X3FyeSA9PSBudWxsIHx8IHRoaXMuYWRkTmV3Lmxvdl9xcnkgPT0gXCJcIikge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5jdXJyc3RhdCA9PSBcInBvcHVwXCIpIHtcclxuICAgICAgICAgICAgICAvLyB0aGlzLnNldFN5c1NldHVwKHRoaXMuY29pZG4pO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIHRoaXMuZ2V0UGFnZURlZmluYXRpb24oKTtcclxuICAgICAgICAgICAgICB0aGlzLnNwaW5uZXJTZXJ2aWNlLmhpZGUoKTtcclxuICAgICAgICAgICAgICB0aGlzLnRvYXN0ci5zdWNjZXNzKHJlc3BvbnNlLm1lc3NhZ2UpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFt0aGlzLmFkZE5ldy5sb3ZfcXJ5LCByZXNwb25zZS5faWRdKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgYnRuLmRpc2FibGVkID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy50YkNlbGwgPSBudWxsO1xyXG4gICAgICAgIHRoaXMuc3Bpbm5lclNlcnZpY2UuaGlkZSgpO1xyXG4gICAgICAgIHRoaXMudG9hc3RyLmVycm9yKHJlc3BvbnNlLm1lc3NhZ2UpXHJcbiAgICAgIH1cclxuICAgIH0pLmNhdGNoKChlcnI6IGFueSkgPT4ge1xyXG4gICAgICBidG4uZGlzYWJsZWQgPSBmYWxzZTtcclxuICAgICAgdGhpcy50YkNlbGwgPSBudWxsO1xyXG4gICAgICB0aGlzLnNwaW5uZXJTZXJ2aWNlLmhpZGUoKTtcclxuICAgICAgdGhpcy50b2FzdHIuZXJyb3IoZXJyLm1lc3NhZ2UpXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGFkZFBvcHVwRnJtKHYsIGJ0bikge1xyXG4gICAgdGhpcy5zcGlubmVyU2VydmljZS5zaG93KCk7XHJcbiAgICBkZWJ1Z2dlcjtcclxuXHJcbiAgICBsZXQgcmVxT2JqID0ge307XHJcbiAgICB2YXIgcGFnZVRQID0gdGhpcy5wb3B1cHBhZ2VJbmZvLnBhZ2VfdHlwLnRyaW0oKTtcclxuICAgIHJlcU9ialsnZm9ybU5tZSddID0gdGhpcy5wb3B1cHBhZ2VJbmZvLmZvcm1fbm1lO1xyXG4gICAgcmVxT2JqWydwcmltYXJ5S2V5J10gPSB0aGlzLnBvcHVwcGFnZUluZm8ucHJpbWFyeV9rZXlfZmllbGQ7XHJcbiAgICByZXFPYmpbJ3BhZ2VUeXAnXSA9IHRoaXMucG9wdXBwYWdlSW5mby5wYWdlX3R5cDtcclxuICAgIHJlcU9ialsnc2Vjb25kS2V5RmllbGQnXSA9IHRoaXMucG9wdXBwYWdlSW5mby5zZWNvbmRfa2V5X2ZpZWxkO1xyXG4gICAgcmVxT2JqWydwcmltYXJ5SWQnXSA9ICcnOy8vdGhpcy5idG5OYW1lID09ICdBZGQnID8gJycgOiBcIlwiICsgdGhpcy5waWQ7XHJcbiAgICByZXFPYmpbJ3RhYmxlTmFtZSddID0gdGhpcy5wb3B1cHBhZ2VJbmZvLnRhYmxlX25hbWU7XHJcbiAgICByZXFPYmpbJ3RybnNUeXBlJ10gPSAnQUREJztcclxuICAgIHJlcU9ialsnZGF0YVRybnNEdGwnXSA9IHY7XHJcbiAgICBjb25zb2xlLmxvZyhcImFkZFwiLCBKU09OLnN0cmluZ2lmeShyZXFPYmopKTtcclxuICAgIHRoaXMuaGVhZGVyWydtZXRob2QnXSA9ICdzYXZlJztcclxuICAgIGxldCBvcHRpb25zID0gKHsgaGVhZGVyczogbmV3IEh0dHBIZWFkZXJzKHRoaXMuaGVhZGVyKSB9KTtcclxuICAgIHRoaXMuc3MuYWRkRGF0YShyZXFPYmosIG9wdGlvbnMpLnRoZW4oKHJlc3BvbnNlOiBhbnkpID0+IHtcclxuICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1cyA9PSAnU1VDQ0VTUycpIHtcclxuICAgICAgICBidG4uZGlzYWJsZWQgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLnNwaW5uZXJTZXJ2aWNlLmhpZGUoKTtcclxuICAgICAgICBkZWJ1Z2dlcjtcclxuICAgICAgICB0aGlzLnNldFN5c1NldHVwKHRoaXMucGlkKTtcclxuICAgICAgICB0aGlzLnBvcGNsb3NlYnRuLm5hdGl2ZUVsZW1lbnQuY2xpY2soKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBidG4uZGlzYWJsZWQgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLnNwaW5uZXJTZXJ2aWNlLmhpZGUoKTtcclxuICAgICAgICB0aGlzLnRvYXN0ci5lcnJvcihyZXNwb25zZS5tZXNzYWdlKVxyXG4gICAgICB9XHJcbiAgICB9KS5jYXRjaCgoZXJyOiBhbnkpID0+IHtcclxuICAgICAgYnRuLmRpc2FibGVkID0gZmFsc2U7XHJcbiAgICAgIHRoaXMuc3Bpbm5lclNlcnZpY2UuaGlkZSgpO1xyXG4gICAgICB0aGlzLnRvYXN0ci5lcnJvcihlcnIubWVzc2FnZSlcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgc2V0U3lzU2V0dXAoY29JZG4pIHtcclxuICAgIGRlYnVnZ2VyO1xyXG5cclxuICAgIGxldCByZXFPYmogPSB7fTtcclxuICAgIHJlcU9ialsnY29JZG4nXSA9IGNvSWRuO1xyXG4gICAgdGhpcy5oZWFkZXJbJ21ldGhvZCddID0gJ2NsaWVudFNldHVwJztcclxuICAgIGxldCBvcHRpb25zID0gKHsgaGVhZGVyczogbmV3IEh0dHBIZWFkZXJzKHRoaXMuaGVhZGVyKSB9KTtcclxuICAgIHRoaXMuc3MudmFsaWRhdGUocmVxT2JqLCBvcHRpb25zLCAnc3lzdGVtL3NldHVwJykudGhlbigocmVzcG9uc2U6IGFueSkgPT4ge1xyXG4gICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzID09ICdTVUNDRVNTJykge1xyXG4gICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdwb3BSZXNtb2RhbGJ0bicpLmNsaWNrKCk7XHJcbiAgICAgICAgdGhpcy5TeXNyZXN1bHQgPSByZXNwb25zZS5yZXN1bHQ7XHJcbiAgICAgIH1cclxuICAgIH0pLmNhdGNoKChlcnI6IGFueSkgPT4ge1xyXG4gICAgICB0aGlzLnNwaW5uZXJTZXJ2aWNlLmhpZGUoKTtcclxuICAgICAgdGhpcy50b2FzdHIuZXJyb3IoZXJyLm1lc3NhZ2UpXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIC8vdmFsaWRhdGUgcXVlcnlcclxuICB2YWxpZGF0ZVF1ZXJ5KHRibE9iaiwgZikge1xyXG4gICAgaWYgKGYgPT0gJycgfHwgZiA9PSBudWxsKSByZXR1cm47XHJcbiAgICBsZXQgcmVxT2JqID0ge307XHJcbiAgICByZXFPYmpbJ3NxbCddID0gZjtcclxuICAgIHRoaXMuaGVhZGVyWydtZXRob2QnXSA9ICd2YWxpZGF0ZVF1ZXJ5JztcclxuICAgIGxldCBvcHRpb25zID0gKHsgaGVhZGVyczogbmV3IEh0dHBIZWFkZXJzKHRoaXMuaGVhZGVyKSB9KTtcclxuICAgIGNvbnNvbGUubG9nKEpTT04uc3RyaW5naWZ5KHJlcU9iaikpO1xyXG4gICAgdGhpcy5zcy52YWxpZGF0ZShyZXFPYmosIG9wdGlvbnMsICdzeXN0ZW0vYXBwcGFnZXMnKS50aGVuKChyZXNwb25zZTogYW55KSA9PiB7XHJcbiAgICAgIGlmIChyZXNwb25zZS5zdGF0dXMgPT0gJ1NVQ0NFU1MnKSB7XHJcbiAgICAgICAgdGhpcy5vbkVyciA9ICcnO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuc3Bpbm5lclNlcnZpY2UuaGlkZSgpO1xyXG4gICAgICAgIHRoaXMub25FcnIgPSB0YmxPYmouZm9ybV9maWVsZDtcclxuICAgICAgICB0aGlzLnRvYXN0ci5lcnJvcihyZXNwb25zZS5tZXNzYWdlKVxyXG4gICAgICB9XHJcbiAgICB9KS5jYXRjaCgoZXJyOiBhbnkpID0+IHtcclxuICAgICAgdGhpcy5zcGlubmVyU2VydmljZS5oaWRlKCk7XHJcbiAgICAgIHRoaXMudG9hc3RyLmVycm9yKGVyci5tZXNzYWdlKVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAvL3ZhbGlkYXRlIHRoaXMgZmllbGQgdmFsdWUgaXMgdW5pcXVlXHJcbiAgaXNVbmlxdWUoZHRhT2JqLCBpbnB1VmFsKSB7XHJcbiAgICBpZiAoaW5wdVZhbCA9PSAnJyB8fCBpbnB1VmFsID09IG51bGwpIHJldHVybjtcclxuICAgIGxldCByZXFPYmogPSB7fTtcclxuICAgIHJlcU9ialsndGFibGVOYW1lJ10gPSB0aGlzLnBhZ2VJbmZvLnRhYmxlX25hbWU7XHJcbiAgICByZXFPYmpbJ3doZXJlS2V5cyddID0gZHRhT2JqLmZvcm1fZmllbGQ7XHJcbiAgICByZXFPYmpbJ3doZXJlVmx1cyddID0gaW5wdVZhbDtcclxuICAgIHJlcU9ialsncHJpbWFyeUtleSddID0gdGhpcy5wYWdlSW5mby5wcmltYXJ5X2tleV9maWVsZDtcclxuICAgIHJlcU9ialsncHJpbWFyeUlkJ10gPSB0aGlzLmJ0bk5hbWUgPT0gJ0FkZCcgPyAnJyA6IHRoaXMucGlkO1xyXG4gICAgdGhpcy5oZWFkZXJbJ21ldGhvZCddID0gJ3VuaXF1ZUNvblEnO1xyXG4gICAgbGV0IG9wdGlvbnMgPSAoeyBoZWFkZXJzOiBuZXcgSHR0cEhlYWRlcnModGhpcy5oZWFkZXIpIH0pO1xyXG4gICAgdGhpcy5zcy52YWxpZGF0ZShyZXFPYmosIG9wdGlvbnMsICdzeXN0ZW0vYXBwcGFnZXMnKS50aGVuKChyZXNwb25zZTogYW55KSA9PiB7XHJcbiAgICAgIGlmIChyZXNwb25zZS5zdGF0dXMgPT0gJ1NVQ0NFU1MnKSB7XHJcbiAgICAgICAgdGhpcy5vbkVyciA9ICcnO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuc3Bpbm5lclNlcnZpY2UuaGlkZSgpO1xyXG4gICAgICAgIHRoaXMub25FcnIgPSBkdGFPYmouZm9ybV9maWVsZDtcclxuICAgICAgICB0aGlzLnRvYXN0ci5lcnJvcihyZXNwb25zZS5tZXNzYWdlKVxyXG4gICAgICB9XHJcbiAgICB9KS5jYXRjaCgoZXJyOiBhbnkpID0+IHtcclxuICAgICAgdGhpcy5zcGlubmVyU2VydmljZS5oaWRlKCk7XHJcbiAgICAgIHRoaXMudG9hc3RyLmVycm9yKGVyci5tZXNzYWdlKVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBvblBhZ2VTaXplQ2hhbmdlKHApIHtcclxuICAgIGlmIChwID09ICdBbGwnKSB7XHJcbiAgICAgIHRoaXMucGFnZVNpemUgPSB0aGlzLmRhdGFsaXN0Lmxlbmd0aDtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMucGFnZVNpemUgPSBwO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy9zb3J0aW5nXHJcbiAgc2V0T3JkZXIodmFsdWU6IHN0cmluZywgaSkge1xyXG4gICAgdGhpcy5zaG93YXJyID0gaTtcclxuICAgIGlmICh0aGlzLm9yZGVyID09PSB2YWx1ZSkge1xyXG4gICAgICB0aGlzLnJldmVyc2UgPSAhdGhpcy5yZXZlcnNlO1xyXG4gICAgfVxyXG4gICAgdGhpcy5vcmRlciA9IHZhbHVlO1xyXG4gIH1cclxuXHJcbiAgLy9mb3Igc2V0IG51bGwgdG8gdGFibGUgY2VsbFxyXG4gIGNsb3NlTnVsbCA9ICgpID0+IHRoaXMudGJDZWxsID0gbnVsbDtcclxuXHJcbiAgLy9lZGl0IGNlbGwgb3BlbiBtb2RlbFxyXG4gIGVkaXRDZWxsKGQsIHRiaCkge1xyXG4gICAgdGhpcy5nbGJPYmogPSBkO1xyXG4gICAgdGhpcy50YkNlbGwgPSB0Ymg7XHJcbiAgICB0aGlzLnRpdGxlID0gZC50aXRsZTtcclxuICAgIHRoaXMuYnRuTmFtZSA9ICdFZGl0JztcclxuICAgIHRoaXMucGlkID0gZFt0aGlzLnBrZl07XHJcbiAgICB0aGlzLmdldEVkaXREYXRhKGRbdGhpcy5wa2ZdKTtcclxuICB9XHJcblxyXG4gIC8vbG9hZCBubWUgYXR0ciBkYXRhXHJcbiAgZ2V0TmFtZUF0dHIoZnJtbm1lKSB7XHJcbiAgICBsZXQgcmVxT2JqID0ge307XHJcbiAgICBsZXQgY3VzdE9iaiA9IHt9O1xyXG4gICAgcmVxT2JqWydmb3JtTm1lJ10gPSBmcm1ubWU7XHJcbiAgICByZXFPYmpbJ25tZUlkbiddID0gdGhpcy53aHJWO1xyXG4gICAgdGhpcy5oZWFkZXJbJ21ldGhvZCddID0gJ2xvYWRObWVBdHRyJztcclxuICAgIGxldCBvcHRpb25zID0gKHsgaGVhZGVyczogbmV3IEh0dHBIZWFkZXJzKHRoaXMuaGVhZGVyKSB9KTtcclxuICAgIHRoaXMuc3MudmFsaWRhdGUocmVxT2JqLCBvcHRpb25zLCAnc3lzdGVtL2FwcHBhZ2VzJykudGhlbigocmVzcG9uc2U6IGFueSkgPT4ge1xyXG4gICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzID09ICdTVUNDRVNTJykge1xyXG4gICAgICAgIHRoaXMudWlHcnBMaXN0ID0gcmVzcG9uc2UudWlHcnBMaXN0O1xyXG4gICAgICAgIHRoaXMudWlHcnBMaXN0RHRsID0gcmVzcG9uc2UudWlHcnBMaXN0RHRsO1xyXG4gICAgICAgIHRoaXMuZGF0YUR0bCA9IHJlc3BvbnNlLmRhdGFEdGw7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5zcGlubmVyU2VydmljZS5oaWRlKCk7XHJcbiAgICAgICAgdGhpcy50b2FzdHIuZXJyb3IocmVzcG9uc2UubWVzc2FnZSlcclxuICAgICAgfVxyXG4gICAgfSkuY2F0Y2goKGVycjogYW55KSA9PiB7XHJcbiAgICAgIHRoaXMuc3Bpbm5lclNlcnZpY2UuaGlkZSgpO1xyXG4gICAgICB0aGlzLnRvYXN0ci5lcnJvcihlcnIubWVzc2FnZSlcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLy9zYXZlIG5tZSBkYXRhIFxyXG4gIHNhdmVGdW4oaywgdikge1xyXG4gICAgdGhpcy5zcGlubmVyU2VydmljZS5zaG93KCk7XHJcbiAgICBsZXQgcmVxT2JqID0ge307XHJcbiAgICBsZXQgc3ViT2JqID0ge307XHJcbiAgICBzdWJPYmpba10gPSB2O1xyXG4gICAgcmVxT2JqWydmb3JtTm1lJ10gPSB0aGlzLmFkZEZybU5tZTtcclxuICAgIHJlcU9ialsnbm1lSWRuJ10gPSB0aGlzLndoclY7XHJcbiAgICByZXFPYmpbJ2RhdGFUcm5zRHRsJ10gPSBzdWJPYmo7XHJcbiAgICB0aGlzLmhlYWRlclsnbWV0aG9kJ10gPSAnc2F2ZU5tZUF0dHInO1xyXG4gICAgbGV0IG9wdGlvbnMgPSAoeyBoZWFkZXJzOiBuZXcgSHR0cEhlYWRlcnModGhpcy5oZWFkZXIpIH0pO1xyXG4gICAgdGhpcy5zcy5hZGREYXRhKHJlcU9iaiwgb3B0aW9ucykudGhlbigocmVzcG9uc2U6IGFueSkgPT4ge1xyXG4gICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzID09ICdTVUNDRVNTJykge1xyXG4gICAgICAgIHRoaXMuc3Bpbm5lclNlcnZpY2UuaGlkZSgpO1xyXG4gICAgICAgIHRoaXMudG9hc3RyLnN1Y2Nlc3MocmVzcG9uc2UubWVzc2FnZSk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5zcGlubmVyU2VydmljZS5oaWRlKCk7XHJcbiAgICAgICAgdGhpcy50b2FzdHIuZXJyb3IocmVzcG9uc2UubWVzc2FnZSlcclxuICAgICAgfVxyXG4gICAgfSkuY2F0Y2goKGVycjogYW55KSA9PiB7XHJcbiAgICAgIHRoaXMuc3Bpbm5lclNlcnZpY2UuaGlkZSgpO1xyXG4gICAgICB0aGlzLnRvYXN0ci5lcnJvcihlcnIubWVzc2FnZSlcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgbG9hZFN1Z2dkYXRhKHN0ciwgcGFnZV9pdGVtX2lkbiwgZm9ybV9maWVsZCkge1xyXG4gICAgaWYgKHN0ciA9PSB1bmRlZmluZWQgfHwgc3RyID09ICcnIHx8IHN0ci5sZW5ndGggPCAzKSByZXR1cm47XHJcbiAgICBsZXQgcmVxT2JqID0ge307XHJcbiAgICByZXFPYmpbXCJmb3JtTm1lXCJdID0gdGhpcy5yb3V0ZS5zbmFwc2hvdC5wYXJhbXNbXCJmcm1ubWVcIl0gfHwgJ2xvYWRTdWdnZXN0aW9uRGF0YSc7XHJcbiAgICByZXFPYmpbJ3BhZ2VfaXRlbV9pZG4nXSA9IHBhZ2VfaXRlbV9pZG47XHJcbiAgICByZXFPYmpbJ2xpa2VTdHInXSA9IHN0cjtcclxuICAgIHRoaXMuaGVhZGVyWydtZXRob2QnXSA9ICdsb2FkU3VnZ2VzdGlvbkRhdGFCeUl0ZW1JZG4nO1xyXG4gICAgY29uc29sZS5sb2codGhpcy5oZWFkZXIpO1xyXG4gICAgbGV0IG9wdGlvbnMgPSAoeyBoZWFkZXJzOiBuZXcgSHR0cEhlYWRlcnModGhpcy5oZWFkZXIpIH0pO1xyXG4gICAgY29uc29sZS5sb2coSlNPTi5zdHJpbmdpZnkocmVxT2JqKSk7XHJcbiAgICAvLyBjb25zb2xlLmxvZyh0aGlzLmhlYWRlcik7XHJcbiAgICB0aGlzLmNzLmxvYWQocmVxT2JqLCBvcHRpb25zLCBcImNvbnRhY3QvcmVnaXN0ZXJEYXRhXCIpLnRoZW4oKHJlc3BvbnNlOiBhbnkpID0+IHtcclxuICAgICAgY29uc29sZS5sb2cocmVzcG9uc2UpO1xyXG4gICAgICBsZXQgcmVzdWx0ID0gcmVzcG9uc2UucmVzdWx0O1xyXG4gICAgICBsZXQgc3VnZ2VzdGlvbkRhdGEgPSByZXN1bHQuc3VnZ2VzdGlvbkRhdGEgfHwgW107XHJcbiAgICAgIGxldCBsaXN0ID0gc3VnZ2VzdGlvbkRhdGEubWFwKG9wdGlvbiA9PiAoe1xyXG4gICAgICAgIHZhbHVlOiBvcHRpb24uayxcclxuICAgICAgICBsYWJlbDogb3B0aW9uLnZcclxuICAgICAgfSkpO1xyXG4gICAgICB0aGlzLnNxbEFycmF5W2Zvcm1fZmllbGRdID0gbGlzdDtcclxuICAgIH0pXHJcblxyXG4gIH1cclxuXHJcbiAgLy8gZmwgPSBcInNlbGVjdCB0YWJsZV9jYXRhbG9nfHwnICd8fHRhYmxlX25hbWUgayAsIHRhYmxlX25hbWUgdiBmcm9tIGluZm9ybWF0aW9uX3NjaGVtYS50YWJsZXMgd2hlcmUgdGFibGVfc2NoZW1hID0gJ3B1YmxpYycgYW5kIHRhYmxlX3R5cGUgPSAnQkFTRSBUQUJMRScgIGFuZCB0YWJsZV9uYW1lIGxpa2UgJyNJTlBVVCUnIGFuZCB0YWJsZV9uYW1lPUNPQUxFU0NFKG51bGwsdGFibGVfbmFtZSkgb3JkZXIgYnkgMTtcIlxyXG5cclxuICAvLyBzdWdnZXN0RGF0YTphbnkgPSBbXTtcclxuXHJcbiAgLy8gZ2V0U3VnZ2V0aW9uKHNjVCkge1xyXG4gIC8vICAgaWYgKHNjVCA9PSAnJyB8fCBzY1QgPT0gbnVsbCkgcmV0dXJuO1xyXG4gIC8vICAgbGV0IHNxID0gdGhpcy5mbC5yZXBsYWNlKC8jSU5QVVQvZywgc2NUKTtcclxuICAvLyAgIGxldCByZXFPYmogPSB7fTtcclxuICAvLyAgIHJlcU9ialsnc3FsJ10gPSBzcTtcclxuICAvLyAgIHRoaXMuaGVhZGVyWydtZXRob2QnXSA9ICdnZXREYXRhJztcclxuICAvLyAgIGxldCBvcHRpb25zID0gKHsgaGVhZGVyczogbmV3IEh0dHBIZWFkZXJzKHRoaXMuaGVhZGVyKSB9KTtcclxuICAvLyAgIHRoaXMuc3MudmFsaWRhdGUocmVxT2JqLCBvcHRpb25zKS50aGVuKChyZXNwb25zZTogYW55KSA9PiB7XHJcbiAgLy8gICAgIGlmIChyZXNwb25zZS5zdGF0dXMgPT0gJ1NVQ0NFU1MnKSB7XHJcbiAgLy8gICAgICAgdGhpcy5zdWdnZXN0RGF0YSA9IHJlc3BvbnNlLmt2O1xyXG4gIC8vICAgICB9IGVsc2Uge1xyXG4gIC8vICAgICAgIHRoaXMuc3Bpbm5lclNlcnZpY2UuaGlkZSgpO1xyXG4gIC8vICAgICAgIHRoaXMudG9hc3RyLmVycm9yKHJlc3BvbnNlLm1lc3NhZ2UpXHJcbiAgLy8gICAgIH1cclxuICAvLyAgIH0pLmNhdGNoKChlcnI6IGFueSkgPT4ge1xyXG4gIC8vICAgICB0aGlzLnNwaW5uZXJTZXJ2aWNlLmhpZGUoKTtcclxuICAvLyAgICAgdGhpcy50b2FzdHIuZXJyb3IoZXJyLm1lc3NhZ2UpXHJcbiAgLy8gICB9KTtcclxuICAvLyB9XHJcblxyXG4gIC8vIG5hKCl7XHJcbiAgLy8gICB0aGlzLmlucHV0Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcclxuICAvLyAgIHRoaXMuc3VnZ2VzdERhdGEgPSBbXTtcclxuICAvLyB9XHJcblxyXG5cclxuICAvL2hpZGUgc2hvdyBwYXNzd29yZCBmaWVsZCB0ZXh0XHJcblxyXG4gIHNob3dISWRlUGFzcygpIHtcclxuICAgIHRoaXMuZXN0c3QgPSAhdGhpcy5lc3RzdDtcclxuICAgIGlmICh0aGlzLmVzdHN0KSB7XHJcbiAgICAgIHRoaXMuZXZlQyA9ICdmYS1leWUnO1xyXG4gICAgICB0aGlzLmlucHV0dHlwZSA9ICd0ZXh0JztcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuZXZlQyA9ICdmYS1leWUtc2xhc2gnO1xyXG4gICAgICB0aGlzLmlucHV0dHlwZSA9ICdwYXNzd29yZCc7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvL3Jlc2V0aW5nIGZvcm1cclxuICByZXNldCA9IHYgPT4gdi5mb3JtLnJlc2V0KCk7XHJcblxyXG4gIG5nT25Jbml0KCkge1xyXG4gICAgLy9nbG9ibGUgaGVhZGVyIHBhcmFtZXRlclxyXG4gICAgbGV0IG1kbGsgPSBKU09OLnBhcnNlKGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdtZGxLZXknKSk7XHJcbiAgICBsZXQgbWRsS2V5ID0gT2JqZWN0LmtleXMobWRsayk7XHJcbiAgICB0aGlzLmNVcmwgPSB0aGlzLnJvdXRlci51cmw7XHJcbiAgICB0aGlzLmhlYWRlciA9IHtcclxuICAgICAgJ2NsaWVudGtleSc6IENvb2tpZS5nZXQoJ19jaycpLFxyXG4gICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLFxyXG4gICAgICAnbW9kdWxla2V5JzogbWRsa1t0aGlzLmNVcmwuc3BsaXQoJy8nKVsxXV0sXHJcbiAgICAgICdsb2dpbmlkJzogQ29va2llLmdldCgnX2xvZ2lkJyksXHJcbiAgICAgICdzb3VyY2UnOiAncXMnXHJcbiAgICB9O1xyXG4gICAgbGV0IGNvbXBhbnlEdGwgPSBKU09OLnBhcnNlKENvb2tpZS5nZXQoJ19hY2NDb21wYW55JykpIHx8IHt9O1xyXG4gICAgbGV0IHllYXJEdGwgPSBKU09OLnBhcnNlKENvb2tpZS5nZXQoJ19hY2N5ZWFyJykpIHx8IHt9O1xyXG4gICAgbGV0IHN1Yl9jb19pZG4gPSAoY29tcGFueUR0bFtcInN1Yl9jb19pZG5cIl0gfHwgJycpLnRvU3RyaW5nKCk7XHJcbiAgICBsZXQgZmluX3llYXJfaWRuID0gKHllYXJEdGxbXCJmaW5feWVhcl9pZG5cIl0gfHwgJycpLnRvU3RyaW5nKCk7XHJcbiAgICBpZiAoc3ViX2NvX2lkbiAhPSAnJykge1xyXG4gICAgICB0aGlzLmhlYWRlclsnc3ViY29taWRuJ10gPSBzdWJfY29faWRuO1xyXG4gICAgICB0aGlzLmhlYWRlclsneWVhcmlkbiddID0gZmluX3llYXJfaWRuO1xyXG4gICAgfVxyXG4gICAgLy9vbiBmb3JtIG5hbWUgY2hhbmdlXHJcbiAgICB0aGlzLnJvdXRlLnBhcmFtcy5zdWJzY3JpYmUoKHBhcmFtczogUGFyYW1zKSA9PiB7XHJcbiAgICAgIHRoaXMuc3ViRnJtV2sgPSBudWxsO1xyXG4gICAgICB0aGlzLndocksgPSBcIjFcIjtcclxuICAgICAgdGhpcy53aHJWID0gXCIxXCI7XHJcbiAgICAgIHRoaXMucGFyYU9ialsnZm9ybU5tZSddID0gcGFyYW1zWydmcm1ubWUnXTtcclxuICAgICAgdGhpcy5zZWFyY2hGID0gbnVsbDtcclxuICAgICAgdGhpcy5maWxsQXBwKClcclxuICAgICAgdGhpcy5jTGluayA9IDA7XHJcbiAgICAgIHRoaXMucCA9IDE7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGZpbGxBcHAoKSB7XHJcbiAgICB0aGlzLnNwaW5uZXJTZXJ2aWNlLnNob3coKTtcclxuICAgIGNvbnN0IHJlcU9iaiA9IHt9O1xyXG4gICAgcmVxT2JqW1wiZm9ybU5tZVwiXSA9IHRoaXMucm91dGUuc25hcHNob3QucGFyYW1zWydmcm1ubWUnXTtcclxuICAgIHRoaXMuaGVhZGVyWydtZXRob2QnXSA9ICdsb2FkJztcclxuICAgY29uc3Qgb3B0aW9ucyA9ICh7IGhlYWRlcnM6IG5ldyBIdHRwSGVhZGVycyh0aGlzLmhlYWRlcikgfSk7XHJcbiAgICBjb25zb2xlLmxvZyhcInRoaXMuaGVhZGVyXCIsIHRoaXMuaGVhZGVyKTtcclxuICAgIHRoaXMuYXMuZ2V0TWVudVJpZ2h0cyhyZXFPYmosIG9wdGlvbnMpLnRoZW4oKHJlc3BvbnNlOiBhbnkpID0+IHtcclxuICAgICAgY29uc29sZS5sb2cocmVzcG9uc2UpO1xyXG4gICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzID09ICdTVUNDRVNTJykge1xyXG4gICAgICAgIHRoaXMuYXBwbGljYXRpb25MaXN0ID0gcmVzcG9uc2UuYXBwbGljYXRpb25MaXN0O1xyXG4gICAgICAgIHRoaXMuZ2V0UGFnZURlZmluYXRpb24oKTtcclxuICAgICAgICB0aGlzLnNwaW5uZXJTZXJ2aWNlLmhpZGUoKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLnNwaW5uZXJTZXJ2aWNlLmhpZGUoKTtcclxuICAgICAgICB0aGlzLnRvYXN0ci5lcnJvcihyZXNwb25zZS5tZXNzYWdlKTtcclxuICAgICAgfVxyXG4gICAgfSkuY2F0Y2goKGVycjogYW55KSA9PiB7XHJcbiAgICAgIHRoaXMuc3Bpbm5lclNlcnZpY2UuaGlkZSgpO1xyXG4gICAgICB0aGlzLnRvYXN0ci5lcnJvcihlcnIubWVzc2FnZSk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGZpbGxNb2R1bGUoYXBwbElkKSB7XHJcbiAgICBpZihhcHBsSWQgPT0gJycpIHtcclxuICAgICAgdGhpcy5tZGxsaXN0ID0gW107XHJcbiAgICAgIHRoaXMubWVudWx2bDFMaXN0ID0gW107XHJcbiAgICAgIHRoaXMubWVudWx2bDJMaXN0ID0gW107XHJcbiAgICAgIHRoaXMubWVudWx2bDNMaXN0ID0gW107XHJcbiAgICAgIHRoaXMudG9hc3RyLndhcm5pbmcoJ1BsZWFzZSBTZWxlY3QgQXBwbGljYXRpb24nKTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICB0aGlzLnNwaW5uZXJTZXJ2aWNlLnNob3coKTtcclxuICAgICAgY29uc3QgcmVxT2JqID0ge307XHJcbiAgICAgIHJlcU9ialtcImZvcm1ObWVcIl0gPSAgdGhpcy5yb3V0ZS5zbmFwc2hvdC5wYXJhbXNbJ2ZybW5tZSddO1xyXG4gICAgICByZXFPYmpbXCJhcHBsY2F0aW9uSWRuXCJdID0gYXBwbElkO1xyXG4gICAgICB0aGlzLmhlYWRlclsnbWV0aG9kJ10gPSAnbG9hZE1vZHVsZSc7XHJcbiAgICAgIGNvbnN0IG9wdGlvbnMgPSAoeyBoZWFkZXJzOiBuZXcgSHR0cEhlYWRlcnModGhpcy5oZWFkZXIpIH0pO1xyXG4gICAgICB0aGlzLmFzLmdldE1lbnVSaWdodHMocmVxT2JqLCBvcHRpb25zKS50aGVuKChyZXNwb25zZTogYW55KSA9PiB7XHJcbiAgICAgICAgY29uc29sZS5sb2cocmVzcG9uc2UpO1xyXG4gICAgICAgIGlmIChyZXNwb25zZS5zdGF0dXMgPT0gJ1NVQ0NFU1MnKSB7XHJcbiAgICAgICAgICB0aGlzLm1kbGxpc3QgPSByZXNwb25zZS5tb2R1bGVMaXN0O1xyXG4gICAgICAgICAgdGhpcy5zcGlubmVyU2VydmljZS5oaWRlKCk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMuc3Bpbm5lclNlcnZpY2UuaGlkZSgpO1xyXG4gICAgICAgICAgdGhpcy50b2FzdHIuZXJyb3IocmVzcG9uc2UubWVzc2FnZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KS5jYXRjaCgoZXJyOiBhbnkpID0+IHtcclxuICAgICAgICB0aGlzLnNwaW5uZXJTZXJ2aWNlLmhpZGUoKTtcclxuICAgICAgICB0aGlzLnRvYXN0ci5lcnJvcihlcnIubWVzc2FnZSk7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZmlsbExldmVsMShtb2R1bGVfaWRuKSB7XHJcbiAgICB0aGlzLnNwaW5uZXJTZXJ2aWNlLnNob3coKTtcclxuICAgIGNvbnNvbGUubG9nKG1vZHVsZV9pZG4pXHJcbiAgICBjb25zdCByZXFPYmogPSB7fTtcclxuICAgIHJlcU9ialtcImZvcm1ObWVcIl0gPSBcIm1lbnVSaWdodHNNYXN0ZXJcIjtcclxuICAgIHJlcU9ialtcIm1vZHVsZUlkblwiXSA9IG1vZHVsZV9pZG47XHJcbiAgICB0aGlzLmhlYWRlclsnbWV0aG9kJ10gPSAnbG9hZE1lbnVsZXZlbDEnO1xyXG4gICAgY29uc3Qgb3B0aW9ucyA9ICh7IGhlYWRlcnM6IG5ldyBIdHRwSGVhZGVycyh0aGlzLmhlYWRlcikgfSk7XHJcbiAgICB0aGlzLmFzLmdldE1lbnVSaWdodHMocmVxT2JqLCBvcHRpb25zKS50aGVuKChyZXNwb25zZTogYW55KSA9PiB7XHJcbiAgICAgIGNvbnNvbGUubG9nKHJlc3BvbnNlKTtcclxuICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1cyA9PSAnU1VDQ0VTUycpIHtcclxuICAgICAgICB0aGlzLm1lbnVsdmwyTGlzdCA9IFtdO1xyXG4gICAgICAgIHRoaXMubWVudWx2bDNMaXN0ID0gW107XHJcbiAgICAgICAgdGhpcy5tZW51bHZsMUxpc3QgPSByZXNwb25zZS5rdjtcclxuICAgICAgICB0aGlzLnNwaW5uZXJTZXJ2aWNlLmhpZGUoKTtcclxuXHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5zcGlubmVyU2VydmljZS5oaWRlKCk7XHJcbiAgICAgICAgdGhpcy50b2FzdHIuZXJyb3IocmVzcG9uc2UubWVzc2FnZSk7XHJcbiAgICAgIH1cclxuICAgIH0pLmNhdGNoKChlcnI6IGFueSkgPT4ge1xyXG4gICAgICB0aGlzLnNwaW5uZXJTZXJ2aWNlLmhpZGUoKTtcclxuICAgICAgdGhpcy50b2FzdHIuZXJyb3IoZXJyLm1lc3NhZ2UpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBmaWxsTGV2ZWwyKG1vZHVsZV9pZG4sIG1lbnVJZG4pIHtcclxuICAgIHRoaXMuc3Bpbm5lclNlcnZpY2Uuc2hvdygpO1xyXG4gICAgY29uc29sZS5sb2cobW9kdWxlX2lkbik7XHJcbiAgICBjb25zb2xlLmxvZyhtZW51SWRuKTtcclxuICAgIGNvbnN0IHJlcU9iaiA9IHt9O1xyXG4gICAgcmVxT2JqW1wiZm9ybU5tZVwiXSA9IFwibWVudVJpZ2h0c01hc3RlclwiO1xyXG4gICAgcmVxT2JqW1wibW9kdWxlSWRuXCJdID0gbW9kdWxlX2lkbjtcclxuICAgIHJlcU9ialtcIm1lbnVJZG5cIl0gPSBtZW51SWRuO1xyXG4gICAgdGhpcy5oZWFkZXJbJ21ldGhvZCddID0gJ2xvYWRNZW51bGV2ZWwyJztcclxuICAgY29uc3Qgb3B0aW9ucyA9ICh7IGhlYWRlcnM6IG5ldyBIdHRwSGVhZGVycyh0aGlzLmhlYWRlcikgfSk7XHJcbiAgICB0aGlzLmFzLmdldE1lbnVSaWdodHMocmVxT2JqLCBvcHRpb25zKS50aGVuKChyZXNwb25zZTogYW55KSA9PiB7XHJcbiAgICAgIGNvbnNvbGUubG9nKHJlc3BvbnNlKTtcclxuICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1cyA9PSAnU1VDQ0VTUycpIHtcclxuICAgICAgICB0aGlzLm1lbnVsdmwyTGlzdCA9IHJlc3BvbnNlLmt2O1xyXG4gICAgICAgIHRoaXMubWVudWx2bDNMaXN0ID0gW107XHJcbiAgICAgICAgdGhpcy5zcGlubmVyU2VydmljZS5oaWRlKCk7XHJcbiAgICAgICAgY29uc29sZS5sb2codGhpcy5tZW51bHZsMkxpc3QpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuc3Bpbm5lclNlcnZpY2UuaGlkZSgpO1xyXG4gICAgICAgIHRoaXMudG9hc3RyLmVycm9yKHJlc3BvbnNlLm1lc3NhZ2UpO1xyXG4gICAgICB9XHJcbiAgICB9KS5jYXRjaCgoZXJyOiBhbnkpID0+IHtcclxuICAgICAgdGhpcy5zcGlubmVyU2VydmljZS5oaWRlKCk7XHJcbiAgICAgIHRoaXMudG9hc3RyLmVycm9yKGVyci5tZXNzYWdlKTtcclxuICAgIH0pO1xyXG5cclxuICB9XHJcblxyXG4gIHN1Ym1lbnVDaGFuZ2UobW9kdWxlX2lkbiwgc3VibWVudUlkbikge1xyXG4gICAgdGhpcy5zcGlubmVyU2VydmljZS5zaG93KCk7XHJcbiAgICBjb25zdCByZXFPYmogPSB7fTtcclxuICAgIHJlcU9ialtcImZvcm1ObWVcIl0gPSBcIm1lbnVSaWdodHNNYXN0ZXJcIjtcclxuICAgIHJlcU9ialtcIm1vZHVsZUlkblwiXSA9IG1vZHVsZV9pZG47XHJcbiAgICByZXFPYmpbXCJtZW51SWRuXCJdID0gc3VibWVudUlkbjtcclxuICAgIHRoaXMuaGVhZGVyWydtZXRob2QnXSA9ICdsb2FkTWVudWxldmVsMyc7XHJcbiAgICBjb25zdCBvcHRpb25zID0gKHsgaGVhZGVyczogbmV3IEh0dHBIZWFkZXJzKHRoaXMuaGVhZGVyKSB9KTtcclxuICAgIHRoaXMuYXMuZ2V0TWVudVJpZ2h0cyhyZXFPYmosIG9wdGlvbnMpLnRoZW4oKHJlc3BvbnNlOiBhbnkpID0+IHtcclxuICAgICAgY29uc29sZS5sb2cocmVzcG9uc2UpO1xyXG4gICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzID09ICdTVUNDRVNTJykge1xyXG4gICAgICAgIHRoaXMubWVudWx2bDNMaXN0ID0gcmVzcG9uc2Uua3Y7XHJcbiAgICAgICAgdGhpcy5zcGlubmVyU2VydmljZS5oaWRlKCk7XHJcbiAgICAgICAgY29uc29sZS5sb2codGhpcy5tZW51bHZsM0xpc3QpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuc3Bpbm5lclNlcnZpY2UuaGlkZSgpO1xyXG4gICAgICAgIHRoaXMudG9hc3RyLmVycm9yKHJlc3BvbnNlLm1lc3NhZ2UpO1xyXG4gICAgICB9XHJcbiAgICB9KS5jYXRjaCgoZXJyOiBhbnkpID0+IHtcclxuICAgICAgdGhpcy5zcGlubmVyU2VydmljZS5oaWRlKCk7XHJcbiAgICAgIHRoaXMudG9hc3RyLmVycm9yKGVyci5tZXNzYWdlKTtcclxuICAgIH0pO1xyXG5cclxuICB9XHJcblxyXG4gIG9wZW5Ub2coKSB7XHJcbiAgICB0aGlzLmlzT3BlbiA9ICF0aGlzLmlzT3BlbjtcclxuICAgIGlmICh0aGlzLmlzT3BlbiA9PSB0cnVlKSB7XHJcbiAgICAgIHRoaXMuaWNvbiA9ICdmYSBmYS1kZWRlbnQnO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5pY29uID0gJ2ZhIGZhLWluZGVudCc7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxufVxyXG4vLyBpZiAodGhpcy53aHJWICE9IG51bGwgJiYgdGhpcy5zdWJGcm1XayAhPSBudWxsKSB7XHJcbi8vICAgaWYgKHRoaXMuc3ViRnJtV3YgIT0gJ0FMTCcpIHtcclxuLy8gICAgIHRoaXMucGFyYU9ialsnd2hlcmVLZXlzJ10gPSB0aGlzLndocksgKyAnficgKyB0aGlzLnN1YkZybVdrO1xyXG4vLyAgICAgdGhpcy5wYXJhT2JqWyd3aGVyZVZsdXMnXSA9ICcnICsgdGhpcy53aHJWICsgJ34nICsgdGhpcy5zdWJGcm1XdjtcclxuLy8gICB9IGVsc2Uge1xyXG4vLyAgICAgdGhpcy5wYXJhT2JqWyd3aGVyZUtleXMnXSA9IHRoaXMud2hySztcclxuLy8gICAgIHRoaXMucGFyYU9ialsnd2hlcmVWbHVzJ10gPSAnJyArIHRoaXMud2hyVjtcclxuLy8gICB9XHJcbi8vICAgdGhpcy53aGVyZU1hcFt0aGlzLnN1YkZybVdrXSA9IHRoaXMuc3ViRnJtV3Y7XHJcbi8vIH0iLCI8ZGl2IGNsYXNzPVwibXRcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJwYW5lbCBwYW5lbC1kZWZhdWx0XCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInBhbmVsLWhlYWRpbmdcIj5cclxuICAgICAgICAgICAgPGgzIGNsYXNzPVwicGFuZWwtdGl0bGVcIj57e3BhZ2VJbmZvPy50aXRsZX19XHJcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImYtMTJcIj4oe3tjRHQgfCBkYXRlOidtZWRpdW0nfX0pPC9zcGFuPlxyXG4gICAgICAgICAgICA8L2gzPlxyXG4gICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBpZD1cImFkZEJ0blwiIGNsYXNzPVwiYnRuIGJ0bi1pbmZvIHB1bGwtcmlnaHRcIiAqbmdJZj1cImFkZE5ldz8uaXNfY29tcHVsc29yeSA9PSAxXCJcclxuICAgICAgICAgICAgICAgIChjbGljayk9XCJ1c2VyQWN0aW9uKGRhdGEsICdhZGQnLCAnJyk7Zi5yZXNldCgpO1wiPnt7YWRkTmV3Py5mb3JtX2ZpZWxkX3RpdGxlfX08L2J1dHRvbj5cclxuXHJcblxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2IGNsYXNzPVwicm93XCIgKm5nSWY9XCJyb3V0ZXIudXJsICE9IGN1cmxcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTJcIiAqbmdJZj1cIm5hdmlnYXRpb24ubGVuZ3RoID4gMFwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicGFuZWwgcGFuZWwtZGVmYXVsdFwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInBhbmVsLWJvZHlcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibGlzdC1ncm91cCBib3JkZXItYm90dG9tXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9XCJqYXZhc2NyaXB0OnZvaWQoMClcIiBjbGFzcz1cImxpc3QtZ3JvdXAtaXRlbVwiIFtuZ0NsYXNzXT1cInsnYWN0aXZlJyA6aSA9PSBjTGlua31cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IG5hdiBvZiBuYXZpZ2F0aW9uO2xldCBpPWluZGV4XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJuYXZpZ2F0aW9uRnVuKG5hdixpKTtcIj57e25hdi5mb3JtX2ZpZWxkX3RpdGxlfX0gPC9hPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgW25nQ2xhc3NdPVwiaXNPcGVuID09IHRydWUgPyAnY29sLW1kLTQnIDogJ2hpZGRlbidcIiAqbmdJZj1cInJvdXRlLnNuYXBzaG90LnBhcmFtc1snZnJtbm1lJ10gPT0gJ21lbnVNYXN0ZXInXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgZm9ybS1ncm91cFwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC00XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiY29udHJvbC1sYWJlbFwiIHN0eWxlPVwidGV4dC1hbGlnbjogcmlnaHRcIj5BcHBsaWNhdGlvbjwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC04XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWdyb3VwIHctMTAwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzZWxlY3QgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBbKG5nTW9kZWwpXT1cImFwcFwiIG5hbWU9XCJhcHBcIiAoY2hhbmdlKT1cImZpbGxNb2R1bGUoYXBwKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiAqbmdGb3I9XCJsZXQgbG92IG9mIGFwcGxpY2F0aW9uTGlzdFwiIHZhbHVlPVwie3tsb3Yua319XCI+e3tsb3Yudn19PC9vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zZWxlY3Q+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvdyBmb3JtLWdyb3VwXCIgKm5nSWY9XCJtZGxsaXN0Py5sZW5ndGggPiAxIFwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0nY29sLW1kLTQnPlxyXG4gICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImNvbnRyb2wtbGFiZWxcIiBzdHlsZT1cInRleHQtYWxpZ246IHJpZ2h0XCI+TW9kdWxlPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLThcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtZ3JvdXAgdy0xMDBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHNlbGVjdCBjbGFzcz1cImZvcm0tY29udHJvbFwiIFsobmdNb2RlbCldPVwidlwiIG5hbWU9XCJ2XCIgIChjaGFuZ2UpPVwiZmlsbExldmVsMSh2KVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiAqbmdGb3I9XCJsZXQgbG92IG9mIG1kbGxpc3RcIiB2YWx1ZT1cInt7bG92Lmt9fVwiPnt7bG92LnZ9fTwvb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3NlbGVjdD5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8IS0tIDxkaXYgY2xhc3M9XCJyb3cgZm9ybS1ncm91cFwiICpuZ0lmPVwibWVudWx2bDFMaXN0Py5sZW5ndGggPiAxIFwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC00XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiY29udHJvbC1sYWJlbFwiIHN0eWxlPVwidGV4dC1hbGlnbjogcmlnaHRcIj5NYWluIE1lbnU8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtOFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ncm91cCB3LTEwMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c2VsZWN0IGNsYXNzPVwiZm9ybS1jb250cm9sXCIgWyhuZ01vZGVsKV09XCJ2MVwiIG5hbWU9XCJ2MVwiIChjaGFuZ2UpPVwiZmlsbExldmVsMih2LHYxKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiAqbmdGb3I9XCJsZXQgbG92IG9mIG1lbnVsdmwxTGlzdFwiIHZhbHVlPVwie3tsb3Yua319XCI+e3tsb3Yudn19PC9vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc2VsZWN0PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+IC0tPlxyXG5cclxuICAgICAgICAgICAgPCEtLSA8ZGl2IGNsYXNzPVwicm93IGZvcm0tZ3JvdXBcIiAqbmdJZj1cIm1lbnVsdmwyTGlzdD8ubGVuZ3RoID4gMSBcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImNvbnRyb2wtbGFiZWxcIiBzdHlsZT1cInRleHQtYWxpZ246IHJpZ2h0XCI+U3ViIE1lbnU8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtOFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ncm91cCB3LTEwMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c2VsZWN0IGNsYXNzPVwiZm9ybS1jb250cm9sXCIgWyhuZ01vZGVsKV09XCJ2MlwiIG5hbWU9XCJ2MlwiIChjaGFuZ2UpPVwic3VibWVudUNoYW5nZSh2LCB2MilcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gKm5nRm9yPVwibGV0IGxvdiBvZiBtZW51bHZsMkxpc3RcIiB2YWx1ZT1cInt7bG92Lmt9fVwiPnt7bG92LnZ9fTwvb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvc2VsZWN0PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93IGZvcm0tZ3JvdXBcIiAqbmdJZj1cIm1lbnVsdmwzTGlzdD8ubGVuZ3RoID4gMSBcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImNvbnRyb2wtbGFiZWxcIiBzdHlsZT1cInRleHQtYWxpZ246IHJpZ2h0XCI+UGFnZTwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC04XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWdyb3VwIHctMTAwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzZWxlY3QgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBbKG5nTW9kZWwpXT1cInYzXCIgbmFtZT1cInYzXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uICpuZ0Zvcj1cImxldCBsb3Ygb2YgbWVudWx2bDNMaXN0XCIgdmFsdWU9XCJ7e2xvdi5rfX1cIj57e2xvdi52fX08L29wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zZWxlY3Q+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj4gLS0+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgZm9ybS1ncm91cFwiICpuZ0lmPVwibWRsbGlzdD8ubGVuZ3RoID4gMSBcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImNvbnRyb2wtbGFiZWxcIiBzdHlsZT1cInRleHQtYWxpZ246IHJpZ2h0XCI+TGV2ZWw8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtOFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ncm91cCB3LTEwMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c2VsZWN0ICBjbGFzcz1cImZvcm0tY29udHJvbFwiIFsobmdNb2RlbCldPVwibGV2ZWxcIiBuYW1lPVwibGV2ZWxcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCInJ1wiPlNlbGVjdDwvb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIjFcIj5MZXZlbCAxPC9vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiMlwiPkxldmVsIDI8L29wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCIzXCI+TGV2ZWwgMzwvb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3NlbGVjdD5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgW25nQ2xhc3NdPVwibmF2aWdhdGlvbi5sZW5ndGggPiAwID8gJ2NvbC1tZC0xMCcgOiByb3V0ZS5zbmFwc2hvdC5wYXJhbXNbJ2ZybW5tZSddID09ICdtZW51TWFzdGVyJyA/IGlzT3BlbiA9PSBmYWxzZSA/ICdjb2wtbWQtMTInIDogJ2NvbC1tZC04JyA6ICdjb2wtbWQtMTInXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwYW5lbCBwYW5lbC1kZWZhdWx0XCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicGFuZWwtYm9keVwiIFtzdHlsZV09XCJyb3V0ZS5zbmFwc2hvdC5wYXJhbXNbJ2ZybW5tZSddID09ICdtZW51TWFzdGVyJyA/ICdtYXJnaW4tYm90dG9tOiAzNXB4OycgOiAnJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDwhLS0gPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLThcIj48L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1zbS00XCI+XHJcbiAgICAgICAgICAgICAgPGZvcm0gY2xhc3M9XCJmb3JtLWlubGluZSBwdWxsLXJpZ2h0XCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cFwiPlxyXG4gICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPVwiZXhhbXBsZUlucHV0TmFtZTJcIj5TZWFyY2ggJm5ic3A7Jm5ic3A7PC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBpZD1cImV4YW1wbGVJbnB1dE5hbWUyXCIgbmFtZT1cInNjaHR4dFwiIFsobmdNb2RlbCldPVwic2VhcmNoRlwiIC8+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8L2Zvcm0+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9kaXY+IC0tPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1zbS02XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Zm9ybSBjbGFzcz1cImZvcm0taW5saW5lIHB1bGwtbGVmdFwiID4gXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiAqbmdJZj1cInJvdXRlLnNuYXBzaG90LnBhcmFtc1snZnJtbm1lJ10gPT0gJ21lbnVNYXN0ZXInXCIgY2xhc3M9XCJidG4gYnRuLWRlZmF1bHRcIiBzdHlsZT1cInBhZGRpbmc6IDRweCAxNXB4IDRweCAyMHB4OyBtYXJnaW4tcmlnaHQ6IDEwcHg7IG1hcmdpbi1ib3R0b206IDE1cHg7XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS10b2dnbGU9XCJ0b29sdGlwXCIgZGF0YS1wbGFjZW1lbnQ9XCJyaWdodFwiIHRpdGxlPVwiRmlsdGVyIHJlc3VsdHNcIiAoY2xpY2spPVwib3BlblRvZygpO1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInt7aWNvbn19XCIgc3R5bGU9XCJjb2xvcjojM2I1OTk4O1wiPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gPC9mb3JtPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Zm9ybSBjbGFzcz1cImZvcm0taW5saW5lIHB1bGwtbGVmdFwiPiAtLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPVwiZGRsUGFnZXNpemVcIj5QYWdlIFNpemUgJm5ic3A7ICZuYnNwOzwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzZWxlY3QgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBuYW1lPVwicGFnZVNpemVcIiBbKG5nTW9kZWwpXT1cInBhZ2VTaXplXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwib25QYWdlU2l6ZUNoYW5nZShwYWdlU2l6ZSlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJBbGxcIj5BbGw8L29wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCIxMFwiPjEwPC9vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiMjVcIj4yNTwvb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIjUwXCI+NTA8L29wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCIxMDBcIj4xMDA8L29wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zZWxlY3Q+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLWRlZmF1bHRcIiBzdHlsZT1cInBhZGRpbmc6IDRweCAxNXB4IDRweCAyMHB4O21hcmdpbi1sZWZ0OiAxMHB4OyBtYXJnaW4tYm90dG9tOiAxNXB4O1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS10b2dnbGU9XCJ0b29sdGlwXCIgZGF0YS1wbGFjZW1lbnQ9XCJyaWdodFwiIHRpdGxlPVwiUmVmcmVzaFwiIChjbGljayk9XCJuZ09uSW5pdCgpO1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZmEgZmEtcmVmcmVzaFwiPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Zvcm0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIDxsYWJlbD57e2RhdGFsaXN0Lmxlbmd0aH19PC9sYWJlbD4gLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTZcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmb3JtIGNsYXNzPVwiZm9ybS1pbmxpbmUgcHVsbC1yaWdodFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9XCJleGFtcGxlSW5wdXROYW1lMlwiPlNlYXJjaCAmbmJzcDsmbmJzcDs8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBjbGFzcz1cImZvcm0tY29udHJvbFwiIGlkPVwiZXhhbXBsZUlucHV0TmFtZTJcIiBuYW1lPVwic2NodHh0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwic2VhcmNoRlwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Zvcm0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0YWJsZS1yZXNwb25zaXZlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0YWJsZSBjbGFzcz1cInRhYmxlIHRhYmxlLWJvcmRlcmVkIHRhYmxlLWhvdmVyIHRhYmxlLWhvdmVyLWNlbGxzXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGhlYWQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGg+U1IgTm88L3RoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGg+QWN0aW9uPC90aD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoICpuZ0Zvcj1cImxldCB0Ymggb2YgdGJsSDsgbGV0IGkgPSBpbmRleCBcIiAoY2xpY2spPVwic2V0T3JkZXIodGJoLGkpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e3RibERlc2NbdGJoXX19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBbaGlkZGVuXT1cInJldmVyc2VcIiAqbmdJZj1cInNob3dhcnIgPT09IGlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLWFycm93LWRvd25cIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBbaGlkZGVuXT1cIiFyZXZlcnNlXCIgKm5nSWY9XCJzaG93YXJyID09PSBpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1hcnJvdy11cFwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90aD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90aGVhZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IGRhdGEgb2YgZGF0YWxpc3QgfCBzZWFyY2hQaXBlOnNlYXJjaEYgfCBvcmRlckJ5OiBvcmRlcjpyZXZlcnNlIHwgcGFnaW5hdGU6IHsgaXRlbXNQZXJQYWdlOiBwYWdlU2l6ZSwgY3VycmVudFBhZ2U6IHAgfTsgbGV0IGkgPSBpbmRleDtcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPnt7aSArIDF9fTwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJidG4tZ3JvdXBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPVwiI1wiIGRhdGEtdG9nZ2xlPVwiZHJvcGRvd25cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImJ0biBidG4taW5mbyBkcm9wZG93bi10b2dnbGVcIj5BY3Rpb25cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjYXJldFwiPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHVsIGNsYXNzPVwiZHJvcGRvd24tbWVudVwiIHJvbGU9XCJtZW51XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaSAqbmdGb3I9XCJsZXQgYWN0aW9uIG9mIGFjdGlvbnNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9XCJqYXZhc2NyaXB0OnZvaWQoMClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJ1c2VyQWN0aW9uKGRhdGEsIGFjdGlvbi5mb3JtX2ZpZWxkX3R5cCwgYWN0aW9uKTtcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e2FjdGlvbi5mb3JtX2ZpZWxkX3RpdGxlfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3VsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCAqbmdGb3I9XCJsZXQgdGJoIG9mIHRibEg7IGxldCBpPWluZGV4XCIgb24tbW91c2VvdmVyPVwiaG92ZXJlZEk9aVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbi1tb3VzZWxlYXZlPVwiaG92ZXJlZEk9LTFcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7ZGF0YVt0YmhdfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJvbkhvdmVyRGl2XCIgKm5nSWY9XCJpPT1ob3ZlcmVkSVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx1bD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpIChjbGljayk9XCJlZGl0Q2VsbChkYXRhLHRiaCk7XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImZhIGZhLXBlbmNpbFwiPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3VsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGJvZHk+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdGFibGU+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPHBhZ2luYXRpb24tY29udHJvbHMgKHBhZ2VDaGFuZ2UpPVwicCA9ICRldmVudFwiIGNsYXNzPVwicHVsbC1yaWdodFwiPjwvcGFnaW5hdGlvbi1jb250cm9scz5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiBjbGFzcz1cImFjdGlvbkZvb3RlclwiICpuZ0lmPVwicm91dGUuc25hcHNob3QucGFyYW1zWydmcm1ubWUnXSA9PSAnbWVudU1hc3RlcidcIj5cclxuICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBpZD1cImFkZEJ0blwiIGNsYXNzPVwiYnRuIGJ0bi1zdWNjZXNzIHR0aXBcIiAoY2xpY2spPVwiZ2V0UGFnZURlZmluYXRpb24oKVwiPkZpbHRlcjwvYnV0dG9uPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2IGNsYXNzPVwibW9kYWxcIiBpZD1cImRhdGFtb2RhbFwiIHJvbGU9XCJkaWFsb2dcIiBhcmlhLWxhYmVsbGVkYnk9XCJkZWZNb2RhbEhlYWRcIiBhcmlhLWhpZGRlbj1cInRydWVcIlxyXG4gICAgICAgIGRhdGEtYmFja2Ryb3A9XCJzdGF0aWNcIiBkYXRhLWtleWJvYXJkPVwiZmFsc2VcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtZGlhbG9nXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1jb250ZW50XCI+XHJcbiAgICAgICAgICAgICAgICA8Zm9ybSBjbGFzcz1cImZvcm0taG9yaXpvbnRhbFwiICNmPVwibmdGb3JtXCIgbmFtZT1cImFwcEZvcm1cIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtaGVhZGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiY2xvc2VcIiBkYXRhLWRpc21pc3M9XCJtb2RhbFwiIChjbGljayk9XCJjbG9zZU51bGwoKTtcIiAjY2xvc2VidG4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBhcmlhLWhpZGRlbj1cInRydWVcIj4mdGltZXM7PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzci1vbmx5XCI+Q2xvc2U8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8aDQgY2xhc3M9XCJtb2RhbC10aXRsZVwiIGlkPVwiZGVmTW9kYWxIZWFkXCI+e3tidG5OYW1lfX0gUmVjb3JkPC9oND5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtYm9keVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTEyXCIgKm5nRm9yPVwibGV0IGZsIG9mIGZvcm1GaWxkcyB8IG9yZGVyQnlQaXBlOiAnc3J0JzogJ2FzYydcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiZmw/LmZvcm1fZmllbGRfdHlwID09ICd0JyAmJiBmbD8uaXNfaGlkZGVuID09IDAgJiYgZmw/LmR0YV90eXAgPT0nYycgfHwgZmw/LmR0YV90eXAgPT0ndCdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiY29sLW1kLTMgY29udHJvbC1sYWJlbFwiPnt7Zmw/LmZvcm1fZmllbGRfdGl0bGV9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LWRhbmdlclwiICpuZ0lmPVwiZmwuaXNfY29tcHVsc29yeSA9PSAxXCI+Kjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC05XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtZ3JvdXAgdy0xMDBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIChjaGFuZ2UpPVwicmVtb3ZlSW52YWxpZChmbClcIiAtLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBjbGFzcz1cImZvcm0tY29udHJvbFwiIG5hbWU9XCJ7e2ZsPy5mb3JtX2ZpZWxkfX1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPVwiZmw/LmRlZmF1bHRfdmFsdWVcIiBbKG5nTW9kZWwpXT1cImZsLmRlZmF1bHRfdmFsdWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjdGV4dElucHV0PVwibmdNb2RlbFwiIChibHVyKT1cImNoa0Z1bihmbCxmbC5kZWZhdWx0X3ZhbHVlKTtcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7J3VuaXFFcnJNc2cnOiBmbD8uZm9ybV9maWVsZCA9PSBvbkVycn1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcmVxdWlyZWRdPVwiZmw/LmlzX2NvbXB1bHNvcnkgPT0gMVwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gKGJsdXIpPVwidGhpc1tmbD8udmFsaWRhdGlvbnNdKGZsLmRlZmF1bHRfdmFsdWUpXCIgLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwidGV4dElucHV0LmludmFsaWQgJiYgKHRleHRJbnB1dC5kaXJ0eSB8fCB0ZXh0SW5wdXQudG91Y2hlZClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYWxlcnQgYWxlcnQtZGFuZ2VyIGNhXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cInRleHRJbnB1dC5lcnJvcnMucmVxdWlyZWRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3tmbC5mb3JtX2ZpZWxkX3RpdGxlfX0gaXMgcmVxdWlyZWQuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSA8ZGl2ICpuZ0lmPVwidGV4dElucHV0LmVycm9ycy5taW5sZW5ndGhcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICB7e2ZsLmZvcm1fZmllbGRfdGl0bGV9fSBtdXN0IGJlIGF0IGxlYXN0IHt7ZmwuZm9ybV9maWVsZF9taW5fbGVuZ3RofX0gY2hhcmFjdGVycyBsb25nLlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cInRleHRJbnB1dC5lcnJvcnMubWF4bGVuZ3RoXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAge3tmbC5mb3JtX2ZpZWxkX3RpdGxlfX0gTWF4bWltdW0gbGltaXQge3tmbC5mb3JtX2ZpZWxkX21heF9sZW5ndGh9fSBjaGFyYWN0ZXJzIGxvbmcuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PiAtLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiZmw/LmZvcm1fZmllbGRfdHlwID09ICd0JyAmJiBmbD8uaXNfaGlkZGVuID09IDAgJiYgZmw/LmR0YV90eXAgPT0nbidcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiY29sLW1kLTMgY29udHJvbC1sYWJlbFwiPnt7Zmw/LmZvcm1fZmllbGRfdGl0bGV9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LWRhbmdlclwiICpuZ0lmPVwiZmwuaXNfY29tcHVsc29yeSA9PSAxXCI+Kjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC05XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtZ3JvdXAgdy0xMDBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cIm51bWJlclwiIGNsYXNzPVwiZm9ybS1jb250cm9sXCIgbmFtZT1cInt7Zmw/LmZvcm1fZmllbGR9fVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJmbD8uZGVmYXVsdF92YWx1ZVwiIFsobmdNb2RlbCldPVwiZmwuZGVmYXVsdF92YWx1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICNudW1iZXJJbnB1dD1cIm5nTW9kZWxcIiBbcmVxdWlyZWRdPVwiZmw/LmlzX2NvbXB1bHNvcnkgPT0gMVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gbWlubGVuZ3RoPXt7Zmw/LmZvcm1fZmllbGRfbWluX2xlbmd0aH19IG1heGxlbmd0aD17e2ZsPy5mb3JtX2ZpZWxkX21heF9sZW5ndGh9fS8gLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJudW1iZXJJbnB1dC5pbnZhbGlkICYmIChudW1iZXJJbnB1dC5kaXJ0eSB8fCBudW1iZXJJbnB1dC50b3VjaGVkKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJhbGVydCBhbGVydC1kYW5nZXIgY2FcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwibnVtYmVySW5wdXQuZXJyb3JzLnJlcXVpcmVkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7ZmwuZm9ybV9maWVsZF90aXRsZX19IGlzIHJlcXVpcmVkLlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gPGRpdiAqbmdJZj1cIm51bWJlcklucHV0LmVycm9ycy5taW5sZW5ndGhcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICB7e2ZsLmZvcm1fZmllbGRfdGl0bGV9fSBtdXN0IGJlIGF0IGxlYXN0IHt7ZmwuZm9ybV9maWVsZF9taW5fbGVuZ3RofX0gY2hhcmFjdGVycyBsb25nLlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cIm51bWJlcklucHV0LmVycm9ycy5tYXhsZW5ndGhcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICB7e2ZsLmZvcm1fZmllbGRfdGl0bGV9fSBNYXhtaW11bSBsaW1pdCB7e2ZsLmZvcm1fZmllbGRfbWF4X2xlbmd0aH19IGNoYXJhY3RlcnMgbG9uZy5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+IC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJmbD8uZm9ybV9maWVsZF90eXAgPT0gJ3B3JyAmJiBmbD8uaXNfaGlkZGVuID09IDAgJiYgZmw/LmR0YV90eXAgPT0ncHcnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImNvbC1tZC0zIGNvbnRyb2wtbGFiZWxcIj57e2ZsPy5mb3JtX2ZpZWxkX3RpdGxlfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC1kYW5nZXJcIiAqbmdJZj1cImZsLmlzX2NvbXB1bHNvcnkgPT0gMVwiPio8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtOVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWdyb3VwIHctMTAwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ7e2lucHV0dHlwZX19XCIgY2xhc3M9XCJmb3JtLWNvbnRyb2wgcG9zcmVsXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZT1cInt7Zmw/LmZvcm1fZmllbGR9fVwiIFt2YWx1ZV09XCJmbD8uZGVmYXVsdF92YWx1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiZmwuZGVmYXVsdF92YWx1ZVwiICNwYXNzSW5wdXQ9XCJuZ01vZGVsXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3JlcXVpcmVkXT1cImZsPy5pc19jb21wdWxzb3J5ID09IDFcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZmEge3tldmVDfX0gZXllXCIgKGNsaWNrKT1cInNob3dISWRlUGFzcygpO1wiPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSAoYmx1cik9XCJ0aGlzW2ZsPy52YWxpZGF0aW9uc10oZmwuZGVmYXVsdF92YWx1ZSlcIiAtLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJwYXNzSW5wdXQuaW52YWxpZCAmJiAocGFzc0lucHV0LmRpcnR5IHx8IHBhc3NJbnB1dC50b3VjaGVkKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJhbGVydCBhbGVydC1kYW5nZXIgY2FcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwicGFzc0lucHV0LmVycm9ycy5yZXF1aXJlZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e2ZsLmZvcm1fZmllbGRfdGl0bGV9fSBpcyByZXF1aXJlZC5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cFwiICpuZ0lmPVwiZmw/LmZvcm1fZmllbGRfdHlwID09ICd0JyAmJiBmbD8uZHRhX3R5cCA9PSdhJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJjb2wtbWQtMyBjb250cm9sLWxhYmVsXCI+e3tmbD8uZm9ybV9maWVsZF90aXRsZX19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtZGFuZ2VyXCIgKm5nSWY9XCJmbC5pc19jb21wdWxzb3J5ID09IDFcIj4qPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ncm91cCB3LTEwMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0YWctaW5wdXQgWyhuZ01vZGVsKV09XCJmbC5kZWZhdWx0X3ZhbHVlXCIgbmFtZT1cInt7Zmw/LmZvcm1fZmllbGR9fVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttb2RlbEFzU3RyaW5nc109XCJ0cnVlXCIgW2FsbG93RHVwZXNdPVwidHJ1ZVwiIFtlZGl0YWJsZV09J3RydWUnPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGFnLWlucHV0PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cFwiICpuZ0lmPVwiZmw/LmZvcm1fZmllbGRfdHlwID09ICd0JyAmJiBmbD8uZHRhX3R5cCA9PSdzYSdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiY29sLW1kLTMgY29udHJvbC1sYWJlbFwiPnt7Zmw/LmZvcm1fZmllbGRfdGl0bGV9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LWRhbmdlclwiICpuZ0lmPVwiZmwuaXNfY29tcHVsc29yeSA9PSAxXCI+Kjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC05XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtZ3JvdXAgdy0xMDBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctc2VsZWN0IFtvcHRpb25zXT1cInNxbEFycmF5W2ZsPy5mb3JtX2ZpZWxkXVwiIHN0eWxlPVwiei1pbmRleDo5O1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiZmwuZGVmYXVsdF92YWx1ZVwiICNzYWZpZWxkPVwibmdNb2RlbFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyZXF1aXJlZF09XCJmbD8uaXNfY29tcHVsc29yeSA9PSAxXCIgbmFtZT1cInt7Zmw/LmZvcm1fZmllbGR9fVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttdWx0aXBsZV09XCJ0cnVlXCIgW2FsbG93Q2xlYXJdPVwidHJ1ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI29wdGlvblRlbXBsYXRlIGxldC1vcHRpb249XCJvcHRpb25cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmYW1mYW1mYW0tZmxhZ3Mge3tvcHRpb24/LnZhbHVlfX1cIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7b3B0aW9uPy5sYWJlbH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1zZWxlY3Q+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSA8bmctc2VsZWN0IFtpdGVtc109XCJzcWxBcnJheVtmbD8uZm9ybV9maWVsZF1cIiBbYWRkVGFnXT1cImFkZFRhZ1wiIGJpbmRWYWx1ZT1cImtcIiBtdWx0aXBsZT1cInRydWVcIiBiaW5kTGFiZWw9XCJ2XCIgbmFtZT1cInt7Zmw/LmZvcm1fZmllbGR9fVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiZmwuZGVmYXVsdF92YWx1ZVwiICNzYWZpZWxkPVwibmdNb2RlbFwiIFtyZXF1aXJlZF09XCJmbD8uaXNfY29tcHVsc29yeSA9PSAxXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L25nLXNlbGVjdD4gLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJzYWZpZWxkLmludmFsaWQgJiYgKHNhZmllbGQuZGlydHkgfHwgc2FmaWVsZC50b3VjaGVkKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJhbGVydCBhbGVydC1kYW5nZXIgY2FcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwic2FmaWVsZC5lcnJvcnMucmVxdWlyZWRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3tmbC5mb3JtX2ZpZWxkX3RpdGxlfX0gaXMgcmVxdWlyZWQuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImZsPy5mb3JtX2ZpZWxkX3R5cCA9PSAndGEnICYmIGZsPy5pc19oaWRkZW4gPT0gMCAmJiBmbD8uZHRhX3R5cCA9PSdjJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJjb2wtbWQtMyBjb250cm9sLWxhYmVsXCI+e3tmbD8uZm9ybV9maWVsZF90aXRsZX19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtZGFuZ2VyXCIgKm5nSWY9XCJmbC5pc19jb21wdWxzb3J5ID09IDFcIj4qPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ncm91cCB3LTEwMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZXh0YXJlYSBjbGFzcz1cImZvcm0tY29udHJvbFwiIHJvd3M9XCIzXCIgbmFtZT1cInt7Zmw/LmZvcm1fZmllbGR9fVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJmbD8uZGVmYXVsdF92YWx1ZVwiIFsobmdNb2RlbCldPVwiZmwuZGVmYXVsdF92YWx1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICN0ZXh0QXJlYT1cIm5nTW9kZWxcIiAoYmx1cik9XCJjaGtGdW4oZmwsZmwuZGVmYXVsdF92YWx1ZSk7XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieyd1bmlxRXJyTXNnJzogZmw/LmZvcm1fZmllbGQgPT0gb25FcnJ9XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3JlcXVpcmVkXT1cImZsPy5pc19jb21wdWxzb3J5ID09IDFcIj48L3RleHRhcmVhPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwidGV4dEFyZWEuaW52YWxpZCAmJiAodGV4dEFyZWEuZGlydHkgfHwgdGV4dEFyZWEudG91Y2hlZClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYWxlcnQgYWxlcnQtZGFuZ2VyIGNhXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cInRleHRBcmVhLmVycm9ycy5yZXF1aXJlZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e2ZsLmZvcm1fZmllbGRfdGl0bGV9fSBpcyByZXF1aXJlZC5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiZmw/LmZvcm1fZmllbGRfdHlwID09ICdoZCcgfHwgZmw/LmZvcm1fZmllbGRfdHlwID09ICdkZicgfHwgZmw/LmZvcm1fZmllbGRfdHlwID09ICdmaycgJiYgZmw/LmlzX2hpZGRlbiA9PSAwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieydtdDAnOiBmbD8uZm9ybV9maWVsZF90eXAgPT0gJ2hkJ31cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiY29sLW1kLTMgY29udHJvbC1sYWJlbFwiPjwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtOVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWdyb3VwIHctMTAwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJoaWRkZW5cIiBjbGFzcz1cImZvcm0tY29udHJvbFwiIG5hbWU9XCJ7e2ZsPy5mb3JtX2ZpZWxkfX1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPVwiZmw/LmRlZmF1bHRfdmFsdWVcIiBbKG5nTW9kZWwpXT1cImZsLmRlZmF1bHRfdmFsdWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjaGRmPVwibmdNb2RlbFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXBcIiAqbmdJZj1cImZsPy5mb3JtX2ZpZWxkX3R5cCA9PSAnc3EnICYmIGZsPy5pc19oaWRkZW4gPT0gMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJjb2wtbWQtMyBjb250cm9sLWxhYmVsXCI+PC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC05XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtZ3JvdXAgdy0xMDBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImhpZGRlblwiIGNsYXNzPVwiZm9ybS1jb250cm9sXCIgbmFtZT1cInt7Zmw/LmZvcm1fZmllbGR9fVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJmbD8uZGVmYXVsdF92YWx1ZVwiIFsobmdNb2RlbCldPVwiZmwuZGVmYXVsdF92YWx1ZVwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXBcIiAqbmdJZj1cImZsPy5mb3JtX2ZpZWxkX3R5cCA9PSAndGInICYmIGZsPy5pc19oaWRkZW4gPT0gMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJjb2wtbWQtMyBjb250cm9sLWxhYmVsXCI+e3tmbD8uZm9ybV9maWVsZF90aXRsZX19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtZGFuZ2VyXCIgKm5nSWY9XCJmbC5pc19jb21wdWxzb3J5ID09IDFcIj4qPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIDxkaXYgY2xhc3M9XCJjb2wtbWQtOVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJ0bi1ncm91cFwiIGRhdGEtdG9nZ2xlPVwiYnV0dG9uc1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJidG4gYnRuLWRlZmF1bHQgYnRuLW9uIGJ0bi14c1wiICpuZ0Zvcj1cImxldCBsb3Ygb2Ygc3FsQXJyYXlbZmwuZm9ybV9maWVsZF07bGV0IGk9aW5kZXhcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInJhZGlvXCIgW3ZhbHVlXT1cImxvdi5rXCIgaWQ9XCJ7e2l9fVwiIG5hbWU9XCJ7e2ZsPy5mb3JtX2ZpZWxkfX1cIiBbdmFsdWVdPVwiXCIgWyhuZ01vZGVsKV09XCJmbC5kZWZhdWx0X3ZhbHVlXCI+e3tsb3Yudn19PC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PiAtLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC05XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtZ3JvdXAgdy0xMDBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c2VsZWN0IGNsYXNzPVwiZm9ybS1jb250cm9sIHNlbGVjdFwiIG5hbWU9XCJ7e2ZsPy5mb3JtX2ZpZWxkfX1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPVwiZmw/LmRlZmF1bHRfdmFsdWVcIiBbKG5nTW9kZWwpXT1cImZsLmRlZmF1bHRfdmFsdWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjdGRmPVwibmdNb2RlbFwiIFtyZXF1aXJlZF09XCJmbD8uaXNfY29tcHVsc29yeSA9PSAnMSdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiAqbmdGb3I9XCJsZXQgZHluYW1pYyBvZiBzcWxBcnJheVtmbC5mb3JtX2ZpZWxkXVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT1cInt7ZHluYW1pYy52YWx1ZX19XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e2R5bmFtaWMubGFiZWx9fTwvb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc2VsZWN0PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwidGRmLmludmFsaWQgJiYgKHRkZi5kaXJ0eSB8fCB0ZGYudG91Y2hlZClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYWxlcnQgYWxlcnQtZGFuZ2VyIGNhXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cInRkZi5lcnJvcnMucmVxdWlyZWRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3tmbC5mb3JtX2ZpZWxkX3RpdGxlfX0gaXMgcmVxdWlyZWQuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXBcIiAqbmdJZj1cImZsPy5mb3JtX2ZpZWxkX3R5cCA9PSAnbCcgJiYgZmw/LmlzX2hpZGRlbiA9PSAwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImNvbC1tZC0zIGNvbnRyb2wtbGFiZWxcIj57e2ZsPy5mb3JtX2ZpZWxkX3RpdGxlfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC1kYW5nZXJcIiAqbmdJZj1cImZsLmlzX2NvbXB1bHNvcnkgPT0gMVwiPio8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtOVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWdyb3VwIHctMTAwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNlbGVjdCBjbGFzcz1cImZvcm0tY29udHJvbCBzZWxlY3RcIiBuYW1lPVwie3tmbD8uZm9ybV9maWVsZH19XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cImZsPy5kZWZhdWx0X3ZhbHVlXCIgWyhuZ01vZGVsKV09XCJmbC5kZWZhdWx0X3ZhbHVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI2xJbnB1dD1cIm5nTW9kZWxcIiBbcmVxdWlyZWRdPVwiZmw/LmlzX2NvbXB1bHNvcnkgPT0gJzEnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gKm5nRm9yPVwibGV0IGxvdiBvZiBmbC5rdlwiIHZhbHVlPVwie3tsb3Yua319XCI+e3tsb3Yudn19PC9vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zZWxlY3Q+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJsSW5wdXQuaW52YWxpZCAmJiAobElucHV0LmRpcnR5IHx8IGxJbnB1dC50b3VjaGVkKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJhbGVydCBhbGVydC1kYW5nZXIgY2FcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwibElucHV0LmVycm9ycy5yZXF1aXJlZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e2ZsLmZvcm1fZmllbGRfdGl0bGV9fSBpcyByZXF1aXJlZC5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cFwiICpuZ0lmPVwiZmw/LmZvcm1fZmllbGRfdHlwID09ICdsZCcgICYmIGZsPy5pc19oaWRkZW4gPT0gMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJjb2wtbWQtMyBjb250cm9sLWxhYmVsXCI+e3tmbD8uZm9ybV9maWVsZF90aXRsZX19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtZGFuZ2VyXCIgKm5nSWY9XCJmbC5pc19jb21wdWxzb3J5ID09IDFcIj4qPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ncm91cCB3LTEwMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzZWxlY3QgY2xhc3M9XCJmb3JtLWNvbnRyb2wgc2VsZWN0XCIgbmFtZT1cInt7Zmw/LmZvcm1fZmllbGR9fVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJmbD8uZGVmYXVsdF92YWx1ZVwiIFsobmdNb2RlbCldPVwiZmwuZGVmYXVsdF92YWx1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICNsZElucHV0PVwibmdNb2RlbFwiIFtyZXF1aXJlZF09XCJmbD8uaXNfY29tcHVsc29yeSA9PSAnMSdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiAqbmdGb3I9XCJsZXQgZHluYW1pYyBvZiBzcWxBcnJheVtmbC5mb3JtX2ZpZWxkXVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT1cInt7ZHluYW1pYy5rfX1cIj57e2R5bmFtaWMudn19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc2VsZWN0PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwibGRJbnB1dC5pbnZhbGlkICYmIChsZElucHV0LmRpcnR5IHx8IGxkSW5wdXQudG91Y2hlZClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYWxlcnQgYWxlcnQtZGFuZ2VyIGNhXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImxkSW5wdXQuZXJyb3JzLnJlcXVpcmVkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7ZmwuZm9ybV9maWVsZF90aXRsZX19IGlzIHJlcXVpcmVkLlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwXCIgKm5nSWY9XCJmbD8uZm9ybV9maWVsZF90eXAgPT0gJ3MnICYmIGZsPy5pc19oaWRkZW4gPT0gMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJjb2wtbWQtMyBjb250cm9sLWxhYmVsXCI+e3tmbD8uZm9ybV9maWVsZF90aXRsZX19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtZGFuZ2VyXCIgKm5nSWY9XCJmbC5pc19jb21wdWxzb3J5ID09IDFcIj4qPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ncm91cCB3LTEwMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzZWxlY3QgY2xhc3M9XCJmb3JtLWNvbnRyb2wgc2VsZWN0XCIgbmFtZT1cInt7Zmw/LmZvcm1fZmllbGR9fVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJmbD8uZGVmYXVsdF92YWx1ZVwiIFsobmdNb2RlbCldPVwiZmwuZGVmYXVsdF92YWx1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwiY2hrRnVuKGZsLGZsLmRlZmF1bHRfdmFsdWUpXCIgaWQ9XCJ7e2ZsLmNvbHVtbl9rZXl9fVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICNzZmk9XCJuZ01vZGVsXCIgW3JlcXVpcmVkXT1cImZsPy5pc19jb21wdWxzb3J5ID09ICcxJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uICpuZ0Zvcj1cImxldCBkeW5hbWljIG9mIHNxbEFycmF5W2ZsLmZvcm1fZmllbGRdXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPVwie3tkeW5hbWljLnZhbHVlfX1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7ZHluYW1pYy5sYWJlbH19PC9vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zZWxlY3Q+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJzZmkuaW52YWxpZCAmJiAoc2ZpLmRpcnR5IHx8IHNmaS50b3VjaGVkKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJhbGVydCBhbGVydC1kYW5nZXIgY2FcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwic2ZpLmVycm9ycy5yZXF1aXJlZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e2ZsLmZvcm1fZmllbGRfdGl0bGV9fSBpcyByZXF1aXJlZC5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXBcIiAqbmdJZj1cImZsPy5mb3JtX2ZpZWxkX3R5cCA9PSAnc2InXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImNvbC1tZC0zIGNvbnRyb2wtbGFiZWxcIj57e2ZsPy5mb3JtX2ZpZWxkX3RpdGxlfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC1kYW5nZXJcIiAqbmdJZj1cImZsLmlzX2NvbXB1bHNvcnkgPT0gMVwiPio8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtOFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWdyb3VwIHctMTAwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLXNlbGVjdCBzdHlsZT1cInotaW5kZXg6IDU7XCIgW29wdGlvbnNdPVwic3FsQXJyYXlbZmwuZm9ybV9maWVsZF1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjc2ZpPVwibmdNb2RlbFwiIFsobmdNb2RlbCldPVwiZmwuZGVmYXVsdF92YWx1ZVwiIG5hbWU9XCJ7e2ZsPy5mb3JtX2ZpZWxkfX1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc2VsZWN0ZWQpPVwiY2hrRnVuKGZsLGZsLmRlZmF1bHRfdmFsdWUpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGZpbHRlcklucHV0Q2hhbmdlZCk9XCJsb2FkU3VnZ2RhdGEoJGV2ZW50LGZsLnBhZ2VfaXRlbV9pZG4sZmwuZm9ybV9maWVsZClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLXNlbGVjdD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cInNmaS5pbnZhbGlkICYmIChzZmkuZGlydHkgfHwgc2ZpLnRvdWNoZWQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImFsZXJ0IGFsZXJ0LWRhbmdlciBjYVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJzZmkuZXJyb3JzLnJlcXVpcmVkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7ZmwuZm9ybV9maWVsZF90aXRsZX19IGlzIHJlcXVpcmVkLlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTFcIiAqbmdJZj1cImZsPy5mb3JtX2ZpZWxkX2ljb24gPT0gJ2FkZCdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1zdWNjZXNzIGJ0bi1yb3VuZGVkXCI+PHNwYW4+PGlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZmEgZmEtcGx1c1wiPjwvaT48L3NwYW4+PC9idXR0b24+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1mb290ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgYXBwQXBwTm9EYmxDbGljayBjbGFzcz1cImJ0biBidG4tc3VjY2Vzc1wiIChjbGljayk9XCJvblN1Ym1pdChmLHN1Ym1pdEJ0bilcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgI3N1Ym1pdEJ0bj57e2J0bk5hbWV9fTwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJyZXNldFwiIGNsYXNzPVwiYnRuIGJ0bi1kYW5nZXJcIiAoY2xpY2spPVwicmVzZXQoZilcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJidG5OYW1lID09ICdBZGQnXCI+UmVzZXQ8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZm9ybT5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJtb2RhbFwiIGlkPVwiZGVsZXRlbW9kYWxcIiByb2xlPVwiZGlhbG9nXCIgYXJpYS1sYWJlbGxlZGJ5PVwic21hbGxNb2RhbEhlYWRcIiBhcmlhLWhpZGRlbj1cInRydWVcIlxyXG4gICAgICAgIGRhdGEtYmFja2Ryb3A9XCJzdGF0aWNcIiBkYXRhLWtleWJvYXJkPVwiZmFsc2VcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtZGlhbG9nIG1vZGFsLXNtXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1jb250ZW50XCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtaGVhZGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJjbG9zZVwiIGRhdGEtZGlzbWlzcz1cIm1vZGFsXCIgKGNsaWNrKT1cImNsb3NlTnVsbCgpO1wiICNkZWxldGVjbHNidG4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPiZ0aW1lczs8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwic3Itb25seVwiPkNsb3NlPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgIDxoNCBjbGFzcz1cIm1vZGFsLXRpdGxlXCIgaWQ9XCJzbWFsbE1vZGFsSGVhZFwiPldhcm5pbmc8L2g0PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtYm9keVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIEFyZSB5b3Ugc3VyZSB3YW50IHRvIGRlbGV0ZT9cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWZvb3RlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1kZWZhdWx0XCIgZGF0YS1kaXNtaXNzPVwibW9kYWxcIj5DbG9zZTwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1kYW5nZXJcIiBkYXRhLWRpc21pc3M9XCJtb2RhbFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJkZWxldGVEYXRhTGlzdCgpO1wiPkRlbGV0ZTwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcblxyXG4gICAgPGRpdiBjbGFzcz1cIm1vZGFsXCIgaWQ9XCJwb3BkYXRhbW9kYWxcIiByb2xlPVwiZGlhbG9nXCIgYXJpYS1sYWJlbGxlZGJ5PVwiZGVmTW9kYWxIZWFkXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCJcclxuICAgICAgICBkYXRhLWJhY2tkcm9wPVwic3RhdGljXCIgZGF0YS1rZXlib2FyZD1cImZhbHNlXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWRpYWxvZ1wiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtY29udGVudFwiPlxyXG4gICAgICAgICAgICAgICAgPGZvcm0gY2xhc3M9XCJmb3JtLWhvcml6b250YWxcIiAjZnBvcD1cIm5nRm9ybVwiIG5hbWU9XCJhcHBGb3JtXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWhlYWRlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImNsb3NlXCIgZGF0YS1kaXNtaXNzPVwibW9kYWxcIiAoY2xpY2spPVwiY2xvc2VOdWxsKCk7XCIgI3BvcGNsb3NlYnRuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gYXJpYS1oaWRkZW49XCJ0cnVlXCI+JnRpbWVzOzwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwic3Itb25seVwiPkNsb3NlPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGg0IGNsYXNzPVwibW9kYWwtdGl0bGVcIiBpZD1cImRlZk1vZGFsSGVhZFwiPnt7YnRuTmFtZX19IFJlY29yZDwvaDQ+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWJvZHlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0xMlwiICpuZ0Zvcj1cImxldCBmbCBvZiBmb3JtRmlsZHNQb3B1cCB8IG9yZGVyQnlQaXBlOiAnc3J0JzogJ2FzYydcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiZmw/LmZvcm1fZmllbGRfdHlwID09ICd0JyAmJiBmbD8uaXNfaGlkZGVuID09IDAgJiYgZmw/LmR0YV90eXAgPT0nYycgfHwgZmw/LmR0YV90eXAgPT0ndCdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiY29sLW1kLTMgY29udHJvbC1sYWJlbFwiPnt7Zmw/LmZvcm1fZmllbGRfdGl0bGV9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LWRhbmdlclwiICpuZ0lmPVwiZmwuaXNfY29tcHVsc29yeSA9PSAxXCI+Kjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC05XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtZ3JvdXAgdy0xMDBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBjbGFzcz1cImZvcm0tY29udHJvbFwiIG5hbWU9XCJ7e2ZsPy5mb3JtX2ZpZWxkfX1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPVwiZmw/LmRlZmF1bHRfdmFsdWVcIiBbKG5nTW9kZWwpXT1cImZsLmRlZmF1bHRfdmFsdWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjdGV4dElucHV0PVwibmdNb2RlbFwiIChibHVyKT1cImNoa0Z1bihmbCxmbC5kZWZhdWx0X3ZhbHVlKTtcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7J3VuaXFFcnJNc2cnOiBmbD8uZm9ybV9maWVsZCA9PSBvbkVycn1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcmVxdWlyZWRdPVwiZmw/LmlzX2NvbXB1bHNvcnkgPT0gJzEnXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cInRleHRJbnB1dC5pbnZhbGlkICYmICh0ZXh0SW5wdXQuZGlydHkgfHwgdGV4dElucHV0LnRvdWNoZWQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImFsZXJ0IGFsZXJ0LWRhbmdlciBjYVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJ0ZXh0SW5wdXQuZXJyb3JzLnJlcXVpcmVkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7ZmwuZm9ybV9maWVsZF90aXRsZX19IGlzIHJlcXVpcmVkLlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiZmw/LmZvcm1fZmllbGRfdHlwID09ICd0JyAmJiBmbD8uaXNfaGlkZGVuID09IDAgJiYgZmw/LmR0YV90eXAgPT0nbidcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiY29sLW1kLTMgY29udHJvbC1sYWJlbFwiPnt7Zmw/LmZvcm1fZmllbGRfdGl0bGV9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LWRhbmdlclwiICpuZ0lmPVwiZmwuaXNfY29tcHVsc29yeSA9PSAxXCI+Kjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC05XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtZ3JvdXAgdy0xMDBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cIm51bWJlclwiIGNsYXNzPVwiZm9ybS1jb250cm9sXCIgbmFtZT1cInt7Zmw/LmZvcm1fZmllbGR9fVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJmbD8uZGVmYXVsdF92YWx1ZVwiIFsobmdNb2RlbCldPVwiZmwuZGVmYXVsdF92YWx1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICNudW1iZXJJbnB1dD1cIm5nTW9kZWxcIiBbcmVxdWlyZWRdPVwiZmw/LmlzX2NvbXB1bHNvcnk9PTFcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIG1pbmxlbmd0aD17e2ZsPy5mb3JtX2ZpZWxkX21pbl9sZW5ndGh9fSBtYXhsZW5ndGg9e3tmbD8uZm9ybV9maWVsZF9tYXhfbGVuZ3RofX0vIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwibnVtYmVySW5wdXQuaW52YWxpZCAmJiAobnVtYmVySW5wdXQuZGlydHkgfHwgbnVtYmVySW5wdXQudG91Y2hlZClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYWxlcnQgYWxlcnQtZGFuZ2VyIGNhXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cIm51bWJlcklucHV0LmVycm9ycy5yZXF1aXJlZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e2ZsLmZvcm1fZmllbGRfdGl0bGV9fSBpcyByZXF1aXJlZC5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiZmw/LmZvcm1fZmllbGRfdHlwID09ICdwdycgJiYgZmw/LmlzX2hpZGRlbiA9PSAwICYmIGZsPy5kdGFfdHlwID09J3B3J1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJjb2wtbWQtMyBjb250cm9sLWxhYmVsXCI+e3tmbD8uZm9ybV9maWVsZF90aXRsZX19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtZGFuZ2VyXCIgKm5nSWY9XCJmbC5pc19jb21wdWxzb3J5ID09IDFcIj4qPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ncm91cCB3LTEwMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwie3tpbnB1dHR5cGV9fVwiIGNsYXNzPVwiZm9ybS1jb250cm9sIHBvc3JlbFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU9XCJ7e2ZsPy5mb3JtX2ZpZWxkfX1cIiBbdmFsdWVdPVwiZmw/LmRlZmF1bHRfdmFsdWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImZsLmRlZmF1bHRfdmFsdWVcIiAjcGFzc0lucHV0PVwibmdNb2RlbFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyZXF1aXJlZF09XCJmbD8uaXNfY29tcHVsc29yeSA9PSAnMSdcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZmEge3tldmVDfX0gZXllXCIgKGNsaWNrKT1cInNob3dISWRlUGFzcygpO1wiPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cInBhc3NJbnB1dC5pbnZhbGlkICYmIChwYXNzSW5wdXQuZGlydHkgfHwgcGFzc0lucHV0LnRvdWNoZWQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImFsZXJ0IGFsZXJ0LWRhbmdlciBjYVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJwYXNzSW5wdXQuZXJyb3JzLnJlcXVpcmVkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7ZmwuZm9ybV9maWVsZF90aXRsZX19IGlzIHJlcXVpcmVkLlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwXCIgKm5nSWY9XCJmbD8uZm9ybV9maWVsZF90eXAgPT0gJ3QnICYmIGZsPy5kdGFfdHlwID09J2EnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImNvbC1tZC0zIGNvbnRyb2wtbGFiZWxcIj57e2ZsPy5mb3JtX2ZpZWxkX3RpdGxlfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC1kYW5nZXJcIiAqbmdJZj1cImZsLmlzX2NvbXB1bHNvcnkgPT0gMVwiPio8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtOVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWdyb3VwIHctMTAwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWdyb3VwIHctMTAwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0YWctaW5wdXQgWyhuZ01vZGVsKV09XCJmbC5kZWZhdWx0X3ZhbHVlXCIgbmFtZT1cInt7Zmw/LmZvcm1fZmllbGR9fVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbW9kZWxBc1N0cmluZ3NdPVwidHJ1ZVwiIFthbGxvd0R1cGVzXT1cInRydWVcIiBbZWRpdGFibGVdPSd0cnVlJz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90YWctaW5wdXQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXBcIiAqbmdJZj1cImZsPy5mb3JtX2ZpZWxkX3R5cCA9PSAndCcgJiYgZmw/LmR0YV90eXAgPT0nc2EnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImNvbC1tZC0zIGNvbnRyb2wtbGFiZWxcIj57e2ZsPy5mb3JtX2ZpZWxkX3RpdGxlfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC1kYW5nZXJcIiAqbmdJZj1cImZsLmlzX2NvbXB1bHNvcnkgPT0gMVwiPio8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtOVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWdyb3VwIHctMTAwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLXNlbGVjdCBbb3B0aW9uc109XCJzcWxBcnJheVtmbD8uZm9ybV9maWVsZF1cIiBzdHlsZT1cInotaW5kZXg6OTtcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImZsLmRlZmF1bHRfdmFsdWVcIiAjc2FmaWVsZD1cIm5nTW9kZWxcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcmVxdWlyZWRdPVwiZmw/LmlzX2NvbXB1bHNvcnkgPT0gMVwiIG5hbWU9XCJ7e2ZsPy5mb3JtX2ZpZWxkfX1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbXVsdGlwbGVdPVwidHJ1ZVwiIFthbGxvd0NsZWFyXT1cInRydWVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNvcHRpb25UZW1wbGF0ZSBsZXQtb3B0aW9uPVwib3B0aW9uXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmFtZmFtZmFtLWZsYWdzIHt7b3B0aW9uPy52YWx1ZS50b0xvd2VyQ2FzZSgpfX1cIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7b3B0aW9uPy5sYWJlbH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1zZWxlY3Q+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSA8bmctc2VsZWN0IFtpdGVtc109XCJzcWxBcnJheVtmbC5mb3JtX2ZpZWxkXVwiIFthZGRUYWddPVwiYWRkVGFnXCIgYmluZFZhbHVlPVwia1wiIG11bHRpcGxlPVwidHJ1ZVwiIGJpbmRMYWJlbD1cInZcIiBuYW1lPVwie3tmbD8uZm9ybV9maWVsZH19XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJmbC5kZWZhdWx0X3ZhbHVlXCIgI3NhZmllbGQ9XCJuZ01vZGVsXCIgW3JlcXVpcmVkXT1cImZsPy5pc19jb21wdWxzb3J5ID09ICcxJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9uZy1zZWxlY3Q+IC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwic2FmaWVsZC5pbnZhbGlkICYmIChzYWZpZWxkLmRpcnR5IHx8IHNhZmllbGQudG91Y2hlZClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYWxlcnQgYWxlcnQtZGFuZ2VyIGNhXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cInNhZmllbGQuZXJyb3JzLnJlcXVpcmVkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7ZmwuZm9ybV9maWVsZF90aXRsZX19IGlzIHJlcXVpcmVkLlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJmbD8uZm9ybV9maWVsZF90eXAgPT0gJ3RhJyAmJiBmbD8uaXNfaGlkZGVuID09IDAgJiYgZmw/LmR0YV90eXAgPT0nYydcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiY29sLW1kLTMgY29udHJvbC1sYWJlbFwiPnt7Zmw/LmZvcm1fZmllbGRfdGl0bGV9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LWRhbmdlclwiICpuZ0lmPVwiZmwuaXNfY29tcHVsc29yeSA9PSAxXCI+Kjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC05XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtZ3JvdXAgdy0xMDBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGV4dGFyZWEgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiByb3dzPVwiM1wiIG5hbWU9XCJ7e2ZsPy5mb3JtX2ZpZWxkfX1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPVwiZmw/LmRlZmF1bHRfdmFsdWVcIiBbKG5nTW9kZWwpXT1cImZsLmRlZmF1bHRfdmFsdWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjdGV4dEFyZWE9XCJuZ01vZGVsXCIgKGJsdXIpPVwiY2hrRnVuKGZsLGZsLmRlZmF1bHRfdmFsdWUpO1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsndW5pcUVyck1zZyc6IGZsPy5mb3JtX2ZpZWxkID09IG9uRXJyfVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyZXF1aXJlZF09XCJmbD8uaXNfY29tcHVsc29yeSA9PSAnMSdcIj48L3RleHRhcmVhPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwidGV4dEFyZWEuaW52YWxpZCAmJiAodGV4dEFyZWEuZGlydHkgfHwgdGV4dEFyZWEudG91Y2hlZClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYWxlcnQgYWxlcnQtZGFuZ2VyIGNhXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cInRleHRBcmVhLmVycm9ycy5yZXF1aXJlZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e2ZsLmZvcm1fZmllbGRfdGl0bGV9fSBpcyByZXF1aXJlZC5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiZmw/LmZvcm1fZmllbGRfdHlwID09ICdoZCcgfHwgZmw/LmZvcm1fZmllbGRfdHlwID09ICdkZicgfHwgZmw/LmZvcm1fZmllbGRfdHlwID09ICdmaycgJiYgZmw/LmlzX2hpZGRlbiA9PSAwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieydtdDAnOiBmbD8uZm9ybV9maWVsZF90eXAgPT0gJ2hkJ31cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiY29sLW1kLTMgY29udHJvbC1sYWJlbFwiPjwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtOVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWdyb3VwIHctMTAwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJoaWRkZW5cIiBjbGFzcz1cImZvcm0tY29udHJvbFwiIG5hbWU9XCJ7e2ZsPy5mb3JtX2ZpZWxkfX1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPVwiZmw/LmRlZmF1bHRfdmFsdWVcIiBbKG5nTW9kZWwpXT1cImZsLmRlZmF1bHRfdmFsdWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjaGRmPVwibmdNb2RlbFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXBcIiAqbmdJZj1cImZsPy5mb3JtX2ZpZWxkX3R5cCA9PSAnc3EnICYmIGZsPy5pc19oaWRkZW4gPT0gMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJjb2wtbWQtMyBjb250cm9sLWxhYmVsXCI+PC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC05XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtZ3JvdXAgdy0xMDBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImhpZGRlblwiIGNsYXNzPVwiZm9ybS1jb250cm9sXCIgbmFtZT1cInt7Zmw/LmZvcm1fZmllbGR9fVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJmbD8uZGVmYXVsdF92YWx1ZVwiIFsobmdNb2RlbCldPVwiZmwuZGVmYXVsdF92YWx1ZVwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXBcIiAqbmdJZj1cImZsPy5mb3JtX2ZpZWxkX3R5cCA9PSAndGInICYmIGZsPy5pc19oaWRkZW4gPT0gMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJjb2wtbWQtMyBjb250cm9sLWxhYmVsXCI+e3tmbD8uZm9ybV9maWVsZF90aXRsZX19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtZGFuZ2VyXCIgKm5nSWY9XCJmbC5pc19jb21wdWxzb3J5ID09IDFcIj4qPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ncm91cCB3LTEwMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzZWxlY3QgY2xhc3M9XCJmb3JtLWNvbnRyb2wgc2VsZWN0XCIgbmFtZT1cInt7Zmw/LmZvcm1fZmllbGR9fVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJmbD8uZGVmYXVsdF92YWx1ZVwiIFsobmdNb2RlbCldPVwiZmwuZGVmYXVsdF92YWx1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICN0ZGY9XCJuZ01vZGVsXCIgW3JlcXVpcmVkXT1cImZsPy5pc19jb21wdWxzb3J5ID09ICcxJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uICpuZ0Zvcj1cImxldCBkeW5hbWljIG9mIHNxbEFycmF5W2ZsLmZvcm1fZmllbGRdXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPVwie3tkeW5hbWljLnZhbHVlfX1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7ZHluYW1pYy5sYWJlbH19PC9vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zZWxlY3Q+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJ0ZGYuaW52YWxpZCAmJiAodGRmLmRpcnR5IHx8IHRkZi50b3VjaGVkKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJhbGVydCBhbGVydC1kYW5nZXIgY2FcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwidGRmLmVycm9ycy5yZXF1aXJlZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e2ZsLmZvcm1fZmllbGRfdGl0bGV9fSBpcyByZXF1aXJlZC5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cFwiICpuZ0lmPVwiZmw/LmZvcm1fZmllbGRfdHlwID09ICdsJyAmJiBmbD8uaXNfaGlkZGVuID09IDBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiY29sLW1kLTMgY29udHJvbC1sYWJlbFwiPnt7Zmw/LmZvcm1fZmllbGRfdGl0bGV9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LWRhbmdlclwiICpuZ0lmPVwiZmwuaXNfY29tcHVsc29yeSA9PSAxXCI+Kjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC05XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtZ3JvdXAgdy0xMDBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c2VsZWN0IGNsYXNzPVwiZm9ybS1jb250cm9sIHNlbGVjdFwiIG5hbWU9XCJ7e2ZsPy5mb3JtX2ZpZWxkfX1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPVwiZmw/LmRlZmF1bHRfdmFsdWVcIiBbKG5nTW9kZWwpXT1cImZsLmRlZmF1bHRfdmFsdWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjbElucHV0PVwibmdNb2RlbFwiIFtyZXF1aXJlZF09XCJmbD8uaXNfY29tcHVsc29yeSA9PSAnMSdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiAqbmdGb3I9XCJsZXQgbG92IG9mIGZsLmt2XCIgdmFsdWU9XCJ7e2xvdi5rfX1cIj57e2xvdi52fX08L29wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NlbGVjdD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImxJbnB1dC5pbnZhbGlkICYmIChsSW5wdXQuZGlydHkgfHwgbElucHV0LnRvdWNoZWQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImFsZXJ0IGFsZXJ0LWRhbmdlciBjYVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJsSW5wdXQuZXJyb3JzLnJlcXVpcmVkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7ZmwuZm9ybV9maWVsZF90aXRsZX19IGlzIHJlcXVpcmVkLlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwXCIgKm5nSWY9XCJmbD8uZm9ybV9maWVsZF90eXAgPT0gJ2xkJyAgJiYgZmw/LmlzX2hpZGRlbiA9PSAwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImNvbC1tZC0zIGNvbnRyb2wtbGFiZWxcIj57e2ZsPy5mb3JtX2ZpZWxkX3RpdGxlfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC1kYW5nZXJcIiAqbmdJZj1cImZsLmlzX2NvbXB1bHNvcnkgPT0gMVwiPio8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtOVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWdyb3VwIHctMTAwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNlbGVjdCBjbGFzcz1cImZvcm0tY29udHJvbCBzZWxlY3RcIiBuYW1lPVwie3tmbD8uZm9ybV9maWVsZH19XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cImZsPy5kZWZhdWx0X3ZhbHVlXCIgWyhuZ01vZGVsKV09XCJmbC5kZWZhdWx0X3ZhbHVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI2xkSW5wdXQ9XCJuZ01vZGVsXCIgW3JlcXVpcmVkXT1cImZsPy5pc19jb21wdWxzb3J5ID09ICcxJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uICpuZ0Zvcj1cImxldCBkeW5hbWljIG9mIHNxbEFycmF5W2ZsLmZvcm1fZmllbGRdXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPVwie3tkeW5hbWljLmt9fVwiPnt7ZHluYW1pYy52fX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zZWxlY3Q+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJsZElucHV0LmludmFsaWQgJiYgKGxkSW5wdXQuZGlydHkgfHwgbGRJbnB1dC50b3VjaGVkKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJhbGVydCBhbGVydC1kYW5nZXIgY2FcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwibGRJbnB1dC5lcnJvcnMucmVxdWlyZWRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3tmbC5mb3JtX2ZpZWxkX3RpdGxlfX0gaXMgcmVxdWlyZWQuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXBcIiAqbmdJZj1cImZsPy5mb3JtX2ZpZWxkX3R5cCA9PSAncycgJiYgZmw/LmlzX2hpZGRlbiA9PSAwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImNvbC1tZC0zIGNvbnRyb2wtbGFiZWxcIj57e2ZsPy5mb3JtX2ZpZWxkX3RpdGxlfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC1kYW5nZXJcIiAqbmdJZj1cImZsLmlzX2NvbXB1bHNvcnkgPT0gMVwiPio8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtOVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWdyb3VwIHctMTAwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNlbGVjdCBjbGFzcz1cImZvcm0tY29udHJvbCBzZWxlY3RcIiBuYW1lPVwie3tmbD8uZm9ybV9maWVsZH19XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cImZsPy5kZWZhdWx0X3ZhbHVlXCIgWyhuZ01vZGVsKV09XCJmbC5kZWZhdWx0X3ZhbHVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoYW5nZSk9XCJjaGtGdW4oZmwsZmwuZGVmYXVsdF92YWx1ZSlcIiBpZD1cInt7ZmwuY29sdW1uX2tleX19XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI3NmaT1cIm5nTW9kZWxcIiBbcmVxdWlyZWRdPVwiZmw/LmlzX2NvbXB1bHNvcnkgPT0gJzEnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gKm5nRm9yPVwibGV0IGR5bmFtaWMgb2Ygc3FsQXJyYXlbZmwuZm9ybV9maWVsZF1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU9XCJ7e2R5bmFtaWMudmFsdWV9fVwiPnt7ZHluYW1pYy5sYWJlbH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc2VsZWN0PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwic2ZpLmludmFsaWQgJiYgKHNmaS5kaXJ0eSB8fCBzZmkudG91Y2hlZClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYWxlcnQgYWxlcnQtZGFuZ2VyIGNhXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cInNmaS5lcnJvcnMucmVxdWlyZWRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3tmbC5mb3JtX2ZpZWxkX3RpdGxlfX0gaXMgcmVxdWlyZWQuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWZvb3RlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBhcHBBcHBOb0RibENsaWNrIGNsYXNzPVwiYnRuIGJ0bi1zdWNjZXNzXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJvblBvcHVwU3VibWl0KGZwb3AscG9wc3VibWl0QnRuKVwiICNwb3BzdWJtaXRCdG4+QWRkPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cInJlc2V0XCIgY2xhc3M9XCJidG4gYnRuLWRhbmdlclwiIChjbGljayk9XCJyZXNldChmKVwiPlJlc2V0PC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Zvcm0+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcblxyXG4gICAgPGRpdiBjbGFzcz1cIm1vZGFsXCIgaWQ9XCJwb3BSZXNtb2RhbFwiIHJvbGU9XCJkaWFsb2dcIiBhcmlhLWxhYmVsbGVkYnk9XCJkZWZNb2RhbEhlYWRcIiBhcmlhLWhpZGRlbj1cInRydWVcIlxyXG4gICAgICAgIGRhdGEtYmFja2Ryb3A9XCJzdGF0aWNcIiBkYXRhLWtleWJvYXJkPVwiZmFsc2VcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtZGlhbG9nXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1jb250ZW50XCI+XHJcbiAgICAgICAgICAgICAgICA8Zm9ybSBjbGFzcz1cImZvcm0taG9yaXpvbnRhbFwiIG5hbWU9XCJhcHBGb3JtcmVzXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWhlYWRlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImNsb3NlXCIgZGF0YS1kaXNtaXNzPVwibW9kYWxcIiAoY2xpY2spPVwiY2xvc2VOdWxsKCk7XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBhcmlhLWhpZGRlbj1cInRydWVcIj4mdGltZXM7PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzci1vbmx5XCI+Q2xvc2U8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8aDQgY2xhc3M9XCJtb2RhbC10aXRsZVwiIGlkPVwicG9wTW9kYWxIZWFkXCI+IFJlY29yZDwvaDQ+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWJvZHlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHAgKm5nRm9yPVwibGV0IHJlcyBvZiBTeXNyZXN1bHRcIj57e3Jlc319PC9wPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtZm9vdGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1kZWZhdWx0XCIgZGF0YS1kaXNtaXNzPVwibW9kYWxcIj5DbG9zZTwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9mb3JtPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG5cclxuXHJcblxyXG4gICAgPGRpdiBjbGFzcz1cIm1vZGFsXCIgaWQ9XCJwcm9kdWN0TWFwTWFzTURcIiByb2xlPVwiZGlhbG9nXCIgYXJpYS1sYWJlbGxlZGJ5PVwic21hbGxNb2RhbEhlYWRcIiBhcmlhLWhpZGRlbj1cInRydWVcIlxyXG4gICAgICAgIGRhdGEtYmFja2Ryb3A9XCJzdGF0aWNcIiBkYXRhLWtleWJvYXJkPVwiZmFsc2VcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtZGlhbG9nIG1vZGFsLXNtIG13aWR0aFwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtY29udGVudFwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWhlYWRlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiY2xvc2VcIiBkYXRhLWRpc21pc3M9XCJtb2RhbFwiIChjbGljayk9XCJjbG9zZU51bGwoKTtcIiAjcHJvZHVjdE1hcGNsc2J0bj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gYXJpYS1oaWRkZW49XCJ0cnVlXCI+JnRpbWVzOzwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzci1vbmx5XCI+Q2xvc2U8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgPGg0IGNsYXNzPVwibW9kYWwtdGl0bGVcIiBpZD1cInNtYWxsTW9kYWxIZWFkXCI+UHJvZHVjdCBNYXBwaW5nIG9mJm5ic3A7e3thdHRNYXBNb2RlbFRpdGxlfX08L2g0PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtYm9keVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0YWJsZS1yZXNwb25zaXZlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0YWJsZSBjbGFzcz1cInRhYmxlIHRhYmxlLWJvcmRlcmVkIHRhYmxlLWhvdmVyIHRhYmxlLWhvdmVyLWNlbGxzXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGhlYWQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOYW1lXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZhbHVlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGhlYWQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGJvZHk+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQga2V5IG9mIGF0dHJEdGw/LnBycExpc3RcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7a2V5LnByaW50fX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImF0dHJNYXBwaW5nRHRsW2tleT8udmFsXVwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC90YWJsZT5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtZm9vdGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1kZWZhdWx0XCIgZGF0YS1kaXNtaXNzPVwibW9kYWxcIj5DbG9zZTwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tc3VjY2Vzc1wiIGRhdGEtZGlzbWlzcz1cIm1vZGFsXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJzYXZlUHJvZHVjdE1hc3Rlck1hcHBpbmcoKTtcIiAjcHJvZHVjdE1hcGNsc2J0bj5TYXZlPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICAgIFxyXG5cclxuXHJcbiAgICBcclxuXHJcblxyXG4gICAgPGJ1dHRvbiBpZD1cImRlbGV0ZWJ0blwiIFtoaWRkZW5dPVwidHJ1ZVwiIGRhdGEtdG9nZ2xlPVwibW9kYWxcIiBkYXRhLXRhcmdldD1cIiNkZWxldGVtb2RhbFwiPjwvYnV0dG9uPlxyXG4gICAgPGJ1dHRvbiBpZD1cImRhdGFtZGJ0blwiIFtoaWRkZW5dPVwidHJ1ZVwiIGRhdGEtdG9nZ2xlPVwibW9kYWxcIiBkYXRhLXRhcmdldD1cIiNkYXRhbW9kYWxcIj48L2J1dHRvbj5cclxuICAgIDxidXR0b24gaWQ9XCJjbHNNZFwiIFtoaWRkZW5dPVwidHJ1ZVwiIGRhdGEtZGlzbWlzcz1cIm1vZGFsXCIgZGF0YS10YXJnZXQ9XCIjZGF0YW1vZGFsXCI+PC9idXR0b24+XHJcbiAgICA8YnV0dG9uIGlkPVwicG9wZGF0YW1kYnRuXCIgW2hpZGRlbl09XCJ0cnVlXCIgZGF0YS10b2dnbGU9XCJtb2RhbFwiIGRhdGEtdGFyZ2V0PVwiI3BvcGRhdGFtb2RhbFwiPjwvYnV0dG9uPlxyXG4gICAgPGJ1dHRvbiBpZD1cInBvcFJlc21vZGFsYnRuXCIgW2hpZGRlbl09XCJ0cnVlXCIgZGF0YS10b2dnbGU9XCJtb2RhbFwiIGRhdGEtdGFyZ2V0PVwiI3BvcFJlc21vZGFsXCI+PC9idXR0b24+XHJcbiAgICA8YnV0dG9uIGlkPVwicHJvZHVjdE1hcE1hc01EYnRuXCIgW2hpZGRlbl09XCJ0cnVlXCIgZGF0YS10b2dnbGU9XCJtb2RhbFwiIGRhdGEtdGFyZ2V0PVwiI3Byb2R1Y3RNYXBNYXNNRFwiPjwvYnV0dG9uPiJdfQ==
1121
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3lzdGVtLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2V6bGliL3NyYy9saWIvc3lzdGVtLW1vZHVsZS9zeXN0ZW0vc3lzdGVtLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2V6bGliL3NyYy9saWIvc3lzdGVtLW1vZHVsZS9zeXN0ZW0vc3lzdGVtLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQVUsU0FBUyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6RSxPQUFPLEVBQUUsV0FBVyxFQUFHLE1BQU0sc0JBQXNCLENBQUM7QUFDcEQsT0FBTyxFQUFFLE1BQU0sRUFBRSxjQUFjLEVBQXlCLE1BQU0saUJBQWlCLENBQUM7QUFFaEYsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUMzQyxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDakQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ2hELE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDBDQUEwQyxDQUFDO0FBQ2hGLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDZDQUE2QyxDQUFDO0FBQ25GLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLDJDQUEyQyxDQUFDOzs7Ozs7Ozs7Ozs7Ozs7OztBQVNoRixNQUFNLE9BQU8sZUFBZTtJQXFGMUIsWUFDUyxNQUFjLEVBQ2QsS0FBcUIsRUFDcEIsTUFBcUIsRUFDckIsRUFBd0IsRUFDeEIsY0FBaUMsRUFDbEMsRUFBd0IsRUFDdkIsRUFBdUI7UUFOeEIsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUNkLFVBQUssR0FBTCxLQUFLLENBQWdCO1FBQ3BCLFdBQU0sR0FBTixNQUFNLENBQWU7UUFDckIsT0FBRSxHQUFG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LFlBQVksQ0FBQyxDQUFDO2FBQ2hDO2lCQUFNO2dCQUNMLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxFQUFFLENBQUM7Z0JBQzNCLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQzthQUNyQztRQUNILENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQVEsRUFBRSxFQUFFO1lBQ3BCLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDM0IsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ2pDLENBQUMsQ0FBQyxDQUFDO0lBRUwsQ0FBQztJQUVELE9BQU87UUFDTCxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQztRQUMzQixJQUFJLElBQUksQ0FBQyxNQUFNLElBQUksSUFBSSxFQUFFO1lBQ3ZCLElBQUksQ0FBQyxJQUFJLEdBQUcsY0FBYyxDQUFDO1NBQzVCO2FBQU07WUFDTCxJQUFJLENBQUMsSUFBSSxHQUFHLGNBQWMsQ0FBQztTQUM1QjtJQUNILENBQUM7OytIQW5tQ1UsZUFBZTttSEFBZixlQUFlLHNtQkNsQjVCLHN1K0RBNjNCZ0g7MkZEMzJCbkcsZUFBZTtrQkFOM0IsU0FBUzsrQkFDRSxZQUFZOzhSQVFDLFFBQVE7c0JBQTlCLFNBQVM7dUJBQUMsVUFBVTtnQkFDTSxZQUFZO3NCQUF0QyxTQUFTO3VCQUFDLGNBQWM7Z0JBQ0osS0FBSztzQkFBekIsU0FBUzt1QkFBQyxRQUFRO2dCQUNPLFdBQVc7c0JBQXBDLFNBQVM7dUJBQUMsYUFBYTtnQkFDQSxTQUFTO3NCQUFoQyxTQUFTO3VCQUFDLFdBQVc7Z0JBQ1MsZ0JBQWdCO3NCQUE5QyxTQUFTO3VCQUFDLGtCQUFrQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0LCBWaWV3Q2hpbGQsIEVsZW1lbnRSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgSHR0cEhlYWRlcnMgIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xyXG5pbXBvcnQgeyBSb3V0ZXIsIEFjdGl2YXRlZFJvdXRlLCBQYXJhbXMsIE5hdmlnYXRpb25FbmQgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG5pbXBvcnQgeyBGb3JtQ29udHJvbCwgRm9ybUdyb3VwLCBWYWxpZGF0b3JzIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBUb2FzdHJTZXJ2aWNlIH0gZnJvbSAnbmd4LXRvYXN0cic7XHJcbmltcG9ydCB7IENvb2tpZSB9IGZyb20gJ25nMi1jb29raWVzL25nMi1jb29raWVzJztcclxuaW1wb3J0IHsgTmd4U3Bpbm5lclNlcnZpY2UgfSBmcm9tIFwibmd4LXNwaW5uZXJcIjtcclxuaW1wb3J0IHsgU3lzdGVtU2VydmljZVNlcnZpY2UgfSBmcm9tICcuLi9zeXN0ZW0tc2VydmljZS9zeXN0ZW0tc2VydmljZS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQ29tbWFuU2VydmljZVNlcnZpY2UgfSBmcm9tICcuLi8uLi9jb21tYW4tc2VydmljZS9jb21tYW4tc2VydmljZS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQWRtaW5TZXJ2aWNlU2VydmljZSB9IGZyb20gJy4uLy4uL2FkbWluLXNlcnZpY2UvYWRtaW4tc2VydmljZS5zZXJ2aWNlJztcclxuXHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2FwcC1zeXN0ZW0nLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9zeXN0ZW0uY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL3N5c3RlbS5jb21wb25lbnQuY3NzJ11cclxufSlcclxuXHJcbmV4cG9ydCBjbGFzcyBTeXN0ZW1Db21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xyXG4gIC8vIGl0ZW1zID0gWydQaXp6YScsICdQYXN0YScsICdQYXJtZXNhbiddO1xyXG5cclxuICBAVmlld0NoaWxkKCdjbG9zZWJ0bicpIGNsb3NlYnRuOiBFbGVtZW50UmVmO1xyXG4gIEBWaWV3Q2hpbGQoJ2RlbGV0ZWNsc2J0bicpIGRlbGV0ZWNsc2J0bjogRWxlbWVudFJlZjtcclxuICBAVmlld0NoaWxkKCdpbnB1dHMnKSBpbnB1dDogRWxlbWVudFJlZjtcclxuICBAVmlld0NoaWxkKCdwb3BjbG9zZWJ0bicpIHBvcGNsb3NlYnRuOiBFbGVtZW50UmVmO1xyXG4gIEBWaWV3Q2hpbGQoJ3N1Ym1pdEJ0bicpIHN1Ym1pdGJ0bjogRWxlbWVudFJlZjtcclxuICBAVmlld0NoaWxkKCdwcm9kdWN0TWFwY2xzYnRuJykgcHJvZHVjdE1hcGNsc2J0bjogRWxlbWVudFJlZjtcclxuICBjRHQgPSBuZXcgRGF0ZSgpO1xyXG5cclxuICBmb3JtRmlsZHMgPSBbXTtcclxuICBmb3JtRmlsZHNQb3B1cCA9IFtdO1xyXG4gIGRhdGFsaXN0ID0gW107XHJcbiAgYWN0aW9ucyA9IFtdO1xyXG4gIGxvdnMgPSBbXTtcclxuICBhZGROZXc6IGFueSA9IFtdO1xyXG4gIHRibEggPSBbXTtcclxuICB0YmxEZXNjID0gW107XHJcbiAgbmF2aWdhdGlvbiA9IFtdO1xyXG4gIFN5c3Jlc3VsdCA9IFtdO1xyXG4gIGRhdGE7XHJcblxyXG4gIHdoZXJlTWFwID0ge307XHJcbiAgcGFyYU9iaiA9IHt9O1xyXG4gIGN1cnJPYmogPSB7fTtcclxuICBzcWxBcnJheSA9IHt9O1xyXG4gIGdsYk9iaiA9IHt9XHJcblxyXG4gIHBhZ2VTaXplID0gMTA7XHJcbiAgY0xpbmsgPSAwO1xyXG4gIHAgPSAxO1xyXG5cclxuICBldmVDID0gJ2ZhLWV5ZS1zbGFzaCc7XHJcbiAgaW5wdXR0eXBlID0gJ3Bhc3N3b3JkJztcclxuICBvcmRlciA9ICcnO1xyXG5cclxuICByZXZlcnNlID0gZmFsc2U7XHJcbiAgc3ViZm9ybSA9IGZhbHNlO1xyXG4gIGVzdHN0ID0gZmFsc2U7XHJcblxyXG4gIHNob3dhcnI7XHJcbiAgcGFnZUluZm87XHJcbiAgcG9wdXBwYWdlSW5mbztcclxuICBoZWFkZXI7XHJcbiAgYnRuTmFtZTtcclxuICBwaWQ7XHJcbiAgc2VhcmNoRjtcclxuICB3aHJLO1xyXG4gIHdoclY7XHJcbiAgc3ViRnJtV2s7XHJcbiAgc3ViRnJtV3Y7XHJcbiAgbmF2Zm9ybTtcclxuICBvbkVycjtcclxuICBob3ZlcmVkSTtcclxuICB0YkNlbGw7XHJcbiAgdGl0bGVcclxuICBwa2Y7XHJcbiAgY3VybDtcclxuICB1aUdycExpc3Q7XHJcbiAgdWlHcnBMaXN0RHRsO1xyXG4gIGRhdGFEdGxcclxuICBhZGRGcm1ObWU7XHJcbiAgY29pZG47XHJcbiAgY3VycnN0YXQ7XHJcbiAgY1VybDtcclxuICBhY3Rpb247XHJcbiAgYXR0ckR0bDtcclxuICBhdHRyTWFwcGluZ0R0bDtcclxuICBwcm9kdWN0TWFzQXR0cklkO1xyXG4gIGF0dE1hcE1vZGVsVGl0bGU7XHJcbiAgY29udGFjdE5hbWUgPSBcIlwiO1xyXG4gIGlzT3Blbj0gdHJ1ZVxyXG4gIGljb24gPSAnZmEgZmEtZGVkZW50JztcclxuICBhcHBsaWNhdGlvbkxpc3Q6IGFueSA9IFtdO1xyXG4gIGFwcCA9ICcnO1xyXG4gIHY9ICcnO1xyXG4gIHYxID0gJyc7XHJcbiAgdjIgPSAnJztcclxuICB2MyA9ICcnO1xyXG4gIGxldmVsID0gJyc7XHJcbiAgbWRsbGlzdCA9IFtdO1xyXG4gIG1lbnVsdmwxTGlzdCA9IFtdO1xyXG4gIG1lbnVsdmwyTGlzdCA9IFtdO1xyXG4gIG1lbnVsdmwzTGlzdCA9IFtdO1xyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHVibGljIHJvdXRlcjogUm91dGVyLFxyXG4gICAgcHVibGljIHJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSxcclxuICAgIHByaXZhdGUgdG9hc3RyOiBUb2FzdHJTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBzczogU3lzdGVtU2VydmljZVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHNwaW5uZXJTZXJ2aWNlOiBOZ3hTcGlubmVyU2VydmljZSAsXHJcbiAgICBwdWJsaWMgY3M6IENvbW1hblNlcnZpY2VTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBhczogQWRtaW5TZXJ2aWNlU2VydmljZVxyXG5cclxuICApIHtcclxuXHJcbiAgfVxyXG5cclxuICAvL2xvYWQgcGFnZSBkZWZpbmF0aW9uXHJcbiAgZ2V0UGFnZURlZmluYXRpb24oKSB7XHJcbiAgICB0aGlzLmRhdGFsaXN0ID0gW107XHJcbiAgICB0aGlzLndoZXJlTWFwID0gW107XHJcbiAgICB0aGlzLnNwaW5uZXJTZXJ2aWNlLnNob3coKTtcclxuICAgIGxldCBhY3Rpb24gPSB0aGlzLnJvdXRlLnNuYXBzaG90LnBhcmFtc1snYWN0aW9uJ10gfHwgJyc7XHJcbiAgICBpZiAodGhpcy53aHJWICE9IG51bGwgJiYgdGhpcy5zdWJGcm1XayA9PSBudWxsKSB7XHJcbiAgICAgIHRoaXMucGFyYU9ialsnd2hlcmVLZXlzJ10gPSB0aGlzLndocks7XHJcbiAgICAgIHRoaXMucGFyYU9ialsnd2hlcmVWbHVzJ10gPSAnJyArIHRoaXMud2hyVjtcclxuICAgICAgdGhpcy53aGVyZU1hcFt0aGlzLndocktdID0gdGhpcy53aHJWO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5wYXJhT2JqWyd3aGVyZUtleXMnXSA9ICcxJztcclxuICAgICAgdGhpcy5wYXJhT2JqWyd3aGVyZVZsdXMnXSA9ICcxJztcclxuICAgIH1cclxuICAgIHRoaXMuaGVhZGVyWydtZXRob2QnXSA9ICdsb2FkTGlzdCc7XHJcbiAgICBpZiAodGhpcy5wYWdlSW5mbyAhPSBudWxsKSB7XHJcbiAgICAgIHZhciBwYWdlVFAgPSB0aGlzLnBhZ2VJbmZvLnBhZ2VfdHlwO1xyXG4gICAgICBpZiAocGFnZVRQID09ICdqc29uRm9ybScpIHtcclxuICAgICAgICB0aGlzLnBhcmFPYmpbJ3doZXJlS2V5cyddID0gdGhpcy5wYWdlSW5mby53aGVyZV9jbGF1c2U7XHJcbiAgICAgICAgdGhpcy5wYXJhT2JqWyd3aGVyZVZsdXMnXSA9IHRoaXMud2hlcmVNYXBbdGhpcy5wYWdlSW5mby53aGVyZV9jbGF1c2VdO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAoYWN0aW9uID09ICduZXdjb250YWN0Jykge1xyXG4gICAgICB0aGlzLnBhcmFPYmpbJ3doZXJlS2V5cyddID0gXCJubWVfaWRuXCI7XHJcbiAgICAgIHRoaXMucGFyYU9ialsnd2hlcmVWbHVzJ10gPSBcIjBcIjtcclxuXHJcbiAgICB9XHJcbiAgICBpZiAoYWN0aW9uID09ICduZXdhY2Njb250YWN0Jykge1xyXG4gICAgICB0aGlzLnBhcmFPYmpbJ3doZXJlS2V5cyddID0gXCJubWVfaWRuXCI7XHJcbiAgICAgIHRoaXMucGFyYU9ialsnd2hlcmVWbHVzJ10gPSBcIjBcIjtcclxuXHJcbiAgICB9XHJcbiAgICBpZiAoYWN0aW9uID09ICduZXdsZWRnZXInKSB7XHJcbiAgICAgIHRoaXMucGFyYU9ialsnd2hlcmVLZXlzJ10gPSBcImxlZGdlcl9pZG5cIjtcclxuICAgICAgdGhpcy5wYXJhT2JqWyd3aGVyZVZsdXMnXSA9IFwiMFwiO1xyXG5cclxuICAgIH1cclxuICAgIGlmKHRoaXMucm91dGUuc25hcHNob3QucGFyYW1zWydmcm1ubWUnXSA9PSAnbWVudU1hc3RlcicpIHtcclxuICAgICAgdGhpcy5wYXJhT2JqWydoZWFkZXJJZG4nXSA9IHRoaXMuYXBwO1xyXG4gICAgICB0aGlzLnBhcmFPYmpbJ21vZHVsZUlkbiddID0gdGhpcy52O1xyXG4gICAgICB0aGlzLnBhcmFPYmpbJ2xldmVsJ10gPSB0aGlzLmxldmVsXHJcbiAgICB9XHJcbiAgICBsZXQgb3B0aW9ucyA9ICh7IGhlYWRlcnM6IG5ldyBIdHRwSGVhZGVycyh0aGlzLmhlYWRlcikgfSk7XHJcbiAgICB0aGlzLnNzLmdldERhdGEodGhpcy5wYXJhT2JqLCBvcHRpb25zKS50aGVuKChyZXNwb25zZTogYW55KSA9PiB7XHJcbiAgICAgIGlmIChyZXNwb25zZS5zdGF0dXMgPT0gJ1NVQ0NFU1MnKSB7XHJcbiAgICAgICAgY29uc29sZS5sb2cocmVzcG9uc2UpO1xyXG4gICAgICAgIHRoaXMuc3Bpbm5lclNlcnZpY2UuaGlkZSgpO1xyXG4gICAgICAgIHRoaXMudGJsSCA9IHJlc3BvbnNlLmRhdGFIZWFkZXI7XHJcbiAgICAgICAgdGhpcy50YmxEZXNjID0gcmVzcG9uc2UuZGF0YUhlYWRlclByaW50O1xyXG4gICAgICAgIHRoaXMuYWRkTmV3ID0gcmVzcG9uc2UuYnV0dG9uc1swXSB8fCB7fTtcclxuICAgICAgICB0aGlzLnBhZ2VJbmZvID0gcmVzcG9uc2UucGFnZUluZm87XHJcbiAgICAgICAgdGhpcy5wa2YgPSByZXNwb25zZS5wYWdlSW5mby5wcmltYXJ5X2tleV9maWVsZDtcclxuICAgICAgICB0aGlzLmRhdGFsaXN0ID0gcmVzcG9uc2UuZGF0YUxpc3QgfHwgW107XHJcbiAgICAgICAgaWYodGhpcy5kYXRhbGlzdC5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICB0aGlzLnAgPSAxO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmlzT3BlbiA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuaWNvbiA9ICdmYSBmYS1pbmRlbnQnO1xyXG4gICAgICAgIHRoaXMuYWN0aW9ucyA9IHJlc3BvbnNlLmFjdGlvbnM7XHJcbiAgICAgICAgdGhpcy5uYXZpZ2F0aW9uID0gcmVzcG9uc2UubmF2aWdhdGlvbjtcclxuICAgICAgICBpZiAoYWN0aW9uID09ICduZXdjb250YWN0JyB8fCBhY3Rpb24gPT0gJ25ld2xlZGdlcicgfHwgYWN0aW9uID09ICduZXdhY2Njb250YWN0Jykge1xyXG4gICAgICAgICAgdGhpcy5hY3Rpb24gPSBhY3Rpb247XHJcbiAgICAgICAgICB0aGlzLm5hdmlnYXRpb24gPSByZXNwb25zZS5uYXZpZ2F0aW9uWzBdO1xyXG4gICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuZm9ybUZpbGRzID0gW107XHJcbiAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkYXRhbWRidG4nKS5jbGljaygpO1xyXG4gICAgICAgICAgICB0aGlzLnBhcmFPYmpbJ2Zvcm1ObWUnXSA9IHRoaXMucm91dGUuc25hcHNob3QucGFyYW1zWydmcm1ubWUnXTtcclxuICAgICAgICAgICAgdGhpcy5nZXRGb3JtRmllbGRzKCk7XHJcbiAgICAgICAgICAgIHRoaXMuYnRuTmFtZSA9ICdBZGQnO1xyXG4gICAgICAgICAgfSwgNTAwKVxyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLnNwaW5uZXJTZXJ2aWNlLmhpZGUoKTtcclxuICAgICAgICB0aGlzLnRvYXN0ci5lcnJvcihyZXNwb25zZS5tZXNzYWdlKVxyXG4gICAgICB9XHJcbiAgICB9KS5jYXRjaCgoZXJyOiBhbnkpID0+IHtcclxuICAgICAgdGhpcy5zcGlubmVyU2VydmljZS5oaWRlKCk7XHJcbiAgICAgIHRoaXMudG9hc3RyLmVycm9yKGVyci5tZXNzYWdlKVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAvL2xvYWQgZm9ybSBmaWVsZHNcclxuICBnZXRGb3JtRmllbGRzKCkge1xyXG4gICAgdGhpcy5zcGlubmVyU2VydmljZS5zaG93KCk7XHJcbiAgICBpZiAodGhpcy53aHJWICE9IG51bGwpIHtcclxuICAgICAgdGhpcy5wYXJhT2JqWyd3aGVyZUtleXMnXSA9IHRoaXMud2hySztcclxuICAgICAgdGhpcy5wYXJhT2JqWyd3aGVyZVZsdXMnXSA9IHRoaXMud2hyVjtcclxuICAgIH1cclxuICAgIHRoaXMuaGVhZGVyWydtZXRob2QnXSA9ICdsb2FkQWRkRWRpdCc7XHJcbiAgICBjb25zb2xlLmxvZyhKU09OLnN0cmluZ2lmeSh0aGlzLnBhcmFPYmopKVxyXG4gICAgY29uc29sZS5sb2coSlNPTi5zdHJpbmdpZnkodGhpcy5oZWFkZXIpKVxyXG4gICAgbGV0IG9wdGlvbnMgPSAoeyBoZWFkZXJzOiBuZXcgSHR0cEhlYWRlcnModGhpcy5oZWFkZXIpIH0pO1xyXG4gICAgdGhpcy5zcy5nZXRGb3JtRih0aGlzLnBhcmFPYmosIG9wdGlvbnMpLnRoZW4oKHJlc3BvbnNlOiBhbnkpID0+IHtcclxuICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1cyA9PSAnU1VDQ0VTUycgJiYgcmVzcG9uc2UubWVzc2FnZSAhPSAnU1VDQ0VTUycpIHtcclxuICAgICAgICB0aGlzLnRvYXN0ci5lcnJvcihyZXNwb25zZS5tZXNzYWdlKVxyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfTtcclxuICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1cyA9PSAnU1VDQ0VTUycpIHtcclxuICAgICAgICBjb25zb2xlLmxvZyhyZXNwb25zZSk7XHJcbiAgICAgICAgdGhpcy5mb3JtRmlsZHMgPSByZXNwb25zZS5mb3JtRmllbGRzO1xyXG4gICAgICAgIGRlYnVnZ2VyXHJcbiAgICAgICAgdGhpcy5zcGlubmVyU2VydmljZS5oaWRlKCk7XHJcbiAgICAgICAgdGhpcy5mb3JtRmlsZHMuZm9yRWFjaChlbGVtZW50ID0+IHtcclxuICAgICAgICAgIGlmIChlbGVtZW50LmZvcm1fZmllbGRfdHlwID09ICd0YicpIHtcclxuICAgICAgICAgICAgdGhpcy5nZXRMb3ZMaXN0KGVsZW1lbnQuZm9ybV9maWVsZCwgZWxlbWVudC5wYWdlX2l0ZW1faWRuKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGlmIChlbGVtZW50LmZvcm1fZmllbGRfdHlwID09ICdzJykge1xyXG4gICAgICAgICAgICB0aGlzLmdldExvdkxpc3QoZWxlbWVudC5mb3JtX2ZpZWxkLCBlbGVtZW50LnBhZ2VfaXRlbV9pZG4pO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaWYgKGVsZW1lbnQuZm9ybV9maWVsZF90eXAgPT0gJ2hkJykge1xyXG4gICAgICAgICAgICBlbGVtZW50LmRlZmF1bHRfdmFsdWUgPSB0aGlzLndoZXJlTWFwW2VsZW1lbnQuZm9ybV9maWVsZF07XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZiAoZWxlbWVudC5mb3JtX2ZpZWxkX3R5cCA9PSAnc3EnKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZ2V0U2VxdWVuY2UoZWxlbWVudCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZiAoZWxlbWVudC5kdGFfdHlwID09ICdzYScpIHtcclxuICAgICAgICAgICAgdGhpcy5nZXRMb3ZMaXN0KGVsZW1lbnQuZm9ybV9maWVsZCwgZWxlbWVudC5wYWdlX2l0ZW1faWRuKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLnNwaW5uZXJTZXJ2aWNlLmhpZGUoKTtcclxuICAgICAgICB0aGlzLnRvYXN0ci5lcnJvcihyZXNwb25zZS5tZXNzYWdlKVxyXG4gICAgICB9XHJcbiAgICB9KS5jYXRjaCgoZXJyOiBhbnkpID0+IHtcclxuICAgICAgdGhpcy5zcGlubmVyU2VydmljZS5oaWRlKCk7XHJcbiAgICAgIHRoaXMudG9hc3RyLmVycm9yKGVyci5tZXNzYWdlKVxyXG4gICAgfSk7XHJcbiAgfVxyXG4gIC8vbG9hZCBmb3JtIGZpZWxkc1xyXG4gIGdldEZvcm1GaWVsZHNQb3B1cCgpIHtcclxuICAgIHRoaXMuc3Bpbm5lclNlcnZpY2Uuc2hvdygpO1xyXG4gICAgaWYgKHRoaXMud2hyViAhPSBudWxsKSB7XHJcbiAgICAgIHRoaXMucGFyYU9ialsnd2hlcmVLZXlzJ10gPSB0aGlzLndocks7XHJcbiAgICAgIHRoaXMucGFyYU9ialsnd2hlcmVWbHVzJ10gPSB0aGlzLndoclY7XHJcblxyXG4gICAgICB0aGlzLndoZXJlTWFwW3RoaXMud2hyS10gPSB0aGlzLndoclY7XHJcbiAgICB9XHJcbiAgICB0aGlzLmhlYWRlclsnbWV0aG9kJ10gPSAnbG9hZEFkZEVkaXQnO1xyXG4gICAgbGV0IG9wdGlvbnMgPSAoeyBoZWFkZXJzOiBuZXcgSHR0cEhlYWRlcnModGhpcy5oZWFkZXIpIH0pO1xyXG4gICAgdGhpcy5zcy5nZXRGb3JtRih0aGlzLnBhcmFPYmosIG9wdGlvbnMpLnRoZW4oKHJlc3BvbnNlOiBhbnkpID0+IHtcclxuICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1cyA9PSAnU1VDQ0VTUycgJiYgcmVzcG9uc2UubWVzc2FnZSAhPSAnU1VDQ0VTUycpIHtcclxuICAgICAgICB0aGlzLnRvYXN0ci5lcnJvcihyZXNwb25zZS5tZXNzYWdlKVxyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfTtcclxuICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1cyA9PSAnU1VDQ0VTUycpIHtcclxuICAgICAgICBjb25zb2xlLmxvZyhyZXNwb25zZSk7XHJcbiAgICAgICAgZGVidWdnZXI7XHJcbiAgICAgICAgdGhpcy5mb3JtRmlsZHNQb3B1cCA9IHJlc3BvbnNlLmZvcm1GaWVsZHM7XHJcbiAgICAgICAgdGhpcy5wb3B1cHBhZ2VJbmZvID0gcmVzcG9uc2UucGFnZUluZm87XHJcbiAgICAgICAgdGhpcy5zcGlubmVyU2VydmljZS5oaWRlKCk7XHJcbiAgICAgICAgdGhpcy5mb3JtRmlsZHNQb3B1cC5mb3JFYWNoKGVsZW1lbnQgPT4ge1xyXG4gICAgICAgICAgZGVidWdnZXI7XHJcbiAgICAgICAgICBpZiAoZWxlbWVudC5mb3JtX2ZpZWxkX3R5cCA9PSAndGInKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZ2V0TG92TGlzdChlbGVtZW50LmZvcm1fZmllbGQsIGVsZW1lbnQucGFnZV9pdGVtX2lkbik7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZiAoZWxlbWVudC5mb3JtX2ZpZWxkX3R5cCA9PSAncycpIHtcclxuICAgICAgICAgICAgdGhpcy5nZXRMb3ZMaXN0KGVsZW1lbnQuZm9ybV9maWVsZCwgZWxlbWVudC5wYWdlX2l0ZW1faWRuKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGlmIChlbGVtZW50LmZvcm1fZmllbGRfdHlwID09ICdoZCcpIHtcclxuICAgICAgICAgICAgZWxlbWVudC5kZWZhdWx0X3ZhbHVlID0gdGhpcy53aGVyZU1hcFtlbGVtZW50LmZvcm1fZmllbGRdO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaWYgKGVsZW1lbnQuZm9ybV9maWVsZF90eXAgPT0gJ3NxJykge1xyXG4gICAgICAgICAgICB0aGlzLmdldFNlcXVlbmNlKGVsZW1lbnQpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaWYgKGVsZW1lbnQuZm9ybV9maWVsZF90eXAgPT0gJ2ZrJykge1xyXG4gICAgICAgICAgICBlbGVtZW50LmRlZmF1bHRfdmFsdWUgPSB0aGlzLndoclY7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZiAoZWxlbWVudC5kdGFfdHlwID09ICdzYScpIHtcclxuICAgICAgICAgICAgdGhpcy5nZXRMb3ZMaXN0KGVsZW1lbnQuZm9ybV9maWVsZCwgZWxlbWVudC5wYWdlX2l0ZW1faWRuKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLnNwaW5uZXJTZXJ2aWNlLmhpZGUoKTtcclxuICAgICAgICB0aGlzLnRvYXN0ci5lcnJvcihyZXNwb25zZS5tZXNzYWdlKVxyXG4gICAgICB9XHJcbiAgICB9KS5jYXRjaCgoZXJyOiBhbnkpID0+IHtcclxuICAgICAgdGhpcy5zcGlubmVyU2VydmljZS5oaWRlKCk7XHJcbiAgICAgIHRoaXMudG9hc3RyLmVycm9yKGVyci5tZXNzYWdlKVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAvLyBmdW5jdGlvbiB0byByZW1vdmUgaW52YWxpZCBjaGFyYWN0ZXJzXHJcbiAgLy8gcmVtb3ZlSW52YWxpZChmbCkge1xyXG4gIC8vICAgaWYgKGZsLmZvcm1fZmllbGQgPT0gXCJubWVcIiB8fCBmbC5mb3JtX2ZpZWxkID09IFwicHJpbnRfbm1lXCIpIHtcclxuICAvLyAgICAgZmwuZGVmYXVsdF92YWx1ZSA9IGZsLmRlZmF1bHRfdmFsdWUucmVwbGFjZSgvW15hLXogXS9naSwgJycpO1xyXG4gIC8vICAgfVxyXG4gIC8vIH07XHJcblxyXG4gIC8vdXNlcnMgYWN0aW9uIGxpa2UgJ2FkZCcsICdlZGl0JywgJ2RlbGV0ZScgYW5kICdhZCBJdGVtJ1xyXG4gIHVzZXJBY3Rpb24odWEsIGMsIGEpIHtcclxuICAgIGRlYnVnZ2VyXHJcbiAgICBjb25zb2xlLmxvZyh1YSwgYywgYSk7XHJcbiAgICBpZiAoYyA9PSAnYWRkJykge1xyXG4gICAgICB0aGlzLnNwaW5uZXJTZXJ2aWNlLnNob3coKTtcclxuICAgICAgdGhpcy5mb3JtRmlsZHMgPSBbXTtcclxuICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2RhdGFtZGJ0bicpLmNsaWNrKCk7XHJcbiAgICAgIHRoaXMucGFyYU9ialsnZm9ybU5tZSddID0gdGhpcy5yb3V0ZS5zbmFwc2hvdC5wYXJhbXNbJ2ZybW5tZSddO1xyXG4gICAgICB0aGlzLmdldEZvcm1GaWVsZHMoKTtcclxuICAgICAgdGhpcy5idG5OYW1lID0gJ0FkZCc7XHJcbiAgICB9IGVsc2UgaWYgKHVhICYmIGMudHJpbSgpID09ICdlZGl0Jykge1xyXG4gICAgICB0aGlzLmdsYk9iaiA9IHVhO1xyXG4gICAgICB0aGlzLnNwaW5uZXJTZXJ2aWNlLnNob3coKTtcclxuICAgICAgdGhpcy5mb3JtRmlsZHMgPSBbXTtcclxuICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2RhdGFtZGJ0bicpLmNsaWNrKCk7XHJcbiAgICAgIHRoaXMucGlkID0gdWFbdGhpcy5wa2ZdO1xyXG4gICAgICB0aGlzLnBhcmFPYmpbJ2Zvcm1ObWUnXSA9IHRoaXMucm91dGUuc25hcHNob3QucGFyYW1zWydmcm1ubWUnXTtcclxuICAgICAgdGhpcy5nZXRFZGl0RGF0YSh1YVt0aGlzLnBrZl0pO1xyXG4gICAgICB0aGlzLmJ0bk5hbWUgPSAnRWRpdCc7XHJcbiAgICB9IGVsc2UgaWYgKGEuZm9ybV9maWVsZCA9PSAnYWRkQXR0cicpIHtcclxuICAgICAgdGhpcy5zcGlubmVyU2VydmljZS5zaG93KCk7XHJcbiAgICAgIHRoaXMuZm9ybUZpbGRzID0gW107XHJcbiAgICAgIHRoaXMuY3VybCA9IGEubG92X3FyeTtcclxuICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW2EubG92X3FyeS50cmltKCksIHRoaXMucGtmLCB1YVt0aGlzLnBrZl1dKTtcclxuICAgICAgdGhpcy53aHJLID0gdGhpcy5wa2Y7XHJcbiAgICAgIHRoaXMud2hyViA9IHVhW3RoaXMucGtmXTtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKHVhICYmIGMudHJpbSgpID09ICdzdWJmb3JtJyAmJiBhLmZvcm1fZmllbGQgIT0gXCJvdXRfbWFwcGluZ1wiKSB7XHJcbiAgICAgIHRoaXMuc3Bpbm5lclNlcnZpY2Uuc2hvdygpO1xyXG4gICAgICB0aGlzLmZvcm1GaWxkcyA9IFtdO1xyXG4gICAgICB0aGlzLmN1cmwgPSBhLmxvdl9xcnk7XHJcbiAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFthLmxvdl9xcnkudHJpbSgpLCB0aGlzLnBrZiwgdWFbdGhpcy5wa2ZdXSk7XHJcbiAgICAgIHRoaXMud2hySyA9IHRoaXMucGtmO1xyXG4gICAgICB0aGlzLndoclYgPSB1YVt0aGlzLnBrZl07XHJcbiAgICB9IGVsc2UgaWYgKHVhICYmIGMudHJpbSgpID09ICdkZWxldGUnKSB7XHJcbiAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkZWxldGVidG4nKS5jbGljaygpO1xyXG4gICAgICB0aGlzLnBpZCA9IHVhW3RoaXMucGtmXTtcclxuICAgICAgdGhpcy5wYXJhT2JqWydmb3JtTm1lJ10gPSB0aGlzLnJvdXRlLnNuYXBzaG90LnBhcmFtc1snZnJtbm1lJ107XHJcbiAgICB9IGVsc2UgaWYgKGMudHJpbSgpID09ICdwb3B1cCcpIHtcclxuICAgICAgZGVidWdnZXI7XHJcbiAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdwb3BkYXRhbWRidG4nKS5jbGljaygpO1xyXG4gICAgICB0aGlzLnBhcmFPYmpbJ2Zvcm1ObWUnXSA9IGEubG92X3FyeS5zcGxpdCgnLycpWzJdO1xyXG4gICAgICB0aGlzLndocksgPSB0aGlzLnBrZjtcclxuICAgICAgdGhpcy53aHJWID0gdWFbdGhpcy5wa2ZdO1xyXG4gICAgICB0aGlzLmdldEZvcm1GaWVsZHNQb3B1cCgpO1xyXG4gICAgICB0aGlzLnBpZCA9IHVhW3RoaXMucGtmXTtcclxuICAgICAgdGhpcy5idG5OYW1lID0gJ0FkZCc7XHJcbiAgICB9IGVsc2UgaWYgKGMudHJpbSgpID09ICdkZWZpbmF0aW9uJykge1xyXG4gICAgICBjb25zb2xlLmxvZyhhLmxvdl9xcnkudHJpbSgpLCB1YVt0aGlzLnBrZl0pXHJcbiAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFthLmxvdl9xcnkudHJpbSgpLCB1YVt0aGlzLnBrZl1dKTtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKGMudHJpbSgpID09ICdzdWJmb3JtJyAmJiBhLmZvcm1fZmllbGQgPT0gXCJvdXRfbWFwcGluZ1wiKSB7XHJcbiAgICAgIHRoaXMubG9hZFByb2R1Y3RNYXN0ZXJNYXBwaW5nKHVhWydhdHRyX2lkbiddKTtcclxuICAgICAgdGhpcy5hdHRNYXBNb2RlbFRpdGxlID0gdWEuZGlzcGxheTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGxvYWRQcm9kdWN0TWFzdGVyTWFwcGluZyhhdHRySWRuKSB7XHJcbiAgICB0aGlzLnByb2R1Y3RNYXNBdHRySWQgPSBhdHRySWRuO1xyXG4gICAgdGhpcy5zcGlubmVyU2VydmljZS5zaG93KCk7XHJcbiAgICBsZXQgb2JqID0ge307XHJcbiAgICBvYmpbJ2Zvcm1ObWUnXSA9ICdmaWxlVXBsb2FkJztcclxuICAgIG9ialsnYXR0cl9pZG4nXSA9IGF0dHJJZG47XHJcbiAgICB0aGlzLmhlYWRlclsnbWV0aG9kJ10gPSAnbG9hZFByZE1hc3Rlck1hcHBpbmcnXHJcbiAgICBsZXQgb3B0aW9ucyA9ICh7IGhlYWRlcnM6IG5ldyBIdHRwSGVhZGVycyh0aGlzLmhlYWRlcikgfSk7XHJcbiAgICB0aGlzLnNzLlNhdmUob2JqLCBvcHRpb25zLCAnZmlsZVVwbG9hZC9sb2FkJykudGhlbigocmVzcG9uc2U6IGFueSkgPT4ge1xyXG4gICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzID09ICdTVUNDRVNTJykge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKHJlc3BvbnNlKTtcclxuICAgICAgICBsZXQgcmVzdWx0ID0gcmVzcG9uc2UucmVzdWx0O1xyXG4gICAgICAgIHRoaXMuYXR0ckR0bCA9IHJlc3VsdC5hdHRyRHRsO1xyXG4gICAgICAgIHRoaXMuYXR0ck1hcHBpbmdEdGwgPSByZXN1bHQuYXR0ck1hcHBpbmdEdGw7XHJcbiAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Byb2R1Y3RNYXBNYXNNRGJ0bicpLmNsaWNrKCk7XHJcbiAgICAgICAgdGhpcy5zcGlubmVyU2VydmljZS5oaWRlKCk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5zcGlubmVyU2VydmljZS5oaWRlKCk7XHJcbiAgICAgICAgdGhpcy50b2FzdHIuZXJyb3IocmVzcG9uc2UubWVzc2FnZSlcclxuICAgICAgfVxyXG4gICAgfSkuY2F0Y2goKGVycjogYW55KSA9PiB7XHJcbiAgICAgIHRoaXMuc3Bpbm5lclNlcnZpY2UuaGlkZSgpO1xyXG4gICAgICB0aGlzLnRvYXN0ci5lcnJvcihlcnIubWVzc2FnZSlcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgc2F2ZVByb2R1Y3RNYXN0ZXJNYXBwaW5nKCkge1xyXG4gICAgdGhpcy5zcGlubmVyU2VydmljZS5zaG93KCk7XHJcbiAgICBsZXQgb2JqID0ge307XHJcbiAgICBvYmpbJ2Zvcm1ObWUnXSA9ICdmaWxlVXBsb2FkJztcclxuICAgIG9ialsnYXR0cl9pZG4nXSA9IHRoaXMucHJvZHVjdE1hc0F0dHJJZDtcclxuICAgIG9ialsnYXR0ckR0bE1hcCddID0gdGhpcy5hdHRyTWFwcGluZ0R0bDtcclxuICAgIHRoaXMuaGVhZGVyWydtZXRob2QnXSA9ICd1cGRhdGVQcm9kdWN0QXR0cidcclxuICAgIGNvbnNvbGUubG9nKEpTT04uc3RyaW5naWZ5KG9iaikpO1xyXG4gICAgbGV0IG9wdGlvbnMgPSAoeyBoZWFkZXJzOiBuZXcgSHR0cEhlYWRlcnModGhpcy5oZWFkZXIpIH0pO1xyXG4gICAgdGhpcy5zcy5TYXZlKG9iaiwgb3B0aW9ucywgJ2ZpbGVVcGxvYWQvbG9hZCcpLnRoZW4oKHJlc3BvbnNlOiBhbnkpID0+IHtcclxuICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1cyA9PSAnU1VDQ0VTUycpIHtcclxuICAgICAgICBjb25zb2xlLmxvZyhyZXNwb25zZSk7XHJcbiAgICAgICAgdGhpcy50b2FzdHIuc3VjY2VzcyhyZXNwb25zZS5tZXNzYWdlKTtcclxuICAgICAgICB0aGlzLnNwaW5uZXJTZXJ2aWNlLmhpZGUoKTtcclxuICAgICAgICB0aGlzLnByb2R1Y3RNYXBjbHNidG4ubmF0aXZlRWxlbWVudC5jbGljaygpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuc3Bpbm5lclNlcnZpY2UuaGlkZSgpO1xyXG4gICAgICAgIHRoaXMudG9hc3RyLmVycm9yKHJlc3BvbnNlLm1lc3NhZ2UpXHJcbiAgICAgIH1cclxuICAgIH0pLmNhdGNoKChlcnI6IGFueSkgPT4ge1xyXG4gICAgICB0aGlzLnNwaW5uZXJTZXJ2aWNlLmhpZGUoKTtcclxuICAgICAgdGhpcy50b2FzdHIuZXJyb3IoZXJyLm1lc3NhZ2UpXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG5cclxuICAvL3NpZGUgbmV2aWdhdGlvbiBcclxuICBuYXZpZ2F0aW9uRnVuKG5hdiwgaSkge1xyXG4gICAgdGhpcy5jTGluayA9IGk7XHJcbiAgICB0aGlzLndocksgPSBuYXYuY29sdW1uX2tleS50cmltKCk7XHJcbiAgICB0aGlzLndoclYgPSBuYXYuZm9ybV9maWVsZC50cmltKCk7XHJcbiAgICB0aGlzLm5hdmZvcm0gPSBuYXYubG92X3FyeS50cmltKCk7XHJcbiAgICBpZiAodGhpcy5zdWJGcm1XdiA9PSAnJykge1xyXG4gICAgICB0aGlzLnN1YkZybVdrID0gbnVsbDtcclxuICAgICAgdGhpcy5zdWJGcm1XdiA9IG51bGw7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5uYXZmb3JtICE9ICcnKSB7XHJcbiAgICAgIGlmICh0aGlzLm5hdmZvcm0gPT0gJ2FkZHRpb25hbER0bE1hc3RlcicpIHtcclxuICAgICAgICB0aGlzLmFkZEZybU5tZSA9IHRoaXMubmF2Zm9ybTtcclxuICAgICAgICB0aGlzLmdldE5hbWVBdHRyKHRoaXMuYWRkRnJtTm1lKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLnBhcmFPYmpbJ2Zvcm1ObWUnXSA9IHRoaXMubmF2Zm9ybTtcclxuICAgICAgICB0aGlzLmdldFBhZ2VEZWZpbmF0aW9uKCk7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuZ2V0UGFnZURlZmluYXRpb24oKTtcclxuICAgIH1cclxuICB9XHJcbiAgLy9sb2FkIGVkaXQgdGFibGUgZGF0YSB3aXRoIGRlZmF1bHQgdmFsdWVcclxuICBnZXRFZGl0RGF0YShwaWQpIHtcclxuICAgIHRoaXMuc3Bpbm5lclNlcnZpY2Uuc2hvdygpO1xyXG4gICAgdGhpcy5mb3JtRmlsZHMgPSBbXTtcclxuICAgIGxldCByZXFPYmogPSB7fTtcclxuICAgIHZhciBwYWdlVFAgPSB0aGlzLnBhZ2VJbmZvLnBhZ2VfdHlwO1xyXG4gICAgcmVxT2JqWydmb3JtTm1lJ10gPSB0aGlzLnBhZ2VJbmZvLmZvcm1fbm1lO1xyXG4gICAgcmVxT2JqWydwcmltYXJ5S2V5J10gPSB0aGlzLnBhZ2VJbmZvLnByaW1hcnlfa2V5X2ZpZWxkO1xyXG4gICAgcmVxT2JqWydwYWdlVHlwJ10gPSB0aGlzLnBhZ2VJbmZvLnBhZ2VfdHlwO1xyXG4gICAgcmVxT2JqWydzZWNvbmRLZXlGaWVsZCddID0gdGhpcy5wYWdlSW5mby5zZWNvbmRfa2V5X2ZpZWxkO1xyXG4gICAgaWYgKHRoaXMudGJDZWxsICE9IG51bGwpIHtcclxuICAgICAgcmVxT2JqWydpbkxpbmVFZGl0Q29sdW1uJ10gPSB0aGlzLnRiQ2VsbDtcclxuICAgIH1cclxuICAgIHJlcU9ialsncHJpbWFyeUlkJ10gPSBwaWQ7XHJcbiAgICBpZiAocGFnZVRQID09ICdqc29uRm9ybScpIHtcclxuICAgICAgcmVxT2JqWyd3aGVyZUtleXMnXSA9IHRoaXMucGFnZUluZm8ud2hlcmVfY2xhdXNlO1xyXG4gICAgICByZXFPYmpbJ3doZXJlVmx1cyddID0gdGhpcy53aGVyZU1hcFt0aGlzLnBhZ2VJbmZvLndoZXJlX2NsYXVzZV07XHJcbiAgICB9XHJcbiAgICBjb25zb2xlLmxvZyhKU09OLnN0cmluZ2lmeShyZXFPYmopKTtcclxuICAgIHRoaXMuaGVhZGVyWydtZXRob2QnXSA9ICdsb2FkQWRkRWRpdCc7XHJcbiAgICBsZXQgb3B0aW9ucyA9ICh7IGhlYWRlcnM6IG5ldyBIdHRwSGVhZGVycyh0aGlzLmhlYWRlcikgfSk7XHJcbiAgICB0aGlzLnNzLmdldEVkaXREKHJlcU9iaiwgb3B0aW9ucykudGhlbigocmVzcG9uc2U6IGFueSkgPT4ge1xyXG4gICAgICBjb25zb2xlLmxvZyhyZXNwb25zZSk7XHJcbiAgICAgIGlmIChyZXNwb25zZS5zdGF0dXMgPT0gJ1NVQ0NFU1MnICYmIHJlc3BvbnNlLm1lc3NhZ2UgIT0gJ1NVQ0NFU1MnKSB7XHJcbiAgICAgICAgdGhpcy5zcGlubmVyU2VydmljZS5oaWRlKCk7XHJcbiAgICAgICAgdGhpcy50b2FzdHIuZXJyb3IocmVzcG9uc2UubWVzc2FnZSlcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH07XHJcbiAgICAgIGlmIChyZXNwb25zZS5zdGF0dXMgPT0gJ1NVQ0NFU1MnKSB7XHJcbiAgICAgICAgdGhpcy5zcGlubmVyU2VydmljZS5oaWRlKCk7XHJcbiAgICAgICAgaWYgKHRoaXMudGJDZWxsICE9IG51bGwpIHtcclxuICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkYXRhbWRidG4nKS5jbGljaygpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmZvcm1GaWxkcyA9IHJlc3BvbnNlLmZvcm1GaWVsZHM7XHJcbiAgICAgICAgdGhpcy5mb3JtRmlsZHMuZm9yRWFjaChlbGVtZW50ID0+IHtcclxuICAgICAgICAgIGlmIChlbGVtZW50LmZvcm1fZmllbGRfdHlwID09ICd0YicpIHtcclxuICAgICAgICAgICAgdGhpcy5nZXRMb3ZMaXN0KGVsZW1lbnQuZm9ybV9maWVsZCwgZWxlbWVudC5wYWdlX2l0ZW1faWRuKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGlmIChlbGVtZW50LmZvcm1fZmllbGRfdHlwID09ICdzJykge1xyXG4gICAgICAgICAgICB0aGlzLmdldExvdkxpc3QoZWxlbWVudC5mb3JtX2ZpZWxkLCBlbGVtZW50LnBhZ2VfaXRlbV9pZG4pO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaWYgKGVsZW1lbnQuZm9ybV9maWVsZF90eXAgPT0gJ2hkJykge1xyXG4gICAgICAgICAgICBlbGVtZW50LmRlZmF1bHRfdmFsdWUgPSB0aGlzLndoZXJlTWFwW2VsZW1lbnQuZm9ybV9maWVsZF07XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZiAoZWxlbWVudC5mb3JtX2ZpZWxkX3R5cCA9PSAnc3EnKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZ2V0U2VxdWVuY2UoZWxlbWVudCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZiAoZWxlbWVudC5kdGFfdHlwID09ICdzYScpIHtcclxuICAgICAgICAgICAgdGhpcy5nZXRMb3ZMaXN0KGVsZW1lbnQuZm9ybV9maWVsZCwgZWxlbWVudC5wYWdlX2l0ZW1faWRuKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgICB0aGlzLnNwaW5uZXJTZXJ2aWNlLmhpZGUoKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLnNwaW5uZXJTZXJ2aWNlLmhpZGUoKTtcclxuICAgICAgICB0aGlzLnRvYXN0ci5lcnJvcihyZXNwb25zZS5tZXNzYWdlKVxyXG4gICAgICB9XHJcbiAgICB9KS5jYXRjaCgoZXJyOiBhbnkpID0+IHtcclxuICAgICAgdGhpcy5zcGlubmVyU2VydmljZS5oaWRlKCk7XHJcbiAgICAgIHRoaXMudG9hc3RyLmVycm9yKGVyci5tZXNzYWdlKVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBnZXRTZXF1ZW5jZShlbGVtZW50KSB7XHJcbiAgICBsZXQgcmVxT2JqID0ge307XHJcbiAgICByZXFPYmpbJ3NlcSddID0gZWxlbWVudC5sb3ZfcXJ5O1xyXG4gICAgdGhpcy5oZWFkZXJbJ21ldGhvZCddID0gJ2dldFNlcSc7XHJcbiAgICBsZXQgb3B0aW9ucyA9ICh7IGhlYWRlcnM6IG5ldyBIdHRwSGVhZGVycyh0aGlzLmhlYWRlcikgfSk7XHJcbiAgICB0aGlzLnNzLmdldERhdGEocmVxT2JqLCBvcHRpb25zKS50aGVuKChyZXNwb25zZTogYW55KSA9PiB7XHJcbiAgICAgIGlmIChyZXNwb25zZS5zdGF0dXMgPT0gJ1NVQ0NFU1MnKSB7XHJcbiAgICAgICAgdmFyIHNlcSA9IHJlc3BvbnNlLnNlcTtcclxuICAgICAgICBlbGVtZW50LmRlZmF1bHRfdmFsdWUgPSBzZXE7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy50b2FzdHIuZXJyb3IocmVzcG9uc2UubWVzc2FnZSlcclxuICAgICAgfVxyXG4gICAgfSkuY2F0Y2goKGVycjogYW55KSA9PiB7XHJcbiAgICAgIHRoaXMudG9hc3RyLmVycm9yKGVyci5tZXNzYWdlKVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAvL2xvYWQgbG92IGRhdGEgYnkgcGFzc2luZyBxdWVyeSB0byBpdFxyXG4gIGdldExvdkxpc3QodGJsRiwgcGFnZV9pdGVtX2lkbikge1xyXG4gICAgbGV0IHJlcU9iaiA9IHt9O1xyXG4gICAgcmVxT2JqWydwYWdlX2l0ZW1faWRuJ10gPSBwYWdlX2l0ZW1faWRuO1xyXG4gICAgdGhpcy5oZWFkZXJbJ21ldGhvZCddID0gJ2dldERhdGFCeUl0ZW1JZG4nO1xyXG4gICAgbGV0IG9wdGlvbnMgPSAoeyBoZWFkZXJzOiBuZXcgSHR0cEhlYWRlcnModGhpcy5oZWFkZXIpIH0pO1xyXG4gICAgdGhpcy5zcy5nZXREYXRhKHJlcU9iaiwgb3B0aW9ucykudGhlbigocmVzcG9uc2U6IGFueSkgPT4ge1xyXG4gICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzID09ICdTVUNDRVNTJykge1xyXG4gICAgICAgIGRlYnVnZ2VyO1xyXG4gICAgICAgIHRoaXMubG92cyA9IHJlc3BvbnNlLmt2Lm1hcChvcHRpb24gPT4gKHtcclxuICAgICAgICAgIHZhbHVlOiBvcHRpb24uayxcclxuICAgICAgICAgIGxhYmVsOiBvcHRpb24udlxyXG4gICAgICAgIH0pKTtcclxuICAgICAgICB0aGlzLnNxbEFycmF5W3RibEZdID0gdGhpcy5sb3ZzO1xyXG4gICAgICAgIC8vIGNvbnNvbGUubG9nKHRibEYsIHNxbCwgdGhpcy5sb3ZzKTtcclxuICAgICAgICAvLyBjb25zb2xlLmxvZyh0aGlzLnNxbEFycmF5W3RibEZdKVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMudG9hc3RyLmVycm9yKHJlc3BvbnNlLm1lc3NhZ2UpXHJcbiAgICAgIH1cclxuICAgIH0pLmNhdGNoKChlcnI6IGFueSkgPT4ge1xyXG4gICAgICB0aGlzLnRvYXN0ci5lcnJvcihlcnIubWVzc2FnZSlcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLy9kZWxldGUgc3BlZmljZWZpYyBkYXRhIGxpc3RcclxuICBkZWxldGVEYXRhTGlzdCgpIHtcclxuICAgIHRoaXMuc3Bpbm5lclNlcnZpY2Uuc2hvdygpO1xyXG4gICAgbGV0IHJlcU9iaiA9IHt9O1xyXG4gICAgcmVxT2JqWydmb3JtTm1lJ10gPSB0aGlzLnBhZ2VJbmZvLmZvcm1fbm1lO1xyXG4gICAgcmVxT2JqWydwYWdlVHlwJ10gPSB0aGlzLnBhZ2VJbmZvLnBhZ2VfdHlwO1xyXG4gICAgcmVxT2JqWydwcmltYXJ5S2V5J10gPSB0aGlzLnBhZ2VJbmZvLnByaW1hcnlfa2V5X2ZpZWxkO1xyXG4gICAgcmVxT2JqWydwcmltYXJ5SWQnXSA9IHRoaXMucGlkO1xyXG4gICAgcmVxT2JqWyd0YWJsZU5hbWUnXSA9IHRoaXMucGFnZUluZm8udGFibGVfbmFtZTtcclxuICAgIHJlcU9ialsndHJuc1R5cGUnXSA9ICdERUxFVEUnO1xyXG5cclxuICAgIHRoaXMuaGVhZGVyWydtZXRob2QnXSA9ICdzYXZlJztcclxuICAgIGNvbnNvbGUubG9nKEpTT04uc3RyaW5naWZ5KHJlcU9iaikpO1xyXG4gICAgbGV0IG9wdGlvbnMgPSAoeyBoZWFkZXJzOiBuZXcgSHR0cEhlYWRlcnModGhpcy5oZWFkZXIpIH0pO1xyXG4gICAgdGhpcy5zcy5kZWxldGVEYXRhKHJlcU9iaiwgb3B0aW9ucykudGhlbigocmVzcG9uc2U6IGFueSkgPT4ge1xyXG4gICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzID09ICdTVUNDRVNTJykge1xyXG4gICAgICAgIHRoaXMuZ2V0UGFnZURlZmluYXRpb24oKTtcclxuICAgICAgICB0aGlzLmRlbGV0ZWNsc2J0bi5uYXRpdmVFbGVtZW50LmNsaWNrKCk7XHJcbiAgICAgICAgdGhpcy5zcGlubmVyU2VydmljZS5oaWRlKCk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5zcGlubmVyU2VydmljZS5oaWRlKCk7XHJcbiAgICAgICAgdGhpcy50b2FzdHIuZXJyb3IocmVzcG9uc2UubWVzc2FnZSlcclxuICAgICAgfVxyXG4gICAgfSkuY2F0Y2goKGVycjogYW55KSA9PiB7XHJcbiAgICAgIHRoaXMuc3Bpbm5lclNlcnZpY2UuaGlkZSgpO1xyXG4gICAgICB0aGlzLnRvYXN0ci5lcnJvcihlcnIubWVzc2FnZSlcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLy9keWFuYW1pYyBmdW5jYXRpb25cclxuICBjaGtGdW4oZmwsIGZEYXRhKSB7XHJcbiAgICBpZiAoZmwudmFsaWRhdGlvbnMgPT0gJycgfHwgZmwudmFsaWRhdGlvbnMgPT0gbnVsbCkgeyByZXR1cm4gfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIGlmIChmbC52YWxpZGF0aW9ucyA9PSAndmFsaWRhdGVRdWVyeScpIHtcclxuICAgICAgICB0aGlzLnZhbGlkYXRlUXVlcnkoZmwsIGZEYXRhKVxyXG4gICAgICB9IGVsc2UgaWYgKGZsLnZhbGlkYXRpb25zID09ICdpc1VuaXF1ZScpIHtcclxuICAgICAgICB0aGlzLmlzVW5pcXVlKGZsLCBmRGF0YSk7XHJcbiAgICAgIH0gZWxzZSBpZiAoZmwudmFsaWRhdGlvbnMgPT0gJ3NldG5hbWVwcmludCcpIHtcclxuICAgICAgICB0aGlzLnNldG5hbWVwcmludChmbCwgZkRhdGEpO1xyXG4gICAgICB9IGVsc2UgaWYgKGZsLnZhbGlkYXRpb25zID09ICdzZXRmYWN0b3InKSB7XHJcbiAgICAgICAgdGhpcy5zZXRmYWN0b3IoZmwsIGZEYXRhKTtcclxuICAgICAgfSBlbHNlIGlmIChmbC5mb3JtX2ZpZWxkX3R5cCA9PSAncycpIHtcclxuICAgICAgICBpZiAoZmwudmFsaWRhdGlvbnMgPT0gbnVsbCkgeyByZXR1cm47IH1cclxuICAgICAgICBsZXQgc3EgPSBmbC52YWxpZGF0aW9ucy5yZXBsYWNlKC8jUVZBTC9nLCBmRGF0YSk7XHJcbiAgICAgICAgLy8gdGhpcy5nZXRMb3ZMaXN0KGZsLmNvbHVtbl9rZXksIHNxKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy9vbiBzdWJtaXQgYWN0aW9uIGNoZWNrcyB2YWxpZGF0aW9uXHJcbiAgb25TdWJtaXQoZm9ybVZhbCwgYnRuKSB7XHJcbiAgICBkZWJ1Z2dlclxyXG4gICAgdmFyIHQgPSBPYmplY3Qua2V5cyhmb3JtVmFsLmZvcm0uY29udHJvbHMpLmZvckVhY2goZmllbGQgPT4ge1xyXG4gICAgICBkZWJ1Z2dlclxyXG4gICAgICBjb25zdCBjb250cm9sID0gZm9ybVZhbC5mb3JtLmdldChmaWVsZCk7XHJcbiAgICAgIGNvbnRyb2wubWFya0FzVG91Y2hlZCh7IG9ubHlTZWxmOiB0cnVlIH0pO1xyXG4gICAgfSk7XHJcbiAgICBpZiAoZm9ybVZhbC5mb3JtLnZhbGlkID09IHRydWUpIHtcclxuICAgICAgdGhpcy5hZGRlZGl0KGZvcm1WYWwudmFsdWUsIGJ0bik7XHJcbiAgICAgIC8vICB0aGlzLmxvd2VyKGZvcm1WYWwudmFsdWUpO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHNldG5hbWVwcmludChmbCwgZkRhdGEpIHtcclxuICAgIGRlYnVnZ2VyXHJcbiAgICBsZXQgbm1lSWRuID0gZkRhdGE7XHJcbiAgICBsZXQgbGlzdCA9IHRoaXMuc3FsQXJyYXlbZmwuZm9ybV9maWVsZF0gfHwgW107XHJcbiAgICBsZXQgbm13RHRsID0gbGlzdC5maW5kKHggPT4geC52YWx1ZSA9PSBubWVJZG4pIHx8ICcnO1xyXG4gICAgaWYgKG5td0R0bCAhPSAnJykge1xyXG4gICAgICB0aGlzLmZvcm1GaWxkcy5mb3JFYWNoKGVsZW1lbnQgPT4ge1xyXG4gICAgICAgIGlmIChlbGVtZW50LmZvcm1fZmllbGQgPT0gJ25tZScpXHJcbiAgICAgICAgICBlbGVtZW50LmRlZmF1bHRfdmFsdWUgPSBubXdEdGwubGFiZWxcclxuICAgICAgICBpZiAoZWxlbWVudC5mb3JtX2ZpZWxkID09ICdwcmludF9ubWUnKVxyXG4gICAgICAgICAgZWxlbWVudC5kZWZhdWx0X3ZhbHVlID0gbm13RHRsLmxhYmVsXHJcblxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHNldGZhY3RvcihmbCwgZkRhdGEpIHtcclxuICAgIGxldCBmY3RyID0gLTE7XHJcbiAgICBpZiAoZkRhdGEgPT0gJ2luY29tZScgfHwgZkRhdGEgPT0gJ2Fzc2V0cycpXHJcbiAgICAgIGZjdHIgPSAxO1xyXG4gICAgdGhpcy5mb3JtRmlsZHMuZm9yRWFjaChlbGVtZW50ID0+IHtcclxuICAgICAgaWYgKGVsZW1lbnQuZm9ybV9maWVsZCA9PSAnZmN0cicpXHJcbiAgICAgICAgZWxlbWVudC5kZWZhdWx0X3ZhbHVlID0gZmN0clxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBvblBvcHVwU3VibWl0KGZvcm1WYWwsIGJ0bikge1xyXG4gICAgZGVidWdnZXJcclxuICAgIHZhciB0ID0gT2JqZWN0LmtleXMoZm9ybVZhbC5mb3JtLmNvbnRyb2xzKS5mb3JFYWNoKGZpZWxkID0+IHtcclxuICAgICAgY29uc3QgY29udHJvbCA9IGZvcm1WYWwuZm9ybS5nZXQoZmllbGQpO1xyXG4gICAgICBjb250cm9sLm1hcmtBc1RvdWNoZWQoeyBvbmx5U2VsZjogdHJ1ZSB9KTtcclxuICAgIH0pO1xyXG4gICAgaWYgKGZvcm1WYWwuZm9ybS52YWxpZCA9PSB0cnVlKSB7XHJcbiAgICAgIGRlYnVnZ2VyXHJcbiAgICAgIHRoaXMuYWRkUG9wdXBGcm0oZm9ybVZhbC52YWx1ZSwgYnRuKTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBsb3dlcih2KSB7XHJcbiAgICB2YXIga2V5LCBrZXlzID0gT2JqZWN0LmtleXModik7XHJcbiAgICB2YXIgbiA9IGtleXMubGVuZ3RoO1xyXG4gICAgdmFyIG5ld29iaiA9IHt9XHJcbiAgICB3aGlsZSAobi0tKSB7XHJcbiAgICAgIGtleSA9IGtleXNbbl07XHJcbiAgICAgIG5ld29ialtrZXldID0gdHlwZW9mIHZba2V5XSA9PSBcInN0cmluZ1wiID8gdltrZXldLnRvTG93ZXJDYXNlKCkgOiB2W2tleV07XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvL3N1Ym1pdCBkYXRhXHJcbiAgYWRkZWRpdCh2LCBidG4pIHtcclxuICAgIHRoaXMuc3Bpbm5lclNlcnZpY2Uuc2hvdygpO1xyXG4gICAgbGV0IHJlcU9iaiA9IHt9O1xyXG4gICAgdmFyIHBhZ2VUUCA9IHRoaXMucGFnZUluZm8ucGFnZV90eXAudHJpbSgpO1xyXG4gICAgcmVxT2JqWydmb3JtTm1lJ10gPSB0aGlzLnBhZ2VJbmZvLmZvcm1fbm1lO1xyXG4gICAgcmVxT2JqWydwcmltYXJ5S2V5J10gPSB0aGlzLnBhZ2VJbmZvLnByaW1hcnlfa2V5X2ZpZWxkO1xyXG4gICAgcmVxT2JqWydwYWdlVHlwJ10gPSB0aGlzLnBhZ2VJbmZvLnBhZ2VfdHlwO1xyXG4gICAgcmVxT2JqWydzZWNvbmRLZXlGaWVsZCddID0gdGhpcy5wYWdlSW5mby5zZWNvbmRfa2V5X2ZpZWxkO1xyXG4gICAgcmVxT2JqWydwcmltYXJ5SWQnXSA9IHRoaXMuYnRuTmFtZSA9PSAnQWRkJyA/ICcnIDogXCJcIiArIHRoaXMucGlkO1xyXG4gICAgcmVxT2JqWyd0YWJsZU5hbWUnXSA9IHRoaXMucGFnZUluZm8udGFibGVfbmFtZTtcclxuICAgIHJlcU9ialsndHJuc1R5cGUnXSA9IHRoaXMuYnRuTmFtZSA9PSAnQWRkJyA/ICdBREQnIDogJ0VESVQnO1xyXG4gICAgcmVxT2JqWydkYXRhVHJuc0R0bCddID0gdjtcclxuICAgIGlmIChwYWdlVFAgPT0gJ2pzb25Gb3JtJykge1xyXG4gICAgICByZXFPYmpbJ3doZXJlS2V5cyddID0gdGhpcy5wYWdlSW5mby53aGVyZV9jbGF1c2U7XHJcbiAgICAgIHJlcU9ialsnd2hlcmVWbHVzJ10gPSB0aGlzLndoZXJlTWFwW3RoaXMucGFnZUluZm8ud2hlcmVfY2xhdXNlXTtcclxuICAgIH1cclxuICAgIGNvbnNvbGUubG9nKEpTT04uc3RyaW5naWZ5KHJlcU9iaikpO1xyXG4gICAgdGhpcy5oZWFkZXJbJ21ldGhvZCddID0gJ3NhdmUnO1xyXG4gICAgbGV0IG9wdGlvbnMgPSAoeyBoZWFkZXJzOiBuZXcgSHR0cEhlYWRlcnModGhpcy5oZWFkZXIpIH0pO1xyXG4gICAgY29uc29sZS5sb2coSlNPTi5zdHJpbmdpZnkodGhpcy5oZWFkZXIpKTtcclxuICAgIHRoaXMuc3MuYWRkRGF0YShyZXFPYmosIG9wdGlvbnMpLnRoZW4oKHJlc3BvbnNlOiBhbnkpID0+IHtcclxuICAgICAgY29uc29sZS5sb2cocmVzcG9uc2UpO1xyXG4gICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzID09ICdTVUNDRVNTJykge1xyXG4gICAgICAgIGJ0bi5kaXNhYmxlZCA9IGZhbHNlO1xyXG4gICAgICAgIGRlYnVnZ2VyO1xyXG4gICAgICAgIGlmICh0aGlzLmFjdGlvbiA9PSAnbmV3Y29udGFjdCcpIHtcclxuICAgICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFsnL2NvbnRhY3QvbWFzdGVyL25hbWVNYXN0ZXIvbm1lX2lkbi8nICsgcmVzcG9uc2UuX2lkXSk7XHJcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmFjdGlvbiA9PSAnbmV3YWNjY29udGFjdCcpIHtcclxuICAgICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFsnL2FjY291bnRzL2NvbnRhY3QvbWFzdGVyL2FjY05hbWVNYXN0ZXIvbm1lX2lkbi8nICsgcmVzcG9uc2UuX2lkXSk7XHJcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmFjdGlvbiA9PSAnbmV3bGVkZ2VyJykge1xyXG4gICAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWycvYWNjb3VudHMvYWRtaW4vbWFzdGVyL2xlZGdlck1hc3Rlci9sZWRnZXJfaWRuLycgKyByZXNwb25zZS5faWRdKTtcclxuXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMudGJDZWxsID0gbnVsbDsgdGhpcy5zZWFyY2hGID0gbnVsbDtcclxuICAgICAgICAgIHRoaXMuY2xvc2VidG4ubmF0aXZlRWxlbWVudC5jbGljaygpO1xyXG4gICAgICAgICAgaWYgKHRoaXMuYWRkTmV3Lmxvdl9xcnkgPT0gbnVsbCB8fCB0aGlzLmFkZE5ldy5sb3ZfcXJ5ID09IFwiXCIpIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuY3VycnN0YXQgPT0gXCJwb3B1cFwiKSB7XHJcbiAgICAgICAgICAgICAgLy8gdGhpcy5zZXRTeXNTZXR1cCh0aGlzLmNvaWRuKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICB0aGlzLmdldFBhZ2VEZWZpbmF0aW9uKCk7XHJcbiAgICAgICAgICAgICAgdGhpcy5zcGlubmVyU2VydmljZS5oaWRlKCk7XHJcbiAgICAgICAgICAgICAgdGhpcy50b2FzdHIuc3VjY2VzcyhyZXNwb25zZS5tZXNzYWdlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbdGhpcy5hZGROZXcubG92X3FyeSwgcmVzcG9uc2UuX2lkXSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGJ0bi5kaXNhYmxlZCA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMudGJDZWxsID0gbnVsbDtcclxuICAgICAgICB0aGlzLnNwaW5uZXJTZXJ2aWNlLmhpZGUoKTtcclxuICAgICAgICB0aGlzLnRvYXN0ci5lcnJvcihyZXNwb25zZS5tZXNzYWdlKVxyXG4gICAgICB9XHJcbiAgICB9KS5jYXRjaCgoZXJyOiBhbnkpID0+IHtcclxuICAgICAgYnRuLmRpc2FibGVkID0gZmFsc2U7XHJcbiAgICAgIHRoaXMudGJDZWxsID0gbnVsbDtcclxuICAgICAgdGhpcy5zcGlubmVyU2VydmljZS5oaWRlKCk7XHJcbiAgICAgIHRoaXMudG9hc3RyLmVycm9yKGVyci5tZXNzYWdlKVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBhZGRQb3B1cEZybSh2LCBidG4pIHtcclxuICAgIHRoaXMuc3Bpbm5lclNlcnZpY2Uuc2hvdygpO1xyXG4gICAgZGVidWdnZXI7XHJcblxyXG4gICAgbGV0IHJlcU9iaiA9IHt9O1xyXG4gICAgdmFyIHBhZ2VUUCA9IHRoaXMucG9wdXBwYWdlSW5mby5wYWdlX3R5cC50cmltKCk7XHJcbiAgICByZXFPYmpbJ2Zvcm1ObWUnXSA9IHRoaXMucG9wdXBwYWdlSW5mby5mb3JtX25tZTtcclxuICAgIHJlcU9ialsncHJpbWFyeUtleSddID0gdGhpcy5wb3B1cHBhZ2VJbmZvLnByaW1hcnlfa2V5X2ZpZWxkO1xyXG4gICAgcmVxT2JqWydwYWdlVHlwJ10gPSB0aGlzLnBvcHVwcGFnZUluZm8ucGFnZV90eXA7XHJcbiAgICByZXFPYmpbJ3NlY29uZEtleUZpZWxkJ10gPSB0aGlzLnBvcHVwcGFnZUluZm8uc2Vjb25kX2tleV9maWVsZDtcclxuICAgIHJlcU9ialsncHJpbWFyeUlkJ10gPSAnJzsvL3RoaXMuYnRuTmFtZSA9PSAnQWRkJyA/ICcnIDogXCJcIiArIHRoaXMucGlkO1xyXG4gICAgcmVxT2JqWyd0YWJsZU5hbWUnXSA9IHRoaXMucG9wdXBwYWdlSW5mby50YWJsZV9uYW1lO1xyXG4gICAgcmVxT2JqWyd0cm5zVHlwZSddID0gJ0FERCc7XHJcbiAgICByZXFPYmpbJ2RhdGFUcm5zRHRsJ10gPSB2O1xyXG4gICAgY29uc29sZS5sb2coXCJhZGRcIiwgSlNPTi5zdHJpbmdpZnkocmVxT2JqKSk7XHJcbiAgICB0aGlzLmhlYWRlclsnbWV0aG9kJ10gPSAnc2F2ZSc7XHJcbiAgICBsZXQgb3B0aW9ucyA9ICh7IGhlYWRlcnM6IG5ldyBIdHRwSGVhZGVycyh0aGlzLmhlYWRlcikgfSk7XHJcbiAgICB0aGlzLnNzLmFkZERhdGEocmVxT2JqLCBvcHRpb25zKS50aGVuKChyZXNwb25zZTogYW55KSA9PiB7XHJcbiAgICAgIGlmIChyZXNwb25zZS5zdGF0dXMgPT0gJ1NVQ0NFU1MnKSB7XHJcbiAgICAgICAgYnRuLmRpc2FibGVkID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5zcGlubmVyU2VydmljZS5oaWRlKCk7XHJcbiAgICAgICAgZGVidWdnZXI7XHJcbiAgICAgICAgdGhpcy5zZXRTeXNTZXR1cCh0aGlzLnBpZCk7XHJcbiAgICAgICAgdGhpcy5wb3BjbG9zZWJ0bi5uYXRpdmVFbGVtZW50LmNsaWNrKCk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgYnRuLmRpc2FibGVkID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5zcGlubmVyU2VydmljZS5oaWRlKCk7XHJcbiAgICAgICAgdGhpcy50b2FzdHIuZXJyb3IocmVzcG9uc2UubWVzc2FnZSlcclxuICAgICAgfVxyXG4gICAgfSkuY2F0Y2goKGVycjogYW55KSA9PiB7XHJcbiAgICAgIGJ0bi5kaXNhYmxlZCA9IGZhbHNlO1xyXG4gICAgICB0aGlzLnNwaW5uZXJTZXJ2aWNlLmhpZGUoKTtcclxuICAgICAgdGhpcy50b2FzdHIuZXJyb3IoZXJyLm1lc3NhZ2UpXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHNldFN5c1NldHVwKGNvSWRuKSB7XHJcbiAgICBkZWJ1Z2dlcjtcclxuXHJcbiAgICBsZXQgcmVxT2JqID0ge307XHJcbiAgICByZXFPYmpbJ2NvSWRuJ10gPSBjb0lkbjtcclxuICAgIHRoaXMuaGVhZGVyWydtZXRob2QnXSA9ICdjbGllbnRTZXR1cCc7XHJcbiAgICBsZXQgb3B0aW9ucyA9ICh7IGhlYWRlcnM6IG5ldyBIdHRwSGVhZGVycyh0aGlzLmhlYWRlcikgfSk7XHJcbiAgICB0aGlzLnNzLnZhbGlkYXRlKHJlcU9iaiwgb3B0aW9ucywgJ3N5c3RlbS9zZXR1cCcpLnRoZW4oKHJlc3BvbnNlOiBhbnkpID0+IHtcclxuICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1cyA9PSAnU1VDQ0VTUycpIHtcclxuICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncG9wUmVzbW9kYWxidG4nKS5jbGljaygpO1xyXG4gICAgICAgIHRoaXMuU3lzcmVzdWx0ID0gcmVzcG9uc2UucmVzdWx0O1xyXG4gICAgICB9XHJcbiAgICB9KS5jYXRjaCgoZXJyOiBhbnkpID0+IHtcclxuICAgICAgdGhpcy5zcGlubmVyU2VydmljZS5oaWRlKCk7XHJcbiAgICAgIHRoaXMudG9hc3RyLmVycm9yKGVyci5tZXNzYWdlKVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAvL3ZhbGlkYXRlIHF1ZXJ5XHJcbiAgdmFsaWRhdGVRdWVyeSh0YmxPYmosIGYpIHtcclxuICAgIGlmIChmID09ICcnIHx8IGYgPT0gbnVsbCkgcmV0dXJuO1xyXG4gICAgbGV0IHJlcU9iaiA9IHt9O1xyXG4gICAgcmVxT2JqWydzcWwnXSA9IGY7XHJcbiAgICB0aGlzLmhlYWRlclsnbWV0aG9kJ10gPSAndmFsaWRhdGVRdWVyeSc7XHJcbiAgICBsZXQgb3B0aW9ucyA9ICh7IGhlYWRlcnM6IG5ldyBIdHRwSGVhZGVycyh0aGlzLmhlYWRlcikgfSk7XHJcbiAgICBjb25zb2xlLmxvZyhKU09OLnN0cmluZ2lmeShyZXFPYmopKTtcclxuICAgIHRoaXMuc3MudmFsaWRhdGUocmVxT2JqLCBvcHRpb25zLCAnc3lzdGVtL2FwcHBhZ2VzJykudGhlbigocmVzcG9uc2U6IGFueSkgPT4ge1xyXG4gICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzID09ICdTVUNDRVNTJykge1xyXG4gICAgICAgIHRoaXMub25FcnIgPSAnJztcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLnNwaW5uZXJTZXJ2aWNlLmhpZGUoKTtcclxuICAgICAgICB0aGlzLm9uRXJyID0gdGJsT2JqLmZvcm1fZmllbGQ7XHJcbiAgICAgICAgdGhpcy50b2FzdHIuZXJyb3IocmVzcG9uc2UubWVzc2FnZSlcclxuICAgICAgfVxyXG4gICAgfSkuY2F0Y2goKGVycjogYW55KSA9PiB7XHJcbiAgICAgIHRoaXMuc3Bpbm5lclNlcnZpY2UuaGlkZSgpO1xyXG4gICAgICB0aGlzLnRvYXN0ci5lcnJvcihlcnIubWVzc2FnZSlcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLy92YWxpZGF0ZSB0aGlzIGZpZWxkIHZhbHVlIGlzIHVuaXF1ZVxyXG4gIGlzVW5pcXVlKGR0YU9iaiwgaW5wdVZhbCkge1xyXG4gICAgaWYgKGlucHVWYWwgPT0gJycgfHwgaW5wdVZhbCA9PSBudWxsKSByZXR1cm47XHJcbiAgICBsZXQgcmVxT2JqID0ge307XHJcbiAgICByZXFPYmpbJ3RhYmxlTmFtZSddID0gdGhpcy5wYWdlSW5mby50YWJsZV9uYW1lO1xyXG4gICAgcmVxT2JqWyd3aGVyZUtleXMnXSA9IGR0YU9iai5mb3JtX2ZpZWxkO1xyXG4gICAgcmVxT2JqWyd3aGVyZVZsdXMnXSA9IGlucHVWYWw7XHJcbiAgICByZXFPYmpbJ3ByaW1hcnlLZXknXSA9IHRoaXMucGFnZUluZm8ucHJpbWFyeV9rZXlfZmllbGQ7XHJcbiAgICByZXFPYmpbJ3ByaW1hcnlJZCddID0gdGhpcy5idG5OYW1lID09ICdBZGQnID8gJycgOiB0aGlzLnBpZDtcclxuICAgIHRoaXMuaGVhZGVyWydtZXRob2QnXSA9ICd1bmlxdWVDb25RJztcclxuICAgIGxldCBvcHRpb25zID0gKHsgaGVhZGVyczogbmV3IEh0dHBIZWFkZXJzKHRoaXMuaGVhZGVyKSB9KTtcclxuICAgIHRoaXMuc3MudmFsaWRhdGUocmVxT2JqLCBvcHRpb25zLCAnc3lzdGVtL2FwcHBhZ2VzJykudGhlbigocmVzcG9uc2U6IGFueSkgPT4ge1xyXG4gICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzID09ICdTVUNDRVNTJykge1xyXG4gICAgICAgIHRoaXMub25FcnIgPSAnJztcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLnNwaW5uZXJTZXJ2aWNlLmhpZGUoKTtcclxuICAgICAgICB0aGlzLm9uRXJyID0gZHRhT2JqLmZvcm1fZmllbGQ7XHJcbiAgICAgICAgdGhpcy50b2FzdHIuZXJyb3IocmVzcG9uc2UubWVzc2FnZSlcclxuICAgICAgfVxyXG4gICAgfSkuY2F0Y2goKGVycjogYW55KSA9PiB7XHJcbiAgICAgIHRoaXMuc3Bpbm5lclNlcnZpY2UuaGlkZSgpO1xyXG4gICAgICB0aGlzLnRvYXN0ci5lcnJvcihlcnIubWVzc2FnZSlcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgb25QYWdlU2l6ZUNoYW5nZShwKSB7XHJcbiAgICBpZiAocCA9PSAnQWxsJykge1xyXG4gICAgICB0aGlzLnBhZ2VTaXplID0gdGhpcy5kYXRhbGlzdC5sZW5ndGg7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnBhZ2VTaXplID0gcDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vc29ydGluZ1xyXG4gIHNldE9yZGVyKHZhbHVlOiBzdHJpbmcsIGkpIHtcclxuICAgIHRoaXMuc2hvd2FyciA9IGk7XHJcbiAgICBpZiAodGhpcy5vcmRlciA9PT0gdmFsdWUpIHtcclxuICAgICAgdGhpcy5yZXZlcnNlID0gIXRoaXMucmV2ZXJzZTtcclxuICAgIH1cclxuICAgIHRoaXMub3JkZXIgPSB2YWx1ZTtcclxuICB9XHJcblxyXG4gIC8vZm9yIHNldCBudWxsIHRvIHRhYmxlIGNlbGxcclxuICBjbG9zZU51bGwgPSAoKSA9PiB0aGlzLnRiQ2VsbCA9IG51bGw7XHJcblxyXG4gIC8vZWRpdCBjZWxsIG9wZW4gbW9kZWxcclxuICBlZGl0Q2VsbChkLCB0YmgpIHtcclxuICAgIHRoaXMuZ2xiT2JqID0gZDtcclxuICAgIHRoaXMudGJDZWxsID0gdGJoO1xyXG4gICAgdGhpcy50aXRsZSA9IGQudGl0bGU7XHJcbiAgICB0aGlzLmJ0bk5hbWUgPSAnRWRpdCc7XHJcbiAgICB0aGlzLnBpZCA9IGRbdGhpcy5wa2ZdO1xyXG4gICAgdGhpcy5nZXRFZGl0RGF0YShkW3RoaXMucGtmXSk7XHJcbiAgfVxyXG5cclxuICAvL2xvYWQgbm1lIGF0dHIgZGF0YVxyXG4gIGdldE5hbWVBdHRyKGZybW5tZSkge1xyXG4gICAgbGV0IHJlcU9iaiA9IHt9O1xyXG4gICAgbGV0IGN1c3RPYmogPSB7fTtcclxuICAgIHJlcU9ialsnZm9ybU5tZSddID0gZnJtbm1lO1xyXG4gICAgcmVxT2JqWydubWVJZG4nXSA9IHRoaXMud2hyVjtcclxuICAgIHRoaXMuaGVhZGVyWydtZXRob2QnXSA9ICdsb2FkTm1lQXR0cic7XHJcbiAgICBsZXQgb3B0aW9ucyA9ICh7IGhlYWRlcnM6IG5ldyBIdHRwSGVhZGVycyh0aGlzLmhlYWRlcikgfSk7XHJcbiAgICB0aGlzLnNzLnZhbGlkYXRlKHJlcU9iaiwgb3B0aW9ucywgJ3N5c3RlbS9hcHBwYWdlcycpLnRoZW4oKHJlc3BvbnNlOiBhbnkpID0+IHtcclxuICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1cyA9PSAnU1VDQ0VTUycpIHtcclxuICAgICAgICB0aGlzLnVpR3JwTGlzdCA9IHJlc3BvbnNlLnVpR3JwTGlzdDtcclxuICAgICAgICB0aGlzLnVpR3JwTGlzdER0bCA9IHJlc3BvbnNlLnVpR3JwTGlzdER0bDtcclxuICAgICAgICB0aGlzLmRhdGFEdGwgPSByZXNwb25zZS5kYXRhRHRsO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuc3Bpbm5lclNlcnZpY2UuaGlkZSgpO1xyXG4gICAgICAgIHRoaXMudG9hc3RyLmVycm9yKHJlc3BvbnNlLm1lc3NhZ2UpXHJcbiAgICAgIH1cclxuICAgIH0pLmNhdGNoKChlcnI6IGFueSkgPT4ge1xyXG4gICAgICB0aGlzLnNwaW5uZXJTZXJ2aWNlLmhpZGUoKTtcclxuICAgICAgdGhpcy50b2FzdHIuZXJyb3IoZXJyLm1lc3NhZ2UpXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIC8vc2F2ZSBubWUgZGF0YSBcclxuICBzYXZlRnVuKGssIHYpIHtcclxuICAgIHRoaXMuc3Bpbm5lclNlcnZpY2Uuc2hvdygpO1xyXG4gICAgbGV0IHJlcU9iaiA9IHt9O1xyXG4gICAgbGV0IHN1Yk9iaiA9IHt9O1xyXG4gICAgc3ViT2JqW2tdID0gdjtcclxuICAgIHJlcU9ialsnZm9ybU5tZSddID0gdGhpcy5hZGRGcm1ObWU7XHJcbiAgICByZXFPYmpbJ25tZUlkbiddID0gdGhpcy53aHJWO1xyXG4gICAgcmVxT2JqWydkYXRhVHJuc0R0bCddID0gc3ViT2JqO1xyXG4gICAgdGhpcy5oZWFkZXJbJ21ldGhvZCddID0gJ3NhdmVObWVBdHRyJztcclxuICAgIGxldCBvcHRpb25zID0gKHsgaGVhZGVyczogbmV3IEh0dHBIZWFkZXJzKHRoaXMuaGVhZGVyKSB9KTtcclxuICAgIHRoaXMuc3MuYWRkRGF0YShyZXFPYmosIG9wdGlvbnMpLnRoZW4oKHJlc3BvbnNlOiBhbnkpID0+IHtcclxuICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1cyA9PSAnU1VDQ0VTUycpIHtcclxuICAgICAgICB0aGlzLnNwaW5uZXJTZXJ2aWNlLmhpZGUoKTtcclxuICAgICAgICB0aGlzLnRvYXN0ci5zdWNjZXNzKHJlc3BvbnNlLm1lc3NhZ2UpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuc3Bpbm5lclNlcnZpY2UuaGlkZSgpO1xyXG4gICAgICAgIHRoaXMudG9hc3RyLmVycm9yKHJlc3BvbnNlLm1lc3NhZ2UpXHJcbiAgICAgIH1cclxuICAgIH0pLmNhdGNoKChlcnI6IGFueSkgPT4ge1xyXG4gICAgICB0aGlzLnNwaW5uZXJTZXJ2aWNlLmhpZGUoKTtcclxuICAgICAgdGhpcy50b2FzdHIuZXJyb3IoZXJyLm1lc3NhZ2UpXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGxvYWRTdWdnZGF0YShzdHIsIHBhZ2VfaXRlbV9pZG4sIGZvcm1fZmllbGQpIHtcclxuICAgIGlmIChzdHIgPT0gdW5kZWZpbmVkIHx8IHN0ciA9PSAnJyB8fCBzdHIubGVuZ3RoIDwgMykgcmV0dXJuO1xyXG4gICAgbGV0IHJlcU9iaiA9IHt9O1xyXG4gICAgcmVxT2JqW1wiZm9ybU5tZVwiXSA9IHRoaXMucm91dGUuc25hcHNob3QucGFyYW1zW1wiZnJtbm1lXCJdIHx8ICdsb2FkU3VnZ2VzdGlvbkRhdGEnO1xyXG4gICAgcmVxT2JqWydwYWdlX2l0ZW1faWRuJ10gPSBwYWdlX2l0ZW1faWRuO1xyXG4gICAgcmVxT2JqWydsaWtlU3RyJ10gPSBzdHI7XHJcbiAgICB0aGlzLmhlYWRlclsnbWV0aG9kJ10gPSAnbG9hZFN1Z2dlc3Rpb25EYXRhQnlJdGVtSWRuJztcclxuICAgIGNvbnNvbGUubG9nKHRoaXMuaGVhZGVyKTtcclxuICAgIGxldCBvcHRpb25zID0gKHsgaGVhZGVyczogbmV3IEh0dHBIZWFkZXJzKHRoaXMuaGVhZGVyKSB9KTtcclxuICAgIGNvbnNvbGUubG9nKEpTT04uc3RyaW5naWZ5KHJlcU9iaikpO1xyXG4gICAgLy8gY29uc29sZS5sb2codGhpcy5oZWFkZXIpO1xyXG4gICAgdGhpcy5jcy5sb2FkKHJlcU9iaiwgb3B0aW9ucywgXCJjb250YWN0L3JlZ2lzdGVyRGF0YVwiKS50aGVuKChyZXNwb25zZTogYW55KSA9PiB7XHJcbiAgICAgIGNvbnNvbGUubG9nKHJlc3BvbnNlKTtcclxuICAgICAgbGV0IHJlc3VsdCA9IHJlc3BvbnNlLnJlc3VsdDtcclxuICAgICAgbGV0IHN1Z2dlc3Rpb25EYXRhID0gcmVzdWx0LnN1Z2dlc3Rpb25EYXRhIHx8IFtdO1xyXG4gICAgICBsZXQgbGlzdCA9IHN1Z2dlc3Rpb25EYXRhLm1hcChvcHRpb24gPT4gKHtcclxuICAgICAgICB2YWx1ZTogb3B0aW9uLmssXHJcbiAgICAgICAgbGFiZWw6IG9wdGlvbi52XHJcbiAgICAgIH0pKTtcclxuICAgICAgdGhpcy5zcWxBcnJheVtmb3JtX2ZpZWxkXSA9IGxpc3Q7XHJcbiAgICB9KVxyXG5cclxuICB9XHJcblxyXG4gIC8vIGZsID0gXCJzZWxlY3QgdGFibGVfY2F0YWxvZ3x8JyAnfHx0YWJsZV9uYW1lIGsgLCB0YWJsZV9uYW1lIHYgZnJvbSBpbmZvcm1hdGlvbl9zY2hlbWEudGFibGVzIHdoZXJlIHRhYmxlX3NjaGVtYSA9ICdwdWJsaWMnIGFuZCB0YWJsZV90eXBlID0gJ0JBU0UgVEFCTEUnICBhbmQgdGFibGVfbmFtZSBsaWtlICcjSU5QVVQlJyBhbmQgdGFibGVfbmFtZT1DT0FMRVNDRShudWxsLHRhYmxlX25hbWUpIG9yZGVyIGJ5IDE7XCJcclxuXHJcbiAgLy8gc3VnZ2VzdERhdGE6YW55ID0gW107XHJcblxyXG4gIC8vIGdldFN1Z2dldGlvbihzY1QpIHtcclxuICAvLyAgIGlmIChzY1QgPT0gJycgfHwgc2NUID09IG51bGwpIHJldHVybjtcclxuICAvLyAgIGxldCBzcSA9IHRoaXMuZmwucmVwbGFjZSgvI0lOUFVUL2csIHNjVCk7XHJcbiAgLy8gICBsZXQgcmVxT2JqID0ge307XHJcbiAgLy8gICByZXFPYmpbJ3NxbCddID0gc3E7XHJcbiAgLy8gICB0aGlzLmhlYWRlclsnbWV0aG9kJ10gPSAnZ2V0RGF0YSc7XHJcbiAgLy8gICBsZXQgb3B0aW9ucyA9ICh7IGhlYWRlcnM6IG5ldyBIdHRwSGVhZGVycyh0aGlzLmhlYWRlcikgfSk7XHJcbiAgLy8gICB0aGlzLnNzLnZhbGlkYXRlKHJlcU9iaiwgb3B0aW9ucykudGhlbigocmVzcG9uc2U6IGFueSkgPT4ge1xyXG4gIC8vICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzID09ICdTVUNDRVNTJykge1xyXG4gIC8vICAgICAgIHRoaXMuc3VnZ2VzdERhdGEgPSByZXNwb25zZS5rdjtcclxuICAvLyAgICAgfSBlbHNlIHtcclxuICAvLyAgICAgICB0aGlzLnNwaW5uZXJTZXJ2aWNlLmhpZGUoKTtcclxuICAvLyAgICAgICB0aGlzLnRvYXN0ci5lcnJvcihyZXNwb25zZS5tZXNzYWdlKVxyXG4gIC8vICAgICB9XHJcbiAgLy8gICB9KS5jYXRjaCgoZXJyOiBhbnkpID0+IHtcclxuICAvLyAgICAgdGhpcy5zcGlubmVyU2VydmljZS5oaWRlKCk7XHJcbiAgLy8gICAgIHRoaXMudG9hc3RyLmVycm9yKGVyci5tZXNzYWdlKVxyXG4gIC8vICAgfSk7XHJcbiAgLy8gfVxyXG5cclxuICAvLyBuYSgpe1xyXG4gIC8vICAgdGhpcy5pbnB1dC5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XHJcbiAgLy8gICB0aGlzLnN1Z2dlc3REYXRhID0gW107XHJcbiAgLy8gfVxyXG5cclxuXHJcbiAgLy9oaWRlIHNob3cgcGFzc3dvcmQgZmllbGQgdGV4dFxyXG5cclxuICBzaG93SElkZVBhc3MoKSB7XHJcbiAgICB0aGlzLmVzdHN0ID0gIXRoaXMuZXN0c3Q7XHJcbiAgICBpZiAodGhpcy5lc3RzdCkge1xyXG4gICAgICB0aGlzLmV2ZUMgPSAnZmEtZXllJztcclxuICAgICAgdGhpcy5pbnB1dHR5cGUgPSAndGV4dCc7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmV2ZUMgPSAnZmEtZXllLXNsYXNoJztcclxuICAgICAgdGhpcy5pbnB1dHR5cGUgPSAncGFzc3dvcmQnO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy9yZXNldGluZyBmb3JtXHJcbiAgcmVzZXQgPSB2ID0+IHYuZm9ybS5yZXNldCgpO1xyXG5cclxuICBuZ09uSW5pdCgpIHtcclxuICAgIC8vZ2xvYmxlIGhlYWRlciBwYXJhbWV0ZXJcclxuICAgIGxldCBtZGxrID0gSlNPTi5wYXJzZShsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnbWRsS2V5JykpO1xyXG4gICAgbGV0IG1kbEtleSA9IE9iamVjdC5rZXlzKG1kbGspO1xyXG4gICAgdGhpcy5jVXJsID0gdGhpcy5yb3V0ZXIudXJsO1xyXG4gICAgdGhpcy5oZWFkZXIgPSB7XHJcbiAgICAgICdjbGllbnRrZXknOiBDb29raWUuZ2V0KCdfY2snKSxcclxuICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyxcclxuICAgICAgJ21vZHVsZWtleSc6IG1kbGtbdGhpcy5jVXJsLnNwbGl0KCcvJylbMV1dLFxyXG4gICAgICAnbG9naW5pZCc6IENvb2tpZS5nZXQoJ19sb2dpZCcpLFxyXG4gICAgICAnc291cmNlJzogJ3FzJ1xyXG4gICAgfTtcclxuICAgIGxldCBjb21wYW55RHRsID0gSlNPTi5wYXJzZShDb29raWUuZ2V0KCdfYWNjQ29tcGFueScpKSB8fCB7fTtcclxuICAgIGxldCB5ZWFyRHRsID0gSlNPTi5wYXJzZShDb29raWUuZ2V0KCdfYWNjeWVhcicpKSB8fCB7fTtcclxuICAgIGxldCBzdWJfY29faWRuID0gKGNvbXBhbnlEdGxbXCJzdWJfY29faWRuXCJdIHx8ICcnKS50b1N0cmluZygpO1xyXG4gICAgbGV0IGZpbl95ZWFyX2lkbiA9ICh5ZWFyRHRsW1wiZmluX3llYXJfaWRuXCJdIHx8ICcnKS50b1N0cmluZygpO1xyXG4gICAgaWYgKHN1Yl9jb19pZG4gIT0gJycpIHtcclxuICAgICAgdGhpcy5oZWFkZXJbJ3N1YmNvbWlkbiddID0gc3ViX2NvX2lkbjtcclxuICAgICAgdGhpcy5oZWFkZXJbJ3llYXJpZG4nXSA9IGZpbl95ZWFyX2lkbjtcclxuICAgIH1cclxuICAgIC8vb24gZm9ybSBuYW1lIGNoYW5nZVxyXG4gICAgdGhpcy5yb3V0ZS5wYXJhbXMuc3Vic2NyaWJlKChwYXJhbXM6IFBhcmFtcykgPT4ge1xyXG4gICAgICB0aGlzLnN1YkZybVdrID0gbnVsbDtcclxuICAgICAgdGhpcy53aHJLID0gXCIxXCI7XHJcbiAgICAgIHRoaXMud2hyViA9IFwiMVwiO1xyXG4gICAgICB0aGlzLnBhcmFPYmpbJ2Zvcm1ObWUnXSA9IHBhcmFtc1snZnJtbm1lJ107XHJcbiAgICAgIHRoaXMuc2VhcmNoRiA9IG51bGw7XHJcbiAgICAgIHRoaXMuZmlsbEFwcCgpXHJcbiAgICAgIHRoaXMuY0xpbmsgPSAwO1xyXG4gICAgICB0aGlzLnAgPSAxO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBmaWxsQXBwKCkge1xyXG4gICAgdGhpcy5zcGlubmVyU2VydmljZS5zaG93KCk7XHJcbiAgICBjb25zdCByZXFPYmogPSB7fTtcclxuICAgIHJlcU9ialtcImZvcm1ObWVcIl0gPSB0aGlzLnJvdXRlLnNuYXBzaG90LnBhcmFtc1snZnJtbm1lJ107XHJcbiAgICB0aGlzLmhlYWRlclsnbWV0aG9kJ10gPSAnbG9hZCc7XHJcbiAgIGNvbnN0IG9wdGlvbnMgPSAoeyBoZWFkZXJzOiBuZXcgSHR0cEhlYWRlcnModGhpcy5oZWFkZXIpIH0pO1xyXG4gICAgY29uc29sZS5sb2coXCJ0aGlzLmhlYWRlclwiLCB0aGlzLmhlYWRlcik7XHJcbiAgICB0aGlzLmFzLmdldE1lbnVSaWdodHMocmVxT2JqLCBvcHRpb25zKS50aGVuKChyZXNwb25zZTogYW55KSA9PiB7XHJcbiAgICAgIGNvbnNvbGUubG9nKHJlc3BvbnNlKTtcclxuICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1cyA9PSAnU1VDQ0VTUycpIHtcclxuICAgICAgICB0aGlzLmFwcGxpY2F0aW9uTGlzdCA9IHJlc3BvbnNlLmFwcGxpY2F0aW9uTGlzdDtcclxuICAgICAgICB0aGlzLmdldFBhZ2VEZWZpbmF0aW9uKCk7XHJcbiAgICAgICAgdGhpcy5zcGlubmVyU2VydmljZS5oaWRlKCk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5zcGlubmVyU2VydmljZS5oaWRlKCk7XHJcbiAgICAgICAgdGhpcy50b2FzdHIuZXJyb3IocmVzcG9uc2UubWVzc2FnZSk7XHJcbiAgICAgIH1cclxuICAgIH0pLmNhdGNoKChlcnI6IGFueSkgPT4ge1xyXG4gICAgICB0aGlzLnNwaW5uZXJTZXJ2aWNlLmhpZGUoKTtcclxuICAgICAgdGhpcy50b2FzdHIuZXJyb3IoZXJyLm1lc3NhZ2UpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBmaWxsTW9kdWxlKGFwcGxJZCkge1xyXG4gICAgaWYoYXBwbElkID09ICcnKSB7XHJcbiAgICAgIHRoaXMubWRsbGlzdCA9IFtdO1xyXG4gICAgICB0aGlzLm1lbnVsdmwxTGlzdCA9IFtdO1xyXG4gICAgICB0aGlzLm1lbnVsdmwyTGlzdCA9IFtdO1xyXG4gICAgICB0aGlzLm1lbnVsdmwzTGlzdCA9IFtdO1xyXG4gICAgICB0aGlzLnRvYXN0ci53YXJuaW5nKCdQbGVhc2UgU2VsZWN0IEFwcGxpY2F0aW9uJyk7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgdGhpcy5zcGlubmVyU2VydmljZS5zaG93KCk7XHJcbiAgICAgIGNvbnN0IHJlcU9iaiA9IHt9O1xyXG4gICAgICByZXFPYmpbXCJmb3JtTm1lXCJdID0gIHRoaXMucm91dGUuc25hcHNob3QucGFyYW1zWydmcm1ubWUnXTtcclxuICAgICAgcmVxT2JqW1wiYXBwbGNhdGlvbklkblwiXSA9IGFwcGxJZDtcclxuICAgICAgdGhpcy5oZWFkZXJbJ21ldGhvZCddID0gJ2xvYWRNb2R1bGUnO1xyXG4gICAgICBjb25zdCBvcHRpb25zID0gKHsgaGVhZGVyczogbmV3IEh0dHBIZWFkZXJzKHRoaXMuaGVhZGVyKSB9KTtcclxuICAgICAgdGhpcy5hcy5nZXRNZW51UmlnaHRzKHJlcU9iaiwgb3B0aW9ucykudGhlbigocmVzcG9uc2U6IGFueSkgPT4ge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKHJlc3BvbnNlKTtcclxuICAgICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzID09ICdTVUNDRVNTJykge1xyXG4gICAgICAgICAgdGhpcy5tZGxsaXN0ID0gcmVzcG9uc2UubW9kdWxlTGlzdDtcclxuICAgICAgICAgIHRoaXMuc3Bpbm5lclNlcnZpY2UuaGlkZSgpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLnNwaW5uZXJTZXJ2aWNlLmhpZGUoKTtcclxuICAgICAgICAgIHRoaXMudG9hc3RyLmVycm9yKHJlc3BvbnNlLm1lc3NhZ2UpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSkuY2F0Y2goKGVycjogYW55KSA9PiB7XHJcbiAgICAgICAgdGhpcy5zcGlubmVyU2VydmljZS5oaWRlKCk7XHJcbiAgICAgICAgdGhpcy50b2FzdHIuZXJyb3IoZXJyLm1lc3NhZ2UpO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGZpbGxMZXZlbDEobW9kdWxlX2lkbikge1xyXG4gICAgdGhpcy5zcGlubmVyU2VydmljZS5zaG93KCk7XHJcbiAgICBjb25zb2xlLmxvZyhtb2R1bGVfaWRuKVxyXG4gICAgY29uc3QgcmVxT2JqID0ge307XHJcbiAgICByZXFPYmpbXCJmb3JtTm1lXCJdID0gXCJtZW51UmlnaHRzTWFzdGVyXCI7XHJcbiAgICByZXFPYmpbXCJtb2R1bGVJZG5cIl0gPSBtb2R1bGVfaWRuO1xyXG4gICAgdGhpcy5oZWFkZXJbJ21ldGhvZCddID0gJ2xvYWRNZW51bGV2ZWwxJztcclxuICAgIGNvbnN0IG9wdGlvbnMgPSAoeyBoZWFkZXJzOiBuZXcgSHR0cEhlYWRlcnModGhpcy5oZWFkZXIpIH0pO1xyXG4gICAgdGhpcy5hcy5nZXRNZW51UmlnaHRzKHJlcU9iaiwgb3B0aW9ucykudGhlbigocmVzcG9uc2U6IGFueSkgPT4ge1xyXG4gICAgICBjb25zb2xlLmxvZyhyZXNwb25zZSk7XHJcbiAgICAgIGlmIChyZXNwb25zZS5zdGF0dXMgPT0gJ1NVQ0NFU1MnKSB7XHJcbiAgICAgICAgdGhpcy5tZW51bHZsMkxpc3QgPSBbXTtcclxuICAgICAgICB0aGlzLm1lbnVsdmwzTGlzdCA9IFtdO1xyXG4gICAgICAgIHRoaXMubWVudWx2bDFMaXN0ID0gcmVzcG9uc2Uua3Y7XHJcbiAgICAgICAgdGhpcy5zcGlubmVyU2VydmljZS5oaWRlKCk7XHJcblxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuc3Bpbm5lclNlcnZpY2UuaGlkZSgpO1xyXG4gICAgICAgIHRoaXMudG9hc3RyLmVycm9yKHJlc3BvbnNlLm1lc3NhZ2UpO1xyXG4gICAgICB9XHJcbiAgICB9KS5jYXRjaCgoZXJyOiBhbnkpID0+IHtcclxuICAgICAgdGhpcy5zcGlubmVyU2VydmljZS5oaWRlKCk7XHJcbiAgICAgIHRoaXMudG9hc3RyLmVycm9yKGVyci5tZXNzYWdlKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgZmlsbExldmVsMihtb2R1bGVfaWRuLCBtZW51SWRuKSB7XHJcbiAgICB0aGlzLnNwaW5uZXJTZXJ2aWNlLnNob3coKTtcclxuICAgIGNvbnNvbGUubG9nKG1vZHVsZV9pZG4pO1xyXG4gICAgY29uc29sZS5sb2cobWVudUlkbik7XHJcbiAgICBjb25zdCByZXFPYmogPSB7fTtcclxuICAgIHJlcU9ialtcImZvcm1ObWVcIl0gPSBcIm1lbnVSaWdodHNNYXN0ZXJcIjtcclxuICAgIHJlcU9ialtcIm1vZHVsZUlkblwiXSA9IG1vZHVsZV9pZG47XHJcbiAgICByZXFPYmpbXCJtZW51SWRuXCJdID0gbWVudUlkbjtcclxuICAgIHRoaXMuaGVhZGVyWydtZXRob2QnXSA9ICdsb2FkTWVudWxldmVsMic7XHJcbiAgIGNvbnN0IG9wdGlvbnMgPSAoeyBoZWFkZXJzOiBuZXcgSHR0cEhlYWRlcnModGhpcy5oZWFkZXIpIH0pO1xyXG4gICAgdGhpcy5hcy5nZXRNZW51UmlnaHRzKHJlcU9iaiwgb3B0aW9ucykudGhlbigocmVzcG9uc2U6IGFueSkgPT4ge1xyXG4gICAgICBjb25zb2xlLmxvZyhyZXNwb25zZSk7XHJcbiAgICAgIGlmIChyZXNwb25zZS5zdGF0dXMgPT0gJ1NVQ0NFU1MnKSB7XHJcbiAgICAgICAgdGhpcy5tZW51bHZsMkxpc3QgPSByZXNwb25zZS5rdjtcclxuICAgICAgICB0aGlzLm1lbnVsdmwzTGlzdCA9IFtdO1xyXG4gICAgICAgIHRoaXMuc3Bpbm5lclNlcnZpY2UuaGlkZSgpO1xyXG4gICAgICAgIGNvbnNvbGUubG9nKHRoaXMubWVudWx2bDJMaXN0KTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLnNwaW5uZXJTZXJ2aWNlLmhpZGUoKTtcclxuICAgICAgICB0aGlzLnRvYXN0ci5lcnJvcihyZXNwb25zZS5tZXNzYWdlKTtcclxuICAgICAgfVxyXG4gICAgfSkuY2F0Y2goKGVycjogYW55KSA9PiB7XHJcbiAgICAgIHRoaXMuc3Bpbm5lclNlcnZpY2UuaGlkZSgpO1xyXG4gICAgICB0aGlzLnRvYXN0ci5lcnJvcihlcnIubWVzc2FnZSk7XHJcbiAgICB9KTtcclxuXHJcbiAgfVxyXG5cclxuICBzdWJtZW51Q2hhbmdlKG1vZHVsZV9pZG4sIHN1Ym1lbnVJZG4pIHtcclxuICAgIHRoaXMuc3Bpbm5lclNlcnZpY2Uuc2hvdygpO1xyXG4gICAgY29uc3QgcmVxT2JqID0ge307XHJcbiAgICByZXFPYmpbXCJmb3JtTm1lXCJdID0gXCJtZW51UmlnaHRzTWFzdGVyXCI7XHJcbiAgICByZXFPYmpbXCJtb2R1bGVJZG5cIl0gPSBtb2R1bGVfaWRuO1xyXG4gICAgcmVxT2JqW1wibWVudUlkblwiXSA9IHN1Ym1lbnVJZG47XHJcbiAgICB0aGlzLmhlYWRlclsnbWV0aG9kJ10gPSAnbG9hZE1lbnVsZXZlbDMnO1xyXG4gICAgY29uc3Qgb3B0aW9ucyA9ICh7IGhlYWRlcnM6IG5ldyBIdHRwSGVhZGVycyh0aGlzLmhlYWRlcikgfSk7XHJcbiAgICB0aGlzLmFzLmdldE1lbnVSaWdodHMocmVxT2JqLCBvcHRpb25zKS50aGVuKChyZXNwb25zZTogYW55KSA9PiB7XHJcbiAgICAgIGNvbnNvbGUubG9nKHJlc3BvbnNlKTtcclxuICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1cyA9PSAnU1VDQ0VTUycpIHtcclxuICAgICAgICB0aGlzLm1lbnVsdmwzTGlzdCA9IHJlc3BvbnNlLmt2O1xyXG4gICAgICAgIHRoaXMuc3Bpbm5lclNlcnZpY2UuaGlkZSgpO1xyXG4gICAgICAgIGNvbnNvbGUubG9nKHRoaXMubWVudWx2bDNMaXN0KTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLnNwaW5uZXJTZXJ2aWNlLmhpZGUoKTtcclxuICAgICAgICB0aGlzLnRvYXN0ci5lcnJvcihyZXNwb25zZS5tZXNzYWdlKTtcclxuICAgICAgfVxyXG4gICAgfSkuY2F0Y2goKGVycjogYW55KSA9PiB7XHJcbiAgICAgIHRoaXMuc3Bpbm5lclNlcnZpY2UuaGlkZSgpO1xyXG4gICAgICB0aGlzLnRvYXN0ci5lcnJvcihlcnIubWVzc2FnZSk7XHJcbiAgICB9KTtcclxuXHJcbiAgfVxyXG5cclxuICBvcGVuVG9nKCkge1xyXG4gICAgdGhpcy5pc09wZW4gPSAhdGhpcy5pc09wZW47XHJcbiAgICBpZiAodGhpcy5pc09wZW4gPT0gdHJ1ZSkge1xyXG4gICAgICB0aGlzLmljb24gPSAnZmEgZmEtZGVkZW50JztcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuaWNvbiA9ICdmYSBmYS1pbmRlbnQnO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbn1cclxuLy8gaWYgKHRoaXMud2hyViAhPSBudWxsICYmIHRoaXMuc3ViRnJtV2sgIT0gbnVsbCkge1xyXG4vLyAgIGlmICh0aGlzLnN1YkZybVd2ICE9ICdBTEwnKSB7XHJcbi8vICAgICB0aGlzLnBhcmFPYmpbJ3doZXJlS2V5cyddID0gdGhpcy53aHJLICsgJ34nICsgdGhpcy5zdWJGcm1XaztcclxuLy8gICAgIHRoaXMucGFyYU9ialsnd2hlcmVWbHVzJ10gPSAnJyArIHRoaXMud2hyViArICd+JyArIHRoaXMuc3ViRnJtV3Y7XHJcbi8vICAgfSBlbHNlIHtcclxuLy8gICAgIHRoaXMucGFyYU9ialsnd2hlcmVLZXlzJ10gPSB0aGlzLndocks7XHJcbi8vICAgICB0aGlzLnBhcmFPYmpbJ3doZXJlVmx1cyddID0gJycgKyB0aGlzLndoclY7XHJcbi8vICAgfVxyXG4vLyAgIHRoaXMud2hlcmVNYXBbdGhpcy5zdWJGcm1Xa10gPSB0aGlzLnN1YkZybVd2O1xyXG4vLyB9IiwiPGRpdiBjbGFzcz1cIm10XCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwicGFuZWwgcGFuZWwtZGVmYXVsdFwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJwYW5lbC1oZWFkaW5nXCI+XHJcbiAgICAgICAgICAgIDxoMyBjbGFzcz1cInBhbmVsLXRpdGxlXCI+e3twYWdlSW5mbz8udGl0bGV9fVxyXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmLTEyXCI+KHt7Y0R0IHwgZGF0ZTonbWVkaXVtJ319KTwvc3Bhbj5cclxuICAgICAgICAgICAgPC9oMz5cclxuICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgaWQ9XCJhZGRCdG5cIiBjbGFzcz1cImJ0biBidG4taW5mbyBwdWxsLXJpZ2h0XCIgKm5nSWY9XCJhZGROZXc/LmlzX2NvbXB1bHNvcnkgPT0gMVwiXHJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwidXNlckFjdGlvbihkYXRhLCAnYWRkJywgJycpO2YucmVzZXQoKTtcIj57e2FkZE5ldz8uZm9ybV9maWVsZF90aXRsZX19PC9idXR0b24+XHJcblxyXG5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiBjbGFzcz1cInJvd1wiICpuZ0lmPVwicm91dGVyLnVybCAhPSBjdXJsXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0yXCIgKm5nSWY9XCJuYXZpZ2F0aW9uLmxlbmd0aCA+IDBcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInBhbmVsIHBhbmVsLWRlZmF1bHRcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwYW5lbC1ib2R5XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImxpc3QtZ3JvdXAgYm9yZGVyLWJvdHRvbVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPVwiamF2YXNjcmlwdDp2b2lkKDApXCIgY2xhc3M9XCJsaXN0LWdyb3VwLWl0ZW1cIiBbbmdDbGFzc109XCJ7J2FjdGl2ZScgOmkgPT0gY0xpbmt9XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBuYXYgb2YgbmF2aWdhdGlvbjtsZXQgaT1pbmRleFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwibmF2aWdhdGlvbkZ1bihuYXYsaSk7XCI+e3tuYXYuZm9ybV9maWVsZF90aXRsZX19IDwvYT5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IFtuZ0NsYXNzXT1cImlzT3BlbiA9PSB0cnVlID8gJ2NvbC1tZC00JyA6ICdoaWRkZW4nXCIgKm5nSWY9XCJyb3V0ZS5zbmFwc2hvdC5wYXJhbXNbJ2ZybW5tZSddID09ICdtZW51TWFzdGVyJ1wiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93IGZvcm0tZ3JvdXBcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImNvbnRyb2wtbGFiZWxcIiBzdHlsZT1cInRleHQtYWxpZ246IHJpZ2h0XCI+QXBwbGljYXRpb248L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtOFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ncm91cCB3LTEwMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c2VsZWN0IGNsYXNzPVwiZm9ybS1jb250cm9sXCIgWyhuZ01vZGVsKV09XCJhcHBcIiBuYW1lPVwiYXBwXCIgKGNoYW5nZSk9XCJmaWxsTW9kdWxlKGFwcClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gKm5nRm9yPVwibGV0IGxvdiBvZiBhcHBsaWNhdGlvbkxpc3RcIiB2YWx1ZT1cInt7bG92Lmt9fVwiPnt7bG92LnZ9fTwvb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvc2VsZWN0PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgZm9ybS1ncm91cFwiICpuZ0lmPVwibWRsbGlzdD8ubGVuZ3RoID4gMSBcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9J2NvbC1tZC00Jz5cclxuICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJjb250cm9sLWxhYmVsXCIgc3R5bGU9XCJ0ZXh0LWFsaWduOiByaWdodFwiPk1vZHVsZTwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC04XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWdyb3VwIHctMTAwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzZWxlY3QgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBbKG5nTW9kZWwpXT1cInZcIiBuYW1lPVwidlwiICAoY2hhbmdlKT1cImZpbGxMZXZlbDEodilcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gKm5nRm9yPVwibGV0IGxvdiBvZiBtZGxsaXN0XCIgdmFsdWU9XCJ7e2xvdi5rfX1cIj57e2xvdi52fX08L29wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zZWxlY3Q+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPCEtLSA8ZGl2IGNsYXNzPVwicm93IGZvcm0tZ3JvdXBcIiAqbmdJZj1cIm1lbnVsdmwxTGlzdD8ubGVuZ3RoID4gMSBcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImNvbnRyb2wtbGFiZWxcIiBzdHlsZT1cInRleHQtYWxpZ246IHJpZ2h0XCI+TWFpbiBNZW51PC9sYWJlbD5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLThcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtZ3JvdXAgdy0xMDBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHNlbGVjdCBjbGFzcz1cImZvcm0tY29udHJvbFwiIFsobmdNb2RlbCldPVwidjFcIiBuYW1lPVwidjFcIiAoY2hhbmdlKT1cImZpbGxMZXZlbDIodix2MSlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gKm5nRm9yPVwibGV0IGxvdiBvZiBtZW51bHZsMUxpc3RcIiB2YWx1ZT1cInt7bG92Lmt9fVwiPnt7bG92LnZ9fTwvb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3NlbGVjdD5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PiAtLT5cclxuXHJcbiAgICAgICAgICAgIDwhLS0gPGRpdiBjbGFzcz1cInJvdyBmb3JtLWdyb3VwXCIgKm5nSWY9XCJtZW51bHZsMkxpc3Q/Lmxlbmd0aCA+IDEgXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTRcIj5cclxuICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJjb250cm9sLWxhYmVsXCIgc3R5bGU9XCJ0ZXh0LWFsaWduOiByaWdodFwiPlN1YiBNZW51PC9sYWJlbD5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLThcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtZ3JvdXAgdy0xMDBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHNlbGVjdCBjbGFzcz1cImZvcm0tY29udHJvbFwiIFsobmdNb2RlbCldPVwidjJcIiBuYW1lPVwidjJcIiAoY2hhbmdlKT1cInN1Ym1lbnVDaGFuZ2UodiwgdjIpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uICpuZ0Zvcj1cImxldCBsb3Ygb2YgbWVudWx2bDJMaXN0XCIgdmFsdWU9XCJ7e2xvdi5rfX1cIj57e2xvdi52fX08L29wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NlbGVjdD5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvdyBmb3JtLWdyb3VwXCIgKm5nSWY9XCJtZW51bHZsM0xpc3Q/Lmxlbmd0aCA+IDEgXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTRcIj5cclxuICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJjb250cm9sLWxhYmVsXCIgc3R5bGU9XCJ0ZXh0LWFsaWduOiByaWdodFwiPlBhZ2U8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtOFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ncm91cCB3LTEwMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c2VsZWN0IGNsYXNzPVwiZm9ybS1jb250cm9sXCIgWyhuZ01vZGVsKV09XCJ2M1wiIG5hbWU9XCJ2M1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiAqbmdGb3I9XCJsZXQgbG92IG9mIG1lbnVsdmwzTGlzdFwiIHZhbHVlPVwie3tsb3Yua319XCI+e3tsb3Yudn19PC9vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc2VsZWN0PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+IC0tPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93IGZvcm0tZ3JvdXBcIiAqbmdJZj1cIm1kbGxpc3Q/Lmxlbmd0aCA+IDEgXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTRcIj5cclxuICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJjb250cm9sLWxhYmVsXCIgc3R5bGU9XCJ0ZXh0LWFsaWduOiByaWdodFwiPkxldmVsPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLThcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtZ3JvdXAgdy0xMDBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHNlbGVjdCAgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBbKG5nTW9kZWwpXT1cImxldmVsXCIgbmFtZT1cImxldmVsXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiXCI+U2VsZWN0PC9vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiMVwiPkxldmVsIDE8L29wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCIyXCI+TGV2ZWwgMjwvb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIjNcIj5MZXZlbCAzPC9vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc2VsZWN0PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBbbmdDbGFzc109XCJuYXZpZ2F0aW9uLmxlbmd0aCA+IDAgPyAnY29sLW1kLTEwJyA6IHJvdXRlLnNuYXBzaG90LnBhcmFtc1snZnJtbm1lJ10gPT0gJ21lbnVNYXN0ZXInID8gaXNPcGVuID09IGZhbHNlID8gJ2NvbC1tZC0xMicgOiAnY29sLW1kLTgnIDogJ2NvbC1tZC0xMidcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInBhbmVsIHBhbmVsLWRlZmF1bHRcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwYW5lbC1ib2R5XCIgW3N0eWxlXT1cInJvdXRlLnNuYXBzaG90LnBhcmFtc1snZnJtbm1lJ10gPT0gJ21lbnVNYXN0ZXInID8gJ21hcmdpbi1ib3R0b206IDM1cHg7JyA6ICcnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPCEtLSA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tOFwiPjwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTRcIj5cclxuICAgICAgICAgICAgICA8Zm9ybSBjbGFzcz1cImZvcm0taW5saW5lIHB1bGwtcmlnaHRcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9XCJleGFtcGxlSW5wdXROYW1lMlwiPlNlYXJjaCAmbmJzcDsmbmJzcDs8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBjbGFzcz1cImZvcm0tY29udHJvbFwiIGlkPVwiZXhhbXBsZUlucHV0TmFtZTJcIiBuYW1lPVwic2NodHh0XCIgWyhuZ01vZGVsKV09XCJzZWFyY2hGXCIgLz5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDwvZm9ybT5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L2Rpdj4gLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTZcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmb3JtIGNsYXNzPVwiZm9ybS1pbmxpbmUgcHVsbC1sZWZ0XCIgPiBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uICpuZ0lmPVwicm91dGUuc25hcHNob3QucGFyYW1zWydmcm1ubWUnXSA9PSAnbWVudU1hc3RlcidcIiBjbGFzcz1cImJ0biBidG4tZGVmYXVsdFwiIHN0eWxlPVwicGFkZGluZzogNHB4IDE1cHggNHB4IDIwcHg7IG1hcmdpbi1yaWdodDogMTBweDsgbWFyZ2luLWJvdHRvbTogMTVweDtcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLXRvZ2dsZT1cInRvb2x0aXBcIiBkYXRhLXBsYWNlbWVudD1cInJpZ2h0XCIgdGl0bGU9XCJGaWx0ZXIgcmVzdWx0c1wiIChjbGljayk9XCJvcGVuVG9nKCk7XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwie3tpY29ufX1cIiBzdHlsZT1cImNvbG9yOiMzYjU5OTg7XCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSA8L2Zvcm0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmb3JtIGNsYXNzPVwiZm9ybS1pbmxpbmUgcHVsbC1sZWZ0XCI+IC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9XCJkZGxQYWdlc2l6ZVwiPlBhZ2UgU2l6ZSAmbmJzcDsgJm5ic3A7PC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNlbGVjdCBjbGFzcz1cImZvcm0tY29udHJvbFwiIG5hbWU9XCJwYWdlU2l6ZVwiIFsobmdNb2RlbCldPVwicGFnZVNpemVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoYW5nZSk9XCJvblBhZ2VTaXplQ2hhbmdlKHBhZ2VTaXplKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIkFsbFwiPkFsbDwvb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIjEwXCI+MTA8L29wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCIyNVwiPjI1PC9vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiNTBcIj41MDwvb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIjEwMFwiPjEwMDwvb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NlbGVjdD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tZGVmYXVsdFwiIHN0eWxlPVwicGFkZGluZzogNHB4IDE1cHggNHB4IDIwcHg7bWFyZ2luLWxlZnQ6IDEwcHg7IG1hcmdpbi1ib3R0b206IDE1cHg7XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLXRvZ2dsZT1cInRvb2x0aXBcIiBkYXRhLXBsYWNlbWVudD1cInJpZ2h0XCIgdGl0bGU9XCJSZWZyZXNoXCIgKGNsaWNrKT1cIm5nT25Jbml0KCk7XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmYSBmYS1yZWZyZXNoXCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZm9ybT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gPGxhYmVsPnt7ZGF0YWxpc3QubGVuZ3RofX08L2xhYmVsPiAtLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tNlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZvcm0gY2xhc3M9XCJmb3JtLWlubGluZSBwdWxsLXJpZ2h0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj1cImV4YW1wbGVJbnB1dE5hbWUyXCI+U2VhcmNoICZuYnNwOyZuYnNwOzwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIGNsYXNzPVwiZm9ybS1jb250cm9sXCIgaWQ9XCJleGFtcGxlSW5wdXROYW1lMlwiIG5hbWU9XCJzY2h0eHRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJzZWFyY2hGXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZm9ybT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRhYmxlLXJlc3BvbnNpdmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHRhYmxlIGNsYXNzPVwidGFibGUgdGFibGUtYm9yZGVyZWQgdGFibGUtaG92ZXIgdGFibGUtaG92ZXItY2VsbHNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aGVhZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aD5TUiBObzwvdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aD5BY3Rpb248L3RoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGggKm5nRm9yPVwibGV0IHRiaCBvZiB0YmxIOyBsZXQgaSA9IGluZGV4IFwiIChjbGljayk9XCJzZXRPcmRlcih0YmgsaSlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7dGJsRGVzY1t0YmhdfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIFtoaWRkZW5dPVwicmV2ZXJzZVwiICpuZ0lmPVwic2hvd2FyciA9PT0gaVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtYXJyb3ctZG93blwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIFtoaWRkZW5dPVwiIXJldmVyc2VcIiAqbmdJZj1cInNob3dhcnIgPT09IGlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLWFycm93LXVwXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RoZWFkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRib2R5PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0clxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgZGF0YSBvZiBkYXRhbGlzdCB8IHNlYXJjaFBpcGU6c2VhcmNoRiB8IG9yZGVyQnk6IG9yZGVyOnJldmVyc2UgfCBwYWdpbmF0ZTogeyBpdGVtc1BlclBhZ2U6IHBhZ2VTaXplLCBjdXJyZW50UGFnZTogcCB9OyBsZXQgaSA9IGluZGV4O1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+e3tpICsgMX19PC90ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJ0bi1ncm91cFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9XCIjXCIgZGF0YS10b2dnbGU9XCJkcm9wZG93blwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1pbmZvIGRyb3Bkb3duLXRvZ2dsZVwiPkFjdGlvblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNhcmV0XCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dWwgY2xhc3M9XCJkcm9wZG93bi1tZW51XCIgcm9sZT1cIm1lbnVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpICpuZ0Zvcj1cImxldCBhY3Rpb24gb2YgYWN0aW9uc1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj1cImphdmFzY3JpcHQ6dm9pZCgwKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInVzZXJBY3Rpb24oZGF0YSwgYWN0aW9uLmZvcm1fZmllbGRfdHlwLCBhY3Rpb24pO1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7YWN0aW9uLmZvcm1fZmllbGRfdGl0bGV9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkICpuZ0Zvcj1cImxldCB0Ymggb2YgdGJsSDsgbGV0IGk9aW5kZXhcIiBvbi1tb3VzZW92ZXI9XCJob3ZlcmVkST1pXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uLW1vdXNlbGVhdmU9XCJob3ZlcmVkST0tMVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3tkYXRhW3RiaF19fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm9uSG92ZXJEaXZcIiAqbmdJZj1cImk9PWhvdmVyZWRJXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGkgKGNsaWNrKT1cImVkaXRDZWxsKGRhdGEsdGJoKTtcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZmEgZmEtcGVuY2lsXCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC90YWJsZT5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8cGFnaW5hdGlvbi1jb250cm9scyAocGFnZUNoYW5nZSk9XCJwID0gJGV2ZW50XCIgY2xhc3M9XCJwdWxsLXJpZ2h0XCI+PC9wYWdpbmF0aW9uLWNvbnRyb2xzPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2IGNsYXNzPVwiYWN0aW9uRm9vdGVyXCIgKm5nSWY9XCJyb3V0ZS5zbmFwc2hvdC5wYXJhbXNbJ2ZybW5tZSddID09ICdtZW51TWFzdGVyJ1wiPlxyXG4gICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGlkPVwiYWRkQnRuXCIgY2xhc3M9XCJidG4gYnRuLXN1Y2Nlc3MgdHRpcFwiIChjbGljayk9XCJnZXRQYWdlRGVmaW5hdGlvbigpXCI+RmlsdGVyPC9idXR0b24+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJtb2RhbFwiIGlkPVwiZGF0YW1vZGFsXCIgcm9sZT1cImRpYWxvZ1wiIGFyaWEtbGFiZWxsZWRieT1cImRlZk1vZGFsSGVhZFwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiXHJcbiAgICAgICAgZGF0YS1iYWNrZHJvcD1cInN0YXRpY1wiIGRhdGEta2V5Ym9hcmQ9XCJmYWxzZVwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1kaWFsb2dcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWNvbnRlbnRcIj5cclxuICAgICAgICAgICAgICAgIDxmb3JtIGNsYXNzPVwiZm9ybS1ob3Jpem9udGFsXCIgI2Y9XCJuZ0Zvcm1cIiBuYW1lPVwiYXBwRm9ybVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1oZWFkZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJjbG9zZVwiIGRhdGEtZGlzbWlzcz1cIm1vZGFsXCIgKGNsaWNrKT1cImNsb3NlTnVsbCgpO1wiICNjbG9zZWJ0bj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPiZ0aW1lczs8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInNyLW9ubHlcIj5DbG9zZTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxoNCBjbGFzcz1cIm1vZGFsLXRpdGxlXCIgaWQ9XCJkZWZNb2RhbEhlYWRcIj57e2J0bk5hbWV9fSBSZWNvcmQ8L2g0PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1ib2R5XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMTJcIiAqbmdGb3I9XCJsZXQgZmwgb2YgZm9ybUZpbGRzIHwgb3JkZXJCeVBpcGU6ICdzcnQnOiAnYXNjJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJmbD8uZm9ybV9maWVsZF90eXAgPT0gJ3QnICYmIGZsPy5pc19oaWRkZW4gPT0gMCAmJiBmbD8uZHRhX3R5cCA9PSdjJyB8fCBmbD8uZHRhX3R5cCA9PSd0J1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJjb2wtbWQtMyBjb250cm9sLWxhYmVsXCI+e3tmbD8uZm9ybV9maWVsZF90aXRsZX19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtZGFuZ2VyXCIgKm5nSWY9XCJmbC5pc19jb21wdWxzb3J5ID09IDFcIj4qPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ncm91cCB3LTEwMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gKGNoYW5nZSk9XCJyZW1vdmVJbnZhbGlkKGZsKVwiIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIGNsYXNzPVwiZm9ybS1jb250cm9sXCIgbmFtZT1cInt7Zmw/LmZvcm1fZmllbGR9fVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJmbD8uZGVmYXVsdF92YWx1ZVwiIFsobmdNb2RlbCldPVwiZmwuZGVmYXVsdF92YWx1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICN0ZXh0SW5wdXQ9XCJuZ01vZGVsXCIgKGJsdXIpPVwiY2hrRnVuKGZsLGZsLmRlZmF1bHRfdmFsdWUpO1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsndW5pcUVyck1zZyc6IGZsPy5mb3JtX2ZpZWxkID09IG9uRXJyfVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyZXF1aXJlZF09XCJmbD8uaXNfY29tcHVsc29yeSA9PSAxXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSAoYmx1cik9XCJ0aGlzW2ZsPy52YWxpZGF0aW9uc10oZmwuZGVmYXVsdF92YWx1ZSlcIiAtLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJ0ZXh0SW5wdXQuaW52YWxpZCAmJiAodGV4dElucHV0LmRpcnR5IHx8IHRleHRJbnB1dC50b3VjaGVkKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJhbGVydCBhbGVydC1kYW5nZXIgY2FcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwidGV4dElucHV0LmVycm9ycy5yZXF1aXJlZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e2ZsLmZvcm1fZmllbGRfdGl0bGV9fSBpcyByZXF1aXJlZC5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIDxkaXYgKm5nSWY9XCJ0ZXh0SW5wdXQuZXJyb3JzLm1pbmxlbmd0aFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHt7ZmwuZm9ybV9maWVsZF90aXRsZX19IG11c3QgYmUgYXQgbGVhc3Qge3tmbC5mb3JtX2ZpZWxkX21pbl9sZW5ndGh9fSBjaGFyYWN0ZXJzIGxvbmcuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwidGV4dElucHV0LmVycm9ycy5tYXhsZW5ndGhcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICB7e2ZsLmZvcm1fZmllbGRfdGl0bGV9fSBNYXhtaW11bSBsaW1pdCB7e2ZsLmZvcm1fZmllbGRfbWF4X2xlbmd0aH19IGNoYXJhY3RlcnMgbG9uZy5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+IC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJmbD8uZm9ybV9maWVsZF90eXAgPT0gJ3QnICYmIGZsPy5pc19oaWRkZW4gPT0gMCAmJiBmbD8uZHRhX3R5cCA9PSduJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJjb2wtbWQtMyBjb250cm9sLWxhYmVsXCI+e3tmbD8uZm9ybV9maWVsZF90aXRsZX19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtZGFuZ2VyXCIgKm5nSWY9XCJmbC5pc19jb21wdWxzb3J5ID09IDFcIj4qPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ncm91cCB3LTEwMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwibnVtYmVyXCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBuYW1lPVwie3tmbD8uZm9ybV9maWVsZH19XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cImZsPy5kZWZhdWx0X3ZhbHVlXCIgWyhuZ01vZGVsKV09XCJmbC5kZWZhdWx0X3ZhbHVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI251bWJlcklucHV0PVwibmdNb2RlbFwiIFtyZXF1aXJlZF09XCJmbD8uaXNfY29tcHVsc29yeSA9PSAxXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBtaW5sZW5ndGg9e3tmbD8uZm9ybV9maWVsZF9taW5fbGVuZ3RofX0gbWF4bGVuZ3RoPXt7Zmw/LmZvcm1fZmllbGRfbWF4X2xlbmd0aH19LyAtLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cIm51bWJlcklucHV0LmludmFsaWQgJiYgKG51bWJlcklucHV0LmRpcnR5IHx8IG51bWJlcklucHV0LnRvdWNoZWQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImFsZXJ0IGFsZXJ0LWRhbmdlciBjYVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJudW1iZXJJbnB1dC5lcnJvcnMucmVxdWlyZWRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3tmbC5mb3JtX2ZpZWxkX3RpdGxlfX0gaXMgcmVxdWlyZWQuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSA8ZGl2ICpuZ0lmPVwibnVtYmVySW5wdXQuZXJyb3JzLm1pbmxlbmd0aFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHt7ZmwuZm9ybV9maWVsZF90aXRsZX19IG11c3QgYmUgYXQgbGVhc3Qge3tmbC5mb3JtX2ZpZWxkX21pbl9sZW5ndGh9fSBjaGFyYWN0ZXJzIGxvbmcuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwibnVtYmVySW5wdXQuZXJyb3JzLm1heGxlbmd0aFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHt7ZmwuZm9ybV9maWVsZF90aXRsZX19IE1heG1pbXVtIGxpbWl0IHt7ZmwuZm9ybV9maWVsZF9tYXhfbGVuZ3RofX0gY2hhcmFjdGVycyBsb25nLlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4gLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImZsPy5mb3JtX2ZpZWxkX3R5cCA9PSAncHcnICYmIGZsPy5pc19oaWRkZW4gPT0gMCAmJiBmbD8uZHRhX3R5cCA9PSdwdydcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiY29sLW1kLTMgY29udHJvbC1sYWJlbFwiPnt7Zmw/LmZvcm1fZmllbGRfdGl0bGV9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LWRhbmdlclwiICpuZ0lmPVwiZmwuaXNfY29tcHVsc29yeSA9PSAxXCI+Kjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC05XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtZ3JvdXAgdy0xMDBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInt7aW5wdXR0eXBlfX1cIiBjbGFzcz1cImZvcm0tY29udHJvbCBwb3NyZWxcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lPVwie3tmbD8uZm9ybV9maWVsZH19XCIgW3ZhbHVlXT1cImZsPy5kZWZhdWx0X3ZhbHVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJmbC5kZWZhdWx0X3ZhbHVlXCIgI3Bhc3NJbnB1dD1cIm5nTW9kZWxcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcmVxdWlyZWRdPVwiZmw/LmlzX2NvbXB1bHNvcnkgPT0gMVwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmYSB7e2V2ZUN9fSBleWVcIiAoY2xpY2spPVwic2hvd0hJZGVQYXNzKCk7XCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIChibHVyKT1cInRoaXNbZmw/LnZhbGlkYXRpb25zXShmbC5kZWZhdWx0X3ZhbHVlKVwiIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cInBhc3NJbnB1dC5pbnZhbGlkICYmIChwYXNzSW5wdXQuZGlydHkgfHwgcGFzc0lucHV0LnRvdWNoZWQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImFsZXJ0IGFsZXJ0LWRhbmdlciBjYVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJwYXNzSW5wdXQuZXJyb3JzLnJlcXVpcmVkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7ZmwuZm9ybV9maWVsZF90aXRsZX19IGlzIHJlcXVpcmVkLlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwXCIgKm5nSWY9XCJmbD8uZm9ybV9maWVsZF90eXAgPT0gJ3QnICYmIGZsPy5kdGFfdHlwID09J2EnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImNvbC1tZC0zIGNvbnRyb2wtbGFiZWxcIj57e2ZsPy5mb3JtX2ZpZWxkX3RpdGxlfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC1kYW5nZXJcIiAqbmdJZj1cImZsLmlzX2NvbXB1bHNvcnkgPT0gMVwiPio8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtOVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWdyb3VwIHctMTAwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRhZy1pbnB1dCBbKG5nTW9kZWwpXT1cImZsLmRlZmF1bHRfdmFsdWVcIiBuYW1lPVwie3tmbD8uZm9ybV9maWVsZH19XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW21vZGVsQXNTdHJpbmdzXT1cInRydWVcIiBbYWxsb3dEdXBlc109XCJ0cnVlXCIgW2VkaXRhYmxlXT0ndHJ1ZSc+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90YWctaW5wdXQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwXCIgKm5nSWY9XCJmbD8uZm9ybV9maWVsZF90eXAgPT0gJ3QnICYmIGZsPy5kdGFfdHlwID09J3NhJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJjb2wtbWQtMyBjb250cm9sLWxhYmVsXCI+e3tmbD8uZm9ybV9maWVsZF90aXRsZX19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtZGFuZ2VyXCIgKm5nSWY9XCJmbC5pc19jb21wdWxzb3J5ID09IDFcIj4qPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ncm91cCB3LTEwMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1zZWxlY3QgW29wdGlvbnNdPVwic3FsQXJyYXlbZmw/LmZvcm1fZmllbGRdXCIgc3R5bGU9XCJ6LWluZGV4Ojk7XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJmbC5kZWZhdWx0X3ZhbHVlXCIgI3NhZmllbGQ9XCJuZ01vZGVsXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3JlcXVpcmVkXT1cImZsPy5pc19jb21wdWxzb3J5ID09IDFcIiBuYW1lPVwie3tmbD8uZm9ybV9maWVsZH19XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW211bHRpcGxlXT1cInRydWVcIiBbYWxsb3dDbGVhcl09XCJ0cnVlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjb3B0aW9uVGVtcGxhdGUgbGV0LW9wdGlvbj1cIm9wdGlvblwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZhbWZhbWZhbS1mbGFncyB7e29wdGlvbj8udmFsdWV9fVwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3tvcHRpb24/LmxhYmVsfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLXNlbGVjdD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIDxuZy1zZWxlY3QgW2l0ZW1zXT1cInNxbEFycmF5W2ZsPy5mb3JtX2ZpZWxkXVwiIFthZGRUYWddPVwiYWRkVGFnXCIgYmluZFZhbHVlPVwia1wiIG11bHRpcGxlPVwidHJ1ZVwiIGJpbmRMYWJlbD1cInZcIiBuYW1lPVwie3tmbD8uZm9ybV9maWVsZH19XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJmbC5kZWZhdWx0X3ZhbHVlXCIgI3NhZmllbGQ9XCJuZ01vZGVsXCIgW3JlcXVpcmVkXT1cImZsPy5pc19jb21wdWxzb3J5ID09IDFcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvbmctc2VsZWN0PiAtLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cInNhZmllbGQuaW52YWxpZCAmJiAoc2FmaWVsZC5kaXJ0eSB8fCBzYWZpZWxkLnRvdWNoZWQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImFsZXJ0IGFsZXJ0LWRhbmdlciBjYVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJzYWZpZWxkLmVycm9ycy5yZXF1aXJlZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e2ZsLmZvcm1fZmllbGRfdGl0bGV9fSBpcyByZXF1aXJlZC5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiZmw/LmZvcm1fZmllbGRfdHlwID09ICd0YScgJiYgZmw/LmlzX2hpZGRlbiA9PSAwICYmIGZsPy5kdGFfdHlwID09J2MnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImNvbC1tZC0zIGNvbnRyb2wtbGFiZWxcIj57e2ZsPy5mb3JtX2ZpZWxkX3RpdGxlfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC1kYW5nZXJcIiAqbmdJZj1cImZsLmlzX2NvbXB1bHNvcnkgPT0gMVwiPio8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtOVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWdyb3VwIHctMTAwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRleHRhcmVhIGNsYXNzPVwiZm9ybS1jb250cm9sXCIgcm93cz1cIjNcIiBuYW1lPVwie3tmbD8uZm9ybV9maWVsZH19XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cImZsPy5kZWZhdWx0X3ZhbHVlXCIgWyhuZ01vZGVsKV09XCJmbC5kZWZhdWx0X3ZhbHVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI3RleHRBcmVhPVwibmdNb2RlbFwiIChibHVyKT1cImNoa0Z1bihmbCxmbC5kZWZhdWx0X3ZhbHVlKTtcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7J3VuaXFFcnJNc2cnOiBmbD8uZm9ybV9maWVsZCA9PSBvbkVycn1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcmVxdWlyZWRdPVwiZmw/LmlzX2NvbXB1bHNvcnkgPT0gMVwiPjwvdGV4dGFyZWE+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJ0ZXh0QXJlYS5pbnZhbGlkICYmICh0ZXh0QXJlYS5kaXJ0eSB8fCB0ZXh0QXJlYS50b3VjaGVkKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJhbGVydCBhbGVydC1kYW5nZXIgY2FcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwidGV4dEFyZWEuZXJyb3JzLnJlcXVpcmVkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7ZmwuZm9ybV9maWVsZF90aXRsZX19IGlzIHJlcXVpcmVkLlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJmbD8uZm9ybV9maWVsZF90eXAgPT0gJ2hkJyB8fCBmbD8uZm9ybV9maWVsZF90eXAgPT0gJ2RmJyB8fCBmbD8uZm9ybV9maWVsZF90eXAgPT0gJ2ZrJyAmJiBmbD8uaXNfaGlkZGVuID09IDBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7J210MCc6IGZsPy5mb3JtX2ZpZWxkX3R5cCA9PSAnaGQnfVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJjb2wtbWQtMyBjb250cm9sLWxhYmVsXCI+PC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC05XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtZ3JvdXAgdy0xMDBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImhpZGRlblwiIGNsYXNzPVwiZm9ybS1jb250cm9sXCIgbmFtZT1cInt7Zmw/LmZvcm1fZmllbGR9fVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJmbD8uZGVmYXVsdF92YWx1ZVwiIFsobmdNb2RlbCldPVwiZmwuZGVmYXVsdF92YWx1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICNoZGY9XCJuZ01vZGVsXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cFwiICpuZ0lmPVwiZmw/LmZvcm1fZmllbGRfdHlwID09ICdzcScgJiYgZmw/LmlzX2hpZGRlbiA9PSAwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImNvbC1tZC0zIGNvbnRyb2wtbGFiZWxcIj48L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ncm91cCB3LTEwMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiaGlkZGVuXCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBuYW1lPVwie3tmbD8uZm9ybV9maWVsZH19XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cImZsPy5kZWZhdWx0X3ZhbHVlXCIgWyhuZ01vZGVsKV09XCJmbC5kZWZhdWx0X3ZhbHVlXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cFwiICpuZ0lmPVwiZmw/LmZvcm1fZmllbGRfdHlwID09ICd0YicgJiYgZmw/LmlzX2hpZGRlbiA9PSAwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImNvbC1tZC0zIGNvbnRyb2wtbGFiZWxcIj57e2ZsPy5mb3JtX2ZpZWxkX3RpdGxlfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC1kYW5nZXJcIiAqbmdJZj1cImZsLmlzX2NvbXB1bHNvcnkgPT0gMVwiPio8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gPGRpdiBjbGFzcz1cImNvbC1tZC05XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYnRuLWdyb3VwXCIgZGF0YS10b2dnbGU9XCJidXR0b25zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImJ0biBidG4tZGVmYXVsdCBidG4tb24gYnRuLXhzXCIgKm5nRm9yPVwibGV0IGxvdiBvZiBzcWxBcnJheVtmbC5mb3JtX2ZpZWxkXTtsZXQgaT1pbmRleFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwicmFkaW9cIiBbdmFsdWVdPVwibG92LmtcIiBpZD1cInt7aX19XCIgbmFtZT1cInt7Zmw/LmZvcm1fZmllbGR9fVwiIFt2YWx1ZV09XCJcIiBbKG5nTW9kZWwpXT1cImZsLmRlZmF1bHRfdmFsdWVcIj57e2xvdi52fX08L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+IC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ncm91cCB3LTEwMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzZWxlY3QgY2xhc3M9XCJmb3JtLWNvbnRyb2wgc2VsZWN0XCIgbmFtZT1cInt7Zmw/LmZvcm1fZmllbGR9fVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJmbD8uZGVmYXVsdF92YWx1ZVwiIFsobmdNb2RlbCldPVwiZmwuZGVmYXVsdF92YWx1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICN0ZGY9XCJuZ01vZGVsXCIgW3JlcXVpcmVkXT1cImZsPy5pc19jb21wdWxzb3J5ID09ICcxJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uICpuZ0Zvcj1cImxldCBkeW5hbWljIG9mIHNxbEFycmF5W2ZsLmZvcm1fZmllbGRdXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPVwie3tkeW5hbWljLnZhbHVlfX1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7ZHluYW1pYy5sYWJlbH19PC9vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zZWxlY3Q+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJ0ZGYuaW52YWxpZCAmJiAodGRmLmRpcnR5IHx8IHRkZi50b3VjaGVkKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJhbGVydCBhbGVydC1kYW5nZXIgY2FcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwidGRmLmVycm9ycy5yZXF1aXJlZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e2ZsLmZvcm1fZmllbGRfdGl0bGV9fSBpcyByZXF1aXJlZC5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cFwiICpuZ0lmPVwiZmw/LmZvcm1fZmllbGRfdHlwID09ICdsJyAmJiBmbD8uaXNfaGlkZGVuID09IDBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiY29sLW1kLTMgY29udHJvbC1sYWJlbFwiPnt7Zmw/LmZvcm1fZmllbGRfdGl0bGV9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LWRhbmdlclwiICpuZ0lmPVwiZmwuaXNfY29tcHVsc29yeSA9PSAxXCI+Kjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC05XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtZ3JvdXAgdy0xMDBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c2VsZWN0IGNsYXNzPVwiZm9ybS1jb250cm9sIHNlbGVjdFwiIG5hbWU9XCJ7e2ZsPy5mb3JtX2ZpZWxkfX1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPVwiZmw/LmRlZmF1bHRfdmFsdWVcIiBbKG5nTW9kZWwpXT1cImZsLmRlZmF1bHRfdmFsdWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjbElucHV0PVwibmdNb2RlbFwiIFtyZXF1aXJlZF09XCJmbD8uaXNfY29tcHVsc29yeSA9PSAnMSdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiAqbmdGb3I9XCJsZXQgbG92IG9mIGZsLmt2XCIgdmFsdWU9XCJ7e2xvdi5rfX1cIj57e2xvdi52fX08L29wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NlbGVjdD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImxJbnB1dC5pbnZhbGlkICYmIChsSW5wdXQuZGlydHkgfHwgbElucHV0LnRvdWNoZWQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImFsZXJ0IGFsZXJ0LWRhbmdlciBjYVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJsSW5wdXQuZXJyb3JzLnJlcXVpcmVkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7ZmwuZm9ybV9maWVsZF90aXRsZX19IGlzIHJlcXVpcmVkLlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwXCIgKm5nSWY9XCJmbD8uZm9ybV9maWVsZF90eXAgPT0gJ2xkJyAgJiYgZmw/LmlzX2hpZGRlbiA9PSAwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImNvbC1tZC0zIGNvbnRyb2wtbGFiZWxcIj57e2ZsPy5mb3JtX2ZpZWxkX3RpdGxlfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC1kYW5nZXJcIiAqbmdJZj1cImZsLmlzX2NvbXB1bHNvcnkgPT0gMVwiPio8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtOVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWdyb3VwIHctMTAwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNlbGVjdCBjbGFzcz1cImZvcm0tY29udHJvbCBzZWxlY3RcIiBuYW1lPVwie3tmbD8uZm9ybV9maWVsZH19XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cImZsPy5kZWZhdWx0X3ZhbHVlXCIgWyhuZ01vZGVsKV09XCJmbC5kZWZhdWx0X3ZhbHVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI2xkSW5wdXQ9XCJuZ01vZGVsXCIgW3JlcXVpcmVkXT1cImZsPy5pc19jb21wdWxzb3J5ID09ICcxJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uICpuZ0Zvcj1cImxldCBkeW5hbWljIG9mIHNxbEFycmF5W2ZsLmZvcm1fZmllbGRdXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPVwie3tkeW5hbWljLmt9fVwiPnt7ZHluYW1pYy52fX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zZWxlY3Q+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJsZElucHV0LmludmFsaWQgJiYgKGxkSW5wdXQuZGlydHkgfHwgbGRJbnB1dC50b3VjaGVkKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJhbGVydCBhbGVydC1kYW5nZXIgY2FcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwibGRJbnB1dC5lcnJvcnMucmVxdWlyZWRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3tmbC5mb3JtX2ZpZWxkX3RpdGxlfX0gaXMgcmVxdWlyZWQuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXBcIiAqbmdJZj1cImZsPy5mb3JtX2ZpZWxkX3R5cCA9PSAncycgJiYgZmw/LmlzX2hpZGRlbiA9PSAwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImNvbC1tZC0zIGNvbnRyb2wtbGFiZWxcIj57e2ZsPy5mb3JtX2ZpZWxkX3RpdGxlfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC1kYW5nZXJcIiAqbmdJZj1cImZsLmlzX2NvbXB1bHNvcnkgPT0gMVwiPio8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtOVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWdyb3VwIHctMTAwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNlbGVjdCBjbGFzcz1cImZvcm0tY29udHJvbCBzZWxlY3RcIiBuYW1lPVwie3tmbD8uZm9ybV9maWVsZH19XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cImZsPy5kZWZhdWx0X3ZhbHVlXCIgWyhuZ01vZGVsKV09XCJmbC5kZWZhdWx0X3ZhbHVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoYW5nZSk9XCJjaGtGdW4oZmwsZmwuZGVmYXVsdF92YWx1ZSlcIiBpZD1cInt7ZmwuY29sdW1uX2tleX19XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI3NmaT1cIm5nTW9kZWxcIiBbcmVxdWlyZWRdPVwiZmw/LmlzX2NvbXB1bHNvcnkgPT0gJzEnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gKm5nRm9yPVwibGV0IGR5bmFtaWMgb2Ygc3FsQXJyYXlbZmwuZm9ybV9maWVsZF1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU9XCJ7e2R5bmFtaWMudmFsdWV9fVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3tkeW5hbWljLmxhYmVsfX08L29wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NlbGVjdD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cInNmaS5pbnZhbGlkICYmIChzZmkuZGlydHkgfHwgc2ZpLnRvdWNoZWQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImFsZXJ0IGFsZXJ0LWRhbmdlciBjYVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJzZmkuZXJyb3JzLnJlcXVpcmVkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7ZmwuZm9ybV9maWVsZF90aXRsZX19IGlzIHJlcXVpcmVkLlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cFwiICpuZ0lmPVwiZmw/LmZvcm1fZmllbGRfdHlwID09ICdzYidcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiY29sLW1kLTMgY29udHJvbC1sYWJlbFwiPnt7Zmw/LmZvcm1fZmllbGRfdGl0bGV9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LWRhbmdlclwiICpuZ0lmPVwiZmwuaXNfY29tcHVsc29yeSA9PSAxXCI+Kjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC04XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtZ3JvdXAgdy0xMDBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctc2VsZWN0IHN0eWxlPVwiei1pbmRleDogNTtcIiBbb3B0aW9uc109XCJzcWxBcnJheVtmbC5mb3JtX2ZpZWxkXVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICNzZmk9XCJuZ01vZGVsXCIgWyhuZ01vZGVsKV09XCJmbC5kZWZhdWx0X3ZhbHVlXCIgbmFtZT1cInt7Zmw/LmZvcm1fZmllbGR9fVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzZWxlY3RlZCk9XCJjaGtGdW4oZmwsZmwuZGVmYXVsdF92YWx1ZSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZmlsdGVySW5wdXRDaGFuZ2VkKT1cImxvYWRTdWdnZGF0YSgkZXZlbnQsZmwucGFnZV9pdGVtX2lkbixmbC5mb3JtX2ZpZWxkKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctc2VsZWN0PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwic2ZpLmludmFsaWQgJiYgKHNmaS5kaXJ0eSB8fCBzZmkudG91Y2hlZClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYWxlcnQgYWxlcnQtZGFuZ2VyIGNhXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cInNmaS5lcnJvcnMucmVxdWlyZWRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3tmbC5mb3JtX2ZpZWxkX3RpdGxlfX0gaXMgcmVxdWlyZWQuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMVwiICpuZ0lmPVwiZmw/LmZvcm1fZmllbGRfaWNvbiA9PSAnYWRkJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLXN1Y2Nlc3MgYnRuLXJvdW5kZWRcIj48c3Bhbj48aVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmYSBmYS1wbHVzXCI+PC9pPjwvc3Bhbj48L2J1dHRvbj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWZvb3RlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBhcHBBcHBOb0RibENsaWNrIGNsYXNzPVwiYnRuIGJ0bi1zdWNjZXNzXCIgKGNsaWNrKT1cIm9uU3VibWl0KGYsc3VibWl0QnRuKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAjc3VibWl0QnRuPnt7YnRuTmFtZX19PC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cInJlc2V0XCIgY2xhc3M9XCJidG4gYnRuLWRhbmdlclwiIChjbGljayk9XCJyZXNldChmKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImJ0bk5hbWUgPT0gJ0FkZCdcIj5SZXNldDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9mb3JtPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiBjbGFzcz1cIm1vZGFsXCIgaWQ9XCJkZWxldGVtb2RhbFwiIHJvbGU9XCJkaWFsb2dcIiBhcmlhLWxhYmVsbGVkYnk9XCJzbWFsbE1vZGFsSGVhZFwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiXHJcbiAgICAgICAgZGF0YS1iYWNrZHJvcD1cInN0YXRpY1wiIGRhdGEta2V5Ym9hcmQ9XCJmYWxzZVwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1kaWFsb2cgbW9kYWwtc21cIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWNvbnRlbnRcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1oZWFkZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImNsb3NlXCIgZGF0YS1kaXNtaXNzPVwibW9kYWxcIiAoY2xpY2spPVwiY2xvc2VOdWxsKCk7XCIgI2RlbGV0ZWNsc2J0bj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gYXJpYS1oaWRkZW49XCJ0cnVlXCI+JnRpbWVzOzwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzci1vbmx5XCI+Q2xvc2U8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgPGg0IGNsYXNzPVwibW9kYWwtdGl0bGVcIiBpZD1cInNtYWxsTW9kYWxIZWFkXCI+V2FybmluZzwvaDQ+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1ib2R5XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgQXJlIHlvdSBzdXJlIHdhbnQgdG8gZGVsZXRlP1xyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtZm9vdGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLWRlZmF1bHRcIiBkYXRhLWRpc21pc3M9XCJtb2RhbFwiPkNsb3NlPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLWRhbmdlclwiIGRhdGEtZGlzbWlzcz1cIm1vZGFsXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImRlbGV0ZURhdGFMaXN0KCk7XCI+RGVsZXRlPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgICA8ZGl2IGNsYXNzPVwibW9kYWxcIiBpZD1cInBvcGRhdGFtb2RhbFwiIHJvbGU9XCJkaWFsb2dcIiBhcmlhLWxhYmVsbGVkYnk9XCJkZWZNb2RhbEhlYWRcIiBhcmlhLWhpZGRlbj1cInRydWVcIlxyXG4gICAgICAgIGRhdGEtYmFja2Ryb3A9XCJzdGF0aWNcIiBkYXRhLWtleWJvYXJkPVwiZmFsc2VcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtZGlhbG9nXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1jb250ZW50XCI+XHJcbiAgICAgICAgICAgICAgICA8Zm9ybSBjbGFzcz1cImZvcm0taG9yaXpvbnRhbFwiICNmcG9wPVwibmdGb3JtXCIgbmFtZT1cImFwcEZvcm1cIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtaGVhZGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiY2xvc2VcIiBkYXRhLWRpc21pc3M9XCJtb2RhbFwiIChjbGljayk9XCJjbG9zZU51bGwoKTtcIiAjcG9wY2xvc2VidG4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBhcmlhLWhpZGRlbj1cInRydWVcIj4mdGltZXM7PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzci1vbmx5XCI+Q2xvc2U8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8aDQgY2xhc3M9XCJtb2RhbC10aXRsZVwiIGlkPVwiZGVmTW9kYWxIZWFkXCI+e3tidG5OYW1lfX0gUmVjb3JkPC9oND5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtYm9keVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTEyXCIgKm5nRm9yPVwibGV0IGZsIG9mIGZvcm1GaWxkc1BvcHVwIHwgb3JkZXJCeVBpcGU6ICdzcnQnOiAnYXNjJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJmbD8uZm9ybV9maWVsZF90eXAgPT0gJ3QnICYmIGZsPy5pc19oaWRkZW4gPT0gMCAmJiBmbD8uZHRhX3R5cCA9PSdjJyB8fCBmbD8uZHRhX3R5cCA9PSd0J1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJjb2wtbWQtMyBjb250cm9sLWxhYmVsXCI+e3tmbD8uZm9ybV9maWVsZF90aXRsZX19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtZGFuZ2VyXCIgKm5nSWY9XCJmbC5pc19jb21wdWxzb3J5ID09IDFcIj4qPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ncm91cCB3LTEwMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIGNsYXNzPVwiZm9ybS1jb250cm9sXCIgbmFtZT1cInt7Zmw/LmZvcm1fZmllbGR9fVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJmbD8uZGVmYXVsdF92YWx1ZVwiIFsobmdNb2RlbCldPVwiZmwuZGVmYXVsdF92YWx1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICN0ZXh0SW5wdXQ9XCJuZ01vZGVsXCIgKGJsdXIpPVwiY2hrRnVuKGZsLGZsLmRlZmF1bHRfdmFsdWUpO1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsndW5pcUVyck1zZyc6IGZsPy5mb3JtX2ZpZWxkID09IG9uRXJyfVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyZXF1aXJlZF09XCJmbD8uaXNfY29tcHVsc29yeSA9PSAnMSdcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwidGV4dElucHV0LmludmFsaWQgJiYgKHRleHRJbnB1dC5kaXJ0eSB8fCB0ZXh0SW5wdXQudG91Y2hlZClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYWxlcnQgYWxlcnQtZGFuZ2VyIGNhXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cInRleHRJbnB1dC5lcnJvcnMucmVxdWlyZWRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3tmbC5mb3JtX2ZpZWxkX3RpdGxlfX0gaXMgcmVxdWlyZWQuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJmbD8uZm9ybV9maWVsZF90eXAgPT0gJ3QnICYmIGZsPy5pc19oaWRkZW4gPT0gMCAmJiBmbD8uZHRhX3R5cCA9PSduJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJjb2wtbWQtMyBjb250cm9sLWxhYmVsXCI+e3tmbD8uZm9ybV9maWVsZF90aXRsZX19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtZGFuZ2VyXCIgKm5nSWY9XCJmbC5pc19jb21wdWxzb3J5ID09IDFcIj4qPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ncm91cCB3LTEwMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwibnVtYmVyXCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBuYW1lPVwie3tmbD8uZm9ybV9maWVsZH19XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cImZsPy5kZWZhdWx0X3ZhbHVlXCIgWyhuZ01vZGVsKV09XCJmbC5kZWZhdWx0X3ZhbHVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI251bWJlcklucHV0PVwibmdNb2RlbFwiIFtyZXF1aXJlZF09XCJmbD8uaXNfY29tcHVsc29yeT09MVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gbWlubGVuZ3RoPXt7Zmw/LmZvcm1fZmllbGRfbWluX2xlbmd0aH19IG1heGxlbmd0aD17e2ZsPy5mb3JtX2ZpZWxkX21heF9sZW5ndGh9fS8gLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJudW1iZXJJbnB1dC5pbnZhbGlkICYmIChudW1iZXJJbnB1dC5kaXJ0eSB8fCBudW1iZXJJbnB1dC50b3VjaGVkKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJhbGVydCBhbGVydC1kYW5nZXIgY2FcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwibnVtYmVySW5wdXQuZXJyb3JzLnJlcXVpcmVkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7ZmwuZm9ybV9maWVsZF90aXRsZX19IGlzIHJlcXVpcmVkLlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJmbD8uZm9ybV9maWVsZF90eXAgPT0gJ3B3JyAmJiBmbD8uaXNfaGlkZGVuID09IDAgJiYgZmw/LmR0YV90eXAgPT0ncHcnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImNvbC1tZC0zIGNvbnRyb2wtbGFiZWxcIj57e2ZsPy5mb3JtX2ZpZWxkX3RpdGxlfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC1kYW5nZXJcIiAqbmdJZj1cImZsLmlzX2NvbXB1bHNvcnkgPT0gMVwiPio8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtOVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWdyb3VwIHctMTAwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ7e2lucHV0dHlwZX19XCIgY2xhc3M9XCJmb3JtLWNvbnRyb2wgcG9zcmVsXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZT1cInt7Zmw/LmZvcm1fZmllbGR9fVwiIFt2YWx1ZV09XCJmbD8uZGVmYXVsdF92YWx1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiZmwuZGVmYXVsdF92YWx1ZVwiICNwYXNzSW5wdXQ9XCJuZ01vZGVsXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3JlcXVpcmVkXT1cImZsPy5pc19jb21wdWxzb3J5ID09ICcxJ1wiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmYSB7e2V2ZUN9fSBleWVcIiAoY2xpY2spPVwic2hvd0hJZGVQYXNzKCk7XCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwicGFzc0lucHV0LmludmFsaWQgJiYgKHBhc3NJbnB1dC5kaXJ0eSB8fCBwYXNzSW5wdXQudG91Y2hlZClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYWxlcnQgYWxlcnQtZGFuZ2VyIGNhXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cInBhc3NJbnB1dC5lcnJvcnMucmVxdWlyZWRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3tmbC5mb3JtX2ZpZWxkX3RpdGxlfX0gaXMgcmVxdWlyZWQuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXBcIiAqbmdJZj1cImZsPy5mb3JtX2ZpZWxkX3R5cCA9PSAndCcgJiYgZmw/LmR0YV90eXAgPT0nYSdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiY29sLW1kLTMgY29udHJvbC1sYWJlbFwiPnt7Zmw/LmZvcm1fZmllbGRfdGl0bGV9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LWRhbmdlclwiICpuZ0lmPVwiZmwuaXNfY29tcHVsc29yeSA9PSAxXCI+Kjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC05XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtZ3JvdXAgdy0xMDBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtZ3JvdXAgdy0xMDBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRhZy1pbnB1dCBbKG5nTW9kZWwpXT1cImZsLmRlZmF1bHRfdmFsdWVcIiBuYW1lPVwie3tmbD8uZm9ybV9maWVsZH19XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttb2RlbEFzU3RyaW5nc109XCJ0cnVlXCIgW2FsbG93RHVwZXNdPVwidHJ1ZVwiIFtlZGl0YWJsZV09J3RydWUnPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RhZy1pbnB1dD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cFwiICpuZ0lmPVwiZmw/LmZvcm1fZmllbGRfdHlwID09ICd0JyAmJiBmbD8uZHRhX3R5cCA9PSdzYSdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiY29sLW1kLTMgY29udHJvbC1sYWJlbFwiPnt7Zmw/LmZvcm1fZmllbGRfdGl0bGV9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LWRhbmdlclwiICpuZ0lmPVwiZmwuaXNfY29tcHVsc29yeSA9PSAxXCI+Kjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC05XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtZ3JvdXAgdy0xMDBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctc2VsZWN0IFtvcHRpb25zXT1cInNxbEFycmF5W2ZsPy5mb3JtX2ZpZWxkXVwiIHN0eWxlPVwiei1pbmRleDo5O1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiZmwuZGVmYXVsdF92YWx1ZVwiICNzYWZpZWxkPVwibmdNb2RlbFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyZXF1aXJlZF09XCJmbD8uaXNfY29tcHVsc29yeSA9PSAxXCIgbmFtZT1cInt7Zmw/LmZvcm1fZmllbGR9fVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttdWx0aXBsZV09XCJ0cnVlXCIgW2FsbG93Q2xlYXJdPVwidHJ1ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI29wdGlvblRlbXBsYXRlIGxldC1vcHRpb249XCJvcHRpb25cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmYW1mYW1mYW0tZmxhZ3Mge3tvcHRpb24/LnZhbHVlLnRvTG93ZXJDYXNlKCl9fVwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3tvcHRpb24/LmxhYmVsfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLXNlbGVjdD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIDxuZy1zZWxlY3QgW2l0ZW1zXT1cInNxbEFycmF5W2ZsLmZvcm1fZmllbGRdXCIgW2FkZFRhZ109XCJhZGRUYWdcIiBiaW5kVmFsdWU9XCJrXCIgbXVsdGlwbGU9XCJ0cnVlXCIgYmluZExhYmVsPVwidlwiIG5hbWU9XCJ7e2ZsPy5mb3JtX2ZpZWxkfX1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImZsLmRlZmF1bHRfdmFsdWVcIiAjc2FmaWVsZD1cIm5nTW9kZWxcIiBbcmVxdWlyZWRdPVwiZmw/LmlzX2NvbXB1bHNvcnkgPT0gJzEnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L25nLXNlbGVjdD4gLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJzYWZpZWxkLmludmFsaWQgJiYgKHNhZmllbGQuZGlydHkgfHwgc2FmaWVsZC50b3VjaGVkKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJhbGVydCBhbGVydC1kYW5nZXIgY2FcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwic2FmaWVsZC5lcnJvcnMucmVxdWlyZWRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3tmbC5mb3JtX2ZpZWxkX3RpdGxlfX0gaXMgcmVxdWlyZWQuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImZsPy5mb3JtX2ZpZWxkX3R5cCA9PSAndGEnICYmIGZsPy5pc19oaWRkZW4gPT0gMCAmJiBmbD8uZHRhX3R5cCA9PSdjJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJjb2wtbWQtMyBjb250cm9sLWxhYmVsXCI+e3tmbD8uZm9ybV9maWVsZF90aXRsZX19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtZGFuZ2VyXCIgKm5nSWY9XCJmbC5pc19jb21wdWxzb3J5ID09IDFcIj4qPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ncm91cCB3LTEwMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZXh0YXJlYSBjbGFzcz1cImZvcm0tY29udHJvbFwiIHJvd3M9XCIzXCIgbmFtZT1cInt7Zmw/LmZvcm1fZmllbGR9fVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJmbD8uZGVmYXVsdF92YWx1ZVwiIFsobmdNb2RlbCldPVwiZmwuZGVmYXVsdF92YWx1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICN0ZXh0QXJlYT1cIm5nTW9kZWxcIiAoYmx1cik9XCJjaGtGdW4oZmwsZmwuZGVmYXVsdF92YWx1ZSk7XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieyd1bmlxRXJyTXNnJzogZmw/LmZvcm1fZmllbGQgPT0gb25FcnJ9XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3JlcXVpcmVkXT1cImZsPy5pc19jb21wdWxzb3J5ID09ICcxJ1wiPjwvdGV4dGFyZWE+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJ0ZXh0QXJlYS5pbnZhbGlkICYmICh0ZXh0QXJlYS5kaXJ0eSB8fCB0ZXh0QXJlYS50b3VjaGVkKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJhbGVydCBhbGVydC1kYW5nZXIgY2FcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwidGV4dEFyZWEuZXJyb3JzLnJlcXVpcmVkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7ZmwuZm9ybV9maWVsZF90aXRsZX19IGlzIHJlcXVpcmVkLlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJmbD8uZm9ybV9maWVsZF90eXAgPT0gJ2hkJyB8fCBmbD8uZm9ybV9maWVsZF90eXAgPT0gJ2RmJyB8fCBmbD8uZm9ybV9maWVsZF90eXAgPT0gJ2ZrJyAmJiBmbD8uaXNfaGlkZGVuID09IDBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7J210MCc6IGZsPy5mb3JtX2ZpZWxkX3R5cCA9PSAnaGQnfVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJjb2wtbWQtMyBjb250cm9sLWxhYmVsXCI+PC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC05XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtZ3JvdXAgdy0xMDBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImhpZGRlblwiIGNsYXNzPVwiZm9ybS1jb250cm9sXCIgbmFtZT1cInt7Zmw/LmZvcm1fZmllbGR9fVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJmbD8uZGVmYXVsdF92YWx1ZVwiIFsobmdNb2RlbCldPVwiZmwuZGVmYXVsdF92YWx1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICNoZGY9XCJuZ01vZGVsXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cFwiICpuZ0lmPVwiZmw/LmZvcm1fZmllbGRfdHlwID09ICdzcScgJiYgZmw/LmlzX2hpZGRlbiA9PSAwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImNvbC1tZC0zIGNvbnRyb2wtbGFiZWxcIj48L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ncm91cCB3LTEwMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiaGlkZGVuXCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBuYW1lPVwie3tmbD8uZm9ybV9maWVsZH19XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cImZsPy5kZWZhdWx0X3ZhbHVlXCIgWyhuZ01vZGVsKV09XCJmbC5kZWZhdWx0X3ZhbHVlXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cFwiICpuZ0lmPVwiZmw/LmZvcm1fZmllbGRfdHlwID09ICd0YicgJiYgZmw/LmlzX2hpZGRlbiA9PSAwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImNvbC1tZC0zIGNvbnRyb2wtbGFiZWxcIj57e2ZsPy5mb3JtX2ZpZWxkX3RpdGxlfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC1kYW5nZXJcIiAqbmdJZj1cImZsLmlzX2NvbXB1bHNvcnkgPT0gMVwiPio8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtOVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWdyb3VwIHctMTAwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNlbGVjdCBjbGFzcz1cImZvcm0tY29udHJvbCBzZWxlY3RcIiBuYW1lPVwie3tmbD8uZm9ybV9maWVsZH19XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cImZsPy5kZWZhdWx0X3ZhbHVlXCIgWyhuZ01vZGVsKV09XCJmbC5kZWZhdWx0X3ZhbHVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI3RkZj1cIm5nTW9kZWxcIiBbcmVxdWlyZWRdPVwiZmw/LmlzX2NvbXB1bHNvcnkgPT0gJzEnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gKm5nRm9yPVwibGV0IGR5bmFtaWMgb2Ygc3FsQXJyYXlbZmwuZm9ybV9maWVsZF1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU9XCJ7e2R5bmFtaWMudmFsdWV9fVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3tkeW5hbWljLmxhYmVsfX08L29wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NlbGVjdD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cInRkZi5pbnZhbGlkICYmICh0ZGYuZGlydHkgfHwgdGRmLnRvdWNoZWQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImFsZXJ0IGFsZXJ0LWRhbmdlciBjYVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJ0ZGYuZXJyb3JzLnJlcXVpcmVkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7ZmwuZm9ybV9maWVsZF90aXRsZX19IGlzIHJlcXVpcmVkLlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwXCIgKm5nSWY9XCJmbD8uZm9ybV9maWVsZF90eXAgPT0gJ2wnICYmIGZsPy5pc19oaWRkZW4gPT0gMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJjb2wtbWQtMyBjb250cm9sLWxhYmVsXCI+e3tmbD8uZm9ybV9maWVsZF90aXRsZX19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtZGFuZ2VyXCIgKm5nSWY9XCJmbC5pc19jb21wdWxzb3J5ID09IDFcIj4qPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ncm91cCB3LTEwMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzZWxlY3QgY2xhc3M9XCJmb3JtLWNvbnRyb2wgc2VsZWN0XCIgbmFtZT1cInt7Zmw/LmZvcm1fZmllbGR9fVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJmbD8uZGVmYXVsdF92YWx1ZVwiIFsobmdNb2RlbCldPVwiZmwuZGVmYXVsdF92YWx1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICNsSW5wdXQ9XCJuZ01vZGVsXCIgW3JlcXVpcmVkXT1cImZsPy5pc19jb21wdWxzb3J5ID09ICcxJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uICpuZ0Zvcj1cImxldCBsb3Ygb2YgZmwua3ZcIiB2YWx1ZT1cInt7bG92Lmt9fVwiPnt7bG92LnZ9fTwvb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc2VsZWN0PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwibElucHV0LmludmFsaWQgJiYgKGxJbnB1dC5kaXJ0eSB8fCBsSW5wdXQudG91Y2hlZClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYWxlcnQgYWxlcnQtZGFuZ2VyIGNhXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImxJbnB1dC5lcnJvcnMucmVxdWlyZWRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3tmbC5mb3JtX2ZpZWxkX3RpdGxlfX0gaXMgcmVxdWlyZWQuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXBcIiAqbmdJZj1cImZsPy5mb3JtX2ZpZWxkX3R5cCA9PSAnbGQnICAmJiBmbD8uaXNfaGlkZGVuID09IDBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiY29sLW1kLTMgY29udHJvbC1sYWJlbFwiPnt7Zmw/LmZvcm1fZmllbGRfdGl0bGV9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LWRhbmdlclwiICpuZ0lmPVwiZmwuaXNfY29tcHVsc29yeSA9PSAxXCI+Kjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC05XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtZ3JvdXAgdy0xMDBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c2VsZWN0IGNsYXNzPVwiZm9ybS1jb250cm9sIHNlbGVjdFwiIG5hbWU9XCJ7e2ZsPy5mb3JtX2ZpZWxkfX1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPVwiZmw/LmRlZmF1bHRfdmFsdWVcIiBbKG5nTW9kZWwpXT1cImZsLmRlZmF1bHRfdmFsdWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjbGRJbnB1dD1cIm5nTW9kZWxcIiBbcmVxdWlyZWRdPVwiZmw/LmlzX2NvbXB1bHNvcnkgPT0gJzEnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gKm5nRm9yPVwibGV0IGR5bmFtaWMgb2Ygc3FsQXJyYXlbZmwuZm9ybV9maWVsZF1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU9XCJ7e2R5bmFtaWMua319XCI+e3tkeW5hbWljLnZ9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L29wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NlbGVjdD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImxkSW5wdXQuaW52YWxpZCAmJiAobGRJbnB1dC5kaXJ0eSB8fCBsZElucHV0LnRvdWNoZWQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImFsZXJ0IGFsZXJ0LWRhbmdlciBjYVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJsZElucHV0LmVycm9ycy5yZXF1aXJlZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e2ZsLmZvcm1fZmllbGRfdGl0bGV9fSBpcyByZXF1aXJlZC5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cFwiICpuZ0lmPVwiZmw/LmZvcm1fZmllbGRfdHlwID09ICdzJyAmJiBmbD8uaXNfaGlkZGVuID09IDBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiY29sLW1kLTMgY29udHJvbC1sYWJlbFwiPnt7Zmw/LmZvcm1fZmllbGRfdGl0bGV9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LWRhbmdlclwiICpuZ0lmPVwiZmwuaXNfY29tcHVsc29yeSA9PSAxXCI+Kjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC05XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtZ3JvdXAgdy0xMDBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c2VsZWN0IGNsYXNzPVwiZm9ybS1jb250cm9sIHNlbGVjdFwiIG5hbWU9XCJ7e2ZsPy5mb3JtX2ZpZWxkfX1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPVwiZmw/LmRlZmF1bHRfdmFsdWVcIiBbKG5nTW9kZWwpXT1cImZsLmRlZmF1bHRfdmFsdWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hhbmdlKT1cImNoa0Z1bihmbCxmbC5kZWZhdWx0X3ZhbHVlKVwiIGlkPVwie3tmbC5jb2x1bW5fa2V5fX1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjc2ZpPVwibmdNb2RlbFwiIFtyZXF1aXJlZF09XCJmbD8uaXNfY29tcHVsc29yeSA9PSAnMSdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiAqbmdGb3I9XCJsZXQgZHluYW1pYyBvZiBzcWxBcnJheVtmbC5mb3JtX2ZpZWxkXVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT1cInt7ZHluYW1pYy52YWx1ZX19XCI+e3tkeW5hbWljLmxhYmVsfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zZWxlY3Q+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJzZmkuaW52YWxpZCAmJiAoc2ZpLmRpcnR5IHx8IHNmaS50b3VjaGVkKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJhbGVydCBhbGVydC1kYW5nZXIgY2FcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwic2ZpLmVycm9ycy5yZXF1aXJlZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e2ZsLmZvcm1fZmllbGRfdGl0bGV9fSBpcyByZXF1aXJlZC5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtZm9vdGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGFwcEFwcE5vRGJsQ2xpY2sgY2xhc3M9XCJidG4gYnRuLXN1Y2Nlc3NcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uUG9wdXBTdWJtaXQoZnBvcCxwb3BzdWJtaXRCdG4pXCIgI3BvcHN1Ym1pdEJ0bj5BZGQ8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwicmVzZXRcIiBjbGFzcz1cImJ0biBidG4tZGFuZ2VyXCIgKGNsaWNrKT1cInJlc2V0KGYpXCI+UmVzZXQ8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZm9ybT5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgICA8ZGl2IGNsYXNzPVwibW9kYWxcIiBpZD1cInBvcFJlc21vZGFsXCIgcm9sZT1cImRpYWxvZ1wiIGFyaWEtbGFiZWxsZWRieT1cImRlZk1vZGFsSGVhZFwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiXHJcbiAgICAgICAgZGF0YS1iYWNrZHJvcD1cInN0YXRpY1wiIGRhdGEta2V5Ym9hcmQ9XCJmYWxzZVwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1kaWFsb2dcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWNvbnRlbnRcIj5cclxuICAgICAgICAgICAgICAgIDxmb3JtIGNsYXNzPVwiZm9ybS1ob3Jpem9udGFsXCIgbmFtZT1cImFwcEZvcm1yZXNcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtaGVhZGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiY2xvc2VcIiBkYXRhLWRpc21pc3M9XCJtb2RhbFwiIChjbGljayk9XCJjbG9zZU51bGwoKTtcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPiZ0aW1lczs8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInNyLW9ubHlcIj5DbG9zZTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxoNCBjbGFzcz1cIm1vZGFsLXRpdGxlXCIgaWQ9XCJwb3BNb2RhbEhlYWRcIj4gUmVjb3JkPC9oND5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtYm9keVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cCAqbmdGb3I9XCJsZXQgcmVzIG9mIFN5c3Jlc3VsdFwiPnt7cmVzfX08L3A+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1mb290ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLWRlZmF1bHRcIiBkYXRhLWRpc21pc3M9XCJtb2RhbFwiPkNsb3NlPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Zvcm0+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcblxyXG5cclxuXHJcbiAgICA8ZGl2IGNsYXNzPVwibW9kYWxcIiBpZD1cInByb2R1Y3RNYXBNYXNNRFwiIHJvbGU9XCJkaWFsb2dcIiBhcmlhLWxhYmVsbGVkYnk9XCJzbWFsbE1vZGFsSGVhZFwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiXHJcbiAgICAgICAgZGF0YS1iYWNrZHJvcD1cInN0YXRpY1wiIGRhdGEta2V5Ym9hcmQ9XCJmYWxzZVwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1kaWFsb2cgbW9kYWwtc20gbXdpZHRoXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1jb250ZW50XCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtaGVhZGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJjbG9zZVwiIGRhdGEtZGlzbWlzcz1cIm1vZGFsXCIgKGNsaWNrKT1cImNsb3NlTnVsbCgpO1wiICNwcm9kdWN0TWFwY2xzYnRuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBhcmlhLWhpZGRlbj1cInRydWVcIj4mdGltZXM7PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInNyLW9ubHlcIj5DbG9zZTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICA8aDQgY2xhc3M9XCJtb2RhbC10aXRsZVwiIGlkPVwic21hbGxNb2RhbEhlYWRcIj5Qcm9kdWN0IE1hcHBpbmcgb2YmbmJzcDt7e2F0dE1hcE1vZGVsVGl0bGV9fTwvaDQ+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1ib2R5XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRhYmxlLXJlc3BvbnNpdmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHRhYmxlIGNsYXNzPVwidGFibGUgdGFibGUtYm9yZGVyZWQgdGFibGUtaG92ZXIgdGFibGUtaG92ZXItY2VsbHNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aGVhZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5hbWVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90aD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmFsdWVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90aD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90aGVhZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBrZXkgb2YgYXR0ckR0bD8ucHJwTGlzdFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3trZXkucHJpbnR9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBjbGFzcz1cImZvcm0tY29udHJvbFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiYXR0ck1hcHBpbmdEdGxba2V5Py52YWxdXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3Rib2R5PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3RhYmxlPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1mb290ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLWRlZmF1bHRcIiBkYXRhLWRpc21pc3M9XCJtb2RhbFwiPkNsb3NlPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1zdWNjZXNzXCIgZGF0YS1kaXNtaXNzPVwibW9kYWxcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInNhdmVQcm9kdWN0TWFzdGVyTWFwcGluZygpO1wiICNwcm9kdWN0TWFwY2xzYnRuPlNhdmU8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gICAgXHJcblxyXG5cclxuICAgIFxyXG5cclxuXHJcbiAgICA8YnV0dG9uIGlkPVwiZGVsZXRlYnRuXCIgW2hpZGRlbl09XCJ0cnVlXCIgZGF0YS10b2dnbGU9XCJtb2RhbFwiIGRhdGEtdGFyZ2V0PVwiI2RlbGV0ZW1vZGFsXCI+PC9idXR0b24+XHJcbiAgICA8YnV0dG9uIGlkPVwiZGF0YW1kYnRuXCIgW2hpZGRlbl09XCJ0cnVlXCIgZGF0YS10b2dnbGU9XCJtb2RhbFwiIGRhdGEtdGFyZ2V0PVwiI2RhdGFtb2RhbFwiPjwvYnV0dG9uPlxyXG4gICAgPGJ1dHRvbiBpZD1cImNsc01kXCIgW2hpZGRlbl09XCJ0cnVlXCIgZGF0YS1kaXNtaXNzPVwibW9kYWxcIiBkYXRhLXRhcmdldD1cIiNkYXRhbW9kYWxcIj48L2J1dHRvbj5cclxuICAgIDxidXR0b24gaWQ9XCJwb3BkYXRhbWRidG5cIiBbaGlkZGVuXT1cInRydWVcIiBkYXRhLXRvZ2dsZT1cIm1vZGFsXCIgZGF0YS10YXJnZXQ9XCIjcG9wZGF0YW1vZGFsXCI+PC9idXR0b24+XHJcbiAgICA8YnV0dG9uIGlkPVwicG9wUmVzbW9kYWxidG5cIiBbaGlkZGVuXT1cInRydWVcIiBkYXRhLXRvZ2dsZT1cIm1vZGFsXCIgZGF0YS10YXJnZXQ9XCIjcG9wUmVzbW9kYWxcIj48L2J1dHRvbj5cclxuICAgIDxidXR0b24gaWQ9XCJwcm9kdWN0TWFwTWFzTURidG5cIiBbaGlkZGVuXT1cInRydWVcIiBkYXRhLXRvZ2dsZT1cIm1vZGFsXCIgZGF0YS10YXJnZXQ9XCIjcHJvZHVjdE1hcE1hc01EXCI+PC9idXR0b24+Il19