raise-common-lib 0.0.235-beta → 0.0.236-beta
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.
- package/README.md +57 -57
- package/bundles/raise-common-lib.umd.js +62 -30
- package/bundles/raise-common-lib.umd.js.map +1 -1
- package/bundles/raise-common-lib.umd.min.js +1 -1
- package/bundles/raise-common-lib.umd.min.js.map +1 -1
- package/esm2015/lib/commentary/index.component.js +3 -2
- package/esm2015/lib/common-grid/grid-action/grid-action.component.js +3 -2
- package/esm2015/lib/common-grid/index.component.js +3 -2
- package/esm2015/lib/dashboard/dashboard-properties/data-mart-new/data-mart-new.component.js +4 -3
- package/esm2015/lib/dashboard/dashboardPorlets.service.js +4 -3
- package/esm2015/lib/dashboard/dialog-group/download/index.component.js +3 -2
- package/esm2015/lib/dashboard/gadget-group/gadget-pivot/gadget-pivot.component.js +3 -2
- package/esm2015/lib/dashboard/gadget-group/gadget-pivot-chart/gadget-pivot.component.js +3 -2
- package/esm2015/lib/dashboard/gadget-group/gadget-table/gadget-table.component.js +3 -2
- package/esm2015/lib/dashboard/gadget-group/gadget-transpose/gadget-transpose.component.js +3 -2
- package/esm2015/lib/dashboard/pane-group-new.component.js +4 -3
- package/esm2015/lib/dashboard/sidebar-iconlist/field-filter/field-filter.component.js +3 -2
- package/esm2015/lib/dashboard/sidebar-iconlist/field-format/field-format.component.js +3 -2
- package/esm2015/lib/dashboard/sidebar-iconlist/portlet-type-new/portlet-type-new.component.js +3 -2
- package/esm2015/lib/dashboard/sidebar-iconlist/sidebar-iconlist-new.component.js +4 -3
- package/esm2015/lib/dialog/common-delete-dialog/index.component.js +3 -2
- package/esm2015/lib/dialog/common-dialog/index.component.js +3 -2
- package/esm2015/lib/form/checkbox-group/index.component.js +3 -2
- package/esm2015/lib/form/confirm-select/index.component.js +3 -2
- package/esm2015/lib/form/search-input/index.component.js +3 -2
- package/esm2015/lib/layout/grid-box/index.component.js +3 -2
- package/esm2015/lib/layout/multi-tab/index.component.js +3 -2
- package/esm2015/lib/layout/page-list/index.component.js +3 -2
- package/esm2015/lib/layout/rs-header/index.component.js +5 -4
- package/esm2015/lib/service/dialog.service.js +3 -2
- package/esm2015/lib/utils/utils.js +32 -0
- package/esm5/lib/commentary/index.component.js +3 -2
- package/esm5/lib/common-grid/grid-action/grid-action.component.js +3 -2
- package/esm5/lib/common-grid/index.component.js +3 -2
- package/esm5/lib/dashboard/dashboard-properties/data-mart-new/data-mart-new.component.js +4 -3
- package/esm5/lib/dashboard/dashboardPorlets.service.js +4 -3
- package/esm5/lib/dashboard/dialog-group/download/index.component.js +3 -2
- package/esm5/lib/dashboard/gadget-group/gadget-pivot/gadget-pivot.component.js +3 -2
- package/esm5/lib/dashboard/gadget-group/gadget-pivot-chart/gadget-pivot.component.js +3 -2
- package/esm5/lib/dashboard/gadget-group/gadget-table/gadget-table.component.js +3 -2
- package/esm5/lib/dashboard/gadget-group/gadget-transpose/gadget-transpose.component.js +3 -2
- package/esm5/lib/dashboard/pane-group-new.component.js +4 -3
- package/esm5/lib/dashboard/sidebar-iconlist/field-filter/field-filter.component.js +3 -2
- package/esm5/lib/dashboard/sidebar-iconlist/field-format/field-format.component.js +3 -2
- package/esm5/lib/dashboard/sidebar-iconlist/portlet-type-new/portlet-type-new.component.js +3 -2
- package/esm5/lib/dashboard/sidebar-iconlist/sidebar-iconlist-new.component.js +4 -3
- package/esm5/lib/dialog/common-delete-dialog/index.component.js +3 -2
- package/esm5/lib/dialog/common-dialog/index.component.js +3 -2
- package/esm5/lib/form/checkbox-group/index.component.js +3 -2
- package/esm5/lib/form/confirm-select/index.component.js +3 -2
- package/esm5/lib/form/search-input/index.component.js +3 -2
- package/esm5/lib/layout/grid-box/index.component.js +3 -2
- package/esm5/lib/layout/multi-tab/index.component.js +3 -2
- package/esm5/lib/layout/page-list/index.component.js +3 -2
- package/esm5/lib/layout/rs-header/index.component.js +5 -4
- package/esm5/lib/service/dialog.service.js +3 -2
- package/esm5/lib/utils/utils.js +32 -0
- package/fesm2015/raise-common-lib.js +62 -30
- package/fesm2015/raise-common-lib.js.map +1 -1
- package/fesm5/raise-common-lib.js +62 -30
- package/fesm5/raise-common-lib.js.map +1 -1
- package/lib/utils/utils.d.ts +1 -0
- package/package.json +1 -1
- package/raise-common-lib.metadata.json +1 -1
- package/src/assets/img/arrow_right.svg +4 -4
- package/src/assets/img/calendar-disabled.svg +6 -6
- package/src/assets/img/calendar.svg +6 -6
- package/src/assets/img/calendar_arrow_left.svg +3 -3
- package/src/assets/img/calendar_arrow_right.svg +3 -3
- package/src/assets/img/checked-vector.svg +3 -3
- package/src/assets/img/dialog-close.svg +4 -4
- package/src/assets/img/dialog-grow.svg +6 -6
- package/src/assets/img/dialog-shrink.svg +6 -6
- package/src/assets/img/plus.svg +4 -4
- package/src/assets/img/search.svg +4 -4
- package/src/assets/img/shrink-icon.svg +6 -6
- package/src/assets/img/time-disabled.svg +4 -4
- package/src/assets/img/time.svg +4 -4
- package/src/assets/img/toolbar-action-addFolder.svg +17 -17
- package/src/assets/img/toolbar-action-calculator.svg +11 -11
- package/src/assets/img/toolbar-action-collapse.svg +7 -7
- package/src/assets/img/toolbar-action-combine.svg +4 -4
- package/src/assets/img/toolbar-action-edit.svg +4 -4
- package/src/assets/img/toolbar-action-expand.svg +7 -7
- package/src/assets/img/toolbar-action-folderMove.svg +8 -8
- package/src/assets/img/toolbar-action-lock.svg +6 -6
- package/src/assets/img/toolbar-action-preview.svg +7 -7
- package/src/assets/img/toolbar-action-publish.svg +5 -5
- package/src/assets/img/toolbar-action-reminders.svg +10 -10
- package/src/assets/img/toolbar-action-rename.svg +7 -7
- package/src/assets/img/toolbar-action-saveSequence.svg +5 -5
- package/src/assets/img/toolbar-action-send-file.svg +5 -5
- package/src/assets/img/toolbar-action-settle.svg +7 -7
- package/src/assets/img/toolbar-action-share.svg +5 -5
- package/src/assets/img/toolbar-action-submitForApproval.svg +4 -4
- package/src/assets/img/toolbar-action-sync.svg +4 -4
- package/src/assets/img/toolbar-action-template.svg +6 -6
- package/src/assets/img/toolbar-action-workflow.svg +9 -9
|
@@ -16,6 +16,7 @@ import { MAT_DATE_FORMATS } from "@angular/material/core";
|
|
|
16
16
|
import { cloneDeep, find } from "lodash";
|
|
17
17
|
import { DashboardLayoutComponent } from "@syncfusion/ej2-angular-layouts";
|
|
18
18
|
import { FieldFormatComponent } from "./sidebar-iconlist/field-format/field-format.component";
|
|
19
|
+
import { getTranslation } from "../utils/utils";
|
|
19
20
|
import { HttpClient } from "@angular/common/http";
|
|
20
21
|
import { DataMartNewComponent } from "./dashboard-properties/data-mart-new/data-mart-new.component";
|
|
21
22
|
import { debounce } from "./bar-charts/utils";
|
|
@@ -72,7 +73,7 @@ var PaneGroupNewComponent = /** @class */ (function () {
|
|
|
72
73
|
this.hasInit = true;
|
|
73
74
|
this.hasChangeDataTable = false;
|
|
74
75
|
this.activeTabLabel = "";
|
|
75
|
-
this.translation =
|
|
76
|
+
this.translation = getTranslation();
|
|
76
77
|
this.push_btn = false;
|
|
77
78
|
this.draggableHandle = ".gadget-title";
|
|
78
79
|
this.subscriptions = [];
|
|
@@ -1230,7 +1231,7 @@ var PaneGroupNewComponent = /** @class */ (function () {
|
|
|
1230
1231
|
* @return {?}
|
|
1231
1232
|
*/
|
|
1232
1233
|
function () {
|
|
1233
|
-
this.translation =
|
|
1234
|
+
this.translation = getTranslation();
|
|
1234
1235
|
this.lang = this.pbf.getLanguageParams();
|
|
1235
1236
|
this.datePipeFormat = localStorage.getItem("datePipe");
|
|
1236
1237
|
};
|
|
@@ -3304,4 +3305,4 @@ if (false) {
|
|
|
3304
3305
|
PaneGroupNewComponent.prototype.rs;
|
|
3305
3306
|
}
|
|
3306
3307
|
export { ɵ0 };
|
|
3307
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFuZS1ncm91cC1uZXcuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vcmFpc2UtY29tbW9uLWxpYi8iLCJzb3VyY2VzIjpbImxpYi9kYXNoYm9hcmQvcGFuZS1ncm91cC1uZXcuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLE9BQU8sRUFDTCxTQUFTLEVBRVQsU0FBUyxFQUNULGlCQUFpQixFQUNqQixNQUFNLEVBQ04sWUFBWSxFQUNaLFVBQVUsRUFDVixZQUFZLEVBQ1osU0FBUyxFQUNULFlBQVksRUFDWixLQUFLLEVBQ0wsUUFBUSxFQUNSLE1BQU0sR0FDUCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFFckQsT0FBTyxFQUFFLGNBQWMsRUFBRSxhQUFhLEVBQUUsTUFBTSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDeEUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDdkQsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE9BQU8sQ0FBQztBQUNoQyxPQUFPLEVBQ0wsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxrQkFBa0IsR0FDbkIsTUFBTSwyQkFBMkIsQ0FBQztBQUNuQyxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUVyRSxPQUFPLFlBQVksTUFBTSxlQUFlLENBQUM7QUFFekMsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDMUQsT0FBTyxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsTUFBTSxRQUFRLENBQUM7QUFDekMsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDM0UsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sd0RBQXdELENBQUM7QUFXOUYsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ2xELE9B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MkNBQVc7O0lBQ1gsMkNBQW1COztJQUNuQiw4Q0FBNkU7O0lBQzdFLHNDQUM4Qzs7SUFDOUMsc0NBQzBFOztJQUMxRSwwQ0FDc0Q7O0lBQ3RELHVEQXFCRTs7SUFDRix5REFxQkU7O0lBQ0Ysb0RBU0U7O0lBRUYsMENBdU9FOztJQUNGLDBDQUFrQjs7SUFDbEIsa0RBQTBDOztJQUMxQyxvREFBNEM7O0lBQzVDLHlEQUFpRDs7SUFDakQsa0RBQXlCOztJQUN6Qiw2Q0FBOEI7O0lBQzlCLHlDQUFxQjs7SUFDckIsbURBQTJCOztJQUMzQiwyQ0FBbUI7O0lBQ25CLHNDQUFNOztJQUNOLHdDQUFROztJQUNSLDBDQUFjOztJQUNkLHVDQUFjOztJQUNkLGtEQUEwQjs7SUFDMUIsd0RBQTZCOztJQUM3Qix5Q0FBYzs7SUFDZCwwQ0FBa0I7O0lBRWxCLDBDQUFnRTs7SUF3c0JoRSxrQ0FBRTs7SUFDRixrQ0FBRTs7SUF2c0JBLHVDQUF3Qjs7Ozs7SUFDeEIsOENBQW9DOztJQUNwQyxpREFBeUM7Ozs7O0lBQ3pDLG9DQUFvQjs7Ozs7SUFDcEIsK0NBQXNDOztJQUN0Qyx3REFBdUQ7Ozs7O0lBQ3ZELG9DQUE4Qjs7Ozs7SUFDOUIsdUNBQXNCOzs7OztJQUN0QiwyQ0FBOEI7Ozs7O0lBQzlCLHlDQUEwQjs7Ozs7SUFDMUIsb0NBQStDOzs7OztJQUMvQyxxQ0FBd0Q7O0lBQ3hELG1DQUFzRCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgQ29tcG9uZW50LFxyXG4gIE9uSW5pdCxcclxuICBWaWV3Q2hpbGQsXHJcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgT3V0cHV0LFxyXG4gIEV2ZW50RW1pdHRlcixcclxuICBFbGVtZW50UmVmLFxyXG4gIFZpZXdDaGlsZHJlbixcclxuICBRdWVyeUxpc3QsXHJcbiAgSG9zdExpc3RlbmVyLFxyXG4gIElucHV0LFxyXG4gIE9wdGlvbmFsLFxyXG4gIEluamVjdCxcclxufSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5pbXBvcnQgeyBNYXREaWFsb2cgfSBmcm9tIFwiQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nXCI7XHJcbmltcG9ydCB7IE1hdERhdGVwaWNrZXJJbnB1dEV2ZW50IH0gZnJvbSBcIkBhbmd1bGFyL21hdGVyaWFsL2RhdGVwaWNrZXJcIjtcclxuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUsIE5hdmlnYXRpb25FbmQsIFJvdXRlciB9IGZyb20gXCJAYW5ndWxhci9yb3V0ZXJcIjtcclxuaW1wb3J0IHsgRGFzaGJvYXJkU2VydmljZSB9IGZyb20gXCIuL2Rhc2hib2FyZC5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7IEFwaUxpc3QgfSBmcm9tIFwiLi9hcGlcIjtcclxuaW1wb3J0IHtcclxuICBBUElfU0VSVklDRV9UT0tFTixcclxuICBQQkZfVE9LRU4sXHJcbiAgUk9MRV9TRVJWSUNFX1RPS0VOLFxyXG59IGZyb20gXCIuLi9zZXJ2aWNlL0luamVjdGlvblRva2VuXCI7XHJcbmltcG9ydCB7IERhc2hib2FyZFBvcmxldHNTZXJ2aWNlIH0gZnJvbSBcIi4vZGFzaGJvYXJkUG9ybGV0cy5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gXCJyeGpzXCI7XHJcbmltcG9ydCBDaXJjdWxhckpTT04gZnJvbSBcImNpcmN1bGFyLWpzb25cIjtcclxuXHJcbmltcG9ydCB7IE1BVF9EQVRFX0ZPUk1BVFMgfSBmcm9tIFwiQGFuZ3VsYXIvbWF0ZXJpYWwvY29yZVwiO1xyXG5pbXBvcnQgeyBjbG9uZURlZXAsIGZpbmQgfSBmcm9tIFwibG9kYXNoXCI7XHJcbmltcG9ydCB7IERhc2hib2FyZExheW91dENvbXBvbmVudCB9IGZyb20gXCJAc3luY2Z1c2lvbi9lajItYW5ndWxhci1sYXlvdXRzXCI7XHJcbmltcG9ydCB7IEZpZWxkRm9ybWF0Q29tcG9uZW50IH0gZnJvbSBcIi4vc2lkZWJhci1pY29ubGlzdC9maWVsZC1mb3JtYXQvZmllbGQtZm9ybWF0LmNvbXBvbmVudFwiO1xyXG5pbXBvcnQgeyBHYWRnZXRUYWJsZUNvbXBvbmVudCB9IGZyb20gXCIuL2dhZGdldC1ncm91cC9nYWRnZXQtdGFibGUvZ2FkZ2V0LXRhYmxlLmNvbXBvbmVudFwiO1xyXG5pbXBvcnQgeyBHYWRnZXRQaXZvdENvbXBvbmVudCB9IGZyb20gXCIuL2dhZGdldC1ncm91cC9nYWRnZXQtcGl2b3QvZ2FkZ2V0LXBpdm90LmNvbXBvbmVudFwiO1xyXG5pbXBvcnQgeyBHYWRnZXRQaXZvdENoYXJ0Q29tcG9uZW50IH0gZnJvbSBcIi4vZ2FkZ2V0LWdyb3VwL2dhZGdldC1waXZvdC1jaGFydC9nYWRnZXQtcGl2b3QuY29tcG9uZW50XCI7XHJcbmltcG9ydCB7IEdhZGdldFRyYW5zcG9zZUNvbXBvbmVudCB9IGZyb20gXCIuL2dhZGdldC1ncm91cC9nYWRnZXQtdHJhbnNwb3NlL2dhZGdldC10cmFuc3Bvc2UuY29tcG9uZW50XCI7XHJcbmltcG9ydCB7XHJcbiAgLy8gUGRmRXhwb3J0UHJvcGVydGllcyxcclxuICBFeGNlbEV4cG9ydFByb3BlcnRpZXMsXHJcbiAgQ29sdW1uTW9kZWwsXHJcbn0gZnJvbSBcIkBzeW5jZnVzaW9uL2VqMi1hbmd1bGFyLWdyaWRzXCI7XHJcbmltcG9ydCB7IElBeGlzU2V0IH0gZnJvbSBcIkBzeW5jZnVzaW9uL2VqMi1hbmd1bGFyLXBpdm90dmlld1wiO1xyXG5pbXBvcnQgeyBIdHRwQ2xpZW50IH0gZnJvbSBcIkBhbmd1bGFyL2NvbW1vbi9odHRwXCI7XHJcbmltcG9ydCB7IERhdGFNYXJ0TmV3Q29tcG9uZW50IH0gZnJvbSBcIi4vZGFzaGJvYXJkLXByb3BlcnRpZXMvZGF0YS1tYXJ0LW5ldy9kYXRhLW1hcnQtbmV3LmNvbXBvbmVudFwiO1xyXG5pbXBvcnQgeyBCYXJDaGFydHNDb21wb25lbnQgfSBmcm9tIFwiLi9iYXItY2hhcnRzL2Jhci1jaGFydHMuY29tcG9uZW50XCI7XHJcbmltcG9ydCB7IGRlYm91bmNlIH0gZnJvbSBcIi4vYmFyLWNoYXJ0cy91dGlsc1wiO1xyXG5pbXBvcnQgeyBEYXRlUGlwZSB9IGZyb20gXCJAYW5ndWxhci9jb21tb25cIjtcclxuaW1wb3J0IHsgUGFuZURvd25sb2FkQ29tcG9uZW50IH0gZnJvbSBcIi4vZGlhbG9nLWdyb3VwL2Rvd25sb2FkL2luZGV4LmNvbXBvbmVudFwiO1xyXG5pbXBvcnQgeyBmaWx0ZXIgfSBmcm9tIFwicnhqcy9vcGVyYXRvcnNcIjtcclxuaW1wb3J0IHsgRGlhbG9nU2VydmljZSB9IGZyb20gXCIuLi9zZXJ2aWNlL2RpYWxvZy5zZXJ2aWNlXCI7XHJcblxyXG5sZXQgZGF0ZUZvcm1hdCA9IFwiREQtTU0tWVlZWVwiO1xyXG5pZiAobG9jYWxTdG9yYWdlW1wic2V0dGluZ1wiXSkge1xyXG4gIGNvbnN0IGRhdGVBcnJheSA9IGZpbmQoXHJcbiAgICBKU09OLnBhcnNlKGxvY2FsU3RvcmFnZS5nZXRJdGVtKFwic2V0dGluZ1wiKSB8fCBcInt9XCIpLFxyXG4gICAgKGl0ZW0pID0+IGl0ZW0gJiYgaXRlbVtcInBhcmFtZXRlclwiXSA9PT0gXCJEQVRFX0ZPUk1BVFwiXHJcbiAgKTtcclxuICBpZiAoZGF0ZUFycmF5KSB7XHJcbiAgICBkYXRlRm9ybWF0ID0gZGF0ZUFycmF5LnZhbHVlO1xyXG4gIH1cclxufVxyXG5cclxuY29uc3QgTVlfRk9STUFUUyA9IHtcclxuICBwYXJzZToge1xyXG4gICAgZGF0ZUlucHV0OiBcIkRELU1NLVlZWVlcIixcclxuICB9LFxyXG4gIGRpc3BsYXk6IHtcclxuICAgIGRhdGVJbnB1dDogZGF0ZUZvcm1hdCxcclxuICAgIG1vbnRoWWVhckxhYmVsOiBcIllZWVlcIixcclxuICAgIGRhdGVBMTF5TGFiZWw6IFwiTExcIixcclxuICAgIG1vbnRoWWVhckExMXlMYWJlbDogXCJZWVlZXCIsXHJcbiAgfSxcclxufTtcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiBcInJzLWRhc2hib2FyZFwiLFxyXG4gIHRlbXBsYXRlVXJsOiBcIi4vcGFuZS1ncm91cC1uZXcuY29tcG9uZW50Lmh0bWxcIixcclxuICBzdHlsZVVybHM6IFtcIi4vcGFuZS1ncm91cC1uZXcuY29tcG9uZW50LnNjc3NcIl0sXHJcbiAgLy8gY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXHJcbiAgcHJvdmlkZXJzOiBbRGF0ZVBpcGUsIHsgcHJvdmlkZTogTUFUX0RBVEVfRk9STUFUUywgdXNlVmFsdWU6IE1ZX0ZPUk1BVFMgfV0sXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBQYW5lR3JvdXBOZXdDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xyXG4gIEBPdXRwdXQoKSBkYXRlQ2hhbmdlOiBFdmVudEVtaXR0ZXI8TWF0RGF0ZXBpY2tlcklucHV0RXZlbnQ8YW55Pj47XHJcbiAgQElucHV0KCkgYXBwQ29kZSA9IFwiUE1TXCI7XHJcbiAgQFZpZXdDaGlsZChcInNpZGViYXJcIiwgeyBzdGF0aWM6IGZhbHNlIH0pIHNpZGViYXI6IGFueTtcclxuICBAVmlld0NoaWxkcmVuKFwidW5jbGlja1wiKSB1bmNsaWNrOiBRdWVyeUxpc3Q8RWxlbWVudFJlZj47XHJcbiAgQFZpZXdDaGlsZHJlbihcInVuY2xpY2tHcmFuZFwiKSB1bmNsaWNrR3JhbmQ6IFF1ZXJ5TGlzdDxFbGVtZW50UmVmPjtcclxuICBAVmlld0NoaWxkcmVuKFwibmV3Q2hhcnRcIikgbmV3Q2hhcnQ6IFF1ZXJ5TGlzdDxCYXJDaGFydHNDb21wb25lbnQ+O1xyXG4gIHBvcnRsZXQ7XHJcbiAgdGFiYWN0aXZlOiBib29sZWFuO1xyXG4gIGRhc2hib2FyZDtcclxuICBzZWxlY3RlZFkgPSBbXTtcclxuICBzZWxlY3RlZFNlY29uZFkgPSBbXTtcclxuICBzZWxlY3RlZFggPSBbXTtcclxuICBzZWxlY3RlZE11bHRpcGxlczogYW55O1xyXG4gIHNlbGVjdFRoZW1lOiBhbnk7XHJcbiAgaGFzSW5pdCA9IHRydWU7XHJcbiAgYWN0aXZlVGFiSWQ6IGFueTtcclxuICBoYXNDaGFuZ2VEYXRhVGFibGUgPSBmYWxzZTtcclxuICBhY3RpdmVUYWJMYWJlbCA9IFwiXCI7XHJcbiAgc3RheUFjdGl2ZVRhYjogYm9vbGVhbjtcclxuICBASG9zdExpc3RlbmVyKFwiZG9jdW1lbnQ6Y2xpY2tcIiwgW1wiJGV2ZW50XCJdKSBib2R5Q2xpY2soZSkge1xyXG4gICAgaWYgKFxyXG4gICAgICB0aGlzLnVuY2xpY2sgJiZcclxuICAgICAgdGhpcy51bmNsaWNrLmZpcnN0ICYmXHJcbiAgICAgIGUudGFyZ2V0LnRhZ05hbWUgIT09IFwiSU1HXCIgJiZcclxuICAgICAgIXRoaXMudW5jbGljay5maXJzdC5uYXRpdmVFbGVtZW50LmNvbnRhaW5zKGUudGFyZ2V0KVxyXG4gICAgKSB7XHJcbiAgICAgIHRoaXMuc2hvd1N1YlRvdGFsR3JvdXAgPSBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoXHJcbiAgICAgIHRoaXMudW5jbGlja0dyYW5kLmZpcnN0ICYmXHJcbiAgICAgIGUudGFyZ2V0LnRhZ05hbWUgIT09IFwiSU1HXCIgJiZcclxuICAgICAgIXRoaXMudW5jbGlja0dyYW5kLmZpcnN0Lm5hdGl2ZUVsZW1lbnQuY29udGFpbnMoZS50YXJnZXQpXHJcbiAgICApIHtcclxuICAgICAgdGhpcy5zaG93Z3JhbmRUb3RhbEdyb3VwID0gZmFsc2U7XHJcbiAgICAgIHRoaXMuc2hvd1RhYmxlR3JhbmRUb3RhbEdyb3VwID0gZmFsc2U7XHJcbiAgICB9XHJcbiAgfVxyXG4gIHB1YmxpYyB0cmFuc2xhdGlvbiA9IEpTT04ucGFyc2UobG9jYWxTdG9yYWdlLmdldEl0ZW0oXCJ0cmFuc2xhdGlvblwiKSB8fCBcInt9XCIpO1xyXG4gIHByaXZhdGUgbGFuZztcclxuICBwdXNoX2J0biA9IGZhbHNlO1xyXG4gIEBWaWV3Q2hpbGQoXCJkZWZhdWx0TGF5b3V0XCIsIHsgc3RhdGljOiBmYWxzZSB9KVxyXG4gIGRhc2hib2FyZExheW91dDogRGFzaGJvYXJkTGF5b3V0Q29tcG9uZW50O1xyXG4gIEBWaWV3Q2hpbGQoXCJjYW52YXNcIiwgeyBzdGF0aWM6IHRydWUgfSkgY2FudmFzOiBFbGVtZW50UmVmO1xyXG4gIHByaXZhdGUgY29uZmlnO1xyXG4gIHB1YmxpYyBkcmFnZ2FibGVIYW5kbGU6IHN0cmluZyA9IFwiLmdhZGdldC10aXRsZVwiO1xyXG4gIHByaXZhdGUgc3Vic2NyaXB0aW9uczogU3Vic2NyaXB0aW9uW10gPSBbXTtcclxuICBwdWJsaWMgdXJsO1xyXG4gIHB1YmxpYyB1cmxfaWQ7XHJcbiAgcHVibGljIHVybF90eXBlO1xyXG4gIC8vIHByaXZhdGUgaW1nO1xyXG4gIHB1YmxpYyBkYXRlUGlwZUZvcm1hdDtcclxuICBwdWJsaWMgaGF2ZUZ1bGxTY3JlZW4gPSBbXTtcclxuICAvLyBwcml2YXRlIGNsaWVudEhlaWdodF87XHJcbiAgcHVibGljIGNlbGxTcGFjaW5nOiBudW1iZXJbXSA9IFsyMCwgMjBdO1xyXG4gIHB1YmxpYyBjZWxsQXNwZWN0UmF0aW87XHJcbiAgcHVibGljIHJlc2l6YWJsZUhhbmRsZXM7XHJcbiAgbmV3UG9zaXRpb24gPSBbXTtcclxuXHJcbiAgcHVibGljIG1lZGlhUXVlcnk7XHJcbiAgZmlndXJlQ29kZTtcclxuICBjdXN0b21pemVkID0gZmFsc2U7XHJcbiAgcHVibGljIGNoYXJ0VHlwZUxpc3QgPSBbXCJDb2x1bW5cIiwgXCJCYXJcIiwgXCJMaW5lXCIsIFwiQXJlYVwiLCBcIlNjYXR0ZXJcIiwgXCJQb2xhclwiXTtcclxuICBAVmlld0NoaWxkcmVuKFwidGFibGVcIilcclxuICBwdWJsaWMgdGFibGU6IFF1ZXJ5TGlzdDxHYWRnZXRUYWJsZUNvbXBvbmVudD47XHJcbiAgQFZpZXdDaGlsZHJlbihcInBpdm90XCIpXHJcbiAgcHVibGljIHBpdm90OiBRdWVyeUxpc3Q8R2FkZ2V0UGl2b3RDb21wb25lbnQgfCBHYWRnZXRQaXZvdENoYXJ0Q29tcG9uZW50PjtcclxuICBAVmlld0NoaWxkcmVuKFwidHJhbnNwb3NlXCIpXHJcbiAgcHVibGljIHRyYW5zcG9zZTogUXVlcnlMaXN0PEdhZGdldFRyYW5zcG9zZUNvbXBvbmVudD47XHJcbiAgcHVibGljIHBpdm90VGFibGVTdWJUb3RhbExpc3Q6IEFycmF5PGFueT4gPSBbXHJcbiAgICB7XHJcbiAgICAgIHNlbGVjdGVkOiBmYWxzZSxcclxuICAgICAgdmFsdWU6IHRoaXMudHJhbnNsYXRpb24uU0hPV19TVUJfVE9UQUxTIHx8IFwiU2hvdyBzdWIgdG90YWxzXCIsXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBzZWxlY3RlZDogZmFsc2UsXHJcbiAgICAgIHZhbHVlOiB0aGlzLnRyYW5zbGF0aW9uLkhJREVfU1VCX1RPVEFMUyB8fCBcIkhpZGUgc3ViIHRvdGFsc1wiLFxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgc2VsZWN0ZWQ6IGZhbHNlLFxyXG4gICAgICB2YWx1ZTpcclxuICAgICAgICB0aGlzLnRyYW5zbGF0aW9uLlNIT1dfU1VCX1RPVEFMU19ST1dTX09OTFkgfHxcclxuICAgICAgICBcIlNob3cgc3ViIHRvdGFscyByb3dzIG9ubHlcIixcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIHNlbGVjdGVkOiBmYWxzZSxcclxuICAgICAgdmFsdWU6XHJcbiAgICAgICAgdGhpcy50cmFuc2xhdGlvbi5TSE9XX1NVQl9UT1RBTFNfQ09MVU1OU19PTkxZIHx8XHJcbiAgICAgICAgXCJTaG93IHN1YiB0b3RhbHMgY29sdW1ucyBvbmx5XCIsXHJcbiAgICB9LFxyXG4gIF07XHJcbiAgcHVibGljIHBpdm90VGFibGVHcmFuZFRvdGFsTGlzdDogQXJyYXk8YW55PiA9IFtcclxuICAgIHtcclxuICAgICAgc2VsZWN0ZWQ6IGZhbHNlLFxyXG4gICAgICB2YWx1ZTogdGhpcy50cmFuc2xhdGlvbi5TSE9XX0dSQU5EX1RPVEFMUyB8fCBcIlNob3cgZ3JhbmQgdG90YWxzXCIsXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBzZWxlY3RlZDogZmFsc2UsXHJcbiAgICAgIHZhbHVlOiB0aGlzLnRyYW5zbGF0aW9uLkhJREVfR1JBTkRfVE9UQUxTIHx8IFwiSGlkZSBncmFuZCB0b3RhbHNcIixcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIHNlbGVjdGVkOiBmYWxzZSxcclxuICAgICAgdmFsdWU6XHJcbiAgICAgICAgdGhpcy50cmFuc2xhdGlvbi5TSE9XX0dSQU5EX1RPVEFMU19ST1dTX09OTFkgfHxcclxuICAgICAgICBcIlNob3cgZ3JhbmQgdG90YWxzIHJvd3Mgb25seVwiLFxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgc2VsZWN0ZWQ6IGZhbHNlLFxyXG4gICAgICB2YWx1ZTpcclxuICAgICAgICB0aGlzLnRyYW5zbGF0aW9uLlNIT1dfR1JBTkRfVE9UQUxTX0NPTFVNTlNfT05MWSB8fFxyXG4gICAgICAgIFwiU2hvdyBncmFuZCB0b3RhbHMgY29sdW1ucyBvbmx5XCIsXHJcbiAgICB9LFxyXG4gIF07XHJcbiAgcHVibGljIHRhYmxlR3JhbmRUb3RhbExpc3Q6IEFycmF5PGFueT4gPSBbXHJcbiAgICB7XHJcbiAgICAgIHNlbGVjdGVkOiBmYWxzZSxcclxuICAgICAgdmFsdWU6IHRoaXMudHJhbnNsYXRpb24uU0hPV19HUkFORF9UT1RBTFMgfHwgXCJTaG93IGdyYW5kIHRvdGFsc1wiLFxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgc2VsZWN0ZWQ6IGZhbHNlLFxyXG4gICAgICB2YWx1ZTogdGhpcy50cmFuc2xhdGlvbi5ISURFX0dSQU5EX1RPVEFMUyB8fCBcIkhpZGUgZ3JhbmQgdG90YWxzXCIsXHJcbiAgICB9LFxyXG4gIF07XHJcblxyXG4gIHRoZW1lRGF0YTogYW55ID0gW1xyXG4gICAge1xyXG4gICAgICBpZDogXCJ0aGVtZTEzXCIsXHJcbiAgICAgIHZhbHVlOiBbXCIjMUMzNDg0XCIsIFwiIzM1QjlGQ1wiXSxcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIGlkOiBcInRoZW1lMTRcIixcclxuICAgICAgdmFsdWU6IFtcIiMwNDU3OEZcIiwgXCIjM0VCQkNFXCJdLFxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgaWQ6IFwidGhlbWUxNVwiLFxyXG4gICAgICB2YWx1ZTogW1wiIzFDMzQ4NFwiLCBcIiMxMzZCQkJcIiwgXCIjMzVCOUZDXCJdLFxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgaWQ6IFwidGhlbWUxNlwiLFxyXG4gICAgICB2YWx1ZTogW1wiIzA0NTc4RlwiLCBcIiMwMDgyQUZcIiwgXCIjM0VCQkNFXCJdLFxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgaWQ6IFwidGhlbWUxN1wiLFxyXG4gICAgICB2YWx1ZTogW1wiIzFDMzQ4NFwiLCBcIiMxNjU5QTlcIiwgXCIjMUQ5N0UxXCIsIFwiIzM1QjlGQ1wiXSxcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIGlkOiBcInRoZW1lMThcIixcclxuICAgICAgdmFsdWU6IFtcIiMwNDU3OEZcIiwgXCIjMDA3MEEzXCIsIFwiIzE2QTJDMlwiLCBcIiMzRUJCQ0VcIl0sXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBpZDogXCJ0aGVtZTE5XCIsXHJcbiAgICAgIHZhbHVlOiBbXCIjMUMzNDg0XCIsIFwiIzE2NTlBOVwiLCBcIiMxMzc1QzRcIiwgXCIjMUQ5N0UxXCIsIFwiIzM1QjlGQ1wiXSxcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIGlkOiBcInRoZW1lMjBcIixcclxuICAgICAgdmFsdWU6IFtcIiMwNDU3OEZcIiwgXCIjMDA3MEEzXCIsIFwiIzAwODlCNFwiLCBcIiMxNkEyQzJcIiwgXCIjM0VCQkNFXCJdLFxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgaWQ6IFwidGhlbWUyMVwiLFxyXG4gICAgICB2YWx1ZTogW1wiIzFDMzQ4NFwiLCBcIiMxNjU5QTlcIiwgXCIjMTM2OEI4XCIsIFwiIzEzNzVDNFwiLCBcIiMxRDk3RTFcIiwgXCIjMzVCOUZDXCJdLFxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgaWQ6IFwidGhlbWUyMlwiLFxyXG4gICAgICB2YWx1ZTogW1wiIzA0NTc4RlwiLCBcIiMwMDcwQTNcIiwgXCIjMDA3RkFEXCIsIFwiIzAwODlCNFwiLCBcIiMxNkEyQzJcIiwgXCIjM0VCQkNFXCJdLFxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgaWQ6IFwidGhlbWUyM1wiLFxyXG4gICAgICB2YWx1ZTogW1xyXG4gICAgICAgIFwiIzFDMzQ4NFwiLFxyXG4gICAgICAgIFwiIzE2NTlBOVwiLFxyXG4gICAgICAgIFwiIzE0NUZBRlwiLFxyXG4gICAgICAgIFwiIzEzNjhCOFwiLFxyXG4gICAgICAgIFwiIzEzNzVDNFwiLFxyXG4gICAgICAgIFwiIzFEOTdFMVwiLFxyXG4gICAgICAgIFwiIzM1QjlGQ1wiLFxyXG4gICAgICBdLFxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgaWQ6IFwidGhlbWUyNFwiLFxyXG4gICAgICB2YWx1ZTogW1xyXG4gICAgICAgIFwiIzA0NTc4RlwiLFxyXG4gICAgICAgIFwiIzAwNzBBM1wiLFxyXG4gICAgICAgIFwiIzAwNzhBOVwiLFxyXG4gICAgICAgIFwiIzAwN0ZBRFwiLFxyXG4gICAgICAgIFwiIzAwODlCNFwiLFxyXG4gICAgICAgIFwiIzE2QTJDMlwiLFxyXG4gICAgICAgIFwiIzNFQkJDRVwiLFxyXG4gICAgICBdLFxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgaWQ6IFwidGhlbWUxMVwiLFxyXG4gICAgICB2YWx1ZTogW1xyXG4gICAgICAgIFwiIzFDMzQ4NFwiLFxyXG4gICAgICAgIFwiIzE5NDY5N1wiLFxyXG4gICAgICAgIFwiIzE2NTlBOVwiLFxyXG4gICAgICAgIFwiIzEzNkJCQlwiLFxyXG4gICAgICAgIFwiIzE0N0VDQ1wiLFxyXG4gICAgICAgIFwiIzFCOTJERFwiLFxyXG4gICAgICAgIFwiIzI2QTVFRFwiLFxyXG4gICAgICAgIFwiIzM1QjlGQ1wiLFxyXG4gICAgICBdLFxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgaWQ6IFwidGhlbWUxMlwiLFxyXG4gICAgICB2YWx1ZTogW1xyXG4gICAgICAgIFwiIzA0NTc4RlwiLFxyXG4gICAgICAgIFwiIzAwNjU5QlwiLFxyXG4gICAgICAgIFwiIzAwNzNBNlwiLFxyXG4gICAgICAgIFwiIzAwODJBRlwiLFxyXG4gICAgICAgIFwiIzAwOTBCOFwiLFxyXG4gICAgICAgIFwiIzBGOUVDMFwiLFxyXG4gICAgICAgIFwiIzI5QURDN1wiLFxyXG4gICAgICAgIFwiIzNFQkJDRVwiLFxyXG4gICAgICBdLFxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgaWQ6IFwidGhlbWUxXCIsXHJcbiAgICAgIHZhbHVlOiBbXHJcbiAgICAgICAgXCIjNTk0YmI5XCIsXHJcbiAgICAgICAgXCIjZjFhZjMyXCIsXHJcbiAgICAgICAgXCIjNDY4OGVkXCIsXHJcbiAgICAgICAgXCIjZTA1NjNlXCIsXHJcbiAgICAgICAgXCIjODAzYTYzXCIsXHJcbiAgICAgICAgXCIjNmRkOGI1XCIsXHJcbiAgICAgICAgXCIjZTg3MjI1XCIsXHJcbiAgICAgICAgXCIjYzVkZjQyXCIsXHJcbiAgICAgICAgXCIjYzY0MzdkXCIsXHJcbiAgICAgIF0sXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBpZDogXCJ0aGVtZTJcIixcclxuICAgICAgdmFsdWU6IFtcclxuICAgICAgICBcIiM0Njg4ZWRcIixcclxuICAgICAgICBcIiNmMWFmMzJcIixcclxuICAgICAgICBcIiNlMDU2M2VcIixcclxuICAgICAgICBcIiM4MDNhNjNcIixcclxuICAgICAgICBcIiM2ZGQ4YjVcIixcclxuICAgICAgICBcIiNlODcyMjVcIixcclxuICAgICAgICBcIiNjNWRmNDJcIixcclxuICAgICAgICBcIiNjNjQzN2RcIixcclxuICAgICAgICBcIiM1OTRiYjlcIixcclxuICAgICAgXSxcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIGlkOiBcInRoZW1lM1wiLFxyXG4gICAgICB2YWx1ZTogW1xyXG4gICAgICAgIFwiI2M2NDM3ZFwiLFxyXG4gICAgICAgIFwiI2M1ZGY0MlwiLFxyXG4gICAgICAgIFwiI2U4NzIyNVwiLFxyXG4gICAgICAgIFwiIzZkZDhiNVwiLFxyXG4gICAgICAgIFwiI2UwNTYzZVwiLFxyXG4gICAgICAgIFwiIzgwM2E2M1wiLFxyXG4gICAgICAgIFwiI2YxYWYzMlwiLFxyXG4gICAgICAgIFwiIzU5NGJiOVwiLFxyXG4gICAgICAgIFwiIzQ2ODhlZFwiLFxyXG4gICAgICBdLFxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgaWQ6IFwidGhlbWU0XCIsXHJcbiAgICAgIHZhbHVlOiBbXHJcbiAgICAgICAgXCIjMmY0OTlmXCIsXHJcbiAgICAgICAgXCIjOGQxZDJlXCIsXHJcbiAgICAgICAgXCIjZTliZjM1XCIsXHJcbiAgICAgICAgXCIjNTE3NzJmXCIsXHJcbiAgICAgICAgXCIjNDY5YmQ4XCIsXHJcbiAgICAgICAgXCIjNWM0NDhmXCIsXHJcbiAgICAgICAgXCIjZGE3MzJmXCIsXHJcbiAgICAgICAgXCIjMjQ1MzUzXCIsXHJcbiAgICAgICAgXCIjNDNhMjQ1XCIsXHJcbiAgICAgIF0sXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBpZDogXCJ0aGVtZTVcIixcclxuICAgICAgdmFsdWU6IFtcclxuICAgICAgICBcIiMzODM4MzlcIixcclxuICAgICAgICBcIiM0NDZlYzZcIixcclxuICAgICAgICBcIiNjZjYzODRcIixcclxuICAgICAgICBcIiNlYmIzN2VcIixcclxuICAgICAgICBcIiM3MWEyNDlcIixcclxuICAgICAgICBcIiM0YmIxYTVcIixcclxuICAgICAgICBcIiNlODcyMjVcIixcclxuICAgICAgICBcIiNjNWRmNDJcIixcclxuICAgICAgICBcIiNjNjQzN2RcIixcclxuICAgICAgXSxcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIGlkOiBcInRoZW1lNlwiLFxyXG4gICAgICB2YWx1ZTogW1xyXG4gICAgICAgIFwiIzUxN2FlMVwiLFxyXG4gICAgICAgIFwiIzYzODZlNVwiLFxyXG4gICAgICAgIFwiIzc0OTFlOVwiLFxyXG4gICAgICAgIFwiIzg0OWRlY1wiLFxyXG4gICAgICAgIFwiIzk0YTllZlwiLFxyXG4gICAgICAgIFwiI2E0YjZmMlwiLFxyXG4gICAgICAgIFwiI2I0YzNmNlwiLFxyXG4gICAgICAgIFwiI2M0Y2ZmOVwiLFxyXG4gICAgICAgIFwiI2Q0ZGRmZFwiLFxyXG4gICAgICBdLFxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgaWQ6IFwidGhlbWU3XCIsXHJcbiAgICAgIHZhbHVlOiBbXHJcbiAgICAgICAgXCIjMzk4MjhlXCIsXHJcbiAgICAgICAgXCIjNDg4ZTk5XCIsXHJcbiAgICAgICAgXCIjNTc5YWE1XCIsXHJcbiAgICAgICAgXCIjNjZhNmIwXCIsXHJcbiAgICAgICAgXCIjNzViM2JkXCIsXHJcbiAgICAgICAgXCIjODViZmM5XCIsXHJcbiAgICAgICAgXCIjOTVjZGQ2XCIsXHJcbiAgICAgICAgXCIjYTRkYWUyXCIsXHJcbiAgICAgICAgXCIjYjVlOGYwXCIsXHJcbiAgICAgIF0sXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBpZDogXCJ0aGVtZThcIixcclxuICAgICAgdmFsdWU6IFtcclxuICAgICAgICBcIiNlNzk2M2RcIixcclxuICAgICAgICBcIiNlYTllNGJcIixcclxuICAgICAgICBcIiNlZWE2NTlcIixcclxuICAgICAgICBcIiNmMGFlNjhcIixcclxuICAgICAgICBcIiNmMmI2NzhcIixcclxuICAgICAgICBcIiNmM2JmODdcIixcclxuICAgICAgICBcIiNmNWM3OThcIixcclxuICAgICAgICBcIiNmNmQwYWFcIixcclxuICAgICAgICBcIiNmN2Q5YmJcIixcclxuICAgICAgXSxcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIGlkOiBcInRoZW1lOVwiLFxyXG4gICAgICB2YWx1ZTogW1xyXG4gICAgICAgIFwiIzY0YThiNFwiLFxyXG4gICAgICAgIFwiIzdlYmVjMFwiLFxyXG4gICAgICAgIFwiIzljYzljYVwiLFxyXG4gICAgICAgIFwiI2I4ZDRkNFwiLFxyXG4gICAgICAgIFwiI2Q5ZDZjZFwiLFxyXG4gICAgICAgIFwiI2Q4YjdhN1wiLFxyXG4gICAgICAgIFwiI2NlOGY5M1wiLFxyXG4gICAgICAgIFwiI2MxNjI3ZlwiLFxyXG4gICAgICAgIFwiI2FkMjQ1OFwiLFxyXG4gICAgICBdLFxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgaWQ6IFwidGhlbWUxMFwiLFxyXG4gICAgICB2YWx1ZTogW1xyXG4gICAgICAgIFwiIzQxNzZiYVwiLFxyXG4gICAgICAgIFwiIzU1OWFlOFwiLFxyXG4gICAgICAgIFwiIzcwYjNlOFwiLFxyXG4gICAgICAgIFwiI2E3Y2NlN1wiLFxyXG4gICAgICAgIFwiI2RmZGZkZlwiLFxyXG4gICAgICAgIFwiI2QyYTA4YlwiLFxyXG4gICAgICAgIFwiI2M3NmE1MFwiLFxyXG4gICAgICAgIFwiI2NhNGUzNFwiLFxyXG4gICAgICAgIFwiI2FhM2MyOVwiLFxyXG4gICAgICBdLFxyXG4gICAgfSxcclxuICBdO1xyXG4gIHN0YXJ0RWRpdCA9IGZhbHNlO1xyXG4gIHB1YmxpYyBzaG93U3ViVG90YWxHcm91cDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHB1YmxpYyBzaG93Z3JhbmRUb3RhbEdyb3VwOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHVibGljIHNob3dUYWJsZUdyYW5kVG90YWxHcm91cDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHB1YmxpYyBDdXJyZW50X1BvcnRsZXRJZDtcclxuICBwdWJsaWMgcmVzdG9yZU1vZGVsOiBhbnkgPSBbXTtcclxuICBwdWJsaWMgdGhlbWVPYmogPSB7fTtcclxuICBlbmFibGVNdWx0aXBsZUF4aXMgPSBmYWxzZTtcclxuICBzaG93TGVnZW5kID0gZmFsc2U7XHJcbiAgdGltZXI7XHJcbiAgdGFiTGlzdDtcclxuICBhY3RpdmVUYWIgPSAxO1xyXG4gIHByZXZJZCA9IG51bGw7XHJcbiAgZGFzaGJvYXJkX3NpZGViYXIgPSBmYWxzZTtcclxuICBBY3RpdmVEYXNoYm9hcmRQb3J0bGV0cyA9IFtdO1xyXG4gIHBvcnRsZXRzID0gW107XHJcbiAgaGFzUmVzaXplID0gZmFsc2U7XHJcblxyXG4gIEBWaWV3Q2hpbGQoXCJwYW5lc0xpc3RcIiwgeyBzdGF0aWM6IHRydWUgfSkgcGFuZXNMaXN0OiBFbGVtZW50UmVmO1xyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHVibGljIGRpYWxvZzogTWF0RGlhbG9nLFxyXG4gICAgcHJpdmF0ZSBkaWFsb2dTZXJ2aWNlOiBEaWFsb2dTZXJ2aWNlLFxyXG4gICAgcHVibGljIGRhc2hib2FyZFNlcnZpY2U6IERhc2hib2FyZFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGFwaTogQXBpTGlzdCxcclxuICAgIHByaXZhdGUgYWN0aXZhdGVkUm91dGU6IEFjdGl2YXRlZFJvdXRlLFxyXG4gICAgcHVibGljIERhc2hib2FyZFBvcmxldHNTZXJ2aWNlOiBEYXNoYm9hcmRQb3JsZXRzU2VydmljZSxcclxuICAgIHByaXZhdGUgcmVmOiBDaGFuZ2VEZXRlY3RvclJlZixcclxuICAgIHByaXZhdGUgcm91dGVyOiBSb3V0ZXIsXHJcbiAgICBwcml2YXRlIGh0dHBDbGllbnQ6IEh0dHBDbGllbnQsXHJcbiAgICBwcml2YXRlIGRhdGVQaXBlOiBEYXRlUGlwZSxcclxuICAgIEBPcHRpb25hbCgpIEBJbmplY3QoUEJGX1RPS0VOKSBwcml2YXRlIHBiZjogYW55LFxyXG4gICAgQE9wdGlvbmFsKCkgQEluamVjdChBUElfU0VSVklDRV9UT0tFTikgcHJpdmF0ZSBodHRwOiBhbnksXHJcbiAgICBAT3B0aW9uYWwoKSBASW5qZWN0KFJPTEVfU0VSVklDRV9UT0tFTikgcHVibGljIHJzOiBhbnlcclxuICApIHtcclxuICAgIHRoaXMucm91dGVyLmV2ZW50c1xyXG4gICAgICAucGlwZShmaWx0ZXIoKGV2ZW50KSA9PiBldmVudCBpbnN0YW5jZW9mIE5hdmlnYXRpb25FbmQpKVxyXG4gICAgICAuc3Vic2NyaWJlKChlOiBOYXZpZ2F0aW9uRW5kKSA9PiB7XHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgdGhpcy5oYXNSZXNpemUgJiZcclxuICAgICAgICAgIGUudXJsID09PSB0aGlzLmFjdGl2YXRlZFJvdXRlW1wiX3JvdXRlclN0YXRlXCJdLnNuYXBzaG90LnVybFxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgaWYgKHRoaXMuZGFzaGJvYXJkTGF5b3V0KSB7XHJcbiAgICAgICAgICAgIHRoaXMuQWN0aXZlRGFzaGJvYXJkUG9ydGxldHMgPSBbXTtcclxuICAgICAgICAgICAgdGhpcy5oYXNSZXNpemUgPSBmYWxzZTtcclxuICAgICAgICAgICAgdGhpcy5wYmYucGFnZUxvYWRpbmcgPSB0cnVlO1xyXG4gICAgICAgICAgICB0aGlzLnBiZi5wYWdlTG9hZGluZ18ubmV4dCh0cnVlKTtcclxuICAgICAgICAgICAgdGhpcy5kYXNoYm9hcmRMYXlvdXQucmVtb3ZlQWxsKCk7XHJcbiAgICAgICAgICAgIHRoaXMucmVmLm1hcmtGb3JDaGVjaygpO1xyXG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgICB0aGlzLnNldEFjdGl2ZURhc2hib2FyZFBvcnRsZXRzKCk7XHJcbiAgICAgICAgICAgIH0sIDUwMCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIG5nT25Jbml0KCkge1xyXG4gICAgdGhpcy5wYmYucGFnZUxvYWRpbmcgPSB0cnVlO1xyXG4gICAgdGhpcy5wYmYucGFnZUxvYWRpbmdfLm5leHQodHJ1ZSk7XHJcbiAgICB0aGlzLnJlZi5tYXJrRm9yQ2hlY2soKTtcclxuICAgIHRoaXMucmVmLmRldGVjdENoYW5nZXMoKTtcclxuXHJcbiAgICBpZiAodGhpcy50aGVtZURhdGEgJiYgdGhpcy50aGVtZURhdGEubGVuZ3RoID4gMCkge1xyXG4gICAgICB0aGlzLnRoZW1lRGF0YS5mb3JFYWNoKChlKSA9PiB7XHJcbiAgICAgICAgdGhpcy50aGVtZU9ialtlLmlkXSA9IGVbXCJ2YWx1ZVwiXTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICB0aGlzLmdldEluZm8oKTtcclxuICAgIHRoaXMuZ2V0RGFzaGJvYXJkKCk7XHJcblxyXG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXHJcbiAgICAgIHRoaXMucGJmLnB1YiQuc3Vic2NyaWJlKChyZXMpID0+IHtcclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICByZXMucmVmcmVzaFVybCAmJlxyXG4gICAgICAgICAgcmVzLnJlZnJlc2hVcmwgPT09IHRoaXMuYWN0aXZhdGVkUm91dGVbXCJfcm91dGVyU3RhdGVcIl0uc25hcHNob3QudXJsXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICB0aGlzLnBiZi5wYWdlTG9hZGluZyA9IHRydWU7XHJcbiAgICAgICAgICB0aGlzLnBiZi5wYWdlTG9hZGluZ18ubmV4dCh0cnVlKTtcclxuICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmdldERhc2hib2FyZCgpO1xyXG4gICAgICAgICAgfSwgNTAwKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pXHJcbiAgICApO1xyXG5cclxuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKFxyXG4gICAgICB0aGlzLmRhc2hib2FyZFNlcnZpY2UuZ2V0RGFzaGJvYXJkUmVuYW1lKCkuc3Vic2NyaWJlKChyZXMpID0+IHtcclxuICAgICAgICBpZiAodGhpcy5kYXNoYm9hcmQgJiYgdGhpcy5kYXNoYm9hcmQuaWQgPT09IHJlcy5pZCkge1xyXG4gICAgICAgICAgdGhpcy5kYXNoYm9hcmQuZGFzaGJvYXJkR3JvdXBOYW1lID0gcmVzLmRhc2hib2FyZEdyb3VwTmFtZTtcclxuICAgICAgICAgIHRoaXMuZGFzaGJvYXJkLmRhc2hib2FyZEdyb3VwSWQgPSByZXMuZGFzaGJvYXJkR3JvdXBJZDtcclxuICAgICAgICAgIHRoaXMuZGFzaGJvYXJkLmRlc2NyaXB0aW9uID0gcmVzLmRlc2NyaXB0aW9uO1xyXG4gICAgICAgICAgdGhpcy5kYXNoYm9hcmQubmFtZSA9IHJlcy5uYW1lO1xyXG4gICAgICAgICAgdGhpcy51cGRhdGVEYXNoYm9hcmRMYXN0VXBkYXRlRGF0ZSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSlcclxuICAgICk7XHJcblxyXG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXHJcbiAgICAgIHRoaXMuZGFzaGJvYXJkU2VydmljZS5nZXRDdXN0b21pemVTdGF0dXMoKS5zdWJzY3JpYmUoKGlkKSA9PiB7XHJcbiAgICAgICAgaWYgKHRoaXMuZGFzaGJvYXJkICYmIHRoaXMuZGFzaGJvYXJkLmlkID09PSBpZCkge1xyXG4gICAgICAgICAgdGhpcy5yZWYubWFya0ZvckNoZWNrKCk7XHJcbiAgICAgICAgICB0aGlzLnJlZi5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KVxyXG4gICAgKTtcclxuXHJcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcclxuICAgICAgdGhpcy5wYmYuZ2V0SGFzUmVzaXplKCkuc3Vic2NyaWJlKCh1cmwpID0+IHtcclxuICAgICAgICBpZiAodXJsKSB7XHJcbiAgICAgICAgICBpZiAodGhpcy5hY3RpdmF0ZWRSb3V0ZVtcIl9yb3V0ZXJTdGF0ZVwiXS5zbmFwc2hvdC51cmwgPT09IHVybCkge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5kYXNoYm9hcmRMYXlvdXQpIHtcclxuICAgICAgICAgICAgICB0aGlzLkFjdGl2ZURhc2hib2FyZFBvcnRsZXRzID0gW107XHJcbiAgICAgICAgICAgICAgdGhpcy5kYXNoYm9hcmRMYXlvdXQucmVtb3ZlQWxsKCk7XHJcbiAgICAgICAgICAgICAgdGhpcy5wYmYucGFnZUxvYWRpbmcgPSB0cnVlO1xyXG4gICAgICAgICAgICAgIHRoaXMucGJmLnBhZ2VMb2FkaW5nXy5uZXh0KHRydWUpO1xyXG4gICAgICAgICAgICAgIHRoaXMucmVmLm1hcmtGb3JDaGVjaygpO1xyXG4gICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRBY3RpdmVEYXNoYm9hcmRQb3J0bGV0cygpO1xyXG4gICAgICAgICAgICAgIH0sIDUwMCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuaGFzUmVzaXplID0gdHJ1ZTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH0pXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRBbGxGaWVsZHMoaXRlbSwgbm9EZXRlY3QgPSBmYWxzZSk6IFByb21pc2U8YW55W10+IHtcclxuICAgIGlmICghbm9EZXRlY3QpIHtcclxuICAgICAgdGhpcy5wYmYucGFnZUxvYWRpbmcgPSB0cnVlO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgICAgY29uc3QgZGF0YU1hcnRDb2RlID0gaXRlbS5maWd1cmVDb2RlO1xyXG4gICAgICBjb25zdCBkYXRhT2JqID0ge1xyXG4gICAgICAgIGxhbmd1YWdlOiB0aGlzLmxhbmcsXHJcbiAgICAgICAgZGF0YU1hcnRDb2RlLFxyXG4gICAgICB9O1xyXG4gICAgICB0aGlzLkRhc2hib2FyZFBvcmxldHNTZXJ2aWNlLnNldFNjaGVtYVBhcmFtcyhcclxuICAgICAgICBkYXRhT2JqLFxyXG4gICAgICAgIGRhdGFNYXJ0Q29kZSxcclxuICAgICAgICB0aGlzLmRhc2hib2FyZFxyXG4gICAgICApO1xyXG4gICAgICB0aGlzLmh0dHAucG9zdCh0aGlzLmFwaS51cmxMaXN0LkdldFNjaGVtYSwgZGF0YU9iaiwgKHJlcykgPT4ge1xyXG4gICAgICAgIGlmICghbm9EZXRlY3QpIHtcclxuICAgICAgICAgIHRoaXMucGJmLnBhZ2VMb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICB0aGlzLnBiZi5wYWdlTG9hZGluZ18ubmV4dCh0cnVlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmVzb2x2ZShyZXMpO1xyXG4gICAgICB9KTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgb25DbG9zZVJpZ2h0KGUpIHtcclxuICAgIHRoaXMucHVzaF9idG4gPSBmYWxzZTtcclxuICAgIHRoaXMucmVmLmRldGVjdENoYW5nZXMoKTtcclxuICB9XHJcblxyXG4gIHNldEFjdGl2ZURhc2hib2FyZFBvcnRsZXRzKG5vRGV0ZWN0ID0gZmFsc2UpIHtcclxuICAgIGlmICh0aGlzLmhhc0NoYW5nZURhdGFUYWJsZSkge1xyXG4gICAgICB0aGlzLkFjdGl2ZURhc2hib2FyZFBvcnRsZXRzID0gW107XHJcbiAgICAgIHRoaXMucmVmLm1hcmtGb3JDaGVjaygpO1xyXG4gICAgfVxyXG4gICAgY29uc3QgcG9ydGxldHMgPVxyXG4gICAgICB0aGlzLnBvcnRsZXRzLmZpbHRlcigocG9ydGxldCkgPT4ge1xyXG4gICAgICAgIGlmICghcG9ydGxldCB8fCAhcG9ydGxldC5jb25maWcpIHtcclxuICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgY29uZmlnID0gSlNPTi5wYXJzZShwb3J0bGV0LmNvbmZpZyk7XHJcbiAgICAgICAgY29uc3QgdGFiSWQgPSBjb25maWcudGFiSWQgfHwgMTtcclxuICAgICAgICBpZiAodGFiSWQgPT09IHRoaXMuYWN0aXZlVGFiKSB7XHJcbiAgICAgICAgICByZXR1cm4gcG9ydGxldDtcclxuICAgICAgICB9XHJcbiAgICAgIH0pIHx8IFtdO1xyXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIHRoaXMuQWN0aXZlRGFzaGJvYXJkUG9ydGxldHMgPSBbLi4ucG9ydGxldHNdO1xyXG4gICAgICBpZiAoXHJcbiAgICAgICAgIXRoaXMuQWN0aXZlRGFzaGJvYXJkUG9ydGxldHMubGVuZ3RoICYmXHJcbiAgICAgICAgdGhpcy5kYXNoYm9hcmRMYXlvdXQgJiZcclxuICAgICAgICB0aGlzLmRhc2hib2FyZExheW91dC5wYW5lbHMgJiZcclxuICAgICAgICB0aGlzLmRhc2hib2FyZExheW91dC5wYW5lbHMubGVuZ3RoXHJcbiAgICAgICkge1xyXG4gICAgICAgIHRoaXMuZGFzaGJvYXJkTGF5b3V0LnJlbW92ZUFsbCgpO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuaGFzQ2hhbmdlRGF0YVRhYmxlID0gZmFsc2U7XHJcbiAgICAgIGlmICghbm9EZXRlY3QpIHtcclxuICAgICAgICB0aGlzLnBiZi5wYWdlTG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMucGJmLnBhZ2VMb2FkaW5nXy5uZXh0KHRydWUpO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMucmVmLmRldGVjdENoYW5nZXMoKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgb25BY3RpdmVUYWIodGFiLCBpbmRleCkge1xyXG4gICAgdGhpcy5kYXNoYm9hcmRfc2lkZWJhciA9IGZhbHNlO1xyXG4gICAgdGhpcy5wdXNoX2J0biA9IGZhbHNlO1xyXG4gICAgY29uc3QgeyBpZCwgbGFiZWwgfSA9IHRhYjtcclxuICAgIGlmICh0YWIuaWQgPT09IHRoaXMuYWN0aXZlVGFiKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIHRoaXMuYWN0aXZlVGFiSWQgPSBpZDtcclxuICAgIHRoaXMuYWN0aXZlVGFiTGFiZWwgPSBsYWJlbDtcclxuICAgIGlmIChpbmRleCAhPT0gMCkge1xyXG4gICAgICB0aGlzLnByZXZJZCA9IHRoaXMudGFiTGlzdFtpbmRleCAtIDFdLmlkO1xyXG4gICAgfVxyXG4gICAgdGhpcy5zdGFydEVkaXQgPSBmYWxzZTtcclxuICAgIHRoaXMuYWN0aXZlVGFiID0gaWQ7XHJcbiAgICB0aGlzLnNldEFjdGl2ZURhc2hib2FyZFBvcnRsZXRzKCk7XHJcbiAgfVxyXG5cclxuICBvbkRlbGV0ZVRhYihpdGVtKSB7XHJcbiAgICBsZXQgX3RpdGxlID1cclxuICAgICAgdGhpcy50cmFuc2xhdGlvbi5BUkVfWU9VX1NVUkVfVE9fREVMRVRFX0RBU0hCT0FSRF9UQUJfV0FSTklOR19NRVNTQUdFIHx8XHJcbiAgICAgIFwiLkFSRV9ZT1VfU1VSRV9UT19ERUxFVEVfREFTSEJPQVJEX1RBQl9XQVJOSU5HX01FU1NBR0VcIjtcclxuICAgIF90aXRsZSA9IF90aXRsZS5yZXBsYWNlKFwie1RhYiBOYW1lfVwiLCBpdGVtLmxhYmVsKTtcclxuICAgIGNvbnN0IGRpYWxvZ1JlZiA9IHRoaXMuZGlhbG9nU2VydmljZS5zaG93Q29tbW9uRGlsYW9nKHtcclxuICAgICAgdGl0bGU6IHRoaXMudHJhbnNsYXRpb24uREVMRVRFX1JFQ09SRCB8fCBcIi5ERUxFVEVfUkVDT1JEXCIsXHJcbiAgICAgIGRlc2NyaXB0aW9uOiBfdGl0bGUsXHJcbiAgICB9KTtcclxuICAgIGRpYWxvZ1JlZi5hZnRlckNsb3NlZCgpLnN1YnNjcmliZSgocmVzKSA9PiB7XHJcbiAgICAgIGlmIChyZXMgPT09IFwic2F2ZVwiKSB7XHJcbiAgICAgICAgY29uc3QgaXNBY3RpdmUgPSB0aGlzLmFjdGl2ZVRhYiA9PT0gaXRlbS5pZDtcclxuICAgICAgICBsZXQgaW5kZXggPSAwO1xyXG4gICAgICAgIGZvciAobGV0IGkgPSB0aGlzLnBvcnRsZXRzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XHJcbiAgICAgICAgICBjb25zdCBjb25maWcgPSBKU09OLnBhcnNlKHRoaXMucG9ydGxldHNbaV0uY29uZmlnKTtcclxuICAgICAgICAgIGlmIChjb25maWcudGFiSWQgPT09IHRoaXMuYWN0aXZlVGFiKSB7XHJcbiAgICAgICAgICAgIHRoaXMucG9ydGxldHMuc3BsaWNlKGksIDEpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnRhYkxpc3QuZm9yRWFjaCgodGFiLCBpKSA9PiB7XHJcbiAgICAgICAgICBpZiAodGFiLmlkID09PSBpdGVtLmlkKSB7XHJcbiAgICAgICAgICAgIHRoaXMudGFiTGlzdC5zcGxpY2UoaSwgMSk7XHJcbiAgICAgICAgICAgIGluZGV4ID0gaTtcclxuICAgICAgICAgICAgdGhpcy5yZWYubWFya0ZvckNoZWNrKCk7XHJcbiAgICAgICAgICAgIHRoaXMucmVmLmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgICBpZiAoaXNBY3RpdmUpIHtcclxuICAgICAgICAgIGlmICghdGhpcy50YWJMaXN0W2luZGV4XSkge1xyXG4gICAgICAgICAgICBpbmRleCAtPSAxO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgdGhpcy5hY3RpdmVUYWIgPSB0aGlzLnRhYkxpc3RbaW5kZXhdLmlkO1xyXG4gICAgICAgICAgdGhpcy5hY3RpdmVUYWJJZCA9IHRoaXMuYWN0aXZlVGFiO1xyXG4gICAgICAgICAgdGhpcy5wb3J0bGV0cy5mb3JFYWNoKChwb3J0bGV0KSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IGNvbmZpZyA9IEpTT04ucGFyc2UocG9ydGxldC5jb25maWcpO1xyXG4gICAgICAgICAgICBjb25maWcuYWN0aXZlVGFiID0gdGhpcy5hY3RpdmVUYWI7XHJcbiAgICAgICAgICAgIHBvcnRsZXQuY29uZmlnID0gQ2lyY3VsYXJKU09OLnN0cmluZ2lmeShjb25maWcpO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgICB0aGlzLnJlZi5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgICAgICB0aGlzLm9uQWN0aXZlVGFiKHRoaXMudGFiTGlzdFtpbmRleF0sIGluZGV4KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5zYXZlZGFzaGJvYXJkKFwidHJ1ZVwiKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBvbkFkZFRhYigpIHtcclxuICAgIGNvbnN0IGxhYmVsID0gYFRhYiAke3RoaXMudGFiTGlzdC5sZW5ndGggKyAxfWA7XHJcbiAgICB0aGlzLnByZXZJZCA9IHRoaXMudGFiTGlzdFt0aGlzLnRhYkxpc3QubGVuZ3RoIC0gMV0uaWQ7XHJcbiAgICBsZXQgbmV3SWQgPSAxO1xyXG4gICAgdGhpcy50YWJMaXN0LmZvckVhY2goKHRhYikgPT4ge1xyXG4gICAgICBuZXdJZCA9IE1hdGgubWF4KG5ld0lkLCB0YWIuaWQpO1xyXG4gICAgfSk7XHJcbiAgICB0aGlzLmFjdGl2ZVRhYiA9IG5ld0lkICsgMTtcclxuICAgIHRoaXMudGFiTGlzdC5wdXNoKHtcclxuICAgICAgaWQ6IHRoaXMuYWN0aXZlVGFiLFxyXG4gICAgICBsYWJlbCxcclxuICAgICAgZGlzcGxheUxhYmVsOiBgJHt0aGlzLnRyYW5zbGF0aW9uLlRBQiB8fCBcIlRhYlwifSAke1xyXG4gICAgICAgIHRoaXMudGFiTGlzdC5sZW5ndGggKyAxXHJcbiAgICAgIH1gLFxyXG4gICAgfSk7XHJcbiAgICB0aGlzLmFjdGl2ZVRhYklkID0gdGhpcy5hY3RpdmVUYWI7XHJcbiAgICB0aGlzLmFjdGl2ZVRhYkxhYmVsID0gbGFiZWw7XHJcbiAgICAvLyDpmpDol4/lj7Pkvqfoj5zljZXvvIzmuIXpmaTlvZPliY3pgInkuK3nmoRwb3J0bGV0XHJcbiAgICB0aGlzLnBvcnRsZXQgPSBudWxsO1xyXG4gICAgdGhpcy5kYXNoYm9hcmRfc2lkZWJhciA9IGZhbHNlO1xyXG4gICAgdGhpcy5oYXNDaGFuZ2VEYXRhVGFibGUgPSB0cnVlO1xyXG4gICAgdGhpcy5wdXNoX2J0biA9IGZhbHNlO1xyXG4gICAgdGhpcy5zZXRBY3RpdmVEYXNoYm9hcmRQb3J0bGV0cygpO1xyXG4gIH1cclxuXHJcbiAgc2V0VGFiSW5wdXQoZSkge1xyXG4gICAgdGhpcy5wb3J0bGV0cy5mb3JFYWNoKChwb3J0bGV0KSA9PiB7XHJcbiAgICAgIGNvbnN0IF9jb25maWcgPSBKU09OLnBhcnNlKHBvcnRsZXQuY29uZmlnKTtcclxuICAgICAgY29uc3QgX3RhYklkID0gX2NvbmZpZy50YWJJZCB8fCAxO1xyXG4gICAgICBpZiAoX3RhYklkID09PSB0aGlzLmFjdGl2ZVRhYikge1xyXG4gICAgICAgIF9jb25maWcudGFiTGFiZWwgPSBlLnRhcmdldC52YWx1ZTtcclxuICAgICAgICBwb3J0bGV0LmNvbmZpZyA9IENpcmN1bGFySlNPTi5zdHJpbmdpZnkoX2NvbmZpZyk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgdGhpcy5yZWYubWFya0ZvckNoZWNrKCk7XHJcbiAgICB0aGlzLnJlZi5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgfVxyXG5cclxuICBzYXZlVGFiSW5wdXQoaXRlbSkge1xyXG4gICAgdGhpcy5zdGFydEVkaXQgPSBmYWxzZTtcclxuICAgIGl0ZW0uZGlzcGxheUxhYmVsID0gdGhpcy50cnVuY2F0ZVRleHQoaXRlbS5sYWJlbCk7XHJcbiAgICB0aGlzLnJlZi5tYXJrRm9yQ2hlY2soKTtcclxuICAgIHRoaXMucmVmLmRldGVjdENoYW5nZXMoKTtcclxuICB9XHJcblxyXG4gIG9uU3RhcnRFZGl0KGlkKSB7XHJcbiAgICBpZiAoIXRoaXMuY3VzdG9taXplZCkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5hY3RpdmVUYWIgIT09IGlkKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIHRoaXMuc3RhcnRFZGl0ID0gdHJ1ZTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgaW5pdFRhYkxpc3Qobm9EZXRlY3QgPSBmYWxzZSkge1xyXG4gICAgdGhpcy50YWJMaXN0ID0gW107XHJcbiAgICBpZiAoIXRoaXMuYWN0aXZlVGFiIHx8ICF0aGlzLnN0YXlBY3RpdmVUYWIpIHtcclxuICAgICAgdGhpcy5hY3RpdmVUYWIgPSAxO1xyXG4gICAgfVxyXG4gICAgdGhpcy5wcmV2SWQgPSBudWxsO1xyXG4gICAgY29uc3QgdGFiTWFwID0ge307XHJcbiAgICB0aGlzLnBvcnRsZXRzLmZvckVhY2goKHBvcnRsZXQsIGlkeCkgPT4ge1xyXG4gICAgICBpZiAocG9ydGxldC5jb25maWcpIHtcclxuICAgICAgICBjb25zdCBjb25maWcgPSBKU09OLnBhcnNlKHBvcnRsZXQuY29uZmlnKTtcclxuICAgICAgICBjb25zdCB0eHQgPSB0aGlzLnRyYW5zbGF0aW9uW1wiVEFCXCJdIHx8IFwiVGFiXCI7XHJcbiAgICAgICAgaWYgKGNvbmZpZy5hY3RpdmVUYWIgJiYgIXRoaXMuc3RheUFjdGl2ZVRhYikge1xyXG4gICAgICAgICAgdGhpcy5hY3RpdmVUYWIgPSBjb25maWcuYWN0aXZlVGFiO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCB0YWJJZCA9IGNvbmZpZy50YWJJZCB8fCAxO1xyXG4gICAgICAgIGNvbnN0IHRhYkxhYmVsID0gY29uZmlnLnRhYkxhYmVsIHx8IFwiVGFiIDFcIjtcclxuICAgICAgICBsZXQgZGlzcGxheUxhYmVsID0gY29uZmlnLnRhYkxhYmVsIHx8IGAke3R4dH0gMWA7XHJcbiAgICAgICAgaWYgKGNvbmZpZy50YWJMYWJlbCAmJiBjb25maWcudGFiTGFiZWwuc3RhcnRzV2l0aChcIlRhYlwiKSkge1xyXG4gICAgICAgICAgZGlzcGxheUxhYmVsID0gdHh0ICsgY29uZmlnLnRhYkxhYmVsLnNsaWNlKDMpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIXRhYk1hcFt0YWJJZF0pIHtcclxuICAgICAgICAgIHRoaXMudGFiTGlzdC5wdXNoKHtcclxuICAgICAgICAgICAgaWQ6IHRhYklkLFxyXG4gICAgICAgICAgICBsYWJlbDogdGFiTGFiZWwsXHJcbiAgICAgICAgICAgIGRpc3BsYXlMYWJlbDogdGFiTGFiZWxcclxuICAgICAgICAgICAgICA/IHRoaXMudHJ1bmNhdGVUZXh0KGRpc3BsYXlMYWJlbClcclxuICAgICAgICAgICAgICA6IGAke3RoaXMudHJhbnNsYXRpb24uVEFCIHx8IFwiVGFiXCJ9IDFgLFxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgICB0YWJNYXBbdGFiSWRdID0gdHJ1ZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIGlmICghdGhpcy5hY3RpdmVUYWJJZCkge1xyXG4gICAgICAgIC8vIFx0dGhpcy5hY3RpdmVUYWIgPSB0YWJJZDtcclxuICAgICAgICAvLyBcdHRoaXMuYWN0aXZlVGFiSWQgPSB0YWJJZDtcclxuICAgICAgICAvLyBcdHRoaXMuYWN0aXZlVGFiTGFiZWwgPSB0YWJMYWJlbDtcclxuICAgICAgICAvLyB9XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIGlmICghdGhpcy50YWJMaXN0Lmxlbmd0aCkge1xyXG4gICAgICB0aGlzLnRhYkxpc3QgPSBbXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgaWQ6IDEsXHJcbiAgICAgICAgICBsYWJlbDogXCJUYWIgMVwiLFxyXG4gICAgICAgICAgZGlzcGxheUxhYmVsOiBgJHt0aGlzLnRyYW5zbGF0aW9uLlRBQiB8fCBcIlRhYlwifSAxYCxcclxuICAgICAgICB9LFxyXG4gICAgICBdO1xyXG4gICAgICB0aGlzLmFjdGl2ZVRhYklkID0gMTtcclxuICAgICAgdGhpcy5hY3RpdmVUYWJMYWJlbCA9IFwiVGFiIDFcIjtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnRhYkxpc3QgPSB0aGlzLnRhYkxpc3Quc29ydCgoYSwgYikgPT4gYS5pZCAtIGIuaWQpO1xyXG4gICAgY29uc3QgYWN0aXZlVGFiID1cclxuICAgICAgdGhpcy50YWJMaXN0LmZpbmQoKGkpID0+IGkuaWQgPT09IHRoaXMuYWN0aXZlVGFiKSB8fCB0aGlzLnRhYkxpc3RbMF07XHJcbiAgICBpZiAoYWN0aXZlVGFiLmlkKSB7XHJcbiAgICAgIHRoaXMuYWN0aXZlVGFiSWQgPSBhY3RpdmVUYWIuaWQ7XHJcbiAgICAgIHRoaXMuYWN0aXZlVGFiTGFiZWwgPSBhY3RpdmVUYWIubGFiZWw7XHJcbiAgICB9XHJcbiAgICB0aGlzLnN0YXlBY3RpdmVUYWIgPSBmYWxzZTtcclxuICAgIHRoaXMuc2V0UHJldklkKCk7XHJcbiAgICBpZiAoIW5vRGV0ZWN0KSB7XHJcbiAgICAgIHRoaXMuc2V0QWN0aXZlRGFzaGJvYXJkUG9ydGxldHMoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGFzeW5jIGluaXRsYXlvdXQoc2hvdWxkR2V0RmllbGRzID0gZmFsc2UsIG5vRGV0ZWN0ID0gZmFsc2UpIHtcclxuICAgIGlmICghc2hvdWxkR2V0RmllbGRzKSB7XHJcbiAgICAgIHRoaXMuaW5pdFRhYkxpc3Qobm9EZXRlY3QpO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMucG9ydGxldHMgJiYgdGhpcy5wb3J0bGV0cy5sZW5ndGggPiAwKSB7XHJcbiAgICAgIGZvciAobGV0IHBvcnRsZXQgb2YgdGhpcy5wb3J0bGV0cykge1xyXG4gICAgICAgIGNvbnN0IGNvbmZpZzogYW55ID0gSlNPTi5wYXJzZShwb3J0bGV0LmNvbmZpZyk7XHJcbiAgICAgICAgaWYgKHNob3VsZEdldEZpZWxkcykge1xyXG4gICAgICAgICAgLy8gR2V0U2NoZW1h6YWN572u55qE5YiX5pWw5o2u5rqQXHJcbiAgICAgICAgICBjb25zdCBmaWVsZHM6IGFueVtdID0gYXdhaXQgdGhpcy5nZXRBbGxGaWVsZHMocG9ydGxldCk7XHJcbiAgICAgICAgICAvLyDmr4/kuKpwb3J0bGV06Ieq5a6a5LmJ55qE5pWw5o2uXHJcbiAgICAgICAgICBjb25maWcuZmllbGRzLmZvckVhY2goKGZpZWxkKSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChmaWVsZC5mb3JtYXQpIHtcclxuICAgICAgICAgICAgICBmaWVsZHMuZm9yRWFjaCgoX2YpID0+IHtcclxuICAgICAgICAgICAgICAgIGlmIChfZi5jb2xOYW1lID09PSBmaWVsZC5jb2xOYW1lKSB7XHJcbiAgICAgICAgICAgICAgICAgIF9mLmZvcm1hdCA9IGZpZWxkLmZvcm1hdDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjb25zdCBpdGVtID0gZmllbGRzLmZpbmQoKF9mKSA9PiBfZi5jb2xOYW1lID09PSBmaWVsZC5jb2xOYW1lKTtcclxuICAgICAgICAgICAgaWYgKCFpdGVtKSB7XHJcbiAgICAgICAgICAgICAgZmllbGRzLnB1c2goZmllbGQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICAgIGlmIChjb25maWcucG9ydGxldFR5cGUgPT09IFwicGl2b3RcIikge1xyXG4gICAgICAgICAgICAvLyBAdHMtaWdub3JlXHJcbiAgICAgICAgICAgIGNvbmZpZy5maWVsZHMgPSBmaWVsZHM7XHJcbiAgICAgICAgICAgIHBvcnRsZXQuY29uZmlnID0gQ2lyY3VsYXJKU09OLnN0cmluZ2lmeShjb25maWcpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBwb3J0bGV0Lm5ld0lkID0gXCJwb3J0bGV0X1wiICsgdGhpcy5wYmYuR3VpZCgpO1xyXG4gICAgICAgIHBvcnRsZXQuY29sID0gcG9ydGxldC5wb3NYO1xyXG4gICAgICAgIHBvcnRsZXQucm93ID0gcG9ydGxldC5wb3NZO1xyXG4gICAgICAgIHBvcnRsZXQuc2l6ZVggPSBwb3J0bGV0LndpZHRoO1xyXG4gICAgICAgIHBvcnRsZXQuc2l6ZVkgPSBwb3J0bGV0LmhlaWdodDtcclxuICAgICAgfVxyXG5cclxuICAgICAgdGhpcy5pbml0Q2hhckRhdGEobm9EZXRlY3QpO1xyXG4gICAgICB0aGlzLnNldEFjdGl2ZURhc2hib2FyZFBvcnRsZXRzKG5vRGV0ZWN0KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuQWN0aXZlRGFzaGJvYXJkUG9ydGxldHMgPSBbXTtcclxuICAgICAgdGhpcy5kYXNoYm9hcmRMYXlvdXQucmVtb3ZlQWxsKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcclxuICAgICAgdGhpcy5wYmYuZ2V0VHJpZ2dlckRhc2hib2FyZEZpbHRlckNoYW5nZSgpLnN1YnNjcmliZSgoZSkgPT4ge1xyXG4gICAgICAgIGNvbnN0IGRhc2hib2FySWQgPSBlW1wiaWRcIl07XHJcbiAgICAgICAgY29uc3QgbmV3SWQgPSBlW1wibmV3SWRcIl07XHJcbiAgICAgICAgaWYgKGRhc2hib2FySWQgIT09IHRoaXMuZGFzaGJvYXJkLmlkKSB7XHJcbiAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuZmlsdGVyRGF0YShuZXdJZCk7XHJcbiAgICAgIH0pXHJcbiAgICApO1xyXG5cclxuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKFxyXG4gICAgICB0aGlzLmRhc2hib2FyZFNlcnZpY2VcclxuICAgICAgICAuZ2V0Y2hhbmdlbGF5b3V0KClcclxuICAgICAgICAuc3Vic2NyaWJlKCh7IHN0YXR1cywgaWQgPSBcIlwiIH0pID0+IHtcclxuICAgICAgICAgIGlmICh0aGlzLmRhc2hib2FyZCAmJiB0aGlzLmRhc2hib2FyZC5pZCA9PT0gaWQpIHtcclxuICAgICAgICAgICAgY29uc3QgcGFyYW1zID0gc3RhdHVzID09PSBcInRydWVcIiA/IGZhbHNlIDogdHJ1ZTtcclxuICAgICAgICAgICAgdGhpcy5pbml0bGF5b3V0KHBhcmFtcyk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSlcclxuICAgICk7XHJcblxyXG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXHJcbiAgICAgIHRoaXMuZGFzaGJvYXJkU2VydmljZS5lZGl0UHJvcGVydGllcygpLnN1YnNjcmliZSgoeyBzdGF0dXMsIGlkIH0pID0+IHtcclxuICAgICAgICBpZiAoIXRoaXMuZGFzaGJvYXJkIHx8IHRoaXMuZGFzaGJvYXJkLmlkICE9PSBpZCB8fCB0aGlzLnRpbWVyKSB7XHJcbiAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMudGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgIHRoaXMudGltZXIgPSBudWxsO1xyXG4gICAgICAgIH0sIDIwMCk7XHJcbiAgICAgICAgdGhpcy5kaWFsb2cuY2xvc2VBbGwoKTtcclxuICAgICAgICB0aGlzLmRpYWxvZ1xyXG4gICAgICAgICAgLm9wZW4oRGF0YU1hcnROZXdDb21wb25lbnQsIHtcclxuICAgICAgICAgICAgZGF0YToge1xyXG4gICAgICAgICAgICAgIGVkaXQ6IHN0YXR1cyxcclxuICAgICAgICAgICAgICBkYXNoYm9hcmRJZDogdGhpcy51cmxfaWQsXHJcbiAgICAgICAgICAgICAgZGFzaGJvYXJkOiB0aGlzLmRhc2hib2FyZCxcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgaGVpZ2h0OiBcIjg1JVwiLFxyXG4gICAgICAgICAgICB3aWR0aDogXCI1NSVcIixcclxuICAgICAgICAgICAgZGlzYWJsZUNsb3NlOiB0cnVlLFxyXG4gICAgICAgICAgICBwYW5lbENsYXNzOiBcInJlcG9ydC1kaWFsb2dcIixcclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgICAuYWZ0ZXJDbG9zZWQoKVxyXG4gICAgICAgICAgLnN1YnNjcmliZSgoZSkgPT4ge1xyXG4gICAgICAgICAgICBpZiAoIWUpIHtcclxuICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY29uc3QgeyBwdXNoX2J0biwgcG9ydGxldCwgZGFzaGJvYXJkIH0gPSBlO1xyXG4gICAgICAgICAgICB0aGlzLmRhc2hib2FyZCA9IGNsb25lRGVlcChkYXNoYm9hcmQpO1xyXG4gICAgICAgICAgICB0aGlzLnBvcnRsZXQgPSBjbG9uZURlZXAocG9ydGxldCk7XHJcbiAgICAgICAgICAgIHRoaXMucHVzaF9idG4gPSBwdXNoX2J0bjtcclxuICAgICAgICAgICAgdGhpcy5kYXNoYm9hcmRTZXJ2aWNlLnVwZGF0ZURhdGFtYXJ0RW50aXR5Lm5leHQodGhpcy5kYXNoYm9hcmQpO1xyXG4gICAgICAgICAgICB0aGlzLnJlZi5tYXJrRm9yQ2hlY2soKTtcclxuICAgICAgICAgICAgdGhpcy5yZWYuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgIH0pXHJcbiAgICApO1xyXG5cclxuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKFxyXG4gICAgICB0aGlzLmRhc2hib2FyZFNlcnZpY2UuZ2V0RG93bmxvYWREYXNoYm9yZCgpLnN1YnNjcmliZSgoaWQpID0+IHtcclxuICAgICAgICBpZiAodGhpcy5kYXNoYm9hcmQgJiYgdGhpcy5kYXNoYm9hcmQuaWQgPT09IGlkKSB7XHJcbiAgICAgICAgICAvLyB0aGlzLmRvd25sb2FkQWxsKCk7XHJcbiAgICAgICAgICBmb3IgKGxldCBpdGVtIG9mIHRoaXMuQWN0aXZlRGFzaGJvYXJkUG9ydGxldHMpIHtcclxuICAgICAgICAgICAgdGhpcy5kb3dubG9hZChpdGVtKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH0pXHJcbiAgICApO1xyXG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXHJcbiAgICAgIHRoaXMuZGFzaGJvYXJkU2VydmljZS5nZXRhZGRwb3J0bGV0KCkuc3Vic2NyaWJlKChpZCkgPT4ge1xyXG4gICAgICAgIGlmICh0aGlzLmRhc2hib2FyZCAmJiB0aGlzLmRhc2hib2FyZC5pZCA9PT0gaWQpIHtcclxuICAgICAgICAgIGlmICh0aGlzLnBvcnRsZXQpIHtcclxuICAgICAgICAgICAgdGhpcy5wb3J0bGV0cy5wdXNoKHRoaXMucG9ydGxldCk7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgbGV0IGNvbmZpZzogYW55ID1cclxuICAgICAgICAgICAgdGhpcy5wb3J0bGV0LmNvbmZpZyBpbnN0YW5jZW9mIFN0cmluZ1xyXG4gICAgICAgICAgICAgID8gSlNPTi5wYXJzZSh0aGlzLnBvcnRsZXQuY29uZmlnKVxyXG4gICAgICAgICAgICAgIDogdGhpcy5wb3J0bGV0LmNvbmZpZztcclxuICAgICAgICAgIGlmICh0eXBlb2YgY29uZmlnID09PSBcInN0cmluZ1wiKSB7XHJcbiAgICAgICAgICAgIGNvbmZpZyA9IEpTT04ucGFyc2UoY29uZmlnKTtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICBjb25zdCBwb3J0bGV0VHlwZSA9XHJcbiAgICAgICAgICAgIGNvbmZpZy5wb3J0bGV0VHlwZSA9PT0gXCJoaXN0b3JpY2FsSVJSXCJcclxuICAgICAgICAgICAgICA/IGNvbmZpZy5zZWxlY3RlZFZpc3VhbFR5cGVcclxuICAgICAgICAgICAgICA6IGNvbmZpZy5wb3J0bGV0VHlwZTtcclxuXHJcbiAgICAgICAgICAvLyDlj6rmnInmlrDlop7nmoRQb3JsZXTmmK/lm77ooajnsbvmiY3pnIDopoHliJ3lp4vljJZcclxuICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgdGhpcy5wb3J0bGV0ICYmXHJcbiAgICAgICAgICAgIHRoaXMucG9ydGxldC5jb25maWcgJiZcclxuICAgICAgICAgICAgW1wibmV3Y29sdW1uXCIsIFwibmV3bGluZVwiLCBcIm5ld2NvbHVtbmxpbmVcIl0uaW5jbHVkZXMocG9ydGxldFR5cGUpXHJcbiAgICAgICAgICApIHtcclxuICAgICAgICAgICAgdGhpcy5pbml0Q2hhckRhdGEoKTsgLy8g5ou85o6lQ2hhcnTpnIDopoHnlKjnmoTmlbDmja7mupBcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHRoaXMuZ2V0TmV3UG9zaXRpb24oKTtcclxuICAgICAgICAgIHRoaXMuc2V0QWN0aXZlRGFzaGJvYXJkUG9ydGxldHMoKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pXHJcbiAgICApO1xyXG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXHJcbiAgICAgIHRoaXMuZGFzaGJvYXJkU2VydmljZS5nZXRMZWZ0TWVudUJhcigpLnN1YnNjcmliZSgob3BlbikgPT4ge1xyXG4gICAgICAgIGxldCB3aWR0aCA9IHRoaXMucGFuZXNMaXN0Lm5hdGl2ZUVsZW1lbnQub2Zmc2V0V2lkdGg7XHJcbiAgICAgICAgaWYgKG9wZW4pIHtcclxuICAgICAgICAgIHRoaXMucGFuZXNMaXN0Lm5hdGl2ZUVsZW1lbnQuc3R5bGUud2lkdGggPSB3aWR0aCAtIDE5NSArIFwicHhcIjtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5wYW5lc0xpc3QubmF0aXZlRWxlbWVudC5zdHlsZS53aWR0aCA9IHdpZHRoICsgMTk1ICsgXCJweFwiO1xyXG4gICAgICAgIH1cclxuICAgICAgfSlcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBAZGVib3VuY2UoMTAwKVxyXG4gIHByaXZhdGUgZmlsdGVyRGF0YShpZCkge1xyXG4gICAgdGhpcy5jaGFydFVwZGF0ZShpZCk7XHJcbiAgfVxyXG5cclxuICBjaGFydFVwZGF0ZShpZD86IHN0cmluZykge1xyXG4gICAgdGhpcy5oYXNDaGFuZ2VEYXRhVGFibGUgPSB0cnVlO1xyXG4gICAgaWYgKGlkKSB7XHJcbiAgICAgIHRoaXMuZGFzaGJvYXJkU2VydmljZS5jaGFydFVwZGF0ZS5uZXh0KGlkKTtcclxuICAgIH1cclxuICAgIHRoaXMuaW5pdENoYXJEYXRhKCk7IC8vIOaLvOaOpUNoYXJ06ZyA6KaB55So55qE5pWw5o2u5rqQXHJcbiAgfVxyXG5cclxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5mb3JFYWNoKChzdWIpID0+IHtcclxuICAgICAgc3ViLnVuc3Vic2NyaWJlKCk7XHJcbiAgICB9KTtcclxuICB9XHJcbiAgcHJpdmF0ZSBnZXRJbmZvKCkge1xyXG4gICAgdGhpcy50cmFuc2xhdGlvbiA9IEpTT04ucGFyc2UobG9jYWxTdG9yYWdlLmdldEl0ZW0oXCJ0cmFuc2xhdGlvblwiKSk7XHJcbiAgICB0aGlzLmxhbmcgPSB0aGlzLnBiZi5nZXRMYW5ndWFnZVBhcmFtcygpO1xyXG4gICAgdGhpcy5kYXRlUGlwZUZvcm1hdCA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKFwiZGF0ZVBpcGVcIik7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0UG9ybGV0Q29uZmlnKHBvcnRsZXQpIHtcclxuICAgIGlmICghcG9ydGxldC5jb25maWcpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgY29uc3QgY29uZmlnID0gSlNPTi5wYXJzZShwb3J0bGV0LmNvbmZpZyk7XHJcbiAgICBpZiAoIWNvbmZpZy5wdnRhYmxlQ2hhcnRTZXR0aW5nKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIHRoaXMuc2hvd0xlZ2VuZCA9XHJcbiAgICAgICEhY29uZmlnLnB2dGFibGVDaGFydFNldHRpbmcuY2hhcnRTZXR0aW5ncy5sZWdlbmRTZXR0aW5ncy52aXNpYmxlO1xyXG4gICAgdGhpcy5lbmFibGVNdWx0aXBsZUF4aXMgPVxyXG4gICAgICBjb25maWcucHZ0YWJsZUNoYXJ0U2V0dGluZy5jaGFydFNldHRpbmdzLmVuYWJsZU11bHRpcGxlQXhpcztcclxuICAgIHRoaXMucmVmLm1hcmtGb3JDaGVjaygpO1xyXG4gICAgdGhpcy5yZWYuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gIH1cclxuXHJcbiAgdXBkYXRlVGhlbWUoZSkge1xyXG4gICAgY29uc3Qge1xyXG4gICAgICBzZWxlY3RlZFgsXHJcbiAgICAgIHNlbGVjdGVkWSxcclxuICAgICAgc2VsZWN0ZWRTZWNvbmRZLFxyXG4gICAgICBzZWxlY3RlZE11bHRpcGxlcyxcclxuICAgICAgc2VsZWN0VGhlbWUsXHJcbiAgICB9ID0gZTtcclxuICAgIHRoaXMuc2VsZWN0ZWRYID0gc2VsZWN0ZWRYO1xyXG4gICAgdGhpcy5zZWxlY3RlZFkgPSBzZWxlY3RlZFk7XHJcbiAgICB0aGlzLnNlbGVjdGVkU2Vjb25kWSA9IHNlbGVjdGVkU2Vjb25kWTtcclxuICAgIHRoaXMuc2VsZWN0ZWRNdWx0aXBsZXMgPSBzZWxlY3RlZE11bHRpcGxlcztcclxuICAgIHRoaXMuc2VsZWN0VGhlbWUgPSBzZWxlY3RUaGVtZTtcclxuICB9XHJcblxyXG4gIHVwZGF0ZURhc2hib2FyZChlKSB7XHJcbiAgICBjb25zdCB7IHBvcnRsZXRzLCBkYXNoYm9hcmQsIG5vRGV0ZWN0LCBzdGF5QWN0aXZlVGFiIH0gPSBlO1xyXG4gICAgdGhpcy5zdGF5QWN0aXZlVGFiID0gc3RheUFjdGl2ZVRhYjtcclxuICAgIHRoaXMuZGFzaGJvYXJkID0gY2xvbmVEZWVwKGRhc2hib2FyZCk7XHJcbiAgICB0aGlzLnBvcnRsZXRzID0gWy4uLnBvcnRsZXRzXTtcclxuICAgIGlmICghbm9EZXRlY3QpIHtcclxuICAgICAgdGhpcy5yZWYubWFya0ZvckNoZWNrKCk7XHJcbiAgICB9XHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgdGhpcy5kYXNoYm9hcmRTZXJ2aWNlLnVwZGF0ZURhdGFtYXJ0RW50aXR5Lm5leHQoZGFzaGJvYXJkKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgdXBkYXRlUG9ybGV0Q29uZmlnKGUpIHtcclxuICAgIGNvbnN0IHsgbmV3SWQsIGNvbmZpZyB9ID0gZTtcclxuICAgIGNvbnN0IF9jb25maWcgPSBPYmplY3QuYXNzaWduKHt9LCBjb25maWcpO1xyXG4gICAgdGhpcy5wb3J0bGV0LmNvbmZpZyA9IENpcmN1bGFySlNPTi5zdHJpbmdpZnkoX2NvbmZpZyk7XHJcbiAgICB0aGlzLnBvcnRsZXRzLmZvckVhY2goKHBvcnRsZXQsIGkpID0+IHtcclxuICAgICAgaWYgKHBvcnRsZXQubmV3SWQgPT09IG5ld0lkKSB7XHJcbiAgICAgICAgdGhpcy5wb3J0bGV0c1tpXS5jb25maWcgPSBDaXJjdWxhckpTT04uc3RyaW5naWZ5KF9jb25maWcpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICAgIHRoaXMucG9ydGxldHMgPSBbLi4udGhpcy5wb3J0bGV0c107XHJcbiAgICB0aGlzLnNldEFjdGl2ZURhc2hib2FyZFBvcnRsZXRzKCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZWRpdChpdGVtKSB7XHJcbiAgICBjb25zdCBjb25maWcgPSBKU09OLnBhcnNlKGl0ZW0uY29uZmlnKTtcclxuICAgIGNvbnN0IHBvcnRsZXRUeXBlID1cclxuICAgICAgY29uZmlnLnBvcnRsZXRUeXBlID09PSBcImhpc3RvcmljYWxJUlJcIlxyXG4gICAgICAgID8gY29uZmlnLnNlbGVjdGVkVmlzdWFsVHlwZVxyXG4gICAgICAgIDogY29uZmlnLnBvcnRsZXRUeXBlO1xyXG4gICAgaWYgKFtcIm5ld2NvbHVtblwiLCBcIm5ld2xpbmVcIiwgXCJuZXdjb2x1bW5saW5lXCJdLmluY2x1ZGVzKHBvcnRsZXRUeXBlKSkge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkWSA9IGNvbmZpZ1tcInNlbGVjdGVkWVwiXTtcclxuICAgICAgdGhpcy5zZWxlY3RlZFNlY29uZFkgPSBjb25maWcuc2VsZWN0ZWRTZWNvbmRZO1xyXG4gICAgICB0aGlzLnNlbGVjdGVkWCA9IGNvbmZpZ1tcInNlbGVjdGVkWFwiXTtcclxuICAgICAgdGhpcy5zZWxlY3RlZE11bHRpcGxlcyA9IGNvbmZpZ1tcInNlbGVjdGVkTXVsdGlwbGVzXCJdO1xyXG4gICAgICB0aGlzLnNlbGVjdFRoZW1lID0gY29uZmlnW1wic2VsZWN0VGhlbWVcIl07XHJcbiAgICB9XHJcbiAgICB0aGlzLnBvcnRsZXQgPSBjbG9uZURlZXAoaXRlbSk7XHJcbiAgICBpZiAodGhpcy5wdXNoX2J0bikge1xyXG4gICAgICB0aGlzLnNpZGViYXIucG9ydGxldCA9IHRoaXMucG9ydGxldDtcclxuICAgIH1cclxuICAgIHRoaXMuZGFzaGJvYXJkX3NpZGViYXIgPSB0cnVlO1xyXG4gICAgdGhpcy5wdXNoX2J0biA9IHRydWU7XHJcbiAgICB0aGlzLmZpZ3VyZUNvZGUgPSBpdGVtLmZpZ3VyZUNvZGU7XHJcbiAgICB0aGlzLnRhYmFjdGl2ZSA9IGZhbHNlO1xyXG4gICAgdGhpcy5yZWYuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgdGhpcy5kYXNoYm9hcmRTZXJ2aWNlLnBvcnRsZXRFZGl0Lm5leHQodGhpcy51cmxfaWQpO1xyXG4gIH1cclxuXHJcbiAgQGRlYm91bmNlKDMwMClcclxuICBHZXRnYWRnZXRUaXRsZShjb25maWcpIHtcclxuICAgIGlmIChjb25maWcgJiYgY29uZmlnICE9PSBcIm51bGxcIikge1xyXG4gICAgICBsZXQgY29uZmlnXyA9IEpTT04ucGFyc2UoY29uZmlnKTtcclxuICAgICAgcmV0dXJuIGNvbmZpZ18uZ2FkZ2V0VGl0bGU7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gXCJcIjtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXRQb3J0bGV0VHlwZShpdGVtKSB7XHJcbiAgICBjb25zdCBjb25maWcgPSBpdGVtICYmIGl0ZW0uY29uZmlnID8gSlNPTi5wYXJzZShpdGVtLmNvbmZpZykgOiB7fTtcclxuICAgIGlmIChjb25maWcucG9ydGxldFR5cGUpIHtcclxuICAgICAgaWYgKGNvbmZpZy5wb3J0bGV0VHlwZSA9PT0gXCJoaXN0b3JpY2FsSVJSXCIpIHtcclxuICAgICAgICByZXR1cm4gY29uZmlnLnNlbGVjdGVkVmlzdWFsVHlwZTtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gY29uZmlnLnBvcnRsZXRUeXBlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGRlbGV0ZShpdGVtKSB7XHJcbiAgICBjb25zdCBpbmRleCA9IHRoaXMucG9ydGxldHMuZmluZEluZGV4KCh4KSA9PiB4Lm5ld0lkID09PSBpdGVtLm5ld0lkKTtcclxuICAgIHRoaXMuZGFzaGJvYXJkTGF5b3V0LnJlbW92ZVBhbmVsKGl0ZW0ubmV3SWQpO1xyXG4gICAgdGhpcy5wb3J0bGV0cy5zcGxpY2UoaW5kZXgsIDEpO1xyXG4gICAgdGhpcy5zZXRBY3RpdmVEYXNoYm9hcmRQb3J0bGV0cygpO1xyXG4gICAgdGhpcy5nZXROZXdQb3NpdGlvbigpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGNvcHlQb3J0bGV0KGl0ZW0pIHtcclxuICAgIGNvbnN0IHBvcnRsZXQgPSB7IC4uLml0ZW0gfTtcclxuICAgIHBvcnRsZXQuaWQgPSBcIjAwMDAwMDAwLTAwMDAtMDAwMC0wMDAwLTAwMDAwMDAwMDAwMFwiO1xyXG4gICAgcG9ydGxldC5uZXdJZCA9IFwicG9ydGxldF9cIiArIHRoaXMucGJmLkd1aWQoKTtcclxuICAgIC8vIOWkhOeQhiAxLuWkjeWItuWIq+eahOWkjeWItuS9kyAgMi7mlrDlu7rnmoTkuKrkvZMgMy7lt7LlrZjlnKjnmoTkuKrkvZNcclxuICAgIHBvcnRsZXQuY29weUlkID0gcG9ydGxldC5jb3B5SWRcclxuICAgICAgPyBwb3J0bGV0LmNvcHlJZFxyXG4gICAgICA6IGl0ZW0uaWQgPT09IFwiMDAwMDAwMDAtMDAwMC0wMDAwLTAwMDAtMDAwMDAwMDAwMDAwXCJcclxuICAgICAgPyBpdGVtLm5ld0lkXHJcbiAgICAgIDogaXRlbS5pZDtcclxuICAgIHRoaXMuRGFzaGJvYXJkUG9ybGV0c1NlcnZpY2UucG9ydGxldERhdGFfTmV3W3RoaXMuZGFzaGJvYXJkLmlkXVtcclxuICAgICAgcG9ydGxldC5uZXdJZFxyXG4gICAgXSA9IGNsb25lRGVlcChcclxuICAgICAgdGhpcy5EYXNoYm9hcmRQb3JsZXRzU2VydmljZS5wb3J0bGV0RGF0YV9OZXdbdGhpcy5kYXNoYm9hcmQuaWRdW1xyXG4gICAgICAgIHBvcnRsZXQuY29weUlkXHJcbiAgICAgIF1cclxuICAgICk7XHJcbiAgICB0aGlzLnBvcnRsZXRzLnB1c2gocG9ydGxldCk7XHJcbiAgICB0aGlzLnNldEFjdGl2ZURhc2hib2FyZFBvcnRsZXRzKCk7XHJcbiAgICB0aGlzLmdldE5ld1Bvc2l0aW9uKCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0QXNvZmRhdGUoaXRlbSkge1xyXG4gICAgcmV0dXJuIEpTT04ucGFyc2UoaXRlbS5jb25maWcpLmFzT2ZEYXRlO1xyXG4gIH1cclxuICBwdWJsaWMgZ2V0Q3VycmVuY3koY29uZmlnKSB7XHJcbiAgICByZXR1cm4gSlNPTi5wYXJzZShjb25maWcpLmN1cnJlbmN5Q29kZTtcclxuICB9XHJcbiAgcHVibGljIGdldEZpZ3VyZWNvZGUoZmlndXJlQ29kZSkge1xyXG4gICAgc3dpdGNoIChmaWd1cmVDb2RlKSB7XHJcbiAgICAgIGNhc2UgXCJUYXNrc1wiOlxyXG4gICAgICAgIHJldHVybiAxO1xyXG4gICAgICBjYXNlIFwiRnVuZExpc3RcIjpcclxuICAgICAgICByZXR1cm4gMjtcclxuICAgICAgY2FzZSBcIklSUlwiOlxyXG4gICAgICAgIHJldHVybiAzO1xyXG4gICAgICBjYXNlIFwiTm90ZXNcIjpcclxuICAgICAgICByZXR1cm4gNDtcclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICByZXR1cm4gMDtcclxuICAgIH1cclxuICB9XHJcbiAgcHVibGljIGdldFRhYmxlTmFtZShpdGVtKSB7XHJcbiAgICBsZXQgY29uZmlnID0gaXRlbS5jb25maWcgPyBKU09OLnBhcnNlKGl0ZW0uY29uZmlnKSA6IHt9O1xyXG4gICAgaWYgKGNvbmZpZy5wb3J0bGV0VHlwZSkge1xyXG4gICAgICBsZXQgdHlwZUxpc3QgPSBbXCJ0YWJsZVwiLCBcImZpbmFuY2lhbFRhYmxlXCIsIFwidHJhbnNwb3NlXCIsIFwicGl2b3RcIl07XHJcbiAgICAgIGxldCBpZHggPSB0eXBlTGlzdC5pbmRleE9mKGNvbmZpZy5wb3J0bGV0VHlwZSk7XHJcbiAgICAgIHJldHVybiBpZHggPiAtMSA/IHRydWUgOiBmYWxzZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBwdXNoU2xpZGVyKCkge1xyXG4gICAgdGhpcy5wdXNoX2J0biA9ICF0aGlzLnB1c2hfYnRuO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRGaWd1cmVDb2RlKGZpZ3VyZUNvZGUpIHtcclxuICAgIGxldCBjb2RlQXJyID0gW1wiVGFza3NcIiwgXCJGdW5kTGlzdFwiLCBcIklSUlwiLCBcIk5vdGVzXCJdO1xyXG4gICAgbGV0IGkgPSBjb2RlQXJyLmluZGV4T2YoZmlndXJlQ29kZSk7XHJcbiAgICByZXR1cm4gaSA+IC0xID8gdHJ1ZSA6IGZhbHNlO1xyXG4gIH1cclxuICB4O1xyXG4gIHk7XHJcblxyXG4gIHB1YmxpYyBnZXREYXNoYm9hcmQoKSB7XHJcbiAgICB0aGlzLnVybCA9IFwiZGFzaGJvYXJkRGV0YWlsXCI7XHJcbiAgICBsZXQgdXJsX2FyciA9IHRoaXMucGJmLmdldFJvdXRlclVybCgpLnNwbGl0KFwiP1wiKTtcclxuICAgIHRoaXMudXJsX2lkID0gdGhpcy5wYmYuZ2V0VXJsSWQodXJsX2FyclswXSk7XHJcbiAgICB0aGlzLnVybF90eXBlID1cclxuICAgICAgdXJsX2FyclsxXSA9PSBcImRhc2hib2FyZFR5cGU9Y3VzdG9taXplZEJldGFcIlxyXG4gICAgICAgID8gXCJjdXN0b21pemVkQmV0YVwiXHJcbiAgICAgICAgOiB1cmxfYXJyWzFdID09IFwiZGFzaGJvYXJkVHlwZT1zaGFyZWRCZXRhXCJcclxuICAgICAgICA/IFwic2hhcmVkQmV0YVwiXHJcbiAgICAgICAgOiBcIlwiO1xyXG4gICAgdGhpcy5EYXNoYm9hcmRQb3JsZXRzU2VydmljZS5HZXREYXNoYm9hcmRWMShcclxuICAgICAgdGhpcy51cmxfaWQsXHJcbiAgICAgIHRydWUsXHJcbiAgICAgIChyZXMsIHBvcnRsZXRzID0gW10pID0+IHtcclxuICAgICAgICB0aGlzLmhhc0luaXQgPSB0cnVlO1xyXG4gICAgICAgIGlmICghcmVzKSB7XHJcbiAgICAgICAgICB0aGlzLnBiZi5wYWdlTG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgdGhpcy5wYmYucGFnZUxvYWRpbmdfLm5leHQodHJ1ZSk7XHJcbiAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMucG9ydGxldHMgPSBbLi4ucG9ydGxldHNdO1xyXG4gICAgICAgIHRoaXMuaW5pdGxheW91dChmYWxzZSwgdHJ1ZSk7XHJcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLmRhc2hib2FyZFNlcnZpY2UudXBkYXRlRGF0YW1hcnRFbnRpdHkubmV4dCh0aGlzLmRhc2hib2FyZCk7XHJcbiAgICAgICAgICAvLyB0aGlzLmNoYXJ0VXBkYXRlKCk7XHJcbiAgICAgICAgICB0aGlzLnBiZi5wYWdlTG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgdGhpcy5wYmYucGFnZUxvYWRpbmdfLm5leHQodHJ1ZSk7XHJcbiAgICAgICAgfSwgNTAwKTtcclxuICAgICAgfSxcclxuICAgICAgZmFsc2UsXHJcbiAgICAgIChyZXMpID0+IHtcclxuICAgICAgICB0aGlzLmRhc2hib2FyZCA9IE9iamVjdC5hc3NpZ24oe30sIHJlcyk7XHJcbiAgICAgICAgaWYgKHRoaXMuZGFzaGJvYXJkTGF5b3V0KSB7XHJcbiAgICAgICAgICB0aGlzLmRhc2hib2FyZExheW91dC5yZWZyZXNoKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMucmVmLm1hcmtGb3JDaGVjaygpO1xyXG4gICAgICAgIHRoaXMucmVmLmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgfVxyXG4gICAgKTtcclxuICB9XHJcbiAgcHVibGljIHJvdXRlclBhZ2UoKSB7XHJcbiAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKFwiL3BhZ2VzL2Rhc2hib2FyZC9kYXNoYm9hcmRsaXN0XCIpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGRpc3BsYXlJY29uUHJvbXB0KGl0ZW0pIHtcclxuICAgIHJldHVybiBKU09OLnBhcnNlKGl0ZW0uY29uZmlnKS5wb3J0bGV0VHlwZSB8fFxyXG4gICAgICB0aGlzLmdldEZpZ3VyZUNvZGUoaXRlbS5maWd1cmVDb2RlKVxyXG4gICAgICA/IGZhbHNlXHJcbiAgICAgIDogdHJ1ZTtcclxuICB9XHJcbiAgcHVibGljIGFzeW5jIGNvbmZpZ3VyYXRpb25zKGl0ZW0sIGV2ZW50KSB7XHJcbiAgICBjb25zdCBwb3J0bGV0VHlwZSA9IHRoaXMuZ2V0UG9ydGxldFR5cGUoaXRlbSk7XHJcbiAgICBzd2l0Y2ggKHBvcnRsZXRUeXBlKSB7XHJcbiAgICAgIGNhc2UgXCJ0YWJsZVwiOlxyXG4gICAgICAgIGNvbnN0IHRhYmxlID0gZmluZChcclxuICAgICAgICAgICh0aGlzLnRhYmxlIGFzIGFueSkuX3Jlc3VsdHMsXHJcbiAgICAgICAgICAoZWwpID0+IGVsLnBvcnRsZXQubmV3SWQgPT09IGl0ZW0ubmV3SWRcclxuICAgICAgICApO1xyXG4gICAgICAgIGlmIChcclxuICAgICAgICAgIHRhYmxlLmdyaWQgJiZcclxuICAgICAgICAgIHRhYmxlLmdyaWQuZ2V0Q3VycmVudFZpZXdSZWNvcmRzKCkgJiZcclxuICAgICAgICAgIHRhYmxlLmdyaWQuZ2V0Q3VycmVudFZpZXdSZWNvcmRzKCkubGVuZ3RoXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICAvLyBsZXQgbWFzazogYW55ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIiNwaXZvdC10YWJsZS1tYXNrXCIpO1xyXG4gICAgICAgICAgLy8gaWYgKG1hc2spIG1hc2suc3R5bGUuZGlzcGxheSA9IFwiYmxvY2tcIjtcclxuICAgICAgICAgIGxldCBfeSA9IDA7XHJcbiAgICAgICAgICBpZiAoZXZlbnQgJiYgZXZlbnQudGFyZ2V0KSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHsgeSB9ID0gZXZlbnQudGFyZ2V0LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xyXG4gICAgICAgICAgICBpZiAoZG9jdW1lbnQuYm9keS5jbGllbnRIZWlnaHQgLSB5IDwgNDAwKSB7XHJcbiAgICAgICAgICAgICAgX3kgPSAtNDE1O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB0YWJsZS5ncmlkICYmXHJcbiAgICAgICAgICAgIHRhYmxlLmdyaWQuY29sdW1uQ2hvb3Nlck1vZHVsZSAmJlxyXG4gICAgICAgICAgICB0YWJsZS5ncmlkLmNvbHVtbkNob29zZXJNb2R1bGUub3BlbkNvbHVtbkNob29zZXIoMjAwLCBfeSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIFwibmV3Y2hhcnRcIjpcclxuICAgICAgY2FzZSBcInBpdm90XCI6XHJcbiAgICAgICAgY29uc3QgcGl2b3QgPSBmaW5kKFxyXG4gICAgICAgICAgKHRoaXMucGl2b3QgYXMgYW55KS5fcmVzdWx0cyxcclxuICAgICAgICAgIChlbCkgPT4gZWwucG9ydGxldC5uZXdJZCA9PT0gaXRlbS5uZXdJZFxyXG4gICAgICAgICk7XHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgcGl2b3QuZmllbGRsaXN0T2JqLmRpYWxvZ1JlbmRlcmVyICYmXHJcbiAgICAgICAgICBwaXZvdC5maWVsZGxpc3RPYmouZGlhbG9nUmVuZGVyZXIuZmllbGRMaXN0RGlhbG9nXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICBwaXZvdC5maWVsZGxpc3RPYmouZGlhbG9nUmVuZGVyZXIuZmllbGRMaXN0RGlhbG9nLnNob3coKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgXCJ0cmFuc3Bvc2VcIjpcclxuICAgICAgICBjb25zdCB0cmFuc3Bvc2UgPSBmaW5kKFxyXG4gICAgICAgICAgKHRoaXMudHJhbnNwb3NlIGFzIGFueSkuX3Jlc3VsdHMsXHJcbiAgICAgICAgICAoZWwpID0+IGVsLnBvcnRsZXQubmV3SWQgPT09IGl0ZW0ubmV3SWRcclxuICAgICAgICApO1xyXG4gICAgICAgIC8vIOW8gOWQr+mAgumFjSDmiYvliqjnvKnlsI9cclxuICAgICAgICB0cmFuc3Bvc2UuZ3JpZC5jb2x1bW5DaG9vc2VyTW9kdWxlLnNob3dDdXN0b21Db2x1bW5DaG9vc2VyKCk7XHJcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICBsZXQgZGxnOiBhbnkgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFxyXG4gICAgICAgICAgICBcIi5lLXJlc2NvbHVtbmNob29zZXJkaXYuZS1yZXNwb25zaXZlLWRpYWxvZ1wiXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgICAgaWYgKGRsZykge1xyXG4gICAgICAgICAgICBkbGcuc3R5bGUub3BhY2l0eSA9IDE7XHJcbiAgICAgICAgICAgIGRsZy5zdHlsZS5zZXRQcm9wZXJ0eShcIndpZHRoXCIsIFwiMzAwcHhcIiwgXCJpbXBvcnRhbnRcIik7XHJcbiAgICAgICAgICAgIGRsZy5zdHlsZS5zZXRQcm9wZXJ0eShcImhlaWdodFwiLCBcIjM1MHB4XCIsIFwiaW1wb3J0YW50XCIpO1xyXG4gICAgICAgICAgICBkbGcuc3R5bGUuc2V0UHJvcGVydHkoXCJwb3NpdGlvblwiLCBcImFic29sdXRlXCIsIFwiaW1wb3J0YW50XCIpO1xyXG4gICAgICAgICAgICBkbGcuc3R5bGUuc2V0UHJvcGVydHkoXHJcbiAgICAgICAgICAgICAgXCJsZWZ0XCIsXHJcbiAgICAgICAgICAgICAgZXZlbnQuY2xpZW50WCAtIDEzNSArIFwicHhcIixcclxuICAgICAgICAgICAgICBcImltcG9ydGFudFwiXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIGRsZy5zdHlsZS5zZXRQcm9wZXJ0eShcclxuICAgICAgICAgICAgICBcInRvcFwiLFxyXG4gICAgICAgICAgICAgIGV2ZW50LmNsaWVudFkgKyAzMCArIFwicHhcIixcclxuICAgICAgICAgICAgICBcImltcG9ydGFudFwiXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSwgMCk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNldFByZXZJZCgpIHtcclxuICAgIHRoaXMudGFiTGlzdC5mb3JFYWNoKCh0YWIsIGkpID0+IHtcclxuICAgICAgaWYgKHRhYi5pZCA9PT0gdGhpcy5hY3RpdmVUYWIpIHtcclxuICAgICAgICBpZiAodGhpcy50YWJMaXN0W2kgLSAxXSkge1xyXG4gICAgICAgICAgdGhpcy5wcmV2SWQgPSB0aGlzLnRhYkxpc3RbaSAtIDFdLmlkO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBkcm9wKGUpIHtcclxuICAgIGNvbnN0IHsgcHJldmlvdXNJbmRleCwgY3VycmVudEluZGV4IH0gPSBlO1xyXG4gICAgY29uc3QgcHJldklkID0gdGhpcy50YWJMaXN0W3ByZXZpb3VzSW5kZXhdLmlkO1xyXG4gICAgY29uc3QgY3VycklkID0gdGhpcy50YWJMaXN0W2N1cnJlbnRJbmRleF0uaWQ7XHJcblxyXG4gICAgZm9yIChsZXQgaSA9IHRoaXMudGFiTGlzdC5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xyXG4gICAgICBjb25zdCB0YWJJZCA9IHRoaXMudGFiTGlzdFtpXS5pZDtcclxuICAgICAgaWYgKHRhYklkID09PSBwcmV2SWQpIHtcclxuICAgICAgICB0aGlzLnRhYkxpc3RbaV0uaWQgPSBjdXJySWQ7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHRhYklkID09PSBjdXJySWQpIHtcclxuICAgICAgICB0aGlzLnRhYkxpc3RbaV0uaWQgPSBwcmV2SWQ7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGZvciAobGV0IGkgPSB0aGlzLnBvcnRsZXRzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XHJcbiAgICAgIGNvbnN0IGNvbmZpZyA9IEpTT04ucGFyc2UodGhpcy5wb3J0bGV0c1tpXS5jb25maWcpO1xyXG4gICAgICBjb25zdCB0YWJJZCA9IGNvbmZpZy50YWJJZDtcclxuICAgICAgaWYgKHRhYklkID09PSBwcmV2SWQpIHtcclxuICAgICAgICBjb25maWcudGFiSWQgPSBjdXJySWQ7XHJcbiAgICAgICAgdGhpcy5wb3J0bGV0c1tpXS5jb25maWcgPSBKU09OLnN0cmluZ2lmeShjb25maWcpO1xyXG4gICAgICB9XHJcbiAgICAgIGlmICh0YWJJZCA9PT0gY3VycklkKSB7XHJcbiAgICAgICAgY29uZmlnLnRhYklkID0gcHJldklkO1xyXG4gICAgICAgIHRoaXMucG9ydGxldHNbaV0uY29uZmlnID0gSlNPTi5zdHJpbmdpZnkoY29uZmlnKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuYWN0aXZlVGFiID09PSBjdXJySWQpIHtcclxuICAgICAgdGhpcy5hY3RpdmVUYWIgPSBwcmV2SWQ7XHJcbiAgICB9IGVsc2UgaWYgKHRoaXMuYWN0aXZlVGFiID09PSBwcmV2SWQpIHtcclxuICAgICAgdGhpcy5hY3RpdmVUYWIgPSBjdXJySWQ7XHJcbiAgICB9XHJcbiAgICB0aGlzLnNldFByZXZJZCgpO1xyXG4gICAgW3RoaXMudGFiTGlzdFtwcmV2aW91c0luZGV4XSwgdGhpcy50YWJMaXN0W2N1cnJlbnRJbmRleF1dID0gW1xyXG4gICAgICB0aGlzLnRhYkxpc3RbY3VycmVudEluZGV4XSxcclxuICAgICAgdGhpcy50YWJMaXN0W3ByZXZpb3VzSW5kZXhdLFxyXG4gICAgXTtcclxuICAgIHRoaXMudGFiTGlzdCA9IFsuLi50aGlzLnRhYkxpc3RdO1xyXG5cclxuICAgIHRoaXMucmVmLm1hcmtGb3JDaGVjaygpO1xyXG4gIH1cclxuICBjbG9zZUFsbCgpIHtcclxuICAgIHRoaXMucGJmLnBhZ2VMb2FkaW5nID0gdHJ1ZTtcclxuICAgIHRoaXMucGJmLnBhZ2VMb2FkaW5nXy5uZXh0KHRydWUpO1xyXG4gICAgdGhpcy5yZWYubWFya0ZvckNoZWNrKCk7XHJcbiAgICBsZXQgaGFzQ29uZmlnID0gZmFsc2U7XHJcbiAgICB0aGlzLkFjdGl2ZURhc2hib2FyZFBvcnRsZXRzLmZvckVhY2goKHBvcnRsZXQpID0+IHtcclxuICAgICAgY29uc3QgcG9ydGxldFR5cGUgPSB0aGlzLmdldFBvcnRsZXRUeXBlKHBvcnRsZXQpO1xyXG4gICAgICBzd2l0Y2ggKHBvcnRsZXRUeXBlKSB7XHJcbiAgICAgICAgY2FzZSBcInBpdm90XCI6XHJcbiAgICAgICAgY2FzZSBcIm5ld2NoYXJ0XCI6XHJcbiAgICAgICAgICBjb25zdCBkb20gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcclxuICAgICAgICAgICAgYCR7cG9ydGxldC5uZXdJZH1fRGVmZXJVcGRhdGVCdXR0b24yYFxyXG4gICAgICAgICAgKTtcclxuICAgICAgICAgIGlmIChkb20pIHtcclxuICAgICAgICAgICAgaGFzQ29uZmlnID0gdHJ1ZTtcclxuICAgICAgICAgICAgZG9tLmNsaWNrKCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIFwidGFibGVcIjpcclxuICAgICAgICAgIGNvbnN0IGNhbmNlbEJ0biA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCIuZS1jYy1jbmJ0blwiKTtcclxuICAgICAgICAgIGlmIChjYW5jZWxCdG4pIHtcclxuICAgICAgICAgICAgaGFzQ29uZmlnID0gdHJ1ZTtcclxuICAgICAgICAgICAgLy8gQHRzLWlnbm9yZVxyXG4gICAgICAgICAgICBjYW5jZWxCdG4uY2xpY2soKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICAgIGlmIChoYXNDb25maWcpIHtcclxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5wYmYucGFnZUxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLnBiZi5wYWdlTG9hZGluZ18ubmV4dCh0cnVlKTtcclxuICAgICAgICB0aGlzLnJlZi5tYXJrRm9yQ2hlY2soKTtcclxuICAgICAgfSwgNDAwKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMucGJmLnBhZ2VMb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgIHRoaXMucGJmLnBhZ2VMb2FkaW5nXy5uZXh0KHRydWUpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGhhc0NvbmZpZztcclxuICB9XHJcblxyXG4gIHB1YmxpYyBkb3dubG9hZEFsbCgpIHtcclxuICAgIGNvbnN0IGRpYWxvZ1JlZiA9IHRoaXMuZGlhbG9nLm9wZW4oUGFuZURvd25sb2FkQ29tcG9uZW50LCB7XHJcbiAgICAgIGRhdGE6IHtcclxuICAgICAgICBwb3J0bGV0czogdGhpcy5wb3J0bGV0cyxcclxuICAgICAgICBkYXNoYm9hcmQ6IHRoaXMuZGFzaGJvYXJkLFxyXG4gICAgICB9LFxyXG4gICAgICBoZWlnaHQ6IFwiODUwcHhcIixcclxuICAgICAgd2lkdGg6IFwiNTYycHhcIixcclxuICAgIH0pO1xyXG4gICAgZGlhbG9nUmVmLmFmdGVyQ2xvc2VkKCkuc3Vic2NyaWJlKChyZXMpID0+IHt9KTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBkb3dubG9hZChpdGVtKSB7XHJcbiAgICBjb25zdCBwb3J0bGV0VHlwZSA9IHRoaXMuZ2V0UG9ydGxldFR5cGUoaXRlbSk7XHJcbiAgICBjb25zdCB0aXRsZSA9IHRoaXMuR2V0Z2FkZ2V0VGl0bGUoaXRlbS5jb25maWcpO1xyXG4gICAgc3dpdGNoIChwb3J0bGV0VHlwZSkge1xyXG4gICAgICBjYXNlIFwidGFibGVcIjpcclxuICAgICAgICB0aGlzLmRvd25sb2FkVGFibGUoaXRlbSwgdGl0bGUpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIFwibmV3Y2hhcnRcIjpcclxuICAgICAgY2FzZSBcInBpdm90XCI6XHJcbiAgICAgICAgY29uc3QgcGl2b3QgPSBmaW5kKFxyXG4gICAgICAgICAgKHRoaXMucGl2b3QgYXMgYW55KS5fcmVzdWx0cyxcclxuICAgICAgICAgIChlbCkgPT4gZWwucG9ydGxldC5uZXdJZCA9PT0gaXRlbS5uZXdJZFxyXG4gICAgICAgICk7XHJcbiAgICAgICAgcGl2b3QuaGVhZFJvd1NwYW4gPSAwOyAvL+mHjee9ruWvvOWHumhlYWRlcuWkhOeQhlxyXG4gICAgICAgIHBpdm90LmhlYWRSb3dDb3VudCA9IDA7IC8v6YeN572u5a+85Ye6aGVhZGVy5aSE55CGXHJcbiAgICAgICAgY29uc3QgZXhjZWxFeHBvcnRQcm9wZXJ0aWVzX3Bpdm90OiBFeGNlbEV4cG9ydFByb3BlcnRpZXMgPSB7XHJcbiAgICAgICAgICBmaWxlTmFtZTogdGl0bGVcclxuICAgICAgICAgICAgPyB0aXRsZSArIFwiLnhsc3hcIlxyXG4gICAgICAgICAgICA6IFwiUGl2b3QtXCIgKyBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCkgKyBcIi54bHN4XCIsXHJcbiAgICAgICAgfTtcclxuICAgICAgICBpZiAocGl2b3QucGl2b3RPYmouZGF0YVNvdXJjZVNldHRpbmdzLmZvcm1hdFNldHRpbmdzKSB7XHJcbiAgICAgICAgICBwaXZvdC5waXZvdE9iai5kYXRhU291cmNlU2V0dGluZ3MuZm9ybWF0U2V0dGluZ3MuZm9yRWFjaChcclxuICAgICAgICAgICAgKHNldHRpbmcpID0+IHtcclxuICAgICAgICAgICAgICAvLyBzeW5jZnVzaW9uIGZvcm1hdCB0cmFuc2Zvcm0gdG8gZXhjZWwgZm9ybWF0XHJcbiAgICAgICAgICAgICAgY29uc3QgbWFwID0ge1xyXG4gICAgICAgICAgICAgICAgXCIjLCMjIywsLjA7KCMsIyMjLCwuMClcIjogJzAuMCwsXCJcIjsoMC4wLCwpJyxcclxuICAgICAgICAgICAgICAgICcwLjAsLFwiXCI7KDAuMCwsKSc6IFwiIywjIyMsLC4wOygjLCMjIywsLjApXCIsXHJcbiAgICAgICAgICAgICAgICBcIiMsIyMjLCw7KCMsIyMjLCwpXCI6ICcwLCxcIlwiOygwLCwpJyxcclxuICAgICAgICAgICAgICAgICcwLCxcIlwiOygwLCwpJzogXCIjLCMjIywsOygjLCMjIywsKVwiLFxyXG4gICAgICAgICAgICAgICAgXCIjLCMjIywsLjAwOygjLCMjIywsLjAwKVwiOiAnMC4wMCwsXCJcIjsoMC4wMCwsKScsXHJcbiAgICAgICAgICAgICAgICAnMC4wMCwsXCJcIjsoMC4wMCwsKSc6IFwiIywjIyMsLC4wMDsoIywjIyMsLC4wMClcIixcclxuICAgICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgICBpZiAobWFwW3NldHRpbmcuZm9ybWF0XSkge1xyXG4gICAgICAgICAgICAgICAgc2V0dGluZy5mb3JtYXQgPSBtYXBbc2V0dGluZy5mb3JtYXRdO1xyXG4gICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgIHNldHRpbmcuZm9ybWF0ID0gbWFwW3NldHRpbmcuZm9ybWF0XTtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5yZWYubWFya0ZvckNoZWNrKCk7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMucmVmLmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy51cGRhdGVGb3JtYXQoXHJcbiAgICAgICAgICBwaXZvdC5waXZvdE9iai5ncmlkLmNvbHVtbnMgYXMgQ29sdW1uTW9kZWxbXSxcclxuICAgICAgICAgIHBpdm90LnBpdm90T2JqXHJcbiAgICAgICAgKTtcclxuICAgICAgICBwaXZvdC5waXZvdE9iai5leGNlbEV4cG9ydChleGNlbEV4cG9ydFByb3BlcnRpZXNfcGl2b3QpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICAvLyBjYXNlIFwidHJhbnNwb3NlXCI6XHJcbiAgICAgIC8vIFx0Ly8gY29uc3QgdHJhbnNwb3NlID0gZmluZChcclxuICAgICAgLy8gXHQvLyBcdCh0aGlzLnRyYW5zcG9zZSBhcyBhbnkpLl9yZXN1bHRzLFxyXG4gICAgICAvLyBcdC8vIFx0KGVsKSA9PiBlbC5wb3J0bGV0Lm5ld0lkID09PSBpdGVtLm5ld0lkXHJcbiAgICAgIC8vIFx0Ly8gKTtcclxuICAgICAgLy8gXHRicmVhaztcclxuICAgICAgY2FzZSBcIm5ld2NvbHVtblwiOlxyXG4gICAgICBjYXNlIFwibmV3bGluZVwiOlxyXG4gICAgICBjYXNlIFwibmV3Y29sdW1ubGluZVwiOlxyXG4gICAgICAgIGNvbnN0IGNoYXJ0SWR4ID0gdGhpcy5nZXRDaGFydEluZGV4SW5BbGwoaXRlbSk7XHJcbiAgICAgICAgY29uc3Qgc2VsZWN0ZWRDb21wb25lbnQgPSB0aGlzLm5ld0NoYXJ0LnRvQXJyYXkoKVtjaGFydElkeF07XHJcbiAgICAgICAgc2VsZWN0ZWRDb21wb25lbnQuZXhwb3J0Q2hhcnQoKTtcclxuICAgICAgICBicmVhaztcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vIOagueaNrmlkeOiOt+WPlueCueWHu+WbvuihqOWcqOWbvuihqOWIl+ihqOmHjOeahOecn+ato+mhuuW6j1xyXG4gIGdldENoYXJ0SW5kZXhJbkFsbChpdGVtKSB7XHJcbiAgICBjb25zdCBjaGFyQXJyID0gdGhpcy5BY3RpdmVEYXNoYm9hcmRQb3J0bGV0cy5maWx0ZXIoKGUpID0+IHtcclxuICAgICAgcmV0dXJuIFtcIm5ld2NvbHVtblwiLCBcIm5ld2xpbmVcIiwgXCJuZXdjb2x1bW5saW5lXCJdLmluY2x1ZGVzKFxyXG4gICAgICAgIEpTT04ucGFyc2UoZS5jb25maWcpLnBvcnRsZXRUeXBlXHJcbiAgICAgICk7XHJcbiAgICB9KTtcclxuICAgIGxldCByZXN1bHRJZHggPSAwO1xyXG4gICAgaWYgKGNoYXJBcnIubGVuZ3RoID4gMCkge1xyXG4gICAgICBjaGFyQXJyLmZvckVhY2goKGUsIGlkeCkgPT4ge1xyXG4gICAgICAgIGlmIChlLm5ld0lkID09IGl0ZW0ubmV3SWQpIHtcclxuICAgICAgICAgIHJlc3VsdElkeCA9IGlkeDtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHJlc3VsdElkeDtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBkb3dubG9hZFRhYmxlKGl0ZW0sIHRpdGxlKSB7XHJcbiAgICAvLyBUYWJsZSDkuIvovb3lhajpg6jmlbDmja5cclxuICAgIGxldCBjb25maWcgPSBKU09OLnBhcnNlKGl0ZW0uY29uZmlnKTtcclxuICAgIGxldCBwYWdlU2V0dGluZyA9IE9iamVjdC5hc3NpZ24oXHJcbiAgICAgIHtcclxuICAgICAgICBjdXJyZW50UGFnZTogMSxcclxuICAgICAgICBwYWdlU2l6ZTogOTk5OTk5OSxcclxuICAgICAgfSxcclxuICAgICAgY29uZmlnICYmIGNvbmZpZy50YWJsZVNvcnRTZXR0aW5nXHJcbiAgICApO1xyXG4gICAgbGV0IHBhcmFtcyA9IHRoaXMuRGFzaGJvYXJkUG9ybGV0c1NlcnZpY2UuZ2V0UGFyYW1zQnlQb3J0bGV0KFxyXG4gICAgICBpdGVtLFxyXG4gICAgICBwYWdlU2V0dGluZyxcclxuICAgICAgbnVsbCxcclxuICAgICAgdGhpcy5kYXNoYm9hcmRcclxuICAgICk7XHJcbiAgICAvLyBqc29uIGJ1ZmZlclxyXG4gICAgdGhpcy5odHRwQ2xpZW50XHJcbiAgICAgIC5wb3N0KHRoaXMuYXBpLmJhc2V1cmwgKyB0aGlzLmFwaS51cmxMaXN0LkdldFBvcnRsZXREYXRhVjIsIHBhcmFtcylcclxuICAgICAgLnN1YnNjcmliZShcclxuICAgICAgICAocmVzdWx0KSA9PiB7XHJcbiAgICAgICAgICBpZiAocmVzdWx0KSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHRhYmxlID0gZmluZChcclxuICAgICAgICAgICAgICAodGhpcy50YWJsZSBhcyBhbnkpLl9yZXN1bHRzLFxyXG4gICAgICAgICAgICAgIChlbCkgPT4gZWwucG9ydGxldC5uZXdJZCA9PT0gaXRlbS5uZXdJZFxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgICBjb25zdCBleGNlbEV4cG9ydFByb3BlcnRpZXM6IEV4Y2VsRXhwb3J0UHJvcGVydGllcyA9IHtcclxuICAgICAgICAgICAgICBmaWxlTmFtZTogdGl0bGVcclxuICAgICAgICAgICAgICAgID8gdGl0bGUgKyBcIi54bHN4XCJcclxuICAgICAgICAgICAgICAgIDogXCJUYWJsZS1cIiArIG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSArIFwiLnhsc3hcIixcclxuICAgICAgICAgICAgICAvLyBAdHMtaWdub3JlXHJcbiAgICAgICAgICAgICAgZGF0YVNvdXJjZTogcmVzdWx0LmRhdGEsXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIGlmICh0YWJsZSkge1xyXG4gICAgICAgICAgICAgIHRhYmxlLmdyaWQuZXhjZWxFeHBvcnQoZXhjZWxFeHBvcnRQcm9wZXJ0aWVzKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgKHJlc3BvbnNlKSA9PiB7fSxcclxuICAgICAgICAoKSA9PiB7fVxyXG4gICAgICApO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSB1cGRhdGVGb3JtYXQoY29sdW1uczogQ29sdW1uTW9kZWxbXSwgcGl2b3RPYmopIHtcclxuICAgIHZhciBmTGlzdCA9IHBpdm90T2JqLnJlbmRlck1vZHVsZS5nZXRGb3JtYXRMaXN0KCk7XHJcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNvbHVtbnMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgaWYgKFxyXG4gICAgICAgIChjb2x1bW5zW2ldIGFzIENvbHVtbk1vZGVsKS5jb2x1bW5zICYmXHJcbiAgICAgICAgKGNvbHVtbnNbaV0gYXMgQ29sdW1uTW9kZWwpLmNvbHVtbnMubGVuZ3RoID4gMFxyXG4gICAgICApIHtcclxuICAgICAgICB0aGlzLnVwZGF0ZUZvcm1hdChcclxuICAgICAgICAgIChjb2x1bW5zW2ldIGFzIENvbHVtbk1vZGVsKS5jb2x1bW5zIGFzIENvbHVtbk1vZGVsW10sXHJcbiAgICAgICAgICBwaXZvdE9ialxyXG4gICAgICAgICk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgY29sdW1uc1tpXS5jdXN0b21BdHRyaWJ1dGVzICYmXHJcbiAgICAgICAgICBmTGlzdFsoY29sdW1uc1tpXS5jdXN0b21BdHRyaWJ1dGVzLmNlbGwgYXMgSUF4aXNTZXQpLmFjdHVhbFRleHRdID09PVxyXG4gICAgICAgICAgICBcIk5cIlxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgKGNvbHVtbnNbaV0gYXMgQ29sdW1uTW9kZWwpLmZvcm1hdCA9IHVuZGVmaW5lZDtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBmaWVsZEZvcm1hdChpdGVtKSB7XHJcbiAgICB0aGlzLnBvcnRsZXQgPSBjbG9uZURlZXAoaXRlbSk7XHJcbiAgICBjb25zdCBkaWFsb2dSZWYgPSB0aGlzLmRpYWxvZy5vcGVuKEZpZWxkRm9ybWF0Q29tcG9uZW50LCB7XHJcbiAgICAgIGRhdGE6IHtcclxuICAgICAgICBwb3J0bGV0RGF0YTogaXRlbSxcclxuICAgICAgICBwb3J0bGV0czogdGhpcy5wb3J0bGV0cyxcclxuICAgICAgfSxcclxuICAgICAgaGVpZ2h0OiBcIjg1MHB4XCIsXHJcbiAgICAgIG1pbldpZHRoOiBcIjU2MnB4XCIsXHJcbiAgICAgIGF1dG9Gb2N1czogZmFsc2UsXHJcbiAgICAgIGRpc2FibGVDbG9zZTogdHJ1ZSxcclxuICAgICAgcGFuZWxDbGFzczogXCJkaWFsb2ctcG9zaXRpb25cIixcclxuICAgIH0pO1xyXG4gICAgZGlhbG9nUmVmLmFmdGVyQ2xvc2VkKCkuc3Vic2NyaWJlKChyZXMpID0+IHt9KTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBvcGVuRmlsdGVyKGl0ZW0pIHtcclxuICAgIHRoaXMucG9ydGxldCA9IGNsb25lRGVlcChpdGVtKTtcclxuICAgIHRoaXMuZGFzaGJvYXJkX3NpZGViYXIgPSB0cnVlO1xyXG4gICAgdGhpcy5wdXNoX2J0biA9IHRydWU7XHJcbiAgICB0aGlzLmZpZ3VyZUNvZGUgPSBpdGVtLmZpZ3VyZUNvZGU7XHJcbiAgICB0aGlzLnRhYmFjdGl2ZSA9IHRydWU7XHJcbiAgICB0aGlzLmRhc2hib2FyZFNlcnZpY2UucG9ydGxldEVkaXQubmV4dCh0aGlzLnVybF9pZCk7XHJcbiAgfVxyXG5cclxuICB1cGRhdGVQdXNoQnRuKGU6IGJvb2xlYW4pIHtcclxuICAgIHRoaXMucHVzaF9idG4gPSBlO1xyXG4gICAgdGhpcy5yZWYubWFya0ZvckNoZWNrKCk7XHJcbiAgfVxyXG5cclxuICB0b2dnbGVDdXN0b21pemUoY3VzdG9taXplZCkge1xyXG4gICAgdGhpcy5jdXN0b21pemVkID0gY3VzdG9taXplZDtcclxuICAgIHRoaXMucmVmLm1hcmtGb3JDaGVjaygpO1xyXG4gIH1cclxuXHJcbiAgdG9nZ2xlU2lkZWJhcihib29sKSB7XHJcbiAgICB0aGlzLmRhc2hib2FyZF9zaWRlYmFyID0gYm9vbDtcclxuICAgIHRoaXMucmVmLm1hcmtGb3JDaGVjaygpO1xyXG4gIH1cclxuXHJcbiAgb25Ub2dnbGVUYWJhY3RpdmUoYm9vbCkge1xyXG4gICAgdGhpcy50YWJhY3RpdmUgPSBib29sO1xyXG4gICAgdGhpcy5yZWYubWFya0ZvckNoZWNrKCk7XHJcbiAgfVxyXG5cclxuICB1cGRhdGVQb3JsZXQocG9ydGxldCkge1xyXG4gICAgaWYgKCFwb3J0bGV0KSB7XHJcbiAgICAgIHRoaXMucG9ydGxldCA9IG51bGw7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIHRoaXMucG9ydGxldCA9IGNsb25lRGVlcChwb3J0bGV0KTtcclxuICAgIHRoaXMucG9ydGxldHMuZm9yRWFjaCgoX3BvcnRsZXQsIGkpID0+IHtcclxuICAgICAgaWYgKF9wb3J0bGV0Lm5ld0lkID09PSBwb3J0bGV0Lm5ld0lkKSB7XHJcbiAgICAgICAgdGhpcy5wb3J0bGV0c1tpXSA9IE9iamVjdC5hc3NpZ24oe30sIHBvcnRsZXQpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICAgIHRoaXMucG9ydGxldHMgPSBbLi4udGhpcy5wb3J0bGV0c107XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYWRkUG9ybGV0KCkge1xyXG4gICAgdGhpcy5wdXNoX2J0biA9IHRydWU7XHJcbiAgICB0aGlzLmRhc2hib2FyZF9zaWRlYmFyID0gdHJ1ZTtcclxuICAgIHRoaXMucG9ydGxldCA9IG51bGw7XHJcbiAgICB0aGlzLnRhYmFjdGl2ZSA9IGZhbHNlO1xyXG4gICAgdGhpcy5kYXNoYm9hcmRTZXJ2aWNlLmNyZWF0ZV9idG4ubmV4dCh0aGlzLnVybF9pZCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgY2xvc2VTaWRlYmFyKGUpIHtcclxuICAgIHRoaXMuZGFzaGJvYXJkX3NpZGViYXIgPSBmYWxzZTtcclxuICAgIHRoaXMucmVmLm1hcmtGb3JDaGVjaygpO1xyXG4gIH1cclxuXHJcbiAgcmVzaXplU3RvcChhcmdzKSB7XHJcbiAgICB0aGlzLmdldE5ld1Bvc2l0aW9uKCk7XHJcbiAgICBpZiAoYXJncy5lbGVtZW50LnF1ZXJ5U2VsZWN0b3IoXCIuZS1ncmlkXCIpKSB7XHJcbiAgICAgIGNvbnN0IHRhYmxlID0gZmluZChcclxuICAgICAgICAodGhpcy50YWJsZSBhcyBhbnkpLl9yZXN1bHRzLFxyXG4gICAgICAgIChlbCkgPT4gZWwucG9ydGxldC5uZXdJZCA9PT0gYXJncy5lbGVtZW50LmlkXHJcbiAgICAgICk7XHJcbiAgICAgIGlmICh0YWJsZSkge1xyXG4gICAgICAgIHRhYmxlLmdyaWQuaGVpZ2h0ID0gcGFyc2VJbnQoYXJncy5lbGVtZW50LnN0eWxlLmhlaWdodCkgLSA4MDtcclxuICAgICAgICB0YWJsZS5ncmlkLnJlZnJlc2hDb2x1bW5zKCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBpZiAoYXJncy5lbGVtZW50LnF1ZXJ5U2VsZWN0b3IoXCIuZS1waXZvdHZpZXdcIikpIHtcclxuICAgICAgY29uc3QgcGl2b3QgPSBmaW5kKFxyXG4gICAgICAgICh0aGlzLnBpdm90IGFzIGFueSkuX3Jlc3VsdHMsXHJcbiAgICAgICAgKGVsKSA9PiBlbC5wb3J0bGV0Lm5ld0lkID09PSBhcmdzLmVsZW1lbnQuaWRcclxuICAgICAgKTtcclxuICAgICAgaWYgKHBpdm90KSB7XHJcbiAgICAgICAgcGl2b3QucGl2b3RPYmoubGF5b3V0UmVmcmVzaCgpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBkcmFnU3RvcChlKSB7XHJcbiAgICB0aGlzLmdldE5ld1Bvc2l0aW9uKCk7XHJcbiAgfVxyXG5cclxuICBnZXROZXdQb3NpdGlvbigpIHtcclxuICAgIGNvbnN0IHBkYXRhID0gdGhpcy5kYXNoYm9hcmRMYXlvdXQuc2VyaWFsaXplKCk7XHJcbiAgICB0aGlzLm5ld1Bvc2l0aW9uID0gWy4uLnBkYXRhXTtcclxuICAgIHRoaXMucG9ydGxldHMuZm9yRWFjaCgocG9ydGxldCkgPT4ge1xyXG4gICAgICBwZGF0YS5mb3JFYWNoKChwKSA9PiB7XHJcbiAgICAgICAgaWYgKHBvcnRsZXQubmV3SWQgPT09IHAuaWQpIHtcclxuICAgICAgICAgIHBvcnRsZXQgPSB7XHJcbiAgICAgICAgICAgIC4uLnBvcnRsZXQsXHJcbiAgICAgICAgICAgIHBvc1g6IHAuY29sLFxyXG4gICAgICAgICAgICBwb3NZOiBwLnJvdyxcclxuICAgICAgICAgICAgY29sOiBwLmNvbCxcclxuICAgICAgICAgICAgcm93OiBwLnJvdyxcclxuICAgICAgICAgICAgd2lkdGg6IHAuc2l6ZVgsXHJcbiAgICAgICAgICAgIGhlaWdodDogcC5zaXplWSxcclxuICAgICAgICAgICAgc2l6ZVg6IHAuc2l6ZVgsXHJcbiAgICAgICAgICAgIHNpemVZOiBwLnNpemVZLFxyXG4gICAgICAgICAgfTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfSk7XHJcbiAgICB0aGlzLnJlZi5tYXJrRm9yQ2hlY2soKTtcclxuICAgIHRoaXMucmVmLmRldGVjdENoYW5nZXMoKTtcclxuICB9XHJcblxyXG4gIG9wZW5TdWJ0b3RhbChpdGVtKSB7XHJcbiAgICB0aGlzLkN1cnJlbnRfUG9ydGxldElkID0gaXRlbS5uZXdJZDtcclxuICAgIHRoaXMuY29uZmlnID0gaXRlbS5jb25maWcgPyBKU09OLnBhcnNlKGl0ZW0uY29uZmlnKSA6IHt9O1xyXG4gICAgdGhpcy5waXZvdFRhYmxlU3ViVG90YWxMaXN0Lm1hcCgoZWwpID0+IHtcclxuICAgICAgZWwuc2VsZWN0ZWQgPSBmYWxzZTtcclxuICAgIH0pO1xyXG4gICAgdGhpcy5nZXRTZWxlY3RUb3RhbEdyb3VwU3RhdHVzKFwic3ViXCIpO1xyXG4gICAgdGhpcy5zaG93U3ViVG90YWxHcm91cCA9ICF0aGlzLnNob3dTdWJUb3RhbEdyb3VwO1xyXG4gICAgdGhpcy5zaG93Z3JhbmRUb3RhbEdyb3VwID0gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBvcGVuR3JhbmR0b3RhbChpdGVtKSB7XHJcbiAgICB0aGlzLkN1cnJlbnRfUG9ydGxldElkID0gaXRlbS5uZXdJZDtcclxuICAgIHRoaXMuY29uZmlnID0gaXRlbS5jb25maWcgPyBKU09OLnBhcnNlKGl0ZW0uY29uZmlnKSA6IHt9O1xyXG4gICAgdGhpcy5waXZvdFRhYmxlR3JhbmRUb3RhbExpc3QubWFwKChlbCkgPT4ge1xyXG4gICAgICBlbC5zZWxlY3RlZCA9IGZhbHNlO1xyXG4gICAgfSk7XHJcbiAgICBpZiAodGhpcy5nZXRQb3J0bGV0VHlwZShpdGVtKSA9PT0gXCJ0YWJsZVwiKSB7XHJcbiAgICAgIHRoaXMuZ2V0U2VsZWN0VG90YWxHcm91cFN0YXR1cyhcInRhYmxlR3JhbmRcIik7XHJcbiAgICAgIHRoaXMuc2hvd1RhYmxlR3JhbmRUb3RhbEdyb3VwID0gIXRoaXMuc2hvd1RhYmxlR3JhbmRUb3RhbEdyb3VwO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5nZXRTZWxlY3RUb3RhbEdyb3VwU3RhdHVzKCk7XHJcbiAgICAgIHRoaXMuc2hvd2dyYW5kVG90YWxHcm91cCA9ICF0aGlzLnNob3dncmFuZFRvdGFsR3JvdXA7XHJcbiAgICAgIHRoaXMuc2hvd1N1YlRvdGFsR3JvdXAgPSBmYWxzZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHNlbGVjdFRvdGFsR3JvdXAoaW5kZXgsIHR5cGUsIGl0ZW0pIHtcclxuICAgIGlmICh0aGlzLmdldFBvcnRsZXRUeXBlKGl0ZW0pID09PSBcInBpdm90XCIpIHtcclxuICAgICAgY29uc3QgcGl2b3QgPSBmaW5kKFxyXG4gICAgICAgICh0aGlzLnBpdm90IGFzIGFueSkuX3Jlc3VsdHMsXHJcbiAgICAgICAgKGVsKSA9PiBlbC5wb3J0bGV0Lm5ld0lkID09PSBpdGVtLm5ld0lkXHJcbiAgICAgICk7XHJcbiAgICAgIGlmICh0eXBlID09PSBcInN1YlwiKSB7XHJcbiAgICAgICAgdGhpcy5zaG93U3ViVG90YWxHcm91cCA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMucGl2b3RUYWJsZVN1YlRvdGFsTGlzdC5mb3JFYWNoKChzdWJ0b3RhbCkgPT4ge1xyXG4gICAgICAgICAgc3VidG90YWwuc2VsZWN0ZWQgPSBmYWxzZTtcclxuICAgICAgICB9KTtcclxuICAgICAgICB0aGlzLnBpdm90VGFibGVTdWJUb3RhbExpc3RbaW5kZXhdLnNlbGVjdGVkID0gdHJ1ZTtcclxuICAgICAgICBpZiAocGl2b3QucGl2b3RPYmopIHtcclxuICAgICAgICAgIHN3aXRjaCAoaW5kZXgpIHtcclxuICAgICAgICAgICAgY2FzZSAwOlxyXG4gICAgICAgICAgICAgIHRoaXMuY29uZmlnLmZpZWxkcy5tYXAoKGVsKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBlbC5zaG93U3ViVG90YWxzID0gdHJ1ZTtcclxuICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICBwaXZvdC5waXZvdE9iai5kYXRhU291cmNlU2V0dGluZ3Muc2hvd1N1YlRvdGFscyA9IHRydWU7XHJcbiAgICAgICAgICAgICAgcGl2b3QucGl2b3RPYmouZGF0YVNvdXJjZVNldHRpbmdzLnNob3dSb3dTdWJUb3RhbHMgPSB0cnVlO1xyXG4gICAgICAgICAgICAgIHBpdm90LnBpdm90T2JqLmRhdGFTb3VyY2VTZXR0aW5ncy5zaG93Q29sdW1uU3ViVG90YWxzID0gdHJ1ZTtcclxuICAgICAgICAgICAgICB0aGlzLmNvbmZpZy5zaG93U3ViVG90YWxzID0gdHJ1ZTtcclxuICAgICAgICAgICAgICB0aGlzLmNvbmZpZy5zaG93Um93U3ViVG90YWxzID0gdHJ1ZTtcclxuICAgICAgICAgICAgICB0aGlzLmNvbmZpZy5zaG93Q29sdW1uU3ViVG90YWxzID0gdHJ1ZTtcclxuICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAxOlxyXG4gICAgICAgICAgICAgIHRoaXMuY29uZmlnLmZpZWxkcy5tYXAoKGVsKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBlbC5zaG93U3ViVG90YWxzID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgcGl2b3QucGl2b3RPYmouZGF0YVNvdXJjZVNldHRpbmdzLnNob3dTdWJUb3RhbHMgPSBmYWxzZTtcclxuICAgICAgICAgICAgICBwaXZvdC5waXZvdE9iai5kYXRhU291cmNlU2V0dGluZ3Muc2hvd1Jvd1N1YlRvdGFscyA9IHRydWU7XHJcbiAgICAgICAgICAgICAgcGl2b3QucGl2b3RPYmouZGF0YVNvdXJjZVNldHRpbmdzLnNob3dDb2x1bW5TdWJUb3RhbHMgPSB0cnVlO1xyXG4gICAgICAgICAgICAgIHRoaXMuY29uZmlnLnNob3dTdWJUb3RhbHMgPSBmYWxzZTtcclxuICAgICAgICAgICAgICB0aGlzLmNvbmZpZy5zaG93Um93U3ViVG90YWxzID0gdHJ1ZTtcclxuICAgICAgICAgICAgICB0aGlzLmNvbmZpZy5zaG93Q29sdW1uU3ViVG90YWxzID0gdHJ1ZTtcclxuICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAyOlxyXG4gICAgICAgICAgICAgIHRoaXMuY29uZmlnLmZpZWxkcy5tYXAoKGVsKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBlbC5zaG93U3ViVG90YWxzID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgZm9yIChsZXQgZ2l0ZW0gb2YgdGhpcy5jb25maWcueGF4aXMuZ3JvdXBzKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBmaWVsZCA9IHRoaXMuY29uZmlnLmZpZWxkcy5maWx0ZXIoXHJcbiAgICAgICAgICAgICAgICAgIChmbCkgPT4gZmwuY29sTmFtZSA9PT0gZ2l0ZW0ubmFtZVxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgIGlmIChmaWVsZC5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgIGZpZWxkWzBdLnNob3dTdWJUb3RhbHMgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBwaXZvdC5waXZvdE9iai5kYXRhU291cmNlU2V0dGluZ3Muc2hvd1N1YlRvdGFscyA9IHRydWU7XHJcbiAgICAgICAgICAgICAgcGl2b3QucGl2b3RPYmouZGF0YVNvdXJjZVNldHRpbmdzLnNob3dSb3dTdWJUb3RhbHMgPSB0cnVlO1xyXG4gICAgICAgICAgICAgIHBpdm90LnBpdm90T2JqLmRhdGFTb3VyY2VTZXR0aW5ncy5zaG93Q29sdW1uU3ViVG90YWxzID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgdGhpcy5jb25maWcuc2hvd1N1YlRvdGFscyA9IHRydWU7XHJcbiAgICAgICAgICAgICAgdGhpcy5jb25maWcuc2hvd1Jvd1N1YlRvdGFscyA9IHRydWU7XHJcbiAgICAgICAgICAgICAgdGhpcy5jb25maWcuc2hvd0NvbHVtblN1YlRvdGFscyA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIDM6XHJcbiAgICAgICAgICAgICAgdGhpcy5jb25maWcuZmllbGRzLm1hcCgoZWwpID0+IHtcclxuICAgICAgICAgICAgICAgIGVsLnNob3dTdWJUb3RhbHMgPSBmYWxzZTtcclxuICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICBmb3IgKGxldCBpdGVtIG9mIHRoaXMuY29uZmlnLmNvbHVtbkdyb3VwKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBmaWVsZCA9IHRoaXMuY29uZmlnLmZpZWxkcy5maWx0ZXIoXHJcbiAgICAgICAgICAgICAgICAgIChmbCkgPT4gZmwuY29sTmFtZSA9PT0gaXRlbS5uYW1lXHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgaWYgKGZpZWxkLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgICAgZmllbGRbMF0uc2hvd1N1YlRvdGFscyA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIHBpdm90LnBpdm90T2JqLmRhdGFTb3VyY2VTZXR0aW5ncy5zaG93U3ViVG90YWxzID0gdHJ1ZTtcclxuICAgICAgICAgICAgICBwaXZvdC5waXZvdE9iai5kYXRhU291cmNlU2V0dGluZ3Muc2hvd1Jvd1N1YlRvdGFscyA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgIHBpdm90LnBpdm90T2JqLmRhdGFTb3VyY2VTZXR0aW5ncy5zaG93Q29sdW1uU3ViVG90YWxzID0gdHJ1ZTtcclxuICAgICAgICAgICAgICB0aGlzLmNvbmZpZy5zaG93U3ViVG90YWxzID0gdHJ1ZTtcclxuICAgICAgICAgICAgICB0aGlzLmNvbmZpZy5zaG93Um93U3ViVG90YWxzID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgdGhpcy5jb25maWcuc2hvd0NvbHVtblN1YlRvdGFscyA9IHRydWU7XHJcbiAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuc2hvd2dyYW5kVG90YWxHcm91cCA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMucGl2b3RUYWJsZUdyYW5kVG90YWxMaXN0LmZvckVhY2goKGdyYW5kdG90YWwpID0+IHtcclxuICAgICAgICAgIGdyYW5kdG90YWwuc2VsZWN0ZWQgPSBmYWxzZTtcclxuICAgICAgICB9KTtcclxuICAgICAgICB0aGlzLnBpdm90VGFibGVHcmFuZFRvdGFsTGlzdFtpbmRleF0uc2VsZWN0ZWQgPSB0cnVlO1xyXG4gICAgICAgIGlmIChwaXZvdC5waXZvdE9iaikge1xyXG4gICAgICAgICAgc3dpdGNoIChpbmRleCkge1xyXG4gICAgICAgICAgICBjYXNlIDA6XHJcbiAgICAgICAgICAgICAgcGl2b3QucGl2b3RPYmouZGF0YVNvdXJjZVNldHRpbmdzLnNob3dHcmFuZFRvdGFscyA9IHRydWU7XHJcbiAgICAgICAgICAgICAgcGl2b3QucGl2b3RPYmouZGF0YVNvdXJjZVNldHRpbmdzLnNob3dSb3dHcmFuZFRvdGFscyA9IHRydWU7XHJcbiAgICAgICAgICAgICAgcGl2b3QucGl2b3RPYmouZGF0YVNvdXJjZVNldHRpbmdzLnNob3dDb2x1bW5HcmFuZFRvdGFscyA9IHRydWU7XHJcbiAgICAgICAgICAgICAgdGhpcy5jb25maWcuc2hvd0dyYW5kVG90YWxzID0gdHJ1ZTtcclxuICAgICAgICAgICAgICB0aGlzLmNvbmZpZy5zaG93Um93R3JhbmRUb3RhbHMgPSB0cnVlO1xyXG4gICAgICAgICAgICAgIHRoaXMuY29uZmlnLnNob3dDb2x1bW5HcmFuZFRvdGFscyA9IHRydWU7XHJcbiAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgMTpcclxuICAgICAgICAgICAgICBwaXZvdC5waXZvdE9iai5kYXRhU291cmNlU2V0dGluZ3Muc2hvd0dyYW5kVG90YWxzID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgcGl2b3QucGl2b3RPYmouZGF0YVNvdXJjZVNldHRpbmdzLnNob3dSb3dHcmFuZFRvdGFscyA9IHRydWU7XHJcbiAgICAgICAgICAgICAgcGl2b3QucGl2b3RPYmouZGF0YVNvdXJjZVNldHRpbmdzLnNob3dDb2x1bW5HcmFuZFRvdGFscyA9IHRydWU7XHJcbiAgICAgICAgICAgICAgdGhpcy5jb25maWcuc2hvd0dyYW5kVG90YWxzID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgdGhpcy5jb25maWcuc2hvd1Jvd0dyYW5kVG90YWxzID0gdHJ1ZTtcclxuICAgICAgICAgICAgICB0aGlzLmNvbmZpZy5zaG93Q29sdW1uR3JhbmRUb3RhbHMgPSB0cnVlO1xyXG4gICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIDI6XHJcbiAgICAgICAgICAgICAgcGl2b3QucGl2b3RPYmouZGF0YVNvdXJjZVNldHRpbmdzLnNob3dHcmFuZFRvdGFscyA9IHRydWU7XHJcbiAgICAgICAgICAgICAgcGl2b3QucGl2b3RPYmouZGF0YVNvdXJjZVNldHRpbmdzLnNob3dSb3dHcmFuZFRvdGFscyA9IHRydWU7XHJcbiAgICAgICAgICAgICAgcGl2b3QucGl2b3RPYmouZGF0YVNvdXJjZVNldHRpbmdzLnNob3dDb2x1bW5HcmFuZFRvdGFscyA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgIHRoaXMuY29uZmlnLnNob3dHcmFuZFRvdGFscyA9IHRydWU7XHJcbiAgICAgICAgICAgICAgdGhpcy5jb25maWcuc2hvd1Jvd0dyYW5kVG90YWxzID0gdHJ1ZTtcclxuICAgICAgICAgICAgICB0aGlzLmNvbmZpZy5zaG93Q29sdW1uR3JhbmRUb3RhbHMgPSBmYWxzZTtcclxuICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAzOlxyXG4gICAgICAgICAgICAgIHBpdm90LnBpdm90T2JqLmRhdGFTb3VyY2VTZXR0aW5ncy5zaG93R3JhbmRUb3RhbHMgPSB0cnVlO1xyXG4gICAgICAgICAgICAgIHBpdm90LnBpdm90T2JqLmRhdGFTb3VyY2VTZXR0aW5ncy5zaG93Um93R3JhbmRUb3RhbHMgPSBmYWxzZTtcclxuICAgICAgICAgICAgICBwaXZvdC5waXZvdE9iai5kYXRhU291cmNlU2V0dGluZ3Muc2hvd0NvbHVtbkdyYW5kVG90YWxzID0gdHJ1ZTtcclxuICAgICAgICAgICAgICB0aGlzLmNvbmZpZy5zaG93R3JhbmRUb3RhbHMgPSB0cnVlO1xyXG4gICAgICAgICAgICAgIHRoaXMuY29uZmlnLnNob3dSb3dHcmFuZFRvdGFscyA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgIHRoaXMuY29uZmlnLnNob3dDb2x1bW5HcmFuZFRvdGFscyA9IHRydWU7XHJcbiAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGlmIChwaXZvdC5waXZvdE9iaikge1xyXG4gICAgICAgIHBpdm90LnBpdm90T2JqLnJlbmRlcigpO1xyXG4gICAgICAgIGl0ZW0uY29uZmlnID0gQ2lyY3VsYXJKU09OLnN0cmluZ2lmeSh0aGlzLmNvbmZpZyk7XHJcbiAgICAgICAgY29uc3QgcG9ydGxldEluZGV4ID0gdGhpcy5wb3J0bGV0cy5maW5kSW5kZXgoXHJcbiAgICAgICAgICAoeCkgPT4geC5uZXdJZCA9PT0gaXRlbS5uZXdJZFxyXG4gICAgICAgICk7XHJcbiAgICAgICAgdGhpcy5wb3J0bGV0c1twb3J0bGV0SW5kZXhdID0gaXRlbTtcclxuICAgICAgICB0aGlzLmRhc2hib2FyZFNlcnZpY2UuY2hhbmdlUGl2b3QubmV4dChpdGVtLm5ld0lkKTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY29uc3QgdGFibGUgPSBmaW5kKFxyXG4gICAgICAgICh0aGlzLnRhYmxlIGFzIGFueSkuX3Jlc3VsdHMsXHJcbiAgICAgICAgKGVsKSA9PiBlbC5wb3J0bGV0Lm5ld0lkID09PSBpdGVtLm5ld0lkXHJcbiAgICAgICk7XHJcbiAgICAgIHRoaXMuc2hvd1RhYmxlR3JhbmRUb3RhbEdyb3VwID0gZmFsc2U7XHJcbiAgICAgIHRoaXMudGFibGVHcmFuZFRvdGFsTGlzdC5mb3JFYWNoKChncmFuZHRvdGFsKSA9PiB7XHJcbiAgICAgICAgZ3JhbmR0b3RhbC5zZWxlY3RlZCA9IGZhbHNlO1xyXG4gICAgICB9KTtcclxuICAgICAgdGhpcy50YWJsZUdyYW5kVG90YWxMaXN0W2luZGV4XS5zZWxlY3RlZCA9IHRydWU7XHJcbiAgICAgIGlmICh0YWJsZSkge1xyXG4gICAgICAgIHN3aXRjaCAoaW5kZXgpIHtcclxuICAgICAgICAgIGNhc2UgMDpcclxuICAgICAgICAgICAgdGhpcy5jb25maWcuc2hvd0dyYW5kVG90YWxzID0gdHJ1ZTtcclxuICAgICAgICAgICAgdGFibGUuZ3JpZC5lbGVtZW50XHJcbiAgICAgICAgICAgICAgLnF1ZXJ5U2VsZWN0b3IoXCIuZS1ncmlkZm9vdGVyXCIpXHJcbiAgICAgICAgICAgICAgLmNsYXNzTGlzdC5yZW1vdmUoXCJoaWRlc3VtbWFyeVwiKTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICBjYXNlIDE6XHJcbiAgICAgICAgICAgIHRoaXMuY29uZmlnLnNob3dHcmFuZFRvdGFscyA9IGZhbHNlO1xyXG4gICAgICAgICAgICB0YWJsZS5ncmlkLmVsZW1lbnRcclxuICAgICAgICAgICAgICAucXVlcnlTZWxlY3RvcihcIi5lLWdyaWRmb290ZXJcIilcclxuICAgICAgICAgICAgICAuY2xhc3NMaXN0LmFkZChcImhpZGVzdW1tYXJ5XCIpO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICAgICAgaXRlbS5jb25maWcgPSBDaXJjdWxhckpTT04uc3RyaW5naWZ5KHRoaXMuY29uZmlnKTtcclxuICAgICAgICBjb25zdCBwb3J0bGV0SW5kZXggPSB0aGlzLnBvcnRsZXRzLmZpbmRJbmRleChcclxuICAgICAgICAgICh4KSA9PiB4Lm5ld0lkID09PSBpdGVtLm5ld0lkXHJcbiAgICAgICAgKTtcclxuICAgICAgICB0aGlzLnBvcnRsZXRzW3BvcnRsZXRJbmRleF0gPSBpdGVtO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXRTZWxlY3RUb3RhbEdyb3VwU3RhdHVzKHR5cGU/KSB7XHJcbiAgICBpZiAodHlwZSA9PT0gXCJzdWJcIikge1xyXG4gICAgICBpZiAoXHJcbiAgICAgICAgdGhpcy5jb25maWcuc2hvd1N1YlRvdGFscyAmJlxyXG4gICAgICAgIHRoaXMuY29uZmlnLnNob3dSb3dTdWJUb3RhbHMgJiZcclxuICAgICAgICB0aGlzLmNvbmZpZy5zaG93Q29sdW1uU3ViVG90YWxzXHJcbiAgICAgICkge1xyXG4gICAgICAgIHRoaXMucGl2b3RUYWJsZVN1YlRvdGFsTGlzdFswXS5zZWxlY3RlZCA9IHRydWU7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKFxyXG4gICAgICAgICF0aGlzLmNvbmZpZy5zaG93U3ViVG90YWxzICYmXHJcbiAgICAgICAgdGhpcy5jb25maWcuc2hvd1Jvd1N1YlRvdGFscyAmJlxyXG4gICAgICAgIHRoaXMuY29uZmlnLnNob3dDb2x1bW5TdWJUb3RhbHNcclxuICAgICAgKSB7XHJcbiAgICAgICAgdGhpcy5waXZvdFRhYmxlU3ViVG90YWxMaXN0WzFdLnNlbGVjdGVkID0gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgICBpZiAoXHJcbiAgICAgICAgdGhpcy5jb25maWcuc2hvd1N1YlRvdGFscyAmJlxyXG4gICAgICAgIHRoaXMuY29uZmlnLnNob3dSb3dTdWJUb3RhbHMgJiZcclxuICAgICAgICAhdGhpcy5jb25maWcuc2hvd0NvbHVtblN1YlRvdGFsc1xyXG4gICAgICApIHtcclxuICAgICAgICB0aGlzLnBpdm90VGFibGVTdWJUb3RhbExpc3RbMl0uc2VsZWN0ZWQgPSB0cnVlO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChcclxuICAgICAgICB0aGlzLmNvbmZpZy5zaG93U3ViVG90YWxzICYmXHJcbiAgICAgICAgIXRoaXMuY29uZmlnLnNob3dSb3dTdWJUb3RhbHMgJiZcclxuICAgICAgICB0aGlzLmNvbmZpZy5zaG93Q29sdW1uU3ViVG90YWxzXHJcbiAgICAgICkge1xyXG4gICAgICAgIHRoaXMucGl2b3RUYWJsZVN1YlRvdGFsTGlzdFszXS5zZWxlY3RlZCA9IHRydWU7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gXCJ0YWJsZUdyYW5kXCIpIHtcclxuICAgICAgaWYgKHRoaXMuY29uZmlnICYmIHRoaXMuY29uZmlnLnNob3dHcmFuZFRvdGFscykge1xyXG4gICAgICAgIHRoaXMudGFibGVHcmFuZFRvdGFsTGlzdFswXS5zZWxlY3RlZCA9IHRydWU7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKCF0aGlzLmNvbmZpZy5zaG93R3JhbmRUb3RhbHMpIHtcclxuICAgICAgICB0aGlzLnRhYmxlR3JhbmRUb3RhbExpc3RbMV0uc2VsZWN0ZWQgPSB0cnVlO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBpZiAoXHJcbiAgICAgICAgdGhpcy5jb25maWcuc2hvd0dyYW5kVG90YWxzICYmXHJcbiAgICAgICAgdGhpcy5jb25maWcuc2hvd1Jvd0dyYW5kVG90YWxzICYmXHJcbiAgICAgICAgdGhpcy5jb25maWcuc2hvd0NvbHVtbkdyYW5kVG90YWxzXHJcbiAgICAgICkge1xyXG4gICAgICAgIHRoaXMucGl2b3RUYWJsZUdyYW5kVG90YWxMaXN0WzBdLnNlbGVjdGVkID0gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgICBpZiAoXHJcbiAgICAgICAgIXRoaXMuY29uZmlnLnNob3dHcmFuZFRvdGFscyAmJlxyXG4gICAgICAgIHRoaXMuY29uZmlnLnNob3dSb3dHcmFuZFRvdGFscyAmJlxyXG4gICAgICAgIHRoaXMuY29uZmlnLnNob3dDb2x1bW5HcmFuZFRvdGFsc1xyXG4gICAgICApIHtcclxuICAgICAgICB0aGlzLnBpdm90VGFibGVHcmFuZFRvdGFsTGlzdFsxXS5zZWxlY3RlZCA9IHRydWU7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKFxyXG4gICAgICAgIHRoaXMuY29uZmlnLnNob3dHcmFuZFRvdGFscyAmJlxyXG4gICAgICAgIHRoaXMuY29uZmlnLnNob3dSb3dHcmFuZFRvdGFscyAmJlxyXG4gICAgICAgICF0aGlzLmNvbmZpZy5zaG93Q29sdW1uR3JhbmRUb3RhbHNcclxuICAgICAgKSB7XHJcbiAgICAgICAgdGhpcy5waXZvdFRhYmxlR3JhbmRUb3RhbExpc3RbMl0uc2VsZWN0ZWQgPSB0cnVlO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChcclxuICAgICAgICB0aGlzLmNvbmZpZy5zaG93R3JhbmRUb3RhbHMgJiZcclxuICAgICAgICAhdGhpcy5jb25maWcuc2hvd1Jvd0dyYW5kVG90YWxzICYmXHJcbiAgICAgICAgdGhpcy5jb25maWcuc2hvd0NvbHVtbkdyYW5kVG90YWxzXHJcbiAgICAgICkge1xyXG4gICAgICAgIHRoaXMucGl2b3RUYWJsZUdyYW5kVG90YWxMaXN0WzNdLnNlbGVjdGVkID0gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgaW5pdENoYXJEYXRhKG5vRGV0ZWN0ID0gZmFsc2UpIHtcclxuICAgIGlmICghdGhpcy5kYXNoYm9hcmQpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgbGV0IGZpbGVzT2JqID0ge307IC8vIOeUqOadpee/u+ivkVxyXG4gICAgZm9yICh2YXIgaSBpbiB0aGlzLkRhc2hib2FyZFBvcmxldHNTZXJ2aWNlLmZpZWxkc0Fyclt0aGlzLmRhc2hib2FyZC5pZF0pIHtcclxuICAgICAgaWYgKHRoaXMuRGFzaGJvYXJkUG9ybGV0c1NlcnZpY2UuZmllbGRzQXJyW3RoaXMuZGFzaGJvYXJkLmlkXVtpXSkge1xyXG4gICAgICAgIHRoaXMuRGFzaGJvYXJkUG9ybGV0c1NlcnZpY2UuZmllbGRzQXJyW3RoaXMuZGFzaGJvYXJkLmlkXVtpXS5mb3JFYWNoKFxyXG4gICAgICAgICAgKHQpID0+IHtcclxuICAgICAgICAgICAgZmlsZXNPYmpbdC5jb2xOYW1lXSA9IHRbXCJsYW5nQ29kZVwiXTtcclxuICAgICAgICAgIH1cclxuICAgICAgICApO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICB0aGlzLnBvcnRsZXRzLmZvckVhY2goKGUpID0+IHtcclxuICAgICAgaWYgKCFlLmNvbmZpZykge1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgICBjb25zdCBjb25maWcgPSBKU09OLnBhcnNlKGUuY29uZmlnKTtcclxuICAgICAgLy8g5aaC5p6c5pivIGhpc3RvcmljYWxJUlLvvIzmoLnmja4gdmlzdWFsVHlwZSDov5vooYzmuLLmn5NcclxuICAgICAgY29uc3QgcG9ydGxldFR5cGUgPVxyXG4gICAgICAgIGNvbmZpZy5wb3J0bGV0VHlwZSA9PT0gXCJoaXN0b3JpY2FsSVJSXCJcclxuICAgICAgICAgID8gY29uZmlnLnNlbGVjdGVkVmlzdWFsVHlwZVxyXG4gICAgICAgICAgOiBjb25maWcucG9ydGxldFR5cGU7XHJcbiAgICAgIGxldCBpc05ld0NoYXJ0ID0gW1wibmV3Y29sdW1uXCIsIFwibmV3bGluZVwiLCBcIm5ld2NvbHVtbmxpbmVcIl0uaW5jbHVkZXMoXHJcbiAgICAgICAgcG9ydGxldFR5cGVcclxuICAgICAgKTtcclxuXHJcbiAgICAgIGlmIChpc05ld0NoYXJ0KSB7XHJcbiAgICAgICAgbGV0IGRhdGFDb2x1bW4gPSBbXTtcclxuICAgICAgICBsZXQgZGF0YUxpbmUgPSBbXTtcclxuICAgICAgICBsZXQgeVhpYXMgPSBbXTtcclxuICAgICAgICBsZXQgc2Vjb25kWVhpYXMgPSBbXTtcclxuICAgICAgICAvLyBjb25zdCBjb25maWcgPSBKU09OLnBhcnNlKGUuY29uZmlnKTtcclxuICAgICAgICBpZiAoY29uZmlnLnNlbGVjdGVkWSAmJiBjb25maWcuc2VsZWN0ZWRZLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgIHlYaWFzID0gY29uZmlnLnNlbGVjdGVkWTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChjb25maWcuc2VsZWN0ZWRTZWNvbmRZICYmIGNvbmZpZy5zZWxlY3RlZFNlY29uZFkubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgc2Vjb25kWVhpYXMgPSBjb25maWcuc2VsZWN0ZWRTZWNvbmRZO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbGV0IGRhdGFJdGVtO1xyXG4gICAgICAgIGlmIChlLmlkICYmIGUuaWQgIT0gXCIwMDAwMDAwMC0wMDAwLTAwMDAtMDAwMC0wMDAwMDAwMDAwMDBcIikge1xyXG4gICAgICAgICAgZGF0YUl0ZW0gPVxyXG4gICAgICAgICAgICB0aGlzLkRhc2hib2FyZFBvcmxldHNTZXJ2aWNlLnBvcnRsZXREYXRhX05ld1t0aGlzLmRhc2hib2FyZC5pZF1bXHJcbiAgICAgICAgICAgICAgZS5pZFxyXG4gICAgICAgICAgICBdIHx8IFtdO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoZS5uZXdJZCkge1xyXG4gICAgICAgICAgZGF0YUl0ZW0gPVxyXG4gICAgICAgICAgICB0aGlzLkRhc2hib2FyZFBvcmxldHNTZXJ2aWNlLnBvcnRsZXREYXRhX05ld1t0aGlzLmRhc2hib2FyZC5pZF1bXHJcbiAgICAgICAgICAgICAgZS5uZXdJZFxyXG4gICAgICAgICAgICBdIHx8IFtdO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoZGF0YUl0ZW0gJiYgZGF0YUl0ZW0uZGF0YSAmJiBkYXRhSXRlbS5kYXRhLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgIGNvbnN0IHhBeGlzRmllbGQgPSBjb25maWcuZmllbGRzLmZpbmQoXHJcbiAgICAgICAgICAgIChmaWVsZCkgPT4gZmllbGQuY29sTmFtZSA9PT0gY29uZmlnLnNlbGVjdGVkWFxyXG4gICAgICAgICAgKTtcclxuICAgICAgICAgIGRhdGFJdGVtLmRhdGEuZm9yRWFjaCgoaXRlbSkgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBwZXJpb2QgPVxyXG4gICAgICAgICAgICAgIHhBeGlzRmllbGQgJiYgeEF4aXNGaWVsZC5kYXRhVHlwZSA9PT0gXCJkYXRlXCJcclxuICAgICAgICAgICAgICAgID8gdGhpcy5kYXRlUGlwZS50cmFuc2Zvcm0oaXRlbVtjb25maWcuc2VsZWN0ZWRYXSwgXCJ5eXl5LU1NLWRkXCIpXHJcbiAgICAgICAgICAgICAgICA6IGl0ZW1bY29uZmlnLnNlbGVjdGVkWF07XHJcbiAgICAgICAgICAgIGlmIChwb3J0bGV0VHlwZSA9PSBcIm5ld2xpbmVcIikge1xyXG4gICAgICAgICAgICAgIGlmICh5WGlhcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICBsZXQgb2JqID0geyBwZXJpb2QgfTtcclxuICAgICAgICAgICAgICAgIHlYaWFzLmZvckVhY2goKHkpID0+IHtcclxuICAgICAgICAgICAgICAgICAgb2JqW3RoaXMudHJhbnNsYXRpb25bZmlsZXNPYmpbeV1dIHx8IHldID0gaXRlbVt5XTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgZGF0YUxpbmUucHVzaChvYmopO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICBpZiAoeVhpYXMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgbGV0IG9iaiA9IHsgcGVyaW9kIH07XHJcbiAgICAgICAgICAgICAgICB5WGlhcy5mb3JFYWNoKCh5KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgIG9ialt0aGlzLnRyYW5zbGF0aW9uW2ZpbGVzT2JqW3ldXSB8fCB5XSA9IGl0ZW1beV07XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIGRhdGFDb2x1bW4ucHVzaChvYmopO1xyXG4gICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgaWYgKHNlY29uZFlYaWFzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgIGxldCBvYmogPSB7IHBlcmlvZCB9O1xyXG4gICAgICAgICAgICAgICAgc2Vjb25kWVhpYXMuZm9yRWFjaCgoeSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICBvYmpbdGhpcy50cmFuc2xhdGlvbltmaWxlc09ialt5XV0gfHwgeV0gPSBpdGVtW3ldO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICBkYXRhTGluZS5wdXNoKG9iaik7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIOaXtumXtOaOkuW6j1xyXG4gICAgICAgIGlmIChjb25maWcuc2VsZWN0ZWRYID09IFwiRGF0ZVwiKSB7XHJcbiAgICAgICAgICBkYXRhQ29sdW1uICYmIGRhdGFDb2x1bW4uc29ydCh0aGlzLmNvbXBhcmVEYXRlcyk7XHJcbiAgICAgICAgICBkYXRhTGluZSAmJiBkYXRhTGluZS5zb3J0KHRoaXMuY29tcGFyZURhdGVzKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIOi1i+WAvGRhdGFDb2x1bW7lkoxkYXRhTGluZeWvueW6lOeahFR5cGVcclxuICAgICAgICBjb25maWcuZmllbGRzLmZvckVhY2goKHQpID0+IHtcclxuICAgICAgICAgIGlmIChjb25maWcuc2VsZWN0ZWRZICYmIGNvbmZpZy5zZWxlY3RlZFkubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICBpZiAodFtcImNvbE5hbWVcIl0gPT0gY29uZmlnLnNlbGVjdGVkWVswXSkge1xyXG4gICAgICAgICAgICAgIGVbXCJjb2x1bW5UeXBlXCJdID0gdFtcImRhdGFUeXBlXCJdO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgaWYgKGNvbmZpZy5zZWxlY3RlZFNlY29uZFkgJiYgY29uZmlnLnNlbGVjdGVkU2Vjb25kWS5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIGlmICh0W1wiY29sTmFtZVwiXSA9PSBjb25maWcuc2VsZWN0ZWRTZWNvbmRZWzBdKSB7XHJcbiAgICAgICAgICAgICAgZVtcImxpbmVUeXBlXCJdID0gdFtcImRhdGFUeXBlXCJdO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIGVbXCJkYXRhQ29sdW1uXCJdID0gZGF0YUNvbHVtbjtcclxuICAgICAgICBlW1wiZGF0YUxpbmVcIl0gPSBkYXRhTGluZTtcclxuICAgICAgICBpZiAoY29uZmlnW1wic2VsZWN0VGhlbWVcIl0pIHtcclxuICAgICAgICAgIGVbXCJ0aGVtZUNvbG9yXCJdID0gdGhpcy50aGVtZU9ialtjb25maWdbXCJzZWxlY3RUaGVtZVwiXV07XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICAgIGlmICghbm9EZXRlY3QpIHtcclxuICAgICAgdGhpcy5zZXRBY3RpdmVEYXNoYm9hcmRQb3J0bGV0cygpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgY29tcGFyZURhdGVzKGEsIGIpIHtcclxuICAgIGNvbnN0IGRhdGVBID0gbmV3IERhdGUoYS5wZXJpb2QpO1xyXG4gICAgY29uc3QgZGF0ZUIgPSBuZXcgRGF0ZShiLnBlcmlvZCk7XHJcblxyXG4gICAgaWYgKGRhdGVBIDwgZGF0ZUIpIHtcclxuICAgICAgcmV0dXJuIC0xO1xyXG4gICAgfSBlbHNlIGlmIChkYXRlQSA+IGRhdGVCKSB7XHJcbiAgICAgIHJldHVybiAxO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIDA7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICB0cnVuY2F0ZVRleHQodGV4dCwgbWF4V2lkdGggPSA3MCwgZm9udFNpemUgPSAxMSkge1xyXG4gICAgLy8g5Yib5bu65LiA5Liq6ZqQ5b2i55qEIHNwYW4g5p2l5rWL6YeP5paH5pys5a695bqmXHJcbiAgICBjb25zdCBtZWFzdXJlU3BhbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XHJcbiAgICBtZWFzdXJlU3Bhbi5zdHlsZS52aXNpYmlsaXR5ID0gXCJoaWRkZW5cIjtcclxuICAgIG1lYXN1cmVTcGFuLnN0eWxlLnBvc2l0aW9uID0gXCJhYnNvbHV0ZVwiO1xyXG4gICAgbWVhc3VyZVNwYW4uc3R5bGUuZm9udFNpemUgPSBmb250U2l6ZSArIFwicHhcIjtcclxuICAgIG1lYXN1cmVTcGFuLnN0eWxlLndoaXRlU3BhY2UgPSBcIm5vd3JhcFwiO1xyXG4gICAgbWVhc3VyZVNwYW4uaW5uZXJUZXh0ID0gdGV4dDtcclxuICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQobWVhc3VyZVNwYW4pO1xyXG5cclxuICAgIC8vIOS6jOWIhuafpeaJvuadpeaJvuWIsOacgOS9s+aIquaWreeCuVxyXG4gICAgbGV0IGxlZnQgPSAxO1xyXG4gICAgbGV0IHJpZ2h0ID0gdGV4dC5sZW5ndGggLSAxO1xyXG4gICAgbGV0IGxlZnRPclJpZ2h0ID0gXCJsZWZ0XCI7XHJcbiAgICBsZXQgaXNCaWdnZXIgPSBmYWxzZTtcclxuICAgIGlmIChtZWFzdXJlU3Bhbi5vZmZzZXRXaWR0aCA+IG1heFdpZHRoKSB7XHJcbiAgICAgIHdoaWxlICghaXNCaWdnZXIpIHtcclxuICAgICAgICBtZWFzdXJlU3Bhbi5pbm5lclRleHQgPSBgJHt0ZXh0LnNsaWNlKDAsIGxlZnQpfS4uLiR7dGV4dC5zbGljZShyaWdodCl9YDtcclxuICAgICAgICBpZiAobWVhc3VyZVNwYW4ub2Zmc2V0V2lkdGggPiBtYXhXaWR0aCkge1xyXG4gICAgICAgICAgaXNCaWdnZXIgPSB0cnVlO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBpZiAobGVmdE9yUmlnaHQgPT09IFwibGVmdFwiKSB7XHJcbiAgICAgICAgICAgIGxlZnRPclJpZ2h0ID0gXCJyaWdodFwiO1xyXG4gICAgICAgICAgICBsZWZ0ID0gbGVmdCArIDE7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBsZWZ0T3JSaWdodCA9IFwibGVmdFwiO1xyXG4gICAgICAgICAgICByaWdodCA9IHJpZ2h0IC0gMTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQobWVhc3VyZVNwYW4pO1xyXG4gICAgICByZXR1cm4gdGV4dDtcclxuICAgIH1cclxuICAgIC8vIOa4heeQhuW5tui/lOWbnue7k+aenFxyXG4gICAgZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChtZWFzdXJlU3Bhbik7XHJcbiAgICByZXR1cm4gYCR7dGV4dC5zbGljZSgwLCBsZWZ0IC0gMSl9JHtsZWZ0ICE9PSAxID8gXCIuLi5cIiA6IFwiXCJ9JHt0ZXh0LnNsaWNlKFxyXG4gICAgICByaWdodCArIDFcclxuICAgICl9YDtcclxuICB9XHJcblxyXG4gIGdldFBhZGRpbmdCb3R0b20oKSB7XHJcbiAgICBsZXQgcGFkZGluZ0JvdHRvID0gNTA7XHJcbiAgICAvLyDlrZjlnKhUaXRsZSDmiJbogIUgRGVzY3JpcHRpb27ljaDkvY3nva7ml7ZcclxuICAgIGlmIChcclxuICAgICAgdGhpcy5kYXNoYm9hcmQgJiZcclxuICAgICAgKHRoaXMuZGFzaGJvYXJkLnRpdGxlIHx8IHRoaXMuZGFzaGJvYXJkLmRlc2NyaXB0aW9uKVxyXG4gICAgKSB7XHJcbiAgICAgIGxldCBnYXAgPSAwO1xyXG4gICAgICBpZiAodGhpcy5kYXNoYm9hcmQudGl0bGUpIHtcclxuICAgICAgICBnYXAgKz0gNTtcclxuICAgICAgfVxyXG4gICAgICBpZiAodGhpcy5kYXNoYm9hcmQuZGVzY3JpcHRpb24pIHtcclxuICAgICAgICBnYXAgKz0gMjA7XHJcbiAgICAgIH1cclxuICAgICAgY29uc3QgZWxlbWVudDogYW55ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIi5wb3J0bGV0cy1kZXNjcmlwdGlvblwiKTtcclxuICAgICAgcGFkZGluZ0JvdHRvID0gZWxlbWVudCA/IGVsZW1lbnQub2Zmc2V0SGVpZ2h0ICsgZ2FwICsgNTAgOiA1MDtcclxuICAgIH1cclxuICAgIHJldHVybiBwYWRkaW5nQm90dG8gKyBcInB4XCI7XHJcbiAgfVxyXG5cclxuICB1cGRhdGVEYXNoYm9hcmRMYXN0VXBkYXRlRGF0ZSgpIHtcclxuICAgIHRoaXMucGJmLnBhZ2VMb2FkaW5nID0gdHJ1ZTtcclxuICAgIHRoaXMucGJmLnBhZ2VMb2FkaW5nXy5uZXh0KHRydWUpO1xyXG4gICAgY29uc3QgX2RhdGFPYmogPSB7IGRhc2hib2FyZElkOiB0aGlzLnVybF9pZCwgbGFuZ3VhZ2U6IHRoaXMubGFuZyB9O1xyXG4gICAgdGhpcy5odHRwLnBvc3QodGhpcy5hcGkudXJsTGlzdC5HZXREYXNoYm9hcmRWMiwgX2RhdGFPYmosIChyZXMpID0+IHtcclxuICAgICAgcmVzID0gdGhpcy5wYmYuY29udmVydEtleXNUb0xvd2VyQ2FzZShyZXMpO1xyXG4gICAgICB0aGlzLmRhc2hib2FyZC5VcGRhdGVkRGF0ZSA9IHJlcy5VcGRhdGVkRGF0ZTtcclxuICAgICAgdGhpcy5wYmYucGFnZUxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgdGhpcy5wYmYucGFnZUxvYWRpbmdfLm5leHQodHJ1ZSk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHNhdmVkYXNoYm9hcmQoc2hvdWxkVXBkYXRlID0gXCJmYWxzZVwiKSB7XHJcbiAgICB0aGlzLnBiZi5wYWdlTG9hZGluZyA9IHRydWU7XHJcbiAgICB0aGlzLnBiZi5wYWdlTG9hZGluZ18ubmV4dCh0cnVlKTtcclxuICAgIGNvbnN0IHBkYXRhID0gdGhpcy5kYXNoYm9hcmRMYXlvdXQuc2VyaWFsaXplKCk7XHJcbiAgICB0aGlzLm5ld1Bvc2l0aW9uID0gWy4uLnBkYXRhXTtcclxuICAgIGNvbnN0IHBvcnRsZXRzID0gWy4uLnRoaXMucG9ydGxldHNdO1xyXG5cclxuICAgIGlmIChwb3J0bGV0cyAmJiBwb3J0bGV0cy5sZW5ndGgpIHtcclxuICAgICAgbGV0IGFjdGl2ZVRhYkhhc1BvcnRsZXQgPSBmYWxzZTtcclxuICAgICAgY29uc3QgdGFiSWRzID0gW107XHJcbiAgICAgIHBvcnRsZXRzLm1hcCgoZWwpID0+IHtcclxuICAgICAgICBjb25zdCBkYXRhID0gZmluZCh0aGlzLm5ld1Bvc2l0aW9uLCAoaXRlbSkgPT4gaXRlbS5pZCA9PT0gZWwubmV3SWQpO1xyXG4gICAgICAgIGlmIChkYXRhKSB7XHJcbiAgICAgICAgICBlbC5jb2wgPSBkYXRhLmNvbDtcclxuICAgICAgICAgIGVsLnBvc1ggPSBkYXRhLmNvbDtcclxuICAgICAgICAgIGVsLnJvdyA9IGRhdGEucm93O1xyXG4gICAgICAgICAgZWwucG9zWSA9IGRhdGEucm93O1xyXG4gICAgICAgICAgZWwuc2l6ZVggPSBkYXRhLnNpemVYO1xyXG4gICAgICAgICAgZWwud2lkdGggPSBkYXRhLnNpemVYO1xyXG4gICAgICAgICAgZWwuc2l6ZVkgPSBkYXRhLnNpemVZO1xyXG4gICAgICAgICAgZWwuaGVpZ2h0ID0gZGF0YS5zaXplWTtcclxuICAgICAgICB9XHJcbiAgICAgICAgbGV0IGNvbmZpZyA9IGVsLmNvbmZpZyA/IEpTT04ucGFyc2UoZWwuY29uZmlnKSA6IG51bGw7XHJcbiAgICAgICAgaWYgKGNvbmZpZykge1xyXG4gICAgICAgICAgY29uZmlnID0ge1xyXG4gICAgICAgICAgICAuLi5jb25maWcsXHJcbiAgICAgICAgICAgIHByZXZEYXNoYm9hcklkOiBlbC5pZCxcclxuICAgICAgICAgICAgYWN0aXZlVGFiOiB0aGlzLmFjdGl2ZVRhYixcclxuICAgICAgICAgIH07XHJcbiAgICAgICAgICB0YWJJZHMucHVzaChjb25maWcudGFiSWQpO1xyXG4gICAgICAgICAgaWYgKGNvbmZpZy50YWJJZCA9PT0gdGhpcy5hY3RpdmVUYWIpIHtcclxuICAgICAgICAgICAgYWN0aXZlVGFiSGFzUG9ydGxldCA9IHRydWU7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBlbC5jb25maWcgPSBDaXJjdWxhckpTT04uc3RyaW5naWZ5KGNvbmZpZyk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgICAgaWYgKCFhY3RpdmVUYWJIYXNQb3J0bGV0KSB7XHJcbiAgICAgICAgcG9ydGxldHMuZm9yRWFjaCgoZWwpID0+IHtcclxuICAgICAgICAgIGxldCBjb25maWcgPSBlbC5jb25maWcgPyBKU09OLnBhcnNlKGVsLmNvbmZpZykgOiBudWxsO1xyXG4gICAgICAgICAgaWYgKGNvbmZpZykge1xyXG4gICAgICAgICAgICBjb25maWcgPSB7XHJcbiAgICAgICAgICAgICAgLi4uY29uZmlnLFxyXG4gICAgICAgICAgICAgIHByZXZEYXNoYm9hcklkOiBlbC5pZCxcclxuICAgICAgICAgICAgICBhY3RpdmVUYWI6IHRhYklkc1swXSxcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGVsLmNvbmZpZyA9IENpcmN1bGFySlNPTi5zdHJpbmdpZnkoY29uZmlnKTtcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgbGV0IGRhdGFPYmogPSB7XHJcbiAgICAgIHBvcnRsZXRzLFxyXG4gICAgICBkYXNoYm9hcmRJZDogdGhpcy51cmxfaWQsXHJcbiAgICAgIGxhc3RVcGRhdGVEYXRlOiB0aGlzLmRhc2hib2FyZC5VcGRhdGVkRGF0ZSxcclxuICAgIH07XHJcbiAgICB0aGlzLmh0dHAucG9zdCh0aGlzLmFwaS51cmxMaXN0LlNhdmVEYXNoYm9hcmRQb3J0bGV0cywgZGF0YU9iaiwgKHJlcykgPT4ge1xyXG4gICAgICBpZiAocmVzLnN0YXR1cyA9PSBcIlNVQ0NFU1NcIikge1xyXG4gICAgICAgIHRoaXMuRGFzaGJvYXJkUG9ybGV0c1NlcnZpY2UuR2V0RGFzaGJvYXJkVjEoXHJcbiAgICAgICAgICB0aGlzLnVybF9pZCxcclxuICAgICAgICAgIGZhbHNlLFxyXG4gICAgICAgICAgKF9yZXMsIF9wb3J0bGV0cyA9IFtdKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMucGJmLnBhZ2VMb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHRoaXMucGJmLnBhZ2VMb2FkaW5nXy5uZXh0KHRydWUpO1xyXG4gICAgICAgICAgICBpZiAoIV9yZXMpIHtcclxuICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY29uc3QgX3NhdmVNZXNzYWdlID1cclxuICAgICAgICAgICAgICB0aGlzLnRyYW5zbGF0aW9uLkRBU0hCT0FSRF9TQVZFX01FU1NBR0UgfHxcclxuICAgICAgICAgICAgICBcIkRhc2hib2FyZCBoYXMgYmVlbiB1cGRhdGVkXCI7XHJcbiAgICAgICAgICAgIHRoaXMuZGlhbG9nU2VydmljZS5zaG93U3VjTXNnKF9zYXZlTWVzc2FnZSk7XHJcbiAgICAgICAgICAgIGlmIChzaG91bGRVcGRhdGUgIT09IFwidHJ1ZVwiKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy50b2dnbGVDdXN0b21pemUoZmFsc2UpO1xyXG4gICAgICAgICAgICAgIHRoaXMudG9nZ2xlU2lkZWJhcihmYWxzZSk7XHJcbiAgICAgICAgICAgICAgdGhpcy51cGRhdGVQdXNoQnRuKGZhbHNlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZURhc2hib2FyZCh7XHJcbiAgICAgICAgICAgICAgZGFzaGJvYXJkOiBfcmVzLFxyXG4gICAgICAgICAgICAgIHBvcnRsZXRzOiBfcG9ydGxldHMsXHJcbiAgICAgICAgICAgICAgbm9EZXRlY3Q6IHRydWUsXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB0aGlzLmluaXRsYXlvdXQodHJ1ZSk7XHJcbiAgICAgICAgICAgIHRoaXMucmVmLm1hcmtGb3JDaGVjaygpO1xyXG4gICAgICAgICAgICB0aGlzLnJlZi5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBsZXQgZXJyb3JNZXNzYWdlID0gXCJEYXNoYm9hcmQgc2F2ZSBmYWlsZWRcIjtcclxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShyZXMubWVzc2FnZXMpKSB7XHJcbiAgICAgICAgICBlcnJvck1lc3NhZ2UgPSByZXMubWVzc2FnZXNbMF0ubWVzc2FnZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5kaWFsb2dTZXJ2aWNlLnNob3dOb3RpZmljYXRpb24oZXJyb3JNZXNzYWdlLCB7XHJcbiAgICAgICAgICBzdGF0dXM6IFwiRXJyb3JcIixcclxuICAgICAgICB9KTtcclxuICAgICAgICB0aGlzLnBiZi5wYWdlTG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMucGJmLnBhZ2VMb2FkaW5nXy5uZXh0KHRydWUpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcbn1cclxuIl19
|
|
3308
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFuZS1ncm91cC1uZXcuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vcmFpc2UtY29tbW9uLWxpYi8iLCJzb3VyY2VzIjpbImxpYi9kYXNoYm9hcmQvcGFuZS1ncm91cC1uZXcuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLE9BQU8sRUFDTCxTQUFTLEVBRVQsU0FBUyxFQUNULGlCQUFpQixFQUNqQixNQUFNLEVBQ04sWUFBWSxFQUNaLFVBQVUsRUFDVixZQUFZLEVBQ1osU0FBUyxFQUNULFlBQVksRUFDWixLQUFLLEVBQ0wsUUFBUSxFQUNSLE1BQU0sR0FDUCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFFckQsT0FBTyxFQUFFLGNBQWMsRUFBRSxhQUFhLEVBQUUsTUFBTSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDeEUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDdkQsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE9BQU8sQ0FBQztBQUNoQyxPQUFPLEVBQ0wsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxrQkFBa0IsR0FDbkIsTUFBTSwyQkFBMkIsQ0FBQztBQUNuQyxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUVyRSxPQUFPLFlBQVksTUFBTSxlQUFlLENBQUM7QUFFekMsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDMUQsT0FBTyxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsTUFBTSxRQUFRLENBQUM7QUFDekMsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDM0UsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sd0RBQXdELENBQUM7QUFLOUYsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBT2hELE9B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QzBFOztJQUMxRSwwQ0FDc0Q7O0lBQ3RELHVEQXFCRTs7SUFDRix5REFxQkU7O0lBQ0Ysb0RBU0U7O0lBRUYsMENBdU9FOztJQUNGLDBDQUFrQjs7SUFDbEIsa0RBQTBDOztJQUMxQyxvREFBNEM7O0lBQzVDLHlEQUFpRDs7SUFDakQsa0RBQXlCOztJQUN6Qiw2Q0FBOEI7O0lBQzlCLHlDQUFxQjs7SUFDckIsbURBQTJCOztJQUMzQiwyQ0FBbUI7O0lBQ25CLHNDQUFNOztJQUNOLHdDQUFROztJQUNSLDBDQUFjOztJQUNkLHVDQUFjOztJQUNkLGtEQUEwQjs7SUFDMUIsd0RBQTZCOztJQUM3Qix5Q0FBYzs7SUFDZCwwQ0FBa0I7O0lBRWxCLDBDQUFnRTs7SUF3c0JoRSxrQ0FBRTs7SUFDRixrQ0FBRTs7SUF2c0JBLHVDQUF3Qjs7Ozs7SUFDeEIsOENBQW9DOztJQUNwQyxpREFBeUM7Ozs7O0lBQ3pDLG9DQUFvQjs7Ozs7SUFDcEIsK0NBQXNDOztJQUN0Qyx3REFBdUQ7Ozs7O0lBQ3ZELG9DQUE4Qjs7Ozs7SUFDOUIsdUNBQXNCOzs7OztJQUN0QiwyQ0FBOEI7Ozs7O0lBQzlCLHlDQUEwQjs7Ozs7SUFDMUIsb0NBQStDOzs7OztJQUMvQyxxQ0FBd0Q7O0lBQ3hELG1DQUFzRCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgQ29tcG9uZW50LFxyXG4gIE9uSW5pdCxcclxuICBWaWV3Q2hpbGQsXHJcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgT3V0cHV0LFxyXG4gIEV2ZW50RW1pdHRlcixcclxuICBFbGVtZW50UmVmLFxyXG4gIFZpZXdDaGlsZHJlbixcclxuICBRdWVyeUxpc3QsXHJcbiAgSG9zdExpc3RlbmVyLFxyXG4gIElucHV0LFxyXG4gIE9wdGlvbmFsLFxyXG4gIEluamVjdCxcclxufSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5pbXBvcnQgeyBNYXREaWFsb2cgfSBmcm9tIFwiQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nXCI7XHJcbmltcG9ydCB7IE1hdERhdGVwaWNrZXJJbnB1dEV2ZW50IH0gZnJvbSBcIkBhbmd1bGFyL21hdGVyaWFsL2RhdGVwaWNrZXJcIjtcclxuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUsIE5hdmlnYXRpb25FbmQsIFJvdXRlciB9IGZyb20gXCJAYW5ndWxhci9yb3V0ZXJcIjtcclxuaW1wb3J0IHsgRGFzaGJvYXJkU2VydmljZSB9IGZyb20gXCIuL2Rhc2hib2FyZC5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7IEFwaUxpc3QgfSBmcm9tIFwiLi9hcGlcIjtcclxuaW1wb3J0IHtcclxuICBBUElfU0VSVklDRV9UT0tFTixcclxuICBQQkZfVE9LRU4sXHJcbiAgUk9MRV9TRVJWSUNFX1RPS0VOLFxyXG59IGZyb20gXCIuLi9zZXJ2aWNlL0luamVjdGlvblRva2VuXCI7XHJcbmltcG9ydCB7IERhc2hib2FyZFBvcmxldHNTZXJ2aWNlIH0gZnJvbSBcIi4vZGFzaGJvYXJkUG9ybGV0cy5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gXCJyeGpzXCI7XHJcbmltcG9ydCBDaXJjdWxhckpTT04gZnJvbSBcImNpcmN1bGFyLWpzb25cIjtcclxuXHJcbmltcG9ydCB7IE1BVF9EQVRFX0ZPUk1BVFMgfSBmcm9tIFwiQGFuZ3VsYXIvbWF0ZXJpYWwvY29yZVwiO1xyXG5pbXBvcnQgeyBjbG9uZURlZXAsIGZpbmQgfSBmcm9tIFwibG9kYXNoXCI7XHJcbmltcG9ydCB7IERhc2hib2FyZExheW91dENvbXBvbmVudCB9IGZyb20gXCJAc3luY2Z1c2lvbi9lajItYW5ndWxhci1sYXlvdXRzXCI7XHJcbmltcG9ydCB7IEZpZWxkRm9ybWF0Q29tcG9uZW50IH0gZnJvbSBcIi4vc2lkZWJhci1pY29ubGlzdC9maWVsZC1mb3JtYXQvZmllbGQtZm9ybWF0LmNvbXBvbmVudFwiO1xyXG5pbXBvcnQgeyBHYWRnZXRUYWJsZUNvbXBvbmVudCB9IGZyb20gXCIuL2dhZGdldC1ncm91cC9nYWRnZXQtdGFibGUvZ2FkZ2V0LXRhYmxlLmNvbXBvbmVudFwiO1xyXG5pbXBvcnQgeyBHYWRnZXRQaXZvdENvbXBvbmVudCB9IGZyb20gXCIuL2dhZGdldC1ncm91cC9nYWRnZXQtcGl2b3QvZ2FkZ2V0LXBpdm90LmNvbXBvbmVudFwiO1xyXG5pbXBvcnQgeyBHYWRnZXRQaXZvdENoYXJ0Q29tcG9uZW50IH0gZnJvbSBcIi4vZ2FkZ2V0LWdyb3VwL2dhZGdldC1waXZvdC1jaGFydC9nYWRnZXQtcGl2b3QuY29tcG9uZW50XCI7XHJcbmltcG9ydCB7IEdhZGdldFRyYW5zcG9zZUNvbXBvbmVudCB9IGZyb20gXCIuL2dhZGdldC1ncm91cC9nYWRnZXQtdHJhbnNwb3NlL2dhZGdldC10cmFuc3Bvc2UuY29tcG9uZW50XCI7XHJcbmltcG9ydCB7IGdldFRyYW5zbGF0aW9uIH0gZnJvbSBcIi4uL3V0aWxzL3V0aWxzXCI7XHJcbmltcG9ydCB7XHJcbiAgLy8gUGRmRXhwb3J0UHJvcGVydGllcyxcclxuICBFeGNlbEV4cG9ydFByb3BlcnRpZXMsXHJcbiAgQ29sdW1uTW9kZWwsXHJcbn0gZnJvbSBcIkBzeW5jZnVzaW9uL2VqMi1hbmd1bGFyLWdyaWRzXCI7XHJcbmltcG9ydCB7IElBeGlzU2V0IH0gZnJvbSBcIkBzeW5jZnVzaW9uL2VqMi1hbmd1bGFyLXBpdm90dmlld1wiO1xyXG5pbXBvcnQgeyBIdHRwQ2xpZW50IH0gZnJvbSBcIkBhbmd1bGFyL2NvbW1vbi9odHRwXCI7XHJcbmltcG9ydCB7IERhdGFNYXJ0TmV3Q29tcG9uZW50IH0gZnJvbSBcIi4vZGFzaGJvYXJkLXByb3BlcnRpZXMvZGF0YS1tYXJ0LW5ldy9kYXRhLW1hcnQtbmV3LmNvbXBvbmVudFwiO1xyXG5pbXBvcnQgeyBCYXJDaGFydHNDb21wb25lbnQgfSBmcm9tIFwiLi9iYXItY2hhcnRzL2Jhci1jaGFydHMuY29tcG9uZW50XCI7XHJcbmltcG9ydCB7IGRlYm91bmNlIH0gZnJvbSBcIi4vYmFyLWNoYXJ0cy91dGlsc1wiO1xyXG5pbXBvcnQgeyBEYXRlUGlwZSB9IGZyb20gXCJAYW5ndWxhci9jb21tb25cIjtcclxuaW1wb3J0IHsgUGFuZURvd25sb2FkQ29tcG9uZW50IH0gZnJvbSBcIi4vZGlhbG9nLWdyb3VwL2Rvd25sb2FkL2luZGV4LmNvbXBvbmVudFwiO1xyXG5pbXBvcnQgeyBmaWx0ZXIgfSBmcm9tIFwicnhqcy9vcGVyYXRvcnNcIjtcclxuaW1wb3J0IHsgRGlhbG9nU2VydmljZSB9IGZyb20gXCIuLi9zZXJ2aWNlL2RpYWxvZy5zZXJ2aWNlXCI7XHJcblxyXG5sZXQgZGF0ZUZvcm1hdCA9IFwiREQtTU0tWVlZWVwiO1xyXG5pZiAobG9jYWxTdG9yYWdlW1wic2V0dGluZ1wiXSkge1xyXG4gIGNvbnN0IGRhdGVBcnJheSA9IGZpbmQoXHJcbiAgICBKU09OLnBhcnNlKGxvY2FsU3RvcmFnZS5nZXRJdGVtKFwic2V0dGluZ1wiKSB8fCBcInt9XCIpLFxyXG4gICAgKGl0ZW0pID0+IGl0ZW0gJiYgaXRlbVtcInBhcmFtZXRlclwiXSA9PT0gXCJEQVRFX0ZPUk1BVFwiXHJcbiAgKTtcclxuICBpZiAoZGF0ZUFycmF5KSB7XHJcbiAgICBkYXRlRm9ybWF0ID0gZGF0ZUFycmF5LnZhbHVlO1xyXG4gIH1cclxufVxyXG5cclxuY29uc3QgTVlfRk9STUFUUyA9IHtcclxuICBwYXJzZToge1xyXG4gICAgZGF0ZUlucHV0OiBcIkRELU1NLVlZWVlcIixcclxuICB9LFxyXG4gIGRpc3BsYXk6IHtcclxuICAgIGRhdGVJbnB1dDogZGF0ZUZvcm1hdCxcclxuICAgIG1vbnRoWWVhckxhYmVsOiBcIllZWVlcIixcclxuICAgIGRhdGVBMTF5TGFiZWw6IFwiTExcIixcclxuICAgIG1vbnRoWWVhckExMXlMYWJlbDogXCJZWVlZXCIsXHJcbiAgfSxcclxufTtcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiBcInJzLWRhc2hib2FyZFwiLFxyXG4gIHRlbXBsYXRlVXJsOiBcIi4vcGFuZS1ncm91cC1uZXcuY29tcG9uZW50Lmh0bWxcIixcclxuICBzdHlsZVVybHM6IFtcIi4vcGFuZS1ncm91cC1uZXcuY29tcG9uZW50LnNjc3NcIl0sXHJcbiAgLy8gY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXHJcbiAgcHJvdmlkZXJzOiBbRGF0ZVBpcGUsIHsgcHJvdmlkZTogTUFUX0RBVEVfRk9STUFUUywgdXNlVmFsdWU6IE1ZX0ZPUk1BVFMgfV0sXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBQYW5lR3JvdXBOZXdDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xyXG4gIEBPdXRwdXQoKSBkYXRlQ2hhbmdlOiBFdmVudEVtaXR0ZXI8TWF0RGF0ZXBpY2tlcklucHV0RXZlbnQ8YW55Pj47XHJcbiAgQElucHV0KCkgYXBwQ29kZSA9IFwiUE1TXCI7XHJcbiAgQFZpZXdDaGlsZChcInNpZGViYXJcIiwgeyBzdGF0aWM6IGZhbHNlIH0pIHNpZGViYXI6IGFueTtcclxuICBAVmlld0NoaWxkcmVuKFwidW5jbGlja1wiKSB1bmNsaWNrOiBRdWVyeUxpc3Q8RWxlbWVudFJlZj47XHJcbiAgQFZpZXdDaGlsZHJlbihcInVuY2xpY2tHcmFuZFwiKSB1bmNsaWNrR3JhbmQ6IFF1ZXJ5TGlzdDxFbGVtZW50UmVmPjtcclxuICBAVmlld0NoaWxkcmVuKFwibmV3Q2hhcnRcIikgbmV3Q2hhcnQ6IFF1ZXJ5TGlzdDxCYXJDaGFydHNDb21wb25lbnQ+O1xyXG4gIHBvcnRsZXQ7XHJcbiAgdGFiYWN0aXZlOiBib29sZWFuO1xyXG4gIGRhc2hib2FyZDtcclxuICBzZWxlY3RlZFkgPSBbXTtcclxuICBzZWxlY3RlZFNlY29uZFkgPSBbXTtcclxuICBzZWxlY3RlZFggPSBbXTtcclxuICBzZWxlY3RlZE11bHRpcGxlczogYW55O1xyXG4gIHNlbGVjdFRoZW1lOiBhbnk7XHJcbiAgaGFzSW5pdCA9IHRydWU7XHJcbiAgYWN0aXZlVGFiSWQ6IGFueTtcclxuICBoYXNDaGFuZ2VEYXRhVGFibGUgPSBmYWxzZTtcclxuICBhY3RpdmVUYWJMYWJlbCA9IFwiXCI7XHJcbiAgc3RheUFjdGl2ZVRhYjogYm9vbGVhbjtcclxuICBASG9zdExpc3RlbmVyKFwiZG9jdW1lbnQ6Y2xpY2tcIiwgW1wiJGV2ZW50XCJdKSBib2R5Q2xpY2soZSkge1xyXG4gICAgaWYgKFxyXG4gICAgICB0aGlzLnVuY2xpY2sgJiZcclxuICAgICAgdGhpcy51bmNsaWNrLmZpcnN0ICYmXHJcbiAgICAgIGUudGFyZ2V0LnRhZ05hbWUgIT09IFwiSU1HXCIgJiZcclxuICAgICAgIXRoaXMudW5jbGljay5maXJzdC5uYXRpdmVFbGVtZW50LmNvbnRhaW5zKGUudGFyZ2V0KVxyXG4gICAgKSB7XHJcbiAgICAgIHRoaXMuc2hvd1N1YlRvdGFsR3JvdXAgPSBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoXHJcbiAgICAgIHRoaXMudW5jbGlja0dyYW5kLmZpcnN0ICYmXHJcbiAgICAgIGUudGFyZ2V0LnRhZ05hbWUgIT09IFwiSU1HXCIgJiZcclxuICAgICAgIXRoaXMudW5jbGlja0dyYW5kLmZpcnN0Lm5hdGl2ZUVsZW1lbnQuY29udGFpbnMoZS50YXJnZXQpXHJcbiAgICApIHtcclxuICAgICAgdGhpcy5zaG93Z3JhbmRUb3RhbEdyb3VwID0gZmFsc2U7XHJcbiAgICAgIHRoaXMuc2hvd1RhYmxlR3JhbmRUb3RhbEdyb3VwID0gZmFsc2U7XHJcbiAgICB9XHJcbiAgfVxyXG4gIHB1YmxpYyB0cmFuc2xhdGlvbiA9IGdldFRyYW5zbGF0aW9uKClcclxuICBwcml2YXRlIGxhbmc7XHJcbiAgcHVzaF9idG4gPSBmYWxzZTtcclxuICBAVmlld0NoaWxkKFwiZGVmYXVsdExheW91dFwiLCB7IHN0YXRpYzogZmFsc2UgfSlcclxuICBkYXNoYm9hcmRMYXlvdXQ6IERhc2hib2FyZExheW91dENvbXBvbmVudDtcclxuICBAVmlld0NoaWxkKFwiY2FudmFzXCIsIHsgc3RhdGljOiB0cnVlIH0pIGNhbnZhczogRWxlbWVudFJlZjtcclxuICBwcml2YXRlIGNvbmZpZztcclxuICBwdWJsaWMgZHJhZ2dhYmxlSGFuZGxlOiBzdHJpbmcgPSBcIi5nYWRnZXQtdGl0bGVcIjtcclxuICBwcml2YXRlIHN1YnNjcmlwdGlvbnM6IFN1YnNjcmlwdGlvbltdID0gW107XHJcbiAgcHVibGljIHVybDtcclxuICBwdWJsaWMgdXJsX2lkO1xyXG4gIHB1YmxpYyB1cmxfdHlwZTtcclxuICAvLyBwcml2YXRlIGltZztcclxuICBwdWJsaWMgZGF0ZVBpcGVGb3JtYXQ7XHJcbiAgcHVibGljIGhhdmVGdWxsU2NyZWVuID0gW107XHJcbiAgLy8gcHJpdmF0ZSBjbGllbnRIZWlnaHRfO1xyXG4gIHB1YmxpYyBjZWxsU3BhY2luZzogbnVtYmVyW10gPSBbMjAsIDIwXTtcclxuICBwdWJsaWMgY2VsbEFzcGVjdFJhdGlvO1xyXG4gIHB1YmxpYyByZXNpemFibGVIYW5kbGVzO1xyXG4gIG5ld1Bvc2l0aW9uID0gW107XHJcblxyXG4gIHB1YmxpYyBtZWRpYVF1ZXJ5O1xyXG4gIGZpZ3VyZUNvZGU7XHJcbiAgY3VzdG9taXplZCA9IGZhbHNlO1xyXG4gIHB1YmxpYyBjaGFydFR5cGVMaXN0ID0gW1wiQ29sdW1uXCIsIFwiQmFyXCIsIFwiTGluZVwiLCBcIkFyZWFcIiwgXCJTY2F0dGVyXCIsIFwiUG9sYXJcIl07XHJcbiAgQFZpZXdDaGlsZHJlbihcInRhYmxlXCIpXHJcbiAgcHVibGljIHRhYmxlOiBRdWVyeUxpc3Q8R2FkZ2V0VGFibGVDb21wb25lbnQ+O1xyXG4gIEBWaWV3Q2hpbGRyZW4oXCJwaXZvdFwiKVxyXG4gIHB1YmxpYyBwaXZvdDogUXVlcnlMaXN0PEdhZGdldFBpdm90Q29tcG9uZW50IHwgR2FkZ2V0UGl2b3RDaGFydENvbXBvbmVudD47XHJcbiAgQFZpZXdDaGlsZHJlbihcInRyYW5zcG9zZVwiKVxyXG4gIHB1YmxpYyB0cmFuc3Bvc2U6IFF1ZXJ5TGlzdDxHYWRnZXRUcmFuc3Bvc2VDb21wb25lbnQ+O1xyXG4gIHB1YmxpYyBwaXZvdFRhYmxlU3ViVG90YWxMaXN0OiBBcnJheTxhbnk+ID0gW1xyXG4gICAge1xyXG4gICAgICBzZWxlY3RlZDogZmFsc2UsXHJcbiAgICAgIHZhbHVlOiB0aGlzLnRyYW5zbGF0aW9uLlNIT1dfU1VCX1RPVEFMUyB8fCBcIlNob3cgc3ViIHRvdGFsc1wiLFxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgc2VsZWN0ZWQ6IGZhbHNlLFxyXG4gICAgICB2YWx1ZTogdGhpcy50cmFuc2xhdGlvbi5ISURFX1NVQl9UT1RBTFMgfHwgXCJIaWRlIHN1YiB0b3RhbHNcIixcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIHNlbGVjdGVkOiBmYWxzZSxcclxuICAgICAgdmFsdWU6XHJcbiAgICAgICAgdGhpcy50cmFuc2xhdGlvbi5TSE9XX1NVQl9UT1RBTFNfUk9XU19PTkxZIHx8XHJcbiAgICAgICAgXCJTaG93IHN1YiB0b3RhbHMgcm93cyBvbmx5XCIsXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBzZWxlY3RlZDogZmFsc2UsXHJcbiAgICAgIHZhbHVlOlxyXG4gICAgICAgIHRoaXMudHJhbnNsYXRpb24uU0hPV19TVUJfVE9UQUxTX0NPTFVNTlNfT05MWSB8fFxyXG4gICAgICAgIFwiU2hvdyBzdWIgdG90YWxzIGNvbHVtbnMgb25seVwiLFxyXG4gICAgfSxcclxuICBdO1xyXG4gIHB1YmxpYyBwaXZvdFRhYmxlR3JhbmRUb3RhbExpc3Q6IEFycmF5PGFueT4gPSBbXHJcbiAgICB7XHJcbiAgICAgIHNlbGVjdGVkOiBmYWxzZSxcclxuICAgICAgdmFsdWU6IHRoaXMudHJhbnNsYXRpb24uU0hPV19HUkFORF9UT1RBTFMgfHwgXCJTaG93IGdyYW5kIHRvdGFsc1wiLFxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgc2VsZWN0ZWQ6IGZhbHNlLFxyXG4gICAgICB2YWx1ZTogdGhpcy50cmFuc2xhdGlvbi5ISURFX0dSQU5EX1RPVEFMUyB8fCBcIkhpZGUgZ3JhbmQgdG90YWxzXCIsXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBzZWxlY3RlZDogZmFsc2UsXHJcbiAgICAgIHZhbHVlOlxyXG4gICAgICAgIHRoaXMudHJhbnNsYXRpb24uU0hPV19HUkFORF9UT1RBTFNfUk9XU19PTkxZIHx8XHJcbiAgICAgICAgXCJTaG93IGdyYW5kIHRvdGFscyByb3dzIG9ubHlcIixcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIHNlbGVjdGVkOiBmYWxzZSxcclxuICAgICAgdmFsdWU6XHJcbiAgICAgICAgdGhpcy50cmFuc2xhdGlvbi5TSE9XX0dSQU5EX1RPVEFMU19DT0xVTU5TX09OTFkgfHxcclxuICAgICAgICBcIlNob3cgZ3JhbmQgdG90YWxzIGNvbHVtbnMgb25seVwiLFxyXG4gICAgfSxcclxuICBdO1xyXG4gIHB1YmxpYyB0YWJsZUdyYW5kVG90YWxMaXN0OiBBcnJheTxhbnk+ID0gW1xyXG4gICAge1xyXG4gICAgICBzZWxlY3RlZDogZmFsc2UsXHJcbiAgICAgIHZhbHVlOiB0aGlzLnRyYW5zbGF0aW9uLlNIT1dfR1JBTkRfVE9UQUxTIHx8IFwiU2hvdyBncmFuZCB0b3RhbHNcIixcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIHNlbGVjdGVkOiBmYWxzZSxcclxuICAgICAgdmFsdWU6IHRoaXMudHJhbnNsYXRpb24uSElERV9HUkFORF9UT1RBTFMgfHwgXCJIaWRlIGdyYW5kIHRvdGFsc1wiLFxyXG4gICAgfSxcclxuICBdO1xyXG5cclxuICB0aGVtZURhdGE6IGFueSA9IFtcclxuICAgIHtcclxuICAgICAgaWQ6IFwidGhlbWUxM1wiLFxyXG4gICAgICB2YWx1ZTogW1wiIzFDMzQ4NFwiLCBcIiMzNUI5RkNcIl0sXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBpZDogXCJ0aGVtZTE0XCIsXHJcbiAgICAgIHZhbHVlOiBbXCIjMDQ1NzhGXCIsIFwiIzNFQkJDRVwiXSxcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIGlkOiBcInRoZW1lMTVcIixcclxuICAgICAgdmFsdWU6IFtcIiMxQzM0ODRcIiwgXCIjMTM2QkJCXCIsIFwiIzM1QjlGQ1wiXSxcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIGlkOiBcInRoZW1lMTZcIixcclxuICAgICAgdmFsdWU6IFtcIiMwNDU3OEZcIiwgXCIjMDA4MkFGXCIsIFwiIzNFQkJDRVwiXSxcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIGlkOiBcInRoZW1lMTdcIixcclxuICAgICAgdmFsdWU6IFtcIiMxQzM0ODRcIiwgXCIjMTY1OUE5XCIsIFwiIzFEOTdFMVwiLCBcIiMzNUI5RkNcIl0sXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBpZDogXCJ0aGVtZTE4XCIsXHJcbiAgICAgIHZhbHVlOiBbXCIjMDQ1NzhGXCIsIFwiIzAwNzBBM1wiLCBcIiMxNkEyQzJcIiwgXCIjM0VCQkNFXCJdLFxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgaWQ6IFwidGhlbWUxOVwiLFxyXG4gICAgICB2YWx1ZTogW1wiIzFDMzQ4NFwiLCBcIiMxNjU5QTlcIiwgXCIjMTM3NUM0XCIsIFwiIzFEOTdFMVwiLCBcIiMzNUI5RkNcIl0sXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBpZDogXCJ0aGVtZTIwXCIsXHJcbiAgICAgIHZhbHVlOiBbXCIjMDQ1NzhGXCIsIFwiIzAwNzBBM1wiLCBcIiMwMDg5QjRcIiwgXCIjMTZBMkMyXCIsIFwiIzNFQkJDRVwiXSxcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIGlkOiBcInRoZW1lMjFcIixcclxuICAgICAgdmFsdWU6IFtcIiMxQzM0ODRcIiwgXCIjMTY1OUE5XCIsIFwiIzEzNjhCOFwiLCBcIiMxMzc1QzRcIiwgXCIjMUQ5N0UxXCIsIFwiIzM1QjlGQ1wiXSxcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIGlkOiBcInRoZW1lMjJcIixcclxuICAgICAgdmFsdWU6IFtcIiMwNDU3OEZcIiwgXCIjMDA3MEEzXCIsIFwiIzAwN0ZBRFwiLCBcIiMwMDg5QjRcIiwgXCIjMTZBMkMyXCIsIFwiIzNFQkJDRVwiXSxcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIGlkOiBcInRoZW1lMjNcIixcclxuICAgICAgdmFsdWU6IFtcclxuICAgICAgICBcIiMxQzM0ODRcIixcclxuICAgICAgICBcIiMxNjU5QTlcIixcclxuICAgICAgICBcIiMxNDVGQUZcIixcclxuICAgICAgICBcIiMxMzY4QjhcIixcclxuICAgICAgICBcIiMxMzc1QzRcIixcclxuICAgICAgICBcIiMxRDk3RTFcIixcclxuICAgICAgICBcIiMzNUI5RkNcIixcclxuICAgICAgXSxcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIGlkOiBcInRoZW1lMjRcIixcclxuICAgICAgdmFsdWU6IFtcclxuICAgICAgICBcIiMwNDU3OEZcIixcclxuICAgICAgICBcIiMwMDcwQTNcIixcclxuICAgICAgICBcIiMwMDc4QTlcIixcclxuICAgICAgICBcIiMwMDdGQURcIixcclxuICAgICAgICBcIiMwMDg5QjRcIixcclxuICAgICAgICBcIiMxNkEyQzJcIixcclxuICAgICAgICBcIiMzRUJCQ0VcIixcclxuICAgICAgXSxcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIGlkOiBcInRoZW1lMTFcIixcclxuICAgICAgdmFsdWU6IFtcclxuICAgICAgICBcIiMxQzM0ODRcIixcclxuICAgICAgICBcIiMxOTQ2OTdcIixcclxuICAgICAgICBcIiMxNjU5QTlcIixcclxuICAgICAgICBcIiMxMzZCQkJcIixcclxuICAgICAgICBcIiMxNDdFQ0NcIixcclxuICAgICAgICBcIiMxQjkyRERcIixcclxuICAgICAgICBcIiMyNkE1RURcIixcclxuICAgICAgICBcIiMzNUI5RkNcIixcclxuICAgICAgXSxcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIGlkOiBcInRoZW1lMTJcIixcclxuICAgICAgdmFsdWU6IFtcclxuICAgICAgICBcIiMwNDU3OEZcIixcclxuICAgICAgICBcIiMwMDY1OUJcIixcclxuICAgICAgICBcIiMwMDczQTZcIixcclxuICAgICAgICBcIiMwMDgyQUZcIixcclxuICAgICAgICBcIiMwMDkwQjhcIixcclxuICAgICAgICBcIiMwRjlFQzBcIixcclxuICAgICAgICBcIiMyOUFEQzdcIixcclxuICAgICAgICBcIiMzRUJCQ0VcIixcclxuICAgICAgXSxcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIGlkOiBcInRoZW1lMVwiLFxyXG4gICAgICB2YWx1ZTogW1xyXG4gICAgICAgIFwiIzU5NGJiOVwiLFxyXG4gICAgICAgIFwiI2YxYWYzMlwiLFxyXG4gICAgICAgIFwiIzQ2ODhlZFwiLFxyXG4gICAgICAgIFwiI2UwNTYzZVwiLFxyXG4gICAgICAgIFwiIzgwM2E2M1wiLFxyXG4gICAgICAgIFwiIzZkZDhiNVwiLFxyXG4gICAgICAgIFwiI2U4NzIyNVwiLFxyXG4gICAgICAgIFwiI2M1ZGY0MlwiLFxyXG4gICAgICAgIFwiI2M2NDM3ZFwiLFxyXG4gICAgICBdLFxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgaWQ6IFwidGhlbWUyXCIsXHJcbiAgICAgIHZhbHVlOiBbXHJcbiAgICAgICAgXCIjNDY4OGVkXCIsXHJcbiAgICAgICAgXCIjZjFhZjMyXCIsXHJcbiAgICAgICAgXCIjZTA1NjNlXCIsXHJcbiAgICAgICAgXCIjODAzYTYzXCIsXHJcbiAgICAgICAgXCIjNmRkOGI1XCIsXHJcbiAgICAgICAgXCIjZTg3MjI1XCIsXHJcbiAgICAgICAgXCIjYzVkZjQyXCIsXHJcbiAgICAgICAgXCIjYzY0MzdkXCIsXHJcbiAgICAgICAgXCIjNTk0YmI5XCIsXHJcbiAgICAgIF0sXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBpZDogXCJ0aGVtZTNcIixcclxuICAgICAgdmFsdWU6IFtcclxuICAgICAgICBcIiNjNjQzN2RcIixcclxuICAgICAgICBcIiNjNWRmNDJcIixcclxuICAgICAgICBcIiNlODcyMjVcIixcclxuICAgICAgICBcIiM2ZGQ4YjVcIixcclxuICAgICAgICBcIiNlMDU2M2VcIixcclxuICAgICAgICBcIiM4MDNhNjNcIixcclxuICAgICAgICBcIiNmMWFmMzJcIixcclxuICAgICAgICBcIiM1OTRiYjlcIixcclxuICAgICAgICBcIiM0Njg4ZWRcIixcclxuICAgICAgXSxcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIGlkOiBcInRoZW1lNFwiLFxyXG4gICAgICB2YWx1ZTogW1xyXG4gICAgICAgIFwiIzJmNDk5ZlwiLFxyXG4gICAgICAgIFwiIzhkMWQyZVwiLFxyXG4gICAgICAgIFwiI2U5YmYzNVwiLFxyXG4gICAgICAgIFwiIzUxNzcyZlwiLFxyXG4gICAgICAgIFwiIzQ2OWJkOFwiLFxyXG4gICAgICAgIFwiIzVjNDQ4ZlwiLFxyXG4gICAgICAgIFwiI2RhNzMyZlwiLFxyXG4gICAgICAgIFwiIzI0NTM1M1wiLFxyXG4gICAgICAgIFwiIzQzYTI0NVwiLFxyXG4gICAgICBdLFxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgaWQ6IFwidGhlbWU1XCIsXHJcbiAgICAgIHZhbHVlOiBbXHJcbiAgICAgICAgXCIjMzgzODM5XCIsXHJcbiAgICAgICAgXCIjNDQ2ZWM2XCIsXHJcbiAgICAgICAgXCIjY2Y2Mzg0XCIsXHJcbiAgICAgICAgXCIjZWJiMzdlXCIsXHJcbiAgICAgICAgXCIjNzFhMjQ5XCIsXHJcbiAgICAgICAgXCIjNGJiMWE1XCIsXHJcbiAgICAgICAgXCIjZTg3MjI1XCIsXHJcbiAgICAgICAgXCIjYzVkZjQyXCIsXHJcbiAgICAgICAgXCIjYzY0MzdkXCIsXHJcbiAgICAgIF0sXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBpZDogXCJ0aGVtZTZcIixcclxuICAgICAgdmFsdWU6IFtcclxuICAgICAgICBcIiM1MTdhZTFcIixcclxuICAgICAgICBcIiM2Mzg2ZTVcIixcclxuICAgICAgICBcIiM3NDkxZTlcIixcclxuICAgICAgICBcIiM4NDlkZWNcIixcclxuICAgICAgICBcIiM5NGE5ZWZcIixcclxuICAgICAgICBcIiNhNGI2ZjJcIixcclxuICAgICAgICBcIiNiNGMzZjZcIixcclxuICAgICAgICBcIiNjNGNmZjlcIixcclxuICAgICAgICBcIiNkNGRkZmRcIixcclxuICAgICAgXSxcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIGlkOiBcInRoZW1lN1wiLFxyXG4gICAgICB2YWx1ZTogW1xyXG4gICAgICAgIFwiIzM5ODI4ZVwiLFxyXG4gICAgICAgIFwiIzQ4OGU5OVwiLFxyXG4gICAgICAgIFwiIzU3OWFhNVwiLFxyXG4gICAgICAgIFwiIzY2YTZiMFwiLFxyXG4gICAgICAgIFwiIzc1YjNiZFwiLFxyXG4gICAgICAgIFwiIzg1YmZjOVwiLFxyXG4gICAgICAgIFwiIzk1Y2RkNlwiLFxyXG4gICAgICAgIFwiI2E0ZGFlMlwiLFxyXG4gICAgICAgIFwiI2I1ZThmMFwiLFxyXG4gICAgICBdLFxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgaWQ6IFwidGhlbWU4XCIsXHJcbiAgICAgIHZhbHVlOiBbXHJcbiAgICAgICAgXCIjZTc5NjNkXCIsXHJcbiAgICAgICAgXCIjZWE5ZTRiXCIsXHJcbiAgICAgICAgXCIjZWVhNjU5XCIsXHJcbiAgICAgICAgXCIjZjBhZTY4XCIsXHJcbiAgICAgICAgXCIjZjJiNjc4XCIsXHJcbiAgICAgICAgXCIjZjNiZjg3XCIsXHJcbiAgICAgICAgXCIjZjVjNzk4XCIsXHJcbiAgICAgICAgXCIjZjZkMGFhXCIsXHJcbiAgICAgICAgXCIjZjdkOWJiXCIsXHJcbiAgICAgIF0sXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBpZDogXCJ0aGVtZTlcIixcclxuICAgICAgdmFsdWU6IFtcclxuICAgICAgICBcIiM2NGE4YjRcIixcclxuICAgICAgICBcIiM3ZWJlYzBcIixcclxuICAgICAgICBcIiM5Y2M5Y2FcIixcclxuICAgICAgICBcIiNiOGQ0ZDRcIixcclxuICAgICAgICBcIiNkOWQ2Y2RcIixcclxuICAgICAgICBcIiNkOGI3YTdcIixcclxuICAgICAgICBcIiNjZThmOTNcIixcclxuICAgICAgICBcIiNjMTYyN2ZcIixcclxuICAgICAgICBcIiNhZDI0NThcIixcclxuICAgICAgXSxcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIGlkOiBcInRoZW1lMTBcIixcclxuICAgICAgdmFsdWU6IFtcclxuICAgICAgICBcIiM0MTc2YmFcIixcclxuICAgICAgICBcIiM1NTlhZThcIixcclxuICAgICAgICBcIiM3MGIzZThcIixcclxuICAgICAgICBcIiNhN2NjZTdcIixcclxuICAgICAgICBcIiNkZmRmZGZcIixcclxuICAgICAgICBcIiNkMmEwOGJcIixcclxuICAgICAgICBcIiNjNzZhNTBcIixcclxuICAgICAgICBcIiNjYTRlMzRcIixcclxuICAgICAgICBcIiNhYTNjMjlcIixcclxuICAgICAgXSxcclxuICAgIH0sXHJcbiAgXTtcclxuICBzdGFydEVkaXQgPSBmYWxzZTtcclxuICBwdWJsaWMgc2hvd1N1YlRvdGFsR3JvdXA6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwdWJsaWMgc2hvd2dyYW5kVG90YWxHcm91cDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHB1YmxpYyBzaG93VGFibGVHcmFuZFRvdGFsR3JvdXA6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwdWJsaWMgQ3VycmVudF9Qb3J0bGV0SWQ7XHJcbiAgcHVibGljIHJlc3RvcmVNb2RlbDogYW55ID0gW107XHJcbiAgcHVibGljIHRoZW1lT2JqID0ge307XHJcbiAgZW5hYmxlTXVsdGlwbGVBeGlzID0gZmFsc2U7XHJcbiAgc2hvd0xlZ2VuZCA9IGZhbHNlO1xyXG4gIHRpbWVyO1xyXG4gIHRhYkxpc3Q7XHJcbiAgYWN0aXZlVGFiID0gMTtcclxuICBwcmV2SWQgPSBudWxsO1xyXG4gIGRhc2hib2FyZF9zaWRlYmFyID0gZmFsc2U7XHJcbiAgQWN0aXZlRGFzaGJvYXJkUG9ydGxldHMgPSBbXTtcclxuICBwb3J0bGV0cyA9IFtdO1xyXG4gIGhhc1Jlc2l6ZSA9IGZhbHNlO1xyXG5cclxuICBAVmlld0NoaWxkKFwicGFuZXNMaXN0XCIsIHsgc3RhdGljOiB0cnVlIH0pIHBhbmVzTGlzdDogRWxlbWVudFJlZjtcclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHB1YmxpYyBkaWFsb2c6IE1hdERpYWxvZyxcclxuICAgIHByaXZhdGUgZGlhbG9nU2VydmljZTogRGlhbG9nU2VydmljZSxcclxuICAgIHB1YmxpYyBkYXNoYm9hcmRTZXJ2aWNlOiBEYXNoYm9hcmRTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBhcGk6IEFwaUxpc3QsXHJcbiAgICBwcml2YXRlIGFjdGl2YXRlZFJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSxcclxuICAgIHB1YmxpYyBEYXNoYm9hcmRQb3JsZXRzU2VydmljZTogRGFzaGJvYXJkUG9ybGV0c1NlcnZpY2UsXHJcbiAgICBwcml2YXRlIHJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgICBwcml2YXRlIHJvdXRlcjogUm91dGVyLFxyXG4gICAgcHJpdmF0ZSBodHRwQ2xpZW50OiBIdHRwQ2xpZW50LFxyXG4gICAgcHJpdmF0ZSBkYXRlUGlwZTogRGF0ZVBpcGUsXHJcbiAgICBAT3B0aW9uYWwoKSBASW5qZWN0KFBCRl9UT0tFTikgcHJpdmF0ZSBwYmY6IGFueSxcclxuICAgIEBPcHRpb25hbCgpIEBJbmplY3QoQVBJX1NFUlZJQ0VfVE9LRU4pIHByaXZhdGUgaHR0cDogYW55LFxyXG4gICAgQE9wdGlvbmFsKCkgQEluamVjdChST0xFX1NFUlZJQ0VfVE9LRU4pIHB1YmxpYyByczogYW55XHJcbiAgKSB7XHJcbiAgICB0aGlzLnJvdXRlci5ldmVudHNcclxuICAgICAgLnBpcGUoZmlsdGVyKChldmVudCkgPT4gZXZlbnQgaW5zdGFuY2VvZiBOYXZpZ2F0aW9uRW5kKSlcclxuICAgICAgLnN1YnNjcmliZSgoZTogTmF2aWdhdGlvbkVuZCkgPT4ge1xyXG4gICAgICAgIGlmIChcclxuICAgICAgICAgIHRoaXMuaGFzUmVzaXplICYmXHJcbiAgICAgICAgICBlLnVybCA9PT0gdGhpcy5hY3RpdmF0ZWRSb3V0ZVtcIl9yb3V0ZXJTdGF0ZVwiXS5zbmFwc2hvdC51cmxcclxuICAgICAgICApIHtcclxuICAgICAgICAgIGlmICh0aGlzLmRhc2hib2FyZExheW91dCkge1xyXG4gICAgICAgICAgICB0aGlzLkFjdGl2ZURhc2hib2FyZFBvcnRsZXRzID0gW107XHJcbiAgICAgICAgICAgIHRoaXMuaGFzUmVzaXplID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHRoaXMucGJmLnBhZ2VMb2FkaW5nID0gdHJ1ZTtcclxuICAgICAgICAgICAgdGhpcy5wYmYucGFnZUxvYWRpbmdfLm5leHQodHJ1ZSk7XHJcbiAgICAgICAgICAgIHRoaXMuZGFzaGJvYXJkTGF5b3V0LnJlbW92ZUFsbCgpO1xyXG4gICAgICAgICAgICB0aGlzLnJlZi5tYXJrRm9yQ2hlY2soKTtcclxuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgdGhpcy5zZXRBY3RpdmVEYXNoYm9hcmRQb3J0bGV0cygpO1xyXG4gICAgICAgICAgICB9LCA1MDApO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpIHtcclxuICAgIHRoaXMucGJmLnBhZ2VMb2FkaW5nID0gdHJ1ZTtcclxuICAgIHRoaXMucGJmLnBhZ2VMb2FkaW5nXy5uZXh0KHRydWUpO1xyXG4gICAgdGhpcy5yZWYubWFya0ZvckNoZWNrKCk7XHJcbiAgICB0aGlzLnJlZi5kZXRlY3RDaGFuZ2VzKCk7XHJcblxyXG4gICAgaWYgKHRoaXMudGhlbWVEYXRhICYmIHRoaXMudGhlbWVEYXRhLmxlbmd0aCA+IDApIHtcclxuICAgICAgdGhpcy50aGVtZURhdGEuZm9yRWFjaCgoZSkgPT4ge1xyXG4gICAgICAgIHRoaXMudGhlbWVPYmpbZS5pZF0gPSBlW1widmFsdWVcIl07XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgdGhpcy5nZXRJbmZvKCk7XHJcbiAgICB0aGlzLmdldERhc2hib2FyZCgpO1xyXG5cclxuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKFxyXG4gICAgICB0aGlzLnBiZi5wdWIkLnN1YnNjcmliZSgocmVzKSA9PiB7XHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgcmVzLnJlZnJlc2hVcmwgJiZcclxuICAgICAgICAgIHJlcy5yZWZyZXNoVXJsID09PSB0aGlzLmFjdGl2YXRlZFJvdXRlW1wiX3JvdXRlclN0YXRlXCJdLnNuYXBzaG90LnVybFxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgdGhpcy5wYmYucGFnZUxvYWRpbmcgPSB0cnVlO1xyXG4gICAgICAgICAgdGhpcy5wYmYucGFnZUxvYWRpbmdfLm5leHQodHJ1ZSk7XHJcbiAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5nZXREYXNoYm9hcmQoKTtcclxuICAgICAgICAgIH0sIDUwMCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KVxyXG4gICAgKTtcclxuXHJcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcclxuICAgICAgdGhpcy5kYXNoYm9hcmRTZXJ2aWNlLmdldERhc2hib2FyZFJlbmFtZSgpLnN1YnNjcmliZSgocmVzKSA9PiB7XHJcbiAgICAgICAgaWYgKHRoaXMuZGFzaGJvYXJkICYmIHRoaXMuZGFzaGJvYXJkLmlkID09PSByZXMuaWQpIHtcclxuICAgICAgICAgIHRoaXMuZGFzaGJvYXJkLmRhc2hib2FyZEdyb3VwTmFtZSA9IHJlcy5kYXNoYm9hcmRHcm91cE5hbWU7XHJcbiAgICAgICAgICB0aGlzLmRhc2hib2FyZC5kYXNoYm9hcmRHcm91cElkID0gcmVzLmRhc2hib2FyZEdyb3VwSWQ7XHJcbiAgICAgICAgICB0aGlzLmRhc2hib2FyZC5kZXNjcmlwdGlvbiA9IHJlcy5kZXNjcmlwdGlvbjtcclxuICAgICAgICAgIHRoaXMuZGFzaGJvYXJkLm5hbWUgPSByZXMubmFtZTtcclxuICAgICAgICAgIHRoaXMudXBkYXRlRGFzaGJvYXJkTGFzdFVwZGF0ZURhdGUoKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pXHJcbiAgICApO1xyXG5cclxuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKFxyXG4gICAgICB0aGlzLmRhc2hib2FyZFNlcnZpY2UuZ2V0Q3VzdG9taXplU3RhdHVzKCkuc3Vic2NyaWJlKChpZCkgPT4ge1xyXG4gICAgICAgIGlmICh0aGlzLmRhc2hib2FyZCAmJiB0aGlzLmRhc2hib2FyZC5pZCA9PT0gaWQpIHtcclxuICAgICAgICAgIHRoaXMucmVmLm1hcmtGb3JDaGVjaygpO1xyXG4gICAgICAgICAgdGhpcy5yZWYuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSlcclxuICAgICk7XHJcblxyXG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXHJcbiAgICAgIHRoaXMucGJmLmdldEhhc1Jlc2l6ZSgpLnN1YnNjcmliZSgodXJsKSA9PiB7XHJcbiAgICAgICAgaWYgKHVybCkge1xyXG4gICAgICAgICAgaWYgKHRoaXMuYWN0aXZhdGVkUm91dGVbXCJfcm91dGVyU3RhdGVcIl0uc25hcHNob3QudXJsID09PSB1cmwpIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuZGFzaGJvYXJkTGF5b3V0KSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5BY3RpdmVEYXNoYm9hcmRQb3J0bGV0cyA9IFtdO1xyXG4gICAgICAgICAgICAgIHRoaXMuZGFzaGJvYXJkTGF5b3V0LnJlbW92ZUFsbCgpO1xyXG4gICAgICAgICAgICAgIHRoaXMucGJmLnBhZ2VMb2FkaW5nID0gdHJ1ZTtcclxuICAgICAgICAgICAgICB0aGlzLnBiZi5wYWdlTG9hZGluZ18ubmV4dCh0cnVlKTtcclxuICAgICAgICAgICAgICB0aGlzLnJlZi5tYXJrRm9yQ2hlY2soKTtcclxuICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0QWN0aXZlRGFzaGJvYXJkUG9ydGxldHMoKTtcclxuICAgICAgICAgICAgICB9LCA1MDApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmhhc1Jlc2l6ZSA9IHRydWU7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9KVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0QWxsRmllbGRzKGl0ZW0sIG5vRGV0ZWN0ID0gZmFsc2UpOiBQcm9taXNlPGFueVtdPiB7XHJcbiAgICBpZiAoIW5vRGV0ZWN0KSB7XHJcbiAgICAgIHRoaXMucGJmLnBhZ2VMb2FkaW5nID0gdHJ1ZTtcclxuICAgIH1cclxuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgIGNvbnN0IGRhdGFNYXJ0Q29kZSA9IGl0ZW0uZmlndXJlQ29kZTtcclxuICAgICAgY29uc3QgZGF0YU9iaiA9IHtcclxuICAgICAgICBsYW5ndWFnZTogdGhpcy5sYW5nLFxyXG4gICAgICAgIGRhdGFNYXJ0Q29kZSxcclxuICAgICAgfTtcclxuICAgICAgdGhpcy5EYXNoYm9hcmRQb3JsZXRzU2VydmljZS5zZXRTY2hlbWFQYXJhbXMoXHJcbiAgICAgICAgZGF0YU9iaixcclxuICAgICAgICBkYXRhTWFydENvZGUsXHJcbiAgICAgICAgdGhpcy5kYXNoYm9hcmRcclxuICAgICAgKTtcclxuICAgICAgdGhpcy5odHRwLnBvc3QodGhpcy5hcGkudXJsTGlzdC5HZXRTY2hlbWEsIGRhdGFPYmosIChyZXMpID0+IHtcclxuICAgICAgICBpZiAoIW5vRGV0ZWN0KSB7XHJcbiAgICAgICAgICB0aGlzLnBiZi5wYWdlTG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgdGhpcy5wYmYucGFnZUxvYWRpbmdfLm5leHQodHJ1ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJlc29sdmUocmVzKTtcclxuICAgICAgfSk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIG9uQ2xvc2VSaWdodChlKSB7XHJcbiAgICB0aGlzLnB1c2hfYnRuID0gZmFsc2U7XHJcbiAgICB0aGlzLnJlZi5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgfVxyXG5cclxuICBzZXRBY3RpdmVEYXNoYm9hcmRQb3J0bGV0cyhub0RldGVjdCA9IGZhbHNlKSB7XHJcbiAgICBpZiAodGhpcy5oYXNDaGFuZ2VEYXRhVGFibGUpIHtcclxuICAgICAgdGhpcy5BY3RpdmVEYXNoYm9hcmRQb3J0bGV0cyA9IFtdO1xyXG4gICAgICB0aGlzLnJlZi5tYXJrRm9yQ2hlY2soKTtcclxuICAgIH1cclxuICAgIGNvbnN0IHBvcnRsZXRzID1cclxuICAgICAgdGhpcy5wb3J0bGV0cy5maWx0ZXIoKHBvcnRsZXQpID0+IHtcclxuICAgICAgICBpZiAoIXBvcnRsZXQgfHwgIXBvcnRsZXQuY29uZmlnKSB7XHJcbiAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IGNvbmZpZyA9IEpTT04ucGFyc2UocG9ydGxldC5jb25maWcpO1xyXG4gICAgICAgIGNvbnN0IHRhYklkID0gY29uZmlnLnRhYklkIHx8IDE7XHJcbiAgICAgICAgaWYgKHRhYklkID09PSB0aGlzLmFjdGl2ZVRhYikge1xyXG4gICAgICAgICAgcmV0dXJuIHBvcnRsZXQ7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KSB8fCBbXTtcclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICB0aGlzLkFjdGl2ZURhc2hib2FyZFBvcnRsZXRzID0gWy4uLnBvcnRsZXRzXTtcclxuICAgICAgaWYgKFxyXG4gICAgICAgICF0aGlzLkFjdGl2ZURhc2hib2FyZFBvcnRsZXRzLmxlbmd0aCAmJlxyXG4gICAgICAgIHRoaXMuZGFzaGJvYXJkTGF5b3V0ICYmXHJcbiAgICAgICAgdGhpcy5kYXNoYm9hcmRMYXlvdXQucGFuZWxzICYmXHJcbiAgICAgICAgdGhpcy5kYXNoYm9hcmRMYXlvdXQucGFuZWxzLmxlbmd0aFxyXG4gICAgICApIHtcclxuICAgICAgICB0aGlzLmRhc2hib2FyZExheW91dC5yZW1vdmVBbGwoKTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLmhhc0NoYW5nZURhdGFUYWJsZSA9IGZhbHNlO1xyXG4gICAgICBpZiAoIW5vRGV0ZWN0KSB7XHJcbiAgICAgICAgdGhpcy5wYmYucGFnZUxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLnBiZi5wYWdlTG9hZGluZ18ubmV4dCh0cnVlKTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLnJlZi5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIG9uQWN0aXZlVGFiKHRhYiwgaW5kZXgpIHtcclxuICAgIHRoaXMuZGFzaGJvYXJkX3NpZGViYXIgPSBmYWxzZTtcclxuICAgIHRoaXMucHVzaF9idG4gPSBmYWxzZTtcclxuICAgIGNvbnN0IHsgaWQsIGxhYmVsIH0gPSB0YWI7XHJcbiAgICBpZiAodGFiLmlkID09PSB0aGlzLmFjdGl2ZVRhYikge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICB0aGlzLmFjdGl2ZVRhYklkID0gaWQ7XHJcbiAgICB0aGlzLmFjdGl2ZVRhYkxhYmVsID0gbGFiZWw7XHJcbiAgICBpZiAoaW5kZXggIT09IDApIHtcclxuICAgICAgdGhpcy5wcmV2SWQgPSB0aGlzLnRhYkxpc3RbaW5kZXggLSAxXS5pZDtcclxuICAgIH1cclxuICAgIHRoaXMuc3RhcnRFZGl0ID0gZmFsc2U7XHJcbiAgICB0aGlzLmFjdGl2ZVRhYiA9IGlkO1xyXG4gICAgdGhpcy5zZXRBY3RpdmVEYXNoYm9hcmRQb3J0bGV0cygpO1xyXG4gIH1cclxuXHJcbiAgb25EZWxldGVUYWIoaXRlbSkge1xyXG4gICAgbGV0IF90aXRsZSA9XHJcbiAgICAgIHRoaXMudHJhbnNsYXRpb24uQVJFX1lPVV9TVVJFX1RPX0RFTEVURV9EQVNIQk9BUkRfVEFCX1dBUk5JTkdfTUVTU0FHRSB8fFxyXG4gICAgICBcIi5BUkVfWU9VX1NVUkVfVE9fREVMRVRFX0RBU0hCT0FSRF9UQUJfV0FSTklOR19NRVNTQUdFXCI7XHJcbiAgICBfdGl0bGUgPSBfdGl0bGUucmVwbGFjZShcIntUYWIgTmFtZX1cIiwgaXRlbS5sYWJlbCk7XHJcbiAgICBjb25zdCBkaWFsb2dSZWYgPSB0aGlzLmRpYWxvZ1NlcnZpY2Uuc2hvd0NvbW1vbkRpbGFvZyh7XHJcbiAgICAgIHRpdGxlOiB0aGlzLnRyYW5zbGF0aW9uLkRFTEVURV9SRUNPUkQgfHwgXCIuREVMRVRFX1JFQ09SRFwiLFxyXG4gICAgICBkZXNjcmlwdGlvbjogX3RpdGxlLFxyXG4gICAgfSk7XHJcbiAgICBkaWFsb2dSZWYuYWZ0ZXJDbG9zZWQoKS5zdWJzY3JpYmUoKHJlcykgPT4ge1xyXG4gICAgICBpZiAocmVzID09PSBcInNhdmVcIikge1xyXG4gICAgICAgIGNvbnN0IGlzQWN0aXZlID0gdGhpcy5hY3RpdmVUYWIgPT09IGl0ZW0uaWQ7XHJcbiAgICAgICAgbGV0IGluZGV4ID0gMDtcclxuICAgICAgICBmb3IgKGxldCBpID0gdGhpcy5wb3J0bGV0cy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xyXG4gICAgICAgICAgY29uc3QgY29uZmlnID0gSlNPTi5wYXJzZSh0aGlzLnBvcnRsZXRzW2ldLmNvbmZpZyk7XHJcbiAgICAgICAgICBpZiAoY29uZmlnLnRhYklkID09PSB0aGlzLmFjdGl2ZVRhYikge1xyXG4gICAgICAgICAgICB0aGlzLnBvcnRsZXRzLnNwbGljZShpLCAxKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy50YWJMaXN0LmZvckVhY2goKHRhYiwgaSkgPT4ge1xyXG4gICAgICAgICAgaWYgKHRhYi5pZCA9PT0gaXRlbS5pZCkge1xyXG4gICAgICAgICAgICB0aGlzLnRhYkxpc3Quc3BsaWNlKGksIDEpO1xyXG4gICAgICAgICAgICBpbmRleCA9IGk7XHJcbiAgICAgICAgICAgIHRoaXMucmVmLm1hcmtGb3JDaGVjaygpO1xyXG4gICAgICAgICAgICB0aGlzLnJlZi5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgaWYgKGlzQWN0aXZlKSB7XHJcbiAgICAgICAgICBpZiAoIXRoaXMudGFiTGlzdFtpbmRleF0pIHtcclxuICAgICAgICAgICAgaW5kZXggLT0gMTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHRoaXMuYWN0aXZlVGFiID0gdGhpcy50YWJMaXN0W2luZGV4XS5pZDtcclxuICAgICAgICAgIHRoaXMuYWN0aXZlVGFiSWQgPSB0aGlzLmFjdGl2ZVRhYjtcclxuICAgICAgICAgIHRoaXMucG9ydGxldHMuZm9yRWFjaCgocG9ydGxldCkgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBjb25maWcgPSBKU09OLnBhcnNlKHBvcnRsZXQuY29uZmlnKTtcclxuICAgICAgICAgICAgY29uZmlnLmFjdGl2ZVRhYiA9IHRoaXMuYWN0aXZlVGFiO1xyXG4gICAgICAgICAgICBwb3J0bGV0LmNvbmZpZyA9IENpcmN1bGFySlNPTi5zdHJpbmdpZnkoY29uZmlnKTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgdGhpcy5yZWYuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICAgICAgdGhpcy5vbkFjdGl2ZVRhYih0aGlzLnRhYkxpc3RbaW5kZXhdLCBpbmRleCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuc2F2ZWRhc2hib2FyZChcInRydWVcIik7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgb25BZGRUYWIoKSB7XHJcbiAgICBjb25zdCBsYWJlbCA9IGBUYWIgJHt0aGlzLnRhYkxpc3QubGVuZ3RoICsgMX1gO1xyXG4gICAgdGhpcy5wcmV2SWQgPSB0aGlzLnRhYkxpc3RbdGhpcy50YWJMaXN0Lmxlbmd0aCAtIDFdLmlkO1xyXG4gICAgbGV0IG5ld0lkID0gMTtcclxuICAgIHRoaXMudGFiTGlzdC5mb3JFYWNoKCh0YWIpID0+IHtcclxuICAgICAgbmV3SWQgPSBNYXRoLm1heChuZXdJZCwgdGFiLmlkKTtcclxuICAgIH0pO1xyXG4gICAgdGhpcy5hY3RpdmVUYWIgPSBuZXdJZCArIDE7XHJcbiAgICB0aGlzLnRhYkxpc3QucHVzaCh7XHJcbiAgICAgIGlkOiB0aGlzLmFjdGl2ZVRhYixcclxuICAgICAgbGFiZWwsXHJcbiAgICAgIGRpc3BsYXlMYWJlbDogYCR7dGhpcy50cmFuc2xhdGlvbi5UQUIgfHwgXCJUYWJcIn0gJHtcclxuICAgICAgICB0aGlzLnRhYkxpc3QubGVuZ3RoICsgMVxyXG4gICAgICB9YCxcclxuICAgIH0pO1xyXG4gICAgdGhpcy5hY3RpdmVUYWJJZCA9IHRoaXMuYWN0aXZlVGFiO1xyXG4gICAgdGhpcy5hY3RpdmVUYWJMYWJlbCA9IGxhYmVsO1xyXG4gICAgLy8g6ZqQ6JeP5Y+z5L6n6I+c5Y2V77yM5riF6Zmk5b2T5YmN6YCJ5Lit55qEcG9ydGxldFxyXG4gICAgdGhpcy5wb3J0bGV0ID0gbnVsbDtcclxuICAgIHRoaXMuZGFzaGJvYXJkX3NpZGViYXIgPSBmYWxzZTtcclxuICAgIHRoaXMuaGFzQ2hhbmdlRGF0YVRhYmxlID0gdHJ1ZTtcclxuICAgIHRoaXMucHVzaF9idG4gPSBmYWxzZTtcclxuICAgIHRoaXMuc2V0QWN0aXZlRGFzaGJvYXJkUG9ydGxldHMoKTtcclxuICB9XHJcblxyXG4gIHNldFRhYklucHV0KGUpIHtcclxuICAgIHRoaXMucG9ydGxldHMuZm9yRWFjaCgocG9ydGxldCkgPT4ge1xyXG4gICAgICBjb25zdCBfY29uZmlnID0gSlNPTi5wYXJzZShwb3J0bGV0LmNvbmZpZyk7XHJcbiAgICAgIGNvbnN0IF90YWJJZCA9IF9jb25maWcudGFiSWQgfHwgMTtcclxuICAgICAgaWYgKF90YWJJZCA9PT0gdGhpcy5hY3RpdmVUYWIpIHtcclxuICAgICAgICBfY29uZmlnLnRhYkxhYmVsID0gZS50YXJnZXQudmFsdWU7XHJcbiAgICAgICAgcG9ydGxldC5jb25maWcgPSBDaXJjdWxhckpTT04uc3RyaW5naWZ5KF9jb25maWcpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICAgIHRoaXMucmVmLm1hcmtGb3JDaGVjaygpO1xyXG4gICAgdGhpcy5yZWYuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gIH1cclxuXHJcbiAgc2F2ZVRhYklucHV0KGl0ZW0pIHtcclxuICAgIHRoaXMuc3RhcnRFZGl0ID0gZmFsc2U7XHJcbiAgICBpdGVtLmRpc3BsYXlMYWJlbCA9IHRoaXMudHJ1bmNhdGVUZXh0KGl0ZW0ubGFiZWwpO1xyXG4gICAgdGhpcy5yZWYubWFya0ZvckNoZWNrKCk7XHJcbiAgICB0aGlzLnJlZi5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgfVxyXG5cclxuICBvblN0YXJ0RWRpdChpZCkge1xyXG4gICAgaWYgKCF0aGlzLmN1c3RvbWl6ZWQpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuYWN0aXZlVGFiICE9PSBpZCkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICB0aGlzLnN0YXJ0RWRpdCA9IHRydWU7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGluaXRUYWJMaXN0KG5vRGV0ZWN0ID0gZmFsc2UpIHtcclxuICAgIHRoaXMudGFiTGlzdCA9IFtdO1xyXG4gICAgaWYgKCF0aGlzLmFjdGl2ZVRhYiB8fCAhdGhpcy5zdGF5QWN0aXZlVGFiKSB7XHJcbiAgICAgIHRoaXMuYWN0aXZlVGFiID0gMTtcclxuICAgIH1cclxuICAgIHRoaXMucHJldklkID0gbnVsbDtcclxuICAgIGNvbnN0IHRhYk1hcCA9IHt9O1xyXG4gICAgdGhpcy5wb3J0bGV0cy5mb3JFYWNoKChwb3J0bGV0LCBpZHgpID0+IHtcclxuICAgICAgaWYgKHBvcnRsZXQuY29uZmlnKSB7XHJcbiAgICAgICAgY29uc3QgY29uZmlnID0gSlNPTi5wYXJzZShwb3J0bGV0LmNvbmZpZyk7XHJcbiAgICAgICAgY29uc3QgdHh0ID0gdGhpcy50cmFuc2xhdGlvbltcIlRBQlwiXSB8fCBcIlRhYlwiO1xyXG4gICAgICAgIGlmIChjb25maWcuYWN0aXZlVGFiICYmICF0aGlzLnN0YXlBY3RpdmVUYWIpIHtcclxuICAgICAgICAgIHRoaXMuYWN0aXZlVGFiID0gY29uZmlnLmFjdGl2ZVRhYjtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgdGFiSWQgPSBjb25maWcudGFiSWQgfHwgMTtcclxuICAgICAgICBjb25zdCB0YWJMYWJlbCA9IGNvbmZpZy50YWJMYWJlbCB8fCBcIlRhYiAxXCI7XHJcbiAgICAgICAgbGV0IGRpc3BsYXlMYWJlbCA9IGNvbmZpZy50YWJMYWJlbCB8fCBgJHt0eHR9IDFgO1xyXG4gICAgICAgIGlmIChjb25maWcudGFiTGFiZWwgJiYgY29uZmlnLnRhYkxhYmVsLnN0YXJ0c1dpdGgoXCJUYWJcIikpIHtcclxuICAgICAgICAgIGRpc3BsYXlMYWJlbCA9IHR4dCArIGNvbmZpZy50YWJMYWJlbC5zbGljZSgzKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCF0YWJNYXBbdGFiSWRdKSB7XHJcbiAgICAgICAgICB0aGlzLnRhYkxpc3QucHVzaCh7XHJcbiAgICAgICAgICAgIGlkOiB0YWJJZCxcclxuICAgICAgICAgICAgbGFiZWw6IHRhYkxhYmVsLFxyXG4gICAgICAgICAgICBkaXNwbGF5TGFiZWw6IHRhYkxhYmVsXHJcbiAgICAgICAgICAgICAgPyB0aGlzLnRydW5jYXRlVGV4dChkaXNwbGF5TGFiZWwpXHJcbiAgICAgICAgICAgICAgOiBgJHt0aGlzLnRyYW5zbGF0aW9uLlRBQiB8fCBcIlRhYlwifSAxYCxcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgdGFiTWFwW3RhYklkXSA9IHRydWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBpZiAoIXRoaXMuYWN0aXZlVGFiSWQpIHtcclxuICAgICAgICAvLyBcdHRoaXMuYWN0aXZlVGFiID0gdGFiSWQ7XHJcbiAgICAgICAgLy8gXHR0aGlzLmFjdGl2ZVRhYklkID0gdGFiSWQ7XHJcbiAgICAgICAgLy8gXHR0aGlzLmFjdGl2ZVRhYkxhYmVsID0gdGFiTGFiZWw7XHJcbiAgICAgICAgLy8gfVxyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICBpZiAoIXRoaXMudGFiTGlzdC5sZW5ndGgpIHtcclxuICAgICAgdGhpcy50YWJMaXN0ID0gW1xyXG4gICAgICAgIHtcclxuICAgICAgICAgIGlkOiAxLFxyXG4gICAgICAgICAgbGFiZWw6IFwiVGFiIDFcIixcclxuICAgICAgICAgIGRpc3BsYXlMYWJlbDogYCR7dGhpcy50cmFuc2xhdGlvbi5UQUIgfHwgXCJUYWJcIn0gMWAsXHJcbiAgICAgICAgfSxcclxuICAgICAgXTtcclxuICAgICAgdGhpcy5hY3RpdmVUYWJJZCA9IDE7XHJcbiAgICAgIHRoaXMuYWN0aXZlVGFiTGFiZWwgPSBcIlRhYiAxXCI7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy50YWJMaXN0ID0gdGhpcy50YWJMaXN0LnNvcnQoKGEsIGIpID0+IGEuaWQgLSBiLmlkKTtcclxuICAgIGNvbnN0IGFjdGl2ZVRhYiA9XHJcbiAgICAgIHRoaXMudGFiTGlzdC5maW5kKChpKSA9PiBpLmlkID09PSB0aGlzLmFjdGl2ZVRhYikgfHwgdGhpcy50YWJMaXN0WzBdO1xyXG4gICAgaWYgKGFjdGl2ZVRhYi5pZCkge1xyXG4gICAgICB0aGlzLmFjdGl2ZVRhYklkID0gYWN0aXZlVGFiLmlkO1xyXG4gICAgICB0aGlzLmFjdGl2ZVRhYkxhYmVsID0gYWN0aXZlVGFiLmxhYmVsO1xyXG4gICAgfVxyXG4gICAgdGhpcy5zdGF5QWN0aXZlVGFiID0gZmFsc2U7XHJcbiAgICB0aGlzLnNldFByZXZJZCgpO1xyXG4gICAgaWYgKCFub0RldGVjdCkge1xyXG4gICAgICB0aGlzLnNldEFjdGl2ZURhc2hib2FyZFBvcnRsZXRzKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBhc3luYyBpbml0bGF5b3V0KHNob3VsZEdldEZpZWxkcyA9IGZhbHNlLCBub0RldGVjdCA9IGZhbHNlKSB7XHJcbiAgICBpZiAoIXNob3VsZEdldEZpZWxkcykge1xyXG4gICAgICB0aGlzLmluaXRUYWJMaXN0KG5vRGV0ZWN0KTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLnBvcnRsZXRzICYmIHRoaXMucG9ydGxldHMubGVuZ3RoID4gMCkge1xyXG4gICAgICBmb3IgKGxldCBwb3J0bGV0IG9mIHRoaXMucG9ydGxldHMpIHtcclxuICAgICAgICBjb25zdCBjb25maWc6IGFueSA9IEpTT04ucGFyc2UocG9ydGxldC5jb25maWcpO1xyXG4gICAgICAgIGlmIChzaG91bGRHZXRGaWVsZHMpIHtcclxuICAgICAgICAgIC8vIEdldFNjaGVtYemFjee9rueahOWIl+aVsOaNrua6kFxyXG4gICAgICAgICAgY29uc3QgZmllbGRzOiBhbnlbXSA9IGF3YWl0IHRoaXMuZ2V0QWxsRmllbGRzKHBvcnRsZXQpO1xyXG4gICAgICAgICAgLy8g5q+P5LiqcG9ydGxldOiHquWumuS5ieeahOaVsOaNrlxyXG4gICAgICAgICAgY29uZmlnLmZpZWxkcy5mb3JFYWNoKChmaWVsZCkgPT4ge1xyXG4gICAgICAgICAgICBpZiAoZmllbGQuZm9ybWF0KSB7XHJcbiAgICAgICAgICAgICAgZmllbGRzLmZvckVhY2goKF9mKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAoX2YuY29sTmFtZSA9PT0gZmllbGQuY29sTmFtZSkge1xyXG4gICAgICAgICAgICAgICAgICBfZi5mb3JtYXQgPSBmaWVsZC5mb3JtYXQ7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY29uc3QgaXRlbSA9IGZpZWxkcy5maW5kKChfZikgPT4gX2YuY29sTmFtZSA9PT0gZmllbGQuY29sTmFtZSk7XHJcbiAgICAgICAgICAgIGlmICghaXRlbSkge1xyXG4gICAgICAgICAgICAgIGZpZWxkcy5wdXNoKGZpZWxkKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgICBpZiAoY29uZmlnLnBvcnRsZXRUeXBlID09PSBcInBpdm90XCIpIHtcclxuICAgICAgICAgICAgLy8gQHRzLWlnbm9yZVxyXG4gICAgICAgICAgICBjb25maWcuZmllbGRzID0gZmllbGRzO1xyXG4gICAgICAgICAgICBwb3J0bGV0LmNvbmZpZyA9IENpcmN1bGFySlNPTi5zdHJpbmdpZnkoY29uZmlnKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcG9ydGxldC5uZXdJZCA9IFwicG9ydGxldF9cIiArIHRoaXMucGJmLkd1aWQoKTtcclxuICAgICAgICBwb3J0bGV0LmNvbCA9IHBvcnRsZXQucG9zWDtcclxuICAgICAgICBwb3J0bGV0LnJvdyA9IHBvcnRsZXQucG9zWTtcclxuICAgICAgICBwb3J0bGV0LnNpemVYID0gcG9ydGxldC53aWR0aDtcclxuICAgICAgICBwb3J0bGV0LnNpemVZID0gcG9ydGxldC5oZWlnaHQ7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHRoaXMuaW5pdENoYXJEYXRhKG5vRGV0ZWN0KTtcclxuICAgICAgdGhpcy5zZXRBY3RpdmVEYXNoYm9hcmRQb3J0bGV0cyhub0RldGVjdCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLkFjdGl2ZURhc2hib2FyZFBvcnRsZXRzID0gW107XHJcbiAgICAgIHRoaXMuZGFzaGJvYXJkTGF5b3V0LnJlbW92ZUFsbCgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXHJcbiAgICAgIHRoaXMucGJmLmdldFRyaWdnZXJEYXNoYm9hcmRGaWx0ZXJDaGFuZ2UoKS5zdWJzY3JpYmUoKGUpID0+IHtcclxuICAgICAgICBjb25zdCBkYXNoYm9hcklkID0gZVtcImlkXCJdO1xyXG4gICAgICAgIGNvbnN0IG5ld0lkID0gZVtcIm5ld0lkXCJdO1xyXG4gICAgICAgIGlmIChkYXNoYm9hcklkICE9PSB0aGlzLmRhc2hib2FyZC5pZCkge1xyXG4gICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmZpbHRlckRhdGEobmV3SWQpO1xyXG4gICAgICB9KVxyXG4gICAgKTtcclxuXHJcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcclxuICAgICAgdGhpcy5kYXNoYm9hcmRTZXJ2aWNlXHJcbiAgICAgICAgLmdldGNoYW5nZWxheW91dCgpXHJcbiAgICAgICAgLnN1YnNjcmliZSgoeyBzdGF0dXMsIGlkID0gXCJcIiB9KSA9PiB7XHJcbiAgICAgICAgICBpZiAodGhpcy5kYXNoYm9hcmQgJiYgdGhpcy5kYXNoYm9hcmQuaWQgPT09IGlkKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHBhcmFtcyA9IHN0YXR1cyA9PT0gXCJ0cnVlXCIgPyBmYWxzZSA6IHRydWU7XHJcbiAgICAgICAgICAgIHRoaXMuaW5pdGxheW91dChwYXJhbXMpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pXHJcbiAgICApO1xyXG5cclxuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKFxyXG4gICAgICB0aGlzLmRhc2hib2FyZFNlcnZpY2UuZWRpdFByb3BlcnRpZXMoKS5zdWJzY3JpYmUoKHsgc3RhdHVzLCBpZCB9KSA9PiB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmRhc2hib2FyZCB8fCB0aGlzLmRhc2hib2FyZC5pZCAhPT0gaWQgfHwgdGhpcy50aW1lcikge1xyXG4gICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnRpbWVyID0gc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLnRpbWVyID0gbnVsbDtcclxuICAgICAgICB9LCAyMDApO1xyXG4gICAgICAgIHRoaXMuZGlhbG9nLmNsb3NlQWxsKCk7XHJcbiAgICAgICAgdGhpcy5kaWFsb2dcclxuICAgICAgICAgIC5vcGVuKERhdGFNYXJ0TmV3Q29tcG9uZW50LCB7XHJcbiAgICAgICAgICAgIGRhdGE6IHtcclxuICAgICAgICAgICAgICBlZGl0OiBzdGF0dXMsXHJcbiAgICAgICAgICAgICAgZGFzaGJvYXJkSWQ6IHRoaXMudXJsX2lkLFxyXG4gICAgICAgICAgICAgIGRhc2hib2FyZDogdGhpcy5kYXNoYm9hcmQsXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGhlaWdodDogXCI4NSVcIixcclxuICAgICAgICAgICAgd2lkdGg6IFwiNTUlXCIsXHJcbiAgICAgICAgICAgIGRpc2FibGVDbG9zZTogdHJ1ZSxcclxuICAgICAgICAgICAgcGFuZWxDbGFzczogXCJyZXBvcnQtZGlhbG9nXCIsXHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgICAgLmFmdGVyQ2xvc2VkKClcclxuICAgICAgICAgIC5zdWJzY3JpYmUoKGUpID0+IHtcclxuICAgICAgICAgICAgaWYgKCFlKSB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNvbnN0IHsgcHVzaF9idG4sIHBvcnRsZXQsIGRhc2hib2FyZCB9ID0gZTtcclxuICAgICAgICAgICAgdGhpcy5kYXNoYm9hcmQgPSBjbG9uZURlZXAoZGFzaGJvYXJkKTtcclxuICAgICAgICAgICAgdGhpcy5wb3J0bGV0ID0gY2xvbmVEZWVwKHBvcnRsZXQpO1xyXG4gICAgICAgICAgICB0aGlzLnB1c2hfYnRuID0gcHVzaF9idG47XHJcbiAgICAgICAgICAgIHRoaXMuZGFzaGJvYXJkU2VydmljZS51cGRhdGVEYXRhbWFydEVudGl0eS5uZXh0KHRoaXMuZGFzaGJvYXJkKTtcclxuICAgICAgICAgICAgdGhpcy5yZWYubWFya0ZvckNoZWNrKCk7XHJcbiAgICAgICAgICAgIHRoaXMucmVmLmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICB9KVxyXG4gICAgKTtcclxuXHJcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcclxuICAgICAgdGhpcy5kYXNoYm9hcmRTZXJ2aWNlLmdldERvd25sb2FkRGFzaGJvcmQoKS5zdWJzY3JpYmUoKGlkKSA9PiB7XHJcbiAgICAgICAgaWYgKHRoaXMuZGFzaGJvYXJkICYmIHRoaXMuZGFzaGJvYXJkLmlkID09PSBpZCkge1xyXG4gICAgICAgICAgLy8gdGhpcy5kb3dubG9hZEFsbCgpO1xyXG4gICAgICAgICAgZm9yIChsZXQgaXRlbSBvZiB0aGlzLkFjdGl2ZURhc2hib2FyZFBvcnRsZXRzKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZG93bmxvYWQoaXRlbSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9KVxyXG4gICAgKTtcclxuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKFxyXG4gICAgICB0aGlzLmRhc2hib2FyZFNlcnZpY2UuZ2V0YWRkcG9ydGxldCgpLnN1YnNjcmliZSgoaWQpID0+IHtcclxuICAgICAgICBpZiAodGhpcy5kYXNoYm9hcmQgJiYgdGhpcy5kYXNoYm9hcmQuaWQgPT09IGlkKSB7XHJcbiAgICAgICAgICBpZiAodGhpcy5wb3J0bGV0KSB7XHJcbiAgICAgICAgICAgIHRoaXMucG9ydGxldHMucHVzaCh0aGlzLnBvcnRsZXQpO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIGxldCBjb25maWc6IGFueSA9XHJcbiAgICAgICAgICAgIHRoaXMucG9ydGxldC5jb25maWcgaW5zdGFuY2VvZiBTdHJpbmdcclxuICAgICAgICAgICAgICA/IEpTT04ucGFyc2UodGhpcy5wb3J0bGV0LmNvbmZpZylcclxuICAgICAgICAgICAgICA6IHRoaXMucG9ydGxldC5jb25maWc7XHJcbiAgICAgICAgICBpZiAodHlwZW9mIGNvbmZpZyA9PT0gXCJzdHJpbmdcIikge1xyXG4gICAgICAgICAgICBjb25maWcgPSBKU09OLnBhcnNlKGNvbmZpZyk7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgY29uc3QgcG9ydGxldFR5cGUgPVxyXG4gICAgICAgICAgICBjb25maWcucG9ydGxldFR5cGUgPT09IFwiaGlzdG9yaWNhbElSUlwiXHJcbiAgICAgICAgICAgICAgPyBjb25maWcuc2VsZWN0ZWRWaXN1YWxUeXBlXHJcbiAgICAgICAgICAgICAgOiBjb25maWcucG9ydGxldFR5cGU7XHJcblxyXG4gICAgICAgICAgLy8g5Y+q5pyJ5paw5aKe55qEUG9ybGV05piv5Zu+6KGo57G75omN6ZyA6KaB5Yid5aeL5YyWXHJcbiAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgIHRoaXMucG9ydGxldCAmJlxyXG4gICAgICAgICAgICB0aGlzLnBvcnRsZXQuY29uZmlnICYmXHJcbiAgICAgICAgICAgIFtcIm5ld2NvbHVtblwiLCBcIm5ld2xpbmVcIiwgXCJuZXdjb2x1bW5saW5lXCJdLmluY2x1ZGVzKHBvcnRsZXRUeXBlKVxyXG4gICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIHRoaXMuaW5pdENoYXJEYXRhKCk7IC8vIOaLvOaOpUNoYXJ06ZyA6KaB55So55qE5pWw5o2u5rqQXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB0aGlzLmdldE5ld1Bvc2l0aW9uKCk7XHJcbiAgICAgICAgICB0aGlzLnNldEFjdGl2ZURhc2hib2FyZFBvcnRsZXRzKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KVxyXG4gICAgKTtcclxuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKFxyXG4gICAgICB0aGlzLmRhc2hib2FyZFNlcnZpY2UuZ2V0TGVmdE1lbnVCYXIoKS5zdWJzY3JpYmUoKG9wZW4pID0+IHtcclxuICAgICAgICBsZXQgd2lkdGggPSB0aGlzLnBhbmVzTGlzdC5uYXRpdmVFbGVtZW50Lm9mZnNldFdpZHRoO1xyXG4gICAgICAgIGlmIChvcGVuKSB7XHJcbiAgICAgICAgICB0aGlzLnBhbmVzTGlzdC5uYXRpdmVFbGVtZW50LnN0eWxlLndpZHRoID0gd2lkdGggLSAxOTUgKyBcInB4XCI7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMucGFuZXNMaXN0Lm5hdGl2ZUVsZW1lbnQuc3R5bGUud2lkdGggPSB3aWR0aCArIDE5NSArIFwicHhcIjtcclxuICAgICAgICB9XHJcbiAgICAgIH0pXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgQGRlYm91bmNlKDEwMClcclxuICBwcml2YXRlIGZpbHRlckRhdGEoaWQpIHtcclxuICAgIHRoaXMuY2hhcnRVcGRhdGUoaWQpO1xyXG4gIH1cclxuXHJcbiAgY2hhcnRVcGRhdGUoaWQ/OiBzdHJpbmcpIHtcclxuICAgIHRoaXMuaGFzQ2hhbmdlRGF0YVRhYmxlID0gdHJ1ZTtcclxuICAgIGlmIChpZCkge1xyXG4gICAgICB0aGlzLmRhc2hib2FyZFNlcnZpY2UuY2hhcnRVcGRhdGUubmV4dChpZCk7XHJcbiAgICB9XHJcbiAgICB0aGlzLmluaXRDaGFyRGF0YSgpOyAvLyDmi7zmjqVDaGFydOmcgOimgeeUqOeahOaVsOaNrua6kFxyXG4gIH1cclxuXHJcbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMuZm9yRWFjaCgoc3ViKSA9PiB7XHJcbiAgICAgIHN1Yi51bnN1YnNjcmliZSgpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG4gIHByaXZhdGUgZ2V0SW5mbygpIHtcclxuICAgIHRoaXMudHJhbnNsYXRpb24gPSBnZXRUcmFuc2xhdGlvbigpO1xyXG4gICAgdGhpcy5sYW5nID0gdGhpcy5wYmYuZ2V0TGFuZ3VhZ2VQYXJhbXMoKTtcclxuICAgIHRoaXMuZGF0ZVBpcGVGb3JtYXQgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShcImRhdGVQaXBlXCIpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldFBvcmxldENvbmZpZyhwb3J0bGV0KSB7XHJcbiAgICBpZiAoIXBvcnRsZXQuY29uZmlnKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGNvbnN0IGNvbmZpZyA9IEpTT04ucGFyc2UocG9ydGxldC5jb25maWcpO1xyXG4gICAgaWYgKCFjb25maWcucHZ0YWJsZUNoYXJ0U2V0dGluZykge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICB0aGlzLnNob3dMZWdlbmQgPVxyXG4gICAgICAhIWNvbmZpZy5wdnRhYmxlQ2hhcnRTZXR0aW5nLmNoYXJ0U2V0dGluZ3MubGVnZW5kU2V0dGluZ3MudmlzaWJsZTtcclxuICAgIHRoaXMuZW5hYmxlTXVsdGlwbGVBeGlzID1cclxuICAgICAgY29uZmlnLnB2dGFibGVDaGFydFNldHRpbmcuY2hhcnRTZXR0aW5ncy5lbmFibGVNdWx0aXBsZUF4aXM7XHJcbiAgICB0aGlzLnJlZi5tYXJrRm9yQ2hlY2soKTtcclxuICAgIHRoaXMucmVmLmRldGVjdENoYW5nZXMoKTtcclxuICB9XHJcblxyXG4gIHVwZGF0ZVRoZW1lKGUpIHtcclxuICAgIGNvbnN0IHtcclxuICAgICAgc2VsZWN0ZWRYLFxyXG4gICAgICBzZWxlY3RlZFksXHJcbiAgICAgIHNlbGVjdGVkU2Vjb25kWSxcclxuICAgICAgc2VsZWN0ZWRNdWx0aXBsZXMsXHJcbiAgICAgIHNlbGVjdFRoZW1lLFxyXG4gICAgfSA9IGU7XHJcbiAgICB0aGlzLnNlbGVjdGVkWCA9IHNlbGVjdGVkWDtcclxuICAgIHRoaXMuc2VsZWN0ZWRZID0gc2VsZWN0ZWRZO1xyXG4gICAgdGhpcy5zZWxlY3RlZFNlY29uZFkgPSBzZWxlY3RlZFNlY29uZFk7XHJcbiAgICB0aGlzLnNlbGVjdGVkTXVsdGlwbGVzID0gc2VsZWN0ZWRNdWx0aXBsZXM7XHJcbiAgICB0aGlzLnNlbGVjdFRoZW1lID0gc2VsZWN0VGhlbWU7XHJcbiAgfVxyXG5cclxuICB1cGRhdGVEYXNoYm9hcmQoZSkge1xyXG4gICAgY29uc3QgeyBwb3J0bGV0cywgZGFzaGJvYXJkLCBub0RldGVjdCwgc3RheUFjdGl2ZVRhYiB9ID0gZTtcclxuICAgIHRoaXMuc3RheUFjdGl2ZVRhYiA9IHN0YXlBY3RpdmVUYWI7XHJcbiAgICB0aGlzLmRhc2hib2FyZCA9IGNsb25lRGVlcChkYXNoYm9hcmQpO1xyXG4gICAgdGhpcy5wb3J0bGV0cyA9IFsuLi5wb3J0bGV0c107XHJcbiAgICBpZiAoIW5vRGV0ZWN0KSB7XHJcbiAgICAgIHRoaXMucmVmLm1hcmtGb3JDaGVjaygpO1xyXG4gICAgfVxyXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIHRoaXMuZGFzaGJvYXJkU2VydmljZS51cGRhdGVEYXRhbWFydEVudGl0eS5uZXh0KGRhc2hib2FyZCk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHVwZGF0ZVBvcmxldENvbmZpZyhlKSB7XHJcbiAgICBjb25zdCB7IG5ld0lkLCBjb25maWcgfSA9IGU7XHJcbiAgICBjb25zdCBfY29uZmlnID0gT2JqZWN0LmFzc2lnbih7fSwgY29uZmlnKTtcclxuICAgIHRoaXMucG9ydGxldC5jb25maWcgPSBDaXJjdWxhckpTT04uc3RyaW5naWZ5KF9jb25maWcpO1xyXG4gICAgdGhpcy5wb3J0bGV0cy5mb3JFYWNoKChwb3J0bGV0LCBpKSA9PiB7XHJcbiAgICAgIGlmIChwb3J0bGV0Lm5ld0lkID09PSBuZXdJZCkge1xyXG4gICAgICAgIHRoaXMucG9ydGxldHNbaV0uY29uZmlnID0gQ2lyY3VsYXJKU09OLnN0cmluZ2lmeShfY29uZmlnKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICB0aGlzLnBvcnRsZXRzID0gWy4uLnRoaXMucG9ydGxldHNdO1xyXG4gICAgdGhpcy5zZXRBY3RpdmVEYXNoYm9hcmRQb3J0bGV0cygpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGVkaXQoaXRlbSkge1xyXG4gICAgY29uc3QgY29uZmlnID0gSlNPTi5wYXJzZShpdGVtLmNvbmZpZyk7XHJcbiAgICBjb25zdCBwb3J0bGV0VHlwZSA9XHJcbiAgICAgIGNvbmZpZy5wb3J0bGV0VHlwZSA9PT0gXCJoaXN0b3JpY2FsSVJSXCJcclxuICAgICAgICA/IGNvbmZpZy5zZWxlY3RlZFZpc3VhbFR5cGVcclxuICAgICAgICA6IGNvbmZpZy5wb3J0bGV0VHlwZTtcclxuICAgIGlmIChbXCJuZXdjb2x1bW5cIiwgXCJuZXdsaW5lXCIsIFwibmV3Y29sdW1ubGluZVwiXS5pbmNsdWRlcyhwb3J0bGV0VHlwZSkpIHtcclxuICAgICAgdGhpcy5zZWxlY3RlZFkgPSBjb25maWdbXCJzZWxlY3RlZFlcIl07XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRTZWNvbmRZID0gY29uZmlnLnNlbGVjdGVkU2Vjb25kWTtcclxuICAgICAgdGhpcy5zZWxlY3RlZFggPSBjb25maWdbXCJzZWxlY3RlZFhcIl07XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRNdWx0aXBsZXMgPSBjb25maWdbXCJzZWxlY3RlZE11bHRpcGxlc1wiXTtcclxuICAgICAgdGhpcy5zZWxlY3RUaGVtZSA9IGNvbmZpZ1tcInNlbGVjdFRoZW1lXCJdO1xyXG4gICAgfVxyXG4gICAgdGhpcy5wb3J0bGV0ID0gY2xvbmVEZWVwKGl0ZW0pO1xyXG4gICAgaWYgKHRoaXMucHVzaF9idG4pIHtcclxuICAgICAgdGhpcy5zaWRlYmFyLnBvcnRsZXQgPSB0aGlzLnBvcnRsZXQ7XHJcbiAgICB9XHJcbiAgICB0aGlzLmRhc2hib2FyZF9zaWRlYmFyID0gdHJ1ZTtcclxuICAgIHRoaXMucHVzaF9idG4gPSB0cnVlO1xyXG4gICAgdGhpcy5maWd1cmVDb2RlID0gaXRlbS5maWd1cmVDb2RlO1xyXG4gICAgdGhpcy50YWJhY3RpdmUgPSBmYWxzZTtcclxuICAgIHRoaXMucmVmLmRldGVjdENoYW5nZXMoKTtcclxuICAgIHRoaXMuZGFzaGJvYXJkU2VydmljZS5wb3J0bGV0RWRpdC5uZXh0KHRoaXMudXJsX2lkKTtcclxuICB9XHJcblxyXG4gIEBkZWJvdW5jZSgzMDApXHJcbiAgR2V0Z2FkZ2V0VGl0bGUoY29uZmlnKSB7XHJcbiAgICBpZiAoY29uZmlnICYmIGNvbmZpZyAhPT0gXCJudWxsXCIpIHtcclxuICAgICAgbGV0IGNvbmZpZ18gPSBKU09OLnBhcnNlKGNvbmZpZyk7XHJcbiAgICAgIHJldHVybiBjb25maWdfLmdhZGdldFRpdGxlO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIFwiXCI7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0UG9ydGxldFR5cGUoaXRlbSkge1xyXG4gICAgY29uc3QgY29uZmlnID0gaXRlbSAmJiBpdGVtLmNvbmZpZyA/IEpTT04ucGFyc2UoaXRlbS5jb25maWcpIDoge307XHJcbiAgICBpZiAoY29uZmlnLnBvcnRsZXRUeXBlKSB7XHJcbiAgICAgIGlmIChjb25maWcucG9ydGxldFR5cGUgPT09IFwiaGlzdG9yaWNhbElSUlwiKSB7XHJcbiAgICAgICAgcmV0dXJuIGNvbmZpZy5zZWxlY3RlZFZpc3VhbFR5cGU7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIGNvbmZpZy5wb3J0bGV0VHlwZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBkZWxldGUoaXRlbSkge1xyXG4gICAgY29uc3QgaW5kZXggPSB0aGlzLnBvcnRsZXRzLmZpbmRJbmRleCgoeCkgPT4geC5uZXdJZCA9PT0gaXRlbS5uZXdJZCk7XHJcbiAgICB0aGlzLmRhc2hib2FyZExheW91dC5yZW1vdmVQYW5lbChpdGVtLm5ld0lkKTtcclxuICAgIHRoaXMucG9ydGxldHMuc3BsaWNlKGluZGV4LCAxKTtcclxuICAgIHRoaXMuc2V0QWN0aXZlRGFzaGJvYXJkUG9ydGxldHMoKTtcclxuICAgIHRoaXMuZ2V0TmV3UG9zaXRpb24oKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBjb3B5UG9ydGxldChpdGVtKSB7XHJcbiAgICBjb25zdCBwb3J0bGV0ID0geyAuLi5pdGVtIH07XHJcbiAgICBwb3J0bGV0LmlkID0gXCIwMDAwMDAwMC0wMDAwLTAwMDAtMDAwMC0wMDAwMDAwMDAwMDBcIjtcclxuICAgIHBvcnRsZXQubmV3SWQgPSBcInBvcnRsZXRfXCIgKyB0aGlzLnBiZi5HdWlkKCk7XHJcbiAgICAvLyDlpITnkIYgMS7lpI3liLbliKvnmoTlpI3liLbkvZMgIDIu5paw5bu655qE5Liq5L2TIDMu5bey5a2Y5Zyo55qE5Liq5L2TXHJcbiAgICBwb3J0bGV0LmNvcHlJZCA9IHBvcnRsZXQuY29weUlkXHJcbiAgICAgID8gcG9ydGxldC5jb3B5SWRcclxuICAgICAgOiBpdGVtLmlkID09PSBcIjAwMDAwMDAwLTAwMDAtMDAwMC0wMDAwLTAwMDAwMDAwMDAwMFwiXHJcbiAgICAgID8gaXRlbS5uZXdJZFxyXG4gICAgICA6IGl0ZW0uaWQ7XHJcbiAgICB0aGlzLkRhc2hib2FyZFBvcmxldHNTZXJ2aWNlLnBvcnRsZXREYXRhX05ld1t0aGlzLmRhc2hib2FyZC5pZF1bXHJcbiAgICAgIHBvcnRsZXQubmV3SWRcclxuICAgIF0gPSBjbG9uZURlZXAoXHJcbiAgICAgIHRoaXMuRGFzaGJvYXJkUG9ybGV0c1NlcnZpY2UucG9ydGxldERhdGFfTmV3W3RoaXMuZGFzaGJvYXJkLmlkXVtcclxuICAgICAgICBwb3J0bGV0LmNvcHlJZFxyXG4gICAgICBdXHJcbiAgICApO1xyXG4gICAgdGhpcy5wb3J0bGV0cy5wdXNoKHBvcnRsZXQpO1xyXG4gICAgdGhpcy5zZXRBY3RpdmVEYXNoYm9hcmRQb3J0bGV0cygpO1xyXG4gICAgdGhpcy5nZXROZXdQb3NpdGlvbigpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldEFzb2ZkYXRlKGl0ZW0pIHtcclxuICAgIHJldHVybiBKU09OLnBhcnNlKGl0ZW0uY29uZmlnKS5hc09mRGF0ZTtcclxuICB9XHJcbiAgcHVibGljIGdldEN1cnJlbmN5KGNvbmZpZykge1xyXG4gICAgcmV0dXJuIEpTT04ucGFyc2UoY29uZmlnKS5jdXJyZW5jeUNvZGU7XHJcbiAgfVxyXG4gIHB1YmxpYyBnZXRGaWd1cmVjb2RlKGZpZ3VyZUNvZGUpIHtcclxuICAgIHN3aXRjaCAoZmlndXJlQ29kZSkge1xyXG4gICAgICBjYXNlIFwiVGFza3NcIjpcclxuICAgICAgICByZXR1cm4gMTtcclxuICAgICAgY2FzZSBcIkZ1bmRMaXN0XCI6XHJcbiAgICAgICAgcmV0dXJuIDI7XHJcbiAgICAgIGNhc2UgXCJJUlJcIjpcclxuICAgICAgICByZXR1cm4gMztcclxuICAgICAgY2FzZSBcIk5vdGVzXCI6XHJcbiAgICAgICAgcmV0dXJuIDQ7XHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgcmV0dXJuIDA7XHJcbiAgICB9XHJcbiAgfVxyXG4gIHB1YmxpYyBnZXRUYWJsZU5hbWUoaXRlbSkge1xyXG4gICAgbGV0IGNvbmZpZyA9IGl0ZW0uY29uZmlnID8gSlNPTi5wYXJzZShpdGVtLmNvbmZpZykgOiB7fTtcclxuICAgIGlmIChjb25maWcucG9ydGxldFR5cGUpIHtcclxuICAgICAgbGV0IHR5cGVMaXN0ID0gW1widGFibGVcIiwgXCJmaW5hbmNpYWxUYWJsZVwiLCBcInRyYW5zcG9zZVwiLCBcInBpdm90XCJdO1xyXG4gICAgICBsZXQgaWR4ID0gdHlwZUxpc3QuaW5kZXhPZihjb25maWcucG9ydGxldFR5cGUpO1xyXG4gICAgICByZXR1cm4gaWR4ID4gLTEgPyB0cnVlIDogZmFsc2U7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgcHVzaFNsaWRlcigpIHtcclxuICAgIHRoaXMucHVzaF9idG4gPSAhdGhpcy5wdXNoX2J0bjtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0RmlndXJlQ29kZShmaWd1cmVDb2RlKSB7XHJcbiAgICBsZXQgY29kZUFyciA9IFtcIlRhc2tzXCIsIFwiRnVuZExpc3RcIiwgXCJJUlJcIiwgXCJOb3Rlc1wiXTtcclxuICAgIGxldCBpID0gY29kZUFyci5pbmRleE9mKGZpZ3VyZUNvZGUpO1xyXG4gICAgcmV0dXJuIGkgPiAtMSA/IHRydWUgOiBmYWxzZTtcclxuICB9XHJcbiAgeDtcclxuICB5O1xyXG5cclxuICBwdWJsaWMgZ2V0RGFzaGJvYXJkKCkge1xyXG4gICAgdGhpcy51cmwgPSBcImRhc2hib2FyZERldGFpbFwiO1xyXG4gICAgbGV0IHVybF9hcnIgPSB0aGlzLnBiZi5nZXRSb3V0ZXJVcmwoKS5zcGxpdChcIj9cIik7XHJcbiAgICB0aGlzLnVybF9pZCA9IHRoaXMucGJmLmdldFVybElkKHVybF9hcnJbMF0pO1xyXG4gICAgdGhpcy51cmxfdHlwZSA9XHJcbiAgICAgIHVybF9hcnJbMV0gPT0gXCJkYXNoYm9hcmRUeXBlPWN1c3RvbWl6ZWRCZXRhXCJcclxuICAgICAgICA/IFwiY3VzdG9taXplZEJldGFcIlxyXG4gICAgICAgIDogdXJsX2FyclsxXSA9PSBcImRhc2hib2FyZFR5cGU9c2hhcmVkQmV0YVwiXHJcbiAgICAgICAgPyBcInNoYXJlZEJldGFcIlxyXG4gICAgICAgIDogXCJcIjtcclxuICAgIHRoaXMuRGFzaGJvYXJkUG9ybGV0c1NlcnZpY2UuR2V0RGFzaGJvYXJkVjEoXHJcbiAgICAgIHRoaXMudXJsX2lkLFxyXG4gICAgICB0cnVlLFxyXG4gICAgICAocmVzLCBwb3J0bGV0cyA9IFtdKSA9PiB7XHJcbiAgICAgICAgdGhpcy5oYXNJbml0ID0gdHJ1ZTtcclxuICAgICAgICBpZiAoIXJlcykge1xyXG4gICAgICAgICAgdGhpcy5wYmYucGFnZUxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgIHRoaXMucGJmLnBhZ2VMb2FkaW5nXy5uZXh0KHRydWUpO1xyXG4gICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnBvcnRsZXRzID0gWy4uLnBvcnRsZXRzXTtcclxuICAgICAgICB0aGlzLmluaXRsYXlvdXQoZmFsc2UsIHRydWUpO1xyXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5kYXNoYm9hcmRTZXJ2aWNlLnVwZGF0ZURhdGFtYXJ0RW50aXR5Lm5leHQodGhpcy5kYXNoYm9hcmQpO1xyXG4gICAgICAgICAgLy8gdGhpcy5jaGFydFVwZGF0ZSgpO1xyXG4gICAgICAgICAgdGhpcy5wYmYucGFnZUxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgIHRoaXMucGJmLnBhZ2VMb2FkaW5nXy5uZXh0KHRydWUpO1xyXG4gICAgICAgIH0sIDUwMCk7XHJcbiAgICAgIH0sXHJcbiAgICAgIGZhbHNlLFxyXG4gICAgICAocmVzKSA9PiB7XHJcbiAgICAgICAgdGhpcy5kYXNoYm9hcmQgPSBPYmplY3QuYXNzaWduKHt9LCByZXMpO1xyXG4gICAgICAgIGlmICh0aGlzLmRhc2hib2FyZExheW91dCkge1xyXG4gICAgICAgICAgdGhpcy5kYXNoYm9hcmRMYXlvdXQucmVmcmVzaCgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnJlZi5tYXJrRm9yQ2hlY2soKTtcclxuICAgICAgICB0aGlzLnJlZi5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgIH1cclxuICAgICk7XHJcbiAgfVxyXG4gIHB1YmxpYyByb3V0ZXJQYWdlKCkge1xyXG4gICAgdGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybChcIi9wYWdlcy9kYXNoYm9hcmQvZGFzaGJvYXJkbGlzdFwiKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBkaXNwbGF5SWNvblByb21wdChpdGVtKSB7XHJcbiAgICByZXR1cm4gSlNPTi5wYXJzZShpdGVtLmNvbmZpZykucG9ydGxldFR5cGUgfHxcclxuICAgICAgdGhpcy5nZXRGaWd1cmVDb2RlKGl0ZW0uZmlndXJlQ29kZSlcclxuICAgICAgPyBmYWxzZVxyXG4gICAgICA6IHRydWU7XHJcbiAgfVxyXG4gIHB1YmxpYyBhc3luYyBjb25maWd1cmF0aW9ucyhpdGVtLCBldmVudCkge1xyXG4gICAgY29uc3QgcG9ydGxldFR5cGUgPSB0aGlzLmdldFBvcnRsZXRUeXBlKGl0ZW0pO1xyXG4gICAgc3dpdGNoIChwb3J0bGV0VHlwZSkge1xyXG4gICAgICBjYXNlIFwidGFibGVcIjpcclxuICAgICAgICBjb25zdCB0YWJsZSA9IGZpbmQoXHJcbiAgICAgICAgICAodGhpcy50YWJsZSBhcyBhbnkpLl9yZXN1bHRzLFxyXG4gICAgICAgICAgKGVsKSA9PiBlbC5wb3J0bGV0Lm5ld0lkID09PSBpdGVtLm5ld0lkXHJcbiAgICAgICAgKTtcclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICB0YWJsZS5ncmlkICYmXHJcbiAgICAgICAgICB0YWJsZS5ncmlkLmdldEN1cnJlbnRWaWV3UmVjb3JkcygpICYmXHJcbiAgICAgICAgICB0YWJsZS5ncmlkLmdldEN1cnJlbnRWaWV3UmVjb3JkcygpLmxlbmd0aFxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgLy8gbGV0IG1hc2s6IGFueSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCIjcGl2b3QtdGFibGUtbWFza1wiKTtcclxuICAgICAgICAgIC8vIGlmIChtYXNrKSBtYXNrLnN0eWxlLmRpc3BsYXkgPSBcImJsb2NrXCI7XHJcbiAgICAgICAgICBsZXQgX3kgPSAwO1xyXG4gICAgICAgICAgaWYgKGV2ZW50ICYmIGV2ZW50LnRhcmdldCkge1xyXG4gICAgICAgICAgICBjb25zdCB7IHkgfSA9IGV2ZW50LnRhcmdldC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcclxuICAgICAgICAgICAgaWYgKGRvY3VtZW50LmJvZHkuY2xpZW50SGVpZ2h0IC0geSA8IDQwMCkge1xyXG4gICAgICAgICAgICAgIF95ID0gLTQxNTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgdGFibGUuZ3JpZCAmJlxyXG4gICAgICAgICAgICB0YWJsZS5ncmlkLmNvbHVtbkNob29zZXJNb2R1bGUgJiZcclxuICAgICAgICAgICAgdGFibGUuZ3JpZC5jb2x1bW5DaG9vc2VyTW9kdWxlLm9wZW5Db2x1bW5DaG9vc2VyKDIwMCwgX3kpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBcIm5ld2NoYXJ0XCI6XHJcbiAgICAgIGNhc2UgXCJwaXZvdFwiOlxyXG4gICAgICAgIGNvbnN0IHBpdm90ID0gZmluZChcclxuICAgICAgICAgICh0aGlzLnBpdm90IGFzIGFueSkuX3Jlc3VsdHMsXHJcbiAgICAgICAgICAoZWwpID0+IGVsLnBvcnRsZXQubmV3SWQgPT09IGl0ZW0ubmV3SWRcclxuICAgICAgICApO1xyXG4gICAgICAgIGlmIChcclxuICAgICAgICAgIHBpdm90LmZpZWxkbGlzdE9iai5kaWFsb2dSZW5kZXJlciAmJlxyXG4gICAgICAgICAgcGl2b3QuZmllbGRsaXN0T2JqLmRpYWxvZ1JlbmRlcmVyLmZpZWxkTGlzdERpYWxvZ1xyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgcGl2b3QuZmllbGRsaXN0T2JqLmRpYWxvZ1JlbmRlcmVyLmZpZWxkTGlzdERpYWxvZy5zaG93KCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIFwidHJhbnNwb3NlXCI6XHJcbiAgICAgICAgY29uc3QgdHJhbnNwb3NlID0gZmluZChcclxuICAgICAgICAgICh0aGlzLnRyYW5zcG9zZSBhcyBhbnkpLl9yZXN1bHRzLFxyXG4gICAgICAgICAgKGVsKSA9PiBlbC5wb3J0bGV0Lm5ld0lkID09PSBpdGVtLm5ld0lkXHJcbiAgICAgICAgKTtcclxuICAgICAgICAvLyDlvIDlkK/pgILphY0g5omL5Yqo57yp5bCPXHJcbiAgICAgICAgdHJhbnNwb3NlLmdyaWQuY29sdW1uQ2hvb3Nlck1vZHVsZS5zaG93Q3VzdG9tQ29sdW1uQ2hvb3NlcigpO1xyXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgbGV0IGRsZzogYW55ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcclxuICAgICAgICAgICAgXCIuZS1yZXNjb2x1bW5jaG9vc2VyZGl2LmUtcmVzcG9uc2l2ZS1kaWFsb2dcIlxyXG4gICAgICAgICAgKTtcclxuICAgICAgICAgIGlmIChkbGcpIHtcclxuICAgICAgICAgICAgZGxnLnN0eWxlLm9wYWNpdHkgPSAxO1xyXG4gICAgICAgICAgICBkbGcuc3R5bGUuc2V0UHJvcGVydHkoXCJ3aWR0aFwiLCBcIjMwMHB4XCIsIFwiaW1wb3J0YW50XCIpO1xyXG4gICAgICAgICAgICBkbGcuc3R5bGUuc2V0UHJvcGVydHkoXCJoZWlnaHRcIiwgXCIzNTBweFwiLCBcImltcG9ydGFudFwiKTtcclxuICAgICAgICAgICAgZGxnLnN0eWxlLnNldFByb3BlcnR5KFwicG9zaXRpb25cIiwgXCJhYnNvbHV0ZVwiLCBcImltcG9ydGFudFwiKTtcclxuICAgICAgICAgICAgZGxnLnN0eWxlLnNldFByb3BlcnR5KFxyXG4gICAgICAgICAgICAgIFwibGVmdFwiLFxyXG4gICAgICAgICAgICAgIGV2ZW50LmNsaWVudFggLSAxMzUgKyBcInB4XCIsXHJcbiAgICAgICAgICAgICAgXCJpbXBvcnRhbnRcIlxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgICBkbGcuc3R5bGUuc2V0UHJvcGVydHkoXHJcbiAgICAgICAgICAgICAgXCJ0b3BcIixcclxuICAgICAgICAgICAgICBldmVudC5jbGllbnRZICsgMzAgKyBcInB4XCIsXHJcbiAgICAgICAgICAgICAgXCJpbXBvcnRhbnRcIlxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0sIDApO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzZXRQcmV2SWQoKSB7XHJcbiAgICB0aGlzLnRhYkxpc3QuZm9yRWFjaCgodGFiLCBpKSA9PiB7XHJcbiAgICAgIGlmICh0YWIuaWQgPT09IHRoaXMuYWN0aXZlVGFiKSB7XHJcbiAgICAgICAgaWYgKHRoaXMudGFiTGlzdFtpIC0gMV0pIHtcclxuICAgICAgICAgIHRoaXMucHJldklkID0gdGhpcy50YWJMaXN0W2kgLSAxXS5pZDtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgZHJvcChlKSB7XHJcbiAgICBjb25zdCB7IHByZXZpb3VzSW5kZXgsIGN1cnJlbnRJbmRleCB9ID0gZTtcclxuICAgIGNvbnN0IHByZXZJZCA9IHRoaXMudGFiTGlzdFtwcmV2aW91c0luZGV4XS5pZDtcclxuICAgIGNvbnN0IGN1cnJJZCA9IHRoaXMudGFiTGlzdFtjdXJyZW50SW5kZXhdLmlkO1xyXG5cclxuICAgIGZvciAobGV0IGkgPSB0aGlzLnRhYkxpc3QubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcclxuICAgICAgY29uc3QgdGFiSWQgPSB0aGlzLnRhYkxpc3RbaV0uaWQ7XHJcbiAgICAgIGlmICh0YWJJZCA9PT0gcHJldklkKSB7XHJcbiAgICAgICAgdGhpcy50YWJMaXN0W2ldLmlkID0gY3VycklkO1xyXG4gICAgICB9XHJcbiAgICAgIGlmICh0YWJJZCA9PT0gY3VycklkKSB7XHJcbiAgICAgICAgdGhpcy50YWJMaXN0W2ldLmlkID0gcHJldklkO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBmb3IgKGxldCBpID0gdGhpcy5wb3J0bGV0cy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xyXG4gICAgICBjb25zdCBjb25maWcgPSBKU09OLnBhcnNlKHRoaXMucG9ydGxldHNbaV0uY29uZmlnKTtcclxuICAgICAgY29uc3QgdGFiSWQgPSBjb25maWcudGFiSWQ7XHJcbiAgICAgIGlmICh0YWJJZCA9PT0gcHJldklkKSB7XHJcbiAgICAgICAgY29uZmlnLnRhYklkID0gY3VycklkO1xyXG4gICAgICAgIHRoaXMucG9ydGxldHNbaV0uY29uZmlnID0gSlNPTi5zdHJpbmdpZnkoY29uZmlnKTtcclxuICAgICAgfVxyXG4gICAgICBpZiAodGFiSWQgPT09IGN1cnJJZCkge1xyXG4gICAgICAgIGNvbmZpZy50YWJJZCA9IHByZXZJZDtcclxuICAgICAgICB0aGlzLnBvcnRsZXRzW2ldLmNvbmZpZyA9IEpTT04uc3RyaW5naWZ5KGNvbmZpZyk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGlmICh0aGlzLmFjdGl2ZVRhYiA9PT0gY3VycklkKSB7XHJcbiAgICAgIHRoaXMuYWN0aXZlVGFiID0gcHJldklkO1xyXG4gICAgfSBlbHNlIGlmICh0aGlzLmFjdGl2ZVRhYiA9PT0gcHJldklkKSB7XHJcbiAgICAgIHRoaXMuYWN0aXZlVGFiID0gY3VycklkO1xyXG4gICAgfVxyXG4gICAgdGhpcy5zZXRQcmV2SWQoKTtcclxuICAgIFt0aGlzLnRhYkxpc3RbcHJldmlvdXNJbmRleF0sIHRoaXMudGFiTGlzdFtjdXJyZW50SW5kZXhdXSA9IFtcclxuICAgICAgdGhpcy50YWJMaXN0W2N1cnJlbnRJbmRleF0sXHJcbiAgICAgIHRoaXMudGFiTGlzdFtwcmV2aW91c0luZGV4XSxcclxuICAgIF07XHJcbiAgICB0aGlzLnRhYkxpc3QgPSBbLi4udGhpcy50YWJMaXN0XTtcclxuXHJcbiAgICB0aGlzLnJlZi5tYXJrRm9yQ2hlY2soKTtcclxuICB9XHJcbiAgY2xvc2VBbGwoKSB7XHJcbiAgICB0aGlzLnBiZi5wYWdlTG9hZGluZyA9IHRydWU7XHJcbiAgICB0aGlzLnBiZi5wYWdlTG9hZGluZ18ubmV4dCh0cnVlKTtcclxuICAgIHRoaXMucmVmLm1hcmtGb3JDaGVjaygpO1xyXG4gICAgbGV0IGhhc0NvbmZpZyA9IGZhbHNlO1xyXG4gICAgdGhpcy5BY3RpdmVEYXNoYm9hcmRQb3J0bGV0cy5mb3JFYWNoKChwb3J0bGV0KSA9PiB7XHJcbiAgICAgIGNvbnN0IHBvcnRsZXRUeXBlID0gdGhpcy5nZXRQb3J0bGV0VHlwZShwb3J0bGV0KTtcclxuICAgICAgc3dpdGNoIChwb3J0bGV0VHlwZSkge1xyXG4gICAgICAgIGNhc2UgXCJwaXZvdFwiOlxyXG4gICAgICAgIGNhc2UgXCJuZXdjaGFydFwiOlxyXG4gICAgICAgICAgY29uc3QgZG9tID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXHJcbiAgICAgICAgICAgIGAke3BvcnRsZXQubmV3SWR9X0RlZmVyVXBkYXRlQnV0dG9uMmBcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgICBpZiAoZG9tKSB7XHJcbiAgICAgICAgICAgIGhhc0NvbmZpZyA9IHRydWU7XHJcbiAgICAgICAgICAgIGRvbS5jbGljaygpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBcInRhYmxlXCI6XHJcbiAgICAgICAgICBjb25zdCBjYW5jZWxCdG4gPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiLmUtY2MtY25idG5cIik7XHJcbiAgICAgICAgICBpZiAoY2FuY2VsQnRuKSB7XHJcbiAgICAgICAgICAgIGhhc0NvbmZpZyA9IHRydWU7XHJcbiAgICAgICAgICAgIC8vIEB0cy1pZ25vcmVcclxuICAgICAgICAgICAgY2FuY2VsQnRuLmNsaWNrKCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICBpZiAoaGFzQ29uZmlnKSB7XHJcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgIHRoaXMucGJmLnBhZ2VMb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5wYmYucGFnZUxvYWRpbmdfLm5leHQodHJ1ZSk7XHJcbiAgICAgICAgdGhpcy5yZWYubWFya0ZvckNoZWNrKCk7XHJcbiAgICAgIH0sIDQwMCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnBiZi5wYWdlTG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICB0aGlzLnBiZi5wYWdlTG9hZGluZ18ubmV4dCh0cnVlKTtcclxuICAgIH1cclxuICAgIHJldHVybiBoYXNDb25maWc7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZG93bmxvYWRBbGwoKSB7XHJcbiAgICBjb25zdCBkaWFsb2dSZWYgPSB0aGlzLmRpYWxvZy5vcGVuKFBhbmVEb3dubG9hZENvbXBvbmVudCwge1xyXG4gICAgICBkYXRhOiB7XHJcbiAgICAgICAgcG9ydGxldHM6IHRoaXMucG9ydGxldHMsXHJcbiAgICAgICAgZGFzaGJvYXJkOiB0aGlzLmRhc2hib2FyZCxcclxuICAgICAgfSxcclxuICAgICAgaGVpZ2h0OiBcIjg1MHB4XCIsXHJcbiAgICAgIHdpZHRoOiBcIjU2MnB4XCIsXHJcbiAgICB9KTtcclxuICAgIGRpYWxvZ1JlZi5hZnRlckNsb3NlZCgpLnN1YnNjcmliZSgocmVzKSA9PiB7fSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZG93bmxvYWQoaXRlbSkge1xyXG4gICAgY29uc3QgcG9ydGxldFR5cGUgPSB0aGlzLmdldFBvcnRsZXRUeXBlKGl0ZW0pO1xyXG4gICAgY29uc3QgdGl0bGUgPSB0aGlzLkdldGdhZGdldFRpdGxlKGl0ZW0uY29uZmlnKTtcclxuICAgIHN3aXRjaCAocG9ydGxldFR5cGUpIHtcclxuICAgICAgY2FzZSBcInRhYmxlXCI6XHJcbiAgICAgICAgdGhpcy5kb3dubG9hZFRhYmxlKGl0ZW0sIHRpdGxlKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBcIm5ld2NoYXJ0XCI6XHJcbiAgICAgIGNhc2UgXCJwaXZvdFwiOlxyXG4gICAgICAgIGNvbnN0IHBpdm90ID0gZmluZChcclxuICAgICAgICAgICh0aGlzLnBpdm90IGFzIGFueSkuX3Jlc3VsdHMsXHJcbiAgICAgICAgICAoZWwpID0+IGVsLnBvcnRsZXQubmV3SWQgPT09IGl0ZW0ubmV3SWRcclxuICAgICAgICApO1xyXG4gICAgICAgIHBpdm90LmhlYWRSb3dTcGFuID0gMDsgLy/ph43nva7lr7zlh7poZWFkZXLlpITnkIZcclxuICAgICAgICBwaXZvdC5oZWFkUm93Q291bnQgPSAwOyAvL+mHjee9ruWvvOWHumhlYWRlcuWkhOeQhlxyXG4gICAgICAgIGNvbnN0IGV4Y2VsRXhwb3J0UHJvcGVydGllc19waXZvdDogRXhjZWxFeHBvcnRQcm9wZXJ0aWVzID0ge1xyXG4gICAgICAgICAgZmlsZU5hbWU6IHRpdGxlXHJcbiAgICAgICAgICAgID8gdGl0bGUgKyBcIi54bHN4XCJcclxuICAgICAgICAgICAgOiBcIlBpdm90LVwiICsgbmV3IERhdGUoKS50b0lTT1N0cmluZygpICsgXCIueGxzeFwiLFxyXG4gICAgICAgIH07XHJcbiAgICAgICAgaWYgKHBpdm90LnBpdm90T2JqLmRhdGFTb3VyY2VTZXR0aW5ncy5mb3JtYXRTZXR0aW5ncykge1xyXG4gICAgICAgICAgcGl2b3QucGl2b3RPYmouZGF0YVNvdXJjZVNldHRpbmdzLmZvcm1hdFNldHRpbmdzLmZvckVhY2goXHJcbiAgICAgICAgICAgIChzZXR0aW5nKSA9PiB7XHJcbiAgICAgICAgICAgICAgLy8gc3luY2Z1c2lvbiBmb3JtYXQgdHJhbnNmb3JtIHRvIGV4Y2VsIGZvcm1hdFxyXG4gICAgICAgICAgICAgIGNvbnN0IG1hcCA9IHtcclxuICAgICAgICAgICAgICAgIFwiIywjIyMsLC4wOygjLCMjIywsLjApXCI6ICcwLjAsLFwiXCI7KDAuMCwsKScsXHJcbiAgICAgICAgICAgICAgICAnMC4wLCxcIlwiOygwLjAsLCknOiBcIiMsIyMjLCwuMDsoIywjIyMsLC4wKVwiLFxyXG4gICAgICAgICAgICAgICAgXCIjLCMjIywsOygjLCMjIywsKVwiOiAnMCwsXCJcIjsoMCwsKScsXHJcbiAgICAgICAgICAgICAgICAnMCwsXCJcIjsoMCwsKSc6IFwiIywjIyMsLDsoIywjIyMsLClcIixcclxuICAgICAgICAgICAgICAgIFwiIywjIyMsLC4wMDsoIywjIyMsLC4wMClcIjogJzAuMDAsLFwiXCI7KDAuMDAsLCknLFxyXG4gICAgICAgICAgICAgICAgJzAuMDAsLFwiXCI7KDAuMDAsLCknOiBcIiMsIyMjLCwuMDA7KCMsIyMjLCwuMDApXCIsXHJcbiAgICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgICAgaWYgKG1hcFtzZXR0aW5nLmZvcm1hdF0pIHtcclxuICAgICAgICAgICAgICAgIHNldHRpbmcuZm9ybWF0ID0gbWFwW3NldHRpbmcuZm9ybWF0XTtcclxuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICBzZXR0aW5nLmZvcm1hdCA9IG1hcFtzZXR0aW5nLmZvcm1hdF07XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMucmVmLm1hcmtGb3JDaGVjaygpO1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLnJlZi5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMudXBkYXRlRm9ybWF0KFxyXG4gICAgICAgICAgcGl2b3QucGl2b3RPYmouZ3JpZC5jb2x1bW5zIGFzIENvbHVtbk1vZGVsW10sXHJcbiAgICAgICAgICBwaXZvdC5waXZvdE9ialxyXG4gICAgICAgICk7XHJcbiAgICAgICAgcGl2b3QucGl2b3RPYmouZXhjZWxFeHBvcnQoZXhjZWxFeHBvcnRQcm9wZXJ0aWVzX3Bpdm90KTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgLy8gY2FzZSBcInRyYW5zcG9zZVwiOlxyXG4gICAgICAvLyBcdC8vIGNvbnN0IHRyYW5zcG9zZSA9IGZpbmQoXHJcbiAgICAgIC8vIFx0Ly8gXHQodGhpcy50cmFuc3Bvc2UgYXMgYW55KS5fcmVzdWx0cyxcclxuICAgICAgLy8gXHQvLyBcdChlbCkgPT4gZWwucG9ydGxldC5uZXdJZCA9PT0gaXRlbS5uZXdJZFxyXG4gICAgICAvLyBcdC8vICk7XHJcbiAgICAgIC8vIFx0YnJlYWs7XHJcbiAgICAgIGNhc2UgXCJuZXdjb2x1bW5cIjpcclxuICAgICAgY2FzZSBcIm5ld2xpbmVcIjpcclxuICAgICAgY2FzZSBcIm5ld2NvbHVtbmxpbmVcIjpcclxuICAgICAgICBjb25zdCBjaGFydElkeCA9IHRoaXMuZ2V0Q2hhcnRJbmRleEluQWxsKGl0ZW0pO1xyXG4gICAgICAgIGNvbnN0IHNlbGVjdGVkQ29tcG9uZW50ID0gdGhpcy5uZXdDaGFydC50b0FycmF5KClbY2hhcnRJZHhdO1xyXG4gICAgICAgIHNlbGVjdGVkQ29tcG9uZW50LmV4cG9ydENoYXJ0KCk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyDmoLnmja5pZHjojrflj5bngrnlh7vlm77ooajlnKjlm77ooajliJfooajph4znmoTnnJ/mraPpobrluo9cclxuICBnZXRDaGFydEluZGV4SW5BbGwoaXRlbSkge1xyXG4gICAgY29uc3QgY2hhckFyciA9IHRoaXMuQWN0aXZlRGFzaGJvYXJkUG9ydGxldHMuZmlsdGVyKChlKSA9PiB7XHJcbiAgICAgIHJldHVybiBbXCJuZXdjb2x1bW5cIiwgXCJuZXdsaW5lXCIsIFwibmV3Y29sdW1ubGluZVwiXS5pbmNsdWRlcyhcclxuICAgICAgICBKU09OLnBhcnNlKGUuY29uZmlnKS5wb3J0bGV0VHlwZVxyXG4gICAgICApO1xyXG4gICAgfSk7XHJcbiAgICBsZXQgcmVzdWx0SWR4ID0gMDtcclxuICAgIGlmIChjaGFyQXJyLmxlbmd0aCA+IDApIHtcclxuICAgICAgY2hhckFyci5mb3JFYWNoKChlLCBpZHgpID0+IHtcclxuICAgICAgICBpZiAoZS5uZXdJZCA9PSBpdGVtLm5ld0lkKSB7XHJcbiAgICAgICAgICByZXN1bHRJZHggPSBpZHg7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICAgIHJldHVybiByZXN1bHRJZHg7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZG93bmxvYWRUYWJsZShpdGVtLCB0aXRsZSkge1xyXG4gICAgLy8gVGFibGUg5LiL6L295YWo6YOo5pWw5o2uXHJcbiAgICBsZXQgY29uZmlnID0gSlNPTi5wYXJzZShpdGVtLmNvbmZpZyk7XHJcbiAgICBsZXQgcGFnZVNldHRpbmcgPSBPYmplY3QuYXNzaWduKFxyXG4gICAgICB7XHJcbiAgICAgICAgY3VycmVudFBhZ2U6IDEsXHJcbiAgICAgICAgcGFnZVNpemU6IDk5OTk5OTksXHJcbiAgICAgIH0sXHJcbiAgICAgIGNvbmZpZyAmJiBjb25maWcudGFibGVTb3J0U2V0dGluZ1xyXG4gICAgKTtcclxuICAgIGxldCBwYXJhbXMgPSB0aGlzLkRhc2hib2FyZFBvcmxldHNTZXJ2aWNlLmdldFBhcmFtc0J5UG9ydGxldChcclxuICAgICAgaXRlbSxcclxuICAgICAgcGFnZVNldHRpbmcsXHJcbiAgICAgIG51bGwsXHJcbiAgICAgIHRoaXMuZGFzaGJvYXJkXHJcbiAgICApO1xyXG4gICAgLy8ganNvbiBidWZmZXJcclxuICAgIHRoaXMuaHR0cENsaWVudFxyXG4gICAgICAucG9zdCh0aGlzLmFwaS5iYXNldXJsICsgdGhpcy5hcGkudXJsTGlzdC5HZXRQb3J0bGV0RGF0YVYyLCBwYXJhbXMpXHJcbiAgICAgIC5zdWJzY3JpYmUoXHJcbiAgICAgICAgKHJlc3VsdCkgPT4ge1xyXG4gICAgICAgICAgaWYgKHJlc3VsdCkge1xyXG4gICAgICAgICAgICBjb25zdCB0YWJsZSA9IGZpbmQoXHJcbiAgICAgICAgICAgICAgKHRoaXMudGFibGUgYXMgYW55KS5fcmVzdWx0cyxcclxuICAgICAgICAgICAgICAoZWwpID0+IGVsLnBvcnRsZXQubmV3SWQgPT09IGl0ZW0ubmV3SWRcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgY29uc3QgZXhjZWxFeHBvcnRQcm9wZXJ0aWVzOiBFeGNlbEV4cG9ydFByb3BlcnRpZXMgPSB7XHJcbiAgICAgICAgICAgICAgZmlsZU5hbWU6IHRpdGxlXHJcbiAgICAgICAgICAgICAgICA/IHRpdGxlICsgXCIueGxzeFwiXHJcbiAgICAgICAgICAgICAgICA6IFwiVGFibGUtXCIgKyBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCkgKyBcIi54bHN4XCIsXHJcbiAgICAgICAgICAgICAgLy8gQHRzLWlnbm9yZVxyXG4gICAgICAgICAgICAgIGRhdGFTb3VyY2U6IHJlc3VsdC5kYXRhLFxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICBpZiAodGFibGUpIHtcclxuICAgICAgICAgICAgICB0YWJsZS5ncmlkLmV4Y2VsRXhwb3J0KGV4Y2VsRXhwb3J0UHJvcGVydGllcyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIChyZXNwb25zZSkgPT4ge30sXHJcbiAgICAgICAgKCkgPT4ge31cclxuICAgICAgKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgdXBkYXRlRm9ybWF0KGNvbHVtbnM6IENvbHVtbk1vZGVsW10sIHBpdm90T2JqKSB7XHJcbiAgICB2YXIgZkxpc3QgPSBwaXZvdE9iai5yZW5kZXJNb2R1bGUuZ2V0Rm9ybWF0TGlzdCgpO1xyXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjb2x1bW5zLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGlmIChcclxuICAgICAgICAoY29sdW1uc1tpXSBhcyBDb2x1bW5Nb2RlbCkuY29sdW1ucyAmJlxyXG4gICAgICAgIChjb2x1bW5zW2ldIGFzIENvbHVtbk1vZGVsKS5jb2x1bW5zLmxlbmd0aCA+IDBcclxuICAgICAgKSB7XHJcbiAgICAgICAgdGhpcy51cGRhdGVGb3JtYXQoXHJcbiAgICAgICAgICAoY29sdW1uc1tpXSBhcyBDb2x1bW5Nb2RlbCkuY29sdW1ucyBhcyBDb2x1bW5Nb2RlbFtdLFxyXG4gICAgICAgICAgcGl2b3RPYmpcclxuICAgICAgICApO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGlmIChcclxuICAgICAgICAgIGNvbHVtbnNbaV0uY3VzdG9tQXR0cmlidXRlcyAmJlxyXG4gICAgICAgICAgZkxpc3RbKGNvbHVtbnNbaV0uY3VzdG9tQXR0cmlidXRlcy5jZWxsIGFzIElBeGlzU2V0KS5hY3R1YWxUZXh0XSA9PT1cclxuICAgICAgICAgICAgXCJOXCJcclxuICAgICAgICApIHtcclxuICAgICAgICAgIChjb2x1bW5zW2ldIGFzIENvbHVtbk1vZGVsKS5mb3JtYXQgPSB1bmRlZmluZWQ7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZmllbGRGb3JtYXQoaXRlbSkge1xyXG4gICAgdGhpcy5wb3J0bGV0ID0gY2xvbmVEZWVwKGl0ZW0pO1xyXG4gICAgY29uc3QgZGlhbG9nUmVmID0gdGhpcy5kaWFsb2cub3BlbihGaWVsZEZvcm1hdENvbXBvbmVudCwge1xyXG4gICAgICBkYXRhOiB7XHJcbiAgICAgICAgcG9ydGxldERhdGE6IGl0ZW0sXHJcbiAgICAgICAgcG9ydGxldHM6IHRoaXMucG9ydGxldHMsXHJcbiAgICAgIH0sXHJcbiAgICAgIGhlaWdodDogXCI4NTBweFwiLFxyXG4gICAgICBtaW5XaWR0aDogXCI1NjJweFwiLFxyXG4gICAgICBhdXRvRm9jdXM6IGZhbHNlLFxyXG4gICAgICBkaXNhYmxlQ2xvc2U6IHRydWUsXHJcbiAgICAgIHBhbmVsQ2xhc3M6IFwiZGlhbG9nLXBvc2l0aW9uXCIsXHJcbiAgICB9KTtcclxuICAgIGRpYWxvZ1JlZi5hZnRlckNsb3NlZCgpLnN1YnNjcmliZSgocmVzKSA9PiB7fSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgb3BlbkZpbHRlcihpdGVtKSB7XHJcbiAgICB0aGlzLnBvcnRsZXQgPSBjbG9uZURlZXAoaXRlbSk7XHJcbiAgICB0aGlzLmRhc2hib2FyZF9zaWRlYmFyID0gdHJ1ZTtcclxuICAgIHRoaXMucHVzaF9idG4gPSB0cnVlO1xyXG4gICAgdGhpcy5maWd1cmVDb2RlID0gaXRlbS5maWd1cmVDb2RlO1xyXG4gICAgdGhpcy50YWJhY3RpdmUgPSB0cnVlO1xyXG4gICAgdGhpcy5kYXNoYm9hcmRTZXJ2aWNlLnBvcnRsZXRFZGl0Lm5leHQodGhpcy51cmxfaWQpO1xyXG4gIH1cclxuXHJcbiAgdXBkYXRlUHVzaEJ0bihlOiBib29sZWFuKSB7XHJcbiAgICB0aGlzLnB1c2hfYnRuID0gZTtcclxuICAgIHRoaXMucmVmLm1hcmtGb3JDaGVjaygpO1xyXG4gIH1cclxuXHJcbiAgdG9nZ2xlQ3VzdG9taXplKGN1c3RvbWl6ZWQpIHtcclxuICAgIHRoaXMuY3VzdG9taXplZCA9IGN1c3RvbWl6ZWQ7XHJcbiAgICB0aGlzLnJlZi5tYXJrRm9yQ2hlY2soKTtcclxuICB9XHJcblxyXG4gIHRvZ2dsZVNpZGViYXIoYm9vbCkge1xyXG4gICAgdGhpcy5kYXNoYm9hcmRfc2lkZWJhciA9IGJvb2w7XHJcbiAgICB0aGlzLnJlZi5tYXJrRm9yQ2hlY2soKTtcclxuICB9XHJcblxyXG4gIG9uVG9nZ2xlVGFiYWN0aXZlKGJvb2wpIHtcclxuICAgIHRoaXMudGFiYWN0aXZlID0gYm9vbDtcclxuICAgIHRoaXMucmVmLm1hcmtGb3JDaGVjaygpO1xyXG4gIH1cclxuXHJcbiAgdXBkYXRlUG9ybGV0KHBvcnRsZXQpIHtcclxuICAgIGlmICghcG9ydGxldCkge1xyXG4gICAgICB0aGlzLnBvcnRsZXQgPSBudWxsO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICB0aGlzLnBvcnRsZXQgPSBjbG9uZURlZXAocG9ydGxldCk7XHJcbiAgICB0aGlzLnBvcnRsZXRzLmZvckVhY2goKF9wb3J0bGV0LCBpKSA9PiB7XHJcbiAgICAgIGlmIChfcG9ydGxldC5uZXdJZCA9PT0gcG9ydGxldC5uZXdJZCkge1xyXG4gICAgICAgIHRoaXMucG9ydGxldHNbaV0gPSBPYmplY3QuYXNzaWduKHt9LCBwb3J0bGV0KTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICB0aGlzLnBvcnRsZXRzID0gWy4uLnRoaXMucG9ydGxldHNdO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGFkZFBvcmxldCgpIHtcclxuICAgIHRoaXMucHVzaF9idG4gPSB0cnVlO1xyXG4gICAgdGhpcy5kYXNoYm9hcmRfc2lkZWJhciA9IHRydWU7XHJcbiAgICB0aGlzLnBvcnRsZXQgPSBudWxsO1xyXG4gICAgdGhpcy50YWJhY3RpdmUgPSBmYWxzZTtcclxuICAgIHRoaXMuZGFzaGJvYXJkU2VydmljZS5jcmVhdGVfYnRuLm5leHQodGhpcy51cmxfaWQpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGNsb3NlU2lkZWJhcihlKSB7XHJcbiAgICB0aGlzLmRhc2hib2FyZF9zaWRlYmFyID0gZmFsc2U7XHJcbiAgICB0aGlzLnJlZi5tYXJrRm9yQ2hlY2soKTtcclxuICB9XHJcblxyXG4gIHJlc2l6ZVN0b3AoYXJncykge1xyXG4gICAgdGhpcy5nZXROZXdQb3NpdGlvbigpO1xyXG4gICAgaWYgKGFyZ3MuZWxlbWVudC5xdWVyeVNlbGVjdG9yKFwiLmUtZ3JpZFwiKSkge1xyXG4gICAgICBjb25zdCB0YWJsZSA9IGZpbmQoXHJcbiAgICAgICAgKHRoaXMudGFibGUgYXMgYW55KS5fcmVzdWx0cyxcclxuICAgICAgICAoZWwpID0+IGVsLnBvcnRsZXQubmV3SWQgPT09IGFyZ3MuZWxlbWVudC5pZFxyXG4gICAgICApO1xyXG4gICAgICBpZiAodGFibGUpIHtcclxuICAgICAgICB0YWJsZS5ncmlkLmhlaWdodCA9IHBhcnNlSW50KGFyZ3MuZWxlbWVudC5zdHlsZS5oZWlnaHQpIC0gODA7XHJcbiAgICAgICAgdGFibGUuZ3JpZC5yZWZyZXNoQ29sdW1ucygpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGFyZ3MuZWxlbWVudC5xdWVyeVNlbGVjdG9yKFwiLmUtcGl2b3R2aWV3XCIpKSB7XHJcbiAgICAgIGNvbnN0IHBpdm90ID0gZmluZChcclxuICAgICAgICAodGhpcy5waXZvdCBhcyBhbnkpLl9yZXN1bHRzLFxyXG4gICAgICAgIChlbCkgPT4gZWwucG9ydGxldC5uZXdJZCA9PT0gYXJncy5lbGVtZW50LmlkXHJcbiAgICAgICk7XHJcbiAgICAgIGlmIChwaXZvdCkge1xyXG4gICAgICAgIHBpdm90LnBpdm90T2JqLmxheW91dFJlZnJlc2goKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZHJhZ1N0b3AoZSkge1xyXG4gICAgdGhpcy5nZXROZXdQb3NpdGlvbigpO1xyXG4gIH1cclxuXHJcbiAgZ2V0TmV3UG9zaXRpb24oKSB7XHJcbiAgICBjb25zdCBwZGF0YSA9IHRoaXMuZGFzaGJvYXJkTGF5b3V0LnNlcmlhbGl6ZSgpO1xyXG4gICAgdGhpcy5uZXdQb3NpdGlvbiA9IFsuLi5wZGF0YV07XHJcbiAgICB0aGlzLnBvcnRsZXRzLmZvckVhY2goKHBvcnRsZXQpID0+IHtcclxuICAgICAgcGRhdGEuZm9yRWFjaCgocCkgPT4ge1xyXG4gICAgICAgIGlmIChwb3J0bGV0Lm5ld0lkID09PSBwLmlkKSB7XHJcbiAgICAgICAgICBwb3J0bGV0ID0ge1xyXG4gICAgICAgICAgICAuLi5wb3J0bGV0LFxyXG4gICAgICAgICAgICBwb3NYOiBwLmNvbCxcclxuICAgICAgICAgICAgcG9zWTogcC5yb3csXHJcbiAgICAgICAgICAgIGNvbDogcC5jb2wsXHJcbiAgICAgICAgICAgIHJvdzogcC5yb3csXHJcbiAgICAgICAgICAgIHdpZHRoOiBwLnNpemVYLFxyXG4gICAgICAgICAgICBoZWlnaHQ6IHAuc2l6ZVksXHJcbiAgICAgICAgICAgIHNpemVYOiBwLnNpemVYLFxyXG4gICAgICAgICAgICBzaXplWTogcC5zaXplWSxcclxuICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH0pO1xyXG4gICAgdGhpcy5yZWYubWFya0ZvckNoZWNrKCk7XHJcbiAgICB0aGlzLnJlZi5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgfVxyXG5cclxuICBvcGVuU3VidG90YWwoaXRlbSkge1xyXG4gICAgdGhpcy5DdXJyZW50X1BvcnRsZXRJZCA9IGl0ZW0ubmV3SWQ7XHJcbiAgICB0aGlzLmNvbmZpZyA9IGl0ZW0uY29uZmlnID8gSlNPTi5wYXJzZShpdGVtLmNvbmZpZykgOiB7fTtcclxuICAgIHRoaXMucGl2b3RUYWJsZVN1YlRvdGFsTGlzdC5tYXAoKGVsKSA9PiB7XHJcbiAgICAgIGVsLnNlbGVjdGVkID0gZmFsc2U7XHJcbiAgICB9KTtcclxuICAgIHRoaXMuZ2V0U2VsZWN0VG90YWxHcm91cFN0YXR1cyhcInN1YlwiKTtcclxuICAgIHRoaXMuc2hvd1N1YlRvdGFsR3JvdXAgPSAhdGhpcy5zaG93U3ViVG90YWxHcm91cDtcclxuICAgIHRoaXMuc2hvd2dyYW5kVG90YWxHcm91cCA9IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgb3BlbkdyYW5kdG90YWwoaXRlbSkge1xyXG4gICAgdGhpcy5DdXJyZW50X1BvcnRsZXRJZCA9IGl0ZW0ubmV3SWQ7XHJcbiAgICB0aGlzLmNvbmZpZyA9IGl0ZW0uY29uZmlnID8gSlNPTi5wYXJzZShpdGVtLmNvbmZpZykgOiB7fTtcclxuICAgIHRoaXMucGl2b3RUYWJsZUdyYW5kVG90YWxMaXN0Lm1hcCgoZWwpID0+IHtcclxuICAgICAgZWwuc2VsZWN0ZWQgPSBmYWxzZTtcclxuICAgIH0pO1xyXG4gICAgaWYgKHRoaXMuZ2V0UG9ydGxldFR5cGUoaXRlbSkgPT09IFwidGFibGVcIikge1xyXG4gICAgICB0aGlzLmdldFNlbGVjdFRvdGFsR3JvdXBTdGF0dXMoXCJ0YWJsZUdyYW5kXCIpO1xyXG4gICAgICB0aGlzLnNob3dUYWJsZUdyYW5kVG90YWxHcm91cCA9ICF0aGlzLnNob3dUYWJsZUdyYW5kVG90YWxHcm91cDtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuZ2V0U2VsZWN0VG90YWxHcm91cFN0YXR1cygpO1xyXG4gICAgICB0aGlzLnNob3dncmFuZFRvdGFsR3JvdXAgPSAhdGhpcy5zaG93Z3JhbmRUb3RhbEdyb3VwO1xyXG4gICAgICB0aGlzLnNob3dTdWJUb3RhbEdyb3VwID0gZmFsc2U7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzZWxlY3RUb3RhbEdyb3VwKGluZGV4LCB0eXBlLCBpdGVtKSB7XHJcbiAgICBpZiAodGhpcy5nZXRQb3J0bGV0VHlwZShpdGVtKSA9PT0gXCJwaXZvdFwiKSB7XHJcbiAgICAgIGNvbnN0IHBpdm90ID0gZmluZChcclxuICAgICAgICAodGhpcy5waXZvdCBhcyBhbnkpLl9yZXN1bHRzLFxyXG4gICAgICAgIChlbCkgPT4gZWwucG9ydGxldC5uZXdJZCA9PT0gaXRlbS5uZXdJZFxyXG4gICAgICApO1xyXG4gICAgICBpZiAodHlwZSA9PT0gXCJzdWJcIikge1xyXG4gICAgICAgIHRoaXMuc2hvd1N1YlRvdGFsR3JvdXAgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLnBpdm90VGFibGVTdWJUb3RhbExpc3QuZm9yRWFjaCgoc3VidG90YWwpID0+IHtcclxuICAgICAgICAgIHN1YnRvdGFsLnNlbGVjdGVkID0gZmFsc2U7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdGhpcy5waXZvdFRhYmxlU3ViVG90YWxMaXN0W2luZGV4XS5zZWxlY3RlZCA9IHRydWU7XHJcbiAgICAgICAgaWYgKHBpdm90LnBpdm90T2JqKSB7XHJcbiAgICAgICAgICBzd2l0Y2ggKGluZGV4KSB7XHJcbiAgICAgICAgICAgIGNhc2UgMDpcclxuICAgICAgICAgICAgICB0aGlzLmNvbmZpZy5maWVsZHMubWFwKChlbCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgZWwuc2hvd1N1YlRvdGFscyA9IHRydWU7XHJcbiAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgcGl2b3QucGl2b3RPYmouZGF0YVNvdXJjZVNldHRpbmdzLnNob3dTdWJUb3RhbHMgPSB0cnVlO1xyXG4gICAgICAgICAgICAgIHBpdm90LnBpdm90T2JqLmRhdGFTb3VyY2VTZXR0aW5ncy5zaG93Um93U3ViVG90YWxzID0gdHJ1ZTtcclxuICAgICAgICAgICAgICBwaXZvdC5waXZvdE9iai5kYXRhU291cmNlU2V0dGluZ3Muc2hvd0NvbHVtblN1YlRvdGFscyA9IHRydWU7XHJcbiAgICAgICAgICAgICAgdGhpcy5jb25maWcuc2hvd1N1YlRvdGFscyA9IHRydWU7XHJcbiAgICAgICAgICAgICAgdGhpcy5jb25maWcuc2hvd1Jvd1N1YlRvdGFscyA9IHRydWU7XHJcbiAgICAgICAgICAgICAgdGhpcy5jb25maWcuc2hvd0NvbHVtblN1YlRvdGFscyA9IHRydWU7XHJcbiAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgMTpcclxuICAgICAgICAgICAgICB0aGlzLmNvbmZpZy5maWVsZHMubWFwKChlbCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgZWwuc2hvd1N1YlRvdGFscyA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgIHBpdm90LnBpdm90T2JqLmRhdGFTb3VyY2VTZXR0aW5ncy5zaG93U3ViVG90YWxzID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgcGl2b3QucGl2b3RPYmouZGF0YVNvdXJjZVNldHRpbmdzLnNob3dSb3dTdWJUb3RhbHMgPSB0cnVlO1xyXG4gICAgICAgICAgICAgIHBpdm90LnBpdm90T2JqLmRhdGFTb3VyY2VTZXR0aW5ncy5zaG93Q29sdW1uU3ViVG90YWxzID0gdHJ1ZTtcclxuICAgICAgICAgICAgICB0aGlzLmNvbmZpZy5zaG93U3ViVG90YWxzID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgdGhpcy5jb25maWcuc2hvd1Jvd1N1YlRvdGFscyA9IHRydWU7XHJcbiAgICAgICAgICAgICAgdGhpcy5jb25maWcuc2hvd0NvbHVtblN1YlRvdGFscyA9IHRydWU7XHJcbiAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgMjpcclxuICAgICAgICAgICAgICB0aGlzLmNvbmZpZy5maWVsZHMubWFwKChlbCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgZWwuc2hvd1N1YlRvdGFscyA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgIGZvciAobGV0IGdpdGVtIG9mIHRoaXMuY29uZmlnLnhheGlzLmdyb3Vwcykge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgZmllbGQgPSB0aGlzLmNvbmZpZy5maWVsZHMuZmlsdGVyKFxyXG4gICAgICAgICAgICAgICAgICAoZmwpID0+IGZsLmNvbE5hbWUgPT09IGdpdGVtLm5hbWVcclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICBpZiAoZmllbGQubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgICBmaWVsZFswXS5zaG93U3ViVG90YWxzID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgcGl2b3QucGl2b3RPYmouZGF0YVNvdXJjZVNldHRpbmdzLnNob3dTdWJUb3RhbHMgPSB0cnVlO1xyXG4gICAgICAgICAgICAgIHBpdm90LnBpdm90T2JqLmRhdGFTb3VyY2VTZXR0aW5ncy5zaG93Um93U3ViVG90YWxzID0gdHJ1ZTtcclxuICAgICAgICAgICAgICBwaXZvdC5waXZvdE9iai5kYXRhU291cmNlU2V0dGluZ3Muc2hvd0NvbHVtblN1YlRvdGFscyA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgIHRoaXMuY29uZmlnLnNob3dTdWJUb3RhbHMgPSB0cnVlO1xyXG4gICAgICAgICAgICAgIHRoaXMuY29uZmlnLnNob3dSb3dTdWJUb3RhbHMgPSB0cnVlO1xyXG4gICAgICAgICAgICAgIHRoaXMuY29uZmlnLnNob3dDb2x1bW5TdWJUb3RhbHMgPSBmYWxzZTtcclxuICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAzOlxyXG4gICAgICAgICAgICAgIHRoaXMuY29uZmlnLmZpZWxkcy5tYXAoKGVsKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBlbC5zaG93U3ViVG90YWxzID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgZm9yIChsZXQgaXRlbSBvZiB0aGlzLmNvbmZpZy5jb2x1bW5Hcm91cCkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgZmllbGQgPSB0aGlzLmNvbmZpZy5maWVsZHMuZmlsdGVyKFxyXG4gICAgICAgICAgICAgICAgICAoZmwpID0+IGZsLmNvbE5hbWUgPT09IGl0ZW0ubmFtZVxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgIGlmIChmaWVsZC5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgIGZpZWxkWzBdLnNob3dTdWJUb3RhbHMgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBwaXZvdC5waXZvdE9iai5kYXRhU291cmNlU2V0dGluZ3Muc2hvd1N1YlRvdGFscyA9IHRydWU7XHJcbiAgICAgICAgICAgICAgcGl2b3QucGl2b3RPYmouZGF0YVNvdXJjZVNldHRpbmdzLnNob3dSb3dTdWJUb3RhbHMgPSBmYWxzZTtcclxuICAgICAgICAgICAgICBwaXZvdC5waXZvdE9iai5kYXRhU291cmNlU2V0dGluZ3Muc2hvd0NvbHVtblN1YlRvdGFscyA9IHRydWU7XHJcbiAgICAgICAgICAgICAgdGhpcy5jb25maWcuc2hvd1N1YlRvdGFscyA9IHRydWU7XHJcbiAgICAgICAgICAgICAgdGhpcy5jb25maWcuc2hvd1Jvd1N1YlRvdGFscyA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgIHRoaXMuY29uZmlnLnNob3dDb2x1bW5TdWJUb3RhbHMgPSB0cnVlO1xyXG4gICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLnNob3dncmFuZFRvdGFsR3JvdXAgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLnBpdm90VGFibGVHcmFuZFRvdGFsTGlzdC5mb3JFYWNoKChncmFuZHRvdGFsKSA9PiB7XHJcbiAgICAgICAgICBncmFuZHRvdGFsLnNlbGVjdGVkID0gZmFsc2U7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdGhpcy5waXZvdFRhYmxlR3JhbmRUb3RhbExpc3RbaW5kZXhdLnNlbGVjdGVkID0gdHJ1ZTtcclxuICAgICAgICBpZiAocGl2b3QucGl2b3RPYmopIHtcclxuICAgICAgICAgIHN3aXRjaCAoaW5kZXgpIHtcclxuICAgICAgICAgICAgY2FzZSAwOlxyXG4gICAgICAgICAgICAgIHBpdm90LnBpdm90T2JqLmRhdGFTb3VyY2VTZXR0aW5ncy5zaG93R3JhbmRUb3RhbHMgPSB0cnVlO1xyXG4gICAgICAgICAgICAgIHBpdm90LnBpdm90T2JqLmRhdGFTb3VyY2VTZXR0aW5ncy5zaG93Um93R3JhbmRUb3RhbHMgPSB0cnVlO1xyXG4gICAgICAgICAgICAgIHBpdm90LnBpdm90T2JqLmRhdGFTb3VyY2VTZXR0aW5ncy5zaG93Q29sdW1uR3JhbmRUb3RhbHMgPSB0cnVlO1xyXG4gICAgICAgICAgICAgIHRoaXMuY29uZmlnLnNob3dHcmFuZFRvdGFscyA9IHRydWU7XHJcbiAgICAgICAgICAgICAgdGhpcy5jb25maWcuc2hvd1Jvd0dyYW5kVG90YWxzID0gdHJ1ZTtcclxuICAgICAgICAgICAgICB0aGlzLmNvbmZpZy5zaG93Q29sdW1uR3JhbmRUb3RhbHMgPSB0cnVlO1xyXG4gICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIDE6XHJcbiAgICAgICAgICAgICAgcGl2b3QucGl2b3RPYmouZGF0YVNvdXJjZVNldHRpbmdzLnNob3dHcmFuZFRvdGFscyA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgIHBpdm90LnBpdm90T2JqLmRhdGFTb3VyY2VTZXR0aW5ncy5zaG93Um93R3JhbmRUb3RhbHMgPSB0cnVlO1xyXG4gICAgICAgICAgICAgIHBpdm90LnBpdm90T2JqLmRhdGFTb3VyY2VTZXR0aW5ncy5zaG93Q29sdW1uR3JhbmRUb3RhbHMgPSB0cnVlO1xyXG4gICAgICAgICAgICAgIHRoaXMuY29uZmlnLnNob3dHcmFuZFRvdGFscyA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgIHRoaXMuY29uZmlnLnNob3dSb3dHcmFuZFRvdGFscyA9IHRydWU7XHJcbiAgICAgICAgICAgICAgdGhpcy5jb25maWcuc2hvd0NvbHVtbkdyYW5kVG90YWxzID0gdHJ1ZTtcclxuICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAyOlxyXG4gICAgICAgICAgICAgIHBpdm90LnBpdm90T2JqLmRhdGFTb3VyY2VTZXR0aW5ncy5zaG93R3JhbmRUb3RhbHMgPSB0cnVlO1xyXG4gICAgICAgICAgICAgIHBpdm90LnBpdm90T2JqLmRhdGFTb3VyY2VTZXR0aW5ncy5zaG93Um93R3JhbmRUb3RhbHMgPSB0cnVlO1xyXG4gICAgICAgICAgICAgIHBpdm90LnBpdm90T2JqLmRhdGFTb3VyY2VTZXR0aW5ncy5zaG93Q29sdW1uR3JhbmRUb3RhbHMgPSBmYWxzZTtcclxuICAgICAgICAgICAgICB0aGlzLmNvbmZpZy5zaG93R3JhbmRUb3RhbHMgPSB0cnVlO1xyXG4gICAgICAgICAgICAgIHRoaXMuY29uZmlnLnNob3dSb3dHcmFuZFRvdGFscyA9IHRydWU7XHJcbiAgICAgICAgICAgICAgdGhpcy5jb25maWcuc2hvd0NvbHVtbkdyYW5kVG90YWxzID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgMzpcclxuICAgICAgICAgICAgICBwaXZvdC5waXZvdE9iai5kYXRhU291cmNlU2V0dGluZ3Muc2hvd0dyYW5kVG90YWxzID0gdHJ1ZTtcclxuICAgICAgICAgICAgICBwaXZvdC5waXZvdE9iai5kYXRhU291cmNlU2V0dGluZ3Muc2hvd1Jvd0dyYW5kVG90YWxzID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgcGl2b3QucGl2b3RPYmouZGF0YVNvdXJjZVNldHRpbmdzLnNob3dDb2x1bW5HcmFuZFRvdGFscyA9IHRydWU7XHJcbiAgICAgICAgICAgICAgdGhpcy5jb25maWcuc2hvd0dyYW5kVG90YWxzID0gdHJ1ZTtcclxuICAgICAgICAgICAgICB0aGlzLmNvbmZpZy5zaG93Um93R3JhbmRUb3RhbHMgPSBmYWxzZTtcclxuICAgICAgICAgICAgICB0aGlzLmNvbmZpZy5zaG93Q29sdW1uR3JhbmRUb3RhbHMgPSB0cnVlO1xyXG4gICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBpZiAocGl2b3QucGl2b3RPYmopIHtcclxuICAgICAgICBwaXZvdC5waXZvdE9iai5yZW5kZXIoKTtcclxuICAgICAgICBpdGVtLmNvbmZpZyA9IENpcmN1bGFySlNPTi5zdHJpbmdpZnkodGhpcy5jb25maWcpO1xyXG4gICAgICAgIGNvbnN0IHBvcnRsZXRJbmRleCA9IHRoaXMucG9ydGxldHMuZmluZEluZGV4KFxyXG4gICAgICAgICAgKHgpID0+IHgubmV3SWQgPT09IGl0ZW0ubmV3SWRcclxuICAgICAgICApO1xyXG4gICAgICAgIHRoaXMucG9ydGxldHNbcG9ydGxldEluZGV4XSA9IGl0ZW07XHJcbiAgICAgICAgdGhpcy5kYXNoYm9hcmRTZXJ2aWNlLmNoYW5nZVBpdm90Lm5leHQoaXRlbS5uZXdJZCk7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGNvbnN0IHRhYmxlID0gZmluZChcclxuICAgICAgICAodGhpcy50YWJsZSBhcyBhbnkpLl9yZXN1bHRzLFxyXG4gICAgICAgIChlbCkgPT4gZWwucG9ydGxldC5uZXdJZCA9PT0gaXRlbS5uZXdJZFxyXG4gICAgICApO1xyXG4gICAgICB0aGlzLnNob3dUYWJsZUdyYW5kVG90YWxHcm91cCA9IGZhbHNlO1xyXG4gICAgICB0aGlzLnRhYmxlR3JhbmRUb3RhbExpc3QuZm9yRWFjaCgoZ3JhbmR0b3RhbCkgPT4ge1xyXG4gICAgICAgIGdyYW5kdG90YWwuc2VsZWN0ZWQgPSBmYWxzZTtcclxuICAgICAgfSk7XHJcbiAgICAgIHRoaXMudGFibGVHcmFuZFRvdGFsTGlzdFtpbmRleF0uc2VsZWN0ZWQgPSB0cnVlO1xyXG4gICAgICBpZiAodGFibGUpIHtcclxuICAgICAgICBzd2l0Y2ggKGluZGV4KSB7XHJcbiAgICAgICAgICBjYXNlIDA6XHJcbiAgICAgICAgICAgIHRoaXMuY29uZmlnLnNob3dHcmFuZFRvdGFscyA9IHRydWU7XHJcbiAgICAgICAgICAgIHRhYmxlLmdyaWQuZWxlbWVudFxyXG4gICAgICAgICAgICAgIC5xdWVyeVNlbGVjdG9yKFwiLmUtZ3JpZGZvb3RlclwiKVxyXG4gICAgICAgICAgICAgIC5jbGFzc0xpc3QucmVtb3ZlKFwiaGlkZXN1bW1hcnlcIik7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgY2FzZSAxOlxyXG4gICAgICAgICAgICB0aGlzLmNvbmZpZy5zaG93R3JhbmRUb3RhbHMgPSBmYWxzZTtcclxuICAgICAgICAgICAgdGFibGUuZ3JpZC5lbGVtZW50XHJcbiAgICAgICAgICAgICAgLnF1ZXJ5U2VsZWN0b3IoXCIuZS1ncmlkZm9vdGVyXCIpXHJcbiAgICAgICAgICAgICAgLmNsYXNzTGlzdC5hZGQoXCJoaWRlc3VtbWFyeVwiKTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGl0ZW0uY29uZmlnID0gQ2lyY3VsYXJKU09OLnN0cmluZ2lmeSh0aGlzLmNvbmZpZyk7XHJcbiAgICAgICAgY29uc3QgcG9ydGxldEluZGV4ID0gdGhpcy5wb3J0bGV0cy5maW5kSW5kZXgoXHJcbiAgICAgICAgICAoeCkgPT4geC5uZXdJZCA9PT0gaXRlbS5uZXdJZFxyXG4gICAgICAgICk7XHJcbiAgICAgICAgdGhpcy5wb3J0bGV0c1twb3J0bGV0SW5kZXhdID0gaXRlbTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0U2VsZWN0VG90YWxHcm91cFN0YXR1cyh0eXBlPykge1xyXG4gICAgaWYgKHR5cGUgPT09IFwic3ViXCIpIHtcclxuICAgICAgaWYgKFxyXG4gICAgICAgIHRoaXMuY29uZmlnLnNob3dTdWJUb3RhbHMgJiZcclxuICAgICAgICB0aGlzLmNvbmZpZy5zaG93Um93U3ViVG90YWxzICYmXHJcbiAgICAgICAgdGhpcy5jb25maWcuc2hvd0NvbHVtblN1YlRvdGFsc1xyXG4gICAgICApIHtcclxuICAgICAgICB0aGlzLnBpdm90VGFibGVTdWJUb3RhbExpc3RbMF0uc2VsZWN0ZWQgPSB0cnVlO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChcclxuICAgICAgICAhdGhpcy5jb25maWcuc2hvd1N1YlRvdGFscyAmJlxyXG4gICAgICAgIHRoaXMuY29uZmlnLnNob3dSb3dTdWJUb3RhbHMgJiZcclxuICAgICAgICB0aGlzLmNvbmZpZy5zaG93Q29sdW1uU3ViVG90YWxzXHJcbiAgICAgICkge1xyXG4gICAgICAgIHRoaXMucGl2b3RUYWJsZVN1YlRvdGFsTGlzdFsxXS5zZWxlY3RlZCA9IHRydWU7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKFxyXG4gICAgICAgIHRoaXMuY29uZmlnLnNob3dTdWJUb3RhbHMgJiZcclxuICAgICAgICB0aGlzLmNvbmZpZy5zaG93Um93U3ViVG90YWxzICYmXHJcbiAgICAgICAgIXRoaXMuY29uZmlnLnNob3dDb2x1bW5TdWJUb3RhbHNcclxuICAgICAgKSB7XHJcbiAgICAgICAgdGhpcy5waXZvdFRhYmxlU3ViVG90YWxMaXN0WzJdLnNlbGVjdGVkID0gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgICBpZiAoXHJcbiAgICAgICAgdGhpcy5jb25maWcuc2hvd1N1YlRvdGFscyAmJlxyXG4gICAgICAgICF0aGlzLmNvbmZpZy5zaG93Um93U3ViVG90YWxzICYmXHJcbiAgICAgICAgdGhpcy5jb25maWcuc2hvd0NvbHVtblN1YlRvdGFsc1xyXG4gICAgICApIHtcclxuICAgICAgICB0aGlzLnBpdm90VGFibGVTdWJUb3RhbExpc3RbM10uc2VsZWN0ZWQgPSB0cnVlO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2UgaWYgKHR5cGUgPT09IFwidGFibGVHcmFuZFwiKSB7XHJcbiAgICAgIGlmICh0aGlzLmNvbmZpZyAmJiB0aGlzLmNvbmZpZy5zaG93R3JhbmRUb3RhbHMpIHtcclxuICAgICAgICB0aGlzLnRhYmxlR3JhbmRUb3RhbExpc3RbMF0uc2VsZWN0ZWQgPSB0cnVlO1xyXG4gICAgICB9XHJcbiAgICAgIGlmICghdGhpcy5jb25maWcuc2hvd0dyYW5kVG90YWxzKSB7XHJcbiAgICAgICAgdGhpcy50YWJsZUdyYW5kVG90YWxMaXN0WzFdLnNlbGVjdGVkID0gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgaWYgKFxyXG4gICAgICAgIHRoaXMuY29uZmlnLnNob3dHcmFuZFRvdGFscyAmJlxyXG4gICAgICAgIHRoaXMuY29uZmlnLnNob3dSb3dHcmFuZFRvdGFscyAmJlxyXG4gICAgICAgIHRoaXMuY29uZmlnLnNob3dDb2x1bW5HcmFuZFRvdGFsc1xyXG4gICAgICApIHtcclxuICAgICAgICB0aGlzLnBpdm90VGFibGVHcmFuZFRvdGFsTGlzdFswXS5zZWxlY3RlZCA9IHRydWU7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKFxyXG4gICAgICAgICF0aGlzLmNvbmZpZy5zaG93R3JhbmRUb3RhbHMgJiZcclxuICAgICAgICB0aGlzLmNvbmZpZy5zaG93Um93R3JhbmRUb3RhbHMgJiZcclxuICAgICAgICB0aGlzLmNvbmZpZy5zaG93Q29sdW1uR3JhbmRUb3RhbHNcclxuICAgICAgKSB7XHJcbiAgICAgICAgdGhpcy5waXZvdFRhYmxlR3JhbmRUb3RhbExpc3RbMV0uc2VsZWN0ZWQgPSB0cnVlO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChcclxuICAgICAgICB0aGlzLmNvbmZpZy5zaG93R3JhbmRUb3RhbHMgJiZcclxuICAgICAgICB0aGlzLmNvbmZpZy5zaG93Um93R3JhbmRUb3RhbHMgJiZcclxuICAgICAgICAhdGhpcy5jb25maWcuc2hvd0NvbHVtbkdyYW5kVG90YWxzXHJcbiAgICAgICkge1xyXG4gICAgICAgIHRoaXMucGl2b3RUYWJsZUdyYW5kVG90YWxMaXN0WzJdLnNlbGVjdGVkID0gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgICBpZiAoXHJcbiAgICAgICAgdGhpcy5jb25maWcuc2hvd0dyYW5kVG90YWxzICYmXHJcbiAgICAgICAgIXRoaXMuY29uZmlnLnNob3dSb3dHcmFuZFRvdGFscyAmJlxyXG4gICAgICAgIHRoaXMuY29uZmlnLnNob3dDb2x1bW5HcmFuZFRvdGFsc1xyXG4gICAgICApIHtcclxuICAgICAgICB0aGlzLnBpdm90VGFibGVHcmFuZFRvdGFsTGlzdFszXS5zZWxlY3RlZCA9IHRydWU7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIGluaXRDaGFyRGF0YShub0RldGVjdCA9IGZhbHNlKSB7XHJcbiAgICBpZiAoIXRoaXMuZGFzaGJvYXJkKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGxldCBmaWxlc09iaiA9IHt9OyAvLyDnlKjmnaXnv7vor5FcclxuICAgIGZvciAodmFyIGkgaW4gdGhpcy5EYXNoYm9hcmRQb3JsZXRzU2VydmljZS5maWVsZHNBcnJbdGhpcy5kYXNoYm9hcmQuaWRdKSB7XHJcbiAgICAgIGlmICh0aGlzLkRhc2hib2FyZFBvcmxldHNTZXJ2aWNlLmZpZWxkc0Fyclt0aGlzLmRhc2hib2FyZC5pZF1baV0pIHtcclxuICAgICAgICB0aGlzLkRhc2hib2FyZFBvcmxldHNTZXJ2aWNlLmZpZWxkc0Fyclt0aGlzLmRhc2hib2FyZC5pZF1baV0uZm9yRWFjaChcclxuICAgICAgICAgICh0KSA9PiB7XHJcbiAgICAgICAgICAgIGZpbGVzT2JqW3QuY29sTmFtZV0gPSB0W1wibGFuZ0NvZGVcIl07XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgdGhpcy5wb3J0bGV0cy5mb3JFYWNoKChlKSA9PiB7XHJcbiAgICAgIGlmICghZS5jb25maWcpIHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgICAgY29uc3QgY29uZmlnID0gSlNPTi5wYXJzZShlLmNvbmZpZyk7XHJcbiAgICAgIC8vIOWmguaenOaYryBoaXN0b3JpY2FsSVJS77yM5qC55o2uIHZpc3VhbFR5cGUg6L+b6KGM5riy5p+TXHJcbiAgICAgIGNvbnN0IHBvcnRsZXRUeXBlID1cclxuICAgICAgICBjb25maWcucG9ydGxldFR5cGUgPT09IFwiaGlzdG9yaWNhbElSUlwiXHJcbiAgICAgICAgICA/IGNvbmZpZy5zZWxlY3RlZFZpc3VhbFR5cGVcclxuICAgICAgICAgIDogY29uZmlnLnBvcnRsZXRUeXBlO1xyXG4gICAgICBsZXQgaXNOZXdDaGFydCA9IFtcIm5ld2NvbHVtblwiLCBcIm5ld2xpbmVcIiwgXCJuZXdjb2x1bW5saW5lXCJdLmluY2x1ZGVzKFxyXG4gICAgICAgIHBvcnRsZXRUeXBlXHJcbiAgICAgICk7XHJcblxyXG4gICAgICBpZiAoaXNOZXdDaGFydCkge1xyXG4gICAgICAgIGxldCBkYXRhQ29sdW1uID0gW107XHJcbiAgICAgICAgbGV0IGRhdGFMaW5lID0gW107XHJcbiAgICAgICAgbGV0IHlYaWFzID0gW107XHJcbiAgICAgICAgbGV0IHNlY29uZFlYaWFzID0gW107XHJcbiAgICAgICAgLy8gY29uc3QgY29uZmlnID0gSlNPTi5wYXJzZShlLmNvbmZpZyk7XHJcbiAgICAgICAgaWYgKGNvbmZpZy5zZWxlY3RlZFkgJiYgY29uZmlnLnNlbGVjdGVkWS5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICB5WGlhcyA9IGNvbmZpZy5zZWxlY3RlZFk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoY29uZmlnLnNlbGVjdGVkU2Vjb25kWSAmJiBjb25maWcuc2VsZWN0ZWRTZWNvbmRZLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgIHNlY29uZFlYaWFzID0gY29uZmlnLnNlbGVjdGVkU2Vjb25kWTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCBkYXRhSXRlbTtcclxuICAgICAgICBpZiAoZS5pZCAmJiBlLmlkICE9IFwiMDAwMDAwMDAtMDAwMC0wMDAwLTAwMDAtMDAwMDAwMDAwMDAwXCIpIHtcclxuICAgICAgICAgIGRhdGFJdGVtID1cclxuICAgICAgICAgICAgdGhpcy5EYXNoYm9hcmRQb3JsZXRzU2VydmljZS5wb3J0bGV0RGF0YV9OZXdbdGhpcy5kYXNoYm9hcmQuaWRdW1xyXG4gICAgICAgICAgICAgIGUuaWRcclxuICAgICAgICAgICAgXSB8fCBbXTtcclxuICAgICAgICB9IGVsc2UgaWYgKGUubmV3SWQpIHtcclxuICAgICAgICAgIGRhdGFJdGVtID1cclxuICAgICAgICAgICAgdGhpcy5EYXNoYm9hcmRQb3JsZXRzU2VydmljZS5wb3J0bGV0RGF0YV9OZXdbdGhpcy5kYXNoYm9hcmQuaWRdW1xyXG4gICAgICAgICAgICAgIGUubmV3SWRcclxuICAgICAgICAgICAgXSB8fCBbXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGRhdGFJdGVtICYmIGRhdGFJdGVtLmRhdGEgJiYgZGF0YUl0ZW0uZGF0YS5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICBjb25zdCB4QXhpc0ZpZWxkID0gY29uZmlnLmZpZWxkcy5maW5kKFxyXG4gICAgICAgICAgICAoZmllbGQpID0+IGZpZWxkLmNvbE5hbWUgPT09IGNvbmZpZy5zZWxlY3RlZFhcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgICBkYXRhSXRlbS5kYXRhLmZvckVhY2goKGl0ZW0pID0+IHtcclxuICAgICAgICAgICAgY29uc3QgcGVyaW9kID1cclxuICAgICAgICAgICAgICB4QXhpc0ZpZWxkICYmIHhBeGlzRmllbGQuZGF0YVR5cGUgPT09IFwiZGF0ZVwiXHJcbiAgICAgICAgICAgICAgICA/IHRoaXMuZGF0ZVBpcGUudHJhbnNmb3JtKGl0ZW1bY29uZmlnLnNlbGVjdGVkWF0sIFwieXl5eS1NTS1kZFwiKVxyXG4gICAgICAgICAgICAgICAgOiBpdGVtW2NvbmZpZy5zZWxlY3RlZFhdO1xyXG4gICAgICAgICAgICBpZiAocG9ydGxldFR5cGUgPT0gXCJuZXdsaW5lXCIpIHtcclxuICAgICAgICAgICAgICBpZiAoeVhpYXMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgbGV0IG9iaiA9IHsgcGVyaW9kIH07XHJcbiAgICAgICAgICAgICAgICB5WGlhcy5mb3JFYWNoKCh5KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgIG9ialt0aGlzLnRyYW5zbGF0aW9uW2ZpbGVzT2JqW3ldXSB8fCB5XSA9IGl0ZW1beV07XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIGRhdGFMaW5lLnB1c2gob2JqKTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgaWYgKHlYaWFzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgIGxldCBvYmogPSB7IHBlcmlvZCB9O1xyXG4gICAgICAgICAgICAgICAgeVhpYXMuZm9yRWFjaCgoeSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICBvYmpbdGhpcy50cmFuc2xhdGlvbltmaWxlc09ialt5XV0gfHwgeV0gPSBpdGVtW3ldO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICBkYXRhQ29sdW1uLnB1c2gob2JqKTtcclxuICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgIGlmIChzZWNvbmRZWGlhcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICBsZXQgb2JqID0geyBwZXJpb2QgfTtcclxuICAgICAgICAgICAgICAgIHNlY29uZFlYaWFzLmZvckVhY2goKHkpID0+IHtcclxuICAgICAgICAgICAgICAgICAgb2JqW3RoaXMudHJhbnNsYXRpb25bZmlsZXNPYmpbeV1dIHx8IHldID0gaXRlbVt5XTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgZGF0YUxpbmUucHVzaChvYmopO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyDml7bpl7TmjpLluo9cclxuICAgICAgICBpZiAoY29uZmlnLnNlbGVjdGVkWCA9PSBcIkRhdGVcIikge1xyXG4gICAgICAgICAgZGF0YUNvbHVtbiAmJiBkYXRhQ29sdW1uLnNvcnQodGhpcy5jb21wYXJlRGF0ZXMpO1xyXG4gICAgICAgICAgZGF0YUxpbmUgJiYgZGF0YUxpbmUuc29ydCh0aGlzLmNvbXBhcmVEYXRlcyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyDotYvlgLxkYXRhQ29sdW1u5ZKMZGF0YUxpbmXlr7nlupTnmoRUeXBlXHJcbiAgICAgICAgY29uZmlnLmZpZWxkcy5mb3JFYWNoKCh0KSA9PiB7XHJcbiAgICAgICAgICBpZiAoY29uZmlnLnNlbGVjdGVkWSAmJiBjb25maWcuc2VsZWN0ZWRZLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgaWYgKHRbXCJjb2xOYW1lXCJdID09IGNvbmZpZy5zZWxlY3RlZFlbMF0pIHtcclxuICAgICAgICAgICAgICBlW1wiY29sdW1uVHlwZVwiXSA9IHRbXCJkYXRhVHlwZVwiXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIGlmIChjb25maWcuc2VsZWN0ZWRTZWNvbmRZICYmIGNvbmZpZy5zZWxlY3RlZFNlY29uZFkubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICBpZiAodFtcImNvbE5hbWVcIl0gPT0gY29uZmlnLnNlbGVjdGVkU2Vjb25kWVswXSkge1xyXG4gICAgICAgICAgICAgIGVbXCJsaW5lVHlwZVwiXSA9IHRbXCJkYXRhVHlwZVwiXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBlW1wiZGF0YUNvbHVtblwiXSA9IGRhdGFDb2x1bW47XHJcbiAgICAgICAgZVtcImRhdGFMaW5lXCJdID0gZGF0YUxpbmU7XHJcbiAgICAgICAgaWYgKGNvbmZpZ1tcInNlbGVjdFRoZW1lXCJdKSB7XHJcbiAgICAgICAgICBlW1widGhlbWVDb2xvclwiXSA9IHRoaXMudGhlbWVPYmpbY29uZmlnW1wic2VsZWN0VGhlbWVcIl1dO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICBpZiAoIW5vRGV0ZWN0KSB7XHJcbiAgICAgIHRoaXMuc2V0QWN0aXZlRGFzaGJvYXJkUG9ydGxldHMoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGNvbXBhcmVEYXRlcyhhLCBiKSB7XHJcbiAgICBjb25zdCBkYXRlQSA9IG5ldyBEYXRlKGEucGVyaW9kKTtcclxuICAgIGNvbnN0IGRhdGVCID0gbmV3IERhdGUoYi5wZXJpb2QpO1xyXG5cclxuICAgIGlmIChkYXRlQSA8IGRhdGVCKSB7XHJcbiAgICAgIHJldHVybiAtMTtcclxuICAgIH0gZWxzZSBpZiAoZGF0ZUEgPiBkYXRlQikge1xyXG4gICAgICByZXR1cm4gMTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiAwO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgdHJ1bmNhdGVUZXh0KHRleHQsIG1heFdpZHRoID0gNzAsIGZvbnRTaXplID0gMTEpIHtcclxuICAgIC8vIOWIm+W7uuS4gOS4qumakOW9oueahCBzcGFuIOadpea1i+mHj+aWh+acrOWuveW6plxyXG4gICAgY29uc3QgbWVhc3VyZVNwYW4gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xyXG4gICAgbWVhc3VyZVNwYW4uc3R5bGUudmlzaWJpbGl0eSA9IFwiaGlkZGVuXCI7XHJcbiAgICBtZWFzdXJlU3Bhbi5zdHlsZS5wb3NpdGlvbiA9IFwiYWJzb2x1dGVcIjtcclxuICAgIG1lYXN1cmVTcGFuLnN0eWxlLmZvbnRTaXplID0gZm9udFNpemUgKyBcInB4XCI7XHJcbiAgICBtZWFzdXJlU3Bhbi5zdHlsZS53aGl0ZVNwYWNlID0gXCJub3dyYXBcIjtcclxuICAgIG1lYXN1cmVTcGFuLmlubmVyVGV4dCA9IHRleHQ7XHJcbiAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKG1lYXN1cmVTcGFuKTtcclxuXHJcbiAgICAvLyDkuozliIbmn6Xmib7mnaXmib7liLDmnIDkvbPmiKrmlq3ngrlcclxuICAgIGxldCBsZWZ0ID0gMTtcclxuICAgIGxldCByaWdodCA9IHRleHQubGVuZ3RoIC0gMTtcclxuICAgIGxldCBsZWZ0T3JSaWdodCA9IFwibGVmdFwiO1xyXG4gICAgbGV0IGlzQmlnZ2VyID0gZmFsc2U7XHJcbiAgICBpZiAobWVhc3VyZVNwYW4ub2Zmc2V0V2lkdGggPiBtYXhXaWR0aCkge1xyXG4gICAgICB3aGlsZSAoIWlzQmlnZ2VyKSB7XHJcbiAgICAgICAgbWVhc3VyZVNwYW4uaW5uZXJUZXh0ID0gYCR7dGV4dC5zbGljZSgwLCBsZWZ0KX0uLi4ke3RleHQuc2xpY2UocmlnaHQpfWA7XHJcbiAgICAgICAgaWYgKG1lYXN1cmVTcGFuLm9mZnNldFdpZHRoID4gbWF4V2lkdGgpIHtcclxuICAgICAgICAgIGlzQmlnZ2VyID0gdHJ1ZTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgaWYgKGxlZnRPclJpZ2h0ID09PSBcImxlZnRcIikge1xyXG4gICAgICAgICAgICBsZWZ0T3JSaWdodCA9IFwicmlnaHRcIjtcclxuICAgICAgICAgICAgbGVmdCA9IGxlZnQgKyAxO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgbGVmdE9yUmlnaHQgPSBcImxlZnRcIjtcclxuICAgICAgICAgICAgcmlnaHQgPSByaWdodCAtIDE7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKG1lYXN1cmVTcGFuKTtcclxuICAgICAgcmV0dXJuIHRleHQ7XHJcbiAgICB9XHJcbiAgICAvLyDmuIXnkIblubbov5Tlm57nu5PmnpxcclxuICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQobWVhc3VyZVNwYW4pO1xyXG4gICAgcmV0dXJuIGAke3RleHQuc2xpY2UoMCwgbGVmdCAtIDEpfSR7bGVmdCAhPT0gMSA/IFwiLi4uXCIgOiBcIlwifSR7dGV4dC5zbGljZShcclxuICAgICAgcmlnaHQgKyAxXHJcbiAgICApfWA7XHJcbiAgfVxyXG5cclxuICBnZXRQYWRkaW5nQm90dG9tKCkge1xyXG4gICAgbGV0IHBhZGRpbmdCb3R0byA9IDUwO1xyXG4gICAgLy8g5a2Y5ZyoVGl0bGUg5oiW6ICFIERlc2NyaXB0aW9u5Y2g5L2N572u5pe2XHJcbiAgICBpZiAoXHJcbiAgICAgIHRoaXMuZGFzaGJvYXJkICYmXHJcbiAgICAgICh0aGlzLmRhc2hib2FyZC50aXRsZSB8fCB0aGlzLmRhc2hib2FyZC5kZXNjcmlwdGlvbilcclxuICAgICkge1xyXG4gICAgICBsZXQgZ2FwID0gMDtcclxuICAgICAgaWYgKHRoaXMuZGFzaGJvYXJkLnRpdGxlKSB7XHJcbiAgICAgICAgZ2FwICs9IDU7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHRoaXMuZGFzaGJvYXJkLmRlc2NyaXB0aW9uKSB7XHJcbiAgICAgICAgZ2FwICs9IDIwO1xyXG4gICAgICB9XHJcbiAgICAgIGNvbnN0IGVsZW1lbnQ6IGFueSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCIucG9ydGxldHMtZGVzY3JpcHRpb25cIik7XHJcbiAgICAgIHBhZGRpbmdCb3R0byA9IGVsZW1lbnQgPyBlbGVtZW50Lm9mZnNldEhlaWdodCArIGdhcCArIDUwIDogNTA7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcGFkZGluZ0JvdHRvICsgXCJweFwiO1xyXG4gIH1cclxuXHJcbiAgdXBkYXRlRGFzaGJvYXJkTGFzdFVwZGF0ZURhdGUoKSB7XHJcbiAgICB0aGlzLnBiZi5wYWdlTG9hZGluZyA9IHRydWU7XHJcbiAgICB0aGlzLnBiZi5wYWdlTG9hZGluZ18ubmV4dCh0cnVlKTtcclxuICAgIGNvbnN0IF9kYXRhT2JqID0geyBkYXNoYm9hcmRJZDogdGhpcy51cmxfaWQsIGxhbmd1YWdlOiB0aGlzLmxhbmcgfTtcclxuICAgIHRoaXMuaHR0cC5wb3N0KHRoaXMuYXBpLnVybExpc3QuR2V0RGFzaGJvYXJkVjIsIF9kYXRhT2JqLCAocmVzKSA9PiB7XHJcbiAgICAgIHJlcyA9IHRoaXMucGJmLmNvbnZlcnRLZXlzVG9Mb3dlckNhc2UocmVzKTtcclxuICAgICAgdGhpcy5kYXNoYm9hcmQuVXBkYXRlZERhdGUgPSByZXMuVXBkYXRlZERhdGU7XHJcbiAgICAgIHRoaXMucGJmLnBhZ2VMb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgIHRoaXMucGJmLnBhZ2VMb2FkaW5nXy5uZXh0KHRydWUpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBzYXZlZGFzaGJvYXJkKHNob3VsZFVwZGF0ZSA9IFwiZmFsc2VcIikge1xyXG4gICAgdGhpcy5wYmYucGFnZUxvYWRpbmcgPSB0cnVlO1xyXG4gICAgdGhpcy5wYmYucGFnZUxvYWRpbmdfLm5leHQodHJ1ZSk7XHJcbiAgICBjb25zdCBwZGF0YSA9IHRoaXMuZGFzaGJvYXJkTGF5b3V0LnNlcmlhbGl6ZSgpO1xyXG4gICAgdGhpcy5uZXdQb3NpdGlvbiA9IFsuLi5wZGF0YV07XHJcbiAgICBjb25zdCBwb3J0bGV0cyA9IFsuLi50aGlzLnBvcnRsZXRzXTtcclxuXHJcbiAgICBpZiAocG9ydGxldHMgJiYgcG9ydGxldHMubGVuZ3RoKSB7XHJcbiAgICAgIGxldCBhY3RpdmVUYWJIYXNQb3J0bGV0ID0gZmFsc2U7XHJcbiAgICAgIGNvbnN0IHRhYklkcyA9IFtdO1xyXG4gICAgICBwb3J0bGV0cy5tYXAoKGVsKSA9PiB7XHJcbiAgICAgICAgY29uc3QgZGF0YSA9IGZpbmQodGhpcy5uZXdQb3NpdGlvbiwgKGl0ZW0pID0+IGl0ZW0uaWQgPT09IGVsLm5ld0lkKTtcclxuICAgICAgICBpZiAoZGF0YSkge1xyXG4gICAgICAgICAgZWwuY29sID0gZGF0YS5jb2w7XHJcbiAgICAgICAgICBlbC5wb3NYID0gZGF0YS5jb2w7XHJcbiAgICAgICAgICBlbC5yb3cgPSBkYXRhLnJvdztcclxuICAgICAgICAgIGVsLnBvc1kgPSBkYXRhLnJvdztcclxuICAgICAgICAgIGVsLnNpemVYID0gZGF0YS5zaXplWDtcclxuICAgICAgICAgIGVsLndpZHRoID0gZGF0YS5zaXplWDtcclxuICAgICAgICAgIGVsLnNpemVZID0gZGF0YS5zaXplWTtcclxuICAgICAgICAgIGVsLmhlaWdodCA9IGRhdGEuc2l6ZVk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGxldCBjb25maWcgPSBlbC5jb25maWcgPyBKU09OLnBhcnNlKGVsLmNvbmZpZykgOiBudWxsO1xyXG4gICAgICAgIGlmIChjb25maWcpIHtcclxuICAgICAgICAgIGNvbmZpZyA9IHtcclxuICAgICAgICAgICAgLi4uY29uZmlnLFxyXG4gICAgICAgICAgICBwcmV2RGFzaGJvYXJJZDogZWwuaWQsXHJcbiAgICAgICAgICAgIGFjdGl2ZVRhYjogdGhpcy5hY3RpdmVUYWIsXHJcbiAgICAgICAgICB9O1xyXG4gICAgICAgICAgdGFiSWRzLnB1c2goY29uZmlnLnRhYklkKTtcclxuICAgICAgICAgIGlmIChjb25maWcudGFiSWQgPT09IHRoaXMuYWN0aXZlVGFiKSB7XHJcbiAgICAgICAgICAgIGFjdGl2ZVRhYkhhc1BvcnRsZXQgPSB0cnVlO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgZWwuY29uZmlnID0gQ2lyY3VsYXJKU09OLnN0cmluZ2lmeShjb25maWcpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICAgIGlmICghYWN0aXZlVGFiSGFzUG9ydGxldCkge1xyXG4gICAgICAgIHBvcnRsZXRzLmZvckVhY2goKGVsKSA9PiB7XHJcbiAgICAgICAgICBsZXQgY29uZmlnID0gZWwuY29uZmlnID8gSlNPTi5wYXJzZShlbC5jb25maWcpIDogbnVsbDtcclxuICAgICAgICAgIGlmIChjb25maWcpIHtcclxuICAgICAgICAgICAgY29uZmlnID0ge1xyXG4gICAgICAgICAgICAgIC4uLmNvbmZpZyxcclxuICAgICAgICAgICAgICBwcmV2RGFzaGJvYXJJZDogZWwuaWQsXHJcbiAgICAgICAgICAgICAgYWN0aXZlVGFiOiB0YWJJZHNbMF0sXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBlbC5jb25maWcgPSBDaXJjdWxhckpTT04uc3RyaW5naWZ5KGNvbmZpZyk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGxldCBkYXRhT2JqID0ge1xyXG4gICAgICBwb3J0bGV0cyxcclxuICAgICAgZGFzaGJvYXJkSWQ6IHRoaXMudXJsX2lkLFxyXG4gICAgICBsYXN0VXBkYXRlRGF0ZTogdGhpcy5kYXNoYm9hcmQuVXBkYXRlZERhdGUsXHJcbiAgICB9O1xyXG4gICAgdGhpcy5odHRwLnBvc3QodGhpcy5hcGkudXJsTGlzdC5TYXZlRGFzaGJvYXJkUG9ydGxldHMsIGRhdGFPYmosIChyZXMpID0+IHtcclxuICAgICAgaWYgKHJlcy5zdGF0dXMgPT0gXCJTVUNDRVNTXCIpIHtcclxuICAgICAgICB0aGlzLkRhc2hib2FyZFBvcmxldHNTZXJ2aWNlLkdldERhc2hib2FyZFYxKFxyXG4gICAgICAgICAgdGhpcy51cmxfaWQsXHJcbiAgICAgICAgICBmYWxzZSxcclxuICAgICAgICAgIChfcmVzLCBfcG9ydGxldHMgPSBbXSkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnBiZi5wYWdlTG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICB0aGlzLnBiZi5wYWdlTG9hZGluZ18ubmV4dCh0cnVlKTtcclxuICAgICAgICAgICAgaWYgKCFfcmVzKSB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNvbnN0IF9zYXZlTWVzc2FnZSA9XHJcbiAgICAgICAgICAgICAgdGhpcy50cmFuc2xhdGlvbi5EQVNIQk9BUkRfU0FWRV9NRVNTQUdFIHx8XHJcbiAgICAgICAgICAgICAgXCJEYXNoYm9hcmQgaGFzIGJlZW4gdXBkYXRlZFwiO1xyXG4gICAgICAgICAgICB0aGlzLmRpYWxvZ1NlcnZpY2Uuc2hvd1N1Y01zZyhfc2F2ZU1lc3NhZ2UpO1xyXG4gICAgICAgICAgICBpZiAoc2hvdWxkVXBkYXRlICE9PSBcInRydWVcIikge1xyXG4gICAgICAgICAgICAgIHRoaXMudG9nZ2xlQ3VzdG9taXplKGZhbHNlKTtcclxuICAgICAgICAgICAgICB0aGlzLnRvZ2dsZVNpZGViYXIoZmFsc2UpO1xyXG4gICAgICAgICAgICAgIHRoaXMudXBkYXRlUHVzaEJ0bihmYWxzZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy51cGRhdGVEYXNoYm9hcmQoe1xyXG4gICAgICAgICAgICAgIGRhc2hib2FyZDogX3JlcyxcclxuICAgICAgICAgICAgICBwb3J0bGV0czogX3BvcnRsZXRzLFxyXG4gICAgICAgICAgICAgIG5vRGV0ZWN0OiB0cnVlLFxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgdGhpcy5pbml0bGF5b3V0KHRydWUpO1xyXG4gICAgICAgICAgICB0aGlzLnJlZi5tYXJrRm9yQ2hlY2soKTtcclxuICAgICAgICAgICAgdGhpcy5yZWYuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgbGV0IGVycm9yTWVzc2FnZSA9IFwiRGFzaGJvYXJkIHNhdmUgZmFpbGVkXCI7XHJcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkocmVzLm1lc3NhZ2VzKSkge1xyXG4gICAgICAgICAgZXJyb3JNZXNzYWdlID0gcmVzLm1lc3NhZ2VzWzBdLm1lc3NhZ2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuZGlhbG9nU2VydmljZS5zaG93Tm90aWZpY2F0aW9uKGVycm9yTWVzc2FnZSwge1xyXG4gICAgICAgICAgc3RhdHVzOiBcIkVycm9yXCIsXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdGhpcy5wYmYucGFnZUxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLnBiZi5wYWdlTG9hZGluZ18ubmV4dCh0cnVlKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG59XHJcbiJdfQ==
|