@carto/kepler.gl 0.0.86-alpha.deck9.1 → 0.0.86
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/dist/actions/action-wrapper.js +41 -36
- package/dist/actions/actions.js +21 -15
- package/dist/actions/identity-actions.js +20 -14
- package/dist/actions/index.js +16 -16
- package/dist/actions/map-state-actions.js +18 -12
- package/dist/actions/map-style-actions.js +46 -30
- package/dist/actions/provider-actions.js +73 -49
- package/dist/actions/ui-state-actions.js +113 -73
- package/dist/actions/vis-state-actions.js +148 -152
- package/dist/cloud-providers/index.js +7 -6
- package/dist/cloud-providers/provider.js +279 -189
- package/dist/components/bottom-widget.js +117 -105
- package/dist/components/common/action-panel.js +74 -122
- package/dist/components/common/animation-control/animation-control.js +54 -69
- package/dist/components/common/animation-control/animation-controller.js +160 -134
- package/dist/components/common/animation-control/animation-speed-slider.js +54 -47
- package/dist/components/common/animation-control/floating-time-display.js +100 -120
- package/dist/components/common/animation-control/playback-controls.js +144 -147
- package/dist/components/common/animation-control/speed-control.js +23 -31
- package/dist/components/common/checkbox.js +70 -56
- package/dist/components/common/color-legend.js +110 -83
- package/dist/components/common/data-table/button.js +23 -31
- package/dist/components/common/data-table/canvas.js +5 -11
- package/dist/components/common/data-table/cell-size.js +61 -51
- package/dist/components/common/data-table/grid.js +59 -40
- package/dist/components/common/data-table/index.js +348 -464
- package/dist/components/common/data-table/option-dropdown.js +33 -50
- package/dist/components/common/dataset-label.js +13 -17
- package/dist/components/common/error-boundary.js +45 -27
- package/dist/components/common/field-selector.js +139 -99
- package/dist/components/common/field-token.js +9 -24
- package/dist/components/common/file-uploader/file-drop.js +115 -96
- package/dist/components/common/file-uploader/file-upload-progress.js +45 -68
- package/dist/components/common/file-uploader/file-upload.js +187 -215
- package/dist/components/common/file-uploader/upload-button.js +22 -35
- package/dist/components/common/histogram-plot.js +58 -47
- package/dist/components/common/icons/add.js +27 -14
- package/dist/components/common/icons/anchor_window.js +18 -16
- package/dist/components/common/icons/arrow-down-alt.js +27 -14
- package/dist/components/common/icons/arrow-down-solid.js +27 -14
- package/dist/components/common/icons/arrow-down.js +27 -14
- package/dist/components/common/icons/arrow-left.js +30 -17
- package/dist/components/common/icons/arrow-right.js +27 -14
- package/dist/components/common/icons/arrow-up-alt.js +28 -15
- package/dist/components/common/icons/arrow-up-solid.js +27 -14
- package/dist/components/common/icons/arrow-up.js +27 -14
- package/dist/components/common/icons/base.js +57 -39
- package/dist/components/common/icons/bug.js +29 -16
- package/dist/components/common/icons/cancel.js +27 -14
- package/dist/components/common/icons/checkmark.js +31 -18
- package/dist/components/common/icons/chevron-right.js +33 -20
- package/dist/components/common/icons/clipboard.js +28 -15
- package/dist/components/common/icons/clock.js +29 -16
- package/dist/components/common/icons/close.js +32 -19
- package/dist/components/common/icons/code-alt.js +29 -16
- package/dist/components/common/icons/copy.js +31 -18
- package/dist/components/common/icons/crosshairs.js +29 -16
- package/dist/components/common/icons/cube-3d.js +31 -18
- package/dist/components/common/icons/cursor-click.js +31 -18
- package/dist/components/common/icons/data-table.js +28 -15
- package/dist/components/common/icons/db.js +28 -15
- package/dist/components/common/icons/delete.js +29 -16
- package/dist/components/common/icons/docs.js +43 -30
- package/dist/components/common/icons/drag-n-drop.js +29 -16
- package/dist/components/common/icons/draw-polygon.js +46 -33
- package/dist/components/common/icons/email.js +31 -18
- package/dist/components/common/icons/expand.js +29 -16
- package/dist/components/common/icons/eye-seen.js +29 -16
- package/dist/components/common/icons/eye-unseen.js +29 -16
- package/dist/components/common/icons/file-type.js +19 -35
- package/dist/components/common/icons/file.js +27 -14
- package/dist/components/common/icons/files.js +26 -14
- package/dist/components/common/icons/filter-funnel.js +27 -14
- package/dist/components/common/icons/free-window.js +18 -16
- package/dist/components/common/icons/gear.js +29 -16
- package/dist/components/common/icons/hash.js +27 -14
- package/dist/components/common/icons/histogram.js +27 -15
- package/dist/components/common/icons/index.js +156 -156
- package/dist/components/common/icons/info.js +38 -25
- package/dist/components/common/icons/layers.js +27 -14
- package/dist/components/common/icons/left-arrow.js +29 -16
- package/dist/components/common/icons/legend.js +27 -14
- package/dist/components/common/icons/line-chart.js +27 -14
- package/dist/components/common/icons/login.js +30 -17
- package/dist/components/common/icons/logout.js +29 -16
- package/dist/components/common/icons/map-icon.js +32 -18
- package/dist/components/common/icons/map.js +32 -18
- package/dist/components/common/icons/messages.js +27 -14
- package/dist/components/common/icons/minus.js +27 -14
- package/dist/components/common/icons/order-by-dataset.js +17 -15
- package/dist/components/common/icons/order-by-list.js +9 -7
- package/dist/components/common/icons/pause.js +27 -14
- package/dist/components/common/icons/picture.js +26 -14
- package/dist/components/common/icons/pin.js +30 -17
- package/dist/components/common/icons/play.js +27 -14
- package/dist/components/common/icons/polygon.js +48 -35
- package/dist/components/common/icons/rectangle.js +49 -36
- package/dist/components/common/icons/reduce.js +30 -17
- package/dist/components/common/icons/reset.js +27 -14
- package/dist/components/common/icons/rocket.js +27 -14
- package/dist/components/common/icons/save.js +29 -16
- package/dist/components/common/icons/save2.js +33 -20
- package/dist/components/common/icons/search.js +29 -16
- package/dist/components/common/icons/settings.js +29 -16
- package/dist/components/common/icons/share.js +27 -14
- package/dist/components/common/icons/split.js +55 -42
- package/dist/components/common/icons/square-select.js +29 -16
- package/dist/components/common/icons/swap-horizontal.js +31 -18
- package/dist/components/common/icons/table.js +27 -14
- package/dist/components/common/icons/trash.js +29 -16
- package/dist/components/common/icons/upload.js +27 -14
- package/dist/components/common/icons/vert-dots.js +65 -52
- package/dist/components/common/icons/vert-three-dots.js +40 -27
- package/dist/components/common/icons/warning.js +39 -26
- package/dist/components/common/image-preview.js +33 -71
- package/dist/components/common/info-helper.js +29 -36
- package/dist/components/common/item-selector/accessor.js +13 -7
- package/dist/components/common/item-selector/chickleted-input.js +56 -72
- package/dist/components/common/item-selector/dropdown-list.js +214 -182
- package/dist/components/common/item-selector/item-selector-submenu.js +55 -34
- package/dist/components/common/item-selector/item-selector.js +194 -183
- package/dist/components/common/item-selector/typeahead.js +248 -236
- package/dist/components/common/line-chart.js +58 -80
- package/dist/components/common/loading-spinner.js +31 -46
- package/dist/components/common/logo.js +48 -61
- package/dist/components/common/map-layer-selector.js +25 -31
- package/dist/components/common/modal.js +106 -167
- package/dist/components/common/portaled.js +189 -169
- package/dist/components/common/progress-bar.js +24 -27
- package/dist/components/common/range-brush.js +215 -176
- package/dist/components/common/range-plot.js +63 -52
- package/dist/components/common/range-slider.js +231 -206
- package/dist/components/common/slider/mouse-event.js +66 -59
- package/dist/components/common/slider/slider-bar-handle.js +61 -51
- package/dist/components/common/slider/slider-handle.js +102 -127
- package/dist/components/common/slider/slider.js +162 -143
- package/dist/components/common/styled-components.js +256 -518
- package/dist/components/common/switch.js +11 -11
- package/dist/components/common/time-range-slider-time-title.js +32 -49
- package/dist/components/common/time-range-slider.js +45 -56
- package/dist/components/common/time-slider-marker.js +52 -71
- package/dist/components/common/tippy-tooltip.js +59 -89
- package/dist/components/common/toolbar-item.js +45 -53
- package/dist/components/common/toolbar.js +18 -24
- package/dist/components/common/vertical-toolbar.js +6 -13
- package/dist/components/container.js +119 -87
- package/dist/components/context.js +8 -6
- package/dist/components/editor/constants.js +4 -4
- package/dist/components/editor/editor.js +157 -122
- package/dist/components/editor/feature-action-panel.js +59 -52
- package/dist/components/editor/feature-styles.js +29 -46
- package/dist/components/editor/handle-style.js +29 -38
- package/dist/components/filters/components.js +4 -8
- package/dist/components/filters/filter-panels/filter-panel-with-field-select.js +43 -33
- package/dist/components/filters/filter-panels/multi-select-filter-panel.js +21 -20
- package/dist/components/filters/filter-panels/new-filter-panel.js +31 -24
- package/dist/components/filters/filter-panels/polygon-filter-panel.js +31 -26
- package/dist/components/filters/filter-panels/range-filter-panel.js +21 -20
- package/dist/components/filters/filter-panels/single-select-filter-panel.js +21 -20
- package/dist/components/filters/filter-panels/time-range-filter-panel.js +31 -28
- package/dist/components/filters/index.js +10 -10
- package/dist/components/filters/multi-select-filter.js +9 -11
- package/dist/components/filters/polygon-filter.js +41 -26
- package/dist/components/filters/range-filter.js +7 -9
- package/dist/components/filters/single-select-filter.js +13 -11
- package/dist/components/filters/time-range-filter.js +14 -16
- package/dist/components/filters/time-widget.js +84 -125
- package/dist/components/geocoder/geocoder.js +177 -158
- package/dist/components/geocoder-panel.js +87 -66
- package/dist/components/index.js +329 -328
- package/dist/components/injector.js +63 -44
- package/dist/components/kepler-gl.js +361 -325
- package/dist/components/map/coordinate-info.js +16 -18
- package/dist/components/map/layer-hover-info.js +86 -108
- package/dist/components/map/layer-selector-panel.js +48 -50
- package/dist/components/map/locale-panel.js +44 -38
- package/dist/components/map/map-control-panel.js +47 -70
- package/dist/components/map/map-control-toolbar.js +6 -9
- package/dist/components/map/map-control-tooltip.js +8 -10
- package/dist/components/map/map-control.js +27 -35
- package/dist/components/map/map-draw-panel.js +48 -38
- package/dist/components/map/map-legend-panel.js +50 -47
- package/dist/components/map/map-legend.js +116 -133
- package/dist/components/map/map-popover.js +100 -155
- package/dist/components/map/split-map-button.js +34 -30
- package/dist/components/map/toggle-3d-button.js +27 -25
- package/dist/components/map-container.js +359 -313
- package/dist/components/maps-layout.js +26 -16
- package/dist/components/modal-container.js +355 -359
- package/dist/components/modals/add-map-style-modal.js +194 -233
- package/dist/components/modals/cloud-tile.js +67 -96
- package/dist/components/modals/data-table-modal.js +152 -155
- package/dist/components/modals/delete-data-modal.js +20 -20
- package/dist/components/modals/error-display.js +7 -9
- package/dist/components/modals/export-data-modal.js +140 -118
- package/dist/components/modals/export-image-modal.js +69 -82
- package/dist/components/modals/export-map-modal/components.js +18 -20
- package/dist/components/modals/export-map-modal/export-html-map.js +74 -82
- package/dist/components/modals/export-map-modal/export-json-map.js +45 -65
- package/dist/components/modals/export-map-modal/export-map-modal.js +47 -42
- package/dist/components/modals/image-modal-container.js +21 -20
- package/dist/components/modals/load-data-modal.js +30 -28
- package/dist/components/modals/load-storage-map.js +178 -277
- package/dist/components/modals/loading-dialog.js +19 -41
- package/dist/components/modals/modal-dialog.js +6 -4
- package/dist/components/modals/modal-tabs.js +48 -83
- package/dist/components/modals/overwrite-map-modal.js +30 -41
- package/dist/components/modals/provider-modal-container.js +42 -23
- package/dist/components/modals/save-map-modal.js +83 -107
- package/dist/components/modals/share-map-modal.js +95 -101
- package/dist/components/modals/status-panel.js +43 -63
- package/dist/components/modals/storage-map-viewer.js +70 -133
- package/dist/components/notification-panel/notification-item.js +97 -94
- package/dist/components/notification-panel.js +43 -35
- package/dist/components/performance.js +53 -49
- package/dist/components/plot-container.js +169 -151
- package/dist/components/side-panel/cloud-storage-dropdown.js +15 -13
- package/dist/components/side-panel/common/dataset-info.js +12 -16
- package/dist/components/side-panel/common/dataset-tag.js +27 -48
- package/dist/components/side-panel/common/dataset-title.js +116 -119
- package/dist/components/side-panel/common/source-data-catalog.js +32 -31
- package/dist/components/side-panel/common/source-data-selector.js +77 -52
- package/dist/components/side-panel/custom-panel.js +8 -6
- package/dist/components/side-panel/filter-manager.js +62 -48
- package/dist/components/side-panel/filter-panel/filter-panel-header.js +25 -35
- package/dist/components/side-panel/filter-panel/filter-panel.js +64 -46
- package/dist/components/side-panel/interaction-manager.js +18 -20
- package/dist/components/side-panel/interaction-panel/brush-config.js +17 -17
- package/dist/components/side-panel/interaction-panel/interaction-panel.js +95 -76
- package/dist/components/side-panel/interaction-panel/tooltip-config/tooltip-chicklet.js +143 -118
- package/dist/components/side-panel/interaction-panel/tooltip-config.js +76 -95
- package/dist/components/side-panel/layer-manager.js +115 -105
- package/dist/components/side-panel/layer-panel/add-layer-button.js +54 -92
- package/dist/components/side-panel/layer-panel/color-dimension-scale-selector.js +5 -5
- package/dist/components/side-panel/layer-panel/color-palette.js +37 -50
- package/dist/components/side-panel/layer-panel/color-range-selector.js +207 -196
- package/dist/components/side-panel/layer-panel/color-selector.js +110 -104
- package/dist/components/side-panel/layer-panel/column-selector.js +22 -34
- package/dist/components/side-panel/layer-panel/custom-markers-config-group.js +4 -4
- package/dist/components/side-panel/layer-panel/custom-palette.js +205 -248
- package/dist/components/side-panel/layer-panel/custom-picker.js +69 -51
- package/dist/components/side-panel/layer-panel/dataset-layer-group.js +42 -37
- package/dist/components/side-panel/layer-panel/dataset-layer-section.js +27 -31
- package/dist/components/side-panel/layer-panel/dataset-section.js +35 -45
- package/dist/components/side-panel/layer-panel/dimension-scale-selector.js +13 -14
- package/dist/components/side-panel/layer-panel/hex-column-config.js +55 -32
- package/dist/components/side-panel/layer-panel/layer-aggregation-resolution.js +5 -5
- package/dist/components/side-panel/layer-panel/layer-column-config.js +46 -42
- package/dist/components/side-panel/layer-panel/layer-config-group.js +144 -178
- package/dist/components/side-panel/layer-panel/layer-configurator.js +830 -826
- package/dist/components/side-panel/layer-panel/layer-list.js +94 -101
- package/dist/components/side-panel/layer-panel/layer-panel-header.js +82 -124
- package/dist/components/side-panel/layer-panel/layer-panel.js +105 -111
- package/dist/components/side-panel/layer-panel/layer-type-dropdown-list.js +58 -67
- package/dist/components/side-panel/layer-panel/layer-type-list-item.js +32 -47
- package/dist/components/side-panel/layer-panel/layer-type-selector.js +41 -30
- package/dist/components/side-panel/layer-panel/layer-visibility-by-zoom.js +43 -42
- package/dist/components/side-panel/layer-panel/panel-view-list-toggle.js +57 -55
- package/dist/components/side-panel/layer-panel/single-color-palette.js +33 -48
- package/dist/components/side-panel/layer-panel/text-label-panel.js +116 -81
- package/dist/components/side-panel/layer-panel/vis-config-by-field-selector.js +102 -88
- package/dist/components/side-panel/layer-panel/vis-config-slider.js +85 -99
- package/dist/components/side-panel/layer-panel/vis-config-switch.js +29 -38
- package/dist/components/side-panel/map-manager.js +89 -70
- package/dist/components/side-panel/map-style-panel/map-layer-selector.js +60 -72
- package/dist/components/side-panel/map-style-panel/map-style-selector.js +42 -64
- package/dist/components/side-panel/panel-dropdown.js +37 -21
- package/dist/components/side-panel/panel-header-action.js +65 -60
- package/dist/components/side-panel/panel-header.js +184 -165
- package/dist/components/side-panel/panel-tab.js +29 -35
- package/dist/components/side-panel/panel-title.js +18 -15
- package/dist/components/side-panel/panel-toggle.js +31 -30
- package/dist/components/side-panel/side-bar.js +91 -100
- package/dist/components/side-panel.js +123 -108
- package/dist/connect/keplergl-connect.js +26 -17
- package/dist/connect/with-local-selector.js +63 -31
- package/dist/constants/action-types.js +115 -113
- package/dist/constants/color-palette.js +16 -14
- package/dist/constants/color-ranges.js +28 -23
- package/dist/constants/custom-color-ranges.js +12 -12
- package/dist/constants/default-settings.js +254 -323
- package/dist/constants/index.js +63 -63
- package/dist/constants/keyevent.js +4 -4
- package/dist/constants/tooltip.js +5 -5
- package/dist/constants/user-feedbacks.js +5 -9
- package/dist/constants/user-guides.js +10 -10
- package/dist/deckgl-layers/3d-building-layer/3d-building-layer.js +63 -37
- package/dist/deckgl-layers/3d-building-layer/3d-building-utils.js +56 -52
- package/dist/deckgl-layers/cluster-layer/cluster-layer.js +168 -165
- package/dist/deckgl-layers/column-layer/enhanced-column-layer.js +43 -24
- package/dist/deckgl-layers/grid-layer/enhanced-cpu-grid-layer.js +40 -27
- package/dist/deckgl-layers/hexagon-layer/enhanced-hexagon-layer.js +40 -27
- package/dist/deckgl-layers/layer-utils/cluster-utils.js +68 -60
- package/dist/deckgl-layers/layer-utils/cpu-aggregator.js +282 -276
- package/dist/deckgl-layers/layer-utils/shader-utils.js +2 -2
- package/dist/deckgl-layers/line-layer/line-layer.js +70 -62
- package/dist/deckgl-layers/svg-icon-layer/scatterplot-icon-layer.js +51 -37
- package/dist/deckgl-layers/svg-icon-layer/svg-icon-layer.js +85 -65
- package/dist/index.js +16 -15
- package/dist/layers/aggregation-layer.js +331 -299
- package/dist/layers/arc-layer/arc-layer-icon.js +41 -27
- package/dist/layers/arc-layer/arc-layer.js +201 -174
- package/dist/layers/base-layer.js +1544 -1371
- package/dist/layers/cluster-layer/cluster-layer-icon.js +44 -30
- package/dist/layers/cluster-layer/cluster-layer.js +103 -89
- package/dist/layers/default-layer-icon.js +53 -39
- package/dist/layers/geojson-layer/geojson-layer-icon.js +55 -42
- package/dist/layers/geojson-layer/geojson-layer.js +353 -292
- package/dist/layers/geojson-layer/geojson-utils.js +36 -31
- package/dist/layers/grid-layer/grid-layer-icon.js +100 -87
- package/dist/layers/grid-layer/grid-layer.js +61 -51
- package/dist/layers/grid-layer/grid-utils.js +9 -13
- package/dist/layers/h3-hexagon-layer/h3-hexagon-layer-icon.js +35 -21
- package/dist/layers/h3-hexagon-layer/h3-hexagon-layer.js +260 -225
- package/dist/layers/h3-hexagon-layer/h3-utils.js +16 -16
- package/dist/layers/heatmap-layer/heatmap-layer-icon.js +52 -39
- package/dist/layers/heatmap-layer/heatmap-layer.js +171 -140
- package/dist/layers/hexagon-layer/hexagon-layer-icon.js +64 -51
- package/dist/layers/hexagon-layer/hexagon-layer.js +63 -49
- package/dist/layers/hexagon-layer/hexagon-utils.js +14 -15
- package/dist/layers/icon-layer/icon-info-modal.js +75 -82
- package/dist/layers/icon-layer/icon-layer-icon.js +37 -24
- package/dist/layers/icon-layer/icon-layer.js +303 -274
- package/dist/layers/index.js +29 -43
- package/dist/layers/layer-factory.js +41 -25
- package/dist/layers/layer-text-label.js +23 -21
- package/dist/layers/layer-update.js +18 -16
- package/dist/layers/line-layer/line-layer-icon.js +43 -30
- package/dist/layers/line-layer/line-layer.js +142 -123
- package/dist/layers/mapbox-utils.js +62 -61
- package/dist/layers/mapboxgl-layer.js +169 -124
- package/dist/layers/point-layer/point-layer-icon.js +59 -45
- package/dist/layers/point-layer/point-layer.js +386 -355
- package/dist/layers/s2-geometry-layer/s2-geometry-layer.js +238 -208
- package/dist/layers/s2-geometry-layer/s2-layer-icon.js +35 -21
- package/dist/layers/s2-geometry-layer/s2-utils.js +8 -9
- package/dist/layers/scenegraph-layer/scenegraph-info-modal.js +25 -24
- package/dist/layers/scenegraph-layer/scenegraph-layer-icon.js +115 -102
- package/dist/layers/scenegraph-layer/scenegraph-layer.js +172 -148
- package/dist/layers/trip-layer/trip-info-modal.js +30 -50
- package/dist/layers/trip-layer/trip-layer-icon.js +53 -40
- package/dist/layers/trip-layer/trip-layer.js +307 -239
- package/dist/layers/trip-layer/trip-utils.js +50 -34
- package/dist/layers/types.js +2 -2
- package/dist/localization/formatted-message.js +10 -8
- package/dist/localization/index.js +7 -7
- package/dist/localization/locales.js +9 -6
- package/dist/localization/messages.js +10 -13
- package/dist/localization/translations/ca.js +13 -11
- package/dist/localization/translations/cn.js +13 -11
- package/dist/localization/translations/en.js +13 -11
- package/dist/localization/translations/es.js +13 -11
- package/dist/localization/translations/fi.js +13 -11
- package/dist/localization/translations/ja.js +13 -11
- package/dist/localization/translations/pt.js +13 -11
- package/dist/localization/translations/ru.js +13 -11
- package/dist/middleware/index.js +5 -3
- package/dist/processors/data-processor.js +201 -164
- package/dist/processors/file-handler.js +233 -111
- package/dist/processors/index.js +4 -4
- package/dist/reducers/combined-updaters.js +41 -41
- package/dist/reducers/composer-helpers.js +45 -20
- package/dist/reducers/composers.js +8 -9
- package/dist/reducers/core.js +35 -31
- package/dist/reducers/index.js +22 -21
- package/dist/reducers/map-state-updaters.js +47 -65
- package/dist/reducers/map-state.js +15 -23
- package/dist/reducers/map-style-updaters.js +159 -233
- package/dist/reducers/map-style.js +16 -30
- package/dist/reducers/provider-state-updaters.js +229 -217
- package/dist/reducers/provider-state.js +17 -29
- package/dist/reducers/root.js +58 -86
- package/dist/reducers/ui-state-updaters.js +218 -337
- package/dist/reducers/ui-state.js +16 -45
- package/dist/reducers/vis-state-merger.js +209 -205
- package/dist/reducers/vis-state-selectors.js +19 -5
- package/dist/reducers/vis-state-updaters.js +876 -1003
- package/dist/reducers/vis-state.js +16 -75
- package/dist/schemas/dataset-schema.js +108 -84
- package/dist/schemas/index.js +29 -28
- package/dist/schemas/map-state-schema.js +18 -21
- package/dist/schemas/map-style-schema.js +55 -47
- package/dist/schemas/schema-manager.js +161 -147
- package/dist/schemas/schema-utils.js +9 -8
- package/dist/schemas/schema.js +87 -72
- package/dist/schemas/versions.js +3 -3
- package/dist/schemas/vis-state-schema.js +583 -441
- package/dist/styles/base.js +1021 -1217
- package/dist/styles/index.js +3 -3
- package/dist/styles/media-breakpoints.js +18 -23
- package/dist/tasks/tasks.js +39 -36
- package/dist/templates/export-map-html.js +4 -233
- package/dist/utils/aggregate-utils.js +16 -13
- package/dist/utils/color-utils.js +37 -29
- package/dist/utils/custom-scales.js +3 -3
- package/dist/utils/data-scale-utils.js +13 -6
- package/dist/utils/data-utils.js +83 -60
- package/dist/utils/dataset-utils.js +77 -48
- package/dist/utils/dom-to-image.js +163 -108
- package/dist/utils/dom-utils.js +105 -88
- package/dist/utils/export-utils.js +103 -116
- package/dist/utils/filter-utils.js +374 -379
- package/dist/utils/gl-utils.js +15 -16
- package/dist/utils/gpu-filter-utils.js +73 -54
- package/dist/utils/index.js +48 -47
- package/dist/utils/interaction-utils.js +46 -53
- package/dist/utils/layer-utils.js +78 -89
- package/dist/utils/locale-utils.js +16 -24
- package/dist/utils/map-style-utils/mapbox-gl-style-editor.js +76 -67
- package/dist/utils/map-style-utils/mapbox-utils.js +3 -4
- package/dist/utils/mapbox-utils.js +4 -3
- package/dist/utils/notifications-utils.js +38 -33
- package/dist/utils/observe-dimensions.js +54 -42
- package/dist/utils/projection-utils.js +11 -14
- package/dist/utils/split-map-utils.js +33 -30
- package/dist/utils/table-utils/data-container-utils.js +14 -15
- package/dist/utils/table-utils/data-row.js +65 -58
- package/dist/utils/table-utils/index.js +2 -2
- package/dist/utils/table-utils/indexed-data-container.js +173 -105
- package/dist/utils/table-utils/kepler-table.js +386 -362
- package/dist/utils/table-utils/row-data-container.js +164 -99
- package/dist/utils/utils.js +30 -29
- package/package.json +1 -1
|
@@ -95,9 +95,9 @@ var _actionTypes = _interopRequireDefault(require("../constants/action-types"));
|
|
|
95
95
|
*/
|
|
96
96
|
function layerConfigChange(oldLayer, newConfig) {
|
|
97
97
|
return {
|
|
98
|
-
type: _actionTypes
|
|
99
|
-
oldLayer,
|
|
100
|
-
newConfig
|
|
98
|
+
type: _actionTypes["default"].LAYER_CONFIG_CHANGE,
|
|
99
|
+
oldLayer: oldLayer,
|
|
100
|
+
newConfig: newConfig
|
|
101
101
|
};
|
|
102
102
|
}
|
|
103
103
|
/**
|
|
@@ -111,11 +111,11 @@ function layerConfigChange(oldLayer, newConfig) {
|
|
|
111
111
|
*/
|
|
112
112
|
function layerTextLabelChange(oldLayer, idx, prop, value) {
|
|
113
113
|
return {
|
|
114
|
-
type: _actionTypes
|
|
115
|
-
oldLayer,
|
|
116
|
-
idx,
|
|
117
|
-
prop,
|
|
118
|
-
value
|
|
114
|
+
type: _actionTypes["default"].LAYER_TEXT_LABEL_CHANGE,
|
|
115
|
+
oldLayer: oldLayer,
|
|
116
|
+
idx: idx,
|
|
117
|
+
prop: prop,
|
|
118
|
+
value: value
|
|
119
119
|
};
|
|
120
120
|
}
|
|
121
121
|
/**
|
|
@@ -127,9 +127,9 @@ function layerTextLabelChange(oldLayer, idx, prop, value) {
|
|
|
127
127
|
*/
|
|
128
128
|
function layerTypeChange(oldLayer, newType) {
|
|
129
129
|
return {
|
|
130
|
-
type: _actionTypes
|
|
131
|
-
oldLayer,
|
|
132
|
-
newType
|
|
130
|
+
type: _actionTypes["default"].LAYER_TYPE_CHANGE,
|
|
131
|
+
oldLayer: oldLayer,
|
|
132
|
+
newType: newType
|
|
133
133
|
};
|
|
134
134
|
}
|
|
135
135
|
/**
|
|
@@ -143,10 +143,10 @@ function layerTypeChange(oldLayer, newType) {
|
|
|
143
143
|
*/
|
|
144
144
|
function layerVisualChannelConfigChange(oldLayer, newConfig, channel) {
|
|
145
145
|
return {
|
|
146
|
-
type: _actionTypes
|
|
147
|
-
oldLayer,
|
|
148
|
-
newConfig,
|
|
149
|
-
channel
|
|
146
|
+
type: _actionTypes["default"].LAYER_VISUAL_CHANNEL_CHANGE,
|
|
147
|
+
oldLayer: oldLayer,
|
|
148
|
+
newConfig: newConfig,
|
|
149
|
+
channel: channel
|
|
150
150
|
};
|
|
151
151
|
}
|
|
152
152
|
/**
|
|
@@ -159,9 +159,9 @@ function layerVisualChannelConfigChange(oldLayer, newConfig, channel) {
|
|
|
159
159
|
*/
|
|
160
160
|
function layerVisConfigChange(oldLayer, newVisConfig) {
|
|
161
161
|
return {
|
|
162
|
-
type: _actionTypes
|
|
163
|
-
oldLayer,
|
|
164
|
-
newVisConfig
|
|
162
|
+
type: _actionTypes["default"].LAYER_VIS_CONFIG_CHANGE,
|
|
163
|
+
oldLayer: oldLayer,
|
|
164
|
+
newVisConfig: newVisConfig
|
|
165
165
|
};
|
|
166
166
|
}
|
|
167
167
|
/**
|
|
@@ -175,10 +175,10 @@ function layerVisConfigChange(oldLayer, newVisConfig) {
|
|
|
175
175
|
*/
|
|
176
176
|
function layerColorUIChange(oldLayer, prop, newConfig) {
|
|
177
177
|
return {
|
|
178
|
-
type: _actionTypes
|
|
179
|
-
oldLayer,
|
|
180
|
-
prop,
|
|
181
|
-
newConfig
|
|
178
|
+
type: _actionTypes["default"].LAYER_COLOR_UI_CHANGE,
|
|
179
|
+
oldLayer: oldLayer,
|
|
180
|
+
prop: prop,
|
|
181
|
+
newConfig: newConfig
|
|
182
182
|
};
|
|
183
183
|
}
|
|
184
184
|
/**
|
|
@@ -190,8 +190,8 @@ function layerColorUIChange(oldLayer, prop, newConfig) {
|
|
|
190
190
|
*/
|
|
191
191
|
function updateLayerBlending(mode) {
|
|
192
192
|
return {
|
|
193
|
-
type: _actionTypes
|
|
194
|
-
mode
|
|
193
|
+
type: _actionTypes["default"].UPDATE_LAYER_BLENDING,
|
|
194
|
+
mode: mode
|
|
195
195
|
};
|
|
196
196
|
}
|
|
197
197
|
/**
|
|
@@ -203,8 +203,8 @@ function updateLayerBlending(mode) {
|
|
|
203
203
|
*/
|
|
204
204
|
function interactionConfigChange(config) {
|
|
205
205
|
return {
|
|
206
|
-
type: _actionTypes
|
|
207
|
-
config
|
|
206
|
+
type: _actionTypes["default"].INTERACTION_CONFIG_CHANGE,
|
|
207
|
+
config: config
|
|
208
208
|
};
|
|
209
209
|
}
|
|
210
210
|
/**
|
|
@@ -219,11 +219,11 @@ function interactionConfigChange(config) {
|
|
|
219
219
|
*/
|
|
220
220
|
function setFilter(idx, prop, value, valueIndex) {
|
|
221
221
|
return {
|
|
222
|
-
type: _actionTypes
|
|
223
|
-
idx,
|
|
224
|
-
prop,
|
|
225
|
-
value,
|
|
226
|
-
valueIndex
|
|
222
|
+
type: _actionTypes["default"].SET_FILTER,
|
|
223
|
+
idx: idx,
|
|
224
|
+
prop: prop,
|
|
225
|
+
value: value,
|
|
226
|
+
valueIndex: valueIndex
|
|
227
227
|
};
|
|
228
228
|
}
|
|
229
229
|
/**
|
|
@@ -238,11 +238,11 @@ function setFilter(idx, prop, value, valueIndex) {
|
|
|
238
238
|
*/
|
|
239
239
|
function setFilterAnimationTime(idx, prop, value, valueIndex) {
|
|
240
240
|
return {
|
|
241
|
-
type: _actionTypes
|
|
242
|
-
idx,
|
|
243
|
-
prop,
|
|
244
|
-
value,
|
|
245
|
-
valueIndex
|
|
241
|
+
type: _actionTypes["default"].SET_FILTER_ANIMATION_TIME,
|
|
242
|
+
idx: idx,
|
|
243
|
+
prop: prop,
|
|
244
|
+
value: value,
|
|
245
|
+
valueIndex: valueIndex
|
|
246
246
|
};
|
|
247
247
|
}
|
|
248
248
|
/**
|
|
@@ -251,14 +251,12 @@ function setFilterAnimationTime(idx, prop, value, valueIndex) {
|
|
|
251
251
|
* @public
|
|
252
252
|
*/
|
|
253
253
|
function setFilterAnimationWindow(_ref) {
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
animationWindow
|
|
257
|
-
} = _ref;
|
|
254
|
+
var id = _ref.id,
|
|
255
|
+
animationWindow = _ref.animationWindow;
|
|
258
256
|
return {
|
|
259
|
-
type: _actionTypes
|
|
260
|
-
id,
|
|
261
|
-
animationWindow
|
|
257
|
+
type: _actionTypes["default"].SET_FILTER_ANIMATION_WINDOW,
|
|
258
|
+
id: id,
|
|
259
|
+
animationWindow: animationWindow
|
|
262
260
|
};
|
|
263
261
|
}
|
|
264
262
|
/**
|
|
@@ -270,8 +268,8 @@ function setFilterAnimationWindow(_ref) {
|
|
|
270
268
|
*/
|
|
271
269
|
function addFilter(dataId) {
|
|
272
270
|
return {
|
|
273
|
-
type: _actionTypes
|
|
274
|
-
dataId
|
|
271
|
+
type: _actionTypes["default"].ADD_FILTER,
|
|
272
|
+
dataId: dataId
|
|
275
273
|
};
|
|
276
274
|
}
|
|
277
275
|
/**
|
|
@@ -284,9 +282,9 @@ function addFilter(dataId) {
|
|
|
284
282
|
*/
|
|
285
283
|
function addLayer(config, datasetId) {
|
|
286
284
|
return {
|
|
287
|
-
type: _actionTypes
|
|
288
|
-
config,
|
|
289
|
-
datasetId
|
|
285
|
+
type: _actionTypes["default"].ADD_LAYER,
|
|
286
|
+
config: config,
|
|
287
|
+
datasetId: datasetId
|
|
290
288
|
};
|
|
291
289
|
}
|
|
292
290
|
/**
|
|
@@ -303,8 +301,8 @@ function addLayer(config, datasetId) {
|
|
|
303
301
|
*/
|
|
304
302
|
function reorderLayer(order) {
|
|
305
303
|
return {
|
|
306
|
-
type: _actionTypes
|
|
307
|
-
order
|
|
304
|
+
type: _actionTypes["default"].REORDER_LAYER,
|
|
305
|
+
order: order
|
|
308
306
|
};
|
|
309
307
|
}
|
|
310
308
|
/**
|
|
@@ -316,8 +314,8 @@ function reorderLayer(order) {
|
|
|
316
314
|
*/
|
|
317
315
|
function removeFilter(idx) {
|
|
318
316
|
return {
|
|
319
|
-
type: _actionTypes
|
|
320
|
-
idx
|
|
317
|
+
type: _actionTypes["default"].REMOVE_FILTER,
|
|
318
|
+
idx: idx
|
|
321
319
|
};
|
|
322
320
|
}
|
|
323
321
|
/**
|
|
@@ -329,8 +327,8 @@ function removeFilter(idx) {
|
|
|
329
327
|
*/
|
|
330
328
|
function removeLayer(idx) {
|
|
331
329
|
return {
|
|
332
|
-
type: _actionTypes
|
|
333
|
-
idx
|
|
330
|
+
type: _actionTypes["default"].REMOVE_LAYER,
|
|
331
|
+
idx: idx
|
|
334
332
|
};
|
|
335
333
|
}
|
|
336
334
|
/**
|
|
@@ -342,8 +340,8 @@ function removeLayer(idx) {
|
|
|
342
340
|
*/
|
|
343
341
|
function duplicateLayer(idx) {
|
|
344
342
|
return {
|
|
345
|
-
type: _actionTypes
|
|
346
|
-
idx
|
|
343
|
+
type: _actionTypes["default"].DUPLICATE_LAYER,
|
|
344
|
+
idx: idx
|
|
347
345
|
};
|
|
348
346
|
}
|
|
349
347
|
/**
|
|
@@ -355,8 +353,8 @@ function duplicateLayer(idx) {
|
|
|
355
353
|
*/
|
|
356
354
|
function removeDataset(dataId) {
|
|
357
355
|
return {
|
|
358
|
-
type: _actionTypes
|
|
359
|
-
dataId
|
|
356
|
+
type: _actionTypes["default"].REMOVE_DATASET,
|
|
357
|
+
dataId: dataId
|
|
360
358
|
};
|
|
361
359
|
}
|
|
362
360
|
/**
|
|
@@ -368,8 +366,8 @@ function removeDataset(dataId) {
|
|
|
368
366
|
*/
|
|
369
367
|
function showDatasetTable(dataId) {
|
|
370
368
|
return {
|
|
371
|
-
type: _actionTypes
|
|
372
|
-
dataId
|
|
369
|
+
type: _actionTypes["default"].SHOW_DATASET_TABLE,
|
|
370
|
+
dataId: dataId
|
|
373
371
|
};
|
|
374
372
|
}
|
|
375
373
|
/**
|
|
@@ -382,9 +380,9 @@ function showDatasetTable(dataId) {
|
|
|
382
380
|
*/
|
|
383
381
|
function updateTableColor(dataId, newColor) {
|
|
384
382
|
return {
|
|
385
|
-
type: _actionTypes
|
|
386
|
-
dataId,
|
|
387
|
-
newColor
|
|
383
|
+
type: _actionTypes["default"].UPDATE_TABLE_COLOR,
|
|
384
|
+
dataId: dataId,
|
|
385
|
+
newColor: newColor
|
|
388
386
|
};
|
|
389
387
|
}
|
|
390
388
|
/**
|
|
@@ -398,10 +396,10 @@ function updateTableColor(dataId, newColor) {
|
|
|
398
396
|
*/
|
|
399
397
|
function sortTableColumn(dataId, column, mode) {
|
|
400
398
|
return {
|
|
401
|
-
type: _actionTypes
|
|
402
|
-
dataId,
|
|
403
|
-
column,
|
|
404
|
-
mode
|
|
399
|
+
type: _actionTypes["default"].SORT_TABLE_COLUMN,
|
|
400
|
+
dataId: dataId,
|
|
401
|
+
column: column,
|
|
402
|
+
mode: mode
|
|
405
403
|
};
|
|
406
404
|
}
|
|
407
405
|
/**
|
|
@@ -413,9 +411,9 @@ function sortTableColumn(dataId, column, mode) {
|
|
|
413
411
|
*/
|
|
414
412
|
function pinTableColumn(dataId, column) {
|
|
415
413
|
return {
|
|
416
|
-
type: _actionTypes
|
|
417
|
-
dataId,
|
|
418
|
-
column
|
|
414
|
+
type: _actionTypes["default"].PIN_TABLE_COLUMN,
|
|
415
|
+
dataId: dataId,
|
|
416
|
+
column: column
|
|
419
417
|
};
|
|
420
418
|
}
|
|
421
419
|
/**
|
|
@@ -427,9 +425,9 @@ function pinTableColumn(dataId, column) {
|
|
|
427
425
|
*/
|
|
428
426
|
function copyTableColumn(dataId, column) {
|
|
429
427
|
return {
|
|
430
|
-
type: _actionTypes
|
|
431
|
-
dataId,
|
|
432
|
-
column
|
|
428
|
+
type: _actionTypes["default"].COPY_TABLE_COLUMN,
|
|
429
|
+
dataId: dataId,
|
|
430
|
+
column: column
|
|
433
431
|
};
|
|
434
432
|
}
|
|
435
433
|
// * @param dataset.info -info of a dataset
|
|
@@ -455,10 +453,10 @@ function copyTableColumn(dataId, column) {
|
|
|
455
453
|
*/
|
|
456
454
|
function updateVisData(datasets, options, config) {
|
|
457
455
|
return {
|
|
458
|
-
type: _actionTypes
|
|
459
|
-
datasets,
|
|
460
|
-
options,
|
|
461
|
-
config
|
|
456
|
+
type: _actionTypes["default"].UPDATE_VIS_DATA,
|
|
457
|
+
datasets: datasets,
|
|
458
|
+
options: options,
|
|
459
|
+
config: config
|
|
462
460
|
};
|
|
463
461
|
}
|
|
464
462
|
/**
|
|
@@ -471,9 +469,9 @@ function updateVisData(datasets, options, config) {
|
|
|
471
469
|
*/
|
|
472
470
|
function renameDataset(dataId, label) {
|
|
473
471
|
return {
|
|
474
|
-
type: _actionTypes
|
|
475
|
-
dataId,
|
|
476
|
-
label
|
|
472
|
+
type: _actionTypes["default"].RENAME_DATASET,
|
|
473
|
+
dataId: dataId,
|
|
474
|
+
label: label
|
|
477
475
|
};
|
|
478
476
|
}
|
|
479
477
|
/**
|
|
@@ -485,8 +483,8 @@ function renameDataset(dataId, label) {
|
|
|
485
483
|
*/
|
|
486
484
|
function toggleFilterAnimation(idx) {
|
|
487
485
|
return {
|
|
488
|
-
type: _actionTypes
|
|
489
|
-
idx
|
|
486
|
+
type: _actionTypes["default"].TOGGLE_FILTER_ANIMATION,
|
|
487
|
+
idx: idx
|
|
490
488
|
};
|
|
491
489
|
}
|
|
492
490
|
/**
|
|
@@ -499,9 +497,9 @@ function toggleFilterAnimation(idx) {
|
|
|
499
497
|
*/
|
|
500
498
|
function updateFilterAnimationSpeed(idx, speed) {
|
|
501
499
|
return {
|
|
502
|
-
type: _actionTypes
|
|
503
|
-
idx,
|
|
504
|
-
speed
|
|
500
|
+
type: _actionTypes["default"].UPDATE_FILTER_ANIMATION_SPEED,
|
|
501
|
+
idx: idx,
|
|
502
|
+
speed: speed
|
|
505
503
|
};
|
|
506
504
|
}
|
|
507
505
|
/**
|
|
@@ -513,8 +511,8 @@ function updateFilterAnimationSpeed(idx, speed) {
|
|
|
513
511
|
*/
|
|
514
512
|
function setLayerAnimationTime(value) {
|
|
515
513
|
return {
|
|
516
|
-
type: _actionTypes
|
|
517
|
-
value
|
|
514
|
+
type: _actionTypes["default"].SET_LAYER_ANIMATION_TIME,
|
|
515
|
+
value: value
|
|
518
516
|
};
|
|
519
517
|
}
|
|
520
518
|
/**
|
|
@@ -526,8 +524,8 @@ function setLayerAnimationTime(value) {
|
|
|
526
524
|
*/
|
|
527
525
|
function updateLayerAnimationSpeed(speed) {
|
|
528
526
|
return {
|
|
529
|
-
type: _actionTypes
|
|
530
|
-
speed
|
|
527
|
+
type: _actionTypes["default"].UPDATE_LAYER_ANIMATION_SPEED,
|
|
528
|
+
speed: speed
|
|
531
529
|
};
|
|
532
530
|
}
|
|
533
531
|
/**
|
|
@@ -538,7 +536,7 @@ function updateLayerAnimationSpeed(speed) {
|
|
|
538
536
|
*/
|
|
539
537
|
function toggleLayerAnimation() {
|
|
540
538
|
return {
|
|
541
|
-
type: _actionTypes
|
|
539
|
+
type: _actionTypes["default"].TOGGLE_LAYER_ANIMATION
|
|
542
540
|
};
|
|
543
541
|
}
|
|
544
542
|
/**
|
|
@@ -549,7 +547,7 @@ function toggleLayerAnimation() {
|
|
|
549
547
|
*/
|
|
550
548
|
function toggleLayerAnimationControl() {
|
|
551
549
|
return {
|
|
552
|
-
type: _actionTypes
|
|
550
|
+
type: _actionTypes["default"].TOGGLE_LAYER_ANIMATION_CONTROL
|
|
553
551
|
};
|
|
554
552
|
}
|
|
555
553
|
/**
|
|
@@ -561,8 +559,8 @@ function toggleLayerAnimationControl() {
|
|
|
561
559
|
*/
|
|
562
560
|
function enlargeFilter(idx) {
|
|
563
561
|
return {
|
|
564
|
-
type: _actionTypes
|
|
565
|
-
idx
|
|
562
|
+
type: _actionTypes["default"].ENLARGE_FILTER,
|
|
563
|
+
idx: idx
|
|
566
564
|
};
|
|
567
565
|
}
|
|
568
566
|
/**
|
|
@@ -573,8 +571,8 @@ function enlargeFilter(idx) {
|
|
|
573
571
|
*/
|
|
574
572
|
function toggleFilterFeature(idx) {
|
|
575
573
|
return {
|
|
576
|
-
type: _actionTypes
|
|
577
|
-
idx
|
|
574
|
+
type: _actionTypes["default"].TOGGLE_FILTER_FEATURE,
|
|
575
|
+
idx: idx
|
|
578
576
|
};
|
|
579
577
|
}
|
|
580
578
|
/**
|
|
@@ -586,8 +584,8 @@ function toggleFilterFeature(idx) {
|
|
|
586
584
|
*/
|
|
587
585
|
function onLayerHover(info) {
|
|
588
586
|
return {
|
|
589
|
-
type: _actionTypes
|
|
590
|
-
info
|
|
587
|
+
type: _actionTypes["default"].LAYER_HOVER,
|
|
588
|
+
info: info
|
|
591
589
|
};
|
|
592
590
|
}
|
|
593
591
|
/**
|
|
@@ -599,8 +597,8 @@ function onLayerHover(info) {
|
|
|
599
597
|
*/
|
|
600
598
|
function onLayerClick(info) {
|
|
601
599
|
return {
|
|
602
|
-
type: _actionTypes
|
|
603
|
-
info
|
|
600
|
+
type: _actionTypes["default"].LAYER_CLICK,
|
|
601
|
+
info: info
|
|
604
602
|
};
|
|
605
603
|
}
|
|
606
604
|
/**
|
|
@@ -611,7 +609,7 @@ function onLayerClick(info) {
|
|
|
611
609
|
*/
|
|
612
610
|
function onMapClick() {
|
|
613
611
|
return {
|
|
614
|
-
type: _actionTypes
|
|
612
|
+
type: _actionTypes["default"].MAP_CLICK
|
|
615
613
|
};
|
|
616
614
|
}
|
|
617
615
|
/**
|
|
@@ -626,8 +624,8 @@ function onMapClick() {
|
|
|
626
624
|
*/
|
|
627
625
|
function onMouseMove(evt) {
|
|
628
626
|
return {
|
|
629
|
-
type: _actionTypes
|
|
630
|
-
evt
|
|
627
|
+
type: _actionTypes["default"].MOUSE_MOVE,
|
|
628
|
+
evt: evt
|
|
631
629
|
};
|
|
632
630
|
}
|
|
633
631
|
/**
|
|
@@ -640,9 +638,9 @@ function onMouseMove(evt) {
|
|
|
640
638
|
*/
|
|
641
639
|
function toggleLayerForMap(mapIndex, layerId) {
|
|
642
640
|
return {
|
|
643
|
-
type: _actionTypes
|
|
644
|
-
mapIndex,
|
|
645
|
-
layerId
|
|
641
|
+
type: _actionTypes["default"].TOGGLE_LAYER_FOR_MAP,
|
|
642
|
+
mapIndex: mapIndex,
|
|
643
|
+
layerId: layerId
|
|
646
644
|
};
|
|
647
645
|
}
|
|
648
646
|
/**
|
|
@@ -656,10 +654,10 @@ function toggleLayerForMap(mapIndex, layerId) {
|
|
|
656
654
|
*/
|
|
657
655
|
function setFilterPlot(idx, newProp, valueIndex) {
|
|
658
656
|
return {
|
|
659
|
-
type: _actionTypes
|
|
660
|
-
idx,
|
|
661
|
-
newProp,
|
|
662
|
-
valueIndex
|
|
657
|
+
type: _actionTypes["default"].SET_FILTER_PLOT,
|
|
658
|
+
idx: idx,
|
|
659
|
+
newProp: newProp,
|
|
660
|
+
valueIndex: valueIndex
|
|
663
661
|
};
|
|
664
662
|
}
|
|
665
663
|
/**
|
|
@@ -671,8 +669,8 @@ function setFilterPlot(idx, newProp, valueIndex) {
|
|
|
671
669
|
*/
|
|
672
670
|
function setMapInfo(info) {
|
|
673
671
|
return {
|
|
674
|
-
type: _actionTypes
|
|
675
|
-
info
|
|
672
|
+
type: _actionTypes["default"].SET_MAP_INFO,
|
|
673
|
+
info: info
|
|
676
674
|
};
|
|
677
675
|
}
|
|
678
676
|
/**
|
|
@@ -684,9 +682,9 @@ function setMapInfo(info) {
|
|
|
684
682
|
*/
|
|
685
683
|
function loadFiles(files, onFinish) {
|
|
686
684
|
return {
|
|
687
|
-
type: _actionTypes
|
|
688
|
-
files,
|
|
689
|
-
onFinish
|
|
685
|
+
type: _actionTypes["default"].LOAD_FILES,
|
|
686
|
+
files: files,
|
|
687
|
+
onFinish: onFinish
|
|
690
688
|
};
|
|
691
689
|
}
|
|
692
690
|
|
|
@@ -698,7 +696,7 @@ function loadFiles(files, onFinish) {
|
|
|
698
696
|
*/
|
|
699
697
|
function loadNextFile() {
|
|
700
698
|
return {
|
|
701
|
-
type: _actionTypes
|
|
699
|
+
type: _actionTypes["default"].LOAD_NEXT_FILE
|
|
702
700
|
};
|
|
703
701
|
}
|
|
704
702
|
/**
|
|
@@ -709,8 +707,8 @@ function loadNextFile() {
|
|
|
709
707
|
*/
|
|
710
708
|
function loadFilesSuccess(result) {
|
|
711
709
|
return {
|
|
712
|
-
type: _actionTypes
|
|
713
|
-
result
|
|
710
|
+
type: _actionTypes["default"].LOAD_FILES_SUCCESS,
|
|
711
|
+
result: result
|
|
714
712
|
};
|
|
715
713
|
}
|
|
716
714
|
/**
|
|
@@ -720,14 +718,12 @@ function loadFilesSuccess(result) {
|
|
|
720
718
|
* @returns action
|
|
721
719
|
*/
|
|
722
720
|
function loadFileStepSuccess(_ref2) {
|
|
723
|
-
|
|
724
|
-
|
|
725
|
-
fileCache
|
|
726
|
-
} = _ref2;
|
|
721
|
+
var fileName = _ref2.fileName,
|
|
722
|
+
fileCache = _ref2.fileCache;
|
|
727
723
|
return {
|
|
728
|
-
type: _actionTypes
|
|
729
|
-
fileName,
|
|
730
|
-
fileCache
|
|
724
|
+
type: _actionTypes["default"].LOAD_FILE_STEP_SUCCESS,
|
|
725
|
+
fileName: fileName,
|
|
726
|
+
fileCache: fileCache
|
|
731
727
|
};
|
|
732
728
|
}
|
|
733
729
|
/**
|
|
@@ -740,9 +736,9 @@ function loadFileStepSuccess(_ref2) {
|
|
|
740
736
|
|
|
741
737
|
function loadFilesErr(fileName, error) {
|
|
742
738
|
return {
|
|
743
|
-
type: _actionTypes
|
|
744
|
-
fileName,
|
|
745
|
-
error
|
|
739
|
+
type: _actionTypes["default"].LOAD_FILES_ERR,
|
|
740
|
+
fileName: fileName,
|
|
741
|
+
error: error
|
|
746
742
|
};
|
|
747
743
|
}
|
|
748
744
|
/**
|
|
@@ -753,8 +749,8 @@ function loadFilesErr(fileName, error) {
|
|
|
753
749
|
*/
|
|
754
750
|
function setFeatures(features) {
|
|
755
751
|
return {
|
|
756
|
-
type: _actionTypes
|
|
757
|
-
features
|
|
752
|
+
type: _actionTypes["default"].SET_FEATURES,
|
|
753
|
+
features: features
|
|
758
754
|
};
|
|
759
755
|
}
|
|
760
756
|
/**
|
|
@@ -767,9 +763,9 @@ function setFeatures(features) {
|
|
|
767
763
|
*/
|
|
768
764
|
function setPolygonFilterLayer(layer, feature) {
|
|
769
765
|
return {
|
|
770
|
-
type: _actionTypes
|
|
771
|
-
layer,
|
|
772
|
-
feature
|
|
766
|
+
type: _actionTypes["default"].SET_POLYGON_FILTER_LAYER,
|
|
767
|
+
layer: layer,
|
|
768
|
+
feature: feature
|
|
773
769
|
};
|
|
774
770
|
}
|
|
775
771
|
/**
|
|
@@ -780,8 +776,8 @@ function setPolygonFilterLayer(layer, feature) {
|
|
|
780
776
|
*/
|
|
781
777
|
function setSelectedFeature(feature) {
|
|
782
778
|
return {
|
|
783
|
-
type: _actionTypes
|
|
784
|
-
feature
|
|
779
|
+
type: _actionTypes["default"].SET_SELECTED_FEATURE,
|
|
780
|
+
feature: feature
|
|
785
781
|
};
|
|
786
782
|
}
|
|
787
783
|
/**
|
|
@@ -792,8 +788,8 @@ function setSelectedFeature(feature) {
|
|
|
792
788
|
*/
|
|
793
789
|
function deleteFeature(feature) {
|
|
794
790
|
return {
|
|
795
|
-
type: _actionTypes
|
|
796
|
-
feature
|
|
791
|
+
type: _actionTypes["default"].DELETE_FEATURE,
|
|
792
|
+
feature: feature
|
|
797
793
|
};
|
|
798
794
|
}
|
|
799
795
|
/** Set the map mode
|
|
@@ -809,8 +805,8 @@ function deleteFeature(feature) {
|
|
|
809
805
|
*/
|
|
810
806
|
function setEditorMode(mode) {
|
|
811
807
|
return {
|
|
812
|
-
type: _actionTypes
|
|
813
|
-
mode
|
|
808
|
+
type: _actionTypes["default"].SET_EDITOR_MODE,
|
|
809
|
+
mode: mode
|
|
814
810
|
};
|
|
815
811
|
}
|
|
816
812
|
/**
|
|
@@ -822,8 +818,8 @@ function setEditorMode(mode) {
|
|
|
822
818
|
*/
|
|
823
819
|
function applyCPUFilter(dataId) {
|
|
824
820
|
return {
|
|
825
|
-
type: _actionTypes
|
|
826
|
-
dataId
|
|
821
|
+
type: _actionTypes["default"].APPLY_CPU_FILTER,
|
|
822
|
+
dataId: dataId
|
|
827
823
|
};
|
|
828
824
|
}
|
|
829
825
|
/**
|
|
@@ -833,7 +829,7 @@ function applyCPUFilter(dataId) {
|
|
|
833
829
|
*/
|
|
834
830
|
function toggleEditorVisibility() {
|
|
835
831
|
return {
|
|
836
|
-
type: _actionTypes
|
|
832
|
+
type: _actionTypes["default"].TOGGLE_EDITOR_VISIBILITY
|
|
837
833
|
};
|
|
838
834
|
}
|
|
839
835
|
/**
|
|
@@ -844,8 +840,8 @@ function toggleEditorVisibility() {
|
|
|
844
840
|
*/
|
|
845
841
|
function nextFileBatch(payload) {
|
|
846
842
|
return {
|
|
847
|
-
type: _actionTypes
|
|
848
|
-
payload
|
|
843
|
+
type: _actionTypes["default"].NEXT_FILE_BATCH,
|
|
844
|
+
payload: payload
|
|
849
845
|
};
|
|
850
846
|
}
|
|
851
847
|
/**
|
|
@@ -856,8 +852,8 @@ function nextFileBatch(payload) {
|
|
|
856
852
|
*/
|
|
857
853
|
function processFileContent(payload) {
|
|
858
854
|
return {
|
|
859
|
-
type: _actionTypes
|
|
860
|
-
payload
|
|
855
|
+
type: _actionTypes["default"].PROCESS_FILE_CONTENT,
|
|
856
|
+
payload: payload
|
|
861
857
|
};
|
|
862
858
|
}
|
|
863
859
|
/**
|
|
@@ -868,8 +864,8 @@ function processFileContent(payload) {
|
|
|
868
864
|
*/
|
|
869
865
|
function setLayerAnimationTimeConfig(config) {
|
|
870
866
|
return {
|
|
871
|
-
type: _actionTypes
|
|
872
|
-
config
|
|
867
|
+
type: _actionTypes["default"].SET_LAYER_ANIMATION_TIME_CONFIG,
|
|
868
|
+
config: config
|
|
873
869
|
};
|
|
874
870
|
}
|
|
875
871
|
/**
|
|
@@ -881,9 +877,9 @@ function setLayerAnimationTimeConfig(config) {
|
|
|
881
877
|
*/
|
|
882
878
|
function setFilterAnimationTimeConfig(idx, config) {
|
|
883
879
|
return {
|
|
884
|
-
type: _actionTypes
|
|
885
|
-
idx,
|
|
886
|
-
config
|
|
880
|
+
type: _actionTypes["default"].SET_FILTER_ANIMATION_TIME_CONFIG,
|
|
881
|
+
idx: idx,
|
|
882
|
+
config: config
|
|
887
883
|
};
|
|
888
884
|
}
|
|
889
885
|
|
|
@@ -899,6 +895,6 @@ function setFilterAnimationTimeConfig(idx, config) {
|
|
|
899
895
|
*/
|
|
900
896
|
/* eslint-disable no-unused-vars */
|
|
901
897
|
// @ts-ignore
|
|
902
|
-
|
|
898
|
+
var visStateActions = null;
|
|
903
899
|
/* eslint-enable no-unused-vars */
|
|
904
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfYWN0aW9uVHlwZXMiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwicmVxdWlyZSIsImxheWVyQ29uZmlnQ2hhbmdlIiwib2xkTGF5ZXIiLCJuZXdDb25maWciLCJ0eXBlIiwiQWN0aW9uVHlwZXMiLCJMQVlFUl9DT05GSUdfQ0hBTkdFIiwibGF5ZXJUZXh0TGFiZWxDaGFuZ2UiLCJpZHgiLCJwcm9wIiwidmFsdWUiLCJMQVlFUl9URVhUX0xBQkVMX0NIQU5HRSIsImxheWVyVHlwZUNoYW5nZSIsIm5ld1R5cGUiLCJMQVlFUl9UWVBFX0NIQU5HRSIsImxheWVyVmlzdWFsQ2hhbm5lbENvbmZpZ0NoYW5nZSIsImNoYW5uZWwiLCJMQVlFUl9WSVNVQUxfQ0hBTk5FTF9DSEFOR0UiLCJsYXllclZpc0NvbmZpZ0NoYW5nZSIsIm5ld1Zpc0NvbmZpZyIsIkxBWUVSX1ZJU19DT05GSUdfQ0hBTkdFIiwibGF5ZXJDb2xvclVJQ2hhbmdlIiwiTEFZRVJfQ09MT1JfVUlfQ0hBTkdFIiwidXBkYXRlTGF5ZXJCbGVuZGluZyIsIm1vZGUiLCJVUERBVEVfTEFZRVJfQkxFTkRJTkciLCJpbnRlcmFjdGlvbkNvbmZpZ0NoYW5nZSIsImNvbmZpZyIsIklOVEVSQUNUSU9OX0NPTkZJR19DSEFOR0UiLCJzZXRGaWx0ZXIiLCJ2YWx1ZUluZGV4IiwiU0VUX0ZJTFRFUiIsInNldEZpbHRlckFuaW1hdGlvblRpbWUiLCJTRVRfRklMVEVSX0FOSU1BVElPTl9USU1FIiwic2V0RmlsdGVyQW5pbWF0aW9uV2luZG93IiwiX3JlZiIsImlkIiwiYW5pbWF0aW9uV2luZG93IiwiU0VUX0ZJTFRFUl9BTklNQVRJT05fV0lORE9XIiwiYWRkRmlsdGVyIiwiZGF0YUlkIiwiQUREX0ZJTFRFUiIsImFkZExheWVyIiwiZGF0YXNldElkIiwiQUREX0xBWUVSIiwicmVvcmRlckxheWVyIiwib3JkZXIiLCJSRU9SREVSX0xBWUVSIiwicmVtb3ZlRmlsdGVyIiwiUkVNT1ZFX0ZJTFRFUiIsInJlbW92ZUxheWVyIiwiUkVNT1ZFX0xBWUVSIiwiZHVwbGljYXRlTGF5ZXIiLCJEVVBMSUNBVEVfTEFZRVIiLCJyZW1vdmVEYXRhc2V0IiwiUkVNT1ZFX0RBVEFTRVQiLCJzaG93RGF0YXNldFRhYmxlIiwiU0hPV19EQVRBU0VUX1RBQkxFIiwidXBkYXRlVGFibGVDb2xvciIsIm5ld0NvbG9yIiwiVVBEQVRFX1RBQkxFX0NPTE9SIiwic29ydFRhYmxlQ29sdW1uIiwiY29sdW1uIiwiU09SVF9UQUJMRV9DT0xVTU4iLCJwaW5UYWJsZUNvbHVtbiIsIlBJTl9UQUJMRV9DT0xVTU4iLCJjb3B5VGFibGVDb2x1bW4iLCJDT1BZX1RBQkxFX0NPTFVNTiIsInVwZGF0ZVZpc0RhdGEiLCJkYXRhc2V0cyIsIm9wdGlvbnMiLCJVUERBVEVfVklTX0RBVEEiLCJyZW5hbWVEYXRhc2V0IiwibGFiZWwiLCJSRU5BTUVfREFUQVNFVCIsInRvZ2dsZUZpbHRlckFuaW1hdGlvbiIsIlRPR0dMRV9GSUxURVJfQU5JTUFUSU9OIiwidXBkYXRlRmlsdGVyQW5pbWF0aW9uU3BlZWQiLCJzcGVlZCIsIlVQREFURV9GSUxURVJfQU5JTUFUSU9OX1NQRUVEIiwic2V0TGF5ZXJBbmltYXRpb25UaW1lIiwiU0VUX0xBWUVSX0FOSU1BVElPTl9USU1FIiwidXBkYXRlTGF5ZXJBbmltYXRpb25TcGVlZCIsIlVQREFURV9MQVlFUl9BTklNQVRJT05fU1BFRUQiLCJ0b2dnbGVMYXllckFuaW1hdGlvbiIsIlRPR0dMRV9MQVlFUl9BTklNQVRJT04iLCJ0b2dnbGVMYXllckFuaW1hdGlvbkNvbnRyb2wiLCJUT0dHTEVfTEFZRVJfQU5JTUFUSU9OX0NPTlRST0wiLCJlbmxhcmdlRmlsdGVyIiwiRU5MQVJHRV9GSUxURVIiLCJ0b2dnbGVGaWx0ZXJGZWF0dXJlIiwiVE9HR0xFX0ZJTFRFUl9GRUFUVVJFIiwib25MYXllckhvdmVyIiwiaW5mbyIsIkxBWUVSX0hPVkVSIiwib25MYXllckNsaWNrIiwiTEFZRVJfQ0xJQ0siLCJvbk1hcENsaWNrIiwiTUFQX0NMSUNLIiwib25Nb3VzZU1vdmUiLCJldnQiLCJNT1VTRV9NT1ZFIiwidG9nZ2xlTGF5ZXJGb3JNYXAiLCJtYXBJbmRleCIsImxheWVySWQiLCJUT0dHTEVfTEFZRVJfRk9SX01BUCIsInNldEZpbHRlclBsb3QiLCJuZXdQcm9wIiwiU0VUX0ZJTFRFUl9QTE9UIiwic2V0TWFwSW5mbyIsIlNFVF9NQVBfSU5GTyIsImxvYWRGaWxlcyIsImZpbGVzIiwib25GaW5pc2giLCJMT0FEX0ZJTEVTIiwibG9hZE5leHRGaWxlIiwiTE9BRF9ORVhUX0ZJTEUiLCJsb2FkRmlsZXNTdWNjZXNzIiwicmVzdWx0IiwiTE9BRF9GSUxFU19TVUNDRVNTIiwibG9hZEZpbGVTdGVwU3VjY2VzcyIsIl9yZWYyIiwiZmlsZU5hbWUiLCJmaWxlQ2FjaGUiLCJMT0FEX0ZJTEVfU1RFUF9TVUNDRVNTIiwibG9hZEZpbGVzRXJyIiwiZXJyb3IiLCJMT0FEX0ZJTEVTX0VSUiIsInNldEZlYXR1cmVzIiwiZmVhdHVyZXMiLCJTRVRfRkVBVFVSRVMiLCJzZXRQb2x5Z29uRmlsdGVyTGF5ZXIiLCJsYXllciIsImZlYXR1cmUiLCJTRVRfUE9MWUdPTl9GSUxURVJfTEFZRVIiLCJzZXRTZWxlY3RlZEZlYXR1cmUiLCJTRVRfU0VMRUNURURfRkVBVFVSRSIsImRlbGV0ZUZlYXR1cmUiLCJERUxFVEVfRkVBVFVSRSIsInNldEVkaXRvck1vZGUiLCJTRVRfRURJVE9SX01PREUiLCJhcHBseUNQVUZpbHRlciIsIkFQUExZX0NQVV9GSUxURVIiLCJ0b2dnbGVFZGl0b3JWaXNpYmlsaXR5IiwiVE9HR0xFX0VESVRPUl9WSVNJQklMSVRZIiwibmV4dEZpbGVCYXRjaCIsInBheWxvYWQiLCJORVhUX0ZJTEVfQkFUQ0giLCJwcm9jZXNzRmlsZUNvbnRlbnQiLCJQUk9DRVNTX0ZJTEVfQ09OVEVOVCIsInNldExheWVyQW5pbWF0aW9uVGltZUNvbmZpZyIsIlNFVF9MQVlFUl9BTklNQVRJT05fVElNRV9DT05GSUciLCJzZXRGaWx0ZXJBbmltYXRpb25UaW1lQ29uZmlnIiwiU0VUX0ZJTFRFUl9BTklNQVRJT05fVElNRV9DT05GSUciLCJ2aXNTdGF0ZUFjdGlvbnMiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvYWN0aW9ucy92aXMtc3RhdGUtYWN0aW9ucy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgKGMpIDIwMjIgVWJlciBUZWNobm9sb2dpZXMsIEluYy5cbi8vXG4vLyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5XG4vLyBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsXG4vLyBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzXG4vLyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsXG4vLyBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXNcbi8vIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vL1xuLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW5cbi8vIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy9cbi8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1Jcbi8vIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLFxuLy8gRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFXG4vLyBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSXG4vLyBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLFxuLy8gT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTlxuLy8gVEhFIFNPRlRXQVJFLlxuXG4vLyB2aXMtc3RhdGUtcmVkdWNlclxuaW1wb3J0IEFjdGlvblR5cGVzIGZyb20gJ2NvbnN0YW50cy9hY3Rpb24tdHlwZXMnO1xuaW1wb3J0IHtBZGREYXRhVG9NYXBQYXlsb2FkfSBmcm9tICcuLi9hY3Rpb25zL2FjdGlvbnMnO1xuaW1wb3J0IHtGaWxlQ2FjaGVJdGVtfSBmcm9tICcuLi9wcm9jZXNzb3JzL3R5cGVzJztcbmltcG9ydCB7TGF5ZXIsIExheWVyQmFzZUNvbmZpZywgTGF5ZXJWaXNDb25maWd9IGZyb20gJ2xheWVycyc7XG5pbXBvcnQge0ZlYXR1cmUsIEludGVyYWN0aW9uQ29uZmlnfSBmcm9tICdyZWR1Y2Vycy92aXMtc3RhdGUtdXBkYXRlcnMnO1xuaW1wb3J0IHtWYWx1ZU9mLCBNZXJnZSwgUkdCQ29sb3IsIE5lc3RlZFBhcnRpYWx9IGZyb20gJy4uL3JlZHVjZXJzL3R5cGVzJztcbmltcG9ydCB7Q29sb3JVSX0gZnJvbSAnbGF5ZXJzL2xheWVyLWZhY3RvcnknO1xuLy8gVE9ETyAtIGltcG9ydCBMb2FkZXJPYmplY3QgdHlwZSBmcm9tIEBsb2FkZXJzLmdsL2NvcmUgd2hlbiBzdXBwb3J0ZWRcbi8vIFRPRE8gLSBpbXBvcnQgTG9hZE9wdGlvbnMgdHlwZSBmcm9tIEBsb2FkZXJzLmdsL2NvcmUgd2hlbiBzdXBwb3J0ZWRcblxuZXhwb3J0IHR5cGUgTGF5ZXJDb25maWdDaGFuZ2VVcGRhdGVyQWN0aW9uID0ge1xuICBvbGRMYXllcjogTGF5ZXI7XG4gIG5ld0NvbmZpZzogUGFydGlhbDxMYXllckJhc2VDb25maWc+O1xufTtcbi8qKlxuICogVXBkYXRlIGxheWVyIGJhc2UgY29uZmlnOiBkYXRhSWQsIGxhYmVsLCBjb2x1bW4sIGlzVmlzaWJsZVxuICogQHBhcmFtIG9sZExheWVyIC0gbGF5ZXIgdG8gYmUgdXBkYXRlZFxuICogQHBhcmFtIG5ld0NvbmZpZyAtIG5ldyBjb25maWcgdG8gYmUgbWVyZ2VkIHdpdGggb2xkIGNvbmZpZ1xuICogQHJldHVybnMgYWN0aW9uXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsYXllckNvbmZpZ0NoYW5nZShcbiAgb2xkTGF5ZXI6IExheWVyLFxuICBuZXdDb25maWc6IFBhcnRpYWw8TGF5ZXJCYXNlQ29uZmlnPlxuKTogTWVyZ2U8TGF5ZXJDb25maWdDaGFuZ2VVcGRhdGVyQWN0aW9uLCB7dHlwZTogdHlwZW9mIEFjdGlvblR5cGVzLkxBWUVSX0NPTkZJR19DSEFOR0V9PiB7XG4gIHJldHVybiB7XG4gICAgdHlwZTogQWN0aW9uVHlwZXMuTEFZRVJfQ09ORklHX0NIQU5HRSxcbiAgICBvbGRMYXllcixcbiAgICBuZXdDb25maWdcbiAgfTtcbn1cbmV4cG9ydCB0eXBlIExheWVyVGV4dExhYmVsQ2hhbmdlVXBkYXRlckFjdGlvbiA9IHtcbiAgb2xkTGF5ZXI6IExheWVyO1xuICBpZHg6IG51bWJlciB8ICdhbGwnO1xuICBwcm9wOiBzdHJpbmc7XG4gIHZhbHVlOiBhbnk7XG59O1xuXG4vKipcbiAqIFVwZGF0ZSBsYXllciB0ZXh0IGxhYmVsXG4gKiBAcGFyYW0gb2xkTGF5ZXIgLSBsYXllciB0byBiZSB1cGRhdGVkXG4gKiBAcGFyYW0gaWR4IC1gaWR4YCBvZiB0ZXh0IGxhYmVsIHRvIGJlIHVwZGF0ZWRcbiAqIEBwYXJhbSBwcm9wIC0gYHByb3BgIG9mIHRleHQgbGFiZWwsIGUsZywgYGFuY2hvcmAsIGBhbGlnbm1lbnRgLCBgY29sb3JgLCBgc2l6ZWAsIGBmaWVsZGBcbiAqIEBwYXJhbSB2YWx1ZSAtIG5ldyB2YWx1ZVxuICogQHJldHVybnMgYWN0aW9uXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsYXllclRleHRMYWJlbENoYW5nZShcbiAgb2xkTGF5ZXI6IExheWVyLFxuICBpZHg6IG51bWJlciB8ICdhbGwnLFxuICBwcm9wOiBzdHJpbmcsXG4gIHZhbHVlOiBhbnlcbik6IE1lcmdlPExheWVyVGV4dExhYmVsQ2hhbmdlVXBkYXRlckFjdGlvbiwge3R5cGU6IHR5cGVvZiBBY3Rpb25UeXBlcy5MQVlFUl9URVhUX0xBQkVMX0NIQU5HRX0+IHtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBBY3Rpb25UeXBlcy5MQVlFUl9URVhUX0xBQkVMX0NIQU5HRSxcbiAgICBvbGRMYXllcixcbiAgICBpZHgsXG4gICAgcHJvcCxcbiAgICB2YWx1ZVxuICB9O1xufVxuZXhwb3J0IHR5cGUgTGF5ZXJUeXBlQ2hhbmdlVXBkYXRlckFjdGlvbiA9IHtcbiAgb2xkTGF5ZXI6IExheWVyO1xuICBuZXdUeXBlOiBzdHJpbmc7XG59O1xuLyoqXG4gKiBVcGRhdGUgbGF5ZXIgdHlwZS4gUHJldmlld3MgbGF5ZXIgY29uZmlnIHdpbGwgYmUgY29waWVkIGlmIGFwcGxpY2FibGUuXG4gKiBAcGFyYW0gb2xkTGF5ZXIgLSBsYXllciB0byBiZSB1cGRhdGVkXG4gKiBAcGFyYW0gbmV3VHlwZSAtIG5ldyB0eXBlXG4gKiBAcmV0dXJucyBhY3Rpb25cbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxheWVyVHlwZUNoYW5nZShcbiAgb2xkTGF5ZXI6IExheWVyLFxuICBuZXdUeXBlOiBzdHJpbmdcbik6IE1lcmdlPExheWVyVHlwZUNoYW5nZVVwZGF0ZXJBY3Rpb24sIHt0eXBlOiB0eXBlb2YgQWN0aW9uVHlwZXMuTEFZRVJfVFlQRV9DSEFOR0V9PiB7XG4gIHJldHVybiB7XG4gICAgdHlwZTogQWN0aW9uVHlwZXMuTEFZRVJfVFlQRV9DSEFOR0UsXG4gICAgb2xkTGF5ZXIsXG4gICAgbmV3VHlwZVxuICB9O1xufVxuZXhwb3J0IHR5cGUgTGF5ZXJWaXN1YWxDaGFubmVsQ29uZmlnQ2hhbmdlVXBkYXRlckFjdGlvbiA9IHtcbiAgb2xkTGF5ZXI6IExheWVyO1xuICBuZXdDb25maWc6IFBhcnRpYWw8TGF5ZXJCYXNlQ29uZmlnPjtcbiAgY2hhbm5lbDogc3RyaW5nO1xufTtcbi8qKlxuICogVXBkYXRlIGxheWVyIHZpc3VhbCBjaGFubmVsXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVBY3Rpb25zXG4gKiBAcGFyYW0gb2xkTGF5ZXIgLSBsYXllciB0byBiZSB1cGRhdGVkXG4gKiBAcGFyYW0gbmV3Q29uZmlnIC0gbmV3IHZpc3VhbCBjaGFubmVsIGNvbmZpZ1xuICogQHBhcmFtIGNoYW5uZWwgLSBjaGFubmVsIHRvIGJlIHVwZGF0ZWRcbiAqIEByZXR1cm5zIGFjdGlvblxuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gbGF5ZXJWaXN1YWxDaGFubmVsQ29uZmlnQ2hhbmdlKFxuICBvbGRMYXllcjogTGF5ZXIsXG4gIG5ld0NvbmZpZzogUGFydGlhbDxMYXllckJhc2VDb25maWc+LFxuICBjaGFubmVsOiBzdHJpbmdcbik6IE1lcmdlPFxuICBMYXllclZpc3VhbENoYW5uZWxDb25maWdDaGFuZ2VVcGRhdGVyQWN0aW9uLFxuICB7dHlwZTogdHlwZW9mIEFjdGlvblR5cGVzLkxBWUVSX1ZJU1VBTF9DSEFOTkVMX0NIQU5HRX1cbj4ge1xuICByZXR1cm4ge1xuICAgIHR5cGU6IEFjdGlvblR5cGVzLkxBWUVSX1ZJU1VBTF9DSEFOTkVMX0NIQU5HRSxcbiAgICBvbGRMYXllcixcbiAgICBuZXdDb25maWcsXG4gICAgY2hhbm5lbFxuICB9O1xufVxuZXhwb3J0IHR5cGUgTGF5ZXJWaXNDb25maWdDaGFuZ2VVcGRhdGVyQWN0aW9uID0ge1xuICBvbGRMYXllcjogTGF5ZXI7XG4gIG5ld1Zpc0NvbmZpZzogUGFydGlhbDxMYXllclZpc0NvbmZpZz47XG59O1xuLyoqXG4gKiBVcGRhdGUgbGF5ZXIgYHZpc0NvbmZpZ2BcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZUFjdGlvbnNcbiAqIEBwYXJhbSBvbGRMYXllciAtIGxheWVyIHRvIGJlIHVwZGF0ZWRcbiAqIEBwYXJhbSBuZXdWaXNDb25maWcgLSBuZXcgdmlzQ29uZmlnIGFzIGEga2V5IHZhbHVlIG1hcDogZS5nLiBge29wYWNpdHk6IDAuOH1gXG4gKiBAcmV0dXJucyBhY3Rpb25cbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxheWVyVmlzQ29uZmlnQ2hhbmdlKFxuICBvbGRMYXllcjogTGF5ZXIsXG4gIG5ld1Zpc0NvbmZpZzogUGFydGlhbDxMYXllclZpc0NvbmZpZz5cbik6IE1lcmdlPExheWVyVmlzQ29uZmlnQ2hhbmdlVXBkYXRlckFjdGlvbiwge3R5cGU6IHR5cGVvZiBBY3Rpb25UeXBlcy5MQVlFUl9WSVNfQ09ORklHX0NIQU5HRX0+IHtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBBY3Rpb25UeXBlcy5MQVlFUl9WSVNfQ09ORklHX0NIQU5HRSxcbiAgICBvbGRMYXllcixcbiAgICBuZXdWaXNDb25maWdcbiAgfTtcbn1cbmV4cG9ydCB0eXBlIExheWVyQ29sb3JVSUNoYW5nZVVwZGF0ZXJBY3Rpb24gPSB7XG4gIG9sZExheWVyOiBMYXllcjtcbiAgcHJvcDogc3RyaW5nO1xuICBuZXdDb25maWc6IE5lc3RlZFBhcnRpYWw8Q29sb3JVST47XG59O1xuXG4vKipcbiAqIFNldCB0aGUgY29sb3IgcGFsZXR0ZSB1aSBmb3IgbGF5ZXIgY29sb3JcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZUFjdGlvbnNcbiAqIEBwYXJhbSBvbGRMYXllciAtIGxheWVyIHRvIGJlIHVwZGF0ZWRcbiAqIEBwYXJhbSBwcm9wIC0gd2hpY2ggY29sb3IgcHJvcFxuICogQHBhcmFtIG5ld0NvbmZpZyAtIHRvIGJlIG1lcmdlZFxuICogQHJldHVybnMgYWN0aW9uXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsYXllckNvbG9yVUlDaGFuZ2UoXG4gIG9sZExheWVyOiBMYXllcixcbiAgcHJvcDogc3RyaW5nLFxuICBuZXdDb25maWc6IE5lc3RlZFBhcnRpYWw8Q29sb3JVST5cbik6IE1lcmdlPExheWVyQ29sb3JVSUNoYW5nZVVwZGF0ZXJBY3Rpb24sIHt0eXBlOiB0eXBlb2YgQWN0aW9uVHlwZXMuTEFZRVJfQ09MT1JfVUlfQ0hBTkdFfT4ge1xuICByZXR1cm4ge1xuICAgIHR5cGU6IEFjdGlvblR5cGVzLkxBWUVSX0NPTE9SX1VJX0NIQU5HRSxcbiAgICBvbGRMYXllcixcbiAgICBwcm9wLFxuICAgIG5ld0NvbmZpZ1xuICB9O1xufVxuXG5leHBvcnQgdHlwZSBVcGRhdGVMYXllckJsZW5kaW5nVXBkYXRlckFjdGlvbiA9IHtcbiAgbW9kZTogJ2FkZGl0aXZlJyB8ICdub3JtYWwnIHwgJ3N1YnRyYWN0aXZlJztcbn07XG4vKipcbiAqIFVwZGF0ZSBsYXllciBibGVuZGluZyBtb2RlXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVBY3Rpb25zXG4gKiBAcGFyYW0gbW9kZSBvbmUgb2YgYGFkZGl0aXZlYCwgYG5vcm1hbGAgYW5kIGBzdWJ0cmFjdGl2ZWBcbiAqIEByZXR1cm5zIGFjdGlvblxuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gdXBkYXRlTGF5ZXJCbGVuZGluZyhcbiAgbW9kZTogJ2FkZGl0aXZlJyB8ICdub3JtYWwnIHwgJ3N1YnRyYWN0aXZlJ1xuKTogTWVyZ2U8VXBkYXRlTGF5ZXJCbGVuZGluZ1VwZGF0ZXJBY3Rpb24sIHt0eXBlOiB0eXBlb2YgQWN0aW9uVHlwZXMuVVBEQVRFX0xBWUVSX0JMRU5ESU5HfT4ge1xuICByZXR1cm4ge1xuICAgIHR5cGU6IEFjdGlvblR5cGVzLlVQREFURV9MQVlFUl9CTEVORElORyxcbiAgICBtb2RlXG4gIH07XG59XG5cbmV4cG9ydCB0eXBlIEludGVyYWN0aW9uQ29uZmlnQ2hhbmdlVXBkYXRlckFjdGlvbiA9IHtcbiAgY29uZmlnOiBWYWx1ZU9mPEludGVyYWN0aW9uQ29uZmlnPjtcbn07XG4vKipcbiAqIFVwZGF0ZSBgaW50ZXJhY3Rpb25Db25maWdgXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVBY3Rpb25zXG4gKiBAcGFyYW0gY29uZmlnIC0gbmV3IGNvbmZpZyBhcyBrZXkgdmFsdWUgbWFwOiBge3Rvb2x0aXA6IHtlbmFibGVkOiB0cnVlfX1gXG4gKiBAcmV0dXJucyBhY3Rpb25cbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGludGVyYWN0aW9uQ29uZmlnQ2hhbmdlKFxuICBjb25maWc6IFZhbHVlT2Y8SW50ZXJhY3Rpb25Db25maWc+XG4pOiBNZXJnZTxcbiAgSW50ZXJhY3Rpb25Db25maWdDaGFuZ2VVcGRhdGVyQWN0aW9uLFxuICB7dHlwZTogdHlwZW9mIEFjdGlvblR5cGVzLklOVEVSQUNUSU9OX0NPTkZJR19DSEFOR0V9XG4+IHtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBBY3Rpb25UeXBlcy5JTlRFUkFDVElPTl9DT05GSUdfQ0hBTkdFLFxuICAgIGNvbmZpZ1xuICB9O1xufVxuXG5leHBvcnQgdHlwZSBTZXRGaWx0ZXJVcGRhdGVyQWN0aW9uID0ge1xuICBpZHg6IG51bWJlcjtcbiAgcHJvcDogc3RyaW5nO1xuICB2YWx1ZTogYW55O1xuICB2YWx1ZUluZGV4PzogbnVtYmVyO1xufTtcbi8qKlxuICogVXBkYXRlIGZpbHRlciBwcm9wZXJ0eVxuICogQG1lbWJlcm9mIHZpc1N0YXRlQWN0aW9uc1xuICogQHBhcmFtIGlkeCAtYGlkeGAgb2YgZmlsdGVyIHRvIGJlIHVwZGF0ZWRcbiAqIEBwYXJhbSBwcm9wIC0gYHByb3BgIG9mIGZpbHRlciwgZSxnLCBgZGF0YUlkYCwgYG5hbWVgLCBgdmFsdWVgXG4gKiBAcGFyYW0gdmFsdWUgLSBuZXcgdmFsdWVcbiAqIEBwYXJhbSB2YWx1ZUluZGV4IC0gZGF0YUlkIGluZGV4XG4gKiBAcmV0dXJucyBhY3Rpb25cbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNldEZpbHRlcihcbiAgaWR4OiBudW1iZXIsXG4gIHByb3A6IHN0cmluZyxcbiAgdmFsdWU6IGFueSxcbiAgdmFsdWVJbmRleD86IG51bWJlclxuKTogTWVyZ2U8U2V0RmlsdGVyVXBkYXRlckFjdGlvbiwge3R5cGU6IHR5cGVvZiBBY3Rpb25UeXBlcy5TRVRfRklMVEVSfT4ge1xuICByZXR1cm4ge1xuICAgIHR5cGU6IEFjdGlvblR5cGVzLlNFVF9GSUxURVIsXG4gICAgaWR4LFxuICAgIHByb3AsXG4gICAgdmFsdWUsXG4gICAgdmFsdWVJbmRleFxuICB9O1xufVxuXG5leHBvcnQgdHlwZSBTZXRGaWx0ZXJBbmltYXRpb25UaW1lVXBkYXRlckFjdGlvbiA9IHtcbiAgaWR4OiBudW1iZXI7XG4gIHByb3A6IHN0cmluZztcbiAgdmFsdWU6IGFueTtcbiAgdmFsdWVJbmRleD86IG51bWJlcjtcbn07XG4vKipcbiAqIFNhbWUgYXMgVXBkYXRlIGZpbHRlclxuICogQG1lbWJlcm9mIHZpc1N0YXRlQWN0aW9uc1xuICogQHBhcmFtIGlkeCAtYGlkeGAgb2YgZmlsdGVyIHRvIGJlIHVwZGF0ZWRcbiAqIEBwYXJhbSBwcm9wIC0gYHByb3BgIG9mIGZpbHRlciwgZSxnLCBgZGF0YUlkYCwgYG5hbWVgLCBgdmFsdWVgXG4gKiBAcGFyYW0gdmFsdWUgLSBuZXcgdmFsdWVcbiAqIEBwYXJhbSB2YWx1ZUluZGV4IC0gZGF0YUlkIGluZGV4XG4gKiBAcmV0dXJucyBhY3Rpb25cbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNldEZpbHRlckFuaW1hdGlvblRpbWUoXG4gIGlkeDogbnVtYmVyLFxuICBwcm9wOiBzdHJpbmcsXG4gIHZhbHVlOiBhbnksXG4gIHZhbHVlSW5kZXg/OiBudW1iZXJcbik6IE1lcmdlPFxuICBTZXRGaWx0ZXJBbmltYXRpb25UaW1lVXBkYXRlckFjdGlvbixcbiAge3R5cGU6IHR5cGVvZiBBY3Rpb25UeXBlcy5TRVRfRklMVEVSX0FOSU1BVElPTl9USU1FfVxuPiB7XG4gIHJldHVybiB7XG4gICAgdHlwZTogQWN0aW9uVHlwZXMuU0VUX0ZJTFRFUl9BTklNQVRJT05fVElNRSxcbiAgICBpZHgsXG4gICAgcHJvcCxcbiAgICB2YWx1ZSxcbiAgICB2YWx1ZUluZGV4XG4gIH07XG59XG5cbmV4cG9ydCB0eXBlIFNldEZpbHRlckFuaW1hdGlvbldpbmRvd1VwZGF0ZXJBY3Rpb24gPSB7XG4gIGlkOiBzdHJpbmc7XG4gIGFuaW1hdGlvbldpbmRvdzogc3RyaW5nO1xufTtcbi8qKlxuICogU2FtZSBhcyBVcGRhdGUgZmlsdGVyXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVBY3Rpb25zXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXRGaWx0ZXJBbmltYXRpb25XaW5kb3coe1xuICBpZCxcbiAgYW5pbWF0aW9uV2luZG93XG59OiBTZXRGaWx0ZXJBbmltYXRpb25XaW5kb3dVcGRhdGVyQWN0aW9uKTogTWVyZ2U8XG4gIFNldEZpbHRlckFuaW1hdGlvbldpbmRvd1VwZGF0ZXJBY3Rpb24sXG4gIHt0eXBlOiB0eXBlb2YgQWN0aW9uVHlwZXMuU0VUX0ZJTFRFUl9BTklNQVRJT05fV0lORE9XfVxuPiB7XG4gIHJldHVybiB7XG4gICAgdHlwZTogQWN0aW9uVHlwZXMuU0VUX0ZJTFRFUl9BTklNQVRJT05fV0lORE9XLFxuICAgIGlkLFxuICAgIGFuaW1hdGlvbldpbmRvd1xuICB9O1xufVxuXG5leHBvcnQgdHlwZSBBZGRGaWx0ZXJVcGRhdGVyQWN0aW9uID0ge1xuICBkYXRhSWQ/OiBzdHJpbmcgfCBudWxsO1xufTtcbi8qKlxuICogQWRkIGEgbmV3IGZpbHRlclxuICogQG1lbWJlcm9mIHZpc1N0YXRlQWN0aW9uc1xuICogQHBhcmFtIGRhdGFJZCAtIGRhdGFzZXQgYGlkYCB0aGlzIG5ldyBmaWx0ZXIgaXMgYXNzb2NpYXRlZCB3aXRoXG4gKiBAcmV0dXJucyBhY3Rpb25cbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFkZEZpbHRlcihcbiAgZGF0YUlkOiBzdHJpbmcgfCBudWxsXG4pOiBNZXJnZTxBZGRGaWx0ZXJVcGRhdGVyQWN0aW9uLCB7dHlwZTogdHlwZW9mIEFjdGlvblR5cGVzLkFERF9GSUxURVJ9PiB7XG4gIHJldHVybiB7XG4gICAgdHlwZTogQWN0aW9uVHlwZXMuQUREX0ZJTFRFUixcbiAgICBkYXRhSWRcbiAgfTtcbn1cblxuZXhwb3J0IHR5cGUgQWRkTGF5ZXJVcGRhdGVyQWN0aW9uID0ge1xuICBjb25maWc/OiBvYmplY3Q7XG4gIGRhdGFzZXRJZD86IHN0cmluZztcbn07XG4vKipcbiAqIEFkZCBhIG5ldyBsYXllclxuICogQG1lbWJlcm9mIHZpc1N0YXRlQWN0aW9uc1xuICogQHBhcmFtIGNvbmZpZyAtIG5ldyBsYXllciBjb25maWdcbiAqIEBwYXJhbSBkYXRhc2V0SWQgLSBkYXRhc2V0IGlkIHVzZWQgZm9yIGNyZWF0aW5nIGFuIGVtcHR5IGxheWVyXG4gKiBAcmV0dXJucyBhY3Rpb25cbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFkZExheWVyKFxuICBjb25maWc/OiBvYmplY3QsXG4gIGRhdGFzZXRJZD86IHN0cmluZ1xuKTogTWVyZ2U8QWRkTGF5ZXJVcGRhdGVyQWN0aW9uLCB7dHlwZTogdHlwZW9mIEFjdGlvblR5cGVzLkFERF9MQVlFUn0+IHtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBBY3Rpb25UeXBlcy5BRERfTEFZRVIsXG4gICAgY29uZmlnLFxuICAgIGRhdGFzZXRJZFxuICB9O1xufVxuXG5leHBvcnQgdHlwZSBSZW9yZGVyTGF5ZXJVcGRhdGVyQWN0aW9uID0ge1xuICBvcmRlcjogbnVtYmVyW107XG59O1xuLyoqXG4gKiBSZW9yZGVyIGxheWVyLCBvcmRlciBpcyBhbiBhcnJheSBvZiBsYXllciBpbmRleGVzLCBpbmRleCAwIHdpbGwgYmUgdGhlIG9uZSBhdCB0aGUgYm90dG9tXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVBY3Rpb25zXG4gKiBAcGFyYW0gb3JkZXIgYW4gYXJyYXkgb2YgbGF5ZXIgaW5kZXhlc1xuICogQHJldHVybnMgYWN0aW9uXG4gKiBAcHVibGljXG4gKiBAZXhhbXBsZVxuICpcbiAqIC8vIGJyaW5nIGBsYXllcnNbMV1gIGJlbG93IGBsYXllcnNbMF1gLCB0aGUgc2VxdWVuY2UgbGF5ZXJzIHdpbGwgYmUgcmVuZGVyZWQgaXMgYDFgLCBgMGAsIGAyYCwgYDNgLlxuICogLy8gYDFgIHdpbGwgYmUgYXQgdGhlIGJvdHRvbSwgYDNgIHdpbGwgYmUgYXQgdGhlIHRvcC5cbiAqIHRoaXMucHJvcHMuZGlzcGF0Y2gocmVvcmRlckxheWVyKFsxLCAwLCAyLCAzXSkpO1xuICovXG5leHBvcnQgZnVuY3Rpb24gcmVvcmRlckxheWVyKFxuICBvcmRlcjogbnVtYmVyW11cbik6IE1lcmdlPFJlb3JkZXJMYXllclVwZGF0ZXJBY3Rpb24sIHt0eXBlOiB0eXBlb2YgQWN0aW9uVHlwZXMuUkVPUkRFUl9MQVlFUn0+IHtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBBY3Rpb25UeXBlcy5SRU9SREVSX0xBWUVSLFxuICAgIG9yZGVyXG4gIH07XG59XG5cbmV4cG9ydCB0eXBlIFJlbW92ZUZpbHRlclVwZGF0ZXJBY3Rpb24gPSB7XG4gIGlkeDogbnVtYmVyO1xufTtcbi8qKlxuICogUmVtb3ZlIGEgZmlsdGVyIGZyb20gYHZpc1N0YXRlLmZpbHRlcnNgLCBvbmNlIGEgZmlsdGVyIGlzIHJlbW92ZWQsIGRhdGEgd2lsbCBiZSByZS1maWx0ZXJlZCBhbmQgbGF5ZXIgd2lsbCBiZSB1cGRhdGVkXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVBY3Rpb25zXG4gKiBAcGFyYW0gaWR4IGlkeCBvZiBmaWx0ZXIgdG8gYmUgcmVtb3ZlZFxuICogQHJldHVybnMgYWN0aW9uXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZW1vdmVGaWx0ZXIoXG4gIGlkeDogbnVtYmVyXG4pOiBNZXJnZTxSZW1vdmVGaWx0ZXJVcGRhdGVyQWN0aW9uLCB7dHlwZTogdHlwZW9mIEFjdGlvblR5cGVzLlJFTU9WRV9GSUxURVJ9PiB7XG4gIHJldHVybiB7XG4gICAgdHlwZTogQWN0aW9uVHlwZXMuUkVNT1ZFX0ZJTFRFUixcbiAgICBpZHhcbiAgfTtcbn1cblxuZXhwb3J0IHR5cGUgUmVtb3ZlTGF5ZXJVcGRhdGVyQWN0aW9uID0ge1xuICBpZHg6IG51bWJlcjtcbn07XG4vKipcbiAqIFJlbW92ZSBhIGxheWVyXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVBY3Rpb25zXG4gKiBAcGFyYW0gaWR4IGlkeCBvZiBsYXllciB0byBiZSByZW1vdmVkXG4gKiBAcmV0dXJucyBhY3Rpb25cbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlbW92ZUxheWVyKFxuICBpZHg6IG51bWJlclxuKTogTWVyZ2U8UmVtb3ZlTGF5ZXJVcGRhdGVyQWN0aW9uLCB7dHlwZTogdHlwZW9mIEFjdGlvblR5cGVzLlJFTU9WRV9MQVlFUn0+IHtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBBY3Rpb25UeXBlcy5SRU1PVkVfTEFZRVIsXG4gICAgaWR4XG4gIH07XG59XG5cbmV4cG9ydCB0eXBlIER1cGxpY2F0ZUxheWVyVXBkYXRlckFjdGlvbiA9IHtcbiAgaWR4OiBudW1iZXI7XG59O1xuLyoqXG4gKiBEdXBsaWNhdGUgYSBsYXllclxuICogQG1lbWJlcm9mIHZpc1N0YXRlQWN0aW9uc1xuICogQHBhcmFtIGlkeCBpZHggb2YgbGF5ZXIgdG8gYmUgZHVwbGljYXRlZFxuICogQHJldHVybnMgYWN0aW9uXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkdXBsaWNhdGVMYXllcihcbiAgaWR4OiBudW1iZXJcbik6IE1lcmdlPER1cGxpY2F0ZUxheWVyVXBkYXRlckFjdGlvbiwge3R5cGU6IHR5cGVvZiBBY3Rpb25UeXBlcy5EVVBMSUNBVEVfTEFZRVJ9PiB7XG4gIHJldHVybiB7XG4gICAgdHlwZTogQWN0aW9uVHlwZXMuRFVQTElDQVRFX0xBWUVSLFxuICAgIGlkeFxuICB9O1xufVxuXG5leHBvcnQgdHlwZSBSZW1vdmVEYXRhc2V0VXBkYXRlckFjdGlvbiA9IHtcbiAgZGF0YUlkOiBzdHJpbmc7XG59O1xuLyoqXG4gKiBSZW1vdmUgYSBkYXRhc2V0IGFuZCBhbGwgbGF5ZXJzLCBmaWx0ZXJzLCB0b29sdGlwIGNvbmZpZ3MgdGhhdCBiYXNlZCBvbiBpdFxuICogQG1lbWJlcm9mIHZpc1N0YXRlQWN0aW9uc1xuICogQHBhcmFtIGRhdGFJZCBkYXRhc2V0IGlkXG4gKiBAcmV0dXJucyBhY3Rpb25cbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlbW92ZURhdGFzZXQoXG4gIGRhdGFJZDogc3RyaW5nXG4pOiBNZXJnZTxSZW1vdmVEYXRhc2V0VXBkYXRlckFjdGlvbiwge3R5cGU6IHR5cGVvZiBBY3Rpb25UeXBlcy5SRU1PVkVfREFUQVNFVH0+IHtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBBY3Rpb25UeXBlcy5SRU1PVkVfREFUQVNFVCxcbiAgICBkYXRhSWRcbiAgfTtcbn1cblxuZXhwb3J0IHR5cGUgU2hvd0RhdGFzZXRUYWJsZVVwZGF0ZXJBY3Rpb24gPSB7XG4gIGRhdGFJZDogc3RyaW5nO1xufTtcbi8qKlxuICogRGlzcGxheSBkYXRhc2V0IHRhYmxlIGluIGEgbW9kYWxcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZUFjdGlvbnNcbiAqIEBwYXJhbSBkYXRhSWQgZGF0YXNldCBpZCB0byBzaG93IGluIHRhYmxlXG4gKiBAcmV0dXJucyBhY3Rpb25cbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNob3dEYXRhc2V0VGFibGUoXG4gIGRhdGFJZDogc3RyaW5nXG4pOiBNZXJnZTxTaG93RGF0YXNldFRhYmxlVXBkYXRlckFjdGlvbiwge3R5cGU6IHR5cGVvZiBBY3Rpb25UeXBlcy5TSE9XX0RBVEFTRVRfVEFCTEV9PiB7XG4gIHJldHVybiB7XG4gICAgdHlwZTogQWN0aW9uVHlwZXMuU0hPV19EQVRBU0VUX1RBQkxFLFxuICAgIGRhdGFJZFxuICB9O1xufVxuXG5leHBvcnQgdHlwZSBVcGRhdGVEYXRhc2V0Q29sb3JVcGRhdGVyID0ge1xuICBkYXRhSWQ6IHN0cmluZztcbiAgbmV3Q29sb3I6IFJHQkNvbG9yO1xufTtcbi8qKlxuICogVXBkYXRlIGRhdGFzZXQgY29sb3IgdG8gY3VzdG9tIGJ5IG1lYW5zIG9mIGNvbG9yIHBpY2tlclxuICogQG1lbWJlcm9mIHZpc1N0YXRlQWN0aW9uc1xuICogQHBhcmFtIGRhdGFJZCBkYXRhc2V0IGBpZGAgdGhpcyBjdXN0b20gY29sb3IgaXMgYXNzb2NpYXRlZCB3aXRoXG4gKiBAcGFyYW0gbmV3Q29sb3IgY3VzdG9tIGNvbG9yIGluIFJHQmZvcm1hdFxuICogQHJldHVybnMgYWN0aW9uXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1cGRhdGVUYWJsZUNvbG9yKFxuICBkYXRhSWQ6IHN0cmluZyxcbiAgbmV3Q29sb3I6IFJHQkNvbG9yXG4pOiBNZXJnZTxVcGRhdGVEYXRhc2V0Q29sb3JVcGRhdGVyLCB7dHlwZTogdHlwZW9mIEFjdGlvblR5cGVzLlVQREFURV9UQUJMRV9DT0xPUn0+IHtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBBY3Rpb25UeXBlcy5VUERBVEVfVEFCTEVfQ09MT1IsXG4gICAgZGF0YUlkLFxuICAgIG5ld0NvbG9yXG4gIH07XG59XG5cbmV4cG9ydCB0eXBlIFNvcnRUYWJsZUNvbHVtblVwZGF0ZXJBY3Rpb24gPSB7XG4gIGRhdGFJZDogc3RyaW5nO1xuICBjb2x1bW46IHN0cmluZztcbiAgbW9kZT86IHN0cmluZztcbn07XG4vKipcbiAqIFNvcnQgZGF0YXNldCBjb2x1bW4sIGZvciB0YWJsZSBkaXNwbGF5XG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVBY3Rpb25zXG4gKiBAcGFyYW0gZGF0YUlkXG4gKiBAcGFyYW0gY29sdW1uXG4gKiBAcGFyYW0gbW9kZVxuICogQHJldHVybnMgYWN0aW9uXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzb3J0VGFibGVDb2x1bW4oXG4gIGRhdGFJZDogc3RyaW5nLFxuICBjb2x1bW46IHN0cmluZyxcbiAgbW9kZT86IHN0cmluZ1xuKTogTWVyZ2U8U29ydFRhYmxlQ29sdW1uVXBkYXRlckFjdGlvbiwge3R5cGU6IHR5cGVvZiBBY3Rpb25UeXBlcy5TT1JUX1RBQkxFX0NPTFVNTn0+IHtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBBY3Rpb25UeXBlcy5TT1JUX1RBQkxFX0NPTFVNTixcbiAgICBkYXRhSWQsXG4gICAgY29sdW1uLFxuICAgIG1vZGVcbiAgfTtcbn1cblxuZXhwb3J0IHR5cGUgUGluVGFibGVDb2x1bW5VcGRhdGVyQWN0aW9uID0ge1xuICBkYXRhSWQ6IHN0cmluZztcbiAgY29sdW1uOiBzdHJpbmc7XG59O1xuLyoqXG4gKiBQaW4gZGF0YXNldCBjb2x1bW4sIGZvciB0YWJsZSBkaXNwbGF5XG4gKiBAcGFyYW0gZGF0YUlkXG4gKiBAcGFyYW0gY29sdW1uXG4gKiBAcmV0dXJucyBhY3Rpb25cbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBpblRhYmxlQ29sdW1uKFxuICBkYXRhSWQ6IHN0cmluZyxcbiAgY29sdW1uOiBzdHJpbmdcbik6IE1lcmdlPFBpblRhYmxlQ29sdW1uVXBkYXRlckFjdGlvbiwge3R5cGU6IHR5cGVvZiBBY3Rpb25UeXBlcy5QSU5fVEFCTEVfQ09MVU1OfT4ge1xuICByZXR1cm4ge1xuICAgIHR5cGU6IEFjdGlvblR5cGVzLlBJTl9UQUJMRV9DT0xVTU4sXG4gICAgZGF0YUlkLFxuICAgIGNvbHVtblxuICB9O1xufVxuXG5leHBvcnQgdHlwZSBDb3B5VGFibGVDb2x1bW5VcGRhdGVyQWN0aW9uID0ge1xuICBkYXRhSWQ6IHN0cmluZztcbiAgY29sdW1uOiBzdHJpbmc7XG59O1xuLyoqXG4gKiBDb3B5IGNvbHVtbiwgZm9yIHRhYmxlIGRpc3BsYXlcbiAqIEBwYXJhbSBkYXRhSWRcbiAqIEBwYXJhbSBjb2x1bW5cbiAqIEByZXR1cm5zIGFjdGlvblxuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gY29weVRhYmxlQ29sdW1uKFxuICBkYXRhSWQ6IHN0cmluZyxcbiAgY29sdW1uOiBzdHJpbmdcbik6IE1lcmdlPENvcHlUYWJsZUNvbHVtblVwZGF0ZXJBY3Rpb24sIHt0eXBlOiB0eXBlb2YgQWN0aW9uVHlwZXMuQ09QWV9UQUJMRV9DT0xVTU59PiB7XG4gIHJldHVybiB7XG4gICAgdHlwZTogQWN0aW9uVHlwZXMuQ09QWV9UQUJMRV9DT0xVTU4sXG4gICAgZGF0YUlkLFxuICAgIGNvbHVtblxuICB9O1xufVxuXG5leHBvcnQgdHlwZSBBZGREYXRhVG9NYXBVcGRhdGVyT3B0aW9ucyA9IHtcbiAgY2VudHJNYXA/OiBib29sZWFuO1xuICByZWFkT25seT86IGJvb2xlYW47XG4gIGtlZXBFeGlzdGluZ0NvbmZpZz86IGJvb2xlYW47XG59O1xuXG5leHBvcnQgdHlwZSBVcGRhdGVWaXNEYXRhVXBkYXRlckFjdGlvbiA9IHtcbiAgZGF0YXNldHM6IEFkZERhdGFUb01hcFBheWxvYWRbJ2RhdGFzZXRzJ107XG4gIG9wdGlvbnM6IEFkZERhdGFUb01hcFBheWxvYWRbJ29wdGlvbnMnXTtcbiAgY29uZmlnOiBBZGREYXRhVG9NYXBQYXlsb2FkWydjb25maWcnXTtcbn0gJiBBZGREYXRhVG9NYXBQYXlsb2FkO1xuLy8gKiBAcGFyYW0gZGF0YXNldC5pbmZvIC1pbmZvIG9mIGEgZGF0YXNldFxuLy8gKiBAcGFyYW0gZGF0YXNldC5pbmZvLmlkIC0gaWQgb2YgdGhpcyBkYXRhc2V0LiBJZiBjb25maWcgaXMgZGVmaW5lZCwgYGlkYCBzaG91bGQgbWF0Y2hlcyB0aGUgYGRhdGFJZGAgaW4gY29uZmlnLlxuLy8gKiBAcGFyYW0gZGF0YXNldC5pbmZvLmxhYmVsIC0gQSBkaXNwbGF5IG5hbWUgb2YgdGhpcyBkYXRhc2V0XG4vLyAqIEBwYXJhbSBkYXRhc2V0LmRhdGEgLSAqKipyZXF1aXJlZCoqIFRoZSBkYXRhIG9iamVjdCwgaW4gYSB0YWJ1bGFyIGZvcm1hdCB3aXRoIDIgcHJvcGVydGllcyBgZmllbGRzYCBhbmQgYHJvd3NgXG4vLyAqIEBwYXJhbSBkYXRhc2V0LmRhdGEuZmllbGRzIC0gKioqcmVxdWlyZWQqKiBBcnJheSBvZiBmaWVsZHMsXG4vLyAqIEBwYXJhbSBkYXRhc2V0LmRhdGEuZmllbGRzLm5hbWUgLSAqKipyZXF1aXJlZCoqIE5hbWUgb2YgdGhlIGZpZWxkLFxuLy8gKiBAcGFyYW0gZGF0YXNldC5kYXRhLnJvd3MgLSAqKipyZXF1aXJlZCoqIEFycmF5IG9mIHJvd3MsIGluIGEgdGFidWxhciBmb3JtYXQgd2l0aCBgZmllbGRzYCBhbmQgYHJvd3NgXG4vKipcbiAqIEFkZCBuZXcgZGF0YXNldCB0byBgdmlzU3RhdGVgLCB3aXRoIG9wdGlvbiB0byBsb2FkIGEgbWFwIGNvbmZpZyBhbG9uZyB3aXRoIHRoZSBkYXRhc2V0c1xuICogQG1lbWJlcm9mIHZpc1N0YXRlQWN0aW9uc1xuICogQHBhcmFtIGRhdGFzZXRzIC0gKioqcmVxdWlyZWQqKiBkYXRhc2V0cyBjYW4gYmUgYSBkYXRhc2V0IG9yIGFuIGFycmF5IG9mIGRhdGFzZXRzXG4gKiBFYWNoIGRhdGFzZXQgb2JqZWN0IG5lZWRzIHRvIGhhdmUgYGluZm9gIGFuZCBgZGF0YWAgcHJvcGVydHkuXG4gKiBAcGFyYW0ge29iamVjdH0gb3B0aW9uc1xuICogQHBhcmFtIG9wdGlvbnMuY2VudGVyTWFwIGBkZWZhdWx0OiB0cnVlYCBpZiBgY2VudGVyTWFwYCBpcyBzZXQgdG8gYHRydWVgIGtlcGxlci5nbCB3aWxsXG4gKiBwbGFjZSB0aGUgbWFwIHZpZXcgd2l0aGluIHRoZSBkYXRhIHBvaW50cyBib3VuZGFyaWVzXG4gKiBAcGFyYW0gb3B0aW9ucy5yZWFkT25seSBgZGVmYXVsdDogZmFsc2VgIGlmIGByZWFkT25seWAgaXMgc2V0IHRvIGB0cnVlYFxuICogdGhlIGxlZnQgc2V0dGluZyBwYW5lbCB3aWxsIGJlIGhpZGRlblxuICogQHBhcmFtIGNvbmZpZyB0aGlzIG9iamVjdCB3aWxsIGNvbnRhaW4gdGhlIGZ1bGwga2VwbGVyLmdsIGluc3RhbmNlIGNvbmZpZ3VyYXRpb24ge21hcFN0YXRlLCBtYXBTdHlsZSwgdmlzU3RhdGV9XG4gKiBAcmV0dXJucyBhY3Rpb25cbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVwZGF0ZVZpc0RhdGEoXG4gIGRhdGFzZXRzOiBBZGREYXRhVG9NYXBQYXlsb2FkWydkYXRhc2V0cyddLFxuICBvcHRpb25zOiBBZGREYXRhVG9NYXBQYXlsb2FkWydvcHRpb25zJ10sXG4gIGNvbmZpZzogQWRkRGF0YVRvTWFwUGF5bG9hZFsnY29uZmlnJ11cbik6IE1lcmdlPFVwZGF0ZVZpc0RhdGFVcGRhdGVyQWN0aW9uLCB7dHlwZTogdHlwZW9mIEFjdGlvblR5cGVzLlVQREFURV9WSVNfREFUQX0+IHtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBBY3Rpb25UeXBlcy5VUERBVEVfVklTX0RBVEEsXG4gICAgZGF0YXNldHMsXG4gICAgb3B0aW9ucyxcbiAgICBjb25maWdcbiAgfTtcbn1cblxuZXhwb3J0IHR5cGUgUmVuYW1lRGF0YXNldFVwZGF0ZXJBY3Rpb24gPSB7XG4gIGRhdGFJZDogc3RyaW5nO1xuICBsYWJlbDogc3RyaW5nO1xufTtcbi8qKlxuICogUmVuYW1lIGFuIGV4aXN0aW5nIGRhdGFzZXQgaW4gYHZpc1N0YXRlYFxuICogQG1lbWJlcm9mIHZpc1N0YXRlQWN0aW9uc1xuICogQHBhcmFtIGRhdGFJZCAtICoqKnJlcXVpcmVkKiogSWQgb2YgdGhlIGRhdGFzZXQgdG8gdXBkYXRlXG4gKiBAcGFyYW0gbGFiZWwgLSAqKipyZXF1aXJlZCoqIE5ldyBuYW1lIGZvciB0aGUgZGF0YXNldFxuICogQHJldHVybnMgYWN0aW9uXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZW5hbWVEYXRhc2V0KFxuICBkYXRhSWQ6IHN0cmluZyxcbiAgbGFiZWw6IHN0cmluZ1xuKTogTWVyZ2U8UmVuYW1lRGF0YXNldFVwZGF0ZXJBY3Rpb24sIHt0eXBlOiB0eXBlb2YgQWN0aW9uVHlwZXMuUkVOQU1FX0RBVEFTRVR9PiB7XG4gIHJldHVybiB7XG4gICAgdHlwZTogQWN0aW9uVHlwZXMuUkVOQU1FX0RBVEFTRVQsXG4gICAgZGF0YUlkLFxuICAgIGxhYmVsXG4gIH07XG59XG5cbmV4cG9ydCB0eXBlIFRvZ2dsZUZpbHRlckFuaW1hdGlvblVwZGF0ZXJBY3Rpb24gPSB7XG4gIGlkeDogbnVtYmVyO1xufTtcbi8qKlxuICogU3RhcnQgYW5kIGVuZCBmaWx0ZXIgYW5pbWF0aW9uXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVBY3Rpb25zXG4gKiBAcGFyYW0ge051bWJlcn0gaWR4IG9mIGZpbHRlclxuICogQHJldHVybnMgYWN0aW9uXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0b2dnbGVGaWx0ZXJBbmltYXRpb24oXG4gIGlkeDogbnVtYmVyXG4pOiBNZXJnZTxUb2dnbGVGaWx0ZXJBbmltYXRpb25VcGRhdGVyQWN0aW9uLCB7dHlwZTogdHlwZW9mIEFjdGlvblR5cGVzLlRPR0dMRV9GSUxURVJfQU5JTUFUSU9OfT4ge1xuICByZXR1cm4ge1xuICAgIHR5cGU6IEFjdGlvblR5cGVzLlRPR0dMRV9GSUxURVJfQU5JTUFUSU9OLFxuICAgIGlkeFxuICB9O1xufVxuXG5leHBvcnQgdHlwZSBVcGRhdGVGaWx0ZXJBbmltYXRpb25TcGVlZFVwZGF0ZXJBY3Rpb24gPSB7XG4gIGlkeDogbnVtYmVyO1xuICBzcGVlZDogbnVtYmVyO1xufTtcbi8qKlxuICogQ2hhbmdlIGZpbHRlciBhbmltYXRpb24gc3BlZWRcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZUFjdGlvbnNcbiAqIEBwYXJhbSBpZHggLSAgYGlkeGAgb2YgZmlsdGVyXG4gKiBAcGFyYW0gc3BlZWQgLSBgc3BlZWRgIHRvIGNoYW5nZSBpdCB0by4gYHNwZWVkYCBpcyBhIG11bHRpcGxpZXJcbiAqIEByZXR1cm5zIGFjdGlvblxuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gdXBkYXRlRmlsdGVyQW5pbWF0aW9uU3BlZWQoXG4gIGlkeDogbnVtYmVyLFxuICBzcGVlZDogbnVtYmVyXG4pOiBNZXJnZTxcbiAgVXBkYXRlRmlsdGVyQW5pbWF0aW9uU3BlZWRVcGRhdGVyQWN0aW9uLFxuICB7dHlwZTogdHlwZW9mIEFjdGlvblR5cGVzLlVQREFURV9GSUxURVJfQU5JTUFUSU9OX1NQRUVEfVxuPiB7XG4gIHJldHVybiB7XG4gICAgdHlwZTogQWN0aW9uVHlwZXMuVVBEQVRFX0ZJTFRFUl9BTklNQVRJT05fU1BFRUQsXG4gICAgaWR4LFxuICAgIHNwZWVkXG4gIH07XG59XG5cbmV4cG9ydCB0eXBlIFNldExheWVyQW5pbWF0aW9uVGltZVVwZGF0ZXJBY3Rpb24gPSB7XG4gIHZhbHVlOiBudW1iZXI7XG59O1xuLyoqXG4gKiBSZXNldCBhbmltYXRpb25cbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZUFjdGlvbnNcbiAqIEBwYXJhbSB2YWx1ZSAtICBDdXJyZW50IHZhbHVlIG9mIHRoZSBzbGlkZXJcbiAqIEByZXR1cm5zIGFjdGlvblxuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gc2V0TGF5ZXJBbmltYXRpb25UaW1lKFxuICB2YWx1ZTogbnVtYmVyXG4pOiBNZXJnZTxTZXRMYXllckFuaW1hdGlvblRpbWVVcGRhdGVyQWN0aW9uLCB7dHlwZTogdHlwZW9mIEFjdGlvblR5cGVzLlNFVF9MQVlFUl9BTklNQVRJT05fVElNRX0+IHtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBBY3Rpb25UeXBlcy5TRVRfTEFZRVJfQU5JTUFUSU9OX1RJTUUsXG4gICAgdmFsdWVcbiAgfTtcbn1cblxuZXhwb3J0IHR5cGUgVXBkYXRlTGF5ZXJBbmltYXRpb25TcGVlZFVwZGF0ZXJBY3Rpb24gPSB7XG4gIHNwZWVkOiBudW1iZXI7XG59O1xuLyoqXG4gKiB1cGRhdGUgdHJpcCBsYXllciBhbmltYXRpb24gc3BlZWRcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZUFjdGlvbnNcbiAqIEBwYXJhbSBzcGVlZCAtIGBzcGVlZGAgdG8gY2hhbmdlIGl0IHRvLiBgc3BlZWRgIGlzIGEgbXVsdGlwbGllclxuICogQHJldHVybnMgYWN0aW9uXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1cGRhdGVMYXllckFuaW1hdGlvblNwZWVkKFxuICBzcGVlZDogbnVtYmVyXG4pOiBNZXJnZTxcbiAgVXBkYXRlTGF5ZXJBbmltYXRpb25TcGVlZFVwZGF0ZXJBY3Rpb24sXG4gIHt0eXBlOiB0eXBlb2YgQWN0aW9uVHlwZXMuVVBEQVRFX0xBWUVSX0FOSU1BVElPTl9TUEVFRH1cbj4ge1xuICByZXR1cm4ge1xuICAgIHR5cGU6IEFjdGlvblR5cGVzLlVQREFURV9MQVlFUl9BTklNQVRJT05fU1BFRUQsXG4gICAgc3BlZWRcbiAgfTtcbn1cbmV4cG9ydCB0eXBlIFRvZ2dsZUxheWVyQW5pbWF0aW9uVXBkYXRlckFjdGlvbiA9IHt9O1xuLyoqXG4gKiBzdGFydCBlbmQgZW5kIGxheWVyIGFuaW1hdGlvblxuICogQG1lbWJlcm9mIHZpc1N0YXRlQWN0aW9uc1xuICogQHJldHVybnMgYWN0aW9uXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0b2dnbGVMYXllckFuaW1hdGlvbigpOiBNZXJnZTxcbiAgVG9nZ2xlTGF5ZXJBbmltYXRpb25VcGRhdGVyQWN0aW9uLFxuICB7dHlwZTogdHlwZW9mIEFjdGlvblR5cGVzLlRPR0dMRV9MQVlFUl9BTklNQVRJT059XG4+IHtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBBY3Rpb25UeXBlcy5UT0dHTEVfTEFZRVJfQU5JTUFUSU9OXG4gIH07XG59XG5cbmV4cG9ydCB0eXBlIFRvZ2dsZUxheWVyQW5pbWF0aW9uQ29udHJvbFVwZGF0ZXJBY3Rpb24gPSB7fTtcbi8qKlxuICogaGlkZSBhbmQgc2hvdyBsYXllciBhbmltYXRpb24gY29udHJvbFxuICogQG1lbWJlcm9mIHZpc1N0YXRlQWN0aW9uc1xuICogQHJldHVybnMgYWN0aW9uXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0b2dnbGVMYXllckFuaW1hdGlvbkNvbnRyb2woKTogTWVyZ2U8XG4gIFRvZ2dsZUxheWVyQW5pbWF0aW9uQ29udHJvbFVwZGF0ZXJBY3Rpb24sXG4gIHt0eXBlOiB0eXBlb2YgQWN0aW9uVHlwZXMuVE9HR0xFX0xBWUVSX0FOSU1BVElPTl9DT05UUk9MfVxuPiB7XG4gIHJldHVybiB7XG4gICAgdHlwZTogQWN0aW9uVHlwZXMuVE9HR0xFX0xBWUVSX0FOSU1BVElPTl9DT05UUk9MXG4gIH07XG59XG5cbmV4cG9ydCB0eXBlIEVubGFyZ2VGaWx0ZXJVcGRhdGVyQWN0aW9uID0ge1xuICBpZHg6IG51bWJlcjtcbn07XG4vKipcbiAqIFNob3cgbGFyZ2VyIHRpbWUgZmlsdGVyIGF0IGJvdHRvbSBmb3IgdGltZSBwbGF5YmFjayAoYXBwbHkgdG8gdGltZSBmaWx0ZXIgb25seSlcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZUFjdGlvbnNcbiAqIEBwYXJhbSBpZHggLSBpbmRleCBvZiBmaWx0ZXIgdG8gZW5sYXJnZVxuICogQHJldHVybnMgYWN0aW9uXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBlbmxhcmdlRmlsdGVyKFxuICBpZHg6IG51bWJlclxuKTogTWVyZ2U8RW5sYXJnZUZpbHRlclVwZGF0ZXJBY3Rpb24sIHt0eXBlOiB0eXBlb2YgQWN0aW9uVHlwZXMuRU5MQVJHRV9GSUxURVJ9PiB7XG4gIHJldHVybiB7XG4gICAgdHlwZTogQWN0aW9uVHlwZXMuRU5MQVJHRV9GSUxURVIsXG4gICAgaWR4XG4gIH07XG59XG5cbmV4cG9ydCB0eXBlIFRvZ2dsZUZpbHRlckZlYXR1cmVVcGRhdGVyQWN0aW9uID0ge1xuICBpZHg6IG51bWJlcjtcbn07XG4vKipcbiAqIFNob3cvaGlkZSBmaWx0ZXIgZmVhdHVyZSBvbiBtYXBcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZUFjdGlvbnNcbiAqIEBwYXJhbSBpZHggLSBpbmRleCBvZiBmaWx0ZXIgZmVhdHVyZSB0byBzaG93L2hpZGVcbiAqIEByZXR1cm4gYWN0aW9uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0b2dnbGVGaWx0ZXJGZWF0dXJlKFxuICBpZHg6IG51bWJlclxuKTogTWVyZ2U8VG9nZ2xlRmlsdGVyRmVhdHVyZVVwZGF0ZXJBY3Rpb24sIHt0eXBlOiB0eXBlb2YgQWN0aW9uVHlwZXMuVE9HR0xFX0ZJTFRFUl9GRUFUVVJFfT4ge1xuICByZXR1cm4ge1xuICAgIHR5cGU6IEFjdGlvblR5cGVzLlRPR0dMRV9GSUxURVJfRkVBVFVSRSxcbiAgICBpZHhcbiAgfTtcbn1cblxuZXhwb3J0IHR5cGUgT25MYXllckhvdmVyVXBkYXRlckFjdGlvbiA9IHtcbiAgaW5mbzoge3BpY2tlZD86IGJvb2xlYW59IHwgbnVsbDtcbn07XG4vKipcbiAqIFRyaWdnZXIgbGF5ZXIgaG92ZXIgZXZlbnQgd2l0aCBob3ZlcmVkIG9iamVjdFxuICogQG1lbWJlcm9mIHZpc1N0YXRlQWN0aW9uc1xuICogQHBhcmFtIGluZm8gLSBPYmplY3QgaG92ZXJlZCwgcmV0dXJuZWQgYnkgZGVjay5nbFxuICogQHJldHVybnMgYWN0aW9uXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBvbkxheWVySG92ZXIoXG4gIGluZm86IHtwaWNrZWQ/OiBib29sZWFufSB8IG51bGxcbik6IE1lcmdlPE9uTGF5ZXJIb3ZlclVwZGF0ZXJBY3Rpb24sIHt0eXBlOiB0eXBlb2YgQWN0aW9uVHlwZXMuTEFZRVJfSE9WRVJ9PiB7XG4gIHJldHVybiB7XG4gICAgdHlwZTogQWN0aW9uVHlwZXMuTEFZRVJfSE9WRVIsXG4gICAgaW5mb1xuICB9O1xufVxuXG5leHBvcnQgdHlwZSBPbkxheWVyQ2xpY2tVcGRhdGVyQWN0aW9uID0ge1xuICBpbmZvOiB7cGlja2VkPzogYm9vbGVhbn0gfCBudWxsO1xufTtcbi8qKlxuICogVHJpZ2dlciBsYXllciBjbGljayBldmVudCB3aXRoIGNsaWNrZWQgb2JqZWN0XG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVBY3Rpb25zXG4gKiBAcGFyYW0gaW5mbyAtIE9iamVjdCBjbGlja2VkLCByZXR1cm5lZCBieSBkZWNrLmdsXG4gKiBAcmV0dXJucyBhY3Rpb25cbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG9uTGF5ZXJDbGljayhcbiAgaW5mbzoge3BpY2tlZD86IGJvb2xlYW59IHwgbnVsbFxuKTogTWVyZ2U8T25MYXllckNsaWNrVXBkYXRlckFjdGlvbiwge3R5cGU6IHR5cGVvZiBBY3Rpb25UeXBlcy5MQVlFUl9DTElDS30+IHtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBBY3Rpb25UeXBlcy5MQVlFUl9DTElDSyxcbiAgICBpbmZvXG4gIH07XG59XG5cbmV4cG9ydCB0eXBlIE9uTWFwQ2xpY2tVcGRhdGVyQWN0aW9uID0ge307XG4vKipcbiAqIFRyaWdnZXIgbWFwIGNsaWNrIGV2ZW50LCB1bnNlbGVjdCBjbGlja2VkIG9iamVjdFxuICogQG1lbWJlcm9mIHZpc1N0YXRlQWN0aW9uc1xuICogQHJldHVybnMgYWN0aW9uXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBvbk1hcENsaWNrKCk6IE1lcmdlPE9uTWFwQ2xpY2tVcGRhdGVyQWN0aW9uLCB7dHlwZTogdHlwZW9mIEFjdGlvblR5cGVzLk1BUF9DTElDS30+IHtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBBY3Rpb25UeXBlcy5NQVBfQ0xJQ0tcbiAgfTtcbn1cblxuZXhwb3J0IHR5cGUgT25Nb3VzZU1vdmVVcGRhdGVyQWN0aW9uID0ge1xuICBldnQ7XG59O1xuLyoqXG4gKiBUcmlnZ2VyIG1hcCBtb3VzZSBtb3ZlZXZlbnQsIHBheWxvYWQgd291bGQgYmVcbiAqIFJlYWN0LW1hcC1nbCBQb2ludGVyRXZlbnRcbiAqIGh0dHBzOi8vdWJlci5naXRodWIuaW8vcmVhY3QtbWFwLWdsLyMvZG9jdW1lbnRhdGlvbi9hcGktcmVmZXJlbmNlL3BvaW50ZXItZXZlbnRcbiAqXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVBY3Rpb25zXG4gKiBAcGFyYW0gZXZ0IC0gUG9pbnRlckV2ZW50XG4gKiBAcmV0dXJucyBhY3Rpb25cbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG9uTW91c2VNb3ZlKFxuICBldnRcbik6IE1lcmdlPE9uTW91c2VNb3ZlVXBkYXRlckFjdGlvbiwge3R5cGU6IHR5cGVvZiBBY3Rpb25UeXBlcy5NT1VTRV9NT1ZFfT4ge1xuICByZXR1cm4ge1xuICAgIHR5cGU6IEFjdGlvblR5cGVzLk1PVVNFX01PVkUsXG4gICAgZXZ0XG4gIH07XG59XG5cbmV4cG9ydCB0eXBlIFRvZ2dsZUxheWVyRm9yTWFwVXBkYXRlckFjdGlvbiA9IHtcbiAgbWFwSW5kZXg6IG51bWJlcjtcbiAgbGF5ZXJJZDogc3RyaW5nO1xufTtcbi8qKlxuICogVG9nZ2xlIHZpc2liaWxpdHkgb2YgYSBsYXllciBpbiBhIHNwbGl0IG1hcFxuICogQG1lbWJlcm9mIHZpc1N0YXRlQWN0aW9uc1xuICogQHBhcmFtIG1hcEluZGV4IC0gaW5kZXggb2YgdGhlIHNwbGl0IG1hcFxuICogQHBhcmFtIGxheWVySWQgLSBpZCBvZiB0aGUgbGF5ZXJcbiAqIEByZXR1cm5zIGFjdGlvblxuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gdG9nZ2xlTGF5ZXJGb3JNYXAoXG4gIG1hcEluZGV4OiBudW1iZXIsXG4gIGxheWVySWQ6IHN0cmluZ1xuKTogTWVyZ2U8VG9nZ2xlTGF5ZXJGb3JNYXBVcGRhdGVyQWN0aW9uLCB7dHlwZTogdHlwZW9mIEFjdGlvblR5cGVzLlRPR0dMRV9MQVlFUl9GT1JfTUFQfT4ge1xuICByZXR1cm4ge1xuICAgIHR5cGU6IEFjdGlvblR5cGVzLlRPR0dMRV9MQVlFUl9GT1JfTUFQLFxuICAgIG1hcEluZGV4LFxuICAgIGxheWVySWRcbiAgfTtcbn1cblxuZXhwb3J0IHR5cGUgU2V0RmlsdGVyUGxvdFVwZGF0ZXJBY3Rpb24gPSB7XG4gIGlkeDogbnVtYmVyO1xuICBuZXdQcm9wOiBvYmplY3Q7XG4gIHZhbHVlSW5kZXg/OiBudW1iZXI7XG59O1xuLyoqXG4gKiBTZXQgdGhlIHByb3BlcnR5IG9mIGEgZmlsdGVyIHBsb3RcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZUFjdGlvbnNcbiAqIEBwYXJhbSBpZHhcbiAqIEBwYXJhbSBuZXdQcm9wIGtleSB2YWx1ZSBtYXBwaW5nIG9mIG5ldyBwcm9wIGB7eUF4aXM6ICdoaXN0b2dyYW0nfWBcbiAqIEBwYXJhbSB2YWx1ZUluZGV4IGRhdGFJZCBpbmRleFxuICogQHJldHVybnMgYWN0aW9uXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXRGaWx0ZXJQbG90KFxuICBpZHg6IG51bWJlcixcbiAgbmV3UHJvcDogb2JqZWN0LFxuICB2YWx1ZUluZGV4PzogbnVtYmVyXG4pOiBNZXJnZTxTZXRGaWx0ZXJQbG90VXBkYXRlckFjdGlvbiwge3R5cGU6IHR5cGVvZiBBY3Rpb25UeXBlcy5TRVRfRklMVEVSX1BMT1R9PiB7XG4gIHJldHVybiB7XG4gICAgdHlwZTogQWN0aW9uVHlwZXMuU0VUX0ZJTFRFUl9QTE9ULFxuICAgIGlkeCxcbiAgICBuZXdQcm9wLFxuICAgIHZhbHVlSW5kZXhcbiAgfTtcbn1cblxuZXhwb3J0IHR5cGUgU2V0TWFwSW5mb1VwZGF0ZXJBY3Rpb24gPSB7XG4gIGluZm86IGFueTtcbn07XG4vKipcbiAqIFNldCB0aGUgcHJvcGVydHkgb2YgYSBmaWx0ZXIgcGxvdFxuICogQG1lbWJlcm9mIHZpc1N0YXRlQWN0aW9uc1xuICogQHBhcmFtIGluZm9cbiAqIEByZXR1cm5zIGFjdGlvblxuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gc2V0TWFwSW5mbyhcbiAgaW5mbzogYW55XG4pOiBNZXJnZTxTZXRNYXBJbmZvVXBkYXRlckFjdGlvbiwge3R5cGU6IHR5cGVvZiBBY3Rpb25UeXBlcy5TRVRfTUFQX0lORk99PiB7XG4gIHJldHVybiB7XG4gICAgdHlwZTogQWN0aW9uVHlwZXMuU0VUX01BUF9JTkZPLFxuICAgIGluZm9cbiAgfTtcbn1cblxuZXhwb3J0IHR5cGUgTG9hZEZpbGVzVXBkYXRlckFjdGlvbiA9IHtcbiAgZmlsZXM6IEZpbGVbXTtcbiAgb25GaW5pc2g/KHJlc3VsdDogYW55KTogYW55O1xufTtcbi8qKlxuICogVHJpZ2dlciBmaWxlIGxvYWRpbmcgZGlzcGF0Y2ggYGFkZERhdGFUb01hcGAgaWYgc3VjY2VlZCwgb3IgYGxvYWRGaWxlc0VycmAgaWYgZmFpbGVkXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVBY3Rpb25zXG4gKiBAcGFyYW0gZmlsZXMgYXJyYXkgb2YgZmlsZWJsb2JcbiAqIEByZXR1cm5zIGFjdGlvblxuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gbG9hZEZpbGVzKFxuICBmaWxlczogRmlsZVtdLFxuICBvbkZpbmlzaD86IChyZXN1bHQ6IGFueSkgPT4gYW55XG4pOiBNZXJnZTxMb2FkRmlsZXNVcGRhdGVyQWN0aW9uLCB7dHlwZTogdHlwZW9mIEFjdGlvblR5cGVzLkxPQURfRklMRVN9PiB7XG4gIHJldHVybiB7XG4gICAgdHlwZTogQWN0aW9uVHlwZXMuTE9BRF9GSUxFUyxcbiAgICBmaWxlcyxcbiAgICBvbkZpbmlzaFxuICB9O1xufVxuXG4vKipcbiAqIENhbGxlZCB3aXRoIG5leHQgZmlsZSB0byBsb2FkXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVBY3Rpb25zXG4gKiBAcmV0dXJucyBhY3Rpb25cbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxvYWROZXh0RmlsZSgpOiB7dHlwZTogdHlwZW9mIEFjdGlvblR5cGVzLkxPQURfTkVYVF9GSUxFfSB7XG4gIHJldHVybiB7XG4gICAgdHlwZTogQWN0aW9uVHlwZXMuTE9BRF9ORVhUX0ZJTEVcbiAgfTtcbn1cblxuZXhwb3J0IHR5cGUgbG9hZEZpbGVzU3VjY2Vzc1VwZGF0ZXJBY3Rpb24gPSB7XG4gIHJlc3VsdDogRmlsZUNhY2hlSXRlbVtdO1xufTtcbi8qKlxuICogY2FsbGVkIHdoZW4gYWxsIGZpbGVzIGFyZSBwcm9jZXNzZWQgYW5kIGxvYWRlZFxuICogQG1lbWJlcm9mIHZpc1N0YXRlQWN0aW9uc1xuICogQHBhcmFtIHJlc3VsdFxuICogQHJldHVybnMgYWN0aW9uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsb2FkRmlsZXNTdWNjZXNzKFxuICByZXN1bHQ6IEZpbGVDYWNoZUl0ZW1bXVxuKTogTWVyZ2U8bG9hZEZpbGVzU3VjY2Vzc1VwZGF0ZXJBY3Rpb24sIHt0eXBlOiB0eXBlb2YgQWN0aW9uVHlwZXMuTE9BRF9GSUxFU19TVUNDRVNTfT4ge1xuICByZXR1cm4ge1xuICAgIHR5cGU6IEFjdGlvblR5cGVzLkxPQURfRklMRVNfU1VDQ0VTUyxcbiAgICByZXN1bHRcbiAgfTtcbn1cblxuZXhwb3J0IHR5cGUgTG9hZEZpbGVTdGVwU3VjY2Vzc0FjdGlvbiA9IHtcbiAgZmlsZU5hbWU6IHN0cmluZztcbiAgZmlsZUNhY2hlOiBGaWxlQ2FjaGVJdGVtW107XG59O1xuLyoqXG4gKiBjYWxsZWQgd2hlbiBzdWNjZXNzZnVsbHkgbG9hZGVkIG9uZSBmaWxlLCByZWFkeSB0byBtb3ZlIG9uIHRvIHRoZSBuZXh0IG9uZVxuICogQG1lbWJlcm9mIHZpc1N0YXRlQWN0aW9uc1xuICogQHBhcmFtIHJlc3VsdFxuICogQHJldHVybnMgYWN0aW9uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsb2FkRmlsZVN0ZXBTdWNjZXNzKHtcbiAgZmlsZU5hbWUsXG4gIGZpbGVDYWNoZVxufToge1xuICBmaWxlTmFtZTogc3RyaW5nO1xuICBmaWxlQ2FjaGU6IEZpbGVDYWNoZUl0ZW1bXTtcbn0pOiBNZXJnZTxMb2FkRmlsZVN0ZXBTdWNjZXNzQWN0aW9uLCB7dHlwZTogdHlwZW9mIEFjdGlvblR5cGVzLkxPQURfRklMRV9TVEVQX1NVQ0NFU1N9PiB7XG4gIHJldHVybiB7XG4gICAgdHlwZTogQWN0aW9uVHlwZXMuTE9BRF9GSUxFX1NURVBfU1VDQ0VTUyxcbiAgICBmaWxlTmFtZSxcbiAgICBmaWxlQ2FjaGVcbiAgfTtcbn1cblxuZXhwb3J0IHR5cGUgTG9hZEZpbGVzRXJyVXBkYXRlckFjdGlvbiA9IHtcbiAgZmlsZU5hbWU6IHN0cmluZztcbiAgZXJyb3I6IGFueTtcbn07XG4vKipcbiAqIFRyaWdnZXIgbG9hZGluZyBmaWxlIGVycm9yXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVBY3Rpb25zXG4gKiBAcGFyYW0gIGVycm9yXG4gKiBAcmV0dXJucyBhY3Rpb25cbiAqIEBwdWJsaWNcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gbG9hZEZpbGVzRXJyKFxuICBmaWxlTmFtZTogc3RyaW5nLFxuICBlcnJvcjogYW55XG4pOiBNZXJnZTxMb2FkRmlsZXNFcnJVcGRhdGVyQWN0aW9uLCB7dHlwZTogdHlwZW9mIEFjdGlvblR5cGVzLkxPQURfRklMRVNfRVJSfT4ge1xuICByZXR1cm4ge1xuICAgIHR5cGU6IEFjdGlvblR5cGVzLkxPQURfRklMRVNfRVJSLFxuICAgIGZpbGVOYW1lLFxuICAgIGVycm9yXG4gIH07XG59XG5cbmV4cG9ydCB0eXBlIFNldEZlYXR1cmVzVXBkYXRlckFjdGlvbiA9IHtcbiAgZmVhdHVyZXM6IEZlYXR1cmVbXTtcbn07XG4vKipcbiAqIFN0b3JlIGZlYXR1cmVzIHRvIHN0YXRlXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVBY3Rpb25zXG4gKiBAcGFyYW0gZmVhdHVyZXNcbiAqIEByZXR1cm5zIGFjdGlvblxuICovXG5leHBvcnQgZnVuY3Rpb24gc2V0RmVhdHVyZXMoXG4gIGZlYXR1cmVzOiBGZWF0dXJlW11cbik6IE1lcmdlPFNldEZlYXR1cmVzVXBkYXRlckFjdGlvbiwge3R5cGU6IHR5cGVvZiBBY3Rpb25UeXBlcy5TRVRfRkVBVFVSRVN9PiB7XG4gIHJldHVybiB7XG4gICAgdHlwZTogQWN0aW9uVHlwZXMuU0VUX0ZFQVRVUkVTLFxuICAgIGZlYXR1cmVzXG4gIH07XG59XG5cbmV4cG9ydCB0eXBlIFNldFBvbHlnb25GaWx0ZXJMYXllclVwZGF0ZXJBY3Rpb24gPSB7XG4gIGxheWVyOiBMYXllcjtcbiAgZmVhdHVyZTogRmVhdHVyZTtcbn07XG4vKipcbiAqIEl0IHdpbGwgYXBwbHkgdGhlIHByb3ZpZGUgZmVhdHVyZSBhcyBmaWx0ZXIgdG8gdGhlIGdpdmVuIGxheWVyLlxuICogSWYgdGhlIGdpdmVuIGZlYXR1cmUgaXMgYWxyZWFkeSBhcHBsaWVkIGFzIGZpbHRlciB0byB0aGUgbGF5ZXIsIGl0IHdpbGwgcmVtb3ZlIHRoZSBsYXllciBmcm9tIHRoZSBmaWx0ZXJcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZUFjdGlvbnNcbiAqIEBwYXJhbSBsYXllclxuICogQHBhcmFtIGZlYXR1cmVcbiAqIEByZXR1cm5zIGFjdGlvblxuICovXG5leHBvcnQgZnVuY3Rpb24gc2V0UG9seWdvbkZpbHRlckxheWVyKFxuICBsYXllcjogTGF5ZXIsXG4gIGZlYXR1cmU6IEZlYXR1cmVcbik6IE1lcmdlPFNldFBvbHlnb25GaWx0ZXJMYXllclVwZGF0ZXJBY3Rpb24sIHt0eXBlOiB0eXBlb2YgQWN0aW9uVHlwZXMuU0VUX1BPTFlHT05fRklMVEVSX0xBWUVSfT4ge1xuICByZXR1cm4ge1xuICAgIHR5cGU6IEFjdGlvblR5cGVzLlNFVF9QT0xZR09OX0ZJTFRFUl9MQVlFUixcbiAgICBsYXllcixcbiAgICBmZWF0dXJlXG4gIH07XG59XG5cbmV4cG9ydCB0eXBlIFNldFNlbGVjdGVkRmVhdHVyZVVwZGF0ZXJBY3Rpb24gPSB7XG4gIGZlYXR1cmU6IEZlYXR1cmU7XG59O1xuLyoqXG4gKiBTZXQgdGhlIGN1cnJlbnQgZmVhdHVyZSB0byBiZSBlZGl0ZWQvZGVsZXRlZFxuICogQG1lbWJlcm9mIHZpc1N0YXRlQWN0aW9uc1xuICogQHBhcmFtIGZlYXR1cmVcbiAqIEByZXR1cm5zIGFjdGlvblxuICovXG5leHBvcnQgZnVuY3Rpb24gc2V0U2VsZWN0ZWRGZWF0dXJlKFxuICBmZWF0dXJlOiBGZWF0dXJlXG4pOiBNZXJnZTxTZXRTZWxlY3RlZEZlYXR1cmVVcGRhdGVyQWN0aW9uLCB7dHlwZTogdHlwZW9mIEFjdGlvblR5cGVzLlNFVF9TRUxFQ1RFRF9GRUFUVVJFfT4ge1xuICByZXR1cm4ge1xuICAgIHR5cGU6IEFjdGlvblR5cGVzLlNFVF9TRUxFQ1RFRF9GRUFUVVJFLFxuICAgIGZlYXR1cmVcbiAgfTtcbn1cblxuZXhwb3J0IHR5cGUgRGVsZXRlRmVhdHVyZVVwZGF0ZXJBY3Rpb24gPSB7XG4gIGZlYXR1cmU6IEZlYXR1cmU7XG59O1xuLyoqXG4gKiBEZWxldGUgdGhlIGdpdmVuIGZlYXR1cmVcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZUFjdGlvbnNcbiAqIEBwYXJhbSBmZWF0dXJlXG4gKiBAcmV0dXJucyBhY3Rpb25cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRlbGV0ZUZlYXR1cmUoXG4gIGZlYXR1cmU6IEZlYXR1cmVcbik6IE1lcmdlPERlbGV0ZUZlYXR1cmVVcGRhdGVyQWN0aW9uLCB7dHlwZTogdHlwZW9mIEFjdGlvblR5cGVzLkRFTEVURV9GRUFUVVJFfT4ge1xuICByZXR1cm4ge1xuICAgIHR5cGU6IEFjdGlvblR5cGVzLkRFTEVURV9GRUFUVVJFLFxuICAgIGZlYXR1cmVcbiAgfTtcbn1cblxuZXhwb3J0IHR5cGUgU2V0RWRpdG9yTW9kZVVwZGF0ZXJBY3Rpb24gPSB7XG4gIG1vZGU6IHN0cmluZztcbn07XG4vKiogU2V0IHRoZSBtYXAgbW9kZVxuICogQG1lbWJlcm9mIHZpc1N0YXRlQWN0aW9uc1xuICogQHBhcmFtIG1vZGUgb25lIG9mIEVESVRPUl9NT0RFU1xuICogQHJldHVybnMgYWN0aW9uXG4gKiBAcHVibGljXG4gKiBAZXhhbXBsZVxuICogaW1wb3J0IHtzZXRNYXBNb2RlfSBmcm9tICdrZXBsZXIuZ2wvYWN0aW9ucyc7XG4gKiBpbXBvcnQge0VESVRPUl9NT0RFU30gZnJvbSAna2VwbGVyLmdsL2NvbnN0YW50cyc7XG4gKlxuICogdGhpcy5wcm9wcy5kaXNwYXRjaChzZXRNYXBNb2RlKEVESVRPUl9NT0RFUy5EUkFXX1BPTFlHT04pKTtcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNldEVkaXRvck1vZGUoXG4gIG1vZGU6IHN0cmluZ1xuKTogTWVyZ2U8U2V0RWRpdG9yTW9kZVVwZGF0ZXJBY3Rpb24sIHt0eXBlOiB0eXBlb2YgQWN0aW9uVHlwZXMuU0VUX0VESVRPUl9NT0RFfT4ge1xuICByZXR1cm4ge1xuICAgIHR5cGU6IEFjdGlvblR5cGVzLlNFVF9FRElUT1JfTU9ERSxcbiAgICBtb2RlXG4gIH07XG59XG5cbmV4cG9ydCB0eXBlIEFwcGx5Q1BVRmlsdGVyVXBkYXRlckFjdGlvbiA9IHtcbiAgZGF0YUlkOiBzdHJpbmcgfCBzdHJpbmdbXTtcbn07XG4vKipcbiAqIFRyaWdnZXIgQ1BVIGZpbHRlciBvZiBzZWxlY3RlZCBkYXRhc2V0XG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVBY3Rpb25zXG4gKiBAcGFyYW0gZGF0YUlkIC0gc2luZ2xlIGRhdGFJZCBvciBhbiBhcnJheSBvZiBkYXRhSWRzXG4gKiBAcmV0dXJucyBhY3Rpb25cbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFwcGx5Q1BVRmlsdGVyKFxuICBkYXRhSWQ6IHN0cmluZyB8IHN0cmluZ1tdXG4pOiBNZXJnZTxBcHBseUNQVUZpbHRlclVwZGF0ZXJBY3Rpb24sIHt0eXBlOiB0eXBlb2YgQWN0aW9uVHlwZXMuQVBQTFlfQ1BVX0ZJTFRFUn0+IHtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBBY3Rpb25UeXBlcy5BUFBMWV9DUFVfRklMVEVSLFxuICAgIGRhdGFJZFxuICB9O1xufVxuXG5leHBvcnQgdHlwZSBUb2dnbGVFZGl0b3JWaXNpYmlsaXR5VXBkYXRlckFjdGlvbiA9IHt9O1xuLyoqXG4gKiBUb2dnbGUgZWRpdG9yIGxheWVyIHZpc2liaWxpdHlcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZUFjdGlvbnNcbiAqIEByZXR1cm4gYWN0aW9uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0b2dnbGVFZGl0b3JWaXNpYmlsaXR5KCk6IE1lcmdlPFxuICBUb2dnbGVFZGl0b3JWaXNpYmlsaXR5VXBkYXRlckFjdGlvbixcbiAge3R5cGU6IHR5cGVvZiBBY3Rpb25UeXBlcy5UT0dHTEVfRURJVE9SX1ZJU0lCSUxJVFl9XG4+IHtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBBY3Rpb25UeXBlcy5UT0dHTEVfRURJVE9SX1ZJU0lCSUxJVFlcbiAgfTtcbn1cblxudHlwZSBGaWxlQ29udGVudCA9IHtcbiAgZmlsZU5hbWU6IHN0cmluZztcbiAgaGVhZGVyOiBzdHJpbmdbXTtcbiAgZGF0YTogYW55O1xufTtcbmV4cG9ydCB0eXBlIE5leHRGaWxlQmF0Y2hVcGRhdGVyQWN0aW9uID0ge1xuICBwYXlsb2FkOiB7XG4gICAgZ2VuOiBBc3luY0dlbmVyYXRvcjxGaWxlQ29udGVudD47XG4gICAgZmlsZU5hbWU6IHN0cmluZztcbiAgICBwcm9ncmVzcz86IGFueTtcbiAgICBhY2N1bXVsYXRlZD86IGFueTtcbiAgICBvbkZpbmlzaDogKHJlc3VsdDogYW55KSA9PiBhbnk7XG4gIH07XG59O1xuLyoqXG4gKiBQcm9jZXNzIHRoZSBuZXh0IGZpbGUgYmF0Y2hcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZUFjdGlvbnNcbiAqIEBwYXJhbSBwYXlsb2FkIC0gYmF0Y2ggcGF5bG9hZFxuICogQHJldHVybiBhY3Rpb25cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG5leHRGaWxlQmF0Y2goXG4gIHBheWxvYWQ6IE5leHRGaWxlQmF0Y2hVcGRhdGVyQWN0aW9uWydwYXlsb2FkJ11cbik6IE1lcmdlPE5leHRGaWxlQmF0Y2hVcGRhdGVyQWN0aW9uLCB7dHlwZTogdHlwZW9mIEFjdGlvblR5cGVzLk5FWFRfRklMRV9CQVRDSH0+IHtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBBY3Rpb25UeXBlcy5ORVhUX0ZJTEVfQkFUQ0gsXG4gICAgcGF5bG9hZFxuICB9O1xufVxuXG5leHBvcnQgdHlwZSBQcm9jZXNzRmlsZUNvbnRlbnRVcGRhdGVyQWN0aW9uID0ge1xuICBwYXlsb2FkOiB7XG4gICAgY29udGVudDogRmlsZUNvbnRlbnQ7XG4gICAgZmlsZUNhY2hlOiBGaWxlQ2FjaGVJdGVtW107XG4gIH07XG59O1xuLyoqXG4gKiBQcm9jZXNzIHRoZSBmaWxlIGNvbnRlbnRcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZUFjdGlvbnNcbiAqIEBwYXJhbSBwYXlsb2FkIC0gdGhlIGZpbGUgY29udGVudFxuICogQHJldHVybiBhY3Rpb25cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHByb2Nlc3NGaWxlQ29udGVudChcbiAgcGF5bG9hZDogUHJvY2Vzc0ZpbGVDb250ZW50VXBkYXRlckFjdGlvblsncGF5bG9hZCddXG4pOiBNZXJnZTxQcm9jZXNzRmlsZUNvbnRlbnRVcGRhdGVyQWN0aW9uLCB7dHlwZTogdHlwZW9mIEFjdGlvblR5cGVzLlBST0NFU1NfRklMRV9DT05URU5UfT4ge1xuICByZXR1cm4ge1xuICAgIHR5cGU6IEFjdGlvblR5cGVzLlBST0NFU1NfRklMRV9DT05URU5ULFxuICAgIHBheWxvYWRcbiAgfTtcbn1cblxuZXhwb3J0IHR5cGUgU2V0TGF5ZXJBbmltYXRpb25UaW1lQ29uZmlnQWN0aW9uID0ge1xuICBjb25maWc6IHtcbiAgICB0aW1lem9uZT86IHN0cmluZztcbiAgICB0aW1lRm9ybWF0Pzogc3RyaW5nO1xuICB9O1xufTtcbi8qKlxuICogU2V0IGxheWVyIGFuaW1hdGlvbiB0aW1lIGZvcm1hdCBhbmQgdGltZXpvbmVcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZUFjdGlvbnNcbiAqIEBwYXJhbSBjb25maWcgLSB7dGltZUZvcm1hdDogc3RyaW5nLCB0aW1lem9uZTogc3RyaW5nfVxuICogQHJldHVybiBhY3Rpb25cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNldExheWVyQW5pbWF0aW9uVGltZUNvbmZpZyhcbiAgY29uZmlnOiBTZXRMYXllckFuaW1hdGlvblRpbWVDb25maWdBY3Rpb25bJ2NvbmZpZyddXG4pOiBNZXJnZTxcbiAgU2V0TGF5ZXJBbmltYXRpb25UaW1lQ29uZmlnQWN0aW9uLFxuICB7dHlwZTogdHlwZW9mIEFjdGlvblR5cGVzLlNFVF9MQVlFUl9BTklNQVRJT05fVElNRV9DT05GSUd9XG4+IHtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBBY3Rpb25UeXBlcy5TRVRfTEFZRVJfQU5JTUFUSU9OX1RJTUVfQ09ORklHLFxuICAgIGNvbmZpZ1xuICB9O1xufVxuXG5leHBvcnQgdHlwZSBTZXRGaWx0ZXJBbmltYXRpb25UaW1lQ29uZmlnQWN0aW9uID0ge1xuICBpZHg6IG51bWJlcjtcbiAgY29uZmlnOiB7XG4gICAgdGltZXpvbmU/OiBzdHJpbmc7XG4gICAgdGltZUZvcm1hdD86IHN0cmluZztcbiAgfTtcbn07XG4vKipcbiAqIFNldCBGaWx0ZXIgYW5pbWF0aW9uIHRpbWUgZm9ybWF0IGFuZCB0aW1lem9uZVxuICogQG1lbWJlcm9mIHZpc1N0YXRlQWN0aW9uc1xuICogQHBhcmFtIGlkeFxuICogQHBhcmFtIGNvbmZpZ1xuICogQHJldHVybiBhY3Rpb25cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNldEZpbHRlckFuaW1hdGlvblRpbWVDb25maWcoXG4gIGlkeDogU2V0RmlsdGVyQW5pbWF0aW9uVGltZUNvbmZpZ0FjdGlvblsnaWR4J10sXG4gIGNvbmZpZzogU2V0RmlsdGVyQW5pbWF0aW9uVGltZUNvbmZpZ0FjdGlvblsnY29uZmlnJ11cbik6IE1lcmdlPFxuICBTZXRGaWx0ZXJBbmltYXRpb25UaW1lQ29uZmlnQWN0aW9uLFxuICB7dHlwZTogdHlwZW9mIEFjdGlvblR5cGVzLlNFVF9GSUxURVJfQU5JTUFUSU9OX1RJTUVfQ09ORklHfVxuPiB7XG4gIHJldHVybiB7XG4gICAgdHlwZTogQWN0aW9uVHlwZXMuU0VUX0ZJTFRFUl9BTklNQVRJT05fVElNRV9DT05GSUcsXG4gICAgaWR4LFxuICAgIGNvbmZpZ1xuICB9O1xufVxuXG4vKipcbiAqIFRoaXMgZGVjbGFyYXRpb24gaXMgbmVlZGVkIHRvIGdyb3VwIGFjdGlvbnMgaW4gZG9jc1xuICovXG4vKipcbiAqIEFjdGlvbnMgaGFuZGxlZCBtb3N0bHkgYnkgYHZpc1N0YXRlYCByZWR1Y2VyLlxuICogVGhleSBtYW5hZ2UgaG93IGRhdGEgaXMgcHJvY2Vzc2VkLCBmaWx0ZXJlZCBhbmQgZGlzcGxheWVkIG9uIHRoZSBtYXAgYnkgb3BlcmF0ZXMgb24gbGF5ZXJzLFxuICogZmlsdGVycyBhbmQgaW50ZXJhY3Rpb24gc2V0dGluZ3MuXG4gKlxuICogQHB1YmxpY1xuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBuby11bnVzZWQtdmFycyAqL1xuLy8gQHRzLWlnbm9yZVxuY29uc3QgdmlzU3RhdGVBY3Rpb25zID0gbnVsbDtcbi8qIGVzbGludC1lbmFibGUgbm8tdW51c2VkLXZhcnMgKi9cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFxQkEsSUFBQUEsWUFBQSxHQUFBQyxzQkFBQSxDQUFBQyxPQUFBO0FBckJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQVFBO0FBQ0E7O0FBTUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTyxTQUFTQyxpQkFBaUJBLENBQy9CQyxRQUFlLEVBQ2ZDLFNBQW1DLEVBQ29EO0VBQ3ZGLE9BQU87SUFDTEMsSUFBSSxFQUFFQyxvQkFBVyxDQUFDQyxtQkFBbUI7SUFDckNKLFFBQVE7SUFDUkM7RUFDRixDQUFDO0FBQ0g7QUFRQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTyxTQUFTSSxvQkFBb0JBLENBQ2xDTCxRQUFlLEVBQ2ZNLEdBQW1CLEVBQ25CQyxJQUFZLEVBQ1pDLEtBQVUsRUFDb0Y7RUFDOUYsT0FBTztJQUNMTixJQUFJLEVBQUVDLG9CQUFXLENBQUNNLHVCQUF1QjtJQUN6Q1QsUUFBUTtJQUNSTSxHQUFHO0lBQ0hDLElBQUk7SUFDSkM7RUFDRixDQUFDO0FBQ0g7QUFLQTtBQUNBO0FBQ0E7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
|
|
900
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfYWN0aW9uVHlwZXMiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwicmVxdWlyZSIsImxheWVyQ29uZmlnQ2hhbmdlIiwib2xkTGF5ZXIiLCJuZXdDb25maWciLCJ0eXBlIiwiQWN0aW9uVHlwZXMiLCJMQVlFUl9DT05GSUdfQ0hBTkdFIiwibGF5ZXJUZXh0TGFiZWxDaGFuZ2UiLCJpZHgiLCJwcm9wIiwidmFsdWUiLCJMQVlFUl9URVhUX0xBQkVMX0NIQU5HRSIsImxheWVyVHlwZUNoYW5nZSIsIm5ld1R5cGUiLCJMQVlFUl9UWVBFX0NIQU5HRSIsImxheWVyVmlzdWFsQ2hhbm5lbENvbmZpZ0NoYW5nZSIsImNoYW5uZWwiLCJMQVlFUl9WSVNVQUxfQ0hBTk5FTF9DSEFOR0UiLCJsYXllclZpc0NvbmZpZ0NoYW5nZSIsIm5ld1Zpc0NvbmZpZyIsIkxBWUVSX1ZJU19DT05GSUdfQ0hBTkdFIiwibGF5ZXJDb2xvclVJQ2hhbmdlIiwiTEFZRVJfQ09MT1JfVUlfQ0hBTkdFIiwidXBkYXRlTGF5ZXJCbGVuZGluZyIsIm1vZGUiLCJVUERBVEVfTEFZRVJfQkxFTkRJTkciLCJpbnRlcmFjdGlvbkNvbmZpZ0NoYW5nZSIsImNvbmZpZyIsIklOVEVSQUNUSU9OX0NPTkZJR19DSEFOR0UiLCJzZXRGaWx0ZXIiLCJ2YWx1ZUluZGV4IiwiU0VUX0ZJTFRFUiIsInNldEZpbHRlckFuaW1hdGlvblRpbWUiLCJTRVRfRklMVEVSX0FOSU1BVElPTl9USU1FIiwic2V0RmlsdGVyQW5pbWF0aW9uV2luZG93IiwiX3JlZiIsImlkIiwiYW5pbWF0aW9uV2luZG93IiwiU0VUX0ZJTFRFUl9BTklNQVRJT05fV0lORE9XIiwiYWRkRmlsdGVyIiwiZGF0YUlkIiwiQUREX0ZJTFRFUiIsImFkZExheWVyIiwiZGF0YXNldElkIiwiQUREX0xBWUVSIiwicmVvcmRlckxheWVyIiwib3JkZXIiLCJSRU9SREVSX0xBWUVSIiwicmVtb3ZlRmlsdGVyIiwiUkVNT1ZFX0ZJTFRFUiIsInJlbW92ZUxheWVyIiwiUkVNT1ZFX0xBWUVSIiwiZHVwbGljYXRlTGF5ZXIiLCJEVVBMSUNBVEVfTEFZRVIiLCJyZW1vdmVEYXRhc2V0IiwiUkVNT1ZFX0RBVEFTRVQiLCJzaG93RGF0YXNldFRhYmxlIiwiU0hPV19EQVRBU0VUX1RBQkxFIiwidXBkYXRlVGFibGVDb2xvciIsIm5ld0NvbG9yIiwiVVBEQVRFX1RBQkxFX0NPTE9SIiwic29ydFRhYmxlQ29sdW1uIiwiY29sdW1uIiwiU09SVF9UQUJMRV9DT0xVTU4iLCJwaW5UYWJsZUNvbHVtbiIsIlBJTl9UQUJMRV9DT0xVTU4iLCJjb3B5VGFibGVDb2x1bW4iLCJDT1BZX1RBQkxFX0NPTFVNTiIsInVwZGF0ZVZpc0RhdGEiLCJkYXRhc2V0cyIsIm9wdGlvbnMiLCJVUERBVEVfVklTX0RBVEEiLCJyZW5hbWVEYXRhc2V0IiwibGFiZWwiLCJSRU5BTUVfREFUQVNFVCIsInRvZ2dsZUZpbHRlckFuaW1hdGlvbiIsIlRPR0dMRV9GSUxURVJfQU5JTUFUSU9OIiwidXBkYXRlRmlsdGVyQW5pbWF0aW9uU3BlZWQiLCJzcGVlZCIsIlVQREFURV9GSUxURVJfQU5JTUFUSU9OX1NQRUVEIiwic2V0TGF5ZXJBbmltYXRpb25UaW1lIiwiU0VUX0xBWUVSX0FOSU1BVElPTl9USU1FIiwidXBkYXRlTGF5ZXJBbmltYXRpb25TcGVlZCIsIlVQREFURV9MQVlFUl9BTklNQVRJT05fU1BFRUQiLCJ0b2dnbGVMYXllckFuaW1hdGlvbiIsIlRPR0dMRV9MQVlFUl9BTklNQVRJT04iLCJ0b2dnbGVMYXllckFuaW1hdGlvbkNvbnRyb2wiLCJUT0dHTEVfTEFZRVJfQU5JTUFUSU9OX0NPTlRST0wiLCJlbmxhcmdlRmlsdGVyIiwiRU5MQVJHRV9GSUxURVIiLCJ0b2dnbGVGaWx0ZXJGZWF0dXJlIiwiVE9HR0xFX0ZJTFRFUl9GRUFUVVJFIiwib25MYXllckhvdmVyIiwiaW5mbyIsIkxBWUVSX0hPVkVSIiwib25MYXllckNsaWNrIiwiTEFZRVJfQ0xJQ0siLCJvbk1hcENsaWNrIiwiTUFQX0NMSUNLIiwib25Nb3VzZU1vdmUiLCJldnQiLCJNT1VTRV9NT1ZFIiwidG9nZ2xlTGF5ZXJGb3JNYXAiLCJtYXBJbmRleCIsImxheWVySWQiLCJUT0dHTEVfTEFZRVJfRk9SX01BUCIsInNldEZpbHRlclBsb3QiLCJuZXdQcm9wIiwiU0VUX0ZJTFRFUl9QTE9UIiwic2V0TWFwSW5mbyIsIlNFVF9NQVBfSU5GTyIsImxvYWRGaWxlcyIsImZpbGVzIiwib25GaW5pc2giLCJMT0FEX0ZJTEVTIiwibG9hZE5leHRGaWxlIiwiTE9BRF9ORVhUX0ZJTEUiLCJsb2FkRmlsZXNTdWNjZXNzIiwicmVzdWx0IiwiTE9BRF9GSUxFU19TVUNDRVNTIiwibG9hZEZpbGVTdGVwU3VjY2VzcyIsIl9yZWYyIiwiZmlsZU5hbWUiLCJmaWxlQ2FjaGUiLCJMT0FEX0ZJTEVfU1RFUF9TVUNDRVNTIiwibG9hZEZpbGVzRXJyIiwiZXJyb3IiLCJMT0FEX0ZJTEVTX0VSUiIsInNldEZlYXR1cmVzIiwiZmVhdHVyZXMiLCJTRVRfRkVBVFVSRVMiLCJzZXRQb2x5Z29uRmlsdGVyTGF5ZXIiLCJsYXllciIsImZlYXR1cmUiLCJTRVRfUE9MWUdPTl9GSUxURVJfTEFZRVIiLCJzZXRTZWxlY3RlZEZlYXR1cmUiLCJTRVRfU0VMRUNURURfRkVBVFVSRSIsImRlbGV0ZUZlYXR1cmUiLCJERUxFVEVfRkVBVFVSRSIsInNldEVkaXRvck1vZGUiLCJTRVRfRURJVE9SX01PREUiLCJhcHBseUNQVUZpbHRlciIsIkFQUExZX0NQVV9GSUxURVIiLCJ0b2dnbGVFZGl0b3JWaXNpYmlsaXR5IiwiVE9HR0xFX0VESVRPUl9WSVNJQklMSVRZIiwibmV4dEZpbGVCYXRjaCIsInBheWxvYWQiLCJORVhUX0ZJTEVfQkFUQ0giLCJwcm9jZXNzRmlsZUNvbnRlbnQiLCJQUk9DRVNTX0ZJTEVfQ09OVEVOVCIsInNldExheWVyQW5pbWF0aW9uVGltZUNvbmZpZyIsIlNFVF9MQVlFUl9BTklNQVRJT05fVElNRV9DT05GSUciLCJzZXRGaWx0ZXJBbmltYXRpb25UaW1lQ29uZmlnIiwiU0VUX0ZJTFRFUl9BTklNQVRJT05fVElNRV9DT05GSUciLCJ2aXNTdGF0ZUFjdGlvbnMiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvYWN0aW9ucy92aXMtc3RhdGUtYWN0aW9ucy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgKGMpIDIwMjIgVWJlciBUZWNobm9sb2dpZXMsIEluYy5cbi8vXG4vLyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5XG4vLyBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsXG4vLyBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzXG4vLyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsXG4vLyBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXNcbi8vIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vL1xuLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW5cbi8vIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy9cbi8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1Jcbi8vIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLFxuLy8gRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFXG4vLyBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSXG4vLyBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLFxuLy8gT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTlxuLy8gVEhFIFNPRlRXQVJFLlxuXG4vLyB2aXMtc3RhdGUtcmVkdWNlclxuaW1wb3J0IEFjdGlvblR5cGVzIGZyb20gJ2NvbnN0YW50cy9hY3Rpb24tdHlwZXMnO1xuaW1wb3J0IHtBZGREYXRhVG9NYXBQYXlsb2FkfSBmcm9tICcuLi9hY3Rpb25zL2FjdGlvbnMnO1xuaW1wb3J0IHtGaWxlQ2FjaGVJdGVtfSBmcm9tICcuLi9wcm9jZXNzb3JzL3R5cGVzJztcbmltcG9ydCB7TGF5ZXIsIExheWVyQmFzZUNvbmZpZywgTGF5ZXJWaXNDb25maWd9IGZyb20gJ2xheWVycyc7XG5pbXBvcnQge0ZlYXR1cmUsIEludGVyYWN0aW9uQ29uZmlnfSBmcm9tICdyZWR1Y2Vycy92aXMtc3RhdGUtdXBkYXRlcnMnO1xuaW1wb3J0IHtWYWx1ZU9mLCBNZXJnZSwgUkdCQ29sb3IsIE5lc3RlZFBhcnRpYWx9IGZyb20gJy4uL3JlZHVjZXJzL3R5cGVzJztcbmltcG9ydCB7Q29sb3JVSX0gZnJvbSAnbGF5ZXJzL2xheWVyLWZhY3RvcnknO1xuLy8gVE9ETyAtIGltcG9ydCBMb2FkZXJPYmplY3QgdHlwZSBmcm9tIEBsb2FkZXJzLmdsL2NvcmUgd2hlbiBzdXBwb3J0ZWRcbi8vIFRPRE8gLSBpbXBvcnQgTG9hZE9wdGlvbnMgdHlwZSBmcm9tIEBsb2FkZXJzLmdsL2NvcmUgd2hlbiBzdXBwb3J0ZWRcblxuZXhwb3J0IHR5cGUgTGF5ZXJDb25maWdDaGFuZ2VVcGRhdGVyQWN0aW9uID0ge1xuICBvbGRMYXllcjogTGF5ZXI7XG4gIG5ld0NvbmZpZzogUGFydGlhbDxMYXllckJhc2VDb25maWc+O1xufTtcbi8qKlxuICogVXBkYXRlIGxheWVyIGJhc2UgY29uZmlnOiBkYXRhSWQsIGxhYmVsLCBjb2x1bW4sIGlzVmlzaWJsZVxuICogQHBhcmFtIG9sZExheWVyIC0gbGF5ZXIgdG8gYmUgdXBkYXRlZFxuICogQHBhcmFtIG5ld0NvbmZpZyAtIG5ldyBjb25maWcgdG8gYmUgbWVyZ2VkIHdpdGggb2xkIGNvbmZpZ1xuICogQHJldHVybnMgYWN0aW9uXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsYXllckNvbmZpZ0NoYW5nZShcbiAgb2xkTGF5ZXI6IExheWVyLFxuICBuZXdDb25maWc6IFBhcnRpYWw8TGF5ZXJCYXNlQ29uZmlnPlxuKTogTWVyZ2U8TGF5ZXJDb25maWdDaGFuZ2VVcGRhdGVyQWN0aW9uLCB7dHlwZTogdHlwZW9mIEFjdGlvblR5cGVzLkxBWUVSX0NPTkZJR19DSEFOR0V9PiB7XG4gIHJldHVybiB7XG4gICAgdHlwZTogQWN0aW9uVHlwZXMuTEFZRVJfQ09ORklHX0NIQU5HRSxcbiAgICBvbGRMYXllcixcbiAgICBuZXdDb25maWdcbiAgfTtcbn1cbmV4cG9ydCB0eXBlIExheWVyVGV4dExhYmVsQ2hhbmdlVXBkYXRlckFjdGlvbiA9IHtcbiAgb2xkTGF5ZXI6IExheWVyO1xuICBpZHg6IG51bWJlciB8ICdhbGwnO1xuICBwcm9wOiBzdHJpbmc7XG4gIHZhbHVlOiBhbnk7XG59O1xuXG4vKipcbiAqIFVwZGF0ZSBsYXllciB0ZXh0IGxhYmVsXG4gKiBAcGFyYW0gb2xkTGF5ZXIgLSBsYXllciB0byBiZSB1cGRhdGVkXG4gKiBAcGFyYW0gaWR4IC1gaWR4YCBvZiB0ZXh0IGxhYmVsIHRvIGJlIHVwZGF0ZWRcbiAqIEBwYXJhbSBwcm9wIC0gYHByb3BgIG9mIHRleHQgbGFiZWwsIGUsZywgYGFuY2hvcmAsIGBhbGlnbm1lbnRgLCBgY29sb3JgLCBgc2l6ZWAsIGBmaWVsZGBcbiAqIEBwYXJhbSB2YWx1ZSAtIG5ldyB2YWx1ZVxuICogQHJldHVybnMgYWN0aW9uXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsYXllclRleHRMYWJlbENoYW5nZShcbiAgb2xkTGF5ZXI6IExheWVyLFxuICBpZHg6IG51bWJlciB8ICdhbGwnLFxuICBwcm9wOiBzdHJpbmcsXG4gIHZhbHVlOiBhbnlcbik6IE1lcmdlPExheWVyVGV4dExhYmVsQ2hhbmdlVXBkYXRlckFjdGlvbiwge3R5cGU6IHR5cGVvZiBBY3Rpb25UeXBlcy5MQVlFUl9URVhUX0xBQkVMX0NIQU5HRX0+IHtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBBY3Rpb25UeXBlcy5MQVlFUl9URVhUX0xBQkVMX0NIQU5HRSxcbiAgICBvbGRMYXllcixcbiAgICBpZHgsXG4gICAgcHJvcCxcbiAgICB2YWx1ZVxuICB9O1xufVxuZXhwb3J0IHR5cGUgTGF5ZXJUeXBlQ2hhbmdlVXBkYXRlckFjdGlvbiA9IHtcbiAgb2xkTGF5ZXI6IExheWVyO1xuICBuZXdUeXBlOiBzdHJpbmc7XG59O1xuLyoqXG4gKiBVcGRhdGUgbGF5ZXIgdHlwZS4gUHJldmlld3MgbGF5ZXIgY29uZmlnIHdpbGwgYmUgY29waWVkIGlmIGFwcGxpY2FibGUuXG4gKiBAcGFyYW0gb2xkTGF5ZXIgLSBsYXllciB0byBiZSB1cGRhdGVkXG4gKiBAcGFyYW0gbmV3VHlwZSAtIG5ldyB0eXBlXG4gKiBAcmV0dXJucyBhY3Rpb25cbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxheWVyVHlwZUNoYW5nZShcbiAgb2xkTGF5ZXI6IExheWVyLFxuICBuZXdUeXBlOiBzdHJpbmdcbik6IE1lcmdlPExheWVyVHlwZUNoYW5nZVVwZGF0ZXJBY3Rpb24sIHt0eXBlOiB0eXBlb2YgQWN0aW9uVHlwZXMuTEFZRVJfVFlQRV9DSEFOR0V9PiB7XG4gIHJldHVybiB7XG4gICAgdHlwZTogQWN0aW9uVHlwZXMuTEFZRVJfVFlQRV9DSEFOR0UsXG4gICAgb2xkTGF5ZXIsXG4gICAgbmV3VHlwZVxuICB9O1xufVxuZXhwb3J0IHR5cGUgTGF5ZXJWaXN1YWxDaGFubmVsQ29uZmlnQ2hhbmdlVXBkYXRlckFjdGlvbiA9IHtcbiAgb2xkTGF5ZXI6IExheWVyO1xuICBuZXdDb25maWc6IFBhcnRpYWw8TGF5ZXJCYXNlQ29uZmlnPjtcbiAgY2hhbm5lbDogc3RyaW5nO1xufTtcbi8qKlxuICogVXBkYXRlIGxheWVyIHZpc3VhbCBjaGFubmVsXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVBY3Rpb25zXG4gKiBAcGFyYW0gb2xkTGF5ZXIgLSBsYXllciB0byBiZSB1cGRhdGVkXG4gKiBAcGFyYW0gbmV3Q29uZmlnIC0gbmV3IHZpc3VhbCBjaGFubmVsIGNvbmZpZ1xuICogQHBhcmFtIGNoYW5uZWwgLSBjaGFubmVsIHRvIGJlIHVwZGF0ZWRcbiAqIEByZXR1cm5zIGFjdGlvblxuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gbGF5ZXJWaXN1YWxDaGFubmVsQ29uZmlnQ2hhbmdlKFxuICBvbGRMYXllcjogTGF5ZXIsXG4gIG5ld0NvbmZpZzogUGFydGlhbDxMYXllckJhc2VDb25maWc+LFxuICBjaGFubmVsOiBzdHJpbmdcbik6IE1lcmdlPFxuICBMYXllclZpc3VhbENoYW5uZWxDb25maWdDaGFuZ2VVcGRhdGVyQWN0aW9uLFxuICB7dHlwZTogdHlwZW9mIEFjdGlvblR5cGVzLkxBWUVSX1ZJU1VBTF9DSEFOTkVMX0NIQU5HRX1cbj4ge1xuICByZXR1cm4ge1xuICAgIHR5cGU6IEFjdGlvblR5cGVzLkxBWUVSX1ZJU1VBTF9DSEFOTkVMX0NIQU5HRSxcbiAgICBvbGRMYXllcixcbiAgICBuZXdDb25maWcsXG4gICAgY2hhbm5lbFxuICB9O1xufVxuZXhwb3J0IHR5cGUgTGF5ZXJWaXNDb25maWdDaGFuZ2VVcGRhdGVyQWN0aW9uID0ge1xuICBvbGRMYXllcjogTGF5ZXI7XG4gIG5ld1Zpc0NvbmZpZzogUGFydGlhbDxMYXllclZpc0NvbmZpZz47XG59O1xuLyoqXG4gKiBVcGRhdGUgbGF5ZXIgYHZpc0NvbmZpZ2BcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZUFjdGlvbnNcbiAqIEBwYXJhbSBvbGRMYXllciAtIGxheWVyIHRvIGJlIHVwZGF0ZWRcbiAqIEBwYXJhbSBuZXdWaXNDb25maWcgLSBuZXcgdmlzQ29uZmlnIGFzIGEga2V5IHZhbHVlIG1hcDogZS5nLiBge29wYWNpdHk6IDAuOH1gXG4gKiBAcmV0dXJucyBhY3Rpb25cbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxheWVyVmlzQ29uZmlnQ2hhbmdlKFxuICBvbGRMYXllcjogTGF5ZXIsXG4gIG5ld1Zpc0NvbmZpZzogUGFydGlhbDxMYXllclZpc0NvbmZpZz5cbik6IE1lcmdlPExheWVyVmlzQ29uZmlnQ2hhbmdlVXBkYXRlckFjdGlvbiwge3R5cGU6IHR5cGVvZiBBY3Rpb25UeXBlcy5MQVlFUl9WSVNfQ09ORklHX0NIQU5HRX0+IHtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBBY3Rpb25UeXBlcy5MQVlFUl9WSVNfQ09ORklHX0NIQU5HRSxcbiAgICBvbGRMYXllcixcbiAgICBuZXdWaXNDb25maWdcbiAgfTtcbn1cbmV4cG9ydCB0eXBlIExheWVyQ29sb3JVSUNoYW5nZVVwZGF0ZXJBY3Rpb24gPSB7XG4gIG9sZExheWVyOiBMYXllcjtcbiAgcHJvcDogc3RyaW5nO1xuICBuZXdDb25maWc6IE5lc3RlZFBhcnRpYWw8Q29sb3JVST47XG59O1xuXG4vKipcbiAqIFNldCB0aGUgY29sb3IgcGFsZXR0ZSB1aSBmb3IgbGF5ZXIgY29sb3JcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZUFjdGlvbnNcbiAqIEBwYXJhbSBvbGRMYXllciAtIGxheWVyIHRvIGJlIHVwZGF0ZWRcbiAqIEBwYXJhbSBwcm9wIC0gd2hpY2ggY29sb3IgcHJvcFxuICogQHBhcmFtIG5ld0NvbmZpZyAtIHRvIGJlIG1lcmdlZFxuICogQHJldHVybnMgYWN0aW9uXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsYXllckNvbG9yVUlDaGFuZ2UoXG4gIG9sZExheWVyOiBMYXllcixcbiAgcHJvcDogc3RyaW5nLFxuICBuZXdDb25maWc6IE5lc3RlZFBhcnRpYWw8Q29sb3JVST5cbik6IE1lcmdlPExheWVyQ29sb3JVSUNoYW5nZVVwZGF0ZXJBY3Rpb24sIHt0eXBlOiB0eXBlb2YgQWN0aW9uVHlwZXMuTEFZRVJfQ09MT1JfVUlfQ0hBTkdFfT4ge1xuICByZXR1cm4ge1xuICAgIHR5cGU6IEFjdGlvblR5cGVzLkxBWUVSX0NPTE9SX1VJX0NIQU5HRSxcbiAgICBvbGRMYXllcixcbiAgICBwcm9wLFxuICAgIG5ld0NvbmZpZ1xuICB9O1xufVxuXG5leHBvcnQgdHlwZSBVcGRhdGVMYXllckJsZW5kaW5nVXBkYXRlckFjdGlvbiA9IHtcbiAgbW9kZTogJ2FkZGl0aXZlJyB8ICdub3JtYWwnIHwgJ3N1YnRyYWN0aXZlJztcbn07XG4vKipcbiAqIFVwZGF0ZSBsYXllciBibGVuZGluZyBtb2RlXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVBY3Rpb25zXG4gKiBAcGFyYW0gbW9kZSBvbmUgb2YgYGFkZGl0aXZlYCwgYG5vcm1hbGAgYW5kIGBzdWJ0cmFjdGl2ZWBcbiAqIEByZXR1cm5zIGFjdGlvblxuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gdXBkYXRlTGF5ZXJCbGVuZGluZyhcbiAgbW9kZTogJ2FkZGl0aXZlJyB8ICdub3JtYWwnIHwgJ3N1YnRyYWN0aXZlJ1xuKTogTWVyZ2U8VXBkYXRlTGF5ZXJCbGVuZGluZ1VwZGF0ZXJBY3Rpb24sIHt0eXBlOiB0eXBlb2YgQWN0aW9uVHlwZXMuVVBEQVRFX0xBWUVSX0JMRU5ESU5HfT4ge1xuICByZXR1cm4ge1xuICAgIHR5cGU6IEFjdGlvblR5cGVzLlVQREFURV9MQVlFUl9CTEVORElORyxcbiAgICBtb2RlXG4gIH07XG59XG5cbmV4cG9ydCB0eXBlIEludGVyYWN0aW9uQ29uZmlnQ2hhbmdlVXBkYXRlckFjdGlvbiA9IHtcbiAgY29uZmlnOiBWYWx1ZU9mPEludGVyYWN0aW9uQ29uZmlnPjtcbn07XG4vKipcbiAqIFVwZGF0ZSBgaW50ZXJhY3Rpb25Db25maWdgXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVBY3Rpb25zXG4gKiBAcGFyYW0gY29uZmlnIC0gbmV3IGNvbmZpZyBhcyBrZXkgdmFsdWUgbWFwOiBge3Rvb2x0aXA6IHtlbmFibGVkOiB0cnVlfX1gXG4gKiBAcmV0dXJucyBhY3Rpb25cbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGludGVyYWN0aW9uQ29uZmlnQ2hhbmdlKFxuICBjb25maWc6IFZhbHVlT2Y8SW50ZXJhY3Rpb25Db25maWc+XG4pOiBNZXJnZTxcbiAgSW50ZXJhY3Rpb25Db25maWdDaGFuZ2VVcGRhdGVyQWN0aW9uLFxuICB7dHlwZTogdHlwZW9mIEFjdGlvblR5cGVzLklOVEVSQUNUSU9OX0NPTkZJR19DSEFOR0V9XG4+IHtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBBY3Rpb25UeXBlcy5JTlRFUkFDVElPTl9DT05GSUdfQ0hBTkdFLFxuICAgIGNvbmZpZ1xuICB9O1xufVxuXG5leHBvcnQgdHlwZSBTZXRGaWx0ZXJVcGRhdGVyQWN0aW9uID0ge1xuICBpZHg6IG51bWJlcjtcbiAgcHJvcDogc3RyaW5nO1xuICB2YWx1ZTogYW55O1xuICB2YWx1ZUluZGV4PzogbnVtYmVyO1xufTtcbi8qKlxuICogVXBkYXRlIGZpbHRlciBwcm9wZXJ0eVxuICogQG1lbWJlcm9mIHZpc1N0YXRlQWN0aW9uc1xuICogQHBhcmFtIGlkeCAtYGlkeGAgb2YgZmlsdGVyIHRvIGJlIHVwZGF0ZWRcbiAqIEBwYXJhbSBwcm9wIC0gYHByb3BgIG9mIGZpbHRlciwgZSxnLCBgZGF0YUlkYCwgYG5hbWVgLCBgdmFsdWVgXG4gKiBAcGFyYW0gdmFsdWUgLSBuZXcgdmFsdWVcbiAqIEBwYXJhbSB2YWx1ZUluZGV4IC0gZGF0YUlkIGluZGV4XG4gKiBAcmV0dXJucyBhY3Rpb25cbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNldEZpbHRlcihcbiAgaWR4OiBudW1iZXIsXG4gIHByb3A6IHN0cmluZyxcbiAgdmFsdWU6IGFueSxcbiAgdmFsdWVJbmRleD86IG51bWJlclxuKTogTWVyZ2U8U2V0RmlsdGVyVXBkYXRlckFjdGlvbiwge3R5cGU6IHR5cGVvZiBBY3Rpb25UeXBlcy5TRVRfRklMVEVSfT4ge1xuICByZXR1cm4ge1xuICAgIHR5cGU6IEFjdGlvblR5cGVzLlNFVF9GSUxURVIsXG4gICAgaWR4LFxuICAgIHByb3AsXG4gICAgdmFsdWUsXG4gICAgdmFsdWVJbmRleFxuICB9O1xufVxuXG5leHBvcnQgdHlwZSBTZXRGaWx0ZXJBbmltYXRpb25UaW1lVXBkYXRlckFjdGlvbiA9IHtcbiAgaWR4OiBudW1iZXI7XG4gIHByb3A6IHN0cmluZztcbiAgdmFsdWU6IGFueTtcbiAgdmFsdWVJbmRleD86IG51bWJlcjtcbn07XG4vKipcbiAqIFNhbWUgYXMgVXBkYXRlIGZpbHRlclxuICogQG1lbWJlcm9mIHZpc1N0YXRlQWN0aW9uc1xuICogQHBhcmFtIGlkeCAtYGlkeGAgb2YgZmlsdGVyIHRvIGJlIHVwZGF0ZWRcbiAqIEBwYXJhbSBwcm9wIC0gYHByb3BgIG9mIGZpbHRlciwgZSxnLCBgZGF0YUlkYCwgYG5hbWVgLCBgdmFsdWVgXG4gKiBAcGFyYW0gdmFsdWUgLSBuZXcgdmFsdWVcbiAqIEBwYXJhbSB2YWx1ZUluZGV4IC0gZGF0YUlkIGluZGV4XG4gKiBAcmV0dXJucyBhY3Rpb25cbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNldEZpbHRlckFuaW1hdGlvblRpbWUoXG4gIGlkeDogbnVtYmVyLFxuICBwcm9wOiBzdHJpbmcsXG4gIHZhbHVlOiBhbnksXG4gIHZhbHVlSW5kZXg/OiBudW1iZXJcbik6IE1lcmdlPFxuICBTZXRGaWx0ZXJBbmltYXRpb25UaW1lVXBkYXRlckFjdGlvbixcbiAge3R5cGU6IHR5cGVvZiBBY3Rpb25UeXBlcy5TRVRfRklMVEVSX0FOSU1BVElPTl9USU1FfVxuPiB7XG4gIHJldHVybiB7XG4gICAgdHlwZTogQWN0aW9uVHlwZXMuU0VUX0ZJTFRFUl9BTklNQVRJT05fVElNRSxcbiAgICBpZHgsXG4gICAgcHJvcCxcbiAgICB2YWx1ZSxcbiAgICB2YWx1ZUluZGV4XG4gIH07XG59XG5cbmV4cG9ydCB0eXBlIFNldEZpbHRlckFuaW1hdGlvbldpbmRvd1VwZGF0ZXJBY3Rpb24gPSB7XG4gIGlkOiBzdHJpbmc7XG4gIGFuaW1hdGlvbldpbmRvdzogc3RyaW5nO1xufTtcbi8qKlxuICogU2FtZSBhcyBVcGRhdGUgZmlsdGVyXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVBY3Rpb25zXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXRGaWx0ZXJBbmltYXRpb25XaW5kb3coe1xuICBpZCxcbiAgYW5pbWF0aW9uV2luZG93XG59OiBTZXRGaWx0ZXJBbmltYXRpb25XaW5kb3dVcGRhdGVyQWN0aW9uKTogTWVyZ2U8XG4gIFNldEZpbHRlckFuaW1hdGlvbldpbmRvd1VwZGF0ZXJBY3Rpb24sXG4gIHt0eXBlOiB0eXBlb2YgQWN0aW9uVHlwZXMuU0VUX0ZJTFRFUl9BTklNQVRJT05fV0lORE9XfVxuPiB7XG4gIHJldHVybiB7XG4gICAgdHlwZTogQWN0aW9uVHlwZXMuU0VUX0ZJTFRFUl9BTklNQVRJT05fV0lORE9XLFxuICAgIGlkLFxuICAgIGFuaW1hdGlvbldpbmRvd1xuICB9O1xufVxuXG5leHBvcnQgdHlwZSBBZGRGaWx0ZXJVcGRhdGVyQWN0aW9uID0ge1xuICBkYXRhSWQ/OiBzdHJpbmcgfCBudWxsO1xufTtcbi8qKlxuICogQWRkIGEgbmV3IGZpbHRlclxuICogQG1lbWJlcm9mIHZpc1N0YXRlQWN0aW9uc1xuICogQHBhcmFtIGRhdGFJZCAtIGRhdGFzZXQgYGlkYCB0aGlzIG5ldyBmaWx0ZXIgaXMgYXNzb2NpYXRlZCB3aXRoXG4gKiBAcmV0dXJucyBhY3Rpb25cbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFkZEZpbHRlcihcbiAgZGF0YUlkOiBzdHJpbmcgfCBudWxsXG4pOiBNZXJnZTxBZGRGaWx0ZXJVcGRhdGVyQWN0aW9uLCB7dHlwZTogdHlwZW9mIEFjdGlvblR5cGVzLkFERF9GSUxURVJ9PiB7XG4gIHJldHVybiB7XG4gICAgdHlwZTogQWN0aW9uVHlwZXMuQUREX0ZJTFRFUixcbiAgICBkYXRhSWRcbiAgfTtcbn1cblxuZXhwb3J0IHR5cGUgQWRkTGF5ZXJVcGRhdGVyQWN0aW9uID0ge1xuICBjb25maWc/OiBvYmplY3Q7XG4gIGRhdGFzZXRJZD86IHN0cmluZztcbn07XG4vKipcbiAqIEFkZCBhIG5ldyBsYXllclxuICogQG1lbWJlcm9mIHZpc1N0YXRlQWN0aW9uc1xuICogQHBhcmFtIGNvbmZpZyAtIG5ldyBsYXllciBjb25maWdcbiAqIEBwYXJhbSBkYXRhc2V0SWQgLSBkYXRhc2V0IGlkIHVzZWQgZm9yIGNyZWF0aW5nIGFuIGVtcHR5IGxheWVyXG4gKiBAcmV0dXJucyBhY3Rpb25cbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFkZExheWVyKFxuICBjb25maWc/OiBvYmplY3QsXG4gIGRhdGFzZXRJZD86IHN0cmluZ1xuKTogTWVyZ2U8QWRkTGF5ZXJVcGRhdGVyQWN0aW9uLCB7dHlwZTogdHlwZW9mIEFjdGlvblR5cGVzLkFERF9MQVlFUn0+IHtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBBY3Rpb25UeXBlcy5BRERfTEFZRVIsXG4gICAgY29uZmlnLFxuICAgIGRhdGFzZXRJZFxuICB9O1xufVxuXG5leHBvcnQgdHlwZSBSZW9yZGVyTGF5ZXJVcGRhdGVyQWN0aW9uID0ge1xuICBvcmRlcjogbnVtYmVyW107XG59O1xuLyoqXG4gKiBSZW9yZGVyIGxheWVyLCBvcmRlciBpcyBhbiBhcnJheSBvZiBsYXllciBpbmRleGVzLCBpbmRleCAwIHdpbGwgYmUgdGhlIG9uZSBhdCB0aGUgYm90dG9tXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVBY3Rpb25zXG4gKiBAcGFyYW0gb3JkZXIgYW4gYXJyYXkgb2YgbGF5ZXIgaW5kZXhlc1xuICogQHJldHVybnMgYWN0aW9uXG4gKiBAcHVibGljXG4gKiBAZXhhbXBsZVxuICpcbiAqIC8vIGJyaW5nIGBsYXllcnNbMV1gIGJlbG93IGBsYXllcnNbMF1gLCB0aGUgc2VxdWVuY2UgbGF5ZXJzIHdpbGwgYmUgcmVuZGVyZWQgaXMgYDFgLCBgMGAsIGAyYCwgYDNgLlxuICogLy8gYDFgIHdpbGwgYmUgYXQgdGhlIGJvdHRvbSwgYDNgIHdpbGwgYmUgYXQgdGhlIHRvcC5cbiAqIHRoaXMucHJvcHMuZGlzcGF0Y2gocmVvcmRlckxheWVyKFsxLCAwLCAyLCAzXSkpO1xuICovXG5leHBvcnQgZnVuY3Rpb24gcmVvcmRlckxheWVyKFxuICBvcmRlcjogbnVtYmVyW11cbik6IE1lcmdlPFJlb3JkZXJMYXllclVwZGF0ZXJBY3Rpb24sIHt0eXBlOiB0eXBlb2YgQWN0aW9uVHlwZXMuUkVPUkRFUl9MQVlFUn0+IHtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBBY3Rpb25UeXBlcy5SRU9SREVSX0xBWUVSLFxuICAgIG9yZGVyXG4gIH07XG59XG5cbmV4cG9ydCB0eXBlIFJlbW92ZUZpbHRlclVwZGF0ZXJBY3Rpb24gPSB7XG4gIGlkeDogbnVtYmVyO1xufTtcbi8qKlxuICogUmVtb3ZlIGEgZmlsdGVyIGZyb20gYHZpc1N0YXRlLmZpbHRlcnNgLCBvbmNlIGEgZmlsdGVyIGlzIHJlbW92ZWQsIGRhdGEgd2lsbCBiZSByZS1maWx0ZXJlZCBhbmQgbGF5ZXIgd2lsbCBiZSB1cGRhdGVkXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVBY3Rpb25zXG4gKiBAcGFyYW0gaWR4IGlkeCBvZiBmaWx0ZXIgdG8gYmUgcmVtb3ZlZFxuICogQHJldHVybnMgYWN0aW9uXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZW1vdmVGaWx0ZXIoXG4gIGlkeDogbnVtYmVyXG4pOiBNZXJnZTxSZW1vdmVGaWx0ZXJVcGRhdGVyQWN0aW9uLCB7dHlwZTogdHlwZW9mIEFjdGlvblR5cGVzLlJFTU9WRV9GSUxURVJ9PiB7XG4gIHJldHVybiB7XG4gICAgdHlwZTogQWN0aW9uVHlwZXMuUkVNT1ZFX0ZJTFRFUixcbiAgICBpZHhcbiAgfTtcbn1cblxuZXhwb3J0IHR5cGUgUmVtb3ZlTGF5ZXJVcGRhdGVyQWN0aW9uID0ge1xuICBpZHg6IG51bWJlcjtcbn07XG4vKipcbiAqIFJlbW92ZSBhIGxheWVyXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVBY3Rpb25zXG4gKiBAcGFyYW0gaWR4IGlkeCBvZiBsYXllciB0byBiZSByZW1vdmVkXG4gKiBAcmV0dXJucyBhY3Rpb25cbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlbW92ZUxheWVyKFxuICBpZHg6IG51bWJlclxuKTogTWVyZ2U8UmVtb3ZlTGF5ZXJVcGRhdGVyQWN0aW9uLCB7dHlwZTogdHlwZW9mIEFjdGlvblR5cGVzLlJFTU9WRV9MQVlFUn0+IHtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBBY3Rpb25UeXBlcy5SRU1PVkVfTEFZRVIsXG4gICAgaWR4XG4gIH07XG59XG5cbmV4cG9ydCB0eXBlIER1cGxpY2F0ZUxheWVyVXBkYXRlckFjdGlvbiA9IHtcbiAgaWR4OiBudW1iZXI7XG59O1xuLyoqXG4gKiBEdXBsaWNhdGUgYSBsYXllclxuICogQG1lbWJlcm9mIHZpc1N0YXRlQWN0aW9uc1xuICogQHBhcmFtIGlkeCBpZHggb2YgbGF5ZXIgdG8gYmUgZHVwbGljYXRlZFxuICogQHJldHVybnMgYWN0aW9uXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkdXBsaWNhdGVMYXllcihcbiAgaWR4OiBudW1iZXJcbik6IE1lcmdlPER1cGxpY2F0ZUxheWVyVXBkYXRlckFjdGlvbiwge3R5cGU6IHR5cGVvZiBBY3Rpb25UeXBlcy5EVVBMSUNBVEVfTEFZRVJ9PiB7XG4gIHJldHVybiB7XG4gICAgdHlwZTogQWN0aW9uVHlwZXMuRFVQTElDQVRFX0xBWUVSLFxuICAgIGlkeFxuICB9O1xufVxuXG5leHBvcnQgdHlwZSBSZW1vdmVEYXRhc2V0VXBkYXRlckFjdGlvbiA9IHtcbiAgZGF0YUlkOiBzdHJpbmc7XG59O1xuLyoqXG4gKiBSZW1vdmUgYSBkYXRhc2V0IGFuZCBhbGwgbGF5ZXJzLCBmaWx0ZXJzLCB0b29sdGlwIGNvbmZpZ3MgdGhhdCBiYXNlZCBvbiBpdFxuICogQG1lbWJlcm9mIHZpc1N0YXRlQWN0aW9uc1xuICogQHBhcmFtIGRhdGFJZCBkYXRhc2V0IGlkXG4gKiBAcmV0dXJucyBhY3Rpb25cbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlbW92ZURhdGFzZXQoXG4gIGRhdGFJZDogc3RyaW5nXG4pOiBNZXJnZTxSZW1vdmVEYXRhc2V0VXBkYXRlckFjdGlvbiwge3R5cGU6IHR5cGVvZiBBY3Rpb25UeXBlcy5SRU1PVkVfREFUQVNFVH0+IHtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBBY3Rpb25UeXBlcy5SRU1PVkVfREFUQVNFVCxcbiAgICBkYXRhSWRcbiAgfTtcbn1cblxuZXhwb3J0IHR5cGUgU2hvd0RhdGFzZXRUYWJsZVVwZGF0ZXJBY3Rpb24gPSB7XG4gIGRhdGFJZDogc3RyaW5nO1xufTtcbi8qKlxuICogRGlzcGxheSBkYXRhc2V0IHRhYmxlIGluIGEgbW9kYWxcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZUFjdGlvbnNcbiAqIEBwYXJhbSBkYXRhSWQgZGF0YXNldCBpZCB0byBzaG93IGluIHRhYmxlXG4gKiBAcmV0dXJucyBhY3Rpb25cbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNob3dEYXRhc2V0VGFibGUoXG4gIGRhdGFJZDogc3RyaW5nXG4pOiBNZXJnZTxTaG93RGF0YXNldFRhYmxlVXBkYXRlckFjdGlvbiwge3R5cGU6IHR5cGVvZiBBY3Rpb25UeXBlcy5TSE9XX0RBVEFTRVRfVEFCTEV9PiB7XG4gIHJldHVybiB7XG4gICAgdHlwZTogQWN0aW9uVHlwZXMuU0hPV19EQVRBU0VUX1RBQkxFLFxuICAgIGRhdGFJZFxuICB9O1xufVxuXG5leHBvcnQgdHlwZSBVcGRhdGVEYXRhc2V0Q29sb3JVcGRhdGVyID0ge1xuICBkYXRhSWQ6IHN0cmluZztcbiAgbmV3Q29sb3I6IFJHQkNvbG9yO1xufTtcbi8qKlxuICogVXBkYXRlIGRhdGFzZXQgY29sb3IgdG8gY3VzdG9tIGJ5IG1lYW5zIG9mIGNvbG9yIHBpY2tlclxuICogQG1lbWJlcm9mIHZpc1N0YXRlQWN0aW9uc1xuICogQHBhcmFtIGRhdGFJZCBkYXRhc2V0IGBpZGAgdGhpcyBjdXN0b20gY29sb3IgaXMgYXNzb2NpYXRlZCB3aXRoXG4gKiBAcGFyYW0gbmV3Q29sb3IgY3VzdG9tIGNvbG9yIGluIFJHQmZvcm1hdFxuICogQHJldHVybnMgYWN0aW9uXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1cGRhdGVUYWJsZUNvbG9yKFxuICBkYXRhSWQ6IHN0cmluZyxcbiAgbmV3Q29sb3I6IFJHQkNvbG9yXG4pOiBNZXJnZTxVcGRhdGVEYXRhc2V0Q29sb3JVcGRhdGVyLCB7dHlwZTogdHlwZW9mIEFjdGlvblR5cGVzLlVQREFURV9UQUJMRV9DT0xPUn0+IHtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBBY3Rpb25UeXBlcy5VUERBVEVfVEFCTEVfQ09MT1IsXG4gICAgZGF0YUlkLFxuICAgIG5ld0NvbG9yXG4gIH07XG59XG5cbmV4cG9ydCB0eXBlIFNvcnRUYWJsZUNvbHVtblVwZGF0ZXJBY3Rpb24gPSB7XG4gIGRhdGFJZDogc3RyaW5nO1xuICBjb2x1bW46IHN0cmluZztcbiAgbW9kZT86IHN0cmluZztcbn07XG4vKipcbiAqIFNvcnQgZGF0YXNldCBjb2x1bW4sIGZvciB0YWJsZSBkaXNwbGF5XG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVBY3Rpb25zXG4gKiBAcGFyYW0gZGF0YUlkXG4gKiBAcGFyYW0gY29sdW1uXG4gKiBAcGFyYW0gbW9kZVxuICogQHJldHVybnMgYWN0aW9uXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzb3J0VGFibGVDb2x1bW4oXG4gIGRhdGFJZDogc3RyaW5nLFxuICBjb2x1bW46IHN0cmluZyxcbiAgbW9kZT86IHN0cmluZ1xuKTogTWVyZ2U8U29ydFRhYmxlQ29sdW1uVXBkYXRlckFjdGlvbiwge3R5cGU6IHR5cGVvZiBBY3Rpb25UeXBlcy5TT1JUX1RBQkxFX0NPTFVNTn0+IHtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBBY3Rpb25UeXBlcy5TT1JUX1RBQkxFX0NPTFVNTixcbiAgICBkYXRhSWQsXG4gICAgY29sdW1uLFxuICAgIG1vZGVcbiAgfTtcbn1cblxuZXhwb3J0IHR5cGUgUGluVGFibGVDb2x1bW5VcGRhdGVyQWN0aW9uID0ge1xuICBkYXRhSWQ6IHN0cmluZztcbiAgY29sdW1uOiBzdHJpbmc7XG59O1xuLyoqXG4gKiBQaW4gZGF0YXNldCBjb2x1bW4sIGZvciB0YWJsZSBkaXNwbGF5XG4gKiBAcGFyYW0gZGF0YUlkXG4gKiBAcGFyYW0gY29sdW1uXG4gKiBAcmV0dXJucyBhY3Rpb25cbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBpblRhYmxlQ29sdW1uKFxuICBkYXRhSWQ6IHN0cmluZyxcbiAgY29sdW1uOiBzdHJpbmdcbik6IE1lcmdlPFBpblRhYmxlQ29sdW1uVXBkYXRlckFjdGlvbiwge3R5cGU6IHR5cGVvZiBBY3Rpb25UeXBlcy5QSU5fVEFCTEVfQ09MVU1OfT4ge1xuICByZXR1cm4ge1xuICAgIHR5cGU6IEFjdGlvblR5cGVzLlBJTl9UQUJMRV9DT0xVTU4sXG4gICAgZGF0YUlkLFxuICAgIGNvbHVtblxuICB9O1xufVxuXG5leHBvcnQgdHlwZSBDb3B5VGFibGVDb2x1bW5VcGRhdGVyQWN0aW9uID0ge1xuICBkYXRhSWQ6IHN0cmluZztcbiAgY29sdW1uOiBzdHJpbmc7XG59O1xuLyoqXG4gKiBDb3B5IGNvbHVtbiwgZm9yIHRhYmxlIGRpc3BsYXlcbiAqIEBwYXJhbSBkYXRhSWRcbiAqIEBwYXJhbSBjb2x1bW5cbiAqIEByZXR1cm5zIGFjdGlvblxuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gY29weVRhYmxlQ29sdW1uKFxuICBkYXRhSWQ6IHN0cmluZyxcbiAgY29sdW1uOiBzdHJpbmdcbik6IE1lcmdlPENvcHlUYWJsZUNvbHVtblVwZGF0ZXJBY3Rpb24sIHt0eXBlOiB0eXBlb2YgQWN0aW9uVHlwZXMuQ09QWV9UQUJMRV9DT0xVTU59PiB7XG4gIHJldHVybiB7XG4gICAgdHlwZTogQWN0aW9uVHlwZXMuQ09QWV9UQUJMRV9DT0xVTU4sXG4gICAgZGF0YUlkLFxuICAgIGNvbHVtblxuICB9O1xufVxuXG5leHBvcnQgdHlwZSBBZGREYXRhVG9NYXBVcGRhdGVyT3B0aW9ucyA9IHtcbiAgY2VudHJNYXA/OiBib29sZWFuO1xuICByZWFkT25seT86IGJvb2xlYW47XG4gIGtlZXBFeGlzdGluZ0NvbmZpZz86IGJvb2xlYW47XG59O1xuXG5leHBvcnQgdHlwZSBVcGRhdGVWaXNEYXRhVXBkYXRlckFjdGlvbiA9IHtcbiAgZGF0YXNldHM6IEFkZERhdGFUb01hcFBheWxvYWRbJ2RhdGFzZXRzJ107XG4gIG9wdGlvbnM6IEFkZERhdGFUb01hcFBheWxvYWRbJ29wdGlvbnMnXTtcbiAgY29uZmlnOiBBZGREYXRhVG9NYXBQYXlsb2FkWydjb25maWcnXTtcbn0gJiBBZGREYXRhVG9NYXBQYXlsb2FkO1xuLy8gKiBAcGFyYW0gZGF0YXNldC5pbmZvIC1pbmZvIG9mIGEgZGF0YXNldFxuLy8gKiBAcGFyYW0gZGF0YXNldC5pbmZvLmlkIC0gaWQgb2YgdGhpcyBkYXRhc2V0LiBJZiBjb25maWcgaXMgZGVmaW5lZCwgYGlkYCBzaG91bGQgbWF0Y2hlcyB0aGUgYGRhdGFJZGAgaW4gY29uZmlnLlxuLy8gKiBAcGFyYW0gZGF0YXNldC5pbmZvLmxhYmVsIC0gQSBkaXNwbGF5IG5hbWUgb2YgdGhpcyBkYXRhc2V0XG4vLyAqIEBwYXJhbSBkYXRhc2V0LmRhdGEgLSAqKipyZXF1aXJlZCoqIFRoZSBkYXRhIG9iamVjdCwgaW4gYSB0YWJ1bGFyIGZvcm1hdCB3aXRoIDIgcHJvcGVydGllcyBgZmllbGRzYCBhbmQgYHJvd3NgXG4vLyAqIEBwYXJhbSBkYXRhc2V0LmRhdGEuZmllbGRzIC0gKioqcmVxdWlyZWQqKiBBcnJheSBvZiBmaWVsZHMsXG4vLyAqIEBwYXJhbSBkYXRhc2V0LmRhdGEuZmllbGRzLm5hbWUgLSAqKipyZXF1aXJlZCoqIE5hbWUgb2YgdGhlIGZpZWxkLFxuLy8gKiBAcGFyYW0gZGF0YXNldC5kYXRhLnJvd3MgLSAqKipyZXF1aXJlZCoqIEFycmF5IG9mIHJvd3MsIGluIGEgdGFidWxhciBmb3JtYXQgd2l0aCBgZmllbGRzYCBhbmQgYHJvd3NgXG4vKipcbiAqIEFkZCBuZXcgZGF0YXNldCB0byBgdmlzU3RhdGVgLCB3aXRoIG9wdGlvbiB0byBsb2FkIGEgbWFwIGNvbmZpZyBhbG9uZyB3aXRoIHRoZSBkYXRhc2V0c1xuICogQG1lbWJlcm9mIHZpc1N0YXRlQWN0aW9uc1xuICogQHBhcmFtIGRhdGFzZXRzIC0gKioqcmVxdWlyZWQqKiBkYXRhc2V0cyBjYW4gYmUgYSBkYXRhc2V0IG9yIGFuIGFycmF5IG9mIGRhdGFzZXRzXG4gKiBFYWNoIGRhdGFzZXQgb2JqZWN0IG5lZWRzIHRvIGhhdmUgYGluZm9gIGFuZCBgZGF0YWAgcHJvcGVydHkuXG4gKiBAcGFyYW0ge29iamVjdH0gb3B0aW9uc1xuICogQHBhcmFtIG9wdGlvbnMuY2VudGVyTWFwIGBkZWZhdWx0OiB0cnVlYCBpZiBgY2VudGVyTWFwYCBpcyBzZXQgdG8gYHRydWVgIGtlcGxlci5nbCB3aWxsXG4gKiBwbGFjZSB0aGUgbWFwIHZpZXcgd2l0aGluIHRoZSBkYXRhIHBvaW50cyBib3VuZGFyaWVzXG4gKiBAcGFyYW0gb3B0aW9ucy5yZWFkT25seSBgZGVmYXVsdDogZmFsc2VgIGlmIGByZWFkT25seWAgaXMgc2V0IHRvIGB0cnVlYFxuICogdGhlIGxlZnQgc2V0dGluZyBwYW5lbCB3aWxsIGJlIGhpZGRlblxuICogQHBhcmFtIGNvbmZpZyB0aGlzIG9iamVjdCB3aWxsIGNvbnRhaW4gdGhlIGZ1bGwga2VwbGVyLmdsIGluc3RhbmNlIGNvbmZpZ3VyYXRpb24ge21hcFN0YXRlLCBtYXBTdHlsZSwgdmlzU3RhdGV9XG4gKiBAcmV0dXJucyBhY3Rpb25cbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVwZGF0ZVZpc0RhdGEoXG4gIGRhdGFzZXRzOiBBZGREYXRhVG9NYXBQYXlsb2FkWydkYXRhc2V0cyddLFxuICBvcHRpb25zOiBBZGREYXRhVG9NYXBQYXlsb2FkWydvcHRpb25zJ10sXG4gIGNvbmZpZzogQWRkRGF0YVRvTWFwUGF5bG9hZFsnY29uZmlnJ11cbik6IE1lcmdlPFVwZGF0ZVZpc0RhdGFVcGRhdGVyQWN0aW9uLCB7dHlwZTogdHlwZW9mIEFjdGlvblR5cGVzLlVQREFURV9WSVNfREFUQX0+IHtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBBY3Rpb25UeXBlcy5VUERBVEVfVklTX0RBVEEsXG4gICAgZGF0YXNldHMsXG4gICAgb3B0aW9ucyxcbiAgICBjb25maWdcbiAgfTtcbn1cblxuZXhwb3J0IHR5cGUgUmVuYW1lRGF0YXNldFVwZGF0ZXJBY3Rpb24gPSB7XG4gIGRhdGFJZDogc3RyaW5nO1xuICBsYWJlbDogc3RyaW5nO1xufTtcbi8qKlxuICogUmVuYW1lIGFuIGV4aXN0aW5nIGRhdGFzZXQgaW4gYHZpc1N0YXRlYFxuICogQG1lbWJlcm9mIHZpc1N0YXRlQWN0aW9uc1xuICogQHBhcmFtIGRhdGFJZCAtICoqKnJlcXVpcmVkKiogSWQgb2YgdGhlIGRhdGFzZXQgdG8gdXBkYXRlXG4gKiBAcGFyYW0gbGFiZWwgLSAqKipyZXF1aXJlZCoqIE5ldyBuYW1lIGZvciB0aGUgZGF0YXNldFxuICogQHJldHVybnMgYWN0aW9uXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZW5hbWVEYXRhc2V0KFxuICBkYXRhSWQ6IHN0cmluZyxcbiAgbGFiZWw6IHN0cmluZ1xuKTogTWVyZ2U8UmVuYW1lRGF0YXNldFVwZGF0ZXJBY3Rpb24sIHt0eXBlOiB0eXBlb2YgQWN0aW9uVHlwZXMuUkVOQU1FX0RBVEFTRVR9PiB7XG4gIHJldHVybiB7XG4gICAgdHlwZTogQWN0aW9uVHlwZXMuUkVOQU1FX0RBVEFTRVQsXG4gICAgZGF0YUlkLFxuICAgIGxhYmVsXG4gIH07XG59XG5cbmV4cG9ydCB0eXBlIFRvZ2dsZUZpbHRlckFuaW1hdGlvblVwZGF0ZXJBY3Rpb24gPSB7XG4gIGlkeDogbnVtYmVyO1xufTtcbi8qKlxuICogU3RhcnQgYW5kIGVuZCBmaWx0ZXIgYW5pbWF0aW9uXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVBY3Rpb25zXG4gKiBAcGFyYW0ge051bWJlcn0gaWR4IG9mIGZpbHRlclxuICogQHJldHVybnMgYWN0aW9uXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0b2dnbGVGaWx0ZXJBbmltYXRpb24oXG4gIGlkeDogbnVtYmVyXG4pOiBNZXJnZTxUb2dnbGVGaWx0ZXJBbmltYXRpb25VcGRhdGVyQWN0aW9uLCB7dHlwZTogdHlwZW9mIEFjdGlvblR5cGVzLlRPR0dMRV9GSUxURVJfQU5JTUFUSU9OfT4ge1xuICByZXR1cm4ge1xuICAgIHR5cGU6IEFjdGlvblR5cGVzLlRPR0dMRV9GSUxURVJfQU5JTUFUSU9OLFxuICAgIGlkeFxuICB9O1xufVxuXG5leHBvcnQgdHlwZSBVcGRhdGVGaWx0ZXJBbmltYXRpb25TcGVlZFVwZGF0ZXJBY3Rpb24gPSB7XG4gIGlkeDogbnVtYmVyO1xuICBzcGVlZDogbnVtYmVyO1xufTtcbi8qKlxuICogQ2hhbmdlIGZpbHRlciBhbmltYXRpb24gc3BlZWRcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZUFjdGlvbnNcbiAqIEBwYXJhbSBpZHggLSAgYGlkeGAgb2YgZmlsdGVyXG4gKiBAcGFyYW0gc3BlZWQgLSBgc3BlZWRgIHRvIGNoYW5nZSBpdCB0by4gYHNwZWVkYCBpcyBhIG11bHRpcGxpZXJcbiAqIEByZXR1cm5zIGFjdGlvblxuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gdXBkYXRlRmlsdGVyQW5pbWF0aW9uU3BlZWQoXG4gIGlkeDogbnVtYmVyLFxuICBzcGVlZDogbnVtYmVyXG4pOiBNZXJnZTxcbiAgVXBkYXRlRmlsdGVyQW5pbWF0aW9uU3BlZWRVcGRhdGVyQWN0aW9uLFxuICB7dHlwZTogdHlwZW9mIEFjdGlvblR5cGVzLlVQREFURV9GSUxURVJfQU5JTUFUSU9OX1NQRUVEfVxuPiB7XG4gIHJldHVybiB7XG4gICAgdHlwZTogQWN0aW9uVHlwZXMuVVBEQVRFX0ZJTFRFUl9BTklNQVRJT05fU1BFRUQsXG4gICAgaWR4LFxuICAgIHNwZWVkXG4gIH07XG59XG5cbmV4cG9ydCB0eXBlIFNldExheWVyQW5pbWF0aW9uVGltZVVwZGF0ZXJBY3Rpb24gPSB7XG4gIHZhbHVlOiBudW1iZXI7XG59O1xuLyoqXG4gKiBSZXNldCBhbmltYXRpb25cbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZUFjdGlvbnNcbiAqIEBwYXJhbSB2YWx1ZSAtICBDdXJyZW50IHZhbHVlIG9mIHRoZSBzbGlkZXJcbiAqIEByZXR1cm5zIGFjdGlvblxuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gc2V0TGF5ZXJBbmltYXRpb25UaW1lKFxuICB2YWx1ZTogbnVtYmVyXG4pOiBNZXJnZTxTZXRMYXllckFuaW1hdGlvblRpbWVVcGRhdGVyQWN0aW9uLCB7dHlwZTogdHlwZW9mIEFjdGlvblR5cGVzLlNFVF9MQVlFUl9BTklNQVRJT05fVElNRX0+IHtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBBY3Rpb25UeXBlcy5TRVRfTEFZRVJfQU5JTUFUSU9OX1RJTUUsXG4gICAgdmFsdWVcbiAgfTtcbn1cblxuZXhwb3J0IHR5cGUgVXBkYXRlTGF5ZXJBbmltYXRpb25TcGVlZFVwZGF0ZXJBY3Rpb24gPSB7XG4gIHNwZWVkOiBudW1iZXI7XG59O1xuLyoqXG4gKiB1cGRhdGUgdHJpcCBsYXllciBhbmltYXRpb24gc3BlZWRcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZUFjdGlvbnNcbiAqIEBwYXJhbSBzcGVlZCAtIGBzcGVlZGAgdG8gY2hhbmdlIGl0IHRvLiBgc3BlZWRgIGlzIGEgbXVsdGlwbGllclxuICogQHJldHVybnMgYWN0aW9uXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1cGRhdGVMYXllckFuaW1hdGlvblNwZWVkKFxuICBzcGVlZDogbnVtYmVyXG4pOiBNZXJnZTxcbiAgVXBkYXRlTGF5ZXJBbmltYXRpb25TcGVlZFVwZGF0ZXJBY3Rpb24sXG4gIHt0eXBlOiB0eXBlb2YgQWN0aW9uVHlwZXMuVVBEQVRFX0xBWUVSX0FOSU1BVElPTl9TUEVFRH1cbj4ge1xuICByZXR1cm4ge1xuICAgIHR5cGU6IEFjdGlvblR5cGVzLlVQREFURV9MQVlFUl9BTklNQVRJT05fU1BFRUQsXG4gICAgc3BlZWRcbiAgfTtcbn1cbmV4cG9ydCB0eXBlIFRvZ2dsZUxheWVyQW5pbWF0aW9uVXBkYXRlckFjdGlvbiA9IHt9O1xuLyoqXG4gKiBzdGFydCBlbmQgZW5kIGxheWVyIGFuaW1hdGlvblxuICogQG1lbWJlcm9mIHZpc1N0YXRlQWN0aW9uc1xuICogQHJldHVybnMgYWN0aW9uXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0b2dnbGVMYXllckFuaW1hdGlvbigpOiBNZXJnZTxcbiAgVG9nZ2xlTGF5ZXJBbmltYXRpb25VcGRhdGVyQWN0aW9uLFxuICB7dHlwZTogdHlwZW9mIEFjdGlvblR5cGVzLlRPR0dMRV9MQVlFUl9BTklNQVRJT059XG4+IHtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBBY3Rpb25UeXBlcy5UT0dHTEVfTEFZRVJfQU5JTUFUSU9OXG4gIH07XG59XG5cbmV4cG9ydCB0eXBlIFRvZ2dsZUxheWVyQW5pbWF0aW9uQ29udHJvbFVwZGF0ZXJBY3Rpb24gPSB7fTtcbi8qKlxuICogaGlkZSBhbmQgc2hvdyBsYXllciBhbmltYXRpb24gY29udHJvbFxuICogQG1lbWJlcm9mIHZpc1N0YXRlQWN0aW9uc1xuICogQHJldHVybnMgYWN0aW9uXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0b2dnbGVMYXllckFuaW1hdGlvbkNvbnRyb2woKTogTWVyZ2U8XG4gIFRvZ2dsZUxheWVyQW5pbWF0aW9uQ29udHJvbFVwZGF0ZXJBY3Rpb24sXG4gIHt0eXBlOiB0eXBlb2YgQWN0aW9uVHlwZXMuVE9HR0xFX0xBWUVSX0FOSU1BVElPTl9DT05UUk9MfVxuPiB7XG4gIHJldHVybiB7XG4gICAgdHlwZTogQWN0aW9uVHlwZXMuVE9HR0xFX0xBWUVSX0FOSU1BVElPTl9DT05UUk9MXG4gIH07XG59XG5cbmV4cG9ydCB0eXBlIEVubGFyZ2VGaWx0ZXJVcGRhdGVyQWN0aW9uID0ge1xuICBpZHg6IG51bWJlcjtcbn07XG4vKipcbiAqIFNob3cgbGFyZ2VyIHRpbWUgZmlsdGVyIGF0IGJvdHRvbSBmb3IgdGltZSBwbGF5YmFjayAoYXBwbHkgdG8gdGltZSBmaWx0ZXIgb25seSlcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZUFjdGlvbnNcbiAqIEBwYXJhbSBpZHggLSBpbmRleCBvZiBmaWx0ZXIgdG8gZW5sYXJnZVxuICogQHJldHVybnMgYWN0aW9uXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBlbmxhcmdlRmlsdGVyKFxuICBpZHg6IG51bWJlclxuKTogTWVyZ2U8RW5sYXJnZUZpbHRlclVwZGF0ZXJBY3Rpb24sIHt0eXBlOiB0eXBlb2YgQWN0aW9uVHlwZXMuRU5MQVJHRV9GSUxURVJ9PiB7XG4gIHJldHVybiB7XG4gICAgdHlwZTogQWN0aW9uVHlwZXMuRU5MQVJHRV9GSUxURVIsXG4gICAgaWR4XG4gIH07XG59XG5cbmV4cG9ydCB0eXBlIFRvZ2dsZUZpbHRlckZlYXR1cmVVcGRhdGVyQWN0aW9uID0ge1xuICBpZHg6IG51bWJlcjtcbn07XG4vKipcbiAqIFNob3cvaGlkZSBmaWx0ZXIgZmVhdHVyZSBvbiBtYXBcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZUFjdGlvbnNcbiAqIEBwYXJhbSBpZHggLSBpbmRleCBvZiBmaWx0ZXIgZmVhdHVyZSB0byBzaG93L2hpZGVcbiAqIEByZXR1cm4gYWN0aW9uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0b2dnbGVGaWx0ZXJGZWF0dXJlKFxuICBpZHg6IG51bWJlclxuKTogTWVyZ2U8VG9nZ2xlRmlsdGVyRmVhdHVyZVVwZGF0ZXJBY3Rpb24sIHt0eXBlOiB0eXBlb2YgQWN0aW9uVHlwZXMuVE9HR0xFX0ZJTFRFUl9GRUFUVVJFfT4ge1xuICByZXR1cm4ge1xuICAgIHR5cGU6IEFjdGlvblR5cGVzLlRPR0dMRV9GSUxURVJfRkVBVFVSRSxcbiAgICBpZHhcbiAgfTtcbn1cblxuZXhwb3J0IHR5cGUgT25MYXllckhvdmVyVXBkYXRlckFjdGlvbiA9IHtcbiAgaW5mbzoge3BpY2tlZD86IGJvb2xlYW59IHwgbnVsbDtcbn07XG4vKipcbiAqIFRyaWdnZXIgbGF5ZXIgaG92ZXIgZXZlbnQgd2l0aCBob3ZlcmVkIG9iamVjdFxuICogQG1lbWJlcm9mIHZpc1N0YXRlQWN0aW9uc1xuICogQHBhcmFtIGluZm8gLSBPYmplY3QgaG92ZXJlZCwgcmV0dXJuZWQgYnkgZGVjay5nbFxuICogQHJldHVybnMgYWN0aW9uXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBvbkxheWVySG92ZXIoXG4gIGluZm86IHtwaWNrZWQ/OiBib29sZWFufSB8IG51bGxcbik6IE1lcmdlPE9uTGF5ZXJIb3ZlclVwZGF0ZXJBY3Rpb24sIHt0eXBlOiB0eXBlb2YgQWN0aW9uVHlwZXMuTEFZRVJfSE9WRVJ9PiB7XG4gIHJldHVybiB7XG4gICAgdHlwZTogQWN0aW9uVHlwZXMuTEFZRVJfSE9WRVIsXG4gICAgaW5mb1xuICB9O1xufVxuXG5leHBvcnQgdHlwZSBPbkxheWVyQ2xpY2tVcGRhdGVyQWN0aW9uID0ge1xuICBpbmZvOiB7cGlja2VkPzogYm9vbGVhbn0gfCBudWxsO1xufTtcbi8qKlxuICogVHJpZ2dlciBsYXllciBjbGljayBldmVudCB3aXRoIGNsaWNrZWQgb2JqZWN0XG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVBY3Rpb25zXG4gKiBAcGFyYW0gaW5mbyAtIE9iamVjdCBjbGlja2VkLCByZXR1cm5lZCBieSBkZWNrLmdsXG4gKiBAcmV0dXJucyBhY3Rpb25cbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG9uTGF5ZXJDbGljayhcbiAgaW5mbzoge3BpY2tlZD86IGJvb2xlYW59IHwgbnVsbFxuKTogTWVyZ2U8T25MYXllckNsaWNrVXBkYXRlckFjdGlvbiwge3R5cGU6IHR5cGVvZiBBY3Rpb25UeXBlcy5MQVlFUl9DTElDS30+IHtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBBY3Rpb25UeXBlcy5MQVlFUl9DTElDSyxcbiAgICBpbmZvXG4gIH07XG59XG5cbmV4cG9ydCB0eXBlIE9uTWFwQ2xpY2tVcGRhdGVyQWN0aW9uID0ge307XG4vKipcbiAqIFRyaWdnZXIgbWFwIGNsaWNrIGV2ZW50LCB1bnNlbGVjdCBjbGlja2VkIG9iamVjdFxuICogQG1lbWJlcm9mIHZpc1N0YXRlQWN0aW9uc1xuICogQHJldHVybnMgYWN0aW9uXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBvbk1hcENsaWNrKCk6IE1lcmdlPE9uTWFwQ2xpY2tVcGRhdGVyQWN0aW9uLCB7dHlwZTogdHlwZW9mIEFjdGlvblR5cGVzLk1BUF9DTElDS30+IHtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBBY3Rpb25UeXBlcy5NQVBfQ0xJQ0tcbiAgfTtcbn1cblxuZXhwb3J0IHR5cGUgT25Nb3VzZU1vdmVVcGRhdGVyQWN0aW9uID0ge1xuICBldnQ7XG59O1xuLyoqXG4gKiBUcmlnZ2VyIG1hcCBtb3VzZSBtb3ZlZXZlbnQsIHBheWxvYWQgd291bGQgYmVcbiAqIFJlYWN0LW1hcC1nbCBQb2ludGVyRXZlbnRcbiAqIGh0dHBzOi8vdWJlci5naXRodWIuaW8vcmVhY3QtbWFwLWdsLyMvZG9jdW1lbnRhdGlvbi9hcGktcmVmZXJlbmNlL3BvaW50ZXItZXZlbnRcbiAqXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVBY3Rpb25zXG4gKiBAcGFyYW0gZXZ0IC0gUG9pbnRlckV2ZW50XG4gKiBAcmV0dXJucyBhY3Rpb25cbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG9uTW91c2VNb3ZlKFxuICBldnRcbik6IE1lcmdlPE9uTW91c2VNb3ZlVXBkYXRlckFjdGlvbiwge3R5cGU6IHR5cGVvZiBBY3Rpb25UeXBlcy5NT1VTRV9NT1ZFfT4ge1xuICByZXR1cm4ge1xuICAgIHR5cGU6IEFjdGlvblR5cGVzLk1PVVNFX01PVkUsXG4gICAgZXZ0XG4gIH07XG59XG5cbmV4cG9ydCB0eXBlIFRvZ2dsZUxheWVyRm9yTWFwVXBkYXRlckFjdGlvbiA9IHtcbiAgbWFwSW5kZXg6IG51bWJlcjtcbiAgbGF5ZXJJZDogc3RyaW5nO1xufTtcbi8qKlxuICogVG9nZ2xlIHZpc2liaWxpdHkgb2YgYSBsYXllciBpbiBhIHNwbGl0IG1hcFxuICogQG1lbWJlcm9mIHZpc1N0YXRlQWN0aW9uc1xuICogQHBhcmFtIG1hcEluZGV4IC0gaW5kZXggb2YgdGhlIHNwbGl0IG1hcFxuICogQHBhcmFtIGxheWVySWQgLSBpZCBvZiB0aGUgbGF5ZXJcbiAqIEByZXR1cm5zIGFjdGlvblxuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gdG9nZ2xlTGF5ZXJGb3JNYXAoXG4gIG1hcEluZGV4OiBudW1iZXIsXG4gIGxheWVySWQ6IHN0cmluZ1xuKTogTWVyZ2U8VG9nZ2xlTGF5ZXJGb3JNYXBVcGRhdGVyQWN0aW9uLCB7dHlwZTogdHlwZW9mIEFjdGlvblR5cGVzLlRPR0dMRV9MQVlFUl9GT1JfTUFQfT4ge1xuICByZXR1cm4ge1xuICAgIHR5cGU6IEFjdGlvblR5cGVzLlRPR0dMRV9MQVlFUl9GT1JfTUFQLFxuICAgIG1hcEluZGV4LFxuICAgIGxheWVySWRcbiAgfTtcbn1cblxuZXhwb3J0IHR5cGUgU2V0RmlsdGVyUGxvdFVwZGF0ZXJBY3Rpb24gPSB7XG4gIGlkeDogbnVtYmVyO1xuICBuZXdQcm9wOiBvYmplY3Q7XG4gIHZhbHVlSW5kZXg/OiBudW1iZXI7XG59O1xuLyoqXG4gKiBTZXQgdGhlIHByb3BlcnR5IG9mIGEgZmlsdGVyIHBsb3RcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZUFjdGlvbnNcbiAqIEBwYXJhbSBpZHhcbiAqIEBwYXJhbSBuZXdQcm9wIGtleSB2YWx1ZSBtYXBwaW5nIG9mIG5ldyBwcm9wIGB7eUF4aXM6ICdoaXN0b2dyYW0nfWBcbiAqIEBwYXJhbSB2YWx1ZUluZGV4IGRhdGFJZCBpbmRleFxuICogQHJldHVybnMgYWN0aW9uXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXRGaWx0ZXJQbG90KFxuICBpZHg6IG51bWJlcixcbiAgbmV3UHJvcDogb2JqZWN0LFxuICB2YWx1ZUluZGV4PzogbnVtYmVyXG4pOiBNZXJnZTxTZXRGaWx0ZXJQbG90VXBkYXRlckFjdGlvbiwge3R5cGU6IHR5cGVvZiBBY3Rpb25UeXBlcy5TRVRfRklMVEVSX1BMT1R9PiB7XG4gIHJldHVybiB7XG4gICAgdHlwZTogQWN0aW9uVHlwZXMuU0VUX0ZJTFRFUl9QTE9ULFxuICAgIGlkeCxcbiAgICBuZXdQcm9wLFxuICAgIHZhbHVlSW5kZXhcbiAgfTtcbn1cblxuZXhwb3J0IHR5cGUgU2V0TWFwSW5mb1VwZGF0ZXJBY3Rpb24gPSB7XG4gIGluZm86IGFueTtcbn07XG4vKipcbiAqIFNldCB0aGUgcHJvcGVydHkgb2YgYSBmaWx0ZXIgcGxvdFxuICogQG1lbWJlcm9mIHZpc1N0YXRlQWN0aW9uc1xuICogQHBhcmFtIGluZm9cbiAqIEByZXR1cm5zIGFjdGlvblxuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gc2V0TWFwSW5mbyhcbiAgaW5mbzogYW55XG4pOiBNZXJnZTxTZXRNYXBJbmZvVXBkYXRlckFjdGlvbiwge3R5cGU6IHR5cGVvZiBBY3Rpb25UeXBlcy5TRVRfTUFQX0lORk99PiB7XG4gIHJldHVybiB7XG4gICAgdHlwZTogQWN0aW9uVHlwZXMuU0VUX01BUF9JTkZPLFxuICAgIGluZm9cbiAgfTtcbn1cblxuZXhwb3J0IHR5cGUgTG9hZEZpbGVzVXBkYXRlckFjdGlvbiA9IHtcbiAgZmlsZXM6IEZpbGVbXTtcbiAgb25GaW5pc2g/KHJlc3VsdDogYW55KTogYW55O1xufTtcbi8qKlxuICogVHJpZ2dlciBmaWxlIGxvYWRpbmcgZGlzcGF0Y2ggYGFkZERhdGFUb01hcGAgaWYgc3VjY2VlZCwgb3IgYGxvYWRGaWxlc0VycmAgaWYgZmFpbGVkXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVBY3Rpb25zXG4gKiBAcGFyYW0gZmlsZXMgYXJyYXkgb2YgZmlsZWJsb2JcbiAqIEByZXR1cm5zIGFjdGlvblxuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gbG9hZEZpbGVzKFxuICBmaWxlczogRmlsZVtdLFxuICBvbkZpbmlzaD86IChyZXN1bHQ6IGFueSkgPT4gYW55XG4pOiBNZXJnZTxMb2FkRmlsZXNVcGRhdGVyQWN0aW9uLCB7dHlwZTogdHlwZW9mIEFjdGlvblR5cGVzLkxPQURfRklMRVN9PiB7XG4gIHJldHVybiB7XG4gICAgdHlwZTogQWN0aW9uVHlwZXMuTE9BRF9GSUxFUyxcbiAgICBmaWxlcyxcbiAgICBvbkZpbmlzaFxuICB9O1xufVxuXG4vKipcbiAqIENhbGxlZCB3aXRoIG5leHQgZmlsZSB0byBsb2FkXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVBY3Rpb25zXG4gKiBAcmV0dXJucyBhY3Rpb25cbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxvYWROZXh0RmlsZSgpOiB7dHlwZTogdHlwZW9mIEFjdGlvblR5cGVzLkxPQURfTkVYVF9GSUxFfSB7XG4gIHJldHVybiB7XG4gICAgdHlwZTogQWN0aW9uVHlwZXMuTE9BRF9ORVhUX0ZJTEVcbiAgfTtcbn1cblxuZXhwb3J0IHR5cGUgbG9hZEZpbGVzU3VjY2Vzc1VwZGF0ZXJBY3Rpb24gPSB7XG4gIHJlc3VsdDogRmlsZUNhY2hlSXRlbVtdO1xufTtcbi8qKlxuICogY2FsbGVkIHdoZW4gYWxsIGZpbGVzIGFyZSBwcm9jZXNzZWQgYW5kIGxvYWRlZFxuICogQG1lbWJlcm9mIHZpc1N0YXRlQWN0aW9uc1xuICogQHBhcmFtIHJlc3VsdFxuICogQHJldHVybnMgYWN0aW9uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsb2FkRmlsZXNTdWNjZXNzKFxuICByZXN1bHQ6IEZpbGVDYWNoZUl0ZW1bXVxuKTogTWVyZ2U8bG9hZEZpbGVzU3VjY2Vzc1VwZGF0ZXJBY3Rpb24sIHt0eXBlOiB0eXBlb2YgQWN0aW9uVHlwZXMuTE9BRF9GSUxFU19TVUNDRVNTfT4ge1xuICByZXR1cm4ge1xuICAgIHR5cGU6IEFjdGlvblR5cGVzLkxPQURfRklMRVNfU1VDQ0VTUyxcbiAgICByZXN1bHRcbiAgfTtcbn1cblxuZXhwb3J0IHR5cGUgTG9hZEZpbGVTdGVwU3VjY2Vzc0FjdGlvbiA9IHtcbiAgZmlsZU5hbWU6IHN0cmluZztcbiAgZmlsZUNhY2hlOiBGaWxlQ2FjaGVJdGVtW107XG59O1xuLyoqXG4gKiBjYWxsZWQgd2hlbiBzdWNjZXNzZnVsbHkgbG9hZGVkIG9uZSBmaWxlLCByZWFkeSB0byBtb3ZlIG9uIHRvIHRoZSBuZXh0IG9uZVxuICogQG1lbWJlcm9mIHZpc1N0YXRlQWN0aW9uc1xuICogQHBhcmFtIHJlc3VsdFxuICogQHJldHVybnMgYWN0aW9uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsb2FkRmlsZVN0ZXBTdWNjZXNzKHtcbiAgZmlsZU5hbWUsXG4gIGZpbGVDYWNoZVxufToge1xuICBmaWxlTmFtZTogc3RyaW5nO1xuICBmaWxlQ2FjaGU6IEZpbGVDYWNoZUl0ZW1bXTtcbn0pOiBNZXJnZTxMb2FkRmlsZVN0ZXBTdWNjZXNzQWN0aW9uLCB7dHlwZTogdHlwZW9mIEFjdGlvblR5cGVzLkxPQURfRklMRV9TVEVQX1NVQ0NFU1N9PiB7XG4gIHJldHVybiB7XG4gICAgdHlwZTogQWN0aW9uVHlwZXMuTE9BRF9GSUxFX1NURVBfU1VDQ0VTUyxcbiAgICBmaWxlTmFtZSxcbiAgICBmaWxlQ2FjaGVcbiAgfTtcbn1cblxuZXhwb3J0IHR5cGUgTG9hZEZpbGVzRXJyVXBkYXRlckFjdGlvbiA9IHtcbiAgZmlsZU5hbWU6IHN0cmluZztcbiAgZXJyb3I6IGFueTtcbn07XG4vKipcbiAqIFRyaWdnZXIgbG9hZGluZyBmaWxlIGVycm9yXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVBY3Rpb25zXG4gKiBAcGFyYW0gIGVycm9yXG4gKiBAcmV0dXJucyBhY3Rpb25cbiAqIEBwdWJsaWNcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gbG9hZEZpbGVzRXJyKFxuICBmaWxlTmFtZTogc3RyaW5nLFxuICBlcnJvcjogYW55XG4pOiBNZXJnZTxMb2FkRmlsZXNFcnJVcGRhdGVyQWN0aW9uLCB7dHlwZTogdHlwZW9mIEFjdGlvblR5cGVzLkxPQURfRklMRVNfRVJSfT4ge1xuICByZXR1cm4ge1xuICAgIHR5cGU6IEFjdGlvblR5cGVzLkxPQURfRklMRVNfRVJSLFxuICAgIGZpbGVOYW1lLFxuICAgIGVycm9yXG4gIH07XG59XG5cbmV4cG9ydCB0eXBlIFNldEZlYXR1cmVzVXBkYXRlckFjdGlvbiA9IHtcbiAgZmVhdHVyZXM6IEZlYXR1cmVbXTtcbn07XG4vKipcbiAqIFN0b3JlIGZlYXR1cmVzIHRvIHN0YXRlXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVBY3Rpb25zXG4gKiBAcGFyYW0gZmVhdHVyZXNcbiAqIEByZXR1cm5zIGFjdGlvblxuICovXG5leHBvcnQgZnVuY3Rpb24gc2V0RmVhdHVyZXMoXG4gIGZlYXR1cmVzOiBGZWF0dXJlW11cbik6IE1lcmdlPFNldEZlYXR1cmVzVXBkYXRlckFjdGlvbiwge3R5cGU6IHR5cGVvZiBBY3Rpb25UeXBlcy5TRVRfRkVBVFVSRVN9PiB7XG4gIHJldHVybiB7XG4gICAgdHlwZTogQWN0aW9uVHlwZXMuU0VUX0ZFQVRVUkVTLFxuICAgIGZlYXR1cmVzXG4gIH07XG59XG5cbmV4cG9ydCB0eXBlIFNldFBvbHlnb25GaWx0ZXJMYXllclVwZGF0ZXJBY3Rpb24gPSB7XG4gIGxheWVyOiBMYXllcjtcbiAgZmVhdHVyZTogRmVhdHVyZTtcbn07XG4vKipcbiAqIEl0IHdpbGwgYXBwbHkgdGhlIHByb3ZpZGUgZmVhdHVyZSBhcyBmaWx0ZXIgdG8gdGhlIGdpdmVuIGxheWVyLlxuICogSWYgdGhlIGdpdmVuIGZlYXR1cmUgaXMgYWxyZWFkeSBhcHBsaWVkIGFzIGZpbHRlciB0byB0aGUgbGF5ZXIsIGl0IHdpbGwgcmVtb3ZlIHRoZSBsYXllciBmcm9tIHRoZSBmaWx0ZXJcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZUFjdGlvbnNcbiAqIEBwYXJhbSBsYXllclxuICogQHBhcmFtIGZlYXR1cmVcbiAqIEByZXR1cm5zIGFjdGlvblxuICovXG5leHBvcnQgZnVuY3Rpb24gc2V0UG9seWdvbkZpbHRlckxheWVyKFxuICBsYXllcjogTGF5ZXIsXG4gIGZlYXR1cmU6IEZlYXR1cmVcbik6IE1lcmdlPFNldFBvbHlnb25GaWx0ZXJMYXllclVwZGF0ZXJBY3Rpb24sIHt0eXBlOiB0eXBlb2YgQWN0aW9uVHlwZXMuU0VUX1BPTFlHT05fRklMVEVSX0xBWUVSfT4ge1xuICByZXR1cm4ge1xuICAgIHR5cGU6IEFjdGlvblR5cGVzLlNFVF9QT0xZR09OX0ZJTFRFUl9MQVlFUixcbiAgICBsYXllcixcbiAgICBmZWF0dXJlXG4gIH07XG59XG5cbmV4cG9ydCB0eXBlIFNldFNlbGVjdGVkRmVhdHVyZVVwZGF0ZXJBY3Rpb24gPSB7XG4gIGZlYXR1cmU6IEZlYXR1cmU7XG59O1xuLyoqXG4gKiBTZXQgdGhlIGN1cnJlbnQgZmVhdHVyZSB0byBiZSBlZGl0ZWQvZGVsZXRlZFxuICogQG1lbWJlcm9mIHZpc1N0YXRlQWN0aW9uc1xuICogQHBhcmFtIGZlYXR1cmVcbiAqIEByZXR1cm5zIGFjdGlvblxuICovXG5leHBvcnQgZnVuY3Rpb24gc2V0U2VsZWN0ZWRGZWF0dXJlKFxuICBmZWF0dXJlOiBGZWF0dXJlXG4pOiBNZXJnZTxTZXRTZWxlY3RlZEZlYXR1cmVVcGRhdGVyQWN0aW9uLCB7dHlwZTogdHlwZW9mIEFjdGlvblR5cGVzLlNFVF9TRUxFQ1RFRF9GRUFUVVJFfT4ge1xuICByZXR1cm4ge1xuICAgIHR5cGU6IEFjdGlvblR5cGVzLlNFVF9TRUxFQ1RFRF9GRUFUVVJFLFxuICAgIGZlYXR1cmVcbiAgfTtcbn1cblxuZXhwb3J0IHR5cGUgRGVsZXRlRmVhdHVyZVVwZGF0ZXJBY3Rpb24gPSB7XG4gIGZlYXR1cmU6IEZlYXR1cmU7XG59O1xuLyoqXG4gKiBEZWxldGUgdGhlIGdpdmVuIGZlYXR1cmVcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZUFjdGlvbnNcbiAqIEBwYXJhbSBmZWF0dXJlXG4gKiBAcmV0dXJucyBhY3Rpb25cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRlbGV0ZUZlYXR1cmUoXG4gIGZlYXR1cmU6IEZlYXR1cmVcbik6IE1lcmdlPERlbGV0ZUZlYXR1cmVVcGRhdGVyQWN0aW9uLCB7dHlwZTogdHlwZW9mIEFjdGlvblR5cGVzLkRFTEVURV9GRUFUVVJFfT4ge1xuICByZXR1cm4ge1xuICAgIHR5cGU6IEFjdGlvblR5cGVzLkRFTEVURV9GRUFUVVJFLFxuICAgIGZlYXR1cmVcbiAgfTtcbn1cblxuZXhwb3J0IHR5cGUgU2V0RWRpdG9yTW9kZVVwZGF0ZXJBY3Rpb24gPSB7XG4gIG1vZGU6IHN0cmluZztcbn07XG4vKiogU2V0IHRoZSBtYXAgbW9kZVxuICogQG1lbWJlcm9mIHZpc1N0YXRlQWN0aW9uc1xuICogQHBhcmFtIG1vZGUgb25lIG9mIEVESVRPUl9NT0RFU1xuICogQHJldHVybnMgYWN0aW9uXG4gKiBAcHVibGljXG4gKiBAZXhhbXBsZVxuICogaW1wb3J0IHtzZXRNYXBNb2RlfSBmcm9tICdrZXBsZXIuZ2wvYWN0aW9ucyc7XG4gKiBpbXBvcnQge0VESVRPUl9NT0RFU30gZnJvbSAna2VwbGVyLmdsL2NvbnN0YW50cyc7XG4gKlxuICogdGhpcy5wcm9wcy5kaXNwYXRjaChzZXRNYXBNb2RlKEVESVRPUl9NT0RFUy5EUkFXX1BPTFlHT04pKTtcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNldEVkaXRvck1vZGUoXG4gIG1vZGU6IHN0cmluZ1xuKTogTWVyZ2U8U2V0RWRpdG9yTW9kZVVwZGF0ZXJBY3Rpb24sIHt0eXBlOiB0eXBlb2YgQWN0aW9uVHlwZXMuU0VUX0VESVRPUl9NT0RFfT4ge1xuICByZXR1cm4ge1xuICAgIHR5cGU6IEFjdGlvblR5cGVzLlNFVF9FRElUT1JfTU9ERSxcbiAgICBtb2RlXG4gIH07XG59XG5cbmV4cG9ydCB0eXBlIEFwcGx5Q1BVRmlsdGVyVXBkYXRlckFjdGlvbiA9IHtcbiAgZGF0YUlkOiBzdHJpbmcgfCBzdHJpbmdbXTtcbn07XG4vKipcbiAqIFRyaWdnZXIgQ1BVIGZpbHRlciBvZiBzZWxlY3RlZCBkYXRhc2V0XG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVBY3Rpb25zXG4gKiBAcGFyYW0gZGF0YUlkIC0gc2luZ2xlIGRhdGFJZCBvciBhbiBhcnJheSBvZiBkYXRhSWRzXG4gKiBAcmV0dXJucyBhY3Rpb25cbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFwcGx5Q1BVRmlsdGVyKFxuICBkYXRhSWQ6IHN0cmluZyB8IHN0cmluZ1tdXG4pOiBNZXJnZTxBcHBseUNQVUZpbHRlclVwZGF0ZXJBY3Rpb24sIHt0eXBlOiB0eXBlb2YgQWN0aW9uVHlwZXMuQVBQTFlfQ1BVX0ZJTFRFUn0+IHtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBBY3Rpb25UeXBlcy5BUFBMWV9DUFVfRklMVEVSLFxuICAgIGRhdGFJZFxuICB9O1xufVxuXG5leHBvcnQgdHlwZSBUb2dnbGVFZGl0b3JWaXNpYmlsaXR5VXBkYXRlckFjdGlvbiA9IHt9O1xuLyoqXG4gKiBUb2dnbGUgZWRpdG9yIGxheWVyIHZpc2liaWxpdHlcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZUFjdGlvbnNcbiAqIEByZXR1cm4gYWN0aW9uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0b2dnbGVFZGl0b3JWaXNpYmlsaXR5KCk6IE1lcmdlPFxuICBUb2dnbGVFZGl0b3JWaXNpYmlsaXR5VXBkYXRlckFjdGlvbixcbiAge3R5cGU6IHR5cGVvZiBBY3Rpb25UeXBlcy5UT0dHTEVfRURJVE9SX1ZJU0lCSUxJVFl9XG4+IHtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBBY3Rpb25UeXBlcy5UT0dHTEVfRURJVE9SX1ZJU0lCSUxJVFlcbiAgfTtcbn1cblxudHlwZSBGaWxlQ29udGVudCA9IHtcbiAgZmlsZU5hbWU6IHN0cmluZztcbiAgaGVhZGVyOiBzdHJpbmdbXTtcbiAgZGF0YTogYW55O1xufTtcbmV4cG9ydCB0eXBlIE5leHRGaWxlQmF0Y2hVcGRhdGVyQWN0aW9uID0ge1xuICBwYXlsb2FkOiB7XG4gICAgZ2VuOiBBc3luY0dlbmVyYXRvcjxGaWxlQ29udGVudD47XG4gICAgZmlsZU5hbWU6IHN0cmluZztcbiAgICBwcm9ncmVzcz86IGFueTtcbiAgICBhY2N1bXVsYXRlZD86IGFueTtcbiAgICBvbkZpbmlzaDogKHJlc3VsdDogYW55KSA9PiBhbnk7XG4gIH07XG59O1xuLyoqXG4gKiBQcm9jZXNzIHRoZSBuZXh0IGZpbGUgYmF0Y2hcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZUFjdGlvbnNcbiAqIEBwYXJhbSBwYXlsb2FkIC0gYmF0Y2ggcGF5bG9hZFxuICogQHJldHVybiBhY3Rpb25cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG5leHRGaWxlQmF0Y2goXG4gIHBheWxvYWQ6IE5leHRGaWxlQmF0Y2hVcGRhdGVyQWN0aW9uWydwYXlsb2FkJ11cbik6IE1lcmdlPE5leHRGaWxlQmF0Y2hVcGRhdGVyQWN0aW9uLCB7dHlwZTogdHlwZW9mIEFjdGlvblR5cGVzLk5FWFRfRklMRV9CQVRDSH0+IHtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBBY3Rpb25UeXBlcy5ORVhUX0ZJTEVfQkFUQ0gsXG4gICAgcGF5bG9hZFxuICB9O1xufVxuXG5leHBvcnQgdHlwZSBQcm9jZXNzRmlsZUNvbnRlbnRVcGRhdGVyQWN0aW9uID0ge1xuICBwYXlsb2FkOiB7XG4gICAgY29udGVudDogRmlsZUNvbnRlbnQ7XG4gICAgZmlsZUNhY2hlOiBGaWxlQ2FjaGVJdGVtW107XG4gIH07XG59O1xuLyoqXG4gKiBQcm9jZXNzIHRoZSBmaWxlIGNvbnRlbnRcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZUFjdGlvbnNcbiAqIEBwYXJhbSBwYXlsb2FkIC0gdGhlIGZpbGUgY29udGVudFxuICogQHJldHVybiBhY3Rpb25cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHByb2Nlc3NGaWxlQ29udGVudChcbiAgcGF5bG9hZDogUHJvY2Vzc0ZpbGVDb250ZW50VXBkYXRlckFjdGlvblsncGF5bG9hZCddXG4pOiBNZXJnZTxQcm9jZXNzRmlsZUNvbnRlbnRVcGRhdGVyQWN0aW9uLCB7dHlwZTogdHlwZW9mIEFjdGlvblR5cGVzLlBST0NFU1NfRklMRV9DT05URU5UfT4ge1xuICByZXR1cm4ge1xuICAgIHR5cGU6IEFjdGlvblR5cGVzLlBST0NFU1NfRklMRV9DT05URU5ULFxuICAgIHBheWxvYWRcbiAgfTtcbn1cblxuZXhwb3J0IHR5cGUgU2V0TGF5ZXJBbmltYXRpb25UaW1lQ29uZmlnQWN0aW9uID0ge1xuICBjb25maWc6IHtcbiAgICB0aW1lem9uZT86IHN0cmluZztcbiAgICB0aW1lRm9ybWF0Pzogc3RyaW5nO1xuICB9O1xufTtcbi8qKlxuICogU2V0IGxheWVyIGFuaW1hdGlvbiB0aW1lIGZvcm1hdCBhbmQgdGltZXpvbmVcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZUFjdGlvbnNcbiAqIEBwYXJhbSBjb25maWcgLSB7dGltZUZvcm1hdDogc3RyaW5nLCB0aW1lem9uZTogc3RyaW5nfVxuICogQHJldHVybiBhY3Rpb25cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNldExheWVyQW5pbWF0aW9uVGltZUNvbmZpZyhcbiAgY29uZmlnOiBTZXRMYXllckFuaW1hdGlvblRpbWVDb25maWdBY3Rpb25bJ2NvbmZpZyddXG4pOiBNZXJnZTxcbiAgU2V0TGF5ZXJBbmltYXRpb25UaW1lQ29uZmlnQWN0aW9uLFxuICB7dHlwZTogdHlwZW9mIEFjdGlvblR5cGVzLlNFVF9MQVlFUl9BTklNQVRJT05fVElNRV9DT05GSUd9XG4+IHtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBBY3Rpb25UeXBlcy5TRVRfTEFZRVJfQU5JTUFUSU9OX1RJTUVfQ09ORklHLFxuICAgIGNvbmZpZ1xuICB9O1xufVxuXG5leHBvcnQgdHlwZSBTZXRGaWx0ZXJBbmltYXRpb25UaW1lQ29uZmlnQWN0aW9uID0ge1xuICBpZHg6IG51bWJlcjtcbiAgY29uZmlnOiB7XG4gICAgdGltZXpvbmU/OiBzdHJpbmc7XG4gICAgdGltZUZvcm1hdD86IHN0cmluZztcbiAgfTtcbn07XG4vKipcbiAqIFNldCBGaWx0ZXIgYW5pbWF0aW9uIHRpbWUgZm9ybWF0IGFuZCB0aW1lem9uZVxuICogQG1lbWJlcm9mIHZpc1N0YXRlQWN0aW9uc1xuICogQHBhcmFtIGlkeFxuICogQHBhcmFtIGNvbmZpZ1xuICogQHJldHVybiBhY3Rpb25cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNldEZpbHRlckFuaW1hdGlvblRpbWVDb25maWcoXG4gIGlkeDogU2V0RmlsdGVyQW5pbWF0aW9uVGltZUNvbmZpZ0FjdGlvblsnaWR4J10sXG4gIGNvbmZpZzogU2V0RmlsdGVyQW5pbWF0aW9uVGltZUNvbmZpZ0FjdGlvblsnY29uZmlnJ11cbik6IE1lcmdlPFxuICBTZXRGaWx0ZXJBbmltYXRpb25UaW1lQ29uZmlnQWN0aW9uLFxuICB7dHlwZTogdHlwZW9mIEFjdGlvblR5cGVzLlNFVF9GSUxURVJfQU5JTUFUSU9OX1RJTUVfQ09ORklHfVxuPiB7XG4gIHJldHVybiB7XG4gICAgdHlwZTogQWN0aW9uVHlwZXMuU0VUX0ZJTFRFUl9BTklNQVRJT05fVElNRV9DT05GSUcsXG4gICAgaWR4LFxuICAgIGNvbmZpZ1xuICB9O1xufVxuXG4vKipcbiAqIFRoaXMgZGVjbGFyYXRpb24gaXMgbmVlZGVkIHRvIGdyb3VwIGFjdGlvbnMgaW4gZG9jc1xuICovXG4vKipcbiAqIEFjdGlvbnMgaGFuZGxlZCBtb3N0bHkgYnkgYHZpc1N0YXRlYCByZWR1Y2VyLlxuICogVGhleSBtYW5hZ2UgaG93IGRhdGEgaXMgcHJvY2Vzc2VkLCBmaWx0ZXJlZCBhbmQgZGlzcGxheWVkIG9uIHRoZSBtYXAgYnkgb3BlcmF0ZXMgb24gbGF5ZXJzLFxuICogZmlsdGVycyBhbmQgaW50ZXJhY3Rpb24gc2V0dGluZ3MuXG4gKlxuICogQHB1YmxpY1xuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBuby11bnVzZWQtdmFycyAqL1xuLy8gQHRzLWlnbm9yZVxuY29uc3QgdmlzU3RhdGVBY3Rpb25zID0gbnVsbDtcbi8qIGVzbGludC1lbmFibGUgbm8tdW51c2VkLXZhcnMgKi9cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFxQkEsSUFBQUEsWUFBQSxHQUFBQyxzQkFBQSxDQUFBQyxPQUFBO0FBckJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQVFBO0FBQ0E7O0FBTUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTyxTQUFTQyxpQkFBaUJBLENBQy9CQyxRQUFlLEVBQ2ZDLFNBQW1DLEVBQ29EO0VBQ3ZGLE9BQU87SUFDTEMsSUFBSSxFQUFFQyx1QkFBVyxDQUFDQyxtQkFBbUI7SUFDckNKLFFBQVEsRUFBUkEsUUFBUTtJQUNSQyxTQUFTLEVBQVRBO0VBQ0YsQ0FBQztBQUNIO0FBUUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ08sU0FBU0ksb0JBQW9CQSxDQUNsQ0wsUUFBZSxFQUNmTSxHQUFtQixFQUNuQkMsSUFBWSxFQUNaQyxLQUFVLEVBQ29GO0VBQzlGLE9BQU87SUFDTE4sSUFBSSxFQUFFQyx1QkFBVyxDQUFDTSx1QkFBdUI7SUFDekNULFFBQVEsRUFBUkEsUUFBUTtJQUNSTSxHQUFHLEVBQUhBLEdBQUc7SUFD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
|