@libs-ui/components-list 0.2.254 → 0.2.256
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/defines/list.define.d.ts +1 -1
- package/esm2022/templates/group/group.component.mjs +2 -2
- package/fesm2022/libs-ui-components-list.mjs +1 -1
- package/fesm2022/libs-ui-components-list.mjs.map +1 -1
- package/list.component.d.ts +1 -1
- package/package.json +23 -23
- package/templates/templates.component.abstract.d.ts +1 -1
package/defines/list.define.d.ts
CHANGED
|
@@ -5,6 +5,6 @@ import { LibsUiComponentsListRadioComponent } from "../templates/radio/radio.com
|
|
|
5
5
|
import { LibsUiComponentsListTagComponent } from "../templates/tag/tag.component";
|
|
6
6
|
import { LibsUiComponentsListTextComponent } from "../templates/text/text.component";
|
|
7
7
|
import { IListConfigItem } from './../interfaces/config-item.interface';
|
|
8
|
-
export declare const getComponentByType: (typeTemplate: TYPE_TEMPLATE) => typeof
|
|
8
|
+
export declare const getComponentByType: (typeTemplate: TYPE_TEMPLATE) => typeof LibsUiComponentsListCheckboxComponent | typeof LibsUiComponentsListGroupComponent | typeof LibsUiComponentsListRadioComponent | typeof LibsUiComponentsListTextComponent | typeof LibsUiComponentsListTagComponent;
|
|
9
9
|
export declare const getFieldKeyByType: (config: IListConfigItem | undefined, fieldKeyDefault: string) => string;
|
|
10
10
|
export declare const initConfig: (config: IListConfigItem) => void;
|
|
@@ -495,7 +495,7 @@ export class LibsUiComponentsListGroupComponent extends LibsUiComponentsListTemp
|
|
|
495
495
|
itemMap.update(current => {
|
|
496
496
|
const children = current[configTemplateGroup.fieldGetItems];
|
|
497
497
|
const data = this.filterItemsDisplay(this.convertDataByGroupInItem(itemGroup?.() || [], itemMap));
|
|
498
|
-
children
|
|
498
|
+
children?.set(data);
|
|
499
499
|
if (current[configTemplateGroup.fieldGetItems]?.()) {
|
|
500
500
|
current[configTemplateGroup.fieldGetItems].update((itemFields) => {
|
|
501
501
|
if (!itemFields.length) {
|
|
@@ -777,4 +777,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
777
777
|
LibsUiComponentsListGroupItemComponent
|
|
778
778
|
], template: "@if (configTemplateGroup(); as configTemplateGroup) {\n @let varHtmlHeightViewPort = heightViewPort() ? heightViewPort()+'px':'100%';\n @let varHtmlDisable = loading() || disable() || false;\n <div class=\"libs-ui-list-group overflow-[hidden]\"\n [style.height]=\"varHtmlHeightViewPort\">\n <div class=\"flex flex-col w-full h-full relative min-h-[28px]\">\n @if (items().length && configTemplateGroup.configButtonSelectAndUndSelectItem?.(); as configButtonSelectItem) {\n <div\n [class]=\"'flex items-center bg-[#ffffff] '+(configButtonSelectItem.classInclude ?? 'libs-ui-border-bottom-general')\">\n <libs_ui-components-buttons-button\n [type]=\"configButtonSelectItem.buttonCheckAll?.type ?? 'button-link-primary'\"\n [label]=\"configButtonSelectItem.buttonCheckAll?.label ?? 'i18n_select_all_searched_results'\"\n [classInclude]=\"configButtonSelectItem.buttonCheckAll?.classInclude || 'pr-[8px]'\"\n [classLabel]=\"configButtonSelectItem.buttonCheckAll?.classLabel || 'libs-ui-font-h6r'\"\n [disable]=\"varHtmlDisable\"\n (outClick)=\"handlerCheckedOrUnCheckedAll(true)\" />\n <div class=\"text-[#999999]\">|</div>\n <libs_ui-components-buttons-button\n [type]=\"configButtonSelectItem.buttonUncheckAll?.type ?? 'button-link-primary'\"\n [label]=\"configButtonSelectItem.buttonUncheckAll?.label ?? 'i18n_unselect_all_searched_results'\"\n [classInclude]=\"configButtonSelectItem.buttonUncheckAll?.classInclude || 'pl-[8px]'\"\n [classLabel]=\"configButtonSelectItem.buttonUncheckAll?.classLabel || 'libs-ui-font-h6s'\"\n [disable]=\"varHtmlDisable\"\n (outClick)=\"handlerCheckedOrUnCheckedAll(false)\" />\n </div>\n }\n @if (items().length && configTemplateGroup.configCheckboxCheckAll?.(); as configCheckBox) {\n <div\n [class]=\"'flex libs-ui-border-bottom-general '+(configTemplateGroup.classIncludeHasConfigCheckBoxAll ?? ' bg-[#ffffff]')\">\n <libs_ui-components-checkbox-single [label]=\"configCheckBox.label ?? 'i18n_all'\"\n [classLabelInclude]=\"configCheckBox.classLabelInclude || ''\"\n [checked]=\"totalItemChecked() >= totalItem() && totalItem() > 0\"\n [disable]=\"varHtmlDisable\"\n (outChangStageFlagMousePopover)='handlerChangStageFlagMouse($event)'\n (outChange)=\"handlerCheckedOrUnCheckedAll($event.checked)\" />\n </div>\n }\n @if (items() && items().length) {\n <div class=\"w-full h-full relative flex\">\n <div LibsUiComponentsScrollOverlayDirective\n class=\"w-full h-full absolute top-0 left-0 {{ configTemplateGroup.classIncludeGroup ? configTemplateGroup.classIncludeGroup : '' }}\">\n @for (item of items(); track item()[fieldKey()]; let first = $first; let last = $last) {\n <div #itemRef\n [style.marginTop.px]=\"!configTemplateGroup.ignoreGroupLine ? configTemplateGroup.marginTopHasLine || 4 : 0\"\n class=\"flex flex-col relative \">\n @let varHtmlPadding = level()*(configTemplateGroup.isViewTree ? 8 : 16);\n <div class=\"flex items-center py-[6px] \"\n [class.libs-ui-bg-list-hover]=\"!configTemplateGroup.ignoreClickLabelGroup\"\n [class.libs-ui-bg-list-hover-active]=\"!configTemplateGroup.ignoreClickLabelGroup\"\n [class.!cursor-pointer]=\"!configTemplateGroup.ignoreClickLabelGroup && (configTemplateGroup.ignoreCheckboxGroup || configTemplateGroup.singleSelectItem)\"\n [style.paddingLeft.px]=\"varHtmlPadding\"\n [style.paddingRight.px]=\"varHtmlPadding\"\n (click)=\"(configTemplateGroup.ignoreCheckboxGroup || configTemplateGroup.singleSelectItem) ? handlerToggleExpand($event,item) : undefined\">\n @if (configTemplateGroup.iconExpand === 'left' || configTemplateGroup.isViewTree) {\n <i class=\"cursor-pointer libs-ui-icon-chevron-right before:!text-[16px]\"\n [class.rotate-90]=\"item().expand\"\n (click)=\"handlerToggleExpand($event,item)\">\n </i>\n }\n <div class=\"flex\"\n [class.w-full]=\"configTemplateGroup.iconExpand === 'right' && !configTemplateGroup.isViewTree && (!configTemplateGroup.searchAllLevel || !!item()[configTemplateGroup.fieldGetItems]?.()?.length)\"\n [class.w-[calc(100%-16px)]]=\"configTemplateGroup.iconExpand === 'left' || configTemplateGroup.isViewTree\">\n @if (!configTemplateGroup.isViewRadio) {\n <libs_ui-components-checkbox-single [avatarConfig]=\"item().avatarConfig\"\n [class.ml-[8px]]=\"configTemplateGroup.iconExpand === 'left' || configTemplateGroup.isViewTree\"\n [ignoreCheckbox]=\"configTemplateGroup.ignoreCheckboxGroup || configTemplateGroup.singleSelectItem\"\n [class]=\"configTemplateGroup.classIncludeItem || ''\"\n [class.w-auto]=\"configTemplateGroup.isViewTree\"\n [class.w-full]=\"!item()[configTemplateGroup.fieldGetItems]?.()?.length && !((configTemplateGroup.isViewTree || configTemplateGroup.widthLabelSub24WhenNotTreeView) && (configTemplateGroup.iconExpand === 'left' || configTemplateGroup.iconExpand === 'right' && (!configTemplateGroup.searchAllLevel || !!item()[configTemplateGroup.fieldGetItems]?.()?.length)))\"\n [class.max-w-[calc(100%-24px)]]=\"(configTemplateGroup.isViewTree || configTemplateGroup.widthLabelSub24WhenNotTreeView) && (configTemplateGroup.iconExpand === 'left' || configTemplateGroup.iconExpand === 'right' && (!configTemplateGroup.searchAllLevel || !!item()[configTemplateGroup.fieldGetItems]?.()?.length))\"\n [label]=\"item().fieldLabel\"\n [popover]=\"item().dataPopover\"\n [zIndexLabel]=\"configTemplateGroup.zIndexLabel ?? zIndex()\"\n [dataComponentOutlet]=\"(undefined | LibsUiPipesCallFunctionInTemplatePipe:configTemplateGroup.getDataComponentOutletGroup:item():fieldKey():{valueIsEmpty:{item:item()}}) | async\"\n [componentOutlet]=\"(0 | LibsUiPipesCallFunctionInTemplatePipe:configTemplateGroup.getComponentOutletGroup:item():fieldKey():{valueIs0:0}) | async\"\n [linkImage]=\"configTemplateGroup.getImage ? (('avatar' | LibsUiPipesCallFunctionInTemplatePipe:(item().specific_loadImgError && configTemplateGroup.getLinkImageError ? configTemplateGroup.getLinkImageError : configTemplateGroup.getImage):item()) | async) : item()[configTemplateGroup.fieldGetAvatarItem || '']\"\n [imgTypeIcon]=\"configTemplateGroup.imgTypeIcon\"\n [classLabelInclude]=\"(configTemplateGroup.classLabelItem ? configTemplateGroup.classLabelItem : (configTemplateGroup.isViewTree ? ' libs-ui-font-h6r ':' libs-ui-font-h6s ')) + ((configTemplateGroup.ignoreTextUppercaseLabelGroup || configTemplateGroup.isViewTree) ? '':' text-uppercase ')\"\n [disable]=\"disable() || (item()[fieldKey()] | LibsUiCheckSelectedByKeyPipe:keysDisableItem():keysDisableItem()?.length)\"\n [checked]=\"item()[fieldKey()] | LibsUiCheckSelectedByKeyPipe:keysChecked():keysChecked().length\"\n [stillOtherOptions]=\"item()[fieldKey()] | LibsUiCheckSelectedByKeyPipe:keysStillOtherOptions():keysStillOtherOptions().length\"\n (outChange)=\"handlerChangeChecked($event.checked,item, true)\"\n (outChangStageFlagMousePopover)='handlerChangStageFlagMouse($event)'\n (outClickLabel)=\"handlerToggleExpand('clickLabel',item,configTemplateGroup.ignoreCheckboxGroup || configTemplateGroup.singleSelectItem)\" />\n }\n\n @if (configTemplateGroup.isViewRadio) {\n <libs_ui-components-radio-single\n [class.ml-[8px]]=\"configTemplateGroup.iconExpand === 'left' || configTemplateGroup.isViewTree\"\n [avatarConfig]=\"item().avatarConfig\"\n [ignoreRadio]=\"configTemplateGroup.ignoreRadioGroup || configTemplateGroup.singleSelectItem\"\n [class]=\"configTemplateGroup.classIncludeItem || ''\"\n [class.w-auto]=\"configTemplateGroup.isViewTree\"\n [class.w-full]=\"!item()[configTemplateGroup.fieldGetItems]?.()?.length && !((configTemplateGroup.isViewTree || configTemplateGroup.widthLabelSub24WhenNotTreeView) && (configTemplateGroup.iconExpand === 'left' || configTemplateGroup.iconExpand === 'right' && (!configTemplateGroup.searchAllLevel || !!item()[configTemplateGroup.fieldGetItems]?.()?.length)))\"\n [class.max-w-[calc(100%-24px)]]=\"(configTemplateGroup.isViewTree || configTemplateGroup.widthLabelSub24WhenNotTreeView) && (configTemplateGroup.iconExpand === 'left' || configTemplateGroup.iconExpand === 'right' && (!configTemplateGroup.searchAllLevel || !!item()[configTemplateGroup.fieldGetItems]?.()?.length))\"\n [label]=\"item().fieldLabel\"\n [popover]=\"item().dataPopover\"\n [dataComponentOutlet]=\"(undefined | LibsUiPipesCallFunctionInTemplatePipe:configTemplateGroup.getDataComponentOutletGroup:item():fieldKey():{valueIsEmpty:{item:item()}}) | async\"\n [componentOutlet]=\"(0 | LibsUiPipesCallFunctionInTemplatePipe:configTemplateGroup.getComponentOutletGroup:item():fieldKey():{valueIs0:0}) | async\"\n [zIndexLabel]=\"configTemplateGroup.zIndexLabel ?? zIndex()\"\n [imgTypeIcon]=\"configTemplateGroup.imgTypeIcon\"\n [linkImage]=\"configTemplateGroup.getImage ? (('avatar' | LibsUiPipesCallFunctionInTemplatePipe:(item().specific_loadImgError && configTemplateGroup.getLinkImageError ? configTemplateGroup.getLinkImageError : configTemplateGroup.getImage):item()) | async) : item()[configTemplateGroup.fieldGetAvatarItem || '']\"\n [classLabelInclude]=\"(configTemplateGroup.classLabelItem ? configTemplateGroup.classLabelItem : 'libs-ui-font-h6s ') + (configTemplateGroup.ignoreTextUppercaseLabelGroup ? '':' uppercase')\"\n [disable]=\"disable() || (configTemplateGroup.disableItemNotLastLevel && !!item()[configTemplateGroup.fieldGetItems]?.()?.length) || configTemplateGroup.ignoreCheckboxGroup || configTemplateGroup.singleSelectItem || (item()[fieldKey()] | LibsUiCheckSelectedByKeyPipe:keysDisableItem():keysDisableItem()?.length)\"\n [active]=\"item()[fieldKey()] | LibsUiCheckSelectedByKeyPipe:keysChecked():keysChecked().length\"\n (outChange)=\"handlerChangeChecked($event.active,item, true)\"\n (outChangStageFlagMousePopover)='handlerChangStageFlagMouse($event)'\n (outClickLabel)=\"handlerToggleExpand('clickLabel',item,configTemplateGroup.ignoreRadioGroup || configTemplateGroup.singleSelectItem)\" />\n }\n\n @if (item().buttonInGroup; as buttonInGroup) {\n <libs_ui-components-buttons-button [type]=\"buttonInGroup.type || 'button-link-primary'\"\n [label]=\"buttonInGroup.label || ' '\"\n [classIconLeft]=\"(buttonInGroup.classIconLeft || '')+' flex mr-[8px] !text-[8px]'\"\n [classInclude]=\"buttonInGroup.classInclude\"\n [classLabel]=\"buttonInGroup.classLabel || 'libs-ui-font-h5r'\"\n [disable]=\"buttonInGroup.disable || disable() || false\"\n (outClick)=\"handlerClickButtonGroup(buttonInGroup,item())\" />\n }\n </div>\n\n @if (configTemplateGroup.iconExpand === 'right' && !configTemplateGroup.isViewTree && (!configTemplateGroup.searchAllLevel || !!item()[configTemplateGroup.fieldGetItems]?.()?.length)) {\n <i class=\"flex items-center cursor-pointer libs-ui-icon-chevron-right before:!text-[16px]\"\n [class.!ml-[8px]]=\"item().dataPopover\"\n [class.rotate-90]=\"item().expand\"\n (click)=\"handlerToggleExpand($event,item)\">\n </i>\n }\n </div>\n @if (item().expand && calculatorHeighItemSuccess()) {\n <libs_ui-components-list-templates_group-item [keySearch]=\"keySearch()\"\n [items]=\"item()[configTemplateGroup.fieldGetItems]()\"\n [parentItem]=\"item()\"\n [fieldKey]=\"fieldKey()\"\n [keysChecked]=\"keysChecked()\"\n [disable]=\"disable()\"\n [keysDisableItem]=\"keysDisableItem() || []\"\n [configTemplateGroup]=\"configTemplateGroup\"\n [config]=\"config()\"\n [keysStillOtherOptions]=\"keysStillOtherOptions()\"\n (outChangeView)=\"handlerChangeView()\"\n (outChangStageFlagMousePopover)='handlerChangStageFlagMouse($event)'\n (outChange)=\"handlerChangeItemChecked($event.item)\" />\n }\n @if (!last && !configTemplateGroup.ignoreGroupLine && calculatorHeighItemSuccess()) {\n <div class=\"libs-ui-list-group-line\"\n [style.marginTop.px]=\"!configTemplateGroup.ignoreGroupLine ? configTemplateGroup.marginTopHasLine || 4 : 0\">\n </div>\n }\n </div>\n }\n </div>\n </div>\n }\n @if (!items() || !items().length) {\n <div\n class=\"libs-ui-font-h5r text-[#c1c1c1] relative {{ configTemplateGroup.classIncludeNodata?configTemplateGroup.classIncludeNodata:'' }}\"\n [style.marginLeft.px]=\"0 | LibsUiComponentsListGroupCalculatorMarginLeftItemPipe:2:(configTemplateGroup.isViewTree || configTemplateGroup.iconExpand === 'left'):configTemplateGroup.isViewTreeJson:!(configTemplateGroup.ignoreCheckboxItem || configTemplateGroup.ignoreRadioItem || configTemplateGroup.singleSelectItem):true\"\n [class.py-[8px]]=\"configTemplateGroup.fieldGetAvatarItem\"\n [class.py-[4px]]=\"!configTemplateGroup.fieldGetAvatarItem\">\n @if (!keySearch() && !loading()) {\n <div>{{ (config()?.textNoData ?? 'i18n_no_data_yet') | translate }}</div>\n }\n @if (keySearch() && !loading()) {\n <div>{{ (config()?.textSearchNoData ??'i18n_no_result') | translate }}</div>\n }\n </div>\n }\n @if (loading()) {\n <libs_ui-components-spinner [size]=\"'medium'\" />\n }\n </div>\n </div>\n}\n", styles: [".libs-ui-list-group{display:flex;flex-direction:column;width:100%}.libs-ui-list-group .libs-ui-list-group-line{width:100%;height:1px;background-color:#e6e7ea}.libs-ui-list-group [class*=libs-ui-icon-chevron]:before{color:#6a7383}\n"] }]
|
|
779
779
|
}] });
|
|
780
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JvdXAuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy11aS9jb21wb25lbnRzL2xpc3Qvc3JjL3RlbXBsYXRlcy9ncm91cC9ncm91cC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzLXVpL2NvbXBvbmVudHMvbGlzdC9zcmMvdGVtcGxhdGVzL2dyb3VwL2dyb3VwLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLHVEQUF1RDtBQUN2RCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDNUMsT0FBTyxFQUFFLHVCQUF1QixFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQVUsTUFBTSxFQUFrQixNQUFNLGVBQWUsQ0FBQztBQUM3RyxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUN2RSxPQUFPLEVBQVcsc0NBQXNDLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUNyRyxPQUFPLEVBQUUsdUNBQXVDLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUM5RixPQUFPLEVBQUUsb0NBQW9DLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUN4RixPQUFPLEVBQUUsc0NBQXNDLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUM1RixPQUFPLEVBQUUsZ0NBQWdDLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUMvRSxPQUFPLEVBQUUscUNBQXFDLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQztBQUNqRyxPQUFPLEVBQUUsU0FBUyxFQUFFLGFBQWEsRUFBRSxVQUFVLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM1RixPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDdEQsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUM3QixPQUFPLEVB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LHFCQUFxQiwwQkFBRSxTQUFTLDZDQUFFLGVBQWUsNEZBQ2pELHNDQUFzQyxzakJBQ3RDLHVDQUF1QywwcEJBQ3ZDLG9DQUFvQywyaEJBQ3BDLGdDQUFnQyxpR0FDaEMsc0NBQXNDLHdTQUN0Qyw0QkFBNEIsZ0VBQzVCLHFDQUFxQyx5RUFDckMscURBQXFELDhGQUNyRCxzQ0FBc0M7OzRGQUc3QixrQ0FBa0M7a0JBcEI5QyxTQUFTOytCQUVFLHlDQUF5QyxjQUd2QyxJQUFJLG1CQUNDLHVCQUF1QixDQUFDLE1BQU0sV0FDdEM7d0JBQ1AscUJBQXFCLEVBQUUsU0FBUyxFQUFFLGVBQWU7d0JBQ2pELHNDQUFzQzt3QkFDdEMsdUNBQXVDO3dCQUN2QyxvQ0FBb0M7d0JBQ3BDLGdDQUFnQzt3QkFDaEMsc0NBQXNDO3dCQUN0Qyw0QkFBNEI7d0JBQzVCLHFDQUFxQzt3QkFDckMscURBQXFEO3dCQUNyRCxzQ0FBc0M7cUJBQ3ZDIiwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueSAqL1xuaW1wb3J0IHsgQXN5bmNQaXBlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIGlzU2lnbmFsLCBPbkluaXQsIHNpZ25hbCwgV3JpdGFibGVTaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFZpcnR1YWxTY3JvbGxlck1vZHVsZSB9IGZyb20gJ0BpaGFyYmVjay9uZ3gtdmlydHVhbC1zY3JvbGxlcic7XG5pbXBvcnQgeyBJQnV0dG9uLCBMaWJzVWlDb21wb25lbnRzQnV0dG9uc0J1dHRvbkNvbXBvbmVudCB9IGZyb20gJ0BsaWJzLXVpL2NvbXBvbmVudHMtYnV0dG9ucy1idXR0b24nO1xuaW1wb3J0IHsgTGlic1VpQ29tcG9uZW50c0NoZWNrYm94U2luZ2xlQ29tcG9uZW50IH0gZnJvbSAnQGxpYnMtdWkvY29tcG9uZW50cy1jaGVja2JveC1zaW5nbGUnO1xuaW1wb3J0IHsgTGlic1VpQ29tcG9uZW50c1JhZGlvU2luZ2xlQ29tcG9uZW50IH0gZnJvbSAnQGxpYnMtdWkvY29tcG9uZW50cy1yYWRpby1zaW5nbGUnO1xuaW1wb3J0IHsgTGlic1VpQ29tcG9uZW50c1Njcm9sbE92ZXJsYXlEaXJlY3RpdmUgfSBmcm9tICdAbGlicy11aS9jb21wb25lbnRzLXNjcm9sbC1vdmVybGF5JztcbmltcG9ydCB7IExpYnNVaUNvbXBvbmVudHNTcGlubmVyQ29tcG9uZW50IH0gZnJvbSAnQGxpYnMtdWkvY29tcG9uZW50cy1zcGlubmVyJztcbmltcG9ydCB7IExpYnNVaVBpcGVzQ2FsbEZ1bmN0aW9uSW5UZW1wbGF0ZVBpcGUgfSBmcm9tICdAbGlicy11aS9waXBlcy1jYWxsLWZ1bmN0aW9uLWluLXRlbXBsYXRlJztcbmltcG9ydCB7IGNsb25lRGVlcCwgZGVsZXRlVW5pY29kZSwgZXNjYXBlSHRtbCwgaXNFbXB0eSwgaXNOaWwsIHV1aWQgfSBmcm9tICdAbGlicy11aS91dGlscyc7XG5pbXBvcnQgeyBUcmFuc2xhdGVNb2R1bGUgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7IHJhbmdlIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBJTGlzdENvbmZpZ0l0ZW1Hcm91cCB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvY29uZmlnLWl0ZW0uaW50ZXJmYWNlJztcbmltcG9ydCB7IElMaXN0RGF0YUVtaXRLZXksIElMaXN0RGF0YUVtaXRNdWx0aUtleSB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvZGF0YS1lbWl0LmludGVyZmFjZSc7XG5pbXBvcnQgeyBMaWJzVWlDaGVja1NlbGVjdGVkQnlLZXlQaXBlIH0gZnJvbSAnLi4vLi4vcGlwZXMvY2hlY2stc2VsZWN0ZWQtYnkta2V5LnBpcGUnO1xuaW1wb3J0IHsgTGlic1VpQ29tcG9uZW50c0xpc3RUZW1wbGF0ZXNDb21wb25lbnRBYnN0cmFjdCB9IGZyb20gJy4uL3RlbXBsYXRlcy5jb21wb25lbnQuYWJzdHJhY3QnO1xuaW1wb3J0IHsgTGlic1VpQ29tcG9uZW50c0xpc3RHcm91cEl0ZW1Db21wb25lbnQgfSBmcm9tICcuL2l0ZW0vaXRlbS5jb21wb25lbnQnO1xuaW1wb3J0IHsgTGlic1VpQ29tcG9uZW50c0xpc3RHcm91cENhbGN1bGF0b3JNYXJnaW5MZWZ0SXRlbVBpcGUgfSBmcm9tICcuL3BpcGVzL2NhbGN1bGF0b3ItbWFyZ2luLWxlZnQtaXRlbS5waXBlJztcblxuXG5AQ29tcG9uZW50KHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBhbmd1bGFyLWVzbGludC9jb21wb25lbnQtc2VsZWN0b3JcbiAgc2VsZWN0b3I6ICdsaWJzX3VpLWNvbXBvbmVudHMtbGlzdC10ZW1wbGF0ZXNfZ3JvdXAnLFxuICB0ZW1wbGF0ZVVybDogJy4vZ3JvdXAuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9ncm91cC5jb21wb25lbnQuc2NzcyddLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgaW1wb3J0czogW1xuICAgIFZpcnR1YWxTY3JvbGxlck1vZHVsZSwgQXN5bmNQaXBlLCBUcmFuc2xhdGVNb2R1bGUsXG4gICAgTGlic1VpQ29tcG9uZW50c0J1dHRvbnNCdXR0b25Db21wb25lbnQsXG4gICAgTGlic1VpQ29tcG9uZW50c0NoZWNrYm94U2luZ2xlQ29tcG9uZW50LFxuICAgIExpYnNVaUNvbXBvbmVudHNSYWRpb1NpbmdsZUNvbXBvbmVudCxcbiAgICBMaWJzVWlDb21wb25lbnRzU3Bpbm5lckNvbXBvbmVudCxcbiAgICBMaWJzVWlDb21wb25lbnRzU2Nyb2xsT3ZlcmxheURpcmVjdGl2ZSxcbiAgICBMaWJzVWlDaGVja1NlbGVjdGVkQnlLZXlQaXBlLFxuICAgIExpYnNVaVBpcGVzQ2FsbEZ1bmN0aW9uSW5UZW1wbGF0ZVBpcGUsXG4gICAgTGlic1VpQ29tcG9uZW50c0xpc3RHcm91cENhbGN1bGF0b3JNYXJnaW5MZWZ0SXRlbVBpcGUsXG4gICAgTGlic1VpQ29tcG9uZW50c0xpc3RHcm91cEl0ZW1Db21wb25lbnRcbiAgXVxufSlcbmV4cG9ydCBjbGFzcyBMaWJzVWlDb21wb25lbnRzTGlzdEdyb3VwQ29tcG9uZW50IGV4dGVuZHMgTGlic1VpQ29tcG9uZW50c0xpc3RUZW1wbGF0ZXNDb21wb25lbnRBYnN0cmFjdCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIC8vICNyZWdpb24gUFJPUEVSVFlcbiAgcHJvdGVjdGVkIGNvbmZpZ1RlbXBsYXRlR3JvdXAgPSBzaWduYWw8SUxpc3RDb25maWdJdGVtR3JvdXAgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XG4gIHByb3RlY3RlZCBsZXZlbCA9IHNpZ25hbDxudW1iZXI+KDEpO1xuICBwcm90ZWN0ZWQga2V5c0NoZWNrZWQgPSBzaWduYWw8QXJyYXk8c3RyaW5nPj4oW10pO1xuICBwcm90ZWN0ZWQga2V5c1N0aWxsT3RoZXJPcHRpb25zID0gc2lnbmFsPEFycmF5PHN0cmluZz4+KFtdKTtcbiAgcHJvdGVjdGVkIHRvdGFsSXRlbSA9IHNpZ25hbDxudW1iZXI+KDApO1xuICBwcm90ZWN0ZWQgdG90YWxJdGVtQ2hlY2tlZCA9IHNpZ25hbDxudW1iZXI+KDApO1xuICBwcm90ZWN0ZWQgY2FsY3VsYXRvckhlaWdoSXRlbVN1Y2Nlc3MgPSBzaWduYWw8Ym9vbGVhbj4oZmFsc2UpO1xuICBwcm90ZWN0ZWQga2V5RmV0Y2ggPSBzaWduYWw8c3RyaW5nPignJyk7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBQQVRURVJOX0ZBS0VfSUQgPSAnZmFrZS1pZC0nO1xuICBwcml2YXRlIG1hcHBpbmdJdGVtc0NoZWNrZWQgPSBzaWduYWw8TWFwPHN0cmluZywgYW55Pj4obmV3IE1hcCgpKTtcbiAgcHJpdmF0ZSBzZWxlY3RGaXJzdEl0ZW0gPSBzaWduYWw8Ym9vbGVhbj4oZmFsc2UpO1xuICBwcml2YXRlIGZpcnN0SXRlbVNlbGVjdGVkID0gc2lnbmFsPGFueT4odW5kZWZpbmVkKTtcblxuICBvdmVycmlkZSBuZ09uSW5pdCgpIHtcbiAgICBpZiAoIXRoaXMuY29uZmlnKCk/LmNvbmZpZ1RlbXBsYXRlR3JvdXA/LigpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHN1cGVyLm5nT25Jbml0KCk7XG4gICAgdGhpcy5jb25maWdUZW1wbGF0ZUdyb3VwLnNldCh0aGlzLmNvbmZpZygpPy5jb25maWdUZW1wbGF0ZUdyb3VwPy4oKSk7XG4gICAgdGhpcy50aW1lSW50ZXJ2YWxJbnRlcnZhbFNldEhlaWdodFZpZXdQb3J0LnNldCh0aGlzLmNvbmZpZ1RlbXBsYXRlR3JvdXAoKT8udGltZUludGVydmFsQ2FsY3VsYXRvckhlaWdodCA/PyAwKTtcbiAgICB0aGlzLmZpZWxkS2V5LnNldCh0aGlzLmNvbmZpZ1RlbXBsYXRlR3JvdXAoKT8uZmllbGRLZXkgPz8gdGhpcy5maWVsZEtleURlZmF1bHQoKSk7XG4gICAgdGhpcy5zZWxlY3RGaXJzdEl0ZW0uc2V0KGZhbHNlKTtcbiAgICBpZiAodGhpcy5jb25maWdUZW1wbGF0ZUdyb3VwKCk/Lm9ubHlTZWxlY3RGaXJzdEl0ZW0gfHwgKCF0aGlzLm11bHRpS2V5U2VsZWN0ZWQoKT8ubGVuZ3RoICYmIHRoaXMuY29uZmlnKCk/LmF1dG9TZWxlY3RGaXJzdEl0ZW0pKSB7XG4gICAgICB0aGlzLnNlbGVjdEZpcnN0SXRlbS5zZXQodHJ1ZSk7XG4gICAgfVxuICAgIHRoaXMuY2FsbEFwaUJ5U2VydmljZSgpO1xuXG5cbiAgICB0aGlzLm9uVXBkYXRlTXVsdGlLZXlTZWxlY3RlZEdyb3VwKCk/LnBpcGUodGFrZVVudGlsKHRoaXMub25EZXN0cm95KSkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgIGlmICghdGhpcy5zdG9yZSgpIHx8ICF0aGlzLnN0b3JlKCkubGVuZ3RoKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHRoaXMua2V5c0NoZWNrZWQuc2V0KFtdKTtcblxuICAgICAgdGhpcy5tYXBwaW5nSXRlbXNDaGVja2VkKCkuY2xlYXIoKTtcbiAgICAgIGNvbnN0IGNvbmZpZ1RlbXBsYXRlR3JvdXAgPSB0aGlzLmNvbmZpZ1RlbXBsYXRlR3JvdXAoKTtcblxuICAgICAgaWYgKCFjb25maWdUZW1wbGF0ZUdyb3VwKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHRoaXMuc3RvcmUoKS5mb3JFYWNoKGl0ZW0gPT4ge1xuICAgICAgICBpZiAoaXNFbXB0eShpdGVtKClbdGhpcy5maWVsZEtleSgpXSkpIHtcbiAgICAgICAgICBpdGVtLnVwZGF0ZShjdXJyZW50ID0+IHtcbiAgICAgICAgICAgIGN1cnJlbnRbdGhpcy5maWVsZEtleSgpXSA9IGAke3RoaXMuUEFUVEVSTl9GQUtFX0lEfSR7dXVpZCgpfWA7XG5cbiAgICAgICAgICAgIHJldHVybiBjdXJyZW50O1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGl0ZW1Hcm91cCA9IGl0ZW0oKVtjb25maWdUZW1wbGF0ZUdyb3VwLmZpZWxkR2V0SXRlbXNdIGFzIFdyaXRhYmxlU2lnbmFsPEFycmF5PFdyaXRhYmxlU2lnbmFsPGFueT4+PjtcbiAgICAgICAgY29uc3QgaXRlbU1hcCA9IGNsb25lRGVlcChpdGVtKSBhcyBXcml0YWJsZVNpZ25hbDxhbnk+O1xuXG4gICAgICAgIGl0ZW1NYXAudXBkYXRlKGN1cnJlbnQgPT4ge1xuICAgICAgICAgIGN1cnJlbnQucmVmID0gaXRlbTtcblxuICAgICAgICAgIHJldHVybiBjdXJyZW50O1xuICAgICAgICB9KTtcbiAgICAgICAgaWYgKGl0ZW1Hcm91cCkge1xuICAgICAgICAgIHRoaXMuY2hlY2tlZEdyb3VwSXRlbXMoaXRlbUdyb3VwKCksIGl0ZW0pO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLm11bHRpS2V5U2VsZWN0ZWQoKSAmJiB0aGlzLm11bHRpS2V5U2VsZWN0ZWQoKT8ubGVuZ3RoICYmIHRoaXMubXVsdGlLZXlTZWxlY3RlZCgpPy5maW5kKGtleSA9PiBrZXkgPT09IGl0ZW0oKVt0aGlzLmZpZWxkS2V5KCldKSkge1xuICAgICAgICAgIHRoaXMuaGFuZGxlckNoYW5nZUNoZWNrZWQodHJ1ZSwgaXRlbU1hcCwgZmFsc2UsICFjb25maWdUZW1wbGF0ZUdyb3VwLnNpbmdsZVNlbGVjdEl0ZW0pO1xuXG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIHRoaXMubXVsdGlLZXlTZWxlY3RlZC5zZXQoW10pO1xuXG4gICAgICByZXR1cm47XG4gICAgfSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgaGFuZGxlckNoZWNrZWRPclVuQ2hlY2tlZEFsbChjaGVja2VkOiBib29sZWFuKSB7XG4gICAgY29uc3QgY29uZmlnVGVtcGxhdGVHcm91cCA9IHRoaXMuY29uZmlnVGVtcGxhdGVHcm91cCgpO1xuXG4gICAgaWYgKCFjb25maWdUZW1wbGF0ZUdyb3VwKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICghY2hlY2tlZCkge1xuICAgICAgdGhpcy5pdGVtcygpLmZvckVhY2goaXRlbSA9PiB7XG4gICAgICAgIHRoaXMubWFwcGluZ0l0ZW1zQ2hlY2tlZCgpLmRlbGV0ZShpdGVtKClbdGhpcy5maWVsZEtleSgpXSk7XG4gICAgICAgIGNvbnN0IGl0ZW1zT2ZHcm91cCA9IGl0ZW0oKVtjb25maWdUZW1wbGF0ZUdyb3VwLmZpZWxkR2V0SXRlbXNdIGFzIFdyaXRhYmxlU2lnbmFsPEFycmF5PFdyaXRhYmxlU2lnbmFsPGFueT4+PjtcblxuICAgICAgICBpZiAoaXRlbXNPZkdyb3VwICYmIGl0ZW1zT2ZHcm91cCgpICYmIGl0ZW1zT2ZHcm91cCgpLmxlbmd0aCkge1xuICAgICAgICAgIHRoaXMucmVtb3ZlQ2hlY2tlZEl0ZW1zQ2hpbGQoaXRlbXNPZkdyb3VwKCkpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIHRoaXMuc2V0S2V5c0NoZWNrZWRCeU1hcHBpbmdDaGVja2VkKGZhbHNlKTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuaXRlbXMoKS5mb3JFYWNoKGl0ZW0gPT4ge1xuICAgICAgdGhpcy5tYXBwaW5nSXRlbXNDaGVja2VkKCkuc2V0KGl0ZW0oKVt0aGlzLmZpZWxkS2V5KCldLCBpdGVtKCkpO1xuICAgICAgY29uc3QgaXRlbXNPZkdyb3VwID0gaXRlbSgpW2NvbmZpZ1RlbXBsYXRlR3JvdXAuZmllbGRHZXRJdGVtc10gYXMgV3JpdGFibGVTaWduYWw8QXJyYXk8V3JpdGFibGVTaWduYWw8YW55Pj4+O1xuXG4gICAgICBpZiAoaXRlbXNPZkdyb3VwICYmIGl0ZW1zT2ZHcm91cCgpICYmIGl0ZW1zT2ZHcm91cCgpLmxlbmd0aCkge1xuICAgICAgICB0aGlzLnNldENoZWNrQ2hlY2tlZEl0ZW1zQ2hpbGQoaXRlbXNPZkdyb3VwKCkpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHRoaXMuc2V0S2V5c0NoZWNrZWRCeU1hcHBpbmdDaGVja2VkKGZhbHNlKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBjaGVja2VkR3JvdXBJdGVtcyhpdGVtcz86IEFycmF5PFdyaXRhYmxlU2lnbmFsPGFueT4+LCBwYXJlbnQ/OiBXcml0YWJsZVNpZ25hbDxhbnk+KSB7XG4gICAgY29uc3QgY29uZmlnVGVtcGxhdGVHcm91cCA9IHRoaXMuY29uZmlnVGVtcGxhdGVHcm91cCgpO1xuXG4gICAgaWYgKCFjb25maWdUZW1wbGF0ZUdyb3VwIHx8ICFpdGVtcyB8fCAhaXRlbXMubGVuZ3RoKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGl0ZW1zLmZvckVhY2goaXRlbSA9PiB7XG4gICAgICBpZiAoaXNOaWwoaXRlbSgpW3RoaXMuZmllbGRLZXkoKV0pIHx8IGl0ZW0oKVt0aGlzLmZpZWxkS2V5KCldID09PSAnJykge1xuICAgICAgICBpdGVtLnVwZGF0ZShjdXJyZW50ID0+IHtcbiAgICAgICAgICBjdXJyZW50W3RoaXMuZmllbGRLZXkoKV0gPSBgJHt0aGlzLlBBVFRFUk5fRkFLRV9JRH0ke3V1aWQoKX1gO1xuXG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGl0ZW1Hcm91cCA9IGl0ZW0oKVtjb25maWdUZW1wbGF0ZUdyb3VwLmZpZWxkR2V0SXRlbXNdIGFzIFdyaXRhYmxlU2lnbmFsPEFycmF5PFdyaXRhYmxlU2lnbmFsPGFueT4+PjtcbiAgICAgIGNvbnN0IGl0ZW1NYXAgPSBjbG9uZURlZXAoaXRlbSkgYXMgV3JpdGFibGVTaWduYWw8YW55PjtcblxuICAgICAgaXRlbU1hcC51cGRhdGUoY3VycmVudCA9PiB7XG4gICAgICAgIGN1cnJlbnQucmVmID0gaXRlbTtcbiAgICAgICAgY3VycmVudC5wYXJlbnRJdGVtID0gcGFyZW50O1xuXG4gICAgICAgIHJldHVybiBjdXJyZW50O1xuICAgICAgfSk7XG4gICAgICBpZiAoaXRlbUdyb3VwKSB7XG4gICAgICAgIHRoaXMuY2hlY2tlZEdyb3VwSXRlbXMoaXRlbUdyb3VwKCksIGl0ZW0pO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMubXVsdGlLZXlTZWxlY3RlZCgpICYmIHRoaXMubXVsdGlLZXlTZWxlY3RlZCgpPy5sZW5ndGggJiYgdGhpcy5tdWx0aUtleVNlbGVjdGVkKCk/LmZpbmQoa2V5ID0+IGtleSA9PT0gaXRlbSgpW3RoaXMuZmllbGRLZXkoKV0pKSB7XG4gICAgICAgIHRoaXMuaGFuZGxlckNoYW5nZUNoZWNrZWQodHJ1ZSwgaXRlbU1hcCwgZmFsc2UsICFjb25maWdUZW1wbGF0ZUdyb3VwLnNpbmdsZVNlbGVjdEl0ZW0pO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmIChjb25maWdUZW1wbGF0ZUdyb3VwLnNpbmdsZVNlbGVjdEl0ZW0pIHtcbiAgICAgICAgdGhpcy5oYW5kbGVyQ2hhbmdlQ2hlY2tlZChmYWxzZSwgaXRlbU1hcCwgZmFsc2UsICFjb25maWdUZW1wbGF0ZUdyb3VwLnNpbmdsZVNlbGVjdEl0ZW0pO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcHJvdGVjdGVkIGhhbmRsZXJDbGlja0J1dHRvbkdyb3VwKGJ1dHRvbkluR3JvdXA6IElCdXR0b24sIGl0ZW06IGFueSkge1xuICAgIGJ1dHRvbkluR3JvdXAuYWN0aW9uPy4oaXRlbSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgaGFuZGxlclRvZ2dsZUV4cGFuZChlOiB1bmtub3duLCBpdGVtOiBXcml0YWJsZVNpZ25hbDxhbnk+LCBhY2NlcHRFdmVudCA9IHRydWUpIHtcbiAgICBpZiAoIWFjY2VwdEV2ZW50IHx8IHRoaXMuY29uZmlnVGVtcGxhdGVHcm91cCgpPy5pZ25vcmVDbGlja0xhYmVsR3JvdXApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKGUgaW5zdGFuY2VvZiBFdmVudCkge1xuICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICB9XG4gICAgaXRlbS51cGRhdGUoY3VycmVudCA9PiB7XG4gICAgICBjdXJyZW50LmV4cGFuZCA9ICFjdXJyZW50LmV4cGFuZDtcblxuICAgICAgcmV0dXJuIGN1cnJlbnQ7XG4gICAgfSk7XG4gICAgdGhpcy5yZWZyZXNoVmlldygpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGhhbmRsZXJDaGFuZ2VWaWV3KCkge1xuICAgIHRoaXMucmVmcmVzaFZpZXcoKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBoYW5kbGVyQ2hhbmdlSXRlbUNoZWNrZWQoaXRlbTogYW55KSB7XG4gICAgY29uc3QgY2hlY2tlZCA9ICF0aGlzLmtleXNDaGVja2VkKCkuc29tZShrZXkgPT4gaXRlbVt0aGlzLmZpZWxkS2V5KCldID09PSBrZXkpO1xuXG4gICAgaWYgKCFjaGVja2VkICYmIHRoaXMuY29uZmlnVGVtcGxhdGVHcm91cCgpPy5pc1ZpZXdSYWRpbykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLmhhbmRsZXJDaGFuZ2VDaGVja2VkKGNoZWNrZWQsIHNpZ25hbChpdGVtKSwgZmFsc2UpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGhhbmRsZXJDaGFuZ2VDaGVja2VkKGNoZWNrZWQ6IGJvb2xlYW4sIGl0ZW06IFdyaXRhYmxlU2lnbmFsPGFueT4sIGlzQ2xpY2tNYW51YWw6IGJvb2xlYW4sIGlzQ2hlY2tlZEJ5RGVmYXVsdEtleT86IGJvb2xlYW4pIHtcbiAgICBjb25zdCBjb25maWdUZW1wbGF0ZUdyb3VwID0gdGhpcy5jb25maWdUZW1wbGF0ZUdyb3VwKCk7XG5cbiAgICBpZiAoIWNvbmZpZ1RlbXBsYXRlR3JvdXApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKCFjb25maWdUZW1wbGF0ZUdyb3VwLmlzVmlld1RyZWVKc29uICYmIGl0ZW0oKS5sZXZlbCAhPT0gaXRlbSgpLm1heExldmVsR3JvdXAgJiYgKGNvbmZpZ1RlbXBsYXRlR3JvdXAuaWdub3JlQ2hlY2tib3hHcm91cCB8fCBjb25maWdUZW1wbGF0ZUdyb3VwLnNpbmdsZVNlbGVjdEl0ZW0pKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHJlZkl0ZW0gPSAoaXRlbSgpLnJlZiB8fCBpdGVtKSBhcyBXcml0YWJsZVNpZ25hbDxhbnk+O1xuXG4gICAgaWYgKGNvbmZpZ1RlbXBsYXRlR3JvdXAuc2luZ2xlU2VsZWN0SXRlbSkge1xuICAgICAgY2hlY2tlZCA9IHRydWU7XG4gICAgICBjb25zdCBtYXBwaW5nSXRlbXNDaGVja2VkVGVtcCA9IGNsb25lRGVlcCh0aGlzLm1hcHBpbmdJdGVtc0NoZWNrZWQpIGFzIFdyaXRhYmxlU2lnbmFsPE1hcDxzdHJpbmcsIGFueT4+O1xuXG4gICAgICBmb3IgKGNvbnN0IFtrZXksIGl0ZW1DaGVja10gb2YgbWFwcGluZ0l0ZW1zQ2hlY2tlZFRlbXAoKSkge1xuICAgICAgICBjb25zdCBpdGVtQnlLZXkgPSB0aGlzLm1hcHBpbmdJdGVtc0NoZWNrZWQoKS5nZXQoa2V5KTtcblxuICAgICAgICBpdGVtQnlLZXkuaXNDaGVja01hbnVhbCA9IGZhbHNlO1xuICAgICAgICBkZWxldGUgaXRlbUJ5S2V5LnJlZi5pc0NoZWNrTWFudWFsO1xuICAgICAgICBpZiAoIWl0ZW1DaGVjay5yZWYuaXNDaGVja2VkQnlEZWZhdWx0S2V5KSB7XG4gICAgICAgICAgdGhpcy5tYXBwaW5nSXRlbXNDaGVja2VkKCkuZGVsZXRlKGtleSk7XG4gICAgICAgICAgdGhpcy5vdXRVblNlbGVjdE11bHRpS2V5LmVtaXQoW2tleV0pO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoIWlzQ2hlY2tlZEJ5RGVmYXVsdEtleSkge1xuICAgICAgICBpdGVtLnVwZGF0ZShjdXJyZW50ID0+IHtcbiAgICAgICAgICBjdXJyZW50LmlzQ2hlY2tNYW51YWwgPSB0cnVlO1xuXG4gICAgICAgICAgcmV0dXJuIGN1cnJlbnQ7XG4gICAgICAgIH0pO1xuICAgICAgICByZWZJdGVtLnVwZGF0ZShjdXJyZW50ID0+IHtcbiAgICAgICAgICBjdXJyZW50LmlzQ2hlY2tNYW51YWwgPSB0cnVlO1xuXG4gICAgICAgICAgcmV0dXJuIGN1cnJlbnQ7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgICBjb25zdCBpdGVtc09mR3JvdXAgPSBpdGVtKClbY29uZmlnVGVtcGxhdGVHcm91cC5maWVsZEdldEl0ZW1zXSBhcyBXcml0YWJsZVNpZ25hbDxBcnJheTxXcml0YWJsZVNpZ25hbDxhbnk+Pj47XG4gICAgLy8gYuG7jyBjaOG7jW4gdOG6pXQgY+G6oyBjw6FjIGl0ZW0gxJHhu4MgdGjhu7FjIGhp4buHbiBjaGVjayBs4bqhaVxuICAgIGlmIChjb25maWdUZW1wbGF0ZUdyb3VwLmlzVmlld1RyZWVKc29uIHx8IChjb25maWdUZW1wbGF0ZUdyb3VwLnNpbmdsZVNlbGVjdEl0ZW1CeVRyZWUgJiYgIWlzQ2hlY2tlZEJ5RGVmYXVsdEtleSAmJiAhY29uZmlnVGVtcGxhdGVHcm91cC5ub3RDaGFuZ2VTdGF0ZUl0ZW1DaGVja090aGVyKSkge1xuICAgICAgQXJyYXkuZnJvbSh0aGlzLm1hcHBpbmdJdGVtc0NoZWNrZWQoKS52YWx1ZXMoKSkuZm9yRWFjaChpdGVtID0+IHtcbiAgICAgICAgZGVsZXRlIGl0ZW0uaXNDaGVja01hbnVhbDtcbiAgICAgICAgcmVmSXRlbS51cGRhdGUoY3VycmVudCA9PiB7XG4gICAgICAgICAgZGVsZXRlIGN1cnJlbnQuaXNDaGVja01hbnVhbDtcblxuICAgICAgICAgIHJldHVybiBjdXJyZW50O1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuXG4gICAgICB0aGlzLm91dFVuU2VsZWN0TXVsdGlLZXkuZW1pdCh0aGlzLmtleXNDaGVja2VkKCkpO1xuICAgICAgdGhpcy5tYXBwaW5nSXRlbXNDaGVja2VkKCkuY2xlYXIoKTtcbiAgICAgIHRoaXMuc2V0S2V5c0NoZWNrZWRCeU1hcHBpbmdDaGVja2VkKGlzQ2xpY2tNYW51YWwsIGl0ZW0pO1xuICAgIH1cblxuICAgIGlmIChjaGVja2VkKSB7XG4gICAgICB0aGlzLmV4cGFuZEFsbEl0ZW1zSW5Hcm91cChpdGVtKTtcbiAgICAgIHRoaXMubWFwcGluZ0l0ZW1zQ2hlY2tlZCgpLnNldChpdGVtKClbdGhpcy5maWVsZEtleSgpXSwgaXRlbSgpKTtcbiAgICAgIGlmIChpc0NoZWNrZWRCeURlZmF1bHRLZXkpIHtcbiAgICAgICAgcmVmSXRlbS51cGRhdGUoY3VycmVudCA9PiB7XG4gICAgICAgICAgY3VycmVudC5pc0NoZWNrZWRCeURlZmF1bHRLZXkgPSBpc0NoZWNrZWRCeURlZmF1bHRLZXk7XG5cbiAgICAgICAgICByZXR1cm4gY3VycmVudDtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBpdGVtLnVwZGF0ZShjdXJyZW50ID0+IHtcbiAgICAgICAgY3VycmVudC5pc0NoZWNrZWRCeURlZmF1bHRLZXkgPSByZWZJdGVtKCkuaXNDaGVja2VkQnlEZWZhdWx0S2V5O1xuXG4gICAgICAgIHJldHVybiBjdXJyZW50O1xuICAgICAgfSk7XG4gICAgICBpZiAoY29uZmlnVGVtcGxhdGVHcm91cC5jaG9vc2VDaGlsZFRoZW5BdXRvQ2hvb3NlUGFyZW50KSB7IC8vIGNo4buJIGNo4buNbiBjw6FjIGNoYSB0csOqbiBjw7luZyB0cmVlLCBrbyBxdWFuIHTDom0gbm9kZSBjaGEgY8OzIGPDoWMgY29uIMSRw6MgxJFjIHTDrWNoIGjhur90IGNoxrBhXG4gICAgICAgIGl0ZW0udXBkYXRlKGN1cnJlbnQgPT4ge1xuICAgICAgICAgIGN1cnJlbnQuaXNDaGVja01hbnVhbCA9IHRydWU7XG5cbiAgICAgICAgICByZXR1cm4gY3VycmVudDtcbiAgICAgICAgfSk7XG4gICAgICAgIHJlZkl0ZW0udXBkYXRlKGN1cnJlbnQgPT4ge1xuICAgICAgICAgIGN1cnJlbnQuaXNDaGVja01hbnVhbCA9IHRydWU7XG5cbiAgICAgICAgICByZXR1cm4gY3VycmVudDtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMucmVjdXJzaXZlbHlDaGVja2VkUGFyZW50QnlUcmVlKGl0ZW0oKS5wYXJlbnRJdGVtKTtcblxuICAgICAgICBpZiAoIWNvbmZpZ1RlbXBsYXRlR3JvdXAuaWdub3JlQ2hvb3NlUGFyZW50VGhlbkF1dG9DaG9vc2VDaGlsZHJlbiAmJiAhaXNDaGVja2VkQnlEZWZhdWx0S2V5KSB7XG4gICAgICAgICAgdGhpcy5zZXRDaGVja0NoZWNrZWRJdGVtc0NoaWxkKGl0ZW1zT2ZHcm91cD8uKCkgfHwgW10pO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuc2V0S2V5c0NoZWNrZWRCeU1hcHBpbmdDaGVja2VkKGlzQ2xpY2tNYW51YWwsIGl0ZW0pO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmIChjb25maWdUZW1wbGF0ZUdyb3VwLmlnbm9yZUNob29zZVBhcmVudFRoZW5BdXRvQ2hvb3NlQ2hpbGRyZW4pIHsgLy8gbOG7sWEgY2jhu41uIG5vZGUgY2hhIHPhur0gYuG7jyBxdWEgdmnhu4djIGNo4buNbiB04bqldCBj4bqjIG5vZGUgY29uXG4gICAgICAgIHRoaXMuc2V0S2V5c0NoZWNrZWRCeU1hcHBpbmdDaGVja2VkKGlzQ2xpY2tNYW51YWwsIGl0ZW0pO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmIChpdGVtc09mR3JvdXAgJiYgaXRlbXNPZkdyb3VwKCkgJiYgaXRlbXNPZkdyb3VwKCkubGVuZ3RoICYmICFpc0NoZWNrZWRCeURlZmF1bHRLZXkgJiYgIWNvbmZpZ1RlbXBsYXRlR3JvdXAuaXNWaWV3VHJlZUpzb24pIHtcbiAgICAgICAgY29uc3QgaXRlbXNDaGFuZ2UgPSBjb25maWdUZW1wbGF0ZUdyb3VwLmlnbm9yZUNoYW5nZUNoaWxkcmVuRGlzYWJsZVdoZW5DaGFuZ2VQYXJlbnQgP1xuICAgICAgICAgIGl0ZW1zT2ZHcm91cCgpLmZpbHRlcigoaXRlbTogYW55KSA9PiAhdGhpcy5rZXlzRGlzYWJsZUl0ZW0oKT8uZmluZChrZXkgPT4ga2V5ID09PSBpdGVtKClbdGhpcy5maWVsZEtleSgpXSkpIDogaXRlbXNPZkdyb3VwKCk7XG5cbiAgICAgICAgdGhpcy5zZXRDaGVja0NoZWNrZWRJdGVtc0NoaWxkKGl0ZW1zQ2hhbmdlKTtcbiAgICAgIH1cbiAgICAgIGlmICghY29uZmlnVGVtcGxhdGVHcm91cC5ub3RDaGFuZ2VTdGF0ZUl0ZW1DaGVja090aGVyICYmICFjb25maWdUZW1wbGF0ZUdyb3VwLmlzVmlld1RyZWVKc29uKSB7XG4gICAgICAgIHRoaXMuc2V0Q2hlY2tDaGVja2VkSXRlbXNQYXJlbnQoaXRlbSgpLnBhcmVudEl0ZW0pO1xuICAgICAgfVxuICAgICAgdGhpcy5zZXRLZXlzQ2hlY2tlZEJ5TWFwcGluZ0NoZWNrZWQoaXNDbGlja01hbnVhbCwgaXRlbSk7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaXRlbS51cGRhdGUoY3VycmVudCA9PiB7XG4gICAgICBjdXJyZW50LmlzQ2hlY2tNYW51YWwgPSBmYWxzZTtcblxuICAgICAgaWYgKGlzQ2hlY2tlZEJ5RGVmYXVsdEtleSkge1xuICAgICAgICBjdXJyZW50LmlzQ2hlY2tlZEJ5RGVmYXVsdEtleSA9IGZhbHNlO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gY3VycmVudDtcbiAgICB9KTtcbiAgICByZWZJdGVtLnVwZGF0ZShjdXJyZW50ID0+IHtcbiAgICAgIGN1cnJlbnQuaXNDaGVja01hbnVhbCA9IGZhbHNlO1xuXG4gICAgICBpZiAoaXNDaGVja2VkQnlEZWZhdWx0S2V5KSB7XG4gICAgICAgIGN1cnJlbnQuaXNDaGVja2VkQnlEZWZhdWx0S2V5ID0gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBjdXJyZW50O1xuICAgIH0pO1xuICAgIHRoaXMubWFwcGluZ0l0ZW1zQ2hlY2tlZCgpLmRlbGV0ZShpdGVtKClbdGhpcy5maWVsZEtleSgpXSk7XG4gICAgdGhpcy5rZXlzQ2hlY2tlZC5zZXQoQXJyYXkuZnJvbSh0aGlzLm1hcHBpbmdJdGVtc0NoZWNrZWQoKS5rZXlzKCkpKTtcblxuICAgIGlmIChjb25maWdUZW1wbGF0ZUdyb3VwLm5vdENoYW5nZVN0YXRlSXRlbUNoZWNrT3RoZXIpIHtcbiAgICAgIHRoaXMubWFwcGluZ0l0ZW1zQ2hlY2tlZCgpLmRlbGV0ZShpdGVtKClbdGhpcy5maWVsZEtleSgpXSk7XG4gICAgICB0aGlzLm91dFVuU2VsZWN0TXVsdGlLZXkuZW1pdCghaXNFbXB0eShpdGVtKClbdGhpcy5maWVsZEtleSgpXSkgPyBbaXRlbSgpW3RoaXMuZmllbGRLZXkoKV1dIDogW10pO1xuICAgICAgdGhpcy5zZXRLZXlzQ2hlY2tlZEJ5TWFwcGluZ0NoZWNrZWQoaXNDbGlja01hbnVhbCwgaXRlbSk7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKGNvbmZpZ1RlbXBsYXRlR3JvdXAuaWdub3JlVW5zZWxlY3RDaGlsZHJlblJlbW92ZVNlbGVjdFBhcmVudCkge1xuICAgICAgdGhpcy5yZWN1cnNpdmVseUNoZWNrZWRQYXJlbnRCeVRyZWUoaXRlbSgpLnBhcmVudEl0ZW0pO1xuICAgIH1cblxuICAgIC8vIG7hur91IGtvIHBo4bqjaSB0csaw4budbmcgaMahcCBj4bunYSBiYW5rIHbDoCBkYW5oIG3hu6VjIHPhuqNuIHBo4bqpbSB0aMOsIGLhu48gY2hhIHPhur0gYuG7jyBjb25cbiAgICBpZiAoaXRlbXNPZkdyb3VwICYmIGl0ZW1zT2ZHcm91cCgpICYmIGl0ZW1zT2ZHcm91cCgpLmxlbmd0aCkge1xuICAgICAgY29uc3QgaXRlbXNDaGFuZ2UgPSBjb25maWdUZW1wbGF0ZUdyb3VwLmlnbm9yZUNoYW5nZUNoaWxkcmVuRGlzYWJsZVdoZW5DaGFuZ2VQYXJlbnQgP1xuICAgICAgICBpdGVtc09mR3JvdXAoKS5maWx0ZXIoKGl0ZW0pID0+ICF0aGlzLmtleXNEaXNhYmxlSXRlbSgpPy5maW5kKGtleSA9PiBrZXkgPT09IGl0ZW0oKVt0aGlzLmZpZWxkS2V5KCldKSkgOiBpdGVtc09mR3JvdXAoKTtcblxuICAgICAgdGhpcy5yZW1vdmVDaGVja2VkSXRlbXNDaGlsZChpdGVtc0NoYW5nZSk7XG4gICAgfVxuICAgIGlmIChpdGVtKCkucGFyZW50SXRlbSAmJiAhY29uZmlnVGVtcGxhdGVHcm91cC5pZ25vcmVVbnNlbGVjdENoaWxkcmVuUmVtb3ZlU2VsZWN0UGFyZW50KSB7XG4gICAgICB0aGlzLm1hcHBpbmdJdGVtc0NoZWNrZWQoKS5kZWxldGUoaXRlbSgpLnBhcmVudEl0ZW1bdGhpcy5maWVsZEtleSgpXSk7XG4gICAgfVxuICAgIHRoaXMuc2V0S2V5c0NoZWNrZWRCeU1hcHBpbmdDaGVja2VkKGlzQ2xpY2tNYW51YWwsIGl0ZW0pO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRJdGVtc09mR3JvdXAoaXRlbTogV3JpdGFibGVTaWduYWw8YW55Piwgc3RvcmVzOiBXcml0YWJsZVNpZ25hbDxBcnJheTxXcml0YWJsZVNpZ25hbDxhbnk+Pj4pIHtcbiAgICBjb25zdCBjb25maWdUZW1wbGF0ZUdyb3VwID0gdGhpcy5jb25maWdUZW1wbGF0ZUdyb3VwKCk7XG5cbiAgICBpZiAoIWNvbmZpZ1RlbXBsYXRlR3JvdXAgfHwgIXN0b3JlcyB8fCAhc3RvcmVzLmxlbmd0aCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGZvciAoY29uc3QgZ3JvdXAgb2Ygc3RvcmVzKCkpIHtcbiAgICAgIGlmIChncm91cCgpW3RoaXMuZmllbGRLZXkoKV0gPT09IGl0ZW0oKVt0aGlzLmZpZWxkS2V5KCldKSB7XG4gICAgICAgIHJldHVybiBncm91cCgpW2NvbmZpZ1RlbXBsYXRlR3JvdXAuZmllbGRHZXRJdGVtc10gYXMgV3JpdGFibGVTaWduYWw8QXJyYXk8V3JpdGFibGVTaWduYWw8YW55Pj4+O1xuICAgICAgfVxuICAgICAgY29uc3QgcmVzdWx0ID0gdGhpcy5nZXRJdGVtc09mR3JvdXAoaXRlbSwgZ3JvdXAoKVtjb25maWdUZW1wbGF0ZUdyb3VwLmZpZWxkR2V0SXRlbXNdKSBhcyBXcml0YWJsZVNpZ25hbDxBcnJheTxXcml0YWJsZVNpZ25hbDxhbnk+Pj47XG5cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgcmV0dXJuO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRLZXlzU3RpbGxPdGhlck9wdGlvbnMoaXRlbT86IFdyaXRhYmxlU2lnbmFsPGFueT4pIHtcbiAgICBpZiAoIWl0ZW0/LigpKSB7XG4gICAgICB0aGlzLmtleXNTdGlsbE90aGVyT3B0aW9ucy5zZXQoW10pO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGtleXNDaGVja2VkID0gQXJyYXkuZnJvbSh0aGlzLm1hcHBpbmdJdGVtc0NoZWNrZWQoKS5rZXlzKCkpO1xuICAgIGNvbnN0IGl0ZW1QYXJlbnQgPSBpdGVtKCkucGFyZW50SXRlbSBhcyBXcml0YWJsZVNpZ25hbDxhbnk+O1xuICAgIGNvbnN0IGluZGV4SXRlbSA9IHRoaXMua2V5c1N0aWxsT3RoZXJPcHRpb25zKCkuZmluZEluZGV4KGtleSA9PiBrZXkgPT09IGl0ZW0oKVt0aGlzLmZpZWxkS2V5KCldKTtcblxuICAgIGlmIChpbmRleEl0ZW0gPj0gMCkge1xuICAgICAgdGhpcy5rZXlzU3RpbGxPdGhlck9wdGlvbnMudXBkYXRlKGN1cnJlbnQgPT4ge1xuICAgICAgICBjdXJyZW50LnNwbGljZShpbmRleEl0ZW0sIDEpO1xuXG4gICAgICAgIHJldHVybiBjdXJyZW50O1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgaWYgKCFpdGVtUGFyZW50IHx8ICFpdGVtUGFyZW50KCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgaXRlbXNPZkdyb3VwUGFyZW50ID0gdGhpcy5nZXRJdGVtc09mR3JvdXAoaXRlbVBhcmVudCwgdGhpcy5zdG9yZSk7XG5cbiAgICBpZiAoIWl0ZW1zT2ZHcm91cFBhcmVudCB8fCAhaXRlbXNPZkdyb3VwUGFyZW50KCkgfHwgIWl0ZW1zT2ZHcm91cFBhcmVudCgpLmxlbmd0aCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBpbmRleFBhcmVudCA9IHRoaXMua2V5c1N0aWxsT3RoZXJPcHRpb25zKCkuZmluZEluZGV4KGtleSA9PiBrZXkgPT09IGl0ZW1QYXJlbnQoKVt0aGlzLmZpZWxkS2V5KCldKTtcblxuICAgIGlmIChpdGVtc09mR3JvdXBQYXJlbnQoKS5ldmVyeSgoZWxlbWVudCkgPT4ga2V5c0NoZWNrZWQuaW5jbHVkZXMoZWxlbWVudCgpW3RoaXMuZmllbGRLZXkoKV0pKSAmJiBpbmRleFBhcmVudCA+PSAwKSB7XG4gICAgICB0aGlzLmtleXNTdGlsbE90aGVyT3B0aW9ucy51cGRhdGUoY3VycmVudCA9PiB7XG4gICAgICAgIGN1cnJlbnQuc3BsaWNlKGluZGV4SXRlbSwgMSk7XG5cbiAgICAgICAgcmV0dXJuIGN1cnJlbnQ7XG4gICAgICB9KTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoaXRlbXNPZkdyb3VwUGFyZW50KCkuc29tZShlbGVtZW50ID0+IGtleXNDaGVja2VkLmluY2x1ZGVzKGVsZW1lbnQoKVt0aGlzLmZpZWxkS2V5KCldKSkgJiYgaW5kZXhQYXJlbnQgPCAwKSB7XG4gICAgICB0aGlzLmtleXNTdGlsbE90aGVyT3B0aW9ucy51cGRhdGUoY3VycmVudCA9PiBbLi4uY3VycmVudCwgaXRlbVBhcmVudCgpW3RoaXMuZmllbGRLZXkoKV1dKTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoaW5kZXhQYXJlbnQgPj0gMCkge1xuICAgICAgdGhpcy5rZXlzU3RpbGxPdGhlck9wdGlvbnMudXBkYXRlKGN1cnJlbnQgPT4ge1xuICAgICAgICBjdXJyZW50LnNwbGljZShpbmRleEl0ZW0sIDEpO1xuXG4gICAgICAgIHJldHVybiBjdXJyZW50O1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBzZXRLZXlzQ2hlY2tlZEJ5TWFwcGluZ0NoZWNrZWQoaXNDbGlja01hbnVhbDogYm9vbGVhbiwgaXRlbT86IFdyaXRhYmxlU2lnbmFsPGFueT4pIHtcbiAgICB0aGlzLmtleXNDaGVja2VkLnNldChBcnJheS5mcm9tKHRoaXMubWFwcGluZ0l0ZW1zQ2hlY2tlZCgpLmtleXMoKSkpO1xuICAgIHRoaXMuZW1pdE11bHRpS2V5Q2hlY2tlZChpc0NsaWNrTWFudWFsKTtcbiAgICB0aGlzLnNldEtleXNTdGlsbE90aGVyT3B0aW9ucyhpdGVtKTtcbiAgfVxuXG4gIHByaXZhdGUgZW1pdE11bHRpS2V5Q2hlY2tlZChpc0NsaWNrTWFudWFsID0gdHJ1ZSkge1xuICAgIGNvbnN0IGNvbmZpZ1RlbXBsYXRlR3JvdXAgPSB0aGlzLmNvbmZpZ1RlbXBsYXRlR3JvdXAoKTtcblxuICAgIGlmICghY29uZmlnVGVtcGxhdGVHcm91cCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBkYXRhTXVsdGlLZXlDaGVja2VkOiBJTGlzdERhdGFFbWl0TXVsdGlLZXkgPSB7IGtleXM6IG5ldyBBcnJheTxhbnk+KCksIG1hcEtleXM6IG5ldyBBcnJheTxJTGlzdERhdGFFbWl0S2V5PigpLCBpc0NsaWNrTWFudWFsIH07XG5cbiAgICBpZiAoKGNvbmZpZ1RlbXBsYXRlR3JvdXAuZW1pdEFsbEl0ZW1DaGVja2VkIHx8IGNvbmZpZ1RlbXBsYXRlR3JvdXAuY2hvb3NlQ2hpbGRUaGVuQXV0b0Nob29zZVBhcmVudCkgJiYgIWNvbmZpZ1RlbXBsYXRlR3JvdXAuaWdub3JlRW1pdEFsbEl0ZW1DaGVja2VkV2hlbkNob29zZUNoaWxkVGhlbkF1dG9DaG9vc2VQYXJlbnQpIHtcbiAgICAgIGZvciAoY29uc3QgW2tleSwgaXRlbV0gb2YgdGhpcy5tYXBwaW5nSXRlbXNDaGVja2VkKCkpIHtcbiAgICAgICAgZGF0YU11bHRpS2V5Q2hlY2tlZC5rZXlzLnB1c2goa2V5KTtcbiAgICAgICAgZGF0YU11bHRpS2V5Q2hlY2tlZC5tYXBLZXlzLnB1c2goeyBrZXksIGl0ZW06IChpdGVtLnJlZj8uKCkgfHwgaXRlbSksIGlzQ2xpY2tNYW51YWwgfSk7XG4gICAgICB9XG4gICAgICB0aGlzLm91dFNlbGVjdE11bHRpS2V5LmVtaXQoZGF0YU11bHRpS2V5Q2hlY2tlZCk7XG4gICAgICB0aGlzLnRvdGFsSXRlbUNoZWNrZWQuc2V0KGRhdGFNdWx0aUtleUNoZWNrZWQua2V5cy5sZW5ndGgpO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBba2V5LCBpdGVtXSBvZiB0aGlzLm1hcHBpbmdJdGVtc0NoZWNrZWQoKSkge1xuICAgICAgaWYgKGl0ZW1bdGhpcy5maWVsZEtleSgpXSAmJiAhU3RyaW5nKGl0ZW1bdGhpcy5maWVsZEtleSgpXSkuaW5jbHVkZXModGhpcy5QQVRURVJOX0ZBS0VfSUQpICYmICghaXRlbVtjb25maWdUZW1wbGF0ZUdyb3VwLmZpZWxkR2V0SXRlbXNdPy5sZW5ndGggfHwgIWl0ZW1bY29uZmlnVGVtcGxhdGVHcm91cC5maWVsZEdldEl0ZW1zXSgpLnNvbWUoKGl0ZW1Hcm91cDogV3JpdGFibGVTaWduYWw8YW55PikgPT4gdGhpcy5tYXBwaW5nSXRlbXNDaGVja2VkKCkuZ2V0KGl0ZW1Hcm91cCgpW3RoaXMuZmllbGRLZXkoKV0pKSkpIHtcbiAgICAgICAgZGF0YU11bHRpS2V5Q2hlY2tlZC5rZXlzLnB1c2goa2V5KTtcbiAgICAgICAgZGF0YU11bHRpS2V5Q2hlY2tlZC5tYXBLZXlzLnB1c2goeyBrZXksIGl0ZW06IChpdGVtLnJlZj8uKCkgfHwgaXRlbSksIGlzQ2xpY2tNYW51YWwgfSk7XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMub3V0U2VsZWN0TXVsdGlLZXkuZW1pdChkYXRhTXVsdGlLZXlDaGVja2VkKTtcbiAgICB0aGlzLnRvdGFsSXRlbUNoZWNrZWQuc2V0KGRhdGFNdWx0aUtleUNoZWNrZWQua2V5cy5sZW5ndGgpO1xuICB9XG5cbiAgcHJpdmF0ZSByZWN1cnNpdmVseUNoZWNrZWRQYXJlbnRCeVRyZWUoaXRlbTogYW55KSB7XG4gICAgaWYgKCFpdGVtKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMubWFwcGluZ0l0ZW1zQ2hlY2tlZCgpLnNldChpdGVtW3RoaXMuZmllbGRLZXkoKV0sIGl0ZW0oKSk7XG4gICAgdGhpcy5yZWN1cnNpdmVseUNoZWNrZWRQYXJlbnRCeVRyZWUoaXRlbS5wYXJlbnRJdGVtKTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0Q2hlY2tDaGVja2VkSXRlbXNQYXJlbnQoaXRlbTogV3JpdGFibGVTaWduYWw8YW55Pikge1xuICAgIGNvbnN0IGNvbmZpZ1RlbXBsYXRlR3JvdXAgPSB0aGlzLmNvbmZpZ1RlbXBsYXRlR3JvdXAoKTtcblxuICAgIGlmICghY29uZmlnVGVtcGxhdGVHcm91cCB8fCAhaXRlbSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBpdGVtc09mR3JvdXAgPSBpdGVtKClbY29uZmlnVGVtcGxhdGVHcm91cC5maWVsZEdldEl0ZW1zXSBhcyBXcml0YWJsZVNpZ25hbDxBcnJheTxXcml0YWJsZVNpZ25hbDxhbnk+Pj47XG5cbiAgICBpZiAoIWl0ZW1zT2ZHcm91cCgpIHx8ICFpdGVtc09mR3JvdXAoKS5sZW5ndGgpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZm9yIChjb25zdCBpdGVtR3JvdXAgb2YgaXRlbXNPZkdyb3VwKCkpIHtcbiAgICAgIGlmICghdGhpcy5tYXBwaW5nSXRlbXNDaGVja2VkKCkuaGFzKGl0ZW1Hcm91cCgpW3RoaXMuZmllbGRLZXkoKV0pKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5tYXBwaW5nSXRlbXNDaGVja2VkKCkuc2V0KGl0ZW0oKVt0aGlzLmZpZWxkS2V5KCldLCBpdGVtKCkpO1xuICAgIGlmIChpdGVtKCkucGFyZW50SXRlbSkge1xuICAgICAgdGhpcy5zZXRDaGVja0NoZWNrZWRJdGVtc1BhcmVudChpdGVtKCkucGFyZW50SXRlbSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBzZXRDaGVja0NoZWNrZWRJdGVtc0NoaWxkKGl0ZW1zOiBBcnJheTxXcml0YWJsZVNpZ25hbDxhbnk+Pikge1xuICAgIGNvbnN0IGNvbmZpZ1RlbXBsYXRlR3JvdXAgPSB0aGlzLmNvbmZpZ1RlbXBsYXRlR3JvdXAoKTtcblxuICAgIGlmICghY29uZmlnVGVtcGxhdGVHcm91cCB8fCAhaXRlbXMgfHwgIWl0ZW1zLmxlbmd0aCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpdGVtcy5mb3JFYWNoKGl0ZW0gPT4ge1xuICAgICAgdGhpcy5tYXBwaW5nSXRlbXNDaGVja2VkKCkuc2V0KGl0ZW0oKVt0aGlzLmZpZWxkS2V5KCldLCBpdGVtKCkpO1xuICAgICAgY29uc3QgaXRlbXNPZkdyb3VwID0gaXRlbSgpW2NvbmZpZ1RlbXBsYXRlR3JvdXAuZmllbGRHZXRJdGVtc10gYXMgV3JpdGFibGVTaWduYWw8QXJyYXk8V3JpdGFibGVTaWduYWw8YW55Pj4+O1xuXG4gICAgICBpZiAoaXRlbXNPZkdyb3VwICYmIGl0ZW1zT2ZHcm91cCgpICYmIGl0ZW1zT2ZHcm91cCgpLmxlbmd0aCkge1xuICAgICAgICB0aGlzLnNldENoZWNrQ2hlY2tlZEl0ZW1zQ2hpbGQoaXRlbXNPZkdyb3VwKCkpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSByZW1vdmVDaGVja2VkSXRlbXNDaGlsZChpdGVtczogQXJyYXk8V3JpdGFibGVTaWduYWw8YW55Pj4pIHtcbiAgICBjb25zdCBjb25maWdUZW1wbGF0ZUdyb3VwID0gdGhpcy5jb25maWdUZW1wbGF0ZUdyb3VwKCk7XG5cbiAgICBpZiAoIWNvbmZpZ1RlbXBsYXRlR3JvdXAgfHwgIWl0ZW1zIHx8ICFpdGVtcy5sZW5ndGgpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaXRlbXMuZm9yRWFjaChpdGVtID0+IHtcbiAgICAgIGl0ZW0udXBkYXRlKGN1cnJlbnQgPT4ge1xuICAgICAgICBjdXJyZW50LmlzQ2hlY2tNYW51YWwgPSBmYWxzZTtcblxuICAgICAgICByZXR1cm4gY3VycmVudDtcbiAgICAgIH0pO1xuICAgICAgdGhpcy5tYXBwaW5nSXRlbXNDaGVja2VkKCkuZGVsZXRlKGl0ZW0oKVt0aGlzLmZpZWxkS2V5KCldKTtcbiAgICAgIHRoaXMub3V0VW5TZWxlY3RNdWx0aUtleS5lbWl0KFtpdGVtKClbdGhpcy5maWVsZEtleSgpXV0pO1xuXG4gICAgICBjb25zdCBpdGVtc09mR3JvdXAgPSBpdGVtKClbY29uZmlnVGVtcGxhdGVHcm91cC5maWVsZEdldEl0ZW1zXSBhcyBXcml0YWJsZVNpZ25hbDxBcnJheTxXcml0YWJsZVNpZ25hbDxhbnk+Pj47XG5cbiAgICAgIGlmIChpdGVtc09mR3JvdXAgJiYgaXRlbXNPZkdyb3VwKCkgJiYgaXRlbXNPZkdyb3VwKCkubGVuZ3RoKSB7XG4gICAgICAgIHRoaXMucmVtb3ZlQ2hlY2tlZEl0ZW1zQ2hpbGQoaXRlbXNPZkdyb3VwKCkpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcHJvdGVjdGVkIHByb2Nlc3NTZWFyY2goKSB7XG4gICAgdGhpcy5wcm9jZXNzRGF0YSgpO1xuICB9XG5cbiAgcHJvdGVjdGVkIHByb2Nlc3NEYXRhKCk6IHZvaWQge1xuICAgIHRoaXMudG90YWxJdGVtLnNldCgwKTtcblxuICAgIGNvbnN0IGNvbmZpZ1RlbXBsYXRlR3JvdXAgPSB0aGlzLmNvbmZpZ1RlbXBsYXRlR3JvdXAoKTtcblxuICAgIGlmICghY29uZmlnVGVtcGxhdGVHcm91cCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGxldCBpdGVtcyA9IHRoaXMuc3RvcmUoKS5tYXAoKGl0ZW0pID0+IHtcbiAgICAgIGlmIChpc05pbChpdGVtKClbdGhpcy5maWVsZEtleSgpXSkgfHwgaXRlbSgpW3RoaXMuZmllbGRLZXkoKV0gPT09ICcnKSB7XG4gICAgICAgIGl0ZW0udXBkYXRlKGN1cnJlbnQgPT4ge1xuICAgICAgICAgIGN1cnJlbnRbdGhpcy5maWVsZEtleSgpXSA9IGAke3RoaXMuUEFUVEVSTl9GQUtFX0lEfSR7dXVpZCgpfWA7XG5cbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgY29uc3QgaXRlbU1hcCA9IGNsb25lRGVlcChpdGVtKSBhcyBXcml0YWJsZVNpZ25hbDxhbnk+O1xuICAgICAgaXRlbU1hcC51cGRhdGUoY3VycmVudCA9PiB7XG4gICAgICAgIGN1cnJlbnQucmVmID0gaXRlbTtcbiAgICAgICAgY3VycmVudC5pc1Jvb3QgPSB0cnVlO1xuICAgICAgICBjdXJyZW50LmV4cGFuZCA9IHRoaXMua2V5U2VhcmNoKCkgPyB0cnVlIDogZmFsc2U7XG4gICAgICAgIGN1cnJlbnQubWF4TGV2ZWxHcm91cCA9IHRoaXMuY29uZmlnVGVtcGxhdGVHcm91cCgpPy5nZXRNYXhMZXZlbEdyb3VwKGl0ZW0oKSk7XG4gICAgICAgIGN1cnJlbnQubGV2ZWwgPSB0aGlzLmxldmVsKCk7XG4gICAgICAgIGN1cnJlbnQudGV4dERlc2NyaXB0aW9uR3JvdXBXaGVuTm9EYXRhID0gdGhpcy5jb25maWdUZW1wbGF0ZUdyb3VwKCk/LmdldERlc2NyaXB0aW9uR3JvdXBXaGVuTm9EYXRhPy4oaXRlbSgpKTtcbiAgICAgICAgY3VycmVudC5pY29uRW1wdHlEYXRhSW5Hcm91cCA9IHRoaXMuY29uZmlnVGVtcGxhdGVHcm91cCgpPy5nZXRJY29uRW1wdHlEYXRhSW5Hcm91cD8uKGl0ZW0oKSk7XG5cbiAgICAgICAgcmV0dXJuIGN1cnJlbnQ7XG4gICAgICB9KTtcbiAgICAgIGlmICgoaXRlbU1hcCgpLmxldmVsID09PSBpdGVtTWFwKCkubWF4TGV2ZWxHcm91cCB8fCAhdGhpcy5jb25maWdUZW1wbGF0ZUdyb3VwKCk/Lmlnbm9yZUNoZWNrYm94R3JvdXApICYmICFTdHJpbmcoaXRlbSgpW3RoaXMuZmllbGRLZXkoKV0pPy5pbmNsdWRlcyh0aGlzLlBBVFRFUk5fRkFLRV9JRCkpIHtcbiAgICAgICAgdGhpcy50b3RhbEl0ZW0udXBkYXRlKGN1cnJlbnQgPT4gY3VycmVudCsrKTtcbiAgICAgIH1cbiAgICAgIGlmICghdGhpcy5rZXlTZWFyY2goKSAmJiB0aGlzLmNvbmZpZ1RlbXBsYXRlR3JvdXAoKT8uZ2V0RXhwYW5kR3JvdXApIHtcbiAgICAgICAgaXRlbU1hcC51cGRhdGUoY3VycmVudCA9PiB7XG4gICAgICAgICAgY3VycmVudC5leHBhbmQgPSB0aGlzLmNvbmZpZ1RlbXBsYXRlR3JvdXAoKT8uZ2V0RXhwYW5kR3JvdXA/LihpdGVtKTtcblxuICAgICAgICAgIHJldHVybiBjdXJyZW50O1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLmNvbmZpZ1RlbXBsYXRlR3JvdXAoKT8uZ2V0UG9wb3Zlckdyb3VwKSB7XG4gICAgICAgIGl0ZW1NYXAudXBkYXRlKGN1cnJlbnQgPT4ge1xuICAgICAgICAgIGN1cnJlbnQuZGF0YVBvcG92ZXIgPSB0aGlzLmNvbmZpZ1RlbXBsYXRlR3JvdXAoKT8uZ2V0UG9wb3Zlckdyb3VwPy4oaXRlbSk7XG5cbiAgICAgICAgICByZXR1cm4gY3VycmVudDtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5jb25maWdUZW1wbGF0ZUdyb3VwKCk/LmdldEJ1dHRvbkdyb3VwKSB7XG4gICAgICAgIGl0ZW1NYXAudXBkYXRlKGN1cnJlbnQgPT4ge1xuICAgICAgICAgIGN1cnJlbnQuYnV0dG9uSW5Hcm91cCA9IHRoaXMuY29uZmlnVGVtcGxhdGVHcm91cCgpPy5nZXRCdXR0b25Hcm91cD8uKGl0ZW0pO1xuXG4gICAgICAgICAgcmV0dXJuIGN1cnJlbnQ7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgY29uc3QgdGV4dCA9IGRlbGV0ZVVuaWNvZGUodGhpcy5idWlsZFZhbHVlQnlDb25maWcoaXRlbU1hcCkpLnRvTG9jYWxlTG93ZXJDYXNlKCk7XG4gICAgICBjb25zdCB0ZXh0RXNjYXBlID0gZXNjYXBlSHRtbCh0ZXh0KTtcbiAgICAgIGNvbnN0IGtleVNlYXJjaCA9IGRlbGV0ZVVuaWNvZGUoZXNjYXBlSHRtbCgodGhpcy5rZXlTZWFyY2goKSB8fCAnJykudHJpbSgpLnRvTG9jYWxlTG93ZXJDYXNlKCkpKTtcblxuICAgICAgaXRlbU1hcC51cGRhdGUoY3VycmVudCA9PiB7XG4gICAgICAgIGN1cnJlbnQuZGlzcGxheUFsbENoaWxkID0gZmFsc2U7XG5cbiAgICAgICAgcmV0dXJuIGN1cnJlbnQ7XG4gICAgICB9KTtcbiAgICAgIGlmICgha2V5U2VhcmNoIHx8ICh0aGlzLmNvbmZpZ1RlbXBsYXRlR3JvdXAoKT8uc2VhcmNoQWxsTGV2ZWwgJiYgKHRleHQuaW5jbHVkZXMoa2V5U2VhcmNoKSB8fCB0ZXh0RXNjYXBlLmluY2x1ZGVzKGtleVNlYXJjaCkpKSkge1xuICAgICAgICBpdGVtTWFwLnVwZGF0ZShjdXJyZW50ID0+IHtcbiAgICAgICAgICBjdXJyZW50LmRpc3BsYXlBbGxDaGlsZCA9IHRydWU7XG4gICAgICAgICAgY3VycmVudC5oYXNEaXNwbGF5ID0gdHJ1ZTtcblxuICAgICAgICAgIHJldHVybiBjdXJyZW50O1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGl0ZW1Hcm91cCA9IGl0ZW0oKVtjb25maWdUZW1wbGF0ZUdyb3VwLmZpZWxkR2V0SXRlbXNdIGFzIFdyaXRhYmxlU2lnbmFsPEFycmF5PFdyaXRhYmxlU2lnbmFsPGFueT4+PjtcblxuICAgICAgaXRlbU1hcC51cGRhdGUoY3VycmVudCA9PiB7XG4gICAgICAgIGNvbnN0IGNoaWxkcmVuID0gY3VycmVudFtjb25maWdUZW1wbGF0ZUdyb3VwLmZpZWxkR2V0SXRlbXNdIGFzIFdyaXRhYmxlU2lnbmFsPEFycmF5PFdyaXRhYmxlU2lnbmFsPGFueT4+PjtcbiAgICAgICAgY29uc3QgZGF0YSA9IHRoaXMuZmlsdGVySXRlbXNEaXNwbGF5KHRoaXMuY29udmVydERhdGFCeUdyb3VwSW5JdGVtKGl0ZW1Hcm91cD8uKCkgfHwgW10sIGl0ZW1NYXApKTtcblxuICAgICAgICBjaGlsZHJlbi5zZXQoZGF0YSk7XG4gICAgICAgIGlmIChjdXJyZW50W2NvbmZpZ1RlbXBsYXRlR3JvdXAuZmllbGRHZXRJdGVtc10/LigpKSB7XG4gICAgICAgICAgY3VycmVudFtjb25maWdUZW1wbGF0ZUdyb3VwLmZpZWxkR2V0SXRlbXNdLnVwZGF0ZSgoaXRlbUZpZWxkczogQXJyYXk8YW55PikgPT4ge1xuICAgICAgICAgICAgaWYgKCFpdGVtRmllbGRzLmxlbmd0aCkge1xuICAgICAgICAgICAgICByZXR1cm4gaXRlbUZpZWxkcztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGl0ZW1GaWVsZHNbMF0uaXNGaXJzdCA9IHRydWU7XG4gICAgICAgICAgICBjb25zdCBsYXN0SW5kZXggPSBpdGVtRmllbGRzPy5sZW5ndGggLSAxO1xuXG4gICAgICAgICAgICBpZiAobGFzdEluZGV4ID49IDApIHtcbiAgICAgICAgICAgICAgaXRlbUZpZWxkc1tsYXN0SW5kZXhdLmlzTGFzdCA9IHRydWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiBpdGVtRmllbGRzO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGN1cnJlbnQuYm9udXNQYWRkaW5nTGVmdCA9IDA7XG4gICAgICAgIGlmIChjb25maWdUZW1wbGF0ZUdyb3VwLmdldEJvbnVzUGFkZGluZ0xlZnRJdGVtKSB7XG4gICAgICAgICAgY3VycmVudC5ib251c1BhZGRpbmdMZWZ0ID0gY29uZmlnVGVtcGxhdGVHcm91cC5nZXRCb251c1BhZGRpbmdMZWZ0SXRlbShjdXJyZW50KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY29uZmlnVGVtcGxhdGVHcm91cC5nZXRDbGFzc0luY2x1ZGVJdGVtTm9EYXRhKSB7XG4gICAgICAgICAgY3VycmVudC5jbGFzc0luY2x1ZGVJdGVtTm9EYXRhID0gY29uZmlnVGVtcGxhdGVHcm91cC5nZXRDbGFzc0luY2x1ZGVJdGVtTm9EYXRhKGN1cnJlbnQpO1xuICAgICAgICB9XG4gICAgICAgIGN1cnJlbnQuYXZhdGFyQ29uZmlnID0gY29uZmlnVGVtcGxhdGVHcm91cC5nZXRBdmF0YXJDb25maWcgJiYgY29uZmlnVGVtcGxhdGVHcm91cC5nZXRBdmF0YXJDb25maWcoY3VycmVudCk7XG5cbiAgICAgICAgcmV0dXJuIGN1cnJlbnQ7XG4gICAgICB9KTtcbiAgICAgIGlmICh0aGlzLm11bHRpS2V5U2VsZWN0ZWQoKSAmJiB0aGlzLm11bHRpS2V5U2VsZWN0ZWQoKT8ubGVuZ3RoICYmIHRoaXMubXVsdGlLZXlTZWxlY3RlZCgpPy5zb21lKGtleSA9PiBrZXkgPT09IGl0ZW1NYXAoKVt0aGlzLmZpZWxkS2V5KCldKSkge1xuICAgICAgICB0aGlzLmhhbmRsZXJDaGFuZ2VDaGVja2VkKHRydWUsIGl0ZW1NYXAsIGZhbHNlLCB0cnVlKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuYnVpbGRWYWx1ZUJ5Q29uZmlnKGl0ZW1NYXApO1xuXG4gICAgICByZXR1cm4gaXRlbU1hcDtcbiAgICB9KTtcblxuICAgIGlmICh0aGlzLmNvbmZpZ1RlbXBsYXRlR3JvdXAoKT8uc2VhcmNoQWxsTGV2ZWwgJiYgdGhpcy5rZXlTZWFyY2goKSkge1xuICAgICAgaXRlbXMgPSBpdGVtcy5maWx0ZXIoaXRlbSA9PiB7XG4gICAgICAgIHJldHVybiBpdGVtKCkuaGFzRGlzcGxheVxuICAgICAgfSk7XG4gICAgfVxuICAgIHRoaXMuY29uZmlnKCk/LnNvcnQ/LihpdGVtcyk7XG4gICAgdGhpcy5pdGVtcy5zZXQoaXRlbXMpO1xuICAgIHRoaXMubXVsdGlLZXlTZWxlY3RlZC5zZXQoW10pXG4gICAgY29uc3QgY2FsbEJhY2tDYWxjdWxhdG9ySGVpZ2h0U3VjY2VzcyA9ICgpID0+IHtcbiAgICAgIHRoaXMuY2FsY3VsYXRvckhlaWdoSXRlbVN1Y2Nlc3Muc2V0KHRydWUpO1xuXG4gICAgICBpZiAoY29uZmlnVGVtcGxhdGVHcm91cC5leHBhbmRGaXJzdEl0ZW0gJiYgdGhpcy5pdGVtcygpWzBdKSB7XG4gICAgICAgIHRoaXMuZXhwYW5kQWxsSXRlbXNJbkdyb3VwKHRoaXMuaXRlbXMoKVswXSk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuc2V0SGVpZ2h0Vmlld1BvcnQoKTtcbiAgICAgIGlmICh0aGlzLmZpcnN0SXRlbVNlbGVjdGVkICYmIHRoaXMuZmlyc3RJdGVtU2VsZWN0ZWQoKSkge1xuICAgICAgICB0aGlzLmhhbmRsZXJDaGFuZ2VDaGVja2VkKHRydWUsIHRoaXMuZmlyc3RJdGVtU2VsZWN0ZWQsIGZhbHNlKTtcbiAgICAgICAgdGhpcy5maXJzdEl0ZW1TZWxlY3RlZC5zZXQodW5kZWZpbmVkKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IGNoZWNrTG9hZEl0ZW0gPSAocHJlU3RhdGVIYXNTY3JvbGw6IGJvb2xlYW4sIGN1cnJlbnRIYXNTY3JvbGw6IGJvb2xlYW4pID0+IHtcbiAgICAgIGlmICh0aGlzLmtleXNIaWRkZW5JdGVtKCk/Lmxlbmd0aCAmJiBwcmVTdGF0ZUhhc1Njcm9sbCAmJiAhY3VycmVudEhhc1Njcm9sbCAmJiAodGhpcy5pc1NlYXJjaE9ubGluZSgpKSkge1xuICAgICAgICB0aGlzLmNhbGxBcGlCeVNlcnZpY2UoZmFsc2UpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMubG9hZGluZy5zZXQoZmFsc2UpO1xuICAgICAgdGhpcy5vdXRMb2FkaW5nLmVtaXQodGhpcy5sb2FkaW5nKCkpO1xuICAgICAgdGhpcy5yZWZyZXNoVmlldyhjYWxsQmFja0NhbGN1bGF0b3JIZWlnaHRTdWNjZXNzLCBjaGVja0xvYWRJdGVtKTtcbiAgICAgIHRoaXMub3V0TG9hZEl0ZW1zQ29tcGxldGUuZW1pdCh7IGl0ZW1zOiB0aGlzLml0ZW1zKCkgfSk7XG4gICAgfSk7XG5cbiAgICByZXR1cm47XG4gIH1cblxuICBwcml2YXRlIHJlZnJlc2hWaWV3KGNhbGxCYWNrQ2FsY3VsYXRvckhlaWdodFN1Y2Nlc3M/OiAoKSA9PiB2b2lkLCBjaGVja0xvYWRJdGVtPzogKHByZVN0YXRlSGFzU2Nyb2xsOiBib29sZWFuLCBjdXJyZW50SGFzU2Nyb2xsOiBib29sZWFuKSA9PiB2b2lkKSB7XG4gICAgdGhpcy5zZXRIZWlnaHRWaWV3UG9ydChjYWxsQmFja0NhbGN1bGF0b3JIZWlnaHRTdWNjZXNzKTtcbiAgICB0aGlzLmNoZWNrVmlld1BvcnRTY3JvbGwoY2hlY2tMb2FkSXRlbSk7XG4gIH1cblxuICBwcml2YXRlIGV4cGFuZEFsbEl0ZW1zSW5Hcm91cChpdGVtOiBhbnkpIHtcbiAgICBjb25zdCBjb25maWdUZW1wbGF0ZUdyb3VwID0gdGhpcy5jb25maWdUZW1wbGF0ZUdyb3VwKCk7XG4gICAgaWYgKCFjb25maWdUZW1wbGF0ZUdyb3VwIHx8ICFpdGVtKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGl0ZW0uZXhwYW5kID0gdHJ1ZTtcbiAgICBjb25zdCBpdGVtczogQXJyYXk8YW55PiA9IGl0ZW1bY29uZmlnVGVtcGxhdGVHcm91cC5maWVsZEdldEl0ZW1zXTtcblxuICAgIGlmICghaXRlbXMgfHwgIWl0ZW1zLmxlbmd0aCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpdGVtcy5mb3JFYWNoKGl0ZW1Hcm91cCA9PiB0aGlzLmV4cGFuZEFsbEl0ZW1zSW5Hcm91cChpdGVtR3JvdXApKTtcbiAgfVxuXG5cbiAgcHJpdmF0ZSBjb252ZXJ0RGF0YUJ5R3JvdXBJbkl0ZW0oaXRlbXM6IEFycmF5PFdyaXRhYmxlU2lnbmFsPGFueT4+LCBwYXJlbnRJdGVtOiBXcml0YWJsZVNpZ25hbDxhbnk+KSB7XG4gICAgY29uc3QgY29uZmlnVGVtcGxhdGVHcm91cCA9IHRoaXMuY29uZmlnVGVtcGxhdGVHcm91cCgpO1xuICAgIGlmICghY29uZmlnVGVtcGxhdGVHcm91cCB8fCAhaXRlbXMgfHwgIWl0ZW1zLmxlbmd0aCkge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cbiAgICBjb25zdCBpdGVtc01hcCA9IGl0ZW1zLm1hcChpdGVtID0+IHtcbiAgICAgIGlmIChpc05pbChpdGVtKClbdGhpcy5maWVsZEtleSgpXSkgfHwgaXRlbSgpW3RoaXMuZmllbGRLZXkoKV0gPT09ICcnKSB7XG4gICAgICAgIGl0ZW0oKVt0aGlzLmZpZWxkS2V5KCldID0gYCR7dGhpcy5QQVRURVJOX0ZBS0VfSUR9JHt1dWlkKCl9YDtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGl0ZW1NYXAgPSBjbG9uZURlZXAoaXRlbSkgYXMgV3JpdGFibGVTaWduYWw8YW55PjtcblxuICAgICAgaXRlbU1hcC51cGRhdGUoY3VycmVudCA9PiB7XG4gICAgICAgIGN1cnJlbnQucmVmID0gaXRlbTtcbiAgICAgICAgY3VycmVudC5wYXJlbnRJdGVtID0gcGFyZW50SXRlbTtcbiAgICAgICAgY3VycmVudFt0aGlzLmZpZWxkS2V5KCldID0gaXRlbSgpW3RoaXMuZmllbGRLZXkoKV07XG5cbiAgICAgICAgY3VycmVudC5tYXhMZXZlbEdyb3VwID0gcGFyZW50SXRlbSgpLm1heExldmVsR3JvdXA7XG4gICAgICAgIGN1cnJlbnQubGV2ZWwgPSBwYXJlbnRJdGVtKCkubGV2ZWwgKyAxO1xuICAgICAgICBjdXJyZW50LmFycmF5TGV2ZWwgPSByYW5nZSgyLCBjdXJyZW50LmxldmVsICsgMSk7XG4gICAgICAgIGlmICgoY3VycmVudC5sZXZlbCA9PT0gY3VycmVudC5tYXhMZXZlbEdyb3VwIHx8ICFjb25maWdUZW1wbGF0ZUdyb3VwLmlnbm9yZUNoZWNrYm94SXRlbSkgJiYgIVN0cmluZyhpdGVtKClbdGhpcy5maWVsZEtleSgpXSk/LmluY2x1ZGVzKHRoaXMuUEFUVEVSTl9GQUtFX0lEKSkge1xuICAgICAgICAgIHRoaXMudG90YWxJdGVtLnVwZGF0ZShjdXJyZW50ID0+IGN1cnJlbnQrKyk7XG4gICAgICAgIH1cblxuICAgICAgICBjdXJyZW50LmV4cGFuZCA9IHRoaXMua2V5U2VhcmNoKCkgPyB0cnVlIDogZmFsc2U7XG4gICAgICAgIGlmICghdGhpcy5rZXlTZWFyY2goKSAmJiBjb25maWdUZW1wbGF0ZUdyb3VwLmdldEV4cGFuZEl0ZW0pIHtcbiAgICAgICAgICBjdXJyZW50LmV4cGFuZCA9IGNvbmZpZ1RlbXBsYXRlR3JvdXAuZ2V0RXhwYW5kSXRlbShjdXJyZW50KTtcbiAgICAgICAgfVxuICAgICAgICBjdXJyZW50LmRpc3BsYXlBbGxDaGlsZCA9IHBhcmVudEl0ZW0oKS5kaXNwbGF5QWxsQ2hpbGQ7XG4gICAgICAgIGlmIChjb25maWdUZW1wbGF0ZUdyb3VwLmdldFBvcG92ZXJJdGVtKSB7XG4gICAgICAgICAgY3VycmVudC5kYXRhUG9wb3ZlciA9IGNvbmZpZ1RlbXBsYXRlR3JvdXAuZ2V0UG9wb3Zlckl0ZW0oY3VycmVudCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNvbmZpZ1RlbXBsYXRlR3JvdXAuZ2V0SWNvbkltYWdlQ2xhc3MpIHtcbiAgICAgICAgICBjdXJyZW50Lmljb25JbWFnZUNsYXNzID0gY29uZmlnVGVtcGxhdGVHcm91cC5nZXRJY29uSW1hZ2VDbGFzcyhjdXJyZW50KTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB0ZXh0ID0gZGVsZXRlVW5pY29kZSh0aGlzLmJ1aWxkVmFsdWVCeUNvbmZpZyhpc1NpZ25hbChjdXJyZW50KSA/IGN1cnJlbnQgYXMgV3JpdGFibGVTaWduYWw8YW55PiA6IHNpZ25hbChjdXJyZW50KSkudG9Mb2NhbGVMb3dlckNhc2UoKSk7XG4gICAgICAgIGNvbnN0IGtleVNlYXJjaCA9IGRlbGV0ZVVuaWNvZGUoZXNjYXBlSHRtbCgodGhpcy5rZXlTZWFyY2goKSB8fCAnJykudHJpbSgpLnRvTG9jYWxlTG93ZXJDYXNlKCkpKTtcbiAgICAgICAgY29uc3QgdGV4dEVzY2FwZSA9IGVzY2FwZUh0bWwodGV4dCk7XG4gICAgICAgIGlmICgoIXRoaXMua2V5c0hpZGRlbkl0ZW0oKT8uc29tZShrZXkgPT4ga2V5ID09PSBjdXJyZW50W3RoaXMuZmllbGRLZXkoKV0pKSAmJiAoKHBhcmVudEl0ZW0oKS5kaXNwbGF5QWxsQ2hpbGQgfHwgIWtleVNlYXJjaCkgfHwgKChjb25maWdUZW1wbGF0ZUdyb3VwLnNlYXJjaEFsbExldmVsIHx8ICFjdXJyZW50W3RoaXMuZmllbGRLZXkoKV0uaW5jbHVkZXModGhpcy5QQVRURVJOX0ZBS0VfSUQpKSAmJiAodGV4dC5pbmNsdWRlcyhrZXlTZWFyY2gpIHx8IHRleHRFc2NhcGUuaW5jbHVkZXMoa2V5U2VhcmNoKSkpKSkge1xuICAgICAgICAgIGN1cnJlbnQuZGlzcGxheUFsbENoaWxkID0gdHJ1ZTtcbiAgICAgICAgICB0aGlzLnNldERpc3BsYXlJdGVtKGN1cnJlbnQpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGl0ZW1Hcm91cCA9IGN1cnJlbnRbY29uZmlnVGVtcGxhdGVHcm91cC5maWVsZEdldEl0ZW1zXSBhcyBXcml0YWJsZVNpZ25hbDxBcnJheTxXcml0YWJsZVNpZ25hbDxhbnk+Pj47XG4gICAgICAgIGlmIChpdGVtR3JvdXA/LigpKSB7XG4gICAgICAgICAgY29uc3QgZGF0YSA9IHRoaXMuZmlsdGVySXRlbXNEaXNwbGF5KHRoaXMuY29udmVydERhdGFCeUdyb3VwSW5JdGVtKGl0ZW1Hcm91cD8uKCksIHNpZ25hbChjdXJyZW50KSkpO1xuICAgICAgICAgIGl0ZW1Hcm91cC5zZXQoZGF0YSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY3VycmVudFtjb25maWdUZW1wbGF0ZUdyb3VwLmZpZWxkR2V0SXRlbXNdPy4oKSkge1xuICAgICAgICAgIGN1cnJlbnRbY29uZmlnVGVtcGxhdGVHcm91cC5maWVsZEdldEl0ZW1zXS51cGRhdGUoKGl0ZW1GaWVsZHM6IEFycmF5PGFueT4pID0+IHtcbiAgICAgICAgICAgIGlmICghaXRlbUZpZWxkcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGl0ZW1GaWVsZHM7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpdGVtRmllbGRzWzBdLmlzRmlyc3QgPSB0cnVlO1xuICAgICAgICAgICAgY29uc3QgbGFzdEluZGV4ID0gaXRlbUZpZWxkcz8ubGVuZ3RoIC0gMTtcblxuICAgICAgICAgICAgaWYgKGxhc3RJbmRleCA+PSAwKSB7XG4gICAgICAgICAgICAgIGl0ZW1GaWVsZHNbbGFzdEluZGV4XS5pc0xhc3QgPSB0cnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gaXRlbUZpZWxkcztcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBjdXJyZW50LmJvbnVzUGFkZGluZ0xlZnQgPSAwO1xuICAgICAgICBpZiAoY29uZmlnVGVtcGxhdGVHcm91cC5nZXRCb251c1BhZGRpbmdMZWZ0SXRlbSkge1xuICAgICAgICAgIGN1cnJlbnQuYm9udXNQYWRkaW5nTGVmdCA9IGNvbmZpZ1RlbXBsYXRlR3JvdXAuZ2V0Qm9udXNQYWRkaW5nTGVmdEl0ZW0oY3VycmVudCwgcGFyZW50SXRlbSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNvbmZpZ1RlbXBsYXRlR3JvdXAuZ2V0Q2xhc3NJbmNsdWRlSXRlbU5vRGF0YSkge1xuICAgICAgICAgIGN1cnJlbnQuY2xhc3NJbmNsdWRlSXRlbU5vRGF0YSA9IGNvbmZpZ1RlbXBsYXRlR3JvdXAuZ2V0Q2xhc3NJbmNsdWRlSXRlbU5vRGF0YShjdXJyZW50LCBwYXJlbnRJdGVtKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY29uZmlnVGVtcGxhdGVHcm91cC5nZXRMaW5rSW1hZ2VFcnJvcikge1xuICAgICAgICAgIGN1cnJlbnQubGlua0ltYWdlRXJyb3IgPSBjb25maWdUZW1wbGF0ZUdyb3VwLmdldExpbmtJbWFnZUVycm9yKGN1cnJlbnQpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjb25maWdUZW1wbGF0ZUdyb3VwLmdldENsYXNzSW5jbHVkZUl0ZW1Db250ZW50KSB7XG4gICAgICAgICAgY3VycmVudC5jbGFzc0luY2x1ZGUgPSBjb25maWdUZW1wbGF0ZUdyb3VwLmdldENsYXNzSW5jbHVkZUl0ZW1Db250ZW50KGl0ZW0pO1xuICAgICAgICB9XG4gICAgICAgIGN1cnJlbnQuYXZhdGFyQ29uZmlnID0gY29uZmlnVGVtcGxhdGVHcm91cC5nZXRBdmF0YXJDb25maWcgJiYgY29uZmlnVGVtcGxhdGVHcm91cC5nZXRBdmF0YXJDb25maWcoY3VycmVudCk7XG4gICAgICAgIGlmICh0aGlzLm11bHRpS2V5U2VsZWN0ZWQoKSAmJiB0aGlzLm11bHRpS2V5U2VsZWN0ZWQoKT8ubGVuZ3RoICYmIHRoaXMubXVsdGlLZXlTZWxlY3RlZCgpPy5zb21lKGtleSA9PiBrZXkgPT09IGN1cnJlbnRbdGhpcy5maWVsZEtleSgpXSkpIHtcbiAgICAgICAgICB0aGlzLmhhbmRsZXJDaGFuZ2VDaGVja2VkKHRydWUsIHNpZ25hbChjdXJyZW50KSwgZmFsc2UsIHRydWUpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLnNlbGVjdEZpcnN0SXRlbSgpICYmIGN1cnJlbnQubGV2ZWwgPT09IGN1cnJlbnQubWF4TGV2ZWxHcm91cCkge1xuICAgICAgICAgIHRoaXMuZmlyc3RJdGVtU2VsZWN0ZWQuc2V0KGN1cnJlbnQpO1xuICAgICAgICAgIHRoaXMuc2VsZWN0Rmlyc3RJdGVtLnNldChmYWxzZSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gY3VycmVudDtcbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm4gaXRlbU1hcDtcbiAgICB9KTtcblxuICAgIHJldHVybiBpdGVtc01hcDtcbiAgfVxuXG4gIHByaXZhdGUgc2V0RGlzcGxheUl0ZW0oaXRlbTogYW55KSB7XG4gICAgaWYgKCFpdGVtKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGl0ZW0uaGFzRGlzcGxheSA9IHRydWU7XG5cbiAgICBpZiAoaXRlbS5wYXJlbnRJdGVtKSB7XG4gICAgICB0aGlzLnNldERpc3BsYXlJdGVtKGl0ZW0ucGFyZW50SXRlbSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBmaWx0ZXJJdGVtc0Rpc3BsYXkoaXRlbXM6IEFycmF5PFdyaXRhYmxlU2lnbmFsPGFueT4+KTogQXJyYXk8V3JpdGFibGVTaWduYWw8YW55Pj4ge1xuICAgIGNvbnN0IGNvbmZpZ1RlbXBsYXRlR3JvdXAgPSB0aGlzLmNvbmZpZ1RlbXBsYXRlR3JvdXAoKTtcbiAgICBpZiAoIWNvbmZpZ1RlbXBsYXRlR3JvdXAgfHwgIWl0ZW1zIHx8ICFpdGVtcy5sZW5ndGgpIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG4gICAgY29uc3QgaXRlbXNEaXNwbGF5ID0gaXRlbXMuZmlsdGVyKGl0ZW0gPT4gaXRlbSgpLmhhc0Rpc3BsYXkpO1xuXG4gICAgaXRlbXNEaXNwbGF5LmZvckVhY2goaXRlbSA9PiB7XG4gICAgICBjb25zdCBpdGVtR3JvdXAgPSBpdGVtKClbY29uZmlnVGVtcGxhdGVHcm91cC5maWVsZEdldEl0ZW1zXTtcbiAgICAgIGl0ZW0oKVtjb25maWdUZW1wbGF0ZUdyb3VwLmZpZWxkR2V0SXRlbXNdPy5zZXQodGhpcy5maWx0ZXJJdGVtc0Rpc3BsYXkoaXRlbUdyb3VwPy4oKSB8fCBbXSkpO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIGl0ZW1zRGlzcGxheTtcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXRMZW5ndGhJdGVtKCk6IG51bWJlciB7XG4gICAgY29uc3QgZGF0YSA9IHsgbGVuZ3RoOiB0aGlzLml0ZW1zKCkubGVuZ3RoIH07XG5cbiAgICBpZiAoZGF0YS5sZW5ndGggPiB0aGlzLm1heEl0ZW1TaG93KCkpIHtcbiAgICAgIHJldHVybiBkYXRhLmxlbmd0aDtcbiAgICB9XG4gICAgdGhpcy5nZXRMZW5ndGhBbGxHcm91cCh0aGlzLml0ZW1zKCksIGRhdGEpO1xuXG4gICAgcmV0dXJuIGRhdGEubGVuZ3RoO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRMZW5ndGhBbGxHcm91cChpdGVtczogQXJyYXk8V3JpdGFibGVTaWduYWw8YW55Pj4sIGRhdGE6IHsgbGVuZ3RoOiBudW1iZXIgfSkge1xuICAgIGNvbnN0IGNvbmZpZ1RlbXBsYXRlR3JvdXAgPSB0aGlzLmNvbmZpZ1RlbXBsYXRlR3JvdXAoKTtcblxuICAgIGlmICghY29uZmlnVGVtcGxhdGVHcm91cCB8fCAhaXRlbXMpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZm9yIChjb25zdCBpdGVtIG9mIGl0ZW1zKSB7XG4gICAgICBpZiAoIWl0ZW0oKS5leHBhbmQpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBjb25zdCBncm91cCA9IGl0ZW0oKVtjb25maWdUZW1wbGF0ZUdyb3VwLmZpZWxkR2V0SXRlbXNdIGFzIFdyaXRhYmxlU2lnbmFsPEFycmF5PFdyaXRhYmxlU2lnbmFsPGFueT4+PjtcblxuICAgICAgaWYgKCFncm91cCkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGRhdGEubGVuZ3RoICs9IChncm91cD8uKCk/Lmxlbmd0aCB8fCAwKTtcbiAgICAgIGlmICgoIWdyb3VwPy4oKSB8fCAhZ3JvdXA/LigpLmxlbmd0aCkgJiYgaXRlbSgpLmxldmVsID09PSAxICYmICghY29uZmlnVGVtcGxhdGVHcm91cC5zZWFyY2hBbGxMZXZlbCB8fCBjb25maWdUZW1wbGF0ZUdyb3VwLmF1dG9Db3VudFdoZW5Hcm91cEVtcHR5SXRlbUxldmVsMSkpIHtcbiAgICAgICAgZGF0YS5sZW5ndGggKz0gMTtcbiAgICAgIH1cblxuICAgICAgaWYgKGRhdGEubGVuZ3RoID4gdGhpcy5tYXhJdGVtU2hvdygpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHRoaXMuZ2V0TGVuZ3RoQWxsR3JvdXAoZ3JvdXAoKSwgZGF0YSk7XG4gICAgICBpZiAoZGF0YS5sZW5ndGggPiB0aGlzLm1heEl0ZW1TaG93KCkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBvdmVycmlkZSBnZXRIZWlnaHRHcm91cEhhc0xpbmUoKSB7XG4gICAgY29uc3QgY29uZmlnVGVtcGxhdGVHcm91cCA9IHRoaXMuY29uZmlnVGVtcGxhdGVHcm91cCgpO1xuXG4gICAgaWYgKCFjb25maWdUZW1wbGF0ZUdyb3VwIHx8IGNvbmZpZ1RlbXBsYXRlR3JvdXA/Lmlnbm9yZUdyb3VwTGluZSB8fCAhdGhpcy5pdGVtcygpPy5sZW5ndGgpIHtcbiAgICAgIHJldHVybiAwO1xuICAgIH1cbiAgICBsZXQgbGVuZ3RoID0gMDtcbiAgICBsZXQgY291bnQgPSAwO1xuXG4gICAgZm9yIChjb25zdCBpdGVtIG9mIHRoaXMuaXRlbXMoKSkge1xuICAgICAgaWYgKGxlbmd0aCA+PSB0aGlzLm1heEl0ZW1TaG93KCkpIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBjb3VudCArPSAxO1xuICAgICAgbGVuZ3RoICs9IDE7XG4gICAgICBjb25zdCBncm91cCA9IGl0ZW0oKVtjb25maWdUZW1wbGF0ZUdyb3VwLmZpZWxkR2V0SXRlbXNdIGFzIFdyaXRhYmxlU2lnbmFsPEFycmF5PFdyaXRhYmxlU2lnbmFsPGFueT4+PjtcbiAgICAgIGNvbnN0IGRhdGEgPSB7IGxlbmd0aDogaXRlbSgpLmV4cGFuZCA/IGdyb3VwKCk/Lmxlbmd0aCB8fCAwIDogMCB9O1xuXG4gICAgICB0aGlzLmdldExlbmd0aEFsbEdyb3VwKGdyb3VwKCksIGRhdGEpO1xuICAgICAgbGVuZ3RoICs9IGRhdGEubGVuZ3RoO1xuICAgIH1cbiAgICBjb25zdCBtYXJnaW5Ub3BIYXNMaW5lID0gY29uZmlnVGVtcGxhdGVHcm91cC5tYXJnaW5Ub3BIYXNMaW5lIHx8IDQ7XG4gICAgY29uc3QgaGVpZ2h0ID0gY291bnQgPT09IDEgPyBtYXJnaW5Ub3BIYXNMaW5lIDogKGNvdW50IC0gMSkgKiAobWFyZ2luVG9wSGFzTGluZSAqIDMgKyAxKTtcblxuICAgIHJldHVybiBoZWlnaHQ7XG4gIH1cblxuICBwcm90ZWN0ZWQgb3ZlcnJpZGUgYnVpbGRWYWx1ZUJ5Q29uZmlnKGl0ZW06IFdyaXRhYmxlU2lnbmFsPGFueT4pOiBzdHJpbmcge1xuICAgIGNvbnN0IGxhYmVsU2VhcmNoID0gdGhpcy5jb25maWdUZW1wbGF0ZUdyb3VwKCk/LmdldExhYmVsU2VhcmNoPy4oaXRlbSgpKTtcblxuICAgIGlmIChpdGVtKCkuaXNSb290KSB7XG4gICAgICBpZiAodGhpcy5jb25maWdUZW1wbGF0ZUdyb3VwKCk/LmdldExhYmVsR3JvdXApIHtcbiAgICAgICAgaXRlbSgpLmZpZWxkTGFiZWwgPSB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudCh0aGlzLmNvbmZpZ1RlbXBsYXRlR3JvdXAoKT8uZ2V0TGFiZWxHcm91cChpdGVtKCkpIHx8ICcgJyk7XG5cbiAgICAgICAgcmV0dXJuIGxhYmVsU2VhcmNoID8/IGl0ZW0oKS5maWVsZExhYmVsO1xuICAgICAgfVxuICAgICAgaXRlbS51cGRhdGUoY3VycmVudCA9PiB7XG4gICAgICAgIGN1cnJlbnQuZmllbGRMYWJlbCA9IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KGN1cnJlbnQubGFiZWwgfHwgY3VycmVudC5uYW1lIHx8ICcgJyk7XG5cbiAgICAgICAgcmV0dXJuIGN1cnJlbnQ7XG4gICAgICB9KTtcblxuICAgICAgcmV0dXJuIGl0ZW0oKS5maWVsZExhYmVsO1xuICAgIH1cbiAgICBpZiAodGhpcy5jb25maWdUZW1wbGF0ZUdyb3VwKCk/LmdldExhYmVsSXRlbSkge1xuICAgICAgaXRlbS51cGRhdGUoY3VycmVudCA9PiB7XG4gICAgICAgIGN1cnJlbnQuZmllbGRMYWJlbCA9IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KHRoaXMuY29uZmlnVGVtcGxhdGVHcm91cCgpPy5nZXRMYWJlbEl0ZW0oY3VycmVudCkgfHwgJyAnKTtcblxuICAgICAgICByZXR1cm4gY3VycmVudDtcbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm4gbGFiZWxTZWFyY2ggPz8gaXRlbSgpLmZpZWxkTGFiZWw7XG4gICAgfVxuICAgIGl0ZW0udXBkYXRlKGN1cnJlbnQgPT4ge1xuICAgICAgY3VycmVudC5maWVsZExhYmVsID0gdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoY3VycmVudC5sYWJlbCB8fCBjdXJyZW50Lm5hbWUgfHwgJyAnKTtcblxuICAgICAgcmV0dXJuIGN1cnJlbnQ7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gbGFiZWxTZWFyY2ggPz8gaXRlbSgpLmZpZWxkTGFiZWw7XG4gIH1cbn1cbiIsIkBpZiAoY29uZmlnVGVtcGxhdGVHcm91cCgpOyBhcyBjb25maWdUZW1wbGF0ZUdyb3VwKSB7XG4gIEBsZXQgdmFySHRtbEhlaWdodFZpZXdQb3J0ID0gaGVpZ2h0Vmlld1BvcnQoKSA/IGhlaWdodFZpZXdQb3J0KCkrJ3B4JzonMTAwJSc7XG4gIEBsZXQgdmFySHRtbERpc2FibGUgPSBsb2FkaW5nKCkgfHwgZGlzYWJsZSgpIHx8IGZhbHNlO1xuICA8ZGl2IGNsYXNzPVwibGlicy11aS1saXN0LWdyb3VwIG92ZXJmbG93LVtoaWRkZW5dXCJcbiAgICBbc3R5bGUuaGVpZ2h0XT1cInZhckh0bWxIZWlnaHRWaWV3UG9ydFwiPlxuICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtY29sIHctZnVsbCBoLWZ1bGwgcmVsYXRpdmUgbWluLWgtWzI4cHhdXCI+XG4gICAgICBAaWYgKGl0ZW1zKCkubGVuZ3RoICYmIGNvbmZpZ1RlbXBsYXRlR3JvdXAuY29uZmlnQnV0dG9uU2VsZWN0QW5kVW5kU2VsZWN0SXRlbT8uKCk7IGFzIGNvbmZpZ0J1dHRvblNlbGVjdEl0ZW0pIHtcbiAgICAgICAgPGRpdlxuICAgICAgICAgIFtjbGFzc109XCInZmxleCBpdGVtcy1jZW50ZXIgYmctWyNmZmZmZmZdICcrKGNvbmZpZ0J1dHRvblNlbGVjdEl0ZW0uY2xhc3NJbmNsdWRlID8/ICdsaWJzLXVpLWJvcmRlci1ib3R0b20tZ2VuZXJhbCcpXCI+XG4gICAgICAgICAgPGxpYnNfdWktY29tcG9uZW50cy1idXR0b25zLWJ1dHRvblxuICAgICAgICAgICAgW3R5cGVdPVwiY29uZmlnQnV0dG9uU2VsZWN0SXRlbS5idXR0b25DaGVja0FsbD8udHlwZSA/PyAnYnV0dG9uLWxpbmstcHJpbWFyeSdcIlxuICAgICAgICAgICAgW2xhYmVsXT1cImNvbmZpZ0J1dHRvblNlbGVjdEl0ZW0uYnV0dG9uQ2hlY2tBbGw/LmxhYmVsID8/ICdpMThuX3NlbGVjdF9hbGxfc2VhcmNoZWRfcmVzdWx0cydcIlxuICAgICAgICAgICAgW2NsYXNzSW5jbHVkZV09XCJjb25maWdCdXR0b25TZWxlY3RJdGVtLmJ1dHRvbkNoZWNrQWxsPy5jbGFzc0luY2x1ZGUgfHwgJ3ByLVs4cHhdJ1wiXG4gICAgICAgICAgICBbY2xhc3NMYWJlbF09XCJjb25maWdCdXR0b25TZWxlY3RJdGVtLmJ1dHRvbkNoZWNrQWxsPy5jbGFzc0xhYmVsIHx8ICdsaWJzLXVpLWZvbnQtaDZyJ1wiXG4gICAgICAgICAgICBbZGlzYWJsZV09XCJ2YXJIdG1sRGlzYWJsZVwiXG4gICAgICAgICAgICAob3V0Q2xpY2spPVwiaGFuZGxlckNoZWNrZWRPclVuQ2hlY2tlZEFsbCh0cnVlKVwiIC8+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtWyM5OTk5OTldXCI+fDwvZGl2PlxuICAgICAgICAgIDxsaWJzX3VpLWNvbXBvbmVudHMtYnV0dG9ucy1idXR0b25cbiAgICAgICAgICAgIFt0eXBlXT1cImNvbmZpZ0J1dHRvblNlbGVjdEl0ZW0uYnV0dG9uVW5jaGVja0FsbD8udHlwZSA/PyAnYnV0dG9uLWxpbmstcHJpbWFyeSdcIlxuICAgICAgICAgICAgW2xhYmVsXT1cImNvbmZpZ0J1dHRvblNlbGVjdEl0ZW0uYnV0dG9uVW5jaGVja0FsbD8ubGFiZWwgPz8gJ2kxOG5fdW5zZWxlY3RfYWxsX3NlYXJjaGVkX3Jlc3VsdHMnXCJcbiAgICAgICAgICAgIFtjbGFzc0luY2x1ZGVdPVwiY29uZmlnQnV0dG9uU2VsZWN0SXRlbS5idXR0b25VbmNoZWNrQWxsPy5jbGFzc0luY2x1ZGUgfHwgJ3BsLVs4cHhdJ1wiXG4gICAgICAgICAgICBbY2xhc3NMYWJlbF09XCJjb25maWdCdXR0b25TZWxlY3RJdGVtLmJ1dHRvblVuY2hlY2tBbGw/LmNsYXNzTGFiZWwgfHwgJ2xpYnMtdWktZm9udC1oNnMnXCJcbiAgICAgICAgICAgIFtkaXNhYmxlXT1cInZhckh0bWxEaXNhYmxlXCJcbiAgICAgICAgICAgIChvdXRDbGljayk9XCJoYW5kbGVyQ2hlY2tlZE9yVW5DaGVja2VkQWxsKGZhbHNlKVwiIC8+XG4gICAgICAgIDwvZGl2PlxuICAgICAgfVxuICAgICAgQGlmIChpdGVtcygpLmxlbmd0aCAmJiBjb25maWdUZW1wbGF0ZUdyb3VwLmNvbmZpZ0NoZWNrYm94Q2hlY2tBbGw/LigpOyBhcyBjb25maWdDaGVja0JveCkge1xuICAgICAgICA8ZGl2XG4gICAgICAgICAgW2NsYXNzXT1cIidmbGV4IGxpYnMtdWktYm9yZGVyLWJvdHRvbS1nZW5lcmFsICcrKGNvbmZpZ1RlbXBsYXRlR3JvdXAuY2xhc3NJbmNsdWRlSGFzQ29uZmlnQ2hlY2tCb3hBbGwgPz8gJyBiZy1bI2ZmZmZmZl0nKVwiPlxuICAgICAgICAgIDxsaWJzX3VpLWNvbXBvbmVudHMtY2hlY2tib3gtc2luZ2xlIFtsYWJlbF09XCJjb25maWdDaGVja0JveC5sYWJlbCA/PyAnaTE4bl9hbGwnXCJcbiAgICAgICAgICAgIFtjbGFzc0xhYmVsSW5jbHVkZV09XCJjb25maWdDaGVja0JveC5jbGFzc0xhYmVsSW5jbHVkZSB8fCAnJ1wiXG4gICAgICAgICAgICBbY2hlY2tlZF09XCJ0b3RhbEl0ZW1DaGVja2VkKCkgPj0gdG90YWxJdGVtKCkgJiYgdG90YWxJdGVtKCkgPiAwXCJcbiAgICAgICAgICAgIFtkaXNhYmxlXT1cInZhckh0bWxEaXNhYmxlXCJcbiAgICAgICAgICAgIChvdXRDaGFuZ1N0YWdlRmxhZ01vdXNlUG9wb3Zlcik9J2hhbmRsZXJDaGFuZ1N0YWdlRmxhZ01vdXNlKCRldmVudCknXG4gICAgICAgICAgICAob3V0Q2hhbmdlKT1cImhhbmRsZXJDaGVja2VkT3JVbkNoZWNrZWRBbGwoJGV2ZW50LmNoZWNrZWQpXCIgLz5cbiAgICAgICAgPC9kaXY+XG4gICAgICB9XG4gICAgICBAaWYgKGl0ZW1zKCkgJiYgaXRlbXMoKS5sZW5ndGgpIHtcbiAgICAgICAgPGRpdiBjbGFzcz1cInctZnVsbCBoLWZ1bGwgcmVsYXRpdmUgZmxleFwiPlxuICAgICAgICAgIDxkaXYgTGlic1VpQ29tcG9uZW50c1Njcm9sbE92ZXJsYXlEaXJlY3RpdmVcbiAgICAgICAgICAgIGNsYXNzPVwidy1mdWxsIGgtZnVsbCBhYnNvbHV0ZSB0b3AtMCBsZWZ0LTAge3sgY29uZmlnVGVtcGxhdGVHcm91cC5jbGFzc0luY2x1ZGVHcm91cCA/IGNvbmZpZ1RlbXBsYXRlR3JvdXAuY2xhc3NJbmNsdWRlR3JvdXAgOiAnJyB9fVwiPlxuICAgICAgICAgICAgQGZvciAoaXRlbSBvZiBpdGVtcygpOyB0cmFjayBpdGVtKClbZmllbGRLZXkoKV07IGxldCBmaXJzdCA9ICRmaXJzdDsgbGV0IGxhc3QgPSAkbGFzdCkge1xuICAgICAgICAgICAgICA8ZGl2ICNpdGVtUmVmXG4gICAgICAgICAgICAgICAgW3N0eWxlLm1hcmdpblRvcC5weF09XCIhY29uZmlnVGVtcGxhdGVHcm91cC5pZ25vcmVHcm91cExpbmUgPyBjb25maWdUZW1wbGF0ZUdyb3VwLm1hcmdpblRvcEhhc0xpbmUgfHwgNCA6IDBcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiZmxleCBmbGV4LWNvbCByZWxhdGl2ZSBcIj5cbiAgICAgICAgICAgICAgICBAbGV0IHZhckh0bWxQYWRkaW5nID0gbGV2ZWwoKSooY29uZmlnVGVtcGxhdGVHcm91cC5pc1ZpZXdUcmVlID8gOCA6IDE2KTtcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBpdGVtcy1jZW50ZXIgcHktWzZweF0gXCJcbiAgICAgICAgICAgICAgICAgIFtjbGFzcy5saWJzLXVpLWJnLWxpc3QtaG92ZXJdPVwiIWNvbmZpZ1RlbXBsYXRlR3JvdXAuaWdub3JlQ2xpY2tMYWJlbEdyb3VwXCJcbiAgICAgICAgICAgICAgICAgIFtjbGFzcy5saWJzLXVpLWJnLWxpc3QtaG92ZXItYWN0aXZlXT1cIiFjb25maWdUZW1wbGF0ZUdyb3VwLmlnbm9yZUNsaWNrTGFiZWxHcm91cFwiXG4gICAgICAgICAgICAgICAgICBbY2xhc3MuIWN1cnNvci1wb2ludGVyXT1cIiFjb25maWdUZW1wbGF0ZUdyb3VwLmlnbm9yZUNsaWNrTGFiZWxHcm91cCAgJiYgKGNvbmZpZ1RlbXBsYXRlR3JvdXAuaWdub3JlQ2hlY2tib3hHcm91cCB8fCBjb25maWdUZW1wbGF0ZUdyb3VwLnNpbmdsZVNlbGVjdEl0ZW0pXCJcbiAgICAgICAgICAgICAgICAgIFtzdHlsZS5wYWRkaW5nTGVmdC5weF09XCJ2YXJIdG1sUGFkZGluZ1wiXG4gICAgICAgICAgICAgICAgICBbc3R5bGUucGFkZGluZ1JpZ2h0LnB4XT1cInZhckh0bWxQYWRkaW5nXCJcbiAgICAgICAgICAgICAgICAgIChjbGljayk9XCIoY29uZmlnVGVtcGxhdGVHcm91cC5pZ25vcmVDaGVja2JveEdyb3VwIHx8IGNvbmZpZ1RlbXBsYXRlR3JvdXAuc2luZ2xlU2VsZWN0SXRlbSkgPyBoYW5kbGVyVG9nZ2xlRXhwYW5kKCRldmVudCxpdGVtKSA6IHVuZGVmaW5lZFwiPlxuICAgICAgICAgICAgICAgICAgQGlmIChjb25maWdUZW1wbGF0ZUdyb3VwLmljb25FeHBhbmQgPT09ICdsZWZ0JyB8fCBjb25maWdUZW1wbGF0ZUdyb3VwLmlzVmlld1RyZWUpIHtcbiAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJjdXJzb3ItcG9pbnRlciBsaWJzLXVpLWljb24tY2hldnJvbi1yaWdodCBiZWZvcmU6IXRleHQtWzE2cHhdXCJcbiAgICAgICAgICAgICAgICAgICAgICBbY2xhc3Mucm90YXRlLTkwXT1cIml0ZW0oKS5leHBhbmRcIlxuICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJoYW5kbGVyVG9nZ2xlRXhwYW5kKCRldmVudCxpdGVtKVwiPlxuICAgICAgICAgICAgICAgICAgICA8L2k+XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleFwiXG4gICAgICAgICAgICAgICAgICAgIFtjbGFzcy53LWZ1bGxdPVwiY29uZmlnVGVtcGxhdGVHcm91cC5pY29uRXhwYW5kID09PSAncmlnaHQnICYmICFjb25maWdUZW1wbGF0ZUdyb3VwLmlzVmlld1RyZWUgJiYgKCFjb25maWdUZW1wbGF0ZUdyb3VwLnNlYXJjaEFsbExldmVsIHx8ICEhaXRlbSgpW2NvbmZpZ1RlbXBsYXRlR3JvdXAuZmllbGRHZXRJdGVtc10/LigpPy5sZW5ndGgpXCJcbiAgICAgICAgICAgICAgICAgICAgW2NsYXNzLnctW2NhbGMoMTAwJS0xNnB4KV1dPVwiY29uZmlnVGVtcGxhdGVHcm91cC5pY29uRXhwYW5kID09PSAnbGVmdCcgfHwgY29uZmlnVGVtcGxhdGVHcm91cC5pc1ZpZXdUcmVlXCI+XG4gICAgICAgICAgICAgICAgICAgIEBpZiAoIWNvbmZpZ1RlbXBsYXRlR3JvdXAuaXNWaWV3UmFkaW8pIHtcbiAgICAgICAgICAgICAgICAgICAgICA8bGlic191aS1jb21wb25lbnRzLWNoZWNrYm94LXNpbmdsZSBbYXZhdGFyQ29uZmlnXT1cIml0ZW0oKS5hdmF0YXJDb25maWdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLm1sLVs4cHhdXT1cImNvbmZpZ1RlbXBsYXRlR3JvdXAuaWNvbkV4cGFuZCA9PT0gJ2xlZnQnIHx8IGNvbmZpZ1RlbXBsYXRlR3JvdXAuaXNWaWV3VHJlZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbaWdub3JlQ2hlY2tib3hdPVwiY29uZmlnVGVtcGxhdGVHcm91cC5pZ25vcmVDaGVja2JveEdyb3VwIHx8IGNvbmZpZ1RlbXBsYXRlR3JvdXAuc2luZ2xlU2VsZWN0SXRlbVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3NdPVwiY29uZmlnVGVtcGxhdGVHcm91cC5jbGFzc0luY2x1ZGVJdGVtIHx8ICcnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy53LWF1dG9dPVwiY29uZmlnVGVtcGxhdGVHcm91cC5pc1ZpZXdUcmVlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy53LWZ1bGxdPVwiIWl0ZW0oKVtjb25maWdUZW1wbGF0ZUdyb3VwLmZpZWxkR2V0SXRlbXNdPy4oKT8ubGVuZ3RoICYmICEoKGNvbmZpZ1RlbXBsYXRlR3JvdXAuaXNWaWV3VHJlZSB8fCBjb25maWdUZW1wbGF0ZUdyb3VwLndpZHRoTGFiZWxTdWIyNFdoZW5Ob3RUcmVlVmlldykgJiYgKGNvbmZpZ1RlbXBsYXRlR3JvdXAuaWNvbkV4cGFuZCA9PT0gJ2xlZnQnIHx8IGNvbmZpZ1RlbXBsYXRlR3JvdXAuaWNvbkV4cGFuZCA9PT0gJ3JpZ2h0JyAmJiAoIWNvbmZpZ1RlbXBsYXRlR3JvdXAuc2VhcmNoQWxsTGV2ZWwgfHwgISFpdGVtKClbY29uZmlnVGVtcGxhdGVHcm91cC5maWVsZEdldEl0ZW1zXT8uKCk/Lmxlbmd0aCkpKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MubWF4LXctW2NhbGMoMTAwJS0yNHB4KV1dPVwiKGNvbmZpZ1RlbXBsYXRlR3JvdXAuaXNWaWV3VHJlZSB8fCBjb25maWdUZW1wbGF0ZUdyb3VwLndpZHRoTGFiZWxTdWIyNFdoZW5Ob3RUcmVlVmlldykgJiYgKGNvbmZpZ1RlbXBsYXRlR3JvdXAuaWNvbkV4cGFuZCA9PT0gJ2xlZnQnIHx8IGNvbmZpZ1RlbXBsYXRlR3JvdXAuaWNvbkV4cGFuZCA9PT0gJ3JpZ2h0JyAmJiAoIWNvbmZpZ1RlbXBsYXRlR3JvdXAuc2VhcmNoQWxsTGV2ZWwgfHwgISFpdGVtKClbY29uZmlnVGVtcGxhdGVHcm91cC5maWVsZEdldEl0ZW1zXT8uKCk/Lmxlbmd0aCkpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCJpdGVtKCkuZmllbGRMYWJlbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbcG9wb3Zlcl09XCJpdGVtKCkuZGF0YVBvcG92ZXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW3pJbmRleExhYmVsXT1cImNvbmZpZ1RlbXBsYXRlR3JvdXAuekluZGV4TGFiZWwgPz8gekluZGV4KClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2RhdGFDb21wb25lbnRPdXRsZXRdPVwiKHVuZGVmaW5lZCB8IExpYnNVaVBpcGVzQ2FsbEZ1bmN0aW9uSW5UZW1wbGF0ZVBpcGU6Y29uZmlnVGVtcGxhdGVHcm91cC5nZXREYXRhQ29tcG9uZW50T3V0bGV0R3JvdXA6aXRlbSgpOmZpZWxkS2V5KCk6e3ZhbHVlSXNFbXB0eTp7aXRlbTppdGVtKCl9fSkgfCBhc3luY1wiXG4gICAgICAgICAgICAgICAgICAgICAgICBbY29tcG9uZW50T3V0bGV0XT1cIigwIHwgTGlic1VpUGlwZXNDYWxsRnVuY3Rpb25JblRlbXBsYXRlUGlwZTpjb25maWdUZW1wbGF0ZUdyb3VwLmdldENvbXBvbmVudE91dGxldEdyb3VwOml0ZW0oKTpmaWVsZEtleSgpOnt2YWx1ZUlzMDowfSkgfCBhc3luY1wiXG4gICAgICAgICAgICAgICAgICAgICAgICBbbGlua0ltYWdlXT1cImNvbmZpZ1RlbXBsYXRlR3JvdXAuZ2V0SW1hZ2UgPyAoKCdhdmF0YXInIHwgTGlic1VpUGlwZXNDYWxsRnVuY3Rpb25JblRlbXBsYXRlUGlwZTooaXRlbSgpLnNwZWNpZmljX2xvYWRJbWdFcnJvciAmJiBjb25maWdUZW1wbGF0ZUdyb3VwLmdldExpbmtJbWFnZUVycm9yID8gY29uZmlnVGVtcGxhdGVHcm91cC5nZXRMaW5rSW1hZ2VFcnJvciA6IGNvbmZpZ1RlbXBsYXRlR3JvdXAuZ2V0SW1hZ2UpOml0ZW0oKSkgfCBhc3luYykgOiBpdGVtKClbY29uZmlnVGVtcGxhdGVHcm91cC5maWVsZEdldEF2YXRhckl0ZW0gfHwgJyddXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtpbWdUeXBlSWNvbl09XCJjb25maWdUZW1wbGF0ZUdyb3VwLmltZ1R5cGVJY29uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzc0xhYmVsSW5jbHVkZV09XCIoY29uZmlnVGVtcGxhdGVHcm91cC5jbGFzc0xhYmVsSXRlbSA/IGNvbmZpZ1RlbXBsYXRlR3JvdXAuY2xhc3NMYWJlbEl0ZW0gOiAoY29uZmlnVGVtcGxhdGVHcm91cC5pc1ZpZXdUcmVlID8gJyBsaWJzLXVpLWZvbnQtaDZyICc6JyBsaWJzLXVpLWZvbnQtaDZzICcpKSArICgoY29uZmlnVGVtcGxhdGVHcm91cC5pZ25vcmVUZXh0VXBwZXJjYXNlTGFiZWxHcm91cCB8fCBjb25maWdUZW1wbGF0ZUdyb3VwLmlzVmlld1RyZWUpID8gJyc6JyB0ZXh0LXVwcGVyY2FzZSAnKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZV09XCJkaXNhYmxlKCkgfHwgKGl0ZW0oKVtmaWVsZEtleSgpXSB8IExpYnNVaUNoZWNrU2VsZWN0ZWRCeUtleVBpcGU6a2V5c0Rpc2FibGVJdGVtKCk6a2V5c0Rpc2FibGVJdGVtKCk/Lmxlbmd0aClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2NoZWNrZWRdPVwiaXRlbSgpW2ZpZWxkS2V5KCldIHwgTGlic1VpQ2hlY2tTZWxlY3RlZEJ5S2V5UGlwZTprZXlzQ2hlY2tlZCgpOmtleXNDaGVja2VkKCkubGVuZ3RoXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtzdGlsbE90aGVyT3B0aW9uc109XCJpdGVtKClbZmllbGRLZXkoKV0gfCBMaWJzVWlDaGVja1NlbGVjdGVkQnlLZXlQaXBlOmtleXNTdGlsbE90aGVyT3B0aW9ucygpOmtleXNTdGlsbE90aGVyT3B0aW9ucygpLmxlbmd0aFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAob3V0Q2hhbmdlKT1cImhhbmRsZXJDaGFuZ2VDaGVja2VkKCRldmVudC5jaGVja2VkLGl0ZW0sIHRydWUpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChvdXRDaGFuZ1N0YWdlRmxhZ01vdXNlUG9wb3Zlcik9J2hhbmRsZXJDaGFuZ1N0YWdlRmxhZ01vdXNlKCRldmVudCknXG4gICAgICAgICAgICAgICAgICAgICAgICAob3V0Q2xpY2tMYWJlbCk9XCJoYW5kbGVyVG9nZ2xlRXhwYW5kKCdjbGlja0xhYmVsJyxpdGVtLGNvbmZpZ1RlbXBsYXRlR3JvdXAuaWdub3JlQ2hlY2tib3hHcm91cCB8fCBjb25maWdUZW1wbGF0ZUdyb3VwLnNpbmdsZVNlbGVjdEl0ZW0pXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIEBpZiAoY29uZmlnVGVtcGxhdGVHcm91cC5pc1ZpZXdSYWRpbykge1xuICAgICAgICAgICAgICAgICAgICAgIDxsaWJzX3VpLWNvbXBvbmVudHMtcmFkaW8tc2luZ2xlXG4gICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MubWwtWzhweF1dPVwiY29uZmlnVGVtcGxhdGVHcm91cC5pY29uRXhwYW5kID09PSAnbGVmdCcgfHwgY29uZmlnVGVtcGxhdGVHcm91cC5pc1ZpZXdUcmVlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFthdmF0YXJDb25maWddPVwiaXRlbSgpLmF2YXRhckNvbmZpZ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICBbaWdub3JlUmFkaW9dPVwiY29uZmlnVGVtcGxhdGVHcm91cC5pZ25vcmVSYWRpb0dyb3VwIHx8IGNvbmZpZ1RlbXBsYXRlR3JvdXAuc2luZ2xlU2VsZWN0SXRlbVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3NdPVwiY29uZmlnVGVtcGxhdGVHcm91cC5jbGFzc0luY2x1ZGVJdGVtIHx8ICcnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy53LWF1dG9dPVwiY29uZmlnVGVtcGxhdGVHcm91cC5pc1ZpZXdUcmVlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy53LWZ1bGxdPVwiIWl0ZW0oKVtjb25maWdUZW1wbGF0ZUdyb3VwLmZpZWxkR2V0SXRlbXNdPy4oKT8ubGVuZ3RoICYmICEoKGNvbmZpZ1RlbXBsYXRlR3JvdXAuaXNWaWV3VHJlZSB8fCBjb25maWdUZW1wbGF0ZUdyb3VwLndpZHRoTGFiZWxTdWIyNFdoZW5Ob3RUcmVlVmlldykgJiYgKGNvbmZpZ1RlbXBsYXRlR3JvdXAuaWNvbkV4cGFuZCA9PT0gJ2xlZnQnIHx8IGNvbmZpZ1RlbXBsYXRlR3JvdXAuaWNvbkV4cGFuZCA9PT0gJ3JpZ2h0JyAmJiAoIWNvbmZpZ1RlbXBsYXRlR3JvdXAuc2VhcmNoQWxsTGV2ZWwgfHwgISFpdGVtKClbY29uZmlnVGVtcGxhdGVHcm91cC5maWVsZEdldEl0ZW1zXT8uKCk/Lmxlbmd0aCkpKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MubWF4LXctW2NhbGMoMTAwJS0yNHB4KV1dPVwiKGNvbmZpZ1RlbXBsYXRlR3JvdXAuaXNWaWV3VHJlZSB8fCBjb25maWdUZW1wbGF0ZUdyb3VwLndpZHRoTGFiZWxTdWIyNFdoZW5Ob3RUcmVlVmlldykgJiYgKGNvbmZpZ1RlbXBsYXRlR3JvdXAuaWNvbkV4cGFuZCA9PT0gJ2xlZnQnIHx8IGNvbmZpZ1RlbXBsYXRlR3JvdXAuaWNvbkV4cGFuZCA9PT0gJ3JpZ2h0JyAmJiAoIWNvbmZpZ1RlbXBsYXRlR3JvdXAuc2VhcmNoQWxsTGV2ZWwgfHwgISFpdGVtKClbY29uZmlnVGVtcGxhdGVHcm91cC5maWVsZEdldEl0ZW1zXT8uKCk/Lmxlbmd0aCkpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCJpdGVtKCkuZmllbGRMYWJlbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbcG9wb3Zlcl09XCJpdGVtKCkuZGF0YVBvcG92ZXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2RhdGFDb21wb25lbnRPdXRsZXRdPVwiKHVuZGVmaW5lZCB8IExpYnNVaVBpcGVzQ2FsbEZ1bmN0aW9uSW5UZW1wbGF0ZVBpcGU6Y29uZmlnVGVtcGxhdGVHcm91cC5nZXREYXRhQ29tcG9uZW50T3V0bGV0R3JvdXA6aXRlbSgpOmZpZWxkS2V5KCk6e3ZhbHVlSXNFbXB0eTp7aXRlbTppdGVtKCl9fSkgfCBhc3luY1wiXG4gICAgICAgICAgICAgICAgICAgICAgICBbY29tcG9uZW50T3V0bGV0XT1cIigwIHwgTGlic1VpUGlwZXNDYWxsRnVuY3Rpb25JblRlbXBsYXRlUGlwZTpjb25maWdUZW1wbGF0ZUdyb3VwLmdldENvbXBvbmVudE91dGxldEdyb3VwOml0ZW0oKTpmaWVsZEtleSgpOnt2YWx1ZUlzMDowfSkgfCBhc3luY1wiXG4gICAgICAgICAgICAgICAgICAgICAgICBbekluZGV4TGFiZWxdPVwiY29uZmlnVGVtcGxhdGVHcm91cC56SW5kZXhMYWJlbCA/PyB6SW5kZXgoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbaW1nVHlwZUljb25dPVwiY29uZmlnVGVtcGxhdGVHcm91cC5pbWdUeXBlSWNvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbbGlua0ltYWdlXT1cImNvbmZpZ1RlbXBsYXRlR3JvdXAuZ2V0SW1hZ2UgPyAoKCdhdmF0YXInIHwgTGlic1VpUGlwZXNDYWxsRnVuY3Rpb25JblRlbXBsYXRlUGlwZTooaXRlbSgpLnNwZWNpZmljX2xvYWRJbWdFcnJvciAmJiBjb25maWdUZW1wbGF0ZUdyb3VwLmdldExpbmtJbWFnZUVycm9yID8gY29uZmlnVGVtcGxhdGVHcm91cC5nZXRMaW5rSW1hZ2VFcnJvciA6IGNvbmZpZ1RlbXBsYXRlR3JvdXAuZ2V0SW1hZ2UpOml0ZW0oKSkgfCBhc3luYykgOiBpdGVtKClbY29uZmlnVGVtcGxhdGVHcm91cC5maWVsZEdldEF2YXRhckl0ZW0gfHwgJyddXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzc0xhYmVsSW5jbHVkZV09XCIoY29uZmlnVGVtcGxhdGVHcm91cC5jbGFzc0xhYmVsSXRlbSA/IGNvbmZpZ1RlbXBsYXRlR3JvdXAuY2xhc3NMYWJlbEl0ZW0gOiAnbGlicy11aS1mb250LWg2cyAnKSArIChjb25maWdUZW1wbGF0ZUdyb3VwLmlnbm9yZVRleHRVcHBlcmNhc2VMYWJlbEdyb3VwID8gJyc6JyB1cHBlcmNhc2UnKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZV09XCJkaXNhYmxlKCkgfHwgKGNvbmZpZ1RlbXBsYXRlR3JvdXAuZGlzYWJsZUl0ZW1Ob3RMYXN0TGV2ZWwgJiYgISFpdGVtKClbY29uZmlnVGVtcGxhdGVHcm91cC5maWVsZEdldEl0ZW1zXT8uKCk/Lmxlbmd0aCkgfHwgY29uZmlnVGVtcGxhdGVHcm91cC5pZ25vcmVDaGVja2JveEdyb3VwIHx8IGNvbmZpZ1RlbXBsYXRlR3JvdXAuc2luZ2xlU2VsZWN0SXRlbSB8fCAoaXRlbSgpW2ZpZWxkS2V5KCldIHwgTGlic1VpQ2hlY2tTZWxlY3RlZEJ5S2V5UGlwZTprZXlzRGlzYWJsZUl0ZW0oKTprZXlzRGlzYWJsZUl0ZW0oKT8ubGVuZ3RoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbYWN0aXZlXT1cIml0ZW0oKVtmaWVsZEtleSgpXSB8IExpYnNVaUNoZWNrU2VsZWN0ZWRCeUtleVBpcGU6a2V5c0NoZWNrZWQoKTprZXlzQ2hlY2tlZCgpLmxlbmd0aFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAob3V0Q2hhbmdlKT1cImhhbmRsZXJDaGFuZ2VDaGVja2VkKCRldmVudC5hY3RpdmUsaXRlbSwgdHJ1ZSlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKG91dENoYW5nU3RhZ2VGbGFnTW91c2VQb3BvdmVyKT0naGFuZGxlckNoYW5nU3RhZ2VGbGFnTW91c2UoJGV2ZW50KSdcbiAgICAgICAgICAgICAgICAgICAgICAgIChvdXRDbGlja0xhYmVsKT1cImhhbmRsZXJUb2dnbGVFeHBhbmQoJ2NsaWNrTGFiZWwnLGl0ZW0sY29uZmlnVGVtcGxhdGVHcm91cC5pZ25vcmVSYWRpb0dyb3VwIHx8IGNvbmZpZ1RlbXBsYXRlR3JvdXAuc2luZ2xlU2VsZWN0SXRlbSlcIiAvPlxuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgQGlmIChpdGVtKCkuYnV0dG9uSW5Hcm91cDsgYXMgYnV0dG9uSW5Hcm91cCkge1xuICAgICAgICAgICAgICAgICAgICAgIDxsaWJzX3VpLWNvbXBvbmVudHMtYnV0dG9ucy1idXR0b24gW3R5cGVdPVwiYnV0dG9uSW5Hcm91cC50eXBlIHx8ICdidXR0b24tbGluay1wcmltYXJ5J1wiXG4gICAgICAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwiYnV0dG9uSW5Hcm91cC5sYWJlbCB8fCAnICdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzSWNvbkxlZnRdPVwiKGJ1dHRvbkluR3JvdXAuY2xhc3NJY29uTGVmdCB8fCAnJykrJyBmbGV4IG1yLVs4cHhdICF0ZXh0LVs4cHhdJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3NJbmNsdWRlXT1cImJ1dHRvbkluR3JvdXAuY2xhc3NJbmNsdWRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzc0xhYmVsXT1cImJ1dHRvbkluR3JvdXAuY2xhc3NMYWJlbCB8fCAnbGlicy11aS1mb250LWg1cidcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVdPVwiYnV0dG9uSW5Hcm91cC5kaXNhYmxlIHx8IGRpc2FibGUoKSB8fCBmYWxzZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAob3V0Q2xpY2spPVwiaGFuZGxlckNsaWNrQnV0dG9uR3JvdXAoYnV0dG9uSW5Hcm91cCxpdGVtKCkpXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgIEBpZiAoY29uZmlnVGVtcGxhdGVHcm91cC5pY29uRXhwYW5kID09PSAncmlnaHQnICYmICFjb25maWdUZW1wbGF0ZUdyb3VwLmlzVmlld1RyZWUgJiYgKCFjb25maWdUZW1wbGF0ZUdyb3VwLnNlYXJjaEFsbExldmVsIHx8ICEhaXRlbSgpW2NvbmZpZ1RlbXBsYXRlR3JvdXAuZmllbGRHZXRJdGVtc10/LigpPy5sZW5ndGgpKSB7XG4gICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmxleCBpdGVtcy1jZW50ZXIgY3Vyc29yLXBvaW50ZXIgbGlicy11aS1pY29uLWNoZXZyb24tcmlnaHQgYmVmb3JlOiF0ZXh0LVsxNnB4XVwiXG4gICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLiFtbC1bOHB4XV09XCJpdGVtKCkuZGF0YVBvcG92ZXJcIlxuICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy5yb3RhdGUtOTBdPVwiaXRlbSgpLmV4cGFuZFwiXG4gICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImhhbmRsZXJUb2dnbGVFeHBhbmQoJGV2ZW50LGl0ZW0pXCI+XG4gICAgICAgICAgICAgICAgICAgIDwvaT5cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICBAaWYgKGl0ZW0oKS5leHBhbmQgJiYgY2FsY3VsYXRvckhlaWdoSXRlbVN1Y2Nlc3MoKSkge1xuICAgICAgICAgICAgICAgICAgPGxpYnNfdWktY29tcG9uZW50cy1saXN0LXRlbXBsYXRlc19ncm91cC1pdGVtIFtrZXlTZWFyY2hdPVwia2V5U2VhcmNoKClcIlxuICAgICAgICAgICAgICAgICAgICBbaXRlbXNdPVwiaXRlbSgpW2NvbmZpZ1RlbXBsYXRlR3JvdXAuZmllbGRHZXRJdGVtc10oKVwiXG4gICAgICAgICAgICAgICAgICAgIFtwYXJlbnRJdGVtXT1cIml0ZW0oKVwiXG4gICAgICAgICAgICAgICAgICAgIFtmaWVsZEtleV09XCJmaWVsZEtleSgpXCJcbiAgICAgICAgICAgICAgICAgICAgW2tleXNDaGVja2VkXT1cImtleXNDaGVja2VkKClcIlxuICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZV09XCJkaXNhYmxlKClcIlxuICAgICAgICAgICAgICAgICAgICBba2V5c0Rpc2FibGVJdGVtXT1cImtleXNEaXNhYmxlSXRlbSgpIHx8IFtdXCJcbiAgICAgICAgICAgICAgICAgICAgW2NvbmZpZ1RlbXBsYXRlR3JvdXBdPVwiY29uZmlnVGVtcGxhdGVHcm91cFwiXG4gICAgICAgICAgICAgICAgICAgIFtjb25maWddPVwiY29uZmlnKClcIlxuICAgICAgICAgICAgICAgICAgICBba2V5c1N0aWxsT3RoZXJPcHRpb25zXT1cImtleXNTdGlsbE90aGVyT3B0aW9ucygpXCJcbiAgICAgICAgICAgICAgICAgICAgKG91dENoYW5nZVZpZXcpPVwiaGFuZGxlckNoYW5nZVZpZXcoKVwiXG4gICAgICAgICAgICAgICAgICAgIChvdXRDaGFuZ1N0YWdlRmxhZ01vdXNlUG9wb3Zlcik9J2hhbmRsZXJDaGFuZ1N0YWdlRmxhZ01vdXNlKCRldmVudCknXG4gICAgICAgICAgICAgICAgICAgIChvdXRDaGFuZ2UpPVwiaGFuZGxlckNoYW5nZUl0ZW1DaGVja2VkKCRldmVudC5pdGVtKVwiIC8+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIEBpZiAoIWxhc3QgJiYgIWNvbmZpZ1RlbXBsYXRlR3JvdXAuaWdub3JlR3JvdXBMaW5lICYmIGNhbGN1bGF0b3JIZWlnaEl0ZW1TdWNjZXNzKCkpIHtcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJsaWJzLXVpLWxpc3QtZ3JvdXAtbGluZVwiXG4gICAgICAgICAgICAgICAgICAgIFtzdHlsZS5tYXJnaW5Ub3AucHhdPVwiIWNvbmZpZ1RlbXBsYXRlR3JvdXAuaWdub3JlR3JvdXBMaW5lID8gY29uZmlnVGVtcGxhdGVHcm91cC5tYXJnaW5Ub3BIYXNMaW5lIHx8IDQgOiAwXCI+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgfVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIH1cbiAgICAgIEBpZiAoIWl0ZW1zKCkgfHwgIWl0ZW1zKCkubGVuZ3RoKSB7XG4gICAgICAgIDxkaXZcbiAgICAgICAgICBjbGFzcz1cImxpYnMtdWktZm9udC1oNXIgdGV4dC1bI2MxYzFjMV0gcmVsYXRpdmUge3sgY29uZmlnVGVtcGxhdGVHcm91cC5jbGFzc0luY2x1ZGVOb2RhdGE/Y29uZmlnVGVtcGxhdGVHcm91cC5jbGFzc0luY2x1ZGVOb2RhdGE6JycgfX1cIlxuICAgICAgICAgIFtzdHlsZS5tYXJnaW5MZWZ0LnB4XT1cIjAgfCBMaWJzVWlDb21wb25lbnRzTGlzdEdyb3VwQ2FsY3VsYXRvck1hcmdpbkxlZnRJdGVtUGlwZToyOihjb25maWdUZW1wbGF0ZUdyb3VwLmlzVmlld1RyZWUgfHwgY29uZmlnVGVtcGxhdGVHcm91cC5pY29uRXhwYW5kID09PSAnbGVmdCcpOmNvbmZpZ1RlbXBsYXRlR3JvdXAuaXNWaWV3VHJlZUpzb246IShjb25maWdUZW1wbGF0ZUdyb3VwLmlnbm9yZUNoZWNrYm94SXRlbSB8fCBjb25maWdUZW1wbGF0ZUdyb3VwLmlnbm9yZVJhZGlvSXRlbSB8fCBjb25maWdUZW1wbGF0ZUdyb3VwLnNpbmdsZVNlbGVjdEl0ZW0pOnRydWVcIlxuICAgICAgICAgIFtjbGFzcy5weS1bOHB4XV09XCJjb25maWdUZW1wbGF0ZUdyb3VwLmZpZWxkR2V0QXZhdGFySXRlbVwiXG4gICAgICAgICAgW2NsYXNzLnB5LVs0cHhdXT1cIiFjb25maWdUZW1wbGF0ZUdyb3VwLmZpZWxkR2V0QXZhdGFySXRlbVwiPlxuICAgICAgICAgIEBpZiAoIWtleVNlYXJjaCgpICYmICFsb2FkaW5nKCkpIHtcbiAgICAgICAgICAgIDxkaXY+e3sgKGNvbmZpZygpPy50ZXh0Tm9EYXRhID8/ICdpMThuX25vX2RhdGFfeWV0JykgfCB0cmFuc2xhdGUgfX08L2Rpdj5cbiAgICAgICAgICB9XG4gICAgICAgICAgQGlmIChrZXlTZWFyY2goKSAmJiAhbG9hZGluZygpKSB7XG4gICAgICAgICAgICA8ZGl2Pnt7IChjb25maWcoKT8udGV4dFNlYXJjaE5vRGF0YSA/PydpMThuX25vX3Jlc3VsdCcpIHwgdHJhbnNsYXRlIH19PC9kaXY+XG4gICAgICAgICAgfVxuICAgICAgICA8L2Rpdj5cbiAgICAgIH1cbiAgICAgIEBpZiAobG9hZGluZygpKSB7XG4gICAgICAgIDxsaWJzX3VpLWNvbXBvbmVudHMtc3Bpbm5lciBbc2l6ZV09XCInbWVkaXVtJ1wiIC8+XG4gICAgICB9XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxufVxuIl19
|
|
780
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JvdXAuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy11aS9jb21wb25lbnRzL2xpc3Qvc3JjL3RlbXBsYXRlcy9ncm91cC9ncm91cC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzLXVpL2NvbXBvbmVudHMvbGlzdC9zcmMvdGVtcGxhdGVzL2dyb3VwL2dyb3VwLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLHVEQUF1RDtBQUN2RCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDNUMsT0FBTyxFQUFFLHVCQUF1QixFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQVUsTUFBTSxFQUFrQixNQUFNLGVBQWUsQ0FBQztBQUM3RyxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUN2RSxPQUFPLEVBQVcsc0NBQXNDLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUNyRyxPQUFPLEVBQUUsdUNBQXVDLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUM5RixPQUFPLEVBQUUsb0NBQW9DLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUN4RixPQUFPLEVBQUUsc0NBQXNDLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUM1RixPQUFPLEVBQUUsZ0NBQWdDLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUMvRSxPQUFPLEVBQUUscUNBQXFDLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQztBQUNqRyxPQUFPLEVBQUUsU0FBUyxFQUFFLGFBQWEsRUFBRSxVQUFVLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM1RixPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDdEQsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUM3QixPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFHM0MsT0FBTyxFQUFFLDRCQUE0QixFQUFFLE1BQU0sd0NBQXdDLENBQUM7QUFDdEYsT0FBTyxFQUFFLDhDQUE4QyxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDakcsT0FBTyxFQUFFLHNDQUFzQyxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDL0UsT0FBTyxFQUFFLHFEQUFxRCxFQUFFLE1BQU0sMENBQTBDLENBQUM7OztBQXVCakgsTUFBTSxPQUFPLGtDQUFtQyxTQUFRLDhDQUE4QztJQUNwRyxtQkFBbUI7SUFDVCxtQkFBbUIsR0FBRyxNQUFNLENBQW1DLFNBQVMsQ0FBQyxDQUFDO0lBQzFFLEtBQUssR0FBRyxNQUFNLENBQVMsQ0FBQyxDQUFDLENBQUM7SUFDMUIsV0FBVyxHQUFHLE1BQU0sQ0FBZ0IsRUFBRSxDQUFDLENBQUM7SUFDeEMscUJBQXFCLEdBQUcsTUFBTSxDQUFnQixFQUFFLENBQUMsQ0FBQztJQUNsRCxTQUFTLEdBQUcsTUFBTSxDQUFTLENBQUMsQ0FBQyxDQUFDO0lBQzlCLGdCQUFnQixHQUFHLE1BQU0sQ0FBUyxDQUFDLENBQUMsQ0FBQztJQUNyQywwQkFBMEIsR0FBRyxNQUFNLENBQVUsS0FBSyxDQUFDLENBQUM7SUFDcEQsUUFBUSxHQUFHLE1BQU0sQ0FBUyxFQUFFLENBQUMsQ0FBQztJQUV2QixlQUFlLEdBQUcsVUFBVSxDQUFDO0lBQ3RDLG1CQUFtQixHQUFHLE1BQU0sQ0FBbUIsSUFBSSxHQUFHLEVBQUUsQ0FBQyxDQUFDO0lBQzFELGVBQWUsR0FBRyxNQUFNLENBQVUsS0FBSyxDQUFDLENBQUM7SUFDekMsaUJBQWlCLEdBQUcsTUFBTSxDQUFNLFNBQVMsQ0FBQyxDQUFDO0lBRTFDLFFBQVE7UUFDZixJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxFQUFFLG1CQUFtQixFQUFFLEVBQUUsRUFBRSxDQUFDO1lBQzVDLE9BQU87UUFDVCxDQUFDO1FBQ0QsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ2pCLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxFQUFFLG1CQUFtQixFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ3JFLElBQUksQ0FBQyxxQ0FBcUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLG1CQUFtQixFQUFFLEVBQUUsNEJBQTRCLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDOUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLG1CQUFtQixFQUFFLEVBQUUsUUFBUSxJQUFJLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQyxDQUFDO1FBQ2xGLElBQUksQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ2hDLElBQUksSUFBSSxDQUFDLG1CQUFtQixFQUFFLEVBQUUsbUJBQW1CLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxFQUFFLE1BQU0sSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFLEVBQUUsbUJBQW1CLENBQUMsRUFBRSxDQUFDO1lBQ2hJLElBQUksQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2pDLENBQUM7UUFDRCxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztRQUd4QixJQUFJLENBQUMsNkJBQTZCLEVBQUUsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUU7WUFDbkYsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxNQUFNLEVBQUUsQ0FBQztnQkFDMUMsT0FBTztZQUNULENBQUM7WUFDRCxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUV6QixJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUNuQyxNQUFNLG1CQUFtQixHQUFHLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO1lBRXZELElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO2dCQUN6QixPQUFPO1lBQ1QsQ0FBQztZQUNELElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUU7Z0JBQzFCLElBQUksT0FBTyxDQUFDLElBQUksRUFBRSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQztvQkFDckMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsRUFBRTt3QkFDcEIsT0FBTyxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLEVBQUUsRUFBRSxDQUFDO3dCQUU5RCxPQUFPLE9BQU8sQ0FBQztvQkFDakIsQ0FBQyxDQUFDLENBQUM7Z0JBQ0wsQ0FBQztnQkFDRCxNQUFNLFNBQVMsR0FBRyxJQUFJLEVBQUUsQ0FBQyxtQkFBbUIsQ0FBQyxhQUFhLENBQStDLENBQUM7Z0JBQzFHLE1BQU0sT0FBTyxHQUFHLFNBQVMsQ0FBQyxJQUFJLENBQXdCLENBQUM7Z0JBRXZELE9BQU8sQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLEVBQUU7b0JBQ3ZCLE9BQU8sQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDO29CQUVuQixPQUFPLE9BQU8sQ0FBQztnQkFDakIsQ0FBQyxDQUFDLENBQUM7Z0JBQ0gsSUFBSSxTQUFTLEVBQUUsQ0FBQztvQkFDZCxJQUFJLENBQUMsaUJBQWlCLENBQUMsU0FBUyxFQUFFLEVBQUUsSUFBSSxDQUFDLENBQUM7Z0JBQzVDLENBQUM7Z0JBQ0QsSUFBSSxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsSUFBSSxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsRUFBRSxNQUFNLElBQUksSUFBSSxDQUFDLGdCQUFnQixFQUFFLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLElBQUksRUFBRSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQztvQkFDeEksSUFBSSxDQUFDLG9CQUFvQixDQUFDLElBQUksRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLENBQUMsbUJBQW1CLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztvQkFFdkYsT0FBTztnQkFDVCxDQUFDO1lBQ0gsQ0FBQyxDQUFDLENBQUM7WUFDSCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBRTlCLE9BQU87UUFDVCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFUyw0QkFBNEIsQ0FBQyxPQUFnQjtRQUNyRCxNQUFNLG1CQUFtQixHQUFHLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO1FBRXZELElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO1lBQ3pCLE9BQU87UUFDVCxDQUFDO1FBQ0QsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ2IsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRTtnQkFDMUIsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUM7Z0JBQzNELE1BQU0sWUFBWSxHQUFHLElBQUksRUFBRSxDQUFDLG1CQUFtQixDQUFDLGFBQWEsQ0FBK0MsQ0FBQztnQkFFN0csSUFBSSxZQUFZLElBQUksWUFBWSxFQUFFLElBQUksWUFBWSxFQUFFLENBQUMsTUFBTSxFQUFFLENBQUM7b0JBQzVELElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxZQUFZLEVBQUUsQ0FBQyxDQUFDO2dCQUMvQyxDQUFDO1lBQ0gsQ0FBQyxDQUFDLENBQUM7WUFDSCxJQUFJLENBQUMsOEJBQThCLENBQUMsS0FBSyxDQUFDLENBQUM7WUFFM0MsT0FBTztRQUNULENBQUM7UUFFRCxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFO1lBQzFCLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1lBQ2hFLE1BQU0sWUFBWSxHQUFHLElBQUksRUFBRSxDQUFDLG1CQUFtQixDQUFDLGFBQWEsQ0FBK0MsQ0FBQztZQUU3RyxJQUFJLFlBQVksSUFBSSxZQUFZLEVBQUUsSUFBSSxZQUFZLEVBQUUsQ0FBQyxNQUFNLEVBQUUsQ0FBQztnQkFDNUQsSUFBSSxDQUFDLHlCQUF5QixDQUFDLFlBQVksRUFBRSxDQUFDLENBQUM7WUFDakQsQ0FBQztRQUNILENBQUMsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLDhCQUE4QixDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzdDLENBQUM7SUFFUyxpQkFBaUIsQ0FBQyxLQUFrQyxFQUFFLE1BQTRCO1FBQzFGLE1BQU0sbUJBQW1CLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUM7UUFFdkQsSUFBSSxDQUFDLG1CQUFtQixJQUFJLENBQUMsS0FBSyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ3BELE9BQU87UUFDVCxDQUFDO1FBQ0QsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUNuQixJQUFJLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxJQUFJLElBQUksRUFBRSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDO2dCQUNyRSxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxFQUFFO29CQUNwQixPQUFPLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsZUFBZSxHQUFHLElBQUksRUFBRSxFQUFFLENBQUM7b0JBRTlELE9BQU87Z0JBQ1QsQ0FBQyxDQUFDLENBQUM7WUFDTCxDQUFDO1lBQ0QsTUFBTSxTQUFTLEdBQUcsSUFBSSxFQUFFLENBQUMsbUJBQW1CLENBQUMsYUFBYSxDQUErQyxDQUFDO1lBQzFHLE1BQU0sT0FBTyxHQUFHLFNBQVMsQ0FBQyxJQUFJLENBQXdCLENBQUM7WUFFdkQsT0FBTyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsRUFBRTtnQkFDdkIsT0FBTyxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUM7Z0JBQ25CLE9BQU8sQ0FBQyxVQUFVLEdBQUcsTUFBTSxDQUFDO2dCQUU1QixPQUFPLE9BQU8sQ0FBQztZQUNqQixDQUFDLENBQUMsQ0FBQztZQUNILElBQUksU0FBUyxFQUFFLENBQUM7Z0JBQ2QsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFNBQVMsRUFBRSxFQUFFLElBQUksQ0FBQyxDQUFDO1lBQzVDLENBQUM7WUFDRCxJQUFJLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxJQUFJLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxFQUFFLE1BQU0sSUFBSSxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUssSUFBSSxFQUFFLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDO2dCQUN4SSxJQUFJLENBQUMsb0JBQW9CLENBQUMsSUFBSSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsQ0FBQyxtQkFBbUIsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO2dCQUV2RixPQUFPO1lBQ1QsQ0FBQztZQUNELElBQUksbUJBQW1CLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztnQkFDekMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLEtBQUssRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLENBQUMsbUJBQW1CLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztZQUMxRixDQUFDO1FBQ0gsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRVMsdUJBQXVCLENBQUMsYUFBc0IsRUFBRSxJQUFTO1FBQ2pFLGFBQWEsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUMvQixDQUFDO0lBRVMsbUJBQW1CLENBQUMsQ0FBVSxFQUFFLElBQXlCLEVBQUUsV0FBVyxHQUFHLElBQUk7UUFDckYsSUFBSSxDQUFDLFdBQVcsSUFBSSxJQUFJLENBQUMsbUJBQW1CLEVBQUUsRUFBRSxxQkFBcUIsRUFBRSxDQUFDO1lBQ3RFLE9BQU87UUFDVCxDQUFDO1FBQ0QsSUFBSSxDQUFDLFlBQVksS0FBSyxFQUFFLENBQUM7WUFDdkIsQ0FBQyxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQ3RCLENBQUM7UUFDRCxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxFQUFFO1lBQ3BCLE9BQU8sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDO1lBRWpDLE9BQU8sT0FBTyxDQUFDO1FBQ2pCLENBQUMsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQ3JCLENBQUM7SUFFUyxpQkFBaUI7UUFDekIsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQ3JCLENBQUM7SUFFUyx3QkFBd0IsQ0FBQyxJQUFTO1FBQzFDLE1BQU0sT0FBTyxHQUFHLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQztRQUUvRSxJQUFJLENBQUMsT0FBTyxJQUFJLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxFQUFFLFdBQVcsRUFBRSxDQUFDO1lBQ3hELE9BQU87UUFDVCxDQUFDO1FBQ0QsSUFBSSxDQUFDLG9CQUFvQixDQUFDLE9BQU8sRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDMUQsQ0FBQztJQUVTLG9CQUFvQixDQUFDLE9BQWdCLEVBQUUsSUFBeUIsRUFBRSxhQUFzQixFQUFFLHFCQUErQjtRQUNqSSxNQUFNLG1CQUFtQixHQUFHLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO1FBRXZELElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO1lBQ3pCLE9BQU87UUFDVCxDQUFDO1FBQ0QsSUFBSSxDQUFDLG1CQUFtQixDQUFDLGNBQWMsSUFBSSxJQUFJLEVBQUUsQ0FBQyxLQUFLLEtBQUssSUFBSSxFQUFFLENBQUMsYUFBYSxJQUFJLENBQUMsbUJBQW1CLENBQUMsbUJBQW1CLElBQUksbUJBQW1CLENBQUMsZ0JBQWdCLENBQUMsRUFBRSxDQUFDO1lBQ3RLLE9BQU87UUFDVCxDQUFDO1FBQ0QsTUFBTSxPQUFPLEdBQUcsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxHQUFHLElBQUksSUFBSSxDQUF3QixDQUFDO1FBRTVELElBQUksbUJBQW1CLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztZQUN6QyxPQUFPLEdBQUcsSUFBSSxDQUFDO1lBQ2YsTUFBTSx1QkFBdUIsR0FBRyxTQUFTLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFxQyxDQUFDO1lBRXhHLEtBQUssTUFBTSxDQUFDLEdBQUcsRUFBRSxTQUFTLENBQUMsSUFBSSx1QkFBdUIsRUFBRSxFQUFFLENBQUM7Z0JBQ3pELE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFFdEQsU0FBUyxDQUFDLGFBQWEsR0FBRyxLQUFLLENBQUM7Z0JBQ2hDLE9BQU8sU0FBUyxDQUFDLEdBQUcsQ0FBQyxhQUFhLENBQUM7Z0JBQ25DLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLHFCQUFxQixFQUFFLENBQUM7b0JBQ3pDLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztvQkFDdkMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7b0JBQ3JDLFNBQVM7Z0JBQ1gsQ0FBQztZQUNILENBQUM7WUFDRCxJQUFJLENBQUMscUJBQXFCLEVBQUUsQ0FBQztnQkFDM0IsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsRUFBRTtvQkFDcEIsT0FBTyxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUM7b0JBRTdCLE9BQU8sT0FBTyxDQUFDO2dCQUNqQixDQUFDLENBQUMsQ0FBQztnQkFDSCxPQUFPLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxFQUFFO29CQUN2QixPQUFPLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQztvQkFFN0IsT0FBTyxPQUFPLENBQUM7Z0JBQ2pCLENBQUMsQ0FBQyxDQUFDO1lBQ0wsQ0FBQztRQUNILENBQUM7UUFDRCxNQUFNLFlBQVksR0FBRyxJQUFJLEVBQUUsQ0FBQyxtQkFBbUIsQ0FBQyxhQUFhLENBQStDLENBQUM7UUFDN0csaURBQWlEO1FBQ2pELElBQUksbUJBQW1CLENBQUMsY0FBYyxJQUFJLENBQUMsbUJBQW1CLENBQUMsc0JBQXNCLElBQUksQ0FBQyxxQkFBcUIsSUFBSSxDQUFDLG1CQUFtQixDQUFDLDRCQUE0QixDQUFDLEVBQUUsQ0FBQztZQUN0SyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFO2dCQUM3RCxPQUFPLElBQUksQ0FBQyxhQUFhLENBQUM7Z0JBQzFCLE9BQU8sQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLEVBQUU7b0JBQ3ZCLE9BQU8sT0FBTyxDQUFDLGFBQWEsQ0FBQztvQkFFN0IsT0FBTyxPQUFPLENBQUM7Z0JBQ2pCLENBQUMsQ0FBQyxDQUFDO1lBQ0wsQ0FBQyxDQUFDLENBQUM7WUFFSCxJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDO1lBQ2xELElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ25DLElBQUksQ0FBQyw4QkFBOEIsQ0FBQyxhQUFhLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDM0QsQ0FBQztRQUVELElBQUksT0FBTyxFQUFFLENBQUM7WUFDWixJQUFJLENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDakMsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7WUFDaEUsSUFBSSxxQkFBcUIsRUFBRSxDQUFDO2dCQUMxQixPQUFPLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxFQUFFO29CQUN2QixPQUFPLENBQUMscUJBQXFCLEdBQUcscUJBQXFCLENBQUM7b0JBRXRELE9BQU8sT0FBTyxDQUFDO2dCQUNqQixDQUFDLENBQUMsQ0FBQztZQUNMLENBQUM7WUFDRCxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxFQUFFO2dCQUNwQixPQUFPLENBQUMscUJBQXFCLEdBQUcsT0FBTyxFQUFFLENBQUMscUJBQXFCLENBQUM7Z0JBRWhFLE9BQU8sT0FBTyxDQUFDO1lBQ2pCLENBQUMsQ0FBQyxDQUFDO1lBQ0gsSUFBSSxtQkFBbUIsQ0FBQywrQkFBK0IsRUFBRSxDQUFDLENBQUMsdUZBQXVGO2dCQUNoSixJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxFQUFFO29CQUNwQixPQUFPLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQztvQkFFN0IsT0FBTyxPQUFPLENBQUM7Z0JBQ2pCLENBQUMsQ0FBQyxDQUFDO2dCQUNILE9BQU8sQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLEVBQUU7b0JBQ3ZCLE9BQU8sQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDO29CQUU3QixPQUFPLE9BQU8sQ0FBQztnQkFDakIsQ0FBQyxDQUFDLENBQUM7Z0JBQ0gsSUFBSSxDQUFDLDhCQUE4QixDQUFDLElBQUksRUFBRSxDQUFDLFVBQVUsQ0FBQyxDQUFDO2dCQUV2RCxJQUFJLENBQUMsbUJBQW1CLENBQUMsd0NBQXdDLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO29CQUM1RixJQUFJLENBQUMseUJBQXlCLENBQUMsWUFBWSxFQUFFLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztnQkFDekQsQ0FBQztnQkFDRCxJQUFJLENBQUMsOEJBQThCLENBQUMsYUFBYSxFQUFFLElBQUksQ0FBQyxDQUFDO2dCQUV6RCxPQUFPO1lBQ1QsQ0FBQztZQUNELElBQUksbUJBQW1CLENBQUMsd0NBQXdDLEVBQUUsQ0FBQyxDQUFDLHdEQUF3RDtnQkFDMUgsSUFBSSxDQUFDLDhCQUE4QixDQUFDLGFBQWEsRUFBRSxJQUFJLENBQUMsQ0FBQztnQkFFekQsT0FBTztZQUNULENBQUM7WUFDRCxJQUFJLFlBQVksSUFBSSxZQUFZLEVBQUUsSUFBSSxZQUFZLEVBQUUsQ0FBQyxNQUFNLElBQUksQ0FBQyxxQkFBcUIsSUFBSSxDQUFDLG1CQUFtQixDQUFDLGNBQWMsRUFBRSxDQUFDO2dCQUM3SCxNQUFNLFdBQVcsR0FBRyxtQkFBbUIsQ0FBQywyQ0FBMkMsQ0FBQyxDQUFDO29CQUNuRixZQUFZLEVBQUUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFTLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLGVBQWUsRUFBRSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxJQUFJLEVBQUUsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVksRUFBRSxDQUFDO2dCQUUvSCxJQUFJLENBQUMseUJBQXlCLENBQUMsV0FBVyxDQUFDLENBQUM7WUFDOUMsQ0FBQztZQUNELElBQUksQ0FBQyxtQkFBbUIsQ0FBQyw0QkFBNEIsSUFBSSxDQUFDLG1CQUFtQixDQUFDLGNBQWMsRUFBRSxDQUFDO2dCQUM3RixJQUFJLENBQUMsMEJBQTBCLENBQUMsSUFBSSxFQUFFLENBQUMsVUFBVSxDQUFDLENBQUM7WUFDckQsQ0FBQztZQUNELElBQUksQ0FBQyw4QkFBOEIsQ0FBQyxhQUFhLEVBQUUsSUFBSSxDQUFDLENBQUM7WUFFekQsT0FBTztRQUNULENBQUM7UUFDRCxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxFQUFFO1lBQ3BCLE9BQU8sQ0FBQyxhQUFhLEdBQUcsS0FBSyxDQUFDO1lBRTlCLElBQUkscUJBQXFCLEVBQUUsQ0FBQztnQkFDMUIsT0FBTyxDQUFDLHFCQUFxQixHQUFHLEtBQUssQ0FBQztZQUN4QyxDQUFDO1lBRUQsT0FBTyxPQUFPLENBQUM7UUFDakIsQ0FBQyxDQUFDLENBQUM7UUFDSCxPQUFPLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxFQUFFO1lBQ3ZCLE9BQU8sQ0FBQyxhQUFhLEdBQUcsS0FBSyxDQUFDO1lBRTlCLElBQUkscUJBQXFCLEVBQUUsQ0FBQztnQkFDMUIsT0FBTyxDQUFDLHFCQUFxQixHQUFHLEtBQUssQ0FBQztZQUN4QyxDQUFDO1lBRUQsT0FBTyxPQUFPLENBQUM7UUFDakIsQ0FBQyxDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUMzRCxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQztRQUVwRSxJQUFJLG1CQUFtQixDQUFDLDRCQUE0QixFQUFFLENBQUM7WUFDckQsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDM0QsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ2xHLElBQUksQ0FBQyw4QkFBOEIsQ0FBQyxhQUFhLEVBQUUsSUFBSSxDQUFDLENBQUM7WUFFekQsT0FBTztRQUNULENBQUM7UUFDRCxJQUFJLG1CQUFtQixDQUFDLHdDQUF3QyxFQUFFLENBQUM7WUFDakUsSUFBSSxDQUFDLDhCQUE4QixDQUFDLElBQUksRUFBRSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ3pELENBQUM7UUFFRCw0RUFBNEU7UUFDNUUsSUFBSSxZQUFZLElBQUksWUFBWSxFQUFFLElBQUksWUFBWSxFQUFFLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDNUQsTUFBTSxXQUFXLEdBQUcsbUJBQW1CLENBQUMsMkNBQTJDLENBQUMsQ0FBQztnQkFDbkYsWUFBWSxFQUFFLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxlQUFlLEVBQUUsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUssSUFBSSxFQUFFLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUUxSCxJQUFJLENBQUMsdUJBQXVCLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDNUMsQ0FBQztRQUNELElBQUksSUFBSSxFQUFFLENBQUMsVUFBVSxJQUFJLENBQUMsbUJBQW1CLENBQUMsd0NBQXdDLEVBQUUsQ0FBQztZQUN2RixJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDeEUsQ0FBQztRQUNELElBQUksQ0FBQyw4QkFBOEIsQ0FBQyxhQUFhLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDM0QsQ0FBQztJQUVPLGVBQWUsQ0FBQyxJQUF5QixFQUFFLE1BQWtEO1FBQ25HLE1BQU0sbUJBQW1CLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUM7UUFFdkQsSUFBSSxDQUFDLG1CQUFtQixJQUFJLENBQUMsTUFBTSxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ3RELE9BQU87UUFDVCxDQUFDO1FBRUQsS0FBSyxNQUFNLEtBQUssSUFBSSxNQUFNLEVBQUUsRUFBRSxDQUFDO1lBQzdCLElBQUksS0FBSyxFQUFFLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLEtBQUssSUFBSSxFQUFFLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLEVBQUUsQ0FBQztnQkFDekQsT0FBTyxLQUFLLEVBQUUsQ0FBQyxtQkFBbUIsQ0FBQyxhQUFhLENBQStDLENBQUM7WUFDbEcsQ0FBQztZQUNELE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxDQUFDLG1CQUFtQixDQUFDLGFBQWEsQ0FBQyxDQUErQyxDQUFDO1lBRXBJLE9BQU8sTUFBTSxDQUFDO1FBQ2hCLENBQUM7UUFFRCxPQUFPO0lBQ1QsQ0FBQztJQUVPLHdCQUF3QixDQUFDLElBQTBCO1FBQ3pELElBQUksQ0FBQyxJQUFJLEVBQUUsRUFBRSxFQUFFLENBQUM7WUFDZCxJQUFJLENBQUMscUJBQXFCLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBRW5DLE9BQU87UUFDVCxDQUFDO1FBQ0QsTUFBTSxXQUFXLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBQ2xFLE1BQU0sVUFBVSxHQUFHLElBQUksRUFBRSxDQUFDLFVBQWlDLENBQUM7UUFDNUQsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixFQUFFLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLElBQUksRUFBRSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFFakcsSUFBSSxTQUFTLElBQUksQ0FBQyxFQUFFLENBQUM7WUFDbkIsSUFBSSxDQUFDLHFCQUFxQixDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsRUFBRTtnQkFDMUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDLENBQUM7Z0JBRTdCLE9BQU8sT0FBTyxDQUFDO1lBQ2pCLENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztRQUVELElBQUksQ0FBQyxVQUFVLElBQUksQ0FBQyxVQUFVLEVBQUUsRUFBRSxDQUFDO1lBQ2pDLE9BQU87UUFDVCxDQUFDO1FBQ0QsTUFBTSxrQkFBa0IsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFFeEUsSUFBSSxDQUFDLGtCQUFrQixJQUFJLENBQUMsa0JBQWtCLEVBQUUsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDakYsT0FBTztRQUNULENBQUM7UUFDRCxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMscUJBQXFCLEVBQUUsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUssVUFBVSxFQUFFLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUV6RyxJQUFJLGtCQUFrQixFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLE9BQU8sRUFBRSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxXQUFXLElBQUksQ0FBQyxFQUFFLENBQUM7WUFDbEgsSUFBSSxDQUFDLHFCQUFxQixDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsRUFBRTtnQkFDMUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDLENBQUM7Z0JBRTdCLE9BQU8sT0FBTyxDQUFDO1lBQ2pCLENBQUMsQ0FBQyxDQUFDO1lBRUgsT0FBTztRQUNULENBQUM7UUFDRCxJQUFJLGtCQUFrQixFQUFFLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksV0FBVyxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQzlHLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsT0FBTyxFQUFFLFVBQVUsRUFBRSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUUxRixPQUFPO1FBQ1QsQ0FBQztRQUNELElBQUksV0FBVyxJQUFJLENBQUMsRUFBRSxDQUFDO1lBQ3JCLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLEVBQUU7Z0JBQzFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQyxDQUFDO2dCQUU3QixPQUFPLE9BQU8sQ0FBQztZQUNqQixDQUFDLENBQUMsQ0FBQztRQUNMLENBQUM7SUFDSCxDQUFDO0lBRU8sOEJBQThCLENBQUMsYUFBc0IsRUFBRSxJQUEwQjtRQUN2RixJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQztRQUNwRSxJQUFJLENBQUMsbUJBQW1CLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDeEMsSUFBSSxDQUFDLHdCQUF3QixDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3RDLENBQUM7SUFFTyxtQkFBbUIsQ0FBQyxhQUFhLEdBQUcsSUFBSTtRQUM5QyxNQUFNLG1CQUFtQixHQUFHLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO1FBRXZELElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO1lBQ3pCLE9BQU87UUFDVCxDQUFDO1FBQ0QsTUFBTSxtQkFBbUIsR0FBMEIsRUFBRSxJQUFJLEVBQUUsSUFBSSxLQUFLLEVBQU8sRUFBRSxPQUFPLEVBQUUsSUFBSSxLQUFLLEVBQW9CLEVBQUUsYUFBYSxFQUFFLENBQUM7UUFFckksSUFBSSxDQUFDLG1CQUFtQixDQUFDLGtCQUFrQixJQUFJLG1CQUFtQixDQUFDLCtCQUErQixDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQywyREFBMkQsRUFBRSxDQUFDO1lBQ3hMLEtBQUssTUFBTSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsbUJBQW1CLEVBQUUsRUFBRSxDQUFDO2dCQUNyRCxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUNuQyxtQkFBbUIsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsRUFBRSxJQUFJLElBQUksQ0FBQyxFQUFFLGFBQWEsRUFBRSxDQUFDLENBQUM7WUFDekYsQ0FBQztZQUNELElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsQ0FBQztZQUNqRCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUUzRCxPQUFPO1FBQ1QsQ0FBQztRQUVELEtBQUssTUFBTSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsbUJBQW1CLEVBQUUsRUFBRSxDQUFDO1lBQ3JELElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxhQUFhLENBQUMsRUFBRSxNQUFNLElBQUksQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsYUFBYSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxTQUE4QixFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQyxHQUFHLENBQUMsU0FBUyxFQUFFLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztnQkFDdFMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDbkMsbUJBQW1CLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLEVBQUUsSUFBSSxJQUFJLENBQUMsRUFBRSxhQUFhLEVBQUUsQ0FBQyxDQUFDO1lBQ3pGLENBQUM7UUFDSCxDQUFDO1FBQ0QsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO1FBQ2pELElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQzdELENBQUM7SUFFTyw4QkFBOEIsQ0FBQyxJQUFTO1FBQzlDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUNWLE9BQU87UUFDVCxDQUFDO1FBQ0QsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBQzlELElBQUksQ0FBQyw4QkFBOEIsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDdkQsQ0FBQztJQUVPLDBCQUEwQixDQUFDLElBQXlCO1FBQzFELE1BQU0sbUJBQW1CLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUM7UUFFdkQsSUFBSSxDQUFDLG1CQUFtQixJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDbEMsT0FBTztRQUNULENBQUM7UUFDRCxNQUFNLFlBQVksR0FBRyxJQUFJLEVBQUUsQ0FBQyxtQkFBbUIsQ0FBQyxhQUFhLENBQStDLENBQUM7UUFFN0csSUFBSSxDQUFDLFlBQVksRUFBRSxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDOUMsT0FBTztRQUNULENBQUM7UUFDRCxLQUFLLE1BQU0sU0FBUyxJQUFJLFlBQVksRUFBRSxFQUFFLENBQUM7WUFDdkMsSUFBSSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDLEdBQUcsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUM7Z0JBQ2xFLE9BQU87WUFDVCxDQUFDO1FBQ0gsQ0FBQztRQUNELElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBQ2hFLElBQUksSUFBSSxFQUFFLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDdEIsSUFBSSxDQUFDLDBCQUEwQixDQUFDLElBQUksRUFBRSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ3JELENBQUM7SUFDSCxDQUFDO0lBRU8seUJBQXlCLENBQUMsS0FBaUM7UUFDakUsTUFBTSxtQkFBbUIsR0FBRyxJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztRQUV2RCxJQUFJLENBQUMsbUJBQW1CLElBQUksQ0FBQyxLQUFLLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDcEQsT0FBTztRQUNULENBQUM7UUFDRCxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFO1lBQ25CLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1lBQ2hFLE1BQU0sWUFBWSxHQUFHLElBQUksRUFBRSxDQUFDLG1CQUFtQixDQUFDLGFBQWEsQ0FBK0MsQ0FBQztZQUU3RyxJQUFJLFlBQVksSUFBSSxZQUFZLEVBQUUsSUFBSSxZQUFZLEVBQUUsQ0FBQyxNQUFNLEVBQUUsQ0FBQztnQkFDNUQsSUFBSSxDQUFDLHlCQUF5QixDQUFDLFlBQVksRUFBRSxDQUFDLENBQUM7WUFDakQsQ0FBQztRQUNILENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVPLHVCQUF1QixDQUFDLEtBQWlDO1FBQy9ELE1BQU0sbUJBQW1CLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUM7UUFFdkQsSUFBSSxDQUFDLG1CQUFtQixJQUFJLENBQUMsS0FBSyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ3BELE9BQU87UUFDVCxDQUFDO1FBQ0QsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUNuQixJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxFQUFFO2dCQUNwQixPQUFPLENBQUMsYUFBYSxHQUFHLEtBQUssQ0FBQztnQkFFOUIsT0FBTyxPQUFPLENBQUM7WUFDakIsQ0FBQyxDQUFDLENBQUM7WUFDSCxJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FBQztZQUMzRCxJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBRXpELE1BQU0sWUFBWSxHQUFHLElBQUksRUFBRSxDQUFDLG1CQUFtQixDQUFDLGFBQWEsQ0FBK0MsQ0FBQztZQUU3RyxJQUFJLFlBQVksSUFBSSxZQUFZLEVBQUUsSUFBSSxZQUFZLEVBQUUsQ0FBQyxNQUFNLEVBQUUsQ0FBQztnQkFDNUQsSUFBSSxDQUFDLHVCQUF1QixDQUFDLFlBQVksRUFBRSxDQUFDLENBQUM7WUFDL0MsQ0FBQztRQUNILENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVTLGFBQWE7UUFDckIsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQ3JCLENBQUM7SUFFUyxXQUFXO1FBQ25CLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBRXRCLE1BQU0sbUJBQW1CLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUM7UUFFdkQsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUM7WUFDekIsT0FBTztRQUNULENBQUM7UUFFRCxJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUU7WUFDcEMsSUFBSSxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQztnQkFDckUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsRUFBRTtvQkFDcEIsT0FBTyxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLEVBQUUsRUFBRSxDQUFDO29CQUU5RCxPQUFPO2dCQUNULENBQUMsQ0FBQyxDQUFDO1lBQ0wsQ0FBQztZQUNELE1BQU0sT0FBTyxHQUFHLFNBQVMsQ0FBQyxJQUFJLENBQXdCLENBQUM7WUFDdkQsT0FBTyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsRUFBRTtnQkFDdkIsT0FBTyxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUM7Z0JBQ25CLE9BQU8sQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO2dCQUN0QixPQUFPLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7Z0JBQ2pELE9BQU8sQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixFQUFFLEVBQUUsZ0JBQWdCLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztnQkFDN0UsT0FBTyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7Z0JBQzdCLE9BQU8sQ0FBQyw4QkFBOEIsR0FBRyxJQUFJLENBQUMsbUJBQW1CLEVBQUUsRUFBRSw2QkFBNkIsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7Z0JBQzdHLE9BQU8sQ0FBQyxvQkFBb0IsR0FBRyxJQUFJLENBQUMsbUJBQW1CLEVBQUUsRUFBRSx1QkFBdUIsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7Z0JBRTdGLE9BQU8sT0FBTyxDQUFDO1lBQ2pCLENBQUMsQ0FBQyxDQUFDO1lBQ0gsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDLEtBQUssS0FBSyxPQUFPLEVBQUUsQ0FBQyxhQUFhLElBQUksQ0FBQyxJQUFJLENBQUMsbUJBQW1CLEVBQUUsRUFBRSxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLEVBQUUsUUFBUSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsRUFBRSxDQUFDO2dCQUMxSyxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUM7WUFDOUMsQ0FBQztZQUNELElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLElBQUksSUFBSSxDQUFDLG1CQUFtQixFQUFFLEVBQUUsY0FBYyxFQUFFLENBQUM7Z0JBQ3BFLE9BQU8sQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLEVBQUU7b0JBQ3ZCLE9BQU8sQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixFQUFFLEVBQUUsY0FBYyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUM7b0JBRXBFLE9BQU8sT0FBTyxDQUFDO2dCQUNqQixDQUFDLENBQUMsQ0FBQztZQUNMLENBQUM7WUFDRCxJQUFJLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxFQUFFLGVBQWUsRUFBRSxDQUFDO2dCQUNoRCxPQUFPLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxFQUFFO29CQUN2QixPQUFPLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxFQUFFLGVBQWUsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDO29CQUUxRSxPQUFPLE9BQU8sQ0FBQztnQkFDakIsQ0FBQyxDQUFDLENBQUM7WUFDTCxDQUFDO1lBQ0QsSUFBSSxJQUFJLENBQUMsbUJBQW1CLEVBQUUsRUFBRSxjQUFjLEVBQUUsQ0FBQztnQkFDL0MsT0FBTyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsRUFBRTtvQkFDdkIsT0FBTyxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUMsbUJBQW1CLEVBQUUsRUFBRSxjQUFjLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQztvQkFFM0UsT0FBTyxPQUFPLENBQUM7Z0JBQ2pCLENBQUMsQ0FBQyxDQUFDO1lBQ0wsQ0FBQztZQUNELE1BQU0sSUFBSSxHQUFHLGFBQWEsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1lBQ2pGLE1BQU0sVUFBVSxHQUFHLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUNwQyxNQUFNLFNBQVMsR0FBRyxhQUFhLENBQUMsVUFBVSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLGlCQUFpQixFQUFFLENBQUMsQ0FBQyxDQUFDO1lBRWpHLE9BQU8sQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLEVBQUU7Z0JBQ3ZCLE9BQU8sQ0FBQyxlQUFlLEdBQUcsS0FBSyxDQUFDO2dCQUVoQyxPQUFPLE9BQU8sQ0FBQztZQUNqQixDQUFDLENBQUMsQ0FBQztZQUNILElBQUksQ0FBQyxTQUFTLElBQUksQ0FBQyxJQUFJLENBQUMsbUJBQW1CLEVBQUUsRUFBRSxjQUFjLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxJQUFJLFVBQVUsQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7Z0JBQy9ILE9BQU8sQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLEVBQUU7b0JBQ3ZCLE9BQU8sQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDO29CQUMvQixPQUFPLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQztvQkFFMUIsT0FBTyxPQUFPLENBQUM7Z0JBQ2pCLENBQUMsQ0FBQyxDQUFDO1lBQ0wsQ0FBQztZQUNELE1BQU0sU0FBUyxHQUFHLElBQUksRUFBRSxDQUFDLG1CQUFtQixDQUFDLGFBQWEsQ0FBK0MsQ0FBQztZQUUxRyxPQUFPLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxFQUFFO2dCQUN2QixNQUFNLFFBQVEsR0FBRyxPQUFPLENBQUMsbUJBQW1CLENBQUMsYUFBYSxDQUErQyxDQUFDO2dCQUMxRyxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLHdCQUF3QixDQUFDLFNBQVMsRUFBRSxFQUFFLElBQUksRUFBRSxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUM7Z0JBRWxHLFFBQVEsRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQ3BCLElBQUksT0FBTyxDQUFDLG1CQUFtQixDQUFDLGFBQWEsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDO29CQUNuRCxPQUFPLENBQUMsbUJBQW1CLENBQUMsYUFBYSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsVUFBc0IsRUFBRSxFQUFFO3dCQUMzRSxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sRUFBRSxDQUFDOzRCQUN2QixPQUFPLFVBQVUsQ0FBQzt3QkFDcEIsQ0FBQzt3QkFDRCxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQzt3QkFDN0IsTUFBTSxTQUFTLEdBQUcsVUFBVSxFQUFFLE1BQU0sR0FBRyxDQUFDLENBQUM7d0JBRXpDLElBQUksU0FBUyxJQUFJLENBQUMsRUFBRSxDQUFDOzRCQUNuQixVQUFVLENBQUMsU0FBUyxDQUFDLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQzt3QkFDdEMsQ0FBQzt3QkFFRCxPQUFPLFVBQVUsQ0FBQztvQkFDcEIsQ0FBQyxDQUFDLENBQUM7Z0JBQ0wsQ0FBQztnQkFDRCxPQUFPLENBQUMsZ0JBQWdCLEdBQUcsQ0FBQyxDQUFDO2dCQUM3QixJQUFJLG1CQUFtQixDQUFDLHVCQUF1QixFQUFFLENBQUM7b0JBQ2hELE9BQU8sQ0FBQyxnQkFBZ0IsR0FBRyxtQkFBbUIsQ0FBQyx1QkFBdUIsQ0FBQyxPQUFPLENBQUMsQ0FBQztnQkFDbEYsQ0FBQztnQkFDRCxJQUFJLG1CQUFtQixDQUFDLHlCQUF5QixFQUFFLENBQUM7b0JBQ2xELE9BQU8sQ0FBQyxzQkFBc0IsR0FBRyxtQkFBbUIsQ0FBQyx5QkFBeUIsQ0FBQyxPQUFPLENBQUMsQ0FBQztnQkFDMUYsQ0FBQztnQkFDRCxPQUFPLENBQUMsWUFBWSxHQUFHLG1CQUFtQixDQUFDLGVBQWUsSUFBSSxtQkFBbUIsQ0FBQyxlQUFlLENBQUMsT0FBTyxDQUFDLENBQUM7Z0JBRTNHLE9BQU8sT0FBTyxDQUFDO1lBQ2pCLENBQUMsQ0FBQyxDQUFDO1lBQ0gsSUFBSSxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsSUFBSSxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsRUFBRSxNQUFNLElBQUksSUFBSSxDQUFDLGdCQUFnQixFQUFFLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLE9BQU8sRUFBRSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQztnQkFDM0ksSUFBSSxDQUFDLG9CQUFvQixDQUFDLElBQUksRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDO1lBQ3hELENBQUM7WUFDRCxJQUFJLENBQUMsa0JBQWtCLENBQUMsT0FBTyxDQUFDLENBQUM7WUFFakMsT0FBTyxPQUFPLENBQUM7UUFDakIsQ0FBQyxDQUFDLENBQUM7UUFFSCxJQUFJLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxFQUFFLGNBQWMsSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FBQztZQUNuRSxLQUFLLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRTtnQkFDMUIsT0FBTyxJQUFJLEVBQUUsQ0FBQyxVQUFVLENBQUE7WUFDMUIsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDO1FBQ0QsSUFBSSxDQUFDLE1BQU0sRUFBRSxFQUFFLElBQUksRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzdCLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3RCLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUE7UUFDN0IsTUFBTSwrQkFBK0IsR0FBRyxHQUFHLEVBQUU7WUFDM0MsSUFBSSxDQUFDLDBCQUEwQixDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUUxQyxJQUFJLG1CQUFtQixDQUFDLGVBQWUsSUFBSSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztnQkFDM0QsSUFBSSxDQUFDLHFCQUFxQixDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzlDLENBQUM7WUFFRCxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztZQUN6QixJQUFJLElBQUksQ0FBQyxpQkFBaUIsSUFBSSxJQUFJLENBQUMsaUJBQWlCLEVBQUUsRUFBRSxDQUFDO2dCQUN2RCxJQUFJLENBQUMsb0JBQW9CLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxLQUFLLENBQUMsQ0FBQztnQkFDL0QsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUN4QyxDQUFDO1FBQ0gsQ0FBQyxDQUFDO1FBQ0YsTUFBTSxhQUFhLEdBQUcsQ0FBQyxpQkFBMEIsRUFBRSxnQkFBeUIsRUFBRSxFQUFFO1lBQzlFLElBQUksSUFBSSxDQUFDLGNBQWMsRUFBRSxFQUFFLE1BQU0sSUFBSSxpQkFBaUIsSUFBSSxDQUFDLGdCQUFnQixJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDLEVBQUUsQ0FBQztnQkFDdkcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQy9CLENBQUM7UUFDSCxDQUFDLENBQUM7UUFFRixVQUFVLENBQUMsR0FBRyxFQUFFO1lBQ2QsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDeEIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUM7WUFDckMsSUFBSSxDQUFDLFdBQVcsQ0FBQywrQkFBK0IsRUFBRSxhQUFhLENBQUMsQ0FBQztZQUNqRSxJQUFJLENBQUMsb0JBQW9CLENBQUMsSUFBSSxDQUFDLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDMUQsQ0FBQyxDQUFDLENBQUM7UUFFSCxPQUFPO0lBQ1QsQ0FBQztJQUVPLFdBQVcsQ0FBQywrQkFBNEMsRUFBRSxhQUErRTtRQUMvSSxJQUFJLENBQUMsaUJBQWlCLENBQUMsK0JBQStCLENBQUMsQ0FBQztRQUN4RCxJQUFJLENBQUMsbUJBQW1CLENBQUMsYUFBYSxDQUFDLENBQUM7SUFDMUMsQ0FBQztJQUVPLHFCQUFxQixDQUFDLElBQVM7UUFDckMsTUFBTSxtQkFBbUIsR0FBRyxJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztRQUN2RCxJQUFJLENBQUMsbUJBQW1CLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUNsQyxPQUFPO1FBQ1QsQ0FBQztRQUNELElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO1FBQ25CLE1BQU0sS0FBSyxHQUFlLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUVsRSxJQUFJLENBQUMsS0FBSyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQzVCLE9BQU87UUFDVCxDQUFDO1FBQ0QsS0FBSyxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDO0lBQ3BFLENBQUM7SUFHTyx3QkFBd0IsQ0FBQyxLQUFpQyxFQUFFLFVBQStCO1FBQ2pHLE1BQU0sbUJBQW1CLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUM7UUFDdkQsSUFBSSxDQUFDLG1CQUFtQixJQUFJLENBQUMsS0FBSyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ3BELE9BQU8sRUFBRSxDQUFDO1FBQ1osQ0FBQztRQUNELE1BQU0sUUFBUSxHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDaEMsSUFBSSxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQztnQkFDckUsSUFBSSxFQUFFLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsZUFBZSxHQUFHLElBQUksRUFBRSxFQUFFLENBQUM7WUFDL0QsQ0FBQztZQUNELE1BQU0sT0FBTyxHQUFHLFNBQVMsQ0FBQyxJQUFJLENBQXdCLENBQUM7WUFFdkQsT0FBTyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsRUFBRTtnQkFDdkIsT0FBTyxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUM7Z0JBQ25CLE9BQU8sQ0FBQyxVQUFVLEdBQUcsVUFBVSxDQUFDO2dCQUNoQyxPQUFPLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLEdBQUcsSUFBSSxFQUFFLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7Z0JBRW5ELE9BQU8sQ0FBQyxhQUFhLEdBQUcsVUFBVSxFQUFFLENBQUMsYUFBYSxDQUFDO2dCQUNuRCxPQUFPLENBQUMsS0FBSyxHQUFHLFVBQVUsRUFBRSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUM7Z0JBQ3ZDLE9BQU8sQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDLENBQUMsRUFBRSxPQUFPLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDO2dCQUNqRCxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssS0FBSyxPQUFPLENBQUMsYUFBYSxJQUFJLENBQUMsbUJBQW1CLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLEVBQUUsQ0FBQztvQkFDN0osSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDO2dCQUM5QyxDQUFDO2dCQUVELE9BQU8sQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztnQkFDakQsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsSUFBSSxtQkFBbUIsQ0FBQyxhQUFhLEVBQUUsQ0FBQztvQkFDM0QsT0FBTyxDQUFDLE1BQU0sR0FBRyxtQkFBbUIsQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLENBQUM7Z0JBQzlELENBQUM7Z0JBQ0QsT0FBTyxDQUFDLGVBQWUsR0FBRyxVQUFVLEVBQUUsQ0FBQyxlQUFlLENBQUM7Z0JBQ3ZELElBQUksbUJBQW1CLENBQUMsY0FBYyxFQUFFLENBQUM7b0JBQ3ZDLE9BQU8sQ0FBQyxXQUFXLEdBQUcsbUJBQW1CLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxDQUFDO2dCQUNwRSxDQUFDO2dCQUNELElBQUksbUJBQW1CLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztvQkFDMUMsT0FBTyxDQUFDLGNBQWMsR0FBRyxtQkFBbUIsQ0FBQyxpQkFBaUIsQ0FBQyxPQUFPLENBQUMsQ0FBQztnQkFDMUUsQ0FBQztnQkFDRCxNQUFNLElBQUksR0FBRyxhQUFhLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBOEIsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsaUJBQWlCLEVBQUUsQ0FBQyxDQUFDO2dCQUM5SSxNQUFNLFNBQVMsR0FBRyxhQUFhLENBQUMsVUFBVSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLGlCQUFpQixFQUFFLENBQUMsQ0FBQyxDQUFDO2dCQUNqRyxNQUFNLFVBQVUsR0FBRyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQ3BDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxjQUFjLEVBQUUsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUssT0FBTyxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsVUFBVSxFQUFFLENBQUMsZUFBZSxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDLG1CQUFtQixDQUFDLGNBQWMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxJQUFJLFVBQVUsQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztvQkFDcFMsT0FBTyxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUM7b0JBQy9CLElBQUksQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLENBQUM7Z0JBQy9CLENBQUM7Z0JBQ0QsTUFBTSxTQUFTLEdBQUcsT0FBTyxDQUFDLG1CQUFtQixDQUFDLGFBQWEsQ0FBK0MsQ0FBQztnQkFDM0csSUFBSSxTQUFTLEVBQUUsRUFBRSxFQUFFLENBQUM7b0JBQ2xCLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsd0JBQXdCLENBQUMsU0FBUyxFQUFFLEVBQUUsRUFBRSxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO29CQUNwRyxTQUFTLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUN0QixDQUFDO2dCQUVELElBQUksT0FBTyxDQUFDLG1CQUFtQixDQUFDLGFBQWEsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDO29CQUNuRCxPQUFPLENBQUMsbUJBQW1CLENBQUMsYUFBYSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsVUFBc0IsRUFBRSxFQUFFO3dCQUMzRSxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sRUFBRSxDQUFDOzRCQUN2QixPQUFPLFVBQVUsQ0FBQzt3QkFDcEIsQ0FBQzt3QkFDRCxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQzt3QkFDN0IsTUFBTSxTQUFTLEdBQUcsVUFBVSxFQUFFLE1BQU0sR0FBRyxDQUFDLENBQUM7d0JBRXpDLElBQUksU0FBUyxJQUFJLENBQUMsRUFBRSxDQUFDOzRCQUNuQixVQUFVLENBQUMsU0FBUyxDQUFDLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQzt3QkFDdEMsQ0FBQzt3QkFFRCxPQUFPLFVBQVUsQ0FBQztvQkFDcEIsQ0FBQyxDQUFDLENBQUM7Z0JBQ0wsQ0FBQztnQkFDRCxPQUFPLENBQUMsZ0JBQWdCLEdBQUcsQ0FBQyxDQUFDO2dCQUM3QixJQUFJLG1CQUFtQixDQUFDLHVCQUF1QixFQUFFLENBQUM7b0JBQ2hELE9BQU8sQ0FBQyxnQkFBZ0IsR0FBRyxtQkFBbUIsQ0FBQyx1QkFBdUIsQ0FBQyxPQUFPLEVBQUUsVUFBVSxDQUFDLENBQUM7Z0JBQzlGLENBQUM7Z0JBQ0QsSUFBSSxtQkFBbUIsQ0FBQyx5QkFBeUIsRUFBRSxDQUFDO29CQUNsRCxPQUFPLENBQUMsc0JBQXNCLEdBQUcsbUJBQW1CLENBQUMseUJBQXlCLENBQUMsT0FBTyxFQUFFLFVBQVUsQ0FBQyxDQUFDO2dCQUN0RyxDQUFDO2dCQUNELElBQUksbUJBQW1CLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztvQkFDMUMsT0FBTyxDQUFDLGNBQWMsR0FBRyxtQkFBbUIsQ0FBQyxpQkFBaUIsQ0FBQyxPQUFPLENBQUMsQ0FBQztnQkFDMUUsQ0FBQztnQkFDRCxJQUFJLG1CQUFtQixDQUFDLDBCQUEwQixFQUFFLENBQUM7b0JBQ25ELE9BQU8sQ0FBQyxZQUFZLEdBQUcsbUJBQW1CLENBQUMsMEJBQTBCLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQzlFLENBQUM7Z0JBQ0QsT0FBTyxDQUFDLFlBQVksR0FBRyxtQkFBbUIsQ0FBQyxlQUFlLElBQUksbUJBQW1CLENBQUMsZUFBZSxDQUFDLE9BQU8sQ0FBQyxDQUFDO2dCQUMzRyxJQUFJLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxJQUFJLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxFQUFFLE1BQU0sSUFBSSxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUssT0FBTyxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQztvQkFDekksSUFBSSxDQUFDLG9CQUFvQixDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsT0FBTyxDQUFDLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDO2dCQUNoRSxDQUFDO2dCQUNELElBQUksSUFBSSxDQUFDLGVBQWUsRUFBRSxJQUFJLE9BQU8sQ0FBQyxLQUFLLEtBQUssT0FBTyxDQUFDLGFBQWEsRUFBRSxDQUFDO29CQUN0RSxJQUFJLENBQUMsaUJBQWlCLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDO29CQUNwQyxJQUFJLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDbEMsQ0FBQztnQkFFRCxPQUFPLE9BQU8sQ0FBQztZQUNqQixDQUFDLENBQUMsQ0FBQztZQUVILE9BQU8sT0FBTyxDQUFDO1FBQ2pCLENBQUMsQ0FBQyxDQUFDO1FBRUgsT0FBTyxRQUFRLENBQUM7SUFDbEIsQ0FBQztJQUVPLGNBQWMsQ0FBQyxJQUFTO1FBQzlCLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUNWLE9BQU87UUFDVCxDQUFDO1FBQ0QsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUM7UUFFdkIsSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDcEIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDdkMsQ0FBQztJQUNILENBQUM7SUFFTyxrQkFBa0IsQ0FBQyxLQUFpQztRQUMxRCxNQUFNLG1CQUFtQixHQUFHLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO1FBQ3ZELElBQUksQ0FBQyxtQkFBbUIsSUFBSSxDQUFDLEtBQUssSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNwRCxPQUFPLEVBQUUsQ0FBQztRQUNaLENBQUM7UUFDRCxNQUFNLFlBQVksR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUMsVUFBVSxDQUFDLENBQUM7UUFFN0QsWUFBWSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUMxQixNQUFNLFNBQVMsR0FBRyxJQUFJLEVBQUUsQ0FBQyxtQkFBbUIsQ0FBQyxhQUFhLENBQUMsQ0FBQztZQUM1RCxJQUFJLEVBQUUsQ0FBQyxtQkFBbUIsQ0FBQyxhQUFhLENBQUMsRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFNBQVMsRUFBRSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQztRQUMvRixDQUFDLENBQUMsQ0FBQztRQUVILE9BQU8sWUFBWSxDQUFDO0lBQ3RCLENBQUM7SUFFUyxhQUFhO1FBQ3JCLE1BQU0sSUFBSSxHQUFHLEVBQUUsTUFBTSxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUU3QyxJQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLFdBQVcsRUFBRSxFQUFFLENBQUM7WUFDckMsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDO1FBQ3JCLENBQUM7UUFDRCxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxFQUFFLElBQUksQ0FBQyxDQUFDO1FBRTNDLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQztJQUNyQixDQUFDO0lBRU8saUJBQWlCLENBQUMsS0FBaUMsRUFBRSxJQUF3QjtRQUNuRixNQUFNLG1CQUFtQixHQUFHLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO1FBRXZELElBQUksQ0FBQyxtQkFBbUIsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ25DLE9BQU87UUFDVCxDQUFDO1FBQ0QsS0FBSyxNQUFNLElBQUksSUFBSSxLQUFLLEVBQUUsQ0FBQztZQUN6QixJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsTUFBTSxFQUFFLENBQUM7Z0JBQ25CLFNBQVM7WUFDWCxDQUFDO1lBQ0QsTUFBTSxLQUFLLEdBQUcsSUFBSSxFQUFFLENBQUMsbUJBQW1CLENBQUMsYUFBYSxDQUErQyxDQUFDO1lBRXRHLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztnQkFDWCxTQUFTO1lBQ1gsQ0FBQztZQUNELElBQUksQ0FBQyxNQUFNLElBQUksQ0FBQyxLQUFLLEVBQUUsRUFBRSxFQUFFLE1BQU0sSUFBSSxDQUFDLENBQUMsQ0FBQztZQUN4QyxJQUFJLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBQyxLQUFLLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxtQkFBbUIsQ0FBQyxjQUFjLElBQUksbUJBQW1CLENBQUMsaUNBQWlDLENBQUMsRUFBRSxDQUFDO2dCQUM5SixJQUFJLENBQUMsTUFBTSxJQUFJLENBQUMsQ0FBQztZQUNuQixDQUFDO1lBRUQsSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxXQUFXLEVBQUUsRUFBRSxDQUFDO2dCQUNyQyxPQUFPO1lBQ1QsQ0FBQztZQUNELElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLEVBQUUsRUFBRSxJQUFJLENBQUMsQ0FBQztZQUN0QyxJQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLFdBQVcsRUFBRSxFQUFFLENBQUM7Z0JBQ3JDLE9BQU87WUFDVCxDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUM7SUFFa0IscUJBQXFCO1FBQ3RDLE1BQU0sbUJBQW1CLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUM7UUFFdkQsSUFBSSxDQUFDLG1CQUFtQixJQUFJLG1CQUFtQixFQUFFLGVBQWUsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsRUFBRSxNQUFNLEVBQUUsQ0FBQztZQUMxRixPQUFPLENBQUMsQ0FBQztRQUNYLENBQUM7UUFDRCxJQUFJLE1BQU0sR0FBRyxDQUFDLENBQUM7UUFDZixJQUFJLEtBQUssR0FBRyxDQUFDLENBQUM7UUFFZCxLQUFLLE1BQU0sSUFBSSxJQUFJLElBQUksQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDO1lBQ2hDLElBQUksTUFBTSxJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUUsRUFBRSxDQUFDO2dCQUNqQyxNQUFNO1lBQ1IsQ0FBQztZQUNELEtBQUssSUFBSSxDQUFDLENBQUM7WUFDWCxNQUFNLElBQUksQ0FBQyxDQUFDO1lBQ1osTUFBTSxLQUFLLEdBQUcsSUFBSSxFQUFFLENBQUMsbUJBQW1CLENBQUMsYUFBYSxDQUErQyxDQUFDO1lBQ3RHLE1BQU0sSUFBSSxHQUFHLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsTUFBTSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFFbEUsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEtBQUssRUFBRSxFQUFFLElBQUksQ0FBQyxDQUFDO1lBQ3RDLE1BQU0sSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDO1FBQ3hCLENBQUM7UUFDRCxNQUFNLGdCQUFnQixHQUFHLG1CQUFtQixDQUFDLGdCQUFnQixJQUFJLENBQUMsQ0FBQztRQUNuRSxNQUFNLE1BQU0sR0FBRyxLQUFLLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxnQkFBZ0IsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFFekYsT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQztJQUVrQixrQkFBa0IsQ0FBQyxJQUF5QjtRQUM3RCxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsbUJBQW1CLEVBQUUsRUFBRSxjQUFjLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBRXpFLElBQUksSUFBSSxFQUFFLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDbEIsSUFBSSxJQUFJLENBQUMsbUJBQW1CLEVBQUUsRUFBRSxhQUFhLEVBQUUsQ0FBQztnQkFDOUMsSUFBSSxFQUFFLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLG1CQUFtQixFQUFFLEVBQUUsYUFBYSxDQUFDLElBQUksRUFBRSxDQUFDLElBQUksR0FBRyxDQUFDLENBQUM7Z0JBRTVHLE9BQU8sV0FBVyxJQUFJLElBQUksRUFBRSxDQUFDLFVBQVUsQ0FBQztZQUMxQyxDQUFDO1lBQ0QsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsRUFBRTtnQkFDcEIsT0FBTyxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxLQUFLLElBQUksT0FBTyxDQUFDLElBQUksSUFBSSxHQUFHLENBQUMsQ0FBQztnQkFFekYsT0FBTyxPQUFPLENBQUM7WUFDakIsQ0FBQyxDQUFDLENBQUM7WUFFSCxPQUFPLElBQUksRUFBRSxDQUFDLFVBQVUsQ0FBQztRQUMzQixDQUFDO1FBQ0QsSUFBSSxJQUFJLENBQUMsbUJBQW1CLEVBQUUsRUFBRSxZQUFZLEVBQUUsQ0FBQztZQUM3QyxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxFQUFFO2dCQUNwQixPQUFPLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLG1CQUFtQixFQUFFLEVBQUUsWUFBWSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDO2dCQUU3RyxPQUFPLE9BQU8sQ0FBQztZQUNqQixDQUFDLENBQUMsQ0FBQztZQUVILE9BQU8sV0FBVyxJQUFJLElBQUksRUFBRSxDQUFDLFVBQVUsQ0FBQztRQUMxQyxDQUFDO1FBQ0QsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsRUFBRTtZQUNwQixPQUFPLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLEtBQUssSUFBSSxPQUFPLENBQUMsSUFBSSxJQUFJLEdBQUcsQ0FBQyxDQUFDO1lBRXpGLE9BQU8sT0FBTyxDQUFDO1FBQ2pCLENBQUMsQ0FBQyxDQUFDO1FBRUgsT0FBTyxXQUFXLElBQUksSUFBSSxFQUFFLENBQUMsVUFBVSxDQUFDO0lBQzFDLENBQUM7d0dBOTNCVSxrQ0FBa0M7NEZBQWxDLGtDQUFrQywwSEMxQy9DLG82ZEE4S0EsZ1NEaEpJLHFCQUFxQiwwQkFBRSxTQUFTLDZDQUFFLGVBQWUsNEZBQ2pELHNDQUFzQyxzakJBQ3RDLHVDQUF1QywwcEJBQ3ZDLG9DQUFvQywyaEJBQ3BDLGdDQUFnQyxpR0FDaEMsc0NBQXNDLHdTQUN0Qyw0QkFBNEIsZ0VBQzVCLHFDQUFxQyx5RUFDckMscURBQXFELDhGQUNyRCxzQ0FBc0M7OzRGQUc3QixrQ0FBa0M7a0JBcEI5QyxTQUFTOytCQUVFLHlDQUF5QyxjQUd2QyxJQUFJLG1CQUNDLHVCQUF1QixDQUFDLE1BQU0sV0FDdEM7d0JBQ1AscUJBQXFCLEVBQUUsU0FBUyxFQUFFLGVBQWU7d0JBQ2pELHNDQUFzQzt3QkFDdEMsdUNBQXVDO3dCQUN2QyxvQ0FBb0M7d0JBQ3BDLGdDQUFnQzt3QkFDaEMsc0NBQXNDO3dCQUN0Qyw0QkFBNEI7d0JBQzVCLHFDQUFxQzt3QkFDckMscURBQXFEO3dCQUNyRCxzQ0FBc0M7cUJBQ3ZDIiwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueSAqL1xuaW1wb3J0IHsgQXN5bmNQaXBlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIGlzU2lnbmFsLCBPbkluaXQsIHNpZ25hbCwgV3JpdGFibGVTaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFZpcnR1YWxTY3JvbGxlck1vZHVsZSB9IGZyb20gJ0BpaGFyYmVjay9uZ3gtdmlydHVhbC1zY3JvbGxlcic7XG5pbXBvcnQgeyBJQnV0dG9uLCBMaWJzVWlDb21wb25lbnRzQnV0dG9uc0J1dHRvbkNvbXBvbmVudCB9IGZyb20gJ0BsaWJzLXVpL2NvbXBvbmVudHMtYnV0dG9ucy1idXR0b24nO1xuaW1wb3J0IHsgTGlic1VpQ29tcG9uZW50c0NoZWNrYm94U2luZ2xlQ29tcG9uZW50IH0gZnJvbSAnQGxpYnMtdWkvY29tcG9uZW50cy1jaGVja2JveC1zaW5nbGUnO1xuaW1wb3J0IHsgTGlic1VpQ29tcG9uZW50c1JhZGlvU2luZ2xlQ29tcG9uZW50IH0gZnJvbSAnQGxpYnMtdWkvY29tcG9uZW50cy1yYWRpby1zaW5nbGUnO1xuaW1wb3J0IHsgTGlic1VpQ29tcG9uZW50c1Njcm9sbE92ZXJsYXlEaXJlY3RpdmUgfSBmcm9tICdAbGlicy11aS9jb21wb25lbnRzLXNjcm9sbC1vdmVybGF5JztcbmltcG9ydCB7IExpYnNVaUNvbXBvbmVudHNTcGlubmVyQ29tcG9uZW50IH0gZnJvbSAnQGxpYnMtdWkvY29tcG9uZW50cy1zcGlubmVyJztcbmltcG9ydCB7IExpYnNVaVBpcGVzQ2FsbEZ1bmN0aW9uSW5UZW1wbGF0ZVBpcGUgfSBmcm9tICdAbGlicy11aS9waXBlcy1jYWxsLWZ1bmN0aW9uLWluLXRlbXBsYXRlJztcbmltcG9ydCB7IGNsb25lRGVlcCwgZGVsZXRlVW5pY29kZSwgZXNjYXBlSHRtbCwgaXNFbXB0eSwgaXNOaWwsIHV1aWQgfSBmcm9tICdAbGlicy11aS91dGlscyc7XG5pbXBvcnQgeyBUcmFuc2xhdGVNb2R1bGUgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7IHJhbmdlIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBJTGlzdENvbmZpZ0l0ZW1Hcm91cCB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvY29uZmlnLWl0ZW0uaW50ZXJmYWNlJztcbmltcG9ydCB7IElMaXN0RGF0YUVtaXRLZXksIElMaXN0RGF0YUVtaXRNdWx0aUtleSB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvZGF0YS1lbWl0LmludGVyZmFjZSc7XG5pbXBvcnQgeyBMaWJzVWlDaGVja1NlbGVjdGVkQnlLZXlQaXBlIH0gZnJvbSAnLi4vLi4vcGlwZXMvY2hlY2stc2VsZWN0ZWQtYnkta2V5LnBpcGUnO1xuaW1wb3J0IHsgTGlic1VpQ29tcG9uZW50c0xpc3RUZW1wbGF0ZXNDb21wb25lbnRBYnN0cmFjdCB9IGZyb20gJy4uL3RlbXBsYXRlcy5jb21wb25lbnQuYWJzdHJhY3QnO1xuaW1wb3J0IHsgTGlic1VpQ29tcG9uZW50c0xpc3RHcm91cEl0ZW1Db21wb25lbnQgfSBmcm9tICcuL2l0ZW0vaXRlbS5jb21wb25lbnQnO1xuaW1wb3J0IHsgTGlic1VpQ29tcG9uZW50c0xpc3RHcm91cENhbGN1bGF0b3JNYXJnaW5MZWZ0SXRlbVBpcGUgfSBmcm9tICcuL3BpcGVzL2NhbGN1bGF0b3ItbWFyZ2luLWxlZnQtaXRlbS5waXBlJztcblxuXG5AQ29tcG9uZW50KHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBhbmd1bGFyLWVzbGludC9jb21wb25lbnQtc2VsZWN0b3JcbiAgc2VsZWN0b3I6ICdsaWJzX3VpLWNvbXBvbmVudHMtbGlzdC10ZW1wbGF0ZXNfZ3JvdXAnLFxuICB0ZW1wbGF0ZVVybDogJy4vZ3JvdXAuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9ncm91cC5jb21wb25lbnQuc2NzcyddLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgaW1wb3J0czogW1xuICAgIFZpcnR1YWxTY3JvbGxlck1vZHVsZSwgQXN5bmNQaXBlLCBUcmFuc2xhdGVNb2R1bGUsXG4gICAgTGlic1VpQ29tcG9uZW50c0J1dHRvbnNCdXR0b25Db21wb25lbnQsXG4gICAgTGlic1VpQ29tcG9uZW50c0NoZWNrYm94U2luZ2xlQ29tcG9uZW50LFxuICAgIExpYnNVaUNvbXBvbmVudHNSYWRpb1NpbmdsZUNvbXBvbmVudCxcbiAgICBMaWJzVWlDb21wb25lbnRzU3Bpbm5lckNvbXBvbmVudCxcbiAgICBMaWJzVWlDb21wb25lbnRzU2Nyb2xsT3ZlcmxheURpcmVjdGl2ZSxcbiAgICBMaWJzVWlDaGVja1NlbGVjdGVkQnlLZXlQaXBlLFxuICAgIExpYnNVaVBpcGVzQ2FsbEZ1bmN0aW9uSW5UZW1wbGF0ZVBpcGUsXG4gICAgTGlic1VpQ29tcG9uZW50c0xpc3RHcm91cENhbGN1bGF0b3JNYXJnaW5MZWZ0SXRlbVBpcGUsXG4gICAgTGlic1VpQ29tcG9uZW50c0xpc3RHcm91cEl0ZW1Db21wb25lbnRcbiAgXVxufSlcbmV4cG9ydCBjbGFzcyBMaWJzVWlDb21wb25lbnRzTGlzdEdyb3VwQ29tcG9uZW50IGV4dGVuZHMgTGlic1VpQ29tcG9uZW50c0xpc3RUZW1wbGF0ZXNDb21wb25lbnRBYnN0cmFjdCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIC8vICNyZWdpb24gUFJPUEVSVFlcbiAgcHJvdGVjdGVkIGNvbmZpZ1RlbXBsYXRlR3JvdXAgPSBzaWduYWw8SUxpc3RDb25maWdJdGVtR3JvdXAgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XG4gIHByb3RlY3RlZCBsZXZlbCA9IHNpZ25hbDxudW1iZXI+KDEpO1xuICBwcm90ZWN0ZWQga2V5c0NoZWNrZWQgPSBzaWduYWw8QXJyYXk8c3RyaW5nPj4oW10pO1xuICBwcm90ZWN0ZWQga2V5c1N0aWxsT3RoZXJPcHRpb25zID0gc2lnbmFsPEFycmF5PHN0cmluZz4+KFtdKTtcbiAgcHJvdGVjdGVkIHRvdGFsSXRlbSA9IHNpZ25hbDxudW1iZXI+KDApO1xuICBwcm90ZWN0ZWQgdG90YWxJdGVtQ2hlY2tlZCA9IHNpZ25hbDxudW1iZXI+KDApO1xuICBwcm90ZWN0ZWQgY2FsY3VsYXRvckhlaWdoSXRlbVN1Y2Nlc3MgPSBzaWduYWw8Ym9vbGVhbj4oZmFsc2UpO1xuICBwcm90ZWN0ZWQga2V5RmV0Y2ggPSBzaWduYWw8c3RyaW5nPignJyk7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBQQVRURVJOX0ZBS0VfSUQgPSAnZmFrZS1pZC0nO1xuICBwcml2YXRlIG1hcHBpbmdJdGVtc0NoZWNrZWQgPSBzaWduYWw8TWFwPHN0cmluZywgYW55Pj4obmV3IE1hcCgpKTtcbiAgcHJpdmF0ZSBzZWxlY3RGaXJzdEl0ZW0gPSBzaWduYWw8Ym9vbGVhbj4oZmFsc2UpO1xuICBwcml2YXRlIGZpcnN0SXRlbVNlbGVjdGVkID0gc2lnbmFsPGFueT4odW5kZWZpbmVkKTtcblxuICBvdmVycmlkZSBuZ09uSW5pdCgpIHtcbiAgICBpZiAoIXRoaXMuY29uZmlnKCk/LmNvbmZpZ1RlbXBsYXRlR3JvdXA/LigpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHN1cGVyLm5nT25Jbml0KCk7XG4gICAgdGhpcy5jb25maWdUZW1wbGF0ZUdyb3VwLnNldCh0aGlzLmNvbmZpZygpPy5jb25maWdUZW1wbGF0ZUdyb3VwPy4oKSk7XG4gICAgdGhpcy50aW1lSW50ZXJ2YWxJbnRlcnZhbFNldEhlaWdodFZpZXdQb3J0LnNldCh0aGlzLmNvbmZpZ1RlbXBsYXRlR3JvdXAoKT8udGltZUludGVydmFsQ2FsY3VsYXRvckhlaWdodCA/PyAwKTtcbiAgICB0aGlzLmZpZWxkS2V5LnNldCh0aGlzLmNvbmZpZ1RlbXBsYXRlR3JvdXAoKT8uZmllbGRLZXkgPz8gdGhpcy5maWVsZEtleURlZmF1bHQoKSk7XG4gICAgdGhpcy5zZWxlY3RGaXJzdEl0ZW0uc2V0KGZhbHNlKTtcbiAgICBpZiAodGhpcy5jb25maWdUZW1wbGF0ZUdyb3VwKCk/Lm9ubHlTZWxlY3RGaXJzdEl0ZW0gfHwgKCF0aGlzLm11bHRpS2V5U2VsZWN0ZWQoKT8ubGVuZ3RoICYmIHRoaXMuY29uZmlnKCk/LmF1dG9TZWxlY3RGaXJzdEl0ZW0pKSB7XG4gICAgICB0aGlzLnNlbGVjdEZpcnN0SXRlbS5zZXQodHJ1ZSk7XG4gICAgfVxuICAgIHRoaXMuY2FsbEFwaUJ5U2VydmljZSgpO1xuXG5cbiAgICB0aGlzLm9uVXBkYXRlTXVsdGlLZXlTZWxlY3RlZEdyb3VwKCk/LnBpcGUodGFrZVVudGlsKHRoaXMub25EZXN0cm95KSkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgIGlmICghdGhpcy5zdG9yZSgpIHx8ICF0aGlzLnN0b3JlKCkubGVuZ3RoKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHRoaXMua2V5c0NoZWNrZWQuc2V0KFtdKTtcblxuICAgICAgdGhpcy5tYXBwaW5nSXRlbXNDaGVja2VkKCkuY2xlYXIoKTtcbiAgICAgIGNvbnN0IGNvbmZpZ1RlbXBsYXRlR3JvdXAgPSB0aGlzLmNvbmZpZ1RlbXBsYXRlR3JvdXAoKTtcblxuICAgICAgaWYgKCFjb25maWdUZW1wbGF0ZUdyb3VwKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHRoaXMuc3RvcmUoKS5mb3JFYWNoKGl0ZW0gPT4ge1xuICAgICAgICBpZiAoaXNFbXB0eShpdGVtKClbdGhpcy5maWVsZEtleSgpXSkpIHtcbiAgICAgICAgICBpdGVtLnVwZGF0ZShjdXJyZW50ID0+IHtcbiAgICAgICAgICAgIGN1cnJlbnRbdGhpcy5maWVsZEtleSgpXSA9IGAke3RoaXMuUEFUVEVSTl9GQUtFX0lEfSR7dXVpZCgpfWA7XG5cbiAgICAgICAgICAgIHJldHVybiBjdXJyZW50O1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGl0ZW1Hcm91cCA9IGl0ZW0oKVtjb25maWdUZW1wbGF0ZUdyb3VwLmZpZWxkR2V0SXRlbXNdIGFzIFdyaXRhYmxlU2lnbmFsPEFycmF5PFdyaXRhYmxlU2lnbmFsPGFueT4+PjtcbiAgICAgICAgY29uc3QgaXRlbU1hcCA9IGNsb25lRGVlcChpdGVtKSBhcyBXcml0YWJsZVNpZ25hbDxhbnk+O1xuXG4gICAgICAgIGl0ZW1NYXAudXBkYXRlKGN1cnJlbnQgPT4ge1xuICAgICAgICAgIGN1cnJlbnQucmVmID0gaXRlbTtcblxuICAgICAgICAgIHJldHVybiBjdXJyZW50O1xuICAgICAgICB9KTtcbiAgICAgICAgaWYgKGl0ZW1Hcm91cCkge1xuICAgICAgICAgIHRoaXMuY2hlY2tlZEdyb3VwSXRlbXMoaXRlbUdyb3VwKCksIGl0ZW0pO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLm11bHRpS2V5U2VsZWN0ZWQoKSAmJiB0aGlzLm11bHRpS2V5U2VsZWN0ZWQoKT8ubGVuZ3RoICYmIHRoaXMubXVsdGlLZXlTZWxlY3RlZCgpPy5maW5kKGtleSA9PiBrZXkgPT09IGl0ZW0oKVt0aGlzLmZpZWxkS2V5KCldKSkge1xuICAgICAgICAgIHRoaXMuaGFuZGxlckNoYW5nZUNoZWNrZWQodHJ1ZSwgaXRlbU1hcCwgZmFsc2UsICFjb25maWdUZW1wbGF0ZUdyb3VwLnNpbmdsZVNlbGVjdEl0ZW0pO1xuXG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIHRoaXMubXVsdGlLZXlTZWxlY3RlZC5zZXQoW10pO1xuXG4gICAgICByZXR1cm47XG4gICAgfSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgaGFuZGxlckNoZWNrZWRPclVuQ2hlY2tlZEFsbChjaGVja2VkOiBib29sZWFuKSB7XG4gICAgY29uc3QgY29uZmlnVGVtcGxhdGVHcm91cCA9IHRoaXMuY29uZmlnVGVtcGxhdGVHcm91cCgpO1xuXG4gICAgaWYgKCFjb25maWdUZW1wbGF0ZUdyb3VwKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICghY2hlY2tlZCkge1xuICAgICAgdGhpcy5pdGVtcygpLmZvckVhY2goaXRlbSA9PiB7XG4gICAgICAgIHRoaXMubWFwcGluZ0l0ZW1zQ2hlY2tlZCgpLmRlbGV0ZShpdGVtKClbdGhpcy5maWVsZEtleSgpXSk7XG4gICAgICAgIGNvbnN0IGl0ZW1zT2ZHcm91cCA9IGl0ZW0oKVtjb25maWdUZW1wbGF0ZUdyb3VwLmZpZWxkR2V0SXRlbXNdIGFzIFdyaXRhYmxlU2lnbmFsPEFycmF5PFdyaXRhYmxlU2lnbmFsPGFueT4+PjtcblxuICAgICAgICBpZiAoaXRlbXNPZkdyb3VwICYmIGl0ZW1zT2ZHcm91cCgpICYmIGl0ZW1zT2ZHcm91cCgpLmxlbmd0aCkge1xuICAgICAgICAgIHRoaXMucmVtb3ZlQ2hlY2tlZEl0ZW1zQ2hpbGQoaXRlbXNPZkdyb3VwKCkpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIHRoaXMuc2V0S2V5c0NoZWNrZWRCeU1hcHBpbmdDaGVja2VkKGZhbHNlKTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuaXRlbXMoKS5mb3JFYWNoKGl0ZW0gPT4ge1xuICAgICAgdGhpcy5tYXBwaW5nSXRlbXNDaGVja2VkKCkuc2V0KGl0ZW0oKVt0aGlzLmZpZWxkS2V5KCldLCBpdGVtKCkpO1xuICAgICAgY29uc3QgaXRlbXNPZkdyb3VwID0gaXRlbSgpW2NvbmZpZ1RlbXBsYXRlR3JvdXAuZmllbGRHZXRJdGVtc10gYXMgV3JpdGFibGVTaWduYWw8QXJyYXk8V3JpdGFibGVTaWduYWw8YW55Pj4+O1xuXG4gICAgICBpZiAoaXRlbXNPZkdyb3VwICYmIGl0ZW1zT2ZHcm91cCgpICYmIGl0ZW1zT2ZHcm91cCgpLmxlbmd0aCkge1xuICAgICAgICB0aGlzLnNldENoZWNrQ2hlY2tlZEl0ZW1zQ2hpbGQoaXRlbXNPZkdyb3VwKCkpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHRoaXMuc2V0S2V5c0NoZWNrZWRCeU1hcHBpbmdDaGVja2VkKGZhbHNlKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBjaGVja2VkR3JvdXBJdGVtcyhpdGVtcz86IEFycmF5PFdyaXRhYmxlU2lnbmFsPGFueT4+LCBwYXJlbnQ/OiBXcml0YWJsZVNpZ25hbDxhbnk+KSB7XG4gICAgY29uc3QgY29uZmlnVGVtcGxhdGVHcm91cCA9IHRoaXMuY29uZmlnVGVtcGxhdGVHcm91cCgpO1xuXG4gICAgaWYgKCFjb25maWdUZW1wbGF0ZUdyb3VwIHx8ICFpdGVtcyB8fCAhaXRlbXMubGVuZ3RoKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGl0ZW1zLmZvckVhY2goaXRlbSA9PiB7XG4gICAgICBpZiAoaXNOaWwoaXRlbSgpW3RoaXMuZmllbGRLZXkoKV0pIHx8IGl0ZW0oKVt0aGlzLmZpZWxkS2V5KCldID09PSAnJykge1xuICAgICAgICBpdGVtLnVwZGF0ZShjdXJyZW50ID0+IHtcbiAgICAgICAgICBjdXJyZW50W3RoaXMuZmllbGRLZXkoKV0gPSBgJHt0aGlzLlBBVFRFUk5fRkFLRV9JRH0ke3V1aWQoKX1gO1xuXG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGl0ZW1Hcm91cCA9IGl0ZW0oKVtjb25maWdUZW1wbGF0ZUdyb3VwLmZpZWxkR2V0SXRlbXNdIGFzIFdyaXRhYmxlU2lnbmFsPEFycmF5PFdyaXRhYmxlU2lnbmFsPGFueT4+PjtcbiAgICAgIGNvbnN0IGl0ZW1NYXAgPSBjbG9uZURlZXAoaXRlbSkgYXMgV3JpdGFibGVTaWduYWw8YW55PjtcblxuICAgICAgaXRlbU1hcC51cGRhdGUoY3VycmVudCA9PiB7XG4gICAgICAgIGN1cnJlbnQucmVmID0gaXRlbTtcbiAgICAgICAgY3VycmVudC5wYXJlbnRJdGVtID0gcGFyZW50O1xuXG4gICAgICAgIHJldHVybiBjdXJyZW50O1xuICAgICAgfSk7XG4gICAgICBpZiAoaXRlbUdyb3VwKSB7XG4gICAgICAgIHRoaXMuY2hlY2tlZEdyb3VwSXRlbXMoaXRlbUdyb3VwKCksIGl0ZW0pO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMubXVsdGlLZXlTZWxlY3RlZCgpICYmIHRoaXMubXVsdGlLZXlTZWxlY3RlZCgpPy5sZW5ndGggJiYgdGhpcy5tdWx0aUtleVNlbGVjdGVkKCk/LmZpbmQoa2V5ID0+IGtleSA9PT0gaXRlbSgpW3RoaXMuZmllbGRLZXkoKV0pKSB7XG4gICAgICAgIHRoaXMuaGFuZGxlckNoYW5nZUNoZWNrZWQodHJ1ZSwgaXRlbU1hcCwgZmFsc2UsICFjb25maWdUZW1wbGF0ZUdyb3VwLnNpbmdsZVNlbGVjdEl0ZW0pO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmIChjb25maWdUZW1wbGF0ZUdyb3VwLnNpbmdsZVNlbGVjdEl0ZW0pIHtcbiAgICAgICAgdGhpcy5oYW5kbGVyQ2hhbmdlQ2hlY2tlZChmYWxzZSwgaXRlbU1hcCwgZmFsc2UsICFjb25maWdUZW1wbGF0ZUdyb3VwLnNpbmdsZVNlbGVjdEl0ZW0pO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcHJvdGVjdGVkIGhhbmRsZXJDbGlja0J1dHRvbkdyb3VwKGJ1dHRvbkluR3JvdXA6IElCdXR0b24sIGl0ZW06IGFueSkge1xuICAgIGJ1dHRvbkluR3JvdXAuYWN0aW9uPy4oaXRlbSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgaGFuZGxlclRvZ2dsZUV4cGFuZChlOiB1bmtub3duLCBpdGVtOiBXcml0YWJsZVNpZ25hbDxhbnk+LCBhY2NlcHRFdmVudCA9IHRydWUpIHtcbiAgICBpZiAoIWFjY2VwdEV2ZW50IHx8IHRoaXMuY29uZmlnVGVtcGxhdGVHcm91cCgpPy5pZ25vcmVDbGlja0xhYmVsR3JvdXApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKGUgaW5zdGFuY2VvZiBFdmVudCkge1xuICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICB9XG4gICAgaXRlbS51cGRhdGUoY3VycmVudCA9PiB7XG4gICAgICBjdXJyZW50LmV4cGFuZCA9ICFjdXJyZW50LmV4cGFuZDtcblxuICAgICAgcmV0dXJuIGN1cnJlbnQ7XG4gICAgfSk7XG4gICAgdGhpcy5yZWZyZXNoVmlldygpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGhhbmRsZXJDaGFuZ2VWaWV3KCkge1xuICAgIHRoaXMucmVmcmVzaFZpZXcoKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBoYW5kbGVyQ2hhbmdlSXRlbUNoZWNrZWQoaXRlbTogYW55KSB7XG4gICAgY29uc3QgY2hlY2tlZCA9ICF0aGlzLmtleXNDaGVja2VkKCkuc29tZShrZXkgPT4gaXRlbVt0aGlzLmZpZWxkS2V5KCldID09PSBrZXkpO1xuXG4gICAgaWYgKCFjaGVja2VkICYmIHRoaXMuY29uZmlnVGVtcGxhdGVHcm91cCgpPy5pc1ZpZXdSYWRpbykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLmhhbmRsZXJDaGFuZ2VDaGVja2VkKGNoZWNrZWQsIHNpZ25hbChpdGVtKSwgZmFsc2UpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGhhbmRsZXJDaGFuZ2VDaGVja2VkKGNoZWNrZWQ6IGJvb2xlYW4sIGl0ZW06IFdyaXRhYmxlU2lnbmFsPGFueT4sIGlzQ2xpY2tNYW51YWw6IGJvb2xlYW4sIGlzQ2hlY2tlZEJ5RGVmYXVsdEtleT86IGJvb2xlYW4pIHtcbiAgICBjb25zdCBjb25maWdUZW1wbGF0ZUdyb3VwID0gdGhpcy5jb25maWdUZW1wbGF0ZUdyb3VwKCk7XG5cbiAgICBpZiAoIWNvbmZpZ1RlbXBsYXRlR3JvdXApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKCFjb25maWdUZW1wbGF0ZUdyb3VwLmlzVmlld1RyZWVKc29uICYmIGl0ZW0oKS5sZXZlbCAhPT0gaXRlbSgpLm1heExldmVsR3JvdXAgJiYgKGNvbmZpZ1RlbXBsYXRlR3JvdXAuaWdub3JlQ2hlY2tib3hHcm91cCB8fCBjb25maWdUZW1wbGF0ZUdyb3VwLnNpbmdsZVNlbGVjdEl0ZW0pKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHJlZkl0ZW0gPSAoaXRlbSgpLnJlZiB8fCBpdGVtKSBhcyBXcml0YWJsZVNpZ25hbDxhbnk+O1xuXG4gICAgaWYgKGNvbmZpZ1RlbXBsYXRlR3JvdXAuc2luZ2xlU2VsZWN0SXRlbSkge1xuICAgICAgY2hlY2tlZCA9IHRydWU7XG4gICAgICBjb25zdCBtYXBwaW5nSXRlbXNDaGVja2VkVGVtcCA9IGNsb25lRGVlcCh0aGlzLm1hcHBpbmdJdGVtc0NoZWNrZWQpIGFzIFdyaXRhYmxlU2lnbmFsPE1hcDxzdHJpbmcsIGFueT4+O1xuXG4gICAgICBmb3IgKGNvbnN0IFtrZXksIGl0ZW1DaGVja10gb2YgbWFwcGluZ0l0ZW1zQ2hlY2tlZFRlbXAoKSkge1xuICAgICAgICBjb25zdCBpdGVtQnlLZXkgPSB0aGlzLm1hcHBpbmdJdGVtc0NoZWNrZWQoKS5nZXQoa2V5KTtcblxuICAgICAgICBpdGVtQnlLZXkuaXNDaGVja01hbnVhbCA9IGZhbHNlO1xuICAgICAgICBkZWxldGUgaXRlbUJ5S2V5LnJlZi5pc0NoZWNrTWFudWFsO1xuICAgICAgICBpZiAoIWl0ZW1DaGVjay5yZWYuaXNDaGVja2VkQnlEZWZhdWx0S2V5KSB7XG4gICAgICAgICAgdGhpcy5tYXBwaW5nSXRlbXNDaGVja2VkKCkuZGVsZXRlKGtleSk7XG4gICAgICAgICAgdGhpcy5vdXRVblNlbGVjdE11bHRpS2V5LmVtaXQoW2tleV0pO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoIWlzQ2hlY2tlZEJ5RGVmYXVsdEtleSkge1xuICAgICAgICBpdGVtLnVwZGF0ZShjdXJyZW50ID0+IHtcbiAgICAgICAgICBjdXJyZW50LmlzQ2hlY2tNYW51YWwgPSB0cnVlO1xuXG4gICAgICAgICAgcmV0dXJuIGN1cnJlbnQ7XG4gICAgICAgIH0pO1xuICAgICAgICByZWZJdGVtLnVwZGF0ZShjdXJyZW50ID0+IHtcbiAgICAgICAgICBjdXJyZW50LmlzQ2hlY2tNYW51YWwgPSB0cnVlO1xuXG4gICAgICAgICAgcmV0dXJuIGN1cnJlbnQ7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgICBjb25zdCBpdGVtc09mR3JvdXAgPSBpdGVtKClbY29uZmlnVGVtcGxhdGVHcm91cC5maWVsZEdldEl0ZW1zXSBhcyBXcml0YWJsZVNpZ25hbDxBcnJheTxXcml0YWJsZVNpZ25hbDxhbnk+Pj47XG4gICAgLy8gYuG7jyBjaOG7jW4gdOG6pXQgY+G6oyBjw6FjIGl0ZW0gxJHhu4MgdGjhu7FjIGhp4buHbiBjaGVjayBs4bqhaVxuICAgIGlmIChjb25maWdUZW1wbGF0ZUdyb3VwLmlzVmlld1RyZWVKc29uIHx8IChjb25maWdUZW1wbGF0ZUdyb3VwLnNpbmdsZVNlbGVjdEl0ZW1CeVRyZWUgJiYgIWlzQ2hlY2tlZEJ5RGVmYXVsdEtleSAmJiAhY29uZmlnVGVtcGxhdGVHcm91cC5ub3RDaGFuZ2VTdGF0ZUl0ZW1DaGVja090aGVyKSkge1xuICAgICAgQXJyYXkuZnJvbSh0aGlzLm1hcHBpbmdJdGVtc0NoZWNrZWQoKS52YWx1ZXMoKSkuZm9yRWFjaChpdGVtID0+IHtcbiAgICAgICAgZGVsZXRlIGl0ZW0uaXNDaGVja01hbnVhbDtcbiAgICAgICAgcmVmSXRlbS51cGRhdGUoY3VycmVudCA9PiB7XG4gICAgICAgICAgZGVsZXRlIGN1cnJlbnQuaXNDaGVja01hbnVhbDtcblxuICAgICAgICAgIHJldHVybiBjdXJyZW50O1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuXG4gICAgICB0aGlzLm91dFVuU2VsZWN0TXVsdGlLZXkuZW1pdCh0aGlzLmtleXNDaGVja2VkKCkpO1xuICAgICAgdGhpcy5tYXBwaW5nSXRlbXNDaGVja2VkKCkuY2xlYXIoKTtcbiAgICAgIHRoaXMuc2V0S2V5c0NoZWNrZWRCeU1hcHBpbmdDaGVja2VkKGlzQ2xpY2tNYW51YWwsIGl0ZW0pO1xuICAgIH1cblxuICAgIGlmIChjaGVja2VkKSB7XG4gICAgICB0aGlzLmV4cGFuZEFsbEl0ZW1zSW5Hcm91cChpdGVtKTtcbiAgICAgIHRoaXMubWFwcGluZ0l0ZW1zQ2hlY2tlZCgpLnNldChpdGVtKClbdGhpcy5maWVsZEtleSgpXSwgaXRlbSgpKTtcbiAgICAgIGlmIChpc0NoZWNrZWRCeURlZmF1bHRLZXkpIHtcbiAgICAgICAgcmVmSXRlbS51cGRhdGUoY3VycmVudCA9PiB7XG4gICAgICAgICAgY3VycmVudC5pc0NoZWNrZWRCeURlZmF1bHRLZXkgPSBpc0NoZWNrZWRCeURlZmF1bHRLZXk7XG5cbiAgICAgICAgICByZXR1cm4gY3VycmVudDtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBpdGVtLnVwZGF0ZShjdXJyZW50ID0+IHtcbiAgICAgICAgY3VycmVudC5pc0NoZWNrZWRCeURlZmF1bHRLZXkgPSByZWZJdGVtKCkuaXNDaGVja2VkQnlEZWZhdWx0S2V5O1xuXG4gICAgICAgIHJldHVybiBjdXJyZW50O1xuICAgICAgfSk7XG4gICAgICBpZiAoY29uZmlnVGVtcGxhdGVHcm91cC5jaG9vc2VDaGlsZFRoZW5BdXRvQ2hvb3NlUGFyZW50KSB7IC8vIGNo4buJIGNo4buNbiBjw6FjIGNoYSB0csOqbiBjw7luZyB0cmVlLCBrbyBxdWFuIHTDom0gbm9kZSBjaGEgY8OzIGPDoWMgY29uIMSRw6MgxJFjIHTDrWNoIGjhur90IGNoxrBhXG4gICAgICAgIGl0ZW0udXBkYXRlKGN1cnJlbnQgPT4ge1xuICAgICAgICAgIGN1cnJlbnQuaXNDaGVja01hbnVhbCA9IHRydWU7XG5cbiAgICAgICAgICByZXR1cm4gY3VycmVudDtcbiAgICAgICAgfSk7XG4gICAgICAgIHJlZkl0ZW0udXBkYXRlKGN1cnJlbnQgPT4ge1xuICAgICAgICAgIGN1cnJlbnQuaXNDaGVja01hbnVhbCA9IHRydWU7XG5cbiAgICAgICAgICByZXR1cm4gY3VycmVudDtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMucmVjdXJzaXZlbHlDaGVja2VkUGFyZW50QnlUcmVlKGl0ZW0oKS5wYXJlbnRJdGVtKTtcblxuICAgICAgICBpZiAoIWNvbmZpZ1RlbXBsYXRlR3JvdXAuaWdub3JlQ2hvb3NlUGFyZW50VGhlbkF1dG9DaG9vc2VDaGlsZHJlbiAmJiAhaXNDaGVja2VkQnlEZWZhdWx0S2V5KSB7XG4gICAgICAgICAgdGhpcy5zZXRDaGVja0NoZWNrZWRJdGVtc0NoaWxkKGl0ZW1zT2ZHcm91cD8uKCkgfHwgW10pO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuc2V0S2V5c0NoZWNrZWRCeU1hcHBpbmdDaGVja2VkKGlzQ2xpY2tNYW51YWwsIGl0ZW0pO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmIChjb25maWdUZW1wbGF0ZUdyb3VwLmlnbm9yZUNob29zZVBhcmVudFRoZW5BdXRvQ2hvb3NlQ2hpbGRyZW4pIHsgLy8gbOG7sWEgY2jhu41uIG5vZGUgY2hhIHPhur0gYuG7jyBxdWEgdmnhu4djIGNo4buNbiB04bqldCBj4bqjIG5vZGUgY29uXG4gICAgICAgIHRoaXMuc2V0S2V5c0NoZWNrZWRCeU1hcHBpbmdDaGVja2VkKGlzQ2xpY2tNYW51YWwsIGl0ZW0pO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmIChpdGVtc09mR3JvdXAgJiYgaXRlbXNPZkdyb3VwKCkgJiYgaXRlbXNPZkdyb3VwKCkubGVuZ3RoICYmICFpc0NoZWNrZWRCeURlZmF1bHRLZXkgJiYgIWNvbmZpZ1RlbXBsYXRlR3JvdXAuaXNWaWV3VHJlZUpzb24pIHtcbiAgICAgICAgY29uc3QgaXRlbXNDaGFuZ2UgPSBjb25maWdUZW1wbGF0ZUdyb3VwLmlnbm9yZUNoYW5nZUNoaWxkcmVuRGlzYWJsZVdoZW5DaGFuZ2VQYXJlbnQgP1xuICAgICAgICAgIGl0ZW1zT2ZHcm91cCgpLmZpbHRlcigoaXRlbTogYW55KSA9PiAhdGhpcy5rZXlzRGlzYWJsZUl0ZW0oKT8uZmluZChrZXkgPT4ga2V5ID09PSBpdGVtKClbdGhpcy5maWVsZEtleSgpXSkpIDogaXRlbXNPZkdyb3VwKCk7XG5cbiAgICAgICAgdGhpcy5zZXRDaGVja0NoZWNrZWRJdGVtc0NoaWxkKGl0ZW1zQ2hhbmdlKTtcbiAgICAgIH1cbiAgICAgIGlmICghY29uZmlnVGVtcGxhdGVHcm91cC5ub3RDaGFuZ2VTdGF0ZUl0ZW1DaGVja090aGVyICYmICFjb25maWdUZW1wbGF0ZUdyb3VwLmlzVmlld1RyZWVKc29uKSB7XG4gICAgICAgIHRoaXMuc2V0Q2hlY2tDaGVja2VkSXRlbXNQYXJlbnQoaXRlbSgpLnBhcmVudEl0ZW0pO1xuICAgICAgfVxuICAgICAgdGhpcy5zZXRLZXlzQ2hlY2tlZEJ5TWFwcGluZ0NoZWNrZWQoaXNDbGlja01hbnVhbCwgaXRlbSk7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaXRlbS51cGRhdGUoY3VycmVudCA9PiB7XG4gICAgICBjdXJyZW50LmlzQ2hlY2tNYW51YWwgPSBmYWxzZTtcblxuICAgICAgaWYgKGlzQ2hlY2tlZEJ5RGVmYXVsdEtleSkge1xuICAgICAgICBjdXJyZW50LmlzQ2hlY2tlZEJ5RGVmYXVsdEtleSA9IGZhbHNlO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gY3VycmVudDtcbiAgICB9KTtcbiAgICByZWZJdGVtLnVwZGF0ZShjdXJyZW50ID0+IHtcbiAgICAgIGN1cnJlbnQuaXNDaGVja01hbnVhbCA9IGZhbHNlO1xuXG4gICAgICBpZiAoaXNDaGVja2VkQnlEZWZhdWx0S2V5KSB7XG4gICAgICAgIGN1cnJlbnQuaXNDaGVja2VkQnlEZWZhdWx0S2V5ID0gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBjdXJyZW50O1xuICAgIH0pO1xuICAgIHRoaXMubWFwcGluZ0l0ZW1zQ2hlY2tlZCgpLmRlbGV0ZShpdGVtKClbdGhpcy5maWVsZEtleSgpXSk7XG4gICAgdGhpcy5rZXlzQ2hlY2tlZC5zZXQoQXJyYXkuZnJvbSh0aGlzLm1hcHBpbmdJdGVtc0NoZWNrZWQoKS5rZXlzKCkpKTtcblxuICAgIGlmIChjb25maWdUZW1wbGF0ZUdyb3VwLm5vdENoYW5nZVN0YXRlSXRlbUNoZWNrT3RoZXIpIHtcbiAgICAgIHRoaXMubWFwcGluZ0l0ZW1zQ2hlY2tlZCgpLmRlbGV0ZShpdGVtKClbdGhpcy5maWVsZEtleSgpXSk7XG4gICAgICB0aGlzLm91dFVuU2VsZWN0TXVsdGlLZXkuZW1pdCghaXNFbXB0eShpdGVtKClbdGhpcy5maWVsZEtleSgpXSkgPyBbaXRlbSgpW3RoaXMuZmllbGRLZXkoKV1dIDogW10pO1xuICAgICAgdGhpcy5zZXRLZXlzQ2hlY2tlZEJ5TWFwcGluZ0NoZWNrZWQoaXNDbGlja01hbnVhbCwgaXRlbSk7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKGNvbmZpZ1RlbXBsYXRlR3JvdXAuaWdub3JlVW5zZWxlY3RDaGlsZHJlblJlbW92ZVNlbGVjdFBhcmVudCkge1xuICAgICAgdGhpcy5yZWN1cnNpdmVseUNoZWNrZWRQYXJlbnRCeVRyZWUoaXRlbSgpLnBhcmVudEl0ZW0pO1xuICAgIH1cblxuICAgIC8vIG7hur91IGtvIHBo4bqjaSB0csaw4budbmcgaMahcCBj4bunYSBiYW5rIHbDoCBkYW5oIG3hu6VjIHPhuqNuIHBo4bqpbSB0aMOsIGLhu48gY2hhIHPhur0gYuG7jyBjb25cbiAgICBpZiAoaXRlbXNPZkdyb3VwICYmIGl0ZW1zT2ZHcm91cCgpICYmIGl0ZW1zT2ZHcm91cCgpLmxlbmd0aCkge1xuICAgICAgY29uc3QgaXRlbXNDaGFuZ2UgPSBjb25maWdUZW1wbGF0ZUdyb3VwLmlnbm9yZUNoYW5nZUNoaWxkcmVuRGlzYWJsZVdoZW5DaGFuZ2VQYXJlbnQgP1xuICAgICAgICBpdGVtc09mR3JvdXAoKS5maWx0ZXIoKGl0ZW0pID0+ICF0aGlzLmtleXNEaXNhYmxlSXRlbSgpPy5maW5kKGtleSA9PiBrZXkgPT09IGl0ZW0oKVt0aGlzLmZpZWxkS2V5KCldKSkgOiBpdGVtc09mR3JvdXAoKTtcblxuICAgICAgdGhpcy5yZW1vdmVDaGVja2VkSXRlbXNDaGlsZChpdGVtc0NoYW5nZSk7XG4gICAgfVxuICAgIGlmIChpdGVtKCkucGFyZW50SXRlbSAmJiAhY29uZmlnVGVtcGxhdGVHcm91cC5pZ25vcmVVbnNlbGVjdENoaWxkcmVuUmVtb3ZlU2VsZWN0UGFyZW50KSB7XG4gICAgICB0aGlzLm1hcHBpbmdJdGVtc0NoZWNrZWQoKS5kZWxldGUoaXRlbSgpLnBhcmVudEl0ZW1bdGhpcy5maWVsZEtleSgpXSk7XG4gICAgfVxuICAgIHRoaXMuc2V0S2V5c0NoZWNrZWRCeU1hcHBpbmdDaGVja2VkKGlzQ2xpY2tNYW51YWwsIGl0ZW0pO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRJdGVtc09mR3JvdXAoaXRlbTogV3JpdGFibGVTaWduYWw8YW55Piwgc3RvcmVzOiBXcml0YWJsZVNpZ25hbDxBcnJheTxXcml0YWJsZVNpZ25hbDxhbnk+Pj4pIHtcbiAgICBjb25zdCBjb25maWdUZW1wbGF0ZUdyb3VwID0gdGhpcy5jb25maWdUZW1wbGF0ZUdyb3VwKCk7XG5cbiAgICBpZiAoIWNvbmZpZ1RlbXBsYXRlR3JvdXAgfHwgIXN0b3JlcyB8fCAhc3RvcmVzLmxlbmd0aCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGZvciAoY29uc3QgZ3JvdXAgb2Ygc3RvcmVzKCkpIHtcbiAgICAgIGlmIChncm91cCgpW3RoaXMuZmllbGRLZXkoKV0gPT09IGl0ZW0oKVt0aGlzLmZpZWxkS2V5KCldKSB7XG4gICAgICAgIHJldHVybiBncm91cCgpW2NvbmZpZ1RlbXBsYXRlR3JvdXAuZmllbGRHZXRJdGVtc10gYXMgV3JpdGFibGVTaWduYWw8QXJyYXk8V3JpdGFibGVTaWduYWw8YW55Pj4+O1xuICAgICAgfVxuICAgICAgY29uc3QgcmVzdWx0ID0gdGhpcy5nZXRJdGVtc09mR3JvdXAoaXRlbSwgZ3JvdXAoKVtjb25maWdUZW1wbGF0ZUdyb3VwLmZpZWxkR2V0SXRlbXNdKSBhcyBXcml0YWJsZVNpZ25hbDxBcnJheTxXcml0YWJsZVNpZ25hbDxhbnk+Pj47XG5cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgcmV0dXJuO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRLZXlzU3RpbGxPdGhlck9wdGlvbnMoaXRlbT86IFdyaXRhYmxlU2lnbmFsPGFueT4pIHtcbiAgICBpZiAoIWl0ZW0/LigpKSB7XG4gICAgICB0aGlzLmtleXNTdGlsbE90aGVyT3B0aW9ucy5zZXQoW10pO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGtleXNDaGVja2VkID0gQXJyYXkuZnJvbSh0aGlzLm1hcHBpbmdJdGVtc0NoZWNrZWQoKS5rZXlzKCkpO1xuICAgIGNvbnN0IGl0ZW1QYXJlbnQgPSBpdGVtKCkucGFyZW50SXRlbSBhcyBXcml0YWJsZVNpZ25hbDxhbnk+O1xuICAgIGNvbnN0IGluZGV4SXRlbSA9IHRoaXMua2V5c1N0aWxsT3RoZXJPcHRpb25zKCkuZmluZEluZGV4KGtleSA9PiBrZXkgPT09IGl0ZW0oKVt0aGlzLmZpZWxkS2V5KCldKTtcblxuICAgIGlmIChpbmRleEl0ZW0gPj0gMCkge1xuICAgICAgdGhpcy5rZXlzU3RpbGxPdGhlck9wdGlvbnMudXBkYXRlKGN1cnJlbnQgPT4ge1xuICAgICAgICBjdXJyZW50LnNwbGljZShpbmRleEl0ZW0sIDEpO1xuXG4gICAgICAgIHJldHVybiBjdXJyZW50O1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgaWYgKCFpdGVtUGFyZW50IHx8ICFpdGVtUGFyZW50KCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgaXRlbXNPZkdyb3VwUGFyZW50ID0gdGhpcy5nZXRJdGVtc09mR3JvdXAoaXRlbVBhcmVudCwgdGhpcy5zdG9yZSk7XG5cbiAgICBpZiAoIWl0ZW1zT2ZHcm91cFBhcmVudCB8fCAhaXRlbXNPZkdyb3VwUGFyZW50KCkgfHwgIWl0ZW1zT2ZHcm91cFBhcmVudCgpLmxlbmd0aCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBpbmRleFBhcmVudCA9IHRoaXMua2V5c1N0aWxsT3RoZXJPcHRpb25zKCkuZmluZEluZGV4KGtleSA9PiBrZXkgPT09IGl0ZW1QYXJlbnQoKVt0aGlzLmZpZWxkS2V5KCldKTtcblxuICAgIGlmIChpdGVtc09mR3JvdXBQYXJlbnQoKS5ldmVyeSgoZWxlbWVudCkgPT4ga2V5c0NoZWNrZWQuaW5jbHVkZXMoZWxlbWVudCgpW3RoaXMuZmllbGRLZXkoKV0pKSAmJiBpbmRleFBhcmVudCA+PSAwKSB7XG4gICAgICB0aGlzLmtleXNTdGlsbE90aGVyT3B0aW9ucy51cGRhdGUoY3VycmVudCA9PiB7XG4gICAgICAgIGN1cnJlbnQuc3BsaWNlKGluZGV4SXRlbSwgMSk7XG5cbiAgICAgICAgcmV0dXJuIGN1cnJlbnQ7XG4gICAgICB9KTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoaXRlbXNPZkdyb3VwUGFyZW50KCkuc29tZShlbGVtZW50ID0+IGtleXNDaGVja2VkLmluY2x1ZGVzKGVsZW1lbnQoKVt0aGlzLmZpZWxkS2V5KCldKSkgJiYgaW5kZXhQYXJlbnQgPCAwKSB7XG4gICAgICB0aGlzLmtleXNTdGlsbE90aGVyT3B0aW9ucy51cGRhdGUoY3VycmVudCA9PiBbLi4uY3VycmVudCwgaXRlbVBhcmVudCgpW3RoaXMuZmllbGRLZXkoKV1dKTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoaW5kZXhQYXJlbnQgPj0gMCkge1xuICAgICAgdGhpcy5rZXlzU3RpbGxPdGhlck9wdGlvbnMudXBkYXRlKGN1cnJlbnQgPT4ge1xuICAgICAgICBjdXJyZW50LnNwbGljZShpbmRleEl0ZW0sIDEpO1xuXG4gICAgICAgIHJldHVybiBjdXJyZW50O1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBzZXRLZXlzQ2hlY2tlZEJ5TWFwcGluZ0NoZWNrZWQoaXNDbGlja01hbnVhbDogYm9vbGVhbiwgaXRlbT86IFdyaXRhYmxlU2lnbmFsPGFueT4pIHtcbiAgICB0aGlzLmtleXNDaGVja2VkLnNldChBcnJheS5mcm9tKHRoaXMubWFwcGluZ0l0ZW1zQ2hlY2tlZCgpLmtleXMoKSkpO1xuICAgIHRoaXMuZW1pdE11bHRpS2V5Q2hlY2tlZChpc0NsaWNrTWFudWFsKTtcbiAgICB0aGlzLnNldEtleXNTdGlsbE90aGVyT3B0aW9ucyhpdGVtKTtcbiAgfVxuXG4gIHByaXZhdGUgZW1pdE11bHRpS2V5Q2hlY2tlZChpc0NsaWNrTWFudWFsID0gdHJ1ZSkge1xuICAgIGNvbnN0IGNvbmZpZ1RlbXBsYXRlR3JvdXAgPSB0aGlzLmNvbmZpZ1RlbXBsYXRlR3JvdXAoKTtcblxuICAgIGlmICghY29uZmlnVGVtcGxhdGVHcm91cCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBkYXRhTXVsdGlLZXlDaGVja2VkOiBJTGlzdERhdGFFbWl0TXVsdGlLZXkgPSB7IGtleXM6IG5ldyBBcnJheTxhbnk+KCksIG1hcEtleXM6IG5ldyBBcnJheTxJTGlzdERhdGFFbWl0S2V5PigpLCBpc0NsaWNrTWFudWFsIH07XG5cbiAgICBpZiAoKGNvbmZpZ1RlbXBsYXRlR3JvdXAuZW1pdEFsbEl0ZW1DaGVja2VkIHx8IGNvbmZpZ1RlbXBsYXRlR3JvdXAuY2hvb3NlQ2hpbGRUaGVuQXV0b0Nob29zZVBhcmVudCkgJiYgIWNvbmZpZ1RlbXBsYXRlR3JvdXAuaWdub3JlRW1pdEFsbEl0ZW1DaGVja2VkV2hlbkNob29zZUNoaWxkVGhlbkF1dG9DaG9vc2VQYXJlbnQpIHtcbiAgICAgIGZvciAoY29uc3QgW2tleSwgaXRlbV0gb2YgdGhpcy5tYXBwaW5nSXRlbXNDaGVja2VkKCkpIHtcbiAgICAgICAgZGF0YU11bHRpS2V5Q2hlY2tlZC5rZXlzLnB1c2goa2V5KTtcbiAgICAgICAgZGF0YU11bHRpS2V5Q2hlY2tlZC5tYXBLZXlzLnB1c2goeyBrZXksIGl0ZW06IChpdGVtLnJlZj8uKCkgfHwgaXRlbSksIGlzQ2xpY2tNYW51YWwgfSk7XG4gICAgICB9XG4gICAgICB0aGlzLm91dFNlbGVjdE11bHRpS2V5LmVtaXQoZGF0YU11bHRpS2V5Q2hlY2tlZCk7XG4gICAgICB0aGlzLnRvdGFsSXRlbUNoZWNrZWQuc2V0KGRhdGFNdWx0aUtleUNoZWNrZWQua2V5cy5sZW5ndGgpO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBba2V5LCBpdGVtXSBvZiB0aGlzLm1hcHBpbmdJdGVtc0NoZWNrZWQoKSkge1xuICAgICAgaWYgKGl0ZW1bdGhpcy5maWVsZEtleSgpXSAmJiAhU3RyaW5nKGl0ZW1bdGhpcy5maWVsZEtleSgpXSkuaW5jbHVkZXModGhpcy5QQVRURVJOX0ZBS0VfSUQpICYmICghaXRlbVtjb25maWdUZW1wbGF0ZUdyb3VwLmZpZWxkR2V0SXRlbXNdPy5sZW5ndGggfHwgIWl0ZW1bY29uZmlnVGVtcGxhdGVHcm91cC5maWVsZEdldEl0ZW1zXSgpLnNvbWUoKGl0ZW1Hcm91cDogV3JpdGFibGVTaWduYWw8YW55PikgPT4gdGhpcy5tYXBwaW5nSXRlbXNDaGVja2VkKCkuZ2V0KGl0ZW1Hcm91cCgpW3RoaXMuZmllbGRLZXkoKV0pKSkpIHtcbiAgICAgICAgZGF0YU11bHRpS2V5Q2hlY2tlZC5rZXlzLnB1c2goa2V5KTtcbiAgICAgICAgZGF0YU11bHRpS2V5Q2hlY2tlZC5tYXBLZXlzLnB1c2goeyBrZXksIGl0ZW06IChpdGVtLnJlZj8uKCkgfHwgaXRlbSksIGlzQ2xpY2tNYW51YWwgfSk7XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMub3V0U2VsZWN0TXVsdGlLZXkuZW1pdChkYXRhTXVsdGlLZXlDaGVja2VkKTtcbiAgICB0aGlzLnRvdGFsSXRlbUNoZWNrZWQuc2V0KGRhdGFNdWx0aUtleUNoZWNrZWQua2V5cy5sZW5ndGgpO1xuICB9XG5cbiAgcHJpdmF0ZSByZWN1cnNpdmVseUNoZWNrZWRQYXJlbnRCeVRyZWUoaXRlbTogYW55KSB7XG4gICAgaWYgKCFpdGVtKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMubWFwcGluZ0l0ZW1zQ2hlY2tlZCgpLnNldChpdGVtW3RoaXMuZmllbGRLZXkoKV0sIGl0ZW0oKSk7XG4gICAgdGhpcy5yZWN1cnNpdmVseUNoZWNrZWRQYXJlbnRCeVRyZWUoaXRlbS5wYXJlbnRJdGVtKTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0Q2hlY2tDaGVja2VkSXRlbXNQYXJlbnQoaXRlbTogV3JpdGFibGVTaWduYWw8YW55Pikge1xuICAgIGNvbnN0IGNvbmZpZ1RlbXBsYXRlR3JvdXAgPSB0aGlzLmNvbmZpZ1RlbXBsYXRlR3JvdXAoKTtcblxuICAgIGlmICghY29uZmlnVGVtcGxhdGVHcm91cCB8fCAhaXRlbSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBpdGVtc09mR3JvdXAgPSBpdGVtKClbY29uZmlnVGVtcGxhdGVHcm91cC5maWVsZEdldEl0ZW1zXSBhcyBXcml0YWJsZVNpZ25hbDxBcnJheTxXcml0YWJsZVNpZ25hbDxhbnk+Pj47XG5cbiAgICBpZiAoIWl0ZW1zT2ZHcm91cCgpIHx8ICFpdGVtc09mR3JvdXAoKS5sZW5ndGgpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZm9yIChjb25zdCBpdGVtR3JvdXAgb2YgaXRlbXNPZkdyb3VwKCkpIHtcbiAgICAgIGlmICghdGhpcy5tYXBwaW5nSXRlbXNDaGVja2VkKCkuaGFzKGl0ZW1Hcm91cCgpW3RoaXMuZmllbGRLZXkoKV0pKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5tYXBwaW5nSXRlbXNDaGVja2VkKCkuc2V0KGl0ZW0oKVt0aGlzLmZpZWxkS2V5KCldLCBpdGVtKCkpO1xuICAgIGlmIChpdGVtKCkucGFyZW50SXRlbSkge1xuICAgICAgdGhpcy5zZXRDaGVja0NoZWNrZWRJdGVtc1BhcmVudChpdGVtKCkucGFyZW50SXRlbSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBzZXRDaGVja0NoZWNrZWRJdGVtc0NoaWxkKGl0ZW1zOiBBcnJheTxXcml0YWJsZVNpZ25hbDxhbnk+Pikge1xuICAgIGNvbnN0IGNvbmZpZ1RlbXBsYXRlR3JvdXAgPSB0aGlzLmNvbmZpZ1RlbXBsYXRlR3JvdXAoKTtcblxuICAgIGlmICghY29uZmlnVGVtcGxhdGVHcm91cCB8fCAhaXRlbXMgfHwgIWl0ZW1zLmxlbmd0aCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpdGVtcy5mb3JFYWNoKGl0ZW0gPT4ge1xuICAgICAgdGhpcy5tYXBwaW5nSXRlbXNDaGVja2VkKCkuc2V0KGl0ZW0oKVt0aGlzLmZpZWxkS2V5KCldLCBpdGVtKCkpO1xuICAgICAgY29uc3QgaXRlbXNPZkdyb3VwID0gaXRlbSgpW2NvbmZpZ1RlbXBsYXRlR3JvdXAuZmllbGRHZXRJdGVtc10gYXMgV3JpdGFibGVTaWduYWw8QXJyYXk8V3JpdGFibGVTaWduYWw8YW55Pj4+O1xuXG4gICAgICBpZiAoaXRlbXNPZkdyb3VwICYmIGl0ZW1zT2ZHcm91cCgpICYmIGl0ZW1zT2ZHcm91cCgpLmxlbmd0aCkge1xuICAgICAgICB0aGlzLnNldENoZWNrQ2hlY2tlZEl0ZW1zQ2hpbGQoaXRlbXNPZkdyb3VwKCkpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSByZW1vdmVDaGVja2VkSXRlbXNDaGlsZChpdGVtczogQXJyYXk8V3JpdGFibGVTaWduYWw8YW55Pj4pIHtcbiAgICBjb25zdCBjb25maWdUZW1wbGF0ZUdyb3VwID0gdGhpcy5jb25maWdUZW1wbGF0ZUdyb3VwKCk7XG5cbiAgICBpZiAoIWNvbmZpZ1RlbXBsYXRlR3JvdXAgfHwgIWl0ZW1zIHx8ICFpdGVtcy5sZW5ndGgpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaXRlbXMuZm9yRWFjaChpdGVtID0+IHtcbiAgICAgIGl0ZW0udXBkYXRlKGN1cnJlbnQgPT4ge1xuICAgICAgICBjdXJyZW50LmlzQ2hlY2tNYW51YWwgPSBmYWxzZTtcblxuICAgICAgICByZXR1cm4gY3VycmVudDtcbiAgICAgIH0pO1xuICAgICAgdGhpcy5tYXBwaW5nSXRlbXNDaGVja2VkKCkuZGVsZXRlKGl0ZW0oKVt0aGlzLmZpZWxkS2V5KCldKTtcbiAgICAgIHRoaXMub3V0VW5TZWxlY3RNdWx0aUtleS5lbWl0KFtpdGVtKClbdGhpcy5maWVsZEtleSgpXV0pO1xuXG4gICAgICBjb25zdCBpdGVtc09mR3JvdXAgPSBpdGVtKClbY29uZmlnVGVtcGxhdGVHcm91cC5maWVsZEdldEl0ZW1zXSBhcyBXcml0YWJsZVNpZ25hbDxBcnJheTxXcml0YWJsZVNpZ25hbDxhbnk+Pj47XG5cbiAgICAgIGlmIChpdGVtc09mR3JvdXAgJiYgaXRlbXNPZkdyb3VwKCkgJiYgaXRlbXNPZkdyb3VwKCkubGVuZ3RoKSB7XG4gICAgICAgIHRoaXMucmVtb3ZlQ2hlY2tlZEl0ZW1zQ2hpbGQoaXRlbXNPZkdyb3VwKCkpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcHJvdGVjdGVkIHByb2Nlc3NTZWFyY2goKSB7XG4gICAgdGhpcy5wcm9jZXNzRGF0YSgpO1xuICB9XG5cbiAgcHJvdGVjdGVkIHByb2Nlc3NEYXRhKCk6IHZvaWQge1xuICAgIHRoaXMudG90YWxJdGVtLnNldCgwKTtcblxuICAgIGNvbnN0IGNvbmZpZ1RlbXBsYXRlR3JvdXAgPSB0aGlzLmNvbmZpZ1RlbXBsYXRlR3JvdXAoKTtcblxuICAgIGlmICghY29uZmlnVGVtcGxhdGVHcm91cCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGxldCBpdGVtcyA9IHRoaXMuc3RvcmUoKS5tYXAoKGl0ZW0pID0+IHtcbiAgICAgIGlmIChpc05pbChpdGVtKClbdGhpcy5maWVsZEtleSgpXSkgfHwgaXRlbSgpW3RoaXMuZmllbGRLZXkoKV0gPT09ICcnKSB7XG4gICAgICAgIGl0ZW0udXBkYXRlKGN1cnJlbnQgPT4ge1xuICAgICAgICAgIGN1cnJlbnRbdGhpcy5maWVsZEtleSgpXSA9IGAke3RoaXMuUEFUVEVSTl9GQUtFX0lEfSR7dXVpZCgpfWA7XG5cbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgY29uc3QgaXRlbU1hcCA9IGNsb25lRGVlcChpdGVtKSBhcyBXcml0YWJsZVNpZ25hbDxhbnk+O1xuICAgICAgaXRlbU1hcC51cGRhdGUoY3VycmVudCA9PiB7XG4gICAgICAgIGN1cnJlbnQucmVmID0gaXRlbTtcbiAgICAgICAgY3VycmVudC5pc1Jvb3QgPSB0cnVlO1xuICAgICAgICBjdXJyZW50LmV4cGFuZCA9IHRoaXMua2V5U2VhcmNoKCkgPyB0cnVlIDogZmFsc2U7XG4gICAgICAgIGN1cnJlbnQubWF4TGV2ZWxHcm91cCA9IHRoaXMuY29uZmlnVGVtcGxhdGVHcm91cCgpPy5nZXRNYXhMZXZlbEdyb3VwKGl0ZW0oKSk7XG4gICAgICAgIGN1cnJlbnQubGV2ZWwgPSB0aGlzLmxldmVsKCk7XG4gICAgICAgIGN1cnJlbnQudGV4dERlc2NyaXB0aW9uR3JvdXBXaGVuTm9EYXRhID0gdGhpcy5jb25maWdUZW1wbGF0ZUdyb3VwKCk/LmdldERlc2NyaXB0aW9uR3JvdXBXaGVuTm9EYXRhPy4oaXRlbSgpKTtcbiAgICAgICAgY3VycmVudC5pY29uRW1wdHlEYXRhSW5Hcm91cCA9IHRoaXMuY29uZmlnVGVtcGxhdGVHcm91cCgpPy5nZXRJY29uRW1wdHlEYXRhSW5Hcm91cD8uKGl0ZW0oKSk7XG5cbiAgICAgICAgcmV0dXJuIGN1cnJlbnQ7XG4gICAgICB9KTtcbiAgICAgIGlmICgoaXRlbU1hcCgpLmxldmVsID09PSBpdGVtTWFwKCkubWF4TGV2ZWxHcm91cCB8fCAhdGhpcy5jb25maWdUZW1wbGF0ZUdyb3VwKCk/Lmlnbm9yZUNoZWNrYm94R3JvdXApICYmICFTdHJpbmcoaXRlbSgpW3RoaXMuZmllbGRLZXkoKV0pPy5pbmNsdWRlcyh0aGlzLlBBVFRFUk5fRkFLRV9JRCkpIHtcbiAgICAgICAgdGhpcy50b3RhbEl0ZW0udXBkYXRlKGN1cnJlbnQgPT4gY3VycmVudCsrKTtcbiAgICAgIH1cbiAgICAgIGlmICghdGhpcy5rZXlTZWFyY2goKSAmJiB0aGlzLmNvbmZpZ1RlbXBsYXRlR3JvdXAoKT8uZ2V0RXhwYW5kR3JvdXApIHtcbiAgICAgICAgaXRlbU1hcC51cGRhdGUoY3VycmVudCA9PiB7XG4gICAgICAgICAgY3VycmVudC5leHBhbmQgPSB0aGlzLmNvbmZpZ1RlbXBsYXRlR3JvdXAoKT8uZ2V0RXhwYW5kR3JvdXA/LihpdGVtKTtcblxuICAgICAgICAgIHJldHVybiBjdXJyZW50O1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLmNvbmZpZ1RlbXBsYXRlR3JvdXAoKT8uZ2V0UG9wb3Zlckdyb3VwKSB7XG4gICAgICAgIGl0ZW1NYXAudXBkYXRlKGN1cnJlbnQgPT4ge1xuICAgICAgICAgIGN1cnJlbnQuZGF0YVBvcG92ZXIgPSB0aGlzLmNvbmZpZ1RlbXBsYXRlR3JvdXAoKT8uZ2V0UG9wb3Zlckdyb3VwPy4oaXRlbSk7XG5cbiAgICAgICAgICByZXR1cm4gY3VycmVudDtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5jb25maWdUZW1wbGF0ZUdyb3VwKCk/LmdldEJ1dHRvbkdyb3VwKSB7XG4gICAgICAgIGl0ZW1NYXAudXBkYXRlKGN1cnJlbnQgPT4ge1xuICAgICAgICAgIGN1cnJlbnQuYnV0dG9uSW5Hcm91cCA9IHRoaXMuY29uZmlnVGVtcGxhdGVHcm91cCgpPy5nZXRCdXR0b25Hcm91cD8uKGl0ZW0pO1xuXG4gICAgICAgICAgcmV0dXJuIGN1cnJlbnQ7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgY29uc3QgdGV4dCA9IGRlbGV0ZVVuaWNvZGUodGhpcy5idWlsZFZhbHVlQnlDb25maWcoaXRlbU1hcCkpLnRvTG9jYWxlTG93ZXJDYXNlKCk7XG4gICAgICBjb25zdCB0ZXh0RXNjYXBlID0gZXNjYXBlSHRtbCh0ZXh0KTtcbiAgICAgIGNvbnN0IGtleVNlYXJjaCA9IGRlbGV0ZVVuaWNvZGUoZXNjYXBlSHRtbCgodGhpcy5rZXlTZWFyY2goKSB8fCAnJykudHJpbSgpLnRvTG9jYWxlTG93ZXJDYXNlKCkpKTtcblxuICAgICAgaXRlbU1hcC51cGRhdGUoY3VycmVudCA9PiB7XG4gICAgICAgIGN1cnJlbnQuZGlzcGxheUFsbENoaWxkID0gZmFsc2U7XG5cbiAgICAgICAgcmV0dXJuIGN1cnJlbnQ7XG4gICAgICB9KTtcbiAgICAgIGlmICgha2V5U2VhcmNoIHx8ICh0aGlzLmNvbmZpZ1RlbXBsYXRlR3JvdXAoKT8uc2VhcmNoQWxsTGV2ZWwgJiYgKHRleHQuaW5jbHVkZXMoa2V5U2VhcmNoKSB8fCB0ZXh0RXNjYXBlLmluY2x1ZGVzKGtleVNlYXJjaCkpKSkge1xuICAgICAgICBpdGVtTWFwLnVwZGF0ZShjdXJyZW50ID0+IHtcbiAgICAgICAgICBjdXJyZW50LmRpc3BsYXlBbGxDaGlsZCA9IHRydWU7XG4gICAgICAgICAgY3VycmVudC5oYXNEaXNwbGF5ID0gdHJ1ZTtcblxuICAgICAgICAgIHJldHVybiBjdXJyZW50O1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGl0ZW1Hcm91cCA9IGl0ZW0oKVtjb25maWdUZW1wbGF0ZUdyb3VwLmZpZWxkR2V0SXRlbXNdIGFzIFdyaXRhYmxlU2lnbmFsPEFycmF5PFdyaXRhYmxlU2lnbmFsPGFueT4+PjtcblxuICAgICAgaXRlbU1hcC51cGRhdGUoY3VycmVudCA9PiB7XG4gICAgICAgIGNvbnN0IGNoaWxkcmVuID0gY3VycmVudFtjb25maWdUZW1wbGF0ZUdyb3VwLmZpZWxkR2V0SXRlbXNdIGFzIFdyaXRhYmxlU2lnbmFsPEFycmF5PFdyaXRhYmxlU2lnbmFsPGFueT4+PjtcbiAgICAgICAgY29uc3QgZGF0YSA9IHRoaXMuZmlsdGVySXRlbXNEaXNwbGF5KHRoaXMuY29udmVydERhdGFCeUdyb3VwSW5JdGVtKGl0ZW1Hcm91cD8uKCkgfHwgW10sIGl0ZW1NYXApKTtcblxuICAgICAgICBjaGlsZHJlbj8uc2V0KGRhdGEpO1xuICAgICAgICBpZiAoY3VycmVudFtjb25maWdUZW1wbGF0ZUdyb3VwLmZpZWxkR2V0SXRlbXNdPy4oKSkge1xuICAgICAgICAgIGN1cnJlbnRbY29uZmlnVGVtcGxhdGVHcm91cC5maWVsZEdldEl0ZW1zXS51cGRhdGUoKGl0ZW1GaWVsZHM6IEFycmF5PGFueT4pID0+IHtcbiAgICAgICAgICAgIGlmICghaXRlbUZpZWxkcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGl0ZW1GaWVsZHM7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpdGVtRmllbGRzWzBdLmlzRmlyc3QgPSB0cnVlO1xuICAgICAgICAgICAgY29uc3QgbGFzdEluZGV4ID0gaXRlbUZpZWxkcz8ubGVuZ3RoIC0gMTtcblxuICAgICAgICAgICAgaWYgKGxhc3RJbmRleCA+PSAwKSB7XG4gICAgICAgICAgICAgIGl0ZW1GaWVsZHNbbGFzdEluZGV4XS5pc0xhc3QgPSB0cnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gaXRlbUZpZWxkcztcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBjdXJyZW50LmJvbnVzUGFkZGluZ0xlZnQgPSAwO1xuICAgICAgICBpZiAoY29uZmlnVGVtcGxhdGVHcm91cC5nZXRCb251c1BhZGRpbmdMZWZ0SXRlbSkge1xuICAgICAgICAgIGN1cnJlbnQuYm9udXNQYWRkaW5nTGVmdCA9IGNvbmZpZ1RlbXBsYXRlR3JvdXAuZ2V0Qm9udXNQYWRkaW5nTGVmdEl0ZW0oY3VycmVudCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNvbmZpZ1RlbXBsYXRlR3JvdXAuZ2V0Q2xhc3NJbmNsdWRlSXRlbU5vRGF0YSkge1xuICAgICAgICAgIGN1cnJlbnQuY2xhc3NJbmNsdWRlSXRlbU5vRGF0YSA9IGNvbmZpZ1RlbXBsYXRlR3JvdXAuZ2V0Q2xhc3NJbmNsdWRlSXRlbU5vRGF0YShjdXJyZW50KTtcbiAgICAgICAgfVxuICAgICAgICBjdXJyZW50LmF2YXRhckNvbmZpZyA9IGNvbmZpZ1RlbXBsYXRlR3JvdXAuZ2V0QXZhdGFyQ29uZmlnICYmIGNvbmZpZ1RlbXBsYXRlR3JvdXAuZ2V0QXZhdGFyQ29uZmlnKGN1cnJlbnQpO1xuXG4gICAgICAgIHJldHVybiBjdXJyZW50O1xuICAgICAgfSk7XG4gICAgICBpZiAodGhpcy5tdWx0aUtleVNlbGVjdGVkKCkgJiYgdGhpcy5tdWx0aUtleVNlbGVjdGVkKCk/Lmxlbmd0aCAmJiB0aGlzLm11bHRpS2V5U2VsZWN0ZWQoKT8uc29tZShrZXkgPT4ga2V5ID09PSBpdGVtTWFwKClbdGhpcy5maWVsZEtleSgpXSkpIHtcbiAgICAgICAgdGhpcy5oYW5kbGVyQ2hhbmdlQ2hlY2tlZCh0cnVlLCBpdGVtTWFwLCBmYWxzZSwgdHJ1ZSk7XG4gICAgICB9XG4gICAgICB0aGlzLmJ1aWxkVmFsdWVCeUNvbmZpZyhpdGVtTWFwKTtcblxuICAgICAgcmV0dXJuIGl0ZW1NYXA7XG4gICAgfSk7XG5cbiAgICBpZiAodGhpcy5jb25maWdUZW1wbGF0ZUdyb3VwKCk/LnNlYXJjaEFsbExldmVsICYmIHRoaXMua2V5U2VhcmNoKCkpIHtcbiAgICAgIGl0ZW1zID0gaXRlbXMuZmlsdGVyKGl0ZW0gPT4ge1xuICAgICAgICByZXR1cm4gaXRlbSgpLmhhc0Rpc3BsYXlcbiAgICAgIH0pO1xuICAgIH1cbiAgICB0aGlzLmNvbmZpZygpPy5zb3J0Py4oaXRlbXMpO1xuICAgIHRoaXMuaXRlbXMuc2V0KGl0ZW1zKTtcbiAgICB0aGlzLm11bHRpS2V5U2VsZWN0ZWQuc2V0KFtdKVxuICAgIGNvbnN0IGNhbGxCYWNrQ2FsY3VsYXRvckhlaWdodFN1Y2Nlc3MgPSAoKSA9PiB7XG4gICAgICB0aGlzLmNhbGN1bGF0b3JIZWlnaEl0ZW1TdWNjZXNzLnNldCh0cnVlKTtcblxuICAgICAgaWYgKGNvbmZpZ1RlbXBsYXRlR3JvdXAuZXhwYW5kRmlyc3RJdGVtICYmIHRoaXMuaXRlbXMoKVswXSkge1xuICAgICAgICB0aGlzLmV4cGFuZEFsbEl0ZW1zSW5Hcm91cCh0aGlzLml0ZW1zKClbMF0pO1xuICAgICAgfVxuXG4gICAgICB0aGlzLnNldEhlaWdodFZpZXdQb3J0KCk7XG4gICAgICBpZiAodGhpcy5maXJzdEl0ZW1TZWxlY3RlZCAmJiB0aGlzLmZpcnN0SXRlbVNlbGVjdGVkKCkpIHtcbiAgICAgICAgdGhpcy5oYW5kbGVyQ2hhbmdlQ2hlY2tlZCh0cnVlLCB0aGlzLmZpcnN0SXRlbVNlbGVjdGVkLCBmYWxzZSk7XG4gICAgICAgIHRoaXMuZmlyc3RJdGVtU2VsZWN0ZWQuc2V0KHVuZGVmaW5lZCk7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBjaGVja0xvYWRJdGVtID0gKHByZVN0YXRlSGFzU2Nyb2xsOiBib29sZWFuLCBjdXJyZW50SGFzU2Nyb2xsOiBib29sZWFuKSA9PiB7XG4gICAgICBpZiAodGhpcy5rZXlzSGlkZGVuSXRlbSgpPy5sZW5ndGggJiYgcHJlU3RhdGVIYXNTY3JvbGwgJiYgIWN1cnJlbnRIYXNTY3JvbGwgJiYgKHRoaXMuaXNTZWFyY2hPbmxpbmUoKSkpIHtcbiAgICAgICAgdGhpcy5jYWxsQXBpQnlTZXJ2aWNlKGZhbHNlKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLmxvYWRpbmcuc2V0KGZhbHNlKTtcbiAgICAgIHRoaXMub3V0TG9hZGluZy5lbWl0KHRoaXMubG9hZGluZygpKTtcbiAgICAgIHRoaXMucmVmcmVzaFZpZXcoY2FsbEJhY2tDYWxjdWxhdG9ySGVpZ2h0U3VjY2VzcywgY2hlY2tMb2FkSXRlbSk7XG4gICAgICB0aGlzLm91dExvYWRJdGVtc0NvbXBsZXRlLmVtaXQoeyBpdGVtczogdGhpcy5pdGVtcygpIH0pO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuO1xuICB9XG5cbiAgcHJpdmF0ZSByZWZyZXNoVmlldyhjYWxsQmFja0NhbGN1bGF0b3JIZWlnaHRTdWNjZXNzPzogKCkgPT4gdm9pZCwgY2hlY2tMb2FkSXRlbT86IChwcmVTdGF0ZUhhc1Njcm9sbDogYm9vbGVhbiwgY3VycmVudEhhc1Njcm9sbDogYm9vbGVhbikgPT4gdm9pZCkge1xuICAgIHRoaXMuc2V0SGVpZ2h0Vmlld1BvcnQoY2FsbEJhY2tDYWxjdWxhdG9ySGVpZ2h0U3VjY2Vzcyk7XG4gICAgdGhpcy5jaGVja1ZpZXdQb3J0U2Nyb2xsKGNoZWNrTG9hZEl0ZW0pO1xuICB9XG5cbiAgcHJpdmF0ZSBleHBhbmRBbGxJdGVtc0luR3JvdXAoaXRlbTogYW55KSB7XG4gICAgY29uc3QgY29uZmlnVGVtcGxhdGVHcm91cCA9IHRoaXMuY29uZmlnVGVtcGxhdGVHcm91cCgpO1xuICAgIGlmICghY29uZmlnVGVtcGxhdGVHcm91cCB8fCAhaXRlbSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpdGVtLmV4cGFuZCA9IHRydWU7XG4gICAgY29uc3QgaXRlbXM6IEFycmF5PGFueT4gPSBpdGVtW2NvbmZpZ1RlbXBsYXRlR3JvdXAuZmllbGRHZXRJdGVtc107XG5cbiAgICBpZiAoIWl0ZW1zIHx8ICFpdGVtcy5sZW5ndGgpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaXRlbXMuZm9yRWFjaChpdGVtR3JvdXAgPT4gdGhpcy5leHBhbmRBbGxJdGVtc0luR3JvdXAoaXRlbUdyb3VwKSk7XG4gIH1cblxuXG4gIHByaXZhdGUgY29udmVydERhdGFCeUdyb3VwSW5JdGVtKGl0ZW1zOiBBcnJheTxXcml0YWJsZVNpZ25hbDxhbnk+PiwgcGFyZW50SXRlbTogV3JpdGFibGVTaWduYWw8YW55Pikge1xuICAgIGNvbnN0IGNvbmZpZ1RlbXBsYXRlR3JvdXAgPSB0aGlzLmNvbmZpZ1RlbXBsYXRlR3JvdXAoKTtcbiAgICBpZiAoIWNvbmZpZ1RlbXBsYXRlR3JvdXAgfHwgIWl0ZW1zIHx8ICFpdGVtcy5sZW5ndGgpIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG4gICAgY29uc3QgaXRlbXNNYXAgPSBpdGVtcy5tYXAoaXRlbSA9PiB7XG4gICAgICBpZiAoaXNOaWwoaXRlbSgpW3RoaXMuZmllbGRLZXkoKV0pIHx8IGl0ZW0oKVt0aGlzLmZpZWxkS2V5KCldID09PSAnJykge1xuICAgICAgICBpdGVtKClbdGhpcy5maWVsZEtleSgpXSA9IGAke3RoaXMuUEFUVEVSTl9GQUtFX0lEfSR7dXVpZCgpfWA7XG4gICAgICB9XG4gICAgICBjb25zdCBpdGVtTWFwID0gY2xvbmVEZWVwKGl0ZW0pIGFzIFdyaXRhYmxlU2lnbmFsPGFueT47XG5cbiAgICAgIGl0ZW1NYXAudXBkYXRlKGN1cnJlbnQgPT4ge1xuICAgICAgICBjdXJyZW50LnJlZiA9IGl0ZW07XG4gICAgICAgIGN1cnJlbnQucGFyZW50SXRlbSA9IHBhcmVudEl0ZW07XG4gICAgICAgIGN1cnJlbnRbdGhpcy5maWVsZEtleSgpXSA9IGl0ZW0oKVt0aGlzLmZpZWxkS2V5KCldO1xuXG4gICAgICAgIGN1cnJlbnQubWF4TGV2ZWxHcm91cCA9IHBhcmVudEl0ZW0oKS5tYXhMZXZlbEdyb3VwO1xuICAgICAgICBjdXJyZW50LmxldmVsID0gcGFyZW50SXRlbSgpLmxldmVsICsgMTtcbiAgICAgICAgY3VycmVudC5hcnJheUxldmVsID0gcmFuZ2UoMiwgY3VycmVudC5sZXZlbCArIDEpO1xuICAgICAgICBpZiAoKGN1cnJlbnQubGV2ZWwgPT09IGN1cnJlbnQubWF4TGV2ZWxHcm91cCB8fCAhY29uZmlnVGVtcGxhdGVHcm91cC5pZ25vcmVDaGVja2JveEl0ZW0pICYmICFTdHJpbmcoaXRlbSgpW3RoaXMuZmllbGRLZXkoKV0pPy5pbmNsdWRlcyh0aGlzLlBBVFRFUk5fRkFLRV9JRCkpIHtcbiAgICAgICAgICB0aGlzLnRvdGFsSXRlbS51cGRhdGUoY3VycmVudCA9PiBjdXJyZW50KyspO1xuICAgICAgICB9XG5cbiAgICAgICAgY3VycmVudC5leHBhbmQgPSB0aGlzLmtleVNlYXJjaCgpID8gdHJ1ZSA6IGZhbHNlO1xuICAgICAgICBpZiAoIXRoaXMua2V5U2VhcmNoKCkgJiYgY29uZmlnVGVtcGxhdGVHcm91cC5nZXRFeHBhbmRJdGVtKSB7XG4gICAgICAgICAgY3VycmVudC5leHBhbmQgPSBjb25maWdUZW1wbGF0ZUdyb3VwLmdldEV4cGFuZEl0ZW0oY3VycmVudCk7XG4gICAgICAgIH1cbiAgICAgICAgY3VycmVudC5kaXNwbGF5QWxsQ2hpbGQgPSBwYXJlbnRJdGVtKCkuZGlzcGxheUFsbENoaWxkO1xuICAgICAgICBpZiAoY29uZmlnVGVtcGxhdGVHcm91cC5nZXRQb3BvdmVySXRlbSkge1xuICAgICAgICAgIGN1cnJlbnQuZGF0YVBvcG92ZXIgPSBjb25maWdUZW1wbGF0ZUdyb3VwLmdldFBvcG92ZXJJdGVtKGN1cnJlbnQpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjb25maWdUZW1wbGF0ZUdyb3VwLmdldEljb25JbWFnZUNsYXNzKSB7XG4gICAgICAgICAgY3VycmVudC5pY29uSW1hZ2VDbGFzcyA9IGNvbmZpZ1RlbXBsYXRlR3JvdXAuZ2V0SWNvbkltYWdlQ2xhc3MoY3VycmVudCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgdGV4dCA9IGRlbGV0ZVVuaWNvZGUodGhpcy5idWlsZFZhbHVlQnlDb25maWcoaXNTaWduYWwoY3VycmVudCkgPyBjdXJyZW50IGFzIFdyaXRhYmxlU2lnbmFsPGFueT4gOiBzaWduYWwoY3VycmVudCkpLnRvTG9jYWxlTG93ZXJDYXNlKCkpO1xuICAgICAgICBjb25zdCBrZXlTZWFyY2ggPSBkZWxldGVVbmljb2RlKGVzY2FwZUh0bWwoKHRoaXMua2V5U2VhcmNoKCkgfHwgJycpLnRyaW0oKS50b0xvY2FsZUxvd2VyQ2FzZSgpKSk7XG4gICAgICAgIGNvbnN0IHRleHRFc2NhcGUgPSBlc2NhcGVIdG1sKHRleHQpO1xuICAgICAgICBpZiAoKCF0aGlzLmtleXNIaWRkZW5JdGVtKCk/LnNvbWUoa2V5ID0+IGtleSA9PT0gY3VycmVudFt0aGlzLmZpZWxkS2V5KCldKSkgJiYgKChwYXJlbnRJdGVtKCkuZGlzcGxheUFsbENoaWxkIHx8ICFrZXlTZWFyY2gpIHx8ICgoY29uZmlnVGVtcGxhdGVHcm91cC5zZWFyY2hBbGxMZXZlbCB8fCAhY3VycmVudFt0aGlzLmZpZWxkS2V5KCldLmluY2x1ZGVzKHRoaXMuUEFUVEVSTl9GQUtFX0lEKSkgJiYgKHRleHQuaW5jbHVkZXMoa2V5U2VhcmNoKSB8fCB0ZXh0RXNjYXBlLmluY2x1ZGVzKGtleVNlYXJjaCkpKSkpIHtcbiAgICAgICAgICBjdXJyZW50LmRpc3BsYXlBbGxDaGlsZCA9IHRydWU7XG4gICAgICAgICAgdGhpcy5zZXREaXNwbGF5SXRlbShjdXJyZW50KTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBpdGVtR3JvdXAgPSBjdXJyZW50W2NvbmZpZ1RlbXBsYXRlR3JvdXAuZmllbGRHZXRJdGVtc10gYXMgV3JpdGFibGVTaWduYWw8QXJyYXk8V3JpdGFibGVTaWduYWw8YW55Pj4+O1xuICAgICAgICBpZiAoaXRlbUdyb3VwPy4oKSkge1xuICAgICAgICAgIGNvbnN0IGRhdGEgPSB0aGlzLmZpbHRlckl0ZW1zRGlzcGxheSh0aGlzLmNvbnZlcnREYXRhQnlHcm91cEluSXRlbShpdGVtR3JvdXA/LigpLCBzaWduYWwoY3VycmVudCkpKTtcbiAgICAgICAgICBpdGVtR3JvdXAuc2V0KGRhdGEpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGN1cnJlbnRbY29uZmlnVGVtcGxhdGVHcm91cC5maWVsZEdldEl0ZW1zXT8uKCkpIHtcbiAgICAgICAgICBjdXJyZW50W2NvbmZpZ1RlbXBsYXRlR3JvdXAuZmllbGRHZXRJdGVtc10udXBkYXRlKChpdGVtRmllbGRzOiBBcnJheTxhbnk+KSA9PiB7XG4gICAgICAgICAgICBpZiAoIWl0ZW1GaWVsZHMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgIHJldHVybiBpdGVtRmllbGRzO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaXRlbUZpZWxkc1swXS5pc0ZpcnN0ID0gdHJ1ZTtcbiAgICAgICAgICAgIGNvbnN0IGxhc3RJbmRleCA9IGl0ZW1GaWVsZHM/Lmxlbmd0aCAtIDE7XG5cbiAgICAgICAgICAgIGlmIChsYXN0SW5kZXggPj0gMCkge1xuICAgICAgICAgICAgICBpdGVtRmllbGRzW2xhc3RJbmRleF0uaXNMYXN0ID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIGl0ZW1GaWVsZHM7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgY3VycmVudC5ib251c1BhZGRpbmdMZWZ0ID0gMDtcbiAgICAgICAgaWYgKGNvbmZpZ1RlbXBsYXRlR3JvdXAuZ2V0Qm9udXNQYWRkaW5nTGVmdEl0ZW0pIHtcbiAgICAgICAgICBjdXJyZW50LmJvbnVzUGFkZGluZ0xlZnQgPSBjb25maWdUZW1wbGF0ZUdyb3VwLmdldEJvbnVzUGFkZGluZ0xlZnRJdGVtKGN1cnJlbnQsIHBhcmVudEl0ZW0pO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjb25maWdUZW1wbGF0ZUdyb3VwLmdldENsYXNzSW5jbHVkZUl0ZW1Ob0RhdGEpIHtcbiAgICAgICAgICBjdXJyZW50LmNsYXNzSW5jbHVkZUl0ZW1Ob0RhdGEgPSBjb25maWdUZW1wbGF0ZUdyb3VwLmdldENsYXNzSW5jbHVkZUl0ZW1Ob0RhdGEoY3VycmVudCwgcGFyZW50SXRlbSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNvbmZpZ1RlbXBsYXRlR3JvdXAuZ2V0TGlua0ltYWdlRXJyb3IpIHtcbiAgICAgICAgICBjdXJyZW50LmxpbmtJbWFnZUVycm9yID0gY29uZmlnVGVtcGxhdGVHcm91cC5nZXRMaW5rSW1hZ2VFcnJvcihjdXJyZW50KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY29uZmlnVGVtcGxhdGVHcm91cC5nZXRDbGFzc0luY2x1ZGVJdGVtQ29udGVudCkge1xuICAgICAgICAgIGN1cnJlbnQuY2xhc3NJbmNsdWRlID0gY29uZmlnVGVtcGxhdGVHcm91cC5nZXRDbGFzc0luY2x1ZGVJdGVtQ29udGVudChpdGVtKTtcbiAgICAgICAgfVxuICAgICAgICBjdXJyZW50LmF2YXRhckNvbmZpZyA9IGNvbmZpZ1RlbXBsYXRlR3JvdXAuZ2V0QXZhdGFyQ29uZmlnICYmIGNvbmZpZ1RlbXBsYXRlR3JvdXAuZ2V0QXZhdGFyQ29uZmlnKGN1cnJlbnQpO1xuICAgICAgICBpZiAodGhpcy5tdWx0aUtleVNlbGVjdGVkKCkgJiYgdGhpcy5tdWx0aUtleVNlbGVjdGVkKCk/Lmxlbmd0aCAmJiB0aGlzLm11bHRpS2V5U2VsZWN0ZWQoKT8uc29tZShrZXkgPT4ga2V5ID09PSBjdXJyZW50W3RoaXMuZmllbGRLZXkoKV0pKSB7XG4gICAgICAgICAgdGhpcy5oYW5kbGVyQ2hhbmdlQ2hlY2tlZCh0cnVlLCBzaWduYWwoY3VycmVudCksIGZhbHNlLCB0cnVlKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5zZWxlY3RGaXJzdEl0ZW0oKSAmJiBjdXJyZW50LmxldmVsID09PSBjdXJyZW50Lm1heExldmVsR3JvdXApIHtcbiAgICAgICAgICB0aGlzLmZpcnN0SXRlbVNlbGVjdGVkLnNldChjdXJyZW50KTtcbiAgICAgICAgICB0aGlzLnNlbGVjdEZpcnN0SXRlbS5zZXQoZmFsc2UpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGN1cnJlbnQ7XG4gICAgICB9KTtcblxuICAgICAgcmV0dXJuIGl0ZW1NYXA7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gaXRlbXNNYXA7XG4gIH1cblxuICBwcml2YXRlIHNldERpc3BsYXlJdGVtKGl0ZW06IGFueSkge1xuICAgIGlmICghaXRlbSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpdGVtLmhhc0Rpc3BsYXkgPSB0cnVlO1xuXG4gICAgaWYgKGl0ZW0ucGFyZW50SXRlbSkge1xuICAgICAgdGhpcy5zZXREaXNwbGF5SXRlbShpdGVtLnBhcmVudEl0ZW0pO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZmlsdGVySXRlbXNEaXNwbGF5KGl0ZW1zOiBBcnJheTxXcml0YWJsZVNpZ25hbDxhbnk+Pik6IEFycmF5PFdyaXRhYmxlU2lnbmFsPGFueT4+IHtcbiAgICBjb25zdCBjb25maWdUZW1wbGF0ZUdyb3VwID0gdGhpcy5jb25maWdUZW1wbGF0ZUdyb3VwKCk7XG4gICAgaWYgKCFjb25maWdUZW1wbGF0ZUdyb3VwIHx8ICFpdGVtcyB8fCAhaXRlbXMubGVuZ3RoKSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuICAgIGNvbnN0IGl0ZW1zRGlzcGxheSA9IGl0ZW1zLmZpbHRlcihpdGVtID0+IGl0ZW0oKS5oYXNEaXNwbGF5KTtcblxuICAgIGl0ZW1zRGlzcGxheS5mb3JFYWNoKGl0ZW0gPT4ge1xuICAgICAgY29uc3QgaXRlbUdyb3VwID0gaXRlbSgpW2NvbmZpZ1RlbXBsYXRlR3JvdXAuZmllbGRHZXRJdGVtc107XG4gICAgICBpdGVtKClbY29uZmlnVGVtcGxhdGVHcm91cC5maWVsZEdldEl0ZW1zXT8uc2V0KHRoaXMuZmlsdGVySXRlbXNEaXNwbGF5KGl0ZW1Hcm91cD8uKCkgfHwgW10pKTtcbiAgICB9KTtcblxuICAgIHJldHVybiBpdGVtc0Rpc3BsYXk7XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0TGVuZ3RoSXRlbSgpOiBudW1iZXIge1xuICAgIGNvbnN0IGRhdGEgPSB7IGxlbmd0aDogdGhpcy5pdGVtcygpLmxlbmd0aCB9O1xuXG4gICAgaWYgKGRhdGEubGVuZ3RoID4gdGhpcy5tYXhJdGVtU2hvdygpKSB7XG4gICAgICByZXR1cm4gZGF0YS5sZW5ndGg7XG4gICAgfVxuICAgIHRoaXMuZ2V0TGVuZ3RoQWxsR3JvdXAodGhpcy5pdGVtcygpLCBkYXRhKTtcblxuICAgIHJldHVybiBkYXRhLmxlbmd0aDtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0TGVuZ3RoQWxsR3JvdXAoaXRlbXM6IEFycmF5PFdyaXRhYmxlU2lnbmFsPGFueT4+LCBkYXRhOiB7IGxlbmd0aDogbnVtYmVyIH0pIHtcbiAgICBjb25zdCBjb25maWdUZW1wbGF0ZUdyb3VwID0gdGhpcy5jb25maWdUZW1wbGF0ZUdyb3VwKCk7XG5cbiAgICBpZiAoIWNvbmZpZ1RlbXBsYXRlR3JvdXAgfHwgIWl0ZW1zKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGZvciAoY29uc3QgaXRlbSBvZiBpdGVtcykge1xuICAgICAgaWYgKCFpdGVtKCkuZXhwYW5kKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgY29uc3QgZ3JvdXAgPSBpdGVtKClbY29uZmlnVGVtcGxhdGVHcm91cC5maWVsZEdldEl0ZW1zXSBhcyBXcml0YWJsZVNpZ25hbDxBcnJheTxXcml0YWJsZVNpZ25hbDxhbnk+Pj47XG5cbiAgICAgIGlmICghZ3JvdXApIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBkYXRhLmxlbmd0aCArPSAoZ3JvdXA/LigpPy5sZW5ndGggfHwgMCk7XG4gICAgICBpZiAoKCFncm91cD8uKCkgfHwgIWdyb3VwPy4oKS5sZW5ndGgpICYmIGl0ZW0oKS5sZXZlbCA9PT0gMSAmJiAoIWNvbmZpZ1RlbXBsYXRlR3JvdXAuc2VhcmNoQWxsTGV2ZWwgfHwgY29uZmlnVGVtcGxhdGVHcm91cC5hdXRvQ291bnRXaGVuR3JvdXBFbXB0eUl0ZW1MZXZlbDEpKSB7XG4gICAgICAgIGRhdGEubGVuZ3RoICs9IDE7XG4gICAgICB9XG5cbiAgICAgIGlmIChkYXRhLmxlbmd0aCA+IHRoaXMubWF4SXRlbVNob3coKSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICB0aGlzLmdldExlbmd0aEFsbEdyb3VwKGdyb3VwKCksIGRhdGEpO1xuICAgICAgaWYgKGRhdGEubGVuZ3RoID4gdGhpcy5tYXhJdGVtU2hvdygpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgb3ZlcnJpZGUgZ2V0SGVpZ2h0R3JvdXBIYXNMaW5lKCkge1xuICAgIGNvbnN0IGNvbmZpZ1RlbXBsYXRlR3JvdXAgPSB0aGlzLmNvbmZpZ1RlbXBsYXRlR3JvdXAoKTtcblxuICAgIGlmICghY29uZmlnVGVtcGxhdGVHcm91cCB8fCBjb25maWdUZW1wbGF0ZUdyb3VwPy5pZ25vcmVHcm91cExpbmUgfHwgIXRoaXMuaXRlbXMoKT8ubGVuZ3RoKSB7XG4gICAgICByZXR1cm4gMDtcbiAgICB9XG4gICAgbGV0IGxlbmd0aCA9IDA7XG4gICAgbGV0IGNvdW50ID0gMDtcblxuICAgIGZvciAoY29uc3QgaXRlbSBvZiB0aGlzLml0ZW1zKCkpIHtcbiAgICAgIGlmIChsZW5ndGggPj0gdGhpcy5tYXhJdGVtU2hvdygpKSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgY291bnQgKz0gMTtcbiAgICAgIGxlbmd0aCArPSAxO1xuICAgICAgY29uc3QgZ3JvdXAgPSBpdGVtKClbY29uZmlnVGVtcGxhdGVHcm91cC5maWVsZEdldEl0ZW1zXSBhcyBXcml0YWJsZVNpZ25hbDxBcnJheTxXcml0YWJsZVNpZ25hbDxhbnk+Pj47XG4gICAgICBjb25zdCBkYXRhID0geyBsZW5ndGg6IGl0ZW0oKS5leHBhbmQgPyBncm91cCgpPy5sZW5ndGggfHwgMCA6IDAgfTtcblxuICAgICAgdGhpcy5nZXRMZW5ndGhBbGxHcm91cChncm91cCgpLCBkYXRhKTtcbiAgICAgIGxlbmd0aCArPSBkYXRhLmxlbmd0aDtcbiAgICB9XG4gICAgY29uc3QgbWFyZ2luVG9wSGFzTGluZSA9IGNvbmZpZ1RlbXBsYXRlR3JvdXAubWFyZ2luVG9wSGFzTGluZSB8fCA0O1xuICAgIGNvbnN0IGhlaWdodCA9IGNvdW50ID09PSAxID8gbWFyZ2luVG9wSGFzTGluZSA6IChjb3VudCAtIDEpICogKG1hcmdpblRvcEhhc0xpbmUgKiAzICsgMSk7XG5cbiAgICByZXR1cm4gaGVpZ2h0O1xuICB9XG5cbiAgcHJvdGVjdGVkIG92ZXJyaWRlIGJ1aWxkVmFsdWVCeUNvbmZpZyhpdGVtOiBXcml0YWJsZVNpZ25hbDxhbnk+KTogc3RyaW5nIHtcbiAgICBjb25zdCBsYWJlbFNlYXJjaCA9IHRoaXMuY29uZmlnVGVtcGxhdGVHcm91cCgpPy5nZXRMYWJlbFNlYXJjaD8uKGl0ZW0oKSk7XG5cbiAgICBpZiAoaXRlbSgpLmlzUm9vdCkge1xuICAgICAgaWYgKHRoaXMuY29uZmlnVGVtcGxhdGVHcm91cCgpPy5nZXRMYWJlbEdyb3VwKSB7XG4gICAgICAgIGl0ZW0oKS5maWVsZExhYmVsID0gdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQodGhpcy5jb25maWdUZW1wbGF0ZUdyb3VwKCk/LmdldExhYmVsR3JvdXAoaXRlbSgpKSB8fCAnICcpO1xuXG4gICAgICAgIHJldHVybiBsYWJlbFNlYXJjaCA/PyBpdGVtKCkuZmllbGRMYWJlbDtcbiAgICAgIH1cbiAgICAgIGl0ZW0udXBkYXRlKGN1cnJlbnQgPT4ge1xuICAgICAgICBjdXJyZW50LmZpZWxkTGFiZWwgPSB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudChjdXJyZW50LmxhYmVsIHx8IGN1cnJlbnQubmFtZSB8fCAnICcpO1xuXG4gICAgICAgIHJldHVybiBjdXJyZW50O1xuICAgICAgfSk7XG5cbiAgICAgIHJldHVybiBpdGVtKCkuZmllbGRMYWJlbDtcbiAgICB9XG4gICAgaWYgKHRoaXMuY29uZmlnVGVtcGxhdGVHcm91cCgpPy5nZXRMYWJlbEl0ZW0pIHtcbiAgICAgIGl0ZW0udXBkYXRlKGN1cnJlbnQgPT4ge1xuICAgICAgICBjdXJyZW50LmZpZWxkTGFiZWwgPSB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudCh0aGlzLmNvbmZpZ1RlbXBsYXRlR3JvdXAoKT8uZ2V0TGFiZWxJdGVtKGN1cnJlbnQpIHx8ICcgJyk7XG5cbiAgICAgICAgcmV0dXJuIGN1cnJlbnQ7XG4gICAgICB9KTtcblxuICAgICAgcmV0dXJuIGxhYmVsU2VhcmNoID8/IGl0ZW0oKS5maWVsZExhYmVsO1xuICAgIH1cbiAgICBpdGVtLnVwZGF0ZShjdXJyZW50ID0+IHtcbiAgICAgIGN1cnJlbnQuZmllbGRMYWJlbCA9IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KGN1cnJlbnQubGFiZWwgfHwgY3VycmVudC5uYW1lIHx8ICcgJyk7XG5cbiAgICAgIHJldHVybiBjdXJyZW50O1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIGxhYmVsU2VhcmNoID8/IGl0ZW0oKS5maWVsZExhYmVsO1xuICB9XG59XG4iLCJAaWYgKGNvbmZpZ1RlbXBsYXRlR3JvdXAoKTsgYXMgY29uZmlnVGVtcGxhdGVHcm91cCkge1xuICBAbGV0IHZhckh0bWxIZWlnaHRWaWV3UG9ydCA9IGhlaWdodFZpZXdQb3J0KCkgPyBoZWlnaHRWaWV3UG9ydCgpKydweCc6JzEwMCUnO1xuICBAbGV0IHZhckh0bWxEaXNhYmxlID0gbG9hZGluZygpIHx8IGRpc2FibGUoKSB8fCBmYWxzZTtcbiAgPGRpdiBjbGFzcz1cImxpYnMtdWktbGlzdC1ncm91cCBvdmVyZmxvdy1baGlkZGVuXVwiXG4gICAgW3N0eWxlLmhlaWdodF09XCJ2YXJIdG1sSGVpZ2h0Vmlld1BvcnRcIj5cbiAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LWNvbCB3LWZ1bGwgaC1mdWxsIHJlbGF0aXZlIG1pbi1oLVsyOHB4XVwiPlxuICAgICAgQGlmIChpdGVtcygpLmxlbmd0aCAmJiBjb25maWdUZW1wbGF0ZUdyb3VwLmNvbmZpZ0J1dHRvblNlbGVjdEFuZFVuZFNlbGVjdEl0ZW0/LigpOyBhcyBjb25maWdCdXR0b25TZWxlY3RJdGVtKSB7XG4gICAgICAgIDxkaXZcbiAgICAgICAgICBbY2xhc3NdPVwiJ2ZsZXggaXRlbXMtY2VudGVyIGJnLVsjZmZmZmZmXSAnKyhjb25maWdCdXR0b25TZWxlY3RJdGVtLmNsYXNzSW5jbHVkZSA/PyAnbGlicy11aS1ib3JkZXItYm90dG9tLWdlbmVyYWwnKVwiPlxuICAgICAgICAgIDxsaWJzX3VpLWNvbXBvbmVudHMtYnV0dG9ucy1idXR0b25cbiAgICAgICAgICAgIFt0eXBlXT1cImNvbmZpZ0J1dHRvblNlbGVjdEl0ZW0uYnV0dG9uQ2hlY2tBbGw/LnR5cGUgPz8gJ2J1dHRvbi1saW5rLXByaW1hcnknXCJcbiAgICAgICAgICAgIFtsYWJlbF09XCJjb25maWdCdXR0b25TZWxlY3RJdGVtLmJ1dHRvbkNoZWNrQWxsPy5sYWJlbCA/PyAnaTE4bl9zZWxlY3RfYWxsX3NlYXJjaGVkX3Jlc3VsdHMnXCJcbiAgICAgICAgICAgIFtjbGFzc0luY2x1ZGVdPVwiY29uZmlnQnV0dG9uU2VsZWN0SXRlbS5idXR0b25DaGVja0FsbD8uY2xhc3NJbmNsdWRlIHx8ICdwci1bOHB4XSdcIlxuICAgICAgICAgICAgW2NsYXNzTGFiZWxdPVwiY29uZmlnQnV0dG9uU2VsZWN0SXRlbS5idXR0b25DaGVja0FsbD8uY2xhc3NMYWJlbCB8fCAnbGlicy11aS1mb250LWg2cidcIlxuICAgICAgICAgICAgW2Rpc2FibGVdPVwidmFySHRtbERpc2FibGVcIlxuICAgICAgICAgICAgKG91dENsaWNrKT1cImhhbmRsZXJDaGVja2VkT3JVbkNoZWNrZWRBbGwodHJ1ZSlcIiAvPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LVsjOTk5OTk5XVwiPnw8L2Rpdj5cbiAgICAgICAgICA8bGlic191aS1jb21wb25lbnRzLWJ1dHRvbnMtYnV0dG9uXG4gICAgICAgICAgICBbdHlwZV09XCJjb25maWdCdXR0b25TZWxlY3RJdGVtLmJ1dHRvblVuY2hlY2tBbGw/LnR5cGUgPz8gJ2J1dHRvbi1saW5rLXByaW1hcnknXCJcbiAgICAgICAgICAgIFtsYWJlbF09XCJjb25maWdCdXR0b25TZWxlY3RJdGVtLmJ1dHRvblVuY2hlY2tBbGw/LmxhYmVsID8/ICdpMThuX3Vuc2VsZWN0X2FsbF9zZWFyY2hlZF9yZXN1bHRzJ1wiXG4gICAgICAgICAgICBbY2xhc3NJbmNsdWRlXT1cImNvbmZpZ0J1dHRvblNlbGVjdEl0ZW0uYnV0dG9uVW5jaGVja0FsbD8uY2xhc3NJbmNsdWRlIHx8ICdwbC1bOHB4XSdcIlxuICAgICAgICAgICAgW2NsYXNzTGFiZWxdPVwiY29uZmlnQnV0dG9uU2VsZWN0SXRlbS5idXR0b25VbmNoZWNrQWxsPy5jbGFzc0xhYmVsIHx8ICdsaWJzLXVpLWZvbnQtaDZzJ1wiXG4gICAgICAgICAgICBbZGlzYWJsZV09XCJ2YXJIdG1sRGlzYWJsZVwiXG4gICAgICAgICAgICAob3V0Q2xpY2spPVwiaGFuZGxlckNoZWNrZWRPclVuQ2hlY2tlZEFsbChmYWxzZSlcIiAvPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIH1cbiAgICAgIEBpZiAoaXRlbXMoKS5sZW5ndGggJiYgY29uZmlnVGVtcGxhdGVHcm91cC5jb25maWdDaGVja2JveENoZWNrQWxsPy4oKTsgYXMgY29uZmlnQ2hlY2tCb3gpIHtcbiAgICAgICAgPGRpdlxuICAgICAgICAgIFtjbGFzc109XCInZmxleCBsaWJzLXVpLWJvcmRlci1ib3R0b20tZ2VuZXJhbCAnKyhjb25maWdUZW1wbGF0ZUdyb3VwLmNsYXNzSW5jbHVkZUhhc0NvbmZpZ0NoZWNrQm94QWxsID8/ICcgYmctWyNmZmZmZmZdJylcIj5cbiAgICAgICAgICA8bGlic191aS1jb21wb25lbnRzLWNoZWNrYm94LXNpbmdsZSBbbGFiZWxdPVwiY29uZmlnQ2hlY2tCb3gubGFiZWwgPz8gJ2kxOG5fYWxsJ1wiXG4gICAgICAgICAgICBbY2xhc3NMYWJlbEluY2x1ZGVdPVwiY29uZmlnQ2hlY2tCb3guY2xhc3NMYWJlbEluY2x1ZGUgfHwgJydcIlxuICAgICAgICAgICAgW2NoZWNrZWRdPVwidG90YWxJdGVtQ2hlY2tlZCgpID49IHRvdGFsSXRlbSgpICYmIHRvdGFsSXRlbSgpID4gMFwiXG4gICAgICAgICAgICBbZGlzYWJsZV09XCJ2YXJIdG1sRGlzYWJsZVwiXG4gICAgICAgICAgICAob3V0Q2hhbmdTdGFnZUZsYWdNb3VzZVBvcG92ZXIpPSdoYW5kbGVyQ2hhbmdTdGFnZUZsYWdNb3VzZSgkZXZlbnQpJ1xuICAgICAgICAgICAgKG91dENoYW5nZSk9XCJoYW5kbGVyQ2hlY2tlZE9yVW5DaGVja2VkQWxsKCRldmVudC5jaGVja2VkKVwiIC8+XG4gICAgICAgIDwvZGl2PlxuICAgICAgfVxuICAgICAgQGlmIChpdGVtcygpICYmIGl0ZW1zKCkubGVuZ3RoKSB7XG4gICAgICAgIDxkaXYgY2xhc3M9XCJ3LWZ1bGwgaC1mdWxsIHJlbGF0aXZlIGZsZXhcIj5cbiAgICAgICAgICA8ZGl2IExpYnNVaUNvbXBvbmVudHNTY3JvbGxPdmVybGF5RGlyZWN0aXZlXG4gICAgICAgICAgICBjbGFzcz1cInctZnVsbCBoLWZ1bGwgYWJzb2x1dGUgdG9wLTAgbGVmdC0wIHt7IGNvbmZpZ1RlbXBsYXRlR3JvdXAuY2xhc3NJbmNsdWRlR3JvdXAgPyBjb25maWdUZW1wbGF0ZUdyb3VwLmNsYXNzSW5jbHVkZUdyb3VwIDogJycgfX1cIj5cbiAgICAgICAgICAgIEBmb3IgKGl0ZW0gb2YgaXRlbXMoKTsgdHJhY2sgaXRlbSgpW2ZpZWxkS2V5KCldOyBsZXQgZmlyc3QgPSAkZmlyc3Q7IGxldCBsYXN0ID0gJGxhc3QpIHtcbiAgICAgICAgICAgICAgPGRpdiAjaXRlbVJlZlxuICAgICAgICAgICAgICAgIFtzdHlsZS5tYXJnaW5Ub3AucHhdPVwiIWNvbmZpZ1RlbXBsYXRlR3JvdXAuaWdub3JlR3JvdXBMaW5lID8gY29uZmlnVGVtcGxhdGVHcm91cC5tYXJnaW5Ub3BIYXNMaW5lIHx8IDQgOiAwXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImZsZXggZmxleC1jb2wgcmVsYXRpdmUgXCI+XG4gICAgICAgICAgICAgICAgQGxldCB2YXJIdG1sUGFkZGluZyA9IGxldmVsKCkqKGNvbmZpZ1RlbXBsYXRlR3JvdXAuaXNWaWV3VHJlZSA/IDggOiAxNik7XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyIHB5LVs2cHhdIFwiXG4gICAgICAgICAgICAgICAgICBbY2xhc3MubGlicy11aS1iZy1saXN0LWhvdmVyXT1cIiFjb25maWdUZW1wbGF0ZUdyb3VwLmlnbm9yZUNsaWNrTGFiZWxHcm91cFwiXG4gICAgICAgICAgICAgICAgICBbY2xhc3MubGlicy11aS1iZy1saXN0LWhvdmVyLWFjdGl2ZV09XCIhY29uZmlnVGVtcGxhdGVHcm91cC5pZ25vcmVDbGlja0xhYmVsR3JvdXBcIlxuICAgICAgICAgICAgICAgICAgW2NsYXNzLiFjdXJzb3ItcG9pbnRlcl09XCIhY29uZmlnVGVtcGxhdGVHcm91cC5pZ25vcmVDbGlja0xhYmVsR3JvdXAgICYmIChjb25maWdUZW1wbGF0ZUdyb3VwLmlnbm9yZUNoZWNrYm94R3JvdXAgfHwgY29uZmlnVGVtcGxhdGVHcm91cC5zaW5nbGVTZWxlY3RJdGVtKVwiXG4gICAgICAgICAgICAgICAgICBbc3R5bGUucGFkZGluZ0xlZnQucHhdPVwidmFySHRtbFBhZGRpbmdcIlxuICAgICAgICAgICAgICAgICAgW3N0eWxlLnBhZGRpbmdSaWdodC5weF09XCJ2YXJIdG1sUGFkZGluZ1wiXG4gICAgICAgICAgICAgICAgICAoY2xpY2spPVwiKGNvbmZpZ1RlbXBsYXRlR3JvdXAuaWdub3JlQ2hlY2tib3hHcm91cCB8fCBjb25maWdUZW1wbGF0ZUdyb3VwLnNpbmdsZVNlbGVjdEl0ZW0pID8gaGFuZGxlclRvZ2dsZUV4cGFuZCgkZXZlbnQsaXRlbSkgOiB1bmRlZmluZWRcIj5cbiAgICAgICAgICAgICAgICAgIEBpZiAoY29uZmlnVGVtcGxhdGVHcm91cC5pY29uRXhwYW5kID09PSAnbGVmdCcgfHwgY29uZmlnVGVtcGxhdGVHcm91cC5pc1ZpZXdUcmVlKSB7XG4gICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiY3Vyc29yLXBvaW50ZXIgbGlicy11aS1pY29uLWNoZXZyb24tcmlnaHQgYmVmb3JlOiF0ZXh0LVsxNnB4XVwiXG4gICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLnJvdGF0ZS05MF09XCJpdGVtKCkuZXhwYW5kXCJcbiAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiaGFuZGxlclRvZ2dsZUV4cGFuZCgkZXZlbnQsaXRlbSlcIj5cbiAgICAgICAgICAgICAgICAgICAgPC9pPlxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXhcIlxuICAgICAgICAgICAgICAgICAgICBbY2xhc3Mudy1mdWxsXT1cImNvbmZpZ1RlbXBsYXRlR3JvdXAuaWNvbkV4cGFuZCA9PT0gJ3JpZ2h0JyAmJiAhY29uZmlnVGVtcGxhdGVHcm91cC5pc1ZpZXdUcmVlICYmICghY29uZmlnVGVtcGxhdGVHcm91cC5zZWFyY2hBbGxMZXZlbCB8fCAhIWl0ZW0oKVtjb25maWdUZW1wbGF0ZUdyb3VwLmZpZWxkR2V0SXRlbXNdPy4oKT8ubGVuZ3RoKVwiXG4gICAgICAgICAgICAgICAgICAgIFtjbGFzcy53LVtjYWxjKDEwMCUtMTZweCldXT1cImNvbmZpZ1RlbXBsYXRlR3JvdXAuaWNvbkV4cGFuZCA9PT0gJ2xlZnQnIHx8IGNvbmZpZ1RlbXBsYXRlR3JvdXAuaXNWaWV3VHJlZVwiPlxuICAgICAgICAgICAgICAgICAgICBAaWYgKCFjb25maWdUZW1wbGF0ZUdyb3VwLmlzVmlld1JhZGlvKSB7XG4gICAgICAgICAgICAgICAgICAgICAgPGxpYnNfdWktY29tcG9uZW50cy1jaGVja2JveC1zaW5nbGUgW2F2YXRhckNvbmZpZ109XCJpdGVtKCkuYXZhdGFyQ29uZmlnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy5tbC1bOHB4XV09XCJjb25maWdUZW1wbGF0ZUdyb3VwLmljb25FeHBhbmQgPT09ICdsZWZ0JyB8fCBjb25maWdUZW1wbGF0ZUdyb3VwLmlzVmlld1RyZWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2lnbm9yZUNoZWNrYm94XT1cImNvbmZpZ1RlbXBsYXRlR3JvdXAuaWdub3JlQ2hlY2tib3hHcm91cCB8fCBjb25maWdUZW1wbGF0ZUdyb3VwLnNpbmdsZVNlbGVjdEl0ZW1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzXT1cImNvbmZpZ1RlbXBsYXRlR3JvdXAuY2xhc3NJbmNsdWRlSXRlbSB8fCAnJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3Mudy1hdXRvXT1cImNvbmZpZ1RlbXBsYXRlR3JvdXAuaXNWaWV3VHJlZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3Mudy1mdWxsXT1cIiFpdGVtKClbY29uZmlnVGVtcGxhdGVHcm91cC5maWVsZEdldEl0ZW1zXT8uKCk/Lmxlbmd0aCAmJiAhKChjb25maWdUZW1wbGF0ZUdyb3VwLmlzVmlld1RyZWUgfHwgY29uZmlnVGVtcGxhdGVHcm91cC53aWR0aExhYmVsU3ViMjRXaGVuTm90VHJlZVZpZXcpICYmIChjb25maWdUZW1wbGF0ZUdyb3VwLmljb25FeHBhbmQgPT09ICdsZWZ0JyB8fCBjb25maWdUZW1wbGF0ZUdyb3VwLmljb25FeHBhbmQgPT09ICdyaWdodCcgJiYgKCFjb25maWdUZW1wbGF0ZUdyb3VwLnNlYXJjaEFsbExldmVsIHx8ICEhaXRlbSgpW2NvbmZpZ1RlbXBsYXRlR3JvdXAuZmllbGRHZXRJdGVtc10/LigpPy5sZW5ndGgpKSlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLm1heC13LVtjYWxjKDEwMCUtMjRweCldXT1cIihjb25maWdUZW1wbGF0ZUdyb3VwLmlzVmlld1RyZWUgfHwgY29uZmlnVGVtcGxhdGVHcm91cC53aWR0aExhYmVsU3ViMjRXaGVuTm90VHJlZVZpZXcpICYmIChjb25maWdUZW1wbGF0ZUdyb3VwLmljb25FeHBhbmQgPT09ICdsZWZ0JyB8fCBjb25maWdUZW1wbGF0ZUdyb3VwLmljb25FeHBhbmQgPT09ICdyaWdodCcgJiYgKCFjb25maWdUZW1wbGF0ZUdyb3VwLnNlYXJjaEFsbExldmVsIHx8ICEhaXRlbSgpW2NvbmZpZ1RlbXBsYXRlR3JvdXAuZmllbGRHZXRJdGVtc10/LigpPy5sZW5ndGgpKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwiaXRlbSgpLmZpZWxkTGFiZWxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW3BvcG92ZXJdPVwiaXRlbSgpLmRhdGFQb3BvdmVyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFt6SW5kZXhMYWJlbF09XCJjb25maWdUZW1wbGF0ZUdyb3VwLnpJbmRleExhYmVsID8/IHpJbmRleCgpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtkYXRhQ29tcG9uZW50T3V0bGV0XT1cIih1bmRlZmluZWQgfCBMaWJzVWlQaXBlc0NhbGxGdW5jdGlvbkluVGVtcGxhdGVQaXBlOmNvbmZpZ1RlbXBsYXRlR3JvdXAuZ2V0RGF0YUNvbXBvbmVudE91dGxldEdyb3VwOml0ZW0oKTpmaWVsZEtleSgpOnt2YWx1ZUlzRW1wdHk6e2l0ZW06aXRlbSgpfX0pIHwgYXN5bmNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2NvbXBvbmVudE91dGxldF09XCIoMCB8IExpYnNVaVBpcGVzQ2FsbEZ1bmN0aW9uSW5UZW1wbGF0ZVBpcGU6Y29uZmlnVGVtcGxhdGVHcm91cC5nZXRDb21wb25lbnRPdXRsZXRHcm91cDppdGVtKCk6ZmllbGRLZXkoKTp7dmFsdWVJczA6MH0pIHwgYXN5bmNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2xpbmtJbWFnZV09XCJjb25maWdUZW1wbGF0ZUdyb3VwLmdldEltYWdlID8gKCgnYXZhdGFyJyB8IExpYnNVaVBpcGVzQ2FsbEZ1bmN0aW9uSW5UZW1wbGF0ZVBpcGU6KGl0ZW0oKS5zcGVjaWZpY19sb2FkSW1nRXJyb3IgJiYgY29uZmlnVGVtcGxhdGVHcm91cC5nZXRMaW5rSW1hZ2VFcnJvciA/IGNvbmZpZ1RlbXBsYXRlR3JvdXAuZ2V0TGlua0ltYWdlRXJyb3IgOiBjb25maWdUZW1wbGF0ZUdyb3VwLmdldEltYWdlKTppdGVtKCkpIHwgYXN5bmMpIDogaXRlbSgpW2NvbmZpZ1RlbXBsYXRlR3JvdXAuZmllbGRHZXRBdmF0YXJJdGVtIHx8ICcnXVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbaW1nVHlwZUljb25dPVwiY29uZmlnVGVtcGxhdGVHcm91cC5pbWdUeXBlSWNvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3NMYWJlbEluY2x1ZGVdPVwiKGNvbmZpZ1RlbXBsYXRlR3JvdXAuY2xhc3NMYWJlbEl0ZW0gPyBjb25maWdUZW1wbGF0ZUdyb3VwLmNsYXNzTGFiZWxJdGVtIDogKGNvbmZpZ1RlbXBsYXRlR3JvdXAuaXNWaWV3VHJlZSA/ICcgbGlicy11aS1mb250LWg2ciAnOicgbGlicy11aS1mb250LWg2cyAnKSkgKyAoKGNvbmZpZ1RlbXBsYXRlR3JvdXAuaWdub3JlVGV4dFVwcGVyY2FzZUxhYmVsR3JvdXAgfHwgY29uZmlnVGVtcGxhdGVHcm91cC5pc1ZpZXdUcmVlKSA/ICcnOicgdGV4dC11cHBlcmNhc2UgJylcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVdPVwiZGlzYWJsZSgpIHx8IChpdGVtKClbZmllbGRLZXkoKV0gfCBMaWJzVWlDaGVja1NlbGVjdGVkQnlLZXlQaXBlOmtleXNEaXNhYmxlSXRlbSgpOmtleXNEaXNhYmxlSXRlbSgpPy5sZW5ndGgpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtjaGVja2VkXT1cIml0ZW0oKVtmaWVsZEtleSgpXSB8IExpYnNVaUNoZWNrU2VsZWN0ZWRCeUtleVBpcGU6a2V5c0NoZWNrZWQoKTprZXlzQ2hlY2tlZCgpLmxlbmd0aFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbc3RpbGxPdGhlck9wdGlvbnNdPVwiaXRlbSgpW2ZpZWxkS2V5KCldIHwgTGlic1VpQ2hlY2tTZWxlY3RlZEJ5S2V5UGlwZTprZXlzU3RpbGxPdGhlck9wdGlvbnMoKTprZXlzU3RpbGxPdGhlck9wdGlvbnMoKS5sZW5ndGhcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKG91dENoYW5nZSk9XCJoYW5kbGVyQ2hhbmdlQ2hlY2tlZCgkZXZlbnQuY2hlY2tlZCxpdGVtLCB0cnVlKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAob3V0Q2hhbmdTdGFnZUZsYWdNb3VzZVBvcG92ZXIpPSdoYW5kbGVyQ2hhbmdTdGFnZUZsYWdNb3VzZSgkZXZlbnQpJ1xuICAgICAgICAgICAgICAgICAgICAgICAgKG91dENsaWNrTGFiZWwpPVwiaGFuZGxlclRvZ2dsZUV4cGFuZCgnY2xpY2tMYWJlbCcsaXRlbSxjb25maWdUZW1wbGF0ZUdyb3VwLmlnbm9yZUNoZWNrYm94R3JvdXAgfHwgY29uZmlnVGVtcGxhdGVHcm91cC5zaW5nbGVTZWxlY3RJdGVtKVwiIC8+XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBAaWYgKGNvbmZpZ1RlbXBsYXRlR3JvdXAuaXNWaWV3UmFkaW8pIHtcbiAgICAgICAgICAgICAgICAgICAgICA8bGlic191aS1jb21wb25lbnRzLXJhZGlvLXNpbmdsZVxuICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLm1sLVs4cHhdXT1cImNvbmZpZ1RlbXBsYXRlR3JvdXAuaWNvbkV4cGFuZCA9PT0gJ2xlZnQnIHx8IGNvbmZpZ1RlbXBsYXRlR3JvdXAuaXNWaWV3VHJlZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbYXZhdGFyQ29uZmlnXT1cIml0ZW0oKS5hdmF0YXJDb25maWdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2lnbm9yZVJhZGlvXT1cImNvbmZpZ1RlbXBsYXRlR3JvdXAuaWdub3JlUmFkaW9Hcm91cCB8fCBjb25maWdUZW1wbGF0ZUdyb3VwLnNpbmdsZVNlbGVjdEl0ZW1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzXT1cImNvbmZpZ1RlbXBsYXRlR3JvdXAuY2xhc3NJbmNsdWRlSXRlbSB8fCAnJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3Mudy1hdXRvXT1cImNvbmZpZ1RlbXBsYXRlR3JvdXAuaXNWaWV3VHJlZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3Mudy1mdWxsXT1cIiFpdGVtKClbY29uZmlnVGVtcGxhdGVHcm91cC5maWVsZEdldEl0ZW1zXT8uKCk/Lmxlbmd0aCAmJiAhKChjb25maWdUZW1wbGF0ZUdyb3VwLmlzVmlld1RyZWUgfHwgY29uZmlnVGVtcGxhdGVHcm91cC53aWR0aExhYmVsU3ViMjRXaGVuTm90VHJlZVZpZXcpICYmIChjb25maWdUZW1wbGF0ZUdyb3VwLmljb25FeHBhbmQgPT09ICdsZWZ0JyB8fCBjb25maWdUZW1wbGF0ZUdyb3VwLmljb25FeHBhbmQgPT09ICdyaWdodCcgJiYgKCFjb25maWdUZW1wbGF0ZUdyb3VwLnNlYXJjaEFsbExldmVsIHx8ICEhaXRlbSgpW2NvbmZpZ1RlbXBsYXRlR3JvdXAuZmllbGRHZXRJdGVtc10/LigpPy5sZW5ndGgpKSlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLm1heC13LVtjYWxjKDEwMCUtMjRweCldXT1cIihjb25maWdUZW1wbGF0ZUdyb3VwLmlzVmlld1RyZWUgfHwgY29uZmlnVGVtcGxhdGVHcm91cC53aWR0aExhYmVsU3ViMjRXaGVuTm90VHJlZVZpZXcpICYmIChjb25maWdUZW1wbGF0ZUdyb3VwLmljb25FeHBhbmQgPT09ICdsZWZ0JyB8fCBjb25maWdUZW1wbGF0ZUdyb3VwLmljb25FeHBhbmQgPT09ICdyaWdodCcgJiYgKCFjb25maWdUZW1wbGF0ZUdyb3VwLnNlYXJjaEFsbExldmVsIHx8ICEhaXRlbSgpW2NvbmZpZ1RlbXBsYXRlR3JvdXAuZmllbGRHZXRJdGVtc10/LigpPy5sZW5ndGgpKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwiaXRlbSgpLmZpZWxkTGFiZWxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW3BvcG92ZXJdPVwiaXRlbSgpLmRhdGFQb3BvdmVyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtkYXRhQ29tcG9uZW50T3V0bGV0XT1cIih1bmRlZmluZWQgfCBMaWJzVWlQaXBlc0NhbGxGdW5jdGlvbkluVGVtcGxhdGVQaXBlOmNvbmZpZ1RlbXBsYXRlR3JvdXAuZ2V0RGF0YUNvbXBvbmVudE91dGxldEdyb3VwOml0ZW0oKTpmaWVsZEtleSgpOnt2YWx1ZUlzRW1wdHk6e2l0ZW06aXRlbSgpfX0pIHwgYXN5bmNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2NvbXBvbmVudE91dGxldF09XCIoMCB8IExpYnNVaVBpcGVzQ2FsbEZ1bmN0aW9uSW5UZW1wbGF0ZVBpcGU6Y29uZmlnVGVtcGxhdGVHcm91cC5nZXRDb21wb25lbnRPdXRsZXRHcm91cDppdGVtKCk6ZmllbGRLZXkoKTp7dmFsdWVJczA6MH0pIHwgYXN5bmNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW3pJbmRleExhYmVsXT1cImNvbmZpZ1RlbXBsYXRlR3JvdXAuekluZGV4TGFiZWwgPz8gekluZGV4KClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2ltZ1R5cGVJY29uXT1cImNvbmZpZ1RlbXBsYXRlR3JvdXAuaW1nVHlwZUljb25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2xpbmtJbWFnZV09XCJjb25maWdUZW1wbGF0ZUdyb3VwLmdldEltYWdlID8gKCgnYXZhdGFyJyB8IExpYnNVaVBpcGVzQ2FsbEZ1bmN0aW9uSW5UZW1wbGF0ZVBpcGU6KGl0ZW0oKS5zcGVjaWZpY19sb2FkSW1nRXJyb3IgJiYgY29uZmlnVGVtcGxhdGVHcm91cC5nZXRMaW5rSW1hZ2VFcnJvciA/IGNvbmZpZ1RlbXBsYXRlR3JvdXAuZ2V0TGlua0ltYWdlRXJyb3IgOiBjb25maWdUZW1wbGF0ZUdyb3VwLmdldEltYWdlKTppdGVtKCkpIHwgYXN5bmMpIDogaXRlbSgpW2NvbmZpZ1RlbXBsYXRlR3JvdXAuZmllbGRHZXRBdmF0YXJJdGVtIHx8ICcnXVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3NMYWJlbEluY2x1ZGVdPVwiKGNvbmZpZ1RlbXBsYXRlR3JvdXAuY2xhc3NMYWJlbEl0ZW0gPyBjb25maWdUZW1wbGF0ZUdyb3VwLmNsYXNzTGFiZWxJdGVtIDogJ2xpYnMtdWktZm9udC1oNnMgJykgKyAoY29uZmlnVGVtcGxhdGVHcm91cC5pZ25vcmVUZXh0VXBwZXJjYXNlTGFiZWxHcm91cCA/ICcnOicgdXBwZXJjYXNlJylcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVdPVwiZGlzYWJsZSgpIHx8IChjb25maWdUZW1wbGF0ZUdyb3VwLmRpc2FibGVJdGVtTm90TGFzdExldmVsICYmICEhaXRlbSgpW2NvbmZpZ1RlbXBsYXRlR3JvdXAuZmllbGRHZXRJdGVtc10/LigpPy5sZW5ndGgpIHx8IGNvbmZpZ1RlbXBsYXRlR3JvdXAuaWdub3JlQ2hlY2tib3hHcm91cCB8fCBjb25maWdUZW1wbGF0ZUdyb3VwLnNpbmdsZVNlbGVjdEl0ZW0gfHwgKGl0ZW0oKVtmaWVsZEtleSgpXSB8IExpYnNVaUNoZWNrU2VsZWN0ZWRCeUtleVBpcGU6a2V5c0Rpc2FibGVJdGVtKCk6a2V5c0Rpc2FibGVJdGVtKCk/Lmxlbmd0aClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2FjdGl2ZV09XCJpdGVtKClbZmllbGRLZXkoKV0gfCBMaWJzVWlDaGVja1NlbGVjdGVkQnlLZXlQaXBlOmtleXNDaGVja2VkKCk6a2V5c0NoZWNrZWQoKS5sZW5ndGhcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKG91dENoYW5nZSk9XCJoYW5kbGVyQ2hhbmdlQ2hlY2tlZCgkZXZlbnQuYWN0aXZlLGl0ZW0sIHRydWUpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChvdXRDaGFuZ1N0YWdlRmxhZ01vdXNlUG9wb3Zlcik9J2hhbmRsZXJDaGFuZ1N0YWdlRmxhZ01vdXNlKCRldmVudCknXG4gICAgICAgICAgICAgICAgICAgICAgICAob3V0Q2xpY2tMYWJlbCk9XCJoYW5kbGVyVG9nZ2xlRXhwYW5kKCdjbGlja0xhYmVsJyxpdGVtLGNvbmZpZ1RlbXBsYXRlR3JvdXAuaWdub3JlUmFkaW9Hcm91cCB8fCBjb25maWdUZW1wbGF0ZUdyb3VwLnNpbmdsZVNlbGVjdEl0ZW0pXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIEBpZiAoaXRlbSgpLmJ1dHRvbkluR3JvdXA7IGFzIGJ1dHRvbkluR3JvdXApIHtcbiAgICAgICAgICAgICAgICAgICAgICA8bGlic191aS1jb21wb25lbnRzLWJ1dHRvbnMtYnV0dG9uIFt0eXBlXT1cImJ1dHRvbkluR3JvdXAudHlwZSB8fCAnYnV0dG9uLWxpbmstcHJpbWFyeSdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cImJ1dHRvbkluR3JvdXAubGFiZWwgfHwgJyAnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzc0ljb25MZWZ0XT1cIihidXR0b25Jbkdyb3VwLmNsYXNzSWNvbkxlZnQgfHwgJycpKycgZmxleCBtci1bOHB4XSAhdGV4dC1bOHB4XSdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzSW5jbHVkZV09XCJidXR0b25Jbkdyb3VwLmNsYXNzSW5jbHVkZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3NMYWJlbF09XCJidXR0b25Jbkdyb3VwLmNsYXNzTGFiZWwgfHwgJ2xpYnMtdWktZm9udC1oNXInXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlXT1cImJ1dHRvbkluR3JvdXAuZGlzYWJsZSB8fCBkaXNhYmxlKCkgfHwgZmFsc2VcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKG91dENsaWNrKT1cImhhbmRsZXJDbGlja0J1dHRvbkdyb3VwKGJ1dHRvbkluR3JvdXAsaXRlbSgpKVwiIC8+XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICBAaWYgKGNvbmZpZ1RlbXBsYXRlR3JvdXAuaWNvbkV4cGFuZCA9PT0gJ3JpZ2h0JyAmJiAhY29uZmlnVGVtcGxhdGVHcm91cC5pc1ZpZXdUcmVlICYmICghY29uZmlnVGVtcGxhdGVHcm91cC5zZWFyY2hBbGxMZXZlbCB8fCAhIWl0ZW0oKVtjb25maWdUZW1wbGF0ZUdyb3VwLmZpZWxkR2V0SXRlbXNdPy4oKT8ubGVuZ3RoKSkge1xuICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyIGN1cnNvci1wb2ludGVyIGxpYnMtdWktaWNvbi1jaGV2cm9uLXJpZ2h0IGJlZm9yZTohdGV4dC1bMTZweF1cIlxuICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy4hbWwtWzhweF1dPVwiaXRlbSgpLmRhdGFQb3BvdmVyXCJcbiAgICAgICAgICAgICAgICAgICAgICBbY2xhc3Mucm90YXRlLTkwXT1cIml0ZW0oKS5leHBhbmRcIlxuICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJoYW5kbGVyVG9nZ2xlRXhwYW5kKCRldmVudCxpdGVtKVwiPlxuICAgICAgICAgICAgICAgICAgICA8L2k+XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgQGlmIChpdGVtKCkuZXhwYW5kICYmIGNhbGN1bGF0b3JIZWlnaEl0ZW1TdWNjZXNzKCkpIHtcbiAgICAgICAgICAgICAgICAgIDxsaWJzX3VpLWNvbXBvbmVudHMtbGlzdC10ZW1wbGF0ZXNfZ3JvdXAtaXRlbSBba2V5U2VhcmNoXT1cImtleVNlYXJjaCgpXCJcbiAgICAgICAgICAgICAgICAgICAgW2l0ZW1zXT1cIml0ZW0oKVtjb25maWdUZW1wbGF0ZUdyb3VwLmZpZWxkR2V0SXRlbXNdKClcIlxuICAgICAgICAgICAgICAgICAgICBbcGFyZW50SXRlbV09XCJpdGVtKClcIlxuICAgICAgICAgICAgICAgICAgICBbZmllbGRLZXldPVwiZmllbGRLZXkoKVwiXG4gICAgICAgICAgICAgICAgICAgIFtrZXlzQ2hlY2tlZF09XCJrZXlzQ2hlY2tlZCgpXCJcbiAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVdPVwiZGlzYWJsZSgpXCJcbiAgICAgICAgICAgICAgICAgICAgW2tleXNEaXNhYmxlSXRlbV09XCJrZXlzRGlzYWJsZUl0ZW0oKSB8fCBbXVwiXG4gICAgICAgICAgICAgICAgICAgIFtjb25maWdUZW1wbGF0ZUdyb3VwXT1cImNvbmZpZ1RlbXBsYXRlR3JvdXBcIlxuICAgICAgICAgICAgICAgICAgICBbY29uZmlnXT1cImNvbmZpZygpXCJcbiAgICAgICAgICAgICAgICAgICAgW2tleXNTdGlsbE90aGVyT3B0aW9uc109XCJrZXlzU3RpbGxPdGhlck9wdGlvbnMoKVwiXG4gICAgICAgICAgICAgICAgICAgIChvdXRDaGFuZ2VWaWV3KT1cImhhbmRsZXJDaGFuZ2VWaWV3KClcIlxuICAgICAgICAgICAgICAgICAgICAob3V0Q2hhbmdTdGFnZUZsYWdNb3VzZVBvcG92ZXIpPSdoYW5kbGVyQ2hhbmdTdGFnZUZsYWdNb3VzZSgkZXZlbnQpJ1xuICAgICAgICAgICAgICAgICAgICAob3V0Q2hhbmdlKT1cImhhbmRsZXJDaGFuZ2VJdGVtQ2hlY2tlZCgkZXZlbnQuaXRlbSlcIiAvPlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBAaWYgKCFsYXN0ICYmICFjb25maWdUZW1wbGF0ZUdyb3VwLmlnbm9yZUdyb3VwTGluZSAmJiBjYWxjdWxhdG9ySGVpZ2hJdGVtU3VjY2VzcygpKSB7XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibGlicy11aS1saXN0LWdyb3VwLWxpbmVcIlxuICAgICAgICAgICAgICAgICAgICBbc3R5bGUubWFyZ2luVG9wLnB4XT1cIiFjb25maWdUZW1wbGF0ZUdyb3VwLmlnbm9yZUdyb3VwTGluZSA/IGNvbmZpZ1RlbXBsYXRlR3JvdXAubWFyZ2luVG9wSGFzTGluZSB8fCA0IDogMFwiPlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICB9XG4gICAgICBAaWYgKCFpdGVtcygpIHx8ICFpdGVtcygpLmxlbmd0aCkge1xuICAgICAgICA8ZGl2XG4gICAgICAgICAgY2xhc3M9XCJsaWJzLXVpLWZvbnQtaDVyIHRleHQtWyNjMWMxYzFdIHJlbGF0aXZlIHt7IGNvbmZpZ1RlbXBsYXRlR3JvdXAuY2xhc3NJbmNsdWRlTm9kYXRhP2NvbmZpZ1RlbXBsYXRlR3JvdXAuY2xhc3NJbmNsdWRlTm9kYXRhOicnIH19XCJcbiAgICAgICAgICBbc3R5bGUubWFyZ2luTGVmdC5weF09XCIwIHwgTGlic1VpQ29tcG9uZW50c0xpc3RHcm91cENhbGN1bGF0b3JNYXJnaW5MZWZ0SXRlbVBpcGU6MjooY29uZmlnVGVtcGxhdGVHcm91cC5pc1ZpZXdUcmVlIHx8IGNvbmZpZ1RlbXBsYXRlR3JvdXAuaWNvbkV4cGFuZCA9PT0gJ2xlZnQnKTpjb25maWdUZW1wbGF0ZUdyb3VwLmlzVmlld1RyZWVKc29uOiEoY29uZmlnVGVtcGxhdGVHcm91cC5pZ25vcmVDaGVja2JveEl0ZW0gfHwgY29uZmlnVGVtcGxhdGVHcm91cC5pZ25vcmVSYWRpb0l0ZW0gfHwgY29uZmlnVGVtcGxhdGVHcm91cC5zaW5nbGVTZWxlY3RJdGVtKTp0cnVlXCJcbiAgICAgICAgICBbY2xhc3MucHktWzhweF1dPVwiY29uZmlnVGVtcGxhdGVHcm91cC5maWVsZEdldEF2YXRhckl0ZW1cIlxuICAgICAgICAgIFtjbGFzcy5weS1bNHB4XV09XCIhY29uZmlnVGVtcGxhdGVHcm91cC5maWVsZEdldEF2YXRhckl0ZW1cIj5cbiAgICAgICAgICBAaWYgKCFrZXlTZWFyY2goKSAmJiAhbG9hZGluZygpKSB7XG4gICAgICAgICAgICA8ZGl2Pnt7IChjb25maWcoKT8udGV4dE5vRGF0YSA/PyAnaTE4bl9ub19kYXRhX3lldCcpIHwgdHJhbnNsYXRlIH19PC9kaXY+XG4gICAgICAgICAgfVxuICAgICAgICAgIEBpZiAoa2V5U2VhcmNoKCkgJiYgIWxvYWRpbmcoKSkge1xuICAgICAgICAgICAgPGRpdj57eyAoY29uZmlnKCk/LnRleHRTZWFyY2hOb0RhdGEgPz8naTE4bl9ub19yZXN1bHQnKSB8IHRyYW5zbGF0ZSB9fTwvZGl2PlxuICAgICAgICAgIH1cbiAgICAgICAgPC9kaXY+XG4gICAgICB9XG4gICAgICBAaWYgKGxvYWRpbmcoKSkge1xuICAgICAgICA8bGlic191aS1jb21wb25lbnRzLXNwaW5uZXIgW3NpemVdPVwiJ21lZGl1bSdcIiAvPlxuICAgICAgfVxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbn1cbiJdfQ==
|