ngx-tethys 17.0.0 → 17.0.2
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/CHANGELOG.md +26 -7
- package/action/action.component.d.ts +3 -0
- package/affix/affix.component.d.ts +2 -0
- package/alert/alert.component.d.ts +1 -0
- package/anchor/anchor.component.d.ts +3 -0
- package/arrow-switcher/arrow-switcher.component.d.ts +1 -0
- package/autocomplete/autocomplete.component.d.ts +2 -3
- package/autocomplete/autocomplete.trigger.directive.d.ts +3 -0
- package/avatar/avatar.component.d.ts +4 -0
- package/back-top/back-top.component.d.ts +1 -0
- package/badge/badge.component.d.ts +5 -0
- package/button/button-icon.component.d.ts +2 -0
- package/button/button.component.d.ts +2 -0
- package/card/card.component.d.ts +3 -0
- package/card/content.component.d.ts +2 -1
- package/carousel/carousel.component.d.ts +5 -0
- package/cascader/cascader-li.component.d.ts +9 -2
- package/cascader/cascader-search-option.component.d.ts +7 -2
- package/cascader/cascader.component.d.ts +23 -2
- package/cascader/styles/cascader.scss +1 -0
- package/cascader/types.d.ts +1 -0
- package/checkbox/checkbox.component.d.ts +1 -0
- package/collapse/collapse-item.component.d.ts +2 -0
- package/collapse/collapse.component.d.ts +1 -0
- package/color-picker/color-picker-panel.component.d.ts +1 -0
- package/color-picker/color-picker.component.d.ts +7 -1
- package/copy/copy.directive.d.ts +1 -0
- package/core/behaviors/decorators.d.ts +6 -0
- package/date-picker/abstract-picker.component.d.ts +8 -1
- package/date-picker/abstract-picker.directive.d.ts +4 -0
- package/date-picker/base-picker.component.d.ts +2 -0
- package/date-picker/lib/calendar/calendar-footer.component.d.ts +1 -0
- package/date-picker/lib/popups/inner-popup.component.d.ts +1 -0
- package/date-picker/picker.component.d.ts +1 -0
- package/date-range/date-range.component.d.ts +2 -0
- package/dialog/body/dialog-body.component.d.ts +2 -1
- package/dialog/footer/dialog-footer.component.d.ts +1 -0
- package/dialog/header/dialog-header.component.d.ts +1 -0
- package/divider/divider.component.d.ts +2 -0
- package/drag-drop/drag-handle.directive.d.ts +1 -0
- package/drag-drop/drag.directive.d.ts +1 -0
- package/drag-drop/drop-container.directive.d.ts +1 -0
- package/dropdown/dropdown-menu-item.directive.d.ts +3 -1
- package/dropdown/dropdown-menu.component.d.ts +1 -0
- package/dropdown/dropdown.directive.d.ts +3 -0
- package/empty/empty.component.d.ts +1 -0
- package/esm2022/action/action.component.mjs +9 -22
- package/esm2022/affix/affix.component.mjs +8 -15
- package/esm2022/alert/alert.component.mjs +5 -10
- package/esm2022/anchor/anchor.component.mjs +10 -20
- package/esm2022/arrow-switcher/arrow-switcher.component.mjs +5 -11
- package/esm2022/autocomplete/autocomplete.component.mjs +5 -23
- package/esm2022/autocomplete/autocomplete.trigger.directive.mjs +9 -20
- package/esm2022/avatar/avatar.component.mjs +14 -30
- package/esm2022/back-top/back-top.component.mjs +6 -10
- package/esm2022/badge/badge.component.mjs +15 -37
- package/esm2022/button/button-icon.component.mjs +9 -20
- package/esm2022/button/button.component.mjs +7 -16
- package/esm2022/card/card.component.mjs +6 -20
- package/esm2022/card/content.component.mjs +5 -6
- package/esm2022/carousel/carousel.component.mjs +13 -30
- package/esm2022/cascader/cascader-li.component.mjs +16 -31
- package/esm2022/cascader/cascader-search-option.component.mjs +12 -21
- package/esm2022/cascader/cascader.component.mjs +32 -52
- package/esm2022/cascader/types.mjs +1 -1
- package/esm2022/checkbox/checkbox.component.mjs +7 -13
- package/esm2022/collapse/collapse-item.component.mjs +8 -15
- package/esm2022/collapse/collapse.component.mjs +5 -10
- package/esm2022/color-picker/color-picker-panel.component.mjs +5 -10
- package/esm2022/color-picker/color-picker.component.mjs +17 -37
- package/esm2022/copy/copy.directive.mjs +5 -10
- package/esm2022/core/behaviors/decorators.mjs +7 -44
- package/esm2022/date-picker/abstract-picker.component.mjs +21 -45
- package/esm2022/date-picker/abstract-picker.directive.mjs +11 -27
- package/esm2022/date-picker/base-picker.component.mjs +8 -15
- package/esm2022/date-picker/lib/calendar/calendar-footer.component.mjs +5 -10
- package/esm2022/date-picker/lib/popups/date-popup.component.mjs +4 -2
- package/esm2022/date-picker/lib/popups/inner-popup.component.mjs +7 -6
- package/esm2022/date-picker/picker.component.mjs +6 -10
- package/esm2022/date-range/date-range.component.mjs +7 -15
- package/esm2022/dialog/body/dialog-body.component.mjs +6 -6
- package/esm2022/dialog/footer/dialog-footer.component.mjs +6 -13
- package/esm2022/dialog/header/dialog-header.component.mjs +6 -10
- package/esm2022/divider/divider.component.mjs +7 -15
- package/esm2022/drag-drop/drag-handle.directive.mjs +5 -13
- package/esm2022/drag-drop/drag.directive.mjs +5 -11
- package/esm2022/drag-drop/drop-container.directive.mjs +5 -10
- package/esm2022/dropdown/dropdown-menu-item.directive.mjs +9 -19
- package/esm2022/dropdown/dropdown-menu.component.mjs +6 -9
- package/esm2022/dropdown/dropdown.directive.mjs +8 -22
- package/esm2022/empty/empty.component.mjs +7 -13
- package/esm2022/flexible-text/flexible-text.component.mjs +4 -11
- package/esm2022/form/form-group-error/form-group-error.component.mjs +5 -10
- package/esm2022/form/form-group-label.directive.mjs +6 -6
- package/esm2022/form/form-group.component.mjs +13 -17
- package/esm2022/icon/icon.component.mjs +6 -20
- package/esm2022/image/image.directive.mjs +7 -15
- package/esm2022/input/input-search.component.mjs +6 -11
- package/esm2022/input/input.component.mjs +7 -15
- package/esm2022/input-number/input-number.component.mjs +12 -25
- package/esm2022/layout/header.component.mjs +9 -19
- package/esm2022/layout/sidebar-header.component.mjs +5 -10
- package/esm2022/layout/sidebar.component.mjs +22 -45
- package/esm2022/list/list.component.mjs +5 -11
- package/esm2022/list/selection/selection-list.mjs +13 -10
- package/esm2022/loading/loading.component.mjs +9 -20
- package/esm2022/menu/group/menu-group.component.mjs +12 -38
- package/esm2022/menu/item/action/menu-item-action.component.mjs +5 -10
- package/esm2022/menu/item/name/menu-item-name.component.mjs +5 -10
- package/esm2022/menu/menu.component.mjs +5 -10
- package/esm2022/nav/icon-nav/icon-nav-link.directive.mjs +6 -6
- package/esm2022/nav/nav-ink-bar.directive.mjs +7 -15
- package/esm2022/nav/nav-item.directive.mjs +10 -20
- package/esm2022/nav/nav.component.mjs +12 -25
- package/esm2022/pagination/pagination.component.mjs +18 -68
- package/esm2022/popover/popover.directive.mjs +12 -33
- package/esm2022/progress/progress-circle.component.mjs +9 -20
- package/esm2022/progress/progress-strip.component.mjs +5 -11
- package/esm2022/progress/progress.component.mjs +11 -23
- package/esm2022/property/properties.component.mjs +5 -10
- package/esm2022/property/property-item.component.mjs +8 -15
- package/esm2022/property-operation/property-operation.component.mjs +16 -37
- package/esm2022/radio/group/radio-group.component.mjs +6 -21
- package/esm2022/rate/rate-item.component.mjs +5 -10
- package/esm2022/rate/rate.component.mjs +16 -25
- package/esm2022/resizable/resizable.directive.mjs +24 -62
- package/esm2022/resizable/resize-handle.component.mjs +6 -10
- package/esm2022/resizable/resize-handles.component.mjs +5 -10
- package/esm2022/segment/segment-item.component.mjs +5 -10
- package/esm2022/segment/segment.component.mjs +7 -16
- package/esm2022/select/custom-select/custom-select.component.mjs +30 -65
- package/esm2022/select/native-select/native-select.component.mjs +6 -10
- package/esm2022/shared/base-form-check.component.mjs +10 -20
- package/esm2022/shared/directives/thy-autofocus.directive.mjs +10 -15
- package/esm2022/shared/directives/thy-scroll.directive.mjs +6 -13
- package/esm2022/shared/directives/thy-show.mjs +5 -11
- package/esm2022/shared/option/group/option-group.component.mjs +5 -10
- package/esm2022/shared/option/list-option/list-option.component.mjs +6 -13
- package/esm2022/shared/option/option.component.mjs +5 -11
- package/esm2022/shared/select/select-control/select-control.component.mjs +17 -44
- package/esm2022/skeleton/skeleton-circle.component.mjs +6 -9
- package/esm2022/skeleton/skeleton-rectangle.component.mjs +6 -9
- package/esm2022/skeleton/skeleton.component.mjs +5 -10
- package/esm2022/skeleton/stylized/bullet-list.component.mjs +6 -9
- package/esm2022/skeleton/stylized/list.component.mjs +6 -9
- package/esm2022/skeleton/stylized/paragraph.component.mjs +6 -9
- package/esm2022/slide/slide-body/slide-body-section.component.mjs +6 -6
- package/esm2022/slider/slider.component.mjs +18 -35
- package/esm2022/space/space.component.mjs +6 -10
- package/esm2022/stepper/step-header.component.mjs +9 -20
- package/esm2022/stepper/stepper.component.mjs +7 -16
- package/esm2022/switch/switch.component.mjs +12 -17
- package/esm2022/table/table-column.component.mjs +9 -31
- package/esm2022/table/table-skeleton.component.mjs +8 -14
- package/esm2022/table/table.component.mjs +32 -83
- package/esm2022/tabs/tab.component.mjs +5 -10
- package/esm2022/tabs/tabs.component.mjs +8 -15
- package/esm2022/tag/tag.component.mjs +6 -10
- package/esm2022/time-picker/time-picker-panel.component.mjs +8 -15
- package/esm2022/time-picker/time-picker.component.mjs +20 -46
- package/esm2022/timeline/timeline.component.mjs +5 -10
- package/esm2022/tooltip/tooltip.directive.mjs +11 -34
- package/esm2022/tree/tree-node.component.mjs +17 -40
- package/esm2022/tree/tree.component.mjs +19 -47
- package/esm2022/tree-select/tree-select.component.mjs +18 -40
- package/esm2022/upload/file-select-base.mjs +7 -6
- package/esm2022/upload/file-select.component.mjs +11 -26
- package/esm2022/version.mjs +2 -2
- package/esm2022/vote/vote.component.mjs +11 -33
- package/esm2022/watermark/watermark.directive.mjs +6 -10
- package/fesm2022/ngx-tethys-action.mjs +9 -21
- package/fesm2022/ngx-tethys-action.mjs.map +1 -1
- package/fesm2022/ngx-tethys-affix.mjs +6 -14
- package/fesm2022/ngx-tethys-affix.mjs.map +1 -1
- package/fesm2022/ngx-tethys-alert.mjs +4 -9
- package/fesm2022/ngx-tethys-alert.mjs.map +1 -1
- package/fesm2022/ngx-tethys-anchor.mjs +8 -19
- package/fesm2022/ngx-tethys-anchor.mjs.map +1 -1
- package/fesm2022/ngx-tethys-arrow-switcher.mjs +4 -10
- package/fesm2022/ngx-tethys-arrow-switcher.mjs.map +1 -1
- package/fesm2022/ngx-tethys-autocomplete.mjs +14 -39
- package/fesm2022/ngx-tethys-autocomplete.mjs.map +1 -1
- package/fesm2022/ngx-tethys-avatar.mjs +14 -29
- package/fesm2022/ngx-tethys-avatar.mjs.map +1 -1
- package/fesm2022/ngx-tethys-back-top.mjs +5 -9
- package/fesm2022/ngx-tethys-back-top.mjs.map +1 -1
- package/fesm2022/ngx-tethys-badge.mjs +14 -36
- package/fesm2022/ngx-tethys-badge.mjs.map +1 -1
- package/fesm2022/ngx-tethys-button.mjs +13 -30
- package/fesm2022/ngx-tethys-button.mjs.map +1 -1
- package/fesm2022/ngx-tethys-card.mjs +8 -23
- package/fesm2022/ngx-tethys-card.mjs.map +1 -1
- package/fesm2022/ngx-tethys-carousel.mjs +12 -29
- package/fesm2022/ngx-tethys-carousel.mjs.map +1 -1
- package/fesm2022/ngx-tethys-cascader.mjs +55 -95
- package/fesm2022/ngx-tethys-cascader.mjs.map +1 -1
- package/fesm2022/ngx-tethys-checkbox.mjs +5 -12
- package/fesm2022/ngx-tethys-checkbox.mjs.map +1 -1
- package/fesm2022/ngx-tethys-collapse.mjs +10 -20
- package/fesm2022/ngx-tethys-collapse.mjs.map +1 -1
- package/fesm2022/ngx-tethys-color-picker.mjs +19 -42
- package/fesm2022/ngx-tethys-color-picker.mjs.map +1 -1
- package/fesm2022/ngx-tethys-copy.mjs +4 -9
- package/fesm2022/ngx-tethys-copy.mjs.map +1 -1
- package/fesm2022/ngx-tethys-core.mjs +6 -43
- package/fesm2022/ngx-tethys-core.mjs.map +1 -1
- package/fesm2022/ngx-tethys-date-picker.mjs +48 -94
- package/fesm2022/ngx-tethys-date-picker.mjs.map +1 -1
- package/fesm2022/ngx-tethys-date-range.mjs +6 -14
- package/fesm2022/ngx-tethys-date-range.mjs.map +1 -1
- package/fesm2022/ngx-tethys-dialog.mjs +13 -21
- package/fesm2022/ngx-tethys-dialog.mjs.map +1 -1
- package/fesm2022/ngx-tethys-divider.mjs +6 -14
- package/fesm2022/ngx-tethys-divider.mjs.map +1 -1
- package/fesm2022/ngx-tethys-drag-drop.mjs +10 -25
- package/fesm2022/ngx-tethys-drag-drop.mjs.map +1 -1
- package/fesm2022/ngx-tethys-dropdown.mjs +19 -42
- package/fesm2022/ngx-tethys-dropdown.mjs.map +1 -1
- package/fesm2022/ngx-tethys-empty.mjs +5 -12
- package/fesm2022/ngx-tethys-empty.mjs.map +1 -1
- package/fesm2022/ngx-tethys-flexible-text.mjs +3 -10
- package/fesm2022/ngx-tethys-flexible-text.mjs.map +1 -1
- package/fesm2022/ngx-tethys-form.mjs +19 -25
- package/fesm2022/ngx-tethys-form.mjs.map +1 -1
- package/fesm2022/ngx-tethys-icon.mjs +5 -19
- package/fesm2022/ngx-tethys-icon.mjs.map +1 -1
- package/fesm2022/ngx-tethys-image.mjs +7 -14
- package/fesm2022/ngx-tethys-image.mjs.map +1 -1
- package/fesm2022/ngx-tethys-input-number.mjs +11 -24
- package/fesm2022/ngx-tethys-input-number.mjs.map +1 -1
- package/fesm2022/ngx-tethys-input.mjs +10 -21
- package/fesm2022/ngx-tethys-input.mjs.map +1 -1
- package/fesm2022/ngx-tethys-layout.mjs +31 -64
- package/fesm2022/ngx-tethys-layout.mjs.map +1 -1
- package/fesm2022/ngx-tethys-list.mjs +16 -18
- package/fesm2022/ngx-tethys-list.mjs.map +1 -1
- package/fesm2022/ngx-tethys-loading.mjs +8 -19
- package/fesm2022/ngx-tethys-loading.mjs.map +1 -1
- package/fesm2022/ngx-tethys-menu.mjs +20 -55
- package/fesm2022/ngx-tethys-menu.mjs.map +1 -1
- package/fesm2022/ngx-tethys-nav.mjs +28 -55
- package/fesm2022/ngx-tethys-nav.mjs.map +1 -1
- package/fesm2022/ngx-tethys-pagination.mjs +17 -67
- package/fesm2022/ngx-tethys-pagination.mjs.map +1 -1
- package/fesm2022/ngx-tethys-popover.mjs +11 -32
- package/fesm2022/ngx-tethys-popover.mjs.map +1 -1
- package/fesm2022/ngx-tethys-progress.mjs +20 -45
- package/fesm2022/ngx-tethys-progress.mjs.map +1 -1
- package/fesm2022/ngx-tethys-property-operation.mjs +14 -36
- package/fesm2022/ngx-tethys-property-operation.mjs.map +1 -1
- package/fesm2022/ngx-tethys-property.mjs +10 -21
- package/fesm2022/ngx-tethys-property.mjs.map +1 -1
- package/fesm2022/ngx-tethys-radio.mjs +5 -19
- package/fesm2022/ngx-tethys-radio.mjs.map +1 -1
- package/fesm2022/ngx-tethys-rate.mjs +18 -30
- package/fesm2022/ngx-tethys-rate.mjs.map +1 -1
- package/fesm2022/ngx-tethys-resizable.mjs +29 -73
- package/fesm2022/ngx-tethys-resizable.mjs.map +1 -1
- package/fesm2022/ngx-tethys-segment.mjs +10 -21
- package/fesm2022/ngx-tethys-segment.mjs.map +1 -1
- package/fesm2022/ngx-tethys-select.mjs +32 -70
- package/fesm2022/ngx-tethys-select.mjs.map +1 -1
- package/fesm2022/ngx-tethys-shared.mjs +49 -105
- package/fesm2022/ngx-tethys-shared.mjs.map +1 -1
- package/fesm2022/ngx-tethys-skeleton.mjs +20 -38
- package/fesm2022/ngx-tethys-skeleton.mjs.map +1 -1
- package/fesm2022/ngx-tethys-slide.mjs +6 -5
- package/fesm2022/ngx-tethys-slide.mjs.map +1 -1
- package/fesm2022/ngx-tethys-slider.mjs +17 -34
- package/fesm2022/ngx-tethys-slider.mjs.map +1 -1
- package/fesm2022/ngx-tethys-space.mjs +5 -9
- package/fesm2022/ngx-tethys-space.mjs.map +1 -1
- package/fesm2022/ngx-tethys-stepper.mjs +13 -31
- package/fesm2022/ngx-tethys-stepper.mjs.map +1 -1
- package/fesm2022/ngx-tethys-switch.mjs +11 -16
- package/fesm2022/ngx-tethys-switch.mjs.map +1 -1
- package/fesm2022/ngx-tethys-table.mjs +43 -120
- package/fesm2022/ngx-tethys-table.mjs.map +1 -1
- package/fesm2022/ngx-tethys-tabs.mjs +10 -20
- package/fesm2022/ngx-tethys-tabs.mjs.map +1 -1
- package/fesm2022/ngx-tethys-tag.mjs +5 -9
- package/fesm2022/ngx-tethys-tag.mjs.map +1 -1
- package/fesm2022/ngx-tethys-time-picker.mjs +24 -55
- package/fesm2022/ngx-tethys-time-picker.mjs.map +1 -1
- package/fesm2022/ngx-tethys-timeline.mjs +4 -9
- package/fesm2022/ngx-tethys-timeline.mjs.map +1 -1
- package/fesm2022/ngx-tethys-tooltip.mjs +10 -33
- package/fesm2022/ngx-tethys-tooltip.mjs.map +1 -1
- package/fesm2022/ngx-tethys-tree-select.mjs +17 -39
- package/fesm2022/ngx-tethys-tree-select.mjs.map +1 -1
- package/fesm2022/ngx-tethys-tree.mjs +33 -82
- package/fesm2022/ngx-tethys-tree.mjs.map +1 -1
- package/fesm2022/ngx-tethys-upload.mjs +15 -28
- package/fesm2022/ngx-tethys-upload.mjs.map +1 -1
- package/fesm2022/ngx-tethys-vote.mjs +10 -32
- package/fesm2022/ngx-tethys-vote.mjs.map +1 -1
- package/fesm2022/ngx-tethys-watermark.mjs +5 -9
- package/fesm2022/ngx-tethys-watermark.mjs.map +1 -1
- package/fesm2022/ngx-tethys.mjs +1 -1
- package/fesm2022/ngx-tethys.mjs.map +1 -1
- package/flexible-text/flexible-text.component.d.ts +1 -0
- package/form/form-group-error/form-group-error.component.d.ts +1 -0
- package/form/form-group-label.directive.d.ts +2 -1
- package/form/form-group.component.d.ts +5 -2
- package/icon/icon.component.d.ts +3 -0
- package/image/image.directive.d.ts +2 -0
- package/input/input-search.component.d.ts +1 -0
- package/input/input.component.d.ts +2 -0
- package/input-number/input-number.component.d.ts +4 -0
- package/layout/header.component.d.ts +5 -2
- package/layout/sidebar-header.component.d.ts +1 -0
- package/layout/sidebar.component.d.ts +14 -4
- package/list/list.component.d.ts +1 -0
- package/list/selection/selection-list.d.ts +4 -1
- package/loading/loading.component.d.ts +4 -2
- package/menu/group/menu-group.component.d.ts +6 -0
- package/menu/item/action/menu-item-action.component.d.ts +1 -0
- package/menu/item/name/menu-item-name.component.d.ts +1 -0
- package/menu/menu.component.d.ts +1 -0
- package/nav/icon-nav/icon-nav-link.directive.d.ts +2 -1
- package/nav/nav-ink-bar.directive.d.ts +2 -0
- package/nav/nav-item.directive.d.ts +3 -0
- package/nav/nav.component.d.ts +4 -0
- package/package.json +7 -7
- package/pagination/pagination.component.d.ts +11 -0
- package/popover/popover.directive.d.ts +5 -0
- package/progress/progress-circle.component.d.ts +3 -0
- package/progress/progress-strip.component.d.ts +1 -0
- package/progress/progress.component.d.ts +3 -0
- package/property/properties.component.d.ts +1 -0
- package/property/property-item.component.d.ts +2 -0
- package/property-operation/property-operation.component.d.ts +5 -0
- package/radio/group/radio-group.component.d.ts +2 -2
- package/rate/rate-item.component.d.ts +1 -0
- package/rate/rate.component.d.ts +5 -1
- package/resizable/resizable.directive.d.ts +10 -1
- package/resizable/resize-handle.component.d.ts +1 -0
- package/resizable/resize-handles.component.d.ts +1 -0
- package/resizable/styles/resizable.scss +1 -0
- package/schematics/dependencies.js +1 -1
- package/schematics/version.d.ts +1 -1
- package/schematics/version.js +1 -1
- package/segment/segment-item.component.d.ts +1 -0
- package/segment/segment.component.d.ts +2 -0
- package/select/custom-select/custom-select.component.d.ts +12 -1
- package/select/native-select/native-select.component.d.ts +1 -0
- package/shared/base-form-check.component.d.ts +2 -0
- package/shared/directives/thy-autofocus.directive.d.ts +3 -1
- package/shared/directives/thy-scroll.directive.d.ts +1 -0
- package/shared/directives/thy-show.d.ts +1 -0
- package/shared/option/group/option-group.component.d.ts +1 -0
- package/shared/option/list-option/list-option.component.d.ts +1 -0
- package/shared/option/option.component.d.ts +1 -0
- package/shared/option/styles/select-dropdown.scss +1 -0
- package/shared/select/select-control/select-control.component.d.ts +7 -0
- package/skeleton/skeleton-circle.component.d.ts +1 -0
- package/skeleton/skeleton-rectangle.component.d.ts +1 -0
- package/skeleton/skeleton.component.d.ts +1 -0
- package/skeleton/stylized/bullet-list.component.d.ts +1 -0
- package/skeleton/stylized/list.component.d.ts +1 -0
- package/skeleton/stylized/paragraph.component.d.ts +1 -0
- package/slide/slide-body/slide-body-section.component.d.ts +2 -1
- package/slider/slider.component.d.ts +6 -1
- package/space/space.component.d.ts +1 -0
- package/stepper/step-header.component.d.ts +3 -0
- package/stepper/stepper.component.d.ts +2 -0
- package/switch/switch.component.d.ts +3 -1
- package/table/table-column.component.d.ts +7 -2
- package/table/table-skeleton.component.d.ts +2 -0
- package/table/table.component.d.ts +14 -0
- package/tabs/tab.component.d.ts +1 -0
- package/tabs/tabs.component.d.ts +2 -0
- package/tag/tag.component.d.ts +1 -0
- package/time-picker/time-picker-panel.component.d.ts +2 -0
- package/time-picker/time-picker.component.d.ts +6 -2
- package/timeline/timeline.component.d.ts +1 -0
- package/tooltip/tooltip.directive.d.ts +5 -0
- package/tree/tree-node.component.d.ts +7 -0
- package/tree/tree.component.d.ts +8 -0
- package/tree-select/tree-select.component.d.ts +7 -0
- package/upload/file-select-base.d.ts +1 -0
- package/upload/file-select.component.d.ts +3 -0
- package/vote/vote.component.d.ts +4 -2
- package/watermark/watermark.directive.d.ts +1 -0
|
@@ -1,5 +1,4 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { getFlexiblePositions, InputBoolean, InputNumber, scaleMotion, scaleXMotion, scaleYMotion, ScrollToService, TabIndexDisabledControlValueAccessorMixin, ThyClickDispatcher } from 'ngx-tethys/core';
|
|
1
|
+
import { getFlexiblePositions, scaleMotion, scaleXMotion, scaleYMotion, ScrollToService, TabIndexDisabledControlValueAccessorMixin, ThyClickDispatcher } from 'ngx-tethys/core';
|
|
3
2
|
import { ThyEmpty } from 'ngx-tethys/empty';
|
|
4
3
|
import { ThyLoading } from 'ngx-tethys/loading';
|
|
5
4
|
import { THY_OPTION_PARENT_COMPONENT, ThyOption, ThyOptionsContainer, ThyScrollDirective, ThySelectControl, ThySelectOptionGroup, ThyStopPropagationDirective } from 'ngx-tethys/shared';
|
|
@@ -7,11 +6,11 @@ import { A, DOWN_ARROW, elementMatchClosest, END, ENTER, hasModifierKey, helpers
|
|
|
7
6
|
import { defer, merge, Observable, Subject, timer } from 'rxjs';
|
|
8
7
|
import { distinctUntilChanged, filter, map, startWith, switchMap, take, takeUntil } from 'rxjs/operators';
|
|
9
8
|
import { ActiveDescendantKeyManager } from '@angular/cdk/a11y';
|
|
10
|
-
import {
|
|
9
|
+
import { coerceElement } from '@angular/cdk/coercion';
|
|
11
10
|
import { SelectionModel } from '@angular/cdk/collections';
|
|
12
11
|
import { CdkConnectedOverlay, CdkOverlayOrigin, Overlay } from '@angular/cdk/overlay';
|
|
13
12
|
import { isPlatformBrowser, NgClass, NgFor, NgIf, NgTemplateOutlet } from '@angular/common';
|
|
14
|
-
import { ChangeDetectionStrategy, ChangeDetectorRef, Component, ContentChild, ContentChildren, ElementRef, EventEmitter, forwardRef, HostBinding, HostListener, Inject, Input, NgZone, Optional, Output, PLATFORM_ID, QueryList, TemplateRef, ViewChild, ViewChildren } from '@angular/core';
|
|
13
|
+
import { booleanAttribute, ChangeDetectionStrategy, ChangeDetectorRef, Component, ContentChild, ContentChildren, ElementRef, EventEmitter, forwardRef, HostBinding, HostListener, Inject, Input, NgZone, numberAttribute, Optional, Output, PLATFORM_ID, QueryList, TemplateRef, ViewChild, ViewChildren } from '@angular/core';
|
|
15
14
|
import { NG_VALUE_ACCESSOR } from '@angular/forms';
|
|
16
15
|
import { DEFAULT_SELECT_CONFIG, THY_SELECT_CONFIG, THY_SELECT_SCROLL_STRATEGY } from '../select.config';
|
|
17
16
|
import * as i0 from "@angular/core";
|
|
@@ -69,12 +68,12 @@ export class ThySelect extends TabIndexDisabledControlValueAccessorMixin {
|
|
|
69
68
|
* 是否禁用
|
|
70
69
|
* @default false
|
|
71
70
|
*/
|
|
71
|
+
set thyDisabled(value) {
|
|
72
|
+
this.disabled = value;
|
|
73
|
+
}
|
|
72
74
|
get thyDisabled() {
|
|
73
75
|
return this.disabled;
|
|
74
76
|
}
|
|
75
|
-
set thyDisabled(value) {
|
|
76
|
-
this.disabled = coerceBooleanProperty(value);
|
|
77
|
-
}
|
|
78
77
|
/**
|
|
79
78
|
* option 列表
|
|
80
79
|
* @type ThySelectOptionModel[]
|
|
@@ -752,7 +751,7 @@ export class ThySelect extends TabIndexDisabledControlValueAccessorMixin {
|
|
|
752
751
|
this.destroy$.complete();
|
|
753
752
|
}
|
|
754
753
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.3", ngImport: i0, type: ThySelect, deps: [{ token: i0.NgZone }, { token: i0.ElementRef }, { token: i0.ChangeDetectorRef }, { token: i1.Overlay }, { token: i2.ThyClickDispatcher }, { token: PLATFORM_ID }, { token: THY_SELECT_SCROLL_STRATEGY, optional: true }, { token: THY_SELECT_CONFIG, optional: true }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
755
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "
|
|
754
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "16.1.0", version: "17.2.3", type: ThySelect, isStandalone: true, selector: "thy-select,thy-custom-select", inputs: { thyDropdownWidthMode: "thyDropdownWidthMode", thyShowSearch: ["thyShowSearch", "thyShowSearch", booleanAttribute], thyPlaceHolder: "thyPlaceHolder", thyServerSearch: ["thyServerSearch", "thyServerSearch", booleanAttribute], thyLoadState: ["thyLoadState", "thyLoadState", booleanAttribute], thyAutoActiveFirstItem: ["thyAutoActiveFirstItem", "thyAutoActiveFirstItem", booleanAttribute], thyMode: "thyMode", thySize: "thySize", thyEmptyStateText: "thyEmptyStateText", thyEmptySearchMessageText: "thyEmptySearchMessageText", thyEnableScrollLoad: ["thyEnableScrollLoad", "thyEnableScrollLoad", booleanAttribute], thyAllowClear: ["thyAllowClear", "thyAllowClear", booleanAttribute], thyDisabled: ["thyDisabled", "thyDisabled", booleanAttribute], thySortComparator: "thySortComparator", thyFooterTemplate: "thyFooterTemplate", thyPlacement: "thyPlacement", thyOrigin: "thyOrigin", thyFooterClass: "thyFooterClass", thyAutoExpand: ["thyAutoExpand", "thyAutoExpand", booleanAttribute], thyHasBackdrop: ["thyHasBackdrop", "thyHasBackdrop", booleanAttribute], thyMaxTagCount: ["thyMaxTagCount", "thyMaxTagCount", numberAttribute], thyBorderless: ["thyBorderless", "thyBorderless", booleanAttribute], thyOptions: "thyOptions", thyPreset: "thyPreset" }, outputs: { thyOnSearch: "thyOnSearch", thyOnScrollToBottom: "thyOnScrollToBottom", thyOnExpandStatusChange: "thyOnExpandStatusChange" }, host: { listeners: { "focus": "onFocus($event)", "blur": "onBlur($event)", "keydown": "handleKeydown($event)" }, properties: { "attr.tabindex": "tabIndex", "class.thy-select-custom": "this.isSelectCustom", "class.thy-select": "this.isSelect", "class.menu-is-opened": "this.panelOpen" } }, providers: [
|
|
756
755
|
{
|
|
757
756
|
provide: THY_OPTION_PARENT_COMPONENT,
|
|
758
757
|
useExisting: ThySelect
|
|
@@ -764,51 +763,6 @@ export class ThySelect extends TabIndexDisabledControlValueAccessorMixin {
|
|
|
764
763
|
}
|
|
765
764
|
], queries: [{ propertyName: "selectedValueDisplayRef", first: true, predicate: ["selectedDisplay"], descendants: true }, { propertyName: "contentOptions", predicate: ThyOption, descendants: true }, { propertyName: "contentGroups", predicate: ThySelectOptionGroup }], viewQueries: [{ propertyName: "cdkConnectedOverlay", first: true, predicate: CdkConnectedOverlay, descendants: true, static: true }, { propertyName: "trigger", first: true, predicate: ["trigger"], descendants: true, read: ElementRef, static: true }, { propertyName: "panel", first: true, predicate: ["panel"], descendants: true, read: ElementRef }, { propertyName: "viewOptions", predicate: ThyOption, descendants: true }, { propertyName: "viewGroups", predicate: ThySelectOptionGroup, descendants: true }], exportAs: ["thySelect"], usesInheritance: true, ngImport: i0, template: "<div\n cdk-overlay-origin\n thySelectControl\n (click)=\"toggle($event)\"\n #origin=\"cdkOverlayOrigin\"\n #trigger\n [thyPanelOpened]=\"panelOpen\"\n [thySelectedOptions]=\"selected\"\n [thyIsMultiple]=\"isMultiple\"\n [thyShowSearch]=\"thyShowSearch\"\n [thyAllowClear]=\"thyAllowClear\"\n [thySize]=\"thySize\"\n [thyPlaceholder]=\"thyPlaceHolder\"\n [customDisplayTemplate]=\"selectedValueDisplayRef\"\n [thyDisabled]=\"disabled\"\n [thyBorderless]=\"thyBorderless\"\n (thyOnClear)=\"clearSelectValue($event)\"\n (thyOnRemove)=\"remove($event)\"\n (thyOnSearch)=\"onSearchFilter($event)\"\n (thyOnBlur)=\"onBlur($event)\"\n [thyMaxTagCount]=\"thyMaxTagCount\"\n [thyPreset]=\"thyPreset\"></div>\n\n<ng-template\n cdk-connected-overlay\n cdkConnectedOverlayBackdropClass=\"cdk-overlay-transparent-backdrop\"\n [cdkConnectedOverlayHasBackdrop]=\"thyHasBackdrop\"\n [cdkConnectedOverlayPositions]=\"dropDownPositions\"\n [cdkConnectedOverlayOrigin]=\"thyOrigin || origin\"\n [cdkConnectedOverlayOpen]=\"panelOpen\"\n [cdkConnectedOverlayWidth]=\"triggerRectWidth\"\n [cdkConnectedOverlayMinWidth]=\"dropDownMinWidth\"\n [cdkConnectedOverlayScrollStrategy]=\"scrollStrategy\"\n cdkConnectedOverlayTransformOriginOn=\".thy-select-dropdown\"\n (attach)=\"onAttached()\"\n (detach)=\"close()\">\n <div\n thyStopPropagation\n [attr.tabindex]=\"-1\"\n [ngClass]=\"dropDownClass\"\n [@scaleYMotion]=\"placement === 'top' || placement === 'bottom' ? 'enter' : 'void'\"\n [@scaleXMotion]=\"placement === 'left' || placement === 'right' ? 'enter' : 'void'\"\n [@scaleMotion]=\"placement !== 'top' && placement !== 'bottom' && placement !== 'left' && placement !== 'right' ? 'enter' : 'void'\"\n (mousemove)=\"dropDownMouseMove($event)\">\n <ng-container *ngIf=\"contentOptions?.length > 0 || contentGroups?.length > 0 || innerOptions?.length > 0; else emptyPlaceholder\">\n <div\n #panel\n class=\"thy-select-dropdown-options thy-select-dropdown-options-{{ size }}\"\n thyScroll\n (thyOnScrolled)=\"onOptionsScrolled($event)\"\n [thyEnable]=\"thyEnableScrollLoad\">\n <ng-template *ngIf=\"isReactiveDriven\" [ngTemplateOutlet]=\"optionsContainer.optionsTemplate\"></ng-template>\n <ng-content></ng-content>\n <ng-container *ngIf=\"isHiddenOptions\">\n <thy-loading [thyDone]=\"thyLoadState\" thySize=\"sm\"></thy-loading>\n <div class=\"thy-select-empty-content\">\n <thy-empty *ngIf=\"thyLoadState\" [thyMessage]=\"emptySearchMessageText\" thySize=\"sm\"></thy-empty>\n </div>\n </ng-container>\n </div>\n </ng-container>\n <ng-template #emptyPlaceholder>\n <thy-loading [thyDone]=\"thyLoadState\" thySize=\"sm\"></thy-loading>\n <div class=\"thy-select-empty-content\">\n <thy-empty *ngIf=\"thyLoadState\" [thyMessage]=\"emptyStateText\" thySize=\"sm\"></thy-empty>\n </div>\n </ng-template>\n <div *ngIf=\"thyFooterTemplate\" [class]=\"thyFooterClass ? thyFooterClass : 'thy-custom-select-footer'\">\n <ng-template *ngIf=\"thyFooterTemplate\" [ngTemplateOutlet]=\"thyFooterTemplate\"></ng-template>\n </div>\n </div>\n</ng-template>\n\n<thy-options-container #optionsContainer>\n <ng-container *ngFor=\"let option of optionGroups\">\n <thy-option\n *ngIf=\"!option.children; else optionGroup\"\n [thyDisabled]=\"option.disabled\"\n [thyLabelText]=\"option.label\"\n [thyValue]=\"option.value\"\n [thyRawValue]=\"option\"></thy-option>\n <ng-template #optionGroup>\n <thy-option-group [thyGroupLabel]=\"option.groupLabel\">\n <thy-option\n *ngFor=\"let sub of option.children\"\n [thyDisabled]=\"sub.disabled\"\n [thyLabelText]=\"sub.label\"\n [thyValue]=\"sub.value\"\n [thyRawValue]=\"sub\"></thy-option>\n </thy-option-group>\n </ng-template>\n </ng-container>\n</thy-options-container>\n", dependencies: [{ kind: "directive", type: CdkOverlayOrigin, selector: "[cdk-overlay-origin], [overlay-origin], [cdkOverlayOrigin]", exportAs: ["cdkOverlayOrigin"] }, { kind: "component", type: ThySelectControl, selector: "thy-select-control,[thySelectControl]", inputs: ["thyPanelOpened", "thyIsMultiple", "thyShowSearch", "thySelectedOptions", "thyDisabled", "customDisplayTemplate", "thyAllowClear", "thyPlaceholder", "thySize", "thyMaxTagCount", "thyBorderless", "thyPreset"], outputs: ["thyOnSearch", "thyOnRemove", "thyOnClear", "thyOnBlur"] }, { kind: "directive", type: CdkConnectedOverlay, selector: "[cdk-connected-overlay], [connected-overlay], [cdkConnectedOverlay]", inputs: ["cdkConnectedOverlayOrigin", "cdkConnectedOverlayPositions", "cdkConnectedOverlayPositionStrategy", "cdkConnectedOverlayOffsetX", "cdkConnectedOverlayOffsetY", "cdkConnectedOverlayWidth", "cdkConnectedOverlayHeight", "cdkConnectedOverlayMinWidth", "cdkConnectedOverlayMinHeight", "cdkConnectedOverlayBackdropClass", "cdkConnectedOverlayPanelClass", "cdkConnectedOverlayViewportMargin", "cdkConnectedOverlayScrollStrategy", "cdkConnectedOverlayOpen", "cdkConnectedOverlayDisableClose", "cdkConnectedOverlayTransformOriginOn", "cdkConnectedOverlayHasBackdrop", "cdkConnectedOverlayLockPosition", "cdkConnectedOverlayFlexibleDimensions", "cdkConnectedOverlayGrowAfterOpen", "cdkConnectedOverlayPush", "cdkConnectedOverlayDisposeOnNavigation"], outputs: ["backdropClick", "positionChange", "attach", "detach", "overlayKeydown", "overlayOutsideClick"], exportAs: ["cdkConnectedOverlay"] }, { kind: "directive", type: ThyStopPropagationDirective, selector: "[thyStopPropagation]", inputs: ["thyStopPropagation"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: ThyScrollDirective, selector: "[thyScroll]", inputs: ["thyEnable"], outputs: ["thyOnScrolled"] }, { kind: "component", type: ThyLoading, selector: "thy-loading", inputs: ["thyDone", "thyTip", "thyIsMask"] }, { kind: "component", type: ThyEmpty, selector: "thy-empty", inputs: ["thyMessage", "thyTranslationKey", "thyTranslationValues", "thyEntityName", "thyEntityNameTranslateKey", "thyIconName", "thySize", "thyMarginTop", "thyTopAuto", "thyContainer", "thyImageUrl", "thyImageLoading", "thyImageFetchPriority", "thyDescription"] }, { kind: "component", type: ThyOptionsContainer, selector: "thy-options-container" }, { kind: "component", type: ThyOption, selector: "thy-option", inputs: ["thyValue", "thyRawValue", "thyLabelText", "thyShowOptionCustom", "thySearchKey", "thyDisabled"], outputs: ["selectionChange", "visibleChange"] }, { kind: "component", type: ThySelectOptionGroup, selector: "thy-option-group", inputs: ["thyDisabled", "thyGroupLabel"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: NgFor, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }], animations: [scaleXMotion, scaleYMotion, scaleMotion], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
766
765
|
}
|
|
767
|
-
__decorate([
|
|
768
|
-
InputBoolean(),
|
|
769
|
-
__metadata("design:type", Boolean)
|
|
770
|
-
], ThySelect.prototype, "thyShowSearch", void 0);
|
|
771
|
-
__decorate([
|
|
772
|
-
InputBoolean(),
|
|
773
|
-
__metadata("design:type", Boolean)
|
|
774
|
-
], ThySelect.prototype, "thyServerSearch", void 0);
|
|
775
|
-
__decorate([
|
|
776
|
-
InputBoolean(),
|
|
777
|
-
__metadata("design:type", Object)
|
|
778
|
-
], ThySelect.prototype, "thyLoadState", void 0);
|
|
779
|
-
__decorate([
|
|
780
|
-
InputBoolean(),
|
|
781
|
-
__metadata("design:type", Object)
|
|
782
|
-
], ThySelect.prototype, "thyAutoActiveFirstItem", void 0);
|
|
783
|
-
__decorate([
|
|
784
|
-
InputBoolean(),
|
|
785
|
-
__metadata("design:type", Object)
|
|
786
|
-
], ThySelect.prototype, "thyEnableScrollLoad", void 0);
|
|
787
|
-
__decorate([
|
|
788
|
-
InputBoolean(),
|
|
789
|
-
__metadata("design:type", Object)
|
|
790
|
-
], ThySelect.prototype, "thyAllowClear", void 0);
|
|
791
|
-
__decorate([
|
|
792
|
-
InputBoolean(),
|
|
793
|
-
__metadata("design:type", Boolean),
|
|
794
|
-
__metadata("design:paramtypes", [Boolean])
|
|
795
|
-
], ThySelect.prototype, "thyDisabled", null);
|
|
796
|
-
__decorate([
|
|
797
|
-
InputBoolean(),
|
|
798
|
-
__metadata("design:type", Boolean)
|
|
799
|
-
], ThySelect.prototype, "thyAutoExpand", void 0);
|
|
800
|
-
__decorate([
|
|
801
|
-
InputBoolean(),
|
|
802
|
-
__metadata("design:type", Object)
|
|
803
|
-
], ThySelect.prototype, "thyHasBackdrop", void 0);
|
|
804
|
-
__decorate([
|
|
805
|
-
InputNumber(),
|
|
806
|
-
__metadata("design:type", Object)
|
|
807
|
-
], ThySelect.prototype, "thyMaxTagCount", void 0);
|
|
808
|
-
__decorate([
|
|
809
|
-
InputBoolean(),
|
|
810
|
-
__metadata("design:type", Object)
|
|
811
|
-
], ThySelect.prototype, "thyBorderless", void 0);
|
|
812
766
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.3", ngImport: i0, type: ThySelect, decorators: [{
|
|
813
767
|
type: Component,
|
|
814
768
|
args: [{ selector: 'thy-select,thy-custom-select', exportAs: 'thySelect', providers: [
|
|
@@ -875,15 +829,19 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.3", ngImpor
|
|
|
875
829
|
}], thyOnExpandStatusChange: [{
|
|
876
830
|
type: Output
|
|
877
831
|
}], thyShowSearch: [{
|
|
878
|
-
type: Input
|
|
832
|
+
type: Input,
|
|
833
|
+
args: [{ transform: booleanAttribute }]
|
|
879
834
|
}], thyPlaceHolder: [{
|
|
880
835
|
type: Input
|
|
881
836
|
}], thyServerSearch: [{
|
|
882
|
-
type: Input
|
|
837
|
+
type: Input,
|
|
838
|
+
args: [{ transform: booleanAttribute }]
|
|
883
839
|
}], thyLoadState: [{
|
|
884
|
-
type: Input
|
|
840
|
+
type: Input,
|
|
841
|
+
args: [{ transform: booleanAttribute }]
|
|
885
842
|
}], thyAutoActiveFirstItem: [{
|
|
886
|
-
type: Input
|
|
843
|
+
type: Input,
|
|
844
|
+
args: [{ transform: booleanAttribute }]
|
|
887
845
|
}], thyMode: [{
|
|
888
846
|
type: Input
|
|
889
847
|
}], thySize: [{
|
|
@@ -893,11 +851,14 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.3", ngImpor
|
|
|
893
851
|
}], thyEmptySearchMessageText: [{
|
|
894
852
|
type: Input
|
|
895
853
|
}], thyEnableScrollLoad: [{
|
|
896
|
-
type: Input
|
|
854
|
+
type: Input,
|
|
855
|
+
args: [{ transform: booleanAttribute }]
|
|
897
856
|
}], thyAllowClear: [{
|
|
898
|
-
type: Input
|
|
857
|
+
type: Input,
|
|
858
|
+
args: [{ transform: booleanAttribute }]
|
|
899
859
|
}], thyDisabled: [{
|
|
900
|
-
type: Input
|
|
860
|
+
type: Input,
|
|
861
|
+
args: [{ transform: booleanAttribute }]
|
|
901
862
|
}], thySortComparator: [{
|
|
902
863
|
type: Input
|
|
903
864
|
}], thyFooterTemplate: [{
|
|
@@ -912,13 +873,17 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.3", ngImpor
|
|
|
912
873
|
type: ContentChild,
|
|
913
874
|
args: ['selectedDisplay']
|
|
914
875
|
}], thyAutoExpand: [{
|
|
915
|
-
type: Input
|
|
876
|
+
type: Input,
|
|
877
|
+
args: [{ transform: booleanAttribute }]
|
|
916
878
|
}], thyHasBackdrop: [{
|
|
917
|
-
type: Input
|
|
879
|
+
type: Input,
|
|
880
|
+
args: [{ transform: booleanAttribute }]
|
|
918
881
|
}], thyMaxTagCount: [{
|
|
919
|
-
type: Input
|
|
882
|
+
type: Input,
|
|
883
|
+
args: [{ transform: numberAttribute }]
|
|
920
884
|
}], thyBorderless: [{
|
|
921
|
-
type: Input
|
|
885
|
+
type: Input,
|
|
886
|
+
args: [{ transform: booleanAttribute }]
|
|
922
887
|
}], thyOptions: [{
|
|
923
888
|
type: Input
|
|
924
889
|
}], thyPreset: [{
|
|
@@ -945,4 +910,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.3", ngImpor
|
|
|
945
910
|
type: HostListener,
|
|
946
911
|
args: ['keydown', ['$event']]
|
|
947
912
|
}] } });
|
|
948
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3VzdG9tLXNlbGVjdC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvc2VsZWN0L2N1c3RvbS1zZWxlY3QvY3VzdG9tLXNlbGVjdC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9zcmMvc2VsZWN0L2N1c3RvbS1zZWxlY3QvY3VzdG9tLXNlbGVjdC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUNILG9CQUFvQixFQUNwQixZQUFZLEVBQ1osV0FBVyxFQUNYLFdBQVcsRUFDWCxZQUFZLEVBQ1osWUFBWSxFQUNaLGVBQWUsRUFDZix5Q0FBeUMsRUFDekMsa0JBQWtCLEVBRXJCLE1BQU0saUJBQWlCLENBQUM7QUFDekIsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQzVDLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUNoRCxPQUFPLEVBR0gsMkJBQTJCLEVBQzNCLFNBQVMsRUFDVCxtQkFBbUIsRUFFbkIsa0JBQWtCLEVBQ2xCLGdCQUFnQixFQUNoQixvQkFBb0IsRUFDcEIsMkJBQTJCLEVBQzlCLE1BQU0sbUJBQW1CLENBQUM7QUFDM0IsT0FBTyxFQUNILENBQUMsRUFDRCxVQUFVLEVBQ1YsbUJBQW1CLEVBQ25CLEdBQUcsRUFDSCxLQUFLLEVBRUwsY0FBYyxFQUNkLE9BQU8sRUFDUCxJQUFJLEVBQ0osT0FBTyxFQUNQLFVBQVUsRUFDVixVQUFVLEVBQ1YsV0FBVyxFQUNYLEtBQUssRUFDTCxRQUFRLEVBQ1gsTUFBTSxpQkFBaUIsQ0FBQztBQUN6QixPQUFPLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUUsT0FBTyxFQUFnQixLQUFLLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDOUUsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLFNBQVMs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akIsS0FBSztnQkFFb0QsT0FBTztzQkFBaEUsU0FBUzt1QkFBQyxTQUFTLEVBQUUsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7Z0JBRWQsS0FBSztzQkFBOUMsU0FBUzt1QkFBQyxPQUFPLEVBQUUsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFO2dCQUtXLGNBQWM7c0JBQWhFLGVBQWU7dUJBQUMsU0FBUyxFQUFFLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRTtnQkFFeEIsV0FBVztzQkFBbkMsWUFBWTt1QkFBQyxTQUFTO2dCQUtnQixhQUFhO3NCQUFuRCxlQUFlO3VCQUFDLG9CQUFvQjtnQkFFRCxVQUFVO3NCQUE3QyxZQUFZO3VCQUFDLG9CQUFvQjtnQkFHbEMsYUFBYTtzQkFEWixZQUFZO3VCQUFDLFNBQVMsRUFBRSxDQUFDLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgZ2V0RmxleGlibGVQb3NpdGlvbnMsXG4gICAgSW5wdXRCb29sZWFuLFxuICAgIElucHV0TnVtYmVyLFxuICAgIHNjYWxlTW90aW9uLFxuICAgIHNjYWxlWE1vdGlvbixcbiAgICBzY2FsZVlNb3Rpb24sXG4gICAgU2Nyb2xsVG9TZXJ2aWNlLFxuICAgIFRhYkluZGV4RGlzYWJsZWRDb250cm9sVmFsdWVBY2Nlc3Nvck1peGluLFxuICAgIFRoeUNsaWNrRGlzcGF0Y2hlcixcbiAgICBUaHlQbGFjZW1lbnRcbn0gZnJvbSAnbmd4LXRldGh5cy9jb3JlJztcbmltcG9ydCB7IFRoeUVtcHR5IH0gZnJvbSAnbmd4LXRldGh5cy9lbXB0eSc7XG5pbXBvcnQgeyBUaHlMb2FkaW5nIH0gZnJvbSAnbmd4LXRldGh5cy9sb2FkaW5nJztcbmltcG9ydCB7XG4gICAgSVRoeU9wdGlvblBhcmVudENvbXBvbmVudCxcbiAgICBTZWxlY3RDb250cm9sU2l6ZSxcbiAgICBUSFlfT1BUSU9OX1BBUkVOVF9DT01QT05FTlQsXG4gICAgVGh5T3B0aW9uLFxuICAgIFRoeU9wdGlvbnNDb250YWluZXIsXG4gICAgVGh5T3B0aW9uU2VsZWN0aW9uQ2hhbmdlRXZlbnQsXG4gICAgVGh5U2Nyb2xsRGlyZWN0aXZlLFxuICAgIFRoeVNlbGVjdENvbnRyb2wsXG4gICAgVGh5U2VsZWN0T3B0aW9uR3JvdXAsXG4gICAgVGh5U3RvcFByb3BhZ2F0aW9uRGlyZWN0aXZlXG59IGZyb20gJ25neC10ZXRoeXMvc2hhcmVkJztcbmltcG9ydCB7XG4gICAgQSxcbiAgICBET1dOX0FSUk9XLFxuICAgIGVsZW1lbnRNYXRjaENsb3Nlc3QsXG4gICAgRU5ELFxuICAgIEVOVEVSLFxuICAgIEZ1bmN0aW9uUHJvcCxcbiAgICBoYXNNb2RpZmllcktleSxcbiAgICBoZWxwZXJzLFxuICAgIEhPTUUsXG4gICAgaXNBcnJheSxcbiAgICBpc0Z1bmN0aW9uLFxuICAgIExFRlRfQVJST1csXG4gICAgUklHSFRfQVJST1csXG4gICAgU1BBQ0UsXG4gICAgVVBfQVJST1dcbn0gZnJvbSAnbmd4LXRldGh5cy91dGlsJztcbmltcG9ydCB7IGRlZmVyLCBtZXJnZSwgT2JzZXJ2YWJsZSwgU3ViamVjdCwgU3Vic2NyaXB0aW9uLCB0aW1lciB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZGlzdGluY3RVbnRpbENoYW5nZWQsIGZpbHRlciwgbWFwLCBzdGFydFdpdGgsIHN3aXRjaE1hcCwgdGFrZSwgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbXBvcnQgeyBBY3RpdmVEZXNjZW5kYW50S2V5TWFuYWdlciB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9hMTF5JztcbmltcG9ydCB7IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSwgY29lcmNlRWxlbWVudCB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9jb2VyY2lvbic7XG5pbXBvcnQgeyBTZWxlY3Rpb25Nb2RlbCB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9jb2xsZWN0aW9ucyc7XG5pbXBvcnQgeyBDZGtDb25uZWN0ZWRPdmVybGF5LCBDZGtPdmVybGF5T3JpZ2luLCBDb25uZWN0aW9uUG9zaXRpb25QYWlyLCBPdmVybGF5LCBTY3JvbGxTdHJhdGVneSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9vdmVybGF5JztcbmltcG9ydCB7IGlzUGxhdGZvcm1Ccm93c2VyLCBOZ0NsYXNzLCBOZ0ZvciwgTmdJZiwgTmdUZW1wbGF0ZU91dGxldCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge1xuICAgIEFmdGVyQ29udGVudEluaXQsXG4gICAgQWZ0ZXJWaWV3SW5pdCxcbiAgICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBDb21wb25lbnQsXG4gICAgQ29udGVudENoaWxkLFxuICAgIENvbnRlbnRDaGlsZHJlbixcbiAgICBFbGVtZW50UmVmLFxuICAgIEV2ZW50RW1pdHRlcixcbiAgICBmb3J3YXJkUmVmLFxuICAgIEhvc3RCaW5kaW5nLFxuICAgIEhvc3RMaXN0ZW5lcixcbiAgICBJbmplY3QsXG4gICAgSW5wdXQsXG4gICAgTmdab25lLFxuICAgIE9uRGVzdHJveSxcbiAgICBPbkluaXQsXG4gICAgT3B0aW9uYWwsXG4gICAgT3V0cHV0LFxuICAgIFBMQVRGT1JNX0lELFxuICAgIFF1ZXJ5TGlzdCxcbiAgICBUZW1wbGF0ZVJlZixcbiAgICBWaWV3Q2hpbGQsXG4gICAgVmlld0NoaWxkcmVuXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29udHJvbFZhbHVlQWNjZXNzb3IsIE5HX1ZBTFVFX0FDQ0VTU09SIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuXG5pbXBvcnQge1xuICAgIERFRkFVTFRfU0VMRUNUX0NPTkZJRyxcbiAgICBUSFlfU0VMRUNUX0NPTkZJRyxcbiAgICBUSFlfU0VMRUNUX1NDUk9MTF9TVFJBVEVHWSxcbiAgICBUaHlEcm9wZG93bldpZHRoTW9kZSxcbiAgICBUaHlTZWxlY3RDb25maWdcbn0gZnJvbSAnLi4vc2VsZWN0LmNvbmZpZyc7XG5cbmV4cG9ydCB0eXBlIFNlbGVjdE1vZGUgPSAnbXVsdGlwbGUnIHwgJyc7XG5cbmV4cG9ydCB0eXBlIFRoeVNlbGVjdFRyaWdnZXJUeXBlID0gJ2NsaWNrJyB8ICdob3Zlcic7XG5cbmV4cG9ydCBjb25zdCBTRUxFQ1RfUEFORUxfTUFYX0hFSUdIVCA9IDMwMDtcblxuZXhwb3J0IGNvbnN0IFNFTEVDVF9PUFRJT05fTUFYX0hFSUdIVCA9IDQwO1xuXG5leHBvcnQgY29uc3QgU0VMRUNUX09QVElPTl9HUk9VUF9NQVhfSEVJR0hUID0gMzA7XG5cbmV4cG9ydCBjb25zdCBTRUxFQ1RfUEFORUxfUEFERElOR19UT1AgPSAxMDtcblxuZXhwb3J0IGNvbnN0IFRIWV9TRUxFQ1RfUEFORUxfTUlOX1dJRFRIID0gMjAwO1xuXG5leHBvcnQgaW50ZXJmYWNlIE9wdGlvblZhbHVlIHtcbiAgICB0aHlMYWJlbFRleHQ/OiBzdHJpbmc7XG4gICAgdGh5VmFsdWU/OiBzdHJpbmc7XG4gICAgdGh5RGlzYWJsZWQ/OiBib29sZWFuO1xuICAgIHRoeVNob3dPcHRpb25DdXN0b20/OiBib29sZWFuO1xuICAgIHRoeVNlYXJjaEtleT86IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBUaHlTZWxlY3RPcHRpb25Nb2RlbCB7XG4gICAgdmFsdWU/OiBzdHJpbmcgfCBudW1iZXI7XG4gICAgZGlzYWJsZWQ/OiBib29sZWFuO1xuICAgIGxhYmVsPzogc3RyaW5nO1xuICAgIGljb24/OiBzdHJpbmc7XG4gICAgZ3JvdXBMYWJlbD86IHN0cmluZztcbn1cblxuaW50ZXJmYWNlIFRoeU9wdGlvbkdyb3VwTW9kZWwgZXh0ZW5kcyBUaHlTZWxlY3RPcHRpb25Nb2RlbCB7XG4gICAgY2hpbGRyZW4/OiBUaHlTZWxlY3RPcHRpb25Nb2RlbFtdO1xufVxuXG5jb25zdCBub29wID0gKCkgPT4ge307XG5cbi8qKlxuICog5LiL5ouJ6YCJ5oup57uE5Lu2XG4gKiBAbmFtZSB0aHktc2VsZWN0LHRoeS1jdXN0b20tc2VsZWN0XG4gKiBAb3JkZXIgMTBcbiAqL1xuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICd0aHktc2VsZWN0LHRoeS1jdXN0b20tc2VsZWN0JyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vY3VzdG9tLXNlbGVjdC5jb21wb25lbnQuaHRtbCcsXG4gICAgZXhwb3J0QXM6ICd0aHlTZWxlY3QnLFxuICAgIHByb3ZpZGVyczogW1xuICAgICAgICB7XG4gICAgICAgICAgICBwcm92aWRlOiBUSFlfT1BUSU9OX1BBUkVOVF9DT01QT05FTlQsXG4gICAgICAgICAgICB1c2VFeGlzdGluZzogVGh5U2VsZWN0XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxuICAgICAgICAgICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gVGh5U2VsZWN0KSxcbiAgICAgICAgICAgIG11bHRpOiB0cnVlXG4gICAgICAgIH1cbiAgICBdLFxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgaW1wb3J0czogW1xuICAgICAgICBDZGtPdmVybGF5T3JpZ2luLFxuICAgICAgICBUaHlTZWxlY3RDb250cm9sLFxuICAgICAgICBDZGtDb25uZWN0ZWRPdmVybGF5LFxuICAgICAgICBUaHlTdG9wUHJvcGFnYXRpb25EaXJlY3RpdmUsXG4gICAgICAgIE5nQ2xhc3MsXG4gICAgICAgIE5nSWYsXG4gICAgICAgIFRoeVNjcm9sbERpcmVjdGl2ZSxcbiAgICAgICAgVGh5TG9hZGluZyxcbiAgICAgICAgVGh5RW1wdHksXG4gICAgICAgIFRoeU9wdGlvbnNDb250YWluZXIsXG4gICAgICAgIFRoeU9wdGlvbixcbiAgICAgICAgVGh5U2VsZWN0T3B0aW9uR3JvdXAsXG4gICAgICAgIE5nVGVtcGxhdGVPdXRsZXQsXG4gICAgICAgIE5nRm9yXG4gICAgXSxcbiAgICBob3N0OiB7XG4gICAgICAgICdbYXR0ci50YWJpbmRleF0nOiAndGFiSW5kZXgnLFxuICAgICAgICAnKGZvY3VzKSc6ICdvbkZvY3VzKCRldmVudCknLFxuICAgICAgICAnKGJsdXIpJzogJ29uQmx1cigkZXZlbnQpJ1xuICAgIH0sXG4gICAgYW5pbWF0aW9uczogW3NjYWxlWE1vdGlvbiwgc2NhbGVZTW90aW9uLCBzY2FsZU1vdGlvbl1cbn0pXG5leHBvcnQgY2xhc3MgVGh5U2VsZWN0XG4gICAgZXh0ZW5kcyBUYWJJbmRleERpc2FibGVkQ29udHJvbFZhbHVlQWNjZXNzb3JNaXhpblxuICAgIGltcGxlbWVudHMgQ29udHJvbFZhbHVlQWNjZXNzb3IsIElUaHlPcHRpb25QYXJlbnRDb21wb25lbnQsIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCwgQWZ0ZXJDb250ZW50SW5pdCwgT25EZXN0cm95XG57XG4gICAgZGlzYWJsZWQgPSBmYWxzZTtcblxuICAgIHNpemU6IFNlbGVjdENvbnRyb2xTaXplO1xuXG4gICAgbW9kZTogU2VsZWN0TW9kZSA9ICcnO1xuXG4gICAgZW1wdHlTdGF0ZVRleHQgPSAn5pqC5peg5Y+v6YCJ6aG5JztcblxuICAgIGVtcHR5U2VhcmNoTWVzc2FnZVRleHQgPSAn5pqC5peg5Y+v6YCJ6aG5JztcblxuICAgIHNjcm9sbFRvcCA9IDA7XG5cbiAgICBtb2RhbFZhbHVlOiBhbnkgPSBudWxsO1xuXG4gICAgZGVmYXVsdE9mZnNldCA9IDQ7XG5cbiAgICBkcm9wRG93bkNsYXNzOiB7IFtrZXk6IHN0cmluZ106IGJvb2xlYW4gfTtcblxuICAgIGRyb3BEb3duTWluV2lkdGg6IG51bWJlciB8IG51bGwgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICog6K6+572u5LiL5ouJ5qGG55qE5pyA5bCP5a695bqm77yM6buY6K6k5YC8IGBtYXRjaC1zZWxlY3Rg77yM6KGo56S65LiO6L6T5YWl5qGG55qE5a695bqm5LiA6Ie077ybYG1pbi13aWR0aGAg6KGo56S65pyA5bCP5a695bqm5Li6MjAwcHjvvJvmlK/mjIHoh6rlrprkuYnmnIDlsI/lrr3luqbvvIzmr5TlpoLkvKAgYHttaW5XaWR0aDogMTUwfWAg6KGo56S65pyA5bCP5a695bqm5Li6MTUwcHhcbiAgICAgKiBAZGVmYXVsdCBtYXRjaC1zZWxlY3RcbiAgICAgKi9cbiAgICBASW5wdXQoKSB0aHlEcm9wZG93bldpZHRoTW9kZTogVGh5RHJvcGRvd25XaWR0aE1vZGU7XG5cbiAgICBwdWJsaWMgZHJvcERvd25Qb3NpdGlvbnM6IENvbm5lY3Rpb25Qb3NpdGlvblBhaXJbXTtcblxuICAgIHB1YmxpYyBzZWxlY3Rpb25Nb2RlbDogU2VsZWN0aW9uTW9kZWw8VGh5T3B0aW9uPjtcblxuICAgIHB1YmxpYyB0cmlnZ2VyUmVjdFdpZHRoOiBudW1iZXI7XG5cbiAgICBwdWJsaWMgc2Nyb2xsU3RyYXRlZ3k6IFNjcm9sbFN0cmF0ZWd5O1xuXG4gICAgcHJpdmF0ZSByZXNpemVTdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcblxuICAgIHByaXZhdGUgc2VsZWN0aW9uTW9kZWxTdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcblxuICAgIC8qKlxuICAgICAqIOaJi+WKqOiBmueEpuS4reeahOagh+ivhlxuICAgICAqL1xuICAgIHByaXZhdGUgbWFudWFsRm9jdXNpbmcgPSBmYWxzZTtcblxuICAgIHByaXZhdGUgY29uZmlnOiBUaHlTZWxlY3RDb25maWc7XG5cbiAgICBwcml2YXRlIHJlYWRvbmx5IGRlc3Ryb3kkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuICAgIHJlYWRvbmx5IG9wdGlvblNlbGVjdGlvbkNoYW5nZXM6IE9ic2VydmFibGU8VGh5T3B0aW9uU2VsZWN0aW9uQ2hhbmdlRXZlbnQ+ID0gZGVmZXIoKCkgPT4ge1xuICAgICAgICBpZiAodGhpcy5vcHRpb25zKSB7XG4gICAgICAgICAgICByZXR1cm4gbWVyZ2UoLi4udGhpcy5vcHRpb25zLm1hcChvcHRpb24gPT4gb3B0aW9uLnNlbGVjdGlvbkNoYW5nZSkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLm5nWm9uZS5vblN0YWJsZS5hc09ic2VydmFibGUoKS5waXBlKFxuICAgICAgICAgICAgdGFrZSgxKSxcbiAgICAgICAgICAgIHN3aXRjaE1hcCgoKSA9PiB0aGlzLm9wdGlvblNlbGVjdGlvbkNoYW5nZXMpXG4gICAgICAgICk7XG4gICAgfSkgYXMgT2JzZXJ2YWJsZTxUaHlPcHRpb25TZWxlY3Rpb25DaGFuZ2VFdmVudD47XG5cbiAgICBAVmlld0NoaWxkKENka0Nvbm5lY3RlZE92ZXJsYXksIHsgc3RhdGljOiB0cnVlIH0pIGNka0Nvbm5lY3RlZE92ZXJsYXk6IENka0Nvbm5lY3RlZE92ZXJsYXk7XG5cbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzLnRoeS1zZWxlY3QtY3VzdG9tJykgaXNTZWxlY3RDdXN0b20gPSB0cnVlO1xuXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcy50aHktc2VsZWN0JykgaXNTZWxlY3QgPSB0cnVlO1xuXG4gICAga2V5TWFuYWdlcjogQWN0aXZlRGVzY2VuZGFudEtleU1hbmFnZXI8VGh5T3B0aW9uPjtcblxuICAgIEBIb3N0QmluZGluZygnY2xhc3MubWVudS1pcy1vcGVuZWQnKVxuICAgIHBhbmVsT3BlbiA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICog5pCc57Si5pe25Zue6LCDXG4gICAgICovXG4gICAgQE91dHB1dCgpIHRoeU9uU2VhcmNoOiBFdmVudEVtaXR0ZXI8c3RyaW5nPiA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpO1xuXG4gICAgLyoqXG4gICAgICog5LiL5ouJ6I+c5Y2V5rua5Yqo5Yiw5bqV6YOo5LqL5Lu277yM5Y+v5Lul55So6L+Z5Liq5LqL5Lu25a6e546w5rua5Yqo5Yqg6L29XG4gICAgICovXG4gICAgQE91dHB1dCgpIHRoeU9uU2Nyb2xsVG9Cb3R0b206IEV2ZW50RW1pdHRlcjx2b2lkPiA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcblxuICAgIC8qKlxuICAgICAqIOS4i+aLieiPnOWNleWxleW8gOWSjOaKmOWPoOeKtuaAgeS6i+S7tlxuICAgICAqL1xuICAgIEBPdXRwdXQoKSB0aHlPbkV4cGFuZFN0YXR1c0NoYW5nZTogRXZlbnRFbWl0dGVyPGJvb2xlYW4+ID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xuXG4gICAgLyoqXG4gICAgICog5LiL5ouJ5YiX6KGo5piv5ZCm5pi+56S65pCc57Si5qGGXG4gICAgICogQGRlZmF1bHQgZmFsc2VcbiAgICAgKi9cbiAgICBASW5wdXQoKSBASW5wdXRCb29sZWFuKCkgdGh5U2hvd1NlYXJjaDogYm9vbGVhbjtcblxuICAgIC8qKlxuICAgICAqIOmAieaLqeahhum7mOiupOaWh+Wtl1xuICAgICAqL1xuICAgIEBJbnB1dCgpIHRoeVBsYWNlSG9sZGVyOiBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiDmmK/lkKbkvb/nlKjmnI3liqHnq6/mkJzntKLvvIzlvZPkuLogdHJ1ZSDml7bvvIzlsIbkuI3lho3lnKjliY3nq6/ov5vooYzov4fmu6RcbiAgICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgICAqL1xuICAgIEBJbnB1dCgpIEBJbnB1dEJvb2xlYW4oKSB0aHlTZXJ2ZXJTZWFyY2g6IGJvb2xlYW47XG5cbiAgICAvKipcbiAgICAgKiDlvILmraXliqDovb0gbG9hZGluZyDnirbmgIHvvIxmYWxzZSDooajnpLrliqDovb3kuK3vvIx0cnVlIOihqOekuuWKoOi9veWujOaIkFxuICAgICAqL1xuICAgIEBJbnB1dCgpIEBJbnB1dEJvb2xlYW4oKSB0aHlMb2FkU3RhdGUgPSB0cnVlO1xuXG4gICAgLyoqXG4gICAgICog5piv5ZCm6Ieq5Yqo6K6+572u6YCJ6aG556ys5LiA5p2h5Li66auY5Lqu54q25oCBXG4gICAgICovXG4gICAgQElucHV0KCkgQElucHV0Qm9vbGVhbigpIHRoeUF1dG9BY3RpdmVGaXJzdEl0ZW0gPSB0cnVlO1xuXG4gICAgLyoqXG4gICAgICog5LiL5ouJ6YCJ5oup5qih5byPXG4gICAgICogQHR5cGUgJ211bHRpcGxlJyB8ICcnXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBzZXQgdGh5TW9kZSh2YWx1ZTogU2VsZWN0TW9kZSkge1xuICAgICAgICB0aGlzLm1vZGUgPSB2YWx1ZTtcbiAgICAgICAgdGhpcy5pbnN0YW5jZVNlbGVjdGlvbk1vZGVsKCk7XG4gICAgICAgIHRoaXMuZ2V0UG9zaXRpb25zKCk7XG4gICAgICAgIHRoaXMuc2V0RHJvcERvd25DbGFzcygpO1xuICAgIH1cblxuICAgIGdldCB0aHlNb2RlKCk6IFNlbGVjdE1vZGUge1xuICAgICAgICByZXR1cm4gdGhpcy5tb2RlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOaTjeS9nOWbvuagh+exu+Wei1xuICAgICAqIEB0eXBlIHByaW1hcnkgfCBzdWNjZXNzIHwgZGFuZ2VyIHwgd2FybmluZ1xuICAgICAqIEBkZWZhdWx0IHByaW1hcnlcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIGdldCB0aHlTaXplKCk6IFNlbGVjdENvbnRyb2xTaXplIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2l6ZTtcbiAgICB9XG4gICAgc2V0IHRoeVNpemUodmFsdWU6IFNlbGVjdENvbnRyb2xTaXplKSB7XG4gICAgICAgIHRoaXMuc2l6ZSA9IHZhbHVlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOaVsOaNruS4uuepuuaXtuaYvuekuueahOaPkOekuuaWh+Wtl1xuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2V0IHRoeUVtcHR5U3RhdGVUZXh0KHZhbHVlOiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5lbXB0eVN0YXRlVGV4dCA9IHZhbHVlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOaQnOe0oue7k+aenOS4uuepuuaXtuaYvuekuueahOaPkOekuuaWh+Wtl1xuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2V0IHRoeUVtcHR5U2VhcmNoTWVzc2FnZVRleHQodmFsdWU6IHN0cmluZykge1xuICAgICAgICB0aGlzLmVtcHR5U2VhcmNoTWVzc2FnZVRleHQgPSB2YWx1ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDmu5rliqjliqDovb3mmK/lkKblj6/nlKjvvIzlj6rog73lvZPov5nkuKrlj4LmlbDlj6/ku6XvvIzkuIvpnaLnmoR0aHlPblNjcm9sbFRvQm90dG9t5LqL5Lu25omN5Lya6Kem5Y+RXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBASW5wdXRCb29sZWFuKClcbiAgICB0aHlFbmFibGVTY3JvbGxMb2FkID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiDljZXpgIkoIHRoeU1vZGU9XCJcIiDmiJbogIXkuI3orr7nva4p5pe277yM6YCJ5oup5qGG5pSv5oyB5riF6ZmkXG4gICAgICovXG4gICAgQElucHV0KCkgQElucHV0Qm9vbGVhbigpIHRoeUFsbG93Q2xlYXIgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIOaYr+WQpuemgeeUqFxuICAgICAqIEBkZWZhdWx0IGZhbHNlXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBASW5wdXRCb29sZWFuKClcbiAgICBnZXQgdGh5RGlzYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmRpc2FibGVkO1xuICAgIH1cbiAgICBzZXQgdGh5RGlzYWJsZWQodmFsdWU6IGJvb2xlYW4pIHtcbiAgICAgICAgdGhpcy5kaXNhYmxlZCA9IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSh2YWx1ZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog5o6S5bqP5q+U6L6D5Ye95pWwXG4gICAgICovXG4gICAgQElucHV0KCkgdGh5U29ydENvbXBhcmF0b3I6IChhOiBUaHlPcHRpb24sIGI6IFRoeU9wdGlvbiwgb3B0aW9uczogVGh5T3B0aW9uW10pID0+IG51bWJlcjtcblxuICAgIC8qKlxuICAgICAqIEZvb3RlciDmqKHmnb/vvIzpu5jorqTlgLzkuLrnqbrkuI3mmL7npLogRm9vdGVyXG4gICAgICogQHR5cGUgVGVtcGxhdGVSZWZcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHRoeUZvb3RlclRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xuXG4gICAgLyoqXG4gICAgICog5by55Ye65L2N572uXG4gICAgICogQHR5cGUgVGh5UGxhY2VtZW50XG4gICAgICovXG4gICAgQElucHV0KClcbiAgICB0aHlQbGFjZW1lbnQ6IFRoeVBsYWNlbWVudDtcblxuICAgIC8qKlxuICAgICAqIOiHquWumuS5iSBPdmVybGF5IE9yaWdpblxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgdGh5T3JpZ2luOiBFbGVtZW50UmVmIHwgSFRNTEVsZW1lbnQ7XG5cbiAgICAvKipcbiAgICAgKiDoh6rlrprkuYkgRm9vdGVyIOaooeadv+WuueWZqCBjbGFzc1xuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgdGh5Rm9vdGVyQ2xhc3MgPSAndGh5LWN1c3RvbS1zZWxlY3QtZm9vdGVyJztcblxuICAgIC8qKlxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgQENvbnRlbnRDaGlsZCgnc2VsZWN0ZWREaXNwbGF5Jykgc2VsZWN0ZWRWYWx1ZURpc3BsYXlSZWY6IFRlbXBsYXRlUmVmPGFueT47XG5cbiAgICAvKipcbiAgICAgKiDliJ3lp4vljJbml7bvvIzmmK/lkKblsZXlvIDpnaLmnb9cbiAgICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgICAqL1xuICAgIEBJbnB1dCgpIEBJbnB1dEJvb2xlYW4oKSB0aHlBdXRvRXhwYW5kOiBib29sZWFuO1xuXG4gICAgLyoqXG4gICAgICog5piv5ZCm5by55Ye66YCP5piO6YGu572p77yM5aaC5p6c5pi+56S66YGu572p5YiZ5Lya6Zi75q2i5rua5Yqo5Yy65Z+f5rua5YqoXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBASW5wdXRCb29sZWFuKClcbiAgICB0aHlIYXNCYWNrZHJvcCA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICog6K6+572u5aSa6YCJ5pe25pyA5aSn5pi+56S655qE5qCH562+5pWw6YeP77yMMCDooajnpLrkuI3pmZDliLZcbiAgICAgKi9cbiAgICBASW5wdXQoKSBASW5wdXROdW1iZXIoKSB0aHlNYXhUYWdDb3VudCA9IDA7XG5cbiAgICAvKipcbiAgICAgKiDmmK/lkKbpmpDol4/pgInmi6nmoYbovrnmoYZcbiAgICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgICAqL1xuICAgIEBJbnB1dCgpIEBJbnB1dEJvb2xlYW4oKSB0aHlCb3JkZXJsZXNzID0gZmFsc2U7XG5cbiAgICBpc1JlYWN0aXZlRHJpdmVuID0gZmFsc2U7XG5cbiAgICBpbm5lck9wdGlvbnM6IFRoeVNlbGVjdE9wdGlvbk1vZGVsW107XG5cbiAgICBvcHRpb25Hcm91cHM6IFRoeU9wdGlvbkdyb3VwTW9kZWxbXSA9IFtdO1xuXG4gICAgLyoqXG4gICAgICogb3B0aW9uIOWIl+ihqFxuICAgICAqIEB0eXBlIFRoeVNlbGVjdE9wdGlvbk1vZGVsW11cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHNldCB0aHlPcHRpb25zKHZhbHVlOiBUaHlTZWxlY3RPcHRpb25Nb2RlbFtdKSB7XG4gICAgICAgIGlmICh2YWx1ZSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgdmFsdWUgPSBbXTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmlubmVyT3B0aW9ucyA9IHZhbHVlO1xuICAgICAgICB0aGlzLmlzUmVhY3RpdmVEcml2ZW4gPSB0cnVlO1xuICAgICAgICB0aGlzLmJ1aWxkUmVhY3RpdmVPcHRpb25zKCk7XG4gICAgfVxuXG4gICAgb3B0aW9uczogUXVlcnlMaXN0PFRoeU9wdGlvbj47XG5cbiAgICAvKipcbiAgICAgKiDnm67liY3lj6rmlK/mjIHlpJrpgInpgInkuK3pobnnmoTlsZXnpLrvvIzpu5jorqTkuLrnqbrvvIzmuLLmn5PmloflrZfmqKHmnb/vvIzkvKDlhaV0YWfvvIzmuLLmn5PlsZXnpLrmqKHmnb8sXG4gICAgICogQGRlZmF1bHQgJyfvvZx0YWdcbiAgICAgKi9cbiAgICBASW5wdXQoKSB0aHlQcmVzZXQ6IHN0cmluZyA9ICcnO1xuXG4gICAgQFZpZXdDaGlsZCgndHJpZ2dlcicsIHsgcmVhZDogRWxlbWVudFJlZiwgc3RhdGljOiB0cnVlIH0pIHRyaWdnZXI6IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+O1xuXG4gICAgQFZpZXdDaGlsZCgncGFuZWwnLCB7IHJlYWQ6IEVsZW1lbnRSZWYgfSkgcGFuZWw6IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+O1xuXG4gICAgLyoqXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBAQ29udGVudENoaWxkcmVuKFRoeU9wdGlvbiwgeyBkZXNjZW5kYW50czogdHJ1ZSB9KSBjb250ZW50T3B0aW9uczogUXVlcnlMaXN0PFRoeU9wdGlvbj47XG5cbiAgICBAVmlld0NoaWxkcmVuKFRoeU9wdGlvbikgdmlld09wdGlvbnM6IFF1ZXJ5TGlzdDxUaHlPcHRpb24+O1xuXG4gICAgLyoqXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBAQ29udGVudENoaWxkcmVuKFRoeVNlbGVjdE9wdGlvbkdyb3VwKSBjb250ZW50R3JvdXBzOiBRdWVyeUxpc3Q8VGh5U2VsZWN0T3B0aW9uR3JvdXA+O1xuXG4gICAgQFZpZXdDaGlsZHJlbihUaHlTZWxlY3RPcHRpb25Hcm91cCkgdmlld0dyb3VwczogUXVlcnlMaXN0PFRoeVNlbGVjdE9wdGlvbkdyb3VwPjtcblxuICAgIEBIb3N0TGlzdGVuZXIoJ2tleWRvd24nLCBbJyRldmVudCddKVxuICAgIGhhbmRsZUtleWRvd24oZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLmRpc2FibGVkKSB7XG4gICAgICAgICAgICBpZiAoZXZlbnQua2V5Q29kZSA9PT0gRU5URVIpIHtcbiAgICAgICAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMucGFuZWxPcGVuID8gdGhpcy5oYW5kbGVPcGVuS2V5ZG93bihldmVudCkgOiB0aGlzLmhhbmRsZUNsb3NlZEtleWRvd24oZXZlbnQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZ2V0IG9wdGlvbnNDaGFuZ2VzJCgpIHtcbiAgICAgICAgdGhpcy5vcHRpb25zID0gdGhpcy5pc1JlYWN0aXZlRHJpdmVuID8gdGhpcy52aWV3T3B0aW9ucyA6IHRoaXMuY29udGVudE9wdGlvbnM7XG4gICAgICAgIGxldCBwcmV2aW91c09wdGlvbnM6IFRoeU9wdGlvbltdID0gdGhpcy5vcHRpb25zLnRvQXJyYXkoKTtcbiAgICAgICAgcmV0dXJuIHRoaXMub3B0aW9ucy5jaGFuZ2VzLnBpcGUoXG4gICAgICAgICAgICBtYXAoZGF0YSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMub3B0aW9ucy50b0FycmF5KCk7XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIGZpbHRlcihkYXRhID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCByZXMgPSBwcmV2aW91c09wdGlvbnMubGVuZ3RoICE9PSBkYXRhLmxlbmd0aCB8fCBwcmV2aW91c09wdGlvbnMuc29tZSgob3AsIGluZGV4KSA9PiBvcCAhPT0gZGF0YVtpbmRleF0pO1xuICAgICAgICAgICAgICAgIHByZXZpb3VzT3B0aW9ucyA9IGRhdGE7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlcztcbiAgICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBidWlsZFNjcm9sbFN0cmF0ZWd5KCkge1xuICAgICAgICBpZiAodGhpcy5zY3JvbGxTdHJhdGVneUZhY3RvcnkgJiYgaXNGdW5jdGlvbih0aGlzLnNjcm9sbFN0cmF0ZWd5RmFjdG9yeSkpIHtcbiAgICAgICAgICAgIHRoaXMuc2Nyb2xsU3RyYXRlZ3kgPSB0aGlzLnNjcm9sbFN0cmF0ZWd5RmFjdG9yeSgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5zY3JvbGxTdHJhdGVneSA9IHRoaXMub3ZlcmxheS5zY3JvbGxTdHJhdGVnaWVzLnJlcG9zaXRpb24oKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgaXNTZWFyY2hpbmcgPSBmYWxzZTtcblxuICAgIGdyb3VwQnkgPSAoaXRlbTogVGh5U2VsZWN0T3B0aW9uTW9kZWwpID0+IGl0ZW0uZ3JvdXBMYWJlbDtcblxuICAgIGdldCBwbGFjZW1lbnQoKTogVGh5UGxhY2VtZW50IHtcbiAgICAgICAgcmV0dXJuIHRoaXMudGh5UGxhY2VtZW50IHx8IHRoaXMuY29uZmlnLnBsYWNlbWVudDtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSBuZ1pvbmU6IE5nWm9uZSxcbiAgICAgICAgcHJpdmF0ZSBlbGVtZW50UmVmOiBFbGVtZW50UmVmLFxuICAgICAgICBwcml2YXRlIGNoYW5nZURldGVjdG9yUmVmOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICAgICAgcHJpdmF0ZSBvdmVybGF5OiBPdmVybGF5LFxuICAgICAgICBwcml2YXRlIHRoeUNsaWNrRGlzcGF0Y2hlcjogVGh5Q2xpY2tEaXNwYXRjaGVyLFxuICAgICAgICBASW5qZWN0KFBMQVRGT1JNX0lEKSBwcml2YXRlIHBsYXRmb3JtSWQ6IHN0cmluZyxcbiAgICAgICAgQE9wdGlvbmFsKCkgQEluamVjdChUSFlfU0VMRUNUX1NDUk9MTF9TVFJBVEVHWSkgcHVibGljIHNjcm9sbFN0cmF0ZWd5RmFjdG9yeTogRnVuY3Rpb25Qcm9wPFNjcm9sbFN0cmF0ZWd5PixcbiAgICAgICAgQE9wdGlvbmFsKCkgQEluamVjdChUSFlfU0VMRUNUX0NPTkZJRykgcHVibGljIHNlbGVjdENvbmZpZzogVGh5U2VsZWN0Q29uZmlnXG4gICAgKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIHRoaXMuY29uZmlnID0geyAuLi5ERUZBVUxUX1NFTEVDVF9DT05GSUcsIC4uLnNlbGVjdENvbmZpZyB9O1xuICAgICAgICB0aGlzLmJ1aWxkU2Nyb2xsU3RyYXRlZ3koKTtcbiAgICB9XG5cbiAgICB3cml0ZVZhbHVlKHZhbHVlOiBhbnkpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5tb2RhbFZhbHVlID0gdmFsdWU7XG4gICAgICAgIHRoaXMuc2V0U2VsZWN0aW9uQnlNb2RlbFZhbHVlKHRoaXMubW9kYWxWYWx1ZSk7XG4gICAgfVxuXG4gICAgbmdPbkluaXQoKSB7XG4gICAgICAgIHRoaXMuZ2V0UG9zaXRpb25zKCk7XG4gICAgICAgIHRoaXMuZHJvcERvd25NaW5XaWR0aCA9IHRoaXMuZ2V0RHJvcGRvd25NaW5XaWR0aCgpO1xuICAgICAgICBpZiAoIXRoaXMuc2VsZWN0aW9uTW9kZWwpIHtcbiAgICAgICAgICAgIHRoaXMuaW5zdGFuY2VTZWxlY3Rpb25Nb2RlbCgpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuc2V0RHJvcERvd25DbGFzcygpO1xuXG4gICAgICAgIGlmIChpc1BsYXRmb3JtQnJvd3Nlcih0aGlzLnBsYXRmb3JtSWQpKSB7XG4gICAgICAgICAgICB0aGlzLnRoeUNsaWNrRGlzcGF0Y2hlclxuICAgICAgICAgICAgICAgIC5jbGlja2VkKDApXG4gICAgICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxuICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoZXZlbnQgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmNvbnRhaW5zKGV2ZW50LnRhcmdldCkgJiYgdGhpcy5wYW5lbE9wZW4pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubmdab25lLnJ1bigoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jbG9zZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgYnVpbGRPcHRpb25Hcm91cHMob3B0aW9uczogVGh5U2VsZWN0T3B0aW9uTW9kZWxbXSkge1xuICAgICAgICBjb25zdCBvcHRpb25Hcm91cHM6IFRoeU9wdGlvbkdyb3VwTW9kZWxbXSA9IFtdO1xuICAgICAgICBjb25zdCBncm91cHMgPSBbLi4ubmV3IFNldChvcHRpb25zLmZpbHRlcihpdGVtID0+IHRoaXMuZ3JvdXBCeShpdGVtKSkubWFwKHN1YiA9PiB0aGlzLmdyb3VwQnkoc3ViKSkpXTtcbiAgICAgICAgY29uc3QgZ3JvdXBNYXAgPSBuZXcgTWFwKCk7XG4gICAgICAgIGdyb3Vwcy5mb3JFYWNoKGdyb3VwID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGNoaWxkcmVuID0gb3B0aW9ucy5maWx0ZXIoaXRlbSA9PiB0aGlzLmdyb3VwQnkoaXRlbSkgPT09IGdyb3VwKTtcbiAgICAgICAgICAgIGNvbnN0IGdyb3VwT3B0aW9uID0ge1xuICAgICAgICAgICAgICAgIGdyb3VwTGFiZWw6IGdyb3VwLFxuICAgICAgICAgICAgICAgIGNoaWxkcmVuOiBjaGlsZHJlblxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGdyb3VwTWFwLnNldChncm91cCwgZ3JvdXBPcHRpb24pO1xuICAgICAgICB9KTtcbiAgICAgICAgb3B0aW9ucy5mb3JFYWNoKG9wdGlvbiA9PiB7XG4gICAgICAgICAgICBpZiAodGhpcy5ncm91cEJ5KG9wdGlvbikpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBjdXJyZW50SW5kZXggPSBvcHRpb25Hcm91cHMuZmluZEluZGV4KGl0ZW0gPT4gaXRlbS5ncm91cExhYmVsID09PSB0aGlzLmdyb3VwQnkob3B0aW9uKSk7XG4gICAgICAgICAgICAgICAgaWYgKGN1cnJlbnRJbmRleCA9PT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaXRlbSA9IGdyb3VwTWFwLmdldCh0aGlzLmdyb3VwQnkob3B0aW9uKSk7XG4gICAgICAgICAgICAgICAgICAgIG9wdGlvbkdyb3Vwcy5wdXNoKGl0ZW0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgb3B0aW9uR3JvdXBzLnB1c2gob3B0aW9uKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBvcHRpb25Hcm91cHM7XG4gICAgfVxuXG4gICAgYnVpbGRSZWFjdGl2ZU9wdGlvbnMoKSB7XG4gICAgICAgIGlmICh0aGlzLmlubmVyT3B0aW9ucy5maWx0ZXIoaXRlbSA9PiB0aGlzLmdyb3VwQnkoaXRlbSkpLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHRoaXMub3B0aW9uR3JvdXBzID0gdGhpcy5idWlsZE9wdGlvbkdyb3Vwcyh0aGlzLmlubmVyT3B0aW9ucyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLm9wdGlvbkdyb3VwcyA9IHRoaXMuaW5uZXJPcHRpb25zO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZ2V0RHJvcGRvd25NaW5XaWR0aCgpOiBudW1iZXIgfCBudWxsIHtcbiAgICAgICAgY29uc3QgbW9kZSA9IHRoaXMudGh5RHJvcGRvd25XaWR0aE1vZGUgfHwgdGhpcy5jb25maWcuZHJvcGRvd25XaWR0aE1vZGU7XG4gICAgICAgIGxldCBkcm9wZG93bk1pbldpZHRoOiBudW1iZXIgfCBudWxsID0gbnVsbDtcblxuICAgICAgICBpZiAoKG1vZGUgYXMgeyBtaW5XaWR0aDogbnVtYmVyIH0pPy5taW5XaWR0aCkge1xuICAgICAgICAgICAgZHJvcGRvd25NaW5XaWR0aCA9IChtb2RlIGFzIHsgbWluV2lkdGg6IG51bWJlciB9KS5taW5XaWR0aDtcbiAgICAgICAgfSBlbHNlIGlmIChtb2RlID09PSAnbWluLXdpZHRoJykge1xuICAgICAgICAgICAgZHJvcGRvd25NaW5XaWR0aCA9IFRIWV9TRUxFQ1RfUEFORUxfTUlOX1dJRFRIO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZHJvcGRvd25NaW5XaWR0aCA9IG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZHJvcGRvd25NaW5XaWR0aDtcbiAgICB9XG5cbiAgICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmlzUmVhY3RpdmVEcml2ZW4pIHtcbiAgICAgICAgICAgIHRoaXMuc2V0dXAoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG5nQWZ0ZXJDb250ZW50SW5pdCgpIHtcbiAgICAgICAgaWYgKCF0aGlzLmlzUmVhY3RpdmVEcml2ZW4pIHtcbiAgICAgICAgICAgIHRoaXMuc2V0dXAoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHNldHVwKCkge1xuICAgICAgICB0aGlzLm9wdGlvbnNDaGFuZ2VzJC5waXBlKHN0YXJ0V2l0aChudWxsKSwgdGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoZGF0YSA9PiB7XG4gICAgICAgICAgICB0aGlzLnJlc2V0T3B0aW9ucygpO1xuICAgICAgICAgICAgdGhpcy5pbml0aWFsaXplU2VsZWN0aW9uKCk7XG4gICAgICAgICAgICB0aGlzLmluaXRLZXlNYW5hZ2VyKCk7XG4gICAgICAgICAgICBpZiAodGhpcy5pc1NlYXJjaGluZykge1xuICAgICAgICAgICAgICAgIHRoaXMuaGlnaGxpZ2h0Q29ycmVjdE9wdGlvbihmYWxzZSk7XG4gICAgICAgICAgICAgICAgdGhpcy5pc1NlYXJjaGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgICAgIHRoaXMubmdab25lLm9uU3RhYmxlXG4gICAgICAgICAgICAgICAgLmFzT2JzZXJ2YWJsZSgpXG4gICAgICAgICAgICAgICAgLnBpcGUodGFrZSgxKSlcbiAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuY2RrQ29ubmVjdGVkT3ZlcmxheSAmJiB0aGlzLmNka0Nvbm5lY3RlZE92ZXJsYXkub3ZlcmxheVJlZikge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jZGtDb25uZWN0ZWRPdmVybGF5Lm92ZXJsYXlSZWYudXBkYXRlUG9zaXRpb24oKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcblxuICAgICAgICBpZiAodGhpcy50aHlBdXRvRXhwYW5kKSB7XG4gICAgICAgICAgICB0aW1lcigwKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5vcGVuKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5mb2N1cygpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGlzSGlkZGVuT3B0aW9ucygpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub3B0aW9ucy50b0FycmF5KCkuZXZlcnkob3B0aW9uID0+IG9wdGlvbi5oaWRkZW4pO1xuICAgIH1cblxuICAgIHB1YmxpYyBvbkF0dGFjaGVkKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmNka0Nvbm5lY3RlZE92ZXJsYXkucG9zaXRpb25DaGFuZ2UucGlwZSh0YWtlKDEpKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgaWYgKHRoaXMucGFuZWwpIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5rZXlNYW5hZ2VyLmFjdGl2ZUl0ZW0pIHtcbiAgICAgICAgICAgICAgICAgICAgU2Nyb2xsVG9TZXJ2aWNlLnNjcm9sbFRvRWxlbWVudCh0aGlzLmtleU1hbmFnZXIuYWN0aXZlSXRlbS5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQsIHRoaXMucGFuZWwubmF0aXZlRWxlbWVudCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5lbXB0eSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgU2Nyb2xsVG9TZXJ2aWNlLnNjcm9sbFRvRWxlbWVudCh0aGlzLnNlbGVjdGlvbk1vZGVsLnNlbGVjdGVkWzBdLmVsZW1lbnQubmF0aXZlRWxlbWVudCwgdGhpcy5wYW5lbC5uYXRpdmVFbGVtZW50KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZHJvcERvd25Nb3VzZU1vdmUoZXZlbnQ6IE1vdXNlRXZlbnQpIHtcbiAgICAgICAgaWYgKHRoaXMua2V5TWFuYWdlci5hY3RpdmVJdGVtKSB7XG4gICAgICAgICAgICB0aGlzLmtleU1hbmFnZXIuc2V0QWN0aXZlSXRlbSgtMSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgb25PcHRpb25zU2Nyb2xsZWQoZWxlbWVudFJlZjogRWxlbWVudFJlZikge1xuICAgICAgICBjb25zdCBzY3JvbGwgPSBlbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsVG9wLFxuICAgICAgICAgICAgaGVpZ2h0ID0gZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmNsaWVudEhlaWdodCxcbiAgICAgICAgICAgIHNjcm9sbEhlaWdodCA9IGVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5zY3JvbGxIZWlnaHQ7XG5cbiAgICAgICAgaWYgKHNjcm9sbCArIGhlaWdodCArIDEwID49IHNjcm9sbEhlaWdodCkge1xuICAgICAgICAgICAgaWYgKHRoaXMudGh5T25TY3JvbGxUb0JvdHRvbS5vYnNlcnZlcnMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIHRoaXMubmdab25lLnJ1bigoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudGh5T25TY3JvbGxUb0JvdHRvbS5lbWl0KCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgb25TZWFyY2hGaWx0ZXIoc2VhcmNoVGV4dDogc3RyaW5nKSB7XG4gICAgICAgIHNlYXJjaFRleHQgPSBzZWFyY2hUZXh0LnRyaW0oKTtcbiAgICAgICAgaWYgKHRoaXMudGh5U2VydmVyU2VhcmNoKSB7XG4gICAgICAgICAgICB0aGlzLmlzU2VhcmNoaW5nID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMudGh5T25TZWFyY2guZW1pdChzZWFyY2hUZXh0KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IG9wdGlvbnMgPSB0aGlzLm9wdGlvbnMudG9BcnJheSgpO1xuICAgICAgICAgICAgb3B0aW9ucy5mb3JFYWNoKG9wdGlvbiA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKG9wdGlvbi5tYXRjaFNlYXJjaFRleHQoc2VhcmNoVGV4dCkpIHtcbiAgICAgICAgICAgICAgICAgICAgb3B0aW9uLnNob3dPcHRpb24oKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBvcHRpb24uaGlkZU9wdGlvbigpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy5oaWdobGlnaHRDb3JyZWN0T3B0aW9uKGZhbHNlKTtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlQ2RrQ29ubmVjdGVkT3ZlcmxheVBvc2l0aW9ucygpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgb25CbHVyKGV2ZW50PzogRm9jdXNFdmVudCkge1xuICAgICAgICAvLyBUYWIg6IGa54Sm5ZCO6Ieq5Yqo6IGa54Sm5YiwIGlucHV0IOi+k+WFpeahhu+8jOatpOWIhuaUr+S4i+ebtOaOpei/lOWbnu+8jOaXoOmcgOinpuWPkSBvblRvdWNoZWRGblxuICAgICAgICBpZiAoZWxlbWVudE1hdGNoQ2xvc2VzdChldmVudD8ucmVsYXRlZFRhcmdldCBhcyBIVE1MRWxlbWVudCwgWycudGh5LXNlbGVjdC1kcm9wZG93bicsICd0aHktc2VsZWN0J10pKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5vblRvdWNoZWRGbigpO1xuICAgIH1cblxuICAgIG9uRm9jdXMoZXZlbnQ/OiBGb2N1c0V2ZW50KSB7XG4gICAgICAgIC8vIHRoeVNob3dTZWFyY2gg5LiOIHBhbmVsT3BlbiDlnYfkuLogdHJ1ZSDml7bvvIzngrnlh7sgdGh5U2VsZWN0Q29udHJvbCDpnIDopoHop6blj5Hoh6rliqjogZrnhKbliLAgaW5wdXQg55qE6YC76L6RXG4gICAgICAgIC8vIG1hbnVhbEZvY3VzaW5nIOWmguaenOaYr+aJi+WKqOiBmueEpu+8jOS4jeinpuWPkeiHquWKqOiBmueEpuWIsCBpbnB1dCDnmoTpgLvovpFcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgKHRoaXMudGh5U2hvd1NlYXJjaCAmJiB0aGlzLnBhbmVsT3BlbikgfHxcbiAgICAgICAgICAgICghdGhpcy5tYW51YWxGb2N1c2luZyAmJlxuICAgICAgICAgICAgICAgICFlbGVtZW50TWF0Y2hDbG9zZXN0KGV2ZW50Py5yZWxhdGVkVGFyZ2V0IGFzIEhUTUxFbGVtZW50LCBbJy50aHktc2VsZWN0LWRyb3Bkb3duJywgJ3RoeS1jdXN0b20tc2VsZWN0J10pKVxuICAgICAgICApIHtcbiAgICAgICAgICAgIGNvbnN0IGlucHV0RWxlbWVudDogSFRNTElucHV0RWxlbWVudCA9IHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJ2lucHV0Jyk7XG4gICAgICAgICAgICBpbnB1dEVsZW1lbnQuZm9jdXMoKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLm1hbnVhbEZvY3VzaW5nID0gZmFsc2U7XG4gICAgfVxuXG4gICAgcHVibGljIGZvY3VzKG9wdGlvbnM/OiBGb2N1c09wdGlvbnMpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5tYW51YWxGb2N1c2luZyA9IHRydWU7XG4gICAgICAgIHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmZvY3VzKG9wdGlvbnMpO1xuICAgICAgICB0aGlzLm1hbnVhbEZvY3VzaW5nID0gZmFsc2U7XG4gICAgfVxuXG4gICAgcHVibGljIHJlbW92ZSgkZXZlbnQ6IHsgaXRlbTogVGh5T3B0aW9uOyAkZXZlbnRPcmlnaW46IEV2ZW50IH0pIHtcbiAgICAgICAgJGV2ZW50LiRldmVudE9yaWdpbi5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgaWYgKHRoaXMuZGlzYWJsZWQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXRoaXMub3B0aW9ucy5maW5kKG9wdGlvbiA9PiBvcHRpb24gPT09ICRldmVudC5pdGVtKSkge1xuICAgICAgICAgICAgJGV2ZW50Lml0ZW0uZGVzZWxlY3QoKTtcbiAgICAgICAgICAgIC8vIGZpeCBvcHRpb24gdW5zZWxlY3QgY2FuIG5vdCBlbWl0IGNoYW5nZXM7XG4gICAgICAgICAgICB0aGlzLm9uU2VsZWN0KCRldmVudC5pdGVtLCB0cnVlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICRldmVudC5pdGVtLmRlc2VsZWN0KCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgY2xlYXJTZWxlY3RWYWx1ZShldmVudD86IEV2ZW50KSB7XG4gICAgICAgIGlmIChldmVudCkge1xuICAgICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuZGlzYWJsZWQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnNlbGVjdGlvbk1vZGVsLmNsZWFyKCk7XG4gICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCk7XG4gICAgICAgIHRoaXMuZW1pdE1vZGVsVmFsdWVDaGFuZ2UoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgdXBkYXRlQ2RrQ29ubmVjdGVkT3ZlcmxheVBvc2l0aW9ucygpOiB2b2lkIHtcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICBpZiAodGhpcy5jZGtDb25uZWN0ZWRPdmVybGF5ICYmIHRoaXMuY2RrQ29ubmVjdGVkT3ZlcmxheS5vdmVybGF5UmVmKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jZGtDb25uZWN0ZWRPdmVybGF5Lm92ZXJsYXlSZWYudXBkYXRlUG9zaXRpb24oKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBzZWxlY3RlZCgpOiBUaHlPcHRpb24gfCBUaHlPcHRpb25bXSB7XG4gICAgICAgIHJldHVybiB0aGlzLmlzTXVsdGlwbGUgPyB0aGlzLnNlbGVjdGlvbk1vZGVsLnNlbGVjdGVkIDogdGhpcy5zZWxlY3Rpb25Nb2RlbC5zZWxlY3RlZFswXTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGlzTXVsdGlwbGUoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLm1vZGUgPT09ICdtdWx0aXBsZSc7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBlbXB0eSgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuICF0aGlzLnNlbGVjdGlvbk1vZGVsIHx8IHRoaXMuc2VsZWN0aW9uTW9kZWwuaXNFbXB0eSgpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRJdGVtQ291bnQoKTogbnVtYmVyIHtcbiAgICAgICAgY29uc3QgZ3JvdXAgPSB0aGlzLmlzUmVhY3RpdmVEcml2ZW4gPyB0aGlzLnZpZXdHcm91cHMgOiB0aGlzLmNvbnRlbnRHcm91cHM7XG4gICAgICAgIHJldHVybiB0aGlzLm9wdGlvbnMubGVuZ3RoICsgZ3JvdXAubGVuZ3RoO1xuICAgIH1cblxuICAgIHB1YmxpYyB0b2dnbGUoZXZlbnQ6IE1vdXNlRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMucGFuZWxPcGVuKSB7XG4gICAgICAgICAgICBpZiAoIXRoaXMudGh5U2hvd1NlYXJjaCkge1xuICAgICAgICAgICAgICAgIHRoaXMuY2xvc2UoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMub3BlbigpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIG9wZW4oKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmRpc2FibGVkIHx8ICF0aGlzLm9wdGlvbnMgfHwgdGhpcy5wYW5lbE9wZW4pIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnRyaWdnZXJSZWN0V2lkdGggPSB0aGlzLmdldE9yaWdpblJlY3RXaWR0aCgpO1xuICAgICAgICB0aGlzLnN1YnNjcmliZVRyaWdnZXJSZXNpemUoKTtcbiAgICAgICAgdGhpcy5wYW5lbE9wZW4gPSB0cnVlO1xuICAgICAgICB0aGlzLmhpZ2hsaWdodENvcnJlY3RPcHRpb24oKTtcbiAgICAgICAgdGhpcy50aHlPbkV4cGFuZFN0YXR1c0NoYW5nZS5lbWl0KHRoaXMucGFuZWxPcGVuKTtcbiAgICAgICAgdGhpcy5jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgY2xvc2UoKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLnBhbmVsT3Blbikge1xuICAgICAgICAgICAgdGhpcy5wYW5lbE9wZW4gPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMudW5zdWJzY3JpYmVUcmlnZ2VyUmVzaXplKCk7XG4gICAgICAgICAgICB0aGlzLnRoeU9uRXhwYW5kU3RhdHVzQ2hhbmdlLmVtaXQodGhpcy5wYW5lbE9wZW4pO1xuICAgICAgICAgICAgdGhpcy5jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgICAgIHRoaXMub25Ub3VjaGVkRm4oKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgZW1pdE1vZGVsVmFsdWVDaGFuZ2UoKSB7XG4gICAgICAgIGNvbnN0IHNlbGVjdGVkVmFsdWVzID0gdGhpcy5zZWxlY3Rpb25Nb2RlbC5zZWxlY3RlZDtcbiAgICAgICAgY29uc3QgY2hhbmdlVmFsdWUgPSBzZWxlY3RlZFZhbHVlcy5tYXAoKG9wdGlvbjogVGh5T3B0aW9uKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gb3B0aW9uLnRoeVZhbHVlO1xuICAgICAgICB9KTtcbiAgICAgICAgaWYgKHRoaXMuaXNNdWx0aXBsZSkge1xuICAgICAgICAgICAgdGhpcy5tb2RhbFZhbHVlID0gY2hhbmdlVmFsdWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoY2hhbmdlVmFsdWUubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5tb2RhbFZhbHVlID0gbnVsbDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5tb2RhbFZhbHVlID0gY2hhbmdlVmFsdWVbMF07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5vbkNoYW5nZUZuKHRoaXMubW9kYWxWYWx1ZSk7XG4gICAgICAgIHRoaXMudXBkYXRlQ2RrQ29ubmVjdGVkT3ZlcmxheVBvc2l0aW9ucygpO1xuICAgIH1cblxuICAgIHByaXZhdGUgaGlnaGxpZ2h0Q29ycmVjdE9wdGlvbihmcm9tT3BlblBhbmVsOiBib29sZWFuID0gdHJ1ZSk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5rZXlNYW5hZ2VyICYmIHRoaXMucGFuZWxPcGVuKSB7XG4gICAgICAgICAgICBpZiAoZnJvbU9wZW5QYW5lbCkge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmtleU1hbmFnZXIuYWN0aXZlSXRlbSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmVtcHR5KSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy50aHlBdXRvQWN0aXZlRmlyc3RJdGVtKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5rZXlNYW5hZ2VyLnNldEZpcnN0SXRlbUFjdGl2ZSgpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMua2V5TWFuYWdlci5zZXRBY3RpdmVJdGVtKHRoaXMuc2VsZWN0aW9uTW9kZWwuc2VsZWN0ZWRbMF0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLnRoeUF1dG9BY3RpdmVGaXJzdEl0ZW0pIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyBhbHdheXMgc2V0IGZpcnN0IG9wdGlvbiBhY3RpdmVcbiAgICAgICAgICAgICAgICB0aGlzLmtleU1hbmFnZXIuc2V0Rmlyc3RJdGVtQWN0aXZlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGluaXRLZXlNYW5hZ2VyKCkge1xuICAgICAgICBpZiAodGhpcy5rZXlNYW5hZ2VyICYmIHRoaXMua2V5TWFuYWdlci5hY3RpdmVJdGVtKSB7XG4gICAgICAgICAgICB0aGlzLmtleU1hbmFnZXIuYWN0aXZlSXRlbS5zZXRJbmFjdGl2ZVN0eWxlcygpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMua2V5TWFuYWdlciA9IG5ldyBBY3RpdmVEZXNjZW5kYW50S2V5TWFuYWdlcjxUaHlPcHRpb24+KHRoaXMub3B0aW9ucylcbiAgICAgICAgICAgIC53aXRoVHlwZUFoZWFkKClcbiAgICAgICAgICAgIC53aXRoV3JhcCgpXG4gICAgICAgICAgICAud2l0aFZlcnRpY2FsT3JpZW50YXRpb24oKVxuICAgICAgICAgICAgLndpdGhBbGxvd2VkTW9kaWZpZXJLZXlzKFsnc2hpZnRLZXknXSk7XG5cbiAgICAgICAgdGhpcy5rZXlNYW5hZ2VyLnRhYk91dC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuZm9jdXMoKTtcbiAgICAgICAgICAgIHRoaXMuY2xvc2UoKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMua2V5TWFuYWdlci5jaGFuZ2UucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICBpZiAodGhpcy5wYW5lbE9wZW4gJiYgdGhpcy5wYW5lbCkge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmtleU1hbmFnZXIuYWN0aXZlSXRlbSkge1xuICAgICAgICAgICAgICAgICAgICBTY3JvbGxUb1NlcnZpY2Uuc2Nyb2xsVG9FbGVtZW50KHRoaXMua2V5TWFuYWdlci5hY3RpdmVJdGVtLmVsZW1lbnQubmF0aXZlRWxlbWVudCwgdGhpcy5wYW5lbC5uYXRpdmVFbGVtZW50KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2UgaWYgKCF0aGlzLnBhbmVsT3BlbiAmJiAhdGhpcy5pc011bHRpcGxlICYmIHRoaXMua2V5TWFuYWdlci5hY3RpdmVJdGVtKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5rZXlNYW5hZ2VyLmFjdGl2ZUl0ZW0uc2VsZWN0VmlhSW50ZXJhY3Rpb24oKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBoYW5kbGVDbG9zZWRLZXlkb3duKGV2ZW50OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGtleUNvZGUgPSBldmVudC5rZXlDb2RlO1xuICAgICAgICBjb25zdCBpc0Fycm93S2V5ID0ga2V5Q29kZSA9PT0gRE9XTl9BUlJPVyB8fCBrZXlDb2RlID09PSBVUF9BUlJPVyB8fCBrZXlDb2RlID09PSBMRUZUX0FSUk9XIHx8IGtleUNvZGUgPT09IFJJR0hUX0FSUk9XO1xuICAgICAgICBjb25zdCBpc09wZW5LZXkgPSBrZXlDb2RlID09PSBFTlRFUiB8fCBrZXlDb2RlID09PSBTUEFDRTtcbiAgICAgICAgY29uc3QgbWFuYWdlciA9IHRoaXMua2V5TWFuYWdlcjtcblxuICAgICAgICAvLyBPcGVuIHRoZSBzZWxlY3Qgb24gQUxUICsgYXJyb3cga2V5IHRvIG1hdGNoIHRoZSBuYXRpdmUgPHNlbGVjdD5cbiAgICAgICAgaWYgKChpc09wZW5LZXkgJiYgIWhhc01vZGlmaWVyS2V5KGV2ZW50KSkgfHwgKCh0aGlzLmlzTXVsdGlwbGUgfHwgZXZlbnQuYWx0S2V5KSAmJiBpc0Fycm93S2V5KSkge1xuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTsgLy8gcHJldmVudHMgdGhlIHBhZ2UgZnJvbSBzY3JvbGxpbmcgZG93biB3aGVuIHByZXNzaW5nIHNwYWNlXG4gICAgICAgICAgICB0aGlzLm9wZW4oKTtcbiAgICAgICAgfSBlbHNlIGlmICghdGhpcy5pc011bHRpcGxlKSB7XG4gICAgICAgICAgICBpZiAoa2V5Q29kZSA9PT0gSE9NRSB8fCBrZXlDb2RlID09PSBFTkQpIHtcbiAgICAgICAgICAgICAgICBrZXlDb2RlID09PSBIT01FID8gbWFuYWdlci5zZXRGaXJzdEl0ZW1BY3RpdmUoKSA6IG1hbmFnZXIuc2V0TGFzdEl0ZW1BY3RpdmUoKTtcbiAgICAgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBtYW5hZ2VyLm9uS2V5ZG93bihldmVudCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGhhbmRsZU9wZW5LZXlkb3duKGV2ZW50OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGtleUNvZGUgPSBldmVudC5rZXlDb2RlO1xuICAgICAgICBjb25zdCBpc0Fycm93S2V5ID0ga2V5Q29kZSA9PT0gRE9XTl9BUlJPVyB8fCBrZXlDb2RlID09PSBVUF9BUlJPVztcbiAgICAgICAgY29uc3QgbWFuYWdlciA9IHRoaXMua2V5TWFuYWdlcjtcblxuICAgICAgICBpZiAoa2V5Q29kZSA9PT0gSE9NRSB8fCBrZXlDb2RlID09PSBFTkQpIHtcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICBrZXlDb2RlID09PSBIT01FID8gbWFuYWdlci5zZXRGaXJzdEl0ZW1BY3RpdmUoKSA6IG1hbmFnZXIuc2V0TGFzdEl0ZW1BY3RpdmUoKTtcbiAgICAgICAgfSBlbHNlIGlmIChpc0Fycm93S2V5ICYmIGV2ZW50LmFsdEtleSkge1xuICAgICAgICAgICAgLy8gQ2xvc2UgdGhlIHNlbGVjdCBvbiBBTFQgKyBhcnJvdyBrZXkgdG8gbWF0Y2ggdGhlIG5hdGl2ZSA8c2VsZWN0PlxuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIHRoaXMuY2xvc2UoKTtcbiAgICAgICAgfSBlbHNlIGlmICgoa2V5Q29kZSA9PT0gRU5URVIgfHwga2V5Q29kZSA9PT0gU1BBQ0UpICYmIChtYW5hZ2VyLmFjdGl2ZUl0ZW0gfHwgIXRoaXMuZW1wdHkpICYmICFoYXNNb2RpZmllcktleShldmVudCkpIHtcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICBpZiAoIW1hbmFnZXIuYWN0aXZlSXRlbSkge1xuICAgICAgICAgICAgICAgIGlmIChtYW5hZ2VyLmFjdGl2ZUl0ZW1JbmRleCA9PT0gLTEgJiYgIXRoaXMuZW1wdHkpIHtcbiAgICAgICAgICAgICAgICAgICAgbWFuYWdlci5zZXRBY3RpdmVJdGVtKHRoaXMuc2VsZWN0aW9uTW9kZWwuc2VsZWN0ZWRbMF0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG1hbmFnZXIuYWN0aXZlSXRlbS5zZWxlY3RWaWFJbnRlcmFjdGlvbigpO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuaXNNdWx0aXBsZSAmJiBrZXlDb2RlID09PSBBICYmIGV2ZW50LmN0cmxLZXkpIHtcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICBjb25zdCBoYXNEZXNlbGVjdGVkT3B0aW9ucyA9IHRoaXMub3B0aW9ucy5zb21lKG9wdCA9PiAhb3B0LmRpc2FibGVkICYmICFvcHQuc2VsZWN0ZWQpO1xuXG4gICAgICAgICAgICB0aGlzLm9wdGlvbnMuZm9yRWFjaChvcHRpb24gPT4ge1xuICAgICAgICAgICAgICAgIGlmICghb3B0aW9uLmRpc2FibGVkKSB7XG4gICAgICAgICAgICAgICAgICAgIGhhc0Rlc2VsZWN0ZWRPcHRpb25zID8gb3B0aW9uLnNlbGVjdCgpIDogb3B0aW9uLmRlc2VsZWN0KCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAobWFuYWdlci5hY3RpdmVJdGVtSW5kZXggPT09IC0xICYmICF0aGlzLmVtcHR5KSB7XG4gICAgICAgICAgICAgICAgbWFuYWdlci5zZXRBY3RpdmVJdGVtKHRoaXMuc2VsZWN0aW9uTW9kZWwuc2VsZWN0ZWRbMF0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgcHJldmlvdXNseUZvY3VzZWRJbmRleCA9IG1hbmFnZXIuYWN0aXZlSXRlbUluZGV4O1xuXG4gICAgICAgICAgICBtYW5hZ2VyLm9uS2V5ZG93bihldmVudCk7XG5cbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICB0aGlzLmlzTXVsdGlwbGUgJiZcbiAgICAgICAgICAgICAgICBpc0Fycm93S2V5ICYmXG4gICAgICAgICAgICAgICAgZXZlbnQuc2hpZnRLZXkgJiZcbiAgICAgICAgICAgICAgICBtYW5hZ2VyLmFjdGl2ZUl0ZW0gJiZcbiAgICAgICAgICAgICAgICBtYW5hZ2VyLmFjdGl2ZUl0ZW1JbmRleCAhPT0gcHJldmlvdXNseUZvY3VzZWRJbmRleFxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgbWFuYWdlci5hY3RpdmVJdGVtLnNlbGVjdFZpYUludGVyYWN0aW9uKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGdldFBvc2l0aW9ucygpIHtcbiAgICAgICAgdGhpcy5kcm9wRG93blBvc2l0aW9ucyA9IGdldEZsZXhpYmxlUG9zaXRpb25zKHRoaXMudGh5UGxhY2VtZW50IHx8IHRoaXMuY29uZmlnLnBsYWNlbWVudCwgdGhpcy5kZWZhdWx0T2Zmc2V0KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGluc3RhbmNlU2VsZWN0aW9uTW9kZWwoKSB7XG4gICAgICAgIGlmICh0aGlzLnNlbGVjdGlvbk1vZGVsKSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGlvbk1vZGVsLmNsZWFyKCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zZWxlY3Rpb25Nb2RlbCA9IG5ldyBTZWxlY3Rpb25Nb2RlbDxUaHlPcHRpb24+KHRoaXMuaXNNdWx0aXBsZSk7XG4gICAgICAgIGlmICh0aGlzLnNlbGVjdGlvbk1vZGVsU3Vic2NyaXB0aW9uKSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGlvbk1vZGVsU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGlvbk1vZGVsU3Vic2NyaXB0aW9uID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnNlbGVjdGlvbk1vZGVsU3Vic2NyaXB0aW9uID0gdGhpcy5zZWxlY3Rpb25Nb2RlbC5jaGFuZ2VkLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoZXZlbnQgPT4ge1xuICAgICAgICAgICAgZXZlbnQuYWRkZWQuZm9yRWFjaChvcHRpb24gPT4gb3B0aW9uLnNlbGVjdCgpKTtcbiAgICAgICAgICAgIGV2ZW50LnJlbW92ZWQuZm9yRWFjaChvcHRpb24gPT4gb3B0aW9uLmRlc2VsZWN0KCkpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHJlc2V0T3B0aW9ucygpIHtcbiAgICAgICAgY29uc3QgY2hhbmdlZE9yRGVzdHJveWVkJCA9IG1lcmdlKHRoaXMub3B0aW9uc0NoYW5nZXMkLCB0aGlzLmRlc3Ryb3kkKTtcblxuICAgICAgICB0aGlzLm9wdGlvblNlbGVjdGlvbkNoYW5nZXMucGlwZSh0YWtlVW50aWwoY2hhbmdlZE9yRGVzdHJveWVkJCkpLnN1YnNjcmliZSgoZXZlbnQ6IFRoeU9wdGlvblNlbGVjdGlvbkNoYW5nZUV2ZW50KSA9PiB7XG4gICAgICAgICAgICB0aGlzLm9uU2VsZWN0KGV2ZW50Lm9wdGlvbiwgZXZlbnQuaXNVc2VySW5wdXQpO1xuICAgICAgICAgICAgaWYgKGV2ZW50LmlzVXNlcklucHV0ICYmICF0aGlzLmlzTXVsdGlwbGUgJiYgdGhpcy5wYW5lbE9wZW4pIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNsb3NlKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5mb2N1cygpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGluaXRpYWxpemVTZWxlY3Rpb24oKSB7XG4gICAgICAgIFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5zZXRTZWxlY3Rpb25CeU1vZGVsVmFsdWUodGhpcy5tb2RhbFZhbHVlKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZXREcm9wRG93bkNsYXNzKCkge1xuICAgICAgICBsZXQgbW9kZUNsYXNzID0gJyc7XG4gICAgICAgIGlmICh0aGlzLmlzTXVsdGlwbGUpIHtcbiAgICAgICAgICAgIG1vZGVDbGFzcyA9IGB0aHktc2VsZWN0LWRyb3Bkb3duLSR7dGhpcy5tb2RlfWA7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBtb2RlQ2xhc3MgPSBgdGh5LXNlbGVjdC1kcm9wZG93bi1zaW5nbGVgO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZHJvcERvd25DbGFzcyA9IHtcbiAgICAgICAgICAgIFtgdGh5LXNlbGVjdC1kcm9wZG93bmBdOiB0cnVlLFxuICAgICAgICAgICAgW21vZGVDbGFzc106IHRydWVcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHNldFNlbGVjdGlvbkJ5TW9kZWxWYWx1ZShtb2RhbFZhbHVlOiBhbnkpIHtcbiAgICAgICAgaWYgKGhlbHBlcnMuaXNVbmRlZmluZWRPck51bGwobW9kYWxWYWx1ZSkpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnNlbGVjdGlvbk1vZGVsLnNlbGVjdGVkLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGlvbk1vZGVsLmNsZWFyKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5pc011bHRpcGxlKSB7XG4gICAgICAgICAgICBpZiAoaXNBcnJheShtb2RhbFZhbHVlKSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHNlbGVjdGVkID0gWy4uLnRoaXMuc2VsZWN0aW9uTW9kZWwuc2VsZWN0ZWRdO1xuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uTW9kZWwuY2xlYXIoKTtcbiAgICAgICAgICAgICAgICAobW9kYWxWYWx1ZSBhcyBBcnJheTxhbnk+KS5mb3JFYWNoKGl0ZW1WYWx1ZSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG9wdGlvbiA9XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm9wdGlvbnMuZmluZChfb3B0aW9uID0+IF9vcHRpb24udGh5VmFsdWUgPT09IGl0ZW1WYWx1ZSkgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdGVkLmZpbmQoX29wdGlvbiA9PiBfb3B0aW9uLnRoeVZhbHVlID09PSBpdGVtVmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICBpZiAob3B0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGlvbk1vZGVsLnNlbGVjdChvcHRpb24pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBzZWxlY3RlZE9wdGlvbiA9IHRoaXMub3B0aW9ucz8uZmluZChvcHRpb24gPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiBvcHRpb24udGh5VmFsdWUgPT09IG1vZGFsVmFsdWU7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGlmIChzZWxlY3RlZE9wdGlvbikge1xuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uTW9kZWwuc2VsZWN0KHNlbGVjdGVkT3B0aW9uKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cblxuICAgIHByaXZhdGUgb25TZWxlY3Qob3B0aW9uOiBUaHlPcHRpb24sIGlzVXNlcklucHV0OiBib29sZWFuKSB7XG4gICAgICAgIGNvbnN0IHdhc1NlbGVjdGVkID0gdGhpcy5zZWxlY3Rpb25Nb2RlbC5pc1NlbGVjdGVkKG9wdGlvbik7XG5cbiAgICAgICAgaWYgKG9wdGlvbi50aHlWYWx1ZSA9PSBudWxsICYmICF0aGlzLmlzTXVsdGlwbGUpIHtcbiAgICAgICAgICAgIG9wdGlvbi5kZXNlbGVjdCgpO1xuICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25Nb2RlbC5jbGVhcigpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKHdhc1NlbGVjdGVkICE9PSBvcHRpb24uc2VsZWN0ZWQpIHtcbiAgICAgICAgICAgICAgICBvcHRpb24uc2VsZWN0ZWQgPyB0aGlzLnNlbGVjdGlvbk1vZGVsLnNlbGVjdChvcHRpb24pIDogdGhpcy5zZWxlY3Rpb25Nb2RlbC5kZXNlbGVjdChvcHRpb24pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoaXNVc2VySW5wdXQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmtleU1hbmFnZXIuc2V0QWN0aXZlSXRlbShvcHRpb24pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAodGhpcy5pc011bHRpcGxlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zb3J0VmFsdWVzKCk7XG4gICAgICAgICAgICAgICAgaWYgKGlzVXNlcklucHV0KSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZm9jdXMoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAod2FzU2VsZWN0ZWQgIT09IHRoaXMuc2VsZWN0aW9uTW9kZWwuaXNTZWxlY3RlZChvcHRpb24pKSB7XG4gICAgICAgICAgICB0aGlzLmVtaXRNb2RlbFZhbHVlQ2hhbmdlKCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCF0aGlzLmlzTXVsdGlwbGUpIHtcbiAgICAgICAgICAgIHRoaXMub25Ub3VjaGVkRm4oKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cblxuICAgIHByaXZhdGUgc29ydFZhbHVlcygpIHtcbiAgICAgICAgaWYgKHRoaXMuaXNNdWx0aXBsZSkge1xuICAgICAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHRoaXMub3B0aW9ucy50b0FycmF5KCk7XG5cbiAgICAgICAgICAgIGlmICh0aGlzLnRoeVNvcnRDb21wYXJhdG9yKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25Nb2RlbC5zb3J0KChhLCBiKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnRoeVNvcnRDb21wYXJhdG9yKGEsIGIsIG9wdGlvbnMpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRPcmlnaW5SZWN0V2lkdGgoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnRoeU9yaWdpbiA/IGNvZXJjZUVsZW1lbnQodGhpcy50aHlPcmlnaW4pLm9mZnNldFdpZHRoIDogdGhpcy50cmlnZ2VyLm5hdGl2ZUVsZW1lbnQub2Zmc2V0V2lkdGg7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzdWJzY3JpYmVUcmlnZ2VyUmVzaXplKCk6IHZvaWQge1xuICAgICAgICB0aGlzLnVuc3Vic2NyaWJlVHJpZ2dlclJlc2l6ZSgpO1xuICAgICAgICB0aGlzLm5nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnJlc2l6ZVN1YnNjcmlwdGlvbiA9IG5ldyBPYnNlcnZhYmxlPG51bWJlcj4ob2JzZXJ2ZXIgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlc2l6ZSA9IG5ldyBSZXNpemVPYnNlcnZlcigoZW50cmllczogUmVzaXplT2JzZXJ2ZXJFbnRyeVtdKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIG9ic2VydmVyLm5leHQoKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICByZXNpemUub2JzZXJ2ZSh0aGlzLnRyaWdnZXIubmF0aXZlRWxlbWVudCk7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgICAgICBzdGFydFdpdGgoKSxcbiAgICAgICAgICAgICAgICAgICAgbWFwKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmdldE9yaWdpblJlY3RXaWR0aCgpO1xuICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKCh3aWR0aDogbnVtYmVyKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubmdab25lLnJ1bigoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRyaWdnZXJSZWN0V2lkdGggPSB3aWR0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlQ2RrQ29ubmVjdGVkT3ZlcmxheVBvc2l0aW9ucygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgdW5zdWJzY3JpYmVUcmlnZ2VyUmVzaXplKCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5yZXNpemVTdWJzY3JpcHRpb24pIHtcbiAgICAgICAgICAgIHRoaXMucmVzaXplU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICB0aGlzLnJlc2l6ZVN1YnNjcmlwdGlvbiA9IG51bGw7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBuZ09uRGVzdHJveSgpIHtcbiAgICAgICAgdGhpcy51bnN1YnNjcmliZVRyaWdnZXJSZXNpemUoKTtcbiAgICAgICAgdGhpcy5kZXN0cm95JC5uZXh0KCk7XG4gICAgICAgIHRoaXMuZGVzdHJveSQuY29tcGxldGUoKTtcbiAgICB9XG59XG4iLCI8ZGl2XG4gIGNkay1vdmVybGF5LW9yaWdpblxuICB0aHlTZWxlY3RDb250cm9sXG4gIChjbGljayk9XCJ0b2dnbGUoJGV2ZW50KVwiXG4gICNvcmlnaW49XCJjZGtPdmVybGF5T3JpZ2luXCJcbiAgI3RyaWdnZXJcbiAgW3RoeVBhbmVsT3BlbmVkXT1cInBhbmVsT3BlblwiXG4gIFt0aHlTZWxlY3RlZE9wdGlvbnNdPVwic2VsZWN0ZWRcIlxuICBbdGh5SXNNdWx0aXBsZV09XCJpc011bHRpcGxlXCJcbiAgW3RoeVNob3dTZWFyY2hdPVwidGh5U2hvd1NlYXJjaFwiXG4gIFt0aHlBbGxvd0NsZWFyXT1cInRoeUFsbG93Q2xlYXJcIlxuICBbdGh5U2l6ZV09XCJ0aHlTaXplXCJcbiAgW3RoeVBsYWNlaG9sZGVyXT1cInRoeVBsYWNlSG9sZGVyXCJcbiAgW2N1c3RvbURpc3BsYXlUZW1wbGF0ZV09XCJzZWxlY3RlZFZhbHVlRGlzcGxheVJlZlwiXG4gIFt0aHlEaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gIFt0aHlCb3JkZXJsZXNzXT1cInRoeUJvcmRlcmxlc3NcIlxuICAodGh5T25DbGVhcik9XCJjbGVhclNlbGVjdFZhbHVlKCRldmVudClcIlxuICAodGh5T25SZW1vdmUpPVwicmVtb3ZlKCRldmVudClcIlxuICAodGh5T25TZWFyY2gpPVwib25TZWFyY2hGaWx0ZXIoJGV2ZW50KVwiXG4gICh0aHlPbkJsdXIpPVwib25CbHVyKCRldmVudClcIlxuICBbdGh5TWF4VGFnQ291bnRdPVwidGh5TWF4VGFnQ291bnRcIlxuICBbdGh5UHJlc2V0XT1cInRoeVByZXNldFwiPjwvZGl2PlxuXG48bmctdGVtcGxhdGVcbiAgY2RrLWNvbm5lY3RlZC1vdmVybGF5XG4gIGNka0Nvbm5lY3RlZE92ZXJsYXlCYWNrZHJvcENsYXNzPVwiY2RrLW92ZXJsYXktdHJhbnNwYXJlbnQtYmFja2Ryb3BcIlxuICBbY2RrQ29ubmVjdGVkT3ZlcmxheUhhc0JhY2tkcm9wXT1cInRoeUhhc0JhY2tkcm9wXCJcbiAgW2Nka0Nvbm5lY3RlZE92ZXJsYXlQb3NpdGlvbnNdPVwiZHJvcERvd25Qb3NpdGlvbnNcIlxuICBbY2RrQ29ubmVjdGVkT3ZlcmxheU9yaWdpbl09XCJ0aHlPcmlnaW4gfHwgb3JpZ2luXCJcbiAgW2Nka0Nvbm5lY3RlZE92ZXJsYXlPcGVuXT1cInBhbmVsT3BlblwiXG4gIFtjZGtDb25uZWN0ZWRPdmVybGF5V2lkdGhdPVwidHJpZ2dlclJlY3RXaWR0aFwiXG4gIFtjZGtDb25uZWN0ZWRPdmVybGF5TWluV2lkdGhdPVwiZHJvcERvd25NaW5XaWR0aFwiXG4gIFtjZGtDb25uZWN0ZWRPdmVybGF5U2Nyb2xsU3RyYXRlZ3ldPVwic2Nyb2xsU3RyYXRlZ3lcIlxuICBjZGtDb25uZWN0ZWRPdmVybGF5VHJhbnNmb3JtT3JpZ2luT249XCIudGh5LXNlbGVjdC1kcm9wZG93blwiXG4gIChhdHRhY2gpPVwib25BdHRhY2hlZCgpXCJcbiAgKGRldGFjaCk9XCJjbG9zZSgpXCI+XG4gIDxkaXZcbiAgICB0aHlTdG9wUHJvcGFnYXRpb25cbiAgICBbYXR0ci50YWJpbmRleF09XCItMVwiXG4gICAgW25nQ2xhc3NdPVwiZHJvcERvd25DbGFzc1wiXG4gICAgW0BzY2FsZVlNb3Rpb25dPVwicGxhY2VtZW50ID09PSAndG9wJyB8fCBwbGFjZW1lbnQgPT09ICdib3R0b20nID8gJ2VudGVyJyA6ICd2b2lkJ1wiXG4gICAgW0BzY2FsZVhNb3Rpb25dPVwicGxhY2VtZW50ID09PSAnbGVmdCcgfHwgcGxhY2VtZW50ID09PSAncmlnaHQnID8gJ2VudGVyJyA6ICd2b2lkJ1wiXG4gICAgW0BzY2FsZU1vdGlvbl09XCJwbGFjZW1lbnQgIT09ICd0b3AnICYmIHBsYWNlbWVudCAhPT0gJ2JvdHRvbScgJiYgcGxhY2VtZW50ICE9PSAnbGVmdCcgJiYgcGxhY2VtZW50ICE9PSAncmlnaHQnID8gJ2VudGVyJyA6ICd2b2lkJ1wiXG4gICAgKG1vdXNlbW92ZSk9XCJkcm9wRG93bk1vdXNlTW92ZSgkZXZlbnQpXCI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNvbnRlbnRPcHRpb25zPy5sZW5ndGggPiAwIHx8IGNvbnRlbnRHcm91cHM/Lmxlbmd0aCA+IDAgfHwgaW5uZXJPcHRpb25zPy5sZW5ndGggPiAwOyBlbHNlIGVtcHR5UGxhY2Vob2xkZXJcIj5cbiAgICAgIDxkaXZcbiAgICAgICAgI3BhbmVsXG4gICAgICAgIGNsYXNzPVwidGh5LXNlbGVjdC1kcm9wZG93bi1vcHRpb25zIHRoeS1zZWxlY3QtZHJvcGRvd24tb3B0aW9ucy17eyBzaXplIH19XCJcbiAgICAgICAgdGh5U2Nyb2xsXG4gICAgICAgICh0aHlPblNjcm9sbGVkKT1cIm9uT3B0aW9uc1Njcm9sbGVkKCRldmVudClcIlxuICAgICAgICBbdGh5RW5hYmxlXT1cInRoeUVuYWJsZVNjcm9sbExvYWRcIj5cbiAgICAgICAgPG5nLXRlbXBsYXRlICpuZ0lmPVwiaXNSZWFjdGl2ZURyaXZlblwiIFtuZ1RlbXBsYXRlT3V0bGV0XT1cIm9wdGlvbnNDb250YWluZXIub3B0aW9uc1RlbXBsYXRlXCI+PC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaXNIaWRkZW5PcHRpb25zXCI+XG4gICAgICAgICAgPHRoeS1sb2FkaW5nIFt0aHlEb25lXT1cInRoeUxvYWRTdGF0ZVwiIHRoeVNpemU9XCJzbVwiPjwvdGh5LWxvYWRpbmc+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInRoeS1zZWxlY3QtZW1wdHktY29udGVudFwiPlxuICAgICAgICAgICAgPHRoeS1lbXB0eSAqbmdJZj1cInRoeUxvYWRTdGF0ZVwiIFt0aHlNZXNzYWdlXT1cImVtcHR5U2VhcmNoTWVzc2FnZVRleHRcIiB0aHlTaXplPVwic21cIj48L3RoeS1lbXB0eT5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8L2Rpdj5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8bmctdGVtcGxhdGUgI2VtcHR5UGxhY2Vob2xkZXI+XG4gICAgICA8dGh5LWxvYWRpbmcgW3RoeURvbmVdPVwidGh5TG9hZFN0YXRlXCIgdGh5U2l6ZT1cInNtXCI+PC90aHktbG9hZGluZz5cbiAgICAgIDxkaXYgY2xhc3M9XCJ0aHktc2VsZWN0LWVtcHR5LWNvbnRlbnRcIj5cbiAgICAgICAgPHRoeS1lbXB0eSAqbmdJZj1cInRoeUxvYWRTdGF0ZVwiIFt0aHlNZXNzYWdlXT1cImVtcHR5U3RhdGVUZXh0XCIgdGh5U2l6ZT1cInNtXCI+PC90aHktZW1wdHk+XG4gICAgICA8L2Rpdj5cbiAgICA8L25nLXRlbXBsYXRlPlxuICAgIDxkaXYgKm5nSWY9XCJ0aHlGb290ZXJUZW1wbGF0ZVwiIFtjbGFzc109XCJ0aHlGb290ZXJDbGFzcyA/IHRoeUZvb3RlckNsYXNzIDogJ3RoeS1jdXN0b20tc2VsZWN0LWZvb3RlcidcIj5cbiAgICAgIDxuZy10ZW1wbGF0ZSAqbmdJZj1cInRoeUZvb3RlclRlbXBsYXRlXCIgW25nVGVtcGxhdGVPdXRsZXRdPVwidGh5Rm9vdGVyVGVtcGxhdGVcIj48L25nLXRlbXBsYXRlPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG5cbjx0aHktb3B0aW9ucy1jb250YWluZXIgI29wdGlvbnNDb250YWluZXI+XG4gIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IG9wdGlvbiBvZiBvcHRpb25Hcm91cHNcIj5cbiAgICA8dGh5LW9wdGlvblxuICAgICAgKm5nSWY9XCIhb3B0aW9uLmNoaWxkcmVuOyBlbHNlIG9wdGlvbkdyb3VwXCJcbiAgICAgIFt0aHlEaXNhYmxlZF09XCJvcHRpb24uZGlzYWJsZWRcIlxuICAgICAgW3RoeUxhYmVsVGV4dF09XCJvcHRpb24ubGFiZWxcIlxuICAgICAgW3RoeVZhbHVlXT1cIm9wdGlvbi52YWx1ZVwiXG4gICAgICBbdGh5UmF3VmFsdWVdPVwib3B0aW9uXCI+PC90aHktb3B0aW9uPlxuICAgIDxuZy10ZW1wbGF0ZSAjb3B0aW9uR3JvdXA+XG4gICAgICA8dGh5LW9wdGlvbi1ncm91cCBbdGh5R3JvdXBMYWJlbF09XCJvcHRpb24uZ3JvdXBMYWJlbFwiPlxuICAgICAgICA8dGh5LW9wdGlvblxuICAgICAgICAgICpuZ0Zvcj1cImxldCBzdWIgb2Ygb3B0aW9uLmNoaWxkcmVuXCJcbiAgICAgICAgICBbdGh5RGlzYWJsZWRdPVwic3ViLmRpc2FibGVkXCJcbiAgICAgICAgICBbdGh5TGFiZWxUZXh0XT1cInN1Yi5sYWJlbFwiXG4gICAgICAgICAgW3RoeVZhbHVlXT1cInN1Yi52YWx1ZVwiXG4gICAgICAgICAgW3RoeVJhd1ZhbHVlXT1cInN1YlwiPjwvdGh5LW9wdGlvbj5cbiAgICAgIDwvdGh5LW9wdGlvbi1ncm91cD5cbiAgICA8L25nLXRlbXBsYXRlPlxuICA8L25nLWNvbnRhaW5lcj5cbjwvdGh5LW9wdGlvbnMtY29udGFpbmVyPlxuIl19
|
|
913
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3VzdG9tLXNlbGVjdC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvc2VsZWN0L2N1c3RvbS1zZWxlY3QvY3VzdG9tLXNlbGVjdC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9zcmMvc2VsZWN0L2N1c3RvbS1zZWxlY3QvY3VzdG9tLXNlbGVjdC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0gsb0JBQW9CLEVBQ3BCLFdBQVcsRUFDWCxZQUFZLEVBQ1osWUFBWSxFQUNaLGVBQWUsRUFDZix5Q0FBeUMsRUFDekMsa0JBQWtCLEVBRXJCLE1BQU0saUJBQWlCLENBQUM7QUFDekIsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQzVDLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUNoRCxPQUFPLEVBR0gsMkJBQTJCLEVBQzNCLFNBQVMsRUFDVCxtQkFBbUIsRUFFbkIsa0JBQWtCLEVBQ2xCLGdCQUFnQixFQUNoQixvQkFBb0IsRUFDcEIsMkJBQTJCLEVBQzlCLE1BQU0sbUJBQW1CLENBQUM7QUFDM0IsT0FBTyxFQUNILENBQUMsRUFDRCxVQUFVLEVBQ1YsbUJBQW1CLEVBQ25CLEdBQUcsRUFDSCxLQUFLLEVBRUwsY0FBYyxFQUNkLE9BQU8sRUFDUCxJQUFJLEVBQ0osT0FBTyxFQUNQLFVBQVUsRUFDVixVQUFVLEVBQ1YsV0FBVyxFQUNYLEtBQUssRUFDTCxRQUFRLEVBQ1gsTUFBTSxpQkFBaUIsQ0FBQztBQUN6QixPQUFPLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUUsT0FBTyxFQUFnQixLQUFLLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDOUUsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFMUcsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDL0QsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ3RELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsZ0JBQWdCLEVBQTBCLE9BQU8sRUFBa0IsTUFBTSxzQkFBc0IsQ0FBQztBQUM5SCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUM1RixPQUFPLEVBR0gsZ0JBQWdCLEVBQ2hCLHVCQUF1QixFQUN2QixpQkFBaUIsRUFDakIsU0FBUyxFQUNULFlBQVksRUFDWixlQUFlLEVBQ2YsVUFBVSxFQUNWLFlBQVksRUFDWixVQUFVLEVBQ1YsV0FBVyxFQUNYLFlBQVksRUFDWixNQUFNLEVBQ04sS0FBSyxFQUNMLE1BQU0sRUFDTixlQUFlLEVBR2YsUUFBUSxFQUNSLE1BQU0sRUFDTixXQUFXLEVBQ1gsU0FBUyxFQUNULFdBQVcsRUFDWCxTQUFTLEVBQ1QsWUFBWSxFQUNmLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBd0IsaUJBQWlCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUV6RSxPQUFPLEVBQ0gscUJBQXFCLEVBQ3JCLGlCQUFpQixFQUNqQiwwQkFBMEIsRUFHN0IsTUFBTSxrQkFBa0IsQ0FBQzs7OztBQU0xQixNQUFNLENBQUMsTUFBTSx1QkFBdUIsR0FBRyxHQUFHLENBQUM7QUFFM0MsTUFBTSxDQUFDLE1BQU0sd0JBQXdCLEdBQUcsRUFBRSxDQUFDO0FBRTNDLE1BQU0sQ0FBQyxNQUFNLDhCQUE4QixHQUFHLEVBQUUsQ0FBQztBQUVqRCxNQUFNLENBQUMsTUFBTSx3QkFBd0IsR0FBRyxFQUFFLENBQUM7QUFFM0MsTUFBTSxDQUFDLE1BQU0sMEJBQTBCLEdBQUcsR0FBRyxDQUFDO0FBc0I5QyxNQUFNLElBQUksR0FBRyxHQUFHLEVBQUUsR0FBRSxDQUFDLENBQUM7QUFFdEI7Ozs7R0FJRztBQXlDSCxNQUFNLE9BQU8sU0FDVCxTQUFRLHlDQUF5QztJQWlIakQ7OztPQUdHO0lBQ0gsSUFDSSxPQUFPLENBQUMsS0FBaUI7UUFDekIsSUFBSSxDQUFDLElBQUksR0FBRyxLQUFLLENBQUM7UUFDbEIsSUFBSSxDQUFDLHNCQUFzQixFQUFFLENBQUM7UUFDOUIsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQ3BCLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO0lBQzVCLENBQUM7SUFFRCxJQUFJLE9BQU87UUFDUCxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUM7SUFDckIsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxJQUNJLE9BQU87UUFDUCxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUM7SUFDckIsQ0FBQztJQUNELElBQUksT0FBTyxDQUFDLEtBQXdCO1FBQ2hDLElBQUksQ0FBQyxJQUFJLEdBQUcsS0FBSyxDQUFDO0lBQ3RCLENBQUM7SUFFRDs7T0FFRztJQUNILElBQ0ksaUJBQWlCLENBQUMsS0FBYTtRQUMvQixJQUFJLENBQUMsY0FBYyxHQUFHLEtBQUssQ0FBQztJQUNoQyxDQUFDO0lBRUQ7O09BRUc7SUFDSCxJQUNJLHlCQUF5QixDQUFDLEtBQWE7UUFDdkMsSUFBSSxDQUFDLHNCQUFzQixHQUFHLEtBQUssQ0FBQztJQUN4QyxDQUFDO0lBYUQ7OztPQUdHO0lBQ0gsSUFDSSxXQUFXLENBQUMsS0FBYztRQUMxQixJQUFJLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQztJQUMxQixDQUFDO0lBQ0QsSUFBSSxXQUFXO1FBQ1gsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDO0lBQ3pCLENBQUM7SUFtRUQ7OztPQUdHO0lBQ0gsSUFDSSxVQUFVLENBQUMsS0FBNkI7UUFDeEMsSUFBSSxLQUFLLEtBQUssSUFBSSxFQUFFLENBQUM7WUFDakIsS0FBSyxHQUFHLEVBQUUsQ0FBQztRQUNmLENBQUM7UUFDRCxJQUFJLENBQUMsWUFBWSxHQUFHLEtBQUssQ0FBQztRQUMxQixJQUFJLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDO1FBQzdCLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO0lBQ2hDLENBQUM7SUE2QkQsYUFBYSxDQUFDLEtBQW9CO1FBQzlCLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDakIsSUFBSSxLQUFLLENBQUMsT0FBTyxLQUFLLEtBQUssRUFBRSxDQUFDO2dCQUMxQixLQUFLLENBQUMsZUFBZSxFQUFFLENBQUM7WUFDNUIsQ0FBQztZQUNELElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3JGLENBQUM7SUFDTCxDQUFDO0lBRUQsSUFBSSxlQUFlO1FBQ2YsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUM7UUFDOUUsSUFBSSxlQUFlLEdBQWdCLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDMUQsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQzVCLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUNQLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUNsQyxDQUFDLENBQUMsRUFDRixNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDVixNQUFNLEdBQUcsR0FBRyxlQUFlLENBQUMsTUFBTSxLQUFLLElBQUksQ0FBQyxNQUFNLElBQUksZUFBZSxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsRUFBRSxLQUFLLEVBQUUsRUFBRSxDQUFDLEVBQUUsS0FBSyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztZQUM5RyxlQUFlLEdBQUcsSUFBSSxDQUFDO1lBQ3ZCLE9BQU8sR0FBRyxDQUFDO1FBQ2YsQ0FBQyxDQUFDLENBQ0wsQ0FBQztJQUNOLENBQUM7SUFFTyxtQkFBbUI7UUFDdkIsSUFBSSxJQUFJLENBQUMscUJBQXFCLElBQUksVUFBVSxDQUFDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxFQUFFLENBQUM7WUFDdkUsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUMscUJBQXFCLEVBQUUsQ0FBQztRQUN2RCxDQUFDO2FBQU0sQ0FBQztZQUNKLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUNyRSxDQUFDO0lBQ0wsQ0FBQztJQU1ELElBQUksU0FBUztRQUNULE9BQU8sSUFBSSxDQUFDLFlBQVksSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQztJQUN0RCxDQUFDO0lBRUQsWUFDWSxNQUFjLEVBQ2QsVUFBc0IsRUFDdEIsaUJBQW9DLEVBQ3BDLE9BQWdCLEVBQ2hCLGtCQUFzQyxFQUNqQixVQUFrQixFQUNRLHFCQUFtRCxFQUM1RCxZQUE2QjtRQUUzRSxLQUFLLEVBQUUsQ0FBQztRQVRBLFdBQU0sR0FBTixNQUFNLENBQVE7UUFDZCxlQUFVLEdBQVYsVUFBVSxDQUFZO1FBQ3RCLHNCQUFpQixHQUFqQixpQkFBaUIsQ0FBbUI7UUFDcEMsWUFBTyxHQUFQLE9BQU8sQ0FBUztRQUNoQix1QkFBa0IsR0FBbEIsa0JBQWtCLENBQW9CO1FBQ2pCLGVBQVUsR0FBVixVQUFVLENBQVE7UUFDUSwwQkFBcUIsR0FBckIscUJBQXFCLENBQThCO1FBQzVELGlCQUFZLEdBQVosWUFBWSxDQUFpQjtRQTVVL0UsYUFBUSxHQUFHLEtBQUssQ0FBQztRQUlqQixTQUFJLEdBQWUsRUFBRSxDQUFDO1FBRXRCLG1CQUFjLEdBQUcsT0FBTyxDQUFDO1FBRXpCLDJCQUFzQixHQUFHLE9BQU8sQ0FBQztRQUVqQyxjQUFTLEdBQUcsQ0FBQyxDQUFDO1FBRWQsZUFBVSxHQUFRLElBQUksQ0FBQztRQUV2QixrQkFBYSxHQUFHLENBQUMsQ0FBQztRQUlsQixxQkFBZ0IsR0FBa0IsSUFBSSxDQUFDO1FBb0J2Qzs7V0FFRztRQUNLLG1CQUFjLEdBQUcsS0FBSyxDQUFDO1FBSWQsYUFBUSxHQUFHLElBQUksT0FBTyxFQUFRLENBQUM7UUFFdkMsMkJBQXNCLEdBQThDLEtBQUssQ0FBQyxHQUFHLEVBQUU7WUFDcEYsSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7Z0JBQ2YsT0FBTyxLQUFLLENBQUMsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDO1lBQ3hFLENBQUM7WUFDRCxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLFlBQVksRUFBRSxDQUFDLElBQUksQ0FDM0MsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUNQLFNBQVMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsc0JBQXNCLENBQUMsQ0FDL0MsQ0FBQztRQUNOLENBQUMsQ0FBOEMsQ0FBQztRQUlSLG1CQUFjLEdBQUcsSUFBSSxDQUFDO1FBRTdCLGFBQVEsR0FBRyxJQUFJLENBQUM7UUFLakQsY0FBUyxHQUFHLEtBQUssQ0FBQztRQUVsQjs7V0FFRztRQUNPLGdCQUFXLEdBQXlCLElBQUksWUFBWSxFQUFVLENBQUM7UUFFekU7O1dBRUc7UUFDTyx3QkFBbUIsR0FBdUIsSUFBSSxZQUFZLEVBQVEsQ0FBQztRQUU3RTs7V0FFRztRQUNPLDRCQUF1QixHQUEwQixJQUFJLFlBQVksRUFBVyxDQUFDO1FBbUJ2Rjs7V0FFRztRQUNxQyxpQkFBWSxHQUFHLElBQUksQ0FBQztRQUU1RDs7V0FFRztRQUNxQywyQkFBc0IsR0FBRyxJQUFJLENBQUM7UUErQ3RFOztXQUVHO1FBRUgsd0JBQW1CLEdBQUcsS0FBSyxDQUFDO1FBRTVCOztXQUVHO1FBQ3FDLGtCQUFhLEdBQUcsS0FBSyxDQUFDO1FBdUM5RDs7V0FFRztRQUVILG1CQUFjLEdBQUcsMEJBQTBCLENBQUM7UUFhNUM7O1dBRUc7UUFFSCxtQkFBYyxHQUFHLEtBQUssQ0FBQztRQUV2Qjs7V0FFRztRQUNvQyxtQkFBYyxHQUFHLENBQUMsQ0FBQztRQUUxRDs7O1dBR0c7UUFDcUMsa0JBQWEsR0FBRyxLQUFLLENBQUM7UUFFOUQscUJBQWdCLEdBQUcsS0FBSyxDQUFDO1FBSXpCLGlCQUFZLEdBQTBCLEVBQUUsQ0FBQztRQWtCekM7OztXQUdHO1FBQ00sY0FBUyxHQUFXLEVBQUUsQ0FBQztRQXFEeEIsZ0JBQVcsR0FBRyxLQUFLLENBQUM7UUFFNUIsWUFBTyxHQUFHLENBQUMsSUFBMEIsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQztRQWlCdEQsSUFBSSxDQUFDLE1BQU0sR0FBRyxFQUFFLEdBQUcscUJBQXFCLEVBQUUsR0FBRyxZQUFZLEVBQUUsQ0FBQztRQUM1RCxJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztJQUMvQixDQUFDO0lBRUQsVUFBVSxDQUFDLEtBQVU7UUFDakIsSUFBSSxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUM7UUFDeEIsSUFBSSxDQUFDLHdCQUF3QixDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUNuRCxDQUFDO0lBRUQsUUFBUTtRQUNKLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUNwQixJQUFJLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUM7UUFDbkQsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUN2QixJQUFJLENBQUMsc0JBQXNCLEVBQUUsQ0FBQztRQUNsQyxDQUFDO1FBQ0QsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7UUFFeEIsSUFBSSxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQztZQUNyQyxJQUFJLENBQUMsa0JBQWtCO2lCQUNsQixPQUFPLENBQUMsQ0FBQyxDQUFDO2lCQUNWLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO2lCQUM5QixTQUFTLENBQUMsS0FBSyxDQUFDLEVBQUU7Z0JBQ2YsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO29CQUMxRSxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUU7d0JBQ2pCLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQzt3QkFDYixJQUFJLENBQUMsaUJBQWlCLENBQUMsWUFBWSxFQUFFLENBQUM7b0JBQzFDLENBQUMsQ0FBQyxDQUFDO2dCQUNQLENBQUM7WUFDTCxDQUFDLENBQUMsQ0FBQztRQUNYLENBQUM7SUFDTCxDQUFDO0lBRUQsaUJBQWlCLENBQUMsT0FBK0I7UUFDN0MsTUFBTSxZQUFZLEdBQTBCLEVBQUUsQ0FBQztRQUMvQyxNQUFNLE1BQU0sR0FBRyxDQUFDLEdBQUcsSUFBSSxHQUFHLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3RHLE1BQU0sUUFBUSxHQUFHLElBQUksR0FBRyxFQUFFLENBQUM7UUFDM0IsTUFBTSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUNuQixNQUFNLFFBQVEsR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxLQUFLLENBQUMsQ0FBQztZQUN0RSxNQUFNLFdBQVcsR0FBRztnQkFDaEIsVUFBVSxFQUFFLEtBQUs7Z0JBQ2pCLFFBQVEsRUFBRSxRQUFRO2FBQ3JCLENBQUM7WUFDRixRQUFRLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxXQUFXLENBQUMsQ0FBQztRQUNyQyxDQUFDLENBQUMsQ0FBQztRQUNILE9BQU8sQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEVBQUU7WUFDckIsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7Z0JBQ3ZCLE1BQU0sWUFBWSxHQUFHLFlBQVksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsVUFBVSxLQUFLLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztnQkFDOUYsSUFBSSxZQUFZLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQztvQkFDdEIsTUFBTSxJQUFJLEdBQUcsUUFBUSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7b0JBQ2hELFlBQVksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQzVCLENBQUM7WUFDTCxDQUFDO2lCQUFNLENBQUM7Z0JBQ0osWUFBWSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUM5QixDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQUM7UUFDSCxPQUFPLFlBQVksQ0FBQztJQUN4QixDQUFDO0lBRUQsb0JBQW9CO1FBQ2hCLElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQ2xFLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUNsRSxDQUFDO2FBQU0sQ0FBQztZQUNKLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQztRQUMxQyxDQUFDO0lBQ0wsQ0FBQztJQUVELG1CQUFtQjtRQUNmLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxvQkFBb0IsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLGlCQUFpQixDQUFDO1FBQ3hFLElBQUksZ0JBQWdCLEdBQWtCLElBQUksQ0FBQztRQUUzQyxJQUFLLElBQTZCLEVBQUUsUUFBUSxFQUFFLENBQUM7WUFDM0MsZ0JBQWdCLEdBQUksSUFBNkIsQ0FBQyxRQUFRLENBQUM7UUFDL0QsQ0FBQzthQUFNLElBQUksSUFBSSxLQUFLLFdBQVcsRUFBRSxDQUFDO1lBQzlCLGdCQUFnQixHQUFHLDBCQUEwQixDQUFDO1FBQ2xELENBQUM7YUFBTSxDQUFDO1lBQ0osZ0JBQWdCLEdBQUcsSUFBSSxDQUFDO1FBQzVCLENBQUM7UUFFRCxPQUFPLGdCQUFnQixDQUFDO0lBQzVCLENBQUM7SUFFRCxlQUFlO1FBQ1gsSUFBSSxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztZQUN4QixJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDakIsQ0FBQztJQUNMLENBQUM7SUFFRCxrQkFBa0I7UUFDZCxJQUFJLENBQUMsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7WUFDekIsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ2pCLENBQUM7SUFDTCxDQUFDO0lBRUQsS0FBSztRQUNELElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsRUFBRSxTQUFTLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxFQUFFO1lBQ2xGLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUNwQixJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztZQUMzQixJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7WUFDdEIsSUFBSSxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7Z0JBQ25CLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDbkMsSUFBSSxDQUFDLFdBQVcsR0FBRyxLQUFLLENBQUM7WUFDN0IsQ0FBQztZQUNELElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUN0QyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVE7aUJBQ2YsWUFBWSxFQUFFO2lCQUNkLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7aUJBQ2IsU0FBUyxDQUFDLEdBQUcsRUFBRTtnQkFDWixJQUFJLElBQUksQ0FBQyxtQkFBbUIsSUFBSSxJQUFJLENBQUMsbUJBQW1CLENBQUMsVUFBVSxFQUFFLENBQUM7b0JBQ2xFLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxVQUFVLENBQUMsY0FBYyxFQUFFLENBQUM7Z0JBQ3pELENBQUM7WUFDTCxDQUFDLENBQUMsQ0FBQztRQUNYLENBQUMsQ0FBQyxDQUFDO1FBRUgsSUFBSSxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7WUFDckIsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUU7Z0JBQ3BCLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxZQUFZLEVBQUUsQ0FBQztnQkFDdEMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO2dCQUNaLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUNqQixDQUFDLENBQUMsQ0FBQztRQUNQLENBQUM7SUFDTCxDQUFDO0lBRUQsSUFBVyxlQUFlO1FBQ3RCLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDakUsQ0FBQztJQUVNLFVBQVU7UUFDYixJQUFJLENBQUMsbUJBQW1CLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFO1lBQ2pFLElBQUksSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO2dCQUNiLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxVQUFVLEVBQUUsQ0FBQztvQkFDN0IsZUFBZSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsYUFBYSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLENBQUM7b0JBQzVHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxhQUFhLEVBQUUsQ0FBQztnQkFDM0MsQ0FBQztxQkFBTSxDQUFDO29CQUNKLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7d0JBQ2QsZUFBZSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsYUFBYSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLENBQUM7d0JBQ2pILElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxhQUFhLEVBQUUsQ0FBQztvQkFDM0MsQ0FBQztnQkFDTCxDQUFDO1lBQ0wsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVNLGlCQUFpQixDQUFDLEtBQWlCO1FBQ3RDLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUM3QixJQUFJLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3RDLENBQUM7SUFDTCxDQUFDO0lBRU0saUJBQWlCLENBQUMsVUFBc0I7UUFDM0MsTUFBTSxNQUFNLEdBQUcsVUFBVSxDQUFDLGFBQWEsQ0FBQyxTQUFTLEVBQzdDLE1BQU0sR0FBRyxVQUFVLENBQUMsYUFBYSxDQUFDLFlBQVksRUFDOUMsWUFBWSxHQUFHLFVBQVUsQ0FBQyxhQUFhLENBQUMsWUFBWSxDQUFDO1FBRXpELElBQUksTUFBTSxHQUFHLE1BQU0sR0FBRyxFQUFFLElBQUksWUFBWSxFQUFFLENBQUM7WUFDdkMsSUFBSSxJQUFJLENBQUMsbUJBQW1CLENBQUMsU0FBUyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztnQkFDaEQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFO29CQUNqQixJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxFQUFFLENBQUM7Z0JBQ3BDLENBQUMsQ0FBQyxDQUFDO1lBQ1AsQ0FBQztRQUNMLENBQUM7SUFDTCxDQUFDO0lBRU0sY0FBYyxDQUFDLFVBQWtCO1FBQ3BDLFVBQVUsR0FBRyxVQUFVLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDL0IsSUFBSSxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7WUFDdkIsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUM7WUFDeEIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDdEMsQ0FBQzthQUFNLENBQUM7WUFDSixNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ3ZDLE9BQU8sQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEVBQUU7Z0JBQ3JCLElBQUksTUFBTSxDQUFDLGVBQWUsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDO29CQUNyQyxNQUFNLENBQUMsVUFBVSxFQUFFLENBQUM7Z0JBQ3hCLENBQUM7cUJBQU0sQ0FBQztvQkFDSixNQUFNLENBQUMsVUFBVSxFQUFFLENBQUM7Z0JBQ3hCLENBQUM7WUFDTCxDQUFDLENBQUMsQ0FBQztZQUNILElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUNuQyxJQUFJLENBQUMsa0NBQWtDLEVBQUUsQ0FBQztRQUM5QyxDQUFDO0lBQ0wsQ0FBQztJQUVELE1BQU0sQ0FBQyxLQUFrQjtRQUNyQixtREFBbUQ7UUFDbkQsSUFBSSxtQkFBbUIsQ0FBQyxLQUFLLEVBQUUsYUFBNEIsRUFBRSxDQUFDLHNCQUFzQixFQUFFLFlBQVksQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUNuRyxPQUFPO1FBQ1gsQ0FBQztRQUNELElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUN2QixDQUFDO0lBRUQsT0FBTyxDQUFDLEtBQWtCO1FBQ3RCLDhFQUE4RTtRQUM5RSw0Q0FBNEM7UUFDNUMsSUFDSSxDQUFDLElBQUksQ0FBQyxhQUFhLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQztZQUN0QyxDQUFDLENBQUMsSUFBSSxDQUFDLGNBQWM7Z0JBQ2pCLENBQUMsbUJBQW1CLENBQUMsS0FBSyxFQUFFLGFBQTRCLEVBQUUsQ0FBQyxzQkFBc0IsRUFBRSxtQkFBbUIsQ0FBQyxDQUFDLENBQUMsRUFDL0csQ0FBQztZQUNDLE1BQU0sWUFBWSxHQUFxQixJQUFJLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDNUYsWUFBWSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ3pCLENBQUM7UUFDRCxJQUFJLENBQUMsY0FBYyxHQUFHLEtBQUssQ0FBQztJQUNoQyxDQUFDO0lBRU0sS0FBSyxDQUFDLE9BQXNCO1FBQy9CLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDO1FBQzNCLElBQUksQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUM3QyxJQUFJLENBQUMsY0FBYyxHQUFHLEtBQUssQ0FBQztJQUNoQyxDQUFDO0lBRU0sTUFBTSxDQUFDLE1BQWdEO1FBQzFELE1BQU0sQ0FBQyxZQUFZLENBQUMsZUFBZSxFQUFFLENBQUM7UUFDdEMsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDaEIsT0FBTztRQUNYLENBQUM7UUFDRCxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxNQUFNLEtBQUssTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7WUFDdkQsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUN2Qiw0Q0FBNEM7WUFDNUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ3JDLENBQUM7YUFBTSxDQUFDO1lBQ0osTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUMzQixDQUFDO0lBQ0wsQ0FBQztJQUVNLGdCQUFnQixDQUFDLEtBQWE7UUFDakMsSUFBSSxLQUFLLEVBQUUsQ0FBQztZQUNSLEtBQUssQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUM1QixDQUFDO1FBQ0QsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDaEIsT0FBTztRQUNYLENBQUM7UUFDRCxJQUFJLENBQUMsY0FBYyxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQzVCLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUN0QyxJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztJQUNoQyxDQUFDO0lBRU0sa0NBQWtDO1FBQ3JDLFVBQVUsQ0FBQyxHQUFHLEVBQUU7WUFDWixJQUFJLElBQUksQ0FBQyxtQkFBbUIsSUFBSSxJQUFJLENBQUMsbUJBQW1CLENBQUMsVUFBVSxFQUFFLENBQUM7Z0JBQ2xFLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxVQUFVLENBQUMsY0FBYyxFQUFFLENBQUM7WUFDekQsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVELElBQVcsUUFBUTtRQUNmLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzVGLENBQUM7SUFFRCxJQUFXLFVBQVU7UUFDakIsT0FBTyxJQUFJLENBQUMsSUFBSSxLQUFLLFVBQVUsQ0FBQztJQUNwQyxDQUFDO0lBRUQsSUFBVyxLQUFLO1FBQ1osT0FBTyxDQUFDLElBQUksQ0FBQyxjQUFjLElBQUksSUFBSSxDQUFDLGNBQWMsQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUNqRSxDQUFDO0lBRU0sWUFBWTtRQUNmLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQztRQUMzRSxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUM7SUFDOUMsQ0FBQztJQUVNLE1BQU0sQ0FBQyxLQUFpQjtRQUMzQixJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUNqQixJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO2dCQUN0QixJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDakIsQ0FBQztRQUNMLENBQUM7YUFBTSxDQUFDO1lBQ0osSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ2hCLENBQUM7SUFDTCxDQUFDO0lBRU0sSUFBSTtRQUNQLElBQUksSUFBSSxDQUFDLFFBQVEsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQ25ELE9BQU87UUFDWCxDQUFDO1FBQ0QsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1FBQ2xELElBQUksQ0FBQyxzQkFBc0IsRUFBRSxDQUFDO1FBQzlCLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO1FBQ3RCLElBQUksQ0FBQyxzQkFBc0IsRUFBRSxDQUFDO1FBQzlCLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ2xELElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUMxQyxDQUFDO0lBRU0sS0FBSztRQUNSLElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQ2pCLElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDO1lBQ3ZCLElBQUksQ0FBQyx3QkFBd0IsRUFBRSxDQUFDO1lBQ2hDLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQ2xELElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUN0QyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDdkIsQ0FBQztJQUNMLENBQUM7SUFFTyxvQkFBb0I7UUFDeEIsTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUM7UUFDcEQsTUFBTSxXQUFXLEdBQUcsY0FBYyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQWlCLEVBQUUsRUFBRTtZQUN6RCxPQUFPLE1BQU0sQ0FBQyxRQUFRLENBQUM7UUFDM0IsQ0FBQyxDQUFDLENBQUM7UUFDSCxJQUFJLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUNsQixJQUFJLENBQUMsVUFBVSxHQUFHLFdBQVcsQ0FBQztRQUNsQyxDQUFDO2FBQU0sQ0FBQztZQUNKLElBQUksV0FBVyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztnQkFDM0IsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUM7WUFDM0IsQ0FBQztpQkFBTSxDQUFDO2dCQUNKLElBQUksQ0FBQyxVQUFVLEdBQUcsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3JDLENBQUM7UUFDTCxDQUFDO1FBQ0QsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDakMsSUFBSSxDQUFDLGtDQUFrQyxFQUFFLENBQUM7SUFDOUMsQ0FBQztJQUVPLHNCQUFzQixDQUFDLGdCQUF5QixJQUFJO1FBQ3hELElBQUksSUFBSSxDQUFDLFVBQVUsSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDcEMsSUFBSSxhQUFhLEVBQUUsQ0FBQztnQkFDaEIsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLFVBQVUsRUFBRSxDQUFDO29CQUM3QixPQUFPO2dCQUNYLENBQUM7Z0JBQ0QsSUFBSSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7b0JBQ2IsSUFBSSxDQUFDLElBQUksQ0FBQyxzQkFBc0IsRUFBRSxDQUFDO3dCQUMvQixPQUFPO29CQUNYLENBQUM7b0JBQ0QsSUFBSSxDQUFDLFVBQVUsQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO2dCQUN6QyxDQUFDO3FCQUFNLENBQUM7b0JBQ0osSUFBSSxDQUFDLFVBQVUsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDbkUsQ0FBQztZQUNMLENBQUM7aUJBQU0sQ0FBQztnQkFDSixJQUFJLENBQUMsSUFBSSxDQUFDLHNCQUFzQixFQUFFLENBQUM7b0JBQy9CLE9BQU87Z0JBQ1gsQ0FBQztnQkFDRCxpQ0FBaUM7Z0JBQ2pDLElBQUksQ0FBQyxVQUFVLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztZQUN6QyxDQUFDO1FBQ0wsQ0FBQztJQUNMLENBQUM7SUFFTyxjQUFjO1FBQ2xCLElBQUksSUFBSSxDQUFDLFVBQVUsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBQ2hELElBQUksQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDLGlCQUFpQixFQUFFLENBQUM7UUFDbkQsQ0FBQztRQUNELElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSwwQkFBMEIsQ0FBWSxJQUFJLENBQUMsT0FBTyxDQUFDO2FBQ3BFLGFBQWEsRUFBRTthQUNmLFFBQVEsRUFBRTthQUNWLHVCQUF1QixFQUFFO2FBQ3pCLHVCQUF1QixDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQztRQUUzQyxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUU7WUFDakUsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ2IsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ2pCLENBQUMsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFO1lBQ2pFLElBQUksSUFBSSxDQUFDLFNBQVMsSUFBSSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7Z0JBQy9CLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxVQUFVLEVBQUUsQ0FBQztvQkFDN0IsZUFBZSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsYUFBYSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLENBQUM7Z0JBQ2hILENBQUM7WUFDTCxDQUFDO2lCQUFNLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLFVBQVUsRUFBRSxDQUFDO2dCQUMzRSxJQUFJLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO1lBQ3RELENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFTyxtQkFBbUIsQ0FBQyxLQUFvQjtRQUM1QyxNQUFNLE9BQU8sR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDO1FBQzlCLE1BQU0sVUFBVSxHQUFHLE9BQU8sS0FBSyxVQUFVLElBQUksT0FBTyxLQUFLLFFBQVEsSUFBSSxPQUFPLEtBQUssVUFBVSxJQUFJLE9BQU8sS0FBSyxXQUFXLENBQUM7UUFDdkgsTUFBTSxTQUFTLEdBQUcsT0FBTyxLQUFLLEtBQUssSUFBSSxPQUFPLEtBQUssS0FBSyxDQUFDO1FBQ3pELE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUM7UUFFaEMsa0VBQWtFO1FBQ2xFLElBQUksQ0FBQyxTQUFTLElBQUksQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsSUFBSSxLQUFLLENBQUMsTUFBTSxDQUFDLElBQUksVUFBVSxDQUFDLEVBQUUsQ0FBQztZQUM3RixLQUFLLENBQUMsY0FBYyxFQUFFLENBQUMsQ0FBQyw0REFBNEQ7WUFDcEYsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ2hCLENBQUM7YUFBTSxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBQzFCLElBQUksT0FBTyxLQUFLLElBQUksSUFBSSxPQUFPLEtBQUssR0FBRyxFQUFFLENBQUM7Z0JBQ3RDLE9BQU8sS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxrQkFBa0IsRUFBRSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztnQkFDOUUsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO1lBQzNCLENBQUM7aUJBQU0sQ0FBQztnQkFDSixPQUFPLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzdCLENBQUM7UUFDTCxDQUFDO0lBQ0wsQ0FBQztJQUVPLGlCQUFpQixDQUFDLEtBQW9CO1FBQzFDLE1BQU0sT0FBTyxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUM7UUFDOUIsTUFBTSxVQUFVLEdBQUcsT0FBTyxLQUFLLFVBQVUsSUFBSSxPQUFPLEtBQUssUUFBUSxDQUFDO1FBQ2xFLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUM7UUFFaEMsSUFBSSxPQUFPLEtBQUssSUFBSSxJQUFJLE9BQU8sS0FBSyxHQUFHLEVBQUUsQ0FBQztZQUN0QyxLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7WUFDdkIsT0FBTyxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLGtCQUFrQixFQUFFLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1FBQ2xGLENBQUM7YUFBTSxJQUFJLFVBQVUsSUFBSSxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDcEMsbUVBQW1FO1lBQ25FLEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUN2QixJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDakIsQ0FBQzthQUFNLElBQUksQ0FBQyxPQUFPLEtBQUssS0FBSyxJQUFJLE9BQU8sS0FBSyxLQUFLLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxVQUFVLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUNuSCxLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7WUFDdkIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxVQUFVLEVBQUUsQ0FBQztnQkFDdEIsSUFBSSxPQUFPLENBQUMsZUFBZSxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO29CQUNoRCxPQUFPLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQzNELENBQUM7WUFDTCxDQUFDO1lBQ0QsT0FBTyxDQUFDLFVBQVUsQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO1FBQzlDLENBQUM7YUFBTSxJQUFJLElBQUksQ0FBQyxVQUFVLElBQUksT0FBTyxLQUFLLENBQUMsSUFBSSxLQUFLLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDM0QsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO1lBQ3ZCLE1BQU0sb0JBQW9CLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxRQUFRLElBQUksQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUM7WUFFdEYsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEVBQUU7Z0JBQzFCLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxFQUFFLENBQUM7b0JBQ25CLG9CQUFvQixDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQUUsQ0FBQztnQkFDL0QsQ0FBQztZQUNMLENBQUMsQ0FBQyxDQUFDO1FBQ1AsQ0FBQzthQUFNLENBQUM7WUFDSixJQUFJLE9BQU8sQ0FBQyxlQUFlLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7Z0JBQ2hELE9BQU8sQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUMzRCxDQUFDO1lBQ0QsTUFBTSxzQkFBc0IsR0FBRyxPQUFPLENBQUMsZUFBZSxDQUFDO1lBRXZELE9BQU8sQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUM7WUFFekIsSUFDSSxJQUFJLENBQUMsVUFBVTtnQkFDZixVQUFVO2dCQUNWLEtBQUssQ0FBQyxRQUFRO2dCQUNkLE9BQU8sQ0FBQyxVQUFVO2dCQUNsQixPQUFPLENBQUMsZUFBZSxLQUFLLHNCQUFzQixFQUNwRCxDQUFDO2dCQUNDLE9BQU8sQ0FBQyxVQUFVLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztZQUM5QyxDQUFDO1FBQ0wsQ0FBQztJQUNMLENBQUM7SUFFTyxZQUFZO1FBQ2hCLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsWUFBWSxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztJQUNsSCxDQUFDO0lBRU8sc0JBQXNCO1FBQzFCLElBQUksSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1lBQ3RCLElBQUksQ0FBQyxjQUFjLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDaEMsQ0FBQztRQUNELElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxjQUFjLENBQVksSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ3JFLElBQUksSUFBSSxDQUFDLDBCQUEwQixFQUFFLENBQUM7WUFDbEMsSUFBSSxDQUFDLDBCQUEwQixDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQzlDLElBQUksQ0FBQywwQkFBMEIsR0FBRyxJQUFJLENBQUM7UUFDM0MsQ0FBQztRQUNELElBQUksQ0FBQywwQkFBMEIsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUMzRyxLQUFLLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDO1lBQy9DLEtBQUssQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7UUFDdkQsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRU8sWUFBWTtRQUNoQixNQUFNLG1CQUFtQixHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsZUFBZSxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUV2RSxJQUFJLENBQUMsc0JBQXNCLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsS0FBb0MsRUFBRSxFQUFFO1lBQ2hILElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUM7WUFDL0MsSUFBSSxLQUFLLENBQUMsV0FBVyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7Z0JBQzFELElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztnQkFDYixJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDakIsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVPLG1CQUFtQjtRQUN2QixPQUFPLENBQUMsT0FBTyxFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRTtZQUN4QixJQUFJLENBQUMsd0JBQXdCLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ25ELENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVPLGdCQUFnQjtRQUNwQixJQUFJLFNBQVMsR0FBRyxFQUFFLENBQUM7UUFDbkIsSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDbEIsU0FBUyxHQUFHLHVCQUF1QixJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDbkQsQ0FBQzthQUFNLENBQUM7WUFDSixTQUFTLEdBQUcsNEJBQTRCLENBQUM7UUFDN0MsQ0FBQztRQUNELElBQUksQ0FBQyxhQUFhLEdBQUc7WUFDakIsQ0FBQyxxQkFBcUIsQ0FBQyxFQUFFLElBQUk7WUFDN0IsQ0FBQyxTQUFTLENBQUMsRUFBRSxJQUFJO1NBQ3BCLENBQUM7SUFDTixDQUFDO0lBRU8sd0JBQXdCLENBQUMsVUFBZTtRQUM1QyxJQUFJLE9BQU8sQ0FBQyxpQkFBaUIsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDO1lBQ3hDLElBQUksSUFBSSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO2dCQUMxQyxJQUFJLENBQUMsY0FBYyxDQUFDLEtBQUssRUFBRSxDQUFDO2dCQUM1QixJQUFJLENBQUMsaUJBQWlCLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDMUMsQ0FBQztZQUNELE9BQU87UUFDWCxDQUFDO1FBQ0QsSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDbEIsSUFBSSxPQUFPLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQztnQkFDdEIsTUFBTSxRQUFRLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDLENBQUM7Z0JBQ25ELElBQUksQ0FBQyxjQUFjLENBQUMsS0FBSyxFQUFFLENBQUM7Z0JBQzNCLFVBQXlCLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxFQUFFO29CQUMzQyxNQUFNLE1BQU0sR0FDUixJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLE9BQU8sQ0FBQyxRQUFRLEtBQUssU0FBUyxDQUFDO3dCQUM1RCxRQUFRLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLFFBQVEsS0FBSyxTQUFTLENBQUMsQ0FBQztvQkFDN0QsSUFBSSxNQUFNLEVBQUUsQ0FBQzt3QkFDVCxJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztvQkFDdkMsQ0FBQztnQkFDTCxDQUFDLENBQUMsQ0FBQztZQUNQLENBQUM7UUFDTCxDQUFDO2FBQU0sQ0FBQztZQUNKLE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFO2dCQUMvQyxPQUFPLE1BQU0sQ0FBQyxRQUFRLEtBQUssVUFBVSxDQUFDO1lBQzFDLENBQUMsQ0FBQyxDQUFDO1lBQ0gsSUFBSSxjQUFjLEVBQUUsQ0FBQztnQkFDakIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsY0FBYyxDQUFDLENBQUM7WUFDL0MsQ0FBQztRQUNMLENBQUM7UUFDRCxJQUFJLENBQUMsaUJBQWlCLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDMUMsQ0FBQztJQUVPLFFBQVEsQ0FBQyxNQUFpQixFQUFFLFdBQW9CO1FBQ3BELE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBRTNELElBQUksTUFBTSxDQUFDLFFBQVEsSUFBSSxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDOUMsTUFBTSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ2xCLElBQUksQ0FBQyxjQUFjLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDaEMsQ0FBQzthQUFNLENBQUM7WUFDSixJQUFJLFdBQVcsS0FBSyxNQUFNLENBQUMsUUFBUSxFQUFFLENBQUM7Z0JBQ2xDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUNoRyxDQUFDO1lBRUQsSUFBSSxXQUFXLEVBQUUsQ0FBQztnQkFDZCxJQUFJLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUMxQyxDQUFDO1lBRUQsSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7Z0JBQ2xCLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztnQkFDbEIsSUFBSSxXQUFXLEVBQUUsQ0FBQztvQkFDZCxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7Z0JBQ2pCLENBQUM7WUFDTCxDQUFDO1FBQ0wsQ0FBQztRQUVELElBQUksV0FBVyxLQUFLLElBQUksQ0FBQyxjQUFjLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7WUFDekQsSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQUM7UUFDaEMsQ0FBQztRQUNELElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDbkIsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ3ZCLENBQUM7UUFDRCxJQUFJLENBQUMsaUJBQWlCLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDMUMsQ0FBQztJQUVPLFVBQVU7UUFDZCxJQUFJLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUNsQixNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBRXZDLElBQUksSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7Z0JBQ3pCLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFO29CQUM5QixPQUFPLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUFDO2dCQUNqRCxDQUFDLENBQUMsQ0FBQztZQUNQLENBQUM7UUFDTCxDQUFDO0lBQ0wsQ0FBQztJQUVPLGtCQUFrQjtRQUN0QixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxXQUFXLENBQUM7SUFDL0csQ0FBQztJQUVPLHNCQUFzQjtRQUMxQixJQUFJLENBQUMsd0JBQXdCLEVBQUUsQ0FBQztRQUNoQyxJQUFJLENBQUMsTUFBTSxDQUFDLGlCQUFpQixDQUFDLEdBQUcsRUFBRTtZQUMvQixJQUFJLENBQUMsa0JBQWtCLEdBQUcsSUFBSSxVQUFVLENBQVMsUUFBUSxDQUFDLEVBQUU7Z0JBQ3hELE1BQU0sTUFBTSxHQUFHLElBQUksY0FBYyxDQUFDLENBQUMsT0FBOEIsRUFBRSxFQUFFO29CQUNqRSxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUM7Z0JBQ3BCLENBQUMsQ0FBQyxDQUFDO2dCQUNILE1BQU0sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsQ0FBQztZQUMvQyxDQUFDLENBQUM7aUJBQ0csSUFBSSxDQUNELFNBQVMsRUFBRSxFQUNYLEdBQUcsQ0FBQyxHQUFHLEVBQUU7Z0JBQ0wsT0FBTyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztZQUNyQyxDQUFDLENBQUMsRUFDRixvQkFBb0IsRUFBRSxDQUN6QjtpQkFDQSxTQUFTLENBQUMsQ0FBQyxLQUFhLEVBQUUsRUFBRTtnQkFDekIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFO29CQUNqQixJQUFJLENBQUMsZ0JBQWdCLEdBQUcsS0FBSyxDQUFDO29CQUM5QixJQUFJLENBQUMsa0NBQWtDLEVBQUUsQ0FBQztvQkFDMUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFlBQVksRUFBRSxDQUFDO2dCQUMxQyxDQUFDLENBQUMsQ0FBQztZQUNQLENBQUMsQ0FBQyxDQUFDO1FBQ1gsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRU8sd0JBQXdCO1FBQzVCLElBQUksSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7WUFDMUIsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQ3RDLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxJQUFJLENBQUM7UUFDbkMsQ0FBQztJQUNMLENBQUM7SUFFRCxXQUFXO1FBQ1AsSUFBSSxDQUFDLHdCQUF3QixFQUFFLENBQUM7UUFDaEMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNyQixJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQzdCLENBQUM7OEdBdDZCUSxTQUFTLDRKQThVTixXQUFXLGFBQ0MsMEJBQTBCLDZCQUMxQixpQkFBaUI7a0dBaFZoQyxTQUFTLDBLQTJGRSxnQkFBZ0IsNkZBV2hCLGdCQUFnQixrREFLaEIsZ0JBQWdCLGdGQUtoQixnQkFBZ0IsK01Ba0RoQixnQkFBZ0IscURBTWhCLGdCQUFnQiwrQ0FNaEIsZ0JBQWdCLDZOQWdEaEIsZ0JBQWdCLHdEQUtoQixnQkFBZ0Isd0RBTWhCLGVBQWUscURBTWYsZ0JBQWdCLDRlQW5SekI7WUFDUDtnQkFDSSxPQUFPLEVBQUUsMkJBQTJCO2dCQUNwQyxXQUFXLEVBQUUsU0FBUzthQUN6QjtZQUNEO2dCQUNJLE9BQU8sRUFBRSxpQkFBaUI7Z0JBQzFCLFdBQVcsRUFBRSxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsU0FBUyxDQUFDO2dCQUN4QyxLQUFLLEVBQUUsSUFBSTthQUNkO1NBQ0osc0tBOFNnQixTQUFTLG1FQU9ULG9CQUFvQixrRkE5TjFCLG1CQUFtQiw4SEFnTkEsVUFBVSx1R0FFWixVQUFVLDhDQU94QixTQUFTLGdFQU9ULG9CQUFvQixnR0NyY3RDLDQ1SEE2RkEsNENEcURRLGdCQUFnQix1SUFDaEIsZ0JBQWdCLGdYQUNoQixtQkFBbUIsNCtCQUNuQiwyQkFBMkIsaUdBQzNCLE9BQU8sb0ZBQ1AsSUFBSSw2RkFDSixrQkFBa0IsMkdBQ2xCLFVBQVUsb0dBQ1YsUUFBUSw4VEFDUixtQkFBbUIsa0VBQ25CLFNBQVMsaU5BQ1Qsb0JBQW9CLHVHQUNwQixnQkFBZ0Isb0pBQ2hCLEtBQUsscUdBT0csQ0FBQyxZQUFZLEVBQUUsWUFBWSxFQUFFLFdBQVcsQ0FBQzs7MkZBRTVDLFNBQVM7a0JBeENyQixTQUFTOytCQUNJLDhCQUE4QixZQUU5QixXQUFXLGFBQ1Y7d0JBQ1A7NEJBQ0ksT0FBTyxFQUFFLDJCQUEyQjs0QkFDcEMsV0FBVyxXQUFXO3lCQUN6Qjt3QkFDRDs0QkFDSSxPQUFPLEVBQUUsaUJBQWlCOzRCQUMxQixXQUFXLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSxVQUFVLENBQUM7NEJBQ3hDLEtBQUssRUFBRSxJQUFJO3lCQUNkO3FCQUNKLG1CQUNnQix1QkFBdUIsQ0FBQyxNQUFNLGNBQ25DLElBQUksV0FDUDt3QkFDTCxnQkFBZ0I7d0JBQ2hCLGdCQUFnQjt3QkFDaEIsbUJBQW1CO3dCQUNuQiwyQkFBMkI7d0JBQzNCLE9BQU87d0JBQ1AsSUFBSTt3QkFDSixrQkFBa0I7d0JBQ2xCLFVBQVU7d0JBQ1YsUUFBUTt3QkFDUixtQkFBbUI7d0JBQ25CLFNBQVM7d0JBQ1Qsb0JBQW9CO3dCQUNwQixnQkFBZ0I7d0JBQ2hCLEtBQUs7cUJBQ1IsUUFDSzt3QkFDRixpQkFBaUIsRUFBRSxVQUFVO3dCQUM3QixTQUFTLEVBQUUsaUJBQWlCO3dCQUM1QixRQUFRLEVBQUUsZ0JBQWdCO3FCQUM3QixjQUNXLENBQUMsWUFBWSxFQUFFLFlBQVksRUFBRSxXQUFXLENBQUM7OzBCQWdWaEQsTUFBTTsyQkFBQyxXQUFXOzswQkFDbEIsUUFBUTs7MEJBQUksTUFBTTsyQkFBQywwQkFBMEI7OzBCQUM3QyxRQUFROzswQkFBSSxNQUFNOzJCQUFDLGlCQUFpQjt5Q0FwVGhDLG9CQUFvQjtzQkFBNUIsS0FBSztnQkFpQzRDLG1CQUFtQjtzQkFBcEUsU0FBUzt1QkFBQyxtQkFBbUIsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7Z0JBRVIsY0FBYztzQkFBckQsV0FBVzt1QkFBQyx5QkFBeUI7Z0JBRUwsUUFBUTtzQkFBeEMsV0FBVzt1QkFBQyxrQkFBa0I7Z0JBSy9CLFNBQVM7c0JBRFIsV0FBVzt1QkFBQyxzQkFBc0I7Z0JBTXpCLFdBQVc7c0JBQXBCLE1BQU07Z0JBS0csbUJBQW1CO3NCQUE1QixNQUFNO2dCQUtHLHVCQUF1QjtzQkFBaEMsTUFBTTtnQkFNaUMsYUFBYTtzQkFBcEQsS0FBSzt1QkFBQyxFQUFFLFNBQVMsRUFBRSxnQkFBZ0IsRUFBRTtnQkFLN0IsY0FBYztzQkFBdEIsS0FBSztnQkFNa0MsZUFBZTtzQkFBdEQsS0FBSzt1QkFBQyxFQUFFLFNBQVMsRUFBRSxnQkFBZ0IsRUFBRTtnQkFLRSxZQUFZO3NCQUFuRCxLQUFLO3VCQUFDLEVBQUUsU0FBUyxFQUFFLGdCQUFnQixFQUFFO2dCQUtFLHNCQUFzQjtzQkFBN0QsS0FBSzt1QkFBQyxFQUFFLFNBQVMsRUFBRSxnQkFBZ0IsRUFBRTtnQkFPbEMsT0FBTztzQkFEVixLQUFLO2dCQWtCRixPQUFPO3NCQURWLEtBQUs7Z0JBWUYsaUJBQWlCO3NCQURwQixLQUFLO2dCQVNGLHlCQUF5QjtzQkFENUIsS0FBSztnQkFTTixtQkFBbUI7c0JBRGxCLEtBQUs7dUJBQUMsRUFBRSxTQUFTLEVBQUUsZ0JBQWdCLEVBQUU7Z0JBTUUsYUFBYTtzQkFBcEQsS0FBSzt1QkFBQyxFQUFFLFNBQVMsRUFBRSxnQkFBZ0IsRUFBRTtnQkFPbEMsV0FBVztzQkFEZCxLQUFLO3VCQUFDLEVBQUUsU0FBUyxFQUFFLGdCQUFnQixFQUFFO2dCQVc3QixpQkFBaUI7c0JBQXpCLEtBQUs7Z0JBT04saUJBQWlCO3NCQURoQixLQUFLO2dCQVFOLFlBQVk7c0JBRFgsS0FBSztnQkFPTixTQUFTO3NCQURSLEtBQUs7Z0JBT04sY0FBYztzQkFEYixLQUFLO2dCQU0yQix1QkFBdUI7c0JBQXZELFlBQVk7dUJBQUMsaUJBQWlCO2dCQU1TLGFBQWE7c0JBQXBELEtBQUs7dUJBQUMsRUFBRSxTQUFTLEVBQUUsZ0JBQWdCLEVBQUU7Z0JBTXRDLGNBQWM7c0JBRGIsS0FBSzt1QkFBQyxFQUFFLFNBQVMsRUFBRSxnQkFBZ0IsRUFBRTtnQkFNQyxjQUFjO3NCQUFwRCxLQUFLO3VCQUFDLEVBQUUsU0FBUyxFQUFFLGVBQWUsRUFBRTtnQkFNRyxhQUFhO3NCQUFwRCxLQUFLO3VCQUFDLEVBQUUsU0FBUyxFQUFFLGdCQUFnQixFQUFFO2dCQWFsQyxVQUFVO3NCQURiLEtBQUs7Z0JBZ0JHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBRW9ELE9BQU87c0JBQWhFLFNBQVM7dUJBQUMsU0FBUyxFQUFFLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO2dCQUVkLEtBQUs7c0JBQTlDLFNBQVM7dUJBQUMsT0FBTyxFQUFFLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRTtnQkFLVyxjQUFjO3NCQUFoRSxlQUFlO3VCQUFDLFNBQVMsRUFBRSxFQUFFLFdBQVcsRUFBRSxJQUFJLEVBQUU7Z0JBRXhCLFdBQVc7c0JBQW5DLFlBQVk7dUJBQUMsU0FBUztnQkFLZ0IsYUFBYTtzQkFBbkQsZUFBZTt1QkFBQyxvQkFBb0I7Z0JBRUQsVUFBVTtzQkFBN0MsWUFBWTt1QkFBQyxvQkFBb0I7Z0JBR2xDLGFBQWE7c0JBRFosWUFBWTt1QkFBQyxTQUFTLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIGdldEZsZXhpYmxlUG9zaXRpb25zLFxuICAgIHNjYWxlTW90aW9uLFxuICAgIHNjYWxlWE1vdGlvbixcbiAgICBzY2FsZVlNb3Rpb24sXG4gICAgU2Nyb2xsVG9TZXJ2aWNlLFxuICAgIFRhYkluZGV4RGlzYWJsZWRDb250cm9sVmFsdWVBY2Nlc3Nvck1peGluLFxuICAgIFRoeUNsaWNrRGlzcGF0Y2hlcixcbiAgICBUaHlQbGFjZW1lbnRcbn0gZnJvbSAnbmd4LXRldGh5cy9jb3JlJztcbmltcG9ydCB7IFRoeUVtcHR5IH0gZnJvbSAnbmd4LXRldGh5cy9lbXB0eSc7XG5pbXBvcnQgeyBUaHlMb2FkaW5nIH0gZnJvbSAnbmd4LXRldGh5cy9sb2FkaW5nJztcbmltcG9ydCB7XG4gICAgSVRoeU9wdGlvblBhcmVudENvbXBvbmVudCxcbiAgICBTZWxlY3RDb250cm9sU2l6ZSxcbiAgICBUSFlfT1BUSU9OX1BBUkVOVF9DT01QT05FTlQsXG4gICAgVGh5T3B0aW9uLFxuICAgIFRoeU9wdGlvbnNDb250YWluZXIsXG4gICAgVGh5T3B0aW9uU2VsZWN0aW9uQ2hhbmdlRXZlbnQsXG4gICAgVGh5U2Nyb2xsRGlyZWN0aXZlLFxuICAgIFRoeVNlbGVjdENvbnRyb2wsXG4gICAgVGh5U2VsZWN0T3B0aW9uR3JvdXAsXG4gICAgVGh5U3RvcFByb3BhZ2F0aW9uRGlyZWN0aXZlXG59IGZyb20gJ25neC10ZXRoeXMvc2hhcmVkJztcbmltcG9ydCB7XG4gICAgQSxcbiAgICBET1dOX0FSUk9XLFxuICAgIGVsZW1lbnRNYXRjaENsb3Nlc3QsXG4gICAgRU5ELFxuICAgIEVOVEVSLFxuICAgIEZ1bmN0aW9uUHJvcCxcbiAgICBoYXNNb2RpZmllcktleSxcbiAgICBoZWxwZXJzLFxuICAgIEhPTUUsXG4gICAgaXNBcnJheSxcbiAgICBpc0Z1bmN0aW9uLFxuICAgIExFRlRfQVJST1csXG4gICAgUklHSFRfQVJST1csXG4gICAgU1BBQ0UsXG4gICAgVVBfQVJST1dcbn0gZnJvbSAnbmd4LXRldGh5cy91dGlsJztcbmltcG9ydCB7IGRlZmVyLCBtZXJnZSwgT2JzZXJ2YWJsZSwgU3ViamVjdCwgU3Vic2NyaXB0aW9uLCB0aW1lciB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZGlzdGluY3RVbnRpbENoYW5nZWQsIGZpbHRlciwgbWFwLCBzdGFydFdpdGgsIHN3aXRjaE1hcCwgdGFrZSwgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbXBvcnQgeyBBY3RpdmVEZXNjZW5kYW50S2V5TWFuYWdlciB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9hMTF5JztcbmltcG9ydCB7IGNvZXJjZUVsZW1lbnQgfSBmcm9tICdAYW5ndWxhci9jZGsvY29lcmNpb24nO1xuaW1wb3J0IHsgU2VsZWN0aW9uTW9kZWwgfSBmcm9tICdAYW5ndWxhci9jZGsvY29sbGVjdGlvbnMnO1xuaW1wb3J0IHsgQ2RrQ29ubmVjdGVkT3ZlcmxheSwgQ2RrT3ZlcmxheU9yaWdpbiwgQ29ubmVjdGlvblBvc2l0aW9uUGFpciwgT3ZlcmxheSwgU2Nyb2xsU3RyYXRlZ3kgfSBmcm9tICdAYW5ndWxhci9jZGsvb3ZlcmxheSc7XG5pbXBvcnQgeyBpc1BsYXRmb3JtQnJvd3NlciwgTmdDbGFzcywgTmdGb3IsIE5nSWYsIE5nVGVtcGxhdGVPdXRsZXQgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtcbiAgICBBZnRlckNvbnRlbnRJbml0LFxuICAgIEFmdGVyVmlld0luaXQsXG4gICAgYm9vbGVhbkF0dHJpYnV0ZSxcbiAgICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBDb21wb25lbnQsXG4gICAgQ29udGVudENoaWxkLFxuICAgIENvbnRlbnRDaGlsZHJlbixcbiAgICBFbGVtZW50UmVmLFxuICAgIEV2ZW50RW1pdHRlcixcbiAgICBmb3J3YXJkUmVmLFxuICAgIEhvc3RCaW5kaW5nLFxuICAgIEhvc3RMaXN0ZW5lcixcbiAgICBJbmplY3QsXG4gICAgSW5wdXQsXG4gICAgTmdab25lLFxuICAgIG51bWJlckF0dHJpYnV0ZSxcbiAgICBPbkRlc3Ryb3ksXG4gICAgT25Jbml0LFxuICAgIE9wdGlvbmFsLFxuICAgIE91dHB1dCxcbiAgICBQTEFURk9STV9JRCxcbiAgICBRdWVyeUxpc3QsXG4gICAgVGVtcGxhdGVSZWYsXG4gICAgVmlld0NoaWxkLFxuICAgIFZpZXdDaGlsZHJlblxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBOR19WQUxVRV9BQ0NFU1NPUiB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcblxuaW1wb3J0IHtcbiAgICBERUZBVUxUX1NFTEVDVF9DT05GSUcsXG4gICAgVEhZX1NFTEVDVF9DT05GSUcsXG4gICAgVEhZX1NFTEVDVF9TQ1JPTExfU1RSQVRFR1ksXG4gICAgVGh5RHJvcGRvd25XaWR0aE1vZGUsXG4gICAgVGh5U2VsZWN0Q29uZmlnXG59IGZyb20gJy4uL3NlbGVjdC5jb25maWcnO1xuXG5leHBvcnQgdHlwZSBTZWxlY3RNb2RlID0gJ211bHRpcGxlJyB8ICcnO1xuXG5leHBvcnQgdHlwZSBUaHlTZWxlY3RUcmlnZ2VyVHlwZSA9ICdjbGljaycgfCAnaG92ZXInO1xuXG5leHBvcnQgY29uc3QgU0VMRUNUX1BBTkVMX01BWF9IRUlHSFQgPSAzMDA7XG5cbmV4cG9ydCBjb25zdCBTRUxFQ1RfT1BUSU9OX01BWF9IRUlHSFQgPSA0MDtcblxuZXhwb3J0IGNvbnN0IFNFTEVDVF9PUFRJT05fR1JPVVBfTUFYX0hFSUdIVCA9IDMwO1xuXG5leHBvcnQgY29uc3QgU0VMRUNUX1BBTkVMX1BBRERJTkdfVE9QID0gMTA7XG5cbmV4cG9ydCBjb25zdCBUSFlfU0VMRUNUX1BBTkVMX01JTl9XSURUSCA9IDIwMDtcblxuZXhwb3J0IGludGVyZmFjZSBPcHRpb25WYWx1ZSB7XG4gICAgdGh5TGFiZWxUZXh0Pzogc3RyaW5nO1xuICAgIHRoeVZhbHVlPzogc3RyaW5nO1xuICAgIHRoeURpc2FibGVkPzogYm9vbGVhbjtcbiAgICB0aHlTaG93T3B0aW9uQ3VzdG9tPzogYm9vbGVhbjtcbiAgICB0aHlTZWFyY2hLZXk/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVGh5U2VsZWN0T3B0aW9uTW9kZWwge1xuICAgIHZhbHVlPzogc3RyaW5nIHwgbnVtYmVyO1xuICAgIGRpc2FibGVkPzogYm9vbGVhbjtcbiAgICBsYWJlbD86IHN0cmluZztcbiAgICBpY29uPzogc3RyaW5nO1xuICAgIGdyb3VwTGFiZWw/OiBzdHJpbmc7XG59XG5cbmludGVyZmFjZSBUaHlPcHRpb25Hcm91cE1vZGVsIGV4dGVuZHMgVGh5U2VsZWN0T3B0aW9uTW9kZWwge1xuICAgIGNoaWxkcmVuPzogVGh5U2VsZWN0T3B0aW9uTW9kZWxbXTtcbn1cblxuY29uc3Qgbm9vcCA9ICgpID0+IHt9O1xuXG4vKipcbiAqIOS4i+aLiemAieaLqee7hOS7tlxuICogQG5hbWUgdGh5LXNlbGVjdCx0aHktY3VzdG9tLXNlbGVjdFxuICogQG9yZGVyIDEwXG4gKi9cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAndGh5LXNlbGVjdCx0aHktY3VzdG9tLXNlbGVjdCcsXG4gICAgdGVtcGxhdGVVcmw6ICcuL2N1c3RvbS1zZWxlY3QuY29tcG9uZW50Lmh0bWwnLFxuICAgIGV4cG9ydEFzOiAndGh5U2VsZWN0JyxcbiAgICBwcm92aWRlcnM6IFtcbiAgICAgICAge1xuICAgICAgICAgICAgcHJvdmlkZTogVEhZX09QVElPTl9QQVJFTlRfQ09NUE9ORU5ULFxuICAgICAgICAgICAgdXNlRXhpc3Rpbmc6IFRoeVNlbGVjdFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcbiAgICAgICAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IFRoeVNlbGVjdCksXG4gICAgICAgICAgICBtdWx0aTogdHJ1ZVxuICAgICAgICB9XG4gICAgXSxcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIGltcG9ydHM6IFtcbiAgICAgICAgQ2RrT3ZlcmxheU9yaWdpbixcbiAgICAgICAgVGh5U2VsZWN0Q29udHJvbCxcbiAgICAgICAgQ2RrQ29ubmVjdGVkT3ZlcmxheSxcbiAgICAgICAgVGh5U3RvcFByb3BhZ2F0aW9uRGlyZWN0aXZlLFxuICAgICAgICBOZ0NsYXNzLFxuICAgICAgICBOZ0lmLFxuICAgICAgICBUaHlTY3JvbGxEaXJlY3RpdmUsXG4gICAgICAgIFRoeUxvYWRpbmcsXG4gICAgICAgIFRoeUVtcHR5LFxuICAgICAgICBUaHlPcHRpb25zQ29udGFpbmVyLFxuICAgICAgICBUaHlPcHRpb24sXG4gICAgICAgIFRoeVNlbGVjdE9wdGlvbkdyb3VwLFxuICAgICAgICBOZ1RlbXBsYXRlT3V0bGV0LFxuICAgICAgICBOZ0ZvclxuICAgIF0sXG4gICAgaG9zdDoge1xuICAgICAgICAnW2F0dHIudGFiaW5kZXhdJzogJ3RhYkluZGV4JyxcbiAgICAgICAgJyhmb2N1cyknOiAnb25Gb2N1cygkZXZlbnQpJyxcbiAgICAgICAgJyhibHVyKSc6ICdvbkJsdXIoJGV2ZW50KSdcbiAgICB9LFxuICAgIGFuaW1hdGlvbnM6IFtzY2FsZVhNb3Rpb24sIHNjYWxlWU1vdGlvbiwgc2NhbGVNb3Rpb25dXG59KVxuZXhwb3J0IGNsYXNzIFRoeVNlbGVjdFxuICAgIGV4dGVuZHMgVGFiSW5kZXhEaXNhYmxlZENvbnRyb2xWYWx1ZUFjY2Vzc29yTWl4aW5cbiAgICBpbXBsZW1lbnRzIENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBJVGh5T3B0aW9uUGFyZW50Q29tcG9uZW50LCBPbkluaXQsIEFmdGVyVmlld0luaXQsIEFmdGVyQ29udGVudEluaXQsIE9uRGVzdHJveVxue1xuICAgIGRpc2FibGVkID0gZmFsc2U7XG5cbiAgICBzaXplOiBTZWxlY3RDb250cm9sU2l6ZTtcblxuICAgIG1vZGU6IFNlbGVjdE1vZGUgPSAnJztcblxuICAgIGVtcHR5U3RhdGVUZXh0ID0gJ+aaguaXoOWPr+mAiemhuSc7XG5cbiAgICBlbXB0eVNlYXJjaE1lc3NhZ2VUZXh0ID0gJ+aaguaXoOWPr+mAiemhuSc7XG5cbiAgICBzY3JvbGxUb3AgPSAwO1xuXG4gICAgbW9kYWxWYWx1ZTogYW55ID0gbnVsbDtcblxuICAgIGRlZmF1bHRPZmZzZXQgPSA0O1xuXG4gICAgZHJvcERvd25DbGFzczogeyBba2V5OiBzdHJpbmddOiBib29sZWFuIH07XG5cbiAgICBkcm9wRG93bk1pbldpZHRoOiBudW1iZXIgfCBudWxsID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIOiuvue9ruS4i+aLieahhueahOacgOWwj+WuveW6pu+8jOm7mOiupOWAvCBgbWF0Y2gtc2VsZWN0YO+8jOihqOekuuS4jui+k+WFpeahhueahOWuveW6puS4gOiHtO+8m2BtaW4td2lkdGhgIOihqOekuuacgOWwj+WuveW6puS4ujIwMHB477yb5pSv5oyB6Ieq5a6a5LmJ5pyA5bCP5a695bqm77yM5q+U5aaC5LygIGB7bWluV2lkdGg6IDE1MH1gIOihqOekuuacgOWwj+WuveW6puS4ujE1MHB4XG4gICAgICogQGRlZmF1bHQgbWF0Y2gtc2VsZWN0XG4gICAgICovXG4gICAgQElucHV0KCkgdGh5RHJvcGRvd25XaWR0aE1vZGU6IFRoeURyb3Bkb3duV2lkdGhNb2RlO1xuXG4gICAgcHVibGljIGRyb3BEb3duUG9zaXRpb25zOiBDb25uZWN0aW9uUG9zaXRpb25QYWlyW107XG5cbiAgICBwdWJsaWMgc2VsZWN0aW9uTW9kZWw6IFNlbGVjdGlvbk1vZGVsPFRoeU9wdGlvbj47XG5cbiAgICBwdWJsaWMgdHJpZ2dlclJlY3RXaWR0aDogbnVtYmVyO1xuXG4gICAgcHVibGljIHNjcm9sbFN0cmF0ZWd5OiBTY3JvbGxTdHJhdGVneTtcblxuICAgIHByaXZhdGUgcmVzaXplU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XG5cbiAgICBwcml2YXRlIHNlbGVjdGlvbk1vZGVsU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XG5cbiAgICAvKipcbiAgICAgKiDmiYvliqjogZrnhKbkuK3nmoTmoIfor4ZcbiAgICAgKi9cbiAgICBwcml2YXRlIG1hbnVhbEZvY3VzaW5nID0gZmFsc2U7XG5cbiAgICBwcml2YXRlIGNvbmZpZzogVGh5U2VsZWN0Q29uZmlnO1xuXG4gICAgcHJpdmF0ZSByZWFkb25seSBkZXN0cm95JCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgICByZWFkb25seSBvcHRpb25TZWxlY3Rpb25DaGFuZ2VzOiBPYnNlcnZhYmxlPFRoeU9wdGlvblNlbGVjdGlvbkNoYW5nZUV2ZW50PiA9IGRlZmVyKCgpID0+IHtcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucykge1xuICAgICAgICAgICAgcmV0dXJuIG1lcmdlKC4uLnRoaXMub3B0aW9ucy5tYXAob3B0aW9uID0+IG9wdGlvbi5zZWxlY3Rpb25DaGFuZ2UpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5uZ1pvbmUub25TdGFibGUuYXNPYnNlcnZhYmxlKCkucGlwZShcbiAgICAgICAgICAgIHRha2UoMSksXG4gICAgICAgICAgICBzd2l0Y2hNYXAoKCkgPT4gdGhpcy5vcHRpb25TZWxlY3Rpb25DaGFuZ2VzKVxuICAgICAgICApO1xuICAgIH0pIGFzIE9ic2VydmFibGU8VGh5T3B0aW9uU2VsZWN0aW9uQ2hhbmdlRXZlbnQ+O1xuXG4gICAgQFZpZXdDaGlsZChDZGtDb25uZWN0ZWRPdmVybGF5LCB7IHN0YXRpYzogdHJ1ZSB9KSBjZGtDb25uZWN0ZWRPdmVybGF5OiBDZGtDb25uZWN0ZWRPdmVybGF5O1xuXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcy50aHktc2VsZWN0LWN1c3RvbScpIGlzU2VsZWN0Q3VzdG9tID0gdHJ1ZTtcblxuICAgIEBIb3N0QmluZGluZygnY2xhc3MudGh5LXNlbGVjdCcpIGlzU2VsZWN0ID0gdHJ1ZTtcblxuICAgIGtleU1hbmFnZXI6IEFjdGl2ZURlc2NlbmRhbnRLZXlNYW5hZ2VyPFRoeU9wdGlvbj47XG5cbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzLm1lbnUtaXMtb3BlbmVkJylcbiAgICBwYW5lbE9wZW4gPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIOaQnOe0ouaXtuWbnuiwg1xuICAgICAqL1xuICAgIEBPdXRwdXQoKSB0aHlPblNlYXJjaDogRXZlbnRFbWl0dGVyPHN0cmluZz4gPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcblxuICAgIC8qKlxuICAgICAqIOS4i+aLieiPnOWNlea7muWKqOWIsOW6lemDqOS6i+S7tu+8jOWPr+S7peeUqOi/meS4quS6i+S7tuWunueOsOa7muWKqOWKoOi9vVxuICAgICAqL1xuICAgIEBPdXRwdXQoKSB0aHlPblNjcm9sbFRvQm90dG9tOiBFdmVudEVtaXR0ZXI8dm9pZD4gPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG5cbiAgICAvKipcbiAgICAgKiDkuIvmi4noj5zljZXlsZXlvIDlkozmipjlj6DnirbmgIHkuovku7ZcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgdGh5T25FeHBhbmRTdGF0dXNDaGFuZ2U6IEV2ZW50RW1pdHRlcjxib29sZWFuPiA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcblxuICAgIC8qKlxuICAgICAqIOS4i+aLieWIl+ihqOaYr+WQpuaYvuekuuaQnOe0ouahhlxuICAgICAqIEBkZWZhdWx0IGZhbHNlXG4gICAgICovXG4gICAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pIHRoeVNob3dTZWFyY2g6IGJvb2xlYW47XG5cbiAgICAvKipcbiAgICAgKiDpgInmi6nmoYbpu5jorqTmloflrZdcbiAgICAgKi9cbiAgICBASW5wdXQoKSB0aHlQbGFjZUhvbGRlcjogc3RyaW5nO1xuXG4gICAgLyoqXG4gICAgICog5piv5ZCm5L2/55So5pyN5Yqh56uv5pCc57Si77yM5b2T5Li6IHRydWUg5pe277yM5bCG5LiN5YaN5Zyo5YmN56uv6L+b6KGM6L+H5rukXG4gICAgICogQGRlZmF1bHQgZmFsc2VcbiAgICAgKi9cbiAgICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSkgdGh5U2VydmVyU2VhcmNoOiBib29sZWFuO1xuXG4gICAgLyoqXG4gICAgICog5byC5q2l5Yqg6L29IGxvYWRpbmcg54q25oCB77yMZmFsc2Ug6KGo56S65Yqg6L295Lit77yMdHJ1ZSDooajnpLrliqDovb3lrozmiJBcbiAgICAgKi9cbiAgICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSkgdGh5TG9hZFN0YXRlID0gdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIOaYr+WQpuiHquWKqOiuvue9rumAiemhueesrOS4gOadoeS4uumrmOS6rueKtuaAgVxuICAgICAqL1xuICAgIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KSB0aHlBdXRvQWN0aXZlRmlyc3RJdGVtID0gdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIOS4i+aLiemAieaLqeaooeW8j1xuICAgICAqIEB0eXBlICdtdWx0aXBsZScgfCAnJ1xuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2V0IHRoeU1vZGUodmFsdWU6IFNlbGVjdE1vZGUpIHtcbiAgICAgICAgdGhpcy5tb2RlID0gdmFsdWU7XG4gICAgICAgIHRoaXMuaW5zdGFuY2VTZWxlY3Rpb25Nb2RlbCgpO1xuICAgICAgICB0aGlzLmdldFBvc2l0aW9ucygpO1xuICAgICAgICB0aGlzLnNldERyb3BEb3duQ2xhc3MoKTtcbiAgICB9XG5cbiAgICBnZXQgdGh5TW9kZSgpOiBTZWxlY3RNb2RlIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubW9kZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDmk43kvZzlm77moIfnsbvlnotcbiAgICAgKiBAdHlwZSBwcmltYXJ5IHwgc3VjY2VzcyB8IGRhbmdlciB8IHdhcm5pbmdcbiAgICAgKiBAZGVmYXVsdCBwcmltYXJ5XG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBnZXQgdGh5U2l6ZSgpOiBTZWxlY3RDb250cm9sU2l6ZSB7XG4gICAgICAgIHJldHVybiB0aGlzLnNpemU7XG4gICAgfVxuICAgIHNldCB0aHlTaXplKHZhbHVlOiBTZWxlY3RDb250cm9sU2l6ZSkge1xuICAgICAgICB0aGlzLnNpemUgPSB2YWx1ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDmlbDmja7kuLrnqbrml7bmmL7npLrnmoTmj5DnpLrmloflrZdcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHNldCB0aHlFbXB0eVN0YXRlVGV4dCh2YWx1ZTogc3RyaW5nKSB7XG4gICAgICAgIHRoaXMuZW1wdHlTdGF0ZVRleHQgPSB2YWx1ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDmkJzntKLnu5PmnpzkuLrnqbrml7bmmL7npLrnmoTmj5DnpLrmloflrZdcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHNldCB0aHlFbXB0eVNlYXJjaE1lc3NhZ2VUZXh0KHZhbHVlOiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5lbXB0eVNlYXJjaE1lc3NhZ2VUZXh0ID0gdmFsdWU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog5rua5Yqo5Yqg6L295piv5ZCm5Y+v55So77yM5Y+q6IO95b2T6L+Z5Liq5Y+C5pWw5Y+v5Lul77yM5LiL6Z2i55qEdGh5T25TY3JvbGxUb0JvdHRvbeS6i+S7tuaJjeS8muinpuWPkVxuICAgICAqL1xuICAgIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KVxuICAgIHRoeUVuYWJsZVNjcm9sbExvYWQgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIOWNlemAiSggdGh5TW9kZT1cIlwiIOaIluiAheS4jeiuvue9rinml7bvvIzpgInmi6nmoYbmlK/mjIHmuIXpmaRcbiAgICAgKi9cbiAgICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSkgdGh5QWxsb3dDbGVhciA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICog5piv5ZCm56aB55SoXG4gICAgICogQGRlZmF1bHQgZmFsc2VcbiAgICAgKi9cbiAgICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSlcbiAgICBzZXQgdGh5RGlzYWJsZWQodmFsdWU6IGJvb2xlYW4pIHtcbiAgICAgICAgdGhpcy5kaXNhYmxlZCA9IHZhbHVlO1xuICAgIH1cbiAgICBnZXQgdGh5RGlzYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmRpc2FibGVkO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOaOkuW6j+avlOi+g+WHveaVsFxuICAgICAqL1xuICAgIEBJbnB1dCgpIHRoeVNvcnRDb21wYXJhdG9yOiAoYTogVGh5T3B0aW9uLCBiOiBUaHlPcHRpb24sIG9wdGlvbnM6IFRoeU9wdGlvbltdKSA9PiBudW1iZXI7XG5cbiAgICAvKipcbiAgICAgKiBGb290ZXIg5qih5p2/77yM6buY6K6k5YC85Li656m65LiN5pi+56S6IEZvb3RlclxuICAgICAqIEB0eXBlIFRlbXBsYXRlUmVmXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICB0aHlGb290ZXJUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcblxuICAgIC8qKlxuICAgICAqIOW8ueWHuuS9jee9rlxuICAgICAqIEB0eXBlIFRoeVBsYWNlbWVudFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgdGh5UGxhY2VtZW50OiBUaHlQbGFjZW1lbnQ7XG5cbiAgICAvKipcbiAgICAgKiDoh6rlrprkuYkgT3ZlcmxheSBPcmlnaW5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHRoeU9yaWdpbjogRWxlbWVudFJlZiB8IEhUTUxFbGVtZW50O1xuXG4gICAgLyoqXG4gICAgICog6Ieq5a6a5LmJIEZvb3RlciDmqKHmnb/lrrnlmaggY2xhc3NcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHRoeUZvb3RlckNsYXNzID0gJ3RoeS1jdXN0b20tc2VsZWN0LWZvb3Rlcic7XG5cbiAgICAvKipcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIEBDb250ZW50Q2hpbGQoJ3NlbGVjdGVkRGlzcGxheScpIHNlbGVjdGVkVmFsdWVEaXNwbGF5UmVmOiBUZW1wbGF0ZVJlZjxhbnk+O1xuXG4gICAgLyoqXG4gICAgICog5Yid5aeL5YyW5pe277yM5piv5ZCm5bGV5byA6Z2i5p2/XG4gICAgICogQGRlZmF1bHQgZmFsc2VcbiAgICAgKi9cbiAgICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSkgdGh5QXV0b0V4cGFuZDogYm9vbGVhbjtcblxuICAgIC8qKlxuICAgICAqIOaYr+WQpuW8ueWHuumAj+aYjumBrue9qe+8jOWmguaenOaYvuekuumBrue9qeWImeS8mumYu+atoua7muWKqOWMuuWfn+a7muWKqFxuICAgICAqL1xuICAgIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KVxuICAgIHRoeUhhc0JhY2tkcm9wID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiDorr7nva7lpJrpgInml7bmnIDlpKfmmL7npLrnmoTmoIfnrb7mlbDph4/vvIwwIOihqOekuuS4jemZkOWItlxuICAgICAqL1xuICAgIEBJbnB1dCh7IHRyYW5zZm9ybTogbnVtYmVyQXR0cmlidXRlIH0pIHRoeU1heFRhZ0NvdW50ID0gMDtcblxuICAgIC8qKlxuICAgICAqIOaYr+WQpumakOiXj+mAieaLqeahhui+ueahhlxuICAgICAqIEBkZWZhdWx0IGZhbHNlXG4gICAgICovXG4gICAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pIHRoeUJvcmRlcmxlc3MgPSBmYWxzZTtcblxuICAgIGlzUmVhY3RpdmVEcml2ZW4gPSBmYWxzZTtcblxuICAgIGlubmVyT3B0aW9uczogVGh5U2VsZWN0T3B0aW9uTW9kZWxbXTtcblxuICAgIG9wdGlvbkdyb3VwczogVGh5T3B0aW9uR3JvdXBNb2RlbFtdID0gW107XG5cbiAgICAvKipcbiAgICAgKiBvcHRpb24g5YiX6KGoXG4gICAgICogQHR5cGUgVGh5U2VsZWN0T3B0aW9uTW9kZWxbXVxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2V0IHRoeU9wdGlvbnModmFsdWU6IFRoeVNlbGVjdE9wdGlvbk1vZGVsW10pIHtcbiAgICAgICAgaWYgKHZhbHVlID09PSBudWxsKSB7XG4gICAgICAgICAgICB2YWx1ZSA9IFtdO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuaW5uZXJPcHRpb25zID0gdmFsdWU7XG4gICAgICAgIHRoaXMuaXNSZWFjdGl2ZURyaXZlbiA9IHRydWU7XG4gICAgICAgIHRoaXMuYnVpbGRSZWFjdGl2ZU9wdGlvbnMoKTtcbiAgICB9XG5cbiAgICBvcHRpb25zOiBRdWVyeUxpc3Q8VGh5T3B0aW9uPjtcblxuICAgIC8qKlxuICAgICAqIOebruWJjeWPquaUr+aMgeWkmumAiemAieS4remhueeahOWxleekuu+8jOm7mOiupOS4uuepuu+8jOa4suafk+aWh+Wtl+aooeadv++8jOS8oOWFpXRhZ++8jOa4suafk+WxleekuuaooeadvyxcbiAgICAgKiBAZGVmYXVsdCAnJ++9nHRhZ1xuICAgICAqL1xuICAgIEBJbnB1dCgpIHRoeVByZXNldDogc3RyaW5nID0gJyc7XG5cbiAgICBAVmlld0NoaWxkKCd0cmlnZ2VyJywgeyByZWFkOiBFbGVtZW50UmVmLCBzdGF0aWM6IHRydWUgfSkgdHJpZ2dlcjogRWxlbWVudFJlZjxIVE1MRWxlbWVudD47XG5cbiAgICBAVmlld0NoaWxkKCdwYW5lbCcsIHsgcmVhZDogRWxlbWVudFJlZiB9KSBwYW5lbDogRWxlbWVudFJlZjxIVE1MRWxlbWVudD47XG5cbiAgICAvKipcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIEBDb250ZW50Q2hpbGRyZW4oVGh5T3B0aW9uLCB7IGRlc2NlbmRhbnRzOiB0cnVlIH0pIGNvbnRlbnRPcHRpb25zOiBRdWVyeUxpc3Q8VGh5T3B0aW9uPjtcblxuICAgIEBWaWV3Q2hpbGRyZW4oVGh5T3B0aW9uKSB2aWV3T3B0aW9uczogUXVlcnlMaXN0PFRoeU9wdGlvbj47XG5cbiAgICAvKipcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIEBDb250ZW50Q2hpbGRyZW4oVGh5U2VsZWN0T3B0aW9uR3JvdXApIGNvbnRlbnRHcm91cHM6IFF1ZXJ5TGlzdDxUaHlTZWxlY3RPcHRpb25Hcm91cD47XG5cbiAgICBAVmlld0NoaWxkcmVuKFRoeVNlbGVjdE9wdGlvbkdyb3VwKSB2aWV3R3JvdXBzOiBRdWVyeUxpc3Q8VGh5U2VsZWN0T3B0aW9uR3JvdXA+O1xuXG4gICAgQEhvc3RMaXN0ZW5lcigna2V5ZG93bicsIFsnJGV2ZW50J10pXG4gICAgaGFuZGxlS2V5ZG93bihldmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMuZGlzYWJsZWQpIHtcbiAgICAgICAgICAgIGlmIChldmVudC5rZXlDb2RlID09PSBFTlRFUikge1xuICAgICAgICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5wYW5lbE9wZW4gPyB0aGlzLmhhbmRsZU9wZW5LZXlkb3duKGV2ZW50KSA6IHRoaXMuaGFuZGxlQ2xvc2VkS2V5ZG93bihldmVudCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBnZXQgb3B0aW9uc0NoYW5nZXMkKCkge1xuICAgICAgICB0aGlzLm9wdGlvbnMgPSB0aGlzLmlzUmVhY3RpdmVEcml2ZW4gPyB0aGlzLnZpZXdPcHRpb25zIDogdGhpcy5jb250ZW50T3B0aW9ucztcbiAgICAgICAgbGV0IHByZXZpb3VzT3B0aW9uczogVGh5T3B0aW9uW10gPSB0aGlzLm9wdGlvbnMudG9BcnJheSgpO1xuICAgICAgICByZXR1cm4gdGhpcy5vcHRpb25zLmNoYW5nZXMucGlwZShcbiAgICAgICAgICAgIG1hcChkYXRhID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5vcHRpb25zLnRvQXJyYXkoKTtcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgZmlsdGVyKGRhdGEgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlcyA9IHByZXZpb3VzT3B0aW9ucy5sZW5ndGggIT09IGRhdGEubGVuZ3RoIHx8IHByZXZpb3VzT3B0aW9ucy5zb21lKChvcCwgaW5kZXgpID0+IG9wICE9PSBkYXRhW2luZGV4XSk7XG4gICAgICAgICAgICAgICAgcHJldmlvdXNPcHRpb25zID0gZGF0YTtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGJ1aWxkU2Nyb2xsU3RyYXRlZ3koKSB7XG4gICAgICAgIGlmICh0aGlzLnNjcm9sbFN0cmF0ZWd5RmFjdG9yeSAmJiBpc0Z1bmN0aW9uKHRoaXMuc2Nyb2xsU3RyYXRlZ3lGYWN0b3J5KSkge1xuICAgICAgICAgICAgdGhpcy5zY3JvbGxTdHJhdGVneSA9IHRoaXMuc2Nyb2xsU3RyYXRlZ3lGYWN0b3J5KCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnNjcm9sbFN0cmF0ZWd5ID0gdGhpcy5vdmVybGF5LnNjcm9sbFN0cmF0ZWdpZXMucmVwb3NpdGlvbigpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpc1NlYXJjaGluZyA9IGZhbHNlO1xuXG4gICAgZ3JvdXBCeSA9IChpdGVtOiBUaHlTZWxlY3RPcHRpb25Nb2RlbCkgPT4gaXRlbS5ncm91cExhYmVsO1xuXG4gICAgZ2V0IHBsYWNlbWVudCgpOiBUaHlQbGFjZW1lbnQge1xuICAgICAgICByZXR1cm4gdGhpcy50aHlQbGFjZW1lbnQgfHwgdGhpcy5jb25maWcucGxhY2VtZW50O1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcml2YXRlIG5nWm9uZTogTmdab25lLFxuICAgICAgICBwcml2YXRlIGVsZW1lbnRSZWY6IEVsZW1lbnRSZWYsXG4gICAgICAgIHByaXZhdGUgY2hhbmdlRGV0ZWN0b3JSZWY6IENoYW5nZURldGVjdG9yUmVmLFxuICAgICAgICBwcml2YXRlIG92ZXJsYXk6IE92ZXJsYXksXG4gICAgICAgIHByaXZhdGUgdGh5Q2xpY2tEaXNwYXRjaGVyOiBUaHlDbGlja0Rpc3BhdGNoZXIsXG4gICAgICAgIEBJbmplY3QoUExBVEZPUk1fSUQpIHByaXZhdGUgcGxhdGZvcm1JZDogc3RyaW5nLFxuICAgICAgICBAT3B0aW9uYWwoKSBASW5qZWN0KFRIWV9TRUxFQ1RfU0NST0xMX1NUUkFURUdZKSBwdWJsaWMgc2Nyb2xsU3RyYXRlZ3lGYWN0b3J5OiBGdW5jdGlvblByb3A8U2Nyb2xsU3RyYXRlZ3k+LFxuICAgICAgICBAT3B0aW9uYWwoKSBASW5qZWN0KFRIWV9TRUxFQ1RfQ09ORklHKSBwdWJsaWMgc2VsZWN0Q29uZmlnOiBUaHlTZWxlY3RDb25maWdcbiAgICApIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgdGhpcy5jb25maWcgPSB7IC4uLkRFRkFVTFRfU0VMRUNUX0NPTkZJRywgLi4uc2VsZWN0Q29uZmlnIH07XG4gICAgICAgIHRoaXMuYnVpbGRTY3JvbGxTdHJhdGVneSgpO1xuICAgIH1cblxuICAgIHdyaXRlVmFsdWUodmFsdWU6IGFueSk6IHZvaWQge1xuICAgICAgICB0aGlzLm1vZGFsVmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgdGhpcy5zZXRTZWxlY3Rpb25CeU1vZGVsVmFsdWUodGhpcy5tb2RhbFZhbHVlKTtcbiAgICB9XG5cbiAgICBuZ09uSW5pdCgpIHtcbiAgICAgICAgdGhpcy5nZXRQb3NpdGlvbnMoKTtcbiAgICAgICAgdGhpcy5kcm9wRG93bk1pbldpZHRoID0gdGhpcy5nZXREcm9wZG93bk1pbldpZHRoKCk7XG4gICAgICAgIGlmICghdGhpcy5zZWxlY3Rpb25Nb2RlbCkge1xuICAgICAgICAgICAgdGhpcy5pbnN0YW5jZVNlbGVjdGlvbk1vZGVsKCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zZXREcm9wRG93bkNsYXNzKCk7XG5cbiAgICAgICAgaWYgKGlzUGxhdGZvcm1Ccm93c2VyKHRoaXMucGxhdGZvcm1JZCkpIHtcbiAgICAgICAgICAgIHRoaXMudGh5Q2xpY2tEaXNwYXRjaGVyXG4gICAgICAgICAgICAgICAgLmNsaWNrZWQoMClcbiAgICAgICAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXG4gICAgICAgICAgICAgICAgLnN1YnNjcmliZShldmVudCA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuY29udGFpbnMoZXZlbnQudGFyZ2V0KSAmJiB0aGlzLnBhbmVsT3Blbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5uZ1pvbmUucnVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNsb3NlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBidWlsZE9wdGlvbkdyb3VwcyhvcHRpb25zOiBUaHlTZWxlY3RPcHRpb25Nb2RlbFtdKSB7XG4gICAgICAgIGNvbnN0IG9wdGlvbkdyb3VwczogVGh5T3B0aW9uR3JvdXBNb2RlbFtdID0gW107XG4gICAgICAgIGNvbnN0IGdyb3VwcyA9IFsuLi5uZXcgU2V0KG9wdGlvbnMuZmlsdGVyKGl0ZW0gPT4gdGhpcy5ncm91cEJ5KGl0ZW0pKS5tYXAoc3ViID0+IHRoaXMuZ3JvdXBCeShzdWIpKSldO1xuICAgICAgICBjb25zdCBncm91cE1hcCA9IG5ldyBNYXAoKTtcbiAgICAgICAgZ3JvdXBzLmZvckVhY2goZ3JvdXAgPT4ge1xuICAgICAgICAgICAgY29uc3QgY2hpbGRyZW4gPSBvcHRpb25zLmZpbHRlcihpdGVtID0+IHRoaXMuZ3JvdXBCeShpdGVtKSA9PT0gZ3JvdXApO1xuICAgICAgICAgICAgY29uc3QgZ3JvdXBPcHRpb24gPSB7XG4gICAgICAgICAgICAgICAgZ3JvdXBMYWJlbDogZ3JvdXAsXG4gICAgICAgICAgICAgICAgY2hpbGRyZW46IGNoaWxkcmVuXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgZ3JvdXBNYXAuc2V0KGdyb3VwLCBncm91cE9wdGlvbik7XG4gICAgICAgIH0pO1xuICAgICAgICBvcHRpb25zLmZvckVhY2gob3B0aW9uID0+IHtcbiAgICAgICAgICAgIGlmICh0aGlzLmdyb3VwQnkob3B0aW9uKSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRJbmRleCA9IG9wdGlvbkdyb3Vwcy5maW5kSW5kZXgoaXRlbSA9PiBpdGVtLmdyb3VwTGFiZWwgPT09IHRoaXMuZ3JvdXBCeShvcHRpb24pKTtcbiAgICAgICAgICAgICAgICBpZiAoY3VycmVudEluZGV4ID09PSAtMSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBpdGVtID0gZ3JvdXBNYXAuZ2V0KHRoaXMuZ3JvdXBCeShvcHRpb24pKTtcbiAgICAgICAgICAgICAgICAgICAgb3B0aW9uR3JvdXBzLnB1c2goaXRlbSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBvcHRpb25Hcm91cHMucHVzaChvcHRpb24pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIG9wdGlvbkdyb3VwcztcbiAgICB9XG5cbiAgICBidWlsZFJlYWN0aXZlT3B0aW9ucygpIHtcbiAgICAgICAgaWYgKHRoaXMuaW5uZXJPcHRpb25zLmZpbHRlcihpdGVtID0+IHRoaXMuZ3JvdXBCeShpdGVtKSkubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgdGhpcy5vcHRpb25Hcm91cHMgPSB0aGlzLmJ1aWxkT3B0aW9uR3JvdXBzKHRoaXMuaW5uZXJPcHRpb25zKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMub3B0aW9uR3JvdXBzID0gdGhpcy5pbm5lck9wdGlvbnM7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBnZXREcm9wZG93bk1pbldpZHRoKCk6IG51bWJlciB8IG51bGwge1xuICAgICAgICBjb25zdCBtb2RlID0gdGhpcy50aHlEcm9wZG93bldpZHRoTW9kZSB8fCB0aGlzLmNvbmZpZy5kcm9wZG93bldpZHRoTW9kZTtcbiAgICAgICAgbGV0IGRyb3Bkb3duTWluV2lkdGg6IG51bWJlciB8IG51bGwgPSBudWxsO1xuXG4gICAgICAgIGlmICgobW9kZSBhcyB7IG1pbldpZHRoOiBudW1iZXIgfSk/Lm1pbldpZHRoKSB7XG4gICAgICAgICAgICBkcm9wZG93bk1pbldpZHRoID0gKG1vZGUgYXMgeyBtaW5XaWR0aDogbnVtYmVyIH0pLm1pbldpZHRoO1xuICAgICAgICB9IGVsc2UgaWYgKG1vZGUgPT09ICdtaW4td2lkdGgnKSB7XG4gICAgICAgICAgICBkcm9wZG93bk1pbldpZHRoID0gVEhZX1NFTEVDVF9QQU5FTF9NSU5fV0lEVEg7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBkcm9wZG93bk1pbldpZHRoID0gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBkcm9wZG93bk1pbldpZHRoO1xuICAgIH1cblxuICAgIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuaXNSZWFjdGl2ZURyaXZlbikge1xuICAgICAgICAgICAgdGhpcy5zZXR1cCgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgbmdBZnRlckNvbnRlbnRJbml0KCkge1xuICAgICAgICBpZiAoIXRoaXMuaXNSZWFjdGl2ZURyaXZlbikge1xuICAgICAgICAgICAgdGhpcy5zZXR1cCgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgc2V0dXAoKSB7XG4gICAgICAgIHRoaXMub3B0aW9uc0NoYW5nZXMkLnBpcGUoc3RhcnRXaXRoKG51bGwpLCB0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZShkYXRhID0+IHtcbiAgICAgICAgICAgIHRoaXMucmVzZXRPcHRpb25zKCk7XG4gICAgICAgICAgICB0aGlzLmluaXRpYWxpemVTZWxlY3Rpb24oKTtcbiAgICAgICAgICAgIHRoaXMuaW5pdEtleU1hbmFnZXIoKTtcbiAgICAgICAgICAgIGlmICh0aGlzLmlzU2VhcmNoaW5nKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5oaWdobGlnaHRDb3JyZWN0T3B0aW9uKGZhbHNlKTtcbiAgICAgICAgICAgICAgICB0aGlzLmlzU2VhcmNoaW5nID0gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICAgICAgdGhpcy5uZ1pvbmUub25TdGFibGVcbiAgICAgICAgICAgICAgICAuYXNPYnNlcnZhYmxlKClcbiAgICAgICAgICAgICAgICAucGlwZSh0YWtlKDEpKVxuICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5jZGtDb25uZWN0ZWRPdmVybGF5ICYmIHRoaXMuY2RrQ29ubmVjdGVkT3ZlcmxheS5vdmVybGF5UmVmKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNka0Nvbm5lY3RlZE92ZXJsYXkub3ZlcmxheVJlZi51cGRhdGVQb3NpdGlvbigpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlmICh0aGlzLnRoeUF1dG9FeHBhbmQpIHtcbiAgICAgICAgICAgIHRpbWVyKDApLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgICAgICAgICB0aGlzLm9wZW4oKTtcbiAgICAgICAgICAgICAgICB0aGlzLmZvY3VzKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgaXNIaWRkZW5PcHRpb25zKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5vcHRpb25zLnRvQXJyYXkoKS5ldmVyeShvcHRpb24gPT4gb3B0aW9uLmhpZGRlbik7XG4gICAgfVxuXG4gICAgcHVibGljIG9uQXR0YWNoZWQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuY2RrQ29ubmVjdGVkT3ZlcmxheS5wb3NpdGlvbkNoYW5nZS5waXBlKHRha2UoMSkpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICBpZiAodGhpcy5wYW5lbCkge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmtleU1hbmFnZXIuYWN0aXZlSXRlbSkge1xuICAgICAgICAgICAgICAgICAgICBTY3JvbGxUb1NlcnZpY2Uuc2Nyb2xsVG9FbGVtZW50KHRoaXMua2V5TWFuYWdlci5hY3RpdmVJdGVtLmVsZW1lbnQubmF0aXZlRWxlbWVudCwgdGhpcy5wYW5lbC5uYXRpdmVFbGVtZW50KTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLmVtcHR5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBTY3JvbGxUb1NlcnZpY2Uuc2Nyb2xsVG9FbGVtZW50KHRoaXMuc2VsZWN0aW9uTW9kZWwuc2VsZWN0ZWRbMF0uZWxlbWVudC5uYXRpdmVFbGVtZW50LCB0aGlzLnBhbmVsLm5hdGl2ZUVsZW1lbnQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBkcm9wRG93bk1vdXNlTW92ZShldmVudDogTW91c2VFdmVudCkge1xuICAgICAgICBpZiAodGhpcy5rZXlNYW5hZ2VyLmFjdGl2ZUl0ZW0pIHtcbiAgICAgICAgICAgIHRoaXMua2V5TWFuYWdlci5zZXRBY3RpdmVJdGVtKC0xKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBvbk9wdGlvbnNTY3JvbGxlZChlbGVtZW50UmVmOiBFbGVtZW50UmVmKSB7XG4gICAgICAgIGNvbnN0IHNjcm9sbCA9IGVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5zY3JvbGxUb3AsXG4gICAgICAgICAgICBoZWlnaHQgPSBlbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuY2xpZW50SGVpZ2h0LFxuICAgICAgICAgICAgc2Nyb2xsSGVpZ2h0ID0gZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnNjcm9sbEhlaWdodDtcblxuICAgICAgICBpZiAoc2Nyb2xsICsgaGVpZ2h0ICsgMTAgPj0gc2Nyb2xsSGVpZ2h0KSB7XG4gICAgICAgICAgICBpZiAodGhpcy50aHlPblNjcm9sbFRvQm90dG9tLm9ic2VydmVycy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5uZ1pvbmUucnVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50aHlPblNjcm9sbFRvQm90dG9tLmVtaXQoKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBvblNlYXJjaEZpbHRlcihzZWFyY2hUZXh0OiBzdHJpbmcpIHtcbiAgICAgICAgc2VhcmNoVGV4dCA9IHNlYXJjaFRleHQudHJpbSgpO1xuICAgICAgICBpZiAodGhpcy50aHlTZXJ2ZXJTZWFyY2gpIHtcbiAgICAgICAgICAgIHRoaXMuaXNTZWFyY2hpbmcgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy50aHlPblNlYXJjaC5lbWl0KHNlYXJjaFRleHQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHRoaXMub3B0aW9ucy50b0FycmF5KCk7XG4gICAgICAgICAgICBvcHRpb25zLmZvckVhY2gob3B0aW9uID0+IHtcbiAgICAgICAgICAgICAgICBpZiAob3B0aW9uLm1hdGNoU2VhcmNoVGV4dChzZWFyY2hUZXh0KSkge1xuICAgICAgICAgICAgICAgICAgICBvcHRpb24uc2hvd09wdGlvbigpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIG9wdGlvbi5oaWRlT3B0aW9uKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLmhpZ2hsaWdodENvcnJlY3RPcHRpb24oZmFsc2UpO1xuICAgICAgICAgICAgdGhpcy51cGRhdGVDZGtDb25uZWN0ZWRPdmVybGF5UG9zaXRpb25zKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBvbkJsdXIoZXZlbnQ/OiBGb2N1c0V2ZW50KSB7XG4gICAgICAgIC8vIFRhYiDogZrnhKblkI7oh6rliqjogZrnhKbliLAgaW5wdXQg6L6T5YWl5qGG77yM5q2k5YiG5pSv5LiL55u05o6l6L+U5Zue77yM5peg6ZyA6Kem5Y+RIG9uVG91Y2hlZEZuXG4gICAgICAgIGlmIChlbGVtZW50TWF0Y2hDbG9zZXN0KGV2ZW50Py5yZWxhdGVkVGFyZ2V0IGFzIEhUTUxFbGVtZW50LCBbJy50aHktc2VsZWN0LWRyb3Bkb3duJywgJ3RoeS1zZWxlY3QnXSkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLm9uVG91Y2hlZEZuKCk7XG4gICAgfVxuXG4gICAgb25Gb2N1cyhldmVudD86IEZvY3VzRXZlbnQpIHtcbiAgICAgICAgLy8gdGh5U2hvd1NlYXJjaCDkuI4gcGFuZWxPcGVuIOWdh+S4uiB0cnVlIOaXtu+8jOeCueWHuyB0aHlTZWxlY3RDb250cm9sIOmcgOimgeinpuWPkeiHquWKqOiBmueEpuWIsCBpbnB1dCDnmoTpgLvovpFcbiAgICAgICAgLy8gbWFudWFsRm9jdXNpbmcg5aaC5p6c5piv5omL5Yqo6IGa54Sm77yM5LiN6Kem5Y+R6Ieq5Yqo6IGa54Sm5YiwIGlucHV0IOeahOmAu+i+kVxuICAgICAgICBpZiAoXG4gICAgICAgICAgICAodGhpcy50aHlTaG93U2VhcmNoICYmIHRoaXMucGFuZWxPcGVuKSB8fFxuICAgICAgICAgICAgKCF0aGlzLm1hbnVhbEZvY3VzaW5nICYmXG4gICAgICAgICAgICAgICAgIWVsZW1lbnRNYXRjaENsb3Nlc3QoZXZlbnQ/LnJlbGF0ZWRUYXJnZXQgYXMgSFRNTEVsZW1lbnQsIFsnLnRoeS1zZWxlY3QtZHJvcGRvd24nLCAndGh5LWN1c3RvbS1zZWxlY3QnXSkpXG4gICAgICAgICkge1xuICAgICAgICAgICAgY29uc3QgaW5wdXRFbGVtZW50OiBIVE1MSW5wdXRFbGVtZW50ID0gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcignaW5wdXQnKTtcbiAgICAgICAgICAgIGlucHV0RWxlbWVudC5mb2N1cygpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMubWFudWFsRm9jdXNpbmcgPSBmYWxzZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZm9jdXMob3B0aW9ucz86IEZvY3VzT3B0aW9ucyk6IHZvaWQge1xuICAgICAgICB0aGlzLm1hbnVhbEZvY3VzaW5nID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuZm9jdXMob3B0aW9ucyk7XG4gICAgICAgIHRoaXMubWFudWFsRm9jdXNpbmcgPSBmYWxzZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgcmVtb3ZlKCRldmVudDogeyBpdGVtOiBUaHlPcHRpb247ICRldmVudE9yaWdpbjogRXZlbnQgfSkge1xuICAgICAgICAkZXZlbnQuJGV2ZW50T3JpZ2luLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICBpZiAodGhpcy5kaXNhYmxlZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICghdGhpcy5vcHRpb25zLmZpbmQob3B0aW9uID0+IG9wdGlvbiA9PT0gJGV2ZW50Lml0ZW0pKSB7XG4gICAgICAgICAgICAkZXZlbnQuaXRlbS5kZXNlbGVjdCgpO1xuICAgICAgICAgICAgLy8gZml4IG9wdGlvbiB1bnNlbGVjdCBjYW4gbm90IGVtaXQgY2hhbmdlcztcbiAgICAgICAgICAgIHRoaXMub25TZWxlY3QoJGV2ZW50Lml0ZW0sIHRydWUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgJGV2ZW50Lml0ZW0uZGVzZWxlY3QoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBjbGVhclNlbGVjdFZhbHVlKGV2ZW50PzogRXZlbnQpIHtcbiAgICAgICAgaWYgKGV2ZW50KSB7XG4gICAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5kaXNhYmxlZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuc2VsZWN0aW9uTW9kZWwuY2xlYXIoKTtcbiAgICAgICAgdGhpcy5jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgdGhpcy5lbWl0TW9kZWxWYWx1ZUNoYW5nZSgpO1xuICAgIH1cblxuICAgIHB1YmxpYyB1cGRhdGVDZGtDb25uZWN0ZWRPdmVybGF5UG9zaXRpb25zKCk6IHZvaWQge1xuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIGlmICh0aGlzLmNka0Nvbm5lY3RlZE92ZXJsYXkgJiYgdGhpcy5jZGtDb25uZWN0ZWRPdmVybGF5Lm92ZXJsYXlSZWYpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNka0Nvbm5lY3RlZE92ZXJsYXkub3ZlcmxheVJlZi51cGRhdGVQb3NpdGlvbigpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IHNlbGVjdGVkKCk6IFRoeU9wdGlvbiB8IFRoeU9wdGlvbltdIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNNdWx0aXBsZSA/IHRoaXMuc2VsZWN0aW9uTW9kZWwuc2VsZWN0ZWQgOiB0aGlzLnNlbGVjdGlvbk1vZGVsLnNlbGVjdGVkWzBdO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgaXNNdWx0aXBsZSgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubW9kZSA9PT0gJ211bHRpcGxlJztcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGVtcHR5KCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gIXRoaXMuc2VsZWN0aW9uTW9kZWwgfHwgdGhpcy5zZWxlY3Rpb25Nb2RlbC5pc0VtcHR5KCk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldEl0ZW1Db3VudCgpOiBudW1iZXIge1xuICAgICAgICBjb25zdCBncm91cCA9IHRoaXMuaXNSZWFjdGl2ZURyaXZlbiA/IHRoaXMudmlld0dyb3VwcyA6IHRoaXMuY29udGVudEdyb3VwcztcbiAgICAgICAgcmV0dXJuIHRoaXMub3B0aW9ucy5sZW5ndGggKyBncm91cC5sZW5ndGg7XG4gICAgfVxuXG4gICAgcHVibGljIHRvZ2dsZShldmVudDogTW91c2VFdmVudCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5wYW5lbE9wZW4pIHtcbiAgICAgICAgICAgIGlmICghdGhpcy50aHlTaG93U2VhcmNoKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jbG9zZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5vcGVuKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgb3BlbigpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuZGlzYWJsZWQgfHwgIXRoaXMub3B0aW9ucyB8fCB0aGlzLnBhbmVsT3Blbikge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMudHJpZ2dlclJlY3RXaWR0aCA9IHRoaXMuZ2V0T3JpZ2luUmVjdFdpZHRoKCk7XG4gICAgICAgIHRoaXMuc3Vic2NyaWJlVHJpZ2dlclJlc2l6ZSgpO1xuICAgICAgICB0aGlzLnBhbmVsT3BlbiA9IHRydWU7XG4gICAgICAgIHRoaXMuaGlnaGxpZ2h0Q29ycmVjdE9wdGlvbigpO1xuICAgICAgICB0aGlzLnRoeU9uRXhwYW5kU3RhdHVzQ2hhbmdlLmVtaXQodGhpcy5wYW5lbE9wZW4pO1xuICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cblxuICAgIHB1YmxpYyBjbG9zZSgpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMucGFuZWxPcGVuKSB7XG4gICAgICAgICAgICB0aGlzLnBhbmVsT3BlbiA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy51bnN1YnNjcmliZVRyaWdnZXJSZXNpemUoKTtcbiAgICAgICAgICAgIHRoaXMudGh5T25FeHBhbmRTdGF0dXNDaGFuZ2UuZW1pdCh0aGlzLnBhbmVsT3Blbik7XG4gICAgICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICAgICAgdGhpcy5vblRvdWNoZWRGbigpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBlbWl0TW9kZWxWYWx1ZUNoYW5nZSgpIHtcbiAgICAgICAgY29uc3Qgc2VsZWN0ZWRWYWx1ZXMgPSB0aGlzLnNlbGVjdGlvbk1vZGVsLnNlbGVjdGVkO1xuICAgICAgICBjb25zdCBjaGFuZ2VWYWx1ZSA9IHNlbGVjdGVkVmFsdWVzLm1hcCgob3B0aW9uOiBUaHlPcHRpb24pID0+IHtcbiAgICAgICAgICAgIHJldHVybiBvcHRpb24udGh5VmFsdWU7XG4gICAgICAgIH0pO1xuICAgICAgICBpZiAodGhpcy5pc011bHRpcGxlKSB7XG4gICAgICAgICAgICB0aGlzLm1vZGFsVmFsdWUgPSBjaGFuZ2VWYWx1ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmIChjaGFuZ2VWYWx1ZS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICB0aGlzLm1vZGFsVmFsdWUgPSBudWxsO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLm1vZGFsVmFsdWUgPSBjaGFuZ2VWYWx1ZVswXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLm9uQ2hhbmdlRm4odGhpcy5tb2RhbFZhbHVlKTtcbiAgICAgICAgdGhpcy51cGRhdGVDZGtDb25uZWN0ZWRPdmVybGF5UG9zaXRpb25zKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBoaWdobGlnaHRDb3JyZWN0T3B0aW9uKGZyb21PcGVuUGFuZWw6IGJvb2xlYW4gPSB0cnVlKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmtleU1hbmFnZXIgJiYgdGhpcy5wYW5lbE9wZW4pIHtcbiAgICAgICAgICAgIGlmIChmcm9tT3BlblBhbmVsKSB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMua2V5TWFuYWdlci5hY3RpdmVJdGVtKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuZW1wdHkpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLnRoeUF1dG9BY3RpdmVGaXJzdEl0ZW0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB0aGlzLmtleU1hbmFnZXIuc2V0Rmlyc3RJdGVtQWN0aXZlKCk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5rZXlNYW5hZ2VyLnNldEFjdGl2ZUl0ZW0odGhpcy5zZWxlY3Rpb25Nb2RlbC5zZWxlY3RlZFswXSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMudGh5QXV0b0FjdGl2ZUZpcnN0SXRlbSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIGFsd2F5cyBzZXQgZmlyc3Qgb3B0aW9uIGFjdGl2ZVxuICAgICAgICAgICAgICAgIHRoaXMua2V5TWFuYWdlci5zZXRGaXJzdEl0ZW1BY3RpdmUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgaW5pdEtleU1hbmFnZXIoKSB7XG4gICAgICAgIGlmICh0aGlzLmtleU1hbmFnZXIgJiYgdGhpcy5rZXlNYW5hZ2VyLmFjdGl2ZUl0ZW0pIHtcbiAgICAgICAgICAgIHRoaXMua2V5TWFuYWdlci5hY3RpdmVJdGVtLnNldEluYWN0aXZlU3R5bGVzKCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5rZXlNYW5hZ2VyID0gbmV3IEFjdGl2ZURlc2NlbmRhbnRLZXlNYW5hZ2VyPFRoeU9wdGlvbj4odGhpcy5vcHRpb25zKVxuICAgICAgICAgICAgLndpdGhUeXBlQWhlYWQoKVxuICAgICAgICAgICAgLndpdGhXcmFwKClcbiAgICAgICAgICAgIC53aXRoVmVydGljYWxPcmllbnRhdGlvbigpXG4gICAgICAgICAgICAud2l0aEFsbG93ZWRNb2RpZmllcktleXMoWydzaGlmdEtleSddKTtcblxuICAgICAgICB0aGlzLmtleU1hbmFnZXIudGFiT3V0LnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5mb2N1cygpO1xuICAgICAgICAgICAgdGhpcy5jbG9zZSgpO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5rZXlNYW5hZ2VyLmNoYW5nZS5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgIGlmICh0aGlzLnBhbmVsT3BlbiAmJiB0aGlzLnBhbmVsKSB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMua2V5TWFuYWdlci5hY3RpdmVJdGVtKSB7XG4gICAgICAgICAgICAgICAgICAgIFNjcm9sbFRvU2VydmljZS5zY3JvbGxUb0VsZW1lbnQodGhpcy5rZXlNYW5hZ2VyLmFjdGl2ZUl0ZW0uZWxlbWVudC5uYXRpdmVFbGVtZW50LCB0aGlzLnBhbmVsLm5hdGl2ZUVsZW1lbnQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSBpZiAoIXRoaXMucGFuZWxPcGVuICYmICF0aGlzLmlzTXVsdGlwbGUgJiYgdGhpcy5rZXlNYW5hZ2VyLmFjdGl2ZUl0ZW0pIHtcbiAgICAgICAgICAgICAgICB0aGlzLmtleU1hbmFnZXIuYWN0aXZlSXRlbS5zZWxlY3RWaWFJbnRlcmFjdGlvbigpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGhhbmRsZUNsb3NlZEtleWRvd24oZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgY29uc3Qga2V5Q29kZSA9IGV2ZW50LmtleUNvZGU7XG4gICAgICAgIGNvbnN0IGlzQXJyb3dLZXkgPSBrZXlDb2RlID09PSBET1dOX0FSUk9XIHx8IGtleUNvZGUgPT09IFVQX0FSUk9XIHx8IGtleUNvZGUgPT09IExFRlRfQVJST1cgfHwga2V5Q29kZSA9PT0gUklHSFRfQVJST1c7XG4gICAgICAgIGNvbnN0IGlzT3BlbktleSA9IGtleUNvZGUgPT09IEVOVEVSIHx8IGtleUNvZGUgPT09IFNQQUNFO1xuICAgICAgICBjb25zdCBtYW5hZ2VyID0gdGhpcy5rZXlNYW5hZ2VyO1xuXG4gICAgICAgIC8vIE9wZW4gdGhlIHNlbGVjdCBvbiBBTFQgKyBhcnJvdyBrZXkgdG8gbWF0Y2ggdGhlIG5hdGl2ZSA8c2VsZWN0PlxuICAgICAgICBpZiAoKGlzT3BlbktleSAmJiAhaGFzTW9kaWZpZXJLZXkoZXZlbnQpKSB8fCAoKHRoaXMuaXNNdWx0aXBsZSB8fCBldmVudC5hbHRLZXkpICYmIGlzQXJyb3dLZXkpKSB7XG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpOyAvLyBwcmV2ZW50cyB0aGUgcGFnZSBmcm9tIHNjcm9sbGluZyBkb3duIHdoZW4gcHJlc3Npbmcgc3BhY2VcbiAgICAgICAgICAgIHRoaXMub3BlbigpO1xuICAgICAgICB9IGVsc2UgaWYgKCF0aGlzLmlzTXVsdGlwbGUpIHtcbiAgICAgICAgICAgIGlmIChrZXlDb2RlID09PSBIT01FIHx8IGtleUNvZGUgPT09IEVORCkge1xuICAgICAgICAgICAgICAgIGtleUNvZGUgPT09IEhPTUUgPyBtYW5hZ2VyLnNldEZpcnN0SXRlbUFjdGl2ZSgpIDogbWFuYWdlci5zZXRMYXN0SXRlbUFjdGl2ZSgpO1xuICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIG1hbmFnZXIub25LZXlkb3duKGV2ZW50KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgaGFuZGxlT3BlbktleWRvd24oZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgY29uc3Qga2V5Q29kZSA9IGV2ZW50LmtleUNvZGU7XG4gICAgICAgIGNvbnN0IGlzQXJyb3dLZXkgPSBrZXlDb2RlID09PSBET1dOX0FSUk9XIHx8IGtleUNvZGUgPT09IFVQX0FSUk9XO1xuICAgICAgICBjb25zdCBtYW5hZ2VyID0gdGhpcy5rZXlNYW5hZ2VyO1xuXG4gICAgICAgIGlmIChrZXlDb2RlID09PSBIT01FIHx8IGtleUNvZGUgPT09IEVORCkge1xuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIGtleUNvZGUgPT09IEhPTUUgPyBtYW5hZ2VyLnNldEZpcnN0SXRlbUFjdGl2ZSgpIDogbWFuYWdlci5zZXRMYXN0SXRlbUFjdGl2ZSgpO1xuICAgICAgICB9IGVsc2UgaWYgKGlzQXJyb3dLZXkgJiYgZXZlbnQuYWx0S2V5KSB7XG4gICAgICAgICAgICAvLyBDbG9zZSB0aGUgc2VsZWN0IG9uIEFMVCArIGFycm93IGtleSB0byBtYXRjaCB0aGUgbmF0aXZlIDxzZWxlY3Q+XG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgdGhpcy5jbG9zZSgpO1xuICAgICAgICB9IGVsc2UgaWYgKChrZXlDb2RlID09PSBFTlRFUiB8fCBrZXlDb2RlID09PSBTUEFDRSkgJiYgKG1hbmFnZXIuYWN0aXZlSXRlbSB8fCAhdGhpcy5lbXB0eSkgJiYgIWhhc01vZGlmaWVyS2V5KGV2ZW50KSkge1xuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIGlmICghbWFuYWdlci5hY3RpdmVJdGVtKSB7XG4gICAgICAgICAgICAgICAgaWYgKG1hbmFnZXIuYWN0aXZlSXRlbUluZGV4ID09PSAtMSAmJiAhdGhpcy5lbXB0eSkge1xuICAgICAgICAgICAgICAgICAgICBtYW5hZ2VyLnNldEFjdGl2ZUl0ZW0odGhpcy5zZWxlY3Rpb25Nb2RlbC5zZWxlY3RlZFswXSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbWFuYWdlci5hY3RpdmVJdGVtLnNlbGVjdFZpYUludGVyYWN0aW9uKCk7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5pc011bHRpcGxlICYmIGtleUNvZGUgPT09IEEgJiYgZXZlbnQuY3RybEtleSkge1xuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIGNvbnN0IGhhc0Rlc2VsZWN0ZWRPcHRpb25zID0gdGhpcy5vcHRpb25zLnNvbWUob3B0ID0+ICFvcHQuZGlzYWJsZWQgJiYgIW9wdC5zZWxlY3RlZCk7XG5cbiAgICAgICAgICAgIHRoaXMub3B0aW9ucy5mb3JFYWNoKG9wdGlvbiA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKCFvcHRpb24uZGlzYWJsZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgaGFzRGVzZWxlY3RlZE9wdGlvbnMgPyBvcHRpb24uc2VsZWN0KCkgOiBvcHRpb24uZGVzZWxlY3QoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmIChtYW5hZ2VyLmFjdGl2ZUl0ZW1JbmRleCA9PT0gLTEgJiYgIXRoaXMuZW1wdHkpIHtcbiAgICAgICAgICAgICAgICBtYW5hZ2VyLnNldEFjdGl2ZUl0ZW0odGhpcy5zZWxlY3Rpb25Nb2RlbC5zZWxlY3RlZFswXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBwcmV2aW91c2x5Rm9jdXNlZEluZGV4ID0gbWFuYWdlci5hY3RpdmVJdGVtSW5kZXg7XG5cbiAgICAgICAgICAgIG1hbmFnZXIub25LZXlkb3duKGV2ZW50KTtcblxuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIHRoaXMuaXNNdWx0aXBsZSAmJlxuICAgICAgICAgICAgICAgIGlzQXJyb3dLZXkgJiZcbiAgICAgICAgICAgICAgICBldmVudC5zaGlmdEtleSAmJlxuICAgICAgICAgICAgICAgIG1hbmFnZXIuYWN0aXZlSXRlbSAmJlxuICAgICAgICAgICAgICAgIG1hbmFnZXIuYWN0aXZlSXRlbUluZGV4ICE9PSBwcmV2aW91c2x5Rm9jdXNlZEluZGV4XG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICBtYW5hZ2VyLmFjdGl2ZUl0ZW0uc2VsZWN0VmlhSW50ZXJhY3Rpb24oKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0UG9zaXRpb25zKCkge1xuICAgICAgICB0aGlzLmRyb3BEb3duUG9zaXRpb25zID0gZ2V0RmxleGlibGVQb3NpdGlvbnModGhpcy50aHlQbGFjZW1lbnQgfHwgdGhpcy5jb25maWcucGxhY2VtZW50LCB0aGlzLmRlZmF1bHRPZmZzZXQpO1xuICAgIH1cblxuICAgIHByaXZhdGUgaW5zdGFuY2VTZWxlY3Rpb25Nb2RlbCgpIHtcbiAgICAgICAgaWYgKHRoaXMuc2VsZWN0aW9uTW9kZWwpIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uTW9kZWwuY2xlYXIoKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnNlbGVjdGlvbk1vZGVsID0gbmV3IFNlbGVjdGlvbk1vZGVsPFRoeU9wdGlvbj4odGhpcy5pc011bHRpcGxlKTtcbiAgICAgICAgaWYgKHRoaXMuc2VsZWN0aW9uTW9kZWxTdWJzY3JpcHRpb24pIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uTW9kZWxTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uTW9kZWxTdWJzY3JpcHRpb24gPSBudWxsO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuc2VsZWN0aW9uTW9kZWxTdWJzY3JpcHRpb24gPSB0aGlzLnNlbGVjdGlvbk1vZGVsLmNoYW5nZWQucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZShldmVudCA9PiB7XG4gICAgICAgICAgICBldmVudC5hZGRlZC5mb3JFYWNoKG9wdGlvbiA9PiBvcHRpb24uc2VsZWN0KCkpO1xuICAgICAgICAgICAgZXZlbnQucmVtb3ZlZC5mb3JFYWNoKG9wdGlvbiA9PiBvcHRpb24uZGVzZWxlY3QoKSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgcmVzZXRPcHRpb25zKCkge1xuICAgICAgICBjb25zdCBjaGFuZ2VkT3JEZXN0cm95ZWQkID0gbWVyZ2UodGhpcy5vcHRpb25zQ2hhbmdlcyQsIHRoaXMuZGVzdHJveSQpO1xuXG4gICAgICAgIHRoaXMub3B0aW9uU2VsZWN0aW9uQ2hhbmdlcy5waXBlKHRha2VVbnRpbChjaGFuZ2VkT3JEZXN0cm95ZWQkKSkuc3Vic2NyaWJlKChldmVudDogVGh5T3B0aW9uU2VsZWN0aW9uQ2hhbmdlRXZlbnQpID0+IHtcbiAgICAgICAgICAgIHRoaXMub25TZWxlY3QoZXZlbnQub3B0aW9uLCBldmVudC5pc1VzZXJJbnB1dCk7XG4gICAgICAgICAgICBpZiAoZXZlbnQuaXNVc2VySW5wdXQgJiYgIXRoaXMuaXNNdWx0aXBsZSAmJiB0aGlzLnBhbmVsT3Blbikge1xuICAgICAgICAgICAgICAgIHRoaXMuY2xvc2UoKTtcbiAgICAgICAgICAgICAgICB0aGlzLmZvY3VzKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgaW5pdGlhbGl6ZVNlbGVjdGlvbigpIHtcbiAgICAgICAgUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnNldFNlbGVjdGlvbkJ5TW9kZWxWYWx1ZSh0aGlzLm1vZGFsVmFsdWUpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHNldERyb3BEb3duQ2xhc3MoKSB7XG4gICAgICAgIGxldCBtb2RlQ2xhc3MgPSAnJztcbiAgICAgICAgaWYgKHRoaXMuaXNNdWx0aXBsZSkge1xuICAgICAgICAgICAgbW9kZUNsYXNzID0gYHRoeS1zZWxlY3QtZHJvcGRvd24tJHt0aGlzLm1vZGV9YDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG1vZGVDbGFzcyA9IGB0aHktc2VsZWN0LWRyb3Bkb3duLXNpbmdsZWA7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5kcm9wRG93bkNsYXNzID0ge1xuICAgICAgICAgICAgW2B0aHktc2VsZWN0LWRyb3Bkb3duYF06IHRydWUsXG4gICAgICAgICAgICBbbW9kZUNsYXNzXTogdHJ1ZVxuICAgICAgICB9O1xuICAgIH1cblxuICAgIHByaXZhdGUgc2V0U2VsZWN0aW9uQnlNb2RlbFZhbHVlKG1vZGFsVmFsdWU6IGFueSkge1xuICAgICAgICBpZiAoaGVscGVycy5pc1VuZGVmaW5lZE9yTnVsbChtb2RhbFZhbHVlKSkge1xuICAgICAgICAgICAgaWYgKHRoaXMuc2VsZWN0aW9uTW9kZWwuc2VsZWN0ZWQubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uTW9kZWwuY2xlYXIoKTtcbiAgICAgICAgICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmlzTXVsdGlwbGUpIHtcbiAgICAgICAgICAgIGlmIChpc0FycmF5KG1vZGFsVmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgc2VsZWN0ZWQgPSBbLi4udGhpcy5zZWxlY3Rpb25Nb2RlbC5zZWxlY3RlZF07XG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25Nb2RlbC5jbGVhcigpO1xuICAgICAgICAgICAgICAgIChtb2RhbFZhbHVlIGFzIEFycmF5PGFueT4pLmZvckVhY2goaXRlbVZhbHVlID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgb3B0aW9uID1cbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMub3B0aW9ucy5maW5kKF9vcHRpb24gPT4gX29wdGlvbi50aHlWYWx1ZSA9PT0gaXRlbVZhbHVlKSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWQuZmluZChfb3B0aW9uID0+IF9vcHRpb24udGh5VmFsdWUgPT09IGl0ZW1WYWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChvcHRpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uTW9kZWwuc2VsZWN0KG9wdGlvbik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IHNlbGVjdGVkT3B0aW9uID0gdGhpcy5vcHRpb25zPy5maW5kKG9wdGlvbiA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG9wdGlvbi50aHlWYWx1ZSA9PT0gbW9kYWxWYWx1ZTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgaWYgKHNlbGVjdGVkT3B0aW9uKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25Nb2RlbC5zZWxlY3Qoc2VsZWN0ZWRPcHRpb24pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBvblNlbGVjdChvcHRpb246IFRoeU9wdGlvbiwgaXNVc2VySW5wdXQ6IGJvb2xlYW4pIHtcbiAgICAgICAgY29uc3Qgd2FzU2VsZWN0ZWQgPSB0aGlzLnNlbGVjdGlvbk1vZGVsLmlzU2VsZWN0ZWQob3B0aW9uKTtcblxuICAgICAgICBpZiAob3B0aW9uLnRoeVZhbHVlID09IG51bGwgJiYgIXRoaXMuaXNNdWx0aXBsZSkge1xuICAgICAgICAgICAgb3B0aW9uLmRlc2VsZWN0KCk7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGlvbk1vZGVsLmNsZWFyKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAod2FzU2VsZWN0ZWQgIT09IG9wdGlvbi5zZWxlY3RlZCkge1xuICAgICAgICAgICAgICAgIG9wdGlvbi5zZWxlY3RlZCA/IHRoaXMuc2VsZWN0aW9uTW9kZWwuc2VsZWN0KG9wdGlvbikgOiB0aGlzLnNlbGVjdGlvbk1vZGVsLmRlc2VsZWN0KG9wdGlvbik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChpc1VzZXJJbnB1dCkge1xuICAgICAgICAgICAgICAgIHRoaXMua2V5TWFuYWdlci5zZXRBY3RpdmVJdGVtKG9wdGlvbik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICh0aGlzLmlzTXVsdGlwbGUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNvcnRWYWx1ZXMoKTtcbiAgICAgICAgICAgICAgICBpZiAoaXNVc2VySW5wdXQpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5mb2N1cygpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh3YXNTZWxlY3RlZCAhPT0gdGhpcy5zZWxlY3Rpb25Nb2RlbC5pc1NlbGVjdGVkKG9wdGlvbikpIHtcbiAgICAgICAgICAgIHRoaXMuZW1pdE1vZGVsVmFsdWVDaGFuZ2UoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXRoaXMuaXNNdWx0aXBsZSkge1xuICAgICAgICAgICAgdGhpcy5vblRvdWNoZWRGbigpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzb3J0VmFsdWVzKCkge1xuICAgICAgICBpZiAodGhpcy5pc011bHRpcGxlKSB7XG4gICAgICAgICAgICBjb25zdCBvcHRpb25zID0gdGhpcy5vcHRpb25zLnRvQXJyYXkoKTtcblxuICAgICAgICAgICAgaWYgKHRoaXMudGh5U29ydENvbXBhcmF0b3IpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGlvbk1vZGVsLnNvcnQoKGEsIGIpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMudGh5U29ydENvbXBhcmF0b3IoYSwgYiwgb3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGdldE9yaWdpblJlY3RXaWR0aCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudGh5T3JpZ2luID8gY29lcmNlRWxlbWVudCh0aGlzLnRoeU9yaWdpbikub2Zmc2V0V2lkdGggOiB0aGlzLnRyaWdnZXIubmF0aXZlRWxlbWVudC5vZmZzZXRXaWR0aDtcbiAgICB9XG5cbiAgICBwcml2YXRlIHN1YnNjcmliZVRyaWdnZXJSZXNpemUoKTogdm9pZCB7XG4gICAgICAgIHRoaXMudW5zdWJzY3JpYmVUcmlnZ2VyUmVzaXplKCk7XG4gICAgICAgIHRoaXMubmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMucmVzaXplU3Vic2NyaXB0aW9uID0gbmV3IE9ic2VydmFibGU8bnVtYmVyPihvYnNlcnZlciA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVzaXplID0gbmV3IFJlc2l6ZU9ic2VydmVyKChlbnRyaWVzOiBSZXNpemVPYnNlcnZlckVudHJ5W10pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgb2JzZXJ2ZXIubmV4dCgpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHJlc2l6ZS5vYnNlcnZlKHRoaXMudHJpZ2dlci5uYXRpdmVFbGVtZW50KTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgICAgIHN0YXJ0V2l0aCgpLFxuICAgICAgICAgICAgICAgICAgICBtYXAoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0T3JpZ2luUmVjdFdpZHRoKCk7XG4gICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoKHdpZHRoOiBudW1iZXIpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5uZ1pvbmUucnVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudHJpZ2dlclJlY3RXaWR0aCA9IHdpZHRoO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy51cGRhdGVDZGtDb25uZWN0ZWRPdmVybGF5UG9zaXRpb25zKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB1bnN1YnNjcmliZVRyaWdnZXJSZXNpemUoKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLnJlc2l6ZVN1YnNjcmlwdGlvbikge1xuICAgICAgICAgICAgdGhpcy5yZXNpemVTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgIHRoaXMucmVzaXplU3Vic2NyaXB0aW9uID0gbnVsbDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG5nT25EZXN0cm95KCkge1xuICAgICAgICB0aGlzLnVuc3Vic2NyaWJlVHJpZ2dlclJlc2l6ZSgpO1xuICAgICAgICB0aGlzLmRlc3Ryb3kkLm5leHQoKTtcbiAgICAgICAgdGhpcy5kZXN0cm95JC5jb21wbGV0ZSgpO1xuICAgIH1cbn1cbiIsIjxkaXZcbiAgY2RrLW92ZXJsYXktb3JpZ2luXG4gIHRoeVNlbGVjdENvbnRyb2xcbiAgKGNsaWNrKT1cInRvZ2dsZSgkZXZlbnQpXCJcbiAgI29yaWdpbj1cImNka092ZXJsYXlPcmlnaW5cIlxuICAjdHJpZ2dlclxuICBbdGh5UGFuZWxPcGVuZWRdPVwicGFuZWxPcGVuXCJcbiAgW3RoeVNlbGVjdGVkT3B0aW9uc109XCJzZWxlY3RlZFwiXG4gIFt0aHlJc011bHRpcGxlXT1cImlzTXVsdGlwbGVcIlxuICBbdGh5U2hvd1NlYXJjaF09XCJ0aHlTaG93U2VhcmNoXCJcbiAgW3RoeUFsbG93Q2xlYXJdPVwidGh5QWxsb3dDbGVhclwiXG4gIFt0aHlTaXplXT1cInRoeVNpemVcIlxuICBbdGh5UGxhY2Vob2xkZXJdPVwidGh5UGxhY2VIb2xkZXJcIlxuICBbY3VzdG9tRGlzcGxheVRlbXBsYXRlXT1cInNlbGVjdGVkVmFsdWVEaXNwbGF5UmVmXCJcbiAgW3RoeURpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgW3RoeUJvcmRlcmxlc3NdPVwidGh5Qm9yZGVybGVzc1wiXG4gICh0aHlPbkNsZWFyKT1cImNsZWFyU2VsZWN0VmFsdWUoJGV2ZW50KVwiXG4gICh0aHlPblJlbW92ZSk9XCJyZW1vdmUoJGV2ZW50KVwiXG4gICh0aHlPblNlYXJjaCk9XCJvblNlYXJjaEZpbHRlcigkZXZlbnQpXCJcbiAgKHRoeU9uQmx1cik9XCJvbkJsdXIoJGV2ZW50KVwiXG4gIFt0aHlNYXhUYWdDb3VudF09XCJ0aHlNYXhUYWdDb3VudFwiXG4gIFt0aHlQcmVzZXRdPVwidGh5UHJlc2V0XCI+PC9kaXY+XG5cbjxuZy10ZW1wbGF0ZVxuICBjZGstY29ubmVjdGVkLW92ZXJsYXlcbiAgY2RrQ29ubmVjdGVkT3ZlcmxheUJhY2tkcm9wQ2xhc3M9XCJjZGstb3ZlcmxheS10cmFuc3BhcmVudC1iYWNrZHJvcFwiXG4gIFtjZGtDb25uZWN0ZWRPdmVybGF5SGFzQmFja2Ryb3BdPVwidGh5SGFzQmFja2Ryb3BcIlxuICBbY2RrQ29ubmVjdGVkT3ZlcmxheVBvc2l0aW9uc109XCJkcm9wRG93blBvc2l0aW9uc1wiXG4gIFtjZGtDb25uZWN0ZWRPdmVybGF5T3JpZ2luXT1cInRoeU9yaWdpbiB8fCBvcmlnaW5cIlxuICBbY2RrQ29ubmVjdGVkT3ZlcmxheU9wZW5dPVwicGFuZWxPcGVuXCJcbiAgW2Nka0Nvbm5lY3RlZE92ZXJsYXlXaWR0aF09XCJ0cmlnZ2VyUmVjdFdpZHRoXCJcbiAgW2Nka0Nvbm5lY3RlZE92ZXJsYXlNaW5XaWR0aF09XCJkcm9wRG93bk1pbldpZHRoXCJcbiAgW2Nka0Nvbm5lY3RlZE92ZXJsYXlTY3JvbGxTdHJhdGVneV09XCJzY3JvbGxTdHJhdGVneVwiXG4gIGNka0Nvbm5lY3RlZE92ZXJsYXlUcmFuc2Zvcm1PcmlnaW5Pbj1cIi50aHktc2VsZWN0LWRyb3Bkb3duXCJcbiAgKGF0dGFjaCk9XCJvbkF0dGFjaGVkKClcIlxuICAoZGV0YWNoKT1cImNsb3NlKClcIj5cbiAgPGRpdlxuICAgIHRoeVN0b3BQcm9wYWdhdGlvblxuICAgIFthdHRyLnRhYmluZGV4XT1cIi0xXCJcbiAgICBbbmdDbGFzc109XCJkcm9wRG93bkNsYXNzXCJcbiAgICBbQHNjYWxlWU1vdGlvbl09XCJwbGFjZW1lbnQgPT09ICd0b3AnIHx8IHBsYWNlbWVudCA9PT0gJ2JvdHRvbScgPyAnZW50ZXInIDogJ3ZvaWQnXCJcbiAgICBbQHNjYWxlWE1vdGlvbl09XCJwbGFjZW1lbnQgPT09ICdsZWZ0JyB8fCBwbGFjZW1lbnQgPT09ICdyaWdodCcgPyAnZW50ZXInIDogJ3ZvaWQnXCJcbiAgICBbQHNjYWxlTW90aW9uXT1cInBsYWNlbWVudCAhPT0gJ3RvcCcgJiYgcGxhY2VtZW50ICE9PSAnYm90dG9tJyAmJiBwbGFjZW1lbnQgIT09ICdsZWZ0JyAmJiBwbGFjZW1lbnQgIT09ICdyaWdodCcgPyAnZW50ZXInIDogJ3ZvaWQnXCJcbiAgICAobW91c2Vtb3ZlKT1cImRyb3BEb3duTW91c2VNb3ZlKCRldmVudClcIj5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29udGVudE9wdGlvbnM/Lmxlbmd0aCA+IDAgfHwgY29udGVudEdyb3Vwcz8ubGVuZ3RoID4gMCB8fCBpbm5lck9wdGlvbnM/Lmxlbmd0aCA+IDA7IGVsc2UgZW1wdHlQbGFjZWhvbGRlclwiPlxuICAgICAgPGRpdlxuICAgICAgICAjcGFuZWxcbiAgICAgICAgY2xhc3M9XCJ0aHktc2VsZWN0LWRyb3Bkb3duLW9wdGlvbnMgdGh5LXNlbGVjdC1kcm9wZG93bi1vcHRpb25zLXt7IHNpemUgfX1cIlxuICAgICAgICB0aHlTY3JvbGxcbiAgICAgICAgKHRoeU9uU2Nyb2xsZWQpPVwib25PcHRpb25zU2Nyb2xsZWQoJGV2ZW50KVwiXG4gICAgICAgIFt0aHlFbmFibGVdPVwidGh5RW5hYmxlU2Nyb2xsTG9hZFwiPlxuICAgICAgICA8bmctdGVtcGxhdGUgKm5nSWY9XCJpc1JlYWN0aXZlRHJpdmVuXCIgW25nVGVtcGxhdGVPdXRsZXRdPVwib3B0aW9uc0NvbnRhaW5lci5vcHRpb25zVGVtcGxhdGVcIj48L25nLXRlbXBsYXRlPlxuICAgICAgICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJpc0hpZGRlbk9wdGlvbnNcIj5cbiAgICAgICAgICA8dGh5LWxvYWRpbmcgW3RoeURvbmVdPVwidGh5TG9hZFN0YXRlXCIgdGh5U2l6ZT1cInNtXCI+PC90aHktbG9hZGluZz5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwidGh5LXNlbGVjdC1lbXB0eS1jb250ZW50XCI+XG4gICAgICAgICAgICA8dGh5LWVtcHR5ICpuZ0lmPVwidGh5TG9hZFN0YXRlXCIgW3RoeU1lc3NhZ2VdPVwiZW1wdHlTZWFyY2hNZXNzYWdlVGV4dFwiIHRoeVNpemU9XCJzbVwiPjwvdGh5LWVtcHR5PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvZGl2PlxuICAgIDwvbmctY29udGFpbmVyPlxuICAgIDxuZy10ZW1wbGF0ZSAjZW1wdHlQbGFjZWhvbGRlcj5cbiAgICAgIDx0aHktbG9hZGluZyBbdGh5RG9uZV09XCJ0aHlMb2FkU3RhdGVcIiB0aHlTaXplPVwic21cIj48L3RoeS1sb2FkaW5nPlxuICAgICAgPGRpdiBjbGFzcz1cInRoeS1zZWxlY3QtZW1wdHktY29udGVudFwiPlxuICAgICAgICA8dGh5LWVtcHR5ICpuZ0lmPVwidGh5TG9hZFN0YXRlXCIgW3RoeU1lc3NhZ2VdPVwiZW1wdHlTdGF0ZVRleHRcIiB0aHlTaXplPVwic21cIj48L3RoeS1lbXB0eT5cbiAgICAgIDwvZGl2PlxuICAgIDwvbmctdGVtcGxhdGU+XG4gICAgPGRpdiAqbmdJZj1cInRoeUZvb3RlclRlbXBsYXRlXCIgW2NsYXNzXT1cInRoeUZvb3RlckNsYXNzID8gdGh5Rm9vdGVyQ2xhc3MgOiAndGh5LWN1c3RvbS1zZWxlY3QtZm9vdGVyJ1wiPlxuICAgICAgPG5nLXRlbXBsYXRlICpuZ0lmPVwidGh5Rm9vdGVyVGVtcGxhdGVcIiBbbmdUZW1wbGF0ZU91dGxldF09XCJ0aHlGb290ZXJUZW1wbGF0ZVwiPjwvbmctdGVtcGxhdGU+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cblxuPHRoeS1vcHRpb25zLWNvbnRhaW5lciAjb3B0aW9uc0NvbnRhaW5lcj5cbiAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgb3B0aW9uIG9mIG9wdGlvbkdyb3Vwc1wiPlxuICAgIDx0aHktb3B0aW9uXG4gICAgICAqbmdJZj1cIiFvcHRpb24uY2hpbGRyZW47IGVsc2Ugb3B0aW9uR3JvdXBcIlxuICAgICAgW3RoeURpc2FibGVkXT1cIm9wdGlvbi5kaXNhYmxlZFwiXG4gICAgICBbdGh5TGFiZWxUZXh0XT1cIm9wdGlvbi5sYWJlbFwiXG4gICAgICBbdGh5VmFsdWVdPVwib3B0aW9uLnZhbHVlXCJcbiAgICAgIFt0aHlSYXdWYWx1ZV09XCJvcHRpb25cIj48L3RoeS1vcHRpb24+XG4gICAgPG5nLXRlbXBsYXRlICNvcHRpb25Hcm91cD5cbiAgICAgIDx0aHktb3B0aW9uLWdyb3VwIFt0aHlHcm91cExhYmVsXT1cIm9wdGlvbi5ncm91cExhYmVsXCI+XG4gICAgICAgIDx0aHktb3B0aW9uXG4gICAgICAgICAgKm5nRm9yPVwibGV0IHN1YiBvZiBvcHRpb24uY2hpbGRyZW5cIlxuICAgICAgICAgIFt0aHlEaXNhYmxlZF09XCJzdWIuZGlzYWJsZWRcIlxuICAgICAgICAgIFt0aHlMYWJlbFRleHRdPVwic3ViLmxhYmVsXCJcbiAgICAgICAgICBbdGh5VmFsdWVdPVwic3ViLnZhbHVlXCJcbiAgICAgICAgICBbdGh5UmF3VmFsdWVdPVwic3ViXCI+PC90aHktb3B0aW9uPlxuICAgICAgPC90aHktb3B0aW9uLWdyb3VwPlxuICAgIDwvbmctdGVtcGxhdGU+XG4gIDwvbmctY29udGFpbmVyPlxuPC90aHktb3B0aW9ucy1jb250YWluZXI+XG4iXX0=
|