@libs-ui/components-datetime-picker 0.2.124 → 0.2.126
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.
|
@@ -1243,7 +1243,7 @@ export class LibsUiComponentsDatetimePickerCustomRangesCalendarComponent {
|
|
|
1243
1243
|
return;
|
|
1244
1244
|
}
|
|
1245
1245
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: LibsUiComponentsDatetimePickerCustomRangesCalendarComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
1246
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: LibsUiComponentsDatetimePickerCustomRangesCalendarComponent, isStandalone: true, selector: "libs_ui-components-datetime-picker-custom_ranges-calendar", inputs: { quickRangesArray: { classPropertyName: "quickRangesArray", publicName: "quickRangesArray", isSignal: true, isRequired: false, transformFunction: null }, zIndex: { classPropertyName: "zIndex", publicName: "zIndex", isSignal: true, isRequired: false, transformFunction: null }, classInclude: { classPropertyName: "classInclude", publicName: "classInclude", isSignal: true, isRequired: false, transformFunction: null }, isSingle: { classPropertyName: "isSingle", publicName: "isSingle", isSignal: true, isRequired: false, transformFunction: null }, showDropdownsSelect: { classPropertyName: "showDropdownsSelect", publicName: "showDropdownsSelect", isSignal: true, isRequired: false, transformFunction: null }, hasTimePicker: { classPropertyName: "hasTimePicker", publicName: "hasTimePicker", isSignal: true, isRequired: false, transformFunction: null }, flagMouse: { classPropertyName: "flagMouse", publicName: "flagMouse", isSignal: true, isRequired: false, transformFunction: null }, dateOptions: { classPropertyName: "dateOptions", publicName: "dateOptions", isSignal: true, isRequired: false, transformFunction: null }, autoApply: { classPropertyName: "autoApply", publicName: "autoApply", isSignal: true, isRequired: false, transformFunction: null }, hasSecondPicker: { classPropertyName: "hasSecondPicker", publicName: "hasSecondPicker", isSignal: true, isRequired: false, transformFunction: null }, showRangeLabelOnInput: { classPropertyName: "showRangeLabelOnInput", publicName: "showRangeLabelOnInput", isSignal: true, isRequired: false, transformFunction: null }, startDate: { classPropertyName: "startDate", publicName: "startDate", isSignal: true, isRequired: false, transformFunction: null }, endDate: { classPropertyName: "endDate", publicName: "endDate", isSignal: true, isRequired: false, transformFunction: null }, minDate: { classPropertyName: "minDate", publicName: "minDate", isSignal: true, isRequired: false, transformFunction: null }, maxDate: { classPropertyName: "maxDate", publicName: "maxDate", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { startDate: "startDateChange", endDate: "endDateChange", outChangStageFlagMouse: "outChangStageFlagMouse", outPickerDate: "outPickerDate", outCancel: "outCancel", outUpdateWidth: "outUpdateWidth", outFunctionsControl: "outFunctionsControl" }, viewQueries: [{ propertyName: "pickerContainer", first: true, predicate: ["pickerContainer"], descendants: true, isSignal: true }], ngImport: i0, template: "<div class=\"libs-ui-component-custom_ranges-calendar test-class\">\n <div class=\"relative flex\">\n <div class=\"libs-ui-component-custom_ranges-calendar\"\n [class.right]=\"isSingle()\"\n [class.left]=\"!isSingle()\">\n <div class=\"rounded-[4px] bg-[#ffffff]\">\n @if (calendarVariables(); as calendarVariables) {\n <table>\n <thead>\n <tr>\n <th colspan=\"7\"\n class=\"month\">\n @if (showDropdownsSelect() && calendarVariables.left().dropdowns?.()) {\n <div class=\"!flex mb-[10px] w-full\">\n <div class=\"w-3/4 flex items-center\">\n <div class='mr-[8px]'>\n <libs_ui-components-dropdown [isNgContent]=\"true\"\n [zIndex]=\"zIndex() + 1\"\n [popoverCustomConfig]=\"{widthByParent:false,ignoreArrow:true,paddingLeftItem: true, classInclude: '!w-[130px]',position:{ mode:'center',distance:0}}\"\n [listMaxItemShow]=\"10\"\n [listClickExactly]=\"false\"\n [listKeysDisable]=\"disableMonth().left()\"\n [listHasButtonUnSelectOption]=\"false\"\n [convertItemSelected]=\"convertItemMonth\"\n [listConfig]=\"listMonthsConfig()\"\n [listKeySelected]=\"listKeyFromSelected().month\"\n [flagMouse]=\"flagMouse()\"\n [listHiddenInputSearch]=\"true\"\n [httpRequestDetailItemById]=\"monthHttpDetailConfig()\"\n (outSelectKey)=\"handlerSelectedDropdown($event, sideEnum.left + 'month')\"\n (outFunctionsControl)=\"handlerFunctionControl($event, sideEnum.left + 'month')\"\n (outChangStageFlagMouse)=\"handlerChangeFlagMouse($event)\"\n (outShowList)=\"handlerShowListDropdown($event, sideEnum.left + 'month')\">\n <div class=\"libs-ui-component-custom_ranges-calendar-dropdown\"\n [class.text-[var(--libs-ui-color-dark)]]=\"checkShowListDropdown()[sideEnum.left + 'month']\"\n [class.text-[#6a7383]]=\"!checkShowListDropdown()[sideEnum.left + 'month']\">\n <div class=\"libs-ui-font-h4m\"\n [style.fontWeight]=\"500\"\n [style.fontStyle]=\"'normal'\">\n {{ dateOptions().monthNames && calendarVariables.left().calendar && dateOptions().monthNames[calendarVariables.left().calendar?.[1]?.[1]?.month() ?? -1] }}\n </div>\n <i class=\"libs-ui-icon-chevron-right text-[13px] text-[#6a7383]\"\n [class.text-[var(--libs-ui-color-dark)]]=\"checkShowListDropdown()[sideEnum.left + 'month']\"\n [style.fontWeight]=\"500\"\n [style.rotate]=\"!checkShowListDropdown()[sideEnum.left + 'month'] ? '90deg':'270deg'\"></i>\n </div>\n </libs_ui-components-dropdown>\n </div>\n <div>\n <libs_ui-components-dropdown [listMaxItemShow]=\"10\"\n [isNgContent]=\"true\"\n [zIndex]=\"zIndex() + 1\"\n [popoverCustomConfig]=\"{widthByParent:false,ignoreArrow:true,paddingLeftItem: true,classInclude: '!w-[110px]',position:{mode:'center',distance:0}}\"\n [listClickExactly]=\"false\"\n [listHasButtonUnSelectOption]=\"false\"\n [convertItemSelected]=\"convertItemYear\"\n [listHiddenInputSearch]=\"true\"\n [listConfig]=\"listLeftYearConfig()\"\n [listKeySelected]=\"listKeyFromSelected().year\"\n [flagMouse]=\"flagMouse()\"\n [httpRequestDetailItemById]=\"leftYearHttpDetailConfig()\"\n (outChangStageFlagMouse)=\"handlerChangeFlagMouse($event)\"\n (outShowList)=\"handlerShowListDropdown($event, sideEnum.left + 'year')\"\n (outSelectKey)=\"handlerSelectedDropdown($event, sideEnum.left + 'year')\"\n (outFunctionsControl)=\"handlerFunctionControl($event, sideEnum.left + 'year')\">\n <div class=\"libs-ui-component-custom_ranges-calendar-dropdown\"\n [class.text-[var(--libs-ui-color-dark)]]=\"checkShowListDropdown()[sideEnum.left + 'year']\"\n [class.text-[#6a7383]]=\"!checkShowListDropdown()[sideEnum.left + 'year']\">\n <div class=\"libs-ui-font-h4m\"\n [style.fontWeight]=\"500\"\n [style.fontStyle]=\"'normal'\">{{ calendarVariables.left().calendar && calendarVariables.left().calendar?.[1]?.[1]?.format(\" YYYY\") }}</div>\n <i class=\"libs-ui-icon-chevron-right text-[13px] text-[#6a7383]\"\n [class.text-[var(--libs-ui-color-dark)]]=\"checkShowListDropdown()[sideEnum.left + 'year']\"\n [style.fontWeight]=\"500\"\n [style.rotate]=\"!checkShowListDropdown()[sideEnum.left + 'year'] ? '90deg':'270deg'\"></i>\n </div>\n </libs_ui-components-dropdown>\n </div>\n </div>\n\n <div class=\"w-1/4 flex items-center relative\">\n @if (!calendarVariables.left().minDate || (calendarVariables.left().minDate?.isBefore(calendarVariables.left().calendar && calendarVariables.left().calendar?.firstDay))) {\n <div (click)=\"handlerClickPrev(sideEnum.left)\">\n <div class=\"flex items-center justify-center absolute left-0 top-[-3px]\">\n <i class=\"libs-ui-icon-chevron-right rotate-[180deg] text-[#6a7383] cursor-pointer libs-ui-component-custom_ranges-calendar-icon\"></i>\n </div>\n </div>\n }\n @if ((!calendarVariables.left().maxDate || calendarVariables.left().maxDate?.isAfter(calendarVariables.left().calendar && calendarVariables.left().calendar?.lastDay)) && isSingle()) {\n <div (click)=\"handlerClickNext(sideEnum.left)\">\n <div class=\"flex items-center justify-center ml-[12px] absolute right-0 top-[-3px]\">\n <i class=\"libs-ui-icon-chevron-right text-[#6a7383] cursor-pointer libs-ui-component-custom_ranges-calendar-icon\"></i>\n </div>\n </div>\n }\n </div>\n </div>\n }\n @if (!showDropdownsSelect() || !calendarVariables.left().dropdowns) {\n {{ dateOptions().monthNames && calendarVariables.left().calendar && dateOptions().monthNames[calendarVariables.left().calendar?.[1]?.[1]?.month() ?? -1] }}\n {{ calendarVariables.left().calendar && calendarVariables.left().calendar?.[1]?.[1]?.format(\" YYYY\") }}\n }\n </th>\n </tr>\n <tr class=\"week-days\">\n @for (dayofweek of dateOptions().daysOfWeek; track dayofweek) {\n <th>\n <span class=\"libs-ui-font-h6m text-[#6a7383]\"\n [style.fontWeight]=\"500\"\n [style.fontStyle]=\"'normal'\">{{ dayofweek }}</span>\n </th>\n }\n </tr>\n </thead>\n <tbody class=\"drp-animate\">\n @for (row of calendarVariables.left().calRows?.(); track row) {\n <tr class=\"h-[32px]\"\n [class]=\"calendarVariables.left().classes && calendarVariables.left().classes?.[row]?.classList\">\n @for (col of calendarVariables.left().calCols?.(); track col) {\n <td class=\"libs-ui-font-h5r\"\n [class.today]=\"calendarVariables.left().calendar && calendarVariables.left().calendar?.[row]?.[col]?.date() === today().date() && calendarVariables.left().calendar?.[row]?.[col]?.month() === today().month() && calendarVariables.left().calendar?.[row]?.[col]?.year() === today().year()\"\n [class]=\"calendarVariables.left().classes && calendarVariables.left().classes?.[row]?.[col]\"\n (click)=\"handlerPickerDate($event, sideEnum.left, row, col)\"\n (mouseenter)=\"handlerHoverDate($event, sideEnum.left, row, col)\">\n <span class=\"libs-ui-font-h5r\">{{ calendarVariables.left().calendar && calendarVariables.left().calendar?.[row]?.[col]?.date() }}</span>\n </td>\n }\n </tr>\n }\n </tbody>\n </table>\n }\n </div>\n @if (hasTimePicker()) {\n <div>\n <div class=\"flex justify-center column items-center pt-[12px]\">\n <div class=\"w-full flex justify-center items-center rounded-[4px] border\"\n [class.border-[#e6e8ed]]=\"!timePickerError()\"\n [class.border-[#ff5454]]=\"timePickerError()\">\n <libs_ui-components-inputs-input classInclude=\"!w-[30px] !p-0 !border-none !text-center libs-ui-font-h4s !text-[#071631]\"\n dataType=\"int\"\n [focusTimeOut]=\"0\"\n [blurTimeOut]=\"0\"\n [autoAddZeroLessThan10InTypeInt]=\"true\"\n [emitEmptyInDataTypeNumber]=\"true\"\n [maxValueNumber]=\"23\"\n [minValueNumber]=\"0\"\n [maxLength]=\"2\"\n [value]=\"timepickerValueItem().lefthour()\"\n (outInputEvent)=\"handlerInputEvent($event, 'lefthour')\"\n (outFunctionsControl)=\"handlerFunctionControl($event, sideEnum.left + 'hour')\"\n (outChange)=\"handlerChangeTimeValue($event, 'lefthour')\"\n (outFocusAndBlurEvent)=\"handlerFocusAndBlurTime($event, 'lefthour')\" />\n <span class=\"libs-ui-font-h3s text-[#333333]\">:</span>\n <libs_ui-components-inputs-input classInclude=\"!w-[30px] !p-0 !border-none !text-center !libs-ui-font-h4s !text-[#071631]\"\n [autoAddZeroLessThan10InTypeInt]=\"true\"\n [emitEmptyInDataTypeNumber]=\"true\"\n dataType=\"int\"\n [focusTimeOut]=\"0\"\n [blurTimeOut]=\"0\"\n [maxValueNumber]=\"59\"\n [minValueNumber]=\"0\"\n [maxLength]=\"2\"\n [value]=\"timepickerValueItem().leftminute()\"\n (outFunctionsControl)=\"handlerFunctionControl($event, sideEnum.left + 'minute')\"\n (outInputEvent)=\"handlerInputEvent($event, 'leftminute')\"\n (outChange)=\"handlerChangeTimeValue($event, 'leftminute')\"\n (outFocusAndBlurEvent)=\"handlerFocusAndBlurTime($event, 'leftminute')\" />\n </div>\n </div>\n </div>\n }\n </div>\n\n @if (!isSingle()) {\n <div class=\"libs-ui-component-custom_ranges-calendar right ml-[24px]\">\n <div class=\"rounded-[4px] bg-[#ffffff]\">\n @if (calendarVariables()) {\n <table>\n <thead>\n <tr>\n <th colspan=\"7\"\n class=\"month\">\n @if (showDropdownsSelect() && calendarVariables().left().dropdowns?.()) {\n <div class=\"!flex mb-[10px] w-full\">\n <div class=\"w-3/4 flex items-center\">\n <div class='mr-[8px]'>\n <libs_ui-components-dropdown [isNgContent]=\"true\"\n [zIndex]=\"zIndex() + 1\"\n [popoverCustomConfig]=\"{widthByParent:false,ignoreArrow:true,paddingLeftItem: true,classInclude: '!w-[130px]',position:{mode:'center',distance:0}}\"\n [listMaxItemShow]=\"10\"\n [listClickExactly]=\"false\"\n [listKeysDisable]=\"disableMonth().right()\"\n [listHasButtonUnSelectOption]=\"false\"\n [convertItemSelected]=\"convertItemMonth\"\n [listHiddenInputSearch]=\"true\"\n [listConfig]=\"listMonthsConfig()\"\n [listKeySelected]=\"listKeyToSelected().month\"\n [flagMouse]=\"flagMouse()\"\n [httpRequestDetailItemById]=\"monthHttpDetailConfig()\"\n (outFunctionsControl)=\"handlerFunctionControl($event, sideEnum.right + 'month')\"\n (outSelectKey)=\"handlerSelectedDropdown($event, sideEnum.right + 'month')\"\n (outChangStageFlagMouse)=\"handlerChangeFlagMouse($event)\"\n (outShowList)=\"handlerShowListDropdown($event, sideEnum.right + 'month')\">\n <div class=\"libs-ui-component-custom_ranges-calendar-dropdown\"\n [class.text-[var(--libs-ui-color-dark)]]=\"checkShowListDropdown()[sideEnum.right + 'month']\"\n [class.text-[#6a7383]]=\"!checkShowListDropdown()[sideEnum.right + 'month']\">\n <div class=\"libs-ui-font-h4m\"\n [class.text-[var(--libs-ui-color-dark)]]=\"checkShowListDropdown()[sideEnum.right + 'month']\"\n [style.fontWeight]=\"500\"\n [style.fontStyle]=\"'normal'\">\n {{ dateOptions().monthNames && calendarVariables().right().calendar && dateOptions().monthNames[ calendarVariables().right().calendar?.[1]?.[1]?.month() ?? -1] }}\n </div>\n <i class=\"libs-ui-icon-chevron-right text-[13px] text-[#6a7383]\"\n [style.fontWeight]=\"500\"\n [style.rotate]=\"!checkShowListDropdown()[sideEnum.right + 'month'] ? '90deg':'270deg'\"></i>\n </div>\n </libs_ui-components-dropdown>\n </div>\n <div>\n <libs_ui-components-dropdown [listMaxItemShow]=\"10\"\n [zIndex]=\"zIndex() + 1\"\n [isNgContent]=\"true\"\n [popoverCustomConfig]=\"{widthByParent:false,ignoreArrow:true,paddingLeftItem: true, classInclude: '!w-[110px]', position:{mode:'center', distance:0}}\"\n [listClickExactly]=\"false\"\n [listHasButtonUnSelectOption]=\"false\"\n [convertItemSelected]=\"convertItemYear\"\n [listHiddenInputSearch]=\"true\"\n [listConfig]=\"listRightYearConfig()\"\n [listKeySelected]=\"listKeyToSelected().year\"\n [flagMouse]=\"flagMouse()\"\n [httpRequestDetailItemById]=\"rightYearHttpDetailConfig()\"\n (outSelectKey)=\"handlerSelectedDropdown($event, sideEnum.right + 'year')\"\n (outFunctionsControl)=\"handlerFunctionControl($event, sideEnum.right + 'year')\"\n (outChangStageFlagMouse)=\"handlerChangeFlagMouse($event)\"\n (outShowList)=\"handlerShowListDropdown($event, sideEnum.right + 'year')\">\n <div class=\"libs-ui-component-custom_ranges-calendar-dropdown\"\n [class.text-[var(--libs-ui-color-dark)]]=\"checkShowListDropdown()[sideEnum.right + 'year']\"\n [class.text-[#6a7383]]=\"!checkShowListDropdown()[sideEnum.right + 'year']\">\n <div class=\"libs-ui-font-h4m\"\n [style.fontWeight]=\"500\"\n [style.fontStyle]=\"'normal'\">\n {{ calendarVariables().right().calendar && calendarVariables().right().calendar?.[1]?.[1]?.format(\"YYYY\") }}\n </div>\n <i class=\"libs-ui-icon-chevron-right text-[13px] text-[#6a7383]\"\n [class.text-[var(--libs-ui-color-dark)]]=\"checkShowListDropdown()[sideEnum.right + 'year']\"\n [style.fontWeight]=\"500\"\n [style.rotate]=\"!checkShowListDropdown()[sideEnum.right + 'year'] ? '90deg':'270deg'\"></i>\n </div>\n </libs_ui-components-dropdown>\n </div>\n </div>\n <div class=\"w-1/4 flex items-center relative\">\n @if (listKeyFromSelected().year && listKeyToSelected().year && !(((listKeyFromSelected().year +1) === listKeyToSelected().year) && (listKeyFromSelected().month === 12) && listKeyToSelected().month === 1)&& (listKeyFromSelected().year < listKeyToSelected().year) || listKeyFromSelected().month && listKeyToSelected().month && ((listKeyFromSelected().month + 1) < +listKeyToSelected().month)) {\n <div class=\"flex items-center justify-center absolute left-0 top-[-3px]\"\n (click)=\"handlerClickPrev(sideEnum.right)\">\n <i class=\"libs-ui-icon-chevron-right rotate-[180deg] text-[#6a7383] cursor-pointer libs-ui-component-custom_ranges-calendar-icon\"></i>\n </div>\n }\n @if (listKeyFromSelected().month && listKeyToSelected().month && (listKeyFromSelected().month > listKeyToSelected().month) && listKeyFromSelected().year && listKeyToSelected().year && (listKeyFromSelected().year === listKeyToSelected().year )) {\n <div class=\"bg-[#ffffff] w-[21px] h-[21px] cursor-none flex items-center justify-center rounded-[50px]\">\n </div>\n }\n @if (!calendarVariables().right().maxDate || (calendarVariables().right().maxDate?.isAfter(calendarVariables().right().calendar && calendarVariables().right().calendar?.lastDay))) {\n <div (click)=\"handlerClickNext(sideEnum.right)\">\n <div class=\"flex items-center justify-center ml-[12px] absolute right-0 top-[-3px]\">\n <i class=\"libs-ui-icon-chevron-right text-[#6a7383] cursor-pointer libs-ui-component-custom_ranges-calendar-icon\"></i>\n </div>\n </div>\n }\n </div>\n </div>\n }\n @if (!showDropdownsSelect() || !calendarVariables().right().dropdowns) {\n {{ dateOptions().monthNames && calendarVariables().right().calendar && dateOptions().monthNames[calendarVariables().right().calendar?.[1]?.[1]?.month() ?? -1] }}\n {{ calendarVariables().right().calendar && calendarVariables().right().calendar?.[1]?.[1]?.format(\"YYYY\") }}\n }\n </th>\n </tr>\n <tr class=\"week-days\">\n @for (dayofweek of dateOptions().daysOfWeek; track dayofweek) {\n <th>\n <span class=\"libs-ui-font-h6m text-[#6a7383]\"\n [style.fontWeight]=\"500\"\n [style.fontStyle]=\"'normal'\">{{ dayofweek }}</span>\n </th>\n }\n </tr>\n </thead>\n <tbody>\n @for (row of calendarVariables().right().calRows?.(); track row) {\n <tr class=\"h-[32px]\"\n [class]=\"calendarVariables().right().classes && calendarVariables().right().classes?.[row]?.classList\">\n @for (col of calendarVariables().right().calCols?.(); track col) {\n <td class=\"libs-ui-font-h5r\"\n [class]=\"calendarVariables().right().classes && calendarVariables().right().classes?.[row]?.[col]\"\n [class.today]=\"calendarVariables().right().calendar && calendarVariables().right().calendar?.[row]?.[col]?.date() === today().date() && calendarVariables().right().calendar?.[row]?.[col]?.month() === today().month() && calendarVariables().right().calendar &&calendarVariables().right().calendar?.[row]?.[col]?.year() === today().year()\"\n (click)=\"handlerPickerDate($event, sideEnum.right, row, col)\"\n (mouseenter)=\"handlerHoverDate($event, sideEnum.right, row, col)\">\n <span>{{ calendarVariables().right().calendar?.[row]?.[col]?.date() }}</span>\n </td>\n }\n </tr>\n }\n </tbody>\n </table>\n }\n </div>\n @if (hasTimePicker()) {\n <div>\n <div class=\"flex justify-center items-center pt-[12px]\">\n <div class=\"w-full flex justify-center items-center rounded-[4px] border\"\n [class.border-[#e6e8ed]]=\"!timePickerError()\"\n [class.border-[#ff5454]]=\"timePickerError()\">\n <libs_ui-components-inputs-input classInclude=\"!w-[30px] !p-0 !border-none !text-center !libs-ui-font-h4s !text-[#071631]\"\n dataType=\"int\"\n [autoAddZeroLessThan10InTypeInt]=\"true\"\n [emitEmptyInDataTypeNumber]=\"true\"\n [maxValueNumber]=\"23\"\n [minValueNumber]=\"0\"\n [focusTimeOut]=\"0\"\n [blurTimeOut]=\"0\"\n [maxLength]=\"2\"\n [value]=\"timepickerValueItem().righthour()\"\n (outChange)=\"handlerChangeTimeValue($event, 'righthour')\"\n (outInputEvent)=\"handlerInputEvent($event,'righthour')\"\n (outFunctionsControl)=\"handlerFunctionControl($event, 'righthour')\"\n (outFocusAndBlurEvent)=\"handlerFocusAndBlurTime($event, 'righthour')\" />\n <span class=\"libs-ui-font-h3s text-[#333333]\">:</span>\n <libs_ui-components-inputs-input classInclude=\"!w-[30px] !p-0 !border-none !text-center libs-ui-font-h4s !text-[#071631]\"\n dataType=\"int\"\n [autoAddZeroLessThan10InTypeInt]=\"true\"\n [emitEmptyInDataTypeNumber]=\"true\"\n [maxValueNumber]=\"59\"\n [minValueNumber]=\"0\"\n [focusTimeOut]=\"0\"\n [blurTimeOut]=\"0\"\n [maxLength]=\"2\"\n [value]=\"timepickerValueItem().rightminute()\"\n (outInputEvent)=\"handlerInputEvent($event,'rightminute')\"\n (outFunctionsControl)=\"handlerFunctionControl($event, 'rightminute')\"\n (outChange)=\"handlerChangeTimeValue($event, 'rightminute')\"\n (outFocusAndBlurEvent)=\"handlerFocusAndBlurTime($event, 'rightminute')\" />\n </div>\n </div>\n </div>\n }\n </div>\n }\n\n </div>\n <div>\n <div class=\"flex w-full\">\n @if (!isSingle() && hasTimePicker()) {\n <div class=\"mt-[8px] libs-ui-font-h7r text-[#ff5454] h-[14px]\">\n @if (timePickerError()) {\n <span>{{ 'i18n_date_compare_start_end_message_error' | translate }}</span>\n }\n </div>\n }\n </div>\n @if (!quickRangesArray().length || !isSingle()) {\n <div class=\" flex w-full pt-[16px] justify-between\">\n <div class=\"flex items-center\">\n @if (!isSingle()) {\n @if (!endDate()) {\n <div class=\"text-[#cdd0d6] libs-ui-font-h6r\">\n <span>{{ startDate()?.format('DD/MM/YYYY') }}</span>\n @if (hasTimePicker()) {\n <span> {{ computedDisplayTimeLeft() }}</span>\n }\n ‐\n <span>{{ startDate()?.format('DD/MM/YYYY') }}</span>\n @if (hasTimePicker()) {\n <span> {{ computedDisplayTimeRight() }}</span>\n }\n </div>\n }\n @if (endDate()) {\n <div class=\"text-[#cdd0d6] libs-ui-font-h6r\">\n <span>{{ startDate()?.format('DD/MM/YYYY') }}</span>\n @if (hasTimePicker()) {\n <span> {{ computedDisplayTimeLeft() }}</span>\n }\n ‐\n <span>{{ endDate()?.format('DD/MM/YYYY') }}</span>\n @if (hasTimePicker()) {\n <span> {{ computedDisplayTimeRight() }}</span>\n }\n </div>\n }\n }\n </div>\n\n <div class=\"flex\">\n <libs_ui-components-buttons-button class=\"mr-[12px]\"\n label=\"i18n_cancel\"\n type=\"button-third\"\n (outClick)=\"handlerClickCancel($event)\" />\n <libs_ui-components-buttons-button label=\"i18n_select\"\n (outClick)=\"handlerClickApply($event)\" />\n </div>\n </div>\n }\n </div>\n</div>\n", styles: [".libs-ui-component-custom_ranges-calendar .libs-ui-component-custom_ranges-calendar-dropdown{display:flex;align-items:center}.libs-ui-component-custom_ranges-calendar .libs-ui-component-custom_ranges-calendar-dropdown:hover{color:var(--libs-ui-color-light-1)}.libs-ui-component-custom_ranges-calendar .libs-ui-component-custom_ranges-calendar-dropdown:hover i:before,.libs-ui-component-custom_ranges-calendar .libs-ui-component-custom_ranges-calendar-dropdown:hover i:after{color:var(--libs-ui-color-light-1)!important}.libs-ui-component-custom_ranges-calendar table{border-collapse:inherit;border-spacing:0 2px}.libs-ui-component-custom_ranges-calendar th,.libs-ui-component-custom_ranges-calendar td{padding:0;text-align:center;min-width:32px}.libs-ui-component-custom_ranges-calendar th span,.libs-ui-component-custom_ranges-calendar td span{pointer-events:none}.libs-ui-component-custom_ranges-calendar .libs-ui-component-custom_ranges-calendar-icon:hover{color:var(--libs-ui-color-light-1)}.libs-ui-component-custom_ranges-calendar .libs-ui-component-custom_ranges-calendar-icon:hover i:before,.libs-ui-component-custom_ranges-calendar .libs-ui-component-custom_ranges-calendar-icon:hover i:after{color:var(--libs-ui-color-light-1)!important}.libs-ui-component-custom_ranges-calendar .libs-ui-component-custom_ranges-calendar-icon:before{font-size:20px}.libs-ui-component-custom_ranges-calendar td,.libs-ui-component-custom_ranges-calendar th{cursor:pointer;height:2em;width:2em}.libs-ui-component-custom_ranges-calendar td.available:hover,.libs-ui-component-custom_ranges-calendar th.available:hover{background-color:#f8f5fe;border-color:transparent;border-radius:8px;color:inherit;background-repeat:no-repeat;background-size:.5em;background-position:center;margin:.25em 0;opacity:.8;transform:scale(1);transition:all .45s cubic-bezier(.23,1,.32,1) 0ms}.libs-ui-component-custom_ranges-calendar td{margin:.25em 0;background-color:#fff;transition:background-color .2s ease;transform:scale(1);transition:all .45s cubic-bezier(.23,1,.32,1) 0ms;color:#071631!important}.libs-ui-component-custom_ranges-calendar td:hover{color:#8e61ee!important}.libs-ui-component-custom_ranges-calendar td.off,.libs-ui-component-custom_ranges-calendar td.off.in-range,.libs-ui-component-custom_ranges-calendar td.off.start-date,.libs-ui-component-custom_ranges-calendar td.off.end-date{background-color:#fff;border-color:transparent;color:#cdd0d6!important}.libs-ui-component-custom_ranges-calendar td.focus-off{background-color:#f8f5fe!important}.libs-ui-component-custom_ranges-calendar td.in-range{background-color:#f8f5fe;border-color:transparent;border-radius:0;color:#8e61ee!important}.libs-ui-component-custom_ranges-calendar td.today{position:relative;color:#8e61ee!important}.libs-ui-component-custom_ranges-calendar td.today:after{position:absolute;content:\"\";width:2px;height:2px;background-color:#8e61ee;left:49%;bottom:5px}.libs-ui-component-custom_ranges-calendar td.active{transition:background .3s ease-out;background:#0000001a}.libs-ui-component-custom_ranges-calendar td.active.today:after{position:absolute;content:\"\";background-color:#fff}.libs-ui-component-custom_ranges-calendar td.active.start-date{border-radius:8px 0 0 8px}.libs-ui-component-custom_ranges-calendar td.active.end-date{border-radius:0 8px 8px 0}.libs-ui-component-custom_ranges-calendar td.active.full-date{border-radius:8px}.libs-ui-component-custom_ranges-calendar td.active,.libs-ui-component-custom_ranges-calendar td.active:hover{background-color:#8e61ee;border-color:transparent;color:#fff!important}.libs-ui-component-custom_ranges-calendar th.month{width:auto}.libs-ui-component-custom_ranges-calendar td.disabled,.libs-ui-component-custom_ranges-calendar option.disabled{color:#999!important;cursor:not-allowed;text-decoration:line-through;background-color:#f4f5f7}.libs-ui-component-custom_ranges-calendar .dropdowns{background-repeat:no-repeat;background-size:10px;background-position-y:center;background-position-x:right}.libs-ui-component-custom_ranges-calendar th.month>div{position:relative;display:inline-block}@media (min-width: 564px){.libs-ui-component-custom_ranges{width:auto}}\n"], dependencies: [{ kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i1.TranslatePipe, name: "translate" }, { kind: "component", type: LibsUiComponentsDropdownComponent, selector: "libs_ui-components-dropdown", inputs: ["useXssFilter", "popoverElementRefCustom", "classInclude", "ignoreStopPropagationEvent", "flagMouse", "flagMouseContent", "popoverCustomConfig", "isNgContent", "zIndex", "convertItemSelected", "getPopoverItemSelected", "httpRequestDetailItemById", "lengthKeys", "textDisplayWhenNoSelect", "textDisplayWhenMultiSelect", "classIncludeTextDisplayWhenNoSelect", "fieldGetLabel", "labelPopoverConfig", "labelPopoverFullWidth", "hasContentUnitRight", "listSearchNoDataTemplateRef", "fieldGetImage", "imageSize", "typeShape", "fieldGetIcon", "fieldGetTextAvatar", "fieldGetColorAvatar", "classAvatarInclude", "getLastTextAfterSpace", "linkImageError", "showError", "showBorderError", "disable", "readonly", "labelConfig", "listSearchConfig", "isSearchOnline", "listHiddenInputSearch", "listSearchPadding", "listKeySearch", "listDividerClassInclude", "listConfig", "listButtonsOther", "listHasButtonUnSelectOption", "listClickExactly", "listBackgroundCustom", "listMaxItemShow", "listKeySelected", "listMultiKeySelected", "listKeysDisable", "listKeysHidden", "validRequired", "validMaxItemSelected", "changeValidUndefinedResetError", "allowSelectItemMultiple", "focusInputSearch", "onlyEmitDataWhenReset", "resetKeyWhenSelectAllKey", "listConfigHasDivider", "classIncludeIcon", "classIncludeContent", "listIgnoreClassDisableDefaultWhenUseKeysDisableItem", "tabKeyActive", "tabsConfig", "ignoreBorderBottom"], outputs: ["flagMouseChange", "flagMouseContentChange", "lengthKeysChange", "showBorderErrorChange", "listKeySelectedChange", "listMultiKeySelectedChange", "tabKeyActiveChange", "outSelectKey", "outSelectMultiKey", "outFunctionsControl", "outValidEvent", "outChangStageFlagMouse", "outDataChange", "outClickButtonOther", "outShowList", "outChangeTabKeyActive"] }, { kind: "component", type: LibsUiComponentsInputsInputComponent, selector: "libs_ui-components-inputs-input", inputs: ["tagInput", "dataType", "tabInsertContentTagInput", "textAreaEnterNotNewLine", "emitEmptyInDataTypeNumber", "keepZeroInTypeInt", "autoAddZeroLessThan10InTypeInt", "ignoreBlockInputMaxValue", "hiddenContent", "maxValueNumber", "minValueNumber", "fixedFloat", "acceptNegativeValue", "valueUpDownNumber", "classInclude", "maxLength", "readonly", "disable", "noBorder", "backgroundNone", "borderError", "useColorModeExist", "placeholder", "keepPlaceholderOnly", "value", "autoRemoveEmoji", "defaultHeight", "minHeightTextArea", "maxHeightTextArea", "focusTimeOut", "blurTimeOut", "zIndexPopoverContent", "classContainerInput", "showCount", "ignoreStopPropagationEvent", "resize", "templateLeftBottomInput", "templateRightBottomInput", "classContainerBottomInput", "ignoreWidthInput100", "iconLeftClass", "popoverContentIconLeft", "iconRightClass", "popoverContentIconRight", "resetAutoCompletePassword", "acceptOnlyClickIcon", "setIconRightColorSameColorDisableReadOnly", "onlyAcceptNegativeValue", "maxLengthNumberCount", "focusInput"], outputs: ["maxValueNumberChange", "minValueNumberChange", "fixedFloatChange", "acceptNegativeValueChange", "maxLengthChange", "valueChange", "maxLengthNumberCountChange", "outHeightAreaChange", "outChange", "outFocusAndBlurEvent", "outEnterEvent", "outInputEvent", "outIconLeft", "outIconRight", "outFunctionsControl", "outFilesDrop", "outFileDrop", "outChangeValueByButtonUpDown"] }, { kind: "component", type: LibsUiComponentsButtonsButtonComponent, selector: "libs_ui-components-buttons-button", inputs: ["flagMouse", "type", "buttonCustom", "sizeButton", "label", "disable", "isPending", "imageLeft", "classInclude", "classIconLeft", "classIconRight", "classLabel", "iconOnlyType", "popover", "ignoreStopPropagationEvent", "zIndex", "widthLabelPopover", "styleIconLeft", "styleButton", "ignoreFocusWhenInputTab", "ignoreSetClickWhenShowPopover", "ignorePointerEvent", "isActive"], outputs: ["outClick", "outPopoverEvent", "outFunctionsControl"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
1246
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: LibsUiComponentsDatetimePickerCustomRangesCalendarComponent, isStandalone: true, selector: "libs_ui-components-datetime-picker-custom_ranges-calendar", inputs: { quickRangesArray: { classPropertyName: "quickRangesArray", publicName: "quickRangesArray", isSignal: true, isRequired: false, transformFunction: null }, zIndex: { classPropertyName: "zIndex", publicName: "zIndex", isSignal: true, isRequired: false, transformFunction: null }, classInclude: { classPropertyName: "classInclude", publicName: "classInclude", isSignal: true, isRequired: false, transformFunction: null }, isSingle: { classPropertyName: "isSingle", publicName: "isSingle", isSignal: true, isRequired: false, transformFunction: null }, showDropdownsSelect: { classPropertyName: "showDropdownsSelect", publicName: "showDropdownsSelect", isSignal: true, isRequired: false, transformFunction: null }, hasTimePicker: { classPropertyName: "hasTimePicker", publicName: "hasTimePicker", isSignal: true, isRequired: false, transformFunction: null }, flagMouse: { classPropertyName: "flagMouse", publicName: "flagMouse", isSignal: true, isRequired: false, transformFunction: null }, dateOptions: { classPropertyName: "dateOptions", publicName: "dateOptions", isSignal: true, isRequired: false, transformFunction: null }, autoApply: { classPropertyName: "autoApply", publicName: "autoApply", isSignal: true, isRequired: false, transformFunction: null }, hasSecondPicker: { classPropertyName: "hasSecondPicker", publicName: "hasSecondPicker", isSignal: true, isRequired: false, transformFunction: null }, showRangeLabelOnInput: { classPropertyName: "showRangeLabelOnInput", publicName: "showRangeLabelOnInput", isSignal: true, isRequired: false, transformFunction: null }, startDate: { classPropertyName: "startDate", publicName: "startDate", isSignal: true, isRequired: false, transformFunction: null }, endDate: { classPropertyName: "endDate", publicName: "endDate", isSignal: true, isRequired: false, transformFunction: null }, minDate: { classPropertyName: "minDate", publicName: "minDate", isSignal: true, isRequired: false, transformFunction: null }, maxDate: { classPropertyName: "maxDate", publicName: "maxDate", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { startDate: "startDateChange", endDate: "endDateChange", outChangStageFlagMouse: "outChangStageFlagMouse", outPickerDate: "outPickerDate", outCancel: "outCancel", outUpdateWidth: "outUpdateWidth", outFunctionsControl: "outFunctionsControl" }, viewQueries: [{ propertyName: "pickerContainer", first: true, predicate: ["pickerContainer"], descendants: true, isSignal: true }], ngImport: i0, template: "<div class=\"libs-ui-component-custom_ranges-calendar test-class\">\n <div class=\"relative flex\">\n <div class=\"libs-ui-component-custom_ranges-calendar\"\n [class.right]=\"isSingle()\"\n [class.left]=\"!isSingle()\">\n <div class=\"rounded-[4px] bg-[#ffffff]\">\n @if (calendarVariables(); as calendarVariables) {\n <table>\n <thead>\n <tr>\n <th colspan=\"7\"\n class=\"month\">\n @if (showDropdownsSelect() && calendarVariables.left().dropdowns?.()) {\n <div class=\"!flex mb-[10px] w-full\">\n <div class=\"w-3/4 flex items-center\">\n <div class='mr-[8px]'>\n <libs_ui-components-dropdown [isNgContent]=\"true\"\n [zIndex]=\"zIndex() + 1\"\n [popoverCustomConfig]=\"{widthByParent:false,ignoreArrow:true,paddingLeftItem: true, classInclude: '!w-[130px]',position:{ mode:'center',distance:0}}\"\n [listMaxItemShow]=\"10\"\n [listClickExactly]=\"false\"\n [listKeysDisable]=\"disableMonth().left()\"\n [listHasButtonUnSelectOption]=\"false\"\n [convertItemSelected]=\"convertItemMonth\"\n [listConfig]=\"listMonthsConfig()\"\n [listKeySelected]=\"listKeyFromSelected().month\"\n [flagMouse]=\"flagMouse()\"\n [listHiddenInputSearch]=\"true\"\n [httpRequestDetailItemById]=\"monthHttpDetailConfig()\"\n (outSelectKey)=\"handlerSelectedDropdown($event, sideEnum.left + 'month')\"\n (outFunctionsControl)=\"handlerFunctionControl($event, sideEnum.left + 'month')\"\n (outChangStageFlagMouse)=\"handlerChangeFlagMouse($event)\"\n (outShowList)=\"handlerShowListDropdown($event, sideEnum.left + 'month')\">\n <div class=\"libs-ui-component-custom_ranges-calendar-dropdown\"\n [class.text-[var(--libs-ui-color-dark)]]=\"checkShowListDropdown()[sideEnum.left + 'month']\"\n [class.text-[#6a7383]]=\"!checkShowListDropdown()[sideEnum.left + 'month']\">\n <div class=\"libs-ui-font-h4m\"\n [style.fontWeight]=\"500\"\n [style.fontStyle]=\"'normal'\">\n {{ dateOptions().monthNames && calendarVariables.left().calendar && dateOptions().monthNames[calendarVariables.left().calendar?.[1]?.[1]?.month() ?? -1] }}\n </div>\n <i class=\"libs-ui-icon-chevron-right text-[13px] text-[#6a7383]\"\n [class.text-[var(--libs-ui-color-dark)]]=\"checkShowListDropdown()[sideEnum.left + 'month']\"\n [style.fontWeight]=\"500\"\n [style.rotate]=\"!checkShowListDropdown()[sideEnum.left + 'month'] ? '90deg':'270deg'\"></i>\n </div>\n </libs_ui-components-dropdown>\n </div>\n <div>\n <libs_ui-components-dropdown [listMaxItemShow]=\"10\"\n [isNgContent]=\"true\"\n [zIndex]=\"zIndex() + 1\"\n [popoverCustomConfig]=\"{widthByParent:false,ignoreArrow:true,paddingLeftItem: true,classInclude: '!w-[110px]',position:{mode:'center',distance:0}}\"\n [listClickExactly]=\"false\"\n [listHasButtonUnSelectOption]=\"false\"\n [convertItemSelected]=\"convertItemYear\"\n [listHiddenInputSearch]=\"true\"\n [listConfig]=\"listLeftYearConfig()\"\n [listKeySelected]=\"listKeyFromSelected().year\"\n [flagMouse]=\"flagMouse()\"\n [httpRequestDetailItemById]=\"leftYearHttpDetailConfig()\"\n (outChangStageFlagMouse)=\"handlerChangeFlagMouse($event)\"\n (outShowList)=\"handlerShowListDropdown($event, sideEnum.left + 'year')\"\n (outSelectKey)=\"handlerSelectedDropdown($event, sideEnum.left + 'year')\"\n (outFunctionsControl)=\"handlerFunctionControl($event, sideEnum.left + 'year')\">\n <div class=\"libs-ui-component-custom_ranges-calendar-dropdown\"\n [class.text-[var(--libs-ui-color-dark)]]=\"checkShowListDropdown()[sideEnum.left + 'year']\"\n [class.text-[#6a7383]]=\"!checkShowListDropdown()[sideEnum.left + 'year']\">\n <div class=\"libs-ui-font-h4m\"\n [style.fontWeight]=\"500\"\n [style.fontStyle]=\"'normal'\">{{ calendarVariables.left().calendar && calendarVariables.left().calendar?.[1]?.[1]?.format(\" YYYY\") }}</div>\n <i class=\"libs-ui-icon-chevron-right text-[13px] text-[#6a7383]\"\n [class.text-[var(--libs-ui-color-dark)]]=\"checkShowListDropdown()[sideEnum.left + 'year']\"\n [style.fontWeight]=\"500\"\n [style.rotate]=\"!checkShowListDropdown()[sideEnum.left + 'year'] ? '90deg':'270deg'\"></i>\n </div>\n </libs_ui-components-dropdown>\n </div>\n </div>\n\n <div class=\"w-1/4 flex items-center relative\">\n @if (!calendarVariables.left().minDate || (calendarVariables.left().minDate?.isBefore(calendarVariables.left().calendar && calendarVariables.left().calendar?.firstDay))) {\n <div (click)=\"handlerClickPrev(sideEnum.left)\">\n <div class=\"flex items-center justify-center absolute left-0 top-[-3px]\">\n <i class=\"libs-ui-icon-chevron-right rotate-[180deg] text-[#6a7383] cursor-pointer libs-ui-component-custom_ranges-calendar-icon\"></i>\n </div>\n </div>\n }\n @if ((!calendarVariables.left().maxDate || calendarVariables.left().maxDate?.isAfter(calendarVariables.left().calendar && calendarVariables.left().calendar?.lastDay)) && isSingle()) {\n <div (click)=\"handlerClickNext(sideEnum.left)\">\n <div class=\"flex items-center justify-center ml-[12px] absolute right-0 top-[-3px]\">\n <i class=\"libs-ui-icon-chevron-right text-[#6a7383] cursor-pointer libs-ui-component-custom_ranges-calendar-icon\"></i>\n </div>\n </div>\n }\n </div>\n </div>\n }\n @if (!showDropdownsSelect() || !calendarVariables.left().dropdowns) {\n {{ dateOptions().monthNames && calendarVariables.left().calendar && dateOptions().monthNames[calendarVariables.left().calendar?.[1]?.[1]?.month() ?? -1] }}\n {{ calendarVariables.left().calendar && calendarVariables.left().calendar?.[1]?.[1]?.format(\" YYYY\") }}\n }\n </th>\n </tr>\n <tr class=\"week-days\">\n @for (dayofweek of dateOptions().daysOfWeek; track dayofweek) {\n <th>\n <span class=\"libs-ui-font-h6m text-[#6a7383]\"\n [style.fontWeight]=\"500\"\n [style.fontStyle]=\"'normal'\">{{ dayofweek }}</span>\n </th>\n }\n </tr>\n </thead>\n <tbody class=\"drp-animate\">\n @for (row of calendarVariables.left().calRows?.(); track row) {\n <tr class=\"h-[32px]\"\n [class]=\"calendarVariables.left().classes && calendarVariables.left().classes?.[row]?.classList\">\n @for (col of calendarVariables.left().calCols?.(); track col) {\n <td class=\"libs-ui-font-h5r\"\n [class.today]=\"calendarVariables.left().calendar && calendarVariables.left().calendar?.[row]?.[col]?.date() === today().date() && calendarVariables.left().calendar?.[row]?.[col]?.month() === today().month() && calendarVariables.left().calendar?.[row]?.[col]?.year() === today().year()\"\n [class]=\"calendarVariables.left().classes && calendarVariables.left().classes?.[row]?.[col]\"\n (click)=\"handlerPickerDate($event, sideEnum.left, row, col)\"\n (mouseenter)=\"handlerHoverDate($event, sideEnum.left, row, col)\">\n <span class=\"libs-ui-font-h5r\">{{ calendarVariables.left().calendar && calendarVariables.left().calendar?.[row]?.[col]?.date() }}</span>\n </td>\n }\n </tr>\n }\n </tbody>\n </table>\n }\n </div>\n @if (hasTimePicker()) {\n <div>\n <div class=\"flex justify-center column items-center pt-[12px]\">\n <div class=\"w-full flex justify-center items-center rounded-[4px] border\"\n [class.border-[#e6e8ed]]=\"!timePickerError()\"\n [class.border-[#ff5454]]=\"timePickerError()\">\n <libs_ui-components-inputs-input classInclude=\"!w-[30px] !p-0 !border-none !text-center libs-ui-font-h4s !text-[#071631]\"\n dataType=\"int\"\n [focusTimeOut]=\"0\"\n [blurTimeOut]=\"0\"\n [autoAddZeroLessThan10InTypeInt]=\"true\"\n [emitEmptyInDataTypeNumber]=\"true\"\n [maxValueNumber]=\"23\"\n [minValueNumber]=\"0\"\n [maxLength]=\"2\"\n [value]=\"timepickerValueItem().lefthour()\"\n (outInputEvent)=\"handlerInputEvent($event, 'lefthour')\"\n (outFunctionsControl)=\"handlerFunctionControl($event, sideEnum.left + 'hour')\"\n (outChange)=\"handlerChangeTimeValue($event, 'lefthour')\"\n (outFocusAndBlurEvent)=\"handlerFocusAndBlurTime($event, 'lefthour')\" />\n <span class=\"libs-ui-font-h3s text-[#333333]\">:</span>\n <libs_ui-components-inputs-input classInclude=\"!w-[30px] !p-0 !border-none !text-center !libs-ui-font-h4s !text-[#071631]\"\n [autoAddZeroLessThan10InTypeInt]=\"true\"\n [emitEmptyInDataTypeNumber]=\"true\"\n dataType=\"int\"\n [focusTimeOut]=\"0\"\n [blurTimeOut]=\"0\"\n [maxValueNumber]=\"59\"\n [minValueNumber]=\"0\"\n [maxLength]=\"2\"\n [value]=\"timepickerValueItem().leftminute()\"\n (outFunctionsControl)=\"handlerFunctionControl($event, sideEnum.left + 'minute')\"\n (outInputEvent)=\"handlerInputEvent($event, 'leftminute')\"\n (outChange)=\"handlerChangeTimeValue($event, 'leftminute')\"\n (outFocusAndBlurEvent)=\"handlerFocusAndBlurTime($event, 'leftminute')\" />\n </div>\n </div>\n </div>\n }\n </div>\n\n @if (!isSingle()) {\n <div class=\"libs-ui-component-custom_ranges-calendar right ml-[24px]\">\n <div class=\"rounded-[4px] bg-[#ffffff]\">\n @if (calendarVariables()) {\n <table>\n <thead>\n <tr>\n <th colspan=\"7\"\n class=\"month\">\n @if (showDropdownsSelect() && calendarVariables().left().dropdowns?.()) {\n <div class=\"!flex mb-[10px] w-full\">\n <div class=\"w-3/4 flex items-center\">\n <div class='mr-[8px]'>\n <libs_ui-components-dropdown [isNgContent]=\"true\"\n [zIndex]=\"zIndex() + 1\"\n [popoverCustomConfig]=\"{widthByParent:false,ignoreArrow:true,paddingLeftItem: true,classInclude: '!w-[130px]',position:{mode:'center',distance:0}}\"\n [listMaxItemShow]=\"10\"\n [listClickExactly]=\"false\"\n [listKeysDisable]=\"disableMonth().right()\"\n [listHasButtonUnSelectOption]=\"false\"\n [convertItemSelected]=\"convertItemMonth\"\n [listHiddenInputSearch]=\"true\"\n [listConfig]=\"listMonthsConfig()\"\n [listKeySelected]=\"listKeyToSelected().month\"\n [flagMouse]=\"flagMouse()\"\n [httpRequestDetailItemById]=\"monthHttpDetailConfig()\"\n (outFunctionsControl)=\"handlerFunctionControl($event, sideEnum.right + 'month')\"\n (outSelectKey)=\"handlerSelectedDropdown($event, sideEnum.right + 'month')\"\n (outChangStageFlagMouse)=\"handlerChangeFlagMouse($event)\"\n (outShowList)=\"handlerShowListDropdown($event, sideEnum.right + 'month')\">\n <div class=\"libs-ui-component-custom_ranges-calendar-dropdown\"\n [class.text-[var(--libs-ui-color-dark)]]=\"checkShowListDropdown()[sideEnum.right + 'month']\"\n [class.text-[#6a7383]]=\"!checkShowListDropdown()[sideEnum.right + 'month']\">\n <div class=\"libs-ui-font-h4m\"\n [class.text-[var(--libs-ui-color-dark)]]=\"checkShowListDropdown()[sideEnum.right + 'month']\"\n [style.fontWeight]=\"500\"\n [style.fontStyle]=\"'normal'\">\n {{ dateOptions().monthNames && calendarVariables().right().calendar && dateOptions().monthNames[ calendarVariables().right().calendar?.[1]?.[1]?.month() ?? -1] }}\n </div>\n <i class=\"libs-ui-icon-chevron-right text-[13px] text-[#6a7383]\"\n [style.fontWeight]=\"500\"\n [style.rotate]=\"!checkShowListDropdown()[sideEnum.right + 'month'] ? '90deg':'270deg'\"></i>\n </div>\n </libs_ui-components-dropdown>\n </div>\n <div>\n <libs_ui-components-dropdown [listMaxItemShow]=\"10\"\n [zIndex]=\"zIndex() + 1\"\n [isNgContent]=\"true\"\n [popoverCustomConfig]=\"{widthByParent:false,ignoreArrow:true,paddingLeftItem: true, classInclude: '!w-[110px]', position:{mode:'center', distance:0}}\"\n [listClickExactly]=\"false\"\n [listHasButtonUnSelectOption]=\"false\"\n [convertItemSelected]=\"convertItemYear\"\n [listHiddenInputSearch]=\"true\"\n [listConfig]=\"listRightYearConfig()\"\n [listKeySelected]=\"listKeyToSelected().year\"\n [flagMouse]=\"flagMouse()\"\n [httpRequestDetailItemById]=\"rightYearHttpDetailConfig()\"\n (outSelectKey)=\"handlerSelectedDropdown($event, sideEnum.right + 'year')\"\n (outFunctionsControl)=\"handlerFunctionControl($event, sideEnum.right + 'year')\"\n (outChangStageFlagMouse)=\"handlerChangeFlagMouse($event)\"\n (outShowList)=\"handlerShowListDropdown($event, sideEnum.right + 'year')\">\n <div class=\"libs-ui-component-custom_ranges-calendar-dropdown\"\n [class.text-[var(--libs-ui-color-dark)]]=\"checkShowListDropdown()[sideEnum.right + 'year']\"\n [class.text-[#6a7383]]=\"!checkShowListDropdown()[sideEnum.right + 'year']\">\n <div class=\"libs-ui-font-h4m\"\n [style.fontWeight]=\"500\"\n [style.fontStyle]=\"'normal'\">\n {{ calendarVariables().right().calendar && calendarVariables().right().calendar?.[1]?.[1]?.format(\"YYYY\") }}\n </div>\n <i class=\"libs-ui-icon-chevron-right text-[13px] text-[#6a7383]\"\n [class.text-[var(--libs-ui-color-dark)]]=\"checkShowListDropdown()[sideEnum.right + 'year']\"\n [style.fontWeight]=\"500\"\n [style.rotate]=\"!checkShowListDropdown()[sideEnum.right + 'year'] ? '90deg':'270deg'\"></i>\n </div>\n </libs_ui-components-dropdown>\n </div>\n </div>\n <div class=\"w-1/4 flex items-center relative\">\n @if (listKeyFromSelected().year && listKeyToSelected().year && !(((listKeyFromSelected().year +1) === listKeyToSelected().year) && (listKeyFromSelected().month === 12) && listKeyToSelected().month === 1)&& (listKeyFromSelected().year < listKeyToSelected().year) || listKeyFromSelected().month && listKeyToSelected().month && ((listKeyFromSelected().month + 1) < +listKeyToSelected().month)) {\n <div class=\"flex items-center justify-center absolute left-0 top-[-3px]\"\n (click)=\"handlerClickPrev(sideEnum.right)\">\n <i class=\"libs-ui-icon-chevron-right rotate-[180deg] text-[#6a7383] cursor-pointer libs-ui-component-custom_ranges-calendar-icon\"></i>\n </div>\n }\n @if (listKeyFromSelected().month && listKeyToSelected().month && (listKeyFromSelected().month > listKeyToSelected().month) && listKeyFromSelected().year && listKeyToSelected().year && (listKeyFromSelected().year === listKeyToSelected().year )) {\n <div class=\"bg-[#ffffff] w-[21px] h-[21px] cursor-none flex items-center justify-center rounded-[50px]\">\n </div>\n }\n @if (!calendarVariables().right().maxDate || (calendarVariables().right().maxDate?.isAfter(calendarVariables().right().calendar && calendarVariables().right().calendar?.lastDay))) {\n <div (click)=\"handlerClickNext(sideEnum.right)\">\n <div class=\"flex items-center justify-center ml-[12px] absolute right-0 top-[-3px]\">\n <i class=\"libs-ui-icon-chevron-right text-[#6a7383] cursor-pointer libs-ui-component-custom_ranges-calendar-icon\"></i>\n </div>\n </div>\n }\n </div>\n </div>\n }\n @if (!showDropdownsSelect() || !calendarVariables().right().dropdowns) {\n {{ dateOptions().monthNames && calendarVariables().right().calendar && dateOptions().monthNames[calendarVariables().right().calendar?.[1]?.[1]?.month() ?? -1] }}\n {{ calendarVariables().right().calendar && calendarVariables().right().calendar?.[1]?.[1]?.format(\"YYYY\") }}\n }\n </th>\n </tr>\n <tr class=\"week-days\">\n @for (dayofweek of dateOptions().daysOfWeek; track dayofweek) {\n <th>\n <span class=\"libs-ui-font-h6m text-[#6a7383]\"\n [style.fontWeight]=\"500\"\n [style.fontStyle]=\"'normal'\">{{ dayofweek }}</span>\n </th>\n }\n </tr>\n </thead>\n <tbody>\n @for (row of calendarVariables().right().calRows?.(); track row) {\n <tr class=\"h-[32px]\"\n [class]=\"calendarVariables().right().classes && calendarVariables().right().classes?.[row]?.classList\">\n @for (col of calendarVariables().right().calCols?.(); track col) {\n <td class=\"libs-ui-font-h5r\"\n [class]=\"calendarVariables().right().classes && calendarVariables().right().classes?.[row]?.[col]\"\n [class.today]=\"calendarVariables().right().calendar && calendarVariables().right().calendar?.[row]?.[col]?.date() === today().date() && calendarVariables().right().calendar?.[row]?.[col]?.month() === today().month() && calendarVariables().right().calendar &&calendarVariables().right().calendar?.[row]?.[col]?.year() === today().year()\"\n (click)=\"handlerPickerDate($event, sideEnum.right, row, col)\"\n (mouseenter)=\"handlerHoverDate($event, sideEnum.right, row, col)\">\n <span>{{ calendarVariables().right().calendar?.[row]?.[col]?.date() }}</span>\n </td>\n }\n </tr>\n }\n </tbody>\n </table>\n }\n </div>\n @if (hasTimePicker()) {\n <div>\n <div class=\"flex justify-center items-center pt-[12px]\">\n <div class=\"w-full flex justify-center items-center rounded-[4px] border\"\n [class.border-[#e6e8ed]]=\"!timePickerError()\"\n [class.border-[#ff5454]]=\"timePickerError()\">\n <libs_ui-components-inputs-input classInclude=\"!w-[30px] !p-0 !border-none !text-center !libs-ui-font-h4s !text-[#071631]\"\n dataType=\"int\"\n [autoAddZeroLessThan10InTypeInt]=\"true\"\n [emitEmptyInDataTypeNumber]=\"true\"\n [maxValueNumber]=\"23\"\n [minValueNumber]=\"0\"\n [focusTimeOut]=\"0\"\n [blurTimeOut]=\"0\"\n [maxLength]=\"2\"\n [value]=\"timepickerValueItem().righthour()\"\n (outChange)=\"handlerChangeTimeValue($event, 'righthour')\"\n (outInputEvent)=\"handlerInputEvent($event,'righthour')\"\n (outFunctionsControl)=\"handlerFunctionControl($event, 'righthour')\"\n (outFocusAndBlurEvent)=\"handlerFocusAndBlurTime($event, 'righthour')\" />\n <span class=\"libs-ui-font-h3s text-[#333333]\">:</span>\n <libs_ui-components-inputs-input classInclude=\"!w-[30px] !p-0 !border-none !text-center libs-ui-font-h4s !text-[#071631]\"\n dataType=\"int\"\n [autoAddZeroLessThan10InTypeInt]=\"true\"\n [emitEmptyInDataTypeNumber]=\"true\"\n [maxValueNumber]=\"59\"\n [minValueNumber]=\"0\"\n [focusTimeOut]=\"0\"\n [blurTimeOut]=\"0\"\n [maxLength]=\"2\"\n [value]=\"timepickerValueItem().rightminute()\"\n (outInputEvent)=\"handlerInputEvent($event,'rightminute')\"\n (outFunctionsControl)=\"handlerFunctionControl($event, 'rightminute')\"\n (outChange)=\"handlerChangeTimeValue($event, 'rightminute')\"\n (outFocusAndBlurEvent)=\"handlerFocusAndBlurTime($event, 'rightminute')\" />\n </div>\n </div>\n </div>\n }\n </div>\n }\n\n </div>\n <div>\n <div class=\"flex w-full\">\n @if (!isSingle() && hasTimePicker()) {\n <div class=\"mt-[8px] libs-ui-font-h7r text-[#ff5454] h-[14px]\">\n @if (timePickerError()) {\n <span>{{ 'i18n_date_compare_start_end_message_error' | translate }}</span>\n }\n </div>\n }\n </div>\n @if (!quickRangesArray().length || !isSingle()) {\n <div class=\" flex w-full pt-[16px] justify-between\">\n <div class=\"flex items-center\">\n @if (!isSingle()) {\n @if (!endDate()) {\n <div class=\"text-[#cdd0d6] libs-ui-font-h6r\">\n <span>{{ startDate()?.format('DD/MM/YYYY') }}</span>\n @if (hasTimePicker()) {\n <span> {{ computedDisplayTimeLeft() }}</span>\n }\n ‐\n <span>{{ startDate()?.format('DD/MM/YYYY') }}</span>\n @if (hasTimePicker()) {\n <span> {{ computedDisplayTimeRight() }}</span>\n }\n </div>\n }\n @if (endDate()) {\n <div class=\"text-[#cdd0d6] libs-ui-font-h6r\">\n <span>{{ startDate()?.format('DD/MM/YYYY') }}</span>\n @if (hasTimePicker()) {\n <span> {{ computedDisplayTimeLeft() }}</span>\n }\n ‐\n <span>{{ endDate()?.format('DD/MM/YYYY') }}</span>\n @if (hasTimePicker()) {\n <span> {{ computedDisplayTimeRight() }}</span>\n }\n </div>\n }\n }\n </div>\n\n <div class=\"flex\">\n <libs_ui-components-buttons-button class=\"mr-[12px]\"\n label=\"i18n_cancel\"\n type=\"button-third\"\n (outClick)=\"handlerClickCancel($event)\" />\n <libs_ui-components-buttons-button label=\"i18n_select\"\n (outClick)=\"handlerClickApply($event)\" />\n </div>\n </div>\n }\n </div>\n</div>\n", styles: [".libs-ui-component-custom_ranges-calendar .libs-ui-component-custom_ranges-calendar-dropdown{display:flex;align-items:center}.libs-ui-component-custom_ranges-calendar .libs-ui-component-custom_ranges-calendar-dropdown:hover{color:var(--libs-ui-color-light-1)}.libs-ui-component-custom_ranges-calendar .libs-ui-component-custom_ranges-calendar-dropdown:hover i:before,.libs-ui-component-custom_ranges-calendar .libs-ui-component-custom_ranges-calendar-dropdown:hover i:after{color:var(--libs-ui-color-light-1)!important}.libs-ui-component-custom_ranges-calendar table{border-collapse:inherit;border-spacing:0 2px}.libs-ui-component-custom_ranges-calendar th,.libs-ui-component-custom_ranges-calendar td{padding:0;text-align:center;min-width:32px}.libs-ui-component-custom_ranges-calendar th span,.libs-ui-component-custom_ranges-calendar td span{pointer-events:none}.libs-ui-component-custom_ranges-calendar .libs-ui-component-custom_ranges-calendar-icon:hover{color:var(--libs-ui-color-light-1)}.libs-ui-component-custom_ranges-calendar .libs-ui-component-custom_ranges-calendar-icon:hover i:before,.libs-ui-component-custom_ranges-calendar .libs-ui-component-custom_ranges-calendar-icon:hover i:after{color:var(--libs-ui-color-light-1)!important}.libs-ui-component-custom_ranges-calendar .libs-ui-component-custom_ranges-calendar-icon:before{font-size:20px}.libs-ui-component-custom_ranges-calendar td,.libs-ui-component-custom_ranges-calendar th{cursor:pointer;height:2em;width:2em}.libs-ui-component-custom_ranges-calendar td.available:hover,.libs-ui-component-custom_ranges-calendar th.available:hover{background-color:#f8f5fe;border-color:transparent;border-radius:8px;color:inherit;background-repeat:no-repeat;background-size:.5em;background-position:center;margin:.25em 0;opacity:.8;transform:scale(1);transition:all .45s cubic-bezier(.23,1,.32,1) 0ms}.libs-ui-component-custom_ranges-calendar td{margin:.25em 0;background-color:#fff;transition:background-color .2s ease;transform:scale(1);transition:all .45s cubic-bezier(.23,1,.32,1) 0ms;color:#071631!important}.libs-ui-component-custom_ranges-calendar td:hover{color:#8e61ee!important}.libs-ui-component-custom_ranges-calendar td.off,.libs-ui-component-custom_ranges-calendar td.off.in-range,.libs-ui-component-custom_ranges-calendar td.off.start-date,.libs-ui-component-custom_ranges-calendar td.off.end-date{background-color:#fff;border-color:transparent;color:#cdd0d6!important}.libs-ui-component-custom_ranges-calendar td.focus-off{background-color:#f8f5fe!important}.libs-ui-component-custom_ranges-calendar td.in-range{background-color:#f8f5fe;border-color:transparent;border-radius:0;color:#8e61ee!important}.libs-ui-component-custom_ranges-calendar td.today{position:relative;color:#8e61ee!important}.libs-ui-component-custom_ranges-calendar td.today:after{position:absolute;content:\"\";width:2px;height:2px;background-color:#8e61ee;left:49%;bottom:5px}.libs-ui-component-custom_ranges-calendar td.active{transition:background .3s ease-out;background:#0000001a}.libs-ui-component-custom_ranges-calendar td.active.today:after{position:absolute;content:\"\";background-color:#fff}.libs-ui-component-custom_ranges-calendar td.active.start-date{border-radius:8px 0 0 8px}.libs-ui-component-custom_ranges-calendar td.active.end-date{border-radius:0 8px 8px 0}.libs-ui-component-custom_ranges-calendar td.active.full-date{border-radius:8px}.libs-ui-component-custom_ranges-calendar td.active,.libs-ui-component-custom_ranges-calendar td.active:hover{background-color:#8e61ee;border-color:transparent;color:#fff!important}.libs-ui-component-custom_ranges-calendar th.month{width:auto}.libs-ui-component-custom_ranges-calendar td.disabled,.libs-ui-component-custom_ranges-calendar option.disabled{color:#999!important;cursor:not-allowed;text-decoration:line-through;background-color:#f4f5f7}.libs-ui-component-custom_ranges-calendar .dropdowns{background-repeat:no-repeat;background-size:10px;background-position-y:center;background-position-x:right}.libs-ui-component-custom_ranges-calendar th.month>div{position:relative;display:inline-block}@media (min-width: 564px){.libs-ui-component-custom_ranges{width:auto}}\n"], dependencies: [{ kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i1.TranslatePipe, name: "translate" }, { kind: "component", type: LibsUiComponentsDropdownComponent, selector: "libs_ui-components-dropdown", inputs: ["useXssFilter", "popoverElementRefCustom", "classInclude", "ignoreStopPropagationEvent", "flagMouse", "flagMouseContent", "popoverCustomConfig", "isNgContent", "zIndex", "convertItemSelected", "getPopoverItemSelected", "httpRequestDetailItemById", "lengthKeys", "textDisplayWhenNoSelect", "textDisplayWhenMultiSelect", "classIncludeTextDisplayWhenNoSelect", "fieldGetLabel", "labelPopoverConfig", "labelPopoverFullWidth", "hasContentUnitRight", "listSearchNoDataTemplateRef", "fieldGetImage", "imageSize", "typeShape", "fieldGetIcon", "fieldGetTextAvatar", "fieldGetColorAvatar", "classAvatarInclude", "getLastTextAfterSpace", "linkImageError", "showError", "showBorderError", "disable", "readonly", "labelConfig", "listSearchConfig", "isSearchOnline", "listHiddenInputSearch", "listSearchPadding", "listKeySearch", "listDividerClassInclude", "listConfig", "listButtonsOther", "listHasButtonUnSelectOption", "listClickExactly", "listBackgroundCustom", "listMaxItemShow", "listKeySelected", "listMultiKeySelected", "listKeysDisable", "listKeysHidden", "validRequired", "validMaxItemSelected", "changeValidUndefinedResetError", "allowSelectItemMultiple", "focusInputSearch", "onlyEmitDataWhenReset", "resetKeyWhenSelectAllKey", "listConfigHasDivider", "classIncludeIcon", "classIncludeContent", "listIgnoreClassDisableDefaultWhenUseKeysDisableItem", "tabKeyActive", "tabsConfig", "ignoreBorderBottom"], outputs: ["flagMouseChange", "flagMouseContentChange", "lengthKeysChange", "showBorderErrorChange", "listKeySelectedChange", "listMultiKeySelectedChange", "tabKeyActiveChange", "outSelectKey", "outSelectMultiKey", "outFunctionsControl", "outValidEvent", "outChangStageFlagMouse", "outDataChange", "outClickButtonOther", "outShowList", "outChangeTabKeyActive"] }, { kind: "component", type: LibsUiComponentsInputsInputComponent, selector: "libs_ui-components-inputs-input", inputs: ["tagInput", "dataType", "tabInsertContentTagInput", "textAreaEnterNotNewLine", "emitEmptyInDataTypeNumber", "keepZeroInTypeInt", "autoAddZeroLessThan10InTypeInt", "ignoreBlockInputMaxValue", "hiddenContent", "maxValueNumber", "minValueNumber", "fixedFloat", "acceptNegativeValue", "valueUpDownNumber", "classInclude", "maxLength", "readonly", "disable", "noBorder", "backgroundNone", "borderError", "useColorModeExist", "placeholder", "keepPlaceholderOnly", "value", "autoRemoveEmoji", "defaultHeight", "minHeightTextArea", "maxHeightTextArea", "focusTimeOut", "blurTimeOut", "zIndexPopoverContent", "classContainerInput", "showCount", "ignoreStopPropagationEvent", "resize", "templateLeftBottomInput", "templateRightBottomInput", "classContainerBottomInput", "ignoreWidthInput100", "iframeTextareaCustomStyle", "iconLeftClass", "popoverContentIconLeft", "iconRightClass", "popoverContentIconRight", "resetAutoCompletePassword", "acceptOnlyClickIcon", "setIconRightColorSameColorDisableReadOnly", "onlyAcceptNegativeValue", "maxLengthNumberCount", "focusInput"], outputs: ["maxValueNumberChange", "minValueNumberChange", "fixedFloatChange", "acceptNegativeValueChange", "maxLengthChange", "valueChange", "maxLengthNumberCountChange", "outHeightAreaChange", "outChange", "outFocusAndBlurEvent", "outEnterEvent", "outInputEvent", "outIconLeft", "outIconRight", "outFunctionsControl", "outFilesDrop", "outFileDrop", "outChangeValueByButtonUpDown"] }, { kind: "component", type: LibsUiComponentsButtonsButtonComponent, selector: "libs_ui-components-buttons-button", inputs: ["flagMouse", "type", "buttonCustom", "sizeButton", "label", "disable", "isPending", "imageLeft", "classInclude", "classIconLeft", "classIconRight", "classLabel", "iconOnlyType", "popover", "ignoreStopPropagationEvent", "zIndex", "widthLabelPopover", "styleIconLeft", "styleButton", "ignoreFocusWhenInputTab", "ignoreSetClickWhenShowPopover", "ignorePointerEvent", "isActive"], outputs: ["outClick", "outPopoverEvent", "outFunctionsControl"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
1247
1247
|
}
|
|
1248
1248
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: LibsUiComponentsDatetimePickerCustomRangesCalendarComponent, decorators: [{
|
|
1249
1249
|
type: Component,
|
|
@@ -1254,4 +1254,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
1254
1254
|
LibsUiComponentsButtonsButtonComponent
|
|
1255
1255
|
], template: "<div class=\"libs-ui-component-custom_ranges-calendar test-class\">\n <div class=\"relative flex\">\n <div class=\"libs-ui-component-custom_ranges-calendar\"\n [class.right]=\"isSingle()\"\n [class.left]=\"!isSingle()\">\n <div class=\"rounded-[4px] bg-[#ffffff]\">\n @if (calendarVariables(); as calendarVariables) {\n <table>\n <thead>\n <tr>\n <th colspan=\"7\"\n class=\"month\">\n @if (showDropdownsSelect() && calendarVariables.left().dropdowns?.()) {\n <div class=\"!flex mb-[10px] w-full\">\n <div class=\"w-3/4 flex items-center\">\n <div class='mr-[8px]'>\n <libs_ui-components-dropdown [isNgContent]=\"true\"\n [zIndex]=\"zIndex() + 1\"\n [popoverCustomConfig]=\"{widthByParent:false,ignoreArrow:true,paddingLeftItem: true, classInclude: '!w-[130px]',position:{ mode:'center',distance:0}}\"\n [listMaxItemShow]=\"10\"\n [listClickExactly]=\"false\"\n [listKeysDisable]=\"disableMonth().left()\"\n [listHasButtonUnSelectOption]=\"false\"\n [convertItemSelected]=\"convertItemMonth\"\n [listConfig]=\"listMonthsConfig()\"\n [listKeySelected]=\"listKeyFromSelected().month\"\n [flagMouse]=\"flagMouse()\"\n [listHiddenInputSearch]=\"true\"\n [httpRequestDetailItemById]=\"monthHttpDetailConfig()\"\n (outSelectKey)=\"handlerSelectedDropdown($event, sideEnum.left + 'month')\"\n (outFunctionsControl)=\"handlerFunctionControl($event, sideEnum.left + 'month')\"\n (outChangStageFlagMouse)=\"handlerChangeFlagMouse($event)\"\n (outShowList)=\"handlerShowListDropdown($event, sideEnum.left + 'month')\">\n <div class=\"libs-ui-component-custom_ranges-calendar-dropdown\"\n [class.text-[var(--libs-ui-color-dark)]]=\"checkShowListDropdown()[sideEnum.left + 'month']\"\n [class.text-[#6a7383]]=\"!checkShowListDropdown()[sideEnum.left + 'month']\">\n <div class=\"libs-ui-font-h4m\"\n [style.fontWeight]=\"500\"\n [style.fontStyle]=\"'normal'\">\n {{ dateOptions().monthNames && calendarVariables.left().calendar && dateOptions().monthNames[calendarVariables.left().calendar?.[1]?.[1]?.month() ?? -1] }}\n </div>\n <i class=\"libs-ui-icon-chevron-right text-[13px] text-[#6a7383]\"\n [class.text-[var(--libs-ui-color-dark)]]=\"checkShowListDropdown()[sideEnum.left + 'month']\"\n [style.fontWeight]=\"500\"\n [style.rotate]=\"!checkShowListDropdown()[sideEnum.left + 'month'] ? '90deg':'270deg'\"></i>\n </div>\n </libs_ui-components-dropdown>\n </div>\n <div>\n <libs_ui-components-dropdown [listMaxItemShow]=\"10\"\n [isNgContent]=\"true\"\n [zIndex]=\"zIndex() + 1\"\n [popoverCustomConfig]=\"{widthByParent:false,ignoreArrow:true,paddingLeftItem: true,classInclude: '!w-[110px]',position:{mode:'center',distance:0}}\"\n [listClickExactly]=\"false\"\n [listHasButtonUnSelectOption]=\"false\"\n [convertItemSelected]=\"convertItemYear\"\n [listHiddenInputSearch]=\"true\"\n [listConfig]=\"listLeftYearConfig()\"\n [listKeySelected]=\"listKeyFromSelected().year\"\n [flagMouse]=\"flagMouse()\"\n [httpRequestDetailItemById]=\"leftYearHttpDetailConfig()\"\n (outChangStageFlagMouse)=\"handlerChangeFlagMouse($event)\"\n (outShowList)=\"handlerShowListDropdown($event, sideEnum.left + 'year')\"\n (outSelectKey)=\"handlerSelectedDropdown($event, sideEnum.left + 'year')\"\n (outFunctionsControl)=\"handlerFunctionControl($event, sideEnum.left + 'year')\">\n <div class=\"libs-ui-component-custom_ranges-calendar-dropdown\"\n [class.text-[var(--libs-ui-color-dark)]]=\"checkShowListDropdown()[sideEnum.left + 'year']\"\n [class.text-[#6a7383]]=\"!checkShowListDropdown()[sideEnum.left + 'year']\">\n <div class=\"libs-ui-font-h4m\"\n [style.fontWeight]=\"500\"\n [style.fontStyle]=\"'normal'\">{{ calendarVariables.left().calendar && calendarVariables.left().calendar?.[1]?.[1]?.format(\" YYYY\") }}</div>\n <i class=\"libs-ui-icon-chevron-right text-[13px] text-[#6a7383]\"\n [class.text-[var(--libs-ui-color-dark)]]=\"checkShowListDropdown()[sideEnum.left + 'year']\"\n [style.fontWeight]=\"500\"\n [style.rotate]=\"!checkShowListDropdown()[sideEnum.left + 'year'] ? '90deg':'270deg'\"></i>\n </div>\n </libs_ui-components-dropdown>\n </div>\n </div>\n\n <div class=\"w-1/4 flex items-center relative\">\n @if (!calendarVariables.left().minDate || (calendarVariables.left().minDate?.isBefore(calendarVariables.left().calendar && calendarVariables.left().calendar?.firstDay))) {\n <div (click)=\"handlerClickPrev(sideEnum.left)\">\n <div class=\"flex items-center justify-center absolute left-0 top-[-3px]\">\n <i class=\"libs-ui-icon-chevron-right rotate-[180deg] text-[#6a7383] cursor-pointer libs-ui-component-custom_ranges-calendar-icon\"></i>\n </div>\n </div>\n }\n @if ((!calendarVariables.left().maxDate || calendarVariables.left().maxDate?.isAfter(calendarVariables.left().calendar && calendarVariables.left().calendar?.lastDay)) && isSingle()) {\n <div (click)=\"handlerClickNext(sideEnum.left)\">\n <div class=\"flex items-center justify-center ml-[12px] absolute right-0 top-[-3px]\">\n <i class=\"libs-ui-icon-chevron-right text-[#6a7383] cursor-pointer libs-ui-component-custom_ranges-calendar-icon\"></i>\n </div>\n </div>\n }\n </div>\n </div>\n }\n @if (!showDropdownsSelect() || !calendarVariables.left().dropdowns) {\n {{ dateOptions().monthNames && calendarVariables.left().calendar && dateOptions().monthNames[calendarVariables.left().calendar?.[1]?.[1]?.month() ?? -1] }}\n {{ calendarVariables.left().calendar && calendarVariables.left().calendar?.[1]?.[1]?.format(\" YYYY\") }}\n }\n </th>\n </tr>\n <tr class=\"week-days\">\n @for (dayofweek of dateOptions().daysOfWeek; track dayofweek) {\n <th>\n <span class=\"libs-ui-font-h6m text-[#6a7383]\"\n [style.fontWeight]=\"500\"\n [style.fontStyle]=\"'normal'\">{{ dayofweek }}</span>\n </th>\n }\n </tr>\n </thead>\n <tbody class=\"drp-animate\">\n @for (row of calendarVariables.left().calRows?.(); track row) {\n <tr class=\"h-[32px]\"\n [class]=\"calendarVariables.left().classes && calendarVariables.left().classes?.[row]?.classList\">\n @for (col of calendarVariables.left().calCols?.(); track col) {\n <td class=\"libs-ui-font-h5r\"\n [class.today]=\"calendarVariables.left().calendar && calendarVariables.left().calendar?.[row]?.[col]?.date() === today().date() && calendarVariables.left().calendar?.[row]?.[col]?.month() === today().month() && calendarVariables.left().calendar?.[row]?.[col]?.year() === today().year()\"\n [class]=\"calendarVariables.left().classes && calendarVariables.left().classes?.[row]?.[col]\"\n (click)=\"handlerPickerDate($event, sideEnum.left, row, col)\"\n (mouseenter)=\"handlerHoverDate($event, sideEnum.left, row, col)\">\n <span class=\"libs-ui-font-h5r\">{{ calendarVariables.left().calendar && calendarVariables.left().calendar?.[row]?.[col]?.date() }}</span>\n </td>\n }\n </tr>\n }\n </tbody>\n </table>\n }\n </div>\n @if (hasTimePicker()) {\n <div>\n <div class=\"flex justify-center column items-center pt-[12px]\">\n <div class=\"w-full flex justify-center items-center rounded-[4px] border\"\n [class.border-[#e6e8ed]]=\"!timePickerError()\"\n [class.border-[#ff5454]]=\"timePickerError()\">\n <libs_ui-components-inputs-input classInclude=\"!w-[30px] !p-0 !border-none !text-center libs-ui-font-h4s !text-[#071631]\"\n dataType=\"int\"\n [focusTimeOut]=\"0\"\n [blurTimeOut]=\"0\"\n [autoAddZeroLessThan10InTypeInt]=\"true\"\n [emitEmptyInDataTypeNumber]=\"true\"\n [maxValueNumber]=\"23\"\n [minValueNumber]=\"0\"\n [maxLength]=\"2\"\n [value]=\"timepickerValueItem().lefthour()\"\n (outInputEvent)=\"handlerInputEvent($event, 'lefthour')\"\n (outFunctionsControl)=\"handlerFunctionControl($event, sideEnum.left + 'hour')\"\n (outChange)=\"handlerChangeTimeValue($event, 'lefthour')\"\n (outFocusAndBlurEvent)=\"handlerFocusAndBlurTime($event, 'lefthour')\" />\n <span class=\"libs-ui-font-h3s text-[#333333]\">:</span>\n <libs_ui-components-inputs-input classInclude=\"!w-[30px] !p-0 !border-none !text-center !libs-ui-font-h4s !text-[#071631]\"\n [autoAddZeroLessThan10InTypeInt]=\"true\"\n [emitEmptyInDataTypeNumber]=\"true\"\n dataType=\"int\"\n [focusTimeOut]=\"0\"\n [blurTimeOut]=\"0\"\n [maxValueNumber]=\"59\"\n [minValueNumber]=\"0\"\n [maxLength]=\"2\"\n [value]=\"timepickerValueItem().leftminute()\"\n (outFunctionsControl)=\"handlerFunctionControl($event, sideEnum.left + 'minute')\"\n (outInputEvent)=\"handlerInputEvent($event, 'leftminute')\"\n (outChange)=\"handlerChangeTimeValue($event, 'leftminute')\"\n (outFocusAndBlurEvent)=\"handlerFocusAndBlurTime($event, 'leftminute')\" />\n </div>\n </div>\n </div>\n }\n </div>\n\n @if (!isSingle()) {\n <div class=\"libs-ui-component-custom_ranges-calendar right ml-[24px]\">\n <div class=\"rounded-[4px] bg-[#ffffff]\">\n @if (calendarVariables()) {\n <table>\n <thead>\n <tr>\n <th colspan=\"7\"\n class=\"month\">\n @if (showDropdownsSelect() && calendarVariables().left().dropdowns?.()) {\n <div class=\"!flex mb-[10px] w-full\">\n <div class=\"w-3/4 flex items-center\">\n <div class='mr-[8px]'>\n <libs_ui-components-dropdown [isNgContent]=\"true\"\n [zIndex]=\"zIndex() + 1\"\n [popoverCustomConfig]=\"{widthByParent:false,ignoreArrow:true,paddingLeftItem: true,classInclude: '!w-[130px]',position:{mode:'center',distance:0}}\"\n [listMaxItemShow]=\"10\"\n [listClickExactly]=\"false\"\n [listKeysDisable]=\"disableMonth().right()\"\n [listHasButtonUnSelectOption]=\"false\"\n [convertItemSelected]=\"convertItemMonth\"\n [listHiddenInputSearch]=\"true\"\n [listConfig]=\"listMonthsConfig()\"\n [listKeySelected]=\"listKeyToSelected().month\"\n [flagMouse]=\"flagMouse()\"\n [httpRequestDetailItemById]=\"monthHttpDetailConfig()\"\n (outFunctionsControl)=\"handlerFunctionControl($event, sideEnum.right + 'month')\"\n (outSelectKey)=\"handlerSelectedDropdown($event, sideEnum.right + 'month')\"\n (outChangStageFlagMouse)=\"handlerChangeFlagMouse($event)\"\n (outShowList)=\"handlerShowListDropdown($event, sideEnum.right + 'month')\">\n <div class=\"libs-ui-component-custom_ranges-calendar-dropdown\"\n [class.text-[var(--libs-ui-color-dark)]]=\"checkShowListDropdown()[sideEnum.right + 'month']\"\n [class.text-[#6a7383]]=\"!checkShowListDropdown()[sideEnum.right + 'month']\">\n <div class=\"libs-ui-font-h4m\"\n [class.text-[var(--libs-ui-color-dark)]]=\"checkShowListDropdown()[sideEnum.right + 'month']\"\n [style.fontWeight]=\"500\"\n [style.fontStyle]=\"'normal'\">\n {{ dateOptions().monthNames && calendarVariables().right().calendar && dateOptions().monthNames[ calendarVariables().right().calendar?.[1]?.[1]?.month() ?? -1] }}\n </div>\n <i class=\"libs-ui-icon-chevron-right text-[13px] text-[#6a7383]\"\n [style.fontWeight]=\"500\"\n [style.rotate]=\"!checkShowListDropdown()[sideEnum.right + 'month'] ? '90deg':'270deg'\"></i>\n </div>\n </libs_ui-components-dropdown>\n </div>\n <div>\n <libs_ui-components-dropdown [listMaxItemShow]=\"10\"\n [zIndex]=\"zIndex() + 1\"\n [isNgContent]=\"true\"\n [popoverCustomConfig]=\"{widthByParent:false,ignoreArrow:true,paddingLeftItem: true, classInclude: '!w-[110px]', position:{mode:'center', distance:0}}\"\n [listClickExactly]=\"false\"\n [listHasButtonUnSelectOption]=\"false\"\n [convertItemSelected]=\"convertItemYear\"\n [listHiddenInputSearch]=\"true\"\n [listConfig]=\"listRightYearConfig()\"\n [listKeySelected]=\"listKeyToSelected().year\"\n [flagMouse]=\"flagMouse()\"\n [httpRequestDetailItemById]=\"rightYearHttpDetailConfig()\"\n (outSelectKey)=\"handlerSelectedDropdown($event, sideEnum.right + 'year')\"\n (outFunctionsControl)=\"handlerFunctionControl($event, sideEnum.right + 'year')\"\n (outChangStageFlagMouse)=\"handlerChangeFlagMouse($event)\"\n (outShowList)=\"handlerShowListDropdown($event, sideEnum.right + 'year')\">\n <div class=\"libs-ui-component-custom_ranges-calendar-dropdown\"\n [class.text-[var(--libs-ui-color-dark)]]=\"checkShowListDropdown()[sideEnum.right + 'year']\"\n [class.text-[#6a7383]]=\"!checkShowListDropdown()[sideEnum.right + 'year']\">\n <div class=\"libs-ui-font-h4m\"\n [style.fontWeight]=\"500\"\n [style.fontStyle]=\"'normal'\">\n {{ calendarVariables().right().calendar && calendarVariables().right().calendar?.[1]?.[1]?.format(\"YYYY\") }}\n </div>\n <i class=\"libs-ui-icon-chevron-right text-[13px] text-[#6a7383]\"\n [class.text-[var(--libs-ui-color-dark)]]=\"checkShowListDropdown()[sideEnum.right + 'year']\"\n [style.fontWeight]=\"500\"\n [style.rotate]=\"!checkShowListDropdown()[sideEnum.right + 'year'] ? '90deg':'270deg'\"></i>\n </div>\n </libs_ui-components-dropdown>\n </div>\n </div>\n <div class=\"w-1/4 flex items-center relative\">\n @if (listKeyFromSelected().year && listKeyToSelected().year && !(((listKeyFromSelected().year +1) === listKeyToSelected().year) && (listKeyFromSelected().month === 12) && listKeyToSelected().month === 1)&& (listKeyFromSelected().year < listKeyToSelected().year) || listKeyFromSelected().month && listKeyToSelected().month && ((listKeyFromSelected().month + 1) < +listKeyToSelected().month)) {\n <div class=\"flex items-center justify-center absolute left-0 top-[-3px]\"\n (click)=\"handlerClickPrev(sideEnum.right)\">\n <i class=\"libs-ui-icon-chevron-right rotate-[180deg] text-[#6a7383] cursor-pointer libs-ui-component-custom_ranges-calendar-icon\"></i>\n </div>\n }\n @if (listKeyFromSelected().month && listKeyToSelected().month && (listKeyFromSelected().month > listKeyToSelected().month) && listKeyFromSelected().year && listKeyToSelected().year && (listKeyFromSelected().year === listKeyToSelected().year )) {\n <div class=\"bg-[#ffffff] w-[21px] h-[21px] cursor-none flex items-center justify-center rounded-[50px]\">\n </div>\n }\n @if (!calendarVariables().right().maxDate || (calendarVariables().right().maxDate?.isAfter(calendarVariables().right().calendar && calendarVariables().right().calendar?.lastDay))) {\n <div (click)=\"handlerClickNext(sideEnum.right)\">\n <div class=\"flex items-center justify-center ml-[12px] absolute right-0 top-[-3px]\">\n <i class=\"libs-ui-icon-chevron-right text-[#6a7383] cursor-pointer libs-ui-component-custom_ranges-calendar-icon\"></i>\n </div>\n </div>\n }\n </div>\n </div>\n }\n @if (!showDropdownsSelect() || !calendarVariables().right().dropdowns) {\n {{ dateOptions().monthNames && calendarVariables().right().calendar && dateOptions().monthNames[calendarVariables().right().calendar?.[1]?.[1]?.month() ?? -1] }}\n {{ calendarVariables().right().calendar && calendarVariables().right().calendar?.[1]?.[1]?.format(\"YYYY\") }}\n }\n </th>\n </tr>\n <tr class=\"week-days\">\n @for (dayofweek of dateOptions().daysOfWeek; track dayofweek) {\n <th>\n <span class=\"libs-ui-font-h6m text-[#6a7383]\"\n [style.fontWeight]=\"500\"\n [style.fontStyle]=\"'normal'\">{{ dayofweek }}</span>\n </th>\n }\n </tr>\n </thead>\n <tbody>\n @for (row of calendarVariables().right().calRows?.(); track row) {\n <tr class=\"h-[32px]\"\n [class]=\"calendarVariables().right().classes && calendarVariables().right().classes?.[row]?.classList\">\n @for (col of calendarVariables().right().calCols?.(); track col) {\n <td class=\"libs-ui-font-h5r\"\n [class]=\"calendarVariables().right().classes && calendarVariables().right().classes?.[row]?.[col]\"\n [class.today]=\"calendarVariables().right().calendar && calendarVariables().right().calendar?.[row]?.[col]?.date() === today().date() && calendarVariables().right().calendar?.[row]?.[col]?.month() === today().month() && calendarVariables().right().calendar &&calendarVariables().right().calendar?.[row]?.[col]?.year() === today().year()\"\n (click)=\"handlerPickerDate($event, sideEnum.right, row, col)\"\n (mouseenter)=\"handlerHoverDate($event, sideEnum.right, row, col)\">\n <span>{{ calendarVariables().right().calendar?.[row]?.[col]?.date() }}</span>\n </td>\n }\n </tr>\n }\n </tbody>\n </table>\n }\n </div>\n @if (hasTimePicker()) {\n <div>\n <div class=\"flex justify-center items-center pt-[12px]\">\n <div class=\"w-full flex justify-center items-center rounded-[4px] border\"\n [class.border-[#e6e8ed]]=\"!timePickerError()\"\n [class.border-[#ff5454]]=\"timePickerError()\">\n <libs_ui-components-inputs-input classInclude=\"!w-[30px] !p-0 !border-none !text-center !libs-ui-font-h4s !text-[#071631]\"\n dataType=\"int\"\n [autoAddZeroLessThan10InTypeInt]=\"true\"\n [emitEmptyInDataTypeNumber]=\"true\"\n [maxValueNumber]=\"23\"\n [minValueNumber]=\"0\"\n [focusTimeOut]=\"0\"\n [blurTimeOut]=\"0\"\n [maxLength]=\"2\"\n [value]=\"timepickerValueItem().righthour()\"\n (outChange)=\"handlerChangeTimeValue($event, 'righthour')\"\n (outInputEvent)=\"handlerInputEvent($event,'righthour')\"\n (outFunctionsControl)=\"handlerFunctionControl($event, 'righthour')\"\n (outFocusAndBlurEvent)=\"handlerFocusAndBlurTime($event, 'righthour')\" />\n <span class=\"libs-ui-font-h3s text-[#333333]\">:</span>\n <libs_ui-components-inputs-input classInclude=\"!w-[30px] !p-0 !border-none !text-center libs-ui-font-h4s !text-[#071631]\"\n dataType=\"int\"\n [autoAddZeroLessThan10InTypeInt]=\"true\"\n [emitEmptyInDataTypeNumber]=\"true\"\n [maxValueNumber]=\"59\"\n [minValueNumber]=\"0\"\n [focusTimeOut]=\"0\"\n [blurTimeOut]=\"0\"\n [maxLength]=\"2\"\n [value]=\"timepickerValueItem().rightminute()\"\n (outInputEvent)=\"handlerInputEvent($event,'rightminute')\"\n (outFunctionsControl)=\"handlerFunctionControl($event, 'rightminute')\"\n (outChange)=\"handlerChangeTimeValue($event, 'rightminute')\"\n (outFocusAndBlurEvent)=\"handlerFocusAndBlurTime($event, 'rightminute')\" />\n </div>\n </div>\n </div>\n }\n </div>\n }\n\n </div>\n <div>\n <div class=\"flex w-full\">\n @if (!isSingle() && hasTimePicker()) {\n <div class=\"mt-[8px] libs-ui-font-h7r text-[#ff5454] h-[14px]\">\n @if (timePickerError()) {\n <span>{{ 'i18n_date_compare_start_end_message_error' | translate }}</span>\n }\n </div>\n }\n </div>\n @if (!quickRangesArray().length || !isSingle()) {\n <div class=\" flex w-full pt-[16px] justify-between\">\n <div class=\"flex items-center\">\n @if (!isSingle()) {\n @if (!endDate()) {\n <div class=\"text-[#cdd0d6] libs-ui-font-h6r\">\n <span>{{ startDate()?.format('DD/MM/YYYY') }}</span>\n @if (hasTimePicker()) {\n <span> {{ computedDisplayTimeLeft() }}</span>\n }\n ‐\n <span>{{ startDate()?.format('DD/MM/YYYY') }}</span>\n @if (hasTimePicker()) {\n <span> {{ computedDisplayTimeRight() }}</span>\n }\n </div>\n }\n @if (endDate()) {\n <div class=\"text-[#cdd0d6] libs-ui-font-h6r\">\n <span>{{ startDate()?.format('DD/MM/YYYY') }}</span>\n @if (hasTimePicker()) {\n <span> {{ computedDisplayTimeLeft() }}</span>\n }\n ‐\n <span>{{ endDate()?.format('DD/MM/YYYY') }}</span>\n @if (hasTimePicker()) {\n <span> {{ computedDisplayTimeRight() }}</span>\n }\n </div>\n }\n }\n </div>\n\n <div class=\"flex\">\n <libs_ui-components-buttons-button class=\"mr-[12px]\"\n label=\"i18n_cancel\"\n type=\"button-third\"\n (outClick)=\"handlerClickCancel($event)\" />\n <libs_ui-components-buttons-button label=\"i18n_select\"\n (outClick)=\"handlerClickApply($event)\" />\n </div>\n </div>\n }\n </div>\n</div>\n", styles: [".libs-ui-component-custom_ranges-calendar .libs-ui-component-custom_ranges-calendar-dropdown{display:flex;align-items:center}.libs-ui-component-custom_ranges-calendar .libs-ui-component-custom_ranges-calendar-dropdown:hover{color:var(--libs-ui-color-light-1)}.libs-ui-component-custom_ranges-calendar .libs-ui-component-custom_ranges-calendar-dropdown:hover i:before,.libs-ui-component-custom_ranges-calendar .libs-ui-component-custom_ranges-calendar-dropdown:hover i:after{color:var(--libs-ui-color-light-1)!important}.libs-ui-component-custom_ranges-calendar table{border-collapse:inherit;border-spacing:0 2px}.libs-ui-component-custom_ranges-calendar th,.libs-ui-component-custom_ranges-calendar td{padding:0;text-align:center;min-width:32px}.libs-ui-component-custom_ranges-calendar th span,.libs-ui-component-custom_ranges-calendar td span{pointer-events:none}.libs-ui-component-custom_ranges-calendar .libs-ui-component-custom_ranges-calendar-icon:hover{color:var(--libs-ui-color-light-1)}.libs-ui-component-custom_ranges-calendar .libs-ui-component-custom_ranges-calendar-icon:hover i:before,.libs-ui-component-custom_ranges-calendar .libs-ui-component-custom_ranges-calendar-icon:hover i:after{color:var(--libs-ui-color-light-1)!important}.libs-ui-component-custom_ranges-calendar .libs-ui-component-custom_ranges-calendar-icon:before{font-size:20px}.libs-ui-component-custom_ranges-calendar td,.libs-ui-component-custom_ranges-calendar th{cursor:pointer;height:2em;width:2em}.libs-ui-component-custom_ranges-calendar td.available:hover,.libs-ui-component-custom_ranges-calendar th.available:hover{background-color:#f8f5fe;border-color:transparent;border-radius:8px;color:inherit;background-repeat:no-repeat;background-size:.5em;background-position:center;margin:.25em 0;opacity:.8;transform:scale(1);transition:all .45s cubic-bezier(.23,1,.32,1) 0ms}.libs-ui-component-custom_ranges-calendar td{margin:.25em 0;background-color:#fff;transition:background-color .2s ease;transform:scale(1);transition:all .45s cubic-bezier(.23,1,.32,1) 0ms;color:#071631!important}.libs-ui-component-custom_ranges-calendar td:hover{color:#8e61ee!important}.libs-ui-component-custom_ranges-calendar td.off,.libs-ui-component-custom_ranges-calendar td.off.in-range,.libs-ui-component-custom_ranges-calendar td.off.start-date,.libs-ui-component-custom_ranges-calendar td.off.end-date{background-color:#fff;border-color:transparent;color:#cdd0d6!important}.libs-ui-component-custom_ranges-calendar td.focus-off{background-color:#f8f5fe!important}.libs-ui-component-custom_ranges-calendar td.in-range{background-color:#f8f5fe;border-color:transparent;border-radius:0;color:#8e61ee!important}.libs-ui-component-custom_ranges-calendar td.today{position:relative;color:#8e61ee!important}.libs-ui-component-custom_ranges-calendar td.today:after{position:absolute;content:\"\";width:2px;height:2px;background-color:#8e61ee;left:49%;bottom:5px}.libs-ui-component-custom_ranges-calendar td.active{transition:background .3s ease-out;background:#0000001a}.libs-ui-component-custom_ranges-calendar td.active.today:after{position:absolute;content:\"\";background-color:#fff}.libs-ui-component-custom_ranges-calendar td.active.start-date{border-radius:8px 0 0 8px}.libs-ui-component-custom_ranges-calendar td.active.end-date{border-radius:0 8px 8px 0}.libs-ui-component-custom_ranges-calendar td.active.full-date{border-radius:8px}.libs-ui-component-custom_ranges-calendar td.active,.libs-ui-component-custom_ranges-calendar td.active:hover{background-color:#8e61ee;border-color:transparent;color:#fff!important}.libs-ui-component-custom_ranges-calendar th.month{width:auto}.libs-ui-component-custom_ranges-calendar td.disabled,.libs-ui-component-custom_ranges-calendar option.disabled{color:#999!important;cursor:not-allowed;text-decoration:line-through;background-color:#f4f5f7}.libs-ui-component-custom_ranges-calendar .dropdowns{background-repeat:no-repeat;background-size:10px;background-position-y:center;background-position-x:right}.libs-ui-component-custom_ranges-calendar th.month>div{position:relative;display:inline-block}@media (min-width: 564px){.libs-ui-component-custom_ranges{width:auto}}\n"] }]
|
|
1256
1256
|
}], ctorParameters: () => [] });
|
|
1257
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FsZW5kYXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy11aS9jb21wb25lbnRzL2RhdGV0aW1lL3BpY2tlci9zcmMvY3VzdG9tLXJhbmdlcy9jYWxlbmRhci9jYWxlbmRhci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzLXVpL2NvbXBvbmVudHMvZGF0ZXRpbWUvcGlja2VyL3NyYy9jdXN0b20tcmFuZ2VzL2NhbGVuZGFyL2NhbGVuZGFyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLDZEQUE2RDtBQUM3RCx1REFBdUQ7QUFDdkQsT0FBTyxFQUFFLHVCQUF1QixFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFjLE1BQU0sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFxQixNQUFNLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQWtCLE1BQU0sZUFBZSxDQUFDO0FBQ2hNLE9BQU8sRUFBRSxzQ0FBc0MsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQzVGLE9BQU8sRUFBaUQsaUNBQWlDLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUNoSSxPQUFPLEVBQWtELG9DQUFvQyxFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFLeEksT0FBTyxFQUFFLE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM5QyxPQUFPLEVBQUUsZUFBZSxFQUFFLGdCQUFnQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDeEUsT0FBTyxLQUFLLE1BQU0sT0FBTyxDQUFDO0FBQzFCLE9BQU8sT0FBTyxNQUFNLHNCQUFzQixDQUFDO0FBQzNDLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxtQkFBbUIsRUFBRSxrQkFBa0IsRUFBRSxrQkFBa0IsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQ2pJLE9BQU8sRUFBRSxnQkFBZ0Is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QUFJLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUM7UUFDM0UsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUM7UUFFdkQsSUFBSSxDQUFDLGVBQWUsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLEVBQUU7WUFDcEMsT0FBTyxDQUFDLElBQUksS0FBSyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsRUFBRTtnQkFDckUsV0FBVyxDQUFDLElBQUksQ0FBQyxHQUFHLEtBQWUsQ0FBQztnQkFFcEMsT0FBTyxXQUFXLENBQUM7WUFDckIsQ0FBQyxDQUFDLENBQUM7WUFFSCxPQUFPLE9BQU8sQ0FBQztRQUNqQixDQUFDLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxJQUFJLEtBQUssVUFBVSxJQUFJLElBQUksS0FBSyxXQUFXLENBQUMsSUFBSSxLQUFLLEtBQUssU0FBUyxFQUFFLENBQUM7WUFDekUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7WUFFdkIsT0FBTztRQUNULENBQUM7UUFDRCxJQUFJLENBQUMsR0FBRyxLQUFLLEVBQUUsQ0FBQyxNQUFNLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLE1BQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUks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LE9BQU8sSUFBSSxJQUFJLEVBQUUsQ0FBQztRQUNwQixDQUFDO1FBRUQsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQsV0FBVztRQUNULE9BQU87SUFDVCxDQUFDO3dHQTc2Q1UsMkRBQTJEOzRGQUEzRCwyREFBMkQsb2lGQ3RDeEUsZ3AwQkFzWkEsNG9JRHRYSSxlQUFlLDRGQUNmLGlDQUFpQyxtekRBQ2pDLG9DQUFvQyw4OUNBQ3BDLHNDQUFzQzs7NEZBRzdCLDJEQUEyRDtrQkFkdkUsU0FBUzsrQkFFRSwyREFBMkQsY0FHekQsSUFBSSxtQkFDQyx1QkFBdUIsQ0FBQyxNQUFNLFdBQ3RDO3dCQUNQLGVBQWU7d0JBQ2YsaUNBQWlDO3dCQUNqQyxvQ0FBb0M7d0JBQ3BDLHNDQUFzQztxQkFDdkMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLWV4cHJlc3Npb25zICovXG4vKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55ICovXG5pbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LCBjb21wdXRlZCwgZWZmZWN0LCBFbGVtZW50UmVmLCBpbmplY3QsIGlucHV0LCBtb2RlbCwgT25EZXN0cm95LCBPbkluaXQsIG91dHB1dCwgc2lnbmFsLCB1bnRyYWNrZWQsIHZpZXdDaGlsZCwgV3JpdGFibGVTaWduYWwgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IHsgTGlic1VpQ29tcG9uZW50c0J1dHRvbnNCdXR0b25Db21wb25lbnQgfSBmcm9tIFwiQGxpYnMtdWkvY29tcG9uZW50cy1idXR0b25zLWJ1dHRvblwiO1xuaW1wb3J0IHsgSURyb3Bkb3duRnVuY3Rpb25Db250cm9sRXZlbnQsIElFbWl0U2VsZWN0S2V5LCBMaWJzVWlDb21wb25lbnRzRHJvcGRvd25Db21wb25lbnQgfSBmcm9tIFwiQGxpYnMtdWkvY29tcG9uZW50cy1kcm9wZG93blwiO1xuaW1wb3J0IHsgSUZvY3VzQW5kQmx1ckV2ZW50LCBJSW5wdXRGdW5jdGlvbkNvbnRyb2xFdmVudCwgTGlic1VpQ29tcG9uZW50c0lucHV0c0lucHV0Q29tcG9uZW50IH0gZnJvbSBcIkBsaWJzLXVpL2NvbXBvbmVudHMtaW5wdXRzLWlucHV0XCI7XG5pbXBvcnQgeyBJTGlzdENvbmZpZ0l0ZW0gfSBmcm9tIFwiQGxpYnMtdWkvY29tcG9uZW50cy1saXN0XCI7XG5pbXBvcnQgeyBJRmxhZ01vdXNlIH0gZnJvbSBcIkBsaWJzLXVpL2NvbXBvbmVudHMtcG9wb3ZlclwiO1xuaW1wb3J0IHsgSUV2ZW50IH0gZnJvbSBcIkBsaWJzLXVpL2ludGVyZmFjZXMtdHlwZXNcIjtcbmltcG9ydCB7IElIdHRwUmVxdWVzdENvbmZpZyB9IGZyb20gXCJAbGlicy11aS9zZXJ2aWNlcy1odHRwLXJlcXVlc3RcIjtcbmltcG9ydCB7IGlzRW1wdHksIHNldCB9IGZyb20gXCJAbGlicy11aS91dGlsc1wiO1xuaW1wb3J0IHsgVHJhbnNsYXRlTW9kdWxlLCBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSBcIkBuZ3gtdHJhbnNsYXRlL2NvcmVcIjtcbmltcG9ydCBkYXlqcyBmcm9tICdkYXlqcyc7XG5pbXBvcnQgaXNvV2VlayBmcm9tICdkYXlqcy9wbHVnaW4vaXNvV2Vlayc7XG5pbXBvcnQgeyBnZXRNb250aHNEZXRhaWxCeUlkLCBnZXRNb250aHNMaXN0Q29uZmlnLCBnZXRZZWFyc0RldGFpbEJ5SWQsIGdldFllYXJzTGlzdENvbmZpZyB9IGZyb20gXCIuLi8uLi9kZWZpbmVzL2NhbGVuZGFyLmRlZmluZVwiO1xuaW1wb3J0IHsgREVGQVVMVF9NQVhfWUVBUiwgREVGQVVMVF9NSU5fWUVBUiB9IGZyb20gXCIuLi8uLi9kZWZpbmVzL2NvbW1vbi1kYXRlLmRlZmluZVwiO1xuaW1wb3J0IHsgZGVmYXVsdExvY2FsZUNvbmZpZywgZ2V0RGF0ZU9wdGlvbnMgfSBmcm9tIFwiLi4vLi4vZGVmaW5lcy9kYXRlLW9wdGlvbnMuZGVmaW5lXCI7XG5pbXBvcnQgeyBJRW1pdERhdGVDYWxlbmRhciB9IGZyb20gXCIuLi8uLi9pbnRlcmZhY2VzL2NhbGVuZGFyLWVtaXQuaW50ZXJmYWNlXCI7XG5pbXBvcnQgeyBJQ2FsZW5kYXIsIElDYWxlbmRhclZhcmlhYmxlcywgSURhdGVSYW5nZSwgSVNwbGl0UGlja2VyRGF0ZSwgU2lkZUVudW0gfSBmcm9tIFwiLi4vLi4vaW50ZXJmYWNlcy9jYWxlbmRhci12YXJpYWJsZXMuaW50ZXJmYWNlXCI7XG5pbXBvcnQgeyBJQ2FsZW5kYXJGdW5jdGlvbkNvbnRyb2xFdmVudCB9IGZyb20gXCIuLi8uLi9pbnRlcmZhY2VzL2Z1bmN0aW9uLWNvbnRyb2wuaW50ZXJmYWNlXCI7XG5pbXBvcnQgeyBMb2NhbGl6YXRpb25Db25maWcgfSBmcm9tIFwiLi4vLi4vaW50ZXJmYWNlcy9waWNrZXIuaW50ZXJmYWNlXCI7XG5pbXBvcnQgeyBJQ2hlY2tUaW1lcGlja2VyU2VsZWN0ZWQsIElTZWxlY3RlZE9sZCwgSVRpbWVwaWNrZXJJdGVtVmFsdWUsIElUaW1lcGlja2VyVmFyaWFibGVzLCBJVGltZXBpY2tlclZhcmlhYmxlc1NpZGUgfSBmcm9tIFwiLi4vLi4vaW50ZXJmYWNlcy90aW1lLXZhcmlhYmxlcy5pbnRlcmZhY2VcIjtcbmRheWpzLmV4dGVuZChpc29XZWVrKTtcblxuQENvbXBvbmVudCh7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAYW5ndWxhci1lc2xpbnQvY29tcG9uZW50LXNlbGVjdG9yXG4gIHNlbGVjdG9yOiAnbGlic191aS1jb21wb25lbnRzLWRhdGV0aW1lLXBpY2tlci1jdXN0b21fcmFuZ2VzLWNhbGVuZGFyJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2NhbGVuZGFyLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vY2FsZW5kYXIuY29tcG9uZW50LnNjc3MnXSxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIGltcG9ydHM6IFtcbiAgICBUcmFuc2xhdGVNb2R1bGUsXG4gICAgTGlic1VpQ29tcG9uZW50c0Ryb3Bkb3duQ29tcG9uZW50LFxuICAgIExpYnNVaUNvbXBvbmVudHNJbnB1dHNJbnB1dENvbXBvbmVudCxcbiAgICBMaWJzVWlDb21wb25lbnRzQnV0dG9uc0J1dHRvbkNvbXBvbmVudFxuICBdXG59KVxuZXhwb3J0IGNsYXNzIExpYnNVaUNvbXBvbmVudHNEYXRldGltZVBpY2tlckN1c3RvbVJhbmdlc0NhbGVuZGFyQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuICAvKiogUFJPUEVSVFkgKi9cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IHNpZGVFbnVtID0gU2lkZUVudW07XG4gIHByb3RlY3RlZCBjYWxlbmRhclZhcmlhYmxlcyA9IHNpZ25hbDxJQ2FsZW5kYXJWYXJpYWJsZXM+KHsgbGVmdDogc2lnbmFsKHt9KSwgcmlnaHQ6IHNpZ25hbCh7fSkgfSk7XG4gIHByb3RlY3RlZCB0aW1lcGlja2VyVmFyaWFibGVzID0gc2lnbmFsPElUaW1lcGlja2VyVmFyaWFibGVzPih7IGxlZnQ6IHNpZ25hbCh7IHNlbGVjdGVkSG91cjogMCwgc2VsZWN0ZWRNaW51dGU6IDAgfSksIHJpZ2h0OiBzaWduYWwoeyBzZWxlY3RlZEhvdXI6IDIzLCBzZWxlY3RlZE1pbnV0ZTogNTkgfSkgfSk7XG4gIHByb3RlY3RlZCBkaXNhYmxlTW9udGggPSBzaWduYWw8eyBsZWZ0OiBXcml0YWJsZVNpZ25hbDxBcnJheTxhbnk+PiwgcmlnaHQ6IFdyaXRhYmxlU2lnbmFsPEFycmF5PGFueT4+IH0+KHsgbGVmdDogc2lnbmFsKFtdKSwgcmlnaHQ6IHNpZ25hbChbXSkgfSk7XG4gIHByb3RlY3RlZCB0b2RheSA9IHNpZ25hbDxkYXlqcy5EYXlqcz4oZGF5anMoKSk7XG4gIHByb3RlY3RlZCBsaXN0S2V5RnJvbVNlbGVjdGVkID0gc2lnbmFsPHsgbW9udGg6IGFueSwgeWVhcjogYW55IH0+KHsgbW9udGg6IHVuZGVmaW5lZCwgeWVhcjogdW5kZWZpbmVkIH0pO1xuICBwcm90ZWN0ZWQgbGlzdEtleVRvU2VsZWN0ZWQgPSBzaWduYWw8eyBtb250aDogYW55LCB5ZWFyOiBhbnkgfT4oeyBtb250aDogdW5kZWZpbmVkLCB5ZWFyOiB1bmRlZmluZWQgfSk7XG4gIHByb3RlY3RlZCBjaGVja1Nob3dMaXN0RHJvcGRvd24gPSBzaWduYWw8eyBba2V5OiBzdHJpbmddOiBib29sZWFuIH0+KHt9KTtcbiAgcHJvdGVjdGVkIHNlbGVjdGVkUXVpY2tSYW5nZSA9IHNpZ25hbDxzdHJpbmc+KCcnKTtcbiAgcHJvdGVjdGVkIGxlZnRDYWxlbmRhciA9IHNpZ25hbDx7IGNhbGVuZGFyPzogSUNhbGVuZGFyLCBtb250aD86IGRheWpzLkRheWpzIH0+KHt9KTtcbiAgcHJvdGVjdGVkIHJpZ2h0Q2FsZW5kYXIgPSBzaWduYWw8eyBjYWxlbmRhcj86IElDYWxlbmRhciwgbW9udGg/OiBkYXlqcy5EYXlqcyB9Pih7fSk7XG5cbiAgcHJvdGVjdGVkIGxpc3RNb250aHNDb25maWcgPSBzaWduYWw8SUxpc3RDb25maWdJdGVtIHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xuICBwcm90ZWN0ZWQgbW9udGhIdHRwRGV0YWlsQ29uZmlnID0gc2lnbmFsPElIdHRwUmVxdWVzdENvbmZpZz4oZ2V0TW9udGhzRGV0YWlsQnlJZCgpKTtcbiAgcHJvdGVjdGVkIGxpc3RMZWZ0WWVhckNvbmZpZyA9IHNpZ25hbDxJTGlzdENvbmZpZ0l0ZW0gfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XG4gIHByb3RlY3RlZCBsaXN0UmlnaHRZZWFyQ29uZmlnID0gc2lnbmFsPElMaXN0Q29uZmlnSXRlbSB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcbiAgcHJvdGVjdGVkIGxpc3RZZWFyQ29uZmlnID0gc2lnbmFsPElMaXN0Q29uZmlnSXRlbSB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcbiAgcHJvdGVjdGVkIGxlZnRZZWFySHR0cERldGFpbENvbmZpZyA9IHNpZ25hbDxJSHR0cFJlcXVlc3RDb25maWcgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XG4gIHByb3RlY3RlZCByaWdodFllYXJIdHRwRGV0YWlsQ29uZmlnID0gc2lnbmFsPElIdHRwUmVxdWVzdENvbmZpZyB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcblxuICBwcm90ZWN0ZWQgdGltZVBpY2tlckVycm9yID0gc2lnbmFsPGJvb2xlYW4+KGZhbHNlKTtcbiAgcHJvdGVjdGVkIGNvbXB1dGVkRGlzcGxheVRpbWVMZWZ0ID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5jb21wdXRlZERpc3BsYXlUaW1lKHsgc2VsZWN0ZWRIb3VyOiB0aGlzLnRpbWVwaWNrZXJWYWx1ZUl0ZW0oKS5sZWZ0aG91cigpLCBzZWxlY3RlZE1pbnV0ZTogdGhpcy50aW1lcGlja2VyVmFsdWVJdGVtKCkubGVmdG1pbnV0ZSgpIH0pKTtcbiAgcHJvdGVjdGVkIGNvbXB1dGVkRGlzcGxheVRpbWVSaWdodCA9IGNvbXB1dGVkKCgpID0+IHRoaXMuY29tcHV0ZWREaXNwbGF5VGltZSh7IHNlbGVjdGVkSG91cjogdGhpcy50aW1lcGlja2VyVmFsdWVJdGVtKCkucmlnaHRob3VyKCksIHNlbGVjdGVkTWludXRlOiB0aGlzLnRpbWVwaWNrZXJWYWx1ZUl0ZW0oKS5yaWdodG1pbnV0ZSgpIH0pKTtcbiAgcHJvdGVjdGVkIGNvbXB1dGVkRGlzcGxheVRpbWVMZWZ0SW5wdXRIb3VyID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5jb21wdXRlZERpc3BsYXlUaW1lSW5wdXQoU2lkZUVudW0ubGVmdCwgJ2hvdXInKSk7XG4gIHByb3RlY3RlZCBjb21wdXRlZERpc3BsYXlUaW1lTGVmdElucHV0TWludXRlID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5jb21wdXRlZERpc3BsYXlUaW1lSW5wdXQoU2lkZUVudW0ubGVmdCwgJ21pbnV0ZScpKTtcbiAgcHJvdGVjdGVkIGNvbXB1dGVkRGlzcGxheVRpbWVSaWdodElucHV0SG91ciA9IGNvbXB1dGVkKCgpID0+IHRoaXMuY29tcHV0ZWREaXNwbGF5VGltZUlucHV0KFNpZGVFbnVtLnJpZ2h0LCAnaG91cicpKTtcbiAgcHJvdGVjdGVkIGNvbXB1dGVkRGlzcGxheVRpbWVSaWdodElucHV0TWludXRlID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5jb21wdXRlZERpc3BsYXlUaW1lSW5wdXQoU2lkZUVudW0ucmlnaHQsICdtaW51dGUnKSk7XG4gIHByb3RlY3RlZCB0aW1lcGlja2VyVmFsdWVJdGVtID0gc2lnbmFsPElUaW1lcGlja2VySXRlbVZhbHVlPih7IGxlZnRob3VyOiBzaWduYWwoMCksIGxlZnRtaW51dGU6IHNpZ25hbCgwKSwgcmlnaHRob3VyOiBzaWduYWwoMCksIHJpZ2h0bWludXRlOiBzaWduYWwoMCkgfSk7XG5cbiAgcHJpdmF0ZSBmdW5jdGlvbkNvbnRyb2xzID0gbmV3IE1hcDxzdHJpbmcsIElEcm9wZG93bkZ1bmN0aW9uQ29udHJvbEV2ZW50IHwgSUlucHV0RnVuY3Rpb25Db250cm9sRXZlbnQ+KCk7XG4gIHByaXZhdGUgcGlja2luZ0RhdGUgPSBzaWduYWw8Ym9vbGVhbj4oZmFsc2UpO1xuICBwcml2YXRlIGlzU2hvd24gPSBzaWduYWw8Ym9vbGVhbj4oZmFsc2UpO1xuICBwcml2YXRlIG5vd0hvdmVyZWREYXRlID0gc2lnbmFsPGRheWpzLkRheWpzIHwgbnVsbD4obnVsbCk7XG4gIHByaXZhdGUgdGltZVBpY2tlckluY3JlbWVudCA9IHNpZ25hbDxudW1iZXI+KDEpO1xuICBwcml2YXRlIHNlbGVjdGVkTGFiZWwgPSBzaWduYWw8c3RyaW5nIHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xuICBwcml2YXRlIGtleUNvZGVCYWNrc3BhY2UgPSBzaWduYWw8Ym9vbGVhbj4oZmFsc2UpO1xuICBwcml2YXRlIGNoZWNrQmFja3NwYWNlRm9jdXMgPSBzaWduYWw8SVRpbWVwaWNrZXJJdGVtVmFsdWU+KHsgbGVmdGhvdXI6IHNpZ25hbCgxKSwgbGVmdG1pbnV0ZTogc2lnbmFsKDEpLCByaWdodGhvdXI6IHNpZ25hbCgxKSwgcmlnaHRtaW51dGU6IHNpZ25hbCgxKSB9KTtcbiAgcHJpdmF0ZSBpc1plcm8gPSBzaWduYWw8Ym9vbGVhbiB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcbiAgcHJpdmF0ZSBvbGREYXRlID0gc2lnbmFsPElTZWxlY3RlZE9sZD4oeyBzdGFydDogZGF5anMoMCksIGVuZDogZGF5anMoMCkgfSk7XG4gIHByaXZhdGUgaXNTZWxlY3RlZERhdGEgPSBzaWduYWw8SUNoZWNrVGltZXBpY2tlclNlbGVjdGVkPih7IGxlZnRtb250aDogZmFsc2UsIGxlZnR5ZWFyOiBmYWxzZSwgcmlnaHRtb250aDogZmFsc2UsIHJpZ2h0eWVhcjogZmFsc2UgfSk7XG4gIHByaXZhdGUgc3BsaXRQaWNrZXJEYXRlID0gc2lnbmFsPElTcGxpdFBpY2tlckRhdGU+KHsgc3RhcnQ6IHNpZ25hbCh7IG1vbnRoOiAwLCB5ZWFyOiAwLCBkYXk6IDAsIGhvdXI6IDAsIG1pbnV0ZTogMCB9KSwgZW5kOiBzaWduYWwoeyBtb250aDogMCwgeWVhcjogMCwgZGF5OiAwLCBob3VyOiAyMywgbWludXRlOiA1OSB9KSB9KTtcblxuICAvKiogSU5QVVQgKi9cbiAgcmVhZG9ubHkgcXVpY2tSYW5nZXNBcnJheSA9IGlucHV0PEFycmF5PElEYXRlUmFuZ2U+PihbXSk7XG4gIHJlYWRvbmx5IHpJbmRleCA9IGlucHV0PG51bWJlciwgbnVtYmVyPigxMjAwLCB7IHRyYW5zZm9ybTogKHZhbHVlKSA9PiB2YWx1ZSA/PyAxMjAwIH0pO1xuICByZWFkb25seSBjbGFzc0luY2x1ZGUgPSBpbnB1dDxzdHJpbmc+KCcnKTtcbiAgcmVhZG9ubHkgaXNTaW5nbGUgPSBpbnB1dDxib29sZWFuPihmYWxzZSk7XG4gIHJlYWRvbmx5IHNob3dEcm9wZG93bnNTZWxlY3QgPSBpbnB1dDxib29sZWFuPih0cnVlKTtcbiAgcmVhZG9ubHkgaGFzVGltZVBpY2tlciA9IGlucHV0PGJvb2xlYW4+KHRydWUpO1xuICByZWFkb25seSBmbGFnTW91c2UgPSBpbnB1dDxJRmxhZ01vdXNlPih7IGlzTW91c2VFbnRlcjogZmFsc2UsIGlzTW91c2VFbnRlckNvbnRlbnQ6IGZhbHNlIH0pO1xuICByZWFkb25seSBkYXRlT3B0aW9ucyA9IGlucHV0PExvY2FsaXphdGlvbkNvbmZpZz4oeyAuLi5kZWZhdWx0TG9jYWxlQ29uZmlnKCksIC4uLmdldERhdGVPcHRpb25zKCkgfSk7XG4gIHJlYWRvbmx5IGF1dG9BcHBseSA9IGlucHV0PGJvb2xlYW4+KGZhbHNlKTtcbiAgcmVhZG9ubHkgaGFzU2Vjb25kUGlja2VyID0gaW5wdXQ8Ym9vbGVhbj4oZmFsc2UpO1xuICByZWFkb25seSBzaG93UmFuZ2VMYWJlbE9uSW5wdXQgPSBpbnB1dDxib29sZWFuIHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xuXG4gIHJlYWRvbmx5IHN0YXJ0RGF0ZSA9IG1vZGVsPGRheWpzLkRheWpzIHwgdW5kZWZpbmVkPihkYXlqcygpLnN0YXJ0T2YoJ2RheScpKTtcbiAgcmVhZG9ubHkgZW5kRGF0ZSA9IG1vZGVsPGRheWpzLkRheWpzIHwgdW5kZWZpbmVkPihkYXlqcygpLmVuZE9mKCdkYXknKSk7XG4gIHJlYWRvbmx5IG1pbkRhdGUgPSBpbnB1dDxkYXlqcy5EYXlqcyB8IHN0cmluZyB8IHVuZGVmaW5lZCwgZGF5anMuRGF5anMgfCBzdHJpbmcgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCwgeyB0cmFuc2Zvcm06IHRoaXMudHJhbnNmb3JtTWluTWF4RGF0ZS5iaW5kKHRoaXMpIH0pO1xuICByZWFkb25seSBtYXhEYXRlID0gaW5wdXQ8ZGF5anMuRGF5anMgfCBzdHJpbmcgfCB1bmRlZmluZWQsIGRheWpzLkRheWpzIHwgc3RyaW5nIHwgdW5kZWZpbmVkPih1bmRlZmluZWQsIHsgdHJhbnNmb3JtOiB0aGlzLnRyYW5zZm9ybU1pbk1heERhdGUuYmluZCh0aGlzKSB9KTtcblxuICAvKiogT1VUUFVUICovXG4gIHJlYWRvbmx5IG91dENoYW5nU3RhZ2VGbGFnTW91c2UgPSBvdXRwdXQ8SUZsYWdNb3VzZT4oKTtcbiAgLy8gcmVhZG9ubHkgb3V0U3RhcnREYXRlQ2hhbmdlZCA9IG91dHB1dDx7IHN0YXJ0RGF0ZTogZGF5anMuRGF5anMgfCB1bmRlZmluZWQgfT4oKTtcbiAgLy8gcmVhZG9ubHkgb3V0RW5kRGF0ZUNoYW5nZWQgPSBvdXRwdXQ8eyBlbmREYXRlOiBkYXlqcy5EYXlqcyB8IHVuZGVmaW5lZCB9PigpO1xuICByZWFkb25seSBvdXRQaWNrZXJEYXRlID0gb3V0cHV0PElFbWl0RGF0ZUNhbGVuZGFyPigpO1xuICAvLyByZWFkb25seSBvdXRSYW5nZUNsaWNrZWQ6IEV2ZW50RW1pdHRlcjxJUmFuZ2VzQ2xpY2tlZD4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIHJlYWRvbmx5IG91dENhbmNlbCA9IG91dHB1dDxzdHJpbmc+KCk7XG4gIHJlYWRvbmx5IG91dFVwZGF0ZVdpZHRoID0gb3V0cHV0PG51bWJlcj4oKTtcbiAgcmVhZG9ubHkgb3V0RnVuY3Rpb25zQ29udHJvbCA9IG91dHB1dDxJQ2FsZW5kYXJGdW5jdGlvbkNvbnRyb2xFdmVudD4oKTtcblxuICAvKiogSU5KRUNUSU9OICovXG4gIHByaXZhdGUgdHJhbnNsYXRlID0gaW5qZWN0KFRyYW5zbGF0ZVNlcnZpY2UpO1xuXG4gIHJlYWRvbmx5IHBpY2tlckNvbnRhaW5lciA9IHZpZXdDaGlsZDxFbGVtZW50UmVmPigncGlja2VyQ29udGFpbmVyJyk7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5saXN0TW9udGhzQ29uZmlnLnNldChnZXRNb250aHNMaXN0Q29uZmlnKHRoaXMudHJhbnNsYXRlKSk7XG5cbiAgICBlZmZlY3QoKCkgPT4ge1xuICAgICAgY29uc3Qgb2xkU3RhcnQgPSB0aGlzLnN0YXJ0RGF0ZSgpPy5jbG9uZSgpO1xuICAgICAgY29uc3Qgb2xkRW5kID0gdGhpcy5lbmREYXRlKCk/LmNsb25lKCk7XG5cbiAgICAgIHVudHJhY2tlZCgoKSA9PiB7XG4gICAgICAgIHRoaXMub2xkRGF0ZS5zZXQoeyBzdGFydDogb2xkU3RhcnQsIGVuZDogb2xkRW5kIH0pO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBuZ09uSW5pdCgpIHtcbiAgICBjb25zdCBzdGFydERhdGUgPSB0aGlzLnN0YXJ0RGF0ZSgpPy5jbG9uZSgpO1xuICAgIGNvbnN0IGVuZERhdGUgPSB0aGlzLmVuZERhdGUoKT8uY2xvbmUoKTtcblxuICAgIHRoaXMuc3BsaXRQaWNrZXJEYXRlLnVwZGF0ZShjdXJyZW50ID0+IHtcbiAgICAgIGN1cnJlbnQuc3RhcnQudXBkYXRlKHNpZGVDdXJyZW50ID0+IHtcbiAgICAgICAgc2lkZUN1cnJlbnQuZGF5ID0gKHN0YXJ0RGF0ZSA/PyBkYXlqcygpLnN0YXJ0T2YoJ2RheScpKS5kYXRlKCk7XG5cbiAgICAgICAgcmV0dXJuIHNpZGVDdXJyZW50O1xuICAgICAgfSk7XG4gICAgICBjdXJyZW50LmVuZC51cGRhdGUoc2lkZUN1cnJlbnQgPT4ge1xuICAgICAgICBzaWRlQ3VycmVudC5kYXkgPSAoZW5kRGF0ZSA/PyBkYXlqcygpLmVuZE9mKCdkYXknKSkuZGF0ZSgpO1xuXG4gICAgICAgIHJldHVybiBzaWRlQ3VycmVudDtcbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm4gY3VycmVudDtcbiAgICB9KTtcbiAgICBpZiAoc3RhcnREYXRlKSB7XG4gICAgICB0aGlzLnVwZGF0ZUVsZW1lbnQoKTtcbiAgICB9XG4gICAgaWYgKHN0YXJ0RGF0ZSAmJiB0aGlzLmhhc1RpbWVQaWNrZXIoKSkge1xuICAgICAgdGhpcy5zZXRTdGFydERhdGUoc3RhcnREYXRlKTtcbiAgICAgIHRoaXMucmVuZGVyVGltZVBpY2tlcihTaWRlRW51bS5sZWZ0KTtcbiAgICB9XG5cbiAgICBpZiAoZW5kRGF0ZSAmJiB0aGlzLmhhc1RpbWVQaWNrZXIoKSkge1xuICAgICAgdGhpcy5zZXRFbmREYXRlKGVuZERhdGUpO1xuICAgICAgdGhpcy5yZW5kZXJUaW1lUGlja2VyKFNpZGVFbnVtLnJpZ2h0KTtcbiAgICB9XG4gICAgdGhpcy5idWlsZENvbmZpZ1llYXIoU2lkZUVudW0ubGVmdCk7XG4gICAgdGhpcy5idWlsZENvbmZpZ1llYXIoU2lkZUVudW0ucmlnaHQsIHN0YXJ0RGF0ZT8ueWVhcigpKTtcbiAgICB0aGlzLnVwZGF0ZU1vbnRoc0luVmlldygpO1xuICAgIHRoaXMucmVuZGVyQ2FsZW5kYXIoU2lkZUVudW0ubGVmdCk7XG4gICAgdGhpcy5yZW5kZXJDYWxlbmRhcihTaWRlRW51bS5yaWdodCk7XG4gICAgLy8gdGhpcy5yZW5kZXJSYW5nZXMoKTtcbiAgICB0aGlzLmZvcm1hdE1vbnRoWWVhcigpO1xuICAgIHRoaXMub3V0VXBkYXRlV2lkdGguZW1pdCgxKTtcbiAgICB0aGlzLnVwZGF0ZUVsZW1lbnQoKTtcbiAgICB0aGlzLnRpbWVwaWNrZXJWYWx1ZUl0ZW0uc2V0KHtcbiAgICAgIGxlZnRob3VyOiBzaWduYWwodGhpcy50aW1lcGlja2VyVmFyaWFibGVzKCkubGVmdCgpLnNlbGVjdGVkSG91ciksXG4gICAgICByaWdodGhvdXI6IHNpZ25hbCh0aGlzLnRpbWVwaWNrZXJWYXJpYWJsZXMoKS5yaWdodCgpLnNlbGVjdGVkSG91ciksXG4gICAgICBsZWZ0bWludXRlOiBzaWduYWwodGhpcy50aW1lcGlja2VyVmFyaWFibGVzKCkubGVmdCgpLnNlbGVjdGVkTWludXRlKSxcbiAgICAgIHJpZ2h0bWludXRlOiBzaWduYWwodGhpcy50aW1lcGlja2VyVmFyaWFibGVzKCkucmlnaHQoKS5zZWxlY3RlZE1pbnV0ZSlcbiAgICB9KTtcblxuICAgIC8vIHRoaXMub3V0RnVuY3Rpb25zQ29udHJvbC5lbWl0KHsgYnVpbGREZWZhdWx0UmFuZ2U6IHRoaXMuYnVpbGREZWZhdWx0UmFuZ2UuYmluZCh0aGlzKSwgYXBwbHlUb1NlbGVjdDogdGhpcy5hcHBseVRvU2VsZWN0LmJpbmQodGhpcykgfSlcbiAgfVxuXG4gIHByaXZhdGUgYnVpbGRDb25maWdZZWFyKHNpZGU6IFNpZGVFbnVtLCBzdGFydFllYXI/OiBudW1iZXIsKSB7XG4gICAgY29uc3QgbWluRGF0ZSA9IHRoaXMubWluRGF0ZSgpIGFzIGRheWpzLkRheWpzO1xuICAgIGNvbnN0IG1heERhdGUgPSB0aGlzLm1heERhdGUoKSBhcyBkYXlqcy5EYXlqcztcblxuICAgIGNvbnN0IGxpc3RMZWZ0WWVhciA9IFtdO1xuICAgIGNvbnN0IGxpc3RSaWdodFllYXIgPSBbXTtcblxuICAgIGlmIChzaWRlID09PSBTaWRlRW51bS5sZWZ0KSB7XG4gICAgICBmb3IgKGxldCBpID0gKG1pbkRhdGUgPyBtaW5EYXRlLnllYXIoKSA6IERFRkFVTFRfTUlOX1lFQVIpOyBpIDw9IChtYXhEYXRlID8gbWF4RGF0ZT8ueWVhcigpIDogREVGQVVMVF9NQVhfWUVBUik7IGkrKykge1xuICAgICAgICBsaXN0TGVmdFllYXIucHVzaCh7XG4gICAgICAgICAgaWQ6IGksXG4gICAgICAgICAgbGFiZWw6IGAke2l9YFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIHRoaXMubGlzdExlZnRZZWFyQ29uZmlnLnNldChnZXRZZWFyc0xpc3RDb25maWcobGlzdExlZnRZZWFyKSk7XG4gICAgICB0aGlzLmxlZnRZZWFySHR0cERldGFpbENvbmZpZy5zZXQoZ2V0WWVhcnNEZXRhaWxCeUlkKGxpc3RMZWZ0WWVhcikpO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgZm9yIChsZXQgaSA9IChzdGFydFllYXIgPyBzdGFydFllYXIgOiBtaW5EYXRlID8gbWluRGF0ZS55ZWFyKCkgOiBkYXlqcygpLnllYXIoKSk7IGkgPD0gKG1heERhdGUgPyBtYXhEYXRlPy55ZWFyKCkgOiBERUZBVUxUX01BWF9ZRUFSKTsgaSsrKSB7XG4gICAgICBsaXN0UmlnaHRZZWFyLnB1c2goe1xuICAgICAgICBpZDogaSxcbiAgICAgICAgbGFiZWw6IGAke2l9YFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgdGhpcy5saXN0UmlnaHRZZWFyQ29uZmlnLnNldChnZXRZZWFyc0xpc3RDb25maWcobGlzdFJpZ2h0WWVhcikpO1xuICAgIHRoaXMucmlnaHRZZWFySHR0cERldGFpbENvbmZpZy5zZXQoZ2V0WWVhcnNEZXRhaWxCeUlkKGxpc3RSaWdodFllYXIpKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBoYW5kbGVyQ2hhbmdlRmxhZ01vdXNlKGZsYWdNb3VzZTogSUZsYWdNb3VzZSkge1xuICAgIHRoaXMub3V0Q2hhbmdTdGFnZUZsYWdNb3VzZS5lbWl0KGZsYWdNb3VzZSlcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlU3RhcnRFbmREYXRlKGRhdGU6IGRheWpzLkRheWpzKSB7XG4gICAgaWYgKCh0aGlzLmVuZERhdGUoKSB8fCBkYXRlLmlzQmVmb3JlKHRoaXMuc3RhcnREYXRlKCksICdkYXknKSkpIHtcbiAgICAgIGlmICh0aGlzLmhhc1RpbWVQaWNrZXIoKSkge1xuICAgICAgICBkYXRlID0gdGhpcy5nZXREYXRlV2l0aFRpbWUoZGF0ZSwgU2lkZUVudW0ubGVmdCk7XG4gICAgICB9XG4gICAgICB0aGlzLmVuZERhdGUuc2V0KHVuZGVmaW5lZCk7XG4gICAgICB0aGlzLnNldFN0YXJ0RGF0ZShkYXRlLmNsb25lKCkpO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICghdGhpcy5lbmREYXRlKCkgJiYgdGhpcy5zdGFydERhdGUoKSAmJiBkYXRlLmlzQmVmb3JlKHRoaXMuc3RhcnREYXRlKCkpKSB7XG4gICAgICB0aGlzLnNldEVuZERhdGUodGhpcy5zdGFydERhdGUoKT8uY2xvbmUoKSk7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKHRoaXMuaGFzVGltZVBpY2tlcigpKSB7XG4gICAgICBkYXRlID0gdGhpcy5nZXREYXRlV2l0aFRpbWUoZGF0ZSwgU2lkZUVudW0ucmlnaHQpO1xuICAgIH1cbiAgICBpZiAoIWRhdGUuaXNCZWZvcmUodGhpcy5zdGFydERhdGUoKSwgJ2RheScpKSB7XG4gICAgICB0aGlzLnNldEVuZERhdGUoZGF0ZS5jbG9uZSgpKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuYXV0b0FwcGx5KCkpIHtcbiAgICAgIHRoaXMuY2FsY3VsYXRlU2VsZWN0ZWRMYWJlbCgpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgY2FsY3VsYXRlU2VsZWN0ZWRMYWJlbCgpIHtcbiAgICB0aGlzLnVwZGF0ZUVsZW1lbnQoKTtcbiAgfVxuXG4gIHByaXZhdGUgZm9ybWF0TW9udGhZZWFyKCkge1xuICAgIGNvbnN0IG1vbnRoID0gKHRoaXMuY2FsZW5kYXJWYXJpYWJsZXMoKS5sZWZ0KCkuZHJvcGRvd25zPy4oKT8uY3VycmVudE1vbnRoID8/IDApICsgMTtcbiAgICBjb25zdCByaWdodE1vbnRoID0gKHRoaXMuY2FsZW5kYXJWYXJpYWJsZXMoKS5yaWdodCgpLmRyb3Bkb3ducz8uKCk/LmN1cnJlbnRNb250aCA/PyAwKSArIDE7XG5cbiAgICB0aGlzLmxpc3RLZXlGcm9tU2VsZWN0ZWQudXBkYXRlKGN1cnJlbnQgPT4ge1xuICAgICAgY3VycmVudC5tb250aCA9IG1vbnRoO1xuICAgICAgY3VycmVudC55ZWFyID0gdGhpcy5jYWxlbmRhclZhcmlhYmxlcygpLmxlZnQoKS5kcm9wZG93bnM/LigpPy5jdXJyZW50WWVhcjtcblxuICAgICAgcmV0dXJuIGN1cnJlbnQ7XG4gICAgfSk7XG4gICAgdGhpcy5saXN0S2V5VG9TZWxlY3RlZC51cGRhdGUoY3VycmVudCA9PiB7XG4gICAgICBjdXJyZW50Lm1vbnRoID0gcmlnaHRNb250aDtcbiAgICAgIGN1cnJlbnQueWVhciA9IHRoaXMuY2FsZW5kYXJWYXJpYWJsZXMoKS5yaWdodCgpLmRyb3Bkb3ducz8uKCk/LmN1cnJlbnRZZWFyO1xuXG4gICAgICByZXR1cm4gY3VycmVudDtcbiAgICB9KTtcbiAgICB0aGlzLmlzU2VsZWN0ZWREYXRhLnNldCh7IGxlZnRtb250aDogdHJ1ZSwgbGVmdHllYXI6IHRydWUsIHJpZ2h0bW9udGg6IHRydWUsIHJpZ2h0eWVhcjogdHJ1ZSB9KTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0U3RhcnREYXRlKHN0YXJ0RGF0ZTogZGF5anMuRGF5anMgfCBzdHJpbmcgfCB1bmRlZmluZWQpIHtcbiAgICBpZiAoIXRoaXMuc3RhcnREYXRlKCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBzdGFydERhdGUgPT09ICdzdHJpbmcnKSB7XG4gICAgICB0aGlzLnN0YXJ0RGF0ZS5zZXQoZGF5anMoc3RhcnREYXRlLCB0aGlzLmRhdGVPcHRpb25zKCkuZm9ybWF0KSk7XG4gICAgfVxuICAgIGlmICh0eXBlb2Ygc3RhcnREYXRlID09PSAnb2JqZWN0Jykge1xuICAgICAgdGhpcy5waWNraW5nRGF0ZS5zZXQodHJ1ZSk7XG4gICAgICB0aGlzLnN0YXJ0RGF0ZS5zZXQoZGF5anMoc3RhcnREYXRlKSk7XG4gICAgfVxuICAgIGlmICghdGhpcy5oYXNUaW1lUGlja2VyKCkpIHtcbiAgICAgIHRoaXMucGlja2luZ0RhdGUuc2V0KHRydWUpO1xuICAgICAgdGhpcy5zdGFydERhdGUuc2V0KHRoaXMuc3RhcnREYXRlKCk/LnN0YXJ0T2YoJ2RheScpKTtcbiAgICB9XG4gICAgdGhpcy5zZXRTdGFydERhdGVJblRpbWVQaWNrZXIoKTtcblxuICAgIGlmICh0aGlzLm1pbkRhdGUoKSAmJiB0aGlzLnN0YXJ0RGF0ZSgpPy5pc0JlZm9yZSh0aGlzLm1pbkRhdGUoKSkpIHtcbiAgICAgIHRoaXMuc3RhcnREYXRlLnNldCgodGhpcy5taW5EYXRlKCkgYXMgZGF5anMuRGF5anMpPy5jbG9uZSgpKTtcblxuICAgICAgdGhpcy5zZXRTdGFydERhdGVJblRpbWVQaWNrZXIoKTtcbiAgICB9XG4gICAgaWYgKHRoaXMubWF4RGF0ZSgpICYmIHRoaXMuc3RhcnREYXRlKCk/LmlzQWZ0ZXIodGhpcy5tYXhEYXRlKCkpKSB7XG4gICAgICB0aGlzLnN0YXJ0RGF0ZS5zZXQoKHRoaXMubWF4RGF0ZSgpIGFzIGRheWpzLkRheWpzKS5jbG9uZSgpKTtcbiAgICAgIHRoaXMuc2V0U3RhcnREYXRlSW5UaW1lUGlja2VyKCk7XG4gICAgfVxuICAgIGlmICghdGhpcy5pc1Nob3duKCkpIHtcbiAgICAgIHRoaXMudXBkYXRlRWxlbWVudCgpO1xuICAgIH1cbiAgICAvLyB0aGlzLm91dFN0YXJ0RGF0ZUNoYW5nZWQuZW1pdCh7IHN0YXJ0RGF0ZTogdGhpcy5zdGFydERhdGUoKSB9KTtcbiAgICB0aGlzLnVwZGF0ZU1vbnRoc0luVmlldygpO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRTdGFydERhdGVJblRpbWVQaWNrZXIoKSB7XG4gICAgaWYgKCF0aGlzLmhhc1RpbWVQaWNrZXIoKSB8fCAhdGhpcy50aW1lUGlja2VySW5jcmVtZW50KCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnN0YXJ0RGF0ZS51cGRhdGUoKGN1cnJlbnQpID0+IHtcbiAgICAgIGlmICghY3VycmVudCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBjdXJyZW50Lm1pbnV0ZShNYXRoLnJvdW5kKGN1cnJlbnQubWludXRlKCkgLyB0aGlzLnRpbWVQaWNrZXJJbmNyZW1lbnQoKSkgKiB0aGlzLnRpbWVQaWNrZXJJbmNyZW1lbnQoKSk7XG5cbiAgICAgIHJldHVybiBjdXJyZW50O1xuICAgIH0pO1xuICB9XG4gIHByaXZhdGUgc2V0RW5kRGF0ZShlbmREYXRlOiBkYXlqcy5EYXlqcyB8IHN0cmluZyB8IHVuZGVmaW5lZCkge1xuICAgIGlmICh0eXBlb2YgZW5kRGF0ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHRoaXMuZW5kRGF0ZS5zZXQoZGF5anMoZW5kRGF0ZSwgdGhpcy5kYXRlT3B0aW9ucygpLmZvcm1hdCkpO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIGVuZERhdGUgPT09ICdvYmplY3QnKSB7XG4gICAgICB0aGlzLnBpY2tpbmdEYXRlLnNldChmYWxzZSk7XG4gICAgICB0aGlzLmVuZERhdGUuc2V0KGRheWpzKGVuZERhdGUpKTtcbiAgICB9XG4gICAgaWYgKCF0aGlzLmVuZERhdGUoKSB8fCAhdGhpcy5zdGFydERhdGUoKSkge1xuICAgICAgcmV0dXJuIHRoaXMudXBkYXRlTW9udGhzSW5WaWV3KCk7XG4gICAgfVxuICAgIGlmICghdGhpcy5oYXNUaW1lUGlja2VyKCkpIHtcbiAgICAgIHRoaXMucGlja2luZ0RhdGUuc2V0KGZhbHNlKTtcbiAgICAgIHRoaXMuZW5kRGF0ZS5zZXQodGhpcy5lbmREYXRlKCk/LmFkZCgxLCAnZCcpLnN0YXJ0T2YoJ2RheScpLnN1YnRyYWN0KDEsICdzZWNvbmQnKSk7XG4gICAgfVxuICAgIGlmICh0aGlzLmhhc1RpbWVQaWNrZXIoKSAmJiB0aGlzLnRpbWVQaWNrZXJJbmNyZW1lbnQoKSkge1xuICAgICAgdGhpcy5lbmREYXRlLnVwZGF0ZSgoY3VycmVudCkgPT4ge1xuICAgICAgICBpZiAoIWN1cnJlbnQpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY3VycmVudC5taW51dGUoTWF0aC5yb3VuZChjdXJyZW50Lm1pbnV0ZSgpIC8gdGhpcy50aW1lUGlja2VySW5jcmVtZW50KCkpICogdGhpcy50aW1lUGlja2VySW5jcmVtZW50KCkpO1xuXG4gICAgICAgIHJldHVybiBjdXJyZW50O1xuICAgICAgfSk7XG4gICAgfVxuICAgIGlmICh0aGlzLmVuZERhdGUoKT8uaXNCZWZvcmUodGhpcy5zdGFydERhdGUoKSkpIHtcbiAgICAgIHRoaXMuZW5kRGF0ZS5zZXQodGhpcy5zdGFydERhdGUoKT8uY2xvbmUoKSk7XG4gICAgfVxuICAgIGlmICh0aGlzLm1heERhdGUoKSAmJiB0aGlzLmVuZERhdGUoKT8uaXNBZnRlcih0aGlzLm1heERhdGUoKSkpIHtcbiAgICAgIHRoaXMuZW5kRGF0ZS5zZXQoKHRoaXMubWF4RGF0ZSgpIGFzIGRheWpzLkRheWpzKT8uY2xvbmUoKSk7XG4gICAgfVxuICAgIC8vIHRoaXMub3V0RW5kRGF0ZUNoYW5nZWQuZW1pdCh7IGVuZERhdGU6IHRoaXMuZW5kRGF0ZSgpIH0pO1xuICAgIHRoaXMudXBkYXRlTW9udGhzSW5WaWV3KCk7XG4gIH1cbiAgcHJvdGVjdGVkIGhhbmRsZXJIb3ZlckRhdGUoZXZlbnQ6IEV2ZW50LCBzaWRlOiBTaWRlRW51bSwgcm93OiBudW1iZXIsIGNvbDogbnVtYmVyKSB7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG5cbiAgICBjb25zdCBsZWZ0Q2FsRGF0ZSA9IHRoaXMuY2FsZW5kYXJWYXJpYWJsZXMoKS5sZWZ0KCkuY2FsZW5kYXI/Lltyb3ddW2NvbF07XG4gICAgY29uc3QgcmlnaHRDYWxEYXRlID0gdGhpcy5jYWxlbmRhclZhcmlhYmxlcygpLnJpZ2h0KCkuY2FsZW5kYXI/Lltyb3ddW2NvbF07XG5cbiAgICBpZiAoIXRoaXMucGlja2luZ0RhdGUgfHwgIXJpZ2h0Q2FsRGF0ZSB8fCAhbGVmdENhbERhdGUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5ub3dIb3ZlcmVkRGF0ZS5zZXQoc2lkZSA9PT0gU2lkZUVudW0ubGVmdCA/IGxlZnRDYWxEYXRlIDogcmlnaHRDYWxEYXRlKTtcbiAgICB0aGlzLnJlbmRlckNhbGVuZGFyKFNpZGVFbnVtLmxlZnQpO1xuICAgIHRoaXMucmVuZGVyQ2FsZW5kYXIoU2lkZUVudW0ucmlnaHQpO1xuICB9XG4gIHByaXZhdGUgZ2V0RGlzYWJsZSh0eXBlOiAnbGVmdCcgfCAncmlnaHQnKSB7XG4gICAgY29uc3QgbWluRGF0ZSA9IHRoaXMubWluRGF0ZSgpIGFzIGRheWpzLkRheWpzO1xuICAgIGNvbnN0IG1heERhdGUgPSB0aGlzLm1heERhdGUoKSBhcyBkYXlqcy5EYXlqcztcblxuICAgIGlmICh0eXBlID09PSAnbGVmdCcpIHtcbiAgICAgIHRoaXMuZGlzYWJsZU1vbnRoKCkubGVmdC5zZXQoW10pO1xuXG4gICAgICBpZiAobWluRGF0ZT8ueWVhcigpID09PSB0aGlzLmxpc3RLZXlGcm9tU2VsZWN0ZWQoKS55ZWFyKSB7XG4gICAgICAgIGZvciAobGV0IGkgPSAxOyBpIDwgKG1pbkRhdGU/Lm1vbnRoKCkgKyAxKTsgaSsrKSB7XG4gICAgICAgICAgdGhpcy5kaXNhYmxlTW9udGgoKS5sZWZ0LnVwZGF0ZShjdXJyZW50ID0+IHtcbiAgICAgICAgICAgIGN1cnJlbnQucHVzaChpKTtcblxuICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnQ7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChtYXhEYXRlPy55ZWFyKCkgPT09IHRoaXMubGlzdEtleUZyb21TZWxlY3RlZCgpLnllYXIpIHtcbiAgICAgICAgZm9yIChsZXQgaSA9IG1heERhdGU/Lm1vbnRoKCkgKyAyOyBpIDwgMTM7IGkrKykge1xuICAgICAgICAgIHRoaXMuZGlzYWJsZU1vbnRoKCkubGVmdC51cGRhdGUoY3VycmVudCA9PiB7XG4gICAgICAgICAgICBjdXJyZW50LnB1c2goaSk7XG5cbiAgICAgICAgICAgIHJldHVybiBjdXJyZW50O1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmRpc2FibGVNb250aCgpLnJpZ2h0LnNldChbXSk7XG4gICAgaWYgKG1pbkRhdGU/LnllYXIoKSA9PT0gdGhpcy5saXN0S2V5VG9TZWxlY3RlZCgpLnllYXIpIHtcbiAgICAgIGZvciAobGV0IGkgPSAxOyBpIDwgKG1pbkRhdGU/Lm1vbnRoKCkgKyAxKTsgaSsrKSB7XG4gICAgICAgIHRoaXMuZGlzYWJsZU1vbnRoKCkucmlnaHQudXBkYXRlKGN1cnJlbnQgPT4ge1xuICAgICAgICAgIGN1cnJlbnQucHVzaChpKTtcblxuICAgICAgICAgIHJldHVybiBjdXJyZW50O1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKG1heERhdGU/LnllYXIoKSA9PT0gdGhpcy5saXN0S2V5VG9TZWxlY3RlZCgpLnllYXIpIHtcbiAgICAgIGZvciAobGV0IGkgPSBtYXhEYXRlPy5tb250aCgpICsgMjsgaSA8IDEzOyBpKyspIHtcbiAgICAgICAgdGhpcy5kaXNhYmxlTW9udGgoKS5yaWdodC51cGRhdGUoY3VycmVudCA9PiB7XG4gICAgICAgICAgY3VycmVudC5wdXNoKGkpO1xuXG4gICAgICAgICAgcmV0dXJuIGN1cnJlbnQ7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoKE51bWJlcih0aGlzLmxpc3RLZXlGcm9tU2VsZWN0ZWQoKS55ZWFyKSA9PT0gTnVtYmVyKHRoaXMubGlzdEtleVRvU2VsZWN0ZWQoKS55ZWFyKSkpIHtcbiAgICAgIGZvciAobGV0IGkgPSAxOyBpIDw9IE51bWJlcih0aGlzLmxpc3RLZXlGcm9tU2VsZWN0ZWQoKS5tb250aCk7IGkrKykge1xuICAgICAgICB0aGlzLmRpc2FibGVNb250aCgpLnJpZ2h0LnVwZGF0ZShjdXJyZW50ID0+IHtcbiAgICAgICAgICBjdXJyZW50LnB1c2goaSk7XG5cbiAgICAgICAgICByZXR1cm4gY3VycmVudDtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIGhhbmRsZXJDbGlja1ByZXYoc2lkZTogU2lkZUVudW0pIHtcbiAgICBpZiAoc2lkZSA9PT0gU2lkZUVudW0ubGVmdCAmJiB0aGlzLmxlZnRDYWxlbmRhcigpLm1vbnRoKSB7XG4gICAgICB0aGlzLmxlZnRDYWxlbmRhci51cGRhdGUoY3VycmVudCA9PiB7XG4gICAgICAgIGN1cnJlbnQubW9udGggPSBjdXJyZW50Lm1vbnRoPy5zdWJ0cmFjdCgxLCAnbW9udGgnKTtcblxuICAgICAgICByZXR1cm4gY3VycmVudDtcbiAgICAgIH0pO1xuICAgICAgdGhpcy5saXN0S2V5RnJvbVNlbGVjdGVkLnVwZGF0ZShjdXJyZW50ID0+IHtcbiAgICAgICAgY3VycmVudC5tb250aCA9ICh0aGlzLmxlZnRDYWxlbmRhcigpLm1vbnRoPy5tb250aCgpID8/IDApICsgMTtcbiAgICAgICAgY3VycmVudC55ZWFyID0gdGhpcy5sZWZ0Q2FsZW5kYXIoKS5tb250aD8ueWVhcigpO1xuXG4gICAgICAgIHJldHVybiBjdXJyZW50O1xuICAgICAgfSk7XG5cbiAgICAgIHJldHVybiB0aGlzLnVwZGF0ZUNhbGVuZGFycygpO1xuICAgIH1cbiAgICB0aGlzLnJpZ2h0Q2FsZW5kYXIudXBkYXRlKGN1cnJlbnQgPT4ge1xuICAgICAgY3VycmVudC5tb250aCA9IGN1cnJlbnQubW9udGg/LnN1YnRyYWN0KDEsICdtb250aCcpO1xuXG4gICAgICByZXR1cm4gY3VycmVudDtcbiAgICB9KTtcbiAgICB0aGlzLmxpc3RLZXlUb1NlbGVjdGVkLnVwZGF0ZShjdXJyZW50ID0+IHtcbiAgICAgIGN1cnJlbnQubW9udGggPSAodGhpcy5yaWdodENhbGVuZGFyKCkubW9udGg/Lm1vbnRoKCkgPz8gMCkgKyAxO1xuICAgICAgY3VycmVudC55ZWFyID0gdGhpcy5yaWdodENhbGVuZGFyKCkubW9udGg/LnllYXIoKTtcblxuICAgICAgcmV0dXJuIGN1cnJlbnQ7XG4gICAgfSk7XG4gICAgdGhpcy5nZXREaXNhYmxlKCdyaWdodCcpO1xuICAgIHRoaXMudXBkYXRlQ2FsZW5kYXJzKCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgaGFuZGxlckNsaWNrTmV4dChzaWRlOiBTaWRlRW51bSkge1xuICAgIGlmIChzaWRlID09PSBTaWRlRW51bS5sZWZ0KSB7XG4gICAgICB0aGlzLmxlZnRDYWxlbmRhci51cGRhdGUoY3VycmVudCA9PiB7XG4gICAgICAgIGN1cnJlbnQubW9udGggPSBjdXJyZW50Lm1vbnRoPy5hZGQoMSwgJ21vbnRoJyk7XG5cbiAgICAgICAgcmV0dXJuIGN1cnJlbnQ7XG4gICAgICB9KTtcbiAgICAgIHRoaXMubGlzdEtleUZyb21TZWxlY3RlZC51cGRhdGUoY3VycmVudCA9PiB7XG4gICAgICAgIGN1cnJlbnQubW9udGggPSAodGhpcy5sZWZ0Q2FsZW5kYXIoKS5tb250aD8ubW9udGgoKSA/PyAwKSArIDE7XG4gICAgICAgIGN1cnJlbnQueWVhciA9IHRoaXMubGVmdENhbGVuZGFyKCkubW9udGg/LnllYXIoKTtcblxuICAgICAgICByZXR1cm4gY3VycmVudDtcbiAgICAgIH0pO1xuXG4gICAgICBpZiAoKHRoaXMubGlzdEtleUZyb21TZWxlY3RlZCgpLm1vbnRoID09PSB0aGlzLmxpc3RLZXlUb1NlbGVjdGVkKCkubW9udGgpICYmICh0aGlzLmxpc3RLZXlGcm9tU2VsZWN0ZWQoKS55ZWFyID09PSB0aGlzLmxpc3RLZXlUb1NlbGVjdGVkKCkueWVhcikpIHtcbiAgICAgICAgdGhpcy5yaWdodENhbGVuZGFyLnVwZGF0ZShjdXJyZW50ID0+IHtcbiAgICAgICAgICBjdXJyZW50Lm1vbnRoID0gY3VycmVudC5tb250aD8uYWRkKDEsICdtb250aCcpO1xuXG4gICAgICAgICAgcmV0dXJuIGN1cnJlbnQ7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmxpc3RLZXlUb1NlbGVjdGVkLnVwZGF0ZShjdXJyZW50ID0+IHtcbiAgICAgICAgICBjdXJyZW50Lm1vbnRoID0gKHRoaXMucmlnaHRDYWxlbmRhcigpLm1vbnRoPy5tb250aCgpID8/IDApICsgMTtcbiAgICAgICAgICBjdXJyZW50LnllYXIgPSB0aGlzLnJpZ2h0Q2FsZW5kYXIoKS5tb250aD8ueWVhcigpO1xuXG4gICAgICAgICAgcmV0dXJuIGN1cnJlbnQ7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgdGhpcy5nZXREaXNhYmxlKCdyaWdodCcpO1xuXG4gICAgICByZXR1cm4gdGhpcy51cGRhdGVDYWxlbmRhcnMoKTtcbiAgICB9XG4gICAgdGhpcy5yaWdodENhbGVuZGFyLnVwZGF0ZShjdXJyZW50ID0+IHtcbiAgICAgIGN1cnJlbnQubW9udGggPSBjdXJyZW50Lm1vbnRoPy5hZGQoMSwgJ21vbnRoJyk7XG5cbiAgICAgIHJldHVybiBjdXJyZW50O1xuICAgIH0pO1xuICAgIHRoaXMubGlzdEtleVRvU2VsZWN0ZWQudXBkYXRlKGN1cnJlbnQgPT4ge1xuICAgICAgY3VycmVudC5tb250aCA9ICh0aGlzLnJpZ2h0Q2FsZW5kYXIoKS5tb250aD8ubW9udGgoKSA/PyAwKSArIDE7XG4gICAgICBjdXJyZW50LnllYXIgPSB0aGlzLnJpZ2h0Q2FsZW5kYXIoKS5tb250aD8ueWVhcigpO1xuXG4gICAgICByZXR1cm4gY3VycmVudDtcbiAgICB9KTtcbiAgICB0aGlzLnVwZGF0ZUNhbGVuZGFycygpO1xuICB9XG4gIHByb3RlY3RlZCBoYW5kbGVyUGlja2VyRGF0ZShldmVudDogYW55LCBzaWRlOiBTaWRlRW51bSwgcm93OiBudW1iZXIsIGNvbDogbnVtYmVyKSB7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG5cbiAgICBpZiAoZXZlbnQudGFyZ2V0Py50YWdOYW1lID09PSAnVEQnKSB7XG4gICAgICBpZiAoZXZlbnQudGFyZ2V0LmNsYXNzTGlzdCAmJiAhZXZlbnQudGFyZ2V0LmNsYXNzTGlzdC5jb250YWlucygnYXZhaWxhYmxlJykpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoZXZlbnQudGFyZ2V0LnRhZ05hbWUgPT09ICdTUEFOJykge1xuICAgICAgaWYgKGV2ZW50LnRhcmdldC5wYXJlbnRFbGVtZW50ICYmIGV2ZW50LnRhcmdldC5wYXJlbnRFbGVtZW50LmNsYXNzTGlzdCAmJiAhZXZlbnQudGFyZ2V0LnBhcmVudEVsZW1lbnQuY2xhc3NMaXN0LmNvbnRhaW5zKCdhdmFpbGFibGUnKSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfVxuICAgIGlmICghdGhpcy5kYXRlT3B0aW9ucygpLmN1c3RvbVJhbmdlTGFiZWwpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKHRoaXMucXVpY2tSYW5nZXNBcnJheSgpLmxlbmd0aCkge1xuICAgICAgdGhpcy5zZWxlY3RlZFF1aWNrUmFuZ2Uuc2V0KHRoaXMuZGF0ZU9wdGlvbnMoKS5jdXN0b21SYW5nZUxhYmVsKTtcbiAgICB9XG4gICAgY29uc3QgZGF0ZSA9IHNpZGUgPT09IFNpZGVFbnVtLmxlZnQgPyB0aGlzLmxlZnRDYWxlbmRhcigpLmNhbGVuZGFyPy5bcm93XVtjb2xdIDogdGhpcy5yaWdodENhbGVuZGFyKCkuY2FsZW5kYXI/Lltyb3ddW2NvbF07XG5cbiAgICBpZiAoIWRhdGUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5zcGxpdFBpY2tlckRhdGUudXBkYXRlKGN1cnJlbnQgPT4ge1xuICAgICAgY3VycmVudFtzaWRlID09PSBTaWRlRW51bS5sZWZ0ID8gJ3N0YXJ0JyA6ICdlbmQnXS51cGRhdGUoc2lkZUN1cnJlbnQgPT4ge1xuICAgICAgICBzaWRlQ3VycmVudC5kYXkgPSBkYXRlLmRhdGUoKTtcblxuICAgICAgICByZXR1cm4gc2lkZUN1cnJlbnQ7XG4gICAgICB9KTtcblxuICAgICAgcmV0dXJuIGN1cnJlbnQ7XG4gICAgfSk7XG4gICAgdGhpcy51cGRhdGVTdGFydEVuZERhdGUoZGF0ZSk7XG5cbiAgICBpZiAodGhpcy5pc1NpbmdsZSgpICYmIHRoaXMuc3RhcnREYXRlKCkpIHtcbiAgICAgIHRoaXMuc2V0RW5kRGF0ZSh0aGlzLnN0YXJ0RGF0ZSgpKTtcbiAgICAgIHRoaXMudXBkYXRlRWxlbWVudCgpO1xuXG4gICAgICBpZiAodGhpcy5hdXRvQXBwbHkoKSkge1xuICAgICAgICB0aGlzLmhhbmRsZXJDbGlja0FwcGx5KCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy51cGRhdGVWaWV3KCk7XG4gICAgaWYgKHRoaXMuYXV0b0FwcGx5KCkgJiYgdGhpcy5zdGFydERhdGUoKSAmJiB0aGlzLmVuZERhdGUoKSkge1xuICAgICAgdGhpcy5oYW5kbGVyQ2xpY2tBcHBseSgpO1xuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBoYW5kbGVyQ2xpY2tBcHBseShldmVudD86IEV2ZW50KSB7XG4gICAgZXZlbnQ/LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIC8vIHRoaXMudmFsaWRhdGUoKTtcbiAgICAvLyBpZiAoIXRoaXMudmFsaWRhdGUoKSkge1xuICAgIC8vICAgcmV0dXJuO1xuICAgIC8vIH1cbiAgICBpZiAodGhpcy5oYXNUaW1lUGlja2VyKCkpIHtcbiAgICAgIHRoaXMuc2V0VGltZUlucHV0KFNpZGVFbnVtLmxlZnQpO1xuICAgICAgdGhpcy5zZXRUaW1lSW5wdXQoU2lkZUVudW0ucmlnaHQpO1xuICAgIH1cbiAgICB0aGlzLmNhbGN1bGF0ZVNlbGVjdGVkTGFiZWwoKTtcblxuICAgIGlmICh0aGlzLnNlbGVjdGVkTGFiZWwoKSkge1xuICAgICAgdGhpcy5vdXRQaWNrZXJEYXRlLmVtaXQoeyBkaXNwbGF5TGFiZWw6IHRoaXMuc2VsZWN0ZWRMYWJlbCgpLCBzdGFydERhdGU6IHRoaXMuc3RhcnREYXRlKCksIGVuZERhdGU6IHRoaXMuZW5kRGF0ZSgpLCBkZXRhaWxEYXRlUGlja2VyOiB0aGlzLnNwbGl0UGlja2VyRGF0ZSgpIH0pO1xuICAgIH1cbiAgfVxuICBwcm90ZWN0ZWQgaGFuZGxlckNsaWNrQ2FuY2VsKGV2ZW50OiBFdmVudCkge1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIHRoaXMuc3RhcnREYXRlLnNldChkYXlqcygwKSk7XG4gICAgdGhpcy5lbmREYXRlLnNldChkYXlqcygwKSk7XG4gICAgdGhpcy5vdXRDYW5jZWwuZW1pdCgnJyk7XG4gIH1cblxuICBwcm90ZWN0ZWQgaGFuZGxlckZ1bmN0aW9uQ29udHJvbChldmVudDogSURyb3Bkb3duRnVuY3Rpb25Db250cm9sRXZlbnQgfCBJSW5wdXRGdW5jdGlvbkNvbnRyb2xFdmVudCwgdHlwZTogc3RyaW5nKSB7XG4gICAgdGhpcy5mdW5jdGlvbkNvbnRyb2xzLnNldCh0eXBlLCBldmVudCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgaGFuZGxlclNlbGVjdGVkRHJvcGRvd24oZXZlbnQ6IElFbWl0U2VsZWN0S2V5IHwgdW5kZWZpbmVkLCB0eXBlOiBzdHJpbmcpIHtcbiAgICB0aGlzLm91dENoYW5nU3RhZ2VGbGFnTW91c2UuZW1pdCh7XG4gICAgICBpc01vdXNlRW50ZXI6IGZhbHNlLFxuICAgICAgaXNNb3VzZUVudGVyQ29udGVudDogZmFsc2UsXG4gICAgICBpc0NvbnRhaW5lckhhc1Njcm9sbDogZmFsc2VcbiAgICB9KTtcbiAgICBpZiAoIWV2ZW50KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgY2FzZSBgJHtTaWRlRW51bS5sZWZ0fW1vbnRoYDpcbiAgICAgIGNhc2UgYCR7U2lkZUVudW0ucmlnaHR9bW9udGhgOlxuICAgICAgICB0aGlzLnVwZGF0ZU1vbnRoU2VsZWN0KGV2ZW50LCB0eXBlKTtcblxuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSBgJHtTaWRlRW51bS5sZWZ0fXllYXJgOlxuICAgICAgY2FzZSBgJHtTaWRlRW51bS5yaWdodH15ZWFyYDpcbiAgICAgICAgdGhpcy51cGRhdGVZZWFyU2VsZWN0KGV2ZW50LCB0eXBlKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIHRoaXMuc3BsaXRQaWNrZXJEYXRlLnVwZGF0ZShjdXJyZW50ID0+IHtcbiAgICAgIGlmICh0eXBlID09PSBgJHtTaWRlRW51bS5sZWZ0fW1vbnRoYCB8fCB0eXBlID09PSBgJHtTaWRlRW51bS5sZWZ0fXllYXJgKSB7XG4gICAgICAgIGN1cnJlbnQuc3RhcnQudXBkYXRlKHN0YXJ0ID0+IHtcbiAgICAgICAgICBpZiAodHlwZSA9PT0gYCR7U2lkZUVudW0ubGVmdH1tb250aGApIHtcbiAgICAgICAgICAgIHN0YXJ0Lm1vbnRoID0gZXZlbnQua2V5IGFzIG51bWJlcjtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHR5cGUgPT09IGAke1NpZGVFbnVtLmxlZnR9eWVhcmApIHtcbiAgICAgICAgICAgIHN0YXJ0LnllYXIgPSBldmVudC5rZXkgYXMgbnVtYmVyO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiBzdGFydDtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIGN1cnJlbnQ7XG4gICAgICB9XG5cbiAgICAgIGN1cnJlbnQuZW5kLnVwZGF0ZShlbmQgPT4ge1xuICAgICAgICBpZiAodHlwZSA9PT0gYCR7U2lkZUVudW0ucmlnaHR9bW9udGhgKSB7XG4gICAgICAgICAgZW5kLm1vbnRoID0gZXZlbnQua2V5IGFzIG51bWJlcjtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZSA9PT0gYCR7U2lkZUVudW0ucmlnaHR9eWVhcmApIHtcbiAgICAgICAgICBlbmQueWVhciA9IGV2ZW50LmtleSBhcyBudW1iZXI7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZW5kO1xuICAgICAgfSk7XG5cbiAgICAgIHJldHVybiBjdXJyZW50O1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVNb250aFNlbGVjdChldmVudDogSUVtaXRTZWxlY3RLZXksIHR5cGU6IHN0cmluZykge1xuICAgIGNvbnN0IHNpZGUgPSB0eXBlLmluY2x1ZGVzKFNpZGVFbnVtLmxlZnQpID8gU2lkZUVudW0ubGVmdCA6IFNpZGVFbnVtLnJpZ2h0O1xuICAgIGNvbnN0IHllYXIgPSB0aGlzLmNhbGVuZGFyVmFyaWFibGVzKClbc2lkZV0oKS5kcm9wZG93bnM/LigpPy5jdXJyZW50WWVhciB8fCBkYXlqcygpLnllYXIoKTtcbiAgICBjb25zdCBtb250aCA9IE51bWJlcihldmVudC5rZXkpIC0gMTtcblxuICAgIGlmIChzaWRlID09PSBTaWRlRW51bS5sZWZ0KSB7XG4gICAgICBpZiAodGhpcy5pc1NlbGVjdGVkRGF0YSgpLmxlZnRtb250aCkge1xuICAgICAgICB0aGlzLmlzU2VsZWN0ZWREYXRhLnVwZGF0ZShjdXJyZW50ID0+IHtcbiAgICAgICAgICBjdXJyZW50LmxlZnRtb250aCA9IGZhbHNlO1xuXG4gICAgICAgICAgcmV0dXJuIGN1cnJlbnQ7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmdldERpc2FibGUoJ3JpZ2h0Jyk7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdGhpcy5saXN0S2V5RnJvbVNlbGVjdGVkLnVwZGF0ZShjdXJyZW50ID0+IHtcbiAgICAgICAgY3VycmVudC5tb250aCA9IGV2ZW50LmtleTtcblxuICAgICAgICByZXR1cm4gY3VycmVudDtcbiAgICAgIH0pO1xuICAgICAgaWYgKE51bWJlcihldmVudC5rZXkpID49IE51bWJlcih0aGlzLmxpc3RLZXlGcm9tU2VsZWN0ZWQoKS5tb250aCkgJiYgKE51bWJlcih0aGlzLmxpc3RLZXlGcm9tU2VsZWN0ZWQoKS55ZWFyKSA9PT0gTnVtYmVyKHRoaXMubGlzdEtleVRvU2VsZWN0ZWQoKS55ZWFyKSkpIHtcbiAgICAgICAgaWYgKE51bWJlcihldmVudC5rZXkpIDw9IDExKSB7XG4gICAgICAgICAgdGhpcy5saXN0S2V5VG9TZWxlY3RlZC51cGRhdGUoY3VycmVudCA9PiB7XG4gICAgICAgICAgICBjdXJyZW50Lm1vbnRoID0gTnVtYmVyKGV2ZW50LmtleSkgKyAxO1xuXG4gICAgICAgICAgICByZXR1cm4gY3VycmVudDtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoTnVtYmVyKGV2ZW50LmtleSkgPT09IDEyKSB7XG4gICAgICAgICAgdGhpcy5saXN0S2V5VG9TZWxlY3RlZC51cGRhdGUoY3VycmVudCA9PiB7XG4gICAgICAgICAgICBjdXJyZW50Lm1vbnRoID0gMTtcbiAgICAgICAgICAgIGN1cnJlbnQueWVhciArPSAxO1xuXG4gICAgICAgICAgICByZXR1cm4gY3VycmVudDtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChzaWRlID09PSBTaWRlRW51bS5yaWdodCkge1xuICAgICAgaWYgKHRoaXMuaXNTZWxlY3RlZERhdGEoKS5yaWdodG1vbnRoKSB7XG4gICAgICAgIHRoaXMuaXNTZWxlY3RlZERhdGEudXBkYXRlKGN1cnJlbnQgPT4ge1xuICAgICAgICAgIGN1cnJlbnQucmlnaHRtb250aCA9IGZhbHNlO1xuXG4gICAgICAgICAgcmV0dXJuIGN1cnJlbnQ7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmdldERpc2FibGUoJ3JpZ2h0Jyk7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdGhpcy5saXN0S2V5VG9TZWxlY3RlZC51cGRhdGUoY3VycmVudCA9PiB7XG4gICAgICAgIGN1cnJlbnQubW9udGggPSBldmVudC5rZXk7XG5cbiAgICAgICAgcmV0dXJuIGN1cnJlbnQ7XG4gICAgICB9KTtcbiAgICB9XG4gICAgKHRoaXMuZnVuY3Rpb25Db250cm9scy5nZXQodHlwZSkgYXMgSURyb3Bkb3duRnVuY3Rpb25Db250cm9sRXZlbnQpPy5yZW1vdmVMaXN0KCk7XG5cbiAgICB0aGlzLmdldERpc2FibGUoJ3JpZ2h0Jyk7XG4gICAgdGhpcy5tb250aE9yWWVhckNoYW5nZWQobW9udGgsIHllYXIsIHNpZGUpO1xuICB9XG4gIHByaXZhdGUgdXBkYXRlWWVhclNlbGVjdChldmVudDogSUVtaXRTZWxlY3RLZXksIHR5cGU6IHN0cmluZykge1xuICAgIGNvbnN0IHNpZGUgPSB0eXBlLmluY2x1ZGVzKFNpZGVFbnVtLmxlZnQpID8gU2lkZUVudW0ubGVmdCA6IFNpZGVFbnVtLnJpZ2h0O1xuXG4gICAgaWYgKHNpZGUgPT09IFNpZGVFbnVtLmxlZnQpIHtcbiAgICAgIGlmICh0aGlzLmlzU2VsZWN0ZWREYXRhKCk/LmxlZnR5ZWFyKSB7XG4gICAgICAgIHRoaXMuaXNTZWxlY3RlZERhdGEudXBkYXRlKGN1cnJlbnQgPT4ge1xuICAgICAgICAgIGN1cnJlbnQubGVmdHllYXIgPSBmYWxzZTtcblxuICAgICAgICAgIHJldHVybiBjdXJyZW50O1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5nZXREaXNhYmxlKCdsZWZ0Jyk7XG4gICAgICAgIC8vIHRoaXMuU2V0TGlzdFllYXJSaWdodCh0aGlzLmxpc3RWaWV3S2V5U2VsZWN0ZWRZZWFyIGFzIG51bWJlcik7XG4gICAgICAgICh0aGlzLmZ1bmN0aW9uQ29udHJvbHMuZ2V0KHR5cGUpIGFzIElEcm9wZG93bkZ1bmN0aW9uQ29udHJvbEV2ZW50KT8ucmVtb3ZlTGlzdCgpO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHRoaXMubGlzdEtleUZyb21TZWxlY3RlZC51cGRhdGUoY3VycmVudCA9PiB7XG4gICAgICAgIGN1cnJlbnQueWVhciA9IGV2ZW50LmtleTtcbiAgICAgICAgcmV0dXJuIGN1cnJlbnQ7XG4gICAgICB9KTtcbiAgICAgIGlmICh0aGlzLmxpc3RLZXlGcm9tU2VsZWN0ZWQoKS55ZWFyICYmIHRoaXMubGlzdEtleVRvU2VsZWN0ZWQoKS55ZWFyICYmICh0aGlzLmxpc3RLZXlGcm9tU2VsZWN0ZWQoKS55ZWFyID49IHRoaXMubGlzdEtleVRvU2VsZWN0ZWQoKS55ZWFyKSkge1xuICAgICAgICB0aGlzLmxpc3RLZXlUb1NlbGVjdGVkLnVwZGF0ZShjdXJyZW50ID0+IHtcbiAgICAgICAgICBjdXJyZW50LnllYXIgPSBldmVudC5rZXk7XG4gICAgICAgICAgcmV0dXJuIGN1cnJlbnQ7XG4gICAgICAgIH0pO1xuICAgICAgICBpZiAodGhpcy5saXN0S2V5RnJvbVNlbGVjdGVkKCkubW9udGggJiYgTnVtYmVyKHRoaXMubGlzdEtleUZyb21TZWxlY3RlZCgpLm1vbnRoKSA8PSAxMSkge1xuICAgICAgICAgIHRoaXMubGlzdEtleVRvU2VsZWN0ZWQudXBkYXRlKGN1cnJlbnQgPT4ge1xuICAgICAgICAgICAgY3VycmVudC5tb250aCA9IE51bWJlcih0aGlzLmxpc3RLZXlGcm9tU2VsZWN0ZWQoKS5tb250aCkgKyAxO1xuICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnQ7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMubGlzdEtleUZyb21TZWxlY3RlZCgpLm1vbnRoICYmIHRoaXMubGlzdEtleUZyb21TZWxlY3RlZCgpLm1vbnRoID09PSAxMikge1xuICAgICAgICAgIHRoaXMubGlzdEtleVRvU2VsZWN0ZWQudXBkYXRlKGN1cnJlbnQgPT4ge1xuICAgICAgICAgICAgY3VycmVudC5tb250aCA9IE51bWJlcih0aGlzLmxpc3RLZXlGcm9tU2VsZWN0ZWQoKS5tb250aCk7XG4gICAgICAgICAgICByZXR1cm4gY3VycmVudDtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgdGhpcy5nZXREaXNhYmxlKCdsZWZ0Jyk7XG4gICAgICB0aGlzLmJ1aWxkQ29uZmlnWWVhcihTaWRlRW51bS5yaWdodCwgdGhpcy5saXN0S2V5RnJvbVNlbGVjdGVkKCkueWVhciBhcyBudW1iZXIpO1xuICAgICAgKHRoaXMuZnVuY3Rpb25Db250cm9scy5nZXQodHlwZSkgYXMgSURyb3Bkb3duRnVuY3Rpb25Db250cm9sRXZlbnQpPy5yZW1vdmVMaXN0KCk7XG4gICAgfVxuICAgIGlmIChzaWRlID09PSBTaWRlRW51bS5yaWdodCkge1xuICAgICAgaWYgKHRoaXMuaXNTZWxlY3RlZERhdGEoKS5yaWdodHllYXIpIHtcbiAgICAgICAgdGhpcy5pc1NlbGVjdGVkRGF0YS51cGRhdGUoY3VycmVudCA9PiB7XG4gICAgICAgICAgY3VycmVudC5yaWdodHllYXIgPSBmYWxzZTtcblxuICAgICAgICAgIHJldHVybiBjdXJyZW50O1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5nZXREaXNhYmxlKCdyaWdodCcpO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHRoaXMubGlzdEtleVRvU2VsZWN0ZWQudXBkYXRlKGN1cnJlbnQgPT4ge1xuICAgICAgICBjdXJyZW50LnllYXIgPSBldmVudC5rZXk7XG5cbiAgICAgICAgcmV0dXJuIGN1cnJlbnQ7XG4gICAgICB9KTtcbiAgICAgIGlmICh0aGlzLmxpc3RLZXlGcm9tU2VsZWN0ZWQoKS55ZWFyICYmIHRoaXMubGlzdEtleVRvU2VsZWN0ZWQoKS55ZWFyICYmICh0aGlzLmxpc3RLZXlGcm9tU2VsZWN0ZWQoKS55ZWFyID49IHRoaXMubGlzdEtleVRvU2VsZWN0ZWQoKS55ZWFyKSkge1xuICAgICAgICBpZiAodGhpcy5saXN0S2V5RnJvbVNlbGVjdGVkKCkubW9udGggJiYgTnVtYmVyKHRoaXMubGlzdEtleUZyb21TZWxlY3RlZCgpLm1vbnRoKSA8PSAxMSkge1xuICAgICAgICAgIHRoaXMubGlzdEtleVRvU2VsZWN0ZWQudXBkYXRlKGN1cnJlbnQgPT4ge1xuICAgICAgICAgICAgY3VycmVudC5tb250aCA9IE51bWJlcih0aGlzLmxpc3RLZXlGcm9tU2VsZWN0ZWQoKS5tb250aCkgKyAxO1xuXG4gICAgICAgICAgICByZXR1cm4gY3VycmVudDtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5saXN0S2V5RnJvbVNlbGVjdGVkKCkubW9udGggJiYgdGhpcy5saXN0S2V5RnJvbVNlbGVjdGVkKCkubW9udGggPT09IDEyKSB7XG4gICAgICAgICAgdGhpcy5saXN0S2V5VG9TZWxlY3RlZC51cGRhdGUoY3VycmVudCA9PiB7XG4gICAgICAgICAgICBjdXJyZW50Lm1vbnRoID0gTnVtYmVyKHRoaXMubGlzdEtleUZyb21TZWxlY3RlZCgpLm1vbnRoKTtcblxuICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnQ7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5nZXREaXNhYmxlKCdyaWdodCcpO1xuICAgIGxldCBtb250aCA9IGRheWpzKCkubW9udGgoKTtcblxuICAgIGlmIChzaWRlID09PSBTaWRlRW51bS5yaWdodCAmJiB0aGlzLmxpc3RLZXlGcm9tU2VsZWN0ZWQoKS5tb250aCkge1xuICAgICAgbW9udGggPSBOdW1iZXIodGhpcy5saXN0S2V5RnJvbVNlbGVjdGVkKCkubW9udGgpIC0gMTtcbiAgICB9XG4gICAgaWYgKHNpZGUgPT09IFNpZGVFbnVtLmxlZnQgJiYgdGhpcy5saXN0S2V5RnJvbVNlbGVjdGVkKCkubW9udGgpIHtcbiAgICAgIG1vbnRoID0gTnVtYmVyKHRoaXMubGlzdEtleUZyb21TZWxlY3RlZCgpLm1vbnRoKSAtIDE7XG4gICAgfVxuICAgIGNvbnN0IHllYXIgPSBOdW1iZXIoZXZlbnQua2V5KTtcblxuICAgIHRoaXMubW9udGhPclllYXJDaGFuZ2VkKG1vbnRoLCB5ZWFyLCBzaWRlKTtcblxuICB9XG4gIHByaXZhdGUgbW9udGhPclllYXJDaGFuZ2VkKG1vbnRoOiBudW1iZXIsIHllYXI6IG51bWJlciwgc2lkZTogU2lkZUVudW0pIHtcbiAgICBjb25zdCBpc0xlZnQgPSBzaWRlID09PSBTaWRlRW51bS5sZWZ0O1xuICAgIGNvbnN0IG1pbkRhdGUgPSB0aGlzLm1pbkRhdGUoKSBhcyBkYXlqcy5EYXlqcztcbiAgICBjb25zdCBtYXhEYXRlID0gdGhpcy5tYXhEYXRlKCkgYXMgZGF5anMuRGF5anM7XG5cbiAgICBpZiAobWluRGF0ZSAmJiAoeWVhciA8IG1pbkRhdGU/LnllYXIoKSB8fCAoeWVhciA9PT0gbWluRGF0ZT8ueWVhcigpICYmIG1vbnRoIDwgbWluRGF0ZT8ubW9udGgoKSkpKSB7XG4gICAgICBtb250aCA9IG1pbkRhdGU/Lm1vbnRoKCk7XG4gICAgICB5ZWFyID0gbWluRGF0ZT8ueWVhcigpO1xuICAgIH1cblxuICAgIGlmIChtYXhEYXRlICYmICh5ZWFyID4gbWF4RGF0ZT8ueWVhcigpIHx8ICh5ZWFyID09PSBtYXhEYXRlPy55ZWFyKCkgJiYgbW9udGggPiBtYXhEYXRlPy5tb250aCgpKSkpIHtcbiAgICAgIG1vbnRoID0gbWF4RGF0ZT8ubW9udGgoKTtcbiAgICAgIHllYXIgPSBtYXhEYXRlPy55ZWFyKCk7XG4gICAgfVxuXG4gICAgY29uc3QgZHJvcGRvd25zID0gdGhpcy5jYWxlbmRhclZhcmlhYmxlcygpW3NpZGVdKCkuZHJvcGRvd25zO1xuXG4gICAgaWYgKGRyb3Bkb3ducz8uKCkpIHtcbiAgICAgIGRyb3Bkb3ducy51cGRhdGUoY3VycmVudCA9PiB7XG4gICAgICAgIGN1cnJlbnQuY3VycmVudFllYXIgPSB5ZWFyO1xuICAgICAgICBjdXJyZW50LmN1cnJlbnRNb250aCA9IG1vbnRoO1xuXG4gICAgICAgIHJldHVybiBjdXJyZW50O1xuICAgICAgfSlcblxuICAgIH1cbiAgICBpZiAoaXNMZWZ0ICYmIHRoaXMubGVmdENhbGVuZGFyKCkubW9udGgpIHtcbiAgICAgIHRoaXMubGVmdENhbGVuZGFyLnVwZGF0ZShjdXJyZW50ID0+IHtcbiAgICAgICAgY3VycmVudC5tb250aCA9IGN1cnJlbnQubW9udGg/Lm1vbnRoKG1vbnRoKS55ZWFyKHllYXIpO1xuICAgICAgICByZXR1cm4gY3VycmVudDtcbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm4gdGhpcy51cGRhdGVDYWxlbmRhcnMoKTtcbiAgICB9XG5cbiAgICBpZiAobW9udGggPT09IDEyKSB7XG4gICAgICB0aGlzLnJpZ2h0Q2FsZW5kYXIudXBkYXRlKGN1cnJlbnQgPT4ge1xuICAgICAgICBjdXJyZW50Lm1vbnRoID0gY3VycmVudC5tb250aD8uY2xvbmUoKS5hZGQoMSwgJ21vbnRoJyk7XG4gICAgICAgIHJldHVybiBjdXJyZW50O1xuICAgICAgfSk7XG5cbiAgICAgIHJldHVybiB0aGlzLnVwZGF0ZUNhbGVuZGFycygpO1xuICAgIH1cbiAgICB0aGlzLnJpZ2h0Q2FsZW5kYXIudXBkYXRlKGN1cnJlbnQgPT4ge1xuICAgICAgY3VycmVudC5tb250aCA9IGN1cnJlbnQubW9udGg/Lm1vbnRoKG1vbnRoKS55ZWFyKHllYXIpO1xuICAgICAgcmV0dXJuIGN1cnJlbnQ7XG4gICAgfSk7XG4gICAgdGhpcy51cGRhdGVDYWxlbmRhcnMoKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBoYW5kbGVySW5wdXRFdmVudChldmVudDogSUV2ZW50LCB0eXBlOiBgbGVmdGhvdXJgIHwgYGxlZnRtaW51dGVgIHwgYHJpZ2h0aG91cmAgfCBgcmlnaHRtaW51dGVgKSB7XG4gICAgaWYgKGV2ZW50LmtleUNvZGUgIT09IDgpIHtcbiAgICAgIGV2ZW50LmtleUNvZGUgJiYgdGhpcy5jaGVja0JhY2tzcGFjZUZvY3VzLnVwZGF0ZShjdXJyZW50ID0+IHtcbiAgICAgICAgY3VycmVudFt0eXBlXS5zZXQoMSk7XG5cbiAgICAgICAgcmV0dXJuIGN1cnJlbnQ7XG4gICAgICB9KTtcblxuICAgICAgdGhpcy5rZXlDb2RlQmFja3NwYWNlLnNldChmYWxzZSk7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmtleUNvZGVCYWNrc3BhY2Uuc2V0KHRydWUpO1xuXG4gICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICBjYXNlICdsZWZ0bWludXRlJzpcbiAgICAgICAgaWYgKGlzRW1wdHkodGhpcy50aW1lcGlja2VyVmFsdWVJdGVtKCkubGVmdG1pbnV0ZSgpKSkge1xuICAgICAgICAgIGlmICh0aGlzLmNoZWNrQmFja3NwYWNlRm9jdXMoKVt0eXBlXSgpID09PSAxKSB7XG4gICAgICAgICAgICB0aGlzLmNoZWNrQmFja3NwYWNlRm9jdXMudXBkYXRlKGN1cnJlbnQgPT4ge1xuICAgICAgICAgICAgICBjdXJyZW50W3R5cGVdLnNldChjdXJyZW50W3R5cGVdKCkgKyAxKTtcblxuICAgICAgICAgICAgICByZXR1cm4gY3VycmVudDtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMuY2hlY2tCYWNrc3BhY2VGb2N1cy51cGRhdGUoY3VycmVudCA9PiB7XG4gICAgICAgICAgICBjdXJyZW50W3R5cGVdLnNldCgxKTtcblxuICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnQ7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgKHRoaXMuZnVuY3Rpb25Db250cm9scy5nZXQoYCR7U2lkZUVudW0ubGVmdH1ob3VyYCkgYXMgSUlucHV0RnVuY3Rpb25Db250cm9sRXZlbnQpPy5mb2N1cygpO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlICdyaWdodG1pbnV0ZSc6XG4gICAgICAgIGlmIChpc0VtcHR5KHRoaXMudGltZXBpY2tlclZhbHVlSXRlbSgpLnJpZ2h0bWludXRlKCkpKSB7XG4gICAgICAgICAgaWYgKHRoaXMuY2hlY2tCYWNrc3BhY2VGb2N1cygpW3R5cGVdKCkgPT09IDEpIHtcbiAgICAgICAgICAgIHRoaXMuY2hlY2tCYWNrc3BhY2VGb2N1cy51cGRhdGUoY3VycmVudCA9PiB7XG4gICAgICAgICAgICAgIGN1cnJlbnRbdHlwZV0uc2V0KGN1cnJlbnRbdHlwZV0oKSArIDEpO1xuXG4gICAgICAgICAgICAgIHJldHVybiBjdXJyZW50O1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5jaGVja0JhY2tzcGFjZUZvY3VzLnVwZGF0ZShjdXJyZW50ID0+IHtcbiAgICAgICAgICAgIGN1cnJlbnRbdHlwZV0uc2V0KDEpO1xuXG4gICAgICAgICAgICByZXR1cm4gY3VycmVudDtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICAodGhpcy5mdW5jdGlvbkNvbnRyb2xzLmdldChgJHtTaWRlRW51bS5yaWdodH1ob3VyYCkgYXMgSUlucHV0RnVuY3Rpb25Db250cm9sRXZlbnQpPy5mb2N1cygpO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBoYW5kbGVyRm9jdXNBbmRCbHVyVGltZShldmVudDogSUZvY3VzQW5kQmx1ckV2ZW50LCB0eXBlOiBgbGVmdGhvdXJgIHwgYGxlZnRtaW51dGVgIHwgYHJpZ2h0aG91cmAgfCBgcmlnaHRtaW51dGVgKSB7XG4gICAgaWYgKGV2ZW50Lm5hbWUgPT09ICdmb2N1cycpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgZXZlbnRJbnB1dCA9IGV2ZW50LmV2ZW50IGFzIElFdmVudDtcbiAgICBjb25zdCB0YXJnZXQgPSBldmVudElucHV0LnRhcmdldDtcblxuICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgY2FzZSAnbGVmdGhvdXInOlxuICAgICAgICB0aGlzLnRpbWVwaWNrZXJWYXJpYWJsZXMoKS5sZWZ0LnVwZGF0ZShjdXJyZW50ID0+IHtcbiAgICAgICAgICBjdXJyZW50LnNlbGVjdGVkSG91ciA9ICFpc0VtcHR5KHRoaXMudGltZXBpY2tlclZhbHVlSXRlbSgpLmxlZnRob3VyKCkpID8gdGhpcy50aW1lcGlja2VyVmFsdWVJdGVtKCkubGVmdGhvdXIoKSA6IDA7XG5cbiAgICAgICAgICByZXR1cm4gY3VycmVudDtcbiAgICAgICAgfSk7XG4gICAgICAgIGlmICgoTnVtYmVyKHRoaXMudGltZXBpY2tlclZhbHVlSXRlbSgpLmxlZnRob3VyKCkpID09PSAwKSB8fCBpc0VtcHR5KHRoaXMudGltZXBpY2tlclZhbHVlSXRlbSgpLmxlZnRob3VyKCkpKSB7XG4gICAgICAgICAgdGhpcy50aW1lcGlja2VyVmFsdWVJdGVtLnVwZGF0ZShjdXJyZW50ID0+IHtcbiAgICAgICAgICAgIGN1cnJlbnQubGVmdGhvdXIuc2V0KDApO1xuXG4gICAgICAgICAgICByZXR1cm4gY3VycmVudDtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICB0YXJnZXQudmFsdWUgPSAnMDAnO1xuXG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKE51bWJlcih0aGlzLnRpbWVwaWNrZXJWYWx1ZUl0ZW0oKS5sZWZ0aG91cigpKSA8IDEwKSB7XG4gICAgICAgICAgdGFyZ2V0LnZhbHVlID0gYDAke051bWJlcih0aGlzLnRpbWVwaWNrZXJWYWx1ZUl0ZW0oKS5sZWZ0aG91cigpKX1gO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlICdyaWdodGhvdXInOlxuICAgICAgICB0aGlzLnRpbWVwaWNrZXJWYXJpYWJsZXMoKS5yaWdodC51cGRhdGUoY3VycmVudCA9PiB7XG4gICAgICAgICAgY3VycmVudC5zZWxlY3RlZEhvdXIgPSAhaXNFbXB0eSh0aGlzLnRpbWVwaWNrZXJWYWx1ZUl0ZW0oKS5yaWdodGhvdXIoKSkgPyB0aGlzLnRpbWVwaWNrZXJWYWx1ZUl0ZW0oKS5yaWdodGhvdXIoKSA6IDA7XG5cbiAgICAgICAgICByZXR1cm4gY3VycmVudDtcbiAgICAgICAgfSk7XG4gICAgICAgIGlmICgoTnVtYmVyKHRoaXMudGltZXBpY2tlclZhbHVlSXRlbSgpLnJpZ2h0aG91cigpKSA9PT0gMCkgfHwgaXNFbXB0eSh0aGlzLnRpbWVwaWNrZXJWYWx1ZUl0ZW0oKS5yaWdodGhvdXIoKSkpIHtcbiAgICAgICAgICB0aGlzLnRpbWVwaWNrZXJWYWx1ZUl0ZW0udXBkYXRlKGN1cnJlbnQgPT4ge1xuICAgICAgICAgICAgY3VycmVudC5yaWdodGhvdXIuc2V0KDApO1xuXG4gICAgICAgICAgICByZXR1cm4gY3VycmVudDtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICB0YXJnZXQudmFsdWUgPSAnMDAnO1xuXG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoTnVtYmVyKHRoaXMudGltZXBpY2tlclZhbHVlSXRlbSgpLnJpZ2h0aG91cigpKSA8IDEwKSB7XG4gICAgICAgICAgdGFyZ2V0LnZhbHVlID0gYDAke051bWJlcih0aGlzLnRpbWVwaWNrZXJWYWx1ZUl0ZW0oKS5yaWdodGhvdXIoKSl9YDtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAnbGVmdG1pbnV0ZSc6XG4gICAgICAgIHRoaXMudGltZXBpY2tlclZhcmlhYmxlcygpLmxlZnQudXBkYXRlKGN1cnJlbnQgPT4ge1xuICAgICAgICAgIGN1cnJlbnQuc2VsZWN0ZWRNaW51dGUgPSAhaXNFbXB0eSh0aGlzLnRpbWVwaWNrZXJWYWx1ZUl0ZW0oKS5sZWZ0bWludXRlKCkpID8gdGhpcy50aW1lcGlja2VyVmFsdWVJdGVtKCkubGVmdG1pbnV0ZSgpIDogMDtcblxuICAgICAgICAgIHJldHVybiBjdXJyZW50O1xuICAgICAgICB9KTtcbiAgICAgICAgaWYgKChOdW1iZXIodGhpcy50aW1lcGlja2VyVmFsdWVJdGVtKCkubGVmdG1pbnV0ZSgpKSA9PT0gMCkgfHwgaXNFbXB0eSh0aGlzLnRpbWVwaWNrZXJWYWx1ZUl0ZW0oKS5sZWZ0bWludXRlKCkpKSB7XG4gICAgICAgICAgdGhpcy50aW1lcGlja2VyVmFsdWVJdGVtLnVwZGF0ZShjdXJyZW50ID0+IHtcbiAgICAgICAgICAgIGN1cnJlbnQubGVmdG1pbnV0ZS5zZXQoMCk7XG5cbiAgICAgICAgICAgIHJldHVybiBjdXJyZW50O1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIHRhcmdldC52YWx1ZSA9ICcwMCc7XG5cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChOdW1iZXIodGhpcy50aW1lcGlja2VyVmFsdWVJdGVtKCkubGVmdG1pbnV0ZSgpKSA8IDEwKSB7XG4gICAgICAgICAgdGFyZ2V0LnZhbHVlID0gYDAke051bWJlcih0aGlzLnRpbWVwaWNrZXJWYWx1ZUl0ZW0oKS5sZWZ0bWludXRlKCkpfWA7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgJ3JpZ2h0bWludXRlJzpcbiAgICAgICAgdGhpcy50aW1lcGlja2VyVmFyaWFibGVzKCkucmlnaHQudXBkYXRlKGN1cnJlbnQgPT4ge1xuICAgICAgICAgIGN1cnJlbnQuc2VsZWN0ZWRNaW51dGUgPSAhaXNFbXB0eSh0aGlzLnRpbWVwaWNrZXJWYWx1ZUl0ZW0oKS5yaWdodG1pbnV0ZSgpKSA/IHRoaXMudGltZXBpY2tlclZhbHVlSXRlbSgpLnJpZ2h0bWludXRlKCkgOiAwO1xuXG4gICAgICAgICAgcmV0dXJuIGN1cnJlbnQ7XG4gICAgICAgIH0pO1xuICAgICAgICBpZiAoKE51bWJlcih0aGlzLnRpbWVwaWNrZXJWYWx1ZUl0ZW0oKS5yaWdodG1pbnV0ZSgpKSA9PT0gMCkgfHwgaXNFbXB0eSh0aGlzLnRpbWVwaWNrZXJWYWx1ZUl0ZW0oKS5yaWdodG1pbnV0ZSgpKSkge1xuICAgICAgICAgIHRoaXMudGltZXBpY2tlclZhbHVlSXRlbS51cGRhdGUoY3VycmVudCA9PiB7XG4gICAgICAgICAgICBjdXJyZW50LnJpZ2h0bWludXRlLnNldCgwKTtcblxuICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnQ7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgdGFyZ2V0LnZhbHVlID0gJzAwJztcblxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKE51bWJlcih0aGlzLnRpbWVwaWNrZXJWYWx1ZUl0ZW0oKS5yaWdodG1pbnV0ZSgpKSA8IDEwKSB7XG4gICAgICAgICAgdGFyZ2V0LnZhbHVlID0gYDAke051bWJlcih0aGlzLnRpbWVwaWNrZXJWYWx1ZUl0ZW0oKS5yaWdodG1pbnV0ZSgpKX1gO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBoYW5kbGVyQ2hhbmdlVGltZVZhbHVlKGV2ZW50OiBzdHJpbmcgfCBudW1iZXIsIHR5cGU6IGBsZWZ0aG91cmAgfCBgbGVmdG1pbnV0ZWAgfCBgcmlnaHRob3VyYCB8IGByaWdodG1pbnV0ZWApIHtcbiAgICB0aGlzLnRpbWVwaWNrZXJWYWx1ZUl0ZW0udXBkYXRlKGN1cnJlbnQgPT4ge1xuICAgICAgY3VycmVudFt0eXBlXS5zZXQoZXZlbnQgYXMgbnVtYmVyKTtcblxuICAgICAgcmV0dXJuIGN1cnJlbnQ7XG4gICAgfSk7XG5cbiAgICBjb25zdCBzaWRlID0gdHlwZS5pbmNsdWRlcyhTaWRlRW51bS5sZWZ0KSA/IFNpZGVFbnVtLmxlZnQgOiBTaWRlRW51bS5yaWdodDtcbiAgICBjb25zdCBhdHRyID0gdHlwZS5pbmNsdWRlcygnaG91cicpID8gJ2hvdXInIDogJ21pbnV0ZSc7XG5cbiAgICB0aGlzLnNwbGl0UGlja2VyRGF0ZS51cGRhdGUoY3VycmVudCA9PiB7XG4gICAgICBjdXJyZW50W3NpZGUgPT09IFNpZGVFbnVtLmxlZnQgPyAnc3RhcnQnIDogJ2VuZCddLnVwZGF0ZShzaWRlQ3VycmVudCA9PiB7XG4gICAgICAgIHNpZGVDdXJyZW50W2F0dHJdID0gZXZlbnQgYXMgbnVtYmVyO1xuXG4gICAgICAgIHJldHVybiBzaWRlQ3VycmVudDtcbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm4gY3VycmVudDtcbiAgICB9KTtcbiAgICBpZiAoKHR5cGUgIT09ICdsZWZ0aG91cicgJiYgdHlwZSAhPT0gJ3JpZ2h0aG91cicpIHx8IGV2ZW50ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuaXNaZXJvLnNldChmYWxzZSk7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKChgJHtldmVudH1gLmxlbmd0aCA9PT0gMikgfHwgKE51bWJlcihldmVudCkgPiAyKSB8fCAoTnVtYmVyKGV2ZW50KSA8PSAyICYmIE51bWJlcihldmVudCkgPiAwICYmIHRoaXMuaXNaZXJvKCkpIHx8ICh0aGlzLmlzWmVybygpICYmICF0aGlzLmtleUNvZGVCYWNrc3BhY2UoKSkpIHtcbiAgICAgIHRoaXMuaXNaZXJvLnNldChmYWxzZSk7XG4gICAgICAodGhpcy5mdW5jdGlvbkNvbnRyb2xzLmdldCh0eXBlID09PSAnbGVmdGhvdXInID8gYCR7U2lkZUVudW0ubGVmdH1taW51dGVgIDogYCR7U2lkZUVudW0ucmlnaHR9bWludXRlYCkgYXMgSUlucHV0RnVuY3Rpb25Db250cm9sRXZlbnQpPy5mb2N1cygpO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmIChOdW1iZXIoZXZlbnQpID09PSAwICYmICF0aGlzLmtleUNvZGVCYWNrc3BhY2UoKSkge1xuICAgICAgdGhpcy5pc1plcm8uc2V0KHRydWUpO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIGhhbmRsZXJTaG93TGlzdERyb3Bkb3duKGV2ZW50OiBib29sZWFuLCB0eXBlOiBzdHJpbmcpIHtcbiAgICB0aGlzLmNoZWNrU2hvd0xpc3REcm9wZG93bi51cGRhdGUoKGN1cnJlbnQpID0+IHtcbiAgICAgIGN1cnJlbnRbdHlwZV0gPSBldmVudDtcblxuICAgICAgcmV0dXJuIGN1cnJlbnQ7XG4gICAgfSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgY29udmVydEl0ZW1Nb250aCA9IChpdGVtOiBhbnkpID0+IHtcbiAgICBpZiAoIWl0ZW0pIHtcbiAgICAgIHJldHVybiAnJztcbiAgICB9XG4gICAgc2V0KGl0ZW0sICdsYWJlbERpc3BsYXknLCB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KGl0ZW0ubGFiZWwgfHwgJyAnLCB7IHllYXI6ICcnIH0pKTtcblxuICAgIHJldHVybiBpdGVtO1xuICB9XG4gIHByb3RlY3RlZCBjb252ZXJ0SXRlbVllYXIgPSAoaXRlbTogYW55KSA9PiB7XG4gICAgaWYgKCFpdGVtKSB7XG4gICAgICByZXR1cm4gJyc7XG4gICAgfVxuICAgIGl0ZW0ubGFiZWxEaXNwbGF5ID0gdGhpcy50cmFuc2xhdGUuaW5zdGFudCgnaTE4bl95ZWFyX3BhcmFtJywgeyB5ZWFyOiBpdGVtLmxhYmVsIH0pO1xuXG4gICAgcmV0dXJuIGl0ZW07XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZU1vbnRoc0luVmlldygpIHtcbiAgICBpZiAodGhpcy5lbmREYXRlKCkpIHtcbiAgICAgIGlmICghdGhpcy5pc1NpbmdsZSgpICYmIHRoaXMubGVmdENhbGVuZGFyKCkubW9udGggJiYgdGhpcy5yaWdodENhbGVuZGFyKCkubW9udGggJiZcbiAgICAgICAgKCh0aGlzLmxlZnRDYWxlbmRhcigpICYmIHRoaXMuc3RhcnREYXRlKCk/LmZvcm1hdCgnWVlZWS1NTScpID09PSB0aGlzLmxlZnRDYWxlbmRhcigpLm1vbnRoPy5mb3JtYXQoJ1lZWVktTU0nKSkgfHwgKHRoaXMucmlnaHRDYWxlbmRhcigpICYmIHRoaXMuc3RhcnREYXRlKCk/LmZvcm1hdCgnWVlZWS1NTScpID09PSB0aGlzLnJpZ2h0Q2FsZW5kYXIoKS5tb250aD8uZm9ybWF0KCdZWVlZLU1NJykpKVxuICAgICAgICAmJiAodGhpcy5lbmREYXRlKCk/LmZvcm1hdCgnWVlZWS1NTScpID09PSB0aGlzLmxlZnRDYWxlbmRhcigpLm1vbnRoPy5mb3JtYXQoJ1lZWVktTU0nKSB8fCB0aGlzLmVuZERhdGUoKT8uZm9ybWF0KCdZWVlZLU1NJykgPT09IHRoaXMucmlnaHRDYWxlbmRhcigpLm1vbnRoPy5mb3JtYXQoJ1lZWVktTU0nKSlcbiAgICAgICkgeyByZXR1cm47IH1cblxuICAgICAgaWYgKHRoaXMuc3RhcnREYXRlKCkpIHtcbiAgICAgICAgdGhpcy5sZWZ0Q2FsZW5kYXIudXBkYXRlKGN1cnJlbnQgPT4ge1xuICAgICAgICAgIGN1cnJlbnQubW9udGggPSB0aGlzLnN0YXJ0RGF0ZSgpPy5jbG9uZSgpPy5kYXRlKDIpO1xuXG4gICAgICAgICAgcmV0dXJuIGN1cnJlbnQ7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlmICh0aGlzLmVuZERhdGUoKT8ubW9udGgoKSAhPT0gdGhpcy5zdGFydERhdGUoKT8ubW9udGgoKSB8fCB0aGlzLmVuZERhdGUoKT8ueWVhcigpICE9PSB0aGlzLnN0YXJ0RGF0ZSgpPy55ZWFyKCkpIHtcbiAgICAgICAgICB0aGlzLnJpZ2h0Q2FsZW5kYXIudXBkYXRlKGN1cnJlbnQgPT4ge1xuICAgICAgICAgICAgY3VycmVudC5tb250aCA9IHRoaXMuZW5kRGF0ZSgpPy5jbG9uZSgpPy5kYXRlKDIpO1xuXG4gICAgICAgICAgICByZXR1cm4gY3VycmVudDtcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnJpZ2h0Q2FsZW5kYXIudXBkYXRlKGN1cnJlbnQgPT4ge1xuICAgICAgICAgIGN1cnJlbnQubW9udGggPSB0aGlzLnN0YXJ0RGF0ZSgpPy5jbG9uZSgpPy5kYXRlKDIpPy5hZGQoMSwgJ21vbnRoJyk7XG5cbiAgICAgICAgICByZXR1cm4gY3VycmVudDtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuc3RhcnREYXRlKCkgJiYgdGhpcy5sZWZ0Q2FsZW5kYXIoKS5tb250aCAmJiB0aGlzLnJpZ2h0Q2FsZW5kYXIoKS5tb250aCAmJiB0aGlzLmxlZnRDYWxlbmRhcigpLm1vbnRoPy5mb3JtYXQoJ1lZWVktTU0nKSAhPT0gdGhpcy5zdGFydERhdGUoKT8uZm9ybWF0KCdZWVlZLU1NJykgJiYgdGhpcy5yaWdodENhbGVuZGFyKCkubW9udGg/LmZvcm1hdCgnWVlZWS1NTScpICE9PSB0aGlzLnN0YXJ0RGF0ZSgpPy5mb3JtYXQoJ1lZWVktTU0nKSkge1xuICAgICAgdGhpcy5sZWZ0Q2FsZW5kYXIudXBkYXRlKGN1cnJlbnQgPT4ge1xuICAgICAgICBjdXJyZW50Lm1vbnRoID0gdGhpcy5zdGFydERhdGUoKT8uY2xvbmUoKT8uZGF0ZSgyKTtcblxuICAgICAgICByZXR1cm4gY3VycmVudDtcbiAgICAgIH0pO1xuICAgICAgdGhpcy5yaWdodENhbGVuZGFyLnVwZGF0ZShjdXJyZW50ID0+IHtcbiAgICAgICAgY3VycmVudC5tb250aCA9IHRoaXMuc3RhcnREYXRlKCk/LmNsb25lKCk/LmRhdGUoMik/LmFkZCgxLCAnbW9udGgnKTtcblxuICAgICAgICByZXR1cm4gY3VycmVudDtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgc2V0VGltZUlucHV0KHNpZGU6IFNpZGVFbnVtKSB7XG4gICAgY29uc3QgaG91ciA9IHBhcnNlSW50KGAke3RoaXMudGltZXBpY2tlclZhcmlhYmxlcygpW3NpZGVdKCkuc2VsZWN0ZWRIb3VyfWApO1xuICAgIGNvbnN0IG1pbnV0ZSA9IHBhcnNlSW50KGAke3RoaXMudGltZXBpY2tlclZhcmlhYmxlcygpW3NpZGVdKCkuc2VsZWN0ZWRNaW51dGV9YCk7XG5cbiAgICBpZiAoc2lkZSA9PT0gU2lkZUVudW0ubGVmdCAmJiB0aGlzLnN0YXJ0RGF0ZSgpKSB7XG4gICAgICBsZXQgc3RhcnQgPSB0aGlzLnN0YXJ0RGF0ZSgpPy5jbG9uZSgpO1xuXG4gICAgICBzdGFydCA9IHN0YXJ0Py5ob3VyKGhvdXIpO1xuICAgICAgc3RhcnQgPSBzdGFydD8ubWludXRlKG1pbnV0ZSk7XG4gICAgICB0aGlzLnNldFN0YXJ0RGF0ZShzdGFydCk7XG4gICAgICBpZiAodGhpcy5pc1NpbmdsZSgpKSB7XG4gICAgICAgIHRoaXMuZW5kRGF0ZS5zZXQodGhpcy5zdGFydERhdGUoKT8uY2xvbmUoKSk7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5lbmREYXRlKCkgJiYgdGhpcy5lbmREYXRlKCk/LmZvcm1hdCgnWVlZWS1NTS1ERCcpID09PSBzdGFydD8uZm9ybWF0KCdZWVlZLU1NLUREJykgJiYgdGhpcy5lbmREYXRlKCk/LmlzQmVmb3JlKHN0YXJ0KSkge1xuICAgICAgICB0aGlzLnNldEVuZERhdGUoc3RhcnQ/LmNsb25lKCkpO1xuICAgICAgfVxuICAgICAgaWYgKCF0aGlzLmVuZERhdGUoKSAmJiBzdGFydCAmJiB0aGlzLmhhc1RpbWVQaWNrZXIoKSkge1xuICAgICAgICBjb25zdCBzdGFydENsb25lID0gdGhpcy5nZXREYXRlV2l0aFRpbWUoc3RhcnQsIFNpZGVFbnVtLnJpZ2h0KTtcblxuICAgICAgICBpZiAoc3RhcnRDbG9uZS5pc0JlZm9yZShzdGFydCkpIHtcbiAgICAgICAgICB0aGlzLnRpbWVwaWNrZXJWYXJpYWJsZXMoKVtTaWRlRW51bS5yaWdodF0udXBkYXRlKGN1cnJlbnQgPT4ge1xuICAgICAgICAgICAgY3VycmVudC5zZWxlY3RlZEhvdXIgPSBob3VyO1xuICAgICAgICAgICAgY3VycmVudC5zZWxlY3RlZE1pbnV0ZSA9IG1pbnV0ZTtcblxuICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnQ7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAodGhpcy5lbmREYXRlKCkpIHtcbiAgICAgIGxldCBlbmQgPSB0aGlzLmVuZERhdGUoKT8uY2xvbmUoKTtcblxuICAgICAgZW5kID0gZW5kPy5ob3VyKGhvdXIpO1xuICAgICAgZW5kID0gZW5kPy5taW51dGUobWludXRlKTtcbiAgICAgIHRoaXMuc2V0RW5kRGF0ZShlbmQpO1xuICAgIH1cbiAgICB0aGlzLnVwZGF0ZUNhbGVuZGFycygpO1xuICAgIHRoaXMucmVuZGVyVGltZVBpY2tlcihTaWRlRW51bS5sZWZ0KTtcbiAgICB0aGlzLnJlbmRlclRpbWVQaWNrZXIoU2lkZUVudW0ucmlnaHQpO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVDYWxlbmRhcnMoKSB7XG4gICAgdGhpcy5yZW5kZXJDYWxlbmRhcihTaWRlRW51bS5sZWZ0KTtcbiAgICB0aGlzLnJlbmRlckNhbGVuZGFyKFNpZGVFbnVtLnJpZ2h0KTtcbiAgICBpZiAodGhpcy5lbmREYXRlKCkgPT09IG51bGwpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5jYWxjdWxhdGVTZWxlY3RlZExhYmVsKCk7XG4gIH1cblxuICBwcml2YXRlIHJlbmRlckNhbGVuZGFyKHNpZGU6IFNpZGVFbnVtKSB7IC8vIHNpZGUgZW51bVxuICAgIGNvbnN0IG1haW5DYWxlbmRhcjogeyBjYWxlbmRhcj86IElDYWxlbmRhciwgbW9udGg/OiBkYXlqcy5EYXlqcyB9ID0gKHNpZGUgPT09IFNpZGVFbnVtLmxlZnQpID8gdGhpcy5sZWZ0Q2FsZW5kYXIoKSA6IHRoaXMucmlnaHRDYWxlbmRhcigpO1xuXG4gICAgaWYgKCFtYWluQ2FsZW5kYXIubW9udGggfHwgKHRoaXMuZGF0ZU9wdGlvbnMoKS5maXJzdERheSA9PT0gdW5kZWZpbmVkIHx8IHRoaXMuZGF0ZU9wdGlvbnMoKS5maXJzdERheSA9PT0gdW5kZWZpbmVkKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBtb250aCA9IG1haW5DYWxlbmRhci5tb250aC5tb250aCgpO1xuICAgIGNvbnN0IHllYXIgPSBtYWluQ2FsZW5kYXIubW9udGgueWVhcigpO1xuICAgIGNvbnN0IGhvdXIgPSBtYWluQ2FsZW5kYXIubW9udGguaG91cigpO1xuICAgIGNvbnN0IG1pbnV0ZSA9IG1haW5DYWxlbmRhci5tb250aC5taW51dGUoKTtcbiAgICBjb25zdCBzZWNvbmQgPSBtYWluQ2FsZW5kYXIubW9udGguc2Vjb25kKCk7XG4gICAgY29uc3QgZGF5c0luTW9udGggPSBkYXlqcyhuZXcgRGF0ZSh5ZWFyLCBtb250aCkpLmRheXNJbk1vbnRoKCk7XG4gICAgY29uc3QgZmlyc3REYXkgPSBkYXlqcyhuZXcgRGF0ZSh5ZWFyLCBtb250aCwgMSkpO1xuICAgIGNvbnN0IGxhc3REYXkgPSBkYXlqcyhuZXcgRGF0ZSh5ZWFyLCBtb250aCwgZGF5c0luTW9udGgpKTtcbiAgICBjb25zdCBsYXN0TW9udGggPSBkYXlqcyhmaXJzdERheSkuc3VidHJhY3QoMSwgJ21vbnRoJykubW9udGgoKTtcbiAgICBjb25zdCBsYXN0WWVhciA9IGRheWpzKGZpcnN0RGF5KS5zdWJ0cmFjdCgxLCAnbW9udGgnKS55ZWFyKCk7XG4gICAgY29uc3QgZGF5c0luTGFzdE1vbnRoID0gZGF5anMobmV3IERhdGUobGFzdFllYXIsIGxhc3RNb250aCkpLmRheXNJbk1vbnRoKCk7XG4gICAgY29uc3QgZGF5T2ZXZWVrID0gZmlyc3REYXkuZGF5KCk7XG4gICAgY29uc3QgY2FsZW5kYXI6IElDYWxlbmRhciA9IHt9O1xuXG4gICAgY2FsZW5kYXIuZmlyc3REYXkgPSBmaXJzdERheTtcbiAgICBjYWxlbmRhci5sYXN0RGF5ID0gbGFzdERheTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IDY7IGkrKykge1xuICAgICAgY2FsZW5kYXJbaV0gPSBbXTtcbiAgICB9XG4gICAgbGV0IHN0YXJ0RGF5ID0gZGF5c0luTGFzdE1vbnRoIC0gZGF5T2ZXZWVrICsgKHRoaXMuZGF0ZU9wdGlvbnMoKS5maXJzdERheSA/PyAxKSArIDE7XG5cbiAgICBpZiAoc3RhcnREYXkgPiBkYXlzSW5MYXN0TW9udGgpIHtcbiAgICAgIHN0YXJ0RGF5IC09IDc7XG4gICAgfVxuICAgIGlmIChkYXlPZldlZWsgPT09IHRoaXMuZGF0ZU9wdGlvbnMoKS5maXJzdERheSkge1xuICAgICAgc3RhcnREYXkgPSBkYXlzSW5MYXN0TW9udGggLSA2O1xuICAgIH1cbiAgICBsZXQgY3VyRGF0ZSA9IGRheWpzKG5ldyBEYXRlKGxhc3RZZWFyLCBsYXN0TW9udGgsIHN0YXJ0RGF5LCAxMiwgbWludXRlLCBzZWNvbmQpKTtcblxuICAgIGZvciAobGV0IGkgPSAwLCBjb2wgPSAwLCByb3cgPSAwOyBpIDwgNDI7IGkrKywgY29sKyssIGN1ckRhdGUgPSBkYXlqcyhjdXJEYXRlKS5hZGQoMjQsICdob3VyJykpIHtcbiAgICAgIGlmIChpID4gMCAmJiBjb2wgJSA3ID09PSAwKSB7XG4gICAgICAgIGNvbCA9IDA7XG4gICAgICAgIHJvdysrO1xuICAgICAgfVxuICAgICAgY2FsZW5kYXJbcm93XVtjb2xdID0gY3VyRGF0ZS5jbG9uZSgpLmhvdXIoaG91cikubWludXRlKG1pbnV0ZSkuc2Vjb25kKHNlY29uZCk7XG4gICAgICBjdXJEYXRlID0gY3VyRGF0ZS5ob3VyKDEyKTtcblxuICAgICAgY29uc3QgbWluRGF0ZSA9IHRoaXMubWluRGF0ZSgpIGFzIGRheWpzLkRheWpzO1xuICAgICAgY29uc3QgbWF4RGF0ZSA9IHRoaXMubWF4RGF0ZSgpIGFzIGRheWpzLkRheWpzO1xuICAgICAgaWYgKG1pbkRhdGUgJiYgY2FsZW5kYXJbcm93XVtjb2xdLmZvcm1hdCgnWVlZWS1NTS1ERCcpID09PSBtaW5EYXRlPy5mb3JtYXQoJ1lZWVktTU0tREQnKSAmJiBjYWxlbmRhcltyb3ddW2NvbF0uaXNCZWZvcmUobWluRGF0ZSkgJiYgc2lkZSA9PT0gJ2xlZnQnKSB7XG4gICAgICAgIGNhbGVuZGFyW3Jvd11bY29sXSA9IG1pbkRhdGU/LmNsb25lKCk7XG4gICAgICB9XG4gICAgICBpZiAobWF4RGF0ZSAmJiBjYWxlbmRhcltyb3ddW2NvbF0uZm9ybWF0KCdZWVlZLU1NLUREJykgPT09IG1heERhdGU/LmZvcm1hdCgnWVlZWS1NTS1ERCcpICYmIGNhbGVuZGFyW3Jvd11bY29sXS5pc0FmdGVyKG1heERhdGUpICYmIHNpZGUgPT09ICdyaWdodCcpIHtcbiAgICAgICAgY2FsZW5kYXJbcm93XVtjb2xdID0gbWF4RGF0ZT8uY2xvbmUoKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoc2lkZSA9PT0gU2lkZUVudW0ubGVmdCkge1xuICAgICAgdGhpcy5sZWZ0Q2FsZW5kYXIudXBkYXRlKGN1cnJlbnQgPT4ge1xuICAgICAgICBjdXJyZW50LmNhbGVuZGFyID0gY2FsZW5kYXI7XG5cbiAgICAgICAgcmV0dXJuIGN1cnJlbnQ7XG4gICAgICB9KTtcbiAgICB9XG4gICAgaWYgKHNpZGUgPT09IFNpZGVFbnVtLnJpZ2h0KSB7XG4gICAgICB0aGlzLnJpZ2h0Q2FsZW5kYXIudXBkYXRlKGN1cnJlbnQgPT4ge1xuICAgICAgICBjdXJyZW50LmNhbGVuZGFyID0gY2FsZW5kYXI7XG5cbiAgICAgICAgcmV0dXJuIGN1cnJlbnQ7XG4gICAgICB9KTtcbiAgICB9XG4gICAgY29uc3QgbWluRGF0ZSA9IHNpZGUgPT09ICdsZWZ0JyA/ICh0aGlzLm1pbkRhdGUoKSBhcyBkYXlqcy5EYXlqcykgOiB0aGlzLnN0YXJ0RGF0ZSgpO1xuICAgIGNvbnN0IG1heERhdGUgPSB0aGlzLm1heERhdGUoKSBhcyBkYXlqcy5EYXlqcztcblxuICAgIHRoaXMuY2FsZW5kYXJWYXJpYWJsZXMoKVtzaWRlXS5zZXQoe1xuICAgICAgbW9udGg6IG1vbnRoLFxuICAgICAgeWVhcjogeWVhcixcbiAgICAgIGhvdXI6IGhvdXIsXG4gICAgICBtaW51dGU6IG1pbnV0ZSxcbiAgICAgIHNlY29uZDogc2Vjb25kLFxuICAgICAgZGF5c0luTW9udGg6IGRheXNJbk1vbnRoLFxuICAgICAgZmlyc3REYXk6IGZpcnN0RGF5LFxuICAgICAgbGFzdERheTogbGFzdERheSxcbiAgICAgIGxhc3RNb250aDogbGFzdE1vbnRoLFxuICAgICAgbGFzdFllYXI6IGxhc3RZZWFyLFxuICAgICAgZGF5c0luTGFzdE1vbnRoOiBkYXlzSW5MYXN0TW9udGgsXG4gICAgICBkYXlPZldlZWs6IGRheU9mV2VlayxcbiAgICAgIGNhbFJvd3M6IHNpZ25hbChBcnJheS5mcm9tKEFycmF5KDYpLmtleXMoKSkpLFxuICAgICAgY2FsQ29sczogc2lnbmFsKEFycmF5LmZyb20oQXJyYXkoNykua2V5cygpKSksXG4gICAgICBjbGFzc2VzOiB7fSxcbiAgICAgIG1pbkRhdGU6IG1pbkRhdGUsXG4gICAgICBtYXhEYXRlOiBtYXhEYXRlLFxuICAgICAgY2FsZW5kYXI6IGNhbGVuZGFyLFxuICAgICAgZHJvcGRvd25zOiBzaWduYWwoe30pXG4gICAgfSk7XG4gICAgaWYgKHRoaXMuc2hvd0Ryb3Bkb3duc1NlbGVjdCgpKSB7XG4gICAgICBjb25zdCBjdXJyZW50TW9udGggPSBjYWxlbmRhclsxXVsxXS5tb250aCgpO1xuICAgICAgY29uc3QgY3VycmVudFllYXIgPSBjYWxlbmRhclsxXVsxXS55ZWFyKCk7XG4gICAgICBjb25zdCBtYXhZZWFyID0gKG1heERhdGUgJiYgbWF4RGF0ZT8ueWVhcigpKSB8fCBERUZBVUxUX01BWF9ZRUFSO1xuICAgICAgY29uc3QgbWluWWVhciA9IChtaW5EYXRlICYmIG1pbkRhdGU/LnllYXIoKSkgfHwgREVGQVVMVF9NSU5fWUVBUjtcbiAgICAgIGNvbnN0IGluTWluWWVhciA9IGN1cnJlbnRZZWFyID09PSBtaW5ZZWFyO1xuICAgICAgY29uc3QgaW5NYXhZZWFyID0gY3VycmVudFllYXIgPT09IG1heFllYXI7XG4gICAgICBjb25zdCB5ZWFycyA9IFtdO1xuXG4gICAgICBmb3IgKGxldCB5ID0gbWluWWVhcjsgeSA8PSBtYXhZZWFyOyB5KyspIHtcbiAgICAgICAgeWVhcnMucHVzaCh5KTtcbiAgICAgIH1cbiAgICAgIHRoaXMuY2FsZW5kYXJWYXJpYWJsZXMoKVtzaWRlXSgpLmRyb3Bkb3ducz8uc2V0KHtcbiAgICAgICAgY3VycmVudE1vbnRoOiBjdXJyZW50TW9udGgsXG4gICAgICAgIGN1cnJlbnRZZWFyOiBjdXJyZW50WWVhcixcbiAgICAgICAgbWF4WWVhcjogbWF4WWVhcixcbiAgICAgICAgbWluWWVhcjogbWluWWVhcixcbiAgICAgICAgaW5NaW5ZZWFyOiBpbk1pblllYXIsXG4gICAgICAgIGluTWF4WWVhcjogaW5NYXhZZWFyLFxuICAgICAgICBtb250aEFycmF5czogc2lnbmFsKEFycmF5LmZyb20oQXJyYXkoMTIpLmtleXMoKSkpLFxuICAgICAgICB5ZWFyQXJyYXlzOiBzaWduYWwoeWVhcnMpXG4gICAgICB9KTtcbiAgICB9XG4gICAgdGhpcy5idWlsZENlbGxzKGNhbGVuZGFyLCBzaWRlKTtcbiAgfVxuXG4gIHByaXZhdGUgYnVpbGRDZWxscyhjYWxlbmRhcjogSUNhbGVuZGFyLCBzaWRlOiBTaWRlRW51bSkge1xuICAgIGZvciAobGV0IHJvdyA9IDA7IHJvdyA8IDY7IHJvdysrKSB7XG4gICAgICBjb25zdCBjbGFzc2xlc3MgPSB0aGlzLmNhbGVuZGFyVmFyaWFibGVzKClbc2lkZV0oKTtcblxuICAgICAgaWYgKGNsYXNzbGVzcy5jbGFzc2VzKSB7XG4gICAgICAgIGNsYXNzbGVzcy5jbGFzc2VzW3Jvd10gPSB7fTtcbiAgICAgIH1cbiAgICAgIGZvciAobGV0IGNvbCA9IDA7IGNvbCA8IDc7IGNvbCsrKSB7XG4gICAgICAgIGNvbnN0IGNsYXNzZXMgPSBbXTtcblxuICAgICAgICBjb25zdCBzdGFydERhdGUgPSB0aGlzLnN0YXJ0RGF0ZSgpIGFzIGRheWpzLkRheWpzO1xuICAgICAgICBjb25zdCBlbmREYXRlID0gdGhpcy5lbmREYXRlKCkgYXMgZGF5anMuRGF5anM7XG4gICAgICAgIGNvbnN0IG5vd0hvdmVyZWREYXRlID0gdGhpcy5ub3dIb3ZlcmVkRGF0ZSgpO1xuXG4gICAgICAgIGlmIChjYWxlbmRhcltyb3ddW2NvbF0uaXNTYW1lKG5ldyBEYXRlKCksICdkYXknKSkge1xuICAgICAgICAgIGNsYXNzZXMucHVzaCgndG9kYXknKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY2FsZW5kYXJbcm93XVtjb2xdLmlzb1dlZWtkYXkoKSA+IDUpIHtcbiAgICAgICAgICBjbGFzc2VzLnB1c2goJ3dlZWtlbmQnKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY2FsZW5kYXJbcm93XVtjb2xdLm1vbnRoKCkgIT09IGNhbGVuZGFyWzFdWzFdLm1vbnRoKCkpIHtcbiAgICAgICAgICBjbGFzc2VzLnB1c2goJ29mZicpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLm1pbkRhdGUoKSAmJiBjYWxlbmRhcltyb3ddW2NvbF0uaXNCZWZvcmUodGhpcy5taW5EYXRlKCksICdkYXknKSkge1xuICAgICAgICAgIGNsYXNzZXMucHVzaCgnb2ZmJywgJ2Rpc2FibGVkJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuY2FsZW5kYXJWYXJpYWJsZXMoKVtzaWRlXSgpLm1heERhdGUgJiYgY2FsZW5kYXJbcm93XVtjb2xdLmlzQWZ0ZXIodGhpcy5jYWxlbmRhclZhcmlhYmxlcygpW3NpZGVdKCkubWF4RGF0ZSwgJ2RheScpKSB7XG4gICAgICAgICAgY2xhc3Nlcy5wdXNoKCdvZmYnLCAnZGlzYWJsZWQnKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoc3RhcnREYXRlICYmIGNhbGVuZGFyW3Jvd11bY29sXS5mb3JtYXQoJ1lZWVktTU0tREQnKSA9PT0gc3RhcnREYXRlPy5mb3JtYXQoJ1lZWVktTU0tREQnKSkge1xuICAgICAgICAgIGNsYXNzZXMucHVzaCgnYWN0aXZlJywgJ3N0YXJ0LWRhdGUnKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZW5kRGF0ZSAhPT0gbnVsbCAmJiBjYWxlbmRhcltyb3ddW2NvbF0uZm9ybWF0KCdZWVlZLU1NLUREJykgPT09IGVuZERhdGU/LmZvcm1hdCgnWVlZWS1NTS1ERCcpKSB7XG4gICAgICAgICAgY2xhc3Nlcy5wdXNoKCdhY3RpdmUnLCAnZW5kLWRhdGUnKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoc3RhcnREYXRlICYmIGNhbGVuZGFyW3Jvd11bY29sXS5mb3JtYXQoJ1lZWVktTU0tREQnKSA9PT0gc3RhcnREYXRlPy5mb3JtYXQoJ1lZWVktTU0tREQnKSAmJiAoIWVuZERhdGUgfHwgZW5kRGF0ZSAhPT0gbnVsbCAmJiBjYWxlbmRhcltyb3ddW2NvbF0uZm9ybWF0KCdZWVlZLU1NLUREJykgPT09IGVuZERhdGU/LmZvcm1hdCgnWVlZWS1NTS1ERCcpKSkge1xuICAgICAgICAgIGNsYXNzZXMucHVzaCgnYWN0aXZlJywgJ2Z1bGwtZGF0ZScpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHN0YXJ0RGF0ZSAmJiBlbmREYXRlICYmICgobm93SG92ZXJlZERhdGUgIT09IG51bGwgJiYgdGhpcy5waWNraW5nRGF0ZSgpKSB8fCBlbmREYXRlICE9PSBudWxsKSAmJiAoY2FsZW5kYXJbcm93XVtjb2xdID4gc3RhcnREYXRlICYmIChjYWxlbmRhcltyb3ddW2NvbF0gPCBlbmREYXRlIHx8IChub3dIb3ZlcmVkRGF0ZSAmJiBjYWxlbmRhcltyb3ddW2NvbF0gPCBub3dIb3ZlcmVkRGF0ZSAmJiB0aGlzLnBpY2tpbmdEYXRlKCkpKSkpIHtcbiAgICAgICAgICBjbGFzc2VzLnB1c2goIWNsYXNzZXMuZmluZChlbCA9PiBlbCA9PT0gJ29mZicpID8gJ2luLXJhbmdlJyA6ICdmb2N1cy1vZmYnKTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgY25hbWUgPSAnJywgZGlzYWJsZWQgPSBmYWxzZTtcblxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNsYXNzZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICBjbmFtZSArPSBjbGFzc2VzW2ldICsgJyAnO1xuXG4gICAgICAgICAgaWYgKGNsYXNzZXNbaV0gPT09ICdkaXNhYmxlZCcpIHtcbiAgICAgICAgICAgIGRpc2FibGVkID0gdHJ1ZTtcbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGlmICghZGlzYWJsZWQpIHtcbiAgICAgICAgICBjbmFtZSArPSAnYXZhaWxhYmxlJztcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjbGFzc2xlc3MuY2xhc3Nlcykge1xuICAgICAgICAgIGNsYXNzbGVzcy5jbGFzc2VzW3Jvd11bY29sXSA9IGNuYW1lLnJlcGxhY2UoL15cXHMrfFxccyskL2csICcnKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgcmVuZGVyVGltZVBpY2tlcihzaWRlOiBTaWRlRW51bSkge1xuICAgIGxldCBzZWxlY3RlZDogZGF5anMuRGF5anMgPSBkYXlqcygpLCBtaW5EYXRlO1xuICAgIGNvbnN0IG1heERhdGUgPSB0aGlzLm1heERhdGUoKTtcbiAgICBjb25zdCBzdGFydERhdGUgPSB0aGlzLnN0YXJ0RGF0ZSgpO1xuICAgIGNvbnN0IGVuZERhdGUgPSB0aGlzLmVuZERhdGUoKTtcblxuICAgIGlmIChzaWRlID09PSBTaWRlRW51bS5sZWZ0ICYmIHN0YXJ0RGF0ZSkge1xuICAgICAgc2VsZWN0ZWQgPSBzdGFydERhdGUuY2xvbmUoKTtcbiAgICAgIG1pbkRhdGUgPSB0aGlzLm1heERhdGUoKTtcbiAgICB9XG4gICAgaWYgKHNpZGUgPT09IFNpZGVFbnVtLnJpZ2h0ICYmIGVuZERhdGUpIHtcbiAgICAgIHNlbGVjdGVkID0gZW5kRGF0ZS5jbG9uZSgpO1xuICAgICAgbWluRGF0ZSA9IHRoaXMuc3RhcnREYXRlKCk7XG4gICAgfVxuICAgIGlmIChzaWRlID09PSBTaWRlRW51bS5yaWdodCAmJiAhZW5kRGF0ZSkge1xuICAgICAgaWYgKCFzdGFydERhdGUpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgc2VsZWN0ZWQgPSB0aGlzLmdldERhdGVXaXRoVGltZShzdGFydERhdGUsIFNpZGVFbnVtLnJpZ2h0KTtcbiAgICAgIGlmIChzZWxlY3RlZC5pc0JlZm9yZShzdGFydERhdGUpKSB7XG4gICAgICAgIHNlbGVjdGVkID0gc3RhcnREYXRlLmNsb25lKCk7XG4gICAgICB9XG4gICAgICBtaW5EYXRlID0gc3RhcnREYXRlO1xuICAgIH1cbiAgICBjb25zdCBzdGFydCA9IDA7XG4gICAgY29uc3QgZW5kID0gMjM7XG5cbiAgICB0aGlzLnRpbWVwaWNrZXJWYXJpYWJsZXMoKVtzaWRlXS5zZXQoe1xuICAgICAgaG91cnM6IFtdLFxuICAgICAgbWludXRlczogW10sXG4gICAgICBtaW51dGVzTGFiZWw6IFtdLFxuICAgICAgc2Vjb25kczogW10sXG4gICAgICBzZWNvbmRzTGFiZWw6IFtdLFxuICAgICAgZGlzYWJsZWRIb3VyczogW10sXG4gICAgICBkaXNhYmxlZE1pbnV0ZXM6IFtdLFxuICAgICAgZGlzYWJsZWRTZWNvbmRzOiBbXSxcbiAgICAgIHNlbGVjdGVkSG91cjogMCxcbiAgICAgIHNlbGVjdGVkTWludXRlOiAwLFxuICAgICAgc2VsZWN0ZWRTZWNvbmQ6IDAsXG4gICAgfSk7XG4gICAgZm9yIChsZXQgaSA9IHN0YXJ0OyBpIDw9IGVuZDsgaSsrKSB7XG4gICAgICBjb25zdCBpX2luXzI0ID0gaTtcblxuICAgICAgY29uc3QgdGltZSA9IHNlbGVjdGVkLmNsb25lKCkuaG91cihpX2luXzI0KTtcbiAgICAgIGxldCBkaXNhYmxlZCA9IGZhbHNlO1xuXG4gICAgICBpZiAobWluRGF0ZSAmJiB0aW1lLm1pbnV0ZSg1OSkuaXNCZWZvcmUobWluRGF0ZSkpIHtcbiAgICAgICAgZGlzYWJsZWQgPSB0cnVlO1xuICAgICAgfVxuICAgICAgaWYgKG1heERhdGUgJiYgdGltZS5taW51dGUoMCkuaXNBZnRlcihtYXhEYXRlKSkge1xuICAgICAgICBkaXNhYmxlZCA9IHRydWU7XG4gICAgICB9XG4gICAgICB0aGlzLnRpbWVwaWNrZXJWYXJpYWJsZXMoKVtzaWRlXS51cGRhdGUoY3VycmVudCA9PiB7XG4gICAgICAgIGN1cnJlbnQuaG91cnM/LnB1c2goaSk7XG4gICAgICAgIGlmIChpX2luXzI0ID09PSBzZWxlY3RlZC5ob3VyKCkgJiYgIWRpc2FibGVkKSB7XG4gICAgICAgICAgY3VycmVudC5zZWxlY3RlZEhvdXIgPSBpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChkaXNhYmxlZCkge1xuICAgICAgICAgIGN1cnJlbnQuZGlzYWJsZWRIb3Vycz8ucHVzaChpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBjdXJyZW50O1xuICAgICAgfSk7XG4gICAgfVxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgNjA7IGkgKz0gdGhpcy50aW1lUGlja2VySW5jcmVtZW50KCkpIHtcbiAgICAgIGNvbnN0IHBhZGRlZCA9IGkgPCAxMCA/ICcwJyArIGkgOiBgJHtpfWA7XG4gICAgICBjb25zdCB0aW1lID0gc2VsZWN0ZWQuY2xvbmUoKS5taW51dGUoaSk7XG5cbiAgICAgIGxldCBkaXNhYmxlZCA9IGZhbHNlO1xuXG4gICAgICBpZiAobWluRGF0ZSAmJiB0aW1lLnNlY29uZCg1OSkuaXNCZWZvcmUobWluRGF0ZSkpIHtcbiAgICAgICAgZGlzYWJsZWQgPSB0cnVlO1xuICAgICAgfVxuICAgICAgaWYgKG1heERhdGUgJiYgdGltZS5zZWNvbmQoMCkuaXNBZnRlcihtYXhEYXRlKSkge1xuICAgICAgICBkaXNhYmxlZCA9IHRydWU7XG4gICAgICB9XG4gICAgICB0aGlzLnRpbWVwaWNrZXJWYXJpYWJsZXMoKVtzaWRlXS51cGRhdGUoY3VycmVudCA9PiB7XG4gICAgICAgIGN1cnJlbnQubWludXRlcz8ucHVzaChpKTtcbiAgICAgICAgY3VycmVudC5taW51dGVzTGFiZWw/LnB1c2gocGFkZGVkKTtcbiAgICAgICAgaWYgKHNlbGVjdGVkLm1pbnV0ZSgpID09PSBpICYmICFkaXNhYmxlZCkge1xuICAgICAgICAgIGN1cnJlbnQuc2VsZWN0ZWRNaW51dGUgPSBpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChkaXNhYmxlZCkge1xuICAgICAgICAgIGN1cnJlbnQuZGlzYWJsZWRNaW51dGVzPy5wdXNoKGkpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGN1cnJlbnQ7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICB0aGlzLnRpbWVwaWNrZXJWYXJpYWJsZXMoKVtzaWRlXS51cGRhdGUoY3VycmVudCA9PiB7XG4gICAgICBjdXJyZW50LnNlbGVjdGVkID0gc2VsZWN0ZWQ7XG5cbiAgICAgIHJldHVybiBjdXJyZW50O1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVFbGVtZW50KCkge1xuICAgIGlmICh0aGlzLmlzU2luZ2xlKCkgJiYgdGhpcy5zdGFydERhdGUoKSkge1xuICAgICAgdGhpcy5zZWxlY3RlZExhYmVsLnNldCh0aGlzLnN0YXJ0RGF0ZSgpPy5mb3JtYXQoJ0REL01NL1lZWVknKSk7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKHRoaXMuc3RhcnREYXRlKCkgJiYgdGhpcy5lbmREYXRlKCkpIHtcbiAgICAgIC8vIGlmIHdlIHVzZSByYW5nZXMgYW5kIHNob3VsZCBzaG93IHJhbmdlIGxhYmVsIG9uIGlucHV0XG4gICAgICBpZiAodGhpcy5xdWlja1Jhbmdlc0FycmF5KCkubGVuZ3RoICYmIHRoaXMuc2hvd1JhbmdlTGFiZWxPbklucHV0KCkgJiYgdGhpcy5zZWxlY3RlZFF1aWNrUmFuZ2UoKSAmJiB0aGlzLmRhdGVPcHRpb25zKCkuY3VzdG9tUmFuZ2VMYWJlbCAhPT0gdGhpcy5zZWxlY3RlZFF1aWNrUmFuZ2UoKSkge1xuICAgICAgICB0aGlzLnNlbGVjdGVkTGFiZWwuc2V0KHRoaXMuc2VsZWN0ZWRRdWlja1JhbmdlKCkpO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHRoaXMuc2VsZWN0ZWRMYWJlbC5zZXQoYCR7dGhpcy5zdGFydERhdGUoKT8uZm9ybWF0KCdERC9NTS9ZWVlZJyl9JHt0aGlzLmRhdGVPcHRpb25zKCkuc2VwYXJhdG9yfSR7dGhpcy5lbmREYXRlKCk/LmZvcm1hdCgnREQvTU0vWVlZWScpfWApO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlVmlldygpIHtcbiAgICBpZiAodGhpcy5oYXNUaW1lUGlja2VyKCkpIHtcbiAgICAgIHRoaXMucmVuZGVyVGltZVBpY2tlcihTaWRlRW51bS5sZWZ0KTtcbiAgICAgIHRoaXMucmVuZGVyVGltZVBpY2tlcihTaWRlRW51bS5yaWdodCk7XG4gICAgfVxuICAgIHRoaXMudXBkYXRlTW9udGhzSW5WaWV3KCk7XG4gICAgdGhpcy51cGRhdGVDYWxlbmRhcnMoKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0RGF0ZVdpdGhUaW1lKGRhdGU6IGRheWpzLkRheWpzLCBzaWRlOiBTaWRlRW51bSk6IGRheWpzLkRheWpzIHtcbiAgICBjb25zdCBob3VyID0gcGFyc2VJbnQoYCR7dGhpcy50aW1lcGlja2VyVmFyaWFibGVzKClbc2lkZV0oKS5zZWxlY3RlZEhvdXJ9YCwgMTApO1xuICAgIGNvbnN0IG1pbnV0ZSA9IHBhcnNlSW50KGAke3RoaXMudGltZXBpY2tlclZhcmlhYmxlcygpW3NpZGVdKCkuc2VsZWN0ZWRNaW51dGV9YCwgMTApO1xuICAgIGNvbnN0IHNlY29uZCA9IHRoaXMuaGFzU2Vjb25kUGlja2VyKCkgJiYgIWlzRW1wdHkodGhpcy50aW1lcGlja2VyVmFyaWFibGVzKClbc2lkZV0oKS5zZWxlY3RlZFNlY29uZCkgPyBwYXJzZUludChgJHt0aGlzLnRpbWVwaWNrZXJWYXJpYWJsZXMoKVtzaWRlXSgpLnNlbGVjdGVkU2Vjb25kfWAsIDEwKSA6IDA7XG5cbiAgICByZXR1cm4gZGF0ZS5jbG9uZSgpLmhvdXIoaG91cikubWludXRlKG1pbnV0ZSkuc2Vjb25kKHNlY29uZCk7XG4gIH1cblxuICBwcml2YXRlIHRyYW5zZm9ybU1pbk1heERhdGUodmFsdWU6IGRheWpzLkRheWpzIHwgc3RyaW5nIHwgdW5kZWZpbmVkKTogZGF5anMuRGF5anMgfCB1bmRlZmluZWQge1xuICAgIGlmIChpc0VtcHR5KHZhbHVlKSkge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgaWYgKGRheWpzLmlzRGF5anModmFsdWUpKSB7XG4gICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICByZXR1cm4gZGF5anModmFsdWUpO1xuICAgIH1cblxuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBwcml2YXRlIGNvbXB1dGVkRGlzcGxheVRpbWUoc2lkZTogSVRpbWVwaWNrZXJWYXJpYWJsZXNTaWRlKSB7XG4gICAgbGV0IHN0ckhvdXJzOiBzdHJpbmcgfCBudW1iZXIgfCB1bmRlZmluZWQgPSBzaWRlLnNlbGVjdGVkSG91cjtcbiAgICBsZXQgc3RyTWludXRlOiBzdHJpbmcgfCBudW1iZXIgfCB1bmRlZmluZWQgPSBzaWRlLnNlbGVjdGVkTWludXRlO1xuXG4gICAgaWYgKChzaWRlLnNlbGVjdGVkSG91ciB8fCAwKSA8IDEwKSB7XG4gICAgICBzdHJIb3VycyA9IGAwJHtzaWRlLnNlbGVjdGVkSG91ciA/PyAwfWA7XG4gICAgfVxuXG4gICAgaWYgKChzaWRlLnNlbGVjdGVkTWludXRlIHx8IDApIDwgMTApIHtcbiAgICAgIHN0ck1pbnV0ZSA9IGAwJHtzaWRlLnNlbGVjdGVkTWludXRlID8/IDB9YDtcbiAgICB9XG5cbiAgICByZXR1cm4gYCR7c3RySG91cnN9OiR7c3RyTWludXRlfWA7XG4gIH1cblxuICBwcml2YXRlIGNvbXB1dGVkRGlzcGxheVRpbWVJbnB1dChzaWRlOiBTaWRlRW51bSwgdGltZVR5cGU6ICdob3VyJyB8ICdtaW51dGUnKSB7XG4gICAgY29uc3QgdGltZSA9IHRpbWVUeXBlID09PSAnaG91cicgPyAoc2lkZSA9PT0gU2lkZUVudW0ubGVmdCA/IHRoaXMudGltZXBpY2tlclZhbHVlSXRlbSgpLmxlZnRob3VyKCkgOiB0aGlzLnRpbWVwaWNrZXJWYWx1ZUl0ZW0oKS5yaWdodGhvdXIoKSkgOiAoc2lkZSA9PT0gU2lkZUVudW0ubGVmdCA/IHRoaXMudGltZXBpY2tlclZhbHVlSXRlbSgpLmxlZnRtaW51dGUoKSA6IHRoaXMudGltZXBpY2tlclZhbHVlSXRlbSgpLnJpZ2h0bWludXRlKCkpO1xuXG4gICAgaWYgKCF0aW1lKSB7XG4gICAgICByZXR1cm4gJzAwJztcbiAgICB9XG4gICAgaWYgKHRpbWUgPCAxMCkge1xuICAgICAgcmV0dXJuIGAwJHt0aW1lfWA7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRpbWU7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICByZXR1cm47XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJsaWJzLXVpLWNvbXBvbmVudC1jdXN0b21fcmFuZ2VzLWNhbGVuZGFyIHRlc3QtY2xhc3NcIj5cbiAgPGRpdiBjbGFzcz1cInJlbGF0aXZlIGZsZXhcIj5cbiAgICA8ZGl2IGNsYXNzPVwibGlicy11aS1jb21wb25lbnQtY3VzdG9tX3Jhbmdlcy1jYWxlbmRhclwiXG4gICAgICBbY2xhc3MucmlnaHRdPVwiaXNTaW5nbGUoKVwiXG4gICAgICBbY2xhc3MubGVmdF09XCIhaXNTaW5nbGUoKVwiPlxuICAgICAgPGRpdiBjbGFzcz1cInJvdW5kZWQtWzRweF0gYmctWyNmZmZmZmZdXCI+XG4gICAgICAgIEBpZiAoY2FsZW5kYXJWYXJpYWJsZXMoKTsgYXMgY2FsZW5kYXJWYXJpYWJsZXMpIHtcbiAgICAgICAgICA8dGFibGU+XG4gICAgICAgICAgICA8dGhlYWQ+XG4gICAgICAgICAgICAgIDx0cj5cbiAgICAgICAgICAgICAgICA8dGggY29sc3Bhbj1cIjdcIlxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJtb250aFwiPlxuICAgICAgICAgICAgICAgICAgQGlmIChzaG93RHJvcGRvd25zU2VsZWN0KCkgJiYgY2FsZW5kYXJWYXJpYWJsZXMubGVmdCgpLmRyb3Bkb3ducz8uKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIiFmbGV4IG1iLVsxMHB4XSB3LWZ1bGxcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidy0zLzQgZmxleCBpdGVtcy1jZW50ZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9J21yLVs4cHhdJz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpYnNfdWktY29tcG9uZW50cy1kcm9wZG93biBbaXNOZ0NvbnRlbnRdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3pJbmRleF09XCJ6SW5kZXgoKSArIDFcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtwb3BvdmVyQ3VzdG9tQ29uZmlnXT1cInt3aWR0aEJ5UGFyZW50OmZhbHNlLGlnbm9yZUFycm93OnRydWUscGFkZGluZ0xlZnRJdGVtOiB0cnVlLCBjbGFzc0luY2x1ZGU6ICchdy1bMTMwcHhdJyxwb3NpdGlvbjp7IG1vZGU6J2NlbnRlcicsZGlzdGFuY2U6MH19XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbGlzdE1heEl0ZW1TaG93XT1cIjEwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbGlzdENsaWNrRXhhY3RseV09XCJmYWxzZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2xpc3RLZXlzRGlzYWJsZV09XCJkaXNhYmxlTW9udGgoKS5sZWZ0KClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtsaXN0SGFzQnV0dG9uVW5TZWxlY3RPcHRpb25dPVwiZmFsc2VcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjb252ZXJ0SXRlbVNlbGVjdGVkXT1cImNvbnZlcnRJdGVtTW9udGhcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtsaXN0Q29uZmlnXT1cImxpc3RNb250aHNDb25maWcoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2xpc3RLZXlTZWxlY3RlZF09XCJsaXN0S2V5RnJvbVNlbGVjdGVkKCkubW9udGhcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtmbGFnTW91c2VdPVwiZmxhZ01vdXNlKClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtsaXN0SGlkZGVuSW5wdXRTZWFyY2hdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2h0dHBSZXF1ZXN0RGV0YWlsSXRlbUJ5SWRdPVwibW9udGhIdHRwRGV0YWlsQ29uZmlnKClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChvdXRTZWxlY3RLZXkpPVwiaGFuZGxlclNlbGVjdGVkRHJvcGRvd24oJGV2ZW50LCBzaWRlRW51bS5sZWZ0ICsgJ21vbnRoJylcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChvdXRGdW5jdGlvbnNDb250cm9sKT1cImhhbmRsZXJGdW5jdGlvbkNvbnRyb2woJGV2ZW50LCBzaWRlRW51bS5sZWZ0ICsgJ21vbnRoJylcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChvdXRDaGFuZ1N0YWdlRmxhZ01vdXNlKT1cImhhbmRsZXJDaGFuZ2VGbGFnTW91c2UoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKG91dFNob3dMaXN0KT1cImhhbmRsZXJTaG93TGlzdERyb3Bkb3duKCRldmVudCwgc2lkZUVudW0ubGVmdCArICdtb250aCcpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImxpYnMtdWktY29tcG9uZW50LWN1c3RvbV9yYW5nZXMtY2FsZW5kYXItZHJvcGRvd25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLnRleHQtW3ZhcigtLWxpYnMtdWktY29sb3ItZGFyayldXT1cImNoZWNrU2hvd0xpc3REcm9wZG93bigpW3NpZGVFbnVtLmxlZnQgKyAnbW9udGgnXVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MudGV4dC1bIzZhNzM4M11dPVwiIWNoZWNrU2hvd0xpc3REcm9wZG93bigpW3NpZGVFbnVtLmxlZnQgKyAnbW9udGgnXVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImxpYnMtdWktZm9udC1oNG1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc3R5bGUuZm9udFdlaWdodF09XCI1MDBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc3R5bGUuZm9udFN0eWxlXT1cIidub3JtYWwnXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGRhdGVPcHRpb25zKCkubW9udGhOYW1lcyAmJiBjYWxlbmRhclZhcmlhYmxlcy5sZWZ0KCkuY2FsZW5kYXIgJiYgZGF0ZU9wdGlvbnMoKS5tb250aE5hbWVzW2NhbGVuZGFyVmFyaWFibGVzLmxlZnQoKS5jYWxlbmRhcj8uWzFdPy5bMV0/Lm1vbnRoKCkgPz8gLTFdIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwibGlicy11aS1pY29uLWNoZXZyb24tcmlnaHQgdGV4dC1bMTNweF0gdGV4dC1bIzZhNzM4M11cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MudGV4dC1bdmFyKC0tbGlicy11aS1jb2xvci1kYXJrKV1dPVwiY2hlY2tTaG93TGlzdERyb3Bkb3duKClbc2lkZUVudW0ubGVmdCArICdtb250aCddXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3N0eWxlLmZvbnRXZWlnaHRdPVwiNTAwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3N0eWxlLnJvdGF0ZV09XCIhY2hlY2tTaG93TGlzdERyb3Bkb3duKClbc2lkZUVudW0ubGVmdCArICdtb250aCddID8gJzkwZGVnJzonMjcwZGVnJ1wiPjwvaT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saWJzX3VpLWNvbXBvbmVudHMtZHJvcGRvd24+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxsaWJzX3VpLWNvbXBvbmVudHMtZHJvcGRvd24gW2xpc3RNYXhJdGVtU2hvd109XCIxMFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2lzTmdDb250ZW50XT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt6SW5kZXhdPVwiekluZGV4KCkgKyAxXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcG9wb3ZlckN1c3RvbUNvbmZpZ109XCJ7d2lkdGhCeVBhcmVudDpmYWxzZSxpZ25vcmVBcnJvdzp0cnVlLHBhZGRpbmdMZWZ0SXRlbTogdHJ1ZSxjbGFzc0luY2x1ZGU6ICchdy1bMTEwcHhdJyxwb3NpdGlvbjp7bW9kZTonY2VudGVyJyxkaXN0YW5jZTowfX1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtsaXN0Q2xpY2tFeGFjdGx5XT1cImZhbHNlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbGlzdEhhc0J1dHRvblVuU2VsZWN0T3B0aW9uXT1cImZhbHNlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY29udmVydEl0ZW1TZWxlY3RlZF09XCJjb252ZXJ0SXRlbVllYXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtsaXN0SGlkZGVuSW5wdXRTZWFyY2hdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2xpc3RDb25maWddPVwibGlzdExlZnRZZWFyQ29uZmlnKClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtsaXN0S2V5U2VsZWN0ZWRdPVwibGlzdEtleUZyb21TZWxlY3RlZCgpLnllYXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtmbGFnTW91c2VdPVwiZmxhZ01vdXNlKClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtodHRwUmVxdWVzdERldGFpbEl0ZW1CeUlkXT1cImxlZnRZZWFySHR0cERldGFpbENvbmZpZygpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAob3V0Q2hhbmdTdGFnZUZsYWdNb3VzZSk9XCJoYW5kbGVyQ2hhbmdlRmxhZ01vdXNlKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChvdXRTaG93TGlzdCk9XCJoYW5kbGVyU2hvd0xpc3REcm9wZG93bigkZXZlbnQsIHNpZGVFbnVtLmxlZnQgKyAneWVhcicpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAob3V0U2VsZWN0S2V5KT1cImhhbmRsZXJTZWxlY3RlZERyb3Bkb3duKCRldmVudCwgc2lkZUVudW0ubGVmdCArICd5ZWFyJylcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChvdXRGdW5jdGlvbnNDb250cm9sKT1cImhhbmRsZXJGdW5jdGlvbkNvbnRyb2woJGV2ZW50LCBzaWRlRW51bS5sZWZ0ICsgJ3llYXInKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJsaWJzLXVpLWNvbXBvbmVudC1jdXN0b21fcmFuZ2VzLWNhbGVuZGFyLWRyb3Bkb3duXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy50ZXh0LVt2YXIoLS1saWJzLXVpLWNvbG9yLWRhcmspXV09XCJjaGVja1Nob3dMaXN0RHJvcGRvd24oKVtzaWRlRW51bS5sZWZ0ICsgJ3llYXInXVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MudGV4dC1bIzZhNzM4M11dPVwiIWNoZWNrU2hvd0xpc3REcm9wZG93bigpW3NpZGVFbnVtLmxlZnQgKyAneWVhciddXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibGlicy11aS1mb250LWg0bVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzdHlsZS5mb250V2VpZ2h0XT1cIjUwMFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzdHlsZS5mb250U3R5bGVdPVwiJ25vcm1hbCdcIj57eyBjYWxlbmRhclZhcmlhYmxlcy5sZWZ0KCkuY2FsZW5kYXIgJiYgY2FsZW5kYXJWYXJpYWJsZXMubGVmdCgpLmNhbGVuZGFyPy5bMV0/LlsxXT8uZm9ybWF0KFwiIFlZWVlcIikgfX08L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwibGlicy11aS1pY29uLWNoZXZyb24tcmlnaHQgdGV4dC1bMTNweF0gdGV4dC1bIzZhNzM4M11cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MudGV4dC1bdmFyKC0tbGlicy11aS1jb2xvci1kYXJrKV1dPVwiY2hlY2tTaG93TGlzdERyb3Bkb3duKClbc2lkZUVudW0ubGVmdCArICd5ZWFyJ11cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc3R5bGUuZm9udFdlaWdodF09XCI1MDBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc3R5bGUucm90YXRlXT1cIiFjaGVja1Nob3dMaXN0RHJvcGRvd24oKVtzaWRlRW51bS5sZWZ0ICsgJ3llYXInXSA/ICc5MGRlZyc6JzI3MGRlZydcIj48L2k+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGlic191aS1jb21wb25lbnRzLWRyb3Bkb3duPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidy0xLzQgZmxleCBpdGVtcy1jZW50ZXIgcmVsYXRpdmVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAoIWNhbGVuZGFyVmFyaWFibGVzLmxlZnQoKS5taW5EYXRlIHx8IChjYWxlbmRhclZhcmlhYmxlcy5sZWZ0KCkubWluRGF0ZT8uaXNCZWZvcmUoY2FsZW5kYXJWYXJpYWJsZXMubGVmdCgpLmNhbGVuZGFyICYmIGNhbGVuZGFyVmFyaWFibGVzLmxlZnQoKS5jYWxlbmRhcj8uZmlyc3REYXkpKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IChjbGljayk9XCJoYW5kbGVyQ2xpY2tQcmV2KHNpZGVFbnVtLmxlZnQpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGFic29sdXRlIGxlZnQtMCB0b3AtWy0zcHhdXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImxpYnMtdWktaWNvbi1jaGV2cm9uLXJpZ2h0IHJvdGF0ZS1bMTgwZGVnXSB0ZXh0LVsjNmE3MzgzXSBjdXJzb3ItcG9pbnRlciBsaWJzLXVpLWNvbXBvbmVudC1jdXN0b21fcmFuZ2VzLWNhbGVuZGFyLWljb25cIj48L2k+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgQGlmICgoIWNhbGVuZGFyVmFyaWFibGVzLmxlZnQoKS5tYXhEYXRlIHx8IGNhbGVuZGFyVmFyaWFibGVzLmxlZnQoKS5tYXhEYXRlPy5pc0FmdGVyKGNhbGVuZGFyVmFyaWFibGVzLmxlZnQoKS5jYWxlbmRhciAmJiBjYWxlbmRhclZhcmlhYmxlcy5sZWZ0KCkuY2FsZW5kYXI/Lmxhc3REYXkpKSAmJiBpc1NpbmdsZSgpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKGNsaWNrKT1cImhhbmRsZXJDbGlja05leHQoc2lkZUVudW0ubGVmdClcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgbWwtWzEycHhdIGFic29sdXRlIHJpZ2h0LTAgdG9wLVstM3B4XVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJsaWJzLXVpLWljb24tY2hldnJvbi1yaWdodCB0ZXh0LVsjNmE3MzgzXSBjdXJzb3ItcG9pbnRlciBsaWJzLXVpLWNvbXBvbmVudC1jdXN0b21fcmFuZ2VzLWNhbGVuZGFyLWljb25cIj48L2k+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIEBpZiAoIXNob3dEcm9wZG93bnNTZWxlY3QoKSB8fCAhY2FsZW5kYXJWYXJpYWJsZXMubGVmdCgpLmRyb3Bkb3ducykge1xuICAgICAgICAgICAgICAgICAgICB7eyBkYXRlT3B0aW9ucygpLm1vbnRoTmFtZXMgJiYgY2FsZW5kYXJWYXJpYWJsZXMubGVmdCgpLmNhbGVuZGFyICYmIGRhdGVPcHRpb25zKCkubW9udGhOYW1lc1tjYWxlbmRhclZhcmlhYmxlcy5sZWZ0KCkuY2FsZW5kYXI/LlsxXT8uWzFdPy5tb250aCgpID8/IC0xXSB9fVxuICAgICAgICAgICAgICAgICAgICB7eyBjYWxlbmRhclZhcmlhYmxlcy5sZWZ0KCkuY2FsZW5kYXIgJiYgY2FsZW5kYXJWYXJpYWJsZXMubGVmdCgpLmNhbGVuZGFyPy5bMV0/LlsxXT8uZm9ybWF0KFwiIFlZWVlcIikgfX1cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICA8L3RoPlxuICAgICAgICAgICAgICA8L3RyPlxuICAgICAgICAgICAgICA8dHIgY2xhc3M9XCJ3ZWVrLWRheXNcIj5cbiAgICAgICAgICAgICAgICBAZm9yIChkYXlvZndlZWsgb2YgZGF0ZU9wdGlvbnMoKS5kYXlzT2ZXZWVrOyB0cmFjayBkYXlvZndlZWspIHtcbiAgICAgICAgICAgICAgICAgIDx0aD5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJsaWJzLXVpLWZvbnQtaDZtIHRleHQtWyM2YTczODNdXCJcbiAgICAgICAgICAgICAgICAgICAgICBbc3R5bGUuZm9udFdlaWdodF09XCI1MDBcIlxuICAgICAgICAgICAgICAgICAgICAgIFtzdHlsZS5mb250U3R5bGVdPVwiJ25vcm1hbCdcIj57eyBkYXlvZndlZWsgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICA8L3RoPlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgPC90cj5cbiAgICAgICAgICAgIDwvdGhlYWQ+XG4gICAgICAgICAgICA8dGJvZHkgY2xhc3M9XCJkcnAtYW5pbWF0ZVwiPlxuICAgICAgICAgICAgICBAZm9yIChyb3cgb2YgY2FsZW5kYXJWYXJpYWJsZXMubGVmdCgpLmNhbFJvd3M/LigpOyB0cmFjayByb3cpIHtcbiAgICAgICAgICAgICAgICA8dHIgY2xhc3M9XCJoLVszMnB4XVwiXG4gICAgICAgICAgICAgICAgICBbY2xhc3NdPVwiY2FsZW5kYXJWYXJpYWJsZXMubGVmdCgpLmNsYXNzZXMgJiYgY2FsZW5kYXJWYXJpYWJsZXMubGVmdCgpLmNsYXNzZXM/Lltyb3ddPy5jbGFzc0xpc3RcIj5cbiAgICAgICAgICAgICAgICAgIEBmb3IgKGNvbCBvZiBjYWxlbmRhclZhcmlhYmxlcy5sZWZ0KCkuY2FsQ29scz8uKCk7IHRyYWNrIGNvbCkge1xuICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJsaWJzLXVpLWZvbnQtaDVyXCJcbiAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MudG9kYXldPVwiY2FsZW5kYXJWYXJpYWJsZXMubGVmdCgpLmNhbGVuZGFyICYmIGNhbGVuZGFyVmFyaWFibGVzLmxlZnQoKS5jYWxlbmRhcj8uW3Jvd10/Lltjb2xdPy5kYXRlKCkgPT09IHRvZGF5KCkuZGF0ZSgpICYmIGNhbGVuZGFyVmFyaWFibGVzLmxlZnQoKS5jYWxlbmRhcj8uW3Jvd10/Lltjb2xdPy5tb250aCgpID09PSB0b2RheSgpLm1vbnRoKCkgJiYgY2FsZW5kYXJWYXJpYWJsZXMubGVmdCgpLmNhbGVuZGFyPy5bcm93XT8uW2NvbF0/LnllYXIoKSA9PT0gdG9kYXkoKS55ZWFyKClcIlxuICAgICAgICAgICAgICAgICAgICAgIFtjbGFzc109XCJjYWxlbmRhclZhcmlhYmxlcy5sZWZ0KCkuY2xhc3NlcyAmJiBjYWxlbmRhclZhcmlhYmxlcy5sZWZ0KCkuY2xhc3Nlcz8uW3Jvd10/Lltjb2xdXCJcbiAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiaGFuZGxlclBpY2tlckRhdGUoJGV2ZW50LCBzaWRlRW51bS5sZWZ0LCByb3csIGNvbClcIlxuICAgICAgICAgICAgICAgICAgICAgIChtb3VzZWVudGVyKT1cImhhbmRsZXJIb3ZlckRhdGUoJGV2ZW50LCBzaWRlRW51bS5sZWZ0LCByb3csIGNvbClcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImxpYnMtdWktZm9udC1oNXJcIj57eyBjYWxlbmRhclZhcmlhYmxlcy5sZWZ0KCkuY2FsZW5kYXIgJiYgY2FsZW5kYXJWYXJpYWJsZXMubGVmdCgpLmNhbGVuZGFyPy5bcm93XT8uW2NvbF0/LmRhdGUoKSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICA8L3RyPlxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA8L3Rib2R5PlxuICAgICAgICAgIDwvdGFibGU+XG4gICAgICAgIH1cbiAgICAgIDwvZGl2PlxuICAgICAgQGlmIChoYXNUaW1lUGlja2VyKCkpIHtcbiAgICAgICAgPGRpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBqdXN0aWZ5LWNlbnRlciBjb2x1bW4gaXRlbXMtY2VudGVyIHB0LVsxMnB4XVwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInctZnVsbCBmbGV4IGp1c3RpZnktY2VudGVyIGl0ZW1zLWNlbnRlciByb3VuZGVkLVs0cHhdIGJvcmRlclwiXG4gICAgICAgICAgICAgIFtjbGFzcy5ib3JkZXItWyNlNmU4ZWRdXT1cIiF0aW1lUGlja2VyRXJyb3IoKVwiXG4gICAgICAgICAgICAgIFtjbGFzcy5ib3JkZXItWyNmZjU0NTRdXT1cInRpbWVQaWNrZXJFcnJvcigpXCI+XG4gICAgICAgICAgICAgIDxsaWJzX3VpLWNvbXBvbmVudHMtaW5wdXRzLWlucHV0IGNsYXNzSW5jbHVkZT1cIiF3LVszMHB4XSAhcC0wICFib3JkZXItbm9uZSAhdGV4dC1jZW50ZXIgbGlicy11aS1mb250LWg0cyAhdGV4dC1bIzA3MTYzMV1cIlxuICAgICAgICAgICAgICAgIGRhdGFUeXBlPVwiaW50XCJcbiAgICAgICAgICAgICAgICBbZm9jdXNUaW1lT3V0XT1cIjBcIlxuICAgICAgICAgICAgICAgIFtibHVyVGltZU91dF09XCIwXCJcbiAgICAgICAgICAgICAgICBbYXV0b0FkZFplcm9MZXNzVGhhbjEwSW5UeXBlSW50XT1cInRydWVcIlxuICAgICAgICAgICAgICAgIFtlbWl0RW1wdHlJbkRhdGFUeXBlTnVtYmVyXT1cInRydWVcIlxuICAgICAgICAgICAgICAgIFttYXhWYWx1ZU51bWJlcl09XCIyM1wiXG4gICAgICAgICAgICAgICAgW21pblZhbHVlTnVtYmVyXT1cIjBcIlxuICAgICAgICAgICAgICAgIFttYXhMZW5ndGhdPVwiMlwiXG4gICAgICAgICAgICAgICAgW3ZhbHVlXT1cInRpbWVwaWNrZXJWYWx1ZUl0ZW0oKS5sZWZ0aG91cigpXCJcbiAgICAgICAgICAgICAgICAob3V0SW5wdXRFdmVudCk9XCJoYW5kbGVySW5wdXRFdmVudCgkZXZlbnQsICdsZWZ0aG91cicpXCJcbiAgICAgICAgICAgICAgICAob3V0RnVuY3Rpb25zQ29udHJvbCk9XCJoYW5kbGVyRnVuY3Rpb25Db250cm9sKCRldmVudCwgc2lkZUVudW0ubGVmdCArICdob3VyJylcIlxuICAgICAgICAgICAgICAgIChvdXRDaGFuZ2UpPVwiaGFuZGxlckNoYW5nZVRpbWVWYWx1ZSgkZXZlbnQsICdsZWZ0aG91cicpXCJcbiAgICAgICAgICAgICAgICAob3V0Rm9jdXNBbmRCbHVyRXZlbnQpPVwiaGFuZGxlckZvY3VzQW5kQmx1clRpbWUoJGV2ZW50LCAnbGVmdGhvdXInKVwiIC8+XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibGlicy11aS1mb250LWgzcyB0ZXh0LVsjMzMzMzMzXVwiPjo8L3NwYW4+XG4gICAgICAgICAgICAgIDxsaWJzX3VpLWNvbXBvbmVudHMtaW5wdXRzLWlucHV0IGNsYXNzSW5jbHVkZT1cIiF3LVszMHB4XSAhcC0wICFib3JkZXItbm9uZSAhdGV4dC1jZW50ZXIgIWxpYnMtdWktZm9udC1oNHMgIXRleHQtWyMwNzE2MzFdXCJcbiAgICAgICAgICAgICAgICBbYXV0b0FkZFplcm9MZXNzVGhhbjEwSW5UeXBlSW50XT1cInRydWVcIlxuICAgICAgICAgICAgICAgIFtlbWl0RW1wdHlJbkRhdGFUeXBlTnVtYmVyXT1cInRydWVcIlxuICAgICAgICAgICAgICAgIGRhdGFUeXBlPVwiaW50XCJcbiAgICAgICAgICAgICAgICBbZm9jdXNUaW1lT3V0XT1cIjBcIlxuICAgICAgICAgICAgICAgIFtibHVyVGltZU91dF09XCIwXCJcbiAgICAgICAgICAgICAgICBbbWF4VmFsdWVOdW1iZXJdPVwiNTlcIlxuICAgICAgICAgICAgICAgIFttaW5WYWx1ZU51bWJlcl09XCIwXCJcbiAgICAgICAgICAgICAgICBbbWF4TGVuZ3RoXT1cIjJcIlxuICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJ0aW1lcGlja2VyVmFsdWVJdGVtKCkubGVmdG1pbnV0ZSgpXCJcbiAgICAgICAgICAgICAgICAob3V0RnVuY3Rpb25zQ29udHJvbCk9XCJoYW5kbGVyRnVuY3Rpb25Db250cm9sKCRldmVudCwgc2lkZUVudW0ubGVmdCArICdtaW51dGUnKVwiXG4gICAgICAgICAgICAgICAgKG91dElucHV0RXZlbnQpPVwiaGFuZGxlcklucHV0RXZlbnQoJGV2ZW50LCAnbGVmdG1pbnV0ZScpXCJcbiAgICAgICAgICAgICAgICAob3V0Q2hhbmdlKT1cImhhbmRsZXJDaGFuZ2VUaW1lVmFsdWUoJGV2ZW50LCAnbGVmdG1pbnV0ZScpXCJcbiAgICAgICAgICAgICAgICAob3V0Rm9jdXNBbmRCbHVyRXZlbnQpPVwiaGFuZGxlckZvY3VzQW5kQmx1clRpbWUoJGV2ZW50LCAnbGVmdG1pbnV0ZScpXCIgLz5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIH1cbiAgICA8L2Rpdj5cblxuICAgIEBpZiAoIWlzU2luZ2xlKCkpIHtcbiAgICAgIDxkaXYgY2xhc3M9XCJsaWJzLXVpLWNvbXBvbmVudC1jdXN0b21fcmFuZ2VzLWNhbGVuZGFyIHJpZ2h0IG1sLVsyNHB4XVwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwicm91bmRlZC1bNHB4XSBiZy1bI2ZmZmZmZl1cIj5cbiAgICAgICAgICBAaWYgKGNhbGVuZGFyVmFyaWFibGVzKCkpIHtcbiAgICAgICAgICAgIDx0YWJsZT5cbiAgICAgICAgICAgICAgPHRoZWFkPlxuICAgICAgICAgICAgICAgIDx0cj5cbiAgICAgICAgICAgICAgICAgIDx0aCBjb2xzcGFuPVwiN1wiXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibW9udGhcIj5cbiAgICAgICAgICAgICAgICAgICAgQGlmIChzaG93RHJvcGRvd25zU2VsZWN0KCkgJiYgY2FsZW5kYXJWYXJpYWJsZXMoKS5sZWZ0KCkuZHJvcGRvd25zPy4oKSkge1xuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCIhZmxleCBtYi1bMTBweF0gdy1mdWxsXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidy0zLzQgZmxleCBpdGVtcy1jZW50ZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0nbXItWzhweF0nPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaWJzX3VpLWNvbXBvbmVudHMtZHJvcGRvd24gW2lzTmdDb250ZW50XT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3pJbmRleF09XCJ6SW5kZXgoKSArIDFcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3BvcG92ZXJDdXN0b21Db25maWddPVwie3dpZHRoQnlQYXJlbnQ6ZmFsc2UsaWdub3JlQXJyb3c6dHJ1ZSxwYWRkaW5nTGVmdEl0ZW06IHRydWUsY2xhc3NJbmNsdWRlOiAnIXctWzEzMHB4XScscG9zaXRpb246e21vZGU6J2NlbnRlcicsZGlzdGFuY2U6MH19XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtsaXN0TWF4SXRlbVNob3ddPVwiMTBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2xpc3RDbGlja0V4YWN0bHldPVwiZmFsc2VcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2xpc3RLZXlzRGlzYWJsZV09XCJkaXNhYmxlTW9udGgoKS5yaWdodCgpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtsaXN0SGFzQnV0dG9uVW5TZWxlY3RPcHRpb25dPVwiZmFsc2VcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NvbnZlcnRJdGVtU2VsZWN0ZWRdPVwiY29udmVydEl0ZW1Nb250aFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbGlzdEhpZGRlbklucHV0U2VhcmNoXT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2xpc3RDb25maWddPVwibGlzdE1vbnRoc0NvbmZpZygpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtsaXN0S2V5U2VsZWN0ZWRdPVwibGlzdEtleVRvU2VsZWN0ZWQoKS5tb250aFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZmxhZ01vdXNlXT1cImZsYWdNb3VzZSgpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtodHRwUmVxdWVzdERldGFpbEl0ZW1CeUlkXT1cIm1vbnRoSHR0cERldGFpbENvbmZpZygpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChvdXRGdW5jdGlvbnNDb250cm9sKT1cImhhbmRsZXJGdW5jdGlvbkNvbnRyb2woJGV2ZW50LCBzaWRlRW51bS5yaWdodCArICdtb250aCcpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChvdXRTZWxlY3RLZXkpPVwiaGFuZGxlclNlbGVjdGVkRHJvcGRvd24oJGV2ZW50LCBzaWRlRW51bS5yaWdodCArICdtb250aCcpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChvdXRDaGFuZ1N0YWdlRmxhZ01vdXNlKT1cImhhbmRsZXJDaGFuZ2VGbGFnTW91c2UoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAob3V0U2hvd0xpc3QpPVwiaGFuZGxlclNob3dMaXN0RHJvcGRvd24oJGV2ZW50LCBzaWRlRW51bS5yaWdodCArICdtb250aCcpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibGlicy11aS1jb21wb25lbnQtY3VzdG9tX3Jhbmdlcy1jYWxlbmRhci1kcm9wZG93blwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy50ZXh0LVt2YXIoLS1saWJzLXVpLWNvbG9yLWRhcmspXV09XCJjaGVja1Nob3dMaXN0RHJvcGRvd24oKVtzaWRlRW51bS5yaWdodCArICdtb250aCddXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLnRleHQtWyM2YTczODNdXT1cIiFjaGVja1Nob3dMaXN0RHJvcGRvd24oKVtzaWRlRW51bS5yaWdodCArICdtb250aCddXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJsaWJzLXVpLWZvbnQtaDRtXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MudGV4dC1bdmFyKC0tbGlicy11aS1jb2xvci1kYXJrKV1dPVwiY2hlY2tTaG93TGlzdERyb3Bkb3duKClbc2lkZUVudW0ucmlnaHQgKyAnbW9udGgnXVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3N0eWxlLmZvbnRXZWlnaHRdPVwiNTAwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc3R5bGUuZm9udFN0eWxlXT1cIidub3JtYWwnXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgZGF0ZU9wdGlvbnMoKS5tb250aE5hbWVzICYmIGNhbGVuZGFyVmFyaWFibGVzKCkucmlnaHQoKS5jYWxlbmRhciAmJiBkYXRlT3B0aW9ucygpLm1vbnRoTmFtZXNbIGNhbGVuZGFyVmFyaWFibGVzKCkucmlnaHQoKS5jYWxlbmRhcj8uWzFdPy5bMV0/Lm1vbnRoKCkgPz8gLTFdIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImxpYnMtdWktaWNvbi1jaGV2cm9uLXJpZ2h0IHRleHQtWzEzcHhdIHRleHQtWyM2YTczODNdXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc3R5bGUuZm9udFdlaWdodF09XCI1MDBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzdHlsZS5yb3RhdGVdPVwiIWNoZWNrU2hvd0xpc3REcm9wZG93bigpW3NpZGVFbnVtLnJpZ2h0ICsgJ21vbnRoJ10gPyAnOTBkZWcnOicyNzBkZWcnXCI+PC9pPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saWJzX3VpLWNvbXBvbmVudHMtZHJvcGRvd24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaWJzX3VpLWNvbXBvbmVudHMtZHJvcGRvd24gW2xpc3RNYXhJdGVtU2hvd109XCIxMFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbekluZGV4XT1cInpJbmRleCgpICsgMVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaXNOZ0NvbnRlbnRdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcG9wb3ZlckN1c3RvbUNvbmZpZ109XCJ7d2lkdGhCeVBhcmVudDpmYWxzZSxpZ25vcmVBcnJvdzp0cnVlLHBhZGRpbmdMZWZ0SXRlbTogdHJ1ZSwgY2xhc3NJbmNsdWRlOiAnIXctWzExMHB4XScsICBwb3NpdGlvbjp7bW9kZTonY2VudGVyJywgZGlzdGFuY2U6MH19XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtsaXN0Q2xpY2tFeGFjdGx5XT1cImZhbHNlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtsaXN0SGFzQnV0dG9uVW5TZWxlY3RPcHRpb25dPVwiZmFsc2VcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NvbnZlcnRJdGVtU2VsZWN0ZWRdPVwiY29udmVydEl0ZW1ZZWFyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtsaXN0SGlkZGVuSW5wdXRTZWFyY2hdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbGlzdENvbmZpZ109XCJsaXN0UmlnaHRZZWFyQ29uZmlnKClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2xpc3RLZXlTZWxlY3RlZF09XCJsaXN0S2V5VG9TZWxlY3RlZCgpLnllYXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2ZsYWdNb3VzZV09XCJmbGFnTW91c2UoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaHR0cFJlcXVlc3REZXRhaWxJdGVtQnlJZF09XCJyaWdodFllYXJIdHRwRGV0YWlsQ29uZmlnKClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG91dFNlbGVjdEtleSk9XCJoYW5kbGVyU2VsZWN0ZWREcm9wZG93bigkZXZlbnQsIHNpZGVFbnVtLnJpZ2h0ICsgJ3llYXInKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAob3V0RnVuY3Rpb25zQ29udHJvbCk9XCJoYW5kbGVyRnVuY3Rpb25Db250cm9sKCRldmVudCwgc2lkZUVudW0ucmlnaHQgKyAneWVhcicpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChvdXRDaGFuZ1N0YWdlRmxhZ01vdXNlKT1cImhhbmRsZXJDaGFuZ2VGbGFnTW91c2UoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAob3V0U2hvd0xpc3QpPVwiaGFuZGxlclNob3dMaXN0RHJvcGRvd24oJGV2ZW50LCBzaWRlRW51bS5yaWdodCArICd5ZWFyJylcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJsaWJzLXVpLWNvbXBvbmVudC1jdXN0b21fcmFuZ2VzLWNhbGVuZGFyLWRyb3Bkb3duXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLnRleHQtW3ZhcigtLWxpYnMtdWktY29sb3ItZGFyayldXT1cImNoZWNrU2hvd0xpc3REcm9wZG93bigpW3NpZGVFbnVtLnJpZ2h0ICsgJ3llYXInXVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy50ZXh0LVsjNmE3MzgzXV09XCIhY2hlY2tTaG93TGlzdERyb3Bkb3duKClbc2lkZUVudW0ucmlnaHQgKyAneWVhciddXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJsaWJzLXVpLWZvbnQtaDRtXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc3R5bGUuZm9udFdlaWdodF09XCI1MDBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzdHlsZS5mb250U3R5bGVdPVwiJ25vcm1hbCdcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBjYWxlbmRhclZhcmlhYmxlcygpLnJpZ2h0KCkuY2FsZW5kYXIgJiYgY2FsZW5kYXJWYXJpYWJsZXMoKS5yaWdodCgpLmNhbGVuZGFyPy5bMV0/LlsxXT8uZm9ybWF0KFwiWVlZWVwiKSB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJsaWJzLXVpLWljb24tY2hldnJvbi1yaWdodCB0ZXh0LVsxM3B4XSB0ZXh0LVsjNmE3MzgzXVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLnRleHQtW3ZhcigtLWxpYnMtdWktY29sb3ItZGFyayldXT1cImNoZWNrU2hvd0xpc3REcm9wZG93bigpW3NpZGVFbnVtLnJpZ2h0ICsgJ3llYXInXVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3N0eWxlLmZvbnRXZWlnaHRdPVwiNTAwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc3R5bGUucm90YXRlXT1cIiFjaGVja1Nob3dMaXN0RHJvcGRvd24oKVtzaWRlRW51bS5yaWdodCArICd5ZWFyJ10gPyAnOTBkZWcnOicyNzBkZWcnXCI+PC9pPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saWJzX3VpLWNvbXBvbmVudHMtZHJvcGRvd24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidy0xLzQgZmxleCBpdGVtcy1jZW50ZXIgcmVsYXRpdmVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgQGlmIChsaXN0S2V5RnJvbVNlbGVjdGVkKCkueWVhciAmJiBsaXN0S2V5VG9TZWxlY3RlZCgpLnllYXIgJiYgISgoKGxpc3RLZXlGcm9tU2VsZWN0ZWQoKS55ZWFyICArMSkgPT09IGxpc3RLZXlUb1NlbGVjdGVkKCkueWVhcikgJiYgKGxpc3RLZXlGcm9tU2VsZWN0ZWQoKS5tb250aCA9PT0gMTIpICYmIGxpc3RLZXlUb1NlbGVjdGVkKCkubW9udGggPT09IDEpJiYgKGxpc3RLZXlGcm9tU2VsZWN0ZWQoKS55ZWFyIDwgbGlzdEtleVRvU2VsZWN0ZWQoKS55ZWFyKSB8fCBsaXN0S2V5RnJvbVNlbGVjdGVkKCkubW9udGggJiYgbGlzdEtleVRvU2VsZWN0ZWQoKS5tb250aCAmJiAoKGxpc3RLZXlGcm9tU2VsZWN0ZWQoKS5tb250aCArIDEpIDwgK2xpc3RLZXlUb1NlbGVjdGVkKCkubW9udGgpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGFic29sdXRlIGxlZnQtMCB0b3AtWy0zcHhdXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJoYW5kbGVyQ2xpY2tQcmV2KHNpZGVFbnVtLnJpZ2h0KVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJsaWJzLXVpLWljb24tY2hldnJvbi1yaWdodCByb3RhdGUtWzE4MGRlZ10gdGV4dC1bIzZhNzM4M10gY3Vyc29yLXBvaW50ZXIgbGlicy11aS1jb21wb25lbnQtY3VzdG9tX3Jhbmdlcy1jYWxlbmRhci1pY29uXCI+PC9pPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAobGlzdEtleUZyb21TZWxlY3RlZCgpLm1vbnRoICYmIGxpc3RLZXlUb1NlbGVjdGVkKCkubW9udGggJiYgKGxpc3RLZXlGcm9tU2VsZWN0ZWQoKS5tb250aCA+IGxpc3RLZXlUb1NlbGVjdGVkKCkubW9udGgpICYmIGxpc3RLZXlGcm9tU2VsZWN0ZWQoKS55ZWFyICYmIGxpc3RLZXlUb1NlbGVjdGVkKCkueWVhciAmJiAobGlzdEtleUZyb21TZWxlY3RlZCgpLnllYXIgPT09IGxpc3RLZXlUb1NlbGVjdGVkKCkueWVhciApKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJnLVsjZmZmZmZmXSB3LVsyMXB4XSBoLVsyMXB4XSBjdXJzb3Itbm9uZSBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciByb3VuZGVkLVs1MHB4XVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAoIWNhbGVuZGFyVmFyaWFibGVzKCkucmlnaHQoKS5tYXhEYXRlIHx8IChjYWxlbmRhclZhcmlhYmxlcygpLnJpZ2h0KCkubWF4RGF0ZT8uaXNBZnRlcihjYWxlbmRhclZhcmlhYmxlcygpLnJpZ2h0KCkuY2FsZW5kYXIgJiYgY2FsZW5kYXJWYXJpYWJsZXMoKS5yaWdodCgpLmNhbGVuZGFyPy5sYXN0RGF5KSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IChjbGljayk9XCJoYW5kbGVyQ2xpY2tOZXh0KHNpZGVFbnVtLnJpZ2h0KVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIG1sLVsxMnB4XSBhYnNvbHV0ZSByaWdodC0wIHRvcC1bLTNweF1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJsaWJzLXVpLWljb24tY2hldnJvbi1yaWdodCB0ZXh0LVsjNmE3MzgzXSBjdXJzb3ItcG9pbnRlciBsaWJzLXVpLWNvbXBvbmVudC1jdXN0b21fcmFuZ2VzLWNhbGVuZGFyLWljb25cIj48L2k+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgQGlmICghc2hvd0Ryb3Bkb3duc1NlbGVjdCgpIHx8ICAhY2FsZW5kYXJWYXJpYWJsZXMoKS5yaWdodCgpLmRyb3Bkb3ducykge1xuICAgICAgICAgICAgICAgICAgICAgIHt7IGRhdGVPcHRpb25zKCkubW9udGhOYW1lcyAmJiBjYWxlbmRhclZhcmlhYmxlcygpLnJpZ2h0KCkuY2FsZW5kYXIgJiYgZGF0ZU9wdGlvbnMoKS5tb250aE5hbWVzW2NhbGVuZGFyVmFyaWFibGVzKCkucmlnaHQoKS5jYWxlbmRhcj8uWzFdPy5bMV0/Lm1vbnRoKCkgPz8gLTFdIH19XG4gICAgICAgICAgICAgICAgICAgICAge3sgY2FsZW5kYXJWYXJpYWJsZXMoKS5yaWdodCgpLmNhbGVuZGFyICYmIGNhbGVuZGFyVmFyaWFibGVzKCkucmlnaHQoKS5jYWxlbmRhcj8uWzFdPy5bMV0/LmZvcm1hdChcIllZWVlcIikgfX1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgPC90aD5cbiAgICAgICAgICAgICAgICA8L3RyPlxuICAgICAgICAgICAgICAgIDx0ciBjbGFzcz1cIndlZWstZGF5c1wiPlxuICAgICAgICAgICAgICAgICAgQGZvciAoZGF5b2Z3ZWVrIG9mIGRhdGVPcHRpb25zKCkuZGF5c09mV2VlazsgdHJhY2sgZGF5b2Z3ZWVrKSB7XG4gICAgICAgICAgICAgICAgICAgIDx0aD5cbiAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImxpYnMtdWktZm9udC1oNm0gdGV4dC1bIzZhNzM4M11cIlxuICAgICAgICAgICAgICAgICAgICAgICAgW3N0eWxlLmZvbnRXZWlnaHRdPVwiNTAwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtzdHlsZS5mb250U3R5bGVdPVwiJ25vcm1hbCdcIj57eyBkYXlvZndlZWsgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDwvdGg+XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgPC90cj5cbiAgICAgICAgICAgICAgPC90aGVhZD5cbiAgICAgICAgICAgICAgPHRib2R5PlxuICAgICAgICAgICAgICAgIEBmb3IgKHJvdyBvZiBjYWxlbmRhclZhcmlhYmxlcygpLnJpZ2h0KCkuY2FsUm93cz8uKCk7IHRyYWNrIHJvdykge1xuICAgICAgICAgICAgICAgICAgPHRyIGNsYXNzPVwiaC1bMzJweF1cIlxuICAgICAgICAgICAgICAgICAgICBbY2xhc3NdPVwiY2FsZW5kYXJWYXJpYWJsZXMoKS5yaWdodCgpLmNsYXNzZXMgJiYgY2FsZW5kYXJWYXJpYWJsZXMoKS5yaWdodCgpLmNsYXNzZXM/Lltyb3ddPy5jbGFzc0xpc3RcIj5cbiAgICAgICAgICAgICAgICAgICAgQGZvciAoY29sIG9mIGNhbGVuZGFyVmFyaWFibGVzKCkucmlnaHQoKS5jYWxDb2xzPy4oKTsgdHJhY2sgY29sKSB7XG4gICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwibGlicy11aS1mb250LWg1clwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3NdPVwiY2FsZW5kYXJWYXJpYWJsZXMoKS5yaWdodCgpLmNsYXNzZXMgJiYgY2FsZW5kYXJWYXJpYWJsZXMoKS5yaWdodCgpLmNsYXNzZXM/Lltyb3ddPy5bY29sXVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MudG9kYXldPVwiY2FsZW5kYXJWYXJpYWJsZXMoKS5yaWdodCgpLmNhbGVuZGFyICYmIGNhbGVuZGFyVmFyaWFibGVzKCkucmlnaHQoKS5jYWxlbmRhcj8uW3Jvd10/Lltjb2xdPy5kYXRlKCkgPT09IHRvZGF5KCkuZGF0ZSgpICYmIGNhbGVuZGFyVmFyaWFibGVzKCkucmlnaHQoKS5jYWxlbmRhcj8uW3Jvd10/Lltjb2xdPy5tb250aCgpID09PSB0b2RheSgpLm1vbnRoKCkgJiYgY2FsZW5kYXJWYXJpYWJsZXMoKS5yaWdodCgpLmNhbGVuZGFyICYmY2FsZW5kYXJWYXJpYWJsZXMoKS5yaWdodCgpLmNhbGVuZGFyPy5bcm93XT8uW2NvbF0/LnllYXIoKSA9PT0gdG9kYXkoKS55ZWFyKClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImhhbmRsZXJQaWNrZXJEYXRlKCRldmVudCwgc2lkZUVudW0ucmlnaHQsIHJvdywgY29sKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAobW91c2VlbnRlcik9XCJoYW5kbGVySG92ZXJEYXRlKCRldmVudCwgc2lkZUVudW0ucmlnaHQsIHJvdywgY29sKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+e3sgY2FsZW5kYXJWYXJpYWJsZXMoKS5yaWdodCgpLmNhbGVuZGFyPy5bcm93XT8uW2NvbF0/LmRhdGUoKSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICA8L3RyPlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgPC90Ym9keT5cbiAgICAgICAgICAgIDwvdGFibGU+XG4gICAgICAgICAgfVxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgQGlmIChoYXNUaW1lUGlja2VyKCkpIHtcbiAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXgganVzdGlmeS1jZW50ZXIgaXRlbXMtY2VudGVyIHB0LVsxMnB4XVwiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidy1mdWxsIGZsZXgganVzdGlmeS1jZW50ZXIgaXRlbXMtY2VudGVyIHJvdW5kZWQtWzRweF0gYm9yZGVyXCJcbiAgICAgICAgICAgICAgICBbY2xhc3MuYm9yZGVyLVsjZTZlOGVkXV09XCIhdGltZVBpY2tlckVycm9yKClcIlxuICAgICAgICAgICAgICAgIFtjbGFzcy5ib3JkZXItWyNmZjU0NTRdXT1cInRpbWVQaWNrZXJFcnJvcigpXCI+XG4gICAgICAgICAgICAgICAgPGxpYnNfdWktY29tcG9uZW50cy1pbnB1dHMtaW5wdXQgY2xhc3NJbmNsdWRlPVwiIXctWzMwcHhdICFwLTAgIWJvcmRlci1ub25lICF0ZXh0LWNlbnRlciAhbGlicy11aS1mb250LWg0cyAhdGV4dC1bIzA3MTYzMV1cIlxuICAgICAgICAgICAgICAgICAgZGF0YVR5cGU9XCJpbnRcIlxuICAgICAgICAgICAgICAgICAgW2F1dG9BZGRaZXJvTGVzc1RoYW4xMEluVHlwZUludF09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgIFtlbWl0RW1wdHlJbkRhdGFUeXBlTnVtYmVyXT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgW21heFZhbHVlTnVtYmVyXT1cIjIzXCJcbiAgICAgICAgICAgICAgICAgIFttaW5WYWx1ZU51bWJlcl09XCIwXCJcbiAgICAgICAgICAgICAgICAgIFtmb2N1c1RpbWVPdXRdPVwiMFwiXG4gICAgICAgICAgICAgICAgICBbYmx1clRpbWVPdXRdPVwiMFwiXG4gICAgICAgICAgICAgICAgICBbbWF4TGVuZ3RoXT1cIjJcIlxuICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cInRpbWVwaWNrZXJWYWx1ZUl0ZW0oKS5yaWdodGhvdXIoKVwiXG4gICAgICAgICAgICAgICAgICAob3V0Q2hhbmdlKT1cImhhbmRsZXJDaGFuZ2VUaW1lVmFsdWUoJGV2ZW50LCAncmlnaHRob3VyJylcIlxuICAgICAgICAgICAgICAgICAgKG91dElucHV0RXZlbnQpPVwiaGFuZGxlcklucHV0RXZlbnQoJGV2ZW50LCdyaWdodGhvdXInKVwiXG4gICAgICAgICAgICAgICAgICAob3V0RnVuY3Rpb25zQ29udHJvbCk9XCJoYW5kbGVyRnVuY3Rpb25Db250cm9sKCRldmVudCwgJ3JpZ2h0aG91cicpXCJcbiAgICAgICAgICAgICAgICAgIChvdXRGb2N1c0FuZEJsdXJFdmVudCk9XCJoYW5kbGVyRm9jdXNBbmRCbHVyVGltZSgkZXZlbnQsICdyaWdodGhvdXInKVwiIC8+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJsaWJzLXVpLWZvbnQtaDNzIHRleHQtWyMzMzMzMzNdXCI+Ojwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8bGlic191aS1jb21wb25lbnRzLWlucHV0cy1pbnB1dCBjbGFzc0luY2x1ZGU9XCIhdy1bMzBweF0gIXAtMCAhYm9yZGVyLW5vbmUgIXRleHQtY2VudGVyIGxpYnMtdWktZm9udC1oNHMgIXRleHQtWyMwNzE2MzFdXCJcbiAgICAgICAgICAgICAgICAgIGRhdGFUeXBlPVwiaW50XCJcbiAgICAgICAgICAgICAgICAgIFthdXRvQWRkWmVyb0xlc3NUaGFuMTBJblR5cGVJbnRdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICBbZW1pdEVtcHR5SW5EYXRhVHlwZU51bWJlcl09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgIFttYXhWYWx1ZU51bWJlcl09XCI1OVwiXG4gICAgICAgICAgICAgICAgICBbbWluVmFsdWVOdW1iZXJdPVwiMFwiXG4gICAgICAgICAgICAgICAgICBbZm9jdXNUaW1lT3V0XT1cIjBcIlxuICAgICAgICAgICAgICAgICAgW2JsdXJUaW1lT3V0XT1cIjBcIlxuICAgICAgICAgICAgICAgICAgW21heExlbmd0aF09XCIyXCJcbiAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJ0aW1lcGlja2VyVmFsdWVJdGVtKCkucmlnaHRtaW51dGUoKVwiXG4gICAgICAgICAgICAgICAgICAob3V0SW5wdXRFdmVudCk9XCJoYW5kbGVySW5wdXRFdmVudCgkZXZlbnQsJ3JpZ2h0bWludXRlJylcIlxuICAgICAgICAgICAgICAgICAgKG91dEZ1bmN0aW9uc0NvbnRyb2wpPVwiaGFuZGxlckZ1bmN0aW9uQ29udHJvbCgkZXZlbnQsICdyaWdodG1pbnV0ZScpXCJcbiAgICAgICAgICAgICAgICAgIChvdXRDaGFuZ2UpPVwiaGFuZGxlckNoYW5nZVRpbWVWYWx1ZSgkZXZlbnQsICdyaWdodG1pbnV0ZScpXCJcbiAgICAgICAgICAgICAgICAgIChvdXRGb2N1c0FuZEJsdXJFdmVudCk9XCJoYW5kbGVyRm9jdXNBbmRCbHVyVGltZSgkZXZlbnQsICdyaWdodG1pbnV0ZScpXCIgLz5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgfVxuICAgICAgPC9kaXY+XG4gICAgfVxuXG4gIDwvZGl2PlxuICA8ZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJmbGV4IHctZnVsbFwiPlxuICAgICAgQGlmICghaXNTaW5nbGUoKSAmJiBoYXNUaW1lUGlja2VyKCkpIHtcbiAgICAgICAgPGRpdiBjbGFzcz1cIm10LVs4cHhdIGxpYnMtdWktZm9udC1oN3IgdGV4dC1bI2ZmNTQ1NF0gaC1bMTRweF1cIj5cbiAgICAgICAgICBAaWYgKHRpbWVQaWNrZXJFcnJvcigpKSB7XG4gICAgICAgICAgICA8c3Bhbj57eyAnaTE4bl9kYXRlX2NvbXBhcmVfc3RhcnRfZW5kX21lc3NhZ2VfZXJyb3InIHwgdHJhbnNsYXRlIH19PC9zcGFuPlxuICAgICAgICAgIH1cbiAgICAgICAgPC9kaXY+XG4gICAgICB9XG4gICAgPC9kaXY+XG4gICAgQGlmICghcXVpY2tSYW5nZXNBcnJheSgpLmxlbmd0aCB8fCAhaXNTaW5nbGUoKSkge1xuICAgICAgPGRpdiBjbGFzcz1cIiBmbGV4IHctZnVsbCBwdC1bMTZweF0ganVzdGlmeS1iZXR3ZWVuXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGl0ZW1zLWNlbnRlclwiPlxuICAgICAgICAgIEBpZiAoIWlzU2luZ2xlKCkpIHtcbiAgICAgICAgICAgIEBpZiAoIWVuZERhdGUoKSkge1xuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1bI2NkZDBkNl0gbGlicy11aS1mb250LWg2clwiPlxuICAgICAgICAgICAgICAgIDxzcGFuPnt7IHN0YXJ0RGF0ZSgpPy5mb3JtYXQoJ0REL01NL1lZWVknKSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICBAaWYgKGhhc1RpbWVQaWNrZXIoKSkge1xuICAgICAgICAgICAgICAgICAgPHNwYW4+IHt7IGNvbXB1dGVkRGlzcGxheVRpbWVMZWZ0KCkgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICZoeXBoZW47XG4gICAgICAgICAgICAgICAgPHNwYW4+e3sgc3RhcnREYXRlKCk/LmZvcm1hdCgnREQvTU0vWVlZWScpIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgIEBpZiAoaGFzVGltZVBpY2tlcigpKSB7XG4gICAgICAgICAgICAgICAgICA8c3Bhbj4ge3sgY29tcHV0ZWREaXNwbGF5VGltZVJpZ2h0KCkgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIEBpZiAoZW5kRGF0ZSgpKSB7XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LVsjY2RkMGQ2XSBsaWJzLXVpLWZvbnQtaDZyXCI+XG4gICAgICAgICAgICAgICAgPHNwYW4+e3sgc3RhcnREYXRlKCk/LmZvcm1hdCgnREQvTU0vWVlZWScpIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgIEBpZiAoaGFzVGltZVBpY2tlcigpKSB7XG4gICAgICAgICAgICAgICAgICA8c3Bhbj4ge3sgY29tcHV0ZWREaXNwbGF5VGltZUxlZnQoKSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgJmh5cGhlbjtcbiAgICAgICAgICAgICAgICA8c3Bhbj57eyBlbmREYXRlKCk/LmZvcm1hdCgnREQvTU0vWVlZWScpIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgIEBpZiAoaGFzVGltZVBpY2tlcigpKSB7XG4gICAgICAgICAgICAgICAgICA8c3Bhbj4ge3sgY29tcHV0ZWREaXNwbGF5VGltZVJpZ2h0KCkgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4XCI+XG4gICAgICAgICAgPGxpYnNfdWktY29tcG9uZW50cy1idXR0b25zLWJ1dHRvbiBjbGFzcz1cIm1yLVsxMnB4XVwiXG4gICAgICAgICAgICBsYWJlbD1cImkxOG5fY2FuY2VsXCJcbiAgICAgICAgICAgIHR5cGU9XCJidXR0b24tdGhpcmRcIlxuICAgICAgICAgICAgKG91dENsaWNrKT1cImhhbmRsZXJDbGlja0NhbmNlbCgkZXZlbnQpXCIgLz5cbiAgICAgICAgICA8bGlic191aS1jb21wb25lbnRzLWJ1dHRvbnMtYnV0dG9uIGxhYmVsPVwiaTE4bl9zZWxlY3RcIlxuICAgICAgICAgICAgKG91dENsaWNrKT1cImhhbmRsZXJDbGlja0FwcGx5KCRldmVudClcIiAvPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIH1cbiAgPC9kaXY+XG48L2Rpdj5cbiJdfQ==
|
|
1257
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FsZW5kYXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy11aS9jb21wb25lbnRzL2RhdGV0aW1lL3BpY2tlci9zcmMvY3VzdG9tLXJhbmdlcy9jYWxlbmRhci9jYWxlbmRhci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzLXVpL2NvbXBvbmVudHMvZGF0ZXRpbWUvcGlja2VyL3NyYy9jdXN0b20tcmFuZ2VzL2NhbGVuZGFyL2NhbGVuZGFyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLDZEQUE2RDtBQUM3RCx1REFBdUQ7QUFDdkQsT0FBTyxFQUFFLHVCQUF1QixFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFjLE1BQU0sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFxQixNQUFNLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQWtCLE1BQU0sZUFBZSxDQUFDO0FBQ2hNLE9BQU8sRUFBRSxzQ0FBc0MsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQzVGLE9BQU8sRUFBaUQsaUNBQWlDLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUNoSSxPQUFPLEVBQWtELG9DQUFvQyxFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFLeEksT0FBTyxFQUFFLE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM5QyxPQUFPLEVBQUUsZUFBZSxFQUFFLGdCQUFnQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDeEUsT0FBTyxLQUFLLE1BQU0sT0FBTyxDQUFDO0FBQzFCLE9BQU8sT0FBTyxNQUFNLHNCQUFzQixDQUFDO0FBQzNDLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxtQkFBbUIsRUFBRSxrQkFBa0IsRUFBRSxrQkFBa0IsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQ2pJLE9BQU8sRUFBRSxnQkFBZ0Is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QUFJLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUM7UUFDM0UsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUM7UUFFdkQsSUFBSSxDQUFDLGVBQWUsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLEVBQUU7WUFDcEMsT0FBTyxDQUFDLElBQUksS0FBSyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsRUFBRTtnQkFDckUsV0FBVyxDQUFDLElBQUksQ0FBQyxHQUFHLEtBQWUsQ0FBQztnQkFFcEMsT0FBTyxXQUFXLENBQUM7WUFDckIsQ0FBQyxDQUFDLENBQUM7WUFFSCxPQUFPLE9BQU8sQ0FBQztRQUNqQixDQUFDLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxJQUFJLEtBQUssVUFBVSxJQUFJLElBQUksS0FBSyxXQUFXLENBQUMsSUFBSSxLQUFLLEtBQUssU0FBUyxFQUFFLENBQUM7WUFDekUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7WUFFdkIsT0FBTztRQUNULENBQUM7UUFDRCxJQUFJLENBQUMsR0FBRyxLQUFLLEVBQUUsQ0FBQyxNQUFNLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLE1BQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUks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LE9BQU8sSUFBSSxJQUFJLEVBQUUsQ0FBQztRQUNwQixDQUFDO1FBRUQsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQsV0FBVztRQUNULE9BQU87SUFDVCxDQUFDO3dHQTc2Q1UsMkRBQTJEOzRGQUEzRCwyREFBMkQsb2lGQ3RDeEUsZ3AwQkFzWkEsNG9JRHRYSSxlQUFlLDRGQUNmLGlDQUFpQyxtekRBQ2pDLG9DQUFvQywyL0NBQ3BDLHNDQUFzQzs7NEZBRzdCLDJEQUEyRDtrQkFkdkUsU0FBUzsrQkFFRSwyREFBMkQsY0FHekQsSUFBSSxtQkFDQyx1QkFBdUIsQ0FBQyxNQUFNLFdBQ3RDO3dCQUNQLGVBQWU7d0JBQ2YsaUNBQWlDO3dCQUNqQyxvQ0FBb0M7d0JBQ3BDLHNDQUFzQztxQkFDdkMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLWV4cHJlc3Npb25zICovXG4vKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55ICovXG5pbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LCBjb21wdXRlZCwgZWZmZWN0LCBFbGVtZW50UmVmLCBpbmplY3QsIGlucHV0LCBtb2RlbCwgT25EZXN0cm95LCBPbkluaXQsIG91dHB1dCwgc2lnbmFsLCB1bnRyYWNrZWQsIHZpZXdDaGlsZCwgV3JpdGFibGVTaWduYWwgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IHsgTGlic1VpQ29tcG9uZW50c0J1dHRvbnNCdXR0b25Db21wb25lbnQgfSBmcm9tIFwiQGxpYnMtdWkvY29tcG9uZW50cy1idXR0b25zLWJ1dHRvblwiO1xuaW1wb3J0IHsgSURyb3Bkb3duRnVuY3Rpb25Db250cm9sRXZlbnQsIElFbWl0U2VsZWN0S2V5LCBMaWJzVWlDb21wb25lbnRzRHJvcGRvd25Db21wb25lbnQgfSBmcm9tIFwiQGxpYnMtdWkvY29tcG9uZW50cy1kcm9wZG93blwiO1xuaW1wb3J0IHsgSUZvY3VzQW5kQmx1ckV2ZW50LCBJSW5wdXRGdW5jdGlvbkNvbnRyb2xFdmVudCwgTGlic1VpQ29tcG9uZW50c0lucHV0c0lucHV0Q29tcG9uZW50IH0gZnJvbSBcIkBsaWJzLXVpL2NvbXBvbmVudHMtaW5wdXRzLWlucHV0XCI7XG5pbXBvcnQgeyBJTGlzdENvbmZpZ0l0ZW0gfSBmcm9tIFwiQGxpYnMtdWkvY29tcG9uZW50cy1saXN0XCI7XG5pbXBvcnQgeyBJRmxhZ01vdXNlIH0gZnJvbSBcIkBsaWJzLXVpL2NvbXBvbmVudHMtcG9wb3ZlclwiO1xuaW1wb3J0IHsgSUV2ZW50IH0gZnJvbSBcIkBsaWJzLXVpL2ludGVyZmFjZXMtdHlwZXNcIjtcbmltcG9ydCB7IElIdHRwUmVxdWVzdENvbmZpZyB9IGZyb20gXCJAbGlicy11aS9zZXJ2aWNlcy1odHRwLXJlcXVlc3RcIjtcbmltcG9ydCB7IGlzRW1wdHksIHNldCB9IGZyb20gXCJAbGlicy11aS91dGlsc1wiO1xuaW1wb3J0IHsgVHJhbnNsYXRlTW9kdWxlLCBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSBcIkBuZ3gtdHJhbnNsYXRlL2NvcmVcIjtcbmltcG9ydCBkYXlqcyBmcm9tICdkYXlqcyc7XG5pbXBvcnQgaXNvV2VlayBmcm9tICdkYXlqcy9wbHVnaW4vaXNvV2Vlayc7XG5pbXBvcnQgeyBnZXRNb250aHNEZXRhaWxCeUlkLCBnZXRNb250aHNMaXN0Q29uZmlnLCBnZXRZZWFyc0RldGFpbEJ5SWQsIGdldFllYXJzTGlzdENvbmZpZyB9IGZyb20gXCIuLi8uLi9kZWZpbmVzL2NhbGVuZGFyLmRlZmluZVwiO1xuaW1wb3J0IHsgREVGQVVMVF9NQVhfWUVBUiwgREVGQVVMVF9NSU5fWUVBUiB9IGZyb20gXCIuLi8uLi9kZWZpbmVzL2NvbW1vbi1kYXRlLmRlZmluZVwiO1xuaW1wb3J0IHsgZGVmYXVsdExvY2FsZUNvbmZpZywgZ2V0RGF0ZU9wdGlvbnMgfSBmcm9tIFwiLi4vLi4vZGVmaW5lcy9kYXRlLW9wdGlvbnMuZGVmaW5lXCI7XG5pbXBvcnQgeyBJRW1pdERhdGVDYWxlbmRhciB9IGZyb20gXCIuLi8uLi9pbnRlcmZhY2VzL2NhbGVuZGFyLWVtaXQuaW50ZXJmYWNlXCI7XG5pbXBvcnQgeyBJQ2FsZW5kYXIsIElDYWxlbmRhclZhcmlhYmxlcywgSURhdGVSYW5nZSwgSVNwbGl0UGlja2VyRGF0ZSwgU2lkZUVudW0gfSBmcm9tIFwiLi4vLi4vaW50ZXJmYWNlcy9jYWxlbmRhci12YXJpYWJsZXMuaW50ZXJmYWNlXCI7XG5pbXBvcnQgeyBJQ2FsZW5kYXJGdW5jdGlvbkNvbnRyb2xFdmVudCB9IGZyb20gXCIuLi8uLi9pbnRlcmZhY2VzL2Z1bmN0aW9uLWNvbnRyb2wuaW50ZXJmYWNlXCI7XG5pbXBvcnQgeyBMb2NhbGl6YXRpb25Db25maWcgfSBmcm9tIFwiLi4vLi4vaW50ZXJmYWNlcy9waWNrZXIuaW50ZXJmYWNlXCI7XG5pbXBvcnQgeyBJQ2hlY2tUaW1lcGlja2VyU2VsZWN0ZWQsIElTZWxlY3RlZE9sZCwgSVRpbWVwaWNrZXJJdGVtVmFsdWUsIElUaW1lcGlja2VyVmFyaWFibGVzLCBJVGltZXBpY2tlclZhcmlhYmxlc1NpZGUgfSBmcm9tIFwiLi4vLi4vaW50ZXJmYWNlcy90aW1lLXZhcmlhYmxlcy5pbnRlcmZhY2VcIjtcbmRheWpzLmV4dGVuZChpc29XZWVrKTtcblxuQENvbXBvbmVudCh7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAYW5ndWxhci1lc2xpbnQvY29tcG9uZW50LXNlbGVjdG9yXG4gIHNlbGVjdG9yOiAnbGlic191aS1jb21wb25lbnRzLWRhdGV0aW1lLXBpY2tlci1jdXN0b21fcmFuZ2VzLWNhbGVuZGFyJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2NhbGVuZGFyLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vY2FsZW5kYXIuY29tcG9uZW50LnNjc3MnXSxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIGltcG9ydHM6IFtcbiAgICBUcmFuc2xhdGVNb2R1bGUsXG4gICAgTGlic1VpQ29tcG9uZW50c0Ryb3Bkb3duQ29tcG9uZW50LFxuICAgIExpYnNVaUNvbXBvbmVudHNJbnB1dHNJbnB1dENvbXBvbmVudCxcbiAgICBMaWJzVWlDb21wb25lbnRzQnV0dG9uc0J1dHRvbkNvbXBvbmVudFxuICBdXG59KVxuZXhwb3J0IGNsYXNzIExpYnNVaUNvbXBvbmVudHNEYXRldGltZVBpY2tlckN1c3RvbVJhbmdlc0NhbGVuZGFyQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuICAvKiogUFJPUEVSVFkgKi9cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IHNpZGVFbnVtID0gU2lkZUVudW07XG4gIHByb3RlY3RlZCBjYWxlbmRhclZhcmlhYmxlcyA9IHNpZ25hbDxJQ2FsZW5kYXJWYXJpYWJsZXM+KHsgbGVmdDogc2lnbmFsKHt9KSwgcmlnaHQ6IHNpZ25hbCh7fSkgfSk7XG4gIHByb3RlY3RlZCB0aW1lcGlja2VyVmFyaWFibGVzID0gc2lnbmFsPElUaW1lcGlja2VyVmFyaWFibGVzPih7IGxlZnQ6IHNpZ25hbCh7IHNlbGVjdGVkSG91cjogMCwgc2VsZWN0ZWRNaW51dGU6IDAgfSksIHJpZ2h0OiBzaWduYWwoeyBzZWxlY3RlZEhvdXI6IDIzLCBzZWxlY3RlZE1pbnV0ZTogNTkgfSkgfSk7XG4gIHByb3RlY3RlZCBkaXNhYmxlTW9udGggPSBzaWduYWw8eyBsZWZ0OiBXcml0YWJsZVNpZ25hbDxBcnJheTxhbnk+PiwgcmlnaHQ6IFdyaXRhYmxlU2lnbmFsPEFycmF5PGFueT4+IH0+KHsgbGVmdDogc2lnbmFsKFtdKSwgcmlnaHQ6IHNpZ25hbChbXSkgfSk7XG4gIHByb3RlY3RlZCB0b2RheSA9IHNpZ25hbDxkYXlqcy5EYXlqcz4oZGF5anMoKSk7XG4gIHByb3RlY3RlZCBsaXN0S2V5RnJvbVNlbGVjdGVkID0gc2lnbmFsPHsgbW9udGg6IGFueSwgeWVhcjogYW55IH0+KHsgbW9udGg6IHVuZGVmaW5lZCwgeWVhcjogdW5kZWZpbmVkIH0pO1xuICBwcm90ZWN0ZWQgbGlzdEtleVRvU2VsZWN0ZWQgPSBzaWduYWw8eyBtb250aDogYW55LCB5ZWFyOiBhbnkgfT4oeyBtb250aDogdW5kZWZpbmVkLCB5ZWFyOiB1bmRlZmluZWQgfSk7XG4gIHByb3RlY3RlZCBjaGVja1Nob3dMaXN0RHJvcGRvd24gPSBzaWduYWw8eyBba2V5OiBzdHJpbmddOiBib29sZWFuIH0+KHt9KTtcbiAgcHJvdGVjdGVkIHNlbGVjdGVkUXVpY2tSYW5nZSA9IHNpZ25hbDxzdHJpbmc+KCcnKTtcbiAgcHJvdGVjdGVkIGxlZnRDYWxlbmRhciA9IHNpZ25hbDx7IGNhbGVuZGFyPzogSUNhbGVuZGFyLCBtb250aD86IGRheWpzLkRheWpzIH0+KHt9KTtcbiAgcHJvdGVjdGVkIHJpZ2h0Q2FsZW5kYXIgPSBzaWduYWw8eyBjYWxlbmRhcj86IElDYWxlbmRhciwgbW9udGg/OiBkYXlqcy5EYXlqcyB9Pih7fSk7XG5cbiAgcHJvdGVjdGVkIGxpc3RNb250aHNDb25maWcgPSBzaWduYWw8SUxpc3RDb25maWdJdGVtIHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xuICBwcm90ZWN0ZWQgbW9udGhIdHRwRGV0YWlsQ29uZmlnID0gc2lnbmFsPElIdHRwUmVxdWVzdENvbmZpZz4oZ2V0TW9udGhzRGV0YWlsQnlJZCgpKTtcbiAgcHJvdGVjdGVkIGxpc3RMZWZ0WWVhckNvbmZpZyA9IHNpZ25hbDxJTGlzdENvbmZpZ0l0ZW0gfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XG4gIHByb3RlY3RlZCBsaXN0UmlnaHRZZWFyQ29uZmlnID0gc2lnbmFsPElMaXN0Q29uZmlnSXRlbSB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcbiAgcHJvdGVjdGVkIGxpc3RZZWFyQ29uZmlnID0gc2lnbmFsPElMaXN0Q29uZmlnSXRlbSB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcbiAgcHJvdGVjdGVkIGxlZnRZZWFySHR0cERldGFpbENvbmZpZyA9IHNpZ25hbDxJSHR0cFJlcXVlc3RDb25maWcgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XG4gIHByb3RlY3RlZCByaWdodFllYXJIdHRwRGV0YWlsQ29uZmlnID0gc2lnbmFsPElIdHRwUmVxdWVzdENvbmZpZyB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcblxuICBwcm90ZWN0ZWQgdGltZVBpY2tlckVycm9yID0gc2lnbmFsPGJvb2xlYW4+KGZhbHNlKTtcbiAgcHJvdGVjdGVkIGNvbXB1dGVkRGlzcGxheVRpbWVMZWZ0ID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5jb21wdXRlZERpc3BsYXlUaW1lKHsgc2VsZWN0ZWRIb3VyOiB0aGlzLnRpbWVwaWNrZXJWYWx1ZUl0ZW0oKS5sZWZ0aG91cigpLCBzZWxlY3RlZE1pbnV0ZTogdGhpcy50aW1lcGlja2VyVmFsdWVJdGVtKCkubGVmdG1pbnV0ZSgpIH0pKTtcbiAgcHJvdGVjdGVkIGNvbXB1dGVkRGlzcGxheVRpbWVSaWdodCA9IGNvbXB1dGVkKCgpID0+IHRoaXMuY29tcHV0ZWREaXNwbGF5VGltZSh7IHNlbGVjdGVkSG91cjogdGhpcy50aW1lcGlja2VyVmFsdWVJdGVtKCkucmlnaHRob3VyKCksIHNlbGVjdGVkTWludXRlOiB0aGlzLnRpbWVwaWNrZXJWYWx1ZUl0ZW0oKS5yaWdodG1pbnV0ZSgpIH0pKTtcbiAgcHJvdGVjdGVkIGNvbXB1dGVkRGlzcGxheVRpbWVMZWZ0SW5wdXRIb3VyID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5jb21wdXRlZERpc3BsYXlUaW1lSW5wdXQoU2lkZUVudW0ubGVmdCwgJ2hvdXInKSk7XG4gIHByb3RlY3RlZCBjb21wdXRlZERpc3BsYXlUaW1lTGVmdElucHV0TWludXRlID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5jb21wdXRlZERpc3BsYXlUaW1lSW5wdXQoU2lkZUVudW0ubGVmdCwgJ21pbnV0ZScpKTtcbiAgcHJvdGVjdGVkIGNvbXB1dGVkRGlzcGxheVRpbWVSaWdodElucHV0SG91ciA9IGNvbXB1dGVkKCgpID0+IHRoaXMuY29tcHV0ZWREaXNwbGF5VGltZUlucHV0KFNpZGVFbnVtLnJpZ2h0LCAnaG91cicpKTtcbiAgcHJvdGVjdGVkIGNvbXB1dGVkRGlzcGxheVRpbWVSaWdodElucHV0TWludXRlID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5jb21wdXRlZERpc3BsYXlUaW1lSW5wdXQoU2lkZUVudW0ucmlnaHQsICdtaW51dGUnKSk7XG4gIHByb3RlY3RlZCB0aW1lcGlja2VyVmFsdWVJdGVtID0gc2lnbmFsPElUaW1lcGlja2VySXRlbVZhbHVlPih7IGxlZnRob3VyOiBzaWduYWwoMCksIGxlZnRtaW51dGU6IHNpZ25hbCgwKSwgcmlnaHRob3VyOiBzaWduYWwoMCksIHJpZ2h0bWludXRlOiBzaWduYWwoMCkgfSk7XG5cbiAgcHJpdmF0ZSBmdW5jdGlvbkNvbnRyb2xzID0gbmV3IE1hcDxzdHJpbmcsIElEcm9wZG93bkZ1bmN0aW9uQ29udHJvbEV2ZW50IHwgSUlucHV0RnVuY3Rpb25Db250cm9sRXZlbnQ+KCk7XG4gIHByaXZhdGUgcGlja2luZ0RhdGUgPSBzaWduYWw8Ym9vbGVhbj4oZmFsc2UpO1xuICBwcml2YXRlIGlzU2hvd24gPSBzaWduYWw8Ym9vbGVhbj4oZmFsc2UpO1xuICBwcml2YXRlIG5vd0hvdmVyZWREYXRlID0gc2lnbmFsPGRheWpzLkRheWpzIHwgbnVsbD4obnVsbCk7XG4gIHByaXZhdGUgdGltZVBpY2tlckluY3JlbWVudCA9IHNpZ25hbDxudW1iZXI+KDEpO1xuICBwcml2YXRlIHNlbGVjdGVkTGFiZWwgPSBzaWduYWw8c3RyaW5nIHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xuICBwcml2YXRlIGtleUNvZGVCYWNrc3BhY2UgPSBzaWduYWw8Ym9vbGVhbj4oZmFsc2UpO1xuICBwcml2YXRlIGNoZWNrQmFja3NwYWNlRm9jdXMgPSBzaWduYWw8SVRpbWVwaWNrZXJJdGVtVmFsdWU+KHsgbGVmdGhvdXI6IHNpZ25hbCgxKSwgbGVmdG1pbnV0ZTogc2lnbmFsKDEpLCByaWdodGhvdXI6IHNpZ25hbCgxKSwgcmlnaHRtaW51dGU6IHNpZ25hbCgxKSB9KTtcbiAgcHJpdmF0ZSBpc1plcm8gPSBzaWduYWw8Ym9vbGVhbiB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcbiAgcHJpdmF0ZSBvbGREYXRlID0gc2lnbmFsPElTZWxlY3RlZE9sZD4oeyBzdGFydDogZGF5anMoMCksIGVuZDogZGF5anMoMCkgfSk7XG4gIHByaXZhdGUgaXNTZWxlY3RlZERhdGEgPSBzaWduYWw8SUNoZWNrVGltZXBpY2tlclNlbGVjdGVkPih7IGxlZnRtb250aDogZmFsc2UsIGxlZnR5ZWFyOiBmYWxzZSwgcmlnaHRtb250aDogZmFsc2UsIHJpZ2h0eWVhcjogZmFsc2UgfSk7XG4gIHByaXZhdGUgc3BsaXRQaWNrZXJEYXRlID0gc2lnbmFsPElTcGxpdFBpY2tlckRhdGU+KHsgc3RhcnQ6IHNpZ25hbCh7IG1vbnRoOiAwLCB5ZWFyOiAwLCBkYXk6IDAsIGhvdXI6IDAsIG1pbnV0ZTogMCB9KSwgZW5kOiBzaWduYWwoeyBtb250aDogMCwgeWVhcjogMCwgZGF5OiAwLCBob3VyOiAyMywgbWludXRlOiA1OSB9KSB9KTtcblxuICAvKiogSU5QVVQgKi9cbiAgcmVhZG9ubHkgcXVpY2tSYW5nZXNBcnJheSA9IGlucHV0PEFycmF5PElEYXRlUmFuZ2U+PihbXSk7XG4gIHJlYWRvbmx5IHpJbmRleCA9IGlucHV0PG51bWJlciwgbnVtYmVyPigxMjAwLCB7IHRyYW5zZm9ybTogKHZhbHVlKSA9PiB2YWx1ZSA/PyAxMjAwIH0pO1xuICByZWFkb25seSBjbGFzc0luY2x1ZGUgPSBpbnB1dDxzdHJpbmc+KCcnKTtcbiAgcmVhZG9ubHkgaXNTaW5nbGUgPSBpbnB1dDxib29sZWFuPihmYWxzZSk7XG4gIHJlYWRvbmx5IHNob3dEcm9wZG93bnNTZWxlY3QgPSBpbnB1dDxib29sZWFuPih0cnVlKTtcbiAgcmVhZG9ubHkgaGFzVGltZVBpY2tlciA9IGlucHV0PGJvb2xlYW4+KHRydWUpO1xuICByZWFkb25seSBmbGFnTW91c2UgPSBpbnB1dDxJRmxhZ01vdXNlPih7IGlzTW91c2VFbnRlcjogZmFsc2UsIGlzTW91c2VFbnRlckNvbnRlbnQ6IGZhbHNlIH0pO1xuICByZWFkb25seSBkYXRlT3B0aW9ucyA9IGlucHV0PExvY2FsaXphdGlvbkNvbmZpZz4oeyAuLi5kZWZhdWx0TG9jYWxlQ29uZmlnKCksIC4uLmdldERhdGVPcHRpb25zKCkgfSk7XG4gIHJlYWRvbmx5IGF1dG9BcHBseSA9IGlucHV0PGJvb2xlYW4+KGZhbHNlKTtcbiAgcmVhZG9ubHkgaGFzU2Vjb25kUGlja2VyID0gaW5wdXQ8Ym9vbGVhbj4oZmFsc2UpO1xuICByZWFkb25seSBzaG93UmFuZ2VMYWJlbE9uSW5wdXQgPSBpbnB1dDxib29sZWFuIHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xuXG4gIHJlYWRvbmx5IHN0YXJ0RGF0ZSA9IG1vZGVsPGRheWpzLkRheWpzIHwgdW5kZWZpbmVkPihkYXlqcygpLnN0YXJ0T2YoJ2RheScpKTtcbiAgcmVhZG9ubHkgZW5kRGF0ZSA9IG1vZGVsPGRheWpzLkRheWpzIHwgdW5kZWZpbmVkPihkYXlqcygpLmVuZE9mKCdkYXknKSk7XG4gIHJlYWRvbmx5IG1pbkRhdGUgPSBpbnB1dDxkYXlqcy5EYXlqcyB8IHN0cmluZyB8IHVuZGVmaW5lZCwgZGF5anMuRGF5anMgfCBzdHJpbmcgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCwgeyB0cmFuc2Zvcm06IHRoaXMudHJhbnNmb3JtTWluTWF4RGF0ZS5iaW5kKHRoaXMpIH0pO1xuICByZWFkb25seSBtYXhEYXRlID0gaW5wdXQ8ZGF5anMuRGF5anMgfCBzdHJpbmcgfCB1bmRlZmluZWQsIGRheWpzLkRheWpzIHwgc3RyaW5nIHwgdW5kZWZpbmVkPih1bmRlZmluZWQsIHsgdHJhbnNmb3JtOiB0aGlzLnRyYW5zZm9ybU1pbk1heERhdGUuYmluZCh0aGlzKSB9KTtcblxuICAvKiogT1VUUFVUICovXG4gIHJlYWRvbmx5IG91dENoYW5nU3RhZ2VGbGFnTW91c2UgPSBvdXRwdXQ8SUZsYWdNb3VzZT4oKTtcbiAgLy8gcmVhZG9ubHkgb3V0U3RhcnREYXRlQ2hhbmdlZCA9IG91dHB1dDx7IHN0YXJ0RGF0ZTogZGF5anMuRGF5anMgfCB1bmRlZmluZWQgfT4oKTtcbiAgLy8gcmVhZG9ubHkgb3V0RW5kRGF0ZUNoYW5nZWQgPSBvdXRwdXQ8eyBlbmREYXRlOiBkYXlqcy5EYXlqcyB8IHVuZGVmaW5lZCB9PigpO1xuICByZWFkb25seSBvdXRQaWNrZXJEYXRlID0gb3V0cHV0PElFbWl0RGF0ZUNhbGVuZGFyPigpO1xuICAvLyByZWFkb25seSBvdXRSYW5nZUNsaWNrZWQ6IEV2ZW50RW1pdHRlcjxJUmFuZ2VzQ2xpY2tlZD4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIHJlYWRvbmx5IG91dENhbmNlbCA9IG91dHB1dDxzdHJpbmc+KCk7XG4gIHJlYWRvbmx5IG91dFVwZGF0ZVdpZHRoID0gb3V0cHV0PG51bWJlcj4oKTtcbiAgcmVhZG9ubHkgb3V0RnVuY3Rpb25zQ29udHJvbCA9IG91dHB1dDxJQ2FsZW5kYXJGdW5jdGlvbkNvbnRyb2xFdmVudD4oKTtcblxuICAvKiogSU5KRUNUSU9OICovXG4gIHByaXZhdGUgdHJhbnNsYXRlID0gaW5qZWN0KFRyYW5zbGF0ZVNlcnZpY2UpO1xuXG4gIHJlYWRvbmx5IHBpY2tlckNvbnRhaW5lciA9IHZpZXdDaGlsZDxFbGVtZW50UmVmPigncGlja2VyQ29udGFpbmVyJyk7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5saXN0TW9udGhzQ29uZmlnLnNldChnZXRNb250aHNMaXN0Q29uZmlnKHRoaXMudHJhbnNsYXRlKSk7XG5cbiAgICBlZmZlY3QoKCkgPT4ge1xuICAgICAgY29uc3Qgb2xkU3RhcnQgPSB0aGlzLnN0YXJ0RGF0ZSgpPy5jbG9uZSgpO1xuICAgICAgY29uc3Qgb2xkRW5kID0gdGhpcy5lbmREYXRlKCk/LmNsb25lKCk7XG5cbiAgICAgIHVudHJhY2tlZCgoKSA9PiB7XG4gICAgICAgIHRoaXMub2xkRGF0ZS5zZXQoeyBzdGFydDogb2xkU3RhcnQsIGVuZDogb2xkRW5kIH0pO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBuZ09uSW5pdCgpIHtcbiAgICBjb25zdCBzdGFydERhdGUgPSB0aGlzLnN0YXJ0RGF0ZSgpPy5jbG9uZSgpO1xuICAgIGNvbnN0IGVuZERhdGUgPSB0aGlzLmVuZERhdGUoKT8uY2xvbmUoKTtcblxuICAgIHRoaXMuc3BsaXRQaWNrZXJEYXRlLnVwZGF0ZShjdXJyZW50ID0+IHtcbiAgICAgIGN1cnJlbnQuc3RhcnQudXBkYXRlKHNpZGVDdXJyZW50ID0+IHtcbiAgICAgICAgc2lkZUN1cnJlbnQuZGF5ID0gKHN0YXJ0RGF0ZSA/PyBkYXlqcygpLnN0YXJ0T2YoJ2RheScpKS5kYXRlKCk7XG5cbiAgICAgICAgcmV0dXJuIHNpZGVDdXJyZW50O1xuICAgICAgfSk7XG4gICAgICBjdXJyZW50LmVuZC51cGRhdGUoc2lkZUN1cnJlbnQgPT4ge1xuICAgICAgICBzaWRlQ3VycmVudC5kYXkgPSAoZW5kRGF0ZSA/PyBkYXlqcygpLmVuZE9mKCdkYXknKSkuZGF0ZSgpO1xuXG4gICAgICAgIHJldHVybiBzaWRlQ3VycmVudDtcbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm4gY3VycmVudDtcbiAgICB9KTtcbiAgICBpZiAoc3RhcnREYXRlKSB7XG4gICAgICB0aGlzLnVwZGF0ZUVsZW1lbnQoKTtcbiAgICB9XG4gICAgaWYgKHN0YXJ0RGF0ZSAmJiB0aGlzLmhhc1RpbWVQaWNrZXIoKSkge1xuICAgICAgdGhpcy5zZXRTdGFydERhdGUoc3RhcnREYXRlKTtcbiAgICAgIHRoaXMucmVuZGVyVGltZVBpY2tlcihTaWRlRW51bS5sZWZ0KTtcbiAgICB9XG5cbiAgICBpZiAoZW5kRGF0ZSAmJiB0aGlzLmhhc1RpbWVQaWNrZXIoKSkge1xuICAgICAgdGhpcy5zZXRFbmREYXRlKGVuZERhdGUpO1xuICAgICAgdGhpcy5yZW5kZXJUaW1lUGlja2VyKFNpZGVFbnVtLnJpZ2h0KTtcbiAgICB9XG4gICAgdGhpcy5idWlsZENvbmZpZ1llYXIoU2lkZUVudW0ubGVmdCk7XG4gICAgdGhpcy5idWlsZENvbmZpZ1llYXIoU2lkZUVudW0ucmlnaHQsIHN0YXJ0RGF0ZT8ueWVhcigpKTtcbiAgICB0aGlzLnVwZGF0ZU1vbnRoc0luVmlldygpO1xuICAgIHRoaXMucmVuZGVyQ2FsZW5kYXIoU2lkZUVudW0ubGVmdCk7XG4gICAgdGhpcy5yZW5kZXJDYWxlbmRhcihTaWRlRW51bS5yaWdodCk7XG4gICAgLy8gdGhpcy5yZW5kZXJSYW5nZXMoKTtcbiAgICB0aGlzLmZvcm1hdE1vbnRoWWVhcigpO1xuICAgIHRoaXMub3V0VXBkYXRlV2lkdGguZW1pdCgxKTtcbiAgICB0aGlzLnVwZGF0ZUVsZW1lbnQoKTtcbiAgICB0aGlzLnRpbWVwaWNrZXJWYWx1ZUl0ZW0uc2V0KHtcbiAgICAgIGxlZnRob3VyOiBzaWduYWwodGhpcy50aW1lcGlja2VyVmFyaWFibGVzKCkubGVmdCgpLnNlbGVjdGVkSG91ciksXG4gICAgICByaWdodGhvdXI6IHNpZ25hbCh0aGlzLnRpbWVwaWNrZXJWYXJpYWJsZXMoKS5yaWdodCgpLnNlbGVjdGVkSG91ciksXG4gICAgICBsZWZ0bWludXRlOiBzaWduYWwodGhpcy50aW1lcGlja2VyVmFyaWFibGVzKCkubGVmdCgpLnNlbGVjdGVkTWludXRlKSxcbiAgICAgIHJpZ2h0bWludXRlOiBzaWduYWwodGhpcy50aW1lcGlja2VyVmFyaWFibGVzKCkucmlnaHQoKS5zZWxlY3RlZE1pbnV0ZSlcbiAgICB9KTtcblxuICAgIC8vIHRoaXMub3V0RnVuY3Rpb25zQ29udHJvbC5lbWl0KHsgYnVpbGREZWZhdWx0UmFuZ2U6IHRoaXMuYnVpbGREZWZhdWx0UmFuZ2UuYmluZCh0aGlzKSwgYXBwbHlUb1NlbGVjdDogdGhpcy5hcHBseVRvU2VsZWN0LmJpbmQodGhpcykgfSlcbiAgfVxuXG4gIHByaXZhdGUgYnVpbGRDb25maWdZZWFyKHNpZGU6IFNpZGVFbnVtLCBzdGFydFllYXI/OiBudW1iZXIsKSB7XG4gICAgY29uc3QgbWluRGF0ZSA9IHRoaXMubWluRGF0ZSgpIGFzIGRheWpzLkRheWpzO1xuICAgIGNvbnN0IG1heERhdGUgPSB0aGlzLm1heERhdGUoKSBhcyBkYXlqcy5EYXlqcztcblxuICAgIGNvbnN0IGxpc3RMZWZ0WWVhciA9IFtdO1xuICAgIGNvbnN0IGxpc3RSaWdodFllYXIgPSBbXTtcblxuICAgIGlmIChzaWRlID09PSBTaWRlRW51bS5sZWZ0KSB7XG4gICAgICBmb3IgKGxldCBpID0gKG1pbkRhdGUgPyBtaW5EYXRlLnllYXIoKSA6IERFRkFVTFRfTUlOX1lFQVIpOyBpIDw9IChtYXhEYXRlID8gbWF4RGF0ZT8ueWVhcigpIDogREVGQVVMVF9NQVhfWUVBUik7IGkrKykge1xuICAgICAgICBsaXN0TGVmdFllYXIucHVzaCh7XG4gICAgICAgICAgaWQ6IGksXG4gICAgICAgICAgbGFiZWw6IGAke2l9YFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIHRoaXMubGlzdExlZnRZZWFyQ29uZmlnLnNldChnZXRZZWFyc0xpc3RDb25maWcobGlzdExlZnRZZWFyKSk7XG4gICAgICB0aGlzLmxlZnRZZWFySHR0cERldGFpbENvbmZpZy5zZXQoZ2V0WWVhcnNEZXRhaWxCeUlkKGxpc3RMZWZ0WWVhcikpO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgZm9yIChsZXQgaSA9IChzdGFydFllYXIgPyBzdGFydFllYXIgOiBtaW5EYXRlID8gbWluRGF0ZS55ZWFyKCkgOiBkYXlqcygpLnllYXIoKSk7IGkgPD0gKG1heERhdGUgPyBtYXhEYXRlPy55ZWFyKCkgOiBERUZBVUxUX01BWF9ZRUFSKTsgaSsrKSB7XG4gICAgICBsaXN0UmlnaHRZZWFyLnB1c2goe1xuICAgICAgICBpZDogaSxcbiAgICAgICAgbGFiZWw6IGAke2l9YFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgdGhpcy5saXN0UmlnaHRZZWFyQ29uZmlnLnNldChnZXRZZWFyc0xpc3RDb25maWcobGlzdFJpZ2h0WWVhcikpO1xuICAgIHRoaXMucmlnaHRZZWFySHR0cERldGFpbENvbmZpZy5zZXQoZ2V0WWVhcnNEZXRhaWxCeUlkKGxpc3RSaWdodFllYXIpKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBoYW5kbGVyQ2hhbmdlRmxhZ01vdXNlKGZsYWdNb3VzZTogSUZsYWdNb3VzZSkge1xuICAgIHRoaXMub3V0Q2hhbmdTdGFnZUZsYWdNb3VzZS5lbWl0KGZsYWdNb3VzZSlcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlU3RhcnRFbmREYXRlKGRhdGU6IGRheWpzLkRheWpzKSB7XG4gICAgaWYgKCh0aGlzLmVuZERhdGUoKSB8fCBkYXRlLmlzQmVmb3JlKHRoaXMuc3RhcnREYXRlKCksICdkYXknKSkpIHtcbiAgICAgIGlmICh0aGlzLmhhc1RpbWVQaWNrZXIoKSkge1xuICAgICAgICBkYXRlID0gdGhpcy5nZXREYXRlV2l0aFRpbWUoZGF0ZSwgU2lkZUVudW0ubGVmdCk7XG4gICAgICB9XG4gICAgICB0aGlzLmVuZERhdGUuc2V0KHVuZGVmaW5lZCk7XG4gICAgICB0aGlzLnNldFN0YXJ0RGF0ZShkYXRlLmNsb25lKCkpO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICghdGhpcy5lbmREYXRlKCkgJiYgdGhpcy5zdGFydERhdGUoKSAmJiBkYXRlLmlzQmVmb3JlKHRoaXMuc3RhcnREYXRlKCkpKSB7XG4gICAgICB0aGlzLnNldEVuZERhdGUodGhpcy5zdGFydERhdGUoKT8uY2xvbmUoKSk7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKHRoaXMuaGFzVGltZVBpY2tlcigpKSB7XG4gICAgICBkYXRlID0gdGhpcy5nZXREYXRlV2l0aFRpbWUoZGF0ZSwgU2lkZUVudW0ucmlnaHQpO1xuICAgIH1cbiAgICBpZiAoIWRhdGUuaXNCZWZvcmUodGhpcy5zdGFydERhdGUoKSwgJ2RheScpKSB7XG4gICAgICB0aGlzLnNldEVuZERhdGUoZGF0ZS5jbG9uZSgpKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuYXV0b0FwcGx5KCkpIHtcbiAgICAgIHRoaXMuY2FsY3VsYXRlU2VsZWN0ZWRMYWJlbCgpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgY2FsY3VsYXRlU2VsZWN0ZWRMYWJlbCgpIHtcbiAgICB0aGlzLnVwZGF0ZUVsZW1lbnQoKTtcbiAgfVxuXG4gIHByaXZhdGUgZm9ybWF0TW9udGhZZWFyKCkge1xuICAgIGNvbnN0IG1vbnRoID0gKHRoaXMuY2FsZW5kYXJWYXJpYWJsZXMoKS5sZWZ0KCkuZHJvcGRvd25zPy4oKT8uY3VycmVudE1vbnRoID8/IDApICsgMTtcbiAgICBjb25zdCByaWdodE1vbnRoID0gKHRoaXMuY2FsZW5kYXJWYXJpYWJsZXMoKS5yaWdodCgpLmRyb3Bkb3ducz8uKCk/LmN1cnJlbnRNb250aCA/PyAwKSArIDE7XG5cbiAgICB0aGlzLmxpc3RLZXlGcm9tU2VsZWN0ZWQudXBkYXRlKGN1cnJlbnQgPT4ge1xuICAgICAgY3VycmVudC5tb250aCA9IG1vbnRoO1xuICAgICAgY3VycmVudC55ZWFyID0gdGhpcy5jYWxlbmRhclZhcmlhYmxlcygpLmxlZnQoKS5kcm9wZG93bnM/LigpPy5jdXJyZW50WWVhcjtcblxuICAgICAgcmV0dXJuIGN1cnJlbnQ7XG4gICAgfSk7XG4gICAgdGhpcy5saXN0S2V5VG9TZWxlY3RlZC51cGRhdGUoY3VycmVudCA9PiB7XG4gICAgICBjdXJyZW50Lm1vbnRoID0gcmlnaHRNb250aDtcbiAgICAgIGN1cnJlbnQueWVhciA9IHRoaXMuY2FsZW5kYXJWYXJpYWJsZXMoKS5yaWdodCgpLmRyb3Bkb3ducz8uKCk/LmN1cnJlbnRZZWFyO1xuXG4gICAgICByZXR1cm4gY3VycmVudDtcbiAgICB9KTtcbiAgICB0aGlzLmlzU2VsZWN0ZWREYXRhLnNldCh7IGxlZnRtb250aDogdHJ1ZSwgbGVmdHllYXI6IHRydWUsIHJpZ2h0bW9udGg6IHRydWUsIHJpZ2h0eWVhcjogdHJ1ZSB9KTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0U3RhcnREYXRlKHN0YXJ0RGF0ZTogZGF5anMuRGF5anMgfCBzdHJpbmcgfCB1bmRlZmluZWQpIHtcbiAgICBpZiAoIXRoaXMuc3RhcnREYXRlKCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBzdGFydERhdGUgPT09ICdzdHJpbmcnKSB7XG4gICAgICB0aGlzLnN0YXJ0RGF0ZS5zZXQoZGF5anMoc3RhcnREYXRlLCB0aGlzLmRhdGVPcHRpb25zKCkuZm9ybWF0KSk7XG4gICAgfVxuICAgIGlmICh0eXBlb2Ygc3RhcnREYXRlID09PSAnb2JqZWN0Jykge1xuICAgICAgdGhpcy5waWNraW5nRGF0ZS5zZXQodHJ1ZSk7XG4gICAgICB0aGlzLnN0YXJ0RGF0ZS5zZXQoZGF5anMoc3RhcnREYXRlKSk7XG4gICAgfVxuICAgIGlmICghdGhpcy5oYXNUaW1lUGlja2VyKCkpIHtcbiAgICAgIHRoaXMucGlja2luZ0RhdGUuc2V0KHRydWUpO1xuICAgICAgdGhpcy5zdGFydERhdGUuc2V0KHRoaXMuc3RhcnREYXRlKCk/LnN0YXJ0T2YoJ2RheScpKTtcbiAgICB9XG4gICAgdGhpcy5zZXRTdGFydERhdGVJblRpbWVQaWNrZXIoKTtcblxuICAgIGlmICh0aGlzLm1pbkRhdGUoKSAmJiB0aGlzLnN0YXJ0RGF0ZSgpPy5pc0JlZm9yZSh0aGlzLm1pbkRhdGUoKSkpIHtcbiAgICAgIHRoaXMuc3RhcnREYXRlLnNldCgodGhpcy5taW5EYXRlKCkgYXMgZGF5anMuRGF5anMpPy5jbG9uZSgpKTtcblxuICAgICAgdGhpcy5zZXRTdGFydERhdGVJblRpbWVQaWNrZXIoKTtcbiAgICB9XG4gICAgaWYgKHRoaXMubWF4RGF0ZSgpICYmIHRoaXMuc3RhcnREYXRlKCk/LmlzQWZ0ZXIodGhpcy5tYXhEYXRlKCkpKSB7XG4gICAgICB0aGlzLnN0YXJ0RGF0ZS5zZXQoKHRoaXMubWF4RGF0ZSgpIGFzIGRheWpzLkRheWpzKS5jbG9uZSgpKTtcbiAgICAgIHRoaXMuc2V0U3RhcnREYXRlSW5UaW1lUGlja2VyKCk7XG4gICAgfVxuICAgIGlmICghdGhpcy5pc1Nob3duKCkpIHtcbiAgICAgIHRoaXMudXBkYXRlRWxlbWVudCgpO1xuICAgIH1cbiAgICAvLyB0aGlzLm91dFN0YXJ0RGF0ZUNoYW5nZWQuZW1pdCh7IHN0YXJ0RGF0ZTogdGhpcy5zdGFydERhdGUoKSB9KTtcbiAgICB0aGlzLnVwZGF0ZU1vbnRoc0luVmlldygpO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRTdGFydERhdGVJblRpbWVQaWNrZXIoKSB7XG4gICAgaWYgKCF0aGlzLmhhc1RpbWVQaWNrZXIoKSB8fCAhdGhpcy50aW1lUGlja2VySW5jcmVtZW50KCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnN0YXJ0RGF0ZS51cGRhdGUoKGN1cnJlbnQpID0+IHtcbiAgICAgIGlmICghY3VycmVudCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBjdXJyZW50Lm1pbnV0ZShNYXRoLnJvdW5kKGN1cnJlbnQubWludXRlKCkgLyB0aGlzLnRpbWVQaWNrZXJJbmNyZW1lbnQoKSkgKiB0aGlzLnRpbWVQaWNrZXJJbmNyZW1lbnQoKSk7XG5cbiAgICAgIHJldHVybiBjdXJyZW50O1xuICAgIH0pO1xuICB9XG4gIHByaXZhdGUgc2V0RW5kRGF0ZShlbmREYXRlOiBkYXlqcy5EYXlqcyB8IHN0cmluZyB8IHVuZGVmaW5lZCkge1xuICAgIGlmICh0eXBlb2YgZW5kRGF0ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHRoaXMuZW5kRGF0ZS5zZXQoZGF5anMoZW5kRGF0ZSwgdGhpcy5kYXRlT3B0aW9ucygpLmZvcm1hdCkpO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIGVuZERhdGUgPT09ICdvYmplY3QnKSB7XG4gICAgICB0aGlzLnBpY2tpbmdEYXRlLnNldChmYWxzZSk7XG4gICAgICB0aGlzLmVuZERhdGUuc2V0KGRheWpzKGVuZERhdGUpKTtcbiAgICB9XG4gICAgaWYgKCF0aGlzLmVuZERhdGUoKSB8fCAhdGhpcy5zdGFydERhdGUoKSkge1xuICAgICAgcmV0dXJuIHRoaXMudXBkYXRlTW9udGhzSW5WaWV3KCk7XG4gICAgfVxuICAgIGlmICghdGhpcy5oYXNUaW1lUGlja2VyKCkpIHtcbiAgICAgIHRoaXMucGlja2luZ0RhdGUuc2V0KGZhbHNlKTtcbiAgICAgIHRoaXMuZW5kRGF0ZS5zZXQodGhpcy5lbmREYXRlKCk/LmFkZCgxLCAnZCcpLnN0YXJ0T2YoJ2RheScpLnN1YnRyYWN0KDEsICdzZWNvbmQnKSk7XG4gICAgfVxuICAgIGlmICh0aGlzLmhhc1RpbWVQaWNrZXIoKSAmJiB0aGlzLnRpbWVQaWNrZXJJbmNyZW1lbnQoKSkge1xuICAgICAgdGhpcy5lbmREYXRlLnVwZGF0ZSgoY3VycmVudCkgPT4ge1xuICAgICAgICBpZiAoIWN1cnJlbnQpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY3VycmVudC5taW51dGUoTWF0aC5yb3VuZChjdXJyZW50Lm1pbnV0ZSgpIC8gdGhpcy50aW1lUGlja2VySW5jcmVtZW50KCkpICogdGhpcy50aW1lUGlja2VySW5jcmVtZW50KCkpO1xuXG4gICAgICAgIHJldHVybiBjdXJyZW50O1xuICAgICAgfSk7XG4gICAgfVxuICAgIGlmICh0aGlzLmVuZERhdGUoKT8uaXNCZWZvcmUodGhpcy5zdGFydERhdGUoKSkpIHtcbiAgICAgIHRoaXMuZW5kRGF0ZS5zZXQodGhpcy5zdGFydERhdGUoKT8uY2xvbmUoKSk7XG4gICAgfVxuICAgIGlmICh0aGlzLm1heERhdGUoKSAmJiB0aGlzLmVuZERhdGUoKT8uaXNBZnRlcih0aGlzLm1heERhdGUoKSkpIHtcbiAgICAgIHRoaXMuZW5kRGF0ZS5zZXQoKHRoaXMubWF4RGF0ZSgpIGFzIGRheWpzLkRheWpzKT8uY2xvbmUoKSk7XG4gICAgfVxuICAgIC8vIHRoaXMub3V0RW5kRGF0ZUNoYW5nZWQuZW1pdCh7IGVuZERhdGU6IHRoaXMuZW5kRGF0ZSgpIH0pO1xuICAgIHRoaXMudXBkYXRlTW9udGhzSW5WaWV3KCk7XG4gIH1cbiAgcHJvdGVjdGVkIGhhbmRsZXJIb3ZlckRhdGUoZXZlbnQ6IEV2ZW50LCBzaWRlOiBTaWRlRW51bSwgcm93OiBudW1iZXIsIGNvbDogbnVtYmVyKSB7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG5cbiAgICBjb25zdCBsZWZ0Q2FsRGF0ZSA9IHRoaXMuY2FsZW5kYXJWYXJpYWJsZXMoKS5sZWZ0KCkuY2FsZW5kYXI/Lltyb3ddW2NvbF07XG4gICAgY29uc3QgcmlnaHRDYWxEYXRlID0gdGhpcy5jYWxlbmRhclZhcmlhYmxlcygpLnJpZ2h0KCkuY2FsZW5kYXI/Lltyb3ddW2NvbF07XG5cbiAgICBpZiAoIXRoaXMucGlja2luZ0RhdGUgfHwgIXJpZ2h0Q2FsRGF0ZSB8fCAhbGVmdENhbERhdGUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5ub3dIb3ZlcmVkRGF0ZS5zZXQoc2lkZSA9PT0gU2lkZUVudW0ubGVmdCA/IGxlZnRDYWxEYXRlIDogcmlnaHRDYWxEYXRlKTtcbiAgICB0aGlzLnJlbmRlckNhbGVuZGFyKFNpZGVFbnVtLmxlZnQpO1xuICAgIHRoaXMucmVuZGVyQ2FsZW5kYXIoU2lkZUVudW0ucmlnaHQpO1xuICB9XG4gIHByaXZhdGUgZ2V0RGlzYWJsZSh0eXBlOiAnbGVmdCcgfCAncmlnaHQnKSB7XG4gICAgY29uc3QgbWluRGF0ZSA9IHRoaXMubWluRGF0ZSgpIGFzIGRheWpzLkRheWpzO1xuICAgIGNvbnN0IG1heERhdGUgPSB0aGlzLm1heERhdGUoKSBhcyBkYXlqcy5EYXlqcztcblxuICAgIGlmICh0eXBlID09PSAnbGVmdCcpIHtcbiAgICAgIHRoaXMuZGlzYWJsZU1vbnRoKCkubGVmdC5zZXQoW10pO1xuXG4gICAgICBpZiAobWluRGF0ZT8ueWVhcigpID09PSB0aGlzLmxpc3RLZXlGcm9tU2VsZWN0ZWQoKS55ZWFyKSB7XG4gICAgICAgIGZvciAobGV0IGkgPSAxOyBpIDwgKG1pbkRhdGU/Lm1vbnRoKCkgKyAxKTsgaSsrKSB7XG4gICAgICAgICAgdGhpcy5kaXNhYmxlTW9udGgoKS5sZWZ0LnVwZGF0ZShjdXJyZW50ID0+IHtcbiAgICAgICAgICAgIGN1cnJlbnQucHVzaChpKTtcblxuICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnQ7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChtYXhEYXRlPy55ZWFyKCkgPT09IHRoaXMubGlzdEtleUZyb21TZWxlY3RlZCgpLnllYXIpIHtcbiAgICAgICAgZm9yIChsZXQgaSA9IG1heERhdGU/Lm1vbnRoKCkgKyAyOyBpIDwgMTM7IGkrKykge1xuICAgICAgICAgIHRoaXMuZGlzYWJsZU1vbnRoKCkubGVmdC51cGRhdGUoY3VycmVudCA9PiB7XG4gICAgICAgICAgICBjdXJyZW50LnB1c2goaSk7XG5cbiAgICAgICAgICAgIHJldHVybiBjdXJyZW50O1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmRpc2FibGVNb250aCgpLnJpZ2h0LnNldChbXSk7XG4gICAgaWYgKG1pbkRhdGU/LnllYXIoKSA9PT0gdGhpcy5saXN0S2V5VG9TZWxlY3RlZCgpLnllYXIpIHtcbiAgICAgIGZvciAobGV0IGkgPSAxOyBpIDwgKG1pbkRhdGU/Lm1vbnRoKCkgKyAxKTsgaSsrKSB7XG4gICAgICAgIHRoaXMuZGlzYWJsZU1vbnRoKCkucmlnaHQudXBkYXRlKGN1cnJlbnQgPT4ge1xuICAgICAgICAgIGN1cnJlbnQucHVzaChpKTtcblxuICAgICAgICAgIHJldHVybiBjdXJyZW50O1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKG1heERhdGU/LnllYXIoKSA9PT0gdGhpcy5saXN0S2V5VG9TZWxlY3RlZCgpLnllYXIpIHtcbiAgICAgIGZvciAobGV0IGkgPSBtYXhEYXRlPy5tb250aCgpICsgMjsgaSA8IDEzOyBpKyspIHtcbiAgICAgICAgdGhpcy5kaXNhYmxlTW9udGgoKS5yaWdodC51cGRhdGUoY3VycmVudCA9PiB7XG4gICAgICAgICAgY3VycmVudC5wdXNoKGkpO1xuXG4gICAgICAgICAgcmV0dXJuIGN1cnJlbnQ7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoKE51bWJlcih0aGlzLmxpc3RLZXlGcm9tU2VsZWN0ZWQoKS55ZWFyKSA9PT0gTnVtYmVyKHRoaXMubGlzdEtleVRvU2VsZWN0ZWQoKS55ZWFyKSkpIHtcbiAgICAgIGZvciAobGV0IGkgPSAxOyBpIDw9IE51bWJlcih0aGlzLmxpc3RLZXlGcm9tU2VsZWN0ZWQoKS5tb250aCk7IGkrKykge1xuICAgICAgICB0aGlzLmRpc2FibGVNb250aCgpLnJpZ2h0LnVwZGF0ZShjdXJyZW50ID0+IHtcbiAgICAgICAgICBjdXJyZW50LnB1c2goaSk7XG5cbiAgICAgICAgICByZXR1cm4gY3VycmVudDtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIGhhbmRsZXJDbGlja1ByZXYoc2lkZTogU2lkZUVudW0pIHtcbiAgICBpZiAoc2lkZSA9PT0gU2lkZUVudW0ubGVmdCAmJiB0aGlzLmxlZnRDYWxlbmRhcigpLm1vbnRoKSB7XG4gICAgICB0aGlzLmxlZnRDYWxlbmRhci51cGRhdGUoY3VycmVudCA9PiB7XG4gICAgICAgIGN1cnJlbnQubW9udGggPSBjdXJyZW50Lm1vbnRoPy5zdWJ0cmFjdCgxLCAnbW9udGgnKTtcblxuICAgICAgICByZXR1cm4gY3VycmVudDtcbiAgICAgIH0pO1xuICAgICAgdGhpcy5saXN0S2V5RnJvbVNlbGVjdGVkLnVwZGF0ZShjdXJyZW50ID0+IHtcbiAgICAgICAgY3VycmVudC5tb250aCA9ICh0aGlzLmxlZnRDYWxlbmRhcigpLm1vbnRoPy5tb250aCgpID8/IDApICsgMTtcbiAgICAgICAgY3VycmVudC55ZWFyID0gdGhpcy5sZWZ0Q2FsZW5kYXIoKS5tb250aD8ueWVhcigpO1xuXG4gICAgICAgIHJldHVybiBjdXJyZW50O1xuICAgICAgfSk7XG5cbiAgICAgIHJldHVybiB0aGlzLnVwZGF0ZUNhbGVuZGFycygpO1xuICAgIH1cbiAgICB0aGlzLnJpZ2h0Q2FsZW5kYXIudXBkYXRlKGN1cnJlbnQgPT4ge1xuICAgICAgY3VycmVudC5tb250aCA9IGN1cnJlbnQubW9udGg/LnN1YnRyYWN0KDEsICdtb250aCcpO1xuXG4gICAgICByZXR1cm4gY3VycmVudDtcbiAgICB9KTtcbiAgICB0aGlzLmxpc3RLZXlUb1NlbGVjdGVkLnVwZGF0ZShjdXJyZW50ID0+IHtcbiAgICAgIGN1cnJlbnQubW9udGggPSAodGhpcy5yaWdodENhbGVuZGFyKCkubW9udGg/Lm1vbnRoKCkgPz8gMCkgKyAxO1xuICAgICAgY3VycmVudC55ZWFyID0gdGhpcy5yaWdodENhbGVuZGFyKCkubW9udGg/LnllYXIoKTtcblxuICAgICAgcmV0dXJuIGN1cnJlbnQ7XG4gICAgfSk7XG4gICAgdGhpcy5nZXREaXNhYmxlKCdyaWdodCcpO1xuICAgIHRoaXMudXBkYXRlQ2FsZW5kYXJzKCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgaGFuZGxlckNsaWNrTmV4dChzaWRlOiBTaWRlRW51bSkge1xuICAgIGlmIChzaWRlID09PSBTaWRlRW51bS5sZWZ0KSB7XG4gICAgICB0aGlzLmxlZnRDYWxlbmRhci51cGRhdGUoY3VycmVudCA9PiB7XG4gICAgICAgIGN1cnJlbnQubW9udGggPSBjdXJyZW50Lm1vbnRoPy5hZGQoMSwgJ21vbnRoJyk7XG5cbiAgICAgICAgcmV0dXJuIGN1cnJlbnQ7XG4gICAgICB9KTtcbiAgICAgIHRoaXMubGlzdEtleUZyb21TZWxlY3RlZC51cGRhdGUoY3VycmVudCA9PiB7XG4gICAgICAgIGN1cnJlbnQubW9udGggPSAodGhpcy5sZWZ0Q2FsZW5kYXIoKS5tb250aD8ubW9udGgoKSA/PyAwKSArIDE7XG4gICAgICAgIGN1cnJlbnQueWVhciA9IHRoaXMubGVmdENhbGVuZGFyKCkubW9udGg/LnllYXIoKTtcblxuICAgICAgICByZXR1cm4gY3VycmVudDtcbiAgICAgIH0pO1xuXG4gICAgICBpZiAoKHRoaXMubGlzdEtleUZyb21TZWxlY3RlZCgpLm1vbnRoID09PSB0aGlzLmxpc3RLZXlUb1NlbGVjdGVkKCkubW9udGgpICYmICh0aGlzLmxpc3RLZXlGcm9tU2VsZWN0ZWQoKS55ZWFyID09PSB0aGlzLmxpc3RLZXlUb1NlbGVjdGVkKCkueWVhcikpIHtcbiAgICAgICAgdGhpcy5yaWdodENhbGVuZGFyLnVwZGF0ZShjdXJyZW50ID0+IHtcbiAgICAgICAgICBjdXJyZW50Lm1vbnRoID0gY3VycmVudC5tb250aD8uYWRkKDEsICdtb250aCcpO1xuXG4gICAgICAgICAgcmV0dXJuIGN1cnJlbnQ7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmxpc3RLZXlUb1NlbGVjdGVkLnVwZGF0ZShjdXJyZW50ID0+IHtcbiAgICAgICAgICBjdXJyZW50Lm1vbnRoID0gKHRoaXMucmlnaHRDYWxlbmRhcigpLm1vbnRoPy5tb250aCgpID8/IDApICsgMTtcbiAgICAgICAgICBjdXJyZW50LnllYXIgPSB0aGlzLnJpZ2h0Q2FsZW5kYXIoKS5tb250aD8ueWVhcigpO1xuXG4gICAgICAgICAgcmV0dXJuIGN1cnJlbnQ7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgdGhpcy5nZXREaXNhYmxlKCdyaWdodCcpO1xuXG4gICAgICByZXR1cm4gdGhpcy51cGRhdGVDYWxlbmRhcnMoKTtcbiAgICB9XG4gICAgdGhpcy5yaWdodENhbGVuZGFyLnVwZGF0ZShjdXJyZW50ID0+IHtcbiAgICAgIGN1cnJlbnQubW9udGggPSBjdXJyZW50Lm1vbnRoPy5hZGQoMSwgJ21vbnRoJyk7XG5cbiAgICAgIHJldHVybiBjdXJyZW50O1xuICAgIH0pO1xuICAgIHRoaXMubGlzdEtleVRvU2VsZWN0ZWQudXBkYXRlKGN1cnJlbnQgPT4ge1xuICAgICAgY3VycmVudC5tb250aCA9ICh0aGlzLnJpZ2h0Q2FsZW5kYXIoKS5tb250aD8ubW9udGgoKSA/PyAwKSArIDE7XG4gICAgICBjdXJyZW50LnllYXIgPSB0aGlzLnJpZ2h0Q2FsZW5kYXIoKS5tb250aD8ueWVhcigpO1xuXG4gICAgICByZXR1cm4gY3VycmVudDtcbiAgICB9KTtcbiAgICB0aGlzLnVwZGF0ZUNhbGVuZGFycygpO1xuICB9XG4gIHByb3RlY3RlZCBoYW5kbGVyUGlja2VyRGF0ZShldmVudDogYW55LCBzaWRlOiBTaWRlRW51bSwgcm93OiBudW1iZXIsIGNvbDogbnVtYmVyKSB7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG5cbiAgICBpZiAoZXZlbnQudGFyZ2V0Py50YWdOYW1lID09PSAnVEQnKSB7XG4gICAgICBpZiAoZXZlbnQudGFyZ2V0LmNsYXNzTGlzdCAmJiAhZXZlbnQudGFyZ2V0LmNsYXNzTGlzdC5jb250YWlucygnYXZhaWxhYmxlJykpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoZXZlbnQudGFyZ2V0LnRhZ05hbWUgPT09ICdTUEFOJykge1xuICAgICAgaWYgKGV2ZW50LnRhcmdldC5wYXJlbnRFbGVtZW50ICYmIGV2ZW50LnRhcmdldC5wYXJlbnRFbGVtZW50LmNsYXNzTGlzdCAmJiAhZXZlbnQudGFyZ2V0LnBhcmVudEVsZW1lbnQuY2xhc3NMaXN0LmNvbnRhaW5zKCdhdmFpbGFibGUnKSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfVxuICAgIGlmICghdGhpcy5kYXRlT3B0aW9ucygpLmN1c3RvbVJhbmdlTGFiZWwpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKHRoaXMucXVpY2tSYW5nZXNBcnJheSgpLmxlbmd0aCkge1xuICAgICAgdGhpcy5zZWxlY3RlZFF1aWNrUmFuZ2Uuc2V0KHRoaXMuZGF0ZU9wdGlvbnMoKS5jdXN0b21SYW5nZUxhYmVsKTtcbiAgICB9XG4gICAgY29uc3QgZGF0ZSA9IHNpZGUgPT09IFNpZGVFbnVtLmxlZnQgPyB0aGlzLmxlZnRDYWxlbmRhcigpLmNhbGVuZGFyPy5bcm93XVtjb2xdIDogdGhpcy5yaWdodENhbGVuZGFyKCkuY2FsZW5kYXI/Lltyb3ddW2NvbF07XG5cbiAgICBpZiAoIWRhdGUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5zcGxpdFBpY2tlckRhdGUudXBkYXRlKGN1cnJlbnQgPT4ge1xuICAgICAgY3VycmVudFtzaWRlID09PSBTaWRlRW51bS5sZWZ0ID8gJ3N0YXJ0JyA6ICdlbmQnXS51cGRhdGUoc2lkZUN1cnJlbnQgPT4ge1xuICAgICAgICBzaWRlQ3VycmVudC5kYXkgPSBkYXRlLmRhdGUoKTtcblxuICAgICAgICByZXR1cm4gc2lkZUN1cnJlbnQ7XG4gICAgICB9KTtcblxuICAgICAgcmV0dXJuIGN1cnJlbnQ7XG4gICAgfSk7XG4gICAgdGhpcy51cGRhdGVTdGFydEVuZERhdGUoZGF0ZSk7XG5cbiAgICBpZiAodGhpcy5pc1NpbmdsZSgpICYmIHRoaXMuc3RhcnREYXRlKCkpIHtcbiAgICAgIHRoaXMuc2V0RW5kRGF0ZSh0aGlzLnN0YXJ0RGF0ZSgpKTtcbiAgICAgIHRoaXMudXBkYXRlRWxlbWVudCgpO1xuXG4gICAgICBpZiAodGhpcy5hdXRvQXBwbHkoKSkge1xuICAgICAgICB0aGlzLmhhbmRsZXJDbGlja0FwcGx5KCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy51cGRhdGVWaWV3KCk7XG4gICAgaWYgKHRoaXMuYXV0b0FwcGx5KCkgJiYgdGhpcy5zdGFydERhdGUoKSAmJiB0aGlzLmVuZERhdGUoKSkge1xuICAgICAgdGhpcy5oYW5kbGVyQ2xpY2tBcHBseSgpO1xuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBoYW5kbGVyQ2xpY2tBcHBseShldmVudD86IEV2ZW50KSB7XG4gICAgZXZlbnQ/LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIC8vIHRoaXMudmFsaWRhdGUoKTtcbiAgICAvLyBpZiAoIXRoaXMudmFsaWRhdGUoKSkge1xuICAgIC8vICAgcmV0dXJuO1xuICAgIC8vIH1cbiAgICBpZiAodGhpcy5oYXNUaW1lUGlja2VyKCkpIHtcbiAgICAgIHRoaXMuc2V0VGltZUlucHV0KFNpZGVFbnVtLmxlZnQpO1xuICAgICAgdGhpcy5zZXRUaW1lSW5wdXQoU2lkZUVudW0ucmlnaHQpO1xuICAgIH1cbiAgICB0aGlzLmNhbGN1bGF0ZVNlbGVjdGVkTGFiZWwoKTtcblxuICAgIGlmICh0aGlzLnNlbGVjdGVkTGFiZWwoKSkge1xuICAgICAgdGhpcy5vdXRQaWNrZXJEYXRlLmVtaXQoeyBkaXNwbGF5TGFiZWw6IHRoaXMuc2VsZWN0ZWRMYWJlbCgpLCBzdGFydERhdGU6IHRoaXMuc3RhcnREYXRlKCksIGVuZERhdGU6IHRoaXMuZW5kRGF0ZSgpLCBkZXRhaWxEYXRlUGlja2VyOiB0aGlzLnNwbGl0UGlja2VyRGF0ZSgpIH0pO1xuICAgIH1cbiAgfVxuICBwcm90ZWN0ZWQgaGFuZGxlckNsaWNrQ2FuY2VsKGV2ZW50OiBFdmVudCkge1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIHRoaXMuc3RhcnREYXRlLnNldChkYXlqcygwKSk7XG4gICAgdGhpcy5lbmREYXRlLnNldChkYXlqcygwKSk7XG4gICAgdGhpcy5vdXRDYW5jZWwuZW1pdCgnJyk7XG4gIH1cblxuICBwcm90ZWN0ZWQgaGFuZGxlckZ1bmN0aW9uQ29udHJvbChldmVudDogSURyb3Bkb3duRnVuY3Rpb25Db250cm9sRXZlbnQgfCBJSW5wdXRGdW5jdGlvbkNvbnRyb2xFdmVudCwgdHlwZTogc3RyaW5nKSB7XG4gICAgdGhpcy5mdW5jdGlvbkNvbnRyb2xzLnNldCh0eXBlLCBldmVudCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgaGFuZGxlclNlbGVjdGVkRHJvcGRvd24oZXZlbnQ6IElFbWl0U2VsZWN0S2V5IHwgdW5kZWZpbmVkLCB0eXBlOiBzdHJpbmcpIHtcbiAgICB0aGlzLm91dENoYW5nU3RhZ2VGbGFnTW91c2UuZW1pdCh7XG4gICAgICBpc01vdXNlRW50ZXI6IGZhbHNlLFxuICAgICAgaXNNb3VzZUVudGVyQ29udGVudDogZmFsc2UsXG4gICAgICBpc0NvbnRhaW5lckhhc1Njcm9sbDogZmFsc2VcbiAgICB9KTtcbiAgICBpZiAoIWV2ZW50KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgY2FzZSBgJHtTaWRlRW51bS5sZWZ0fW1vbnRoYDpcbiAgICAgIGNhc2UgYCR7U2lkZUVudW0ucmlnaHR9bW9udGhgOlxuICAgICAgICB0aGlzLnVwZGF0ZU1vbnRoU2VsZWN0KGV2ZW50LCB0eXBlKTtcblxuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSBgJHtTaWRlRW51bS5sZWZ0fXllYXJgOlxuICAgICAgY2FzZSBgJHtTaWRlRW51bS5yaWdodH15ZWFyYDpcbiAgICAgICAgdGhpcy51cGRhdGVZZWFyU2VsZWN0KGV2ZW50LCB0eXBlKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIHRoaXMuc3BsaXRQaWNrZXJEYXRlLnVwZGF0ZShjdXJyZW50ID0+IHtcbiAgICAgIGlmICh0eXBlID09PSBgJHtTaWRlRW51bS5sZWZ0fW1vbnRoYCB8fCB0eXBlID09PSBgJHtTaWRlRW51bS5sZWZ0fXllYXJgKSB7XG4gICAgICAgIGN1cnJlbnQuc3RhcnQudXBkYXRlKHN0YXJ0ID0+IHtcbiAgICAgICAgICBpZiAodHlwZSA9PT0gYCR7U2lkZUVudW0ubGVmdH1tb250aGApIHtcbiAgICAgICAgICAgIHN0YXJ0Lm1vbnRoID0gZXZlbnQua2V5IGFzIG51bWJlcjtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHR5cGUgPT09IGAke1NpZGVFbnVtLmxlZnR9eWVhcmApIHtcbiAgICAgICAgICAgIHN0YXJ0LnllYXIgPSBldmVudC5rZXkgYXMgbnVtYmVyO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiBzdGFydDtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIGN1cnJlbnQ7XG4gICAgICB9XG5cbiAgICAgIGN1cnJlbnQuZW5kLnVwZGF0ZShlbmQgPT4ge1xuICAgICAgICBpZiAodHlwZSA9PT0gYCR7U2lkZUVudW0ucmlnaHR9bW9udGhgKSB7XG4gICAgICAgICAgZW5kLm1vbnRoID0gZXZlbnQua2V5IGFzIG51bWJlcjtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZSA9PT0gYCR7U2lkZUVudW0ucmlnaHR9eWVhcmApIHtcbiAgICAgICAgICBlbmQueWVhciA9IGV2ZW50LmtleSBhcyBudW1iZXI7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZW5kO1xuICAgICAgfSk7XG5cbiAgICAgIHJldHVybiBjdXJyZW50O1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVNb250aFNlbGVjdChldmVudDogSUVtaXRTZWxlY3RLZXksIHR5cGU6IHN0cmluZykge1xuICAgIGNvbnN0IHNpZGUgPSB0eXBlLmluY2x1ZGVzKFNpZGVFbnVtLmxlZnQpID8gU2lkZUVudW0ubGVmdCA6IFNpZGVFbnVtLnJpZ2h0O1xuICAgIGNvbnN0IHllYXIgPSB0aGlzLmNhbGVuZGFyVmFyaWFibGVzKClbc2lkZV0oKS5kcm9wZG93bnM/LigpPy5jdXJyZW50WWVhciB8fCBkYXlqcygpLnllYXIoKTtcbiAgICBjb25zdCBtb250aCA9IE51bWJlcihldmVudC5rZXkpIC0gMTtcblxuICAgIGlmIChzaWRlID09PSBTaWRlRW51bS5sZWZ0KSB7XG4gICAgICBpZiAodGhpcy5pc1NlbGVjdGVkRGF0YSgpLmxlZnRtb250aCkge1xuICAgICAgICB0aGlzLmlzU2VsZWN0ZWREYXRhLnVwZGF0ZShjdXJyZW50ID0+IHtcbiAgICAgICAgICBjdXJyZW50LmxlZnRtb250aCA9IGZhbHNlO1xuXG4gICAgICAgICAgcmV0dXJuIGN1cnJlbnQ7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmdldERpc2FibGUoJ3JpZ2h0Jyk7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdGhpcy5saXN0S2V5RnJvbVNlbGVjdGVkLnVwZGF0ZShjdXJyZW50ID0+IHtcbiAgICAgICAgY3VycmVudC5tb250aCA9IGV2ZW50LmtleTtcblxuICAgICAgICByZXR1cm4gY3VycmVudDtcbiAgICAgIH0pO1xuICAgICAgaWYgKE51bWJlcihldmVudC5rZXkpID49IE51bWJlcih0aGlzLmxpc3RLZXlGcm9tU2VsZWN0ZWQoKS5tb250aCkgJiYgKE51bWJlcih0aGlzLmxpc3RLZXlGcm9tU2VsZWN0ZWQoKS55ZWFyKSA9PT0gTnVtYmVyKHRoaXMubGlzdEtleVRvU2VsZWN0ZWQoKS55ZWFyKSkpIHtcbiAgICAgICAgaWYgKE51bWJlcihldmVudC5rZXkpIDw9IDExKSB7XG4gICAgICAgICAgdGhpcy5saXN0S2V5VG9TZWxlY3RlZC51cGRhdGUoY3VycmVudCA9PiB7XG4gICAgICAgICAgICBjdXJyZW50Lm1vbnRoID0gTnVtYmVyKGV2ZW50LmtleSkgKyAxO1xuXG4gICAgICAgICAgICByZXR1cm4gY3VycmVudDtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoTnVtYmVyKGV2ZW50LmtleSkgPT09IDEyKSB7XG4gICAgICAgICAgdGhpcy5saXN0S2V5VG9TZWxlY3RlZC51cGRhdGUoY3VycmVudCA9PiB7XG4gICAgICAgICAgICBjdXJyZW50Lm1vbnRoID0gMTtcbiAgICAgICAgICAgIGN1cnJlbnQueWVhciArPSAxO1xuXG4gICAgICAgICAgICByZXR1cm4gY3VycmVudDtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChzaWRlID09PSBTaWRlRW51bS5yaWdodCkge1xuICAgICAgaWYgKHRoaXMuaXNTZWxlY3RlZERhdGEoKS5yaWdodG1vbnRoKSB7XG4gICAgICAgIHRoaXMuaXNTZWxlY3RlZERhdGEudXBkYXRlKGN1cnJlbnQgPT4ge1xuICAgICAgICAgIGN1cnJlbnQucmlnaHRtb250aCA9IGZhbHNlO1xuXG4gICAgICAgICAgcmV0dXJuIGN1cnJlbnQ7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmdldERpc2FibGUoJ3JpZ2h0Jyk7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdGhpcy5saXN0S2V5VG9TZWxlY3RlZC51cGRhdGUoY3VycmVudCA9PiB7XG4gICAgICAgIGN1cnJlbnQubW9udGggPSBldmVudC5rZXk7XG5cbiAgICAgICAgcmV0dXJuIGN1cnJlbnQ7XG4gICAgICB9KTtcbiAgICB9XG4gICAgKHRoaXMuZnVuY3Rpb25Db250cm9scy5nZXQodHlwZSkgYXMgSURyb3Bkb3duRnVuY3Rpb25Db250cm9sRXZlbnQpPy5yZW1vdmVMaXN0KCk7XG5cbiAgICB0aGlzLmdldERpc2FibGUoJ3JpZ2h0Jyk7XG4gICAgdGhpcy5tb250aE9yWWVhckNoYW5nZWQobW9udGgsIHllYXIsIHNpZGUpO1xuICB9XG4gIHByaXZhdGUgdXBkYXRlWWVhclNlbGVjdChldmVudDogSUVtaXRTZWxlY3RLZXksIHR5cGU6IHN0cmluZykge1xuICAgIGNvbnN0IHNpZGUgPSB0eXBlLmluY2x1ZGVzKFNpZGVFbnVtLmxlZnQpID8gU2lkZUVudW0ubGVmdCA6IFNpZGVFbnVtLnJpZ2h0O1xuXG4gICAgaWYgKHNpZGUgPT09IFNpZGVFbnVtLmxlZnQpIHtcbiAgICAgIGlmICh0aGlzLmlzU2VsZWN0ZWREYXRhKCk/LmxlZnR5ZWFyKSB7XG4gICAgICAgIHRoaXMuaXNTZWxlY3RlZERhdGEudXBkYXRlKGN1cnJlbnQgPT4ge1xuICAgICAgICAgIGN1cnJlbnQubGVmdHllYXIgPSBmYWxzZTtcblxuICAgICAgICAgIHJldHVybiBjdXJyZW50O1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5nZXREaXNhYmxlKCdsZWZ0Jyk7XG4gICAgICAgIC8vIHRoaXMuU2V0TGlzdFllYXJSaWdodCh0aGlzLmxpc3RWaWV3S2V5U2VsZWN0ZWRZZWFyIGFzIG51bWJlcik7XG4gICAgICAgICh0aGlzLmZ1bmN0aW9uQ29udHJvbHMuZ2V0KHR5cGUpIGFzIElEcm9wZG93bkZ1bmN0aW9uQ29udHJvbEV2ZW50KT8ucmVtb3ZlTGlzdCgpO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHRoaXMubGlzdEtleUZyb21TZWxlY3RlZC51cGRhdGUoY3VycmVudCA9PiB7XG4gICAgICAgIGN1cnJlbnQueWVhciA9IGV2ZW50LmtleTtcbiAgICAgICAgcmV0dXJuIGN1cnJlbnQ7XG4gICAgICB9KTtcbiAgICAgIGlmICh0aGlzLmxpc3RLZXlGcm9tU2VsZWN0ZWQoKS55ZWFyICYmIHRoaXMubGlzdEtleVRvU2VsZWN0ZWQoKS55ZWFyICYmICh0aGlzLmxpc3RLZXlGcm9tU2VsZWN0ZWQoKS55ZWFyID49IHRoaXMubGlzdEtleVRvU2VsZWN0ZWQoKS55ZWFyKSkge1xuICAgICAgICB0aGlzLmxpc3RLZXlUb1NlbGVjdGVkLnVwZGF0ZShjdXJyZW50ID0+IHtcbiAgICAgICAgICBjdXJyZW50LnllYXIgPSBldmVudC5rZXk7XG4gICAgICAgICAgcmV0dXJuIGN1cnJlbnQ7XG4gICAgICAgIH0pO1xuICAgICAgICBpZiAodGhpcy5saXN0S2V5RnJvbVNlbGVjdGVkKCkubW9udGggJiYgTnVtYmVyKHRoaXMubGlzdEtleUZyb21TZWxlY3RlZCgpLm1vbnRoKSA8PSAxMSkge1xuICAgICAgICAgIHRoaXMubGlzdEtleVRvU2VsZWN0ZWQudXBkYXRlKGN1cnJlbnQgPT4ge1xuICAgICAgICAgICAgY3VycmVudC5tb250aCA9IE51bWJlcih0aGlzLmxpc3RLZXlGcm9tU2VsZWN0ZWQoKS5tb250aCkgKyAxO1xuICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnQ7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMubGlzdEtleUZyb21TZWxlY3RlZCgpLm1vbnRoICYmIHRoaXMubGlzdEtleUZyb21TZWxlY3RlZCgpLm1vbnRoID09PSAxMikge1xuICAgICAgICAgIHRoaXMubGlzdEtleVRvU2VsZWN0ZWQudXBkYXRlKGN1cnJlbnQgPT4ge1xuICAgICAgICAgICAgY3VycmVudC5tb250aCA9IE51bWJlcih0aGlzLmxpc3RLZXlGcm9tU2VsZWN0ZWQoKS5tb250aCk7XG4gICAgICAgICAgICByZXR1cm4gY3VycmVudDtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgdGhpcy5nZXREaXNhYmxlKCdsZWZ0Jyk7XG4gICAgICB0aGlzLmJ1aWxkQ29uZmlnWWVhcihTaWRlRW51bS5yaWdodCwgdGhpcy5saXN0S2V5RnJvbVNlbGVjdGVkKCkueWVhciBhcyBudW1iZXIpO1xuICAgICAgKHRoaXMuZnVuY3Rpb25Db250cm9scy5nZXQodHlwZSkgYXMgSURyb3Bkb3duRnVuY3Rpb25Db250cm9sRXZlbnQpPy5yZW1vdmVMaXN0KCk7XG4gICAgfVxuICAgIGlmIChzaWRlID09PSBTaWRlRW51bS5yaWdodCkge1xuICAgICAgaWYgKHRoaXMuaXNTZWxlY3RlZERhdGEoKS5yaWdodHllYXIpIHtcbiAgICAgICAgdGhpcy5pc1NlbGVjdGVkRGF0YS51cGRhdGUoY3VycmVudCA9PiB7XG4gICAgICAgICAgY3VycmVudC5yaWdodHllYXIgPSBmYWxzZTtcblxuICAgICAgICAgIHJldHVybiBjdXJyZW50O1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5nZXREaXNhYmxlKCdyaWdodCcpO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHRoaXMubGlzdEtleVRvU2VsZWN0ZWQudXBkYXRlKGN1cnJlbnQgPT4ge1xuICAgICAgICBjdXJyZW50LnllYXIgPSBldmVudC5rZXk7XG5cbiAgICAgICAgcmV0dXJuIGN1cnJlbnQ7XG4gICAgICB9KTtcbiAgICAgIGlmICh0aGlzLmxpc3RLZXlGcm9tU2VsZWN0ZWQoKS55ZWFyICYmIHRoaXMubGlzdEtleVRvU2VsZWN0ZWQoKS55ZWFyICYmICh0aGlzLmxpc3RLZXlGcm9tU2VsZWN0ZWQoKS55ZWFyID49IHRoaXMubGlzdEtleVRvU2VsZWN0ZWQoKS55ZWFyKSkge1xuICAgICAgICBpZiAodGhpcy5saXN0S2V5RnJvbVNlbGVjdGVkKCkubW9udGggJiYgTnVtYmVyKHRoaXMubGlzdEtleUZyb21TZWxlY3RlZCgpLm1vbnRoKSA8PSAxMSkge1xuICAgICAgICAgIHRoaXMubGlzdEtleVRvU2VsZWN0ZWQudXBkYXRlKGN1cnJlbnQgPT4ge1xuICAgICAgICAgICAgY3VycmVudC5tb250aCA9IE51bWJlcih0aGlzLmxpc3RLZXlGcm9tU2VsZWN0ZWQoKS5tb250aCkgKyAxO1xuXG4gICAgICAgICAgICByZXR1cm4gY3VycmVudDtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5saXN0S2V5RnJvbVNlbGVjdGVkKCkubW9udGggJiYgdGhpcy5saXN0S2V5RnJvbVNlbGVjdGVkKCkubW9udGggPT09IDEyKSB7XG4gICAgICAgICAgdGhpcy5saXN0S2V5VG9TZWxlY3RlZC51cGRhdGUoY3VycmVudCA9PiB7XG4gICAgICAgICAgICBjdXJyZW50Lm1vbnRoID0gTnVtYmVyKHRoaXMubGlzdEtleUZyb21TZWxlY3RlZCgpLm1vbnRoKTtcblxuICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnQ7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5nZXREaXNhYmxlKCdyaWdodCcpO1xuICAgIGxldCBtb250aCA9IGRheWpzKCkubW9udGgoKTtcblxuICAgIGlmIChzaWRlID09PSBTaWRlRW51bS5yaWdodCAmJiB0aGlzLmxpc3RLZXlGcm9tU2VsZWN0ZWQoKS5tb250aCkge1xuICAgICAgbW9udGggPSBOdW1iZXIodGhpcy5saXN0S2V5RnJvbVNlbGVjdGVkKCkubW9udGgpIC0gMTtcbiAgICB9XG4gICAgaWYgKHNpZGUgPT09IFNpZGVFbnVtLmxlZnQgJiYgdGhpcy5saXN0S2V5RnJvbVNlbGVjdGVkKCkubW9udGgpIHtcbiAgICAgIG1vbnRoID0gTnVtYmVyKHRoaXMubGlzdEtleUZyb21TZWxlY3RlZCgpLm1vbnRoKSAtIDE7XG4gICAgfVxuICAgIGNvbnN0IHllYXIgPSBOdW1iZXIoZXZlbnQua2V5KTtcblxuICAgIHRoaXMubW9udGhPclllYXJDaGFuZ2VkKG1vbnRoLCB5ZWFyLCBzaWRlKTtcblxuICB9XG4gIHByaXZhdGUgbW9udGhPclllYXJDaGFuZ2VkKG1vbnRoOiBudW1iZXIsIHllYXI6IG51bWJlciwgc2lkZTogU2lkZUVudW0pIHtcbiAgICBjb25zdCBpc0xlZnQgPSBzaWRlID09PSBTaWRlRW51bS5sZWZ0O1xuICAgIGNvbnN0IG1pbkRhdGUgPSB0aGlzLm1pbkRhdGUoKSBhcyBkYXlqcy5EYXlqcztcbiAgICBjb25zdCBtYXhEYXRlID0gdGhpcy5tYXhEYXRlKCkgYXMgZGF5anMuRGF5anM7XG5cbiAgICBpZiAobWluRGF0ZSAmJiAoeWVhciA8IG1pbkRhdGU/LnllYXIoKSB8fCAoeWVhciA9PT0gbWluRGF0ZT8ueWVhcigpICYmIG1vbnRoIDwgbWluRGF0ZT8ubW9udGgoKSkpKSB7XG4gICAgICBtb250aCA9IG1pbkRhdGU/Lm1vbnRoKCk7XG4gICAgICB5ZWFyID0gbWluRGF0ZT8ueWVhcigpO1xuICAgIH1cblxuICAgIGlmIChtYXhEYXRlICYmICh5ZWFyID4gbWF4RGF0ZT8ueWVhcigpIHx8ICh5ZWFyID09PSBtYXhEYXRlPy55ZWFyKCkgJiYgbW9udGggPiBtYXhEYXRlPy5tb250aCgpKSkpIHtcbiAgICAgIG1vbnRoID0gbWF4RGF0ZT8ubW9udGgoKTtcbiAgICAgIHllYXIgPSBtYXhEYXRlPy55ZWFyKCk7XG4gICAgfVxuXG4gICAgY29uc3QgZHJvcGRvd25zID0gdGhpcy5jYWxlbmRhclZhcmlhYmxlcygpW3NpZGVdKCkuZHJvcGRvd25zO1xuXG4gICAgaWYgKGRyb3Bkb3ducz8uKCkpIHtcbiAgICAgIGRyb3Bkb3ducy51cGRhdGUoY3VycmVudCA9PiB7XG4gICAgICAgIGN1cnJlbnQuY3VycmVudFllYXIgPSB5ZWFyO1xuICAgICAgICBjdXJyZW50LmN1cnJlbnRNb250aCA9IG1vbnRoO1xuXG4gICAgICAgIHJldHVybiBjdXJyZW50O1xuICAgICAgfSlcblxuICAgIH1cbiAgICBpZiAoaXNMZWZ0ICYmIHRoaXMubGVmdENhbGVuZGFyKCkubW9udGgpIHtcbiAgICAgIHRoaXMubGVmdENhbGVuZGFyLnVwZGF0ZShjdXJyZW50ID0+IHtcbiAgICAgICAgY3VycmVudC5tb250aCA9IGN1cnJlbnQubW9udGg/Lm1vbnRoKG1vbnRoKS55ZWFyKHllYXIpO1xuICAgICAgICByZXR1cm4gY3VycmVudDtcbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm4gdGhpcy51cGRhdGVDYWxlbmRhcnMoKTtcbiAgICB9XG5cbiAgICBpZiAobW9udGggPT09IDEyKSB7XG4gICAgICB0aGlzLnJpZ2h0Q2FsZW5kYXIudXBkYXRlKGN1cnJlbnQgPT4ge1xuICAgICAgICBjdXJyZW50Lm1vbnRoID0gY3VycmVudC5tb250aD8uY2xvbmUoKS5hZGQoMSwgJ21vbnRoJyk7XG4gICAgICAgIHJldHVybiBjdXJyZW50O1xuICAgICAgfSk7XG5cbiAgICAgIHJldHVybiB0aGlzLnVwZGF0ZUNhbGVuZGFycygpO1xuICAgIH1cbiAgICB0aGlzLnJpZ2h0Q2FsZW5kYXIudXBkYXRlKGN1cnJlbnQgPT4ge1xuICAgICAgY3VycmVudC5tb250aCA9IGN1cnJlbnQubW9udGg/Lm1vbnRoKG1vbnRoKS55ZWFyKHllYXIpO1xuICAgICAgcmV0dXJuIGN1cnJlbnQ7XG4gICAgfSk7XG4gICAgdGhpcy51cGRhdGVDYWxlbmRhcnMoKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBoYW5kbGVySW5wdXRFdmVudChldmVudDogSUV2ZW50LCB0eXBlOiBgbGVmdGhvdXJgIHwgYGxlZnRtaW51dGVgIHwgYHJpZ2h0aG91cmAgfCBgcmlnaHRtaW51dGVgKSB7XG4gICAgaWYgKGV2ZW50LmtleUNvZGUgIT09IDgpIHtcbiAgICAgIGV2ZW50LmtleUNvZGUgJiYgdGhpcy5jaGVja0JhY2tzcGFjZUZvY3VzLnVwZGF0ZShjdXJyZW50ID0+IHtcbiAgICAgICAgY3VycmVudFt0eXBlXS5zZXQoMSk7XG5cbiAgICAgICAgcmV0dXJuIGN1cnJlbnQ7XG4gICAgICB9KTtcblxuICAgICAgdGhpcy5rZXlDb2RlQmFja3NwYWNlLnNldChmYWxzZSk7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmtleUNvZGVCYWNrc3BhY2Uuc2V0KHRydWUpO1xuXG4gICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICBjYXNlICdsZWZ0bWludXRlJzpcbiAgICAgICAgaWYgKGlzRW1wdHkodGhpcy50aW1lcGlja2VyVmFsdWVJdGVtKCkubGVmdG1pbnV0ZSgpKSkge1xuICAgICAgICAgIGlmICh0aGlzLmNoZWNrQmFja3NwYWNlRm9jdXMoKVt0eXBlXSgpID09PSAxKSB7XG4gICAgICAgICAgICB0aGlzLmNoZWNrQmFja3NwYWNlRm9jdXMudXBkYXRlKGN1cnJlbnQgPT4ge1xuICAgICAgICAgICAgICBjdXJyZW50W3R5cGVdLnNldChjdXJyZW50W3R5cGVdKCkgKyAxKTtcblxuICAgICAgICAgICAgICByZXR1cm4gY3VycmVudDtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMuY2hlY2tCYWNrc3BhY2VGb2N1cy51cGRhdGUoY3VycmVudCA9PiB7XG4gICAgICAgICAgICBjdXJyZW50W3R5cGVdLnNldCgxKTtcblxuICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnQ7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgKHRoaXMuZnVuY3Rpb25Db250cm9scy5nZXQoYCR7U2lkZUVudW0ubGVmdH1ob3VyYCkgYXMgSUlucHV0RnVuY3Rpb25Db250cm9sRXZlbnQpPy5mb2N1cygpO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlICdyaWdodG1pbnV0ZSc6XG4gICAgICAgIGlmIChpc0VtcHR5KHRoaXMudGltZXBpY2tlclZhbHVlSXRlbSgpLnJpZ2h0bWludXRlKCkpKSB7XG4gICAgICAgICAgaWYgKHRoaXMuY2hlY2tCYWNrc3BhY2VGb2N1cygpW3R5cGVdKCkgPT09IDEpIHtcbiAgICAgICAgICAgIHRoaXMuY2hlY2tCYWNrc3BhY2VGb2N1cy51cGRhdGUoY3VycmVudCA9PiB7XG4gICAgICAgICAgICAgIGN1cnJlbnRbdHlwZV0uc2V0KGN1cnJlbnRbdHlwZV0oKSArIDEpO1xuXG4gICAgICAgICAgICAgIHJldHVybiBjdXJyZW50O1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5jaGVja0JhY2tzcGFjZUZvY3VzLnVwZGF0ZShjdXJyZW50ID0+IHtcbiAgICAgICAgICAgIGN1cnJlbnRbdHlwZV0uc2V0KDEpO1xuXG4gICAgICAgICAgICByZXR1cm4gY3VycmVudDtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICAodGhpcy5mdW5jdGlvbkNvbnRyb2xzLmdldChgJHtTaWRlRW51bS5yaWdodH1ob3VyYCkgYXMgSUlucHV0RnVuY3Rpb25Db250cm9sRXZlbnQpPy5mb2N1cygpO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBoYW5kbGVyRm9jdXNBbmRCbHVyVGltZShldmVudDogSUZvY3VzQW5kQmx1ckV2ZW50LCB0eXBlOiBgbGVmdGhvdXJgIHwgYGxlZnRtaW51dGVgIHwgYHJpZ2h0aG91cmAgfCBgcmlnaHRtaW51dGVgKSB7XG4gICAgaWYgKGV2ZW50Lm5hbWUgPT09ICdmb2N1cycpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgZXZlbnRJbnB1dCA9IGV2ZW50LmV2ZW50IGFzIElFdmVudDtcbiAgICBjb25zdCB0YXJnZXQgPSBldmVudElucHV0LnRhcmdldDtcblxuICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgY2FzZSAnbGVmdGhvdXInOlxuICAgICAgICB0aGlzLnRpbWVwaWNrZXJWYXJpYWJsZXMoKS5sZWZ0LnVwZGF0ZShjdXJyZW50ID0+IHtcbiAgICAgICAgICBjdXJyZW50LnNlbGVjdGVkSG91ciA9ICFpc0VtcHR5KHRoaXMudGltZXBpY2tlclZhbHVlSXRlbSgpLmxlZnRob3VyKCkpID8gdGhpcy50aW1lcGlja2VyVmFsdWVJdGVtKCkubGVmdGhvdXIoKSA6IDA7XG5cbiAgICAgICAgICByZXR1cm4gY3VycmVudDtcbiAgICAgICAgfSk7XG4gICAgICAgIGlmICgoTnVtYmVyKHRoaXMudGltZXBpY2tlclZhbHVlSXRlbSgpLmxlZnRob3VyKCkpID09PSAwKSB8fCBpc0VtcHR5KHRoaXMudGltZXBpY2tlclZhbHVlSXRlbSgpLmxlZnRob3VyKCkpKSB7XG4gICAgICAgICAgdGhpcy50aW1lcGlja2VyVmFsdWVJdGVtLnVwZGF0ZShjdXJyZW50ID0+IHtcbiAgICAgICAgICAgIGN1cnJlbnQubGVmdGhvdXIuc2V0KDApO1xuXG4gICAgICAgICAgICByZXR1cm4gY3VycmVudDtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICB0YXJnZXQudmFsdWUgPSAnMDAnO1xuXG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKE51bWJlcih0aGlzLnRpbWVwaWNrZXJWYWx1ZUl0ZW0oKS5sZWZ0aG91cigpKSA8IDEwKSB7XG4gICAgICAgICAgdGFyZ2V0LnZhbHVlID0gYDAke051bWJlcih0aGlzLnRpbWVwaWNrZXJWYWx1ZUl0ZW0oKS5sZWZ0aG91cigpKX1gO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlICdyaWdodGhvdXInOlxuICAgICAgICB0aGlzLnRpbWVwaWNrZXJWYXJpYWJsZXMoKS5yaWdodC51cGRhdGUoY3VycmVudCA9PiB7XG4gICAgICAgICAgY3VycmVudC5zZWxlY3RlZEhvdXIgPSAhaXNFbXB0eSh0aGlzLnRpbWVwaWNrZXJWYWx1ZUl0ZW0oKS5yaWdodGhvdXIoKSkgPyB0aGlzLnRpbWVwaWNrZXJWYWx1ZUl0ZW0oKS5yaWdodGhvdXIoKSA6IDA7XG5cbiAgICAgICAgICByZXR1cm4gY3VycmVudDtcbiAgICAgICAgfSk7XG4gICAgICAgIGlmICgoTnVtYmVyKHRoaXMudGltZXBpY2tlclZhbHVlSXRlbSgpLnJpZ2h0aG91cigpKSA9PT0gMCkgfHwgaXNFbXB0eSh0aGlzLnRpbWVwaWNrZXJWYWx1ZUl0ZW0oKS5yaWdodGhvdXIoKSkpIHtcbiAgICAgICAgICB0aGlzLnRpbWVwaWNrZXJWYWx1ZUl0ZW0udXBkYXRlKGN1cnJlbnQgPT4ge1xuICAgICAgICAgICAgY3VycmVudC5yaWdodGhvdXIuc2V0KDApO1xuXG4gICAgICAgICAgICByZXR1cm4gY3VycmVudDtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICB0YXJnZXQudmFsdWUgPSAnMDAnO1xuXG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoTnVtYmVyKHRoaXMudGltZXBpY2tlclZhbHVlSXRlbSgpLnJpZ2h0aG91cigpKSA8IDEwKSB7XG4gICAgICAgICAgdGFyZ2V0LnZhbHVlID0gYDAke051bWJlcih0aGlzLnRpbWVwaWNrZXJWYWx1ZUl0ZW0oKS5yaWdodGhvdXIoKSl9YDtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAnbGVmdG1pbnV0ZSc6XG4gICAgICAgIHRoaXMudGltZXBpY2tlclZhcmlhYmxlcygpLmxlZnQudXBkYXRlKGN1cnJlbnQgPT4ge1xuICAgICAgICAgIGN1cnJlbnQuc2VsZWN0ZWRNaW51dGUgPSAhaXNFbXB0eSh0aGlzLnRpbWVwaWNrZXJWYWx1ZUl0ZW0oKS5sZWZ0bWludXRlKCkpID8gdGhpcy50aW1lcGlja2VyVmFsdWVJdGVtKCkubGVmdG1pbnV0ZSgpIDogMDtcblxuICAgICAgICAgIHJldHVybiBjdXJyZW50O1xuICAgICAgICB9KTtcbiAgICAgICAgaWYgKChOdW1iZXIodGhpcy50aW1lcGlja2VyVmFsdWVJdGVtKCkubGVmdG1pbnV0ZSgpKSA9PT0gMCkgfHwgaXNFbXB0eSh0aGlzLnRpbWVwaWNrZXJWYWx1ZUl0ZW0oKS5sZWZ0bWludXRlKCkpKSB7XG4gICAgICAgICAgdGhpcy50aW1lcGlja2VyVmFsdWVJdGVtLnVwZGF0ZShjdXJyZW50ID0+IHtcbiAgICAgICAgICAgIGN1cnJlbnQubGVmdG1pbnV0ZS5zZXQoMCk7XG5cbiAgICAgICAgICAgIHJldHVybiBjdXJyZW50O1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIHRhcmdldC52YWx1ZSA9ICcwMCc7XG5cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChOdW1iZXIodGhpcy50aW1lcGlja2VyVmFsdWVJdGVtKCkubGVmdG1pbnV0ZSgpKSA8IDEwKSB7XG4gICAgICAgICAgdGFyZ2V0LnZhbHVlID0gYDAke051bWJlcih0aGlzLnRpbWVwaWNrZXJWYWx1ZUl0ZW0oKS5sZWZ0bWludXRlKCkpfWA7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgJ3JpZ2h0bWludXRlJzpcbiAgICAgICAgdGhpcy50aW1lcGlja2VyVmFyaWFibGVzKCkucmlnaHQudXBkYXRlKGN1cnJlbnQgPT4ge1xuICAgICAgICAgIGN1cnJlbnQuc2VsZWN0ZWRNaW51dGUgPSAhaXNFbXB0eSh0aGlzLnRpbWVwaWNrZXJWYWx1ZUl0ZW0oKS5yaWdodG1pbnV0ZSgpKSA/IHRoaXMudGltZXBpY2tlclZhbHVlSXRlbSgpLnJpZ2h0bWludXRlKCkgOiAwO1xuXG4gICAgICAgICAgcmV0dXJuIGN1cnJlbnQ7XG4gICAgICAgIH0pO1xuICAgICAgICBpZiAoKE51bWJlcih0aGlzLnRpbWVwaWNrZXJWYWx1ZUl0ZW0oKS5yaWdodG1pbnV0ZSgpKSA9PT0gMCkgfHwgaXNFbXB0eSh0aGlzLnRpbWVwaWNrZXJWYWx1ZUl0ZW0oKS5yaWdodG1pbnV0ZSgpKSkge1xuICAgICAgICAgIHRoaXMudGltZXBpY2tlclZhbHVlSXRlbS51cGRhdGUoY3VycmVudCA9PiB7XG4gICAgICAgICAgICBjdXJyZW50LnJpZ2h0bWludXRlLnNldCgwKTtcblxuICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnQ7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgdGFyZ2V0LnZhbHVlID0gJzAwJztcblxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKE51bWJlcih0aGlzLnRpbWVwaWNrZXJWYWx1ZUl0ZW0oKS5yaWdodG1pbnV0ZSgpKSA8IDEwKSB7XG4gICAgICAgICAgdGFyZ2V0LnZhbHVlID0gYDAke051bWJlcih0aGlzLnRpbWVwaWNrZXJWYWx1ZUl0ZW0oKS5yaWdodG1pbnV0ZSgpKX1gO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBoYW5kbGVyQ2hhbmdlVGltZVZhbHVlKGV2ZW50OiBzdHJpbmcgfCBudW1iZXIsIHR5cGU6IGBsZWZ0aG91cmAgfCBgbGVmdG1pbnV0ZWAgfCBgcmlnaHRob3VyYCB8IGByaWdodG1pbnV0ZWApIHtcbiAgICB0aGlzLnRpbWVwaWNrZXJWYWx1ZUl0ZW0udXBkYXRlKGN1cnJlbnQgPT4ge1xuICAgICAgY3VycmVudFt0eXBlXS5zZXQoZXZlbnQgYXMgbnVtYmVyKTtcblxuICAgICAgcmV0dXJuIGN1cnJlbnQ7XG4gICAgfSk7XG5cbiAgICBjb25zdCBzaWRlID0gdHlwZS5pbmNsdWRlcyhTaWRlRW51bS5sZWZ0KSA/IFNpZGVFbnVtLmxlZnQgOiBTaWRlRW51bS5yaWdodDtcbiAgICBjb25zdCBhdHRyID0gdHlwZS5pbmNsdWRlcygnaG91cicpID8gJ2hvdXInIDogJ21pbnV0ZSc7XG5cbiAgICB0aGlzLnNwbGl0UGlja2VyRGF0ZS51cGRhdGUoY3VycmVudCA9PiB7XG4gICAgICBjdXJyZW50W3NpZGUgPT09IFNpZGVFbnVtLmxlZnQgPyAnc3RhcnQnIDogJ2VuZCddLnVwZGF0ZShzaWRlQ3VycmVudCA9PiB7XG4gICAgICAgIHNpZGVDdXJyZW50W2F0dHJdID0gZXZlbnQgYXMgbnVtYmVyO1xuXG4gICAgICAgIHJldHVybiBzaWRlQ3VycmVudDtcbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm4gY3VycmVudDtcbiAgICB9KTtcbiAgICBpZiAoKHR5cGUgIT09ICdsZWZ0aG91cicgJiYgdHlwZSAhPT0gJ3JpZ2h0aG91cicpIHx8IGV2ZW50ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuaXNaZXJvLnNldChmYWxzZSk7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKChgJHtldmVudH1gLmxlbmd0aCA9PT0gMikgfHwgKE51bWJlcihldmVudCkgPiAyKSB8fCAoTnVtYmVyKGV2ZW50KSA8PSAyICYmIE51bWJlcihldmVudCkgPiAwICYmIHRoaXMuaXNaZXJvKCkpIHx8ICh0aGlzLmlzWmVybygpICYmICF0aGlzLmtleUNvZGVCYWNrc3BhY2UoKSkpIHtcbiAgICAgIHRoaXMuaXNaZXJvLnNldChmYWxzZSk7XG4gICAgICAodGhpcy5mdW5jdGlvbkNvbnRyb2xzLmdldCh0eXBlID09PSAnbGVmdGhvdXInID8gYCR7U2lkZUVudW0ubGVmdH1taW51dGVgIDogYCR7U2lkZUVudW0ucmlnaHR9bWludXRlYCkgYXMgSUlucHV0RnVuY3Rpb25Db250cm9sRXZlbnQpPy5mb2N1cygpO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmIChOdW1iZXIoZXZlbnQpID09PSAwICYmICF0aGlzLmtleUNvZGVCYWNrc3BhY2UoKSkge1xuICAgICAgdGhpcy5pc1plcm8uc2V0KHRydWUpO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIGhhbmRsZXJTaG93TGlzdERyb3Bkb3duKGV2ZW50OiBib29sZWFuLCB0eXBlOiBzdHJpbmcpIHtcbiAgICB0aGlzLmNoZWNrU2hvd0xpc3REcm9wZG93bi51cGRhdGUoKGN1cnJlbnQpID0+IHtcbiAgICAgIGN1cnJlbnRbdHlwZV0gPSBldmVudDtcblxuICAgICAgcmV0dXJuIGN1cnJlbnQ7XG4gICAgfSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgY29udmVydEl0ZW1Nb250aCA9IChpdGVtOiBhbnkpID0+IHtcbiAgICBpZiAoIWl0ZW0pIHtcbiAgICAgIHJldHVybiAnJztcbiAgICB9XG4gICAgc2V0KGl0ZW0sICdsYWJlbERpc3BsYXknLCB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KGl0ZW0ubGFiZWwgfHwgJyAnLCB7IHllYXI6ICcnIH0pKTtcblxuICAgIHJldHVybiBpdGVtO1xuICB9XG4gIHByb3RlY3RlZCBjb252ZXJ0SXRlbVllYXIgPSAoaXRlbTogYW55KSA9PiB7XG4gICAgaWYgKCFpdGVtKSB7XG4gICAgICByZXR1cm4gJyc7XG4gICAgfVxuICAgIGl0ZW0ubGFiZWxEaXNwbGF5ID0gdGhpcy50cmFuc2xhdGUuaW5zdGFudCgnaTE4bl95ZWFyX3BhcmFtJywgeyB5ZWFyOiBpdGVtLmxhYmVsIH0pO1xuXG4gICAgcmV0dXJuIGl0ZW07XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZU1vbnRoc0luVmlldygpIHtcbiAgICBpZiAodGhpcy5lbmREYXRlKCkpIHtcbiAgICAgIGlmICghdGhpcy5pc1NpbmdsZSgpICYmIHRoaXMubGVmdENhbGVuZGFyKCkubW9udGggJiYgdGhpcy5yaWdodENhbGVuZGFyKCkubW9udGggJiZcbiAgICAgICAgKCh0aGlzLmxlZnRDYWxlbmRhcigpICYmIHRoaXMuc3RhcnREYXRlKCk/LmZvcm1hdCgnWVlZWS1NTScpID09PSB0aGlzLmxlZnRDYWxlbmRhcigpLm1vbnRoPy5mb3JtYXQoJ1lZWVktTU0nKSkgfHwgKHRoaXMucmlnaHRDYWxlbmRhcigpICYmIHRoaXMuc3RhcnREYXRlKCk/LmZvcm1hdCgnWVlZWS1NTScpID09PSB0aGlzLnJpZ2h0Q2FsZW5kYXIoKS5tb250aD8uZm9ybWF0KCdZWVlZLU1NJykpKVxuICAgICAgICAmJiAodGhpcy5lbmREYXRlKCk/LmZvcm1hdCgnWVlZWS1NTScpID09PSB0aGlzLmxlZnRDYWxlbmRhcigpLm1vbnRoPy5mb3JtYXQoJ1lZWVktTU0nKSB8fCB0aGlzLmVuZERhdGUoKT8uZm9ybWF0KCdZWVlZLU1NJykgPT09IHRoaXMucmlnaHRDYWxlbmRhcigpLm1vbnRoPy5mb3JtYXQoJ1lZWVktTU0nKSlcbiAgICAgICkgeyByZXR1cm47IH1cblxuICAgICAgaWYgKHRoaXMuc3RhcnREYXRlKCkpIHtcbiAgICAgICAgdGhpcy5sZWZ0Q2FsZW5kYXIudXBkYXRlKGN1cnJlbnQgPT4ge1xuICAgICAgICAgIGN1cnJlbnQubW9udGggPSB0aGlzLnN0YXJ0RGF0ZSgpPy5jbG9uZSgpPy5kYXRlKDIpO1xuXG4gICAgICAgICAgcmV0dXJuIGN1cnJlbnQ7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlmICh0aGlzLmVuZERhdGUoKT8ubW9udGgoKSAhPT0gdGhpcy5zdGFydERhdGUoKT8ubW9udGgoKSB8fCB0aGlzLmVuZERhdGUoKT8ueWVhcigpICE9PSB0aGlzLnN0YXJ0RGF0ZSgpPy55ZWFyKCkpIHtcbiAgICAgICAgICB0aGlzLnJpZ2h0Q2FsZW5kYXIudXBkYXRlKGN1cnJlbnQgPT4ge1xuICAgICAgICAgICAgY3VycmVudC5tb250aCA9IHRoaXMuZW5kRGF0ZSgpPy5jbG9uZSgpPy5kYXRlKDIpO1xuXG4gICAgICAgICAgICByZXR1cm4gY3VycmVudDtcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnJpZ2h0Q2FsZW5kYXIudXBkYXRlKGN1cnJlbnQgPT4ge1xuICAgICAgICAgIGN1cnJlbnQubW9udGggPSB0aGlzLnN0YXJ0RGF0ZSgpPy5jbG9uZSgpPy5kYXRlKDIpPy5hZGQoMSwgJ21vbnRoJyk7XG5cbiAgICAgICAgICByZXR1cm4gY3VycmVudDtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuc3RhcnREYXRlKCkgJiYgdGhpcy5sZWZ0Q2FsZW5kYXIoKS5tb250aCAmJiB0aGlzLnJpZ2h0Q2FsZW5kYXIoKS5tb250aCAmJiB0aGlzLmxlZnRDYWxlbmRhcigpLm1vbnRoPy5mb3JtYXQoJ1lZWVktTU0nKSAhPT0gdGhpcy5zdGFydERhdGUoKT8uZm9ybWF0KCdZWVlZLU1NJykgJiYgdGhpcy5yaWdodENhbGVuZGFyKCkubW9udGg/LmZvcm1hdCgnWVlZWS1NTScpICE9PSB0aGlzLnN0YXJ0RGF0ZSgpPy5mb3JtYXQoJ1lZWVktTU0nKSkge1xuICAgICAgdGhpcy5sZWZ0Q2FsZW5kYXIudXBkYXRlKGN1cnJlbnQgPT4ge1xuICAgICAgICBjdXJyZW50Lm1vbnRoID0gdGhpcy5zdGFydERhdGUoKT8uY2xvbmUoKT8uZGF0ZSgyKTtcblxuICAgICAgICByZXR1cm4gY3VycmVudDtcbiAgICAgIH0pO1xuICAgICAgdGhpcy5yaWdodENhbGVuZGFyLnVwZGF0ZShjdXJyZW50ID0+IHtcbiAgICAgICAgY3VycmVudC5tb250aCA9IHRoaXMuc3RhcnREYXRlKCk/LmNsb25lKCk/LmRhdGUoMik/LmFkZCgxLCAnbW9udGgnKTtcblxuICAgICAgICByZXR1cm4gY3VycmVudDtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgc2V0VGltZUlucHV0KHNpZGU6IFNpZGVFbnVtKSB7XG4gICAgY29uc3QgaG91ciA9IHBhcnNlSW50KGAke3RoaXMudGltZXBpY2tlclZhcmlhYmxlcygpW3NpZGVdKCkuc2VsZWN0ZWRIb3VyfWApO1xuICAgIGNvbnN0IG1pbnV0ZSA9IHBhcnNlSW50KGAke3RoaXMudGltZXBpY2tlclZhcmlhYmxlcygpW3NpZGVdKCkuc2VsZWN0ZWRNaW51dGV9YCk7XG5cbiAgICBpZiAoc2lkZSA9PT0gU2lkZUVudW0ubGVmdCAmJiB0aGlzLnN0YXJ0RGF0ZSgpKSB7XG4gICAgICBsZXQgc3RhcnQgPSB0aGlzLnN0YXJ0RGF0ZSgpPy5jbG9uZSgpO1xuXG4gICAgICBzdGFydCA9IHN0YXJ0Py5ob3VyKGhvdXIpO1xuICAgICAgc3RhcnQgPSBzdGFydD8ubWludXRlKG1pbnV0ZSk7XG4gICAgICB0aGlzLnNldFN0YXJ0RGF0ZShzdGFydCk7XG4gICAgICBpZiAodGhpcy5pc1NpbmdsZSgpKSB7XG4gICAgICAgIHRoaXMuZW5kRGF0ZS5zZXQodGhpcy5zdGFydERhdGUoKT8uY2xvbmUoKSk7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5lbmREYXRlKCkgJiYgdGhpcy5lbmREYXRlKCk/LmZvcm1hdCgnWVlZWS1NTS1ERCcpID09PSBzdGFydD8uZm9ybWF0KCdZWVlZLU1NLUREJykgJiYgdGhpcy5lbmREYXRlKCk/LmlzQmVmb3JlKHN0YXJ0KSkge1xuICAgICAgICB0aGlzLnNldEVuZERhdGUoc3RhcnQ/LmNsb25lKCkpO1xuICAgICAgfVxuICAgICAgaWYgKCF0aGlzLmVuZERhdGUoKSAmJiBzdGFydCAmJiB0aGlzLmhhc1RpbWVQaWNrZXIoKSkge1xuICAgICAgICBjb25zdCBzdGFydENsb25lID0gdGhpcy5nZXREYXRlV2l0aFRpbWUoc3RhcnQsIFNpZGVFbnVtLnJpZ2h0KTtcblxuICAgICAgICBpZiAoc3RhcnRDbG9uZS5pc0JlZm9yZShzdGFydCkpIHtcbiAgICAgICAgICB0aGlzLnRpbWVwaWNrZXJWYXJpYWJsZXMoKVtTaWRlRW51bS5yaWdodF0udXBkYXRlKGN1cnJlbnQgPT4ge1xuICAgICAgICAgICAgY3VycmVudC5zZWxlY3RlZEhvdXIgPSBob3VyO1xuICAgICAgICAgICAgY3VycmVudC5zZWxlY3RlZE1pbnV0ZSA9IG1pbnV0ZTtcblxuICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnQ7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAodGhpcy5lbmREYXRlKCkpIHtcbiAgICAgIGxldCBlbmQgPSB0aGlzLmVuZERhdGUoKT8uY2xvbmUoKTtcblxuICAgICAgZW5kID0gZW5kPy5ob3VyKGhvdXIpO1xuICAgICAgZW5kID0gZW5kPy5taW51dGUobWludXRlKTtcbiAgICAgIHRoaXMuc2V0RW5kRGF0ZShlbmQpO1xuICAgIH1cbiAgICB0aGlzLnVwZGF0ZUNhbGVuZGFycygpO1xuICAgIHRoaXMucmVuZGVyVGltZVBpY2tlcihTaWRlRW51bS5sZWZ0KTtcbiAgICB0aGlzLnJlbmRlclRpbWVQaWNrZXIoU2lkZUVudW0ucmlnaHQpO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVDYWxlbmRhcnMoKSB7XG4gICAgdGhpcy5yZW5kZXJDYWxlbmRhcihTaWRlRW51bS5sZWZ0KTtcbiAgICB0aGlzLnJlbmRlckNhbGVuZGFyKFNpZGVFbnVtLnJpZ2h0KTtcbiAgICBpZiAodGhpcy5lbmREYXRlKCkgPT09IG51bGwpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5jYWxjdWxhdGVTZWxlY3RlZExhYmVsKCk7XG4gIH1cblxuICBwcml2YXRlIHJlbmRlckNhbGVuZGFyKHNpZGU6IFNpZGVFbnVtKSB7IC8vIHNpZGUgZW51bVxuICAgIGNvbnN0IG1haW5DYWxlbmRhcjogeyBjYWxlbmRhcj86IElDYWxlbmRhciwgbW9udGg/OiBkYXlqcy5EYXlqcyB9ID0gKHNpZGUgPT09IFNpZGVFbnVtLmxlZnQpID8gdGhpcy5sZWZ0Q2FsZW5kYXIoKSA6IHRoaXMucmlnaHRDYWxlbmRhcigpO1xuXG4gICAgaWYgKCFtYWluQ2FsZW5kYXIubW9udGggfHwgKHRoaXMuZGF0ZU9wdGlvbnMoKS5maXJzdERheSA9PT0gdW5kZWZpbmVkIHx8IHRoaXMuZGF0ZU9wdGlvbnMoKS5maXJzdERheSA9PT0gdW5kZWZpbmVkKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBtb250aCA9IG1haW5DYWxlbmRhci5tb250aC5tb250aCgpO1xuICAgIGNvbnN0IHllYXIgPSBtYWluQ2FsZW5kYXIubW9udGgueWVhcigpO1xuICAgIGNvbnN0IGhvdXIgPSBtYWluQ2FsZW5kYXIubW9udGguaG91cigpO1xuICAgIGNvbnN0IG1pbnV0ZSA9IG1haW5DYWxlbmRhci5tb250aC5taW51dGUoKTtcbiAgICBjb25zdCBzZWNvbmQgPSBtYWluQ2FsZW5kYXIubW9udGguc2Vjb25kKCk7XG4gICAgY29uc3QgZGF5c0luTW9udGggPSBkYXlqcyhuZXcgRGF0ZSh5ZWFyLCBtb250aCkpLmRheXNJbk1vbnRoKCk7XG4gICAgY29uc3QgZmlyc3REYXkgPSBkYXlqcyhuZXcgRGF0ZSh5ZWFyLCBtb250aCwgMSkpO1xuICAgIGNvbnN0IGxhc3REYXkgPSBkYXlqcyhuZXcgRGF0ZSh5ZWFyLCBtb250aCwgZGF5c0luTW9udGgpKTtcbiAgICBjb25zdCBsYXN0TW9udGggPSBkYXlqcyhmaXJzdERheSkuc3VidHJhY3QoMSwgJ21vbnRoJykubW9udGgoKTtcbiAgICBjb25zdCBsYXN0WWVhciA9IGRheWpzKGZpcnN0RGF5KS5zdWJ0cmFjdCgxLCAnbW9udGgnKS55ZWFyKCk7XG4gICAgY29uc3QgZGF5c0luTGFzdE1vbnRoID0gZGF5anMobmV3IERhdGUobGFzdFllYXIsIGxhc3RNb250aCkpLmRheXNJbk1vbnRoKCk7XG4gICAgY29uc3QgZGF5T2ZXZWVrID0gZmlyc3REYXkuZGF5KCk7XG4gICAgY29uc3QgY2FsZW5kYXI6IElDYWxlbmRhciA9IHt9O1xuXG4gICAgY2FsZW5kYXIuZmlyc3REYXkgPSBmaXJzdERheTtcbiAgICBjYWxlbmRhci5sYXN0RGF5ID0gbGFzdERheTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IDY7IGkrKykge1xuICAgICAgY2FsZW5kYXJbaV0gPSBbXTtcbiAgICB9XG4gICAgbGV0IHN0YXJ0RGF5ID0gZGF5c0luTGFzdE1vbnRoIC0gZGF5T2ZXZWVrICsgKHRoaXMuZGF0ZU9wdGlvbnMoKS5maXJzdERheSA/PyAxKSArIDE7XG5cbiAgICBpZiAoc3RhcnREYXkgPiBkYXlzSW5MYXN0TW9udGgpIHtcbiAgICAgIHN0YXJ0RGF5IC09IDc7XG4gICAgfVxuICAgIGlmIChkYXlPZldlZWsgPT09IHRoaXMuZGF0ZU9wdGlvbnMoKS5maXJzdERheSkge1xuICAgICAgc3RhcnREYXkgPSBkYXlzSW5MYXN0TW9udGggLSA2O1xuICAgIH1cbiAgICBsZXQgY3VyRGF0ZSA9IGRheWpzKG5ldyBEYXRlKGxhc3RZZWFyLCBsYXN0TW9udGgsIHN0YXJ0RGF5LCAxMiwgbWludXRlLCBzZWNvbmQpKTtcblxuICAgIGZvciAobGV0IGkgPSAwLCBjb2wgPSAwLCByb3cgPSAwOyBpIDwgNDI7IGkrKywgY29sKyssIGN1ckRhdGUgPSBkYXlqcyhjdXJEYXRlKS5hZGQoMjQsICdob3VyJykpIHtcbiAgICAgIGlmIChpID4gMCAmJiBjb2wgJSA3ID09PSAwKSB7XG4gICAgICAgIGNvbCA9IDA7XG4gICAgICAgIHJvdysrO1xuICAgICAgfVxuICAgICAgY2FsZW5kYXJbcm93XVtjb2xdID0gY3VyRGF0ZS5jbG9uZSgpLmhvdXIoaG91cikubWludXRlKG1pbnV0ZSkuc2Vjb25kKHNlY29uZCk7XG4gICAgICBjdXJEYXRlID0gY3VyRGF0ZS5ob3VyKDEyKTtcblxuICAgICAgY29uc3QgbWluRGF0ZSA9IHRoaXMubWluRGF0ZSgpIGFzIGRheWpzLkRheWpzO1xuICAgICAgY29uc3QgbWF4RGF0ZSA9IHRoaXMubWF4RGF0ZSgpIGFzIGRheWpzLkRheWpzO1xuICAgICAgaWYgKG1pbkRhdGUgJiYgY2FsZW5kYXJbcm93XVtjb2xdLmZvcm1hdCgnWVlZWS1NTS1ERCcpID09PSBtaW5EYXRlPy5mb3JtYXQoJ1lZWVktTU0tREQnKSAmJiBjYWxlbmRhcltyb3ddW2NvbF0uaXNCZWZvcmUobWluRGF0ZSkgJiYgc2lkZSA9PT0gJ2xlZnQnKSB7XG4gICAgICAgIGNhbGVuZGFyW3Jvd11bY29sXSA9IG1pbkRhdGU/LmNsb25lKCk7XG4gICAgICB9XG4gICAgICBpZiAobWF4RGF0ZSAmJiBjYWxlbmRhcltyb3ddW2NvbF0uZm9ybWF0KCdZWVlZLU1NLUREJykgPT09IG1heERhdGU/LmZvcm1hdCgnWVlZWS1NTS1ERCcpICYmIGNhbGVuZGFyW3Jvd11bY29sXS5pc0FmdGVyKG1heERhdGUpICYmIHNpZGUgPT09ICdyaWdodCcpIHtcbiAgICAgICAgY2FsZW5kYXJbcm93XVtjb2xdID0gbWF4RGF0ZT8uY2xvbmUoKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoc2lkZSA9PT0gU2lkZUVudW0ubGVmdCkge1xuICAgICAgdGhpcy5sZWZ0Q2FsZW5kYXIudXBkYXRlKGN1cnJlbnQgPT4ge1xuICAgICAgICBjdXJyZW50LmNhbGVuZGFyID0gY2FsZW5kYXI7XG5cbiAgICAgICAgcmV0dXJuIGN1cnJlbnQ7XG4gICAgICB9KTtcbiAgICB9XG4gICAgaWYgKHNpZGUgPT09IFNpZGVFbnVtLnJpZ2h0KSB7XG4gICAgICB0aGlzLnJpZ2h0Q2FsZW5kYXIudXBkYXRlKGN1cnJlbnQgPT4ge1xuICAgICAgICBjdXJyZW50LmNhbGVuZGFyID0gY2FsZW5kYXI7XG5cbiAgICAgICAgcmV0dXJuIGN1cnJlbnQ7XG4gICAgICB9KTtcbiAgICB9XG4gICAgY29uc3QgbWluRGF0ZSA9IHNpZGUgPT09ICdsZWZ0JyA/ICh0aGlzLm1pbkRhdGUoKSBhcyBkYXlqcy5EYXlqcykgOiB0aGlzLnN0YXJ0RGF0ZSgpO1xuICAgIGNvbnN0IG1heERhdGUgPSB0aGlzLm1heERhdGUoKSBhcyBkYXlqcy5EYXlqcztcblxuICAgIHRoaXMuY2FsZW5kYXJWYXJpYWJsZXMoKVtzaWRlXS5zZXQoe1xuICAgICAgbW9udGg6IG1vbnRoLFxuICAgICAgeWVhcjogeWVhcixcbiAgICAgIGhvdXI6IGhvdXIsXG4gICAgICBtaW51dGU6IG1pbnV0ZSxcbiAgICAgIHNlY29uZDogc2Vjb25kLFxuICAgICAgZGF5c0luTW9udGg6IGRheXNJbk1vbnRoLFxuICAgICAgZmlyc3REYXk6IGZpcnN0RGF5LFxuICAgICAgbGFzdERheTogbGFzdERheSxcbiAgICAgIGxhc3RNb250aDogbGFzdE1vbnRoLFxuICAgICAgbGFzdFllYXI6IGxhc3RZZWFyLFxuICAgICAgZGF5c0luTGFzdE1vbnRoOiBkYXlzSW5MYXN0TW9udGgsXG4gICAgICBkYXlPZldlZWs6IGRheU9mV2VlayxcbiAgICAgIGNhbFJvd3M6IHNpZ25hbChBcnJheS5mcm9tKEFycmF5KDYpLmtleXMoKSkpLFxuICAgICAgY2FsQ29sczogc2lnbmFsKEFycmF5LmZyb20oQXJyYXkoNykua2V5cygpKSksXG4gICAgICBjbGFzc2VzOiB7fSxcbiAgICAgIG1pbkRhdGU6IG1pbkRhdGUsXG4gICAgICBtYXhEYXRlOiBtYXhEYXRlLFxuICAgICAgY2FsZW5kYXI6IGNhbGVuZGFyLFxuICAgICAgZHJvcGRvd25zOiBzaWduYWwoe30pXG4gICAgfSk7XG4gICAgaWYgKHRoaXMuc2hvd0Ryb3Bkb3duc1NlbGVjdCgpKSB7XG4gICAgICBjb25zdCBjdXJyZW50TW9udGggPSBjYWxlbmRhclsxXVsxXS5tb250aCgpO1xuICAgICAgY29uc3QgY3VycmVudFllYXIgPSBjYWxlbmRhclsxXVsxXS55ZWFyKCk7XG4gICAgICBjb25zdCBtYXhZZWFyID0gKG1heERhdGUgJiYgbWF4RGF0ZT8ueWVhcigpKSB8fCBERUZBVUxUX01BWF9ZRUFSO1xuICAgICAgY29uc3QgbWluWWVhciA9IChtaW5EYXRlICYmIG1pbkRhdGU/LnllYXIoKSkgfHwgREVGQVVMVF9NSU5fWUVBUjtcbiAgICAgIGNvbnN0IGluTWluWWVhciA9IGN1cnJlbnRZZWFyID09PSBtaW5ZZWFyO1xuICAgICAgY29uc3QgaW5NYXhZZWFyID0gY3VycmVudFllYXIgPT09IG1heFllYXI7XG4gICAgICBjb25zdCB5ZWFycyA9IFtdO1xuXG4gICAgICBmb3IgKGxldCB5ID0gbWluWWVhcjsgeSA8PSBtYXhZZWFyOyB5KyspIHtcbiAgICAgICAgeWVhcnMucHVzaCh5KTtcbiAgICAgIH1cbiAgICAgIHRoaXMuY2FsZW5kYXJWYXJpYWJsZXMoKVtzaWRlXSgpLmRyb3Bkb3ducz8uc2V0KHtcbiAgICAgICAgY3VycmVudE1vbnRoOiBjdXJyZW50TW9udGgsXG4gICAgICAgIGN1cnJlbnRZZWFyOiBjdXJyZW50WWVhcixcbiAgICAgICAgbWF4WWVhcjogbWF4WWVhcixcbiAgICAgICAgbWluWWVhcjogbWluWWVhcixcbiAgICAgICAgaW5NaW5ZZWFyOiBpbk1pblllYXIsXG4gICAgICAgIGluTWF4WWVhcjogaW5NYXhZZWFyLFxuICAgICAgICBtb250aEFycmF5czogc2lnbmFsKEFycmF5LmZyb20oQXJyYXkoMTIpLmtleXMoKSkpLFxuICAgICAgICB5ZWFyQXJyYXlzOiBzaWduYWwoeWVhcnMpXG4gICAgICB9KTtcbiAgICB9XG4gICAgdGhpcy5idWlsZENlbGxzKGNhbGVuZGFyLCBzaWRlKTtcbiAgfVxuXG4gIHByaXZhdGUgYnVpbGRDZWxscyhjYWxlbmRhcjogSUNhbGVuZGFyLCBzaWRlOiBTaWRlRW51bSkge1xuICAgIGZvciAobGV0IHJvdyA9IDA7IHJvdyA8IDY7IHJvdysrKSB7XG4gICAgICBjb25zdCBjbGFzc2xlc3MgPSB0aGlzLmNhbGVuZGFyVmFyaWFibGVzKClbc2lkZV0oKTtcblxuICAgICAgaWYgKGNsYXNzbGVzcy5jbGFzc2VzKSB7XG4gICAgICAgIGNsYXNzbGVzcy5jbGFzc2VzW3Jvd10gPSB7fTtcbiAgICAgIH1cbiAgICAgIGZvciAobGV0IGNvbCA9IDA7IGNvbCA8IDc7IGNvbCsrKSB7XG4gICAgICAgIGNvbnN0IGNsYXNzZXMgPSBbXTtcblxuICAgICAgICBjb25zdCBzdGFydERhdGUgPSB0aGlzLnN0YXJ0RGF0ZSgpIGFzIGRheWpzLkRheWpzO1xuICAgICAgICBjb25zdCBlbmREYXRlID0gdGhpcy5lbmREYXRlKCkgYXMgZGF5anMuRGF5anM7XG4gICAgICAgIGNvbnN0IG5vd0hvdmVyZWREYXRlID0gdGhpcy5ub3dIb3ZlcmVkRGF0ZSgpO1xuXG4gICAgICAgIGlmIChjYWxlbmRhcltyb3ddW2NvbF0uaXNTYW1lKG5ldyBEYXRlKCksICdkYXknKSkge1xuICAgICAgICAgIGNsYXNzZXMucHVzaCgndG9kYXknKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY2FsZW5kYXJbcm93XVtjb2xdLmlzb1dlZWtkYXkoKSA+IDUpIHtcbiAgICAgICAgICBjbGFzc2VzLnB1c2goJ3dlZWtlbmQnKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY2FsZW5kYXJbcm93XVtjb2xdLm1vbnRoKCkgIT09IGNhbGVuZGFyWzFdWzFdLm1vbnRoKCkpIHtcbiAgICAgICAgICBjbGFzc2VzLnB1c2goJ29mZicpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLm1pbkRhdGUoKSAmJiBjYWxlbmRhcltyb3ddW2NvbF0uaXNCZWZvcmUodGhpcy5taW5EYXRlKCksICdkYXknKSkge1xuICAgICAgICAgIGNsYXNzZXMucHVzaCgnb2ZmJywgJ2Rpc2FibGVkJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuY2FsZW5kYXJWYXJpYWJsZXMoKVtzaWRlXSgpLm1heERhdGUgJiYgY2FsZW5kYXJbcm93XVtjb2xdLmlzQWZ0ZXIodGhpcy5jYWxlbmRhclZhcmlhYmxlcygpW3NpZGVdKCkubWF4RGF0ZSwgJ2RheScpKSB7XG4gICAgICAgICAgY2xhc3Nlcy5wdXNoKCdvZmYnLCAnZGlzYWJsZWQnKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoc3RhcnREYXRlICYmIGNhbGVuZGFyW3Jvd11bY29sXS5mb3JtYXQoJ1lZWVktTU0tREQnKSA9PT0gc3RhcnREYXRlPy5mb3JtYXQoJ1lZWVktTU0tREQnKSkge1xuICAgICAgICAgIGNsYXNzZXMucHVzaCgnYWN0aXZlJywgJ3N0YXJ0LWRhdGUnKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZW5kRGF0ZSAhPT0gbnVsbCAmJiBjYWxlbmRhcltyb3ddW2NvbF0uZm9ybWF0KCdZWVlZLU1NLUREJykgPT09IGVuZERhdGU/LmZvcm1hdCgnWVlZWS1NTS1ERCcpKSB7XG4gICAgICAgICAgY2xhc3Nlcy5wdXNoKCdhY3RpdmUnLCAnZW5kLWRhdGUnKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoc3RhcnREYXRlICYmIGNhbGVuZGFyW3Jvd11bY29sXS5mb3JtYXQoJ1lZWVktTU0tREQnKSA9PT0gc3RhcnREYXRlPy5mb3JtYXQoJ1lZWVktTU0tREQnKSAmJiAoIWVuZERhdGUgfHwgZW5kRGF0ZSAhPT0gbnVsbCAmJiBjYWxlbmRhcltyb3ddW2NvbF0uZm9ybWF0KCdZWVlZLU1NLUREJykgPT09IGVuZERhdGU/LmZvcm1hdCgnWVlZWS1NTS1ERCcpKSkge1xuICAgICAgICAgIGNsYXNzZXMucHVzaCgnYWN0aXZlJywgJ2Z1bGwtZGF0ZScpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHN0YXJ0RGF0ZSAmJiBlbmREYXRlICYmICgobm93SG92ZXJlZERhdGUgIT09IG51bGwgJiYgdGhpcy5waWNraW5nRGF0ZSgpKSB8fCBlbmREYXRlICE9PSBudWxsKSAmJiAoY2FsZW5kYXJbcm93XVtjb2xdID4gc3RhcnREYXRlICYmIChjYWxlbmRhcltyb3ddW2NvbF0gPCBlbmREYXRlIHx8IChub3dIb3ZlcmVkRGF0ZSAmJiBjYWxlbmRhcltyb3ddW2NvbF0gPCBub3dIb3ZlcmVkRGF0ZSAmJiB0aGlzLnBpY2tpbmdEYXRlKCkpKSkpIHtcbiAgICAgICAgICBjbGFzc2VzLnB1c2goIWNsYXNzZXMuZmluZChlbCA9PiBlbCA9PT0gJ29mZicpID8gJ2luLXJhbmdlJyA6ICdmb2N1cy1vZmYnKTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgY25hbWUgPSAnJywgZGlzYWJsZWQgPSBmYWxzZTtcblxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNsYXNzZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICBjbmFtZSArPSBjbGFzc2VzW2ldICsgJyAnO1xuXG4gICAgICAgICAgaWYgKGNsYXNzZXNbaV0gPT09ICdkaXNhYmxlZCcpIHtcbiAgICAgICAgICAgIGRpc2FibGVkID0gdHJ1ZTtcbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGlmICghZGlzYWJsZWQpIHtcbiAgICAgICAgICBjbmFtZSArPSAnYXZhaWxhYmxlJztcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjbGFzc2xlc3MuY2xhc3Nlcykge1xuICAgICAgICAgIGNsYXNzbGVzcy5jbGFzc2VzW3Jvd11bY29sXSA9IGNuYW1lLnJlcGxhY2UoL15cXHMrfFxccyskL2csICcnKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgcmVuZGVyVGltZVBpY2tlcihzaWRlOiBTaWRlRW51bSkge1xuICAgIGxldCBzZWxlY3RlZDogZGF5anMuRGF5anMgPSBkYXlqcygpLCBtaW5EYXRlO1xuICAgIGNvbnN0IG1heERhdGUgPSB0aGlzLm1heERhdGUoKTtcbiAgICBjb25zdCBzdGFydERhdGUgPSB0aGlzLnN0YXJ0RGF0ZSgpO1xuICAgIGNvbnN0IGVuZERhdGUgPSB0aGlzLmVuZERhdGUoKTtcblxuICAgIGlmIChzaWRlID09PSBTaWRlRW51bS5sZWZ0ICYmIHN0YXJ0RGF0ZSkge1xuICAgICAgc2VsZWN0ZWQgPSBzdGFydERhdGUuY2xvbmUoKTtcbiAgICAgIG1pbkRhdGUgPSB0aGlzLm1heERhdGUoKTtcbiAgICB9XG4gICAgaWYgKHNpZGUgPT09IFNpZGVFbnVtLnJpZ2h0ICYmIGVuZERhdGUpIHtcbiAgICAgIHNlbGVjdGVkID0gZW5kRGF0ZS5jbG9uZSgpO1xuICAgICAgbWluRGF0ZSA9IHRoaXMuc3RhcnREYXRlKCk7XG4gICAgfVxuICAgIGlmIChzaWRlID09PSBTaWRlRW51bS5yaWdodCAmJiAhZW5kRGF0ZSkge1xuICAgICAgaWYgKCFzdGFydERhdGUpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgc2VsZWN0ZWQgPSB0aGlzLmdldERhdGVXaXRoVGltZShzdGFydERhdGUsIFNpZGVFbnVtLnJpZ2h0KTtcbiAgICAgIGlmIChzZWxlY3RlZC5pc0JlZm9yZShzdGFydERhdGUpKSB7XG4gICAgICAgIHNlbGVjdGVkID0gc3RhcnREYXRlLmNsb25lKCk7XG4gICAgICB9XG4gICAgICBtaW5EYXRlID0gc3RhcnREYXRlO1xuICAgIH1cbiAgICBjb25zdCBzdGFydCA9IDA7XG4gICAgY29uc3QgZW5kID0gMjM7XG5cbiAgICB0aGlzLnRpbWVwaWNrZXJWYXJpYWJsZXMoKVtzaWRlXS5zZXQoe1xuICAgICAgaG91cnM6IFtdLFxuICAgICAgbWludXRlczogW10sXG4gICAgICBtaW51dGVzTGFiZWw6IFtdLFxuICAgICAgc2Vjb25kczogW10sXG4gICAgICBzZWNvbmRzTGFiZWw6IFtdLFxuICAgICAgZGlzYWJsZWRIb3VyczogW10sXG4gICAgICBkaXNhYmxlZE1pbnV0ZXM6IFtdLFxuICAgICAgZGlzYWJsZWRTZWNvbmRzOiBbXSxcbiAgICAgIHNlbGVjdGVkSG91cjogMCxcbiAgICAgIHNlbGVjdGVkTWludXRlOiAwLFxuICAgICAgc2VsZWN0ZWRTZWNvbmQ6IDAsXG4gICAgfSk7XG4gICAgZm9yIChsZXQgaSA9IHN0YXJ0OyBpIDw9IGVuZDsgaSsrKSB7XG4gICAgICBjb25zdCBpX2luXzI0ID0gaTtcblxuICAgICAgY29uc3QgdGltZSA9IHNlbGVjdGVkLmNsb25lKCkuaG91cihpX2luXzI0KTtcbiAgICAgIGxldCBkaXNhYmxlZCA9IGZhbHNlO1xuXG4gICAgICBpZiAobWluRGF0ZSAmJiB0aW1lLm1pbnV0ZSg1OSkuaXNCZWZvcmUobWluRGF0ZSkpIHtcbiAgICAgICAgZGlzYWJsZWQgPSB0cnVlO1xuICAgICAgfVxuICAgICAgaWYgKG1heERhdGUgJiYgdGltZS5taW51dGUoMCkuaXNBZnRlcihtYXhEYXRlKSkge1xuICAgICAgICBkaXNhYmxlZCA9IHRydWU7XG4gICAgICB9XG4gICAgICB0aGlzLnRpbWVwaWNrZXJWYXJpYWJsZXMoKVtzaWRlXS51cGRhdGUoY3VycmVudCA9PiB7XG4gICAgICAgIGN1cnJlbnQuaG91cnM/LnB1c2goaSk7XG4gICAgICAgIGlmIChpX2luXzI0ID09PSBzZWxlY3RlZC5ob3VyKCkgJiYgIWRpc2FibGVkKSB7XG4gICAgICAgICAgY3VycmVudC5zZWxlY3RlZEhvdXIgPSBpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChkaXNhYmxlZCkge1xuICAgICAgICAgIGN1cnJlbnQuZGlzYWJsZWRIb3Vycz8ucHVzaChpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBjdXJyZW50O1xuICAgICAgfSk7XG4gICAgfVxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgNjA7IGkgKz0gdGhpcy50aW1lUGlja2VySW5jcmVtZW50KCkpIHtcbiAgICAgIGNvbnN0IHBhZGRlZCA9IGkgPCAxMCA/ICcwJyArIGkgOiBgJHtpfWA7XG4gICAgICBjb25zdCB0aW1lID0gc2VsZWN0ZWQuY2xvbmUoKS5taW51dGUoaSk7XG5cbiAgICAgIGxldCBkaXNhYmxlZCA9IGZhbHNlO1xuXG4gICAgICBpZiAobWluRGF0ZSAmJiB0aW1lLnNlY29uZCg1OSkuaXNCZWZvcmUobWluRGF0ZSkpIHtcbiAgICAgICAgZGlzYWJsZWQgPSB0cnVlO1xuICAgICAgfVxuICAgICAgaWYgKG1heERhdGUgJiYgdGltZS5zZWNvbmQoMCkuaXNBZnRlcihtYXhEYXRlKSkge1xuICAgICAgICBkaXNhYmxlZCA9IHRydWU7XG4gICAgICB9XG4gICAgICB0aGlzLnRpbWVwaWNrZXJWYXJpYWJsZXMoKVtzaWRlXS51cGRhdGUoY3VycmVudCA9PiB7XG4gICAgICAgIGN1cnJlbnQubWludXRlcz8ucHVzaChpKTtcbiAgICAgICAgY3VycmVudC5taW51dGVzTGFiZWw/LnB1c2gocGFkZGVkKTtcbiAgICAgICAgaWYgKHNlbGVjdGVkLm1pbnV0ZSgpID09PSBpICYmICFkaXNhYmxlZCkge1xuICAgICAgICAgIGN1cnJlbnQuc2VsZWN0ZWRNaW51dGUgPSBpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChkaXNhYmxlZCkge1xuICAgICAgICAgIGN1cnJlbnQuZGlzYWJsZWRNaW51dGVzPy5wdXNoKGkpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGN1cnJlbnQ7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICB0aGlzLnRpbWVwaWNrZXJWYXJpYWJsZXMoKVtzaWRlXS51cGRhdGUoY3VycmVudCA9PiB7XG4gICAgICBjdXJyZW50LnNlbGVjdGVkID0gc2VsZWN0ZWQ7XG5cbiAgICAgIHJldHVybiBjdXJyZW50O1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVFbGVtZW50KCkge1xuICAgIGlmICh0aGlzLmlzU2luZ2xlKCkgJiYgdGhpcy5zdGFydERhdGUoKSkge1xuICAgICAgdGhpcy5zZWxlY3RlZExhYmVsLnNldCh0aGlzLnN0YXJ0RGF0ZSgpPy5mb3JtYXQoJ0REL01NL1lZWVknKSk7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKHRoaXMuc3RhcnREYXRlKCkgJiYgdGhpcy5lbmREYXRlKCkpIHtcbiAgICAgIC8vIGlmIHdlIHVzZSByYW5nZXMgYW5kIHNob3VsZCBzaG93IHJhbmdlIGxhYmVsIG9uIGlucHV0XG4gICAgICBpZiAodGhpcy5xdWlja1Jhbmdlc0FycmF5KCkubGVuZ3RoICYmIHRoaXMuc2hvd1JhbmdlTGFiZWxPbklucHV0KCkgJiYgdGhpcy5zZWxlY3RlZFF1aWNrUmFuZ2UoKSAmJiB0aGlzLmRhdGVPcHRpb25zKCkuY3VzdG9tUmFuZ2VMYWJlbCAhPT0gdGhpcy5zZWxlY3RlZFF1aWNrUmFuZ2UoKSkge1xuICAgICAgICB0aGlzLnNlbGVjdGVkTGFiZWwuc2V0KHRoaXMuc2VsZWN0ZWRRdWlja1JhbmdlKCkpO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHRoaXMuc2VsZWN0ZWRMYWJlbC5zZXQoYCR7dGhpcy5zdGFydERhdGUoKT8uZm9ybWF0KCdERC9NTS9ZWVlZJyl9JHt0aGlzLmRhdGVPcHRpb25zKCkuc2VwYXJhdG9yfSR7dGhpcy5lbmREYXRlKCk/LmZvcm1hdCgnREQvTU0vWVlZWScpfWApO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlVmlldygpIHtcbiAgICBpZiAodGhpcy5oYXNUaW1lUGlja2VyKCkpIHtcbiAgICAgIHRoaXMucmVuZGVyVGltZVBpY2tlcihTaWRlRW51bS5sZWZ0KTtcbiAgICAgIHRoaXMucmVuZGVyVGltZVBpY2tlcihTaWRlRW51bS5yaWdodCk7XG4gICAgfVxuICAgIHRoaXMudXBkYXRlTW9udGhzSW5WaWV3KCk7XG4gICAgdGhpcy51cGRhdGVDYWxlbmRhcnMoKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0RGF0ZVdpdGhUaW1lKGRhdGU6IGRheWpzLkRheWpzLCBzaWRlOiBTaWRlRW51bSk6IGRheWpzLkRheWpzIHtcbiAgICBjb25zdCBob3VyID0gcGFyc2VJbnQoYCR7dGhpcy50aW1lcGlja2VyVmFyaWFibGVzKClbc2lkZV0oKS5zZWxlY3RlZEhvdXJ9YCwgMTApO1xuICAgIGNvbnN0IG1pbnV0ZSA9IHBhcnNlSW50KGAke3RoaXMudGltZXBpY2tlclZhcmlhYmxlcygpW3NpZGVdKCkuc2VsZWN0ZWRNaW51dGV9YCwgMTApO1xuICAgIGNvbnN0IHNlY29uZCA9IHRoaXMuaGFzU2Vjb25kUGlja2VyKCkgJiYgIWlzRW1wdHkodGhpcy50aW1lcGlja2VyVmFyaWFibGVzKClbc2lkZV0oKS5zZWxlY3RlZFNlY29uZCkgPyBwYXJzZUludChgJHt0aGlzLnRpbWVwaWNrZXJWYXJpYWJsZXMoKVtzaWRlXSgpLnNlbGVjdGVkU2Vjb25kfWAsIDEwKSA6IDA7XG5cbiAgICByZXR1cm4gZGF0ZS5jbG9uZSgpLmhvdXIoaG91cikubWludXRlKG1pbnV0ZSkuc2Vjb25kKHNlY29uZCk7XG4gIH1cblxuICBwcml2YXRlIHRyYW5zZm9ybU1pbk1heERhdGUodmFsdWU6IGRheWpzLkRheWpzIHwgc3RyaW5nIHwgdW5kZWZpbmVkKTogZGF5anMuRGF5anMgfCB1bmRlZmluZWQge1xuICAgIGlmIChpc0VtcHR5KHZhbHVlKSkge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgaWYgKGRheWpzLmlzRGF5anModmFsdWUpKSB7XG4gICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICByZXR1cm4gZGF5anModmFsdWUpO1xuICAgIH1cblxuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBwcml2YXRlIGNvbXB1dGVkRGlzcGxheVRpbWUoc2lkZTogSVRpbWVwaWNrZXJWYXJpYWJsZXNTaWRlKSB7XG4gICAgbGV0IHN0ckhvdXJzOiBzdHJpbmcgfCBudW1iZXIgfCB1bmRlZmluZWQgPSBzaWRlLnNlbGVjdGVkSG91cjtcbiAgICBsZXQgc3RyTWludXRlOiBzdHJpbmcgfCBudW1iZXIgfCB1bmRlZmluZWQgPSBzaWRlLnNlbGVjdGVkTWludXRlO1xuXG4gICAgaWYgKChzaWRlLnNlbGVjdGVkSG91ciB8fCAwKSA8IDEwKSB7XG4gICAgICBzdHJIb3VycyA9IGAwJHtzaWRlLnNlbGVjdGVkSG91ciA/PyAwfWA7XG4gICAgfVxuXG4gICAgaWYgKChzaWRlLnNlbGVjdGVkTWludXRlIHx8IDApIDwgMTApIHtcbiAgICAgIHN0ck1pbnV0ZSA9IGAwJHtzaWRlLnNlbGVjdGVkTWludXRlID8/IDB9YDtcbiAgICB9XG5cbiAgICByZXR1cm4gYCR7c3RySG91cnN9OiR7c3RyTWludXRlfWA7XG4gIH1cblxuICBwcml2YXRlIGNvbXB1dGVkRGlzcGxheVRpbWVJbnB1dChzaWRlOiBTaWRlRW51bSwgdGltZVR5cGU6ICdob3VyJyB8ICdtaW51dGUnKSB7XG4gICAgY29uc3QgdGltZSA9IHRpbWVUeXBlID09PSAnaG91cicgPyAoc2lkZSA9PT0gU2lkZUVudW0ubGVmdCA/IHRoaXMudGltZXBpY2tlclZhbHVlSXRlbSgpLmxlZnRob3VyKCkgOiB0aGlzLnRpbWVwaWNrZXJWYWx1ZUl0ZW0oKS5yaWdodGhvdXIoKSkgOiAoc2lkZSA9PT0gU2lkZUVudW0ubGVmdCA/IHRoaXMudGltZXBpY2tlclZhbHVlSXRlbSgpLmxlZnRtaW51dGUoKSA6IHRoaXMudGltZXBpY2tlclZhbHVlSXRlbSgpLnJpZ2h0bWludXRlKCkpO1xuXG4gICAgaWYgKCF0aW1lKSB7XG4gICAgICByZXR1cm4gJzAwJztcbiAgICB9XG4gICAgaWYgKHRpbWUgPCAxMCkge1xuICAgICAgcmV0dXJuIGAwJHt0aW1lfWA7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRpbWU7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICByZXR1cm47XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJsaWJzLXVpLWNvbXBvbmVudC1jdXN0b21fcmFuZ2VzLWNhbGVuZGFyIHRlc3QtY2xhc3NcIj5cbiAgPGRpdiBjbGFzcz1cInJlbGF0aXZlIGZsZXhcIj5cbiAgICA8ZGl2IGNsYXNzPVwibGlicy11aS1jb21wb25lbnQtY3VzdG9tX3Jhbmdlcy1jYWxlbmRhclwiXG4gICAgICBbY2xhc3MucmlnaHRdPVwiaXNTaW5nbGUoKVwiXG4gICAgICBbY2xhc3MubGVmdF09XCIhaXNTaW5nbGUoKVwiPlxuICAgICAgPGRpdiBjbGFzcz1cInJvdW5kZWQtWzRweF0gYmctWyNmZmZmZmZdXCI+XG4gICAgICAgIEBpZiAoY2FsZW5kYXJWYXJpYWJsZXMoKTsgYXMgY2FsZW5kYXJWYXJpYWJsZXMpIHtcbiAgICAgICAgICA8dGFibGU+XG4gICAgICAgICAgICA8dGhlYWQ+XG4gICAgICAgICAgICAgIDx0cj5cbiAgICAgICAgICAgICAgICA8dGggY29sc3Bhbj1cIjdcIlxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJtb250aFwiPlxuICAgICAgICAgICAgICAgICAgQGlmIChzaG93RHJvcGRvd25zU2VsZWN0KCkgJiYgY2FsZW5kYXJWYXJpYWJsZXMubGVmdCgpLmRyb3Bkb3ducz8uKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIiFmbGV4IG1iLVsxMHB4XSB3LWZ1bGxcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidy0zLzQgZmxleCBpdGVtcy1jZW50ZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9J21yLVs4cHhdJz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpYnNfdWktY29tcG9uZW50cy1kcm9wZG93biBbaXNOZ0NvbnRlbnRdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3pJbmRleF09XCJ6SW5kZXgoKSArIDFcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtwb3BvdmVyQ3VzdG9tQ29uZmlnXT1cInt3aWR0aEJ5UGFyZW50OmZhbHNlLGlnbm9yZUFycm93OnRydWUscGFkZGluZ0xlZnRJdGVtOiB0cnVlLCBjbGFzc0luY2x1ZGU6ICchdy1bMTMwcHhdJyxwb3NpdGlvbjp7IG1vZGU6J2NlbnRlcicsZGlzdGFuY2U6MH19XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbGlzdE1heEl0ZW1TaG93XT1cIjEwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbGlzdENsaWNrRXhhY3RseV09XCJmYWxzZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2xpc3RLZXlzRGlzYWJsZV09XCJkaXNhYmxlTW9udGgoKS5sZWZ0KClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtsaXN0SGFzQnV0dG9uVW5TZWxlY3RPcHRpb25dPVwiZmFsc2VcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjb252ZXJ0SXRlbVNlbGVjdGVkXT1cImNvbnZlcnRJdGVtTW9udGhcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtsaXN0Q29uZmlnXT1cImxpc3RNb250aHNDb25maWcoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2xpc3RLZXlTZWxlY3RlZF09XCJsaXN0S2V5RnJvbVNlbGVjdGVkKCkubW9udGhcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtmbGFnTW91c2VdPVwiZmxhZ01vdXNlKClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtsaXN0SGlkZGVuSW5wdXRTZWFyY2hdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2h0dHBSZXF1ZXN0RGV0YWlsSXRlbUJ5SWRdPVwibW9udGhIdHRwRGV0YWlsQ29uZmlnKClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChvdXRTZWxlY3RLZXkpPVwiaGFuZGxlclNlbGVjdGVkRHJvcGRvd24oJGV2ZW50LCBzaWRlRW51bS5sZWZ0ICsgJ21vbnRoJylcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChvdXRGdW5jdGlvbnNDb250cm9sKT1cImhhbmRsZXJGdW5jdGlvbkNvbnRyb2woJGV2ZW50LCBzaWRlRW51bS5sZWZ0ICsgJ21vbnRoJylcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChvdXRDaGFuZ1N0YWdlRmxhZ01vdXNlKT1cImhhbmRsZXJDaGFuZ2VGbGFnTW91c2UoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKG91dFNob3dMaXN0KT1cImhhbmRsZXJTaG93TGlzdERyb3Bkb3duKCRldmVudCwgc2lkZUVudW0ubGVmdCArICdtb250aCcpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImxpYnMtdWktY29tcG9uZW50LWN1c3RvbV9yYW5nZXMtY2FsZW5kYXItZHJvcGRvd25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLnRleHQtW3ZhcigtLWxpYnMtdWktY29sb3ItZGFyayldXT1cImNoZWNrU2hvd0xpc3REcm9wZG93bigpW3NpZGVFbnVtLmxlZnQgKyAnbW9udGgnXVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MudGV4dC1bIzZhNzM4M11dPVwiIWNoZWNrU2hvd0xpc3REcm9wZG93bigpW3NpZGVFbnVtLmxlZnQgKyAnbW9udGgnXVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImxpYnMtdWktZm9udC1oNG1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc3R5bGUuZm9udFdlaWdodF09XCI1MDBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc3R5bGUuZm9udFN0eWxlXT1cIidub3JtYWwnXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGRhdGVPcHRpb25zKCkubW9udGhOYW1lcyAmJiBjYWxlbmRhclZhcmlhYmxlcy5sZWZ0KCkuY2FsZW5kYXIgJiYgZGF0ZU9wdGlvbnMoKS5tb250aE5hbWVzW2NhbGVuZGFyVmFyaWFibGVzLmxlZnQoKS5jYWxlbmRhcj8uWzFdPy5bMV0/Lm1vbnRoKCkgPz8gLTFdIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwibGlicy11aS1pY29uLWNoZXZyb24tcmlnaHQgdGV4dC1bMTNweF0gdGV4dC1bIzZhNzM4M11cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MudGV4dC1bdmFyKC0tbGlicy11aS1jb2xvci1kYXJrKV1dPVwiY2hlY2tTaG93TGlzdERyb3Bkb3duKClbc2lkZUVudW0ubGVmdCArICdtb250aCddXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3N0eWxlLmZvbnRXZWlnaHRdPVwiNTAwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3N0eWxlLnJvdGF0ZV09XCIhY2hlY2tTaG93TGlzdERyb3Bkb3duKClbc2lkZUVudW0ubGVmdCArICdtb250aCddID8gJzkwZGVnJzonMjcwZGVnJ1wiPjwvaT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saWJzX3VpLWNvbXBvbmVudHMtZHJvcGRvd24+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxsaWJzX3VpLWNvbXBvbmVudHMtZHJvcGRvd24gW2xpc3RNYXhJdGVtU2hvd109XCIxMFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2lzTmdDb250ZW50XT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt6SW5kZXhdPVwiekluZGV4KCkgKyAxXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcG9wb3ZlckN1c3RvbUNvbmZpZ109XCJ7d2lkdGhCeVBhcmVudDpmYWxzZSxpZ25vcmVBcnJvdzp0cnVlLHBhZGRpbmdMZWZ0SXRlbTogdHJ1ZSxjbGFzc0luY2x1ZGU6ICchdy1bMTEwcHhdJyxwb3NpdGlvbjp7bW9kZTonY2VudGVyJyxkaXN0YW5jZTowfX1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtsaXN0Q2xpY2tFeGFjdGx5XT1cImZhbHNlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbGlzdEhhc0J1dHRvblVuU2VsZWN0T3B0aW9uXT1cImZhbHNlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY29udmVydEl0ZW1TZWxlY3RlZF09XCJjb252ZXJ0SXRlbVllYXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtsaXN0SGlkZGVuSW5wdXRTZWFyY2hdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2xpc3RDb25maWddPVwibGlzdExlZnRZZWFyQ29uZmlnKClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtsaXN0S2V5U2VsZWN0ZWRdPVwibGlzdEtleUZyb21TZWxlY3RlZCgpLnllYXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtmbGFnTW91c2VdPVwiZmxhZ01vdXNlKClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtodHRwUmVxdWVzdERldGFpbEl0ZW1CeUlkXT1cImxlZnRZZWFySHR0cERldGFpbENvbmZpZygpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAob3V0Q2hhbmdTdGFnZUZsYWdNb3VzZSk9XCJoYW5kbGVyQ2hhbmdlRmxhZ01vdXNlKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChvdXRTaG93TGlzdCk9XCJoYW5kbGVyU2hvd0xpc3REcm9wZG93bigkZXZlbnQsIHNpZGVFbnVtLmxlZnQgKyAneWVhcicpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAob3V0U2VsZWN0S2V5KT1cImhhbmRsZXJTZWxlY3RlZERyb3Bkb3duKCRldmVudCwgc2lkZUVudW0ubGVmdCArICd5ZWFyJylcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChvdXRGdW5jdGlvbnNDb250cm9sKT1cImhhbmRsZXJGdW5jdGlvbkNvbnRyb2woJGV2ZW50LCBzaWRlRW51bS5sZWZ0ICsgJ3llYXInKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJsaWJzLXVpLWNvbXBvbmVudC1jdXN0b21fcmFuZ2VzLWNhbGVuZGFyLWRyb3Bkb3duXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy50ZXh0LVt2YXIoLS1saWJzLXVpLWNvbG9yLWRhcmspXV09XCJjaGVja1Nob3dMaXN0RHJvcGRvd24oKVtzaWRlRW51bS5sZWZ0ICsgJ3llYXInXVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MudGV4dC1bIzZhNzM4M11dPVwiIWNoZWNrU2hvd0xpc3REcm9wZG93bigpW3NpZGVFbnVtLmxlZnQgKyAneWVhciddXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibGlicy11aS1mb250LWg0bVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzdHlsZS5mb250V2VpZ2h0XT1cIjUwMFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzdHlsZS5mb250U3R5bGVdPVwiJ25vcm1hbCdcIj57eyBjYWxlbmRhclZhcmlhYmxlcy5sZWZ0KCkuY2FsZW5kYXIgJiYgY2FsZW5kYXJWYXJpYWJsZXMubGVmdCgpLmNhbGVuZGFyPy5bMV0/LlsxXT8uZm9ybWF0KFwiIFlZWVlcIikgfX08L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwibGlicy11aS1pY29uLWNoZXZyb24tcmlnaHQgdGV4dC1bMTNweF0gdGV4dC1bIzZhNzM4M11cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MudGV4dC1bdmFyKC0tbGlicy11aS1jb2xvci1kYXJrKV1dPVwiY2hlY2tTaG93TGlzdERyb3Bkb3duKClbc2lkZUVudW0ubGVmdCArICd5ZWFyJ11cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc3R5bGUuZm9udFdlaWdodF09XCI1MDBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc3R5bGUucm90YXRlXT1cIiFjaGVja1Nob3dMaXN0RHJvcGRvd24oKVtzaWRlRW51bS5sZWZ0ICsgJ3llYXInXSA/ICc5MGRlZyc6JzI3MGRlZydcIj48L2k+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGlic191aS1jb21wb25lbnRzLWRyb3Bkb3duPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidy0xLzQgZmxleCBpdGVtcy1jZW50ZXIgcmVsYXRpdmVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAoIWNhbGVuZGFyVmFyaWFibGVzLmxlZnQoKS5taW5EYXRlIHx8IChjYWxlbmRhclZhcmlhYmxlcy5sZWZ0KCkubWluRGF0ZT8uaXNCZWZvcmUoY2FsZW5kYXJWYXJpYWJsZXMubGVmdCgpLmNhbGVuZGFyICYmIGNhbGVuZGFyVmFyaWFibGVzLmxlZnQoKS5jYWxlbmRhcj8uZmlyc3REYXkpKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IChjbGljayk9XCJoYW5kbGVyQ2xpY2tQcmV2KHNpZGVFbnVtLmxlZnQpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGFic29sdXRlIGxlZnQtMCB0b3AtWy0zcHhdXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImxpYnMtdWktaWNvbi1jaGV2cm9uLXJpZ2h0IHJvdGF0ZS1bMTgwZGVnXSB0ZXh0LVsjNmE3MzgzXSBjdXJzb3ItcG9pbnRlciBsaWJzLXVpLWNvbXBvbmVudC1jdXN0b21fcmFuZ2VzLWNhbGVuZGFyLWljb25cIj48L2k+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgQGlmICgoIWNhbGVuZGFyVmFyaWFibGVzLmxlZnQoKS5tYXhEYXRlIHx8IGNhbGVuZGFyVmFyaWFibGVzLmxlZnQoKS5tYXhEYXRlPy5pc0FmdGVyKGNhbGVuZGFyVmFyaWFibGVzLmxlZnQoKS5jYWxlbmRhciAmJiBjYWxlbmRhclZhcmlhYmxlcy5sZWZ0KCkuY2FsZW5kYXI/Lmxhc3REYXkpKSAmJiBpc1NpbmdsZSgpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKGNsaWNrKT1cImhhbmRsZXJDbGlja05leHQoc2lkZUVudW0ubGVmdClcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgbWwtWzEycHhdIGFic29sdXRlIHJpZ2h0LTAgdG9wLVstM3B4XVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJsaWJzLXVpLWljb24tY2hldnJvbi1yaWdodCB0ZXh0LVsjNmE3MzgzXSBjdXJzb3ItcG9pbnRlciBsaWJzLXVpLWNvbXBvbmVudC1jdXN0b21fcmFuZ2VzLWNhbGVuZGFyLWljb25cIj48L2k+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIEBpZiAoIXNob3dEcm9wZG93bnNTZWxlY3QoKSB8fCAhY2FsZW5kYXJWYXJpYWJsZXMubGVmdCgpLmRyb3Bkb3ducykge1xuICAgICAgICAgICAgICAgICAgICB7eyBkYXRlT3B0aW9ucygpLm1vbnRoTmFtZXMgJiYgY2FsZW5kYXJWYXJpYWJsZXMubGVmdCgpLmNhbGVuZGFyICYmIGRhdGVPcHRpb25zKCkubW9udGhOYW1lc1tjYWxlbmRhclZhcmlhYmxlcy5sZWZ0KCkuY2FsZW5kYXI/LlsxXT8uWzFdPy5tb250aCgpID8/IC0xXSB9fVxuICAgICAgICAgICAgICAgICAgICB7eyBjYWxlbmRhclZhcmlhYmxlcy5sZWZ0KCkuY2FsZW5kYXIgJiYgY2FsZW5kYXJWYXJpYWJsZXMubGVmdCgpLmNhbGVuZGFyPy5bMV0/LlsxXT8uZm9ybWF0KFwiIFlZWVlcIikgfX1cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICA8L3RoPlxuICAgICAgICAgICAgICA8L3RyPlxuICAgICAgICAgICAgICA8dHIgY2xhc3M9XCJ3ZWVrLWRheXNcIj5cbiAgICAgICAgICAgICAgICBAZm9yIChkYXlvZndlZWsgb2YgZGF0ZU9wdGlvbnMoKS5kYXlzT2ZXZWVrOyB0cmFjayBkYXlvZndlZWspIHtcbiAgICAgICAgICAgICAgICAgIDx0aD5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJsaWJzLXVpLWZvbnQtaDZtIHRleHQtWyM2YTczODNdXCJcbiAgICAgICAgICAgICAgICAgICAgICBbc3R5bGUuZm9udFdlaWdodF09XCI1MDBcIlxuICAgICAgICAgICAgICAgICAgICAgIFtzdHlsZS5mb250U3R5bGVdPVwiJ25vcm1hbCdcIj57eyBkYXlvZndlZWsgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICA8L3RoPlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgPC90cj5cbiAgICAgICAgICAgIDwvdGhlYWQ+XG4gICAgICAgICAgICA8dGJvZHkgY2xhc3M9XCJkcnAtYW5pbWF0ZVwiPlxuICAgICAgICAgICAgICBAZm9yIChyb3cgb2YgY2FsZW5kYXJWYXJpYWJsZXMubGVmdCgpLmNhbFJvd3M/LigpOyB0cmFjayByb3cpIHtcbiAgICAgICAgICAgICAgICA8dHIgY2xhc3M9XCJoLVszMnB4XVwiXG4gICAgICAgICAgICAgICAgICBbY2xhc3NdPVwiY2FsZW5kYXJWYXJpYWJsZXMubGVmdCgpLmNsYXNzZXMgJiYgY2FsZW5kYXJWYXJpYWJsZXMubGVmdCgpLmNsYXNzZXM/Lltyb3ddPy5jbGFzc0xpc3RcIj5cbiAgICAgICAgICAgICAgICAgIEBmb3IgKGNvbCBvZiBjYWxlbmRhclZhcmlhYmxlcy5sZWZ0KCkuY2FsQ29scz8uKCk7IHRyYWNrIGNvbCkge1xuICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJsaWJzLXVpLWZvbnQtaDVyXCJcbiAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MudG9kYXldPVwiY2FsZW5kYXJWYXJpYWJsZXMubGVmdCgpLmNhbGVuZGFyICYmIGNhbGVuZGFyVmFyaWFibGVzLmxlZnQoKS5jYWxlbmRhcj8uW3Jvd10/Lltjb2xdPy5kYXRlKCkgPT09IHRvZGF5KCkuZGF0ZSgpICYmIGNhbGVuZGFyVmFyaWFibGVzLmxlZnQoKS5jYWxlbmRhcj8uW3Jvd10/Lltjb2xdPy5tb250aCgpID09PSB0b2RheSgpLm1vbnRoKCkgJiYgY2FsZW5kYXJWYXJpYWJsZXMubGVmdCgpLmNhbGVuZGFyPy5bcm93XT8uW2NvbF0/LnllYXIoKSA9PT0gdG9kYXkoKS55ZWFyKClcIlxuICAgICAgICAgICAgICAgICAgICAgIFtjbGFzc109XCJjYWxlbmRhclZhcmlhYmxlcy5sZWZ0KCkuY2xhc3NlcyAmJiBjYWxlbmRhclZhcmlhYmxlcy5sZWZ0KCkuY2xhc3Nlcz8uW3Jvd10/Lltjb2xdXCJcbiAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiaGFuZGxlclBpY2tlckRhdGUoJGV2ZW50LCBzaWRlRW51bS5sZWZ0LCByb3csIGNvbClcIlxuICAgICAgICAgICAgICAgICAgICAgIChtb3VzZWVudGVyKT1cImhhbmRsZXJIb3ZlckRhdGUoJGV2ZW50LCBzaWRlRW51bS5sZWZ0LCByb3csIGNvbClcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImxpYnMtdWktZm9udC1oNXJcIj57eyBjYWxlbmRhclZhcmlhYmxlcy5sZWZ0KCkuY2FsZW5kYXIgJiYgY2FsZW5kYXJWYXJpYWJsZXMubGVmdCgpLmNhbGVuZGFyPy5bcm93XT8uW2NvbF0/LmRhdGUoKSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICA8L3RyPlxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA8L3Rib2R5PlxuICAgICAgICAgIDwvdGFibGU+XG4gICAgICAgIH1cbiAgICAgIDwvZGl2PlxuICAgICAgQGlmIChoYXNUaW1lUGlja2VyKCkpIHtcbiAgICAgICAgPGRpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBqdXN0aWZ5LWNlbnRlciBjb2x1bW4gaXRlbXMtY2VudGVyIHB0LVsxMnB4XVwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInctZnVsbCBmbGV4IGp1c3RpZnktY2VudGVyIGl0ZW1zLWNlbnRlciByb3VuZGVkLVs0cHhdIGJvcmRlclwiXG4gICAgICAgICAgICAgIFtjbGFzcy5ib3JkZXItWyNlNmU4ZWRdXT1cIiF0aW1lUGlja2VyRXJyb3IoKVwiXG4gICAgICAgICAgICAgIFtjbGFzcy5ib3JkZXItWyNmZjU0NTRdXT1cInRpbWVQaWNrZXJFcnJvcigpXCI+XG4gICAgICAgICAgICAgIDxsaWJzX3VpLWNvbXBvbmVudHMtaW5wdXRzLWlucHV0IGNsYXNzSW5jbHVkZT1cIiF3LVszMHB4XSAhcC0wICFib3JkZXItbm9uZSAhdGV4dC1jZW50ZXIgbGlicy11aS1mb250LWg0cyAhdGV4dC1bIzA3MTYzMV1cIlxuICAgICAgICAgICAgICAgIGRhdGFUeXBlPVwiaW50XCJcbiAgICAgICAgICAgICAgICBbZm9jdXNUaW1lT3V0XT1cIjBcIlxuICAgICAgICAgICAgICAgIFtibHVyVGltZU91dF09XCIwXCJcbiAgICAgICAgICAgICAgICBbYXV0b0FkZFplcm9MZXNzVGhhbjEwSW5UeXBlSW50XT1cInRydWVcIlxuICAgICAgICAgICAgICAgIFtlbWl0RW1wdHlJbkRhdGFUeXBlTnVtYmVyXT1cInRydWVcIlxuICAgICAgICAgICAgICAgIFttYXhWYWx1ZU51bWJlcl09XCIyM1wiXG4gICAgICAgICAgICAgICAgW21pblZhbHVlTnVtYmVyXT1cIjBcIlxuICAgICAgICAgICAgICAgIFttYXhMZW5ndGhdPVwiMlwiXG4gICAgICAgICAgICAgICAgW3ZhbHVlXT1cInRpbWVwaWNrZXJWYWx1ZUl0ZW0oKS5sZWZ0aG91cigpXCJcbiAgICAgICAgICAgICAgICAob3V0SW5wdXRFdmVudCk9XCJoYW5kbGVySW5wdXRFdmVudCgkZXZlbnQsICdsZWZ0aG91cicpXCJcbiAgICAgICAgICAgICAgICAob3V0RnVuY3Rpb25zQ29udHJvbCk9XCJoYW5kbGVyRnVuY3Rpb25Db250cm9sKCRldmVudCwgc2lkZUVudW0ubGVmdCArICdob3VyJylcIlxuICAgICAgICAgICAgICAgIChvdXRDaGFuZ2UpPVwiaGFuZGxlckNoYW5nZVRpbWVWYWx1ZSgkZXZlbnQsICdsZWZ0aG91cicpXCJcbiAgICAgICAgICAgICAgICAob3V0Rm9jdXNBbmRCbHVyRXZlbnQpPVwiaGFuZGxlckZvY3VzQW5kQmx1clRpbWUoJGV2ZW50LCAnbGVmdGhvdXInKVwiIC8+XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibGlicy11aS1mb250LWgzcyB0ZXh0LVsjMzMzMzMzXVwiPjo8L3NwYW4+XG4gICAgICAgICAgICAgIDxsaWJzX3VpLWNvbXBvbmVudHMtaW5wdXRzLWlucHV0IGNsYXNzSW5jbHVkZT1cIiF3LVszMHB4XSAhcC0wICFib3JkZXItbm9uZSAhdGV4dC1jZW50ZXIgIWxpYnMtdWktZm9udC1oNHMgIXRleHQtWyMwNzE2MzFdXCJcbiAgICAgICAgICAgICAgICBbYXV0b0FkZFplcm9MZXNzVGhhbjEwSW5UeXBlSW50XT1cInRydWVcIlxuICAgICAgICAgICAgICAgIFtlbWl0RW1wdHlJbkRhdGFUeXBlTnVtYmVyXT1cInRydWVcIlxuICAgICAgICAgICAgICAgIGRhdGFUeXBlPVwiaW50XCJcbiAgICAgICAgICAgICAgICBbZm9jdXNUaW1lT3V0XT1cIjBcIlxuICAgICAgICAgICAgICAgIFtibHVyVGltZU91dF09XCIwXCJcbiAgICAgICAgICAgICAgICBbbWF4VmFsdWVOdW1iZXJdPVwiNTlcIlxuICAgICAgICAgICAgICAgIFttaW5WYWx1ZU51bWJlcl09XCIwXCJcbiAgICAgICAgICAgICAgICBbbWF4TGVuZ3RoXT1cIjJcIlxuICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJ0aW1lcGlja2VyVmFsdWVJdGVtKCkubGVmdG1pbnV0ZSgpXCJcbiAgICAgICAgICAgICAgICAob3V0RnVuY3Rpb25zQ29udHJvbCk9XCJoYW5kbGVyRnVuY3Rpb25Db250cm9sKCRldmVudCwgc2lkZUVudW0ubGVmdCArICdtaW51dGUnKVwiXG4gICAgICAgICAgICAgICAgKG91dElucHV0RXZlbnQpPVwiaGFuZGxlcklucHV0RXZlbnQoJGV2ZW50LCAnbGVmdG1pbnV0ZScpXCJcbiAgICAgICAgICAgICAgICAob3V0Q2hhbmdlKT1cImhhbmRsZXJDaGFuZ2VUaW1lVmFsdWUoJGV2ZW50LCAnbGVmdG1pbnV0ZScpXCJcbiAgICAgICAgICAgICAgICAob3V0Rm9jdXNBbmRCbHVyRXZlbnQpPVwiaGFuZGxlckZvY3VzQW5kQmx1clRpbWUoJGV2ZW50LCAnbGVmdG1pbnV0ZScpXCIgLz5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIH1cbiAgICA8L2Rpdj5cblxuICAgIEBpZiAoIWlzU2luZ2xlKCkpIHtcbiAgICAgIDxkaXYgY2xhc3M9XCJsaWJzLXVpLWNvbXBvbmVudC1jdXN0b21fcmFuZ2VzLWNhbGVuZGFyIHJpZ2h0IG1sLVsyNHB4XVwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwicm91bmRlZC1bNHB4XSBiZy1bI2ZmZmZmZl1cIj5cbiAgICAgICAgICBAaWYgKGNhbGVuZGFyVmFyaWFibGVzKCkpIHtcbiAgICAgICAgICAgIDx0YWJsZT5cbiAgICAgICAgICAgICAgPHRoZWFkPlxuICAgICAgICAgICAgICAgIDx0cj5cbiAgICAgICAgICAgICAgICAgIDx0aCBjb2xzcGFuPVwiN1wiXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibW9udGhcIj5cbiAgICAgICAgICAgICAgICAgICAgQGlmIChzaG93RHJvcGRvd25zU2VsZWN0KCkgJiYgY2FsZW5kYXJWYXJpYWJsZXMoKS5sZWZ0KCkuZHJvcGRvd25zPy4oKSkge1xuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCIhZmxleCBtYi1bMTBweF0gdy1mdWxsXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidy0zLzQgZmxleCBpdGVtcy1jZW50ZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0nbXItWzhweF0nPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaWJzX3VpLWNvbXBvbmVudHMtZHJvcGRvd24gW2lzTmdDb250ZW50XT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3pJbmRleF09XCJ6SW5kZXgoKSArIDFcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3BvcG92ZXJDdXN0b21Db25maWddPVwie3dpZHRoQnlQYXJlbnQ6ZmFsc2UsaWdub3JlQXJyb3c6dHJ1ZSxwYWRkaW5nTGVmdEl0ZW06IHRydWUsY2xhc3NJbmNsdWRlOiAnIXctWzEzMHB4XScscG9zaXRpb246e21vZGU6J2NlbnRlcicsZGlzdGFuY2U6MH19XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtsaXN0TWF4SXRlbVNob3ddPVwiMTBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2xpc3RDbGlja0V4YWN0bHldPVwiZmFsc2VcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2xpc3RLZXlzRGlzYWJsZV09XCJkaXNhYmxlTW9udGgoKS5yaWdodCgpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtsaXN0SGFzQnV0dG9uVW5TZWxlY3RPcHRpb25dPVwiZmFsc2VcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NvbnZlcnRJdGVtU2VsZWN0ZWRdPVwiY29udmVydEl0ZW1Nb250aFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbGlzdEhpZGRlbklucHV0U2VhcmNoXT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2xpc3RDb25maWddPVwibGlzdE1vbnRoc0NvbmZpZygpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtsaXN0S2V5U2VsZWN0ZWRdPVwibGlzdEtleVRvU2VsZWN0ZWQoKS5tb250aFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZmxhZ01vdXNlXT1cImZsYWdNb3VzZSgpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtodHRwUmVxdWVzdERldGFpbEl0ZW1CeUlkXT1cIm1vbnRoSHR0cERldGFpbENvbmZpZygpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChvdXRGdW5jdGlvbnNDb250cm9sKT1cImhhbmRsZXJGdW5jdGlvbkNvbnRyb2woJGV2ZW50LCBzaWRlRW51bS5yaWdodCArICdtb250aCcpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChvdXRTZWxlY3RLZXkpPVwiaGFuZGxlclNlbGVjdGVkRHJvcGRvd24oJGV2ZW50LCBzaWRlRW51bS5yaWdodCArICdtb250aCcpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChvdXRDaGFuZ1N0YWdlRmxhZ01vdXNlKT1cImhhbmRsZXJDaGFuZ2VGbGFnTW91c2UoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAob3V0U2hvd0xpc3QpPVwiaGFuZGxlclNob3dMaXN0RHJvcGRvd24oJGV2ZW50LCBzaWRlRW51bS5yaWdodCArICdtb250aCcpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibGlicy11aS1jb21wb25lbnQtY3VzdG9tX3Jhbmdlcy1jYWxlbmRhci1kcm9wZG93blwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy50ZXh0LVt2YXIoLS1saWJzLXVpLWNvbG9yLWRhcmspXV09XCJjaGVja1Nob3dMaXN0RHJvcGRvd24oKVtzaWRlRW51bS5yaWdodCArICdtb250aCddXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLnRleHQtWyM2YTczODNdXT1cIiFjaGVja1Nob3dMaXN0RHJvcGRvd24oKVtzaWRlRW51bS5yaWdodCArICdtb250aCddXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJsaWJzLXVpLWZvbnQtaDRtXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MudGV4dC1bdmFyKC0tbGlicy11aS1jb2xvci1kYXJrKV1dPVwiY2hlY2tTaG93TGlzdERyb3Bkb3duKClbc2lkZUVudW0ucmlnaHQgKyAnbW9udGgnXVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3N0eWxlLmZvbnRXZWlnaHRdPVwiNTAwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc3R5bGUuZm9udFN0eWxlXT1cIidub3JtYWwnXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgZGF0ZU9wdGlvbnMoKS5tb250aE5hbWVzICYmIGNhbGVuZGFyVmFyaWFibGVzKCkucmlnaHQoKS5jYWxlbmRhciAmJiBkYXRlT3B0aW9ucygpLm1vbnRoTmFtZXNbIGNhbGVuZGFyVmFyaWFibGVzKCkucmlnaHQoKS5jYWxlbmRhcj8uWzFdPy5bMV0/Lm1vbnRoKCkgPz8gLTFdIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImxpYnMtdWktaWNvbi1jaGV2cm9uLXJpZ2h0IHRleHQtWzEzcHhdIHRleHQtWyM2YTczODNdXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc3R5bGUuZm9udFdlaWdodF09XCI1MDBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzdHlsZS5yb3RhdGVdPVwiIWNoZWNrU2hvd0xpc3REcm9wZG93bigpW3NpZGVFbnVtLnJpZ2h0ICsgJ21vbnRoJ10gPyAnOTBkZWcnOicyNzBkZWcnXCI+PC9pPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saWJzX3VpLWNvbXBvbmVudHMtZHJvcGRvd24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaWJzX3VpLWNvbXBvbmVudHMtZHJvcGRvd24gW2xpc3RNYXhJdGVtU2hvd109XCIxMFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbekluZGV4XT1cInpJbmRleCgpICsgMVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaXNOZ0NvbnRlbnRdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcG9wb3ZlckN1c3RvbUNvbmZpZ109XCJ7d2lkdGhCeVBhcmVudDpmYWxzZSxpZ25vcmVBcnJvdzp0cnVlLHBhZGRpbmdMZWZ0SXRlbTogdHJ1ZSwgY2xhc3NJbmNsdWRlOiAnIXctWzExMHB4XScsICBwb3NpdGlvbjp7bW9kZTonY2VudGVyJywgZGlzdGFuY2U6MH19XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtsaXN0Q2xpY2tFeGFjdGx5XT1cImZhbHNlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtsaXN0SGFzQnV0dG9uVW5TZWxlY3RPcHRpb25dPVwiZmFsc2VcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NvbnZlcnRJdGVtU2VsZWN0ZWRdPVwiY29udmVydEl0ZW1ZZWFyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtsaXN0SGlkZGVuSW5wdXRTZWFyY2hdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbGlzdENvbmZpZ109XCJsaXN0UmlnaHRZZWFyQ29uZmlnKClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2xpc3RLZXlTZWxlY3RlZF09XCJsaXN0S2V5VG9TZWxlY3RlZCgpLnllYXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2ZsYWdNb3VzZV09XCJmbGFnTW91c2UoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaHR0cFJlcXVlc3REZXRhaWxJdGVtQnlJZF09XCJyaWdodFllYXJIdHRwRGV0YWlsQ29uZmlnKClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG91dFNlbGVjdEtleSk9XCJoYW5kbGVyU2VsZWN0ZWREcm9wZG93bigkZXZlbnQsIHNpZGVFbnVtLnJpZ2h0ICsgJ3llYXInKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAob3V0RnVuY3Rpb25zQ29udHJvbCk9XCJoYW5kbGVyRnVuY3Rpb25Db250cm9sKCRldmVudCwgc2lkZUVudW0ucmlnaHQgKyAneWVhcicpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChvdXRDaGFuZ1N0YWdlRmxhZ01vdXNlKT1cImhhbmRsZXJDaGFuZ2VGbGFnTW91c2UoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAob3V0U2hvd0xpc3QpPVwiaGFuZGxlclNob3dMaXN0RHJvcGRvd24oJGV2ZW50LCBzaWRlRW51bS5yaWdodCArICd5ZWFyJylcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJsaWJzLXVpLWNvbXBvbmVudC1jdXN0b21fcmFuZ2VzLWNhbGVuZGFyLWRyb3Bkb3duXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLnRleHQtW3ZhcigtLWxpYnMtdWktY29sb3ItZGFyayldXT1cImNoZWNrU2hvd0xpc3REcm9wZG93bigpW3NpZGVFbnVtLnJpZ2h0ICsgJ3llYXInXVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy50ZXh0LVsjNmE3MzgzXV09XCIhY2hlY2tTaG93TGlzdERyb3Bkb3duKClbc2lkZUVudW0ucmlnaHQgKyAneWVhciddXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJsaWJzLXVpLWZvbnQtaDRtXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc3R5bGUuZm9udFdlaWdodF09XCI1MDBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzdHlsZS5mb250U3R5bGVdPVwiJ25vcm1hbCdcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBjYWxlbmRhclZhcmlhYmxlcygpLnJpZ2h0KCkuY2FsZW5kYXIgJiYgY2FsZW5kYXJWYXJpYWJsZXMoKS5yaWdodCgpLmNhbGVuZGFyPy5bMV0/LlsxXT8uZm9ybWF0KFwiWVlZWVwiKSB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJsaWJzLXVpLWljb24tY2hldnJvbi1yaWdodCB0ZXh0LVsxM3B4XSB0ZXh0LVsjNmE3MzgzXVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLnRleHQtW3ZhcigtLWxpYnMtdWktY29sb3ItZGFyayldXT1cImNoZWNrU2hvd0xpc3REcm9wZG93bigpW3NpZGVFbnVtLnJpZ2h0ICsgJ3llYXInXVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3N0eWxlLmZvbnRXZWlnaHRdPVwiNTAwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc3R5bGUucm90YXRlXT1cIiFjaGVja1Nob3dMaXN0RHJvcGRvd24oKVtzaWRlRW51bS5yaWdodCArICd5ZWFyJ10gPyAnOTBkZWcnOicyNzBkZWcnXCI+PC9pPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saWJzX3VpLWNvbXBvbmVudHMtZHJvcGRvd24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidy0xLzQgZmxleCBpdGVtcy1jZW50ZXIgcmVsYXRpdmVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgQGlmIChsaXN0S2V5RnJvbVNlbGVjdGVkKCkueWVhciAmJiBsaXN0S2V5VG9TZWxlY3RlZCgpLnllYXIgJiYgISgoKGxpc3RLZXlGcm9tU2VsZWN0ZWQoKS55ZWFyICArMSkgPT09IGxpc3RLZXlUb1NlbGVjdGVkKCkueWVhcikgJiYgKGxpc3RLZXlGcm9tU2VsZWN0ZWQoKS5tb250aCA9PT0gMTIpICYmIGxpc3RLZXlUb1NlbGVjdGVkKCkubW9udGggPT09IDEpJiYgKGxpc3RLZXlGcm9tU2VsZWN0ZWQoKS55ZWFyIDwgbGlzdEtleVRvU2VsZWN0ZWQoKS55ZWFyKSB8fCBsaXN0S2V5RnJvbVNlbGVjdGVkKCkubW9udGggJiYgbGlzdEtleVRvU2VsZWN0ZWQoKS5tb250aCAmJiAoKGxpc3RLZXlGcm9tU2VsZWN0ZWQoKS5tb250aCArIDEpIDwgK2xpc3RLZXlUb1NlbGVjdGVkKCkubW9udGgpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGFic29sdXRlIGxlZnQtMCB0b3AtWy0zcHhdXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJoYW5kbGVyQ2xpY2tQcmV2KHNpZGVFbnVtLnJpZ2h0KVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJsaWJzLXVpLWljb24tY2hldnJvbi1yaWdodCByb3RhdGUtWzE4MGRlZ10gdGV4dC1bIzZhNzM4M10gY3Vyc29yLXBvaW50ZXIgbGlicy11aS1jb21wb25lbnQtY3VzdG9tX3Jhbmdlcy1jYWxlbmRhci1pY29uXCI+PC9pPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAobGlzdEtleUZyb21TZWxlY3RlZCgpLm1vbnRoICYmIGxpc3RLZXlUb1NlbGVjdGVkKCkubW9udGggJiYgKGxpc3RLZXlGcm9tU2VsZWN0ZWQoKS5tb250aCA+IGxpc3RLZXlUb1NlbGVjdGVkKCkubW9udGgpICYmIGxpc3RLZXlGcm9tU2VsZWN0ZWQoKS55ZWFyICYmIGxpc3RLZXlUb1NlbGVjdGVkKCkueWVhciAmJiAobGlzdEtleUZyb21TZWxlY3RlZCgpLnllYXIgPT09IGxpc3RLZXlUb1NlbGVjdGVkKCkueWVhciApKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJnLVsjZmZmZmZmXSB3LVsyMXB4XSBoLVsyMXB4XSBjdXJzb3Itbm9uZSBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciByb3VuZGVkLVs1MHB4XVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAoIWNhbGVuZGFyVmFyaWFibGVzKCkucmlnaHQoKS5tYXhEYXRlIHx8IChjYWxlbmRhclZhcmlhYmxlcygpLnJpZ2h0KCkubWF4RGF0ZT8uaXNBZnRlcihjYWxlbmRhclZhcmlhYmxlcygpLnJpZ2h0KCkuY2FsZW5kYXIgJiYgY2FsZW5kYXJWYXJpYWJsZXMoKS5yaWdodCgpLmNhbGVuZGFyPy5sYXN0RGF5KSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IChjbGljayk9XCJoYW5kbGVyQ2xpY2tOZXh0KHNpZGVFbnVtLnJpZ2h0KVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIG1sLVsxMnB4XSBhYnNvbHV0ZSByaWdodC0wIHRvcC1bLTNweF1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJsaWJzLXVpLWljb24tY2hldnJvbi1yaWdodCB0ZXh0LVsjNmE3MzgzXSBjdXJzb3ItcG9pbnRlciBsaWJzLXVpLWNvbXBvbmVudC1jdXN0b21fcmFuZ2VzLWNhbGVuZGFyLWljb25cIj48L2k+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgQGlmICghc2hvd0Ryb3Bkb3duc1NlbGVjdCgpIHx8ICAhY2FsZW5kYXJWYXJpYWJsZXMoKS5yaWdodCgpLmRyb3Bkb3ducykge1xuICAgICAgICAgICAgICAgICAgICAgIHt7IGRhdGVPcHRpb25zKCkubW9udGhOYW1lcyAmJiBjYWxlbmRhclZhcmlhYmxlcygpLnJpZ2h0KCkuY2FsZW5kYXIgJiYgZGF0ZU9wdGlvbnMoKS5tb250aE5hbWVzW2NhbGVuZGFyVmFyaWFibGVzKCkucmlnaHQoKS5jYWxlbmRhcj8uWzFdPy5bMV0/Lm1vbnRoKCkgPz8gLTFdIH19XG4gICAgICAgICAgICAgICAgICAgICAge3sgY2FsZW5kYXJWYXJpYWJsZXMoKS5yaWdodCgpLmNhbGVuZGFyICYmIGNhbGVuZGFyVmFyaWFibGVzKCkucmlnaHQoKS5jYWxlbmRhcj8uWzFdPy5bMV0/LmZvcm1hdChcIllZWVlcIikgfX1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgPC90aD5cbiAgICAgICAgICAgICAgICA8L3RyPlxuICAgICAgICAgICAgICAgIDx0ciBjbGFzcz1cIndlZWstZGF5c1wiPlxuICAgICAgICAgICAgICAgICAgQGZvciAoZGF5b2Z3ZWVrIG9mIGRhdGVPcHRpb25zKCkuZGF5c09mV2VlazsgdHJhY2sgZGF5b2Z3ZWVrKSB7XG4gICAgICAgICAgICAgICAgICAgIDx0aD5cbiAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImxpYnMtdWktZm9udC1oNm0gdGV4dC1bIzZhNzM4M11cIlxuICAgICAgICAgICAgICAgICAgICAgICAgW3N0eWxlLmZvbnRXZWlnaHRdPVwiNTAwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtzdHlsZS5mb250U3R5bGVdPVwiJ25vcm1hbCdcIj57eyBkYXlvZndlZWsgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDwvdGg+XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgPC90cj5cbiAgICAgICAgICAgICAgPC90aGVhZD5cbiAgICAgICAgICAgICAgPHRib2R5PlxuICAgICAgICAgICAgICAgIEBmb3IgKHJvdyBvZiBjYWxlbmRhclZhcmlhYmxlcygpLnJpZ2h0KCkuY2FsUm93cz8uKCk7IHRyYWNrIHJvdykge1xuICAgICAgICAgICAgICAgICAgPHRyIGNsYXNzPVwiaC1bMzJweF1cIlxuICAgICAgICAgICAgICAgICAgICBbY2xhc3NdPVwiY2FsZW5kYXJWYXJpYWJsZXMoKS5yaWdodCgpLmNsYXNzZXMgJiYgY2FsZW5kYXJWYXJpYWJsZXMoKS5yaWdodCgpLmNsYXNzZXM/Lltyb3ddPy5jbGFzc0xpc3RcIj5cbiAgICAgICAgICAgICAgICAgICAgQGZvciAoY29sIG9mIGNhbGVuZGFyVmFyaWFibGVzKCkucmlnaHQoKS5jYWxDb2xzPy4oKTsgdHJhY2sgY29sKSB7XG4gICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwibGlicy11aS1mb250LWg1clwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3NdPVwiY2FsZW5kYXJWYXJpYWJsZXMoKS5yaWdodCgpLmNsYXNzZXMgJiYgY2FsZW5kYXJWYXJpYWJsZXMoKS5yaWdodCgpLmNsYXNzZXM/Lltyb3ddPy5bY29sXVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MudG9kYXldPVwiY2FsZW5kYXJWYXJpYWJsZXMoKS5yaWdodCgpLmNhbGVuZGFyICYmIGNhbGVuZGFyVmFyaWFibGVzKCkucmlnaHQoKS5jYWxlbmRhcj8uW3Jvd10/Lltjb2xdPy5kYXRlKCkgPT09IHRvZGF5KCkuZGF0ZSgpICYmIGNhbGVuZGFyVmFyaWFibGVzKCkucmlnaHQoKS5jYWxlbmRhcj8uW3Jvd10/Lltjb2xdPy5tb250aCgpID09PSB0b2RheSgpLm1vbnRoKCkgJiYgY2FsZW5kYXJWYXJpYWJsZXMoKS5yaWdodCgpLmNhbGVuZGFyICYmY2FsZW5kYXJWYXJpYWJsZXMoKS5yaWdodCgpLmNhbGVuZGFyPy5bcm93XT8uW2NvbF0/LnllYXIoKSA9PT0gdG9kYXkoKS55ZWFyKClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImhhbmRsZXJQaWNrZXJEYXRlKCRldmVudCwgc2lkZUVudW0ucmlnaHQsIHJvdywgY29sKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAobW91c2VlbnRlcik9XCJoYW5kbGVySG92ZXJEYXRlKCRldmVudCwgc2lkZUVudW0ucmlnaHQsIHJvdywgY29sKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+e3sgY2FsZW5kYXJWYXJpYWJsZXMoKS5yaWdodCgpLmNhbGVuZGFyPy5bcm93XT8uW2NvbF0/LmRhdGUoKSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICA8L3RyPlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgPC90Ym9keT5cbiAgICAgICAgICAgIDwvdGFibGU+XG4gICAgICAgICAgfVxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgQGlmIChoYXNUaW1lUGlja2VyKCkpIHtcbiAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXgganVzdGlmeS1jZW50ZXIgaXRlbXMtY2VudGVyIHB0LVsxMnB4XVwiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidy1mdWxsIGZsZXgganVzdGlmeS1jZW50ZXIgaXRlbXMtY2VudGVyIHJvdW5kZWQtWzRweF0gYm9yZGVyXCJcbiAgICAgICAgICAgICAgICBbY2xhc3MuYm9yZGVyLVsjZTZlOGVkXV09XCIhdGltZVBpY2tlckVycm9yKClcIlxuICAgICAgICAgICAgICAgIFtjbGFzcy5ib3JkZXItWyNmZjU0NTRdXT1cInRpbWVQaWNrZXJFcnJvcigpXCI+XG4gICAgICAgICAgICAgICAgPGxpYnNfdWktY29tcG9uZW50cy1pbnB1dHMtaW5wdXQgY2xhc3NJbmNsdWRlPVwiIXctWzMwcHhdICFwLTAgIWJvcmRlci1ub25lICF0ZXh0LWNlbnRlciAhbGlicy11aS1mb250LWg0cyAhdGV4dC1bIzA3MTYzMV1cIlxuICAgICAgICAgICAgICAgICAgZGF0YVR5cGU9XCJpbnRcIlxuICAgICAgICAgICAgICAgICAgW2F1dG9BZGRaZXJvTGVzc1RoYW4xMEluVHlwZUludF09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgIFtlbWl0RW1wdHlJbkRhdGFUeXBlTnVtYmVyXT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgW21heFZhbHVlTnVtYmVyXT1cIjIzXCJcbiAgICAgICAgICAgICAgICAgIFttaW5WYWx1ZU51bWJlcl09XCIwXCJcbiAgICAgICAgICAgICAgICAgIFtmb2N1c1RpbWVPdXRdPVwiMFwiXG4gICAgICAgICAgICAgICAgICBbYmx1clRpbWVPdXRdPVwiMFwiXG4gICAgICAgICAgICAgICAgICBbbWF4TGVuZ3RoXT1cIjJcIlxuICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cInRpbWVwaWNrZXJWYWx1ZUl0ZW0oKS5yaWdodGhvdXIoKVwiXG4gICAgICAgICAgICAgICAgICAob3V0Q2hhbmdlKT1cImhhbmRsZXJDaGFuZ2VUaW1lVmFsdWUoJGV2ZW50LCAncmlnaHRob3VyJylcIlxuICAgICAgICAgICAgICAgICAgKG91dElucHV0RXZlbnQpPVwiaGFuZGxlcklucHV0RXZlbnQoJGV2ZW50LCdyaWdodGhvdXInKVwiXG4gICAgICAgICAgICAgICAgICAob3V0RnVuY3Rpb25zQ29udHJvbCk9XCJoYW5kbGVyRnVuY3Rpb25Db250cm9sKCRldmVudCwgJ3JpZ2h0aG91cicpXCJcbiAgICAgICAgICAgICAgICAgIChvdXRGb2N1c0FuZEJsdXJFdmVudCk9XCJoYW5kbGVyRm9jdXNBbmRCbHVyVGltZSgkZXZlbnQsICdyaWdodGhvdXInKVwiIC8+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJsaWJzLXVpLWZvbnQtaDNzIHRleHQtWyMzMzMzMzNdXCI+Ojwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8bGlic191aS1jb21wb25lbnRzLWlucHV0cy1pbnB1dCBjbGFzc0luY2x1ZGU9XCIhdy1bMzBweF0gIXAtMCAhYm9yZGVyLW5vbmUgIXRleHQtY2VudGVyIGxpYnMtdWktZm9udC1oNHMgIXRleHQtWyMwNzE2MzFdXCJcbiAgICAgICAgICAgICAgICAgIGRhdGFUeXBlPVwiaW50XCJcbiAgICAgICAgICAgICAgICAgIFthdXRvQWRkWmVyb0xlc3NUaGFuMTBJblR5cGVJbnRdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICBbZW1pdEVtcHR5SW5EYXRhVHlwZU51bWJlcl09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgIFttYXhWYWx1ZU51bWJlcl09XCI1OVwiXG4gICAgICAgICAgICAgICAgICBbbWluVmFsdWVOdW1iZXJdPVwiMFwiXG4gICAgICAgICAgICAgICAgICBbZm9jdXNUaW1lT3V0XT1cIjBcIlxuICAgICAgICAgICAgICAgICAgW2JsdXJUaW1lT3V0XT1cIjBcIlxuICAgICAgICAgICAgICAgICAgW21heExlbmd0aF09XCIyXCJcbiAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJ0aW1lcGlja2VyVmFsdWVJdGVtKCkucmlnaHRtaW51dGUoKVwiXG4gICAgICAgICAgICAgICAgICAob3V0SW5wdXRFdmVudCk9XCJoYW5kbGVySW5wdXRFdmVudCgkZXZlbnQsJ3JpZ2h0bWludXRlJylcIlxuICAgICAgICAgICAgICAgICAgKG91dEZ1bmN0aW9uc0NvbnRyb2wpPVwiaGFuZGxlckZ1bmN0aW9uQ29udHJvbCgkZXZlbnQsICdyaWdodG1pbnV0ZScpXCJcbiAgICAgICAgICAgICAgICAgIChvdXRDaGFuZ2UpPVwiaGFuZGxlckNoYW5nZVRpbWVWYWx1ZSgkZXZlbnQsICdyaWdodG1pbnV0ZScpXCJcbiAgICAgICAgICAgICAgICAgIChvdXRGb2N1c0FuZEJsdXJFdmVudCk9XCJoYW5kbGVyRm9jdXNBbmRCbHVyVGltZSgkZXZlbnQsICdyaWdodG1pbnV0ZScpXCIgLz5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgfVxuICAgICAgPC9kaXY+XG4gICAgfVxuXG4gIDwvZGl2PlxuICA8ZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJmbGV4IHctZnVsbFwiPlxuICAgICAgQGlmICghaXNTaW5nbGUoKSAmJiBoYXNUaW1lUGlja2VyKCkpIHtcbiAgICAgICAgPGRpdiBjbGFzcz1cIm10LVs4cHhdIGxpYnMtdWktZm9udC1oN3IgdGV4dC1bI2ZmNTQ1NF0gaC1bMTRweF1cIj5cbiAgICAgICAgICBAaWYgKHRpbWVQaWNrZXJFcnJvcigpKSB7XG4gICAgICAgICAgICA8c3Bhbj57eyAnaTE4bl9kYXRlX2NvbXBhcmVfc3RhcnRfZW5kX21lc3NhZ2VfZXJyb3InIHwgdHJhbnNsYXRlIH19PC9zcGFuPlxuICAgICAgICAgIH1cbiAgICAgICAgPC9kaXY+XG4gICAgICB9XG4gICAgPC9kaXY+XG4gICAgQGlmICghcXVpY2tSYW5nZXNBcnJheSgpLmxlbmd0aCB8fCAhaXNTaW5nbGUoKSkge1xuICAgICAgPGRpdiBjbGFzcz1cIiBmbGV4IHctZnVsbCBwdC1bMTZweF0ganVzdGlmeS1iZXR3ZWVuXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGl0ZW1zLWNlbnRlclwiPlxuICAgICAgICAgIEBpZiAoIWlzU2luZ2xlKCkpIHtcbiAgICAgICAgICAgIEBpZiAoIWVuZERhdGUoKSkge1xuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1bI2NkZDBkNl0gbGlicy11aS1mb250LWg2clwiPlxuICAgICAgICAgICAgICAgIDxzcGFuPnt7IHN0YXJ0RGF0ZSgpPy5mb3JtYXQoJ0REL01NL1lZWVknKSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICBAaWYgKGhhc1RpbWVQaWNrZXIoKSkge1xuICAgICAgICAgICAgICAgICAgPHNwYW4+IHt7IGNvbXB1dGVkRGlzcGxheVRpbWVMZWZ0KCkgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICZoeXBoZW47XG4gICAgICAgICAgICAgICAgPHNwYW4+e3sgc3RhcnREYXRlKCk/LmZvcm1hdCgnREQvTU0vWVlZWScpIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgIEBpZiAoaGFzVGltZVBpY2tlcigpKSB7XG4gICAgICAgICAgICAgICAgICA8c3Bhbj4ge3sgY29tcHV0ZWREaXNwbGF5VGltZVJpZ2h0KCkgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIEBpZiAoZW5kRGF0ZSgpKSB7XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LVsjY2RkMGQ2XSBsaWJzLXVpLWZvbnQtaDZyXCI+XG4gICAgICAgICAgICAgICAgPHNwYW4+e3sgc3RhcnREYXRlKCk/LmZvcm1hdCgnREQvTU0vWVlZWScpIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgIEBpZiAoaGFzVGltZVBpY2tlcigpKSB7XG4gICAgICAgICAgICAgICAgICA8c3Bhbj4ge3sgY29tcHV0ZWREaXNwbGF5VGltZUxlZnQoKSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgJmh5cGhlbjtcbiAgICAgICAgICAgICAgICA8c3Bhbj57eyBlbmREYXRlKCk/LmZvcm1hdCgnREQvTU0vWVlZWScpIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgIEBpZiAoaGFzVGltZVBpY2tlcigpKSB7XG4gICAgICAgICAgICAgICAgICA8c3Bhbj4ge3sgY29tcHV0ZWREaXNwbGF5VGltZVJpZ2h0KCkgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4XCI+XG4gICAgICAgICAgPGxpYnNfdWktY29tcG9uZW50cy1idXR0b25zLWJ1dHRvbiBjbGFzcz1cIm1yLVsxMnB4XVwiXG4gICAgICAgICAgICBsYWJlbD1cImkxOG5fY2FuY2VsXCJcbiAgICAgICAgICAgIHR5cGU9XCJidXR0b24tdGhpcmRcIlxuICAgICAgICAgICAgKG91dENsaWNrKT1cImhhbmRsZXJDbGlja0NhbmNlbCgkZXZlbnQpXCIgLz5cbiAgICAgICAgICA8bGlic191aS1jb21wb25lbnRzLWJ1dHRvbnMtYnV0dG9uIGxhYmVsPVwiaTE4bl9zZWxlY3RcIlxuICAgICAgICAgICAgKG91dENsaWNrKT1cImhhbmRsZXJDbGlja0FwcGx5KCRldmVudClcIiAvPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIH1cbiAgPC9kaXY+XG48L2Rpdj5cbiJdfQ==
|